From 7d4658643d70d19d2df2f5ce21ef353e56fb4ea9 Mon Sep 17 00:00:00 2001 From: hannes Date: Fri, 4 Mar 2016 16:53:57 -0500 Subject: [PATCH] the repeated notice can be from a sandboxed user too --- lib/moderatednoticestream.php | 40 +++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/lib/moderatednoticestream.php b/lib/moderatednoticestream.php index f984256acc..b0d6601cb9 100644 --- a/lib/moderatednoticestream.php +++ b/lib/moderatednoticestream.php @@ -25,18 +25,40 @@ class ModeratedNoticeStream extends ScopingNoticeStream if (!parent::filter($notice)) { return false; } - - // If the notice author is sandboxed - if ($notice->getProfile()->isSandboxed()) { - if (!$this->scoped instanceof Profile) { - // Non-logged in users don't get to see posts by sandboxed users - return false; - } elseif (!$notice->getProfile()->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 + + 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(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; + } + } + } }