Less intrusive, more reliable way for FB Connect plugin to modify the

primary nav in order to show FB mini-avatar and have the logout link
logout of FB as well as StatusNet.
This commit is contained in:
Zach Copley 2009-10-20 00:49:11 +00:00
parent e48efd3222
commit 9cdd77625e
1 changed files with 42 additions and 78 deletions

View File

@ -115,26 +115,48 @@ class FBConnectPlugin extends Plugin
// XXX: Facebook says we don't need this FB_RequireFeatures(), // XXX: Facebook says we don't need this FB_RequireFeatures(),
// but we actually do, for IE and Safari. Gar. // but we actually do, for IE and Safari. Gar.
$html = sprintf('<script type="text/javascript"> $js = '<script type="text/javascript">';
$(document).ready(function () { $js .= ' $(document).ready(function () {';
FB_RequireFeatures( $js .= ' FB_RequireFeatures(';
["XFBML"], $js .= ' ["XFBML"], function() {';
function() { $js .= ' FB.init("%1$s", "../xd_receiver.html");';
FB.init("%s", "../xd_receiver.html"); $js .= ' }';
} $js .= ' );';
); }); $js .= ' });';
function goto_login() { $js .= ' function goto_login() {';
window.location = "%s"; $js .= ' window.location = "%2$s";';
} $js .= ' }';
function goto_logout() { // The below function alters the logout link so that it logs the user out
window.location = "%s"; // of Facebook Connect as well as the site. However, for some pages
} // (FB Connect Settings) we need to output the FB Connect scripts (to
</script>', $apikey, // show an existing FB connection even if the user isn't authenticated
$login_url, $logout_url); // with Facebook connect) but NOT alter the logout link. And the only
// way to reliably do that is with the FB Connect .js libs. Crazy.
$action->raw($html); $js .= ' FB.ensureInit(function() {';
$js .= ' FB.Connect.ifUserConnected(';
$js .= ' function() { ';
$js .= ' $(\'#nav_logout a\').attr(\'href\', \'#\');';
$js .= ' $(\'#nav_logout a\').click(function() {';
$js .= ' FB.Connect.logoutAndRedirect(\'%3$s\');';
$js .= ' return false;';
$js .= ' })';
$js .= ' },';
$js .= ' function() {';
$js .= ' return false;';
$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
} }
} }
@ -150,7 +172,6 @@ class FBConnectPlugin extends Plugin
function onEndShowStatusNetStyles($action) function onEndShowStatusNetStyles($action)
{ {
if ($this->reqFbScripts($action)) { if ($this->reqFbScripts($action)) {
$action->cssLink('plugins/FBConnect/FBConnectPlugin.css'); $action->cssLink('plugins/FBConnect/FBConnectPlugin.css');
} }
@ -269,66 +290,9 @@ class FBConnectPlugin extends Plugin
$action->elementEnd('li'); $action->elementEnd('li');
} }
}
$action->menuItem(common_local_url('all', array('nickname' => $user->nickname)), return true;
_('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');
$action->menuItem(common_local_url($connect),
_('Connect'), _('Connect to services'), false, 'nav_connect');
if (common_config('invite', 'enabled')) {
$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
if (!empty($fbuid)) {
$logout_url = common_local_url('logout');
$title = _('Logout from the site');
$text = _('Logout');
$html = sprintf('<li id="nav_logout"><a href="#" title="%s" ' .
'onclick="FB.Connect.logoutAndRedirect(\'%s\');">%s</a></li>',
$title, $logout_url, $text);
$action->raw($html);
} else {
$action->menuItem(common_local_url('logout'),
_('Logout'), _('Logout from the site'), false, 'nav_logout');
}
}
else {
if (!common_config('site', 'openidonly')) {
if (!common_config('site', 'closed')) {
$action->menuItem(common_local_url('register'),
_('Register'), _('Create an account'), false, 'nav_register');
}
$action->menuItem(common_local_url('login'),
_('Login'), _('Login to the site'), false, 'nav_login');
} else {
$this->menuItem(common_local_url('openidlogin'),
_('OpenID'), _('Login with OpenID'), false, 'nav_openid');
}
}
$action->menuItem(common_local_url('doc', array('title' => 'help')),
_('Help'), _('Help me!'), false, 'nav_help');
if ($user || !common_config('site', 'private')) {
$action->menuItem(common_local_url('peoplesearch'),
_('Search'), _('Search for people or text'), false, 'nav_search');
}
// We are replacing the primary nav entirely; give other
// plugins a chance to handle it here.
Event::handle('EndPrimaryNav', array($action));
return false;
} }
function onStartShowLocalNavBlock($action) function onStartShowLocalNavBlock($action)
@ -357,7 +321,7 @@ class FBConnectPlugin extends Plugin
} }
function onStartLogout($action) function onStartLogout($action)
{ {
$action->logout(); $action->logout();
$fbuid = $this->loggedIn(); $fbuid = $this->loggedIn();