X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Fconversationnoticestream.php;h=1d823760d7cab592b3b4f54f98b4d729f1e3737a;hb=ca66860a4f7a8316c23696d3d910c490159251d4;hp=b26e898612cd5d86e4a1b9fc293de4a2b4056be2;hpb=22bf63bb469327f77708d734d7277274ed4735ef;p=quix0rs-gnu-social.git diff --git a/lib/conversationnoticestream.php b/lib/conversationnoticestream.php index b26e898612..1d823760d7 100644 --- a/lib/conversationnoticestream.php +++ b/lib/conversationnoticestream.php @@ -1,14 +1,72 @@ . + * + * @category NoticeStream + * @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 ConversationNoticeStream extends CachingNoticeStream +if (!defined('STATUSNET')) { + // This check helps protect against security problems; + // your code file can't be executed directly from the web. + exit(1); +} + +/** + * Notice stream for a conversation + * + * @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 ConversationNoticeStream extends ScopingNoticeStream { - function __construct($id) + function __construct($id, $profile = -1) { + if (is_int($profile) && $profile == -1) { + $profile = Profile::current(); + } + parent::__construct(new RawConversationNoticeStream($id), - 'notice:conversation_ids:'.$id); + $profile); } } +/** + * Notice stream for a conversation + * + * @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 RawConversationNoticeStream extends NoticeStream { protected $id; @@ -18,35 +76,35 @@ class RawConversationNoticeStream extends NoticeStream $this->id = $id; } - function getNoticeIds($offset=0, $limit=20, $since_id=0, $max_id=0) + function getNotices($offset, $limit, $sinceId = null, $maxId = null) { - $notice = new Notice(); - - $notice->selectAdd(); // clears it - $notice->selectAdd('id'); - - $notice->conversation = $this->id; - - $notice->orderBy('created DESC, id DESC'); - - if (!is_null($offset)) { - $notice->limit($offset, $limit); - } - - Notice::addWhereSinceId($notice, $since_id); - Notice::addWhereMaxId($notice, $max_id); + $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); + } - $ids = array(); + function getNoticeIds($offset, $limit, $since_id, $max_id) + { + $notice = $this->getNotices($offset, $limit, $since_id, $max_id); + $ids = $notice->fetchAll('id'); + return $ids; + } - if ($notice->find()) { - while ($notice->fetch()) { - $ids[] = $notice->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; } - - $notice->free(); - $notice = NULL; - - return $ids; } -} \ No newline at end of file +}