]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/peopletagnoticestream.php
Merge branch 'nightly' into 'nightly'
[quix0rs-gnu-social.git] / lib / peopletagnoticestream.php
index 34e7443da5e0e45d16abb86668770832d2f5619a..4422261ae9a6950881d7823ea1c1190b1123a894 100644 (file)
@@ -3,7 +3,7 @@
  * 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
  *
@@ -35,7 +35,7 @@ if (!defined('STATUSNET')) {
 }
 
 /**
- * Stream of notices for a people tag
+ * Stream of notices for a list
  *
  * @category  Stream
  * @package   StatusNet
@@ -47,15 +47,19 @@ if (!defined('STATUSNET')) {
  */
 class PeopletagNoticeStream extends ScopingNoticeStream
 {
-    function __construct($plist)
+    function __construct($plist, $profile = -1)
     {
+        if (is_int($profile) && $profile == -1) {
+            $profile = Profile::current();
+        }
         parent::__construct(new CachingNoticeStream(new RawPeopletagNoticeStream($plist),
-                                                    'profile_tag:notice_ids:' . $plist->id));
+                                                    'profile_list:notice_ids:' . $plist->id),
+                            $profile);
     }
 }
 
 /**
- * Stream of notices for a people tag
+ * Stream of notices for a list
  *
  * @category  Stream
  * @package   StatusNet
@@ -67,36 +71,56 @@ class PeopletagNoticeStream extends ScopingNoticeStream
  */
 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;
             }
         }