Differential D17020 Diff 41522 src/applications/release/controller/ReleaseChangeRequestDetailsController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/release/controller/ReleaseChangeRequestDetailsController.php
- This file was added.
| <?php | |||||
| final class ReleaseChangeRequestDetailsController | |||||
| extends PhabricatorController { | |||||
| public function handleRequest(AphrontRequest $request) { | |||||
| $viewer = $this->getViewer(); | |||||
| $id = $request->getURIData('id'); | |||||
| $change = id(new ReleaseChangeRequestQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withIDs(array($id)) | |||||
| ->needReleases(true) | |||||
| ->needRequestObjects(true) | |||||
| ->executeOne(); | |||||
| if (!$change) { | |||||
| return new Aphront404Response(); | |||||
| } | |||||
| $release = $change->getRelease(); | |||||
| $header = id(new PHUIHeaderView()) | |||||
| ->setHeader( | |||||
| hsprintf('%s %s', $change->getMonogram(), $change->getTitle())) | |||||
| ->setUser($viewer) | |||||
| ->setPolicyObject($release); | |||||
| $curtain = $this->buildCurtain($change); | |||||
| $release_properties = $this->buildReleaseProperties($release); | |||||
| $change_properties = $this->buildChangeProperties($change); | |||||
| $timeline = $this->buildTransactionTimeline( | |||||
| $change, | |||||
| new ReleaseChangeRequestTransactionQuery()); | |||||
| $timeline->setQuoteRef($change->getMonogram()); | |||||
| $view = id(new PHUITwoColumnView()) | |||||
| ->setHeader($header) | |||||
| ->setCurtain($curtain) | |||||
| ->setMainColumn(array( | |||||
| $timeline, | |||||
| )) | |||||
| ->addPropertySection($release->getName(), $release_properties) | |||||
| ->addPropertySection(pht('Change Request'), $change_properties); | |||||
| $crumbs = $this->buildApplicationCrumbs(); | |||||
| $crumbs->addTextCrumb($release->getMonogram(), $release->getURI()); | |||||
| $crumbs->addTextCrumb($change->getMonogram()); | |||||
| $title = $change->getTitle(); | |||||
| return $this->newPage() | |||||
| ->setTitle($change->getMonogram().' '.$title) | |||||
| ->setCrumbs($crumbs) | |||||
| ->setPageObjectPHIDs( | |||||
| array( | |||||
| $release->getPHID(), | |||||
| $change->getPHID(), | |||||
| )) | |||||
| ->appendChild( | |||||
| array( | |||||
| $view, | |||||
| )); | |||||
| } | |||||
| private function buildChangeProperties($change) { | |||||
| $viewer = $this->getViewer(); | |||||
| $properties = id(new PHUIPropertyListView()) | |||||
| ->addProperty( | |||||
| pht('Change Type'), | |||||
| $change->getImplementation()->getImplementationName()) | |||||
| ->addProperty( | |||||
| pht('Requested By'), | |||||
| $viewer->renderHandle($change->getRequestorPHID())) | |||||
| ->addProperty( | |||||
| pht('Content'), | |||||
| $viewer->renderHandle($change->getRequestedObjectPHID())) | |||||
| ->addProperty( | |||||
| pht('Author'), | |||||
| $viewer->renderHandle($change->getChangeAuthorPHID())) | |||||
| ->addProperty(pht('Status'), $change->getStatusName()); | |||||
| $description = $change->getDescription(); | |||||
| if (strlen($description)) { | |||||
| $properties | |||||
| ->addSectionHeader('Description') | |||||
| ->addTextContent( | |||||
| new PHUIRemarkupView($this->getViewer(), $description)); | |||||
| } | |||||
| $field_list = PhabricatorCustomField::getObjectFields( | |||||
| $change, | |||||
| PhabricatorCustomField::ROLE_VIEW); | |||||
| $field_list->appendFieldsToPropertyList( | |||||
| $change, | |||||
| $viewer, | |||||
| $properties); | |||||
| return $properties; | |||||
| } | |||||
| private function buildReleaseProperties($release) { | |||||
| $properties = id(new PHUIPropertyListView()) | |||||
| ->addProperty(pht('Release Type'), $release->getReleaseTemplateName()) | |||||
| ->addProperty(pht('Status'), $release->getStateName()); | |||||
| return $properties; | |||||
| } | |||||
| private function buildCurtain($change) { | |||||
| $curtain = $this->newCurtainView($change); | |||||
| $viewer = $this->getViewer(); | |||||
| $change_phid = $change->getPHID(); | |||||
| $id = $change->getID(); | |||||
| $edit_uri = $this->getApplicationURI("changerequest/edit/{$id}/"); | |||||
| $can_edit = PhabricatorPolicyFilter::hasCapability( | |||||
| $viewer, | |||||
| $change, | |||||
| PhabricatorPolicyCapability::CAN_EDIT); | |||||
| $curtain->addAction(id(new PhabricatorActionView()) | |||||
| ->setName(pht('Edit Change Request')) | |||||
| ->setIcon('fa-pencil') | |||||
| ->setHref($edit_uri) | |||||
| ->setDisabled(!$can_edit)); | |||||
| $actions = ReleaseChangeRequestAction::getAllActions(); | |||||
| foreach ($actions as $action) { | |||||
| $curtain->addAction( | |||||
| id(new PhabricatorActionView()) | |||||
| ->setName($action->getActionName()) | |||||
| ->setWorkflow(true) | |||||
| ->setDisabled(!$action->isEnabledForRequest($change)) | |||||
| ->setIcon($action->getActionIcon()) | |||||
| ->setHref($action->getActionHref($change))); | |||||
| } | |||||
| return $curtain; | |||||
| } | |||||
| } | |||||