/**
  * @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\system\attachment\IAttachmentObjectType::cacheObjects()
  */
 public function cacheObjects(array $objectIDs)
 {
     $messageList = new ConversationMessageList();
     $messageList->setObjectIDs($objectIDs);
     $messageList->readObjects();
     $conversationIDs = array();
     foreach ($messageList as $message) {
         $conversationIDs[] = $message->conversationID;
     }
     if (!empty($conversationIDs)) {
         $conversations = Conversation::getUserConversations($conversationIDs, WCF::getUser()->userID);
         foreach ($messageList as $message) {
             if (isset($conversations[$message->conversationID])) {
                 $message->setConversation($conversations[$message->conversationID]);
             }
         }
     }
     foreach ($messageList->getObjects() as $objectID => $object) {
         $this->cachedObjects[$objectID] = $object;
     }
 }
 /**
  * @see	\wcf\system\moderation\queue\IModerationQueueHandler::populate()
  */
 public function populate(array $queues)
 {
     $objectIDs = array();
     foreach ($queues as $object) {
         $objectIDs[] = $object->objectID;
     }
     // fetch messages
     $messageList = new ConversationMessageList();
     $messageList->setObjectIDs($objectIDs);
     $messageList->readObjects();
     $messages = $messageList->getObjects();
     // set orphaned queues
     foreach ($queues as $queue) {
         if (!isset($messages[$queue->objectID])) {
             $queue->setIsOrphaned();
         }
     }
     // fetch conversations
     $conversationIDs = array();
     foreach ($messages as $message) {
         $conversationIDs[] = $message->conversationID;
     }
     if (!empty($conversationIDs)) {
         $conversationList = new ConversationList();
         $conversationList->setObjectIDs($conversationIDs);
         $conversationList->readObjects();
         $conversations = $conversationList->getObjects();
         foreach ($queues as $object) {
             if (isset($messages[$object->objectID])) {
                 $message = $messages[$object->objectID];
                 $message->setConversation($conversations[$message->conversationID]);
                 $object->setAffectedObject($message);
             }
         }
     }
 }
 /**
  * @see	\wcf\data\DatabaseObjectList::readObjects()
  */
 public function readObjects()
 {
     if ($this->objectIDs === null) {
         $this->readObjectIDs();
     }
     parent::readObjects();
     foreach ($this->objects as $message) {
         if ($message->time > $this->maxPostTime) {
             $this->maxPostTime = $message->time;
         }
         if ($this->conversation !== null) {
             $message->setConversation($this->conversation);
         }
         if ($message->attachments) {
             $this->attachmentObjectIDs[] = $message->messageID;
         }
         if ($message->hasEmbeddedObjects) {
             $this->embeddedObjectMessageIDs[] = $message->messageID;
         }
     }
     if ($this->embeddedObjectLoading) {
         $this->readEmbeddedObjects();
     }
     if ($this->attachmentLoading) {
         $this->readAttachments();
     }
 }