]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/noticelist.php
Replies don't have verbs (we'll do some join magic later)
[quix0rs-gnu-social.git] / lib / noticelist.php
index dbe2a0996f94b565aa7d1df7f8b4d89e3f0462cd..346974f1d29b92fdf62b439b8648aabaa0d37d7e 100644 (file)
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET') && !defined('LACONICA')) {
-    exit(1);
-}
-
-require_once INSTALLDIR.'/lib/favorform.php';
-require_once INSTALLDIR.'/lib/disfavorform.php';
-require_once INSTALLDIR.'/lib/attachmentlist.php';
+if (!defined('GNUSOCIAL') && !defined('STATUSNET')) { exit(1); }
 
 /**
  * widget for displaying a list of notices
@@ -53,7 +47,6 @@ require_once INSTALLDIR.'/lib/attachmentlist.php';
  * @see      NoticeListItem
  * @see      ProfileNoticeList
  */
-
 class NoticeList extends Widget
 {
     /** the current stream of notices being displayed. */
@@ -65,8 +58,7 @@ class NoticeList extends Widget
      *
      * @param Notice $notice stream of notices from DB_DataObject
      */
-
-    function __construct($notice, $out=null)
+    function __construct(Notice $notice, $out=null)
     {
         parent::__construct($out);
         $this->notice = $notice;
@@ -80,24 +72,21 @@ class NoticeList extends Widget
      *
      * @return int count of notices listed.
      */
-
     function show()
     {
         $this->out->elementStart('div', array('id' =>'notices_primary'));
-        $this->out->element('h2', null, _('Notices'));
         $this->out->elementStart('ol', array('class' => 'notices xoxo'));
 
-        $cnt = 0;
-
-        while ($this->notice->fetch() && $cnt <= NOTICES_PER_PAGE) {
-            $cnt++;
-
-            if ($cnt > NOTICES_PER_PAGE) {
-                break;
-            }
+               $notices = $this->notice->fetchAll();
+               $total   = count($notices);
+               $notices = array_slice($notices, 0, NOTICES_PER_PAGE);
+               
+       self::prefill($notices);
+       
+       foreach ($notices as $notice) {
 
             try {
-                $item = $this->newListItem($this->notice);
+                $item = $this->newListItem($notice);
                 $item->show();
             } catch (Exception $e) {
                 // we log exceptions and continue
@@ -109,7 +98,7 @@ class NoticeList extends Widget
         $this->out->elementEnd('ol');
         $this->out->elementEnd('div');
 
-        return $cnt;
+        return $total;
     }
 
     /**
@@ -122,10 +111,30 @@ class NoticeList extends Widget
      *
      * @return NoticeListItem a list item for displaying the notice
      */
-
-    function newListItem($notice)
+    function newListItem(Notice $notice)
     {
         return new NoticeListItem($notice, $this->out);
     }
-}
+    
+    static function prefill(array &$notices)
+    {
+        $scoped = Profile::current();
+        $notice_ids = Notice::_idsOf($notices);
+
+        if (Event::handle('StartNoticeListPrefill', array(&$notices, $notice_ids, $scoped))) {
 
+            // Prefill attachments
+            Notice::fillAttachments($notices);
+            // Prefill repeat data
+            Notice::fillRepeats($notices);
+            // Prefill the profiles
+            $profiles = Notice::fillProfiles($notices);
+
+            if ($scoped instanceof Profile) {
+                Notice::pivotGet('repeat_of', $notice_ids, array('profile_id' => $scoped->id));
+            }
+
+            Event::handle('EndNoticeListPrefill', array(&$notices, &$profiles, $notice_ids, $scoped));
+        }
+    }
+}