@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Sort out application crumbs in new repository edit workflow

Summary: Ref T2231. Crumbs in the Diffusion edit workflow are a bit wonky, with stuff like "rP (master)" which isn't very useful and no link back to the main "Edit" page. Make them consistent across all the screens.

Test Plan: Loaded a bunch of these screens and saw sane crumbs on all of them.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T2231

Differential Revision: https://secure.phabricator.com/D7407

+493 -464
+10 -8
src/__phutil_library_map__.php
··· 510 510 'DiffusionRepositoryEditBranchesController' => 'applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php', 511 511 'DiffusionRepositoryEditController' => 'applications/diffusion/controller/DiffusionRepositoryEditController.php', 512 512 'DiffusionRepositoryEditEncodingController' => 'applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php', 513 + 'DiffusionRepositoryEditMainController' => 'applications/diffusion/controller/DiffusionRepositoryEditMainController.php', 513 514 'DiffusionRepositoryEditPolicyController' => 'applications/diffusion/controller/DiffusionRepositoryEditPolicyController.php', 514 515 'DiffusionRepositoryEditSubversionController' => 'applications/diffusion/controller/DiffusionRepositoryEditSubversionController.php', 515 516 'DiffusionRepositoryListController' => 'applications/diffusion/controller/DiffusionRepositoryListController.php', ··· 2678 2679 'DiffusionRawDiffQuery' => 'DiffusionQuery', 2679 2680 'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject', 2680 2681 'DiffusionRepositoryController' => 'DiffusionController', 2681 - 'DiffusionRepositoryCreateController' => 'DiffusionController', 2682 - 'DiffusionRepositoryEditActionsController' => 'DiffusionController', 2683 - 'DiffusionRepositoryEditActivateController' => 'DiffusionController', 2684 - 'DiffusionRepositoryEditBasicController' => 'DiffusionController', 2685 - 'DiffusionRepositoryEditBranchesController' => 'DiffusionController', 2682 + 'DiffusionRepositoryCreateController' => 'DiffusionRepositoryEditController', 2683 + 'DiffusionRepositoryEditActionsController' => 'DiffusionRepositoryEditController', 2684 + 'DiffusionRepositoryEditActivateController' => 'DiffusionRepositoryEditController', 2685 + 'DiffusionRepositoryEditBasicController' => 'DiffusionRepositoryEditController', 2686 + 'DiffusionRepositoryEditBranchesController' => 'DiffusionRepositoryEditController', 2686 2687 'DiffusionRepositoryEditController' => 'DiffusionController', 2687 - 'DiffusionRepositoryEditEncodingController' => 'DiffusionController', 2688 - 'DiffusionRepositoryEditPolicyController' => 'DiffusionController', 2689 - 'DiffusionRepositoryEditSubversionController' => 'DiffusionController', 2688 + 'DiffusionRepositoryEditEncodingController' => 'DiffusionRepositoryEditController', 2689 + 'DiffusionRepositoryEditMainController' => 'DiffusionRepositoryEditController', 2690 + 'DiffusionRepositoryEditPolicyController' => 'DiffusionRepositoryEditController', 2691 + 'DiffusionRepositoryEditSubversionController' => 'DiffusionRepositoryEditController', 2690 2692 'DiffusionRepositoryListController' => 2691 2693 array( 2692 2694 0 => 'DiffusionController',
+1 -1
src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
··· 64 64 'commit/(?P<commit>[a-z0-9]+)/edit/' 65 65 => 'DiffusionCommitEditController', 66 66 'edit/' => array( 67 - '' => 'DiffusionRepositoryEditController', 67 + '' => 'DiffusionRepositoryEditMainController', 68 68 'basic/' => 'DiffusionRepositoryEditBasicController', 69 69 'encoding/' => 'DiffusionRepositoryEditEncodingController', 70 70 'activate/' => 'DiffusionRepositoryEditActivateController',
+3 -2
src/applications/diffusion/controller/DiffusionRepositoryCreateController.php
··· 1 1 <?php 2 2 3 - final class DiffusionRepositoryCreateController extends DiffusionController { 3 + final class DiffusionRepositoryCreateController 4 + extends DiffusionRepositoryEditController { 4 5 5 6 private $edit; 6 7 private $repository; ··· 131 132 $form->readFromObject($dict); 132 133 } 133 134 134 - $crumbs = $this->buildCrumbs(); 135 + $crumbs = $this->buildApplicationCrumbs(); 135 136 $crumbs->addCrumb( 136 137 id(new PhabricatorCrumbView()) 137 138 ->setName($title));
+2 -2
src/applications/diffusion/controller/DiffusionRepositoryEditActionsController.php
··· 1 1 <?php 2 2 3 3 final class DiffusionRepositoryEditActionsController 4 - extends DiffusionController { 4 + extends DiffusionRepositoryEditController { 5 5 6 6 public function processRequest() { 7 7 $request = $this->getRequest(); ··· 58 58 59 59 $content = array(); 60 60 61 - $crumbs = $this->buildCrumbs(); 61 + $crumbs = $this->buildApplicationCrumbs(); 62 62 $crumbs->addCrumb( 63 63 id(new PhabricatorCrumbView()) 64 64 ->setName(pht('Edit Actions')));
+1 -1
src/applications/diffusion/controller/DiffusionRepositoryEditActivateController.php
··· 1 1 <?php 2 2 3 3 final class DiffusionRepositoryEditActivateController 4 - extends DiffusionController { 4 + extends DiffusionRepositoryEditController { 5 5 6 6 public function processRequest() { 7 7 $request = $this->getRequest();
+3 -2
src/applications/diffusion/controller/DiffusionRepositoryEditBasicController.php
··· 1 1 <?php 2 2 3 - final class DiffusionRepositoryEditBasicController extends DiffusionController { 3 + final class DiffusionRepositoryEditBasicController 4 + extends DiffusionRepositoryEditController { 4 5 5 6 public function processRequest() { 6 7 $request = $this->getRequest(); ··· 65 66 } 66 67 } 67 68 68 - $crumbs = $this->buildCrumbs(); 69 + $crumbs = $this->buildApplicationCrumbs(); 69 70 $crumbs->addCrumb( 70 71 id(new PhabricatorCrumbView()) 71 72 ->setName(pht('Edit Basics')));
+2 -3
src/applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php
··· 1 1 <?php 2 2 3 3 final class DiffusionRepositoryEditBranchesController 4 - extends DiffusionController { 4 + extends DiffusionRepositoryEditController { 5 5 6 6 public function processRequest() { 7 7 $request = $this->getRequest(); ··· 18 18 )) 19 19 ->withIDs(array($repository->getID())) 20 20 ->executeOne(); 21 - 22 21 if (!$repository) { 23 22 return new Aphront404Response(); 24 23 } ··· 76 75 77 76 $content = array(); 78 77 79 - $crumbs = $this->buildCrumbs(); 78 + $crumbs = $this->buildApplicationCrumbs(); 80 79 $crumbs->addCrumb( 81 80 id(new PhabricatorCrumbView()) 82 81 ->setName(pht('Edit Branches')));
+17 -439
src/applications/diffusion/controller/DiffusionRepositoryEditController.php
··· 1 1 <?php 2 2 3 - final class DiffusionRepositoryEditController extends DiffusionController { 4 - 5 - public function processRequest() { 6 - $request = $this->getRequest(); 7 - $viewer = $request->getUser(); 8 - $drequest = $this->diffusionRequest; 9 - $repository = $drequest->getRepository(); 10 - 11 - PhabricatorPolicyFilter::requireCapability( 12 - $viewer, 13 - $repository, 14 - PhabricatorPolicyCapability::CAN_EDIT); 15 - 16 - $is_svn = false; 17 - $is_git = false; 18 - $is_hg = false; 19 - switch ($repository->getVersionControlSystem()) { 20 - case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: 21 - $is_git = true; 22 - break; 23 - case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: 24 - $is_svn = true; 25 - break; 26 - case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: 27 - $is_hg = true; 28 - break; 29 - } 30 - 31 - $has_branches = ($is_git || $is_hg); 32 - 33 - $crumbs = $this->buildCrumbs(); 34 - $crumbs->addCrumb( 35 - id(new PhabricatorCrumbView()) 36 - ->setName(pht('Edit'))); 37 - 38 - $title = pht('Edit %s', $repository->getName()); 39 - 40 - $header = id(new PHUIHeaderView()) 41 - ->setHeader($title); 42 - if (!$repository->isTracked()) { 43 - $header->addTag( 44 - id(new PhabricatorTagView()) 45 - ->setType(PhabricatorTagView::TYPE_STATE) 46 - ->setName(pht('Inactive')) 47 - ->setBackgroundColor(PhabricatorTagView::COLOR_BLACK)); 48 - } 49 - 50 - $basic_actions = $this->buildBasicActions($repository); 51 - $basic_properties = 52 - $this->buildBasicProperties($repository, $basic_actions); 53 - 54 - $policy_actions = $this->buildPolicyActions($repository); 55 - $policy_properties = 56 - $this->buildPolicyProperties($repository, $policy_actions); 57 - 58 - $remote_properties = $this->buildRemoteProperties( 59 - $repository, 60 - $this->buildRemoteActions($repository)); 61 - 62 - $encoding_actions = $this->buildEncodingActions($repository); 63 - $encoding_properties = 64 - $this->buildEncodingProperties($repository, $encoding_actions); 65 - 66 - $branches_properties = null; 67 - if ($has_branches) { 68 - $branches_properties = $this->buildBranchesProperties( 69 - $repository, 70 - $this->buildBranchesActions($repository)); 71 - } 72 - 73 - $subversion_properties = null; 74 - if ($is_svn) { 75 - $subversion_properties = $this->buildSubversionProperties( 76 - $repository, 77 - $this->buildSubversionActions($repository)); 78 - } 79 - 80 - $actions_properties = $this->buildActionsProperties( 81 - $repository, 82 - $this->buildActionsActions($repository)); 83 - 84 - $xactions = id(new PhabricatorRepositoryTransactionQuery()) 85 - ->setViewer($viewer) 86 - ->withObjectPHIDs(array($repository->getPHID())) 87 - ->execute(); 88 - 89 - $engine = id(new PhabricatorMarkupEngine()) 90 - ->setViewer($viewer); 91 - foreach ($xactions as $xaction) { 92 - if ($xaction->getComment()) { 93 - $engine->addObject( 94 - $xaction->getComment(), 95 - PhabricatorApplicationTransactionComment::MARKUP_FIELD_COMMENT); 96 - } 97 - } 98 - $engine->process(); 99 - 100 - $xaction_view = id(new PhabricatorApplicationTransactionView()) 101 - ->setUser($viewer) 102 - ->setObjectPHID($repository->getPHID()) 103 - ->setTransactions($xactions) 104 - ->setMarkupEngine($engine); 105 - 106 - $obj_box = id(new PHUIObjectBoxView()) 107 - ->setHeader($header) 108 - ->addPropertyList($basic_properties) 109 - ->addPropertyList($policy_properties) 110 - ->addPropertyList($remote_properties) 111 - ->addPropertyList($encoding_properties); 112 - 113 - if ($branches_properties) { 114 - $obj_box->addPropertyList($branches_properties); 115 - } 116 - 117 - if ($subversion_properties) { 118 - $obj_box->addPropertyList($subversion_properties); 119 - } 120 - 121 - $obj_box->addPropertyList($actions_properties); 122 - 123 - return $this->buildApplicationPage( 124 - array( 125 - $crumbs, 126 - $obj_box, 127 - $xaction_view, 128 - ), 129 - array( 130 - 'title' => $title, 131 - 'device' => true, 132 - )); 133 - } 134 - 135 - private function buildBasicActions(PhabricatorRepository $repository) { 136 - $viewer = $this->getRequest()->getUser(); 137 - 138 - $view = id(new PhabricatorActionListView()) 139 - ->setObjectURI($this->getRequest()->getRequestURI()) 140 - ->setUser($viewer); 141 - 142 - $edit = id(new PhabricatorActionView()) 143 - ->setIcon('edit') 144 - ->setName(pht('Edit Basic Information')) 145 - ->setHref($this->getRepositoryControllerURI($repository, 'edit/basic/')); 146 - $view->addAction($edit); 147 - 148 - $activate = id(new PhabricatorActionView()) 149 - ->setHref( 150 - $this->getRepositoryControllerURI($repository, 'edit/activate/')) 151 - ->setWorkflow(true); 152 - 153 - if ($repository->isTracked()) { 154 - $activate 155 - ->setIcon('disable') 156 - ->setName(pht('Deactivate Repository')); 157 - } else { 158 - $activate 159 - ->setIcon('enable') 160 - ->setName(pht('Activate Repository')); 161 - } 162 - 163 - $view->addAction($activate); 164 - 165 - return $view; 166 - } 167 - 168 - private function buildBasicProperties( 169 - PhabricatorRepository $repository, 170 - PhabricatorActionListView $actions) { 171 - 172 - $viewer = $this->getRequest()->getUser(); 173 - 174 - $view = id(new PHUIPropertyListView()) 175 - ->setUser($viewer) 176 - ->setActionList($actions); 3 + abstract class DiffusionRepositoryEditController 4 + extends DiffusionController { 177 5 178 - $view->addProperty(pht('Name'), $repository->getName()); 179 - $view->addProperty(pht('ID'), $repository->getID()); 180 - $view->addProperty(pht('PHID'), $repository->getPHID()); 6 + public function buildApplicationCrumbs() { 7 + $crumbs = parent::buildApplicationCrumbs(); 181 8 182 - $type = PhabricatorRepositoryType::getNameForRepositoryType( 183 - $repository->getVersionControlSystem()); 184 - 185 - $view->addProperty(pht('Type'), $type); 186 - $view->addProperty(pht('Callsign'), $repository->getCallsign()); 187 - 188 - $description = $repository->getDetail('description'); 189 - $view->addSectionHeader(pht('Description')); 190 - if (!strlen($description)) { 191 - $description = phutil_tag('em', array(), pht('No description provided.')); 192 - } else { 193 - $description = PhabricatorMarkupEngine::renderOneObject( 194 - $repository, 195 - 'description', 196 - $viewer); 197 - } 198 - $view->addTextContent($description); 199 - 200 - return $view; 201 - } 202 - 203 - private function buildEncodingActions(PhabricatorRepository $repository) { 204 - $viewer = $this->getRequest()->getUser(); 205 - 206 - $view = id(new PhabricatorActionListView()) 207 - ->setObjectURI($this->getRequest()->getRequestURI()) 208 - ->setUser($viewer); 209 - 210 - $edit = id(new PhabricatorActionView()) 211 - ->setIcon('edit') 212 - ->setName(pht('Edit Text Encoding')) 213 - ->setHref( 214 - $this->getRepositoryControllerURI($repository, 'edit/encoding/')); 215 - $view->addAction($edit); 216 - 217 - return $view; 218 - } 219 - 220 - private function buildEncodingProperties( 221 - PhabricatorRepository $repository, 222 - PhabricatorActionListView $actions) { 223 - 224 - $viewer = $this->getRequest()->getUser(); 9 + if ($this->diffusionRequest) { 10 + $repository = $this->getDiffusionRequest()->getRepository(); 11 + $repo_uri = $this->getRepositoryControllerURI($repository, ''); 12 + $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/'); 225 13 226 - $view = id(new PHUIPropertyListView()) 227 - ->setUser($viewer) 228 - ->setActionList($actions) 229 - ->addSectionHeader(pht('Text Encoding')); 14 + $crumbs->addCrumb( 15 + id(new PhabricatorCrumbView()) 16 + ->setName('r'.$repository->getCallsign()) 17 + ->setHref($repo_uri)); 230 18 231 - $encoding = $repository->getDetail('encoding'); 232 - if (!$encoding) { 233 - $encoding = phutil_tag('em', array(), pht('Use Default (UTF-8)')); 19 + $crumbs->addCrumb( 20 + id(new PhabricatorCrumbView()) 21 + ->setName(pht('Edit')) 22 + ->setHref($edit_uri)); 234 23 } 235 24 236 - $view->addProperty(pht('Encoding'), $encoding); 237 - 238 - return $view; 239 - } 240 - 241 - private function buildPolicyActions(PhabricatorRepository $repository) { 242 - $viewer = $this->getRequest()->getUser(); 243 - 244 - $view = id(new PhabricatorActionListView()) 245 - ->setObjectURI($this->getRequest()->getRequestURI()) 246 - ->setUser($viewer); 247 - 248 - $edit = id(new PhabricatorActionView()) 249 - ->setIcon('edit') 250 - ->setName(pht('Edit Policies')) 251 - ->setHref( 252 - $this->getRepositoryControllerURI($repository, 'edit/policy/')); 253 - $view->addAction($edit); 254 - 255 - return $view; 256 - } 257 - 258 - private function buildPolicyProperties( 259 - PhabricatorRepository $repository, 260 - PhabricatorActionListView $actions) { 261 - 262 - $viewer = $this->getRequest()->getUser(); 263 - 264 - $view = id(new PHUIPropertyListView()) 265 - ->setUser($viewer) 266 - ->setActionList($actions) 267 - ->addSectionHeader(pht('Policies')); 268 - 269 - $descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions( 270 - $viewer, 271 - $repository); 272 - 273 - $view->addProperty( 274 - pht('Visible To'), 275 - $descriptions[PhabricatorPolicyCapability::CAN_VIEW]); 276 - 277 - $view->addProperty( 278 - pht('Editable By'), 279 - $descriptions[PhabricatorPolicyCapability::CAN_EDIT]); 280 - 281 - 282 - return $view; 283 - } 284 - 285 - private function buildBranchesActions(PhabricatorRepository $repository) { 286 - $viewer = $this->getRequest()->getUser(); 287 - 288 - $view = id(new PhabricatorActionListView()) 289 - ->setObjectURI($this->getRequest()->getRequestURI()) 290 - ->setUser($viewer); 291 - 292 - $edit = id(new PhabricatorActionView()) 293 - ->setIcon('edit') 294 - ->setName(pht('Edit Branches')) 295 - ->setHref( 296 - $this->getRepositoryControllerURI($repository, 'edit/branches/')); 297 - $view->addAction($edit); 298 - 299 - return $view; 300 - } 301 - 302 - private function buildBranchesProperties( 303 - PhabricatorRepository $repository, 304 - PhabricatorActionListView $actions) { 305 - 306 - $viewer = $this->getRequest()->getUser(); 307 - 308 - $view = id(new PHUIPropertyListView()) 309 - ->setUser($viewer) 310 - ->setActionList($actions) 311 - ->addSectionHeader(pht('Branches')); 312 - 313 - $default_branch = nonempty( 314 - $repository->getHumanReadableDetail('default-branch'), 315 - phutil_tag('em', array(), $repository->getDefaultBranch())); 316 - $view->addProperty(pht('Default Branch'), $default_branch); 317 - 318 - $track_only = nonempty( 319 - $repository->getHumanReadableDetail('branch-filter'), 320 - phutil_tag('em', array(), pht('Track All Branches'))); 321 - $view->addProperty(pht('Track Only'), $track_only); 322 - 323 - $autoclose_only = nonempty( 324 - $repository->getHumanReadableDetail('close-commits-filter'), 325 - phutil_tag('em', array(), pht('Autoclose On All Branches'))); 326 - $view->addProperty(pht('Autoclose Only'), $autoclose_only); 327 - 328 - return $view; 329 - } 330 - 331 - private function buildSubversionActions(PhabricatorRepository $repository) { 332 - $viewer = $this->getRequest()->getUser(); 333 - 334 - $view = id(new PhabricatorActionListView()) 335 - ->setObjectURI($this->getRequest()->getRequestURI()) 336 - ->setUser($viewer); 337 - 338 - $edit = id(new PhabricatorActionView()) 339 - ->setIcon('edit') 340 - ->setName(pht('Edit Subversion Info')) 341 - ->setHref( 342 - $this->getRepositoryControllerURI($repository, 'edit/subversion/')); 343 - $view->addAction($edit); 344 - 345 - return $view; 346 - } 347 - 348 - private function buildSubversionProperties( 349 - PhabricatorRepository $repository, 350 - PhabricatorActionListView $actions) { 351 - 352 - $viewer = $this->getRequest()->getUser(); 353 - 354 - $view = id(new PHUIPropertyListView()) 355 - ->setUser($viewer) 356 - ->setActionList($actions) 357 - ->addSectionHeader(pht('Subversion')); 358 - 359 - $svn_uuid = nonempty( 360 - $repository->getUUID(), 361 - phutil_tag('em', array(), pht('Not Configured'))); 362 - $view->addProperty(pht('Subversion UUID'), $svn_uuid); 363 - 364 - $svn_subpath = nonempty( 365 - $repository->getHumanReadableDetail('svn-subpath'), 366 - phutil_tag('em', array(), pht('Import Entire Repository'))); 367 - $view->addProperty(pht('Import Only'), $svn_subpath); 368 - 369 - return $view; 370 - } 371 - 372 - private function buildActionsActions(PhabricatorRepository $repository) { 373 - $viewer = $this->getRequest()->getUser(); 374 - 375 - $view = id(new PhabricatorActionListView()) 376 - ->setObjectURI($this->getRequest()->getRequestURI()) 377 - ->setUser($viewer); 378 - 379 - $edit = id(new PhabricatorActionView()) 380 - ->setIcon('edit') 381 - ->setName(pht('Edit Actions')) 382 - ->setHref( 383 - $this->getRepositoryControllerURI($repository, 'edit/actions/')); 384 - $view->addAction($edit); 385 - 386 - return $view; 387 - } 388 - 389 - private function buildActionsProperties( 390 - PhabricatorRepository $repository, 391 - PhabricatorActionListView $actions) { 392 - 393 - $viewer = $this->getRequest()->getUser(); 394 - 395 - $view = id(new PHUIPropertyListView()) 396 - ->setUser($viewer) 397 - ->setActionList($actions) 398 - ->addSectionHeader(pht('Actions')); 399 - 400 - $notify = $repository->getDetail('herald-disabled') 401 - ? pht('Off') 402 - : pht('On'); 403 - $notify = phutil_tag('em', array(), $notify); 404 - $view->addProperty(pht('Publish/Notify'), $notify); 405 - 406 - $autoclose = $repository->getDetail('disable-autoclose') 407 - ? pht('Off') 408 - : pht('On'); 409 - $autoclose = phutil_tag('em', array(), $autoclose); 410 - $view->addProperty(pht('Autoclose'), $autoclose); 411 - 412 - return $view; 413 - } 414 - 415 - private function buildRemoteActions(PhabricatorRepository $repository) { 416 - $viewer = $this->getRequest()->getUser(); 417 - 418 - $view = id(new PhabricatorActionListView()) 419 - ->setObjectURI($this->getRequest()->getRequestURI()) 420 - ->setUser($viewer); 421 - 422 - $edit = id(new PhabricatorActionView()) 423 - ->setIcon('edit') 424 - ->setName(pht('Edit Remote')) 425 - ->setHref( 426 - $this->getRepositoryControllerURI($repository, 'edit/remote/')); 427 - $view->addAction($edit); 428 - 429 - return $view; 430 - } 431 - 432 - private function buildRemoteProperties( 433 - PhabricatorRepository $repository, 434 - PhabricatorActionListView $actions) { 435 - 436 - $viewer = $this->getRequest()->getUser(); 437 - 438 - $view = id(new PHUIPropertyListView()) 439 - ->setUser($viewer) 440 - ->setActionList($actions) 441 - ->addSectionHeader(pht('Remote')); 442 - 443 - $view->addProperty( 444 - pht('Remote URI'), 445 - $repository->getDetail('remote-uri')); 446 - 447 - return $view; 25 + return $crumbs; 448 26 } 449 27 450 28 }
+2 -2
src/applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php
··· 1 1 <?php 2 2 3 3 final class DiffusionRepositoryEditEncodingController 4 - extends DiffusionController { 4 + extends DiffusionRepositoryEditController { 5 5 6 6 public function processRequest() { 7 7 $request = $this->getRequest(); ··· 56 56 } 57 57 } 58 58 59 - $crumbs = $this->buildCrumbs(); 59 + $crumbs = $this->buildApplicationCrumbs(); 60 60 $crumbs->addCrumb( 61 61 id(new PhabricatorCrumbView()) 62 62 ->setName(pht('Edit Encoding')));
+448
src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php
··· 1 + <?php 2 + 3 + final class DiffusionRepositoryEditMainController 4 + extends DiffusionRepositoryEditController { 5 + 6 + public function processRequest() { 7 + $request = $this->getRequest(); 8 + $viewer = $request->getUser(); 9 + $drequest = $this->diffusionRequest; 10 + $repository = $drequest->getRepository(); 11 + 12 + PhabricatorPolicyFilter::requireCapability( 13 + $viewer, 14 + $repository, 15 + PhabricatorPolicyCapability::CAN_EDIT); 16 + 17 + $is_svn = false; 18 + $is_git = false; 19 + $is_hg = false; 20 + switch ($repository->getVersionControlSystem()) { 21 + case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: 22 + $is_git = true; 23 + break; 24 + case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: 25 + $is_svn = true; 26 + break; 27 + case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: 28 + $is_hg = true; 29 + break; 30 + } 31 + 32 + $has_branches = ($is_git || $is_hg); 33 + 34 + $crumbs = $this->buildApplicationCrumbs(); 35 + 36 + $title = pht('Edit %s', $repository->getName()); 37 + 38 + $header = id(new PHUIHeaderView()) 39 + ->setHeader($title); 40 + if (!$repository->isTracked()) { 41 + $header->addTag( 42 + id(new PhabricatorTagView()) 43 + ->setType(PhabricatorTagView::TYPE_STATE) 44 + ->setName(pht('Inactive')) 45 + ->setBackgroundColor(PhabricatorTagView::COLOR_BLACK)); 46 + } 47 + 48 + $basic_actions = $this->buildBasicActions($repository); 49 + $basic_properties = 50 + $this->buildBasicProperties($repository, $basic_actions); 51 + 52 + $policy_actions = $this->buildPolicyActions($repository); 53 + $policy_properties = 54 + $this->buildPolicyProperties($repository, $policy_actions); 55 + 56 + $remote_properties = $this->buildRemoteProperties( 57 + $repository, 58 + $this->buildRemoteActions($repository)); 59 + 60 + $encoding_actions = $this->buildEncodingActions($repository); 61 + $encoding_properties = 62 + $this->buildEncodingProperties($repository, $encoding_actions); 63 + 64 + $branches_properties = null; 65 + if ($has_branches) { 66 + $branches_properties = $this->buildBranchesProperties( 67 + $repository, 68 + $this->buildBranchesActions($repository)); 69 + } 70 + 71 + $subversion_properties = null; 72 + if ($is_svn) { 73 + $subversion_properties = $this->buildSubversionProperties( 74 + $repository, 75 + $this->buildSubversionActions($repository)); 76 + } 77 + 78 + $actions_properties = $this->buildActionsProperties( 79 + $repository, 80 + $this->buildActionsActions($repository)); 81 + 82 + $xactions = id(new PhabricatorRepositoryTransactionQuery()) 83 + ->setViewer($viewer) 84 + ->withObjectPHIDs(array($repository->getPHID())) 85 + ->execute(); 86 + 87 + $engine = id(new PhabricatorMarkupEngine()) 88 + ->setViewer($viewer); 89 + foreach ($xactions as $xaction) { 90 + if ($xaction->getComment()) { 91 + $engine->addObject( 92 + $xaction->getComment(), 93 + PhabricatorApplicationTransactionComment::MARKUP_FIELD_COMMENT); 94 + } 95 + } 96 + $engine->process(); 97 + 98 + $xaction_view = id(new PhabricatorApplicationTransactionView()) 99 + ->setUser($viewer) 100 + ->setObjectPHID($repository->getPHID()) 101 + ->setTransactions($xactions) 102 + ->setMarkupEngine($engine); 103 + 104 + $obj_box = id(new PHUIObjectBoxView()) 105 + ->setHeader($header) 106 + ->addPropertyList($basic_properties) 107 + ->addPropertyList($policy_properties) 108 + ->addPropertyList($remote_properties) 109 + ->addPropertyList($encoding_properties); 110 + 111 + if ($branches_properties) { 112 + $obj_box->addPropertyList($branches_properties); 113 + } 114 + 115 + if ($subversion_properties) { 116 + $obj_box->addPropertyList($subversion_properties); 117 + } 118 + 119 + $obj_box->addPropertyList($actions_properties); 120 + 121 + return $this->buildApplicationPage( 122 + array( 123 + $crumbs, 124 + $obj_box, 125 + $xaction_view, 126 + ), 127 + array( 128 + 'title' => $title, 129 + 'device' => true, 130 + )); 131 + } 132 + 133 + private function buildBasicActions(PhabricatorRepository $repository) { 134 + $viewer = $this->getRequest()->getUser(); 135 + 136 + $view = id(new PhabricatorActionListView()) 137 + ->setObjectURI($this->getRequest()->getRequestURI()) 138 + ->setUser($viewer); 139 + 140 + $edit = id(new PhabricatorActionView()) 141 + ->setIcon('edit') 142 + ->setName(pht('Edit Basic Information')) 143 + ->setHref($this->getRepositoryControllerURI($repository, 'edit/basic/')); 144 + $view->addAction($edit); 145 + 146 + $activate = id(new PhabricatorActionView()) 147 + ->setHref( 148 + $this->getRepositoryControllerURI($repository, 'edit/activate/')) 149 + ->setWorkflow(true); 150 + 151 + if ($repository->isTracked()) { 152 + $activate 153 + ->setIcon('disable') 154 + ->setName(pht('Deactivate Repository')); 155 + } else { 156 + $activate 157 + ->setIcon('enable') 158 + ->setName(pht('Activate Repository')); 159 + } 160 + 161 + $view->addAction($activate); 162 + 163 + return $view; 164 + } 165 + 166 + private function buildBasicProperties( 167 + PhabricatorRepository $repository, 168 + PhabricatorActionListView $actions) { 169 + 170 + $viewer = $this->getRequest()->getUser(); 171 + 172 + $view = id(new PHUIPropertyListView()) 173 + ->setUser($viewer) 174 + ->setActionList($actions); 175 + 176 + $view->addProperty(pht('Name'), $repository->getName()); 177 + $view->addProperty(pht('ID'), $repository->getID()); 178 + $view->addProperty(pht('PHID'), $repository->getPHID()); 179 + 180 + $type = PhabricatorRepositoryType::getNameForRepositoryType( 181 + $repository->getVersionControlSystem()); 182 + 183 + $view->addProperty(pht('Type'), $type); 184 + $view->addProperty(pht('Callsign'), $repository->getCallsign()); 185 + 186 + $description = $repository->getDetail('description'); 187 + $view->addSectionHeader(pht('Description')); 188 + if (!strlen($description)) { 189 + $description = phutil_tag('em', array(), pht('No description provided.')); 190 + } else { 191 + $description = PhabricatorMarkupEngine::renderOneObject( 192 + $repository, 193 + 'description', 194 + $viewer); 195 + } 196 + $view->addTextContent($description); 197 + 198 + return $view; 199 + } 200 + 201 + private function buildEncodingActions(PhabricatorRepository $repository) { 202 + $viewer = $this->getRequest()->getUser(); 203 + 204 + $view = id(new PhabricatorActionListView()) 205 + ->setObjectURI($this->getRequest()->getRequestURI()) 206 + ->setUser($viewer); 207 + 208 + $edit = id(new PhabricatorActionView()) 209 + ->setIcon('edit') 210 + ->setName(pht('Edit Text Encoding')) 211 + ->setHref( 212 + $this->getRepositoryControllerURI($repository, 'edit/encoding/')); 213 + $view->addAction($edit); 214 + 215 + return $view; 216 + } 217 + 218 + private function buildEncodingProperties( 219 + PhabricatorRepository $repository, 220 + PhabricatorActionListView $actions) { 221 + 222 + $viewer = $this->getRequest()->getUser(); 223 + 224 + $view = id(new PHUIPropertyListView()) 225 + ->setUser($viewer) 226 + ->setActionList($actions) 227 + ->addSectionHeader(pht('Text Encoding')); 228 + 229 + $encoding = $repository->getDetail('encoding'); 230 + if (!$encoding) { 231 + $encoding = phutil_tag('em', array(), pht('Use Default (UTF-8)')); 232 + } 233 + 234 + $view->addProperty(pht('Encoding'), $encoding); 235 + 236 + return $view; 237 + } 238 + 239 + private function buildPolicyActions(PhabricatorRepository $repository) { 240 + $viewer = $this->getRequest()->getUser(); 241 + 242 + $view = id(new PhabricatorActionListView()) 243 + ->setObjectURI($this->getRequest()->getRequestURI()) 244 + ->setUser($viewer); 245 + 246 + $edit = id(new PhabricatorActionView()) 247 + ->setIcon('edit') 248 + ->setName(pht('Edit Policies')) 249 + ->setHref( 250 + $this->getRepositoryControllerURI($repository, 'edit/policy/')); 251 + $view->addAction($edit); 252 + 253 + return $view; 254 + } 255 + 256 + private function buildPolicyProperties( 257 + PhabricatorRepository $repository, 258 + PhabricatorActionListView $actions) { 259 + 260 + $viewer = $this->getRequest()->getUser(); 261 + 262 + $view = id(new PHUIPropertyListView()) 263 + ->setUser($viewer) 264 + ->setActionList($actions) 265 + ->addSectionHeader(pht('Policies')); 266 + 267 + $descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions( 268 + $viewer, 269 + $repository); 270 + 271 + $view->addProperty( 272 + pht('Visible To'), 273 + $descriptions[PhabricatorPolicyCapability::CAN_VIEW]); 274 + 275 + $view->addProperty( 276 + pht('Editable By'), 277 + $descriptions[PhabricatorPolicyCapability::CAN_EDIT]); 278 + 279 + 280 + return $view; 281 + } 282 + 283 + private function buildBranchesActions(PhabricatorRepository $repository) { 284 + $viewer = $this->getRequest()->getUser(); 285 + 286 + $view = id(new PhabricatorActionListView()) 287 + ->setObjectURI($this->getRequest()->getRequestURI()) 288 + ->setUser($viewer); 289 + 290 + $edit = id(new PhabricatorActionView()) 291 + ->setIcon('edit') 292 + ->setName(pht('Edit Branches')) 293 + ->setHref( 294 + $this->getRepositoryControllerURI($repository, 'edit/branches/')); 295 + $view->addAction($edit); 296 + 297 + return $view; 298 + } 299 + 300 + private function buildBranchesProperties( 301 + PhabricatorRepository $repository, 302 + PhabricatorActionListView $actions) { 303 + 304 + $viewer = $this->getRequest()->getUser(); 305 + 306 + $view = id(new PHUIPropertyListView()) 307 + ->setUser($viewer) 308 + ->setActionList($actions) 309 + ->addSectionHeader(pht('Branches')); 310 + 311 + $default_branch = nonempty( 312 + $repository->getHumanReadableDetail('default-branch'), 313 + phutil_tag('em', array(), $repository->getDefaultBranch())); 314 + $view->addProperty(pht('Default Branch'), $default_branch); 315 + 316 + $track_only = nonempty( 317 + $repository->getHumanReadableDetail('branch-filter'), 318 + phutil_tag('em', array(), pht('Track All Branches'))); 319 + $view->addProperty(pht('Track Only'), $track_only); 320 + 321 + $autoclose_only = nonempty( 322 + $repository->getHumanReadableDetail('close-commits-filter'), 323 + phutil_tag('em', array(), pht('Autoclose On All Branches'))); 324 + $view->addProperty(pht('Autoclose Only'), $autoclose_only); 325 + 326 + return $view; 327 + } 328 + 329 + private function buildSubversionActions(PhabricatorRepository $repository) { 330 + $viewer = $this->getRequest()->getUser(); 331 + 332 + $view = id(new PhabricatorActionListView()) 333 + ->setObjectURI($this->getRequest()->getRequestURI()) 334 + ->setUser($viewer); 335 + 336 + $edit = id(new PhabricatorActionView()) 337 + ->setIcon('edit') 338 + ->setName(pht('Edit Subversion Info')) 339 + ->setHref( 340 + $this->getRepositoryControllerURI($repository, 'edit/subversion/')); 341 + $view->addAction($edit); 342 + 343 + return $view; 344 + } 345 + 346 + private function buildSubversionProperties( 347 + PhabricatorRepository $repository, 348 + PhabricatorActionListView $actions) { 349 + 350 + $viewer = $this->getRequest()->getUser(); 351 + 352 + $view = id(new PHUIPropertyListView()) 353 + ->setUser($viewer) 354 + ->setActionList($actions) 355 + ->addSectionHeader(pht('Subversion')); 356 + 357 + $svn_uuid = nonempty( 358 + $repository->getUUID(), 359 + phutil_tag('em', array(), pht('Not Configured'))); 360 + $view->addProperty(pht('Subversion UUID'), $svn_uuid); 361 + 362 + $svn_subpath = nonempty( 363 + $repository->getHumanReadableDetail('svn-subpath'), 364 + phutil_tag('em', array(), pht('Import Entire Repository'))); 365 + $view->addProperty(pht('Import Only'), $svn_subpath); 366 + 367 + return $view; 368 + } 369 + 370 + private function buildActionsActions(PhabricatorRepository $repository) { 371 + $viewer = $this->getRequest()->getUser(); 372 + 373 + $view = id(new PhabricatorActionListView()) 374 + ->setObjectURI($this->getRequest()->getRequestURI()) 375 + ->setUser($viewer); 376 + 377 + $edit = id(new PhabricatorActionView()) 378 + ->setIcon('edit') 379 + ->setName(pht('Edit Actions')) 380 + ->setHref( 381 + $this->getRepositoryControllerURI($repository, 'edit/actions/')); 382 + $view->addAction($edit); 383 + 384 + return $view; 385 + } 386 + 387 + private function buildActionsProperties( 388 + PhabricatorRepository $repository, 389 + PhabricatorActionListView $actions) { 390 + 391 + $viewer = $this->getRequest()->getUser(); 392 + 393 + $view = id(new PHUIPropertyListView()) 394 + ->setUser($viewer) 395 + ->setActionList($actions) 396 + ->addSectionHeader(pht('Actions')); 397 + 398 + $notify = $repository->getDetail('herald-disabled') 399 + ? pht('Off') 400 + : pht('On'); 401 + $notify = phutil_tag('em', array(), $notify); 402 + $view->addProperty(pht('Publish/Notify'), $notify); 403 + 404 + $autoclose = $repository->getDetail('disable-autoclose') 405 + ? pht('Off') 406 + : pht('On'); 407 + $autoclose = phutil_tag('em', array(), $autoclose); 408 + $view->addProperty(pht('Autoclose'), $autoclose); 409 + 410 + return $view; 411 + } 412 + 413 + private function buildRemoteActions(PhabricatorRepository $repository) { 414 + $viewer = $this->getRequest()->getUser(); 415 + 416 + $view = id(new PhabricatorActionListView()) 417 + ->setObjectURI($this->getRequest()->getRequestURI()) 418 + ->setUser($viewer); 419 + 420 + $edit = id(new PhabricatorActionView()) 421 + ->setIcon('edit') 422 + ->setName(pht('Edit Remote')) 423 + ->setHref( 424 + $this->getRepositoryControllerURI($repository, 'edit/remote/')); 425 + $view->addAction($edit); 426 + 427 + return $view; 428 + } 429 + 430 + private function buildRemoteProperties( 431 + PhabricatorRepository $repository, 432 + PhabricatorActionListView $actions) { 433 + 434 + $viewer = $this->getRequest()->getUser(); 435 + 436 + $view = id(new PHUIPropertyListView()) 437 + ->setUser($viewer) 438 + ->setActionList($actions) 439 + ->addSectionHeader(pht('Remote')); 440 + 441 + $view->addProperty( 442 + pht('Remote URI'), 443 + $repository->getDetail('remote-uri')); 444 + 445 + return $view; 446 + } 447 + 448 + }
+2 -2
src/applications/diffusion/controller/DiffusionRepositoryEditPolicyController.php
··· 1 1 <?php 2 2 3 3 final class DiffusionRepositoryEditPolicyController 4 - extends DiffusionController { 4 + extends DiffusionRepositoryEditController { 5 5 6 6 public function processRequest() { 7 7 $request = $this->getRequest(); ··· 57 57 58 58 $content = array(); 59 59 60 - $crumbs = $this->buildCrumbs(); 60 + $crumbs = $this->buildApplicationCrumbs(); 61 61 $crumbs->addCrumb( 62 62 id(new PhabricatorCrumbView()) 63 63 ->setName(pht('Edit Policies')));
+2 -2
src/applications/diffusion/controller/DiffusionRepositoryEditSubversionController.php
··· 1 1 <?php 2 2 3 3 final class DiffusionRepositoryEditSubversionController 4 - extends DiffusionController { 4 + extends DiffusionRepositoryEditController { 5 5 6 6 public function processRequest() { 7 7 $request = $this->getRequest(); ··· 69 69 70 70 $content = array(); 71 71 72 - $crumbs = $this->buildCrumbs(); 72 + $crumbs = $this->buildApplicationCrumbs(); 73 73 $crumbs->addCrumb( 74 74 id(new PhabricatorCrumbView()) 75 75 ->setName(pht('Edit Subversion Info')));