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(),
// but we actually do, for IE and Safari. Gar.
$html = sprintf('<script type="text/javascript">
$(document).ready(function () {
FB_RequireFeatures(
["XFBML"],
function() {
FB.init("%s", "../xd_receiver.html");
}
); });
$js = '<script type="text/javascript">';
$js .= ' $(document).ready(function () {';
$js .= ' FB_RequireFeatures(';
$js .= ' ["XFBML"], function() {';
$js .= ' FB.init("%1$s", "../xd_receiver.html");';
$js .= ' }';
$js .= ' );';
$js .= ' });';
function goto_login() {
window.location = "%s";
}
$js .= ' function goto_login() {';
$js .= ' window.location = "%2$s";';
$js .= ' }';
function goto_logout() {
window.location = "%s";
}
</script>', $apikey,
$login_url, $logout_url);
// The below function alters the logout link so that it logs the user out
// of Facebook Connect as well as the site. However, for some pages
// (FB Connect Settings) we need to output the FB Connect scripts (to
// show an existing FB connection even if the user isn't authenticated
// 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)
{
if ($this->reqFbScripts($action)) {
$action->cssLink('plugins/FBConnect/FBConnectPlugin.css');
}
@ -269,66 +290,9 @@ class FBConnectPlugin extends Plugin
$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');
$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;
return true;
}
function onStartShowLocalNavBlock($action)
@ -357,7 +321,7 @@ class FBConnectPlugin extends Plugin
}
function onStartLogout($action)
{
{
$action->logout();
$fbuid = $this->loggedIn();