diff --git a/src/applications/ponder/controller/PonderQuestionViewController.php b/src/applications/ponder/controller/PonderQuestionViewController.php index 420d4b01c1..5b412e86b2 100644 --- a/src/applications/ponder/controller/PonderQuestionViewController.php +++ b/src/applications/ponder/controller/PonderQuestionViewController.php @@ -1,92 +1,128 @@ questionID = $data['id']; } public function processRequest() { $request = $this->getRequest(); $user = $request->getUser(); $question = PonderQuestionQuery::loadSingle($user, $this->questionID); if (!$question) { return new Aphront404Response(); } $question->attachRelated($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(); } } $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); + $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() )); } + + private function buildActionListView(PonderQuestion $question) { + $viewer = $this->getRequest()->getUser(); + $view = new PhabricatorActionListView(); + + $view->setUser($viewer); + $view->setObject($question); + + return $view; + } + + private function buildPropertyListView(PonderQuestion $question) { + $viewer = $this->getRequest()->getUser(); + $view = new PhabricatorPropertyListView(); + + $view->addProperty( + pht('Author'), + $this->getHandle($question->getAuthorPHID())->renderLink()); + + $view->addProperty( + pht('Created'), + phabricator_datetime($question->getDateCreated(), $viewer)); + + return $view; + } } diff --git a/src/applications/ponder/view/PonderQuestionDetailView.php b/src/applications/ponder/view/PonderQuestionDetailView.php index a9326e724a..9ff5c3dda3 100644 --- a/src/applications/ponder/view/PonderQuestionDetailView.php +++ b/src/applications/ponder/view/PonderQuestionDetailView.php @@ -1,84 +1,73 @@ question = $question; return $this; } public function setUser($user) { $this->user = $user; return $this; } public function setHandles($handles) { $this->handles = $handles; return $this; } public function render() { require_celerity_resource('ponder-core-view-css'); $question = $this->question; $handles = $this->handles; $user = $this->user; $panel = id(new AphrontPanelView()) - ->addClass("ponder-panel") - ->setHeader( - $this->renderObjectLink().' '. - phutil_escape_html($question->getTitle())); + ->addClass("ponder-panel"); $contentview = new PonderPostBodyView(); $contentview ->setTarget($question) ->setQuestion($question) ->setUser($user) ->setHandles($handles) ->setAction(PonderConstants::ASKED_LITERAL); $commentview = new PonderCommentListView(); $commentview ->setUser($user) ->setHandles($handles) ->setComments($question->getComments()) ->setTarget($question->getPHID()) ->setQuestionID($question->getID()) ->setActionURI(new PhutilURI('/ponder/comment/add/')); $panel->appendChild($contentview); $panel->appendChild($commentview); return $panel->render(); } - private function renderObjectLink() { - return phutil_render_tag( - 'a', - array('href' => '/Q' . $this->question->getID()), - "Q". phutil_escape_html($this->question->getID()) - ); - } - } diff --git a/src/view/layout/PhabricatorActionListView.php b/src/view/layout/PhabricatorActionListView.php index b80ba779ef..e5fbd1e45f 100644 --- a/src/view/layout/PhabricatorActionListView.php +++ b/src/view/layout/PhabricatorActionListView.php @@ -1,66 +1,70 @@ object = $object; return $this; } public function setUser(PhabricatorUser $user) { $this->user = $user; return $this; } public function addAction(PhabricatorActionView $view) { $this->actions[] = $view; return $this; } public function render() { if (!$this->user) { throw new Exception("Call setUser() before render()!"); } $event = new PhabricatorEvent( PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS, array( 'object' => $this->object, 'actions' => $this->actions, )); $event->setUser($this->user); PhutilEventEngine::dispatchEvent($event); $actions = $event->getValue('actions'); + if (!$actions) { + return null; + } + require_celerity_resource('phabricator-action-list-view-css'); return phutil_render_tag( 'ul', array( 'class' => 'phabricator-action-list-view', ), $this->renderSingleView($actions)); } }