/**
  * @see	\wcf\page\IPage::readData()
  */
 public function readData()
 {
     parent::readData();
     // add breadcrumbs
     WCF::getBreadcrumbs()->add(new Breadcrumb(WCF::getLanguage()->get('wcf.conversation.conversations'), LinkHandler::getInstance()->getLink('ConversationList')));
     if ($this->conversation->isDraft) {
         WCF::getBreadcrumbs()->add(new Breadcrumb(WCF::getLanguage()->get('wcf.conversation.folder.draft'), LinkHandler::getInstance()->getLink('ConversationList', array('filter' => 'draft'))));
     }
     // update last visit time count
     if ($this->conversation->isNew() && $this->objectList->getMaxPostTime() > $this->conversation->lastVisitTime) {
         $visitTime = $this->objectList->getMaxPostTime();
         if ($visitTime == $this->conversation->lastPostTime) {
             $visitTime = TIME_NOW;
         }
         $conversationAction = new ConversationAction(array($this->conversation->getDecoratedObject()), 'markAsRead', array('visitTime' => $visitTime));
         $conversationAction->executeAction();
     }
     // get participants
     $this->participantList = new ConversationParticipantList($this->conversationID, WCF::getUser()->userID, $this->conversation->userID == WCF::getUser()->userID);
     $this->participantList->readObjects();
     // init quote objects
     $messageIDs = array();
     foreach ($this->objectList as $message) {
         $messageIDs[] = $message->messageID;
     }
     MessageQuoteManager::getInstance()->initObjects('com.woltlab.wcf.conversation.message', $messageIDs);
     // set attachment permissions
     if ($this->objectList->getAttachmentList() !== null) {
         $this->objectList->getAttachmentList()->setPermissions(array('canDownload' => true, 'canViewPreview' => true));
     }
     // get timeframe for modifications
     $this->objectList->rewind();
     $startTime = $this->objectList->current()->time;
     $count = count($this->objectList);
     if ($count == 1) {
         $endTime = $startTime;
     } else {
         $this->objectList->seek($count - 1);
         $endTime = $this->objectList->current()->time;
     }
     $this->objectList->rewind();
     // load modification log entries
     $this->modificationLogList = new ConversationLogModificationLogList();
     $this->modificationLogList->setConversation($this->conversation->getDecoratedObject());
     $this->modificationLogList->getConditionBuilder()->add("modification_log.time BETWEEN ? AND ?", array($startTime, $endTime));
     $this->modificationLogList->readObjects();
 }
 /**
  * Converts a conversation into a viewable conversation.
  * 
  * @param	\wcf\data\conversation\Conversation			$conversation
  * @param	\wcf\data\conversation\label\ConversationLabelList	$labelList
  * @return	\wcf\data\conversation\ViewableConversation
  */
 public static function getViewableConversation(Conversation $conversation, ConversationLabelList $labelList = null)
 {
     $conversation = new ViewableConversation($conversation);
     if ($labelList === null) {
         $labelList = ConversationLabel::getLabelsByUser();
     }
     $labels = $labelList->getObjects();
     if (!empty($labels)) {
         $conditions = new PreparedStatementConditionBuilder();
         $conditions->add("conversationID = ?", array($conversation->conversationID));
         $conditions->add("labelID IN (?)", array(array_keys($labels)));
         $sql = "SELECT\tlabelID\n\t\t\t\tFROM\twcf" . WCF_N . "_conversation_label_to_object\n\t\t\t\t" . $conditions;
         $statement = WCF::getDB()->prepareStatement($sql);
         $statement->execute($conditions->getParameters());
         $data = array();
         while ($row = $statement->fetchArray()) {
             $conversation->assignLabel($labels[$row['labelID']]);
         }
     }
     return $conversation;
 }