diff options
Diffstat (limited to 'plugins/FBConnect/FBConnectPlugin.php')
-rw-r--r-- | plugins/FBConnect/FBConnectPlugin.php | 63 |
1 files changed, 37 insertions, 26 deletions
diff --git a/plugins/FBConnect/FBConnectPlugin.php b/plugins/FBConnect/FBConnectPlugin.php index c85ef432d..a366985be 100644 --- a/plugins/FBConnect/FBConnectPlugin.php +++ b/plugins/FBConnect/FBConnectPlugin.php @@ -39,6 +39,7 @@ require_once INSTALLDIR . '/plugins/FBConnect/FBConnectLogin.php'; require_once INSTALLDIR . '/plugins/FBConnect/FBConnectSettings.php'; require_once INSTALLDIR . '/plugins/FBConnect/FBCLoginGroupNav.php'; require_once INSTALLDIR . '/plugins/FBConnect/FBCSettingsNav.php'; +require_once INSTALLDIR . '/plugins/FBConnect/FBC_XDReceiver.php'; /** * Plugin to enable Facebook Connect @@ -62,27 +63,19 @@ class FBConnectPlugin extends Plugin $m->connect('main/facebookconnect', array('action' => 'FBConnectAuth')); $m->connect('main/facebooklogin', array('action' => 'FBConnectLogin')); $m->connect('settings/facebook', array('action' => 'FBConnectSettings')); + $m->connect('xd_receiver.html', array('action' => 'FBC_XDReceiver')); } // Add in xmlns:fb function onStartShowHTML($action) { - $httpaccept = isset($_SERVER['HTTP_ACCEPT']) ? - $_SERVER['HTTP_ACCEPT'] : null; - - // XXX: allow content negotiation for RDF, RSS, or XRDS - - $cp = common_accept_to_prefs($httpaccept); - $sp = common_accept_to_prefs(PAGE_TYPE_PREFS); - - $type = common_negotiate_type($cp, $sp); - - if (!$type) { - throw new ClientException(_('This page is not available in a '. - 'media type you accept'), 406); - } - - header('Content-Type: '.$type); + // XXX: Horrible hack to make Safari, FF2, and Chrome work with + // Facebook Connect. These browser cannot use Facebook's + // DOM parsing routines unless the mime type of the page is + // text/html even though Facebook Connect uses XHTML. This is + // A bug in Facebook Connect, and this is a temporary solution + // until they fix their JavaScript libs. + header('Content-Type: text/html'); $action->extraHeaders(); @@ -101,20 +94,27 @@ class FBConnectPlugin extends Plugin 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'), - ' '); + // Note: this script needs to appear in the <body> + function onStartShowHeader($action) + { $apikey = common_config('facebook', 'apikey'); $plugin_path = common_path('plugins/FBConnect'); $login_url = common_local_url('FBConnectAuth'); $logout_url = common_local_url('logout'); - $html = sprintf('<script type="text/javascript">FB.init("%s", "%s/xd_receiver.htm"); + // 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"> + window.onload = function () { + FB_RequireFeatures( + ["XFBML"], + function() { + FB.Facebook.init("%s", "../xd_receiver.html"); + } + ); } function goto_login() { window.location = "%s"; @@ -123,11 +123,21 @@ class FBConnectPlugin extends Plugin function goto_logout() { window.location = "%s"; } + </script>', $apikey, + $login_url, $logout_url); - </script>', $apikey, $plugin_path, $login_url, $logout_url); + $action->raw($html); + } + // Note: this script needs to appear as close as possible to </body> - $action->raw($html); + function onEndShowFooter($action) + { + + $action->element('script', + array('type' => 'text/javascript', + 'src' => 'http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php'), + ''); } function onEndShowLaconicaStyles($action) @@ -143,7 +153,8 @@ class FBConnectPlugin extends Plugin if ($user) { - $flink = Foreign_link::getByUserId($user->id, FACEBOOK_CONNECT_SERVICE); + $flink = Foreign_link::getByUserId($user->id, + FACEBOOK_CONNECT_SERVICE); $fbuid = 0; if ($flink) { |