Merge branch '2.0'
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / moderation / queue / AbstractModerationQueueManager.class.php
1 <?php
2 namespace wcf\system\moderation\queue;
3 use wcf\data\moderation\queue\ModerationQueue;
4 use wcf\data\moderation\queue\ModerationQueueAction;
5 use wcf\data\moderation\queue\ModerationQueueList;
6 use wcf\system\SingletonFactory;
7 use wcf\system\WCF;
8
9 /**
10 * Default implementation for moderation queue managers.
11 *
12 * @author Alexander Ebert
13 * @copyright 2001-2014 WoltLab GmbH
14 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
15 * @package com.woltlab.wcf
16 * @subpackage system.moderation.queue
17 * @category Community Framework
18 */
19 abstract class AbstractModerationQueueManager extends SingletonFactory implements IModerationQueueManager {
20 /**
21 * definition name
22 * @var string
23 */
24 protected $definitionName = '';
25
26 /**
27 * @see \wcf\system\moderation\queue\IModerationQueueManager::assignQueues()
28 */
29 public function assignQueues($objectTypeID, array $queues) {
30 ModerationQueueManager::getInstance()->getProcessor($this->definitionName, null, $objectTypeID)->assignQueues($queues);
31 }
32
33 /**
34 * @see \wcf\system\moderation\queue\IModerationQueueManager::isValid()
35 */
36 public function isValid($objectType, $objectID = null) {
37 return ModerationQueueManager::getInstance()->isValid($this->definitionName, $objectType);
38 }
39
40 /**
41 * @see \wcf\system\moderation\queue\IModerationQueueManager::getObjectTypeID()
42 */
43 public function getObjectTypeID($objectType) {
44 return ModerationQueueManager::getInstance()->getObjectTypeID($this->definitionName, $objectType);
45 }
46
47 /**
48 * @see \wcf\system\moderation\queue\IModerationQueueManager::getProcessor()
49 */
50 public function getProcessor($objectType, $objectTypeID = null) {
51 return ModerationQueueManager::getInstance()->getProcessor($this->definitionName, $objectType, $objectTypeID);
52 }
53
54 /**
55 * @see \wcf\system\moderation\queue\IModerationQueueManager::populate()
56 */
57 public function populate($objectTypeID, array $objects) {
58 ModerationQueueManager::getInstance()->getProcessor($this->definitionName, null, $objectTypeID)->populate($objects);
59 }
60
61 /**
62 * @see \wcf\system\moderation\queue\IModerationQueueManager::canRemoveContent()
63 */
64 public function canRemoveContent(ModerationQueue $queue) {
65 return $this->getProcessor(null, $queue->objectTypeID)->canRemoveContent($queue);
66 }
67
68 /**
69 * @see \wcf\system\moderation\queue\IModerationQueueManager::removeContent()
70 */
71 public function removeContent(ModerationQueue $queue, $message = '') {
72 $this->getProcessor(null, $queue->objectTypeID)->removeContent($queue, $message);
73 }
74
75 /**
76 * Adds an entry to moderation queue.
77 *
78 * @param integer $objectTypeID
79 * @param integer $objectID
80 * @param integer $containerID
81 * @param array $additionalData
82 */
83 protected function addEntry($objectTypeID, $objectID, $containerID = 0, array $additionalData = array()) {
84 $sql = "SELECT queueID
85 FROM wcf".WCF_N."_moderation_queue
86 WHERE objectTypeID = ?
87 AND objectID = ?";
88 $statement = WCF::getDB()->prepareStatement($sql);
89 $statement->execute(array(
90 $objectTypeID,
91 $objectID
92 ));
93 $row = $statement->fetchArray();
94
95 if ($row === false) {
96 $objectAction = new ModerationQueueAction(array(), 'create', array(
97 'data' => array(
98 'objectTypeID' => $objectTypeID,
99 'objectID' => $objectID,
100 'containerID' => $containerID,
101 'userID' => (WCF::getUser()->userID ?: null),
102 'time' => TIME_NOW,
103 'additionalData' => serialize($additionalData)
104 )
105 ));
106 $objectAction->executeAction();
107 }
108 else {
109 $objectAction = new ModerationQueueAction(array($row['queueID']), 'update', array(
110 'data' => array(
111 'status' => ModerationQueue::STATUS_OUTSTANDING,
112 'containerID' => $containerID,
113 'userID' => (WCF::getUser()->userID ?: null),
114 'time' => TIME_NOW,
115 'additionalData' => serialize($additionalData)
116 )
117 ));
118 $objectAction->executeAction();
119 }
120
121 ModerationQueueManager::getInstance()->resetModerationCount();
122 }
123
124 /**
125 * Marks a list of moderation queue entries as done.
126 *
127 * @param integer $objectTypeID
128 * @param array<integer> $objectIDs
129 */
130 protected function removeEntries($objectTypeID, array $objectIDs) {
131 $queueList = new ModerationQueueList();
132 $queueList->getConditionBuilder()->add("moderation_queue.objectTypeID = ?", array($objectTypeID));
133 $queueList->getConditionBuilder()->add("moderation_queue.objectID IN (?)", array($objectIDs));
134 $queueList->readObjects();
135
136 if (count($queueList)) {
137 $objectAction = new ModerationQueueAction($queueList->getObjects(), 'markAsDone');
138 $objectAction->executeAction();
139 }
140 }
141 }