* @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); }
/**
* Notice stream for a conversation
*/
class ConversationNoticeStream extends ScopingNoticeStream
{
- function __construct($id, $profile = -1)
+ function __construct($id, Profile $scoped=null)
{
- if (is_int($profile) && $profile == -1) {
- $profile = Profile::current();
- }
-
parent::__construct(new RawConversationNoticeStream($id),
- $profile);
+ $scoped);
}
}
function __construct($id)
{
+ parent::__construct();
$this->id = $id;
}
- function getNotices($offset, $limit, $sinceId = null, $maxId = null)
- {
- $all = Notice::listGet('conversation', array($this->id));
- $notices = $all[$this->id];
- // Re-order in reverse-chron
- usort($notices, array('RawConversationNoticeStream', '_reverseChron'));
- // FIXME: handle since and max
- $wanted = array_slice($notices, $offset, $limit);
- return new ArrayWrapper($wanted);
- }
-
- function getNoticeIds($offset, $limit, $since_id, $max_id)
+ function getNoticeIds($offset, $limit, $since_id=null, $max_id=null)
{
- $notice = $this->getNotices($offset, $limit, $since_id, $max_id);
- $ids = $notice->fetchAll('id');
- return $ids;
- }
+ $notice = new Notice();
+ // SELECT
+ $notice->selectAdd();
+ $notice->selectAdd('id');
- function _reverseChron($a, $b)
- {
- $at = strtotime($a->created);
- $bt = strtotime($b->created);
-
- if ($at == $bt) {
- return 0;
- } else if ($at > $bt) {
- return -1;
- } else {
- return 1;
+ // 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);
+ }
+
+ self::filterVerbs($notice, $this->selectVerbs);
+
+ // ORDER BY
+ // currently imitates the previously used "_reverseChron" sorting
+ $notice->orderBy('notice.created DESC');
+ $notice->find();
+ return $notice->fetchAll('id');
}
}