From 4c4cd9ec775cb0ff7140e641aa928816804bbc3a Mon Sep 17 00:00:00 2001
From: Evan Prodromou <evan@status.net>
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));
+        }
     }
 }