Apply PSR-12 code style (#3886)
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / cronjob / ModerationQueueCronjob.class.php
1 <?php
2
3 namespace wcf\system\cronjob;
4
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;
10 use wcf\system\WCF;
11
12 /**
13 * Removes moderation queue entries if they're done and older than 30 days.
14 *
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
19 */
20 class ModerationQueueCronjob extends AbstractCronjob
21 {
22 /**
23 * @inheritDoc
24 */
25 public function execute(Cronjob $cronjob)
26 {
27 parent::execute($cronjob);
28
29 $sql = "SELECT queueID
30 FROM wcf" . WCF_N . "_moderation_queue
31 WHERE status IN (?, ?, ?)
32 AND lastChangeTime < ?";
33 $statement = WCF::getDB()->prepareStatement($sql);
34 $statement->execute([
35 ModerationQueue::STATUS_DONE,
36 ModerationQueue::STATUS_REJECTED,
37 ModerationQueue::STATUS_CONFIRMED,
38 TIME_NOW - (86400 * 30),
39 ]);
40 $queueIDs = $statement->fetchAll(\PDO::FETCH_COLUMN);
41
42 if (!empty($queueIDs)) {
43 $conditions = new PreparedStatementConditionBuilder();
44 $conditions->add("queueID IN (?)", [$queueIDs]);
45
46 $sql = "DELETE FROM wcf" . WCF_N . "_moderation_queue
47 " . $conditions;
48 $statement = WCF::getDB()->prepareStatement($sql);
49 $statement->execute($conditions->getParameters());
50
51 // reset moderation count for all users
52 ModerationQueueManager::getInstance()->resetModerationCount();
53
54 // Clean up comments associated with these queues.
55 CommentHandler::getInstance()->deleteObjects(
56 "com.woltlab.wcf.moderation.queue",
57 $queueIDs
58 );
59 }
60 }
61 }