. /** * Stream of notices by a profile with a given tag * * @category Stream * @package GNUsocial * @author Evan Prodromou * @copyright 2011 StatusNet, Inc. * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later */ defined('GNUSOCIAL') || die(); /** * Stream of notices with a given profile and tag * * @category Stream * @package GNUsocial * @author Evan Prodromou * @copyright 2011 StatusNet, Inc. * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later */ class TaggedProfileNoticeStream extends ScopingNoticeStream { public function __construct($profile, $tag, Profile $scoped = null) { parent::__construct( new CachingNoticeStream( new RawTaggedProfileNoticeStream($profile, $tag), 'profile:notice_ids_tagged:' . $profile->id . ':' . Cache::keyize($tag) ), $scoped ); } } /** * Raw stream of notices with a given profile and tag * * @category Stream * @package GNUsocial * @author Evan Prodromou * @copyright 2011 StatusNet, Inc. * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later */ class RawTaggedProfileNoticeStream extends NoticeStream { protected $profile; protected $tag; public function __construct($profile, $tag) { $this->profile = $profile; $this->tag = $tag; } public function getNoticeIds($offset, $limit, $since_id, $max_id) { $nt = new Notice_tag(); $nt->tag = $this->tag; $nt->selectAdd(); $nt->selectAdd('notice_id'); $nt->joinAdd(['notice_id', 'notice:id']); $nt->whereAdd(sprintf('notice.profile_id = %d', $this->profile->id)); Notice::addWhereSinceId($nt, $since_id, 'notice_id', 'notice_tag.created'); Notice::addWhereMaxId($nt, $max_id, 'notice_id', 'notice_tag.created'); $nt->orderBy('notice_tag.created DESC, notice_id DESC'); if (!is_null($offset)) { $nt->limit($offset, $limit); } $ids = []; if ($nt->find()) { while ($nt->fetch()) { $ids[] = $nt->notice_id; } } return $ids; } }