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; | |||||
} | |||||
} |