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-2017 WoltLab GmbH
20 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
21 * @package WoltLabSuite\Core\System\Moderation\Queue
23 class ConversationMessageModerationQueueReportHandler
extends AbstractModerationQueueHandler
implements IModerationQueueReportHandler
{
27 protected $className = ConversationMessage
::class;
32 protected $definitionName = 'com.woltlab.wcf.moderation.report';
37 protected $objectType = 'com.woltlab.wcf.conversation.message';
40 * list of conversation message
41 * @var ConversationMessage[]
43 protected static $messages = [];
48 protected $requiredPermission = 'mod.conversation.canModerateConversation';
53 public function assignQueues(array $queues) {
55 foreach ($queues as $queue) {
57 if (WCF
::getSession()->getPermission('mod.conversation.canModerateConversation')) {
61 $assignments[$queue->queueID
] = $assignUser;
64 ModerationQueueManager
::getInstance()->setAssignment($assignments);
70 public function canReport($objectID) {
71 if (!$this->isValid($objectID)) {
75 if (!Conversation
::isParticipant([$this->getMessage($objectID)->conversationID
])) {
85 public function getContainerID($objectID) {
92 public function getReportedContent(ViewableModerationQueue
$queue) {
93 /** @noinspection PhpParamsInspection */
94 WCF
::getTPL()->assign([
95 'message' => new ViewableConversationMessage($queue->getAffectedObject())
98 return WCF
::getTPL()->fetch('moderationConversationMessage');
104 public function getReportedObject($objectID) {
105 if ($this->isValid($objectID)) {
106 return $this->getMessage($objectID);
115 public function isValid($objectID) {
116 if ($this->getMessage($objectID) === null) {
124 * Returns a conversation message object by message id or null if message id is invalid.
126 * @param integer $objectID
127 * @return ConversationMessage
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;
137 return self
::$messages[$objectID];
143 public function populate(array $queues) {
145 foreach ($queues as $object) {
146 $objectIDs[] = $object->objectID
;
150 $messageList = new ConversationMessageList();
151 $messageList->setObjectIDs($objectIDs);
152 $messageList->readObjects();
153 $messages = $messageList->getObjects();
155 // set orphaned queues
156 foreach ($queues as $queue) {
157 if (!isset($messages[$queue->objectID
])) {
158 $queue->setIsOrphaned();
162 // fetch conversations
163 $conversationIDs = [];
164 foreach ($messages as $message) {
165 $conversationIDs[] = $message->conversationID
;
168 if (!empty($conversationIDs)) {
169 $conversationList = new ConversationList();
170 $conversationList->setObjectIDs($conversationIDs);
171 $conversationList->readObjects();
172 $conversations = $conversationList->getObjects();
174 foreach ($queues as $object) {
175 if (isset($messages[$object->objectID
])) {
176 $message = $messages[$object->objectID
];
177 $message->setConversation($conversations[$message->conversationID
]);
179 $object->setAffectedObject($message);
188 public function removeContent(ModerationQueue
$queue, $message) {
189 if ($this->isValid($queue->objectID
)) {
190 $messageAction = new ConversationMessageAction([$this->getMessage($queue->objectID
)], 'delete');
191 $messageAction->executeAction();