public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $id = $request->getURIData('id');
     $badge = id(new PhabricatorBadgesQuery())->setViewer($viewer)->withIDs(array($id))->needRecipients(true)->executeOne();
     if (!$badge) {
         return new Aphront404Response();
     }
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb($badge->getName());
     $title = $badge->getName();
     if ($badge->isClosed()) {
         $status_icon = 'fa-ban';
         $status_color = 'dark';
     } else {
         $status_icon = 'fa-check';
         $status_color = 'bluegrey';
     }
     $status_name = idx(PhabricatorBadgesBadge::getStatusNameMap(), $badge->getStatus());
     $header = id(new PHUIHeaderView())->setHeader($badge->getName())->setUser($viewer)->setPolicyObject($badge)->setStatus($status_icon, $status_color, $status_name);
     $properties = $this->buildPropertyListView($badge);
     $actions = $this->buildActionListView($badge);
     $properties->setActionList($actions);
     $box = id(new PHUIObjectBoxView())->setHeader($header)->addPropertyList($properties);
     $timeline = $this->buildTransactionTimeline($badge, new PhabricatorBadgesTransactionQuery());
     $recipient_phids = $badge->getRecipientPHIDs();
     $recipient_phids = array_reverse($recipient_phids);
     $handles = $this->loadViewerHandles($recipient_phids);
     $recipient_list = id(new PhabricatorBadgesRecipientsListView())->setBadge($badge)->setHandles($handles)->setUser($viewer);
     $add_comment = $this->buildCommentForm($badge);
     return $this->buildApplicationPage(array($crumbs, $box, $recipient_list, $timeline, $add_comment), array('title' => $title, 'pageObjects' => array($badge->getPHID())));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $id = $request->getURIData('id');
     $badge = id(new PhabricatorBadgesQuery())->setViewer($viewer)->withIDs(array($id))->needRecipients(true)->executeOne();
     if (!$badge) {
         return new Aphront404Response();
     }
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb($badge->getName());
     $crumbs->setBorder(true);
     $title = $badge->getName();
     if ($badge->isArchived()) {
         $status_icon = 'fa-ban';
         $status_color = 'dark';
     } else {
         $status_icon = 'fa-check';
         $status_color = 'bluegrey';
     }
     $status_name = idx(PhabricatorBadgesBadge::getStatusNameMap(), $badge->getStatus());
     $header = id(new PHUIHeaderView())->setHeader($badge->getName())->setUser($viewer)->setPolicyObject($badge)->setStatus($status_icon, $status_color, $status_name)->setHeaderIcon('fa-trophy');
     $curtain = $this->buildCurtain($badge);
     $details = $this->buildDetailsView($badge);
     $timeline = $this->buildTransactionTimeline($badge, new PhabricatorBadgesTransactionQuery());
     $awards = $badge->getAwards();
     $recipient_phids = mpull($awards, 'getRecipientPHID');
     $recipient_phids = array_reverse($recipient_phids);
     $handles = $this->loadViewerHandles($recipient_phids);
     $recipient_list = id(new PhabricatorBadgesRecipientsListView())->setBadge($badge)->setHandles($handles)->setUser($viewer);
     $comment_view = id(new PhabricatorBadgesEditEngine())->setViewer($viewer)->buildEditEngineCommentView($badge);
     $view = id(new PHUITwoColumnView())->setHeader($header)->setCurtain($curtain)->setMainColumn(array($recipient_list, $timeline, $comment_view))->addPropertySection(pht('Description'), $details);
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->setPageObjectPHIDs(array($badge->getPHID()))->appendChild($view);
 }