]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Split threaded notice list classes into own files.
authorMikael Nordfeldth <mmn@hethane.se>
Mon, 21 Mar 2016 01:33:57 +0000 (02:33 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Mon, 21 Mar 2016 01:33:57 +0000 (02:33 +0100)
lib/threadednoticelist.php
lib/threadednoticelistitem.php [new file with mode: 0644]
lib/threadednoticelistmoreitem.php [new file with mode: 0644]
lib/threadednoticelistsubitem.php [new file with mode: 0644]

index 4b5d28de3f58596562caa0cdb60fcecef38193fe..a68347b9042f6f85469f03ca48a08997e6ac4368 100644 (file)
@@ -152,218 +152,3 @@ class ThreadedNoticeList extends NoticeList
         return new ThreadedNoticeListItem($notice, $this->out, $this->userProfile);
     }
 }
-
-/**
- * widget for displaying a single notice
- *
- * This widget has the core smarts for showing a single notice: what to display,
- * where, and under which circumstances. Its key method is show(); this is a recipe
- * that calls all the other show*() methods to build up a single notice. The
- * ProfileNoticeListItem subclass, for example, overrides showAuthor() to skip
- * author info (since that's implicit by the data in the page).
- *
- * @category UI
- * @package  StatusNet
- * @author   Evan Prodromou <evan@status.net>
- * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
- * @link     http://status.net/
- * @see      NoticeList
- * @see      ProfileNoticeListItem
- */
-class ThreadedNoticeListItem extends NoticeListItem
-{
-    protected $userProfile = null;
-
-    function __construct(Notice $notice, Action $out=null, $profile=null)
-    {
-        parent::__construct($notice, $out);
-        $this->userProfile = $profile;
-    }
-
-    function initialItems()
-    {
-        return 3;
-    }
-
-    /**
-     * finish the notice
-     *
-     * Close the last elements in the notice list item
-     *
-     * @return void
-     */
-    function showEnd()
-    {
-        $max = $this->initialItems();
-        if (!$this->repeat instanceof Notice) {
-            $stream = new ConversationNoticeStream($this->notice->conversation, $this->userProfile);
-            $notice = $stream->getNotices(0, $max + 2);
-            $notices = array();
-            $cnt = 0;
-            $moreCutoff = null;
-            while ($notice->fetch()) {
-                if (Event::handle('StartAddNoticeReply', array($this, $this->notice, $notice))) {
-                    // Don't list repeats as separate notices in a conversation
-                    if (!empty($notice->repeat_of)) {
-                        continue;
-                    }
-
-                    if ($notice->id == $this->notice->id) {
-                        // Skip!
-                        continue;
-                    }
-                    $cnt++;
-                    if ($cnt > $max) {
-                        // boo-yah
-                        $moreCutoff = clone($notice);
-                        break;
-                    }
-                    $notices[] = clone($notice); // *grumble* inefficient as hell
-                    Event::handle('EndAddNoticeReply', array($this, $this->notice, $notice));
-                }
-            }
-
-            if (Event::handle('StartShowThreadedNoticeTail', array($this, $this->notice, &$notices))) {
-                $threadActive = count($notices) > 0; // has this thread had any activity?
-
-                $this->out->elementStart('ul', 'notices threaded-replies xoxo');
-
-                if (Event::handle('StartShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive))) {
-                    // Repeats and Faves/Likes are handled in plugins.
-                    Event::handle('EndShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive));
-                }
-
-                if (count($notices)>0) {
-                    if ($moreCutoff) {
-                        $item = new ThreadedNoticeListMoreItem($moreCutoff, $this->out, count($notices));
-                        $item->show();
-                    }
-                    foreach (array_reverse($notices) as $notice) {
-                        if (Event::handle('StartShowThreadedNoticeSub', array($this, $this->notice, $notice))) {
-                            $item = new ThreadedNoticeListSubItem($notice, $this->notice, $this->out);
-                            $item->show();
-                            Event::handle('EndShowThreadedNoticeSub', array($this, $this->notice, $notice));
-                        }
-                    }
-                }
-
-                Event::handle('EndShowThreadedNoticeTail', array($this, $this->notice, $notices));
-                $this->out->elementEnd('ul');
-            }
-        }
-
-        parent::showEnd();
-    }
-}
-
-// @todo FIXME: needs documentation.
-class ThreadedNoticeListSubItem extends NoticeListItem
-{
-    protected $root = null;
-
-    function __construct(Notice $notice, $root, $out)
-    {
-        $this->root = $root;
-        parent::__construct($notice, $out);
-    }
-
-    function avatarSize()
-    {
-        return AVATAR_STREAM_SIZE; // @fixme would like something in between
-    }
-
-    function showNoticeLocation()
-    {
-        //
-    }
-
-    function showNoticeSource()
-    {
-        //
-    }
-
-    function getAttentionProfiles()
-    {
-        $all = parent::getAttentionProfiles();
-
-        $profiles = array();
-
-        $rootAuthor = $this->root->getProfile();
-
-        foreach ($all as $profile) {
-            if ($profile->id != $rootAuthor->id) {
-                $profiles[] = $profile;
-            }
-        }
-
-        return $profiles;
-    }
-
-    function showEnd()
-    {
-        $threadActive = null;   // unused here for now, but maybe in the future?
-        if (Event::handle('StartShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive))) {
-            // Repeats and Faves/Likes are handled in plugins.
-            Event::handle('EndShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive));
-        }
-        parent::showEnd();
-    }
-}
-
-/**
- * Placeholder for loading more replies...
- */
-class ThreadedNoticeListMoreItem extends NoticeListItem
-{
-    protected $cnt;
-
-    function __construct(Notice $notice, Action $out, $cnt)
-    {
-        parent::__construct($notice, $out);
-        $this->cnt = $cnt;
-    }
-
-    /**
-     * recipe function for displaying a single notice.
-     *
-     * This uses all the other methods to correctly display a notice. Override
-     * it or one of the others to fine-tune the output.
-     *
-     * @return void
-     */
-    function show()
-    {
-        $this->showStart();
-        $this->showMiniForm();
-        $this->showEnd();
-    }
-
-    /**
-     * start a single notice.
-     *
-     * @return void
-     */
-    function showStart()
-    {
-        $this->out->elementStart('li', array('class' => 'notice-reply-comments'));
-    }
-
-    function showEnd()
-    {
-        $this->out->elementEnd('li');
-    }
-
-    function showMiniForm()
-    {
-        $id = $this->notice->conversation;
-        $url = common_local_url('conversation', array('id' => $id));
-
-        $n = Conversation::noticeCount($id) - 1;
-
-        // TRANS: Link to show replies for a notice.
-        // TRANS: %d is the number of replies to a notice and used for plural.
-        $msg = sprintf(_m('Show reply', 'Show all %d replies', $n), $n);
-
-        $this->out->element('a', array('href' => $url), $msg);
-    }
-}
diff --git a/lib/threadednoticelistitem.php b/lib/threadednoticelistitem.php
new file mode 100644 (file)
index 0000000..7e72f6a
--- /dev/null
@@ -0,0 +1,106 @@
+<?php
+
+if (!defined('GNUSOCIAL')) { exit(1); }
+
+/**
+ * widget for displaying a single notice
+ *
+ * This widget has the core smarts for showing a single notice: what to display,
+ * where, and under which circumstances. Its key method is show(); this is a recipe
+ * that calls all the other show*() methods to build up a single notice. The
+ * ProfileNoticeListItem subclass, for example, overrides showAuthor() to skip
+ * author info (since that's implicit by the data in the page).
+ *
+ * @category UI
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
+ * @see      NoticeList
+ * @see      ProfileNoticeListItem
+ */
+class ThreadedNoticeListItem extends NoticeListItem
+{
+    protected $userProfile = null;
+
+    function __construct(Notice $notice, Action $out=null, $profile=null)
+    {
+        parent::__construct($notice, $out);
+        $this->userProfile = $profile;
+    }
+
+    function initialItems()
+    {
+        return 3;
+    }
+
+    /**
+     * finish the notice
+     *
+     * Close the last elements in the notice list item
+     *
+     * @return void
+     */
+    function showEnd()
+    {
+        $max = $this->initialItems();
+        if (!$this->repeat instanceof Notice) {
+            $stream = new ConversationNoticeStream($this->notice->conversation, $this->userProfile);
+            $notice = $stream->getNotices(0, $max + 2);
+            $notices = array();
+            $cnt = 0;
+            $moreCutoff = null;
+            while ($notice->fetch()) {
+                if (Event::handle('StartAddNoticeReply', array($this, $this->notice, $notice))) {
+                    // Don't list repeats as separate notices in a conversation
+                    if (!empty($notice->repeat_of)) {
+                        continue;
+                    }
+
+                    if ($notice->id == $this->notice->id) {
+                        // Skip!
+                        continue;
+                    }
+                    $cnt++;
+                    if ($cnt > $max) {
+                        // boo-yah
+                        $moreCutoff = clone($notice);
+                        break;
+                    }
+                    $notices[] = clone($notice); // *grumble* inefficient as hell
+                    Event::handle('EndAddNoticeReply', array($this, $this->notice, $notice));
+                }
+            }
+
+            if (Event::handle('StartShowThreadedNoticeTail', array($this, $this->notice, &$notices))) {
+                $threadActive = count($notices) > 0; // has this thread had any activity?
+
+                $this->out->elementStart('ul', 'notices threaded-replies xoxo');
+
+                if (Event::handle('StartShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive))) {
+                    // Repeats and Faves/Likes are handled in plugins.
+                    Event::handle('EndShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive));
+                }
+
+                if (count($notices)>0) {
+                    if ($moreCutoff) {
+                        $item = new ThreadedNoticeListMoreItem($moreCutoff, $this->out, count($notices));
+                        $item->show();
+                    }
+                    foreach (array_reverse($notices) as $notice) {
+                        if (Event::handle('StartShowThreadedNoticeSub', array($this, $this->notice, $notice))) {
+                            $item = new ThreadedNoticeListSubItem($notice, $this->notice, $this->out);
+                            $item->show();
+                            Event::handle('EndShowThreadedNoticeSub', array($this, $this->notice, $notice));
+                        }
+                    }
+                }
+
+                Event::handle('EndShowThreadedNoticeTail', array($this, $this->notice, $notices));
+                $this->out->elementEnd('ul');
+            }
+        }
+
+        parent::showEnd();
+    }
+}
diff --git a/lib/threadednoticelistmoreitem.php b/lib/threadednoticelistmoreitem.php
new file mode 100644 (file)
index 0000000..ebd0b78
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+
+if (!defined('GNUSOCIAL')) { exit(1); }
+
+/**
+ * Placeholder for loading more replies...
+ */
+class ThreadedNoticeListMoreItem extends NoticeListItem
+{
+    protected $cnt;
+
+    function __construct(Notice $notice, Action $out, $cnt)
+    {
+        parent::__construct($notice, $out);
+        $this->cnt = $cnt;
+    }
+
+    /**
+     * recipe function for displaying a single notice.
+     *
+     * This uses all the other methods to correctly display a notice. Override
+     * it or one of the others to fine-tune the output.
+     *
+     * @return void
+     */
+    function show()
+    {
+        $this->showStart();
+        $this->showMiniForm();
+        $this->showEnd();
+    }
+
+    /**
+     * start a single notice.
+     *
+     * @return void
+     */
+    function showStart()
+    {
+        $this->out->elementStart('li', array('class' => 'notice-reply-comments'));
+    }
+
+    function showEnd()
+    {
+        $this->out->elementEnd('li');
+    }
+
+    function showMiniForm()
+    {
+        $id = $this->notice->conversation;
+        $url = common_local_url('conversation', array('id' => $id));
+
+        $n = Conversation::noticeCount($id) - 1;
+
+        // TRANS: Link to show replies for a notice.
+        // TRANS: %d is the number of replies to a notice and used for plural.
+        $msg = sprintf(_m('Show reply', 'Show all %d replies', $n), $n);
+
+        $this->out->element('a', array('href' => $url), $msg);
+    }
+}
diff --git a/lib/threadednoticelistsubitem.php b/lib/threadednoticelistsubitem.php
new file mode 100644 (file)
index 0000000..99c6498
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+
+if (!defined('GNUSOCIAL')) { exit(1); }
+
+// @todo FIXME: needs documentation.
+class ThreadedNoticeListSubItem extends NoticeListItem
+{
+    protected $root = null;
+
+    function __construct(Notice $notice, $root, $out)
+    {
+        $this->root = $root;
+        parent::__construct($notice, $out);
+    }
+
+    function avatarSize()
+    {
+        return AVATAR_STREAM_SIZE; // @fixme would like something in between
+    }
+
+    function showNoticeLocation()
+    {
+        //
+    }
+
+    function showNoticeSource()
+    {
+        //
+    }
+
+    function getAttentionProfiles()
+    {
+        $all = parent::getAttentionProfiles();
+
+        $profiles = array();
+
+        $rootAuthor = $this->root->getProfile();
+
+        foreach ($all as $profile) {
+            if ($profile->id != $rootAuthor->id) {
+                $profiles[] = $profile;
+            }
+        }
+
+        return $profiles;
+    }
+
+    function showEnd()
+    {
+        $threadActive = null;   // unused here for now, but maybe in the future?
+        if (Event::handle('StartShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive))) {
+            // Repeats and Faves/Likes are handled in plugins.
+            Event::handle('EndShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive));
+        }
+        parent::showEnd();
+    }
+}