diff --git a/lib/noticelist.php b/lib/noticelist.php index f18b2d6684..c52380dfc9 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -83,17 +83,16 @@ class NoticeList extends Widget $this->out->elementStart('div', array('id' =>'notices_primary')); $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(); + + $notices = array_slice($notices, 0, NOTICES_PER_PAGE); + + $this->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 @@ -105,7 +104,7 @@ class NoticeList extends Widget $this->out->elementEnd('ol'); $this->out->elementEnd('div'); - return $cnt; + return count($notices); } /** @@ -122,4 +121,10 @@ class NoticeList extends Widget { return new NoticeListItem($notice, $this->out); } + + function prefill(&$notices) + { + // Prefill the profiles + Notice::fillProfiles($notices); + } } diff --git a/lib/noticestream.php b/lib/noticestream.php index 010bfab60e..e9ff47b68c 100644 --- a/lib/noticestream.php +++ b/lib/noticestream.php @@ -59,9 +59,6 @@ abstract class NoticeStream static function getStreamByIds($ids) { - $notices = Notice::multiGet('id', $ids); - // Prefill the profiles - Notice::fillProfiles($notices->fetchAll()); - return $notices; + return Notice::multiGet('id', $ids); } } diff --git a/lib/threadednoticelist.php b/lib/threadednoticelist.php index 43494bab1a..45c11453a7 100644 --- a/lib/threadednoticelist.php +++ b/lib/threadednoticelist.php @@ -76,17 +76,18 @@ class ThreadedNoticeList extends NoticeList $this->out->element('h2', null, _m('HEADER','Notices')); $this->out->elementStart('ol', array('class' => 'notices threaded-notices xoxo')); + $notices = $this->notice->fetchAll(); + $notices = array_slice($notices, 0, NOTICES_PER_PAGE); + + $this->prefill($notices); + $cnt = 0; $conversations = array(); - while ($this->notice->fetch() && $cnt <= NOTICES_PER_PAGE) { - $cnt++; - - if ($cnt > NOTICES_PER_PAGE) { - break; - } + + foreach ($notices as $notice) { // Collapse repeats into their originals... - $notice = $this->notice; + if ($notice->repeat_of) { $orig = Notice::staticGet('id', $notice->repeat_of); if ($orig) { @@ -223,6 +224,8 @@ class ThreadedNoticeListItem extends NoticeListItem $item = new ThreadedNoticeListMoreItem($moreCutoff, $this->out, count($notices)); $item->show(); } + // XXX: replicating NoticeList::prefill(), annoyingly + $this->prefill($notices); foreach (array_reverse($notices) as $notice) { if (Event::handle('StartShowThreadedNoticeSub', array($this, $this->notice, $notice))) { $item = new ThreadedNoticeListSubItem($notice, $this->notice, $this->out); @@ -247,6 +250,12 @@ class ThreadedNoticeListItem extends NoticeListItem parent::showEnd(); } + + function prefill(&$notices) + { + // Prefill the profiles + Notice::fillProfiles($notices); + } } // @todo FIXME: needs documentation.