]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Facebook/FacebookPlugin.php
New _m() gettext wrapper with smart detection of plugin domains. Plugin base class...
[quix0rs-gnu-social.git] / plugins / Facebook / FacebookPlugin.php
index cf6781cfaf8d85a0c807e12f18442c916d6b96c5..39b2ef28767641e08322256fbca42cc70b9ccc12 100644 (file)
@@ -34,12 +34,6 @@ if (!defined('STATUSNET')) {
 define("FACEBOOK_CONNECT_SERVICE", 3);
 
 require_once INSTALLDIR . '/plugins/Facebook/facebookutil.php';
-require_once INSTALLDIR . '/plugins/Facebook/FBConnectAuth.php';
-require_once INSTALLDIR . '/plugins/Facebook/FBConnectLogin.php';
-require_once INSTALLDIR . '/plugins/Facebook/FBConnectSettings.php';
-require_once INSTALLDIR . '/plugins/Facebook/FBCLoginGroupNav.php';
-require_once INSTALLDIR . '/plugins/Facebook/FBCSettingsNav.php';
-require_once INSTALLDIR . '/plugins/Facebook/FBC_XDReceiver.php';
 
 /**
  * Facebook plugin to add a StatusNet Facebook application
@@ -64,16 +58,17 @@ class FacebookPlugin extends Plugin
      * @return boolean hook return
      */
 
-    function onRouterInitialized(&$m)
+    function onStartInitializeRouter($m)
     {
 
         // Facebook App stuff
 
-        $m->connect('facebook', array('action' => 'facebookhome'));
-        $m->connect('facebook/index.php', array('action' => 'facebookhome'));
-        $m->connect('facebook/settings.php', array('action' => 'facebooksettings'));
-        $m->connect('facebook/invite.php', array('action' => 'facebookinvite'));
-        $m->connect('facebook/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
 
@@ -93,6 +88,7 @@ class FacebookPlugin extends Plugin
      * @return boolean hook return
      *
      */
+
     function onAutoload($cls)
     {
         switch ($cls) {
@@ -104,12 +100,33 @@ class FacebookPlugin extends Plugin
             include_once INSTALLDIR . '/plugins/Facebook/' .
               strtolower(mb_substr($cls, 0, -6)) . '.php';
             return false;
+        case 'FBConnectAuthAction':
+        case 'FBConnectLoginAction':
+        case 'FBConnectSettingsAction':
+        case 'FBC_XDReceiverAction':
+            include_once INSTALLDIR . '/plugins/Facebook/' .
+              mb_substr($cls, 0, -6) . '.php';
+            return false;
+        case 'FBCLoginGroupNav':
+            include_once INSTALLDIR . '/plugins/Facebook/FBCLoginGroupNav.php';
+            return false;
+        case 'FBCSettingsNav':
+            include_once INSTALLDIR . '/plugins/Facebook/FBCSettingsNav.php';
+            return false;
         default:
             return true;
         }
     }
 
-        // Add in xmlns:fb
+    /**
+     * Override normal HTML output to force the content type to
+     * text/html and add in xmlns:fb
+     *
+     * @param Action $action the current action
+     *
+     * @return void
+     */
+
     function onStartShowHTML($action)
     {
 
@@ -121,6 +138,7 @@ class FacebookPlugin extends Plugin
             // text/html even though Facebook Connect uses XHTML.  This is
             // A bug in Facebook Connect, and this is a temporary solution
             // until they fix their JavaScript libs.
+
             header('Content-Type: text/html');
 
             $action->extraHeaders();
@@ -143,22 +161,30 @@ class FacebookPlugin extends Plugin
         }
     }
 
-        // Note: this script needs to appear in the <body>
+    /**
+     * Add in the Facebook Connect JavaScript stuff
+     *
+     * Note: this script needs to appear in the <body>
+     *
+     * @param Action $action the current action
+     *
+     * @return void
+     *
+     */
 
     function onEndShowScripts($action)
     {
         if ($this->reqFbScripts($action)) {
 
-            $apikey = common_config('facebook', 'apikey');
+            $apikey      = common_config('facebook', 'apikey');
             $plugin_path = common_path('plugins/Facebook');
 
-            $login_url = common_local_url('FBConnectAuth');
+            $login_url  = common_local_url('FBConnectAuth');
             $logout_url = common_local_url('logout');
 
             // XXX: Facebook says we don't need this FB_RequireFeatures(),
             // but we actually do, for IE and Safari. Gar.
 
-            $js =  '<script type="text/javascript">';
             $js .= '    $(document).ready(function () {';
             $js .= '         FB_RequireFeatures(';
             $js .= '             ["XFBML"], function() {';
@@ -192,27 +218,45 @@ class FacebookPlugin extends Plugin
             $js .= '            }';
             $js .= '        );';
             $js .= '     });';
-            $js .= '</script>';
 
             $js = sprintf($js, $apikey, $login_url, $logout_url);
 
             // Compress the bugger down a bit
+
             $js = str_replace('  ', '', $js);
 
-            $action->raw("  $js");  // leading two spaces to make it line up
+            $action->inlineScript($js);
         }
 
     }
 
-        // Note: this script needs to appear as close as possible to </body>
+    /**
+     * Add in an additional Facebook Connect script that's supposed to
+     * appear as close as possible to </body>
+     *
+     * @param Action $action the current action
+     *
+     * @return void
+     *
+     */
 
     function onEndShowFooter($action)
     {
         if ($this->reqFbScripts($action)) {
-            $action->script('http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php');
+            $action->script('http://static.ak.connect.facebook.com' .
+                            '/js/api_lib/v0.4/FeatureLoader.js.php');
         }
     }
 
+    /**
+     * Output Facebook Connect specific CSS link
+     *
+     * @param Action $action the current action
+     *
+     * @return void
+     *
+     */
+
     function onEndShowStatusNetStyles($action)
     {
         if ($this->reqFbScripts($action)) {
@@ -220,17 +264,18 @@ class FacebookPlugin extends Plugin
         }
     }
 
-        /**
+    /**
      * Does the Action we're plugged into require the FB Scripts?  We only
      * want to output FB namespace, scripts, CSS, etc. on the pages that
      * really need them.
      *
-     * @param Action the action in question
+     * @param Action $action the current action
      *
      * @return boolean true
      */
 
-    function reqFbScripts($action) {
+    function reqFbScripts($action)
+    {
 
         // If you're logged in w/FB Connect, you always need the FB stuff
 
@@ -292,10 +337,19 @@ class FacebookPlugin extends Plugin
         return null;
     }
 
+    /**
+     * Add in a Facebook Connect avatar to the primary nav menu
+     *
+     * @param Action $action the current action
+     *
+     * @return void
+     *
+     */
+
     function onStartPrimaryNav($action)
     {
-
         $user = common_current_user();
+
         $connect = 'FBConnectSettings';
         if (common_config('xmpp', 'enabled')) {
             $connect = 'imsettings';
@@ -338,31 +392,55 @@ class FacebookPlugin extends Plugin
         return true;
     }
 
-    function onStartShowLocalNavBlock($action)
+    /*
+     * Add a login tab for Facebook Connect
+     *
+     * @param Action &action the current action
+     *
+     * @return void
+     */
+
+    function onEndLoginGroupNav(&$action)
     {
-        $action_name   = get_class($action);
 
-        $login_actions = array('LoginAction', 'RegisterAction',
-            'OpenidloginAction', 'FBConnectLoginAction');
+        $action_name = $action->trimmed('action');
 
-        if (in_array($action_name, $login_actions)) {
-            $nav = new FBCLoginGroupNav($action);
-            $nav->show();
-            return false;
-        }
+        $action->menuItem(common_local_url('FBConnectLogin'),
+                                           _m('Facebook'),
+                                           _m('Login or register using Facebook'),
+                                           'FBConnectLogin' === $action_name);
 
-        $connect_actions = array('SmssettingsAction', 'ImsettingsAction',
-            'TwittersettingsAction', 'FBConnectSettingsAction');
+        return true;
+    }
 
-        if (in_array($action_name, $connect_actions)) {
-            $nav = new FBCSettingsNav($action);
-            $nav->show();
-            return false;
-        }
+    /*
+     * Add a tab for managing Facebook Connect settings
+     *
+     * @param Action &action the current action
+     *
+     * @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');
 
         return true;
     }
 
+    /**
+     * Have the logout process do some Facebook Connect cookie cleanup
+     *
+     * @param Action $action the current action
+     *
+     * @return void
+     */
+
     function onStartLogout($action)
     {
         $action->logout();
@@ -382,9 +460,16 @@ class FacebookPlugin extends Plugin
         return true;
     }
 
+    /**
+     * Get the URL of the user's Facebook avatar
+     *
+     * @param int $fbuid the Facebook user ID
+     *
+     * @return string $url the url for the user's Facebook avatar
+     */
+
     function getProfilePicURL($fbuid)
     {
-
         $facebook = getFacebook();
         $url      = null;
 
@@ -403,8 +488,7 @@ class FacebookPlugin extends Plugin
                        "Facebook client failure requesting profile pic!");
         }
 
-       return $url;
-
+        return $url;
     }
 
     /**
@@ -415,6 +499,7 @@ class FacebookPlugin extends Plugin
      *
      * @return boolean hook return
      */
+
     function onStartEnqueueNotice($notice, &$transports)
     {
         array_push($transports, 'facebook');
@@ -429,6 +514,7 @@ class FacebookPlugin extends Plugin
      *
      * @return boolean hook return
      */
+
     function onUnqueueHandleNotice(&$notice, $queue)
     {
         if (($queue == 'facebook') && ($this->_isLocal($notice))) {
@@ -441,10 +527,11 @@ class FacebookPlugin extends Plugin
     /**
      * Determine whether the notice was locally created
      *
-     * @param Notice $notice
+     * @param Notice $notice the notice
      *
      * @return boolean locality
      */
+
     function _isLocal($notice)
     {
         return ($notice->is_local == Notice::LOCAL_PUBLIC ||
@@ -459,6 +546,7 @@ class FacebookPlugin extends Plugin
      * @return boolean hook return
      *
      */
+
     function onGetValidDaemons($daemons)
     {
         array_push($daemons, INSTALLDIR .
@@ -466,4 +554,4 @@ class FacebookPlugin extends Plugin
         return true;
     }
 
-}
\ No newline at end of file
+}