/**
  * @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;
 }