Merge branch 'defat-fbconnect' into 0.8.x

This commit is contained in:
Zach Copley 2009-06-30 04:59:38 +00:00
commit 424dd56b2a
1 changed files with 144 additions and 81 deletions

View File

@ -69,6 +69,9 @@ class FBConnectPlugin extends Plugin
// Add in xmlns:fb // Add in xmlns:fb
function onStartShowHTML($action) function onStartShowHTML($action)
{ {
if ($this->requiresFB($action)) {
// XXX: Horrible hack to make Safari, FF2, and Chrome work with // XXX: Horrible hack to make Safari, FF2, and Chrome work with
// Facebook Connect. These browser cannot use Facebook's // Facebook Connect. These browser cannot use Facebook's
// DOM parsing routines unless the mime type of the page is // DOM parsing routines unless the mime type of the page is
@ -92,12 +95,19 @@ class FBConnectPlugin extends Plugin
'lang' => $language)); 'lang' => $language));
return false; return false;
} else {
return true;
}
} }
// Note: this script needs to appear in the <body> // Note: this script needs to appear in the <body>
function onStartShowHeader($action) function onStartShowHeader($action)
{ {
if ($this->requiresFB($action)) {
$apikey = common_config('facebook', 'apikey'); $apikey = common_config('facebook', 'apikey');
$plugin_path = common_path('plugins/FBConnect'); $plugin_path = common_path('plugins/FBConnect');
@ -129,35 +139,83 @@ class FBConnectPlugin extends Plugin
$action->raw($html); $action->raw($html);
} }
}
// Note: this script needs to appear as close as possible to </body> // Note: this script needs to appear as close as possible to </body>
function onEndShowFooter($action) function onEndShowFooter($action)
{ {
if ($this->requiresFB($action)) {
$action->element('script', $action->element('script',
array('type' => 'text/javascript', array('type' => 'text/javascript',
'src' => 'http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php'), 'src' => 'http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php'),
''); '');
} }
}
function onEndShowLaconicaStyles($action) function onEndShowLaconicaStyles($action)
{ {
if ($this->requiresFB($action)) {
$action->element('link', array('rel' => 'stylesheet', $action->element('link', array('rel' => 'stylesheet',
'type' => 'text/css', 'type' => 'text/css',
'href' => common_path('plugins/FBConnect/FBConnectPlugin.css'))); 'href' => common_path('plugins/FBConnect/FBConnectPlugin.css')));
} }
}
function onStartPrimaryNav($action) /**
* 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
*
* @return boolean true
*/
function requiresFB($action) {
// If you're logged in w/FB Connect, you always need the FB stuff
$fbuid = $this->loggedIn();
if (!empty($fbuid)) {
return true;
}
// List of actions that require FB stuff
$needy = array('FBConnectLoginAction',
'FBConnectauthAction',
'FBConnectSettingsAction');
if (in_array(get_class($action), $needy)) {
return true;
}
return false;
}
/**
* Is the user currently logged in with FB Connect?
*
* @return mixed $fbuid the Facebook ID of the logged in user, or null
*/
function loggedIn()
{ {
$user = common_current_user(); $user = common_current_user();
if ($user) { if (!empty($user)) {
$flink = Foreign_link::getByUserId($user->id, $flink = Foreign_link::getByUserId($user->id,
FACEBOOK_CONNECT_SERVICE); FACEBOOK_CONNECT_SERVICE);
$fbuid = 0; $fbuid = 0;
if ($flink) { if (!empty($flink)) {
try { try {
@ -170,12 +228,28 @@ class FBConnectPlugin extends Plugin
$e->getMessage()); $e->getMessage());
} }
// Display Facebook Logged in indicator w/Facebook favicon
if ($fbuid > 0) { if ($fbuid > 0) {
return $fbuid;
}
}
}
return null;
}
function onStartPrimaryNav($action)
{
$user = common_current_user();
if (!empty($user)) {
$fbuid = $this->loggedIn();
if (!empty($fbuid)) {
$action->elementStart('li', array('id' => 'nav_fb')); $action->elementStart('li', array('id' => 'nav_fb'));
$action->elementStart('fb:profile-pic', array('uid' => $flink->foreign_id, $action->elementStart('fb:profile-pic', array('uid' => $fbuid,
'linked' => 'false', 'linked' => 'false',
'width' => 16, 'width' => 16,
'height' => 16)); 'height' => 16));
@ -187,7 +261,6 @@ class FBConnectPlugin extends Plugin
$action->elementEnd('li'); $action->elementEnd('li');
} }
}
$action->menuItem(common_local_url('all', array('nickname' => $user->nickname)), $action->menuItem(common_local_url('all', array('nickname' => $user->nickname)),
_('Home'), _('Personal profile and friends timeline'), false, 'nav_home'); _('Home'), _('Personal profile and friends timeline'), false, 'nav_home');
@ -207,7 +280,7 @@ class FBConnectPlugin extends Plugin
false, 'nav_invitecontact'); 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 ($flink && $fbuid > 0) { if (!empty($fbuid)) {
$logout_url = common_local_url('logout'); $logout_url = common_local_url('logout');
$title = _('Logout from the site'); $title = _('Logout from the site');
@ -270,23 +343,13 @@ class FBConnectPlugin extends Plugin
function onStartLogout($action) function onStartLogout($action)
{ {
$user = common_current_user();
$flink = Foreign_link::getByUserId($user->id, FACEBOOK_CONNECT_SERVICE);
$action->logout(); $action->logout();
$fbuid = $this->loggedIn();
if ($flink) { if (!empty($fbuid)) {
$facebook = getFacebook();
try { try {
$fbuid = $facebook->get_loggedin_user(); $facebook = getFacebook();
$facebook->expire_session();
if ($fbuid > 0) {
$facebook->logout(common_local_url('public'));
}
} catch (Exception $e) { } catch (Exception $e) {
common_log(LOG_WARNING, 'Could\'t logout of Facebook: ' . common_log(LOG_WARNING, 'Could\'t logout of Facebook: ' .
$e->getMessage()); $e->getMessage());