]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/profilenoticestream.php
NoAcctUriException->profile not $e directly
[quix0rs-gnu-social.git] / lib / profilenoticestream.php
index 64cd31abc48d64f5d83276c5b2ea8db95b8d7d9b..7ff4163fcbc96dbdde5b583219872ef46a886591 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,15 +43,57 @@ if (!defined('STATUSNET')) {
 
 class ProfileNoticeStream extends ScopingNoticeStream
 {
+    var $streamProfile;
+    var $userProfile;
+
     function __construct($profile, $userProfile = -1)
     {
         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);
     }
+
+    function getNoticeIds($offset, $limit, $since_id=null, $max_id=null)
+    {
+        if ($this->impossibleStream()) {
+            return array();
+        } else {
+            return parent::getNoticeIds($offset, $limit, $since_id, $max_id);
+        }
+    }
+
+    function getNotices($offset, $limit, $since_id=null, $max_id=null)
+    {
+        if ($this->impossibleStream()) {
+            throw new PrivateStreamException($this->streamProfile, $this->userProfile);
+        } else {
+            return parent::getNotices($offset, $limit, $since_id, $max_id);
+        }
+    }
+
+    function impossibleStream() 
+    {
+        if (!$this->streamProfile->readableBy($this->userProfile)) {
+            // 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->id !== $this->streamProfile->id) && !$this->userProfile->hasRight(Right::REVIEWSPAM)))) {
+                return true;
+            }
+        }
+
+        return false;
+    }
 }
 
 /**
@@ -72,9 +110,11 @@ class ProfileNoticeStream extends ScopingNoticeStream
 class RawProfileNoticeStream extends NoticeStream
 {
     protected $profile;
+    protected $selectVerbs = array();   // select all verbs
 
     function __construct($profile)
     {
+        parent::__construct();
         $this->profile = $profile;
     }
 
@@ -90,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)) {