Improved handling of orphaned moderation queues
authorAlexander Ebert <ebert@woltlab.com>
Wed, 14 Aug 2013 20:51:04 +0000 (22:51 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Wed, 14 Aug 2013 20:51:04 +0000 (22:51 +0200)
wcfsetup/install/files/lib/system/moderation/queue/ModerationQueueManager.class.php
wcfsetup/install/files/lib/system/moderation/queue/report/CommentResponseModerationQueueReportHandler.class.php

index 5ef79c6bc9dbe195cc0cfc2829d9cabfe4582084..99d13f4ee199ca6f2616fb1f40fc20a4d063c521 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 namespace wcf\system\moderation\queue;
+use wcf\system\database\util\PreparedStatementConditionBuilder;
+
 use wcf\data\moderation\queue\ModerationQueue;
 use wcf\data\moderation\queue\ModerationQueueAction;
 use wcf\data\moderation\queue\ModerationQueueList;
@@ -295,8 +297,11 @@ class ModerationQueueManager extends SingletonFactory {
         */
        public function removeOrphans(array $queueIDs) {
                if (!empty($queueIDs)) {
-                       $queueAction = new ModerationQueueAction($queueIDs, 'markAsDone');
-                       $queueAction->executeAction();
+                       $conditions = new PreparedStatementConditionBuilder();
+                       $conditions->add("queueID IN (?)", array($queueIDs));
+                       $sql = "DELETE FROM     wcf".WCF_N."_moderation_queue
+                               ".$conditions;
+                       $statement = WCF::getDB()->prepareStatement($sql);
                        
                        $this->resetModerationCount();
                }
index f1d0d12b8e2dfb252038dfe91a75c075b90c3429..81e6d624c5c3fa44e8b3842ebd965919ac6b8a0d 100644 (file)
@@ -62,9 +62,15 @@ class CommentResponseModerationQueueReportHandler extends CommentCommentModerati
                        $responses[$row['responseID']] = new CommentResponse(null, $row);
                }
                
+               $orphanedQueueIDs = array();
                foreach ($queues as $queue) {
                        $assignUser = false;
                        
+                       if (!isset($responses[$queue->objectID]) || !isset($comments[$responses[$queue->objectID]->commentID])) {
+                               $orphanedQueueIDs[] = $queue->queueID;
+                               continue;
+                       }
+                       
                        $comment = $comments[$responses[$queue->objectID]->commentID];
                        if ($this->getCommentManager($comment)->canModerate($comment->objectTypeID, $comment->objectID)) {
                                $assignUser = true;
@@ -73,6 +79,7 @@ class CommentResponseModerationQueueReportHandler extends CommentCommentModerati
                        $assignments[$queue->queueID] = $assignUser;
                }
                
+               ModerationQueueManager::getInstance()->removeOrphans($orphanedQueueIDs);
                ModerationQueueManager::getInstance()->setAssignment($assignments);
        }