From 874f1db38980bd5a748b2a70159bd70ef7798c08 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 1 Aug 2011 14:51:59 -0400 Subject: [PATCH] Pre-fill profiles in notice streams --- classes/Notice.php | 29 ++++++++++++++++++++++++++++- classes/Profile.php | 5 +++++ lib/noticestream.php | 5 ++++- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/classes/Notice.php b/classes/Notice.php index 5caecff8f3..6540490b9a 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -106,7 +106,7 @@ class Notice extends Memcached_DataObject function getProfile() { if (is_int($this->_profile) && $this->_profile == -1) { - $this->_profile = Profile::staticGet('id', $this->profile_id); + $this->_setProfile(Profile::staticGet('id', $this->profile_id)); if (empty($this->_profile)) { // TRANS: Server exception thrown when a user profile for a notice cannot be found. @@ -117,6 +117,11 @@ class Notice extends Memcached_DataObject return $this->_profile; } + + function _setProfile($profile) + { + $this->_profile = $profile; + } function delete() { @@ -2492,4 +2497,26 @@ class Notice extends Memcached_DataObject return $scope; } + static function fillProfiles($notices) + { + $authors = array(); + + foreach ($notices as $notice) { + if (array_key_exists($notice->profile_id, $authors)) { + $authors[$notice->profile_id][] = $notice; + } else { + $authors[$notice->profile_id] = array($notice); + } + } + + $profile = Profile::multiGet('id', array_keys($authors)); + + $profiles = $profile->fetchAll(); + + foreach ($profiles as $p) { + foreach ($authors[$p->id] as $notice) { + $notice->_setProfile($p); + } + } + } } diff --git a/classes/Profile.php b/classes/Profile.php index 23534dfdfd..f635ee470d 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -49,6 +49,11 @@ class Profile extends Memcached_DataObject return Memcached_DataObject::staticGet('Profile',$k,$v); } + function multiGet($keyCol, $keyVals, $skipNulls=true) + { + return parent::multiGet('Profile', $keyCol, $keyVals, $skipNulls); + } + /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE diff --git a/lib/noticestream.php b/lib/noticestream.php index e9ff47b68c..010bfab60e 100644 --- a/lib/noticestream.php +++ b/lib/noticestream.php @@ -59,6 +59,9 @@ abstract class NoticeStream static function getStreamByIds($ids) { - return Notice::multiGet('id', $ids); + $notices = Notice::multiGet('id', $ids); + // Prefill the profiles + Notice::fillProfiles($notices->fetchAll()); + return $notices; } }