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

Move Drydock object list rendering to SearchEngine

Summary: Ref T4986. Allows the Drydock search engines to render as panels.

Test Plan: Viewed affected interfaces in Drydock. Created panels from each engine.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T4986

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

+247 -190
+9 -15
src/__phutil_library_map__.php
··· 661 661 'DrydockLease' => 'applications/drydock/storage/DrydockLease.php', 662 662 'DrydockLeaseController' => 'applications/drydock/controller/DrydockLeaseController.php', 663 663 'DrydockLeaseListController' => 'applications/drydock/controller/DrydockLeaseListController.php', 664 + 'DrydockLeaseListView' => 'applications/drydock/view/DrydockLeaseListView.php', 664 665 'DrydockLeaseQuery' => 'applications/drydock/query/DrydockLeaseQuery.php', 665 666 'DrydockLeaseReleaseController' => 'applications/drydock/controller/DrydockLeaseReleaseController.php', 666 667 'DrydockLeaseSearchEngine' => 'applications/drydock/query/DrydockLeaseSearchEngine.php', ··· 671 672 'DrydockLog' => 'applications/drydock/storage/DrydockLog.php', 672 673 'DrydockLogController' => 'applications/drydock/controller/DrydockLogController.php', 673 674 'DrydockLogListController' => 'applications/drydock/controller/DrydockLogListController.php', 675 + 'DrydockLogListView' => 'applications/drydock/view/DrydockLogListView.php', 674 676 'DrydockLogQuery' => 'applications/drydock/query/DrydockLogQuery.php', 675 677 'DrydockLogSearchEngine' => 'applications/drydock/query/DrydockLogSearchEngine.php', 676 678 'DrydockManagementCloseWorkflow' => 'applications/drydock/management/DrydockManagementCloseWorkflow.php', ··· 687 689 'DrydockResourceCloseController' => 'applications/drydock/controller/DrydockResourceCloseController.php', 688 690 'DrydockResourceController' => 'applications/drydock/controller/DrydockResourceController.php', 689 691 'DrydockResourceListController' => 'applications/drydock/controller/DrydockResourceListController.php', 692 + 'DrydockResourceListView' => 'applications/drydock/view/DrydockResourceListView.php', 690 693 'DrydockResourceQuery' => 'applications/drydock/query/DrydockResourceQuery.php', 691 694 'DrydockResourceSearchEngine' => 'applications/drydock/query/DrydockResourceSearchEngine.php', 692 695 'DrydockResourceStatus' => 'applications/drydock/constants/DrydockResourceStatus.php', ··· 3305 3308 1 => 'PhabricatorPolicyInterface', 3306 3309 ), 3307 3310 'DrydockLeaseController' => 'DrydockController', 3308 - 'DrydockLeaseListController' => 3309 - array( 3310 - 0 => 'DrydockLeaseController', 3311 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3312 - ), 3311 + 'DrydockLeaseListController' => 'DrydockLeaseController', 3312 + 'DrydockLeaseListView' => 'AphrontView', 3313 3313 'DrydockLeaseQuery' => 'DrydockQuery', 3314 3314 'DrydockLeaseReleaseController' => 'DrydockLeaseController', 3315 3315 'DrydockLeaseSearchEngine' => 'PhabricatorApplicationSearchEngine', ··· 3323 3323 1 => 'PhabricatorPolicyInterface', 3324 3324 ), 3325 3325 'DrydockLogController' => 'DrydockController', 3326 - 'DrydockLogListController' => 3327 - array( 3328 - 0 => 'DrydockLogController', 3329 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3330 - ), 3326 + 'DrydockLogListController' => 'DrydockLogController', 3327 + 'DrydockLogListView' => 'AphrontView', 3331 3328 'DrydockLogQuery' => 'DrydockQuery', 3332 3329 'DrydockLogSearchEngine' => 'PhabricatorApplicationSearchEngine', 3333 3330 'DrydockManagementCloseWorkflow' => 'DrydockManagementWorkflow', ··· 3347 3344 ), 3348 3345 'DrydockResourceCloseController' => 'DrydockResourceController', 3349 3346 'DrydockResourceController' => 'DrydockController', 3350 - 'DrydockResourceListController' => 3351 - array( 3352 - 0 => 'DrydockResourceController', 3353 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3354 - ), 3347 + 'DrydockResourceListController' => 'DrydockResourceController', 3348 + 'DrydockResourceListView' => 'AphrontView', 3355 3349 'DrydockResourceQuery' => 'DrydockQuery', 3356 3350 'DrydockResourceSearchEngine' => 'PhabricatorApplicationSearchEngine', 3357 3351 'DrydockResourceStatus' => 'DrydockConstants',
+4 -1
src/applications/drydock/controller/DrydockBlueprintViewController.php
··· 38 38 ->setViewer($viewer) 39 39 ->execute(); 40 40 41 - $resource_list = $this->buildResourceListView($resources); 41 + $resource_list = id(new DrydockResourceListView()) 42 + ->setUser($viewer) 43 + ->setResources($resources) 44 + ->render(); 42 45 $resource_list->setNoDataString(pht('This blueprint has no resources.')); 43 46 44 47 $pager = new AphrontPagerView();
-141
src/applications/drydock/controller/DrydockController.php
··· 8 8 return $this->buildSideNavView()->getMenu(); 9 9 } 10 10 11 - protected function buildLogTableView(array $logs) { 12 - assert_instances_of($logs, 'DrydockLog'); 13 - 14 - $user = $this->getRequest()->getUser(); 15 - 16 - $rows = array(); 17 - foreach ($logs as $log) { 18 - $resource_uri = '/resource/'.$log->getResourceID().'/'; 19 - $resource_uri = $this->getApplicationURI($resource_uri); 20 - 21 - $lease_uri = '/lease/'.$log->getLeaseID().'/'; 22 - $lease_uri = $this->getApplicationURI($lease_uri); 23 - 24 - $rows[] = array( 25 - phutil_tag( 26 - 'a', 27 - array( 28 - 'href' => $resource_uri, 29 - ), 30 - $log->getResourceID()), 31 - phutil_tag( 32 - 'a', 33 - array( 34 - 'href' => $lease_uri, 35 - ), 36 - $log->getLeaseID()), 37 - $log->getMessage(), 38 - phabricator_date($log->getEpoch(), $user), 39 - ); 40 - } 41 - 42 - $table = new AphrontTableView($rows); 43 - $table->setDeviceReadyTable(true); 44 - $table->setHeaders( 45 - array( 46 - 'Resource', 47 - 'Lease', 48 - 'Message', 49 - 'Date', 50 - )); 51 - $table->setShortHeaders( 52 - array( 53 - 'R', 54 - 'L', 55 - 'Message', 56 - '', 57 - )); 58 - $table->setColumnClasses( 59 - array( 60 - '', 61 - '', 62 - 'wide', 63 - '', 64 - )); 65 - 66 - return $table; 67 - } 68 - 69 - protected function buildLeaseListView(array $leases) { 70 - assert_instances_of($leases, 'DrydockLease'); 71 - 72 - $viewer = $this->getRequest()->getUser(); 73 - $view = new PHUIObjectItemListView(); 74 - 75 - foreach ($leases as $lease) { 76 - $item = id(new PHUIObjectItemView()) 77 - ->setUser($viewer) 78 - ->setHeader($lease->getLeaseName()) 79 - ->setHref($this->getApplicationURI('/lease/'.$lease->getID().'/')); 80 - 81 - if ($lease->hasAttachedResource()) { 82 - $resource = $lease->getResource(); 83 - 84 - $resource_href = '/resource/'.$resource->getID().'/'; 85 - $resource_href = $this->getApplicationURI($resource_href); 86 - 87 - $resource_name = $resource->getName(); 88 - 89 - $item->addAttribute( 90 - phutil_tag( 91 - 'a', 92 - array( 93 - 'href' => $resource_href, 94 - ), 95 - $resource_name)); 96 - } 97 - 98 - $status = DrydockLeaseStatus::getNameForStatus($lease->getStatus()); 99 - $item->addAttribute($status); 100 - $item->setEpoch($lease->getDateCreated()); 101 - 102 - if ($lease->isActive()) { 103 - $item->setBarColor('green'); 104 - } else { 105 - $item->setBarColor('red'); 106 - } 107 - 108 - $view->addItem($item); 109 - } 110 - 111 - return $view; 112 - } 113 - 114 - protected function buildResourceListView(array $resources) { 115 - assert_instances_of($resources, 'DrydockResource'); 116 - 117 - $user = $this->getRequest()->getUser(); 118 - $view = new PHUIObjectItemListView(); 119 - 120 - foreach ($resources as $resource) { 121 - $name = pht('Resource %d', $resource->getID()).': '.$resource->getName(); 122 - 123 - $item = id(new PHUIObjectItemView()) 124 - ->setHref($this->getApplicationURI('/resource/'.$resource->getID().'/')) 125 - ->setHeader($name); 126 - 127 - $status = DrydockResourceStatus::getNameForStatus($resource->getStatus()); 128 - $item->addAttribute($status); 129 - 130 - switch ($resource->getStatus()) { 131 - case DrydockResourceStatus::STATUS_PENDING: 132 - $item->setBarColor('yellow'); 133 - break; 134 - case DrydockResourceStatus::STATUS_OPEN: 135 - $item->setBarColor('green'); 136 - break; 137 - case DrydockResourceStatus::STATUS_DESTROYED: 138 - $item->setBarColor('black'); 139 - break; 140 - default: 141 - $item->setBarColor('red'); 142 - break; 143 - } 144 - 145 - $view->addItem($item); 146 - } 147 - 148 - return $view; 149 - } 150 - 151 - 152 11 }
+1 -10
src/applications/drydock/controller/DrydockLeaseListController.php
··· 1 1 <?php 2 2 3 - final class DrydockLeaseListController extends DrydockLeaseController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class DrydockLeaseListController extends DrydockLeaseController { 5 4 6 5 private $queryKey; 7 6 ··· 21 20 ->setNavigation($this->buildSideNavView()); 22 21 23 22 return $this->delegateToController($controller); 24 - } 25 - 26 - public function renderResultsList( 27 - array $leases, 28 - PhabricatorSavedQuery $query) { 29 - assert_instances_of($leases, 'DrydockLease'); 30 - 31 - return $this->buildLeaseListView($leases); 32 23 } 33 24 34 25 }
+4 -1
src/applications/drydock/controller/DrydockLeaseViewController.php
··· 39 39 ->withLeaseIDs(array($lease->getID())) 40 40 ->executeWithOffsetPager($pager); 41 41 42 - $log_table = $this->buildLogTableView($logs); 42 + $log_table = id(new DrydockLogListView()) 43 + ->setUser($viewer) 44 + ->setLogs($logs) 45 + ->render(); 43 46 $log_table->appendChild($pager); 44 47 45 48 $crumbs = $this->buildApplicationCrumbs();
+1 -10
src/applications/drydock/controller/DrydockLogListController.php
··· 1 1 <?php 2 2 3 - final class DrydockLogListController extends DrydockLogController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class DrydockLogListController extends DrydockLogController { 5 4 6 5 private $queryKey; 7 6 ··· 21 20 ->setNavigation($this->buildSideNavView()); 22 21 23 22 return $this->delegateToController($controller); 24 - } 25 - 26 - public function renderResultsList( 27 - array $logs, 28 - PhabricatorSavedQuery $query) { 29 - assert_instances_of($logs, 'DrydockLog'); 30 - 31 - return $this->buildLogTableView($logs); 32 23 } 33 24 34 25 }
+1 -10
src/applications/drydock/controller/DrydockResourceListController.php
··· 1 1 <?php 2 2 3 - final class DrydockResourceListController extends DrydockResourceController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class DrydockResourceListController extends DrydockResourceController { 5 4 6 5 private $queryKey; 7 6 ··· 21 20 ->setNavigation($this->buildSideNavView()); 22 21 23 22 return $this->delegateToController($controller); 24 - } 25 - 26 - public function renderResultsList( 27 - array $resources, 28 - PhabricatorSavedQuery $query) { 29 - assert_instances_of($resources, 'DrydockResource'); 30 - 31 - return $this->buildResourceListView($resources); 32 23 } 33 24 34 25 }
+8 -2
src/applications/drydock/controller/DrydockResourceViewController.php
··· 36 36 ->withResourceIDs(array($resource->getID())) 37 37 ->execute(); 38 38 39 - $lease_list = $this->buildLeaseListView($leases); 39 + $lease_list = id(new DrydockLeaseListView()) 40 + ->setUser($viewer) 41 + ->setLeases($leases) 42 + ->render(); 40 43 $lease_list->setNoDataString(pht('This resource has no leases.')); 41 44 42 45 $pager = new AphrontPagerView(); ··· 48 51 ->withResourceIDs(array($resource->getID())) 49 52 ->executeWithOffsetPager($pager); 50 53 51 - $log_table = $this->buildLogTableView($logs); 54 + $log_table = id(new DrydockLogListView()) 55 + ->setUser($viewer) 56 + ->setLogs($logs) 57 + ->render(); 52 58 $log_table->appendChild($pager); 53 59 54 60 $crumbs = $this->buildApplicationCrumbs();
+15
src/applications/drydock/query/DrydockLeaseSearchEngine.php
··· 3 3 final class DrydockLeaseSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationDrydock'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 76 80 } 77 81 78 82 return parent::buildSavedQueryFromBuiltin($query_key); 83 + } 84 + 85 + protected function renderResultList( 86 + array $leases, 87 + PhabricatorSavedQuery $saved, 88 + array $handles) { 89 + 90 + return id(new DrydockLeaseListView()) 91 + ->setUser($this->requireViewer()) 92 + ->setLeases($leases) 93 + ->render(); 79 94 } 80 95 81 96 }
+15
src/applications/drydock/query/DrydockLogSearchEngine.php
··· 3 3 final class DrydockLogSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationDrydock'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 43 47 } 44 48 45 49 return parent::buildSavedQueryFromBuiltin($query_key); 50 + } 51 + 52 + protected function renderResultList( 53 + array $logs, 54 + PhabricatorSavedQuery $query, 55 + array $handles) { 56 + 57 + return id(new DrydockLogListView()) 58 + ->setUser($this->requireViewer()) 59 + ->setLogs($logs) 60 + ->render(); 46 61 } 47 62 48 63 }
+15
src/applications/drydock/query/DrydockResourceSearchEngine.php
··· 3 3 final class DrydockResourceSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationDrydock'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 75 79 } 76 80 77 81 return parent::buildSavedQueryFromBuiltin($query_key); 82 + } 83 + 84 + protected function renderResultList( 85 + array $resources, 86 + PhabricatorSavedQuery $query, 87 + array $handles) { 88 + 89 + return id(new DrydockResourceListView()) 90 + ->setUser($this->requireViewer()) 91 + ->setResources($resources) 92 + ->render(); 78 93 } 79 94 80 95 }
+56
src/applications/drydock/view/DrydockLeaseListView.php
··· 1 + <?php 2 + 3 + final class DrydockLeaseListView extends AphrontView { 4 + 5 + private $leases; 6 + 7 + public function setLeases(array $leases) { 8 + assert_instances_of($leases, 'DrydockLease'); 9 + $this->leases = $leases; 10 + return $this; 11 + } 12 + 13 + public function render() { 14 + $leases = $this->leases; 15 + $viewer = $this->getUser(); 16 + 17 + $view = new PHUIObjectItemListView(); 18 + 19 + foreach ($leases as $lease) { 20 + $item = id(new PHUIObjectItemView()) 21 + ->setUser($viewer) 22 + ->setHeader($lease->getLeaseName()) 23 + ->setHref('/drydock/lease/'.$lease->getID().'/'); 24 + 25 + if ($lease->hasAttachedResource()) { 26 + $resource = $lease->getResource(); 27 + 28 + $resource_href = '/drydock/resource/'.$resource->getID().'/'; 29 + $resource_name = $resource->getName(); 30 + 31 + $item->addAttribute( 32 + phutil_tag( 33 + 'a', 34 + array( 35 + 'href' => $resource_href, 36 + ), 37 + $resource_name)); 38 + } 39 + 40 + $status = DrydockLeaseStatus::getNameForStatus($lease->getStatus()); 41 + $item->addAttribute($status); 42 + $item->setEpoch($lease->getDateCreated()); 43 + 44 + if ($lease->isActive()) { 45 + $item->setBarColor('green'); 46 + } else { 47 + $item->setBarColor('red'); 48 + } 49 + 50 + $view->addItem($item); 51 + } 52 + 53 + return $view; 54 + } 55 + 56 + }
+69
src/applications/drydock/view/DrydockLogListView.php
··· 1 + <?php 2 + 3 + final class DrydockLogListView extends AphrontView { 4 + 5 + private $logs; 6 + 7 + public function setLogs(array $logs) { 8 + assert_instances_of($logs, 'DrydockLog'); 9 + $this->logs = $logs; 10 + return $this; 11 + } 12 + 13 + public function render() { 14 + $logs = $this->logs; 15 + $viewer = $this->getUser(); 16 + 17 + $view = new PHUIObjectItemListView(); 18 + 19 + $rows = array(); 20 + foreach ($logs as $log) { 21 + $resource_uri = '/drydock/resource/'.$log->getResourceID().'/'; 22 + $lease_uri = '/drydock/lease/'.$log->getLeaseID().'/'; 23 + 24 + $rows[] = array( 25 + phutil_tag( 26 + 'a', 27 + array( 28 + 'href' => $resource_uri, 29 + ), 30 + $log->getResourceID()), 31 + phutil_tag( 32 + 'a', 33 + array( 34 + 'href' => $lease_uri, 35 + ), 36 + $log->getLeaseID()), 37 + $log->getMessage(), 38 + phabricator_date($log->getEpoch(), $viewer), 39 + ); 40 + } 41 + 42 + $table = new AphrontTableView($rows); 43 + $table->setDeviceReadyTable(true); 44 + $table->setHeaders( 45 + array( 46 + 'Resource', 47 + 'Lease', 48 + 'Message', 49 + 'Date', 50 + )); 51 + $table->setShortHeaders( 52 + array( 53 + 'R', 54 + 'L', 55 + 'Message', 56 + '', 57 + )); 58 + $table->setColumnClasses( 59 + array( 60 + '', 61 + '', 62 + 'wide', 63 + '', 64 + )); 65 + 66 + return $table; 67 + } 68 + 69 + }
+49
src/applications/drydock/view/DrydockResourceListView.php
··· 1 + <?php 2 + 3 + final class DrydockResourceListView extends AphrontView { 4 + 5 + private $resources; 6 + 7 + public function setResources(array $resources) { 8 + assert_instances_of($resources, 'DrydockResource'); 9 + $this->resources = $resources; 10 + return $this; 11 + } 12 + 13 + public function render() { 14 + $resources = $this->resources; 15 + $viewer = $this->getUser(); 16 + 17 + $view = new PHUIObjectItemListView(); 18 + foreach ($resources as $resource) { 19 + $name = pht('Resource %d', $resource->getID()).': '.$resource->getName(); 20 + 21 + $item = id(new PHUIObjectItemView()) 22 + ->setHref('/drydock/resource/'.$resource->getID().'/') 23 + ->setHeader($name); 24 + 25 + $status = DrydockResourceStatus::getNameForStatus($resource->getStatus()); 26 + $item->addAttribute($status); 27 + 28 + switch ($resource->getStatus()) { 29 + case DrydockResourceStatus::STATUS_PENDING: 30 + $item->setBarColor('yellow'); 31 + break; 32 + case DrydockResourceStatus::STATUS_OPEN: 33 + $item->setBarColor('green'); 34 + break; 35 + case DrydockResourceStatus::STATUS_DESTROYED: 36 + $item->setBarColor('black'); 37 + break; 38 + default: 39 + $item->setBarColor('red'); 40 + break; 41 + } 42 + 43 + $view->addItem($item); 44 + } 45 + 46 + return $view; 47 + } 48 + 49 + }