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-2015 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
{
27 * @see \wcf\system\moderation\queue\AbstractModerationQueueHandler::$className
29 protected $className = 'wcf\data\conversation\message\ConversationMessage';
32 * @see \wcf\system\moderation\queue\AbstractModerationQueueHandler::$definitionName
34 protected $definitionName = 'com.woltlab.wcf.moderation.report';
37 * @see \wcf\system\moderation\queue\AbstractModerationQueueHandler::$objectType
39 protected $objectType = 'com.woltlab.wcf.conversation.message';
42 * list of conversation message
43 * @var array<\wcf\data\conversation\message\ConversationMessage>
45 protected static $messages = array();
48 * @see \wcf\system\moderation\queue\AbstractModerationQueueHandler::$requiredPermission
50 protected $requiredPermission = 'mod.conversation.canModerateConversation';
53 * @see \wcf\system\moderation\queue\IModerationQueueHandler::assignQueues()
55 public function assignQueues(array $queues) {
56 $assignments = array();
57 foreach ($queues as $queue) {
59 if (WCF
::getSession()->getPermission('mod.conversation.canModerateConversation')) {
63 $assignments[$queue->queueID
] = $assignUser;
66 ModerationQueueManager
::getInstance()->setAssignment($assignments);
70 * @see \wcf\system\moderation\queue\report\IModerationQueueReportHandler::canReport()
72 public function canReport($objectID) {
73 if (!$this->isValid($objectID)) {
77 if (!Conversation
::isParticipant(array($this->getMessage($objectID)->conversationID
))) {
85 * @see \wcf\system\moderation\queue\IModerationQueueHandler::getContainerID()
87 public function getContainerID($objectID) {
92 * @see \wcf\system\moderation\queue\report\IModerationQueueReportHandler::getReportedContent()
94 public function getReportedContent(ViewableModerationQueue
$queue) {
95 WCF
::getTPL()->assign(array(
96 'message' => ViewableConversationMessage
::getViewableConversationMessage($queue->getAffectedObject()->messageID
)
99 return WCF
::getTPL()->fetch('moderationConversationMessage');
103 * @see \wcf\system\moderation\queue\report\IModerationQueueReportHandler::getReportedObject()
105 public function getReportedObject($objectID) {
106 if ($this->isValid($objectID)) {
107 return $this->getMessage($objectID);
114 * @see \wcf\system\moderation\queue\IModerationQueueHandler::isValid()
116 public function isValid($objectID) {
117 if ($this->getMessage($objectID) === null) {
125 * Returns a conversation message object by message id or null if message id is invalid.
127 * @param integer $objectID
128 * @return \wcf\data\conversation\message\ConversationMessage
130 protected function getMessage($objectID) {
131 if (!array_key_exists($objectID, self
::$messages)) {
132 self
::$messages[$objectID] = new ConversationMessage($objectID);
133 if (!self
::$messages[$objectID]->messageID
) {
134 self
::$messages[$objectID] = null;
138 return self
::$messages[$objectID];
142 * @see \wcf\system\moderation\queue\IModerationQueueHandler::populate()
144 public function populate(array $queues) {
145 $objectIDs = array();
146 foreach ($queues as $object) {
147 $objectIDs[] = $object->objectID
;
151 $messageList = new ConversationMessageList();
152 $messageList->setObjectIDs($objectIDs);
153 $messageList->readObjects();
154 $messages = $messageList->getObjects();
156 // set orphaned queues
157 foreach ($queues as $queue) {
158 if (!isset($messages[$queue->objectID
])) {
159 $queue->setIsOrphaned();
163 // fetch conversations
164 $conversationIDs = array();
165 foreach ($messages as $message) {
166 $conversationIDs[] = $message->conversationID
;
169 if (!empty($conversationIDs)) {
170 $conversationList = new ConversationList();
171 $conversationList->setObjectIDs($conversationIDs);
172 $conversationList->readObjects();
173 $conversations = $conversationList->getObjects();
175 foreach ($queues as $object) {
176 if (isset($messages[$object->objectID
])) {
177 $message = $messages[$object->objectID
];
178 $message->setConversation($conversations[$message->conversationID
]);
180 $object->setAffectedObject($message);
187 * @see \wcf\system\moderation\queue\IModerationQueueHandler::removeContent()
189 public function removeContent(ModerationQueue
$queue, $message) {
190 if ($this->isValid($queue->objectID
)) {
191 $messageAction = new ConversationMessageAction(array($this->getMessage($queue->objectID
)), 'delete');
192 $messageAction->executeAction();