summaryrefslogtreecommitdiff
path: root/actions
diff options
context:
space:
mode:
authorZach Copley <zach@status.net>2009-10-20 16:32:30 -0700
committerZach Copley <zach@status.net>2009-10-20 16:32:30 -0700
commit78e5a5980a21c04cfdacb993ca3c37bf65d21783 (patch)
tree6d4ef5e8b55ecd50607a7aebe556b961a37be842 /actions
parent5e536a66141fac332e77c5ea6e85aee6a9347ace (diff)
Extract out Facebook app stuff into a plugin
Diffstat (limited to 'actions')
-rw-r--r--actions/facebookhome.php275
-rw-r--r--actions/facebookinvite.php145
-rw-r--r--actions/facebooklogin.php101
-rw-r--r--actions/facebookremove.php67
-rw-r--r--actions/facebooksettings.php157
5 files changed, 0 insertions, 745 deletions
diff --git a/actions/facebookhome.php b/actions/facebookhome.php
deleted file mode 100644
index 70f205205..000000000
--- a/actions/facebookhome.php
+++ /dev/null
@@ -1,275 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-require_once INSTALLDIR.'/lib/facebookaction.php';
-
-class FacebookhomeAction extends FacebookAction
-{
-
- var $page = null;
-
- function prepare($argarray)
- {
- parent::prepare($argarray);
-
- $this->page = $this->trimmed('page');
-
- if (!$this->page) {
- $this->page = 1;
- }
-
- return true;
- }
-
- function handle($args)
- {
- parent::handle($args);
-
- // If the user has opted not to initially allow the app to have
- // Facebook status update permission, store that preference. Only
- // promt the user the first time she uses the app
- if ($this->arg('skip') || $args['fb_sig_request_method'] == 'GET') {
- $this->facebook->api_client->data_setUserPreference(
- FACEBOOK_PROMPTED_UPDATE_PREF, 'true');
- }
-
- if ($this->flink) {
-
- $this->user = $this->flink->getUser();
-
- // If this is the first time the user has started the app
- // prompt for Facebook status update permission
- if (!$this->facebook->api_client->users_hasAppPermission('publish_stream')) {
-
- if ($this->facebook->api_client->data_getUserPreference(
- FACEBOOK_PROMPTED_UPDATE_PREF) != 'true') {
- $this->getUpdatePermission();
- return;
- }
- }
-
- // Make sure the user's profile box has the lastest notice
- $notice = $this->user->getCurrentNotice();
- if ($notice) {
- $this->updateProfileBox($notice);
- }
-
- if ($this->arg('status_submit') == 'Send') {
- $this->saveNewNotice();
- }
-
- // User is authenticated and has already been prompted once for
- // Facebook status update permission? Then show the main page
- // of the app
- $this->showPage();
-
- } else {
-
- // User hasn't authenticated yet, prompt for creds
- $this->login();
- }
-
- }
-
- function login()
- {
-
- $this->showStylesheets();
-
- $nickname = common_canonical_nickname($this->trimmed('nickname'));
- $password = $this->arg('password');
-
- $msg = null;
-
- if ($nickname) {
-
- if (common_check_user($nickname, $password)) {
-
- $user = User::staticGet('nickname', $nickname);
-
- if (!$user) {
- $this->showLoginForm(_("Server error - couldn't get user!"));
- }
-
- $flink = DB_DataObject::factory('foreign_link');
- $flink->user_id = $user->id;
- $flink->foreign_id = $this->fbuid;
- $flink->service = FACEBOOK_SERVICE;
- $flink->created = common_sql_now();
- $flink->set_flags(true, false, false, false);
-
- $flink_id = $flink->insert();
-
- // XXX: Do some error handling here
-
- $this->setDefaults();
-
- $this->getUpdatePermission();
- return;
-
- } else {
- $msg = _('Incorrect username or password.');
- }
- }
-
- $this->showLoginForm($msg);
- $this->showFooter();
-
- }
-
- function setDefaults()
- {
- $this->facebook->api_client->data_setUserPreference(
- FACEBOOK_PROMPTED_UPDATE_PREF, 'false');
- }
-
- function showNoticeForm()
- {
- $post_action = "$this->app_uri/index.php";
-
- $notice_form = new FacebookNoticeForm($this, $post_action, null,
- $post_action, $this->user);
- $notice_form->show();
- }
-
- function title()
- {
- if ($this->page > 1) {
- return sprintf(_("%s and friends, page %d"), $this->user->nickname, $this->page);
- } else {
- return sprintf(_("%s and friends"), $this->user->nickname);
- }
- }
-
- function showContent()
- {
- $notice = $this->user->noticeInbox(($this->page-1) * NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
-
- $nl = new NoticeList($notice, $this);
-
- $cnt = $nl->show();
-
- $this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
- $this->page, 'index.php', array('nickname' => $this->user->nickname));
- }
-
- function showNoticeList($notice)
- {
-
- $nl = new NoticeList($notice, $this);
- return $nl->show();
- }
-
- function getUpdatePermission() {
-
- $this->showStylesheets();
-
- $this->elementStart('div', array('class' => 'facebook_guide'));
-
- $instructions = sprintf(_('If you would like the %s app to automatically update ' .
- 'your Facebook status with your latest notice, you need ' .
- 'to give it permission.'), $this->app_name);
-
- $this->elementStart('p');
- $this->element('span', array('id' => 'permissions_notice'), $instructions);
- $this->elementEnd('p');
-
- $this->elementStart('form', array('method' => 'post',
- 'action' => "index.php",
- 'id' => 'facebook-skip-permissions'));
-
- $this->elementStart('ul', array('id' => 'fb-permissions-list'));
- $this->elementStart('li', array('id' => 'fb-permissions-item'));
-
- $next = urlencode("$this->app_uri/index.php");
- $api_key = common_config('facebook', 'apikey');
-
- $auth_url = 'http://www.facebook.com/authorize.php?api_key=' .
- $api_key . '&v=1.0&ext_perm=publish_stream&next=' . $next .
- '&next_cancel=' . $next . '&submit=skip';
-
- $this->elementStart('span', array('class' => 'facebook-button'));
- $this->element('a', array('href' => $auth_url),
- sprintf(_('Okay, do it!'), $this->app_name));
- $this->elementEnd('span');
-
- $this->elementEnd('li');
-
- $this->elementStart('li', array('id' => 'fb-permissions-item'));
- $this->submit('skip', _('Skip'));
- $this->elementEnd('li');
- $this->elementEnd('ul');
-
- $this->elementEnd('form');
- $this->elementEnd('div');
-
- }
-
- /**
- * Generate pagination links
- *
- * @param boolean $have_before is there something before?
- * @param boolean $have_after is there something after?
- * @param integer $page current page
- * @param string $action current action
- * @param array $args rest of query arguments
- *
- * @return nothing
- */
- function pagination($have_before, $have_after, $page, $action, $args=null)
- {
-
- // Does a little before-after block for next/prev page
-
- // XXX: Fix so this uses common_local_url() if possible.
-
- if ($have_before || $have_after) {
- $this->elementStart('div', array('class' => 'pagination'));
- $this->elementStart('dl', null);
- $this->element('dt', null, _('Pagination'));
- $this->elementStart('dd', null);
- $this->elementStart('ul', array('class' => 'nav'));
- }
- if ($have_before) {
- $pargs = array('page' => $page-1);
- $newargs = $args ? array_merge($args, $pargs) : $pargs;
- $this->elementStart('li', array('class' => 'nav_prev'));
- $this->element('a', array('href' => "$action?page=$newargs[page]", 'rel' => 'prev'),
- _('After'));
- $this->elementEnd('li');
- }
- if ($have_after) {
- $pargs = array('page' => $page+1);
- $newargs = $args ? array_merge($args, $pargs) : $pargs;
- $this->elementStart('li', array('class' => 'nav_next'));
- $this->element('a', array('href' => "$action?page=$newargs[page]", 'rel' => 'next'),
- _('Before'));
- $this->elementEnd('li');
- }
- if ($have_before || $have_after) {
- $this->elementEnd('ul');
- $this->elementEnd('dd');
- $this->elementEnd('dl');
- $this->elementEnd('div');
- }
- }
-
-}
diff --git a/actions/facebookinvite.php b/actions/facebookinvite.php
deleted file mode 100644
index 6dfc9d688..000000000
--- a/actions/facebookinvite.php
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
- exit(1);
-}
-
-require_once(INSTALLDIR.'/lib/facebookaction.php');
-
-class FacebookinviteAction extends FacebookAction
-{
-
- function handle($args)
- {
- parent::handle($args);
- $this->showForm();
- }
-
- /**
- * Wrapper for showing a page
- *
- * Stores an error and shows the page
- *
- * @param string $error Error, if any
- *
- * @return void
- */
-
- function showForm($error=null)
- {
- $this->error = $error;
- $this->showPage();
- }
-
- /**
- * Show the page content
- *
- * Either shows the registration form or, if registration was successful,
- * instructions for using the site.
- *
- * @return void
- */
-
- function showContent()
- {
- if ($this->arg('ids')) {
- $this->showSuccessContent();
- } else {
- $this->showFormContent();
- }
- }
-
- function showSuccessContent()
- {
-
- $this->element('h2', null, sprintf(_('Thanks for inviting your friends to use %s'),
- common_config('site', 'name')));
- $this->element('p', null, _('Invitations have been sent to the following users:'));
-
- $friend_ids = $_POST['ids']; // XXX: Hmm... is this the best way to access the list?
-
- $this->elementStart('ul', array('id' => 'facebook-friends'));
-
- foreach ($friend_ids as $friend) {
- $this->elementStart('li');
- $this->element('fb:profile-pic', array('uid' => $friend, 'size' => 'square'));
- $this->element('fb:name', array('uid' => $friend,
- 'capitalize' => 'true'));
- $this->elementEnd('li');
- }
-
- $this->elementEnd("ul");
-
- }
-
- function showFormContent()
- {
- $content = sprintf(_('You have been invited to %s'), common_config('site', 'name')) .
- htmlentities('<fb:req-choice url="' . $this->app_uri . '" label="Add"/>');
-
- $this->elementStart('fb:request-form', array('action' => 'invite.php',
- 'method' => 'post',
- 'invite' => 'true',
- 'type' => common_config('site', 'name'),
- 'content' => $content));
- $this->hidden('invite', 'true');
- $actiontext = sprintf(_('Invite your friends to use %s'), common_config('site', 'name'));
-
- $multi_params = array('showborder' => 'false');
- $multi_params['actiontext'] = $actiontext;
- $multi_params['bypass'] = 'cancel';
-
- // Get a list of users who are already using the app for exclusion
- $exclude_ids = $this->facebook->api_client->friends_getAppUsers();
- $exclude_ids_csv = null;
-
- // fbml needs these as a csv string, not an array
- if ($exclude_ids) {
- $exclude_ids_csv = implode(',', $exclude_ids);
- $multi_params['exclude_ids'] = $exclude_ids_csv;
- }
-
- $this->element('fb:multi-friend-selector', $multi_params);
- $this->elementEnd('fb:request-form');
-
- if ($exclude_ids) {
-
- $this->element('h2', null, sprintf(_('Friends already using %s:'),
- common_config('site', 'name')));
- $this->elementStart('ul', array('id' => 'facebook-friends'));
-
- foreach ($exclude_ids as $friend) {
- $this->elementStart('li');
- $this->element('fb:profile-pic', array('uid' => $friend, 'size' => 'square'));
- $this->element('fb:name', array('uid' => $friend,
- 'capitalize' => 'true'));
- $this->elementEnd('li');
- }
-
- $this->elementEnd("ul");
- }
- }
-
- function title()
- {
- return sprintf(_('Send invitations'));
- }
-
-}
diff --git a/actions/facebooklogin.php b/actions/facebooklogin.php
deleted file mode 100644
index 8ac2477ab..000000000
--- a/actions/facebooklogin.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-require_once(INSTALLDIR.'/lib/facebookaction.php');
-
-class FacebookinviteAction extends FacebookAction
-{
-
- function handle($args)
- {
- parent::handle($args);
-
- $this->error = $error;
-
- if ($this->flink) {
- if (!$this->facebook->api_client->users_hasAppPermission('publish_stream') &&
- $this->facebook->api_client->data_getUserPreference(
- FACEBOOK_PROMPTED_UPDATE_PREF) == 'true') {
-
- echo '<h1>REDIRECT TO HOME</h1>';
- }
- } else {
- $this->showPage();
- }
- }
-
-
- function showContent()
- {
-
- // If the user has opted not to initially allow the app to have
- // Facebook status update permission, store that preference. Only
- // promt the user the first time she uses the app
- if ($this->arg('skip')) {
- $this->facebook->api_client->data_setUserPreference(
- FACEBOOK_PROMPTED_UPDATE_PREF, 'true');
- }
-
- if ($this->flink) {
-
- $this->user = $this->flink->getUser();
-
- // If this is the first time the user has started the app
- // prompt for Facebook status update permission
- if (!$this->facebook->api_client->users_hasAppPermission('publish_stream')) {
-
- if ($this->facebook->api_client->data_getUserPreference(
- FACEBOOK_PROMPTED_UPDATE_PREF) != 'true') {
- $this->getUpdatePermission();
- return;
- }
- }
-
- } else {
- $this->showLoginForm();
- }
-
- }
-
- function showSuccessContent()
- {
-
-
-
- }
-
- function showFormContent()
- {
-
-
- }
-
- function title()
- {
- return sprintf(_('Login'));
- }
-
- function redirectHome()
- {
-
- }
-
-}
diff --git a/actions/facebookremove.php b/actions/facebookremove.php
deleted file mode 100644
index ae231c0fb..000000000
--- a/actions/facebookremove.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-require_once INSTALLDIR.'/lib/facebookaction.php';
-
-class FacebookremoveAction extends FacebookAction
-{
-
- function handle($args)
- {
- parent::handle($args);
-
- $secret = common_config('facebook', 'secret');
-
- $sig = '';
-
- ksort($_POST);
-
- foreach ($_POST as $key => $val) {
- if (substr($key, 0, 7) == 'fb_sig_') {
- $sig .= substr($key, 7) . '=' . $val;
- }
- }
-
- $sig .= $secret;
- $verify = md5($sig);
-
- if ($verify == $this->arg('fb_sig')) {
-
- $flink = Foreign_link::getByForeignID($this->arg('fb_sig_user'), 2);
-
- common_debug("Removing foreign link to Facebook - local user ID: $flink->user_id, Facebook ID: $flink->foreign_id");
-
- $result = $flink->delete();
-
- if (!$result) {
- common_log_db_error($flink, 'DELETE', __FILE__);
- $this->serverError(_('Couldn\'t remove Facebook user.'));
- return;
- }
-
- } else {
- # Someone bad tried to remove facebook link?
- common_log(LOG_ERR, "Someone from $_SERVER[REMOTE_ADDR] " .
- 'unsuccessfully tried to remove a foreign link to Facebook!');
- }
- }
-
-}
diff --git a/actions/facebooksettings.php b/actions/facebooksettings.php
deleted file mode 100644
index b2b1d6807..000000000
--- a/actions/facebooksettings.php
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
-
-require_once INSTALLDIR.'/lib/facebookaction.php';
-
-class FacebooksettingsAction extends FacebookAction
-{
-
- function handle($args)
- {
- parent::handle($args);
- $this->showPage();
- }
-
- /**
- * Show the page content
- *
- * Either shows the registration form or, if registration was successful,
- * instructions for using the site.
- *
- * @return void
- */
-
- function showContent()
- {
- if ($this->arg('save')) {
- $this->saveSettings();
- } else {
- $this->showForm();
- }
- }
-
- function saveSettings() {
-
- $noticesync = $this->arg('noticesync');
- $replysync = $this->arg('replysync');
- $prefix = $this->trimmed('prefix');
-
- $original = clone($this->flink);
- $this->flink->set_flags($noticesync, $replysync, false, false);
- $result = $this->flink->update($original);
-
- if ($prefix == '' || $prefix == '0') {
- // Facebook bug: saving empty strings to prefs now fails
- // http://bugs.developers.facebook.com/show_bug.cgi?id=7110
- $trimmed = $prefix . ' ';
- } else {
- $trimmed = substr($prefix, 0, 128);
- }
- $this->facebook->api_client->data_setUserPreference(FACEBOOK_NOTICE_PREFIX,
- $trimmed);
-
- if ($result === false) {
- $this->showForm(_('There was a problem saving your sync preferences!'));
- } else {
- $this->showForm(_('Sync preferences saved.'), true);
- }
- }
-
- function showForm($msg = null, $success = false) {
-
- if ($msg) {
- if ($success) {
- $this->element('fb:success', array('message' => $msg));
- } else {
- $this->element('fb:error', array('message' => $msg));
- }
- }
-
- if ($this->facebook->api_client->users_hasAppPermission('publish_stream')) {
-
- $this->elementStart('form', array('method' => 'post',
- 'id' => 'facebook_settings'));
-
- $this->elementStart('ul', 'form_data');
-
- $this->elementStart('li');
-
- $this->checkbox('noticesync', _('Automatically update my Facebook status with my notices.'),
- ($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND) : true);
-
- $this->elementEnd('li');
-
- $this->elementStart('li');
-
- $this->checkbox('replysync', _('Send "@" replies to Facebook.'),
- ($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) : true);
-
- $this->elementEnd('li');
-
- $this->elementStart('li');
-
- $prefix = trim($this->facebook->api_client->data_getUserPreference(FACEBOOK_NOTICE_PREFIX));
-
- $this->input('prefix', _('Prefix'),
- ($prefix) ? $prefix : null,
- _('A string to prefix notices with.'));
-
- $this->elementEnd('li');
-
- $this->elementStart('li');
-
- $this->submit('save', _('Save'));
-
- $this->elementEnd('li');
-
- $this->elementEnd('ul');
-
- $this->elementEnd('form');
-
- } else {
-
- $instructions = sprintf(_('If you would like %s to automatically update ' .
- 'your Facebook status with your latest notice, you need ' .
- 'to give it permission.'), $this->app_name);
-
- $this->elementStart('p');
- $this->element('span', array('id' => 'permissions_notice'), $instructions);
- $this->elementEnd('p');
-
- $this->elementStart('ul', array('id' => 'fb-permissions-list'));
- $this->elementStart('li', array('id' => 'fb-permissions-item'));
- $this->elementStart('fb:prompt-permission', array('perms' => 'publish_stream',
- 'next_fbjs' => 'document.setLocation(\'' . "$this->app_uri/settings.php" . '\')'));
- $this->element('span', array('class' => 'facebook-button'),
- sprintf(_('Allow %s to update my Facebook status'), common_config('site', 'name')));
- $this->elementEnd('fb:prompt-permission');
- $this->elementEnd('li');
- $this->elementEnd('ul');
- }
-
- }
-
- function title()
- {
- return _('Sync preferences');
- }
-
-}