[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class DiffusionRepositoryEditHostingController 4 extends DiffusionRepositoryEditController { 5 6 private $serve; 7 8 public function willProcessRequest(array $data) { 9 parent::willProcessRequest($data); 10 $this->serve = idx($data, 'serve'); 11 } 12 13 public function processRequest() { 14 $request = $this->getRequest(); 15 $user = $request->getUser(); 16 $drequest = $this->diffusionRequest; 17 $repository = $drequest->getRepository(); 18 19 $repository = id(new PhabricatorRepositoryQuery()) 20 ->setViewer($user) 21 ->requireCapabilities( 22 array( 23 PhabricatorPolicyCapability::CAN_VIEW, 24 PhabricatorPolicyCapability::CAN_EDIT, 25 )) 26 ->withIDs(array($repository->getID())) 27 ->executeOne(); 28 if (!$repository) { 29 return new Aphront404Response(); 30 } 31 32 if (!$this->serve) { 33 return $this->handleHosting($repository); 34 } else { 35 return $this->handleProtocols($repository); 36 } 37 } 38 39 public function handleHosting(PhabricatorRepository $repository) { 40 $request = $this->getRequest(); 41 $user = $request->getUser(); 42 43 $v_hosting = $repository->isHosted(); 44 45 $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/'); 46 $next_uri = $this->getRepositoryControllerURI($repository, 'edit/serve/'); 47 48 if ($request->isFormPost()) { 49 $v_hosting = $request->getBool('hosting'); 50 51 $xactions = array(); 52 $template = id(new PhabricatorRepositoryTransaction()); 53 54 $type_hosting = PhabricatorRepositoryTransaction::TYPE_HOSTING; 55 56 $xactions[] = id(clone $template) 57 ->setTransactionType($type_hosting) 58 ->setNewValue($v_hosting); 59 60 id(new PhabricatorRepositoryEditor()) 61 ->setContinueOnNoEffect(true) 62 ->setContentSourceFromRequest($request) 63 ->setActor($user) 64 ->applyTransactions($repository, $xactions); 65 66 return id(new AphrontRedirectResponse())->setURI($next_uri); 67 } 68 69 $crumbs = $this->buildApplicationCrumbs(); 70 $crumbs->addTextCrumb(pht('Edit Hosting')); 71 72 $title = pht('Edit Hosting (%s)', $repository->getName()); 73 74 $hosted_control = id(new AphrontFormRadioButtonControl()) 75 ->setName('hosting') 76 ->setLabel(pht('Hosting')) 77 ->addButton( 78 true, 79 pht('Host Repository on Phabricator'), 80 pht( 81 'Phabricator will host this repository. Users will be able to '. 82 'push commits to Phabricator. Phabricator will not pull '. 83 'changes from elsewhere.')) 84 ->addButton( 85 false, 86 pht('Host Repository Elsewhere'), 87 pht( 88 'Phabricator will pull updates to this repository from a master '. 89 'repository elsewhere (for example, on GitHub or Bitbucket). '. 90 'Users will not be able to push commits to this repository.')) 91 ->setValue($v_hosting); 92 93 $doc_href = PhabricatorEnv::getDoclink( 94 'Diffusion User Guide: Repository Hosting'); 95 96 $form = id(new AphrontFormView()) 97 ->setUser($user) 98 ->appendRemarkupInstructions( 99 pht( 100 'Phabricator can host repositories, or it can track repositories '. 101 'hosted elsewhere (like on GitHub or Bitbucket). For information '. 102 'on configuring hosting, see [[ %s | Diffusion User Guide: '. 103 'Repository Hosting]]', 104 $doc_href)) 105 ->appendChild($hosted_control) 106 ->appendChild( 107 id(new AphrontFormSubmitControl()) 108 ->setValue(pht('Save and Continue')) 109 ->addCancelButton($edit_uri)); 110 111 $object_box = id(new PHUIObjectBoxView()) 112 ->setHeaderText($title) 113 ->setForm($form); 114 115 return $this->buildApplicationPage( 116 array( 117 $crumbs, 118 $object_box, 119 ), 120 array( 121 'title' => $title, 122 )); 123 } 124 125 public function handleProtocols(PhabricatorRepository $repository) { 126 $request = $this->getRequest(); 127 $user = $request->getUser(); 128 129 $type = $repository->getVersionControlSystem(); 130 $is_svn = ($type == PhabricatorRepositoryType::REPOSITORY_TYPE_SVN); 131 132 $v_http_mode = $repository->getDetail( 133 'serve-over-http', 134 PhabricatorRepository::SERVE_OFF); 135 $v_ssh_mode = $repository->getDetail( 136 'serve-over-ssh', 137 PhabricatorRepository::SERVE_OFF); 138 139 $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/'); 140 $prev_uri = $this->getRepositoryControllerURI($repository, 'edit/hosting/'); 141 142 if ($request->isFormPost()) { 143 $v_http_mode = $request->getStr('http'); 144 $v_ssh_mode = $request->getStr('ssh'); 145 146 $xactions = array(); 147 $template = id(new PhabricatorRepositoryTransaction()); 148 149 $type_http = PhabricatorRepositoryTransaction::TYPE_PROTOCOL_HTTP; 150 $type_ssh = PhabricatorRepositoryTransaction::TYPE_PROTOCOL_SSH; 151 152 if (!$is_svn) { 153 $xactions[] = id(clone $template) 154 ->setTransactionType($type_http) 155 ->setNewValue($v_http_mode); 156 } 157 158 $xactions[] = id(clone $template) 159 ->setTransactionType($type_ssh) 160 ->setNewValue($v_ssh_mode); 161 162 id(new PhabricatorRepositoryEditor()) 163 ->setContinueOnNoEffect(true) 164 ->setContentSourceFromRequest($request) 165 ->setActor($user) 166 ->applyTransactions($repository, $xactions); 167 168 return id(new AphrontRedirectResponse())->setURI($edit_uri); 169 } 170 171 $crumbs = $this->buildApplicationCrumbs(); 172 $crumbs->addTextCrumb(pht('Edit Protocols')); 173 174 $title = pht('Edit Protocols (%s)', $repository->getName()); 175 176 177 $rw_message = pht( 178 'Phabricator will serve a read-write copy of this repository.'); 179 180 if (!$repository->isHosted()) { 181 $rw_message = array( 182 $rw_message, 183 phutil_tag('br'), 184 phutil_tag('br'), 185 pht( 186 '%s: This repository is hosted elsewhere, so Phabricator can not '. 187 'perform writes. This mode will act like "Read Only" for '. 188 'repositories hosted elsewhere.', 189 phutil_tag('strong', array(), 'WARNING')), 190 ); 191 } 192 193 $ssh_control = 194 id(new AphrontFormRadioButtonControl()) 195 ->setName('ssh') 196 ->setLabel(pht('SSH')) 197 ->setValue($v_ssh_mode) 198 ->addButton( 199 PhabricatorRepository::SERVE_OFF, 200 PhabricatorRepository::getProtocolAvailabilityName( 201 PhabricatorRepository::SERVE_OFF), 202 pht('Phabricator will not serve this repository over SSH.')) 203 ->addButton( 204 PhabricatorRepository::SERVE_READONLY, 205 PhabricatorRepository::getProtocolAvailabilityName( 206 PhabricatorRepository::SERVE_READONLY), 207 pht( 208 'Phabricator will serve a read-only copy of this repository '. 209 'over SSH.')) 210 ->addButton( 211 PhabricatorRepository::SERVE_READWRITE, 212 PhabricatorRepository::getProtocolAvailabilityName( 213 PhabricatorRepository::SERVE_READWRITE), 214 $rw_message); 215 216 $http_control = 217 id(new AphrontFormRadioButtonControl()) 218 ->setName('http') 219 ->setLabel(pht('HTTP')) 220 ->setValue($v_http_mode) 221 ->addButton( 222 PhabricatorRepository::SERVE_OFF, 223 PhabricatorRepository::getProtocolAvailabilityName( 224 PhabricatorRepository::SERVE_OFF), 225 pht('Phabricator will not serve this repository over HTTP.')) 226 ->addButton( 227 PhabricatorRepository::SERVE_READONLY, 228 PhabricatorRepository::getProtocolAvailabilityName( 229 PhabricatorRepository::SERVE_READONLY), 230 pht( 231 'Phabricator will serve a read-only copy of this repository '. 232 'over HTTP.')) 233 ->addButton( 234 PhabricatorRepository::SERVE_READWRITE, 235 PhabricatorRepository::getProtocolAvailabilityName( 236 PhabricatorRepository::SERVE_READWRITE), 237 $rw_message); 238 239 if ($is_svn) { 240 $http_control = id(new AphrontFormMarkupControl()) 241 ->setLabel(pht('HTTP')) 242 ->setValue( 243 phutil_tag( 244 'em', 245 array(), 246 pht( 247 'Phabricator does not currently support HTTP access to '. 248 'Subversion repositories.'))); 249 } 250 251 $form = id(new AphrontFormView()) 252 ->setUser($user) 253 ->appendRemarkupInstructions( 254 pht( 255 'Phabricator can serve repositories over various protocols. You can '. 256 'configure server protocols here.')) 257 ->appendChild($ssh_control); 258 259 if (!PhabricatorEnv::getEnvConfig('diffusion.allow-http-auth')) { 260 $form->appendRemarkupInstructions( 261 pht( 262 'NOTE: The configuration setting [[ %s | %s ]] is currently '. 263 'disabled. You must enable it to activate authenticated access '. 264 'to repositories over HTTP.', 265 '/config/edit/diffusion.allow-http-auth/', 266 'diffusion.allow-http-auth')); 267 } 268 269 $form 270 ->appendChild($http_control) 271 ->appendChild( 272 id(new AphrontFormSubmitControl()) 273 ->setValue(pht('Save Changes')) 274 ->addCancelButton($prev_uri, pht('Back'))); 275 276 $object_box = id(new PHUIObjectBoxView()) 277 ->setHeaderText($title) 278 ->setForm($form); 279 280 return $this->buildApplicationPage( 281 array( 282 $crumbs, 283 $object_box, 284 ), 285 array( 286 'title' => $title, 287 )); 288 } 289 290 }
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 |