# XXX: too many args; we need to move to named params or even a separate
# class for notice streams
-
+
static function getStream($qry, $cachekey, $offset=0, $limit=20, $since_id=0, $before_id=0, $order=NULL) {
if (common_config('memcached', 'enabled')) {
}
# Allow ORDER override
-
+
if ($order) {
$qry .= $order;
} else {
# XXX: this is pretty long and should probably be broken up into
# some helper functions
-
+
static function getCachedStream($qry, $cachekey, $offset, $limit, $order) {
# If outside our cache window, just go to the DB
# If the cache was invalidated because of new data being
# added, we can try and just get the new stuff. We keep an additional
# copy of the data at the key + ';last'
-
+
# No cache hit. Try to get the *last* cached version
$last_notices = $cache->get(common_cache_key($cachekey) . ';last');
-
+
if ($last_notices) {
-
+
# Reverse-chron order, so last ID is last.
-
+
$last_id = $last_notices[0]->id;
-
+
# XXX: this assumes monotonically increasing IDs; a fair
# bet with our DB.
-
+
$new_notice = Notice::getStreamDirect($qry, 0, NOTICE_CACHE_WINDOW,
$last_id, NULL, $order);
-
+
if ($new_notice) {
$new_notices = array();
while ($new_notice->fetch()) {
$new_notice->free();
$notices = array_slice(array_merge($new_notices, $last_notices),
0, NOTICE_CACHE_WINDOW);
-
+
# Store the array in the cache for next time
$result = $cache->set(common_cache_key($cachekey), $notices);
return new NoticeWrapper(array_slice($notices, $offset, $limit));
}
}
-
+
# Otherwise, get the full cache window out of the DB
$notice = Notice::getStreamDirect($qry, 0, NOTICE_CACHE_WINDOW, NULL, NULL, $order);
}
$notice->free();
-
+
# Store the array in the cache for next time
$result = $cache->set(common_cache_key($cachekey), $notices);
function publicStream($offset=0, $limit=20, $since_id=0, $before_id=0) {
$parts = array();
-
+
$qry = 'SELECT * FROM notice ';
if (common_config('public', 'localonly')) {
if ($parts) {
$qry .= ' WHERE ' . implode(' AND ', $parts);
}
-
+
return Notice::getStream($qry,
'public',
$offset, $limit, $since_id, $before_id);
'WHERE subscription.subscribed = ' . $this->profile_id . ' ' .
'AND NOT EXISTS (SELECT user_id, notice_id ' .
'FROM notice_inbox ' .
- 'WHERE user_id = user.id ' .
+ 'WHERE user_id = user.id ' .
'AND notice_id = ' . $this->id . ' )';
if ($enabled === 'transitional') {
$qry .= ' AND user.inboxed = 1';