Commit | Line | Data |
---|---|---|
fc69b61d MW |
1 | <?php |
2 | namespace wcf\system\moderation\queue; | |
71b3faba MS |
3 | use wcf\data\moderation\queue\ModerationQueue; |
4 | use wcf\data\moderation\queue\ModerationQueueAction; | |
fc69b61d MW |
5 | use wcf\data\moderation\queue\ViewableModerationQueue; |
6 | use wcf\system\exception\SystemException; | |
7 | use wcf\system\request\LinkHandler; | |
8 | use wcf\system\WCF; | |
9 | ||
10 | /** | |
11 | * Moderation queue implementation for reports. | |
12 | * | |
13 | * @author Alexander Ebert | |
ca4ba303 | 14 | * @copyright 2001-2014 WoltLab GmbH |
fc69b61d | 15 | * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> |
f4f05aa5 | 16 | * @package com.woltlab.wcf |
fc69b61d MW |
17 | * @subpackage system.moderation.queue |
18 | * @category Community Framework | |
19 | */ | |
20 | class ModerationQueueReportManager extends AbstractModerationQueueManager { | |
21 | /** | |
0ad90fc3 | 22 | * @see \wcf\system\moderation\queue\AbstractModerationQueueManager::$definitionName |
fc69b61d MW |
23 | */ |
24 | protected $definitionName = 'com.woltlab.wcf.moderation.report'; | |
25 | ||
26 | /** | |
27 | * Returns true if given item was already reported. | |
28 | * | |
29 | * @param string $objectType | |
30 | * @param integer $objectID | |
31 | * @return boolean | |
32 | */ | |
33 | public function isAlreadyReported($objectType, $objectID) { | |
34 | $objectTypeID = $this->getObjectTypeID($objectType); | |
35 | ||
36 | $sql = "SELECT COUNT(*) AS count | |
37 | FROM wcf".WCF_N."_moderation_queue | |
38 | WHERE objectTypeID = ? | |
39 | AND objectID = ?"; | |
40 | $statement = WCF::getDB()->prepareStatement($sql); | |
41 | $statement->execute(array( | |
71b3faba MS |
42 | $objectTypeID, |
43 | $objectID | |
fc69b61d MW |
44 | )); |
45 | $row = $statement->fetchArray(); | |
46 | ||
47 | return ($row['count'] == 0 ? false : true); | |
48 | } | |
49 | ||
71b3faba MS |
50 | /** |
51 | * Returns true if the object with the given data has a pending report. | |
52 | * A pending report has a status other than done. | |
53 | * | |
54 | * @param string $objectType | |
55 | * @param integer $objectID | |
56 | * @return boolean | |
57 | */ | |
58 | public function hasPendingReport($objectType, $objectID) { | |
59 | $objectTypeID = $this->getObjectTypeID($objectType); | |
60 | ||
5d62c8dd | 61 | $sql = "SELECT COUNT(*) |
71b3faba MS |
62 | FROM wcf".WCF_N."_moderation_queue |
63 | WHERE objectTypeID = ? | |
5d62c8dd TD |
64 | AND objectID = ? |
65 | AND status <> ?"; | |
71b3faba MS |
66 | $statement = WCF::getDB()->prepareStatement($sql); |
67 | $statement->execute(array( | |
68 | $objectTypeID, | |
5d62c8dd TD |
69 | $objectID, |
70 | ModerationQueue::STATUS_DONE | |
71b3faba | 71 | )); |
71b3faba | 72 | |
5d62c8dd | 73 | return $statement->fetchColumn() > 0; |
71b3faba MS |
74 | } |
75 | ||
fc69b61d MW |
76 | /** |
77 | * Returns true if current user can report given content. | |
78 | * | |
79 | * @param string $objectType | |
80 | * @param integer $objectID | |
81 | * @return boolean | |
82 | */ | |
83 | public function canReport($objectType, $objectID) { | |
84 | return $this->getProcessor($objectType)->canReport($objectID); | |
85 | } | |
86 | ||
87 | /** | |
0ad90fc3 | 88 | * @see \wcf\system\moderation\queue\IModerationQueueManager::getLink() |
fc69b61d MW |
89 | */ |
90 | public function getLink($queueID) { | |
91 | return LinkHandler::getInstance()->getLink('ModerationReport', array('id' => $queueID)); | |
92 | } | |
93 | ||
94 | /** | |
95 | * Returns rendered template for reported content. | |
96 | * | |
0ad90fc3 | 97 | * @param \wcf\data\moderation\queue\ViewableModerationQueue $queue |
fc69b61d MW |
98 | * @return string |
99 | */ | |
100 | public function getReportedContent(ViewableModerationQueue $queue) { | |
101 | return $this->getProcessor(null, $queue->objectTypeID)->getReportedContent($queue); | |
102 | } | |
103 | ||
104 | /** | |
105 | * Returns the reported object. | |
106 | * | |
107 | * @param string $objectType | |
108 | * @param integer $objectID | |
0ad90fc3 | 109 | * @return \wcf\data\IUserContent |
fc69b61d MW |
110 | */ |
111 | public function getReportedObject($objectType, $objectID) { | |
112 | return $this->getProcessor($objectType)->getReportedObject($objectID); | |
113 | } | |
114 | ||
115 | /** | |
116 | * Adds a report for specified content. | |
117 | * | |
118 | * @param string $objectType | |
119 | * @param integer $objectID | |
120 | * @param string $message | |
121 | * @param array $additionalData | |
122 | */ | |
123 | public function addReport($objectType, $objectID, $message, array $additionalData = array()) { | |
124 | if (!$this->isValid($objectType)) { | |
125 | throw new SystemException("Object type '".$objectType."' is not valid for definition 'com.woltlab.wcf.moderation.report'"); | |
126 | } | |
127 | ||
128 | $additionalData['message'] = $message; | |
129 | $this->addEntry( | |
130 | $this->getObjectTypeID($objectType), | |
131 | $objectID, | |
132 | $this->getProcessor($objectType)->getContainerID($objectID), | |
133 | $additionalData | |
134 | ); | |
135 | } | |
71b3faba MS |
136 | |
137 | /** | |
138 | * @see \wcf\system\moderation\queue\AbstractModerationQueueManager::addEntry() | |
139 | */ | |
140 | protected function addEntry($objectTypeID, $objectID, $containerID = 0, array $additionalData = array()) { | |
141 | $sql = "SELECT queueID | |
142 | FROM wcf".WCF_N."_moderation_queue | |
143 | WHERE objectTypeID = ? | |
144 | AND objectID = ? | |
145 | AND status <> ?"; | |
146 | $statement = WCF::getDB()->prepareStatement($sql); | |
147 | $statement->execute(array( | |
148 | $objectTypeID, | |
149 | $objectID, | |
150 | ModerationQueue::STATUS_DONE | |
151 | )); | |
152 | $row = $statement->fetchArray(); | |
153 | ||
154 | if ($row === false) { | |
155 | $objectAction = new ModerationQueueAction(array(), 'create', array( | |
156 | 'data' => array( | |
157 | 'objectTypeID' => $objectTypeID, | |
158 | 'objectID' => $objectID, | |
159 | 'containerID' => $containerID, | |
160 | 'userID' => (WCF::getUser()->userID ?: null), | |
161 | 'time' => TIME_NOW, | |
162 | 'additionalData' => serialize($additionalData) | |
163 | ) | |
164 | )); | |
165 | $objectAction->executeAction(); | |
166 | } | |
167 | else { | |
168 | $objectAction = new ModerationQueueAction(array($row['queueID']), 'update', array( | |
169 | 'data' => array( | |
170 | 'status' => ModerationQueue::STATUS_OUTSTANDING, | |
171 | 'containerID' => $containerID, | |
172 | 'userID' => (WCF::getUser()->userID ?: null), | |
173 | 'time' => TIME_NOW, | |
174 | 'additionalData' => serialize($additionalData) | |
175 | ) | |
176 | )); | |
177 | $objectAction->executeAction(); | |
178 | } | |
179 | ||
180 | ModerationQueueManager::getInstance()->resetModerationCount(); | |
181 | } | |
fc69b61d | 182 | } |