]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Get faves in Notice and pre-fill
authorEvan Prodromou <evan@status.net>
Wed, 3 Aug 2011 04:04:18 +0000 (00:04 -0400)
committerEvan Prodromou <evan@status.net>
Wed, 3 Aug 2011 04:04:18 +0000 (00:04 -0400)
classes/Fave.php
classes/Notice.php
lib/noticelist.php
lib/threadednoticelist.php

index e8fdbffc719d47ca934cecda0538145bb3e5ac7d..5067185c0e427719ecc7f15645cd76c0f0417698 100644 (file)
@@ -44,7 +44,7 @@ class Fave extends Memcached_DataObject
                 common_log_db_error($fave, 'INSERT', __FILE__);
                 return false;
             }
-            self::blow('fave:by_notice:%d', $fave->notice_id);
+            self::blow('fave:list:notice_id:%d', $fave->notice_id);
 
             Event::handle('EndFavorNotice', array($profile, $notice));
         }
@@ -62,7 +62,7 @@ class Fave extends Memcached_DataObject
         if (Event::handle('StartDisfavorNotice', array($profile, $notice, &$result))) {
 
             $result = parent::delete();
-            self::blow('fave:by_notice:%d', $this->notice_id);
+            self::blow('fave:list:notice_id:%d', $this->notice_id);
 
             if ($result) {
                 Event::handle('EndDisfavorNotice', array($profile, $notice));
@@ -156,31 +156,4 @@ class Fave extends Memcached_DataObject
 
         return $fav;
     }
-
-    /**
-     * Grab a list of profile who have favored this notice.
-     *
-     * @return ArrayWrapper masquerading as a Fave
-     */
-    static function byNotice($noticeId)
-    {
-        $c = self::memcache();
-        $key = Cache::key('fave:by_notice:' . $noticeId);
-
-        $wrapper = $c->get($key);
-        if (!$wrapper) {
-            // @fixme caching & scalability!
-            $fave = new Fave();
-            $fave->notice_id = $noticeId;
-            $fave->find();
-
-            $list = array();
-            while ($fave->fetch()) {
-                $list[] = clone($fave);
-            }
-            $wrapper = new ArrayWrapper($list);
-            $c->set($key, $wrapper);
-        }
-        return $wrapper;
-    }
 }
index 6f5be311d84bee90138b57bf2ca303c8e0cce0fc..eee6c2a5021d3547f32f663d65854b5a93a551cd 100644 (file)
@@ -1396,7 +1396,9 @@ class Notice extends Memcached_DataObject
         }
         
         $gis = Memcached_DataObject::listGet('Group_inbox', 'notice_id', array($this->id));
-               
+
+        $ids = array();
+
                foreach ($gis[$this->id] as $gi)
                {
                    $ids[] = $gi->group_id;
@@ -2434,7 +2436,7 @@ class Notice extends Memcached_DataObject
     function __sleep()
     {
         $vars = parent::__sleep();
-        $skip = array('_original', '_profile', '_groups');
+        $skip = array('_original', '_profile', '_groups', '_attachments', '_faves');
         return array_diff($vars, $skip);
     }
     
@@ -2482,8 +2484,8 @@ class Notice extends Memcached_DataObject
                
                $gis = Memcached_DataObject::listGet('Group_inbox', 'notice_id', $ids);
                
-               common_debug(sprintf("Notice::fillGroups(): got %d results for %d notices", count($gis), count($ids)));
-               
+        $gids = array();
+
                foreach ($gis as $id => $gi)
                {
                    foreach ($gi as $g)
@@ -2545,4 +2547,36 @@ class Notice extends Memcached_DataObject
                    $notice->_setAttachments($files);
                }
     }
+
+    protected $_faves = -1;
+
+    /**
+     * All faves of this notice
+     *
+     * @return array Array of Fave objects
+     */
+
+    function getFaves()
+    {
+        if ($this->_faves != -1) {
+            return $this->_faves;
+        }
+        $faveMap = Memcached_DataObject::listGet('Fave', 'notice_id', array($noticeId));
+        $this->_faves = $faveMap[$noticeId];
+        return $this->_faves;
+    }
+
+    function _setFaves($faves)
+    {
+        $this->_faves = $faves;
+    }
+
+    static function fillFaves(&$notices)
+    {
+        $ids = self::_idsOf($notices);
+        $faveMap = Memcached_DataObject::listGet('Fave', 'notice_id', $ids);
+        foreach ($notices as $notice) {
+            $notice->_setFaves($faveMap[$notice->id]);
+        }
+    }
 }
index a15755eef1a9994f6efcf2a45e008ba1e720f479..148f428edf0955420c58a7510b70c31ce1bf3def 100644 (file)
@@ -126,6 +126,8 @@ class NoticeList extends Widget
     {
         // Prefill attachments
         Notice::fillAttachments($notices);
+        // Prefill attachments
+        Notice::fillFaves($notices);
        // Prefill the profiles
        $profiles = Notice::fillProfiles($notices);
        // Prefill the avatars
index 407f7bdde3c608fea1af559f1165064e044cd77c..cf3c0b8943ab74ec523ed55512694bdd54be2d5c 100644 (file)
@@ -470,9 +470,9 @@ class ThreadedNoticeListFavesItem extends NoticeListActorsItem
 {
     function getProfiles()
     {
-        $fave = Fave::byNotice($this->notice->id);
+        $faves = $this->notice->getFaves();
         $profiles = array();
-        while ($fave->fetch()) {
+        foreach ($faves as $fave) {
             $profiles[] = $fave->user_id;
         }
         return $profiles;