]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Use an Event to present notices conversations
authorMikael Nordfeldth <mmn@hethane.se>
Mon, 12 May 2014 08:27:52 +0000 (10:27 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Mon, 12 May 2014 09:03:21 +0000 (11:03 +0200)
EVENTS.txt
actions/conversation.php
classes/Conversation.php

index fe36855785caf9dc47a4d6bbfa67409b060f46e4..6e32042453895261b9537884224bdb604c21e62a 100644 (file)
@@ -1298,6 +1298,16 @@ EndShowGroupProfileBlock: After showing the profile block for a group
 - $out: XMLOutputter to append custom output
 - $group: the group being shown
 
+StartShowConversation: start the listing of a conversation
+- $action: Action object (used mainly as HTMLOutputter)
+- $conv: Conversation object, has functions to retrieve relevant notices
+- $scoped: Profile for scoping (null if not logged in)
+
+EndShowConversation: after the listing of a conversation
+- $action: Action object (used mainly as HTMLOutputter)
+- $conv: Conversation object, has functions to retrieve relevant notices
+- $scoped: Profile for scoping (null if not logged in)
+
 StartShowThreadedNoticeTail: when showing the replies etc. to a notice
 - $nli: parent noticelistitem
 - $notice: parent notice
index 3eb588c6513a6e4e1b8c7ec886f30cb956ceadb1..3b6f48c853f59a976d22e7340616f11e67e87162 100644 (file)
@@ -7,6 +7,7 @@
  * @category Action
  * @package  StatusNet
  * @author   Evan Prodromou <evan@status.net>
+ * @author   Mikael Nordfeldth <mmn@hethane.se>
  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
  * @link     http://status.net/
  *
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-if (!defined('STATUSNET') && !defined('LACONICA')) {
-    exit(1);
-}
-
-// XXX: not sure how to do paging yet,
-// so set a 60-notice limit
-
-require_once INSTALLDIR.'/lib/noticelist.php';
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * Conversation tree in the browser
  *
+ * Will always try to show the entire conversation, since that's how our
+ * ConversationNoticeStream works.
+ *
  * @category Action
  * @package  StatusNet
  * @author   Evan Prodromou <evan@status.net>
+ * @author   Mikael Nordfeldth <mmn@hethane.se>
  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
  * @link     http://status.net/
  */
 class ConversationAction extends ManagedAction
 {
-    var $id          = null;
+    var $conv        = null;
     var $page        = null;
     var $notices     = null;
 
-    const MAX_NOTICES = 500;
-
     /**
      * Initialization.
      *
@@ -63,19 +59,12 @@ class ConversationAction extends ManagedAction
     protected function prepare(array $args=array())
     {
         parent::prepare($args);
-        $this->id = $this->trimmed('id');
-        if (empty($this->id)) {
-            return false;
-        }
-        $this->id = $this->id+0;
-        $this->page = $this->trimmed('page');
-        if (empty($this->page)) {
-            $this->page = 1;
-        }
-
-        $stream = new ConversationNoticeStream($this->id, $this->scoped);
+        $convId = $this->int('id');
 
-        $this->notices = $stream->getNotices(0, self::MAX_NOTICES);
+        $this->conv = Conversation::getKV('id', $convId);
+        if (!$this->conv instanceof Conversation) {
+            throw new ClientException('Could not find specified conversation');
+        }
 
         return true;
     }
@@ -94,22 +83,18 @@ class ConversationAction extends ManagedAction
     /**
      * Show content.
      *
-     * Display a hierarchical unordered list in the content area.
-     * Uses ConversationTree to do most of the heavy lifting.
+     * NoticeList extended classes do most heavy lifting. Plugins can override.
      *
      * @return void
      */
     function showContent()
     {
-        $user = common_current_user();
-
-        if (!empty($user) && $user->conversationTree()) {
-            $nl = new ConversationTree($this->notices, $this);
-        } else {
-            $nl = new FullThreadedNoticeList($this->notices, $this, $this->scoped);
+        if (Event::handle('StartShowConversation', array($this, $this->conv, $this->scoped))) {
+            $notices = $this->conv->getNotices();
+            $nl = new FullThreadedNoticeList($notices, $this, $this->scoped);
+            $cnt = $nl->show();
         }
-
-        $cnt = $nl->show();
+        Event::handle('EndShowConversation', array($this, $this->conv, $this->scoped));
     }
 
     function isReadOnly()
@@ -123,7 +108,7 @@ class ConversationAction extends ManagedAction
         return array(new Feed(Feed::JSON,
                               common_local_url('apiconversation',
                                                array(
-                                                    'id' => $this->id,
+                                                    'id' => $this->conv->id,
                                                     'format' => 'as')),
                               // TRANS: Title for link to notice feed.
                               // TRANS: %s is a user nickname.
@@ -131,7 +116,7 @@ class ConversationAction extends ManagedAction
                      new Feed(Feed::RSS2,
                               common_local_url('apiconversation',
                                                array(
-                                                    'id' => $this->id,
+                                                    'id' => $this->conv->id,
                                                     'format' => 'rss')),
                               // TRANS: Title for link to notice feed.
                               // TRANS: %s is a user nickname.
@@ -139,7 +124,7 @@ class ConversationAction extends ManagedAction
                      new Feed(Feed::ATOM,
                               common_local_url('apiconversation',
                                                array(
-                                                    'id' => $this->id,
+                                                    'id' => $this->conv->id,
                                                     'format' => 'atom')),
                               // TRANS: Title for link to notice feed.
                               // TRANS: %s is a user nickname.
index faca20f9c6e515bef0a2549da243f791def6eb9b..3acc283d62a2eb4ddce6c77206aaed4ff246c933 100755 (executable)
@@ -121,4 +121,15 @@ class Conversation extends Managed_DataObject
         return common_local_url('conversation', array('id' => $this->id)) .
                 ($noticeId===null ? '' : "#notice-{$noticeId}");
     }
+
+    // FIXME: ...will 500 ever be too low? Taken from ConversationAction::MAX_NOTICES
+    public function getNotices($offset=0, $limit=500, Profile $scoped=null)
+    {
+        if ($scoped === null) {
+            $scoped = Profile::current();
+        }
+        $stream = new ConversationNoticeStream($this->id, $scoped);
+        $notices = $stream->getNotices($offset, $limit);
+        return $notices;
+    }
 }