[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class AlmanacNetworkEditController 4 extends AlmanacNetworkController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $request->getViewer(); 8 9 $list_uri = $this->getApplicationURI('network/'); 10 11 $id = $request->getURIData('id'); 12 if ($id) { 13 $network = id(new AlmanacNetworkQuery()) 14 ->setViewer($viewer) 15 ->withIDs(array($id)) 16 ->requireCapabilities( 17 array( 18 PhabricatorPolicyCapability::CAN_VIEW, 19 PhabricatorPolicyCapability::CAN_EDIT, 20 )) 21 ->executeOne(); 22 if (!$network) { 23 return new Aphront404Response(); 24 } 25 26 $is_new = false; 27 $network_uri = $this->getApplicationURI('network/'.$network->getID().'/'); 28 $cancel_uri = $network_uri; 29 $title = pht('Edit Network'); 30 $save_button = pht('Save Changes'); 31 } else { 32 $this->requireApplicationCapability( 33 AlmanacCreateNetworksCapability::CAPABILITY); 34 35 $network = AlmanacNetwork::initializeNewNetwork(); 36 $is_new = true; 37 38 $cancel_uri = $list_uri; 39 $title = pht('Create Network'); 40 $save_button = pht('Create Network'); 41 } 42 43 $v_name = $network->getName(); 44 $e_name = true; 45 $validation_exception = null; 46 47 if ($request->isFormPost()) { 48 $v_name = $request->getStr('name'); 49 $v_view = $request->getStr('viewPolicy'); 50 $v_edit = $request->getStr('editPolicy'); 51 52 $type_name = AlmanacNetworkTransaction::TYPE_NAME; 53 $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY; 54 $type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY; 55 56 $xactions = array(); 57 58 $xactions[] = id(new AlmanacNetworkTransaction()) 59 ->setTransactionType($type_name) 60 ->setNewValue($v_name); 61 62 $xactions[] = id(new AlmanacNetworkTransaction()) 63 ->setTransactionType($type_view) 64 ->setNewValue($v_view); 65 66 $xactions[] = id(new AlmanacNetworkTransaction()) 67 ->setTransactionType($type_edit) 68 ->setNewValue($v_edit); 69 70 $editor = id(new AlmanacNetworkEditor()) 71 ->setActor($viewer) 72 ->setContentSourceFromRequest($request) 73 ->setContinueOnNoEffect(true); 74 75 try { 76 $editor->applyTransactions($network, $xactions); 77 78 $id = $network->getID(); 79 $network_uri = $this->getApplicationURI("network/{$id}/"); 80 return id(new AphrontRedirectResponse())->setURI($network_uri); 81 } catch (PhabricatorApplicationTransactionValidationException $ex) { 82 $validation_exception = $ex; 83 $e_name = $ex->getShortMessage($type_name); 84 85 $network->setViewPolicy($v_view); 86 $network->setEditPolicy($v_edit); 87 } 88 } 89 90 $policies = id(new PhabricatorPolicyQuery()) 91 ->setViewer($viewer) 92 ->setObject($network) 93 ->execute(); 94 95 $form = id(new AphrontFormView()) 96 ->setUser($viewer) 97 ->appendChild( 98 id(new AphrontFormTextControl()) 99 ->setLabel(pht('Name')) 100 ->setName('name') 101 ->setValue($v_name) 102 ->setError($e_name)) 103 ->appendChild( 104 id(new AphrontFormPolicyControl()) 105 ->setName('viewPolicy') 106 ->setPolicyObject($network) 107 ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) 108 ->setPolicies($policies)) 109 ->appendChild( 110 id(new AphrontFormPolicyControl()) 111 ->setName('editPolicy') 112 ->setPolicyObject($network) 113 ->setCapability(PhabricatorPolicyCapability::CAN_EDIT) 114 ->setPolicies($policies)) 115 ->appendChild( 116 id(new AphrontFormSubmitControl()) 117 ->addCancelButton($cancel_uri) 118 ->setValue($save_button)); 119 120 $box = id(new PHUIObjectBoxView()) 121 ->setValidationException($validation_exception) 122 ->setHeaderText($title) 123 ->appendChild($form); 124 125 $crumbs = $this->buildApplicationCrumbs(); 126 if ($is_new) { 127 $crumbs->addTextCrumb(pht('Create Network')); 128 } else { 129 $crumbs->addTextCrumb($network->getName(), $network_uri); 130 $crumbs->addTextCrumb(pht('Edit')); 131 } 132 133 return $this->buildApplicationPage( 134 array( 135 $crumbs, 136 $box, 137 ), 138 array( 139 'title' => $title, 140 )); 141 } 142 143 }
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 |