public function onEndShowThreadedNoticeTailItems(NoticeListItem $nli, Notice $notice, &$threadActive) { if ($nli instanceof ThreadedNoticeListSubItem) { // The sub-items are replies to a conversation, thus we use different HTML elements etc. $item = new ThreadedNoticeListInlineFavesItem($notice, $nli->out); } else { $item = new ThreadedNoticeListFavesItem($notice, $nli->out); } $threadActive = $item->show() || $threadActive; return true; }
/** * finish the notice * * Close the last elements in the notice list item * * @return void */ function showEnd() { $max = $this->initialItems(); if (!$this->repeat) { $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))) { 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))) { $this->out->elementStart('ul', 'notices threaded-replies xoxo'); $item = new ThreadedNoticeListFavesItem($this->notice, $this->out); $hasFaves = $item->show(); $item = new ThreadedNoticeListRepeatsItem($this->notice, $this->out); $hasRepeats = $item->show(); if ($notices) { 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('StartShowThreadedNoticeSub', array($this, $this->notice, $notice)); } } } if ($notices || $hasFaves || $hasRepeats) { // @fixme do a proper can-post check that's consistent // with the JS side if (common_current_user()) { $item = new ThreadedNoticeListReplyItem($this->notice, $this->out); $item->show(); } } $this->out->elementEnd('ul'); Event::handle('EndShowThreadedNoticeTail', array($this, $this->notice, $notices)); } } parent::showEnd(); }