X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FRealtime%2FRealtimePlugin.php;h=bf847acca3ea487ca471a775c7c9b117a0bd62ab;hb=d6b28c64830f632bb2f4b6f3c9369b9e56ad217a;hp=0fa51ce8612372eac33e2c34fa3010932f8bc9b8;hpb=d155936d98cf1e1511c3311c340c634c9c9cc2bb;p=quix0rs-gnu-social.git diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php index 0fa51ce861..bf847acca3 100644 --- a/plugins/Realtime/RealtimePlugin.php +++ b/plugins/Realtime/RealtimePlugin.php @@ -22,14 +22,14 @@ * @category Plugin * @package StatusNet * @author Evan Prodromou + * @author Mikael Nordfeldth * @copyright 2009 StatusNet, Inc. + * @copyright 2014 Free Software Foundation, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ -if (!defined('STATUSNET') && !defined('LACONICA')) { - exit(1); -} +if (!defined('GNUSOCIAL')) { exit(1); } /** * Superclass for plugin to do realtime updates @@ -37,6 +37,8 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { * Based on experience with the Comet and Meteor plugins, * this superclass extracts out some of the common functionality * + * Currently depends on Favorite plugin. + * * @category Plugin * @package StatusNet * @author Evan Prodromou @@ -66,31 +68,13 @@ class RealtimePlugin extends Plugin return true; } - function onAutoload($cls) - { - $dir = dirname(__FILE__); - - switch ($cls) - { - case 'KeepalivechannelAction': - case 'ClosechannelAction': - include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; - return false; - case 'Realtime_channel': - include_once $dir.'/'.$cls.'.php'; - return false; - default: - return true; - } - } - /** * Hook for RouterInitialized event. * - * @param Net_URL_Mapper $m path-to-action mapper + * @param URLMapper $m path-to-action mapper * @return boolean hook return */ - function onRouterInitialized($m) + public function onRouterInitialized(URLMapper $m) { $m->connect('main/channel/:channelkey/keepalive', array('action' => 'keepalivechannel'), @@ -101,7 +85,7 @@ class RealtimePlugin extends Plugin return true; } - function onEndShowScripts($action) + function onEndShowScripts(Action $action) { $channel = $this->_getChannel($action); @@ -158,15 +142,15 @@ class RealtimePlugin extends Plugin return true; } - function onEndShowStatusNetStyles($action) + public function onEndShowStylesheets(Action $action) { - $action->cssLink(Plugin::staticPath('Realtime', 'realtimeupdate.css'), - null, - 'screen, projection, tv'); + $urlpath = self::staticPath(str_replace('Plugin','',__CLASS__), + 'css/realtimeupdate.css'); + $action->cssLink($urlpath, null, 'screen, projection, tv'); return true; } - function onHandleQueuedNotice($notice) + public function onHandleQueuedNotice(Notice $notice) { $paths = array(); @@ -179,16 +163,19 @@ class RealtimePlugin extends Plugin return true; } - $user = User::staticGet('id', $notice->profile_id); - - if (!empty($user)) { + try { + $user = $profile->getUser(); $paths[] = array('showstream', $user->nickname, null); + } catch (NoSuchUserException $e) { + // We really should handle the remote profile views too + $user = null; } // Add to the public timeline - if ($notice->is_local == Notice::LOCAL_PUBLIC || - ($notice->is_local == Notice::REMOTE && !common_config('public', 'localonly'))) { + $is_local = intval($notice->is_local); + if ($is_local === Notice::LOCAL_PUBLIC || + ($is_local === Notice::REMOTE && !common_config('public', 'localonly'))) { $paths[] = array('public', null, null); } @@ -208,7 +195,7 @@ class RealtimePlugin extends Plugin $ni = $notice->whoGets(); foreach (array_keys($ni) as $user_id) { - $user = User::staticGet('id', $user_id); + $user = User::getKV('id', $user_id); $paths[] = array('all', $user->nickname, null); } @@ -219,7 +206,7 @@ class RealtimePlugin extends Plugin if ($reply->find()) { while ($reply->fetch()) { - $user = User::staticGet('id', $reply->profile_id); + $user = User::getKV('id', $reply->profile_id); if (!empty($user)) { $paths[] = array('replies', $user->nickname, null); } @@ -234,7 +221,7 @@ class RealtimePlugin extends Plugin if ($gi->find()) { while ($gi->fetch()) { - $ug = User_group::staticGet('id', $gi->group_id); + $ug = User_group::getKV('id', $gi->group_id); $paths[] = array('showgroup', $ug->nickname, null); } } @@ -265,7 +252,7 @@ class RealtimePlugin extends Plugin if (is_null($channel->user_id)) { $profile = null; } else { - $profile = Profile::staticGet('id', $channel->user_id); + $profile = Profile::getKV('id', $channel->user_id); } if ($notice->inScope($profile)) { $this->log(LOG_INFO, @@ -324,7 +311,7 @@ class RealtimePlugin extends Plugin return false; // No default processing } - function noticeAsJson($notice) + function noticeAsJson(Notice $notice) { // FIXME: this code should be abstracted to a neutral third // party, like Notice::asJson(). I'm not sure of the ethics @@ -334,10 +321,10 @@ class RealtimePlugin extends Plugin $act = new ApiAction('/dev/null'); $arr = $act->twitterStatusArray($notice, true); - $arr['url'] = $notice->bestUrl(); + $arr['url'] = $notice->getUrl(true); $arr['html'] = htmlspecialchars($notice->rendered); $arr['source'] = htmlspecialchars($arr['source']); - $arr['conversation_url'] = $this->getConversationUrl($notice); + $arr['conversation_url'] = $notice->getConversationUrl(); $profile = $notice->getProfile(); $arr['user']['profile_url'] = $profile->profileurl; @@ -345,22 +332,22 @@ class RealtimePlugin extends Plugin // Add needed repeat data if (!empty($notice->repeat_of)) { - $original = Notice::staticGet('id', $notice->repeat_of); - if (!empty($original)) { - $arr['retweeted_status']['url'] = $original->bestUrl(); + $original = Notice::getKV('id', $notice->repeat_of); + if ($original instanceof Notice) { + $arr['retweeted_status']['url'] = $original->getUrl(true); $arr['retweeted_status']['html'] = htmlspecialchars($original->rendered); $arr['retweeted_status']['source'] = htmlspecialchars($original->source); $originalProfile = $original->getProfile(); $arr['retweeted_status']['user']['profile_url'] = $originalProfile->profileurl; - $arr['retweeted_status']['conversation_url'] = $this->getConversationUrl($original); + $arr['retweeted_status']['conversation_url'] = $original->getConversationUrl(); } - $original = null; + unset($original); } return $arr; } - function getNoticeTags($notice) + function getNoticeTags(Notice $notice) { $tags = null; @@ -380,41 +367,11 @@ class RealtimePlugin extends Plugin return $tags; } - function getConversationUrl($notice) - { - $convurl = null; - - if ($notice->hasConversation()) { - $conv = Conversation::staticGet( - 'id', - $notice->conversation - ); - $convurl = $conv->uri; - - if(empty($convurl)) { - $msg = sprintf( "Could not find Conversation ID %d to make 'in context'" - . "link for Notice ID %d.", - $notice->conversation, - $notice->id - ); - - common_log(LOG_WARNING, $msg); - } else { - $convurl .= '#notice-' . $notice->id; - } - } - - return $convurl; - } - function _getScripts() { - if (common_config('site', 'minify')) { - $js = 'realtimeupdate.min.js'; - } else { - $js = 'realtimeupdate.js'; - } - return array(Plugin::staticPath('Realtime', $js)); + $urlpath = self::staticPath(str_replace('Plugin','',__CLASS__), + 'js/realtimeupdate.js'); + return array($urlpath); } /** @@ -425,7 +382,7 @@ class RealtimePlugin extends Plugin * * @return boolean hook return value */ - function onEndScriptMessages($action, &$messages) + function onEndScriptMessages(Action $action, &$messages) { // TRANS: Text label for realtime view "play" button, usually replaced by an icon. $messages['realtime_play'] = _m('BUTTON', 'Play');