From a431fca44236ea59189967c2db5842877aadc973 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 21 Mar 2012 09:26:35 -0400 Subject: [PATCH] New events for pre-filling a NoticeList The NoticeList has some code to pre-fill some auxiliary data for notices. These new events let plugins hook that event and do their own pre-filling. --- EVENTS.txt | 8 ++++++++ lib/noticelist.php | 47 +++++++++++++++++++++++++--------------------- 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/EVENTS.txt b/EVENTS.txt index eb3edb9b13..0c08a46478 100644 --- a/EVENTS.txt +++ b/EVENTS.txt @@ -1441,4 +1441,12 @@ EndNoticeInScope: After checking if a notice should be visible to a user - $profile: The profile to check for scope - &$bResult: The boolean result; overwrite this if you so desire +StartNoticeListPrefill: Before pre-filling a list of notices with extra data +- &$notices: Notices to be pre-filled +- $avatarSize: The avatar size for the list + +EndNoticeListPrefill: After pre-filling a list of notices with extra data +- &$notices: Notices that were pre-filled +- &$profiles: Profiles that were pre-filled +- $avatarSize: The avatar size for the list diff --git a/lib/noticelist.php b/lib/noticelist.php index 91acbb8d58..7f38cf005b 100644 --- a/lib/noticelist.php +++ b/lib/noticelist.php @@ -124,29 +124,34 @@ class NoticeList extends Widget static function prefill(&$notices, $avatarSize=AVATAR_STREAM_SIZE) { - // Prefill attachments - Notice::fillAttachments($notices); - // Prefill attachments - Notice::fillFaves($notices); - // Prefill repeat data - Notice::fillRepeats($notices); - // Prefill the profiles - $profiles = Notice::fillProfiles($notices); - // Prefill the avatars - Profile::fillAvatars($profiles, $avatarSize); - - $p = Profile::current(); - - if (!empty($p)) { + if (Event::handle('StartNoticeListPrefill', array(&$notices, $avatarSize))) { - $ids = array(); + // Prefill attachments + Notice::fillAttachments($notices); + // Prefill attachments + Notice::fillFaves($notices); + // Prefill repeat data + Notice::fillRepeats($notices); + // Prefill the profiles + $profiles = Notice::fillProfiles($notices); + // Prefill the avatars + Profile::fillAvatars($profiles, $avatarSize); - foreach ($notices as $notice) { - $ids[] = $notice->id; + $p = Profile::current(); + + if (!empty($p)) { + + $ids = array(); + + foreach ($notices as $notice) { + $ids[] = $notice->id; + } + + Memcached_DataObject::pivotGet('Fave', 'notice_id', $ids, array('user_id' => $p->id)); + Memcached_DataObject::pivotGet('Notice', 'repeat_of', $ids, array('profile_id' => $p->id)); } - - Memcached_DataObject::pivotGet('Fave', 'notice_id', $ids, array('user_id' => $p->id)); - Memcached_DataObject::pivotGet('Notice', 'repeat_of', $ids, array('profile_id' => $p->id)); - } + + Event::handle('EndNoticeListPrefill', array(&$notices, &$profiles, $avatarSize)); + } } }