X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Ftagnoticestream.php;h=5a99a1aa68a0b30faf7cc6b2ae0f0f371941ce40;hb=f134a423f6a9e7bb61d069c4d6281c05417bbd45;hp=0e287744dd0215b4c8bf6ec5b418266987dafaa8;hpb=d36f0707a488b6e2513193a0a2f72811435553ec;p=quix0rs-gnu-social.git diff --git a/lib/tagnoticestream.php b/lib/tagnoticestream.php index 0e287744dd..5a99a1aa68 100644 --- a/lib/tagnoticestream.php +++ b/lib/tagnoticestream.php @@ -1,14 +1,67 @@ . + * + * @category Stream + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ -class TagNoticeStream extends CachingNoticeStream +if (!defined('GNUSOCIAL')) { exit(1); } + +/** + * Stream of notices with a given tag + * + * @category Stream + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + +class TagNoticeStream extends ScopingNoticeStream { - function __construct($tag) + function __construct($tag, Profile $scoped=null) { - parent::__construct(new RawTagNoticeStream($tag), - 'notice_tag:notice_ids:' . Cache::keyize($tag)); + parent::__construct(new CachingNoticeStream(new RawTagNoticeStream($tag), + 'notice_tag:notice_ids:' . Cache::keyize($tag)), + $scoped); } } +/** + * Raw stream of notices with a given tag + * + * @category Stream + * @package StatusNet + * @author Evan Prodromou + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ + class RawTagNoticeStream extends NoticeStream { protected $tag; @@ -30,7 +83,23 @@ class RawTagNoticeStream extends NoticeStream Notice::addWhereSinceId($nt, $since_id, 'notice_id'); Notice::addWhereMaxId($nt, $max_id, 'notice_id'); - $nt->orderBy('created DESC, notice_id DESC'); + if (!empty($this->selectVerbs)) { + $nt->joinAdd(array('notice_id', 'notice:id')); + + $filter = array_keys(array_filter($this->selectVerbs)); + if (!empty($filter)) { + // include verbs in selectVerbs with values that equate to true + $nt->whereAddIn('notice.verb', $filter, 'string'); + } + + $filter = array_keys(array_filter($this->selectVerbs, function ($v) { return !$v; })); + if (!empty($filter)) { + // exclude verbs in selectVerbs with values that equate to false + $nt->whereAddIn('!notice.verb', $filter, 'string'); + } + } + + $nt->orderBy('notice.created DESC, notice_id DESC'); if (!is_null($offset)) { $nt->limit($offset, $limit);