2 namespace wcf\system\moderation\queue
;
3 use wcf\data\moderation\queue\ModerationQueue
;
4 use wcf\data\moderation\queue\ModerationQueueAction
;
5 use wcf\system\database\util\PreparedStatementConditionBuilder
;
6 use wcf\system\exception\SystemException
;
8 use wcf\util\ClassUtil
;
11 * Default implementation for moderation queue handlers.
13 * @author Alexander Ebert
14 * @copyright 2001-2014 WoltLab GmbH
15 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
16 * @package com.woltlab.wcf
17 * @subpackage system.moderation.queue
18 * @category Community Framework
20 abstract class AbstractModerationQueueHandler
implements IModerationQueueHandler
{
22 * database object class name
25 protected $className = '';
31 protected $definitionName = '';
37 protected $objectType = '';
40 * @see \wcf\system\moderation\queue\IModerationQueueHandler::identifyOrphans()
42 public function identifyOrphans(array $queues) {
43 if (empty($this->className
) ||
!class_exists($this->className
) ||
!ClassUtil
::isInstanceOf($this->className
, 'wcf\data\DatabaseObject')) {
44 throw new SystemException("DatabaseObject class name '" . $this->className
. "' is missing or invalid");
47 $indexName = call_user_func(array($this->className
, 'getDatabaseTableIndexName'));
48 $tableName = call_user_func(array($this->className
, 'getDatabaseTableName'));
50 $conditions = new PreparedStatementConditionBuilder();
51 $conditions->add($indexName . " IN (?)", array(array_keys($queues)));
53 $sql = "SELECT " . $indexName . "
54 FROM " . $tableName . "
56 $statement = WCF
::getDB()->prepareStatement($sql);
57 $statement->execute($conditions->getParameters());
58 while ($row = $statement->fetchArray()) {
59 unset($queues[$row[$indexName]]);
62 return array_values($queues);
66 * @see \wcf\system\moderation\queue\IModerationQueueHandler::removeQueues()
68 public function removeQueues(array $objectIDs) {
69 $objectTypeID = ModerationQueueManager
::getInstance()->getObjectTypeID($this->definitionName
, $this->objectType
);
70 if ($objectTypeID === null) {
71 throw new SystemException("Object type '".$this->objectType
."' is not valid for definition '".$this->definitionName
."'");
74 $conditions = new PreparedStatementConditionBuilder();
75 $conditions->add("objectTypeID = ?", array($objectTypeID));
76 $conditions->add("objectID IN (?)", array($objectIDs));
78 $sql = "SELECT queueID
79 FROM wcf".WCF_N
."_moderation_queue
81 $statement = WCF
::getDB()->prepareStatement($sql);
82 $statement->execute($conditions->getParameters());
84 while ($row = $statement->fetchArray()) {
85 $queueIDs[] = $row['queueID'];
88 if (!empty($queueIDs)) {
89 $queueAction = new ModerationQueueAction($queueIDs, 'delete');
90 $queueAction->executeAction();
95 * @see \wcf\system\moderation\queue\IModerationQueueHandler::canRemoveContent()
97 public function canRemoveContent(ModerationQueue
$queue) {