]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
make sure whoGets() doesn't write anything
authorEvan Prodromou <evan@status.net>
Wed, 13 Jan 2010 20:37:01 +0000 (12:37 -0800)
committerEvan Prodromou <evan@status.net>
Wed, 13 Jan 2010 20:37:01 +0000 (12:37 -0800)
classes/Notice.php

index 02cd20391a9e3d015b94e64c5076059e087f84c4..a43ce867b5f0d4c663442ee56e58ea5969fc50fb 100644 (file)
@@ -335,7 +335,11 @@ class Notice extends Memcached_DataObject
 
             $notice->saveTags();
 
-            $notice->addToInboxes();
+            $groups = $notice->saveGroups();
+
+            $recipients = $notice->saveReplies();
+
+            $notice->addToInboxes($groups, $recipients);
 
             $notice->saveUrls();
 
@@ -822,7 +826,7 @@ class Notice extends Memcached_DataObject
         return $ids;
     }
 
-    function whoGets()
+    function whoGets($groups=null, $recipients=null)
     {
         $c = self::memcache();
 
@@ -833,6 +837,14 @@ class Notice extends Memcached_DataObject
             }
         }
 
+        if (is_null($groups)) {
+            $groups = $this->getGroups();
+        }
+
+        if (is_null($recipients)) {
+            $recipients = $this->getReplies();
+        }
+
         $users = $this->getSubscribedUsers();
 
         // FIXME: kind of ignoring 'transitional'...
@@ -845,7 +857,6 @@ class Notice extends Memcached_DataObject
             $ni[$id] = NOTICE_INBOX_SOURCE_SUB;
         }
 
-        $groups = $this->saveGroups();
         $profile = $this->getProfile();
 
         foreach ($groups as $group) {
@@ -860,8 +871,6 @@ class Notice extends Memcached_DataObject
             }
         }
 
-        $recipients = $this->saveReplies();
-
         foreach ($recipients as $recipient) {
 
             if (!array_key_exists($recipient, $ni)) {
@@ -880,9 +889,9 @@ class Notice extends Memcached_DataObject
         return $ni;
     }
 
-    function addToInboxes()
+    function addToInboxes($groups, $recipients)
     {
-        $ni = $this->whoGets();
+        $ni = $this->whoGets($groups, $recipients);
 
         Inbox::bulkInsert($this->id, array_keys($ni));
 
@@ -1086,6 +1095,52 @@ class Notice extends Memcached_DataObject
         return $recipientIds;
     }
 
+    function getReplies()
+    {
+        // XXX: cache me
+
+        $ids = array();
+
+        $reply = new Reply();
+        $reply->selectAdd();
+        $reply->selectAdd('profile_id');
+        $reply->notice_id = $this->id;
+
+        if ($reply->find()) {
+            while($reply->fetch()) {
+                $ids[] = $reply->profile_id;
+            }
+        }
+
+        $reply->free();
+
+        return $ids;
+    }
+
+    function getGroups()
+    {
+        // XXX: cache me
+
+        $ids = array();
+
+        $gi = new Group_inbox();
+
+        $gi->selectAdd();
+        $gi->selectAdd('group_id');
+
+        $gi->notice_id = $this->id;
+
+        if ($gi->find()) {
+            while ($gi->fetch()) {
+                $ids[] = $gi->group_id;
+            }
+        }
+
+        $gi->free();
+
+        return $ids;
+    }
+
     function asAtomEntry($namespace=false, $source=false)
     {
         $profile = $this->getProfile();