summaryrefslogtreecommitdiff
path: root/classes/Notice.php
diff options
context:
space:
mode:
Diffstat (limited to 'classes/Notice.php')
-rw-r--r--classes/Notice.php87
1 files changed, 80 insertions, 7 deletions
diff --git a/classes/Notice.php b/classes/Notice.php
index 02cd20391..38b10db04 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,11 @@ class Notice extends Memcached_DataObject
return $ids;
}
- function whoGets()
+ /**
+ * @param $groups array of Group *objects*
+ * @param $recipients array of profile *ids*
+ */
+ function whoGets($groups=null, $recipients=null)
{
$c = self::memcache();
@@ -833,6 +841,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 +861,6 @@ class Notice extends Memcached_DataObject
$ni[$id] = NOTICE_INBOX_SOURCE_SUB;
}
- $groups = $this->saveGroups();
$profile = $this->getProfile();
foreach ($groups as $group) {
@@ -860,8 +875,6 @@ class Notice extends Memcached_DataObject
}
}
- $recipients = $this->saveReplies();
-
foreach ($recipients as $recipient) {
if (!array_key_exists($recipient, $ni)) {
@@ -880,9 +893,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));
@@ -916,6 +929,9 @@ class Notice extends Memcached_DataObject
return $ids;
}
+ /**
+ * @return array of Group objects
+ */
function saveGroups()
{
// Don't save groups for repeats
@@ -1086,6 +1102,63 @@ 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;
+ }
+
+ /**
+ * Same calculation as saveGroups but without the saving
+ * @fixme merge the functions
+ * @return array of Group objects
+ */
+ function getGroups()
+ {
+ // Don't save groups for repeats
+
+ if (!empty($this->repeat_of)) {
+ return array();
+ }
+
+ // XXX: cache me
+
+ $groups = array();
+
+ $gi = new Group_inbox();
+
+ $gi->selectAdd();
+ $gi->selectAdd('group_id');
+
+ $gi->notice_id = $this->id;
+
+ if ($gi->find()) {
+ while ($gi->fetch()) {
+ $groups[] = clone($gi);
+ }
+ }
+
+ $gi->free();
+
+ return $groups;
+ }
+
function asAtomEntry($namespace=false, $source=false)
{
$profile = $this->getProfile();