X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FFacebookBridge%2FFacebookBridgePlugin.php;h=83170396d2f77a1d2df8c6b13221fa348426746b;hb=3f28b17c86c4cd88d4f39629ea8a89ec3a820790;hp=d893baf62d9f703054ea853a21c47dd4038706f9;hpb=c97048d01bea468e0cf8865b60c3c250b4515c39;p=quix0rs-gnu-social.git diff --git a/plugins/FacebookBridge/FacebookBridgePlugin.php b/plugins/FacebookBridge/FacebookBridgePlugin.php index d893baf62d..83170396d2 100644 --- a/plugins/FacebookBridge/FacebookBridgePlugin.php +++ b/plugins/FacebookBridge/FacebookBridgePlugin.php @@ -1,7 +1,7 @@ . * - * @category Pugin + * @category Plugin * @package StatusNet * @author Zach Copley * @copyright 2011 StatusNet, Inc. @@ -41,7 +41,7 @@ define("FACEBOOK_SERVICE", 2); * @category Plugin * @package StatusNet * @author Zach Copley - * @copyright 2010 StatusNet, Inc. + * @copyright 2010-2011 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ @@ -103,30 +103,15 @@ class FacebookBridgePlugin extends Plugin { $dir = dirname(__FILE__); - //common_debug("class = " . $cls); - switch ($cls) { case 'Facebook': // Facebook PHP SDK + include_once $dir . '/extlib/base_facebook.php'; include_once $dir . '/extlib/facebook.php'; return false; - case 'FacebookloginAction': - case 'FacebookfinishloginAction': - case 'FacebookadminpanelAction': - case 'FacebooksettingsAction': - case 'FacebookdeauthorizeAction': - include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; - return false; - case 'Facebookclient': - case 'FacebookQueueHandler': - include_once $dir . '/lib/' . strtolower($cls) . '.php'; - return false; - case 'Notice_to_item': - include_once $dir . '/classes/' . $cls . '.php'; - return false; - default: - return true; } + + return parent::onAutoload($cls); } /** @@ -168,11 +153,11 @@ class FacebookBridgePlugin extends Plugin /** * Map URLs to actions * - * @param Net_URL_Mapper $m path-to-action mapper + * @param URLMapper $m path-to-action mapper * * @return boolean hook value; true means continue processing, false means stop. */ - function onRouterInitialized($m) + public function onRouterInitialized(URLMapper $m) { // Always add the admin panel route $m->connect('panel/facebook', array('action' => 'facebookadminpanel')); @@ -244,7 +229,7 @@ class FacebookBridgePlugin extends Plugin * * @return boolean hook value */ - function onEndAdminPanelNav($nav) + function onEndAdminPanelNav(Menu $nav) { if (AdminPanelAction::canAdmin('facebook')) { @@ -277,8 +262,7 @@ class FacebookBridgePlugin extends Plugin if ($this->hasApplication()) { $action_name = $action->trimmed('action'); - // CurrentUserDesignAction stores the current user in $cur - $user = $action->getCurrentUser(); + $user = common_current_user(); $flink = null; @@ -345,33 +329,42 @@ class FacebookBridgePlugin extends Plugin * @param Action $action the current action * */ - function onEndShowScripts($action) + function onEndShowScripts(Action $action) { if ($this->needsScripts($action)) { $action->script('https://connect.facebook.net/en_US/all.js'); $script = <<inlineScript( - sprintf($script, + sprintf( + $script, json_encode($this->facebook->getAppId()), - json_encode($this->facebook->getSession()), common_local_url('facebookfinishlogin') ) ); @@ -383,26 +376,30 @@ ENDOFSCRIPT; * * @param Action action the current action */ - function onEndLogout($action) + function onStartLogout($action) { if ($this->hasApplication()) { - $session = $this->facebook->getSession(); - $fbuser = null; - $fbuid = null; - - if ($session) { - try { - $fbuid = $this->facebook->getUser(); - $fbuser = $this->facebook->api('/me'); - } catch (FacebookApiException $e) { - common_log(LOG_ERROR, $e, __FILE__); - } - } - if (!empty($fbuser)) { + $cur = common_current_user(); + $flink = Foreign_link::getByUserID($cur->id, FACEBOOK_SERVICE); + + if (!empty($flink)) { + + $this->facebook->setAccessToken($flink->credentials); + + if (common_config('singleuser', 'enabled')) { + $user = User::singleUser(); + + $destination = common_local_url( + 'showstream', + array('nickname' => $user->nickname) + ); + } else { + $destination = common_local_url('public'); + } $logoutUrl = $this->facebook->getLogoutUrl( - array('next' => common_local_url('public')) + array('next' => $destination) ); common_log( @@ -413,9 +410,13 @@ ENDOFSCRIPT; ), __FILE__ ); - common_debug("LOGOUT URL = $logoutUrl"); + + $action->logout(); + common_redirect($logoutUrl, 303); } + + return true; } } @@ -448,7 +449,7 @@ ENDOFSCRIPT; * * @return boolean hook return */ - function onStartEnqueueNotice($notice, &$transports) + function onStartEnqueueNotice(Notice $notice, array &$transports) { if (self::hasApplication() && $notice->isLocal() && $notice->inScope(null)) { array_push($transports, 'facebook'); @@ -543,16 +544,79 @@ ENDOFSCRIPT; return true; } + /** + * Add links in the user's profile block to their Facebook profile URL. + * + * @param Profile $profile The profile being shown + * @param Array &$links Writeable array of arrays (href, text, image). + * + * @return boolean hook value (true) + */ + + function onOtherAccountProfiles($profile, &$links) + { + $fuser = null; + + $flink = Foreign_link::getByUserID($profile->id, FACEBOOK_SERVICE); + + if (!empty($flink)) { + + $fuser = $this->getFacebookUser($flink->foreign_id); + + if (!empty($fuser)) { + $links[] = array("href" => $fuser->link, + "text" => sprintf(_("%s on Facebook"), $fuser->name), + "image" => $this->path("images/f_logo.png")); + } + } + + return true; + } + + function getFacebookUser($id) { + + $key = Cache::key(sprintf("FacebookBridgePlugin:userdata:%s", $id)); + + $c = Cache::instance(); + + if ($c) { + $obj = $c->get($key); + if ($obj) { + return $obj; + } + } + + $url = sprintf("https://graph.facebook.com/%s", $id); + $client = new HTTPClient(); + $resp = $client->get($url); + + if (!$resp->isOK()) { + return null; + } + + $user = json_decode($resp->getBody()); + + if ($user->error) { + return null; + } + + if ($c) { + $c->set($key, $user); + } + + return $user; + } + /* * Add version info for this plugin * * @param array &$versions plugin version descriptions */ - function onPluginVersion(&$versions) + function onPluginVersion(array &$versions) { $versions[] = array( 'name' => 'Facebook Bridge', - 'version' => STATUSNET_VERSION, + 'version' => GNUSOCIAL_VERSION, 'author' => 'Craig Andrews, Zach Copley', 'homepage' => 'http://status.net/wiki/Plugin:FacebookBridge', 'rawdescription' =>