[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class AlmanacServiceEditController 4 extends AlmanacServiceController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $request->getViewer(); 8 9 $list_uri = $this->getApplicationURI('service/'); 10 11 $id = $request->getURIData('id'); 12 if ($id) { 13 $service = id(new AlmanacServiceQuery()) 14 ->setViewer($viewer) 15 ->withIDs(array($id)) 16 ->requireCapabilities( 17 array( 18 PhabricatorPolicyCapability::CAN_VIEW, 19 PhabricatorPolicyCapability::CAN_EDIT, 20 )) 21 ->executeOne(); 22 if (!$service) { 23 return new Aphront404Response(); 24 } 25 26 $is_new = false; 27 $service_uri = $service->getURI(); 28 $cancel_uri = $service_uri; 29 $title = pht('Edit Service'); 30 $save_button = pht('Save Changes'); 31 } else { 32 $this->requireApplicationCapability( 33 AlmanacCreateServicesCapability::CAPABILITY); 34 35 $service = AlmanacService::initializeNewService(); 36 $is_new = true; 37 38 $cancel_uri = $list_uri; 39 $title = pht('Create Service'); 40 $save_button = pht('Create Service'); 41 } 42 43 $v_name = $service->getName(); 44 $e_name = true; 45 $validation_exception = null; 46 47 if ($is_new) { 48 $v_projects = array(); 49 } else { 50 $v_projects = PhabricatorEdgeQuery::loadDestinationPHIDs( 51 $service->getPHID(), 52 PhabricatorProjectObjectHasProjectEdgeType::EDGECONST); 53 $v_projects = array_reverse($v_projects); 54 } 55 56 if ($request->isFormPost()) { 57 $v_name = $request->getStr('name'); 58 $v_view = $request->getStr('viewPolicy'); 59 $v_edit = $request->getStr('editPolicy'); 60 $v_projects = $request->getArr('projects'); 61 62 $type_name = AlmanacServiceTransaction::TYPE_NAME; 63 $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY; 64 $type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY; 65 66 $xactions = array(); 67 68 $xactions[] = id(new AlmanacServiceTransaction()) 69 ->setTransactionType($type_name) 70 ->setNewValue($v_name); 71 72 $xactions[] = id(new AlmanacServiceTransaction()) 73 ->setTransactionType($type_view) 74 ->setNewValue($v_view); 75 76 $xactions[] = id(new AlmanacServiceTransaction()) 77 ->setTransactionType($type_edit) 78 ->setNewValue($v_edit); 79 80 $proj_edge_type = PhabricatorProjectObjectHasProjectEdgeType::EDGECONST; 81 $xactions[] = id(new AlmanacServiceTransaction()) 82 ->setTransactionType(PhabricatorTransactions::TYPE_EDGE) 83 ->setMetadataValue('edge:type', $proj_edge_type) 84 ->setNewValue(array('=' => array_fuse($v_projects))); 85 86 $editor = id(new AlmanacServiceEditor()) 87 ->setActor($viewer) 88 ->setContentSourceFromRequest($request) 89 ->setContinueOnNoEffect(true); 90 91 try { 92 $editor->applyTransactions($service, $xactions); 93 94 $service_uri = $service->getURI(); 95 return id(new AphrontRedirectResponse())->setURI($service_uri); 96 } catch (PhabricatorApplicationTransactionValidationException $ex) { 97 $validation_exception = $ex; 98 $e_name = $ex->getShortMessage($type_name); 99 100 $service->setViewPolicy($v_view); 101 $service->setEditPolicy($v_edit); 102 } 103 } 104 105 $policies = id(new PhabricatorPolicyQuery()) 106 ->setViewer($viewer) 107 ->setObject($service) 108 ->execute(); 109 110 if ($v_projects) { 111 $project_handles = $this->loadViewerHandles($v_projects); 112 } else { 113 $project_handles = array(); 114 } 115 116 $form = id(new AphrontFormView()) 117 ->setUser($viewer) 118 ->appendChild( 119 id(new AphrontFormTextControl()) 120 ->setLabel(pht('Name')) 121 ->setName('name') 122 ->setValue($v_name) 123 ->setError($e_name)) 124 ->appendChild( 125 id(new AphrontFormPolicyControl()) 126 ->setName('viewPolicy') 127 ->setPolicyObject($service) 128 ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) 129 ->setPolicies($policies)) 130 ->appendChild( 131 id(new AphrontFormPolicyControl()) 132 ->setName('editPolicy') 133 ->setPolicyObject($service) 134 ->setCapability(PhabricatorPolicyCapability::CAN_EDIT) 135 ->setPolicies($policies)) 136 ->appendChild( 137 id(new AphrontFormTokenizerControl()) 138 ->setLabel(pht('Projects')) 139 ->setName('projects') 140 ->setValue($project_handles) 141 ->setDatasource(new PhabricatorProjectDatasource())) 142 ->appendChild( 143 id(new AphrontFormSubmitControl()) 144 ->addCancelButton($cancel_uri) 145 ->setValue($save_button)); 146 147 $box = id(new PHUIObjectBoxView()) 148 ->setValidationException($validation_exception) 149 ->setHeaderText($title) 150 ->appendChild($form); 151 152 $crumbs = $this->buildApplicationCrumbs(); 153 if ($is_new) { 154 $crumbs->addTextCrumb(pht('Create Service')); 155 } else { 156 $crumbs->addTextCrumb($service->getName(), $service_uri); 157 $crumbs->addTextCrumb(pht('Edit')); 158 } 159 160 return $this->buildApplicationPage( 161 array( 162 $crumbs, 163 $box, 164 ), 165 array( 166 'title' => $title, 167 )); 168 } 169 170 }
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 |