From 92e30b438e1601476e20f2ea40876dd3fc32f6ca Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Wed, 1 Jul 2009 22:47:21 +0000 Subject: [PATCH] Killed the FB Connect profile-pic bounce in all browsers --- plugins/FBConnect/FBConnectAuth.php | 4 +- plugins/FBConnect/FBConnectPlugin.css | 4 +- plugins/FBConnect/FBConnectPlugin.php | 63 ++++++++++++++++++++------- 3 files changed, 52 insertions(+), 19 deletions(-) diff --git a/plugins/FBConnect/FBConnectAuth.php b/plugins/FBConnect/FBConnectAuth.php index 4699ce636c..3cf9fefc13 100644 --- a/plugins/FBConnect/FBConnectAuth.php +++ b/plugins/FBConnect/FBConnectAuth.php @@ -66,7 +66,7 @@ class FBConnectauthAction extends Action // User is already logged in. Does she already have a linked Facebook acct? $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_CONNECT_SERVICE); - if ($flink) { + if (!empty($flink)) { // User already has a linked Facebook account and shouldn't be here common_debug('There is already a local user (' . $flink->user_id . @@ -337,7 +337,7 @@ class FBConnectauthAction extends Action if ($flink) { $user = $flink->getUser(); - if ($user) { + if (!empty($user)) { common_debug("Logged in Facebook user $flink->foreign_id as user $user->id ($user->nickname)"); diff --git a/plugins/FBConnect/FBConnectPlugin.css b/plugins/FBConnect/FBConnectPlugin.css index 4ece66d4a9..e52675459e 100644 --- a/plugins/FBConnect/FBConnectPlugin.css +++ b/plugins/FBConnect/FBConnectPlugin.css @@ -12,7 +12,7 @@ position:relative; margin-left:18px; } -#nav_fb .fb_profile_pic_rendered img { +#nav_fb #fbc_profile-pic { position:absolute; top:-3px; left:-18px; @@ -21,7 +21,7 @@ border:1px solid #3B5998; padding:1px; } -#nav_fb img { +#nav_fb #fb_favicon { position:absolute; top:-13px; left:-25px; diff --git a/plugins/FBConnect/FBConnectPlugin.php b/plugins/FBConnect/FBConnectPlugin.php index d45d2718c3..d8af1a4e86 100644 --- a/plugins/FBConnect/FBConnectPlugin.php +++ b/plugins/FBConnect/FBConnectPlugin.php @@ -70,7 +70,7 @@ class FBConnectPlugin extends Plugin function onStartShowHTML($action) { - if ($this->requiresFB($action)) { + if ($this->reqFbScripts($action)) { // XXX: Horrible hack to make Safari, FF2, and Chrome work with // Facebook Connect. These browser cannot use Facebook's @@ -106,7 +106,7 @@ class FBConnectPlugin extends Plugin function onStartShowHeader($action) { - if ($this->requiresFB($action)) { + if ($this->reqFbScripts($action)) { $apikey = common_config('facebook', 'apikey'); $plugin_path = common_path('plugins/FBConnect'); @@ -145,7 +145,7 @@ class FBConnectPlugin extends Plugin function onEndShowFooter($action) { - if ($this->requiresFB($action)) { + if ($this->reqFbScripts($action)) { $action->element('script', array('type' => 'text/javascript', @@ -157,7 +157,7 @@ class FBConnectPlugin extends Plugin function onEndShowLaconicaStyles($action) { - if ($this->requiresFB($action)) { + if ($this->reqFbScripts($action)) { $action->element('link', array('rel' => 'stylesheet', 'type' => 'text/css', @@ -175,7 +175,7 @@ class FBConnectPlugin extends Plugin * @return boolean true */ - function requiresFB($action) { + function reqFbScripts($action) { // If you're logged in w/FB Connect, you always need the FB stuff @@ -220,7 +220,7 @@ class FBConnectPlugin extends Plugin try { $facebook = getFacebook(); - $fbuid = getFacebook()->get_loggedin_user(); + $fbuid = getFacebook()->get_loggedin_user(); } catch (Exception $e) { common_log(LOG_WARNING, @@ -248,15 +248,24 @@ class FBConnectPlugin extends Plugin if (!empty($fbuid)) { - $action->elementStart('li', array('id' => 'nav_fb')); - $action->elementStart('fb:profile-pic', array('uid' => $fbuid, - 'linked' => 'false', - 'width' => 16, - 'height' => 16)); - $action->elementEnd('fb:profile-pic'); + /* Default FB silhouette pic for FB users who haven't + uploaded a profile pic yet. */ - $iconurl = common_path('/plugins/FBConnect/fbfavicon.ico'); - $action->element('img', array('src' => $iconurl)); + $silhouetteUrl = + 'http://static.ak.fbcdn.net/pics/q_silhouette.gif'; + + $url = $this->getProfilePicURL($fbuid); + + $action->elementStart('li', array('id' => 'nav_fb')); + + $action->element('img', array('id' => 'fbc_profile-pic', + 'src' => (!empty($url)) ? $url : $silhouetteUrl, + 'alt' => 'Facebook Connect User', + 'width' => '16'), ''); + + $iconurl = common_path('plugins/FBConnect/fbfavicon.ico'); + $action->element('img', array('id' => 'fb_favicon', + 'src' => $iconurl)); $action->elementEnd('li'); @@ -320,7 +329,7 @@ class FBConnectPlugin extends Plugin function onStartShowLocalNavBlock($action) { - $action_name = get_class($action); + $action_name = get_class($action); $login_actions = array('LoginAction', 'RegisterAction', 'OpenidloginAction', 'FBConnectLoginAction'); @@ -361,4 +370,28 @@ class FBConnectPlugin extends Plugin return true; } + 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)); + + if (!empty($result)) { + $url = $result[0]['pic_square']; + } + + } catch (Exception $e) { + common_log(LOG_WARNING, "Facebook client failure requesting profile pic!"); + } + + return $url; + + } + }