public function handleRequest(AphrontRequest $request) { $viewer = $request->getViewer(); $id = $request->getURIData('id'); $question = id(new PonderQuestionQuery())->setViewer($viewer)->withIDs(array($id))->needAnswers(true)->needViewerVotes(true)->executeOne(); if (!$question) { return new Aphront404Response(); } $question->attachVotes($viewer->getPHID()); $question_xactions = $this->buildQuestionTransactions($question); $answers = $this->buildAnswers($question->getAnswers()); $authors = mpull($question->getAnswers(), null, 'getAuthorPHID'); if (isset($authors[$viewer->getPHID()])) { $answer_add_panel = id(new PHUIInfoView())->setSeverity(PHUIInfoView::SEVERITY_NOTICE)->appendChild(pht('You have already answered this question. You can not answer ' . 'twice, but you can edit your existing answer.')); } else { $answer_add_panel = new PonderAddAnswerView(); $answer_add_panel->setQuestion($question)->setUser($viewer)->setActionURI('/ponder/answer/add/'); } $header = new PHUIHeaderView(); $header->setHeader($question->getTitle()); $header->setUser($viewer); $header->setPolicyObject($question); if ($question->getStatus() == PonderQuestionStatus::STATUS_OPEN) { $header->setStatus('fa-square-o', 'bluegrey', pht('Open')); } else { $header->setStatus('fa-check-square-o', 'dark', pht('Closed')); } $actions = $this->buildActionListView($question); $properties = $this->buildPropertyListView($question, $actions); $object_box = id(new PHUIObjectBoxView())->setHeader($header)->addPropertyList($properties); $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView()); $crumbs->addTextCrumb('Q' . $id, '/Q' . $id); $ponder_view = phutil_tag('div', array('class' => 'ponder-question-view'), array($crumbs, $object_box, $question_xactions, $answers, $answer_add_panel)); return $this->buildApplicationPage(array($ponder_view), array('title' => 'Q' . $question->getID() . ' ' . $question->getTitle(), 'pageObjects' => array_merge(array($question->getPHID()), mpull($question->getAnswers(), 'getPHID')))); }
public function processRequest() { $request = $this->getRequest(); $user = $request->getUser(); $question = id(new PonderQuestionQuery())->setViewer($user)->withIDs(array($this->questionID))->needAnswers(true)->needViewerVotes(true)->executeOne(); if (!$question) { return new Aphront404Response(); } $question->attachVotes($user->getPHID()); $question_xactions = $this->buildQuestionTransactions($question); $answers = $this->buildAnswers($question->getAnswers()); $authors = mpull($question->getAnswers(), null, 'getAuthorPHID'); if (isset($authors[$user->getPHID()])) { $answer_add_panel = id(new AphrontErrorView())->setSeverity(AphrontErrorView::SEVERITY_NODATA)->appendChild(pht('You have already answered this question. You can not answer ' . 'twice, but you can edit your existing answer.')); } else { $answer_add_panel = new PonderAddAnswerView(); $answer_add_panel->setQuestion($question)->setUser($user)->setActionURI('/ponder/answer/add/'); } $header = id(new PHUIHeaderView())->setHeader($question->getTitle()); $actions = $this->buildActionListView($question); $properties = $this->buildPropertyListView($question, $actions); $object_box = id(new PHUIObjectBoxView())->setHeader($header)->addPropertyList($properties); $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView()); $crumbs->setActionList($actions); $crumbs->addTextCrumb('Q' . $this->questionID, '/Q' . $this->questionID); return $this->buildApplicationPage(array($crumbs, $object_box, $question_xactions, $answers, $answer_add_panel), array('title' => 'Q' . $question->getID() . ' ' . $question->getTitle(), 'pageObjects' => array_merge(array($question->getPHID()), mpull($question->getAnswers(), 'getPHID')))); }
public function handleRequest(AphrontRequest $request) { $viewer = $request->getViewer(); $id = $request->getURIData('id'); $question = id(new PonderQuestionQuery())->setViewer($viewer)->withIDs(array($id))->needAnswers(true)->needProjectPHIDs(true)->executeOne(); if (!$question) { return new Aphront404Response(); } $answers = $this->buildAnswers($question->getAnswers()); $authors = mpull($question->getAnswers(), null, 'getAuthorPHID'); if (isset($authors[$viewer->getPHID()])) { $answer_add_panel = id(new PHUIInfoView())->setSeverity(PHUIInfoView::SEVERITY_NOTICE)->appendChild(pht('You have already answered this question. You can not answer ' . 'twice, but you can edit your existing answer.')); } else { $answer_add_panel = new PonderAddAnswerView(); $answer_add_panel->setQuestion($question)->setUser($viewer)->setActionURI('/ponder/answer/add/'); } $header = new PHUIHeaderView(); $header->setHeader($question->getTitle()); $header->setUser($viewer); $header->setPolicyObject($question); if ($question->getStatus() == PonderQuestionStatus::STATUS_OPEN) { $header->setStatus('fa-square-o', 'bluegrey', pht('Open')); } else { $text = PonderQuestionStatus::getQuestionStatusFullName($question->getStatus()); $icon = PonderQuestionStatus::getQuestionStatusIcon($question->getStatus()); $header->setStatus($icon, 'dark', $text); } $actions = $this->buildActionListView($question); $properties = $this->buildPropertyListView($question, $actions); $sidebar = $this->buildSidebar($question); $content_id = celerity_generate_unique_node_id(); $timeline = $this->buildTransactionTimeline($question, id(new PonderQuestionTransactionQuery())->withTransactionTypes(array(PhabricatorTransactions::TYPE_COMMENT))); $xactions = $timeline->getTransactions(); $add_comment = id(new PhabricatorApplicationTransactionCommentView())->setUser($viewer)->setObjectPHID($question->getPHID())->setShowPreview(false)->setHeaderText(pht('Question Comment'))->setAction($this->getApplicationURI("/question/comment/{$id}/"))->setSubmitButtonName(pht('Comment')); $comment_view = phutil_tag('div', array('id' => $content_id, 'style' => 'display: none;'), array($timeline, $add_comment)); $footer = id(new PonderFooterView())->setContentID($content_id)->setCount(count($xactions)); $object_box = id(new PHUIObjectBoxView())->setHeader($header)->addPropertyList($properties)->appendChild($footer); $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView()); $crumbs->addTextCrumb('Q' . $id, '/Q' . $id); $ponder_view = id(new PHUITwoColumnView())->setMainColumn(array($object_box, $comment_view, $answers, $answer_add_panel))->setSideColumn($sidebar)->addClass('ponder-question-view'); return $this->buildApplicationPage(array($crumbs, $ponder_view), array('title' => 'Q' . $question->getID() . ' ' . $question->getTitle(), 'pageObjects' => array_merge(array($question->getPHID()), mpull($question->getAnswers(), 'getPHID')))); }
public function processRequest() { $request = $this->getRequest(); $user = $request->getUser(); $question = PonderQuestionQuery::loadSingle($user, $this->questionID); if (!$question) { return new Aphront404Response(); } $question->attachRelated(); $question->attachVotes($user->getPHID()); $object_phids = array($user->getPHID(), $question->getAuthorPHID()); $answers = $question->getAnswers(); $comments = $question->getComments(); foreach ($comments as $comment) { $object_phids[] = $comment->getAuthorPHID(); } foreach ($answers as $answer) { $object_phids[] = $answer->getAuthorPHID(); $comments = $answer->getComments(); foreach ($comments as $comment) { $object_phids[] = $comment->getAuthorPHID(); } } $subscribers = PhabricatorSubscribersQuery::loadSubscribersForPHID($question->getPHID()); $object_phids = array_merge($object_phids, $subscribers); $handles = $this->loadViewerHandles($object_phids); $this->loadHandles($object_phids); $detail_panel = new PonderQuestionDetailView(); $detail_panel->setQuestion($question)->setUser($user)->setHandles($handles); $responses_panel = new PonderAnswerListView(); $responses_panel->setQuestion($question)->setHandles($handles)->setUser($user)->setAnswers($answers); $answer_add_panel = new PonderAddAnswerView(); $answer_add_panel->setQuestion($question)->setUser($user)->setActionURI("/ponder/answer/add/"); $header = id(new PhabricatorHeaderView())->setObjectName('Q' . $question->getID())->setHeader($question->getTitle()); $actions = $this->buildActionListView($question); $properties = $this->buildPropertyListView($question, $subscribers); $nav = $this->buildSideNavView($question); $nav->appendChild(array($header, $actions, $properties, $detail_panel, $responses_panel, $answer_add_panel)); $nav->selectFilter(null); return $this->buildApplicationPage($nav, array('device' => true, 'title' => 'Q' . $question->getID() . ' ' . $question->getTitle())); }
public function processRequest() { $request = $this->getRequest(); $user = $request->getUser(); $question = PonderQuestionQuery::loadSingle($user, $this->questionID); if (!$question) { return new Aphront404Response(); } $question->attachRelated($user->getPHID()); $answers = $question->getAnswers(); $object_phids = array($user->getPHID(), $question->getAuthorPHID()); foreach ($answers as $answer) { $object_phids[] = $answer->getAuthorPHID(); } $handles = id(new PhabricatorObjectHandleData($object_phids))->loadHandles(); $detail_panel = new PonderQuestionDetailView(); $detail_panel->setQuestion($question)->setUser($user)->setHandles($handles); $responses_panel = new PonderAnswerListView(); $responses_panel->setQuestion($question)->setHandles($handles)->setUser($user)->setAnswers($answers); $answer_add_panel = new PonderAddAnswerView(); $answer_add_panel->setQuestion($question)->setUser($user)->setActionURI("/ponder/answer/add/"); return $this->buildStandardPageResponse(array($detail_panel, $responses_panel, $answer_add_panel), array('title' => 'Q' . $question->getID() . ' ' . $question->getTitle())); }