public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $id = $request->getURIData('id');
     $operation = id(new DrydockRepositoryOperationQuery())->setViewer($viewer)->withIDs(array($id))->executeOne();
     if (!$operation) {
         return new Aphront404Response();
     }
     $id = $operation->getID();
     $title = pht('Repository Operation %d', $id);
     $header = id(new PHUIHeaderView())->setHeader($title)->setUser($viewer)->setPolicyObject($operation);
     $state = $operation->getOperationState();
     $icon = DrydockRepositoryOperation::getOperationStateIcon($state);
     $name = DrydockRepositoryOperation::getOperationStateName($state);
     $header->setStatus($icon, null, $name);
     $actions = $this->buildActionListView($operation);
     $properties = $this->buildPropertyListView($operation);
     $properties->setActionList($actions);
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('Operations'), $this->getApplicationURI('operation/'));
     $crumbs->addTextCrumb($title);
     $object_box = id(new PHUIObjectBoxView())->setHeader($header)->addPropertyList($properties);
     $status_view = id(new DrydockRepositoryOperationStatusView())->setUser($viewer)->setOperation($operation);
     return $this->buildApplicationPage(array($crumbs, $object_box, $status_view), array('title' => $title));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $id = $request->getURIData('id');
     $operation = id(new DrydockRepositoryOperationQuery())->setViewer($viewer)->withIDs(array($id))->executeOne();
     if (!$operation) {
         return new Aphront404Response();
     }
     $id = $operation->getID();
     $title = pht('Repository Operation %d', $id);
     $header = id(new PHUIHeaderView())->setHeader($title)->setUser($viewer)->setPolicyObject($operation)->setHeaderIcon('fa-fighter-jet');
     $state = $operation->getOperationState();
     $icon = DrydockRepositoryOperation::getOperationStateIcon($state);
     $name = DrydockRepositoryOperation::getOperationStateName($state);
     $header->setStatus($icon, null, $name);
     $curtain = $this->buildCurtain($operation);
     $properties = $this->buildPropertyListView($operation);
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('Operations'), $this->getApplicationURI('operation/'));
     $crumbs->addTextCrumb($title);
     $crumbs->setBorder(true);
     $status_view = id(new DrydockRepositoryOperationStatusView())->setUser($viewer)->setOperation($operation);
     $view = id(new PHUITwoColumnView())->setHeader($header)->setCurtain($curtain)->addPropertySection(pht('Properties'), $properties)->setMainColumn(array($status_view));
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild(array($view));
 }
 public function renderUnderwayState()
 {
     $viewer = $this->getUser();
     $operation = $this->getOperation();
     $id = $operation->getID();
     $state = $operation->getOperationState();
     $icon = DrydockRepositoryOperation::getOperationStateIcon($state);
     $name = DrydockRepositoryOperation::getOperationStateName($state);
     $item = id(new PHUIObjectItemView())->setHref("/drydock/operation/{$id}/")->setObjectName(pht('Operation %d', $id))->setHeader($operation->getOperationDescription($viewer))->setStatusIcon($icon, $name);
     if ($state != DrydockRepositoryOperation::STATE_FAIL) {
         $item->addAttribute($operation->getOperationCurrentStatus($viewer));
     } else {
         $vcs_error = $operation->getWorkingCopyVCSError();
         if ($vcs_error) {
             switch ($vcs_error['phase']) {
                 case DrydockWorkingCopyBlueprintImplementation::PHASE_SQUASHMERGE:
                     $message = pht('This change did not merge cleanly. This usually indicates ' . 'that the change is out of date and needs to be updated.');
                     break;
                 default:
                     $message = pht('Operation encountered an error while performing repository ' . 'operations.');
                     break;
             }
             $item->addAttribute($message);
             $table = $this->renderVCSErrorTable($vcs_error);
             list($links, $info) = $this->renderDetailToggles($table);
             $item->addAttribute($links);
             $item->appendChild($info);
         } else {
             $item->addAttribute(pht('Operation encountered an error.'));
         }
         $is_dismissed = $operation->getIsDismissed();
         $item->addAction(id(new PHUIListItemView())->setName('Dismiss')->setIcon('fa-times')->setDisabled($is_dismissed)->setWorkflow(true)->setHref("/drydock/operation/{$id}/dismiss/"));
     }
     return id(new PHUIObjectItemListView())->addItem($item);
 }
 public function renderUnderwayState()
 {
     $viewer = $this->getUser();
     $operation = $this->getOperation();
     $id = $operation->getID();
     $state = $operation->getOperationState();
     $icon = DrydockRepositoryOperation::getOperationStateIcon($state);
     $name = DrydockRepositoryOperation::getOperationStateName($state);
     $item = id(new PHUIObjectItemView())->setHref("/drydock/operation/{$id}/")->setHeader($operation->getOperationDescription($viewer))->setStatusIcon($icon, $name);
     if ($state != DrydockRepositoryOperation::STATE_FAIL) {
         $item->addAttribute($operation->getOperationCurrentStatus($viewer));
     } else {
         // TODO: Make this more useful.
         $item->addAttribute(pht('Operation encountered an error.'));
     }
     return id(new PHUIObjectItemListView())->addItem($item);
 }
 protected function renderResultList(array $operations, PhabricatorSavedQuery $query, array $handles)
 {
     assert_instances_of($operations, 'DrydockRepositoryOperation');
     $viewer = $this->requireViewer();
     $view = new PHUIObjectItemListView();
     foreach ($operations as $operation) {
         $id = $operation->getID();
         $item = id(new PHUIObjectItemView())->setHeader($operation->getOperationDescription($viewer))->setHref($this->getApplicationURI("operation/{$id}/"))->setObjectName(pht('Repository Operation %d', $id));
         $state = $operation->getOperationState();
         $icon = DrydockRepositoryOperation::getOperationStateIcon($state);
         $name = DrydockRepositoryOperation::getOperationStateName($state);
         $item->addIcon($icon, $name);
         $item->addByline(array(pht('Via:'), ' ', $viewer->renderHandle($operation->getAuthorPHID())));
         $item->addAttribute($viewer->renderHandle($operation->getObjectPHID()));
         $item->addAttribute($viewer->renderHandle($operation->getRepositoryPHID()));
         $view->addItem($item);
     }
     $result = id(new PhabricatorApplicationSearchResultView())->setObjectList($view)->setNoDataString(pht('No matching operations.'));
     return $result;
 }