* @category Plugin
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
+ * @author Mikael Nordfeldth <mmn@hethane.se>
* @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')) {
- exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
/**
* Superclass for plugin to do realtime updates
* 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 <evan@status.net>
/**
* 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'),
return true;
}
- function onEndShowScripts($action)
+ function onEndShowScripts(Action $action)
{
$channel = $this->_getChannel($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();
return true;
}
- $user = User::getKV('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);
}
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
$act = new ApiAction('/dev/null');
$arr = $act->twitterStatusArray($notice, true);
- $arr['url'] = $notice->bestUrl();
- $arr['html'] = htmlspecialchars($notice->rendered);
+ $arr['url'] = $notice->getUrl(true);
+ $arr['html'] = htmlspecialchars($notice->getRendered());
$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;
if (!empty($notice->repeat_of)) {
$original = Notice::getKV('id', $notice->repeat_of);
- if (!empty($original)) {
- $arr['retweeted_status']['url'] = $original->bestUrl();
- $arr['retweeted_status']['html'] = htmlspecialchars($original->rendered);
+ if ($original instanceof Notice) {
+ $arr['retweeted_status']['url'] = $original->getUrl(true);
+ $arr['retweeted_status']['html'] = htmlspecialchars($original->getRendered());
$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;
return $tags;
}
- function getConversationUrl($notice)
- {
- $convurl = null;
-
- if ($notice->hasConversation()) {
- $conv = Conversation::getKV(
- '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);
}
/**
*
* @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');