From 14aef781ad7c544016d362c937c8cdff57d0fcf0 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Wed, 6 Apr 2011 11:25:50 +0530 Subject: [PATCH] Use the cool and new NoticeStream for people tag timeline --- classes/Profile_list.php | 7 +-- lib/peopletagnoticestream.php | 105 ++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 lib/peopletagnoticestream.php diff --git a/classes/Profile_list.php b/classes/Profile_list.php index df7bef5201..0bdf12e0e3 100644 --- a/classes/Profile_list.php +++ b/classes/Profile_list.php @@ -165,12 +165,9 @@ class Profile_list extends Memcached_DataObject function getNotices($offset, $limit, $since_id=null, $max_id=null) { - $ids = Notice::stream(array($this, '_streamDirect'), - array(), - 'profile_tag:notice_ids:' . $this->id, - $offset, $limit, $since_id, $max_id); + $stream = new PeopletagNoticeStream($this); - return Notice::getStreamByIds($ids); + return $stream->getNotices($offset, $limit, $since_id, $max_id); } /** diff --git a/lib/peopletagnoticestream.php b/lib/peopletagnoticestream.php new file mode 100644 index 0000000000..b5367fe5bc --- /dev/null +++ b/lib/peopletagnoticestream.php @@ -0,0 +1,105 @@ +. + * + * @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/ + */ + +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Stream of notices for a people tag + * + * @category Stream + * @package StatusNet + * @author Evan Prodromou + * @author Shashi Gowda + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ +class PeopletagNoticeStream extends ScopingNoticeStream +{ + function __construct($plist) + { + parent::__construct(new CachingNoticeStream(new RawPeopletagNoticeStream($plist), + 'profile_tag:notice_ids:' . $plist->id)); + } +} + +/** + * Stream of notices for a people tag + * + * @category Stream + * @package StatusNet + * @author Evan Prodromou + * @author Shashi Gowda + * @copyright 2011 StatusNet, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 + * @link http://status.net/ + */ +class RawPeopletagNoticeStream extends NoticeStream +{ + protected $profile_tag; + + function __construct($profile_tag) + { + $this->profile_tag = $profile_tag; + } + + function getNoticeIds($offset, $limit, $since_id, $max_id) + { + $inbox = new Profile_tag_inbox(); + + $inbox->profile_tag_id = $this->profile_tag->id; + + $inbox->selectAdd(); + $inbox->selectAdd('notice_id'); + + Notice::addWhereSinceId($inbox, $since_id, 'notice_id'); + Notice::addWhereMaxId($inbox, $max_id, 'notice_id'); + + $inbox->orderBy('created DESC, notice_id DESC'); + + if (!is_null($offset)) { + $inbox->limit($offset, $limit); + } + + $ids = array(); + + if ($inbox->find()) { + while ($inbox->fetch()) { + $ids[] = $inbox->notice_id; + } + } + + return $ids; + } +}