2 namespace wcf\system\moderation\queue\report
;
3 use wcf\data\conversation\message\ConversationMessage
;
4 use wcf\data\conversation\message\ConversationMessageAction
;
5 use wcf\data\conversation\message\ConversationMessageList
;
6 use wcf\data\conversation\message\ViewableConversationMessage
;
7 use wcf\data\conversation\Conversation
;
8 use wcf\data\conversation\ConversationList
;
9 use wcf\data\moderation\queue\ModerationQueue
;
10 use wcf\data\moderation\queue\ViewableModerationQueue
;
11 use wcf\system\moderation\queue\AbstractModerationQueueHandler
;
12 use wcf\system\moderation\queue\ModerationQueueManager
;
16 * An implementation of IModerationQueueReportHandler for conversation messages.
18 * @author Alexander Ebert
19 * @copyright 2001-2016 WoltLab GmbH
20 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
21 * @package com.woltlab.wcf.conversation
22 * @subpackage system.moderation.queue
23 * @category Community Framework
25 class ConversationMessageModerationQueueReportHandler
extends AbstractModerationQueueHandler
implements IModerationQueueReportHandler
{
29 protected $className = ConversationMessage
::class;
34 protected $definitionName = 'com.woltlab.wcf.moderation.report';
39 protected $objectType = 'com.woltlab.wcf.conversation.message';
42 * list of conversation message
43 * @var ConversationMessage[]
45 protected static $messages = [];
50 protected $requiredPermission = 'mod.conversation.canModerateConversation';
55 public function assignQueues(array $queues) {
57 foreach ($queues as $queue) {
59 if (WCF
::getSession()->getPermission('mod.conversation.canModerateConversation')) {
63 $assignments[$queue->queueID
] = $assignUser;
66 ModerationQueueManager
::getInstance()->setAssignment($assignments);
72 public function canReport($objectID) {
73 if (!$this->isValid($objectID)) {
77 if (!Conversation
::isParticipant([$this->getMessage($objectID)->conversationID
])) {
87 public function getContainerID($objectID) {
94 public function getReportedContent(ViewableModerationQueue
$queue) {
95 /** @noinspection PhpParamsInspection */
96 WCF
::getTPL()->assign([
97 'message' => new ViewableConversationMessage($queue->getAffectedObject())
100 return WCF
::getTPL()->fetch('moderationConversationMessage');
106 public function getReportedObject($objectID) {
107 if ($this->isValid($objectID)) {
108 return $this->getMessage($objectID);
117 public function isValid($objectID) {
118 if ($this->getMessage($objectID) === null) {
126 * Returns a conversation message object by message id or null if message id is invalid.
128 * @param integer $objectID
129 * @return \wcf\data\conversation\message\ConversationMessage
131 protected function getMessage($objectID) {
132 if (!array_key_exists($objectID, self
::$messages)) {
133 self
::$messages[$objectID] = new ConversationMessage($objectID);
134 if (!self
::$messages[$objectID]->messageID
) {
135 self
::$messages[$objectID] = null;
139 return self
::$messages[$objectID];
145 public function populate(array $queues) {
147 foreach ($queues as $object) {
148 $objectIDs[] = $object->objectID
;
152 $messageList = new ConversationMessageList();
153 $messageList->setObjectIDs($objectIDs);
154 $messageList->readObjects();
155 $messages = $messageList->getObjects();
157 // set orphaned queues
158 foreach ($queues as $queue) {
159 if (!isset($messages[$queue->objectID
])) {
160 $queue->setIsOrphaned();
164 // fetch conversations
165 $conversationIDs = [];
166 foreach ($messages as $message) {
167 $conversationIDs[] = $message->conversationID
;
170 if (!empty($conversationIDs)) {
171 $conversationList = new ConversationList();
172 $conversationList->setObjectIDs($conversationIDs);
173 $conversationList->readObjects();
174 $conversations = $conversationList->getObjects();
176 foreach ($queues as $object) {
177 if (isset($messages[$object->objectID
])) {
178 $message = $messages[$object->objectID
];
179 $message->setConversation($conversations[$message->conversationID
]);
181 $object->setAffectedObject($message);
190 public function removeContent(ModerationQueue
$queue, $message) {
191 if ($this->isValid($queue->objectID
)) {
192 $messageAction = new ConversationMessageAction([$this->getMessage($queue->objectID
)], 'delete');
193 $messageAction->executeAction();