summaryrefslogtreecommitdiff
path: root/classes/Forward.php
diff options
context:
space:
mode:
authorEvan Prodromou <evan@status.net>2009-12-08 16:30:33 -0500
committerEvan Prodromou <evan@status.net>2009-12-08 16:30:33 -0500
commit72c82a2e293549c10b60ca9e295f2f430224e814 (patch)
tree237dcadc7369978aa2c72b1401b573a3c0d9f81b /classes/Forward.php
parent6bc6af667ec51e41570e580de43eac1f9e155d30 (diff)
Basic function to store forwards and redistribute
Diffstat (limited to 'classes/Forward.php')
-rw-r--r--classes/Forward.php64
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'));
+ }
+ }
+ }
}