Commit | Line | Data |
---|---|---|
60d1935c | 1 | <?php |
db07cb2d | 2 | namespace wcf\system\moderation\queue\report; |
60d1935c | 3 | use wcf\data\conversation\message\ConversationMessage; |
db07cb2d | 4 | use wcf\data\conversation\message\ConversationMessageAction; |
60d1935c AE |
5 | use wcf\data\conversation\message\ConversationMessageList; |
6 | use wcf\data\conversation\message\ViewableConversationMessage; | |
232cdc4b MS |
7 | use wcf\data\conversation\Conversation; |
8 | use wcf\data\conversation\ConversationList; | |
60d1935c | 9 | use wcf\data\moderation\queue\ModerationQueue; |
db07cb2d | 10 | use wcf\data\moderation\queue\ViewableModerationQueue; |
58ad6e1c | 11 | use wcf\system\moderation\queue\AbstractModerationQueueHandler; |
60d1935c AE |
12 | use wcf\system\moderation\queue\ModerationQueueManager; |
13 | use wcf\system\WCF; | |
14 | ||
15 | /** | |
16 | * An implementation of IModerationQueueReportHandler for conversation messages. | |
17 | * | |
f14df6e0 | 18 | * @author Alexander Ebert |
4ddaa70e | 19 | * @copyright 2001-2019 WoltLab GmbH |
60d1935c | 20 | * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> |
c032049e | 21 | * @package WoltLabSuite\Core\System\Moderation\Queue |
60d1935c | 22 | */ |
58ad6e1c | 23 | class ConversationMessageModerationQueueReportHandler extends AbstractModerationQueueHandler implements IModerationQueueReportHandler { |
6ee7d629 | 24 | /** |
9c3943b0 | 25 | * @inheritDoc |
6ee7d629 | 26 | */ |
f586b354 | 27 | protected $className = ConversationMessage::class; |
6ee7d629 | 28 | |
58ad6e1c | 29 | /** |
9c3943b0 | 30 | * @inheritDoc |
58ad6e1c AE |
31 | */ |
32 | protected $definitionName = 'com.woltlab.wcf.moderation.report'; | |
33 | ||
34 | /** | |
9c3943b0 | 35 | * @inheritDoc |
58ad6e1c | 36 | */ |
b8be4e8d | 37 | protected $objectType = 'com.woltlab.wcf.conversation.message'; |
58ad6e1c | 38 | |
60d1935c AE |
39 | /** |
40 | * list of conversation message | |
03043c3c | 41 | * @var ConversationMessage[] |
60d1935c | 42 | */ |
eaf1c8eb | 43 | protected static $messages = []; |
60d1935c | 44 | |
48e5a9da | 45 | /** |
9c3943b0 | 46 | * @inheritDoc |
48e5a9da MW |
47 | */ |
48 | protected $requiredPermission = 'mod.conversation.canModerateConversation'; | |
49 | ||
60d1935c | 50 | /** |
9c3943b0 | 51 | * @inheritDoc |
60d1935c AE |
52 | */ |
53 | public function assignQueues(array $queues) { | |
eaf1c8eb | 54 | $assignments = []; |
60d1935c AE |
55 | foreach ($queues as $queue) { |
56 | $assignUser = false; | |
57 | if (WCF::getSession()->getPermission('mod.conversation.canModerateConversation')) { | |
58 | $assignUser = true; | |
59 | } | |
60 | ||
61 | $assignments[$queue->queueID] = $assignUser; | |
62 | } | |
db864366 | 63 | |
60d1935c AE |
64 | ModerationQueueManager::getInstance()->setAssignment($assignments); |
65 | } | |
66 | ||
67 | /** | |
9c3943b0 | 68 | * @inheritDoc |
60d1935c AE |
69 | */ |
70 | public function canReport($objectID) { | |
71 | if (!$this->isValid($objectID)) { | |
72 | return false; | |
73 | } | |
74 | ||
eaf1c8eb | 75 | if (!Conversation::isParticipant([$this->getMessage($objectID)->conversationID])) { |
60d1935c AE |
76 | return false; |
77 | } | |
78 | ||
79 | return true; | |
80 | } | |
81 | ||
82 | /** | |
9c3943b0 | 83 | * @inheritDoc |
60d1935c AE |
84 | */ |
85 | public function getContainerID($objectID) { | |
86 | return 0; | |
87 | } | |
88 | ||
89 | /** | |
9c3943b0 | 90 | * @inheritDoc |
60d1935c AE |
91 | */ |
92 | public function getReportedContent(ViewableModerationQueue $queue) { | |
5acf7f80 | 93 | /** @noinspection PhpParamsInspection */ |
eaf1c8eb | 94 | WCF::getTPL()->assign([ |
60d1935c | 95 | 'message' => new ViewableConversationMessage($queue->getAffectedObject()) |
eaf1c8eb | 96 | ]); |
db864366 | 97 | |
60d1935c AE |
98 | return WCF::getTPL()->fetch('moderationConversationMessage'); |
99 | } | |
100 | ||
101 | /** | |
9c3943b0 | 102 | * @inheritDoc |
60d1935c AE |
103 | */ |
104 | public function getReportedObject($objectID) { | |
105 | if ($this->isValid($objectID)) { | |
106 | return $this->getMessage($objectID); | |
107 | } | |
db864366 | 108 | |
60d1935c AE |
109 | return null; |
110 | } | |
111 | ||
112 | /** | |
9c3943b0 | 113 | * @inheritDoc |
60d1935c AE |
114 | */ |
115 | public function isValid($objectID) { | |
116 | if ($this->getMessage($objectID) === null) { | |
117 | return false; | |
118 | } | |
119 | ||
120 | return true; | |
121 | } | |
122 | ||
123 | /** | |
124 | * Returns a conversation message object by message id or null if message id is invalid. | |
125 | * | |
126 | * @param integer $objectID | |
3dfd396a | 127 | * @return ConversationMessage |
60d1935c AE |
128 | */ |
129 | protected function getMessage($objectID) { | |
130 | if (!array_key_exists($objectID, self::$messages)) { | |
131 | self::$messages[$objectID] = new ConversationMessage($objectID); | |
132 | if (!self::$messages[$objectID]->messageID) { | |
133 | self::$messages[$objectID] = null; | |
134 | } | |
135 | } | |
136 | ||
137 | return self::$messages[$objectID]; | |
138 | } | |
139 | ||
140 | /** | |
9c3943b0 | 141 | * @inheritDoc |
60d1935c AE |
142 | */ |
143 | public function populate(array $queues) { | |
eaf1c8eb | 144 | $objectIDs = []; |
60d1935c AE |
145 | foreach ($queues as $object) { |
146 | $objectIDs[] = $object->objectID; | |
147 | } | |
148 | ||
149 | // fetch messages | |
150 | $messageList = new ConversationMessageList(); | |
cb682f36 | 151 | $messageList->setObjectIDs($objectIDs); |
60d1935c AE |
152 | $messageList->readObjects(); |
153 | $messages = $messageList->getObjects(); | |
154 | ||
cb682f36 MS |
155 | // set orphaned queues |
156 | foreach ($queues as $queue) { | |
157 | if (!isset($messages[$queue->objectID])) { | |
158 | $queue->setIsOrphaned(); | |
159 | } | |
160 | } | |
161 | ||
60d1935c | 162 | // fetch conversations |
eaf1c8eb | 163 | $conversationIDs = []; |
60d1935c AE |
164 | foreach ($messages as $message) { |
165 | $conversationIDs[] = $message->conversationID; | |
166 | } | |
167 | ||
cb682f36 MS |
168 | if (!empty($conversationIDs)) { |
169 | $conversationList = new ConversationList(); | |
170 | $conversationList->setObjectIDs($conversationIDs); | |
171 | $conversationList->readObjects(); | |
172 | $conversations = $conversationList->getObjects(); | |
173 | ||
174 | foreach ($queues as $object) { | |
175 | if (isset($messages[$object->objectID])) { | |
176 | $message = $messages[$object->objectID]; | |
177 | $message->setConversation($conversations[$message->conversationID]); | |
178 | ||
179 | $object->setAffectedObject($message); | |
180 | } | |
60d1935c AE |
181 | } |
182 | } | |
183 | } | |
184 | ||
185 | /** | |
9c3943b0 | 186 | * @inheritDoc |
60d1935c AE |
187 | */ |
188 | public function removeContent(ModerationQueue $queue, $message) { | |
db07cb2d | 189 | if ($this->isValid($queue->objectID)) { |
eaf1c8eb | 190 | $messageAction = new ConversationMessageAction([$this->getMessage($queue->objectID)], 'delete'); |
db07cb2d AE |
191 | $messageAction->executeAction(); |
192 | } | |
60d1935c AE |
193 | } |
194 | } |