/**
  * 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();
 }
Esempio n. 2
0
 /**
  * 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();
 }