]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/profilenoticestream.php
[CORE][ROUTER] Fix wrong parameter in all/:tag by XRevan86
[quix0rs-gnu-social.git] / lib / profilenoticestream.php
index af59b0cc99b886bf6e0c501533cddb2b2fe7efd1..bfe49efea579b64644bffff44c4fce19399d5357 100644 (file)
  * @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); }
 
 /**
  * Stream of notices by a profile
@@ -47,22 +43,17 @@ if (!defined('STATUSNET')) {
 
 class ProfileNoticeStream extends ScopingNoticeStream
 {
-    var $streamProfile;
-    var $userProfile;
+    protected $target;
 
-    function __construct($profile, $userProfile = -1)
+    function __construct(Profile $target, Profile $scoped=null)
     {
-        if (is_int($userProfile) && $userProfile == -1) {
-            $userProfile = Profile::current();
-        }
-        $this->streamProfile = $profile;
-        $this->userProfile   = $userProfile;
-        parent::__construct(new CachingNoticeStream(new RawProfileNoticeStream($profile),
-                                                    'profile:notice_ids:' . $profile->id),
-                            $userProfile);
+        $this->target = $target;
+        parent::__construct(new CachingNoticeStream(new RawProfileNoticeStream($target),
+                                                    'profile:notice_ids:' . $target->getID()),
+                            $scoped);
     }
 
-    function getNoticeIds($offset, $limit, $since_id, $max_id)
+    function getNoticeIds($offset, $limit, $since_id=null, $max_id=null)
     {
         if ($this->impossibleStream()) {
             return array();
@@ -71,31 +62,32 @@ class ProfileNoticeStream extends ScopingNoticeStream
         }
     }
 
-    function getNotices($offset, $limit, $sinceId = null, $maxId = null)
+    function getNotices($offset, $limit, $since_id=null, $max_id=null)
     {
         if ($this->impossibleStream()) {
-            return array();
+            throw new PrivateStreamException($this->target, $this->scoped);
         } else {
-            return parent::getNotices($offset, $limit, $sinceId, $maxId);
+            return parent::getNotices($offset, $limit, $since_id, $max_id);
         }
     }
 
     function impossibleStream() 
     {
-        $user = User::staticGet('id', $this->streamProfile->id);
-
-        // If it's a private stream, and no user or not a subscriber
-
-        if (!empty($user) && $user->private_stream && 
-            empty($this->userProfile) || !$this->userProfile->isSubscribed($this->streamProfile)) {
+        if (!$this->target->readableBy($this->scoped)) {
+            // cannot read because it's a private stream and either noone's logged in or they are not subscribers
             return true;
         }
 
         // If it's a spammy stream, and no user or not a moderator
 
         if (common_config('notice', 'hidespam')) {
-            if ($this->streamProfile->hasRole(Profile_role::SILENCED) &&
-                (empty($this->userProfile) || !$this->userProfile->hasRole(Profile_role::MODERATOR))) {
+            // if this is a silenced user
+            if ($this->target->hasRole(Profile_role::SILENCED)
+                    // and we are either not logged in
+                    && (!$this->scoped instanceof Profile
+                        // or if we are, we are not logged in as the target, and we don't have right to review spam
+                        || (!$this->scoped->sameAs($this->target) && !$this->scoped->hasRight(Right::REVIEWSPAM))
+                    )) {
                 return true;
             }
         }
@@ -117,18 +109,20 @@ class ProfileNoticeStream extends ScopingNoticeStream
 
 class RawProfileNoticeStream extends NoticeStream
 {
-    protected $profile;
+    protected $target;
+    protected $selectVerbs = array();   // select all verbs
 
-    function __construct($profile)
+    function __construct(Profile $target)
     {
-        $this->profile = $profile;
+        parent::__construct();
+        $this->target = $target;
     }
 
     function getNoticeIds($offset, $limit, $since_id, $max_id)
     {
         $notice = new Notice();
 
-        $notice->profile_id = $this->profile->id;
+        $notice->profile_id = $this->target->getID();
 
         $notice->selectAdd();
         $notice->selectAdd('id');
@@ -136,6 +130,8 @@ class RawProfileNoticeStream extends NoticeStream
         Notice::addWhereSinceId($notice, $since_id);
         Notice::addWhereMaxId($notice, $max_id);
 
+        self::filterVerbs($notice, $this->selectVerbs);
+
         $notice->orderBy('created DESC, id DESC');
 
         if (!is_null($offset)) {