3 namespace wcf\system\moderation\queue
;
5 use wcf\data\DatabaseObject
;
6 use wcf\data\moderation\queue\ModerationQueue
;
7 use wcf\data\moderation\queue\ModerationQueueAction
;
8 use wcf\system\cache\runtime\UserProfileRuntimeCache
;
9 use wcf\system\database\util\PreparedStatementConditionBuilder
;
10 use wcf\system\exception\InvalidObjectTypeException
;
11 use wcf\system\exception\SystemException
;
12 use wcf\system\moderation\queue\activation\IModerationQueueActivationHandler
;
13 use wcf\system\moderation\queue\report\IModerationQueueReportHandler
;
17 * Default implementation for moderation queue handlers.
19 * @author Alexander Ebert
20 * @copyright 2001-2019 WoltLab GmbH
21 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
23 abstract class AbstractModerationQueueHandler
implements IModerationQueueHandler
26 * database object class name
29 protected $className = '';
35 protected $definitionName = '';
41 protected $objectType = '';
44 * required permission for assigned users
47 protected $requiredPermission = 'mod.general.canUseModeration';
52 public function identifyOrphans(array $queues)
55 empty($this->className
)
56 ||
!\
class_exists($this->className
)
57 ||
!\
is_subclass_of($this->className
, DatabaseObject
::class)
59 throw new SystemException("DatabaseObject class name '" . $this->className
. "' is missing or invalid");
62 $indexName = \
call_user_func([$this->className
, 'getDatabaseTableIndexName']);
63 $tableName = \
call_user_func([$this->className
, 'getDatabaseTableName']);
65 $conditions = new PreparedStatementConditionBuilder();
66 $conditions->add($indexName . " IN (?)", [\array_keys
($queues)]);
68 $sql = "SELECT " . $indexName . "
69 FROM " . $tableName . "
71 $statement = WCF
::getDB()->prepareStatement($sql);
72 $statement->execute($conditions->getParameters());
73 while ($row = $statement->fetchArray()) {
74 unset($queues[$row[$indexName]]);
77 return \array_values
($queues);
83 public function removeQueues(array $objectIDs)
85 $objectTypeID = ModerationQueueManager
::getInstance()
86 ->getObjectTypeID($this->definitionName
, $this->objectType
);
87 if ($objectTypeID === null) {
88 throw new InvalidObjectTypeException($this->objectType
, $this->definitionName
);
91 $conditions = new PreparedStatementConditionBuilder();
92 $conditions->add("objectTypeID = ?", [$objectTypeID]);
93 $conditions->add("objectID IN (?)", [$objectIDs]);
95 $sql = "SELECT queueID
96 FROM wcf" . WCF_N
. "_moderation_queue
98 $statement = WCF
::getDB()->prepareStatement($sql);
99 $statement->execute($conditions->getParameters());
100 $queueIDs = $statement->fetchAll(\PDO
::FETCH_COLUMN
);
102 if (!empty($queueIDs)) {
103 $queueAction = new ModerationQueueAction($queueIDs, 'delete');
104 $queueAction->executeAction();
111 public function canRemoveContent(ModerationQueue
$queue)
119 public function isAffectedUser(ModerationQueue
$queue, $userID)
121 $userProfile = UserProfileRuntimeCache
::getInstance()->getObject($userID);
123 return $userProfile->getPermission($this->requiredPermission
);
130 public function getCommentNotificationLanguageItemPrefix()
132 // this implementation exists to provide backwards compatibility;
133 // as there are no abstract implementations of the two interfaces,
134 // this is the best approach
135 if ($this instanceof IModerationQueueActivationHandler
) {
136 return 'wcf.moderation.activation.notification';
137 } elseif ($this instanceof IModerationQueueReportHandler
) {
138 return 'wcf.moderation.report.notification';
141 return 'wcf.moderation.notification';
147 public function getCommentNotificationTypeNameLanguageItem(): string
149 if ($this instanceof IModerationQueueActivationHandler
) {
150 return 'wcf.moderation.activation';
151 } elseif ($this instanceof IModerationQueueReportHandler
) {
152 return 'wcf.moderation.report';
155 return 'wcf.moderation.moderation';