make sure whoGets() doesn't write anything

This commit is contained in:
Evan Prodromou 2010-01-13 12:37:01 -08:00
parent c3188fd1fe
commit d032fc038a
1 changed files with 62 additions and 7 deletions

View 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();