Merge branch '2.0'
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / moderation / queue / ModerationQueueReportManager.class.php
CommitLineData
fc69b61d
MW
1<?php
2namespace wcf\system\moderation\queue;
71b3faba
MS
3use wcf\data\moderation\queue\ModerationQueue;
4use wcf\data\moderation\queue\ModerationQueueAction;
fc69b61d
MW
5use wcf\data\moderation\queue\ViewableModerationQueue;
6use wcf\system\exception\SystemException;
7use wcf\system\request\LinkHandler;
8use 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 */
20class 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}