* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2011, StatusNet, Inc.
*
- * Stream of notices for a people tag
+ * Stream of notices for a list
*
* PHP version 5
*
* @link http://status.net/
*/
-if (!defined('STATUSNET')) {
- // This check helps protect against security problems;
- // your code file can't be executed directly from the web.
- exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
/**
- * Stream of notices for a people tag
+ * Stream of notices for a list
*
* @category Stream
* @package StatusNet
*/
class PeopletagNoticeStream extends ScopingNoticeStream
{
- function __construct($plist)
+ function __construct($plist, Profile $scoped=null)
{
parent::__construct(new CachingNoticeStream(new RawPeopletagNoticeStream($plist),
- 'profile_tag:notice_ids:' . $plist->id));
+ 'profile_list:notice_ids:' . $plist->id),
+ $scoped);
}
}
/**
- * Stream of notices for a people tag
+ * Stream of notices for a list
*
* @category Stream
* @package StatusNet
*/
class RawPeopletagNoticeStream extends NoticeStream
{
- protected $profile_tag;
+ protected $profile_list;
- function __construct($profile_tag)
+ function __construct($profile_list)
{
- $this->profile_tag = $profile_tag;
+ $this->profile_list = $profile_list;
}
+ /**
+ * Query notices by users associated with this tag from the database.
+ *
+ * @param integer $offset offset
+ * @param integer $limit maximum no of results
+ * @param integer $since_id=null since this id
+ * @param integer $max_id=null maximum id in result
+ *
+ * @return array array of notice ids.
+ */
+
function getNoticeIds($offset, $limit, $since_id, $max_id)
{
- $inbox = new Profile_tag_inbox();
+ $notice = new Notice();
+
+ $notice->selectAdd();
+ $notice->selectAdd('notice.id');
- $inbox->profile_tag_id = $this->profile_tag->id;
+ $ptag = new Profile_tag();
+ $ptag->tag = $this->profile_list->tag;
+ $ptag->tagger = $this->profile_list->tagger;
+ $notice->joinAdd(array('profile_id', 'profile_tag:tagged'));
+ $notice->whereAdd('profile_tag.tagger = ' . $this->profile_list->tagger);
+ $notice->whereAdd(sprintf('profile_tag.tag = "%s"', $this->profile_list->tag));
- $inbox->selectAdd();
- $inbox->selectAdd('notice_id');
+ if ($since_id != 0) {
+ $notice->whereAdd('notice.id > ' . $since_id);
+ }
- Notice::addWhereSinceId($inbox, $since_id, 'notice_id');
- Notice::addWhereMaxId($inbox, $max_id, 'notice_id');
+ if ($max_id != 0) {
+ $notice->whereAdd('notice.id <= ' . $max_id);
+ }
- $inbox->orderBy('created DESC, notice_id DESC');
+ $notice->orderBy('notice.id DESC');
if (!is_null($offset)) {
- $inbox->limit($offset, $limit);
+ $notice->limit($offset, $limit);
}
$ids = array();
-
- if ($inbox->find()) {
- while ($inbox->fetch()) {
- $ids[] = $inbox->notice_id;
+ if ($notice->find()) {
+ while ($notice->fetch()) {
+ $ids[] = $notice->id;
}
}