Differential D7908 Diff 17903 src/applications/drydock/controller/DrydockBlueprintCreateController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/drydock/controller/DrydockBlueprintCreateController.php
<?php | <?php | ||||
final class DrydockBlueprintCreateController | final class DrydockBlueprintCreateController | ||||
extends DrydockBlueprintController { | extends DrydockBlueprintController { | ||||
public function processRequest() { | public function processRequest() { | ||||
$request = $this->getRequest(); | $request = $this->getRequest(); | ||||
$viewer = $request->getUser(); | $viewer = $request->getUser(); | ||||
$implementations = | $implementations = | ||||
DrydockBlueprintImplementation::getAllBlueprintImplementations(); | DrydockBlueprintImplementation::getAllBlueprintImplementations(); | ||||
$errors = array(); | |||||
$e_blueprint = null; | |||||
if ($request->isFormPost()) { | if ($request->isFormPost()) { | ||||
$class = $request->getStr('blueprint-type'); | $class = $request->getStr('blueprint-type'); | ||||
if (!isset($implementations[$class])) { | if (!isset($implementations[$class])) { | ||||
return $this->createDialog($implementations); | $e_blueprint = pht('Required'); | ||||
$errors[] = pht('You must choose a blueprint type.'); | |||||
} | } | ||||
$blueprint = id(new DrydockBlueprint()) | if (!$errors) { | ||||
->setClassName($class) | $edit_uri = $this->getApplicationURI('blueprint/edit/?class='.$class); | ||||
->setDetails(array()) | |||||
->setViewPolicy(PhabricatorPolicies::POLICY_ADMIN) | |||||
->setEditPolicy(PhabricatorPolicies::POLICY_ADMIN) | |||||
->save(); | |||||
$edit_uri = $this->getApplicationURI( | |||||
"blueprint/edit/".$blueprint->getID()."/"); | |||||
return id(new AphrontRedirectResponse())->setURI($edit_uri); | return id(new AphrontRedirectResponse())->setURI($edit_uri); | ||||
} | } | ||||
return $this->createDialog($implementations); | |||||
} | } | ||||
function createDialog(array $implementations) { | $error_view = null; | ||||
$request = $this->getRequest(); | if ($errors) { | ||||
$viewer = $request->getUser(); | $error_view = id(new AphrontErrorView()) | ||||
->setErrors($errors); | |||||
} | |||||
$control = id(new AphrontFormRadioButtonControl()) | $control = id(new AphrontFormRadioButtonControl()) | ||||
->setName('blueprint-type'); | ->setName('blueprint-type') | ||||
->setLabel(pht('Blueprint Type')) | |||||
->setError($e_blueprint); | |||||
foreach ($implementations as $implementation_name => $implementation) { | foreach ($implementations as $implementation_name => $implementation) { | ||||
$control | $disabled = !$implementation->isEnabled(); | ||||
->addButton( | |||||
$control->addButton( | |||||
$implementation_name, | $implementation_name, | ||||
$implementation->getBlueprintClass(), | $implementation->getBlueprintName(), | ||||
$implementation->getDescription()); | array( | ||||
} | pht('Provides: %s', $implementation->getType()), | ||||
phutil_tag('br'), | |||||
phutil_tag('br'), | |||||
$implementation->getDescription(), | |||||
), | |||||
$disabled ? 'disabled' : null, | |||||
$disabled); | |||||
} | |||||
$title = pht('Create New Blueprint'); | |||||
$crumbs = $this->buildApplicationCrumbs(); | |||||
$crumbs->addTextCrumb(pht('New Blueprint')); | |||||
$dialog = new AphrontDialogView(); | $form = id(new AphrontFormView()) | ||||
$dialog->setTitle(pht('Create New Blueprint')) | |||||
->setUser($viewer) | ->setUser($viewer) | ||||
->addSubmitButton(pht('Create Blueprint')) | ->appendChild($control) | ||||
->addCancelButton($this->getApplicationURI('blueprint/')); | ->appendChild( | ||||
$dialog->appendChild( | id(new AphrontFormSubmitControl()) | ||||
phutil_tag( | ->addCancelButton($this->getApplicationURI('blueprint/')) | ||||
'p', | ->setValue(pht('Continue'))); | ||||
array(), | |||||
pht( | $box = id(new PHUIObjectBoxView()) | ||||
'Select what type of blueprint you want to create: '))); | ->setFormError($error_view) | ||||
$dialog->appendChild($control); | ->setHeaderText($title) | ||||
return id(new AphrontDialogResponse())->setDialog($dialog); | ->setForm($form); | ||||
return $this->buildApplicationPage( | |||||
array( | |||||
$crumbs, | |||||
$box, | |||||
), | |||||
array( | |||||
'title' => $title, | |||||
'device' => true, | |||||
)); | |||||
} | } | ||||
} | } |