private function buildTransactions()
 {
     $conpherence = $this->getSelectedConpherence();
     if (!$conpherence) {
         if (!$this->getVisible() || $this->getInitialLoad()) {
             return pht('Loading...');
         }
         return array(phutil_tag('div', array('class' => 'mmb'), pht('You are not in any rooms yet.')), javelin_tag('a', array('href' => '/conpherence/new/', 'class' => 'button grey', 'sigil' => 'workflow'), pht('Create a Room')));
     }
     $data = ConpherenceTransactionRenderer::renderTransactions($this->getUser(), $conpherence, $full_display = false);
     $messages = ConpherenceTransactionRenderer::renderMessagePaneContent($data['transactions'], $data['oldest_transaction_id'], $data['newest_transaction_id']);
     return $messages;
 }
 public function handleRequest(AphrontRequest $request)
 {
     $user = $request->getUser();
     $conpherence_id = $request->getURIData('id');
     if (!$conpherence_id) {
         return new Aphront404Response();
     }
     $query = id(new ConpherenceThreadQuery())->setViewer($user)->withIDs(array($conpherence_id))->needProfileImage(true)->needParticipantCache(true)->needTransactions(true)->setTransactionLimit($this->getMainQueryLimit());
     $before_transaction_id = $request->getInt('oldest_transaction_id');
     $after_transaction_id = $request->getInt('newest_transaction_id');
     $old_message_id = $request->getURIData('messageID');
     if ($before_transaction_id && ($old_message_id || $after_transaction_id)) {
         throw new Aphront400Response();
     }
     if ($old_message_id && $after_transaction_id) {
         throw new Aphront400Response();
     }
     $marker_type = 'older';
     if ($before_transaction_id) {
         $query->setBeforeTransactionID($before_transaction_id);
     }
     if ($old_message_id) {
         $marker_type = 'olderandnewer';
         $query->setAfterTransactionID($old_message_id - 1);
     }
     if ($after_transaction_id) {
         $marker_type = 'newer';
         $query->setAfterTransactionID($after_transaction_id);
     }
     $conpherence = $query->executeOne();
     if (!$conpherence) {
         return new Aphront404Response();
     }
     $this->setConpherence($conpherence);
     $transactions = $this->getNeededTransactions($conpherence, $old_message_id);
     $latest_transaction = head($transactions);
     $participant = $conpherence->getParticipantIfExists($user->getPHID());
     if ($participant) {
         if (!$participant->isUpToDate($conpherence)) {
             $write_guard = AphrontWriteGuard::beginScopedUnguardedWrites();
             $participant->markUpToDate($conpherence, $latest_transaction);
             $user->clearCacheData(PhabricatorUserMessageCountCacheType::KEY_COUNT);
             unset($write_guard);
         }
     }
     $data = ConpherenceTransactionRenderer::renderTransactions($user, $conpherence, $marker_type);
     $messages = ConpherenceTransactionRenderer::renderMessagePaneContent($data['transactions'], $data['oldest_transaction_id'], $data['newest_transaction_id']);
     if ($before_transaction_id || $after_transaction_id) {
         $header = null;
         $form = null;
         $content = array('transactions' => $messages);
     } else {
         $policy_objects = id(new PhabricatorPolicyQuery())->setViewer($user)->setObject($conpherence)->execute();
         $header = $this->buildHeaderPaneContent($conpherence, $policy_objects);
         $search = $this->buildSearchForm();
         $form = $this->renderFormContent();
         $content = array('header' => $header, 'search' => $search, 'transactions' => $messages, 'form' => $form);
     }
     $d_data = $conpherence->getDisplayData($user);
     $content['title'] = $title = $d_data['title'];
     if ($request->isAjax()) {
         $dropdown_query = id(new AphlictDropdownDataQuery())->setViewer($user);
         $dropdown_query->execute();
         $content['threadID'] = $conpherence->getID();
         $content['threadPHID'] = $conpherence->getPHID();
         $content['latestTransactionID'] = $data['latest_transaction_id'];
         $content['canEdit'] = PhabricatorPolicyFilter::hasCapability($user, $conpherence, PhabricatorPolicyCapability::CAN_EDIT);
         $content['aphlictDropdownData'] = array($dropdown_query->getNotificationData(), $dropdown_query->getConpherenceData());
         return id(new AphrontAjaxResponse())->setContent($content);
     }
     $can_join = PhabricatorPolicyFilter::hasCapability($user, $conpherence, PhabricatorPolicyCapability::CAN_JOIN);
     $layout = id(new ConpherenceLayoutView())->setUser($user)->setBaseURI($this->getApplicationURI())->setThread($conpherence)->setHeader($header)->setSearch($search)->setMessages($messages)->setReplyForm($form)->setLatestTransactionID($data['latest_transaction_id'])->setRole('thread');
     $participating = $conpherence->getParticipantIfExists($user->getPHID());
     if (!$user->isLoggedIn()) {
         $layout->addClass('conpherence-no-pontificate');
     }
     return $this->newPage()->setTitle($title)->setPageObjectPHIDs(array($conpherence->getPHID()))->appendChild($layout);
 }
 private function buildTransactions()
 {
     $conpherence = $this->getSelectedConpherence();
     if (!$conpherence) {
         if (!$this->getVisible() || $this->getInitialLoad()) {
             return pht('Loading...');
         }
         $view = array(phutil_tag('div', array('class' => 'column-no-rooms-text'), pht('You have not joined any rooms yet.')), javelin_tag('a', array('href' => '/conpherence/search/', 'class' => 'button grey'), pht('Find Rooms')));
         return phutil_tag_div('column-no-rooms', $view);
     }
     $data = ConpherenceTransactionRenderer::renderTransactions($this->getUser(), $conpherence);
     $messages = ConpherenceTransactionRenderer::renderMessagePaneContent($data['transactions'], $data['oldest_transaction_id'], $data['newest_transaction_id']);
     return $messages;
 }