/** * @see \wcf\data\AbstractDatabaseObjectAction::create() */ public function create() { // create conversation $data = $this->parameters['data']; $data['lastPosterID'] = $data['userID']; $data['lastPoster'] = $data['username']; $data['lastPostTime'] = $data['time']; // count participants if (!empty($this->parameters['participants'])) { $data['participants'] = count($this->parameters['participants']); } // count attachments if (isset($this->parameters['attachmentHandler']) && $this->parameters['attachmentHandler'] !== null) { $data['attachments'] = count($this->parameters['attachmentHandler']); } $conversation = call_user_func(array($this->className, 'create'), $data); $conversationEditor = new ConversationEditor($conversation); if (!$conversation->isDraft) { // save participants $conversationEditor->updateParticipants(!empty($this->parameters['participants']) ? $this->parameters['participants'] : array(), !empty($this->parameters['invisibleParticipants']) ? $this->parameters['invisibleParticipants'] : array()); // add author $conversationEditor->updateParticipants(array($data['userID'])); // update conversation count UserStorageHandler::getInstance()->reset($conversation->getParticipantIDs(), 'conversationCount'); // mark conversation as read for the author $sql = "UPDATE\twcf" . WCF_N . "_conversation_to_user\n\t\t\t\tSET\tlastVisitTime = ?\n\t\t\t\tWHERE\tparticipantID = ?\n\t\t\t\t\tAND conversationID = ?"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($data['time'], $data['userID'], $conversation->conversationID)); } else { // update conversation count UserStorageHandler::getInstance()->reset(array($data['userID']), 'conversationCount'); } // update participant summary $conversationEditor->updateParticipantSummary(); // create message $messageData = $this->parameters['messageData']; $messageData['conversationID'] = $conversation->conversationID; $messageData['time'] = $this->parameters['data']['time']; $messageData['userID'] = $this->parameters['data']['userID']; $messageData['username'] = $this->parameters['data']['username']; $messageAction = new ConversationMessageAction(array(), 'create', array('data' => $messageData, 'conversation' => $conversation, 'isFirstPost' => true, 'attachmentHandler' => isset($this->parameters['attachmentHandler']) ? $this->parameters['attachmentHandler'] : null)); $resultValues = $messageAction->executeAction(); // update first message id $conversationEditor->update(array('firstMessageID' => $resultValues['returnValues']->messageID)); $conversation->setFirstMessage($resultValues['returnValues']); if (!$conversation->isDraft) { // fire notification event $notificationRecipients = array_merge(!empty($this->parameters['participants']) ? $this->parameters['participants'] : array(), !empty($this->parameters['invisibleParticipants']) ? $this->parameters['invisibleParticipants'] : array()); UserNotificationHandler::getInstance()->fireEvent('conversation', 'com.woltlab.wcf.conversation.notification', new ConversationUserNotificationObject($conversation), $notificationRecipients); } return $conversation; }