]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Pre-fill profiles in notice streams
authorEvan Prodromou <evan@status.net>
Mon, 1 Aug 2011 18:51:59 +0000 (14:51 -0400)
committerEvan Prodromou <evan@status.net>
Mon, 1 Aug 2011 18:51:59 +0000 (14:51 -0400)
classes/Notice.php
classes/Profile.php
lib/noticestream.php

index 5caecff8f353a392fa42ae9bb0db2fab2790d07c..6540490b9a7aea33f3b30e6b4e2f1501f35ae80a 100644 (file)
@@ -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);    
+                       }
+               }
+       }
 }
index 23534dfdfd2f14ff8282452d9fcff38035fcf4e8..f635ee470df8a2f596055a5b5729d5808264afd6 100644 (file)
@@ -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
 
index e9ff47b68c154eb73641cbaf97dbb1b0126c2cae..010bfab60e4221d4dc67d3f9c0d939a25414aeb4 100644 (file)
@@ -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;
     }
 }