public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $id = $request->getURIData('id');
     $task = id(new PhabricatorWorkerActiveTask())->load($id);
     if (!$task) {
         $tasks = id(new PhabricatorWorkerArchiveTaskQuery())->withIDs(array($id))->execute();
         $task = reset($tasks);
     }
     $header = new PHUIHeaderView();
     if (!$task) {
         $title = pht('Task Does Not Exist');
         $header->setHeader(pht('Task %d Missing', $id));
         $error_view = new PHUIInfoView();
         $error_view->setTitle(pht('No Such Task'));
         $error_view->appendChild(phutil_tag('p', array(), pht('This task may have recently been garbage collected.')));
         $error_view->setSeverity(PHUIInfoView::SEVERITY_NODATA);
         $content = $error_view;
     } else {
         $title = pht('Task %d', $task->getID());
         $header->setHeader(pht('Task %d: %s', $task->getID(), $task->getTaskClass()));
         $properties = $this->buildPropertyListView($task);
         $object_box = id(new PHUIObjectBoxView())->setHeaderText($title)->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)->addPropertyList($properties);
         $retry_head = id(new PHUIHeaderView())->setHeader(pht('Retries'));
         $retry_info = $this->buildRetryListView($task);
         $retry_box = id(new PHUIObjectBoxView())->setHeader($retry_head)->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)->addPropertyList($retry_info);
         $content = array($object_box, $retry_box);
     }
     $header->setHeaderIcon('fa-sort');
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb($title);
     $crumbs->setBorder(true);
     $view = id(new PHUITwoColumnView())->setHeader($header)->setFooter($content);
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($view);
 }
 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);
     $answer_add_panel = id(new PonderAddAnswerView())->setQuestion($question)->setUser($viewer)->setActionURI('/ponder/answer/add/');
     $header = new PHUIHeaderView();
     $header->setHeader($question->getTitle());
     $header->setUser($viewer);
     $header->setPolicyObject($question);
     $header->setHeaderIcon('fa-university');
     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);
     }
     $properties = $this->buildPropertyListView($question);
     $actions = $this->buildActionListView($question);
     $details = $this->buildPropertySectionView($question);
     $can_edit = PhabricatorPolicyFilter::hasCapability($viewer, $question, PhabricatorPolicyCapability::CAN_EDIT);
     $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)->setAction($this->getApplicationURI("/question/comment/{$id}/"))->setSubmitButtonName(pht('Comment'));
     $add_comment = phutil_tag_div('ponder-question-add-comment-view', $add_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));
     $crumbs = $this->buildApplicationCrumbs($this->buildSideNavView());
     $crumbs->addTextCrumb('Q' . $id, '/Q' . $id);
     $crumbs->setBorder(true);
     $subheader = $this->buildSubheaderView($question);
     $answer_wiki = null;
     if ($question->getAnswerWiki()) {
         $wiki = new PHUIRemarkupView($viewer, $question->getAnswerWiki());
         $answer_wiki = id(new PHUIObjectBoxView())->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)->setHeaderText(pht('ANSWER SUMMARY'))->appendChild($wiki)->addClass('ponder-answer-wiki');
     }
     require_celerity_resource('ponder-view-css');
     $ponder_content = phutil_tag('div', array('class' => 'ponder-question-content'), array($answer_wiki, $footer, $comment_view, $answers, $answer_add_panel));
     $ponder_view = id(new PHUITwoColumnView())->setHeader($header)->setSubheader($subheader)->setMainColumn($ponder_content)->setPropertyList($properties)->addPropertySection(pht('DETAILS'), $details)->setActionList($actions)->addClass('ponder-question-view');
     $page_objects = array_merge(array($question->getPHID()), mpull($question->getAnswers(), 'getPHID'));
     return $this->newPage()->setTitle('Q' . $question->getID() . ' ' . $question->getTitle())->setCrumbs($crumbs)->setPageObjectPHIDs($page_objects)->appendChild(array($ponder_view));
 }
예제 #3
0
 public function buildView()
 {
     if (!$this->user) {
         throw new PhutilInvalidStateException('setUser');
     }
     $user = $this->user;
     $stories = $this->stories;
     $null_view = new AphrontNullView();
     require_celerity_resource('phabricator-feed-css');
     $last_date = null;
     foreach ($stories as $story) {
         $story->setHovercard($this->hovercards);
         $date = ucfirst(phabricator_relative_date($story->getEpoch(), $user));
         if ($date !== $last_date) {
             if ($last_date !== null) {
                 $null_view->appendChild(phutil_tag_div('phabricator-feed-story-date-separator'));
             }
             $last_date = $date;
             $header = new PHUIHeaderView();
             $header->setHeader($date);
             $header->setHeaderIcon('fa-calendar msr');
             $null_view->appendChild($header);
         }
         try {
             $view = $story->renderView();
             $view->setUser($user);
             $view = $view->render();
         } catch (Exception $ex) {
             // If rendering failed for any reason, don't fail the entire feed,
             // just this one story.
             $view = id(new PHUIFeedStoryView())->setUser($user)->setChronologicalKey($story->getChronologicalKey())->setEpoch($story->getEpoch())->setTitle(pht('Feed Story Failed to Render (%s)', get_class($story)))->appendChild(pht('%s: %s', get_class($ex), $ex->getMessage()));
         }
         $null_view->appendChild($view);
     }
     $box = id(new PHUIObjectBoxView())->appendChild($null_view);
     if (empty($stories)) {
         $nodatastring = pht('No Stories.');
         if ($this->noDataString) {
             $nodatastring = $this->noDataString;
         }
         $view = id(new PHUIBoxView())->addClass('mlt mlb msr msl')->appendChild($nodatastring);
         $box->appendChild($view);
     }
     return $box;
 }