@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.

Make Drydock repository operations a little more modern and consistent

Summary: Ref T10457. Use modern controller and UI tech to build the list view and actions.

Test Plan:
- Viewed operation list.
- Viewed operation detail.
- Checked menus on mobile.

{F1139757}

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T10457

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

+41 -49
+6 -4
src/__phutil_library_map__.php
··· 939 939 'DrydockObjectAuthorizationView' => 'applications/drydock/view/DrydockObjectAuthorizationView.php', 940 940 'DrydockQuery' => 'applications/drydock/query/DrydockQuery.php', 941 941 'DrydockRepositoryOperation' => 'applications/drydock/storage/DrydockRepositoryOperation.php', 942 + 'DrydockRepositoryOperationController' => 'applications/drydock/controller/DrydockRepositoryOperationController.php', 942 943 'DrydockRepositoryOperationDismissController' => 'applications/drydock/controller/DrydockRepositoryOperationDismissController.php', 943 944 'DrydockRepositoryOperationListController' => 'applications/drydock/controller/DrydockRepositoryOperationListController.php', 944 945 'DrydockRepositoryOperationPHIDType' => 'applications/drydock/phid/DrydockRepositoryOperationPHIDType.php', ··· 5066 5067 'DrydockDAO', 5067 5068 'PhabricatorPolicyInterface', 5068 5069 ), 5069 - 'DrydockRepositoryOperationDismissController' => 'DrydockController', 5070 - 'DrydockRepositoryOperationListController' => 'DrydockController', 5070 + 'DrydockRepositoryOperationController' => 'DrydockController', 5071 + 'DrydockRepositoryOperationDismissController' => 'DrydockRepositoryOperationController', 5072 + 'DrydockRepositoryOperationListController' => 'DrydockRepositoryOperationController', 5071 5073 'DrydockRepositoryOperationPHIDType' => 'PhabricatorPHIDType', 5072 5074 'DrydockRepositoryOperationQuery' => 'DrydockQuery', 5073 5075 'DrydockRepositoryOperationSearchEngine' => 'PhabricatorApplicationSearchEngine', 5074 - 'DrydockRepositoryOperationStatusController' => 'DrydockController', 5076 + 'DrydockRepositoryOperationStatusController' => 'DrydockRepositoryOperationController', 5075 5077 'DrydockRepositoryOperationStatusView' => 'AphrontView', 5076 5078 'DrydockRepositoryOperationType' => 'Phobject', 5077 5079 'DrydockRepositoryOperationUpdateWorker' => 'DrydockWorker', 5078 - 'DrydockRepositoryOperationViewController' => 'DrydockController', 5080 + 'DrydockRepositoryOperationViewController' => 'DrydockRepositoryOperationController', 5079 5081 'DrydockResource' => array( 5080 5082 'DrydockDAO', 5081 5083 'PhabricatorPolicyInterface',
+11
src/applications/drydock/controller/DrydockRepositoryOperationController.php
··· 1 + <?php 2 + 3 + abstract class DrydockRepositoryOperationController 4 + extends DrydockController { 5 + 6 + public function buildApplicationMenu() { 7 + return $this->newApplicationMenu() 8 + ->setSearchEngine(new DrydockRepositoryOperationSearchEngine()); 9 + } 10 + 11 + }
+1 -1
src/applications/drydock/controller/DrydockRepositoryOperationDismissController.php
··· 1 1 <?php 2 2 3 3 final class DrydockRepositoryOperationDismissController 4 - extends DrydockController { 4 + extends DrydockRepositoryOperationController { 5 5 6 6 public function handleRequest(AphrontRequest $request) { 7 7 $viewer = $request->getViewer();
+4 -25
src/applications/drydock/controller/DrydockRepositoryOperationListController.php
··· 1 1 <?php 2 2 3 3 final class DrydockRepositoryOperationListController 4 - extends DrydockController { 4 + extends DrydockRepositoryOperationController { 5 5 6 6 public function shouldAllowPublic() { 7 7 return true; 8 8 } 9 9 10 10 public function handleRequest(AphrontRequest $request) { 11 - $query_key = $request->getURIData('queryKey'); 12 - 13 - $engine = new DrydockRepositoryOperationSearchEngine(); 14 - 15 - $controller = id(new PhabricatorApplicationSearchController()) 16 - ->setQueryKey($query_key) 17 - ->setSearchEngine($engine) 18 - ->setNavigation($this->buildSideNavView()); 19 - 20 - return $this->delegateToController($controller); 21 - } 22 - 23 - public function buildSideNavView() { 24 - $nav = new AphrontSideNavFilterView(); 25 - $nav->setBaseURI(new PhutilURI($this->getApplicationURI())); 26 - 27 - $engine = id(new DrydockRepositoryOperationSearchEngine()) 28 - ->setViewer($this->getViewer()); 29 - 30 - $engine->addNavigationItems($nav->getMenu()); 31 - 32 - $nav->selectFilter(null); 33 - 34 - return $nav; 11 + return id(new DrydockRepositoryOperationSearchEngine()) 12 + ->setController($this) 13 + ->buildResponse(); 35 14 } 36 15 37 16 }
+1 -1
src/applications/drydock/controller/DrydockRepositoryOperationStatusController.php
··· 1 1 <?php 2 2 3 3 final class DrydockRepositoryOperationStatusController 4 - extends DrydockController { 4 + extends DrydockRepositoryOperationController { 5 5 6 6 public function shouldAllowPublic() { 7 7 return true;
+9 -11
src/applications/drydock/controller/DrydockRepositoryOperationViewController.php
··· 1 1 <?php 2 2 3 3 final class DrydockRepositoryOperationViewController 4 - extends DrydockController { 4 + extends DrydockRepositoryOperationController { 5 5 6 6 public function shouldAllowPublic() { 7 7 return true; ··· 50 50 ->setUser($viewer) 51 51 ->setOperation($operation); 52 52 53 - return $this->buildApplicationPage( 54 - array( 55 - $crumbs, 56 - $object_box, 57 - $status_view, 58 - ), 59 - array( 60 - 'title' => $title, 61 - )); 62 - 53 + return $this->newPage() 54 + ->setTitle($title) 55 + ->setCrumbs($crumbs) 56 + ->appendChild( 57 + array( 58 + $object_box, 59 + $status_view, 60 + )); 63 61 } 64 62 65 63 private function buildActionListView(DrydockRepositoryOperation $operation) {
+9 -7
src/applications/drydock/query/DrydockRepositoryOperationSearchEngine.php
··· 70 70 $icon = DrydockRepositoryOperation::getOperationStateIcon($state); 71 71 $name = DrydockRepositoryOperation::getOperationStateName($state); 72 72 73 - $item->addIcon($icon, $name); 73 + $item->setStatusIcon($icon, $name); 74 + 74 75 $item->addByline( 75 76 array( 76 77 pht('Via:'), ··· 78 79 $viewer->renderHandle($operation->getAuthorPHID()), 79 80 )); 80 81 81 - $item->addAttribute( 82 - $viewer->renderHandle( 83 - $operation->getObjectPHID())); 82 + $object_phid = $operation->getObjectPHID(); 83 + $repository_phid = $operation->getRepositoryPHID(); 84 84 85 - $item->addAttribute( 86 - $viewer->renderHandle( 87 - $operation->getRepositoryPHID())); 85 + $item->addAttribute($viewer->renderHandle($object_phid)); 86 + 87 + if ($repository_phid !== $object_phid) { 88 + $item->addAttribute($viewer->renderHandle($repository_phid)); 89 + } 88 90 89 91 $view->addItem($item); 90 92 }