@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 EditController / ManageController / EditproController Diffusion hierarchy

Summary: Ref T10923. This cleans up the remaining "pro" mess left by the cutover.

Test Plan: Viewed, managed, edited a repository.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T10923

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

+218 -227
+8 -8
src/__phutil_library_map__.php
··· 762 762 'DiffusionRepositoryEditDeleteController' => 'applications/diffusion/controller/DiffusionRepositoryEditDeleteController.php', 763 763 'DiffusionRepositoryEditEngine' => 'applications/diffusion/editor/DiffusionRepositoryEditEngine.php', 764 764 'DiffusionRepositoryEditUpdateController' => 'applications/diffusion/controller/DiffusionRepositoryEditUpdateController.php', 765 - 'DiffusionRepositoryEditproController' => 'applications/diffusion/controller/DiffusionRepositoryEditproController.php', 766 765 'DiffusionRepositoryHistoryManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryHistoryManagementPanel.php', 767 766 'DiffusionRepositoryListController' => 'applications/diffusion/controller/DiffusionRepositoryListController.php', 768 767 'DiffusionRepositoryManageController' => 'applications/diffusion/controller/DiffusionRepositoryManageController.php', 768 + 'DiffusionRepositoryManagePanelsController' => 'applications/diffusion/controller/DiffusionRepositoryManagePanelsController.php', 769 769 'DiffusionRepositoryManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryManagementPanel.php', 770 770 'DiffusionRepositoryPath' => 'applications/diffusion/data/DiffusionRepositoryPath.php', 771 771 'DiffusionRepositoryPoliciesManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryPoliciesManagementPanel.php', ··· 4975 4975 'DiffusionRepositoryDatasource' => 'PhabricatorTypeaheadDatasource', 4976 4976 'DiffusionRepositoryDefaultController' => 'DiffusionController', 4977 4977 'DiffusionRepositoryDocumentationManagementPanel' => 'DiffusionRepositoryManagementPanel', 4978 - 'DiffusionRepositoryEditActivateController' => 'DiffusionRepositoryEditController', 4978 + 'DiffusionRepositoryEditActivateController' => 'DiffusionRepositoryManageController', 4979 4979 'DiffusionRepositoryEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', 4980 - 'DiffusionRepositoryEditController' => 'DiffusionController', 4981 - 'DiffusionRepositoryEditDangerousController' => 'DiffusionRepositoryEditController', 4982 - 'DiffusionRepositoryEditDeleteController' => 'DiffusionRepositoryEditController', 4980 + 'DiffusionRepositoryEditController' => 'DiffusionRepositoryManageController', 4981 + 'DiffusionRepositoryEditDangerousController' => 'DiffusionRepositoryManageController', 4982 + 'DiffusionRepositoryEditDeleteController' => 'DiffusionRepositoryManageController', 4983 4983 'DiffusionRepositoryEditEngine' => 'PhabricatorEditEngine', 4984 - 'DiffusionRepositoryEditUpdateController' => 'DiffusionRepositoryEditController', 4985 - 'DiffusionRepositoryEditproController' => 'DiffusionRepositoryEditController', 4984 + 'DiffusionRepositoryEditUpdateController' => 'DiffusionRepositoryManageController', 4986 4985 'DiffusionRepositoryHistoryManagementPanel' => 'DiffusionRepositoryManagementPanel', 4987 4986 'DiffusionRepositoryListController' => 'DiffusionController', 4988 4987 'DiffusionRepositoryManageController' => 'DiffusionController', 4988 + 'DiffusionRepositoryManagePanelsController' => 'DiffusionRepositoryManageController', 4989 4989 'DiffusionRepositoryManagementPanel' => 'Phobject', 4990 4990 'DiffusionRepositoryPath' => 'Phobject', 4991 4991 'DiffusionRepositoryPoliciesManagementPanel' => 'DiffusionRepositoryManagementPanel', ··· 4997 4997 'DiffusionRepositoryStorageManagementPanel' => 'DiffusionRepositoryManagementPanel', 4998 4998 'DiffusionRepositorySymbolsManagementPanel' => 'DiffusionRepositoryManagementPanel', 4999 4999 'DiffusionRepositoryTag' => 'Phobject', 5000 - 'DiffusionRepositoryTestAutomationController' => 'DiffusionRepositoryEditController', 5000 + 'DiffusionRepositoryTestAutomationController' => 'DiffusionRepositoryManageController', 5001 5001 'DiffusionRepositoryURICredentialController' => 'DiffusionController', 5002 5002 'DiffusionRepositoryURIDisableController' => 'DiffusionController', 5003 5003 'DiffusionRepositoryURIEditController' => 'DiffusionController',
+2 -2
src/applications/diffusion/application/PhabricatorDiffusionApplication.php
··· 58 58 $this->getQueryRoutePattern() 59 59 => 'DiffusionRepositoryListController', 60 60 $this->getEditRoutePattern('edit/') => 61 - 'DiffusionRepositoryEditproController', 61 + 'DiffusionRepositoryEditController', 62 62 'pushlog/' => array( 63 63 '(?:query/(?P<queryKey>[^/]+)/)?' => 'DiffusionPushLogListController', 64 64 'view/(?P<id>\d+)/' => 'DiffusionPushEventViewController', ··· 87 87 'commit/(?P<commit>[a-z0-9]+)/edit/' 88 88 => 'DiffusionCommitEditController', 89 89 'manage/(?:(?P<panel>[^/]+)/)?' 90 - => 'DiffusionRepositoryManageController', 90 + => 'DiffusionRepositoryManagePanelsController', 91 91 'uri/' => array( 92 92 'view/(?P<id>[0-9]\d*)/' => 'DiffusionRepositoryURIViewController', 93 93 'disable/(?P<id>[0-9]\d*)/'
+1 -1
src/applications/diffusion/controller/DiffusionRepositoryEditActivateController.php
··· 1 1 <?php 2 2 3 3 final class DiffusionRepositoryEditActivateController 4 - extends DiffusionRepositoryEditController { 4 + extends DiffusionRepositoryManageController { 5 5 6 6 public function handleRequest(AphrontRequest $request) { 7 7 $response = $this->loadDiffusionContextForEdit();
+57 -16
src/applications/diffusion/controller/DiffusionRepositoryEditController.php
··· 1 1 <?php 2 2 3 - abstract class DiffusionRepositoryEditController 4 - extends DiffusionController { 3 + final class DiffusionRepositoryEditController 4 + extends DiffusionRepositoryManageController { 5 5 6 - protected function buildApplicationCrumbs($is_main = false) { 7 - $crumbs = parent::buildApplicationCrumbs(); 6 + public function handleRequest(AphrontRequest $request) { 7 + $engine = id(new DiffusionRepositoryEditEngine()) 8 + ->setController($this); 8 9 9 - if ($this->hasDiffusionRequest()) { 10 - $drequest = $this->getDiffusionRequest(); 11 - $repository = $drequest->getRepository(); 12 - $repo_uri = $repository->getURI(); 13 - $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/'); 10 + $id = $request->getURIData('id'); 11 + if (!$id) { 12 + $this->requireApplicationCapability( 13 + DiffusionCreateRepositoriesCapability::CAPABILITY); 14 14 15 - $crumbs->addTextCrumb($repository->getDisplayname(), $repo_uri); 16 - 17 - if ($is_main) { 18 - $crumbs->addTextCrumb(pht('Edit Repository')); 19 - } else { 20 - $crumbs->addTextCrumb(pht('Edit'), $edit_uri); 15 + $vcs = $request->getStr('vcs'); 16 + $vcs_types = PhabricatorRepositoryType::getRepositoryTypeMap(); 17 + if (empty($vcs_types[$vcs])) { 18 + return $this->buildVCSTypeResponse(); 21 19 } 20 + 21 + $engine 22 + ->addContextParameter('vcs', $vcs) 23 + ->setVersionControlSystem($vcs); 22 24 } 25 + 26 + return $engine->buildResponse(); 27 + } 28 + 29 + private function buildVCSTypeResponse() { 30 + $vcs_types = PhabricatorRepositoryType::getRepositoryTypeMap(); 31 + 32 + $request = $this->getRequest(); 33 + $viewer = $this->getViewer(); 34 + 35 + $crumbs = $this->buildApplicationCrumbs(); 36 + $crumbs->addTextCrumb(pht('Create Repository')); 23 37 $crumbs->setBorder(true); 24 38 25 - return $crumbs; 39 + $title = pht('Choose Repository Type'); 40 + $header = id(new PHUIHeaderView()) 41 + ->setHeader(pht('Create Repository')) 42 + ->setHeaderIcon('fa-plus-square'); 43 + 44 + $layout = id(new AphrontMultiColumnView()) 45 + ->setFluidLayout(true); 46 + 47 + $create_uri = $request->getRequestURI(); 48 + 49 + foreach ($vcs_types as $vcs_key => $vcs_type) { 50 + $action = id(new PHUIActionPanelView()) 51 + ->setIcon(idx($vcs_type, 'icon')) 52 + ->setHeader(idx($vcs_type, 'create.header')) 53 + ->setHref($create_uri->alter('vcs', $vcs_key)) 54 + ->setSubheader(idx($vcs_type, 'create.subheader')); 55 + 56 + $layout->addColumn($action); 57 + } 58 + 59 + $view = id(new PHUITwoColumnView()) 60 + ->setHeader($header) 61 + ->setFooter($layout); 62 + 63 + return $this->newPage() 64 + ->setTitle($title) 65 + ->setCrumbs($crumbs) 66 + ->appendChild($view); 26 67 } 27 68 28 69 }
+1 -1
src/applications/diffusion/controller/DiffusionRepositoryEditDangerousController.php
··· 1 1 <?php 2 2 3 3 final class DiffusionRepositoryEditDangerousController 4 - extends DiffusionRepositoryEditController { 4 + extends DiffusionRepositoryManageController { 5 5 6 6 public function handleRequest(AphrontRequest $request) { 7 7 $response = $this->loadDiffusionContextForEdit();
+1 -1
src/applications/diffusion/controller/DiffusionRepositoryEditDeleteController.php
··· 1 1 <?php 2 2 3 3 final class DiffusionRepositoryEditDeleteController 4 - extends DiffusionRepositoryEditController { 4 + extends DiffusionRepositoryManageController { 5 5 6 6 public function handleRequest(AphrontRequest $request) { 7 7 $response = $this->loadDiffusionContextForEdit();
+1 -1
src/applications/diffusion/controller/DiffusionRepositoryEditUpdateController.php
··· 1 1 <?php 2 2 3 3 final class DiffusionRepositoryEditUpdateController 4 - extends DiffusionRepositoryEditController { 4 + extends DiffusionRepositoryManageController { 5 5 6 6 public function handleRequest(AphrontRequest $request) { 7 7 $response = $this->loadDiffusionContextForEdit();
-69
src/applications/diffusion/controller/DiffusionRepositoryEditproController.php
··· 1 - <?php 2 - 3 - final class DiffusionRepositoryEditproController 4 - extends DiffusionRepositoryEditController { 5 - 6 - public function handleRequest(AphrontRequest $request) { 7 - $engine = id(new DiffusionRepositoryEditEngine()) 8 - ->setController($this); 9 - 10 - $id = $request->getURIData('id'); 11 - if (!$id) { 12 - $this->requireApplicationCapability( 13 - DiffusionCreateRepositoriesCapability::CAPABILITY); 14 - 15 - $vcs = $request->getStr('vcs'); 16 - $vcs_types = PhabricatorRepositoryType::getRepositoryTypeMap(); 17 - if (empty($vcs_types[$vcs])) { 18 - return $this->buildVCSTypeResponse(); 19 - } 20 - 21 - $engine 22 - ->addContextParameter('vcs', $vcs) 23 - ->setVersionControlSystem($vcs); 24 - } 25 - 26 - return $engine->buildResponse(); 27 - } 28 - 29 - private function buildVCSTypeResponse() { 30 - $vcs_types = PhabricatorRepositoryType::getRepositoryTypeMap(); 31 - 32 - $request = $this->getRequest(); 33 - $viewer = $this->getViewer(); 34 - 35 - $crumbs = $this->buildApplicationCrumbs(); 36 - $crumbs->addTextCrumb(pht('Create Repository')); 37 - $crumbs->setBorder(true); 38 - 39 - $title = pht('Choose Repository Type'); 40 - $header = id(new PHUIHeaderView()) 41 - ->setHeader(pht('Create Repository')) 42 - ->setHeaderIcon('fa-plus-square'); 43 - 44 - $layout = id(new AphrontMultiColumnView()) 45 - ->setFluidLayout(true); 46 - 47 - $create_uri = $request->getRequestURI(); 48 - 49 - foreach ($vcs_types as $vcs_key => $vcs_type) { 50 - $action = id(new PHUIActionPanelView()) 51 - ->setIcon(idx($vcs_type, 'icon')) 52 - ->setHeader(idx($vcs_type, 'create.header')) 53 - ->setHref($create_uri->alter('vcs', $vcs_key)) 54 - ->setSubheader(idx($vcs_type, 'create.subheader')); 55 - 56 - $layout->addColumn($action); 57 - } 58 - 59 - $view = id(new PHUITwoColumnView()) 60 - ->setHeader($header) 61 - ->setFooter($layout); 62 - 63 - return $this->newPage() 64 - ->setTitle($title) 65 - ->setCrumbs($crumbs) 66 - ->appendChild($view); 67 - } 68 - 69 - }
+13 -127
src/applications/diffusion/controller/DiffusionRepositoryManageController.php
··· 1 1 <?php 2 2 3 - final class DiffusionRepositoryManageController 3 + abstract class DiffusionRepositoryManageController 4 4 extends DiffusionController { 5 5 6 - private $navigation; 7 - 8 - public function buildApplicationMenu() { 9 - // TODO: This is messy for now; the mobile menu should be set automatically 10 - // when the body content is a two-column view with navigation. 11 - if ($this->navigation) { 12 - return $this->navigation->getMenu(); 13 - } 14 - return parent::buildApplicationMenu(); 15 - } 16 - 17 - 18 - public function handleRequest(AphrontRequest $request) { 19 - $response = $this->loadDiffusionContext(); 20 - if ($response) { 21 - return $response; 22 - } 23 - 24 - $viewer = $this->getViewer(); 25 - $drequest = $this->getDiffusionRequest(); 26 - $repository = $drequest->getRepository(); 27 - 28 - $panels = DiffusionRepositoryManagementPanel::getAllPanels(); 29 - 30 - foreach ($panels as $panel) { 31 - $panel 32 - ->setViewer($viewer) 33 - ->setRepository($repository) 34 - ->setController($this); 35 - } 36 - 37 - $selected = $request->getURIData('panel'); 38 - if (!strlen($selected)) { 39 - $selected = head_key($panels); 40 - } 41 - 42 - if (empty($panels[$selected])) { 43 - return new Aphront404Response(); 44 - } 45 - 46 - $nav = $this->renderSideNav($repository, $panels, $selected); 47 - $this->navigation = $nav; 48 - 49 - $panel = $panels[$selected]; 50 - 51 - $content = $panel->buildManagementPanelContent(); 52 - 53 - $title = array( 54 - $panel->getManagementPanelLabel(), 55 - $repository->getDisplayName(), 56 - ); 57 - 58 - $crumbs = $this->buildApplicationCrumbs(); 59 - $crumbs->addTextCrumb( 60 - $repository->getDisplayName(), 61 - $repository->getURI()); 62 - $crumbs->addTextCrumb( 63 - pht('Manage'), 64 - $repository->getPathURI('manage/')); 65 - $crumbs->addTextCrumb($panel->getManagementPanelLabel()); 66 - 67 - $header_text = pht( 68 - '%s: %s', 69 - $repository->getDisplayName(), 70 - $panel->getManagementPanelLabel()); 71 - 72 - $header = id(new PHUIHeaderView()) 73 - ->setHeader($header_text) 74 - ->setHeaderIcon('fa-pencil'); 75 - if ($repository->isTracked()) { 76 - $header->setStatus('fa-check', 'bluegrey', pht('Active')); 77 - } else { 78 - $header->setStatus('fa-ban', 'dark', pht('Inactive')); 79 - } 80 - 81 - $view = id(new PHUITwoColumnView()) 82 - ->setHeader($header) 83 - ->setNavigation($nav) 84 - ->setMainColumn($content); 85 - 86 - $curtain = $panel->buildManagementPanelCurtain(); 87 - if ($curtain) { 88 - $view->setCurtain($curtain); 89 - } 90 - 91 - return $this->newPage() 92 - ->setTitle($title) 93 - ->setCrumbs($crumbs) 94 - ->appendChild($view); 95 - } 96 - 97 - private function renderSideNav( 98 - PhabricatorRepository $repository, 99 - array $panels, 100 - $selected) { 101 - 102 - $base_uri = $repository->getPathURI('manage/'); 103 - $base_uri = new PhutilURI($base_uri); 104 - 105 - $nav = id(new AphrontSideNavFilterView()) 106 - ->setBaseURI($base_uri); 6 + protected function buildApplicationCrumbs() { 7 + $crumbs = parent::buildApplicationCrumbs(); 107 8 108 - foreach ($panels as $panel) { 109 - $key = $panel->getManagementPanelKey(); 110 - $label = $panel->getManagementPanelLabel(); 111 - $icon = $panel->getManagementPanelIcon(); 112 - $href = $panel->getPanelNavigationURI(); 9 + if ($this->hasDiffusionRequest()) { 10 + $drequest = $this->getDiffusionRequest(); 11 + $repository = $drequest->getRepository(); 113 12 114 - $item = id(new PHUIListItemView()) 115 - ->setKey($key) 116 - ->setName($label) 117 - ->setType(PHUIListItemView::TYPE_LINK) 118 - ->setHref($href) 119 - ->setIcon($icon); 13 + $crumbs->addTextCrumb( 14 + $repository->getDisplayName(), 15 + $repository->getURI()); 120 16 121 - $nav->addMenuItem($item); 17 + $crumbs->addTextCrumb( 18 + pht('Manage'), 19 + $repository->getPathURI('manage/')); 122 20 } 123 21 124 - $nav->selectFilter($selected); 125 - 126 - return $nav; 22 + return $crumbs; 127 23 } 128 - 129 - public function newTimeline(PhabricatorRepository $repository) { 130 - $timeline = $this->buildTransactionTimeline( 131 - $repository, 132 - new PhabricatorRepositoryTransactionQuery()); 133 - $timeline->setShouldTerminate(true); 134 - 135 - return $timeline; 136 - } 137 - 138 24 139 25 }
+133
src/applications/diffusion/controller/DiffusionRepositoryManagePanelsController.php
··· 1 + <?php 2 + 3 + final class DiffusionRepositoryManagePanelsController 4 + extends DiffusionRepositoryManageController { 5 + 6 + private $navigation; 7 + 8 + public function buildApplicationMenu() { 9 + // TODO: This is messy for now; the mobile menu should be set automatically 10 + // when the body content is a two-column view with navigation. 11 + if ($this->navigation) { 12 + return $this->navigation->getMenu(); 13 + } 14 + return parent::buildApplicationMenu(); 15 + } 16 + 17 + 18 + public function handleRequest(AphrontRequest $request) { 19 + $response = $this->loadDiffusionContext(); 20 + if ($response) { 21 + return $response; 22 + } 23 + 24 + $viewer = $this->getViewer(); 25 + $drequest = $this->getDiffusionRequest(); 26 + $repository = $drequest->getRepository(); 27 + 28 + $panels = DiffusionRepositoryManagementPanel::getAllPanels(); 29 + 30 + foreach ($panels as $panel) { 31 + $panel 32 + ->setViewer($viewer) 33 + ->setRepository($repository) 34 + ->setController($this); 35 + } 36 + 37 + $selected = $request->getURIData('panel'); 38 + if (!strlen($selected)) { 39 + $selected = head_key($panels); 40 + } 41 + 42 + if (empty($panels[$selected])) { 43 + return new Aphront404Response(); 44 + } 45 + 46 + $nav = $this->renderSideNav($repository, $panels, $selected); 47 + $this->navigation = $nav; 48 + 49 + $panel = $panels[$selected]; 50 + 51 + $content = $panel->buildManagementPanelContent(); 52 + 53 + $title = array( 54 + $panel->getManagementPanelLabel(), 55 + $repository->getDisplayName(), 56 + ); 57 + 58 + $crumbs = $this->buildApplicationCrumbs(); 59 + $crumbs->addTextCrumb($panel->getManagementPanelLabel()); 60 + 61 + $header_text = pht( 62 + '%s: %s', 63 + $repository->getDisplayName(), 64 + $panel->getManagementPanelLabel()); 65 + 66 + $header = id(new PHUIHeaderView()) 67 + ->setHeader($header_text) 68 + ->setHeaderIcon('fa-pencil'); 69 + if ($repository->isTracked()) { 70 + $header->setStatus('fa-check', 'bluegrey', pht('Active')); 71 + } else { 72 + $header->setStatus('fa-ban', 'dark', pht('Inactive')); 73 + } 74 + 75 + $view = id(new PHUITwoColumnView()) 76 + ->setHeader($header) 77 + ->setNavigation($nav) 78 + ->setMainColumn($content); 79 + 80 + $curtain = $panel->buildManagementPanelCurtain(); 81 + if ($curtain) { 82 + $view->setCurtain($curtain); 83 + } 84 + 85 + return $this->newPage() 86 + ->setTitle($title) 87 + ->setCrumbs($crumbs) 88 + ->appendChild($view); 89 + } 90 + 91 + private function renderSideNav( 92 + PhabricatorRepository $repository, 93 + array $panels, 94 + $selected) { 95 + 96 + $base_uri = $repository->getPathURI('manage/'); 97 + $base_uri = new PhutilURI($base_uri); 98 + 99 + $nav = id(new AphrontSideNavFilterView()) 100 + ->setBaseURI($base_uri); 101 + 102 + foreach ($panels as $panel) { 103 + $key = $panel->getManagementPanelKey(); 104 + $label = $panel->getManagementPanelLabel(); 105 + $icon = $panel->getManagementPanelIcon(); 106 + $href = $panel->getPanelNavigationURI(); 107 + 108 + $item = id(new PHUIListItemView()) 109 + ->setKey($key) 110 + ->setName($label) 111 + ->setType(PHUIListItemView::TYPE_LINK) 112 + ->setHref($href) 113 + ->setIcon($icon); 114 + 115 + $nav->addMenuItem($item); 116 + } 117 + 118 + $nav->selectFilter($selected); 119 + 120 + return $nav; 121 + } 122 + 123 + public function newTimeline(PhabricatorRepository $repository) { 124 + $timeline = $this->buildTransactionTimeline( 125 + $repository, 126 + new PhabricatorRepositoryTransactionQuery()); 127 + $timeline->setShouldTerminate(true); 128 + 129 + return $timeline; 130 + } 131 + 132 + 133 + }
+1 -1
src/applications/diffusion/controller/DiffusionRepositoryTestAutomationController.php
··· 1 1 <?php 2 2 3 3 final class DiffusionRepositoryTestAutomationController 4 - extends DiffusionRepositoryEditController { 4 + extends DiffusionRepositoryManageController { 5 5 6 6 public function handleRequest(AphrontRequest $request) { 7 7 $response = $this->loadDiffusionContextForEdit();