X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FFacebook%2FFacebookPlugin.php;h=e877d300b6ea3610dfc6fe402dea9c7b516237c5;hb=071d6e72e0c3c7b1d9fe8d75f30a43831fe54edd;hp=de91bf24a12d2f9a8cfedf94b5518823ab56d94c;hpb=4de09d6bd4eab3259d42fa846e4dd31f2516a038;p=quix0rs-gnu-social.git diff --git a/plugins/Facebook/FacebookPlugin.php b/plugins/Facebook/FacebookPlugin.php index de91bf24a1..e877d300b6 100644 --- a/plugins/Facebook/FacebookPlugin.php +++ b/plugins/Facebook/FacebookPlugin.php @@ -22,7 +22,7 @@ * @category Plugin * @package StatusNet * @author Zach Copley - * @copyright 2009 StatusNet, Inc. + * @copyright 2009-2010 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/ */ @@ -32,12 +32,12 @@ if (!defined('STATUSNET')) { } define("FACEBOOK_CONNECT_SERVICE", 3); -define('FACEBOOKPLUGIN_VERSION', '0.9'); require_once INSTALLDIR . '/plugins/Facebook/facebookutil.php'; /** - * Facebook plugin to add a StatusNet Facebook application + * Facebook plugin to add a StatusNet Facebook canvas application + * and allow registration and authentication via Facebook Connect * * @category Plugin * @package StatusNet @@ -45,9 +45,54 @@ require_once INSTALLDIR . '/plugins/Facebook/facebookutil.php'; * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ - class FacebookPlugin extends Plugin { + const VERSION = STATUSNET_VERSION; + + /** + * Initializer for the plugin. + */ + + function initialize() + { + // Allow the key and secret to be passed in + // Control panel will override + if (isset($this->apikey)) { + $key = common_config('facebook', 'apikey'); + if (empty($key)) { + Config::save('facebook', 'apikey', $this->apikey); + } + } + + if (isset($this->secret)) { + $secret = common_config('facebook', 'secret'); + if (empty($secret)) { + Config::save( + 'facebook', + 'secret', + $this->secret + ); + } + } + } + + /** + * Check to see if there is an API key and secret defined + * for Facebook integration. + * + * @return boolean result + */ + static function hasKeys() + { + $apiKey = common_config('facebook', 'apikey'); + $apiSecret = common_config('facebook', 'secret'); + + if (!empty($apiKey) && !empty($apiSecret)) { + return true; + } + + return false; + } /** * Add Facebook app actions to the router table @@ -58,25 +103,27 @@ class FacebookPlugin extends Plugin * * @return boolean hook return */ - function onStartInitializeRouter($m) { + $m->connect('admin/facebook', array('action' => 'facebookadminpanel')); - // Facebook App stuff + if (self::hasKeys()) { + // Facebook App stuff - $m->connect('facebook/app', array('action' => 'facebookhome')); - $m->connect('facebook/app/index.php', array('action' => 'facebookhome')); - $m->connect('facebook/app/settings.php', - array('action' => 'facebooksettings')); - $m->connect('facebook/app/invite.php', array('action' => 'facebookinvite')); - $m->connect('facebook/app/remove', array('action' => 'facebookremove')); + $m->connect('facebook/app', array('action' => 'facebookhome')); + $m->connect('facebook/app/index.php', array('action' => 'facebookhome')); + $m->connect('facebook/app/settings.php', + array('action' => 'facebooksettings')); + $m->connect('facebook/app/invite.php', array('action' => 'facebookinvite')); + $m->connect('facebook/app/remove', array('action' => 'facebookremove')); - // Facebook Connect stuff + // Facebook Connect stuff - $m->connect('main/facebookconnect', array('action' => 'FBConnectAuth')); - $m->connect('main/facebooklogin', array('action' => 'FBConnectLogin')); - $m->connect('settings/facebook', array('action' => 'FBConnectSettings')); - $m->connect('xd_receiver.html', array('action' => 'FBC_XDReceiver')); + $m->connect('main/facebookconnect', array('action' => 'FBConnectAuth')); + $m->connect('main/facebooklogin', array('action' => 'FBConnectLogin')); + $m->connect('settings/facebook', array('action' => 'FBConnectSettings')); + $m->connect('xd_receiver.html', array('action' => 'FBC_XDReceiver')); + } return true; } @@ -89,7 +136,6 @@ class FacebookPlugin extends Plugin * @return boolean hook return * */ - function onAutoload($cls) { switch ($cls) { @@ -98,6 +144,7 @@ class FacebookPlugin extends Plugin case 'FacebookinviteAction': case 'FacebookremoveAction': case 'FacebooksettingsAction': + case 'FacebookadminpanelAction': include_once INSTALLDIR . '/plugins/Facebook/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; return false; @@ -114,11 +161,41 @@ class FacebookPlugin extends Plugin case 'FBCSettingsNav': include_once INSTALLDIR . '/plugins/Facebook/FBCSettingsNav.php'; return false; + case 'FacebookQueueHandler': + include_once INSTALLDIR . '/plugins/Facebook/facebookqueuehandler.php'; + return false; default: return true; } } + /** + * Add a Facebook tab to the admin panels + * + * @param Widget $nav Admin panel nav + * + * @return boolean hook value + */ + function onEndAdminPanelNav($nav) + { + if (AdminPanelAction::canAdmin('facebook')) { + + $action_name = $nav->action->trimmed('action'); + + $nav->out->menuItem( + common_local_url('facebookadminpanel'), + // TRANS: Menu item. + _m('MENU','Facebook'), + // TRANS: Tooltip for menu item "Facebook". + _m('Facebook integration configuration'), + $action_name == 'facebookadminpanel', + 'nav_facebook_admin_panel' + ); + } + + return true; + } + /** * Override normal HTML output to force the content type to * text/html and add in xmlns:fb @@ -127,12 +204,9 @@ class FacebookPlugin extends Plugin * * @return void */ - function onStartShowHTML($action) { - if ($this->reqFbScripts($action)) { - // XXX: Horrible hack to make Safari, FF2, and Chrome work with // Facebook Connect. These browser cannot use Facebook's // DOM parsing routines unless the mime type of the page is @@ -155,9 +229,7 @@ class FacebookPlugin extends Plugin 'lang' => $language)); return false; - } else { - return true; } } @@ -172,13 +244,12 @@ class FacebookPlugin extends Plugin * @return void * */ - function onEndShowScripts($action) { if ($this->reqFbScripts($action)) { $apikey = common_config('facebook', 'apikey'); - $plugin_path = common_path('plugins/Facebook'); + $plugin_path = 'plugins/Facebook'; $login_url = common_local_url('FBConnectAuth'); $logout_url = common_local_url('logout'); @@ -223,12 +294,10 @@ class FacebookPlugin extends Plugin $js = sprintf($js, $apikey, $login_url, $logout_url); // Compress the bugger down a bit - $js = str_replace(' ', '', $js); $action->inlineScript($js); } - } /** @@ -240,7 +309,6 @@ class FacebookPlugin extends Plugin * @return void * */ - function onEndShowFooter($action) { if ($this->reqFbScripts($action)) { @@ -257,7 +325,6 @@ class FacebookPlugin extends Plugin * @return void * */ - function onEndShowStatusNetStyles($action) { if ($this->reqFbScripts($action)) { @@ -274,12 +341,13 @@ class FacebookPlugin extends Plugin * * @return boolean true */ - function reqFbScripts($action) { + if (!self::hasKeys()) { + return false; + } // If you're logged in w/FB Connect, you always need the FB stuff - $fbuid = $this->loggedIn(); if (!empty($fbuid)) { @@ -287,7 +355,6 @@ class FacebookPlugin extends Plugin } // List of actions that require FB stuff - $needy = array('FBConnectLoginAction', 'FBConnectauthAction', 'FBConnectSettingsAction'); @@ -297,7 +364,6 @@ class FacebookPlugin extends Plugin } return false; - } /** @@ -305,7 +371,6 @@ class FacebookPlugin extends Plugin * * @return mixed $fbuid the Facebook ID of the logged in user, or null */ - function loggedIn() { $user = common_current_user(); @@ -317,12 +382,9 @@ class FacebookPlugin extends Plugin $fbuid = 0; if (!empty($flink)) { - try { - $facebook = getFacebook(); $fbuid = $facebook->get_loggedin_user(); - } catch (Exception $e) { common_log(LOG_WARNING, 'Facebook Connect Plugin - ' . 'Problem getting Facebook user: ' . @@ -346,47 +408,35 @@ class FacebookPlugin extends Plugin * @return void * */ - function onStartPrimaryNav($action) { - $user = common_current_user(); - - $connect = 'FBConnectSettings'; - if (common_config('xmpp', 'enabled')) { - $connect = 'imsettings'; - } else if (common_config('sms', 'enabled')) { - $connect = 'smssettings'; - } else if (common_config('twitter', 'enabled')) { - $connect = 'twittersettings'; - } - - if (!empty($user)) { - - $fbuid = $this->loggedIn(); + if (self::hasKeys()) { + $user = common_current_user(); + if (!empty($user)) { + $fbuid = $this->loggedIn(); - if (!empty($fbuid)) { + if (!empty($fbuid)) { + /* Default FB silhouette pic for FB users who haven't + uploaded a profile pic yet. */ - /* Default FB silhouette pic for FB users who haven't - uploaded a profile pic yet. */ + $silhouetteUrl = + 'http://static.ak.fbcdn.net/pics/q_silhouette.gif'; - $silhouetteUrl = - 'http://static.ak.fbcdn.net/pics/q_silhouette.gif'; + $url = $this->getProfilePicURL($fbuid); - $url = $this->getProfilePicURL($fbuid); + $action->elementStart('li', array('id' => 'nav_fb')); - $action->elementStart('li', array('id' => 'nav_fb')); + $action->element('img', array('id' => 'fbc_profile-pic', + 'src' => (!empty($url)) ? $url : $silhouetteUrl, + 'alt' => _m('Facebook Connect User'), + 'width' => '16'), ''); - $action->element('img', array('id' => 'fbc_profile-pic', - 'src' => (!empty($url)) ? $url : $silhouetteUrl, - 'alt' => 'Facebook Connect User', - 'width' => '16'), ''); - - $iconurl = common_path('plugins/Facebook/fbfavicon.ico'); - $action->element('img', array('id' => 'fb_favicon', - 'src' => $iconurl)); - - $action->elementEnd('li'); + $iconurl = common_path('plugins/Facebook/fbfavicon.ico'); + $action->element('img', array('id' => 'fb_favicon', + 'src' => $iconurl)); + $action->elementEnd('li'); + } } } @@ -396,20 +446,23 @@ class FacebookPlugin extends Plugin /* * Add a login tab for Facebook Connect * - * @param Action &action the current action + * @param Action $action the current action * * @return void */ - - function onEndLoginGroupNav(&$action) + function onEndLoginGroupNav($action) { - - $action_name = $action->trimmed('action'); - - $action->menuItem(common_local_url('FBConnectLogin'), - _m('Facebook'), - _m('Login or register using Facebook'), - 'FBConnectLogin' === $action_name); + if (self::hasKeys()) { + $action_name = $action->trimmed('action'); + + $action->menuItem(common_local_url('FBConnectLogin'), + // @todo CHECKME: Should be 'Facebook Login'? + // TRANS: Menu item. + _m('MENU','Facebook'), + // TRANS: Tooltip for menu item "Facebook". + _m('Login or register using Facebook'), + 'FBConnectLogin' === $action_name); + } return true; } @@ -417,19 +470,23 @@ class FacebookPlugin extends Plugin /* * Add a tab for managing Facebook Connect settings * - * @param Action &action the current action + * @param Action $action the current action * * @return void */ - - function onEndConnectSettingsNav(&$action) + function onEndConnectSettingsNav($action) { - $action_name = $action->trimmed('action'); - - $action->menuItem(common_local_url('FBConnectSettings'), - _m('Facebook'), - _m('Facebook Connect Settings'), - $action_name === 'FBConnectSettings'); + if (self::hasKeys()) { + $action_name = $action->trimmed('action'); + + $action->menuItem(common_local_url('FBConnectSettings'), + // @todo CHECKME: Should be 'Facebook Connect'? + // TRANS: Menu item tab. + _m('MENU','Facebook'), + // TRANS: Tooltip for menu item "Facebook". + _m('Facebook Connect Settings'), + $action_name === 'FBConnectSettings'); + } return true; } @@ -441,23 +498,24 @@ class FacebookPlugin extends Plugin * * @return void */ - function onStartLogout($action) { - $action->logout(); - $fbuid = $this->loggedIn(); + if (self::hasKeys()) { - if (!empty($fbuid)) { - try { - $facebook = getFacebook(); - $facebook->expire_session(); - } catch (Exception $e) { - common_log(LOG_WARNING, 'Facebook Connect Plugin - ' . - 'Could\'t logout of Facebook: ' . - $e->getMessage()); + $action->logout(); + $fbuid = $this->loggedIn(); + + if (!empty($fbuid)) { + try { + $facebook = getFacebook(); + $facebook->expire_session(); + } catch (Exception $e) { + common_log(LOG_WARNING, 'Facebook Connect Plugin - ' . + 'Could\'t logout of Facebook: ' . + $e->getMessage()); + } } } - return true; } @@ -468,14 +526,12 @@ class FacebookPlugin extends Plugin * * @return string $url the url for the user's Facebook avatar */ - function getProfilePicURL($fbuid) { $facebook = getFacebook(); $url = null; try { - $fqry = 'SELECT pic_square FROM user WHERE uid = %s'; $result = $facebook->api_client->fql_query(sprintf($fqry, $fbuid)); @@ -500,73 +556,44 @@ class FacebookPlugin extends Plugin * * @return boolean hook return */ - function onStartEnqueueNotice($notice, &$transports) { - array_push($transports, 'facebook'); - return true; - } - - /** - * broadcast the message when not using queuehandler - * - * @param Notice &$notice the notice - * @param array $queue destination queue - * - * @return boolean hook return - */ - - function onUnqueueHandleNotice(&$notice, $queue) - { - if (($queue == 'facebook') && ($this->_isLocal($notice))) { - facebookBroadcastNotice($notice); - return false; + if (self::hasKeys() && $notice->isLocal()) { + array_push($transports, 'facebook'); } return true; } /** - * Determine whether the notice was locally created - * - * @param Notice $notice the notice - * - * @return boolean locality - */ - - function _isLocal($notice) - { - return ($notice->is_local == Notice::LOCAL_PUBLIC || - $notice->is_local == Notice::LOCAL_NONPUBLIC); - } - - /** - * Add Facebook queuehandler to the list of daemons to start + * Register Facebook notice queue handler * - * @param array $daemons the list fo daemons to run + * @param QueueManager $manager * * @return boolean hook return - * */ - - function onGetValidDaemons($daemons) + function onEndInitializeQueueManager($manager) { - array_push($daemons, INSTALLDIR . - '/plugins/Facebook/facebookqueuehandler.php'); + if (self::hasKeys()) { + $manager->connect('facebook', 'FacebookQueueHandler'); + } return true; } function onPluginVersion(&$versions) { - $versions[] = array('name' => 'Facebook', - 'version' => FACEBOOKPLUGIN_VERSION, - 'author' => 'Zach Copley', - 'homepage' => 'http://status.net/wiki/Plugin:Facebook', - 'rawdescription' => - _m('The Facebook plugin allows you to integrate ' . - 'your StatusNet instance with ' . - 'Facebook ' . - 'and Facebook Connect.')); + $versions[] = array( + 'name' => 'Facebook', + 'version' => self::VERSION, + 'author' => 'Zach Copley', + 'homepage' => 'http://status.net/wiki/Plugin:Facebook', + // TRANS: Plugin description. + 'rawdescription' => _m( + 'The Facebook plugin allows integrating ' . + 'StatusNet instances with ' . + 'Facebook ' . + 'and Facebook Connect.' + ) + ); return true; } - }