3 namespace wcf\system\cronjob
;
5 use wcf\data\cronjob\Cronjob
;
6 use wcf\data\moderation\queue\ModerationQueue
;
7 use wcf\system\comment\CommentHandler
;
8 use wcf\system\database\util\PreparedStatementConditionBuilder
;
9 use wcf\system\moderation\queue\ModerationQueueManager
;
13 * Removes moderation queue entries if they're done and older than 30 days.
15 * @author Alexander Ebert
16 * @copyright 2001-2019 WoltLab GmbH
17 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
18 * @package WoltLabSuite\Core\System\Cronjob
20 class ModerationQueueCronjob
extends AbstractCronjob
25 public function execute(Cronjob
$cronjob)
27 parent
::execute($cronjob);
29 $sql = "SELECT queueID
30 FROM wcf" . WCF_N
. "_moderation_queue
31 WHERE status IN (?, ?, ?)
32 AND lastChangeTime < ?";
33 $statement = WCF
::getDB()->prepareStatement($sql);
35 ModerationQueue
::STATUS_DONE
,
36 ModerationQueue
::STATUS_REJECTED
,
37 ModerationQueue
::STATUS_CONFIRMED
,
38 TIME_NOW
- (86400 * 30),
40 $queueIDs = $statement->fetchAll(\PDO
::FETCH_COLUMN
);
42 if (!empty($queueIDs)) {
43 $conditions = new PreparedStatementConditionBuilder();
44 $conditions->add("queueID IN (?)", [$queueIDs]);
46 $sql = "DELETE FROM wcf" . WCF_N
. "_moderation_queue
48 $statement = WCF
::getDB()->prepareStatement($sql);
49 $statement->execute($conditions->getParameters());
51 // reset moderation count for all users
52 ModerationQueueManager
::getInstance()->resetModerationCount();
54 // Clean up comments associated with these queues.
55 CommentHandler
::getInstance()->deleteObjects(
56 "com.woltlab.wcf.moderation.queue",