]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Facebook/FacebookPlugin.php
Localisation updates from http://translatewiki.net.
[quix0rs-gnu-social.git] / plugins / Facebook / FacebookPlugin.php
index 78c9054e14818c1444e4d39e0173b2424b03a5e3..798009817c9805e8e7f1ca510d91f3e4eaf5b0ae 100644 (file)
@@ -22,7 +22,7 @@
  * @category  Plugin
  * @package   StatusNet
  * @author    Zach Copley <zach@status.net>
- * @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;
@@ -122,6 +169,33 @@ class FacebookPlugin extends Plugin
         }
     }
 
+    /**
+     * 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
@@ -130,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
@@ -158,9 +229,7 @@ class FacebookPlugin extends Plugin
                       'lang'     => $language));
 
             return false;
-
         } else {
-
             return true;
         }
     }
@@ -175,7 +244,6 @@ class FacebookPlugin extends Plugin
      * @return void
      *
      */
-
     function onEndShowScripts($action)
     {
         if ($this->reqFbScripts($action)) {
@@ -226,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);
         }
-
     }
 
     /**
@@ -243,7 +309,6 @@ class FacebookPlugin extends Plugin
      * @return void
      *
      */
-
     function onEndShowFooter($action)
     {
         if ($this->reqFbScripts($action)) {
@@ -260,7 +325,6 @@ class FacebookPlugin extends Plugin
      * @return void
      *
      */
-
     function onEndShowStatusNetStyles($action)
     {
         if ($this->reqFbScripts($action)) {
@@ -277,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)) {
@@ -290,7 +355,6 @@ class FacebookPlugin extends Plugin
         }
 
         // List of actions that require FB stuff
-
         $needy = array('FBConnectLoginAction',
                        'FBConnectauthAction',
                        'FBConnectSettingsAction');
@@ -300,7 +364,6 @@ class FacebookPlugin extends Plugin
         }
 
         return false;
-
     }
 
     /**
@@ -308,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();
@@ -320,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: ' .
@@ -349,47 +408,35 @@ class FacebookPlugin extends Plugin
      * @return void
      *
      */
-
     function onStartPrimaryNav($action)
     {
-        $user = common_current_user();
+        if (self::hasKeys()) {
+            $user = common_current_user();
+            if (!empty($user)) {
+                $fbuid = $this->loggedIn();
 
-        $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($fbuid)) {
+                    /* Default FB silhouette pic for FB users who haven't
+                       uploaded a profile pic yet. */
 
-        if (!empty($user)) {
-
-            $fbuid = $this->loggedIn();
-
-            if (!empty($fbuid)) {
-
-                /* 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');
+                }
             }
         }
 
@@ -403,16 +450,19 @@ class FacebookPlugin extends Plugin
      *
      * @return void
      */
-
     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;
     }
@@ -424,15 +474,19 @@ class FacebookPlugin extends Plugin
      *
      * @return void
      */
-
     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;
     }
@@ -444,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;
     }
 
@@ -471,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));
@@ -503,10 +556,11 @@ class FacebookPlugin extends Plugin
      *
      * @return boolean hook return
      */
-
     function onStartEnqueueNotice($notice, &$transports)
     {
-        array_push($transports, 'facebook');
+        if (self::hasKeys() && $notice->isLocal()) {
+            array_push($transports, 'facebook');
+        }
         return true;
     }
 
@@ -519,22 +573,27 @@ class FacebookPlugin extends Plugin
      */
     function onEndInitializeQueueManager($manager)
     {
-        $manager->connect('facebook', 'FacebookQueueHandler');
+        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 ' .
-                               '<a href="http://facebook.com/">Facebook</a> ' .
-                               '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 ' .
+                '<a href="http://facebook.com/">Facebook</a> ' .
+                'and Facebook Connect.'
+            )
+        );
         return true;
     }
-
 }