[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class DrydockBlueprintEditController extends DrydockBlueprintController { 4 5 private $id; 6 7 public function willProcessRequest(array $data) { 8 $this->id = idx($data, 'id'); 9 } 10 11 public function processRequest() { 12 $request = $this->getRequest(); 13 $viewer = $request->getUser(); 14 15 if ($this->id) { 16 $blueprint = id(new DrydockBlueprintQuery()) 17 ->setViewer($viewer) 18 ->withIDs(array($this->id)) 19 ->requireCapabilities( 20 array( 21 PhabricatorPolicyCapability::CAN_VIEW, 22 PhabricatorPolicyCapability::CAN_EDIT, 23 )) 24 ->executeOne(); 25 if (!$blueprint) { 26 return new Aphront404Response(); 27 } 28 29 $impl = $blueprint->getImplementation(); 30 $cancel_uri = $this->getApplicationURI('blueprint/'.$this->id.'/'); 31 } else { 32 $this->requireApplicationCapability( 33 DrydockCreateBlueprintsCapability::CAPABILITY); 34 35 $class = $request->getStr('class'); 36 37 $impl = DrydockBlueprintImplementation::getNamedImplementation($class); 38 if (!$impl || !$impl->isEnabled()) { 39 return new Aphront400Response(); 40 } 41 42 $blueprint = DrydockBlueprint::initializeNewBlueprint($viewer); 43 $blueprint->setClassName($class); 44 $cancel_uri = $this->getApplicationURI('blueprint/'); 45 } 46 47 $field_list = PhabricatorCustomField::getObjectFields( 48 $blueprint, 49 PhabricatorCustomField::ROLE_EDIT); 50 $field_list 51 ->setViewer($viewer) 52 ->readFieldsFromStorage($blueprint); 53 54 $v_name = $blueprint->getBlueprintName(); 55 $e_name = true; 56 $errors = array(); 57 $validation_exception = null; 58 59 if ($request->isFormPost()) { 60 $v_view_policy = $request->getStr('viewPolicy'); 61 $v_edit_policy = $request->getStr('editPolicy'); 62 $v_name = $request->getStr('name'); 63 if (!strlen($v_name)) { 64 $e_name = pht('Required'); 65 $errors[] = pht('You must name this blueprint.'); 66 } 67 68 if (!$errors) { 69 $xactions = array(); 70 71 $xactions = $field_list->buildFieldTransactionsFromRequest( 72 new DrydockBlueprintTransaction(), 73 $request); 74 75 $xactions[] = id(new DrydockBlueprintTransaction()) 76 ->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY) 77 ->setNewValue($v_view_policy); 78 79 $xactions[] = id(new DrydockBlueprintTransaction()) 80 ->setTransactionType(PhabricatorTransactions::TYPE_EDIT_POLICY) 81 ->setNewValue($v_edit_policy); 82 83 $xactions[] = id(new DrydockBlueprintTransaction()) 84 ->setTransactionType(DrydockBlueprintTransaction::TYPE_NAME) 85 ->setNewValue($v_name); 86 87 $editor = id(new DrydockBlueprintEditor()) 88 ->setActor($viewer) 89 ->setContentSourceFromRequest($request) 90 ->setContinueOnNoEffect(true); 91 92 try { 93 $editor->applyTransactions($blueprint, $xactions); 94 95 $id = $blueprint->getID(); 96 $save_uri = $this->getApplicationURI("blueprint/{$id}/"); 97 98 return id(new AphrontRedirectResponse())->setURI($save_uri); 99 } catch (PhabricatorApplicationTransactionValidationException $ex) { 100 $validation_exception = $ex; 101 } 102 } 103 } 104 105 $policies = id(new PhabricatorPolicyQuery()) 106 ->setViewer($viewer) 107 ->setObject($blueprint) 108 ->execute(); 109 110 $form = id(new AphrontFormView()) 111 ->setUser($viewer) 112 ->addHiddenInput('class', $request->getStr('class')) 113 ->appendChild( 114 id(new AphrontFormTextControl()) 115 ->setLabel(pht('Name')) 116 ->setName('name') 117 ->setValue($v_name) 118 ->setError($e_name)) 119 ->appendChild( 120 id(new AphrontFormStaticControl()) 121 ->setLabel(pht('Blueprint Type')) 122 ->setValue($impl->getBlueprintName())) 123 ->appendChild( 124 id(new AphrontFormPolicyControl()) 125 ->setName('viewPolicy') 126 ->setPolicyObject($blueprint) 127 ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) 128 ->setPolicies($policies)) 129 ->appendChild( 130 id(new AphrontFormPolicyControl()) 131 ->setName('editPolicy') 132 ->setPolicyObject($blueprint) 133 ->setCapability(PhabricatorPolicyCapability::CAN_EDIT) 134 ->setPolicies($policies)); 135 136 $field_list->appendFieldsToForm($form); 137 138 $crumbs = $this->buildApplicationCrumbs(); 139 140 if ($blueprint->getID()) { 141 $title = pht('Edit Blueprint'); 142 $header = pht('Edit Blueprint %d', $blueprint->getID()); 143 $crumbs->addTextCrumb(pht('Blueprint %d', $blueprint->getID())); 144 $crumbs->addTextCrumb(pht('Edit')); 145 $submit = pht('Save Blueprint'); 146 } else { 147 $title = pht('New Blueprint'); 148 $header = pht('New Blueprint'); 149 $crumbs->addTextCrumb(pht('New Blueprint')); 150 $submit = pht('Create Blueprint'); 151 } 152 153 $form->appendChild( 154 id(new AphrontFormSubmitControl()) 155 ->setValue($submit) 156 ->addCancelButton($cancel_uri)); 157 158 $box = id(new PHUIObjectBoxView()) 159 ->setHeaderText($header) 160 ->setValidationException($validation_exception) 161 ->setFormErrors($errors) 162 ->setForm($form); 163 164 return $this->buildApplicationPage( 165 array( 166 $crumbs, 167 $box, 168 ), 169 array( 170 'title' => $title, 171 )); 172 } 173 174 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |