[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorApplicationEditController 4 extends PhabricatorApplicationsController { 5 6 private $application; 7 8 public function shouldRequireAdmin() { 9 return true; 10 } 11 12 public function willProcessRequest(array $data) { 13 $this->application = $data['application']; 14 } 15 16 public function processRequest() { 17 $request = $this->getRequest(); 18 $user = $request->getUser(); 19 20 $application = id(new PhabricatorApplicationQuery()) 21 ->setViewer($user) 22 ->withClasses(array($this->application)) 23 ->requireCapabilities( 24 array( 25 PhabricatorPolicyCapability::CAN_VIEW, 26 PhabricatorPolicyCapability::CAN_EDIT, 27 )) 28 ->executeOne(); 29 if (!$application) { 30 return new Aphront404Response(); 31 } 32 33 $title = $application->getName(); 34 35 $view_uri = $this->getApplicationURI('view/'.get_class($application).'/'); 36 37 $policies = id(new PhabricatorPolicyQuery()) 38 ->setViewer($user) 39 ->setObject($application) 40 ->execute(); 41 42 if ($request->isFormPost()) { 43 $result = array(); 44 foreach ($application->getCapabilities() as $capability) { 45 $old = $application->getPolicy($capability); 46 $new = $request->getStr('policy:'.$capability); 47 48 if ($old == $new) { 49 // No change to the setting. 50 continue; 51 } 52 53 if (empty($policies[$new])) { 54 // Not a standard policy, check for a custom policy. 55 $policy = id(new PhabricatorPolicyQuery()) 56 ->setViewer($user) 57 ->withPHIDs(array($new)) 58 ->executeOne(); 59 if (!$policy) { 60 // Not a custom policy either. Can't set the policy to something 61 // invalid, so skip this. 62 continue; 63 } 64 } 65 66 if ($new == PhabricatorPolicies::POLICY_PUBLIC) { 67 $capobj = PhabricatorPolicyCapability::getCapabilityByKey( 68 $capability); 69 if (!$capobj || !$capobj->shouldAllowPublicPolicySetting()) { 70 // Can't set non-public policies to public. 71 continue; 72 } 73 } 74 75 $result[$capability] = $new; 76 } 77 78 if ($result) { 79 $key = 'phabricator.application-settings'; 80 $config_entry = PhabricatorConfigEntry::loadConfigEntry($key); 81 $value = $config_entry->getValue(); 82 83 $phid = $application->getPHID(); 84 if (empty($value[$phid])) { 85 $value[$application->getPHID()] = array(); 86 } 87 if (empty($value[$phid]['policy'])) { 88 $value[$phid]['policy'] = array(); 89 } 90 91 $value[$phid]['policy'] = $result + $value[$phid]['policy']; 92 93 // Don't allow users to make policy edits which would lock them out of 94 // applications, since they would be unable to undo those actions. 95 PhabricatorEnv::overrideConfig($key, $value); 96 PhabricatorPolicyFilter::mustRetainCapability( 97 $user, 98 $application, 99 PhabricatorPolicyCapability::CAN_VIEW); 100 101 PhabricatorPolicyFilter::mustRetainCapability( 102 $user, 103 $application, 104 PhabricatorPolicyCapability::CAN_EDIT); 105 106 PhabricatorConfigEditor::storeNewValue( 107 $user, 108 $config_entry, 109 $value, 110 PhabricatorContentSource::newFromRequest($this->getRequest())); 111 } 112 113 return id(new AphrontRedirectResponse())->setURI($view_uri); 114 } 115 116 $descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions( 117 $user, 118 $application); 119 120 $form = id(new AphrontFormView()) 121 ->setUser($user); 122 123 foreach ($application->getCapabilities() as $capability) { 124 $label = $application->getCapabilityLabel($capability); 125 $can_edit = $application->isCapabilityEditable($capability); 126 $caption = $application->getCapabilityCaption($capability); 127 128 if (!$can_edit) { 129 $form->appendChild( 130 id(new AphrontFormStaticControl()) 131 ->setLabel($label) 132 ->setValue(idx($descriptions, $capability)) 133 ->setCaption($caption)); 134 } else { 135 $form->appendChild( 136 id(new AphrontFormPolicyControl()) 137 ->setUser($user) 138 ->setCapability($capability) 139 ->setPolicyObject($application) 140 ->setPolicies($policies) 141 ->setLabel($label) 142 ->setName('policy:'.$capability) 143 ->setCaption($caption)); 144 } 145 146 } 147 148 $form->appendChild( 149 id(new AphrontFormSubmitControl()) 150 ->setValue(pht('Save Policies')) 151 ->addCancelButton($view_uri)); 152 153 $crumbs = $this->buildApplicationCrumbs(); 154 $crumbs->addTextCrumb($application->getName(), $view_uri); 155 $crumbs->addTextCrumb(pht('Edit Policies')); 156 157 $header = id(new PHUIHeaderView()) 158 ->setHeader(pht('Edit Policies: %s', $application->getName())); 159 160 $object_box = id(new PHUIObjectBoxView()) 161 ->setHeader($header) 162 ->setForm($form); 163 164 return $this->buildApplicationPage( 165 array( 166 $crumbs, 167 $object_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 |