]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/moderatednoticestream.php
Merge branch 'master' into nightly
[quix0rs-gnu-social.git] / lib / moderatednoticestream.php
index 3c778d8a2caba70a0a27b8f3ca6caacb0b2df7d3..b0d6601cb96898f3c671128a6d654c0c7345f5ee 100644 (file)
@@ -25,15 +25,40 @@ class ModeratedNoticeStream extends ScopingNoticeStream
         if (!parent::filter($notice)) {
             return false;
         }
+        
+        if(self::include_or_not($notice) === false) {
+            return false;
+        }
+        
+        // If this is a repeat the repeated notice is moderated
+        if($notice->isRepeat()) {
+            try {
+                $repeated_notice = Notice::getById($notice->repeat_of);
+            } catch (Exception $e) {
+                // if we can't get the repeated notice by id, something is seriously wrong with it, so don't include it
+                return false;
+            }
 
-        // If the notice author is sandboxed
-        if ($notice->getProfile()->isSandboxed()) {
-            // and we're either not logged in OR we aren't some kind of privileged user that can see spam etc.
-            if (!$this->scoped instanceof Profile || !$this->scoped->hasRight(Right::REVIEWSPAM)) {
+            if(self::include_or_not($repeated_notice) === false) {
                 return false;
             }
-        }
+        }         
 
         return true;
     }
+    
+    protected function include_or_not(Notice $notice)
+    {    
+        $profile = $notice->getProfile();
+
+        if ($profile->isSandboxed()) {
+            if (!$this->scoped instanceof Profile) {
+                // Non-logged in users don't get to see posts by sandboxed users
+                return false;
+            } elseif (!$profile->sameAs($this->scoped) && !$this->scoped->hasRight(Right::REVIEWSPAM)) {
+                // And if we are logged in, deny if scoped user is neither the author nor has the right to review spam
+                return false;
+            } 
+        }    
+    }
 }