]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
- Show Facebook profile pic and favicon as dictated by Facebook Connnect policy
authorZach Copley <zach@controlyourself.ca>
Fri, 22 May 2009 00:54:22 +0000 (00:54 +0000)
committerZach Copley <zach@controlyourself.ca>
Fri, 22 May 2009 00:54:22 +0000 (00:54 +0000)
- Logout fixed, again (cleans up Facebook cookies now)

plugins/FBConnect/FBCLoginGroupNav.php
plugins/FBConnect/FBConnectAuth.php
plugins/FBConnect/FBConnectPlugin.php
plugins/FBConnect/FBConnectSettings.php
plugins/FBConnect/fbfavicon.ico [new file with mode: 0644]

index 9aa01a0940a5f15e2cbb83c1d46b642464726136..6eb09c3c01fa1565ade5dab33faa09482969b6ca 100644 (file)
@@ -71,26 +71,24 @@ class FBCLoginGroupNav extends Widget
 
     function show()
     {
-        common_debug('FBCLoginGroupNav');
-        
         $this->action->elementStart('dl', array('id' => 'site_nav_local_views'));
         $this->action->element('dt', null, _('Local views'));
         $this->action->elementStart('dd');
-        
+
         // action => array('prompt', 'title')
         $menu = array();
 
         $menu['login'] = array(_('Login'),
                          _('Login with a username and password'));
-        
+
         if (!(common_config('site','closed') || common_config('site','inviteonly'))) {
             $menu['register'] = array(_('Register'),
                                 _('Sign up for a new account'));
         }
-        
+
         $menu['openidlogin'] = array(_('OpenID'),
                                _('Login or register with OpenID'));
-                               
+
         $menu['FBConnectLogin'] = array(_('Facebook'),
                                _('Login or register using Facebook'));
 
@@ -105,7 +103,7 @@ class FBCLoginGroupNav extends Widget
         }
 
         $this->action->elementEnd('ul');
-        
+
         $this->action->elementEnd('dd');
         $this->action->elementEnd('dl');
     }
index e8724cdf9a1301eefdc6096d2cb3794fb43ee325..906e591ea7910f2da45d696329ad93e43d098898 100644 (file)
@@ -50,7 +50,8 @@ class FBConnectauthAction extends Action
             }
 
         } catch (Exception $e) {
-            common_debug("Problem getting fbuid.");
+            common_log(LOG_WARNING, 'Problem getting Facebook uid: ' .
+                $e->getMessage());
         }
 
         return true;
@@ -283,7 +284,7 @@ class FBConnectauthAction extends Action
 
         } else {
 
-            common_debug("no flink found for fbuid: $this->fbuid");
+            common_debug("No flink found for fbuid: $this->fbuid");
 
             $this->showForm(null, $this->bestNewNickname());
         }
@@ -306,8 +307,6 @@ class FBConnectauthAction extends Action
 
     function flinkUser($user_id, $fbuid)
     {
-        common_debug("flinkUser()");
-
         $flink = new Foreign_link();
         $flink->user_id = $user_id;
         $flink->foreign_id = $fbuid;
@@ -370,7 +369,10 @@ class FBConnectauthAction extends Action
     // XXX: Consider moving this to lib/facebookutil.php
     function getFacebookFields($fb_uid, $fields) {
         try {
-            $infos = getFacebook()->api_client->users_getInfo($fb_uid, $fields);
+
+            $facebook = getFacebook();
+
+            $infos = $facebook->api_client->users_getInfo($fb_uid, $fields);
 
             if (empty($infos)) {
                 return null;
@@ -378,9 +380,10 @@ class FBConnectauthAction extends Action
             return reset($infos);
 
         } catch (Exception $e) {
-            error_log("Failure in the api when requesting " . join(",", $fields)
-                  ." on uid " . $fb_uid . " : ". $e->getMessage());
-              return null;
+            common_log(LOG_WARNING, "Facebook client failure when requesting " .
+                join(",", $fields) . " on uid " . $fb_uid .
+                    " : ". $e->getMessage());
+            return null;
         }
     }
 
index 36dee04487c5ac09d6685ad8c41fa30044e5880e..4fb9a7ca4d06c71288409d2acdef5eeeb818a959 100644 (file)
@@ -40,7 +40,6 @@ require_once INSTALLDIR . '/plugins/FBConnect/FBConnectSettings.php';
 require_once INSTALLDIR . '/plugins/FBConnect/FBCLoginGroupNav.php';
 require_once INSTALLDIR . '/plugins/FBConnect/FBCSettingsNav.php';
 
-
 /**
  * Plugin to enable Facebook Connect
  *
@@ -53,7 +52,6 @@ require_once INSTALLDIR . '/plugins/FBConnect/FBCSettingsNav.php';
 
 class FBConnectPlugin extends Plugin
 {
-
     function __construct()
     {
         parent::__construct();
@@ -84,29 +82,27 @@ class FBConnectPlugin extends Plugin
                                          'media type you accept'), 406);
         }
 
-
         header('Content-Type: '.$type);
 
         $action->extraHeaders();
 
         $action->startXML('html',
-                         '-//W3C//DTD XHTML 1.0 Strict//EN',
-                         'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd');
+            '-//W3C//DTD XHTML 1.0 Strict//EN',
+            'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd');
 
         $language = $action->getLanguage();
 
-        $action->elementStart('html', array('xmlns'  => 'http://www.w3.org/1999/xhtml',
-                                            'xmlns:fb' => 'http://www.facebook.com/2008/fbml',
-                                            'xml:lang' => $language,
-                                            'lang'     => $language));
+        $action->elementStart('html',
+            array('xmlns'  => 'http://www.w3.org/1999/xhtml',
+                  'xmlns:fb' => 'http://www.facebook.com/2008/fbml',
+                  'xml:lang' => $language,
+                  'lang'     => $language));
 
         return false;
-
     }
 
     function onEndShowLaconicaScripts($action)
     {
-
         $action->element('script',
             array('type' => 'text/javascript',
                   'src'  => 'http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php'),
@@ -140,77 +136,92 @@ class FBConnectPlugin extends Plugin
 
         if ($user) {
 
+            $action->menuItem(common_local_url('all', array('nickname' => $user->nickname)),
+                _('Home'), _('Personal profile and friends timeline'), false, 'nav_home');
+            $action->menuItem(common_local_url('profilesettings'),
+                _('Account'), _('Change your email, avatar, password, profile'), false, 'nav_account');
+            if (common_config('xmpp', 'enabled')) {
+                $action->menuItem(common_local_url('imsettings'),
+                    _('Connect'), _('Connect to IM, SMS, Twitter'), false, 'nav_connect');
+            } else {
+             $action->menuItem(common_local_url('smssettings'),
+                 _('Connect'), _('Connect to SMS, Twitter'), false, 'nav_connect');
+            }
+            $action->menuItem(common_local_url('invite'),
+                _('Invite'),
+                sprintf(_('Invite friends and colleagues to join you on %s'),
+                common_config('site', 'name')),
+                false, 'nav_invitecontact');
+
             $flink = Foreign_link::getByUserId($user->id, FACEBOOK_CONNECT_SERVICE);
+            $fbuid = 0;
 
             if ($flink) {
 
-                $facebook = getFacebook();
+                try {
 
-                if ($facebook->api_client->users_isAppUser($flink->foreign_id) ||
-                    $facebook->api_client->added) {
+                    $facebook = getFacebook();
+                    $fbuid = getFacebook()->get_loggedin_user();
+
+                } catch (Exception $e) {
+                    common_log(LOG_WARNING,
+                        'Problem getting Facebook client: ' .
+                            $e->getMessage());
+                }
 
-                    // XXX: We need to replace this with a proper mini-icon and only after
-                    // checing the FB Connect JavaScript lib method to see what the Connect
-                    // status is. Checking Connect status looks to be impossible with the
-                    // PHP client.
+                // Display Facebook Logged in indicator w/Facebook favicon
 
-                    $action->elementStart('li');
+                if ($fbuid > 0) {
+
+                    $action->elementStart('li', array('id' => 'nav_fb'));
                     $action->elementStart('fb:profile-pic', array('uid' => $flink->foreign_id,
-                        'facebook-logo' => 'true',
                         'linked' => 'false',
-                        'width' => 32,
-                        'height' => 32));
+                        'width' => 16,
+                        'height' => 16));
                     $action->elementEnd('fb:profile-pic');
+
+                    $iconurl =  common_path('/plugins/FBConnect/fbfavicon.ico');
+                    $action->element('img', array('src' => $iconurl));
+
                     $action->elementEnd('li');
-                }
 
+                }
             }
-            
-            $action->menuItem(common_local_url('all', array('nickname' => $user->nickname)),
-                         _('Home'), _('Personal profile and friends timeline'), false, 'nav_home');
-            $action->menuItem(common_local_url('profilesettings'),
-                         _('Account'), _('Change your email, avatar, password, profile'), false, 'nav_account');
-            if (common_config('xmpp', 'enabled')) {
-             $action->menuItem(common_local_url('imsettings'),
-                             _('Connect'), _('Connect to IM, SMS, Twitter'), false, 'nav_connect');
-            } else {
-             $action->menuItem(common_local_url('smssettings'),
-                             _('Connect'), _('Connect to SMS, Twitter'), false, 'nav_connect');
-            }
-            $action->menuItem(common_local_url('invite'),
-                          _('Invite'),
-                          sprintf(_('Invite friends and colleagues to join you on %s'),
-                          common_config('site', 'name')),
-                          false, 'nav_invitecontact');
 
-             // Need to override the Logout link to make it do FB stuff
+            // Need to override the Logout link to make it do FB stuff
+
+            if ($fbuid > 0) {
 
-             $logout_url = common_local_url('logout');
-             $title =  _('Logout from the site');
-             $text = _('Logout');
+                $logout_url = common_local_url('logout');
+                $title =  _('Logout from the site');
+                $text = _('Logout');
 
-             $html = sprintf('<li id="nav_logout"><a href="%s" title="%s" ' .
-                 'onclick="FB.Connect.logout(function() { goto_logout() })">%s</a></li>',
+                $html = sprintf('<li id="nav_logout"><a href="%s" title="%s" ' .
+                    'onclick="FB.Connect.logout(function() { goto_logout() })">%s</a></li>',
                     $logout_url, $title, $text);
 
-             $action->raw($html);
+                $action->raw($html);
 
+             } else {
+                 $action->menuItem(common_local_url('logout'),
+                     _('Logout'), _('Logout from the site'), false, 'nav_logout');
+             }
          }
          else {
              if (!common_config('site', 'closed')) {
                  $action->menuItem(common_local_url('register'),
-                                 _('Register'), _('Create an account'), false, 'nav_register');
+                     _('Register'), _('Create an account'), false, 'nav_register');
              }
              $action->menuItem(common_local_url('openidlogin'),
-                             _('OpenID'), _('Login with OpenID'), false, 'nav_openid');
+                 _('OpenID'), _('Login with OpenID'), false, 'nav_openid');
              $action->menuItem(common_local_url('login'),
-                             _('Login'), _('Login to the site'), false, 'nav_login');
+                 _('Login'), _('Login to the site'), false, 'nav_login');
          }
 
          $action->menuItem(common_local_url('doc', array('title' => 'help')),
-                         _('Help'), _('Help me!'), false, 'nav_help');
+             _('Help'), _('Help me!'), false, 'nav_help');
          $action->menuItem(common_local_url('peoplesearch'),
-                         _('Search'), _('Search for people or text'), false, 'nav_search');
+             _('Search'), _('Search for people or text'), false, 'nav_search');
 
         return false;
     }
@@ -220,7 +231,7 @@ class FBConnectPlugin extends Plugin
         $action_name = get_class($action);
 
         $login_actions = array('LoginAction', 'RegisterAction',
-            'OpenidloginAction', 'FacebookStart');
+            'OpenidloginAction', 'FBConnectLoginAction');
 
         if (in_array($action_name, $login_actions)) {
             $nav = new FBCLoginGroupNav($action);
@@ -240,6 +251,21 @@ class FBConnectPlugin extends Plugin
         return true;
     }
 
-}
+    function onEndLogout($action)
+    {
+        try {
 
+            $facebook = getFacebook();
+            $fbuid = $facebook->get_loggedin_user();
+
+            if ($fbuid > 0) {
+                $facebook->logout(common_local_url('public'));
+            }
 
+        } catch (Exception $e) {
+            common_log(LOG_WARNING, 'Could\'t logout of Facebook: ' .
+                $e->getMessage());
+        }
+    }
+
+}
index b7831269c045fa124cd4edc8638656004dfe1859..7e255f43a68d0f58d70958e003e48214abe3fa4f 100644 (file)
@@ -169,8 +169,18 @@ class FBConnectSettingsAction extends ConnectSettingsAction
                 return;
             }
 
-            $facebook = getFacebook();
-            $facebook->logout();
+            try {
+
+                // XXX: not sure what exactly to do here
+
+                $facebook = getFacebook();
+                $facebook->clear_cookie_state();
+
+            } catch (Exception $e) {
+                common_log(LOG_WARNING,
+                    'Couldn\'t clear Facebook cookies: ' .
+                        $e->getMessage());
+            }
 
             $this->showForm(_('Facebook user disconnected.'), true);
 
diff --git a/plugins/FBConnect/fbfavicon.ico b/plugins/FBConnect/fbfavicon.ico
new file mode 100644 (file)
index 0000000..c57c034
Binary files /dev/null and b/plugins/FBConnect/fbfavicon.ico differ