Override `isAffectedUser` for article
authorCyperghost <olaf_schmitz_1@t-online.de>
Wed, 20 Mar 2024 10:04:46 +0000 (11:04 +0100)
committerCyperghost <olaf_schmitz_1@t-online.de>
Wed, 20 Mar 2024 10:04:46 +0000 (11:04 +0100)
wcfsetup/install/files/lib/system/moderation/queue/report/ArticleModerationQueueReportHandler.class.php

index d9bf1aa64985ce4c028b2bd21ceb9891192b5fd2..690a55abf0856fb82fdfe7b6676adbebbe76db28 100644 (file)
@@ -2,10 +2,12 @@
 
 namespace wcf\system\moderation\queue\report;
 
+use wcf\data\article\Article;
 use wcf\data\article\ArticleAction;
 use wcf\data\article\ViewableArticle;
 use wcf\data\moderation\queue\ModerationQueue;
 use wcf\data\moderation\queue\ViewableModerationQueue;
+use wcf\system\cache\runtime\UserProfileRuntimeCache;
 use wcf\system\cache\runtime\ViewableArticleRuntimeCache;
 use wcf\system\moderation\queue\AbstractModerationQueueHandler;
 use wcf\system\moderation\queue\ModerationQueueManager;
@@ -179,4 +181,23 @@ class ArticleModerationQueueReportHandler extends AbstractModerationQueueHandler
             (new ArticleAction([$this->getArticle($queue->objectID)->getDecoratedObject()], 'trash'))->executeAction();
         }
     }
+
+    #[\Override]
+    public function isAffectedUser(ModerationQueue $queue, $userID)
+    {
+        if (!parent::isAffectedUser($queue, $userID)) {
+            return false;
+        }
+        $userProfile = UserProfileRuntimeCache::getInstance()->getObject($userID);
+        $article = $this->getArticle($queue->objectID);
+        if ($article === null) {
+            return false;
+        }
+        /** @see Article::canDelete() */
+        if ($userProfile->getPermission('admin.content.article.canManageArticle')) {
+            return true;
+        }
+        return $userProfile->getPermission('admin.content.article.canManageOwnArticles')
+            && $article->userID == $userProfile->userID;
+    }
 }