From 20f8dd6565f981fc4933529bbbf9772d25a1a285 Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Thu, 12 Mar 2015 19:49:20 +0100 Subject: [PATCH] Repeats shown in threaded noticelist now handled by plugin --- classes/Notice.php | 27 ------ lib/noticelist.php | 6 -- lib/threadednoticelist.php | 90 +------------------ plugins/Favorite/FavoritePlugin.php | 2 +- plugins/Share/SharePlugin.php | 14 ++- .../threadednoticelistinlinerepeatsitem.php | 16 ++++ .../lib/threadednoticelistrepeatsitem.php | 65 ++++++++++++++ 7 files changed, 98 insertions(+), 122 deletions(-) create mode 100644 plugins/Share/lib/threadednoticelistinlinerepeatsitem.php create mode 100644 plugins/Share/lib/threadednoticelistrepeatsitem.php diff --git a/classes/Notice.php b/classes/Notice.php index 8162dddc85..24a4c88d90 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -2901,31 +2901,4 @@ class Notice extends Managed_DataObject $notice->_setReplies($ids); } } - - protected $_repeats = array(); - - function getRepeats() - { - if (isset($this->_repeats[$this->id])) { - return $this->_repeats[$this->id]; - } - $repeatMap = Notice::listGet('repeat_of', array($this->id)); - $this->_repeats[$this->id] = $repeatMap[$this->id]; - return $this->_repeats[$this->id]; - } - - function _setRepeats($repeats) - { - $this->_repeats[$this->id] = $repeats; - } - - static function fillRepeats(&$notices) - { - $ids = self::_idsOf($notices); - $repeatMap = Notice::listGet('repeat_of', $ids); - foreach ($notices as $notice) { - $repeats = $repeatMap[$notice->id]; - $notice->_setRepeats($repeats); - } - } } diff --git a/lib/noticelist.php b/lib/noticelist.php index c9d43c097a..727be89bc6 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -155,15 +155,9 @@ class NoticeList extends Widget // 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)); } } diff --git a/lib/threadednoticelist.php b/lib/threadednoticelist.php index 9eaf6493c6..acb9efb972 100644 --- a/lib/threadednoticelist.php +++ b/lib/threadednoticelist.php @@ -27,7 +27,7 @@ * @link http://status.net/ */ -if (!defined('GNUSOCIAL') && !defined('STATUSNET')) { exit(1); } +if (!defined('GNUSOCIAL')) { exit(1); } /** * widget for displaying a list of notices @@ -229,13 +229,7 @@ class ThreadedNoticeListItem extends NoticeListItem $this->out->elementStart('ul', 'notices threaded-replies xoxo'); if (Event::handle('StartShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive))) { - - // Show the repeats-button for this notice. If there are repeats, - // the show() function will return true, definitely setting our - // $threadActive flag, which will be used later to show a reply box. - $item = new ThreadedNoticeListRepeatsItem($this->notice, $this->out); - $threadActive = $item->show() || $threadActive; - + // Repeats and Faves/Likes are handled in plugins. Event::handle('EndShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive)); } @@ -309,8 +303,7 @@ class ThreadedNoticeListSubItem extends NoticeListItem { $threadActive = null; // unused here for now, but maybe in the future? if (Event::handle('StartShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive))) { - $item = new ThreadedNoticeListInlineRepeatsItem($this->notice, $this->out); - $hasRepeats = $item->show(); + // Repeats and Faves/Likes are handled in plugins. Event::handle('EndShowThreadedNoticeTailItems', array($this, $this->notice, &$threadActive)); } parent::showEnd(); @@ -374,80 +367,3 @@ class ThreadedNoticeListMoreItem extends NoticeListItem $this->out->element('a', array('href' => $url), $msg); } } - -/** - * Placeholder for showing repeats... - */ -class ThreadedNoticeListRepeatsItem extends NoticeListActorsItem -{ - function getProfiles() - { - $repeats = $this->notice->getRepeats(); - - $profiles = array(); - - foreach ($repeats as $rep) { - $profiles[] = $rep->profile_id; - } - - return $profiles; - } - - function magicList($items) - { - if (count($items) > 4) { - return parent::magicList(array_slice($items, 0, 3)); - } else { - return parent::magicList($items); - } - } - - function getListMessage($count, $you) - { - if ($count == 1 && $you) { - // darn first person being different from third person! - // TRANS: List message for notice repeated by logged in user. - return _m('REPEATLIST', 'You repeated this.'); - } else if ($count > 4) { - // TRANS: List message for when more than 4 people repeat something. - // TRANS: %%s is a list of users liking a notice, %d is the number over 4 that like the notice. - // TRANS: Plural is decided on the total number of users liking the notice (count of %%s + %d). - return sprintf(_m('%%s and %d other repeated this.', - '%%s and %d others repeated this.', - $count - 3), - $count - 3); - } else { - // TRANS: List message for repeated notices. - // TRANS: %%s is a list of users who have repeated a notice. - // TRANS: Plural is based on the number of of users that have repeated a notice. - return sprintf(_m('%%s repeated this.', - '%%s repeated this.', - $count), - $count); - } - } - - function showStart() - { - $this->out->elementStart('li', array('class' => 'notice-data notice-repeats')); - } - - function showEnd() - { - $this->out->elementEnd('li'); - } -} - -// @todo FIXME: needs documentation. -class ThreadedNoticeListInlineRepeatsItem extends ThreadedNoticeListRepeatsItem -{ - function showStart() - { - $this->out->elementStart('div', array('class' => 'notice-repeats')); - } - - function showEnd() - { - $this->out->elementEnd('div'); - } -} diff --git a/plugins/Favorite/FavoritePlugin.php b/plugins/Favorite/FavoritePlugin.php index f298fc3e92..55716016bd 100644 --- a/plugins/Favorite/FavoritePlugin.php +++ b/plugins/Favorite/FavoritePlugin.php @@ -361,7 +361,7 @@ class FavoritePlugin extends ActivityVerbHandlerPlugin return true; } - public function onStartShowThreadedNoticeTailItems(NoticeListItem $nli, Notice $notice, &$threadActive) + 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. diff --git a/plugins/Share/SharePlugin.php b/plugins/Share/SharePlugin.php index ec15f3ebdb..582f7d3e2e 100644 --- a/plugins/Share/SharePlugin.php +++ b/plugins/Share/SharePlugin.php @@ -174,7 +174,19 @@ class SharePlugin extends ActivityVerbHandlerPlugin return true; } - // API stuff + // Layout stuff + + 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 ThreadedNoticeListInlineRepeatsItem($notice, $nli->out); + } else { + $item = new ThreadedNoticeListRepeatsItem($notice, $nli->out); + } + $threadActive = $item->show() || $threadActive; + return true; + } /** * show the "repeat" form in the notice options element diff --git a/plugins/Share/lib/threadednoticelistinlinerepeatsitem.php b/plugins/Share/lib/threadednoticelistinlinerepeatsitem.php new file mode 100644 index 0000000000..a4bcc6672c --- /dev/null +++ b/plugins/Share/lib/threadednoticelistinlinerepeatsitem.php @@ -0,0 +1,16 @@ +out->elementStart('div', array('class' => 'notice-repeats')); + } + + function showEnd() + { + $this->out->elementEnd('div'); + } +} diff --git a/plugins/Share/lib/threadednoticelistrepeatsitem.php b/plugins/Share/lib/threadednoticelistrepeatsitem.php new file mode 100644 index 0000000000..9117a7af40 --- /dev/null +++ b/plugins/Share/lib/threadednoticelistrepeatsitem.php @@ -0,0 +1,65 @@ +notice->getID())); + + $profiles = array(); + foreach ($repeats[$this->notice->getID()] as $rep) { + $profiles[] = $rep->profile_id; + } + + return $profiles; + } + + function magicList($items) + { + if (count($items) > 4) { + return parent::magicList(array_slice($items, 0, 3)); + } else { + return parent::magicList($items); + } + } + + function getListMessage($count, $you) + { + if ($count == 1 && $you) { + // darn first person being different from third person! + // TRANS: List message for notice repeated by logged in user. + return _m('REPEATLIST', 'You repeated this.'); + } else if ($count > 4) { + // TRANS: List message for when more than 4 people repeat something. + // TRANS: %%s is a list of users liking a notice, %d is the number over 4 that like the notice. + // TRANS: Plural is decided on the total number of users liking the notice (count of %%s + %d). + return sprintf(_m('%%s and %d other repeated this.', + '%%s and %d others repeated this.', + $count - 3), + $count - 3); + } else { + // TRANS: List message for repeated notices. + // TRANS: %%s is a list of users who have repeated a notice. + // TRANS: Plural is based on the number of of users that have repeated a notice. + return sprintf(_m('%%s repeated this.', + '%%s repeated this.', + $count), + $count); + } + } + + function showStart() + { + $this->out->elementStart('li', array('class' => 'notice-data notice-repeats')); + } + + function showEnd() + { + $this->out->elementEnd('li'); + } +}