diff options
author | Evan Prodromou <evan@status.net> | 2009-12-08 16:30:33 -0500 |
---|---|---|
committer | Evan Prodromou <evan@status.net> | 2009-12-08 16:30:33 -0500 |
commit | 72c82a2e293549c10b60ca9e295f2f430224e814 (patch) | |
tree | 237dcadc7369978aa2c72b1401b573a3c0d9f81b /classes/Forward.php | |
parent | 6bc6af667ec51e41570e580de43eac1f9e155d30 (diff) |
Basic function to store forwards and redistribute
Diffstat (limited to 'classes/Forward.php')
-rw-r--r-- | classes/Forward.php | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/classes/Forward.php b/classes/Forward.php index 61cec34e3..6d4848438 100644 --- a/classes/Forward.php +++ b/classes/Forward.php @@ -42,4 +42,68 @@ class Forward extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE + + static function saveNew($profile_id, $notice_id) + { + $forward = new Forward(); + + $forward->profile_id = $profile_id; + $forward->notice_id = $notice_id; + $forward->created = common_sql_now(); + + $forward->query('BEGIN'); + + if (!$forward->insert()) { + throw new ServerException(_("Couldn't insert forward.")); + } + + $ni = $forward->addToInboxes(); + + $forward->query('COMMIT'); + + $forward->blowCache($ni); + } + + function addToInboxes() + { + $inbox = new Notice_inbox(); + + $user = new User(); + + $user->query('SELECT id FROM user JOIN subscription ON user.id = subscription.subscriber '. + 'WHERE subscription.subscribed = '.$this->profile_id); + + $ni = array(); + + while ($user->fetch()) { + $inbox = Notice_inbox::pkeyGet(array('user_id' => $user->id, + 'notice_id' => $this->notice_id)); + + if (empty($inbox)) { + $ni[$user->id] = NOTICE_INBOX_SOURCE_FORWARD; + } else { + $inbox->free(); + } + } + + $user->free(); + + Notice_inbox::bulkInsert($this->notice_id, $this->created, $ni); + + return $ni; + } + + function blowCache($ni) + { + $cache = common_memcache(); + + if (!empty($cache)) { + foreach ($ni as $id => $source) { + $cache->delete(common_cache_key('notice_inbox:by_user:'.$id)); + $cache->delete(common_cache_key('notice_inbox:by_user_own:'.$id)); + $cache->delete(common_cache_key('notice_inbox:by_user:'.$id.';last')); + $cache->delete(common_cache_key('notice_inbox:by_user_own:'.$id.';last')); + } + } + } } |