From 36d56232c6aa7714fc3e75f004b33826fc7e1214 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 21 Apr 2011 13:37:05 -0400 Subject: [PATCH] a little better notice hiding --- lib/threadednoticelist.php | 34 +++++++++++++++++++++++----------- plugins/Event/EventPlugin.php | 12 ++++-------- plugins/Poll/PollPlugin.php | 12 ++++-------- 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/lib/threadednoticelist.php b/lib/threadednoticelist.php index 96be0df0c5..221cf33aae 100644 --- a/lib/threadednoticelist.php +++ b/lib/threadednoticelist.php @@ -192,17 +192,20 @@ class ThreadedNoticeListItem extends NoticeListItem $cnt = 0; $moreCutoff = null; while ($notice->fetch()) { - if ($notice->id == $this->notice->id) { - // Skip! - continue; + 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)); } - $cnt++; - if ($cnt > $max) { - // boo-yah - $moreCutoff = clone($notice); - break; - } - $notices[] = clone($notice); // *grumble* inefficient as hell } if (Event::handle('StartShowThreadedNoticeTail', array($this, $this->notice, &$notices))) { @@ -215,8 +218,9 @@ class ThreadedNoticeListItem extends NoticeListItem $hasRepeats = $item->show(); if ($notices) { + if ($moreCutoff) { - $item = new ThreadedNoticeListMoreItem($moreCutoff, $this->out); + $item = new ThreadedNoticeListMoreItem($moreCutoff, $this->out, count($notices)); $item->show(); } foreach (array_reverse($notices) as $notice) { @@ -306,6 +310,14 @@ class ThreadedNoticeListSubItem extends NoticeListItem */ class ThreadedNoticeListMoreItem extends NoticeListItem { + protected $cnt; + + function __construct($notice, $out, $cnt) + { + parent::__construct($notice, $out); + $this->cnt = $cnt; + } + /** * recipe function for displaying a single notice. * diff --git a/plugins/Event/EventPlugin.php b/plugins/Event/EventPlugin.php index a9644e7a2c..dfbcfd8dc6 100644 --- a/plugins/Event/EventPlugin.php +++ b/plugins/Event/EventPlugin.php @@ -348,17 +348,13 @@ class EventPlugin extends MicroappPlugin return true; } - function onStartShowThreadedNoticeTail($nli, $notice, &$children) + function onStartAddNoticeReply($nli, $parent, $child) { // Filter out any poll responses - if ($notice->object_type == Happening::OBJECT_TYPE) { - $children = array_filter($children, array($this, 'isNotRSVP')); + if (($parent->object_type == Happening::OBJECT_TYPE) && + in_array($child->object_type, array(RSVP::POSITIVE, RSVP::NEGATIVE, RSVP::POSSIBLE))) { + return false; } return true; } - - function isNotRSVP($notice) - { - return (!in_array($notice->object_type, array(RSVP::POSITIVE, RSVP::NEGATIVE, RSVP::POSSIBLE))); - } } diff --git a/plugins/Poll/PollPlugin.php b/plugins/Poll/PollPlugin.php index f9b5808b1c..5a7d5c22fd 100644 --- a/plugins/Poll/PollPlugin.php +++ b/plugins/Poll/PollPlugin.php @@ -481,17 +481,13 @@ class PollPlugin extends MicroAppPlugin return _m('APPTITLE','Poll'); } - function onStartShowThreadedNoticeTail($nli, $notice, &$children) + function onStartAddNoticeReply($nli, $parent, $child) { // Filter out any poll responses - if ($notice->object_type == self::POLL_OBJECT) { - $children = array_filter($children, array($this, 'isNotPollResponse')); + if ($parent->object_type == self::POLL_OBJECT && + $child->object_type == self::POLL_RESPONSE_OBJECT) { + return false; } return true; } - - function isNotPollResponse($notice) - { - return ($notice->object_type != self::POLL_RESPONSE_OBJECT); - } }