summaryrefslogtreecommitdiff
path: root/classes/Notice_inbox.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/Notice_inbox.php
parent6bc6af667ec51e41570e580de43eac1f9e155d30 (diff)
Basic function to store forwards and redistribute
Diffstat (limited to 'classes/Notice_inbox.php')
-rw-r--r--classes/Notice_inbox.php42
1 files changed, 41 insertions, 1 deletions
diff --git a/classes/Notice_inbox.php b/classes/Notice_inbox.php
index d3e7853b1..b39006542 100644
--- a/classes/Notice_inbox.php
+++ b/classes/Notice_inbox.php
@@ -32,6 +32,7 @@ define('NOTICE_INBOX_SOFT_LIMIT', 1000);
define('NOTICE_INBOX_SOURCE_SUB', 1);
define('NOTICE_INBOX_SOURCE_GROUP', 2);
define('NOTICE_INBOX_SOURCE_REPLY', 3);
+define('NOTICE_INBOX_SOURCE_FORWARD', 4);
define('NOTICE_INBOX_SOURCE_GATEWAY', -1);
class Notice_inbox extends Memcached_DataObject
@@ -83,7 +84,7 @@ class Notice_inbox extends Memcached_DataObject
$inbox->whereAdd('created > \'' . date('Y-m-d H:i:s', $since) . '\'');
}
- $inbox->orderBy('notice_id DESC');
+ $inbox->orderBy('created DESC');
if (!is_null($offset)) {
$inbox->limit($offset, $limit);
@@ -141,4 +142,43 @@ class Notice_inbox extends Memcached_DataObject
'WHERE user_id = ' . $user_id . ' ' .
'AND notice_id in ('.implode(',', $notices).')');
}
+
+ static function bulkInsert($notice_id, $created, $ni)
+ {
+ $cnt = 0;
+
+ $qryhdr = 'INSERT INTO notice_inbox (user_id, notice_id, source, created) VALUES ';
+ $qry = $qryhdr;
+
+ foreach ($ni as $id => $source) {
+ if ($cnt > 0) {
+ $qry .= ', ';
+ }
+ $qry .= '('.$id.', '.$notice_id.', '.$source.", '".$created. "') ";
+ $cnt++;
+ if (rand() % NOTICE_INBOX_SOFT_LIMIT == 0) {
+ // FIXME: Causes lag in replicated servers
+ // Notice_inbox::gc($id);
+ }
+ if ($cnt >= MAX_BOXCARS) {
+ $inbox = new Notice_inbox();
+ $result = $inbox->query($qry);
+ if (PEAR::isError($result)) {
+ common_log_db_error($inbox, $qry);
+ }
+ $qry = $qryhdr;
+ $cnt = 0;
+ }
+ }
+
+ if ($cnt > 0) {
+ $inbox = new Notice_inbox();
+ $result = $inbox->query($qry);
+ if (PEAR::isError($result)) {
+ common_log_db_error($inbox, $qry);
+ }
+ }
+
+ return;
+ }
}