/**
  * @see	\wcf\page\IPage::readData()
  */
 public function readData()
 {
     parent::readData();
     if (empty($_POST)) {
         // check for quick reply message
         $this->text = QuickReplyManager::getInstance()->getMessage('conversation', $this->conversation->conversationID);
         if (empty($this->text)) {
             if (MessageQuoteManager::getInstance()->getQuoteMessageID()) {
                 $message = new ConversationMessage(MessageQuoteManager::getInstance()->getQuoteMessageID());
                 if (!$message->messageID) {
                     throw new IllegalLinkException();
                 }
                 if ($message->conversationID == $this->conversation->conversationID) {
                     $message->setConversation($this->conversation);
                     $this->text = MessageQuoteManager::getInstance()->renderQuote($message, $message->message);
                 }
             }
             if (empty($this->text)) {
                 // get all message ids from current conversation
                 $sql = "SELECT\tmessageID\n\t\t\t\t\t\tFROM\twcf" . WCF_N . "_conversation_message\n\t\t\t\t\t\tWHERE\tconversationID = ?";
                 $statement = WCF::getDB()->prepareStatement($sql);
                 $statement->execute(array($this->conversation->conversationID));
                 $messageIDs = array();
                 while ($row = $statement->fetchArray()) {
                     $messageIDs[] = $row['messageID'];
                 }
                 $renderedQuotes = MessageQuoteManager::getInstance()->getQuotesByObjectIDs('com.woltlab.wcf.conversation.message', $messageIDs);
                 if (!empty($renderedQuotes)) {
                     $this->text = implode("\n", $renderedQuotes);
                 }
             }
         }
     }
     // add breadcrumbs
     WCF::getBreadcrumbs()->add(new Breadcrumb(WCF::getLanguage()->get('wcf.conversation.conversations'), LinkHandler::getInstance()->getLink('ConversationList')));
     WCF::getBreadcrumbs()->add($this->conversation->getBreadcrumb());
     // get message list
     $this->messageList = new ViewableConversationMessageList();
     $this->messageList->setConversation($this->conversation);
     $this->messageList->sqlLimit = CONVERSATION_REPLY_SHOW_MESSAGES_MAX;
     $this->messageList->sqlOrderBy = 'conversation_message.time DESC';
     $this->messageList->getConditionBuilder()->add('conversation_message.conversationID = ?', array($this->conversation->conversationID));
     $this->messageList->readObjects();
 }
 /**
  * @see	\wcf\system\message\quote\AbstractMessageQuoteHandler::getMessages()
  */
 protected function getMessages(array $data)
 {
     // read messages
     $messageList = new ConversationMessageList();
     $messageList->getConditionBuilder()->add("conversation_message.messageID IN (?)", array(array_keys($data)));
     $messageList->readObjects();
     $messages = $messageList->getObjects();
     // read conversations
     $conversationIDs = $validMessageIDs = array();
     foreach ($messages as $message) {
         $conversationIDs[] = $message->conversationID;
         $validMessageIDs[] = $message->messageID;
     }
     $quotedMessages = array();
     if (!empty($conversationIDs)) {
         $conversationList = new ConversationList();
         $conversationList->getConditionBuilder()->add("conversation.conversationID IN (?)", array($conversationIDs));
         $conversationList->readObjects();
         $conversations = $conversationList->getObjects();
         // create QuotedMessage objects
         foreach ($messages as $conversationMessage) {
             $conversationMessage->setConversation($conversations[$conversationMessage->conversationID]);
             $message = new QuotedMessage($conversationMessage);
             foreach (array_keys($data[$conversationMessage->messageID]) as $quoteID) {
                 $message->addQuote($quoteID, MessageQuoteManager::getInstance()->getQuote($quoteID, false), MessageQuoteManager::getInstance()->getQuote($quoteID, true));
             }
             $quotedMessages[] = $message;
         }
     }
     // check for orphaned quotes
     if (count($validMessageIDs) != count($data)) {
         $orphanedQuoteIDs = array();
         foreach ($data as $messageID => $quoteIDs) {
             if (!in_array($messageID, $validMessageIDs)) {
                 foreach (array_keys($quoteIDs) as $quoteID) {
                     $orphanedQuoteIDs[] = $quoteID;
                 }
             }
         }
         MessageQuoteManager::getInstance()->removeOrphanedQuotes($orphanedQuoteIDs);
     }
     return $quotedMessages;
 }
 /**
  * @see	\wcf\page\IPage::readData()
  */
 public function readData()
 {
     MessageForm::readData();
     if (empty($_POST)) {
         $this->text = $this->message->message;
         if ($this->isFirstMessage) {
             $this->participantCanInvite = $this->conversation->participantCanInvite;
             $this->subject = $this->conversation->subject;
             if ($this->conversation->isDraft && $this->conversation->draftData) {
                 $draftData = @unserialize($this->conversation->draftData);
                 if (!empty($draftData['participants'])) {
                     foreach (UserProfile::getUserProfiles($draftData['participants']) as $user) {
                         if (!empty($this->participants)) {
                             $this->participants .= ', ';
                         }
                         $this->participants .= $user->username;
                     }
                 }
                 if (!empty($draftData['invisibleParticipants'])) {
                     foreach (UserProfile::getUserProfiles($draftData['invisibleParticipants']) as $user) {
                         if (!empty($this->invisibleParticipants)) {
                             $this->invisibleParticipants .= ', ';
                         }
                         $this->invisibleParticipants .= $user->username;
                     }
                 }
             }
         }
     }
     // add breadcrumbs
     WCF::getBreadcrumbs()->add(new Breadcrumb(WCF::getLanguage()->get('wcf.conversation.conversations'), LinkHandler::getInstance()->getLink('ConversationList')));
     WCF::getBreadcrumbs()->add($this->conversation->getBreadcrumb());
     // get message list
     $this->messageList = new ViewableConversationMessageList();
     $this->messageList->setConversation($this->conversation);
     $this->messageList->sqlLimit = CONVERSATION_REPLY_SHOW_MESSAGES_MAX;
     $this->messageList->sqlOrderBy = 'conversation_message.time DESC';
     $this->messageList->getConditionBuilder()->add('conversation_message.conversationID = ?', array($this->message->conversationID));
     $this->messageList->getConditionBuilder()->add("conversation_message.messageID <> ?", array($this->message->messageID));
     $this->messageList->readObjects();
 }
 /**
  * @see	\wcf\data\IDeleteAction::delete()
  */
 public function delete()
 {
     // deletes messages
     $messageList = new ConversationMessageList();
     $messageList->getConditionBuilder()->add('conversation_message.conversationID IN (?)', array($this->objectIDs));
     $messageList->readObjectIDs();
     $action = new ConversationMessageAction($messageList->getObjectIDs(), 'delete');
     $action->executeAction();
     // delete conversations
     parent::delete();
     if (!empty($this->objectIDs)) {
         // delete notifications
         UserNotificationHandler::getInstance()->deleteNotifications('conversation', 'com.woltlab.wcf.conversation.notification', array(), $this->objectIDs);
         // remove modification logs
         ConversationModificationLogHandler::getInstance()->remove($this->objectIDs);
     }
 }