Differential D17020 Diff 40969 src/applications/release/controller/ReleaseChangeRequestFromRevisionController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/release/controller/ReleaseChangeRequestFromRevisionController.php
- This file was added.
Property | Old Value | New Value |
---|---|---|
File Mode | null | 100755 |
<?php | |||||
final class ReleaseChangeRequestFromRevisionController | |||||
extends PhabricatorController { | |||||
public function handleRequest(AphrontRequest $request) { | |||||
$viewer = $this->getViewer(); | |||||
$revision_phid = $request->getURIData('revision'); | |||||
$revision = id(new DifferentialRevisionQuery()) | |||||
->withPHIDs(array($revision_phid)) | |||||
->setViewer($viewer) | |||||
->executeOne(); | |||||
if (!$revision) { | |||||
return new Aphront404Response(); | |||||
} | |||||
$repository = $revision->getRepository(); | |||||
$errors = array(); | |||||
// TODO requireCapability | |||||
$v_release = null; | |||||
$e_release = true; | |||||
$v_message = null; | |||||
if ($request->isDialogFormPost()) { | |||||
$v_release = $request->getArr('release'); | |||||
if (!$v_release) { | |||||
$e_release = pht('Required'); | |||||
$errors[] = 'Specify target release'; | |||||
} else { | |||||
$release = id(new PhabricatorReleaseReleaseQuery()) | |||||
->setViewer($viewer) | |||||
->withPHIDs($v_release) | |||||
->executeOne(); | |||||
// if (!$release->canAcceptChangeRequests()) { // TODO | |||||
// $e_release = pht('Invalid'); | |||||
// $errors[] = | |||||
// pht('This release can not accept cany change requests at this time.'); | |||||
// } | |||||
} | |||||
$v_message = $request->getStr('message'); | |||||
$actor_phid = $viewer->getPHID(); | |||||
$revision_id = $revision->getID(); | |||||
if (!$errors) { | |||||
$implementation = id(new ReleaseChangeRequestRevisionImplementation()) | |||||
->setRevisionPHID($revision_phid); | |||||
$change_request = $implementation->createRequest() | |||||
->setRequestorPHID($actor_phid) | |||||
->setReleasePHID($release->getPHID()) | |||||
->setDescription($v_message); | |||||
$xactions = array( | |||||
id(new ReleaseChangeRequestTransaction()) | |||||
->setTransactionType(PhabricatorTransactions::TYPE_CREATE), | |||||
); | |||||
$editor = id(new ReleaseChangeRequestEditor()) | |||||
->setActor($viewer) | |||||
->setContentSource( | |||||
PhabricatorContentSource::newFromRequest($request)); | |||||
$editor->applyTransactions($change_request, $xactions); | |||||
// maybe add some xactions to the Release here. | |||||
return id(new AphrontRedirectResponse())->setURI($change_request->getURI()); | |||||
} | |||||
} | |||||
$prompt = hsprintf( | |||||
'This will request the Release Managers to include this Revision in the '. | |||||
'selected Release.'); | |||||
// TODO filter only to relevant releases | |||||
$datasource = id(new PhabricatorReleaseReleaseDatasource()); | |||||
$form = id(new AphrontFormView()) | |||||
->setUser($viewer) | |||||
->appendControl( | |||||
id(new AphrontFormTokenizerControl()) | |||||
->setDatasource($datasource) | |||||
->setLimit(1) | |||||
->setName('release') | |||||
->setLabel(pht('Release')) | |||||
->setValue($v_release) | |||||
->setError($e_release)) | |||||
->appendControl( | |||||
id(new PhabricatorRemarkupControl()) | |||||
->setLabel('Reason') | |||||
->setValue($v_message) | |||||
->setName('message')); | |||||
$errors_view = null; | |||||
if ($errors) { | |||||
$errors_view = id(new PHUIInfoView()) | |||||
->setErrors($errors); | |||||
} | |||||
$dialog = $this->newDialog() | |||||
->setTitle(pht('Pick Revision to Release?')) | |||||
->appendChild($prompt) | |||||
->appendChild($errors_view) | |||||
->appendForm($form) | |||||
->addSubmitButton(pht('Please')) | |||||
->addCancelButton('#'); | |||||
return id(new AphrontDialogResponse())->setDialog($dialog); | |||||
} | |||||
} |