. * * @category Settings * @package StatusNet * @author Zach Copley * @copyright 2009 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } require_once INSTALLDIR.'/lib/connectsettingsaction.php'; /** * Facebook Connect settings action * * @category Settings * @package StatusNet * @author Zach Copley * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ class FBConnectSettingsAction extends ConnectSettingsAction { /** * Title of the page * * @return string Title of the page */ function title() { return _m('Facebook Connect Settings'); } /** * Instructions for use * * @return instructions for use */ function getInstructions() { return _m('Manage how your account connects to Facebook'); } /** * Content area of the page * * Shows a form for uploading an avatar. * * @return void */ function showContent() { $user = common_current_user(); $flink = Foreign_link::getByUserID($user->id, FACEBOOK_CONNECT_SERVICE); $this->elementStart('form', array('method' => 'post', 'id' => 'form_settings_facebook', 'class' => 'form_settings', 'action' => common_local_url('FBConnectSettings'))); if (!$flink) { $this->element('p', 'instructions', _m('There is no Facebook user connected to this account.')); $this->element('fb:login-button', array('onlogin' => 'goto_login()', 'length' => 'long')); } else { $this->element('p', 'form_note', _m('Connected Facebook user')); $this->elementStart('p', array('class' => 'facebook-user-display')); $this->elementStart('fb:profile-pic', array('uid' => $flink->foreign_id, 'size' => 'small', 'linked' => 'true', 'facebook-logo' => 'true')); $this->elementEnd('fb:profile-pic'); $this->elementStart('fb:name', array('uid' => $flink->foreign_id, 'useyou' => 'false')); $this->elementEnd('fb:name'); $this->elementEnd('p'); $this->hidden('token', common_session_token()); $this->elementStart('fieldset'); $this->element('legend', null, _m('Disconnect my account from Facebook')); if (!$user->password) { $this->elementStart('p', array('class' => 'form_guide')); $this->text(_m('Disconnecting your Faceboook ' . 'would make it impossible to log in! Please ')); $this->element('a', array('href' => common_local_url('passwordsettings')), _m('set a password')); $this->text(_m(' first.')); $this->elementEnd('p'); } else { $note = 'Keep your %s account but disconnect from Facebook. ' . 'You\'ll use your %s password to log in.'; $site = common_config('site', 'name'); $this->element('p', 'instructions', sprintf($note, $site, $site)); $this->submit('disconnect', _m('Disconnect')); } $this->elementEnd('fieldset'); } $this->elementEnd('form'); } /** * Handle post * * Disconnects the current Facebook user from the current user's account * * @return void */ function handlePost() { // CSRF protection $token = $this->trimmed('token'); if (!$token || $token != common_session_token()) { $this->showForm(_m('There was a problem with your session token. '. 'Try again, please.')); return; } if ($this->arg('disconnect')) { $user = common_current_user(); $flink = Foreign_link::getByUserID($user->id, FACEBOOK_CONNECT_SERVICE); $result = $flink->delete(); if ($result === false) { common_log_db_error($user, 'DELETE', __FILE__); $this->serverError(_m('Couldn\'t delete link to Facebook.')); return; } try { // Clear FB Connect cookies out $facebook = getFacebook(); $facebook->clear_cookie_state(); } catch (Exception $e) { common_log(LOG_WARNING, 'Facebook Connect Plugin - ' . 'Couldn\'t clear Facebook cookies: ' . $e->getMessage()); } $this->showForm(_m('You have disconnected from Facebook.'), true); } else { $this->showForm(_m('Not sure what you\'re trying to do.')); return; } } }