summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Prodromou <evan@status.net>2010-01-13 12:37:01 -0800
committerEvan Prodromou <evan@status.net>2010-01-13 12:37:01 -0800
commitd032fc038a32c142a6156b1b33ecd6e09ab4764c (patch)
treeb22a16bb4ada8fea9ed2a6cc1c8c9a2229b61fa7
parentc3188fd1fece2be7f7c4211d28f4a3d3a59c8fa1 (diff)
make sure whoGets() doesn't write anything
-rw-r--r--classes/Notice.php69
1 files changed, 62 insertions, 7 deletions
diff --git a/classes/Notice.php b/classes/Notice.php
index 02cd20391..a43ce867b 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -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();