static function noticeCount($id) { $keypart = sprintf('conversation:notice_count:%d', $id); $cnt = self::cacheGet($keypart); if ($cnt !== false) { return $cnt; } $notice = new Notice(); $notice->conversation = $id; $notice->whereAddIn('verb', array(ActivityVerb::POST, ActivityUtils::resolveUri(ActivityVerb::POST, true)), $notice->columnType('verb')); $cnt = $notice->count(); self::cacheSet($keypart, $cnt); return $cnt; }
/** * Get IDs in a range * * @param int $offset Offset from start * @param int $limit Limit of number to get * @param int $since_id Since this notice * @param int $max_id Before this notice * * @return Array IDs found */ function getNoticeIds($offset, $limit, $since_id, $max_id) { $notice = new Notice(); $notice->selectAdd(); $notice->selectAdd('id'); $notice->whereAdd(sprintf('notice.created > "%s"', $notice->escape($this->target->created))); // Reply:: is a table of mentions // Subscription:: is a table of subscriptions (every user is subscribed to themselves) $notice->whereAdd(sprintf('( notice.profile_id IN (SELECT subscribed FROM subscription WHERE subscriber=%1$d) ' . 'OR notice.id IN (SELECT notice_id FROM group_inbox WHERE group_id IN (SELECT group_id FROM group_member WHERE profile_id=%1$d))' . 'OR notice.id IN (SELECT notice_id FROM attention WHERE profile_id=%1$d) ) ' . 'AND (notice.reply_to IS NULL ' . 'OR notice.profile_id=%1$d ' . 'OR notice.reply_to IN (SELECT id FROM notice as noticereplies WHERE noticereplies.profile_id IN (SELECT subscribed FROM subscription WHERE subscriber=%1$d))) ' . 'OR (notice.id IN (SELECT notice_id FROM reply WHERE profile_id=%1$d) ' . 'AND notice.profile_id IN (SELECT subscribed FROM subscription WHERE subscriber=%1$d))', $this->target->id)); if (!empty($since_id)) { $notice->whereAdd(sprintf('notice.id > %d', $since_id)); } if (!empty($max_id)) { $notice->whereAdd(sprintf('notice.id <= %d', $max_id)); } if (!empty($this->selectVerbs)) { $notice->whereAddIn('verb', $this->selectVerbs, $notice->columnType('verb')); } $notice->limit($offset, $limit); // notice.id will give us even really old posts, which were // recently imported. For example if a remote instance had // problems and just managed to post here. Another solution // would be to have a 'notice.imported' field and order by it. $notice->orderBy('notice.id DESC'); if (!$notice->find()) { return array(); } $ids = $notice->fetchAll('id'); return $ids; }
function getNoticeIds($offset, $limit, $since_id = null, $max_id = null) { $notice = new Notice(); // SELECT $notice->selectAdd(); $notice->selectAdd('id'); // WHERE $notice->conversation = $this->id; if (!empty($since_id)) { $notice->whereAdd(sprintf('notice.id > %d', $since_id)); } if (!empty($max_id)) { $notice->whereAdd(sprintf('notice.id <= %d', $max_id)); } if (!is_null($offset)) { $notice->limit($offset, $limit); } if (!empty($this->selectVerbs)) { $notice->whereAddIn('verb', $this->selectVerbs, $notice->columnType('verb')); } // ORDER BY // currently imitates the previously used "_reverseChron" sorting $notice->orderBy('notice.created DESC'); $notice->find(); return $notice->fetchAll('id'); }