]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Realtime/RealtimePlugin.php
Fixed more type-hints for safety.
[quix0rs-gnu-social.git] / plugins / Realtime / RealtimePlugin.php
index 69182b14fe242d515cce144eec8cad09531d5c92..2ef20277e7798cf209a3f1d5f6110eaf32928627 100644 (file)
  * @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
@@ -37,6 +37,8 @@ if (!defined('STATUSNET')) {
  * 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>
@@ -69,10 +71,10 @@ class RealtimePlugin extends Plugin
     /**
      * 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'),
@@ -83,7 +85,7 @@ class RealtimePlugin extends Plugin
         return true;
     }
 
-    function onEndShowScripts($action)
+    function onEndShowScripts(Action $action)
     {
         $channel = $this->_getChannel($action);
 
@@ -142,13 +144,13 @@ class RealtimePlugin extends Plugin
 
     public function onEndShowStylesheets(Action $action)
     {
-        $action->cssLink(self::staticPath(__CLASS__, 'css/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();
 
@@ -161,10 +163,12 @@ class RealtimePlugin extends Plugin
             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
@@ -306,7 +310,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
@@ -316,10 +320,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;
@@ -328,21 +332,21 @@ class RealtimePlugin extends Plugin
 
         if (!empty($notice->repeat_of)) {
             $original = Notice::getKV('id', $notice->repeat_of);
-            if (!empty($original)) {
-                $arr['retweeted_status']['url'] = $original->bestUrl();
+            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;
 
@@ -362,36 +366,11 @@ class RealtimePlugin extends Plugin
         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()
     {
-        return array(self::staticPath(__CLASS__, 'js/realtimeupdate.js'));
+        $urlpath = self::staticPath(str_replace('Plugin','',__CLASS__),
+                                    'js/realtimeupdate.js');
+        return array($urlpath);
     }
 
     /**
@@ -402,7 +381,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');