*/
public function prepareReport() {
// content was already reported
- $alreadyReported = (ModerationQueueReportManager::getInstance()->isAlreadyReported($this->parameters['objectType'], $this->parameters['objectID'])) ? 1 : 0;
+ $alreadyReported = (ModerationQueueReportManager::getInstance()->hasPendingReport($this->parameters['objectType'], $this->parameters['objectID'])) ? 1 : 0;
WCF::getTPL()->assign(array(
'alreadyReported' => $alreadyReported,
public function report() {
// if the specified content was already reported, e.g. a different user reported this
// item meanwhile, silently ignore it. Just display a success and the user is happy :)
- if (!ModerationQueueReportManager::getInstance()->isAlreadyReported($this->parameters['objectType'], $this->parameters['objectID'])) {
+ if (!ModerationQueueReportManager::getInstance()->hasPendingReport($this->parameters['objectType'], $this->parameters['objectID'])) {
ModerationQueueReportManager::getInstance()->addReport(
$this->parameters['objectType'],
$this->parameters['objectID'],
<?php
namespace wcf\system\moderation\queue;
+use wcf\data\moderation\queue\ModerationQueue;
+use wcf\data\moderation\queue\ModerationQueueAction;
use wcf\data\moderation\queue\ViewableModerationQueue;
use wcf\system\exception\SystemException;
use wcf\system\request\LinkHandler;
AND objectID = ?";
$statement = WCF::getDB()->prepareStatement($sql);
$statement->execute(array(
- $objectTypeID,
- $objectID
+ $objectTypeID,
+ $objectID
));
$row = $statement->fetchArray();
return ($row['count'] == 0 ? false : true);
}
+ /**
+ * Returns true if the object with the given data has a pending report.
+ * A pending report has a status other than done.
+ *
+ * @param string $objectType
+ * @param integer $objectID
+ * @return boolean
+ */
+ public function hasPendingReport($objectType, $objectID) {
+ $objectTypeID = $this->getObjectTypeID($objectType);
+
+ $sql = "SELECT status
+ FROM wcf".WCF_N."_moderation_queue
+ WHERE objectTypeID = ?
+ AND objectID = ?";
+ $statement = WCF::getDB()->prepareStatement($sql);
+ $statement->execute(array(
+ $objectTypeID,
+ $objectID
+ ));
+ $status = $statement->fetchColumn();
+
+ return $status !== false && $status != ModerationQueue::STATUS_DONE;
+ }
+
/**
* Returns true if current user can report given content.
*
$additionalData
);
}
+
+ /**
+ * @see \wcf\system\moderation\queue\AbstractModerationQueueManager::addEntry()
+ */
+ protected function addEntry($objectTypeID, $objectID, $containerID = 0, array $additionalData = array()) {
+ $sql = "SELECT queueID
+ FROM wcf".WCF_N."_moderation_queue
+ WHERE objectTypeID = ?
+ AND objectID = ?
+ AND status <> ?";
+ $statement = WCF::getDB()->prepareStatement($sql);
+ $statement->execute(array(
+ $objectTypeID,
+ $objectID,
+ ModerationQueue::STATUS_DONE
+ ));
+ $row = $statement->fetchArray();
+
+ if ($row === false) {
+ $objectAction = new ModerationQueueAction(array(), 'create', array(
+ 'data' => array(
+ 'objectTypeID' => $objectTypeID,
+ 'objectID' => $objectID,
+ 'containerID' => $containerID,
+ 'userID' => (WCF::getUser()->userID ?: null),
+ 'time' => TIME_NOW,
+ 'additionalData' => serialize($additionalData)
+ )
+ ));
+ $objectAction->executeAction();
+ }
+ else {
+ $objectAction = new ModerationQueueAction(array($row['queueID']), 'update', array(
+ 'data' => array(
+ 'status' => ModerationQueue::STATUS_OUTSTANDING,
+ 'containerID' => $containerID,
+ 'userID' => (WCF::getUser()->userID ?: null),
+ 'time' => TIME_NOW,
+ 'additionalData' => serialize($additionalData)
+ )
+ ));
+ $objectAction->executeAction();
+ }
+
+ ModerationQueueManager::getInstance()->resetModerationCount();
+ }
}