@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 a bunch more rendering into SearchEngine

Summary: Ref T4986. These are mostly mechanical now, I skipped a couple of slightly tricky ones. Still a bunch to go.

Test Plan:
For each engine:

- Viewed the application;
- created a panel to issue the query.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T4986

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

+561 -556
+14 -70
src/__phutil_library_map__.php
··· 3061 3061 'DifferentialRevisionEditController' => 'DifferentialController', 3062 3062 'DifferentialRevisionIDField' => 'DifferentialCustomField', 3063 3063 'DifferentialRevisionLandController' => 'DifferentialController', 3064 - 'DifferentialRevisionListController' => 3065 - array( 3066 - 0 => 'DifferentialController', 3067 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3068 - ), 3064 + 'DifferentialRevisionListController' => 'DifferentialController', 3069 3065 'DifferentialRevisionListView' => 'AphrontView', 3070 3066 'DifferentialRevisionMailReceiver' => 'PhabricatorObjectMailReceiver', 3071 3067 'DifferentialRevisionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', ··· 3150 3146 'DiffusionPathValidateController' => 'DiffusionController', 3151 3147 'DiffusionPushEventViewController' => 'DiffusionPushLogController', 3152 3148 'DiffusionPushLogController' => 'DiffusionController', 3153 - 'DiffusionPushLogListController' => 3154 - array( 3155 - 0 => 'DiffusionPushLogController', 3156 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3157 - ), 3149 + 'DiffusionPushLogListController' => 'DiffusionPushLogController', 3158 3150 'DiffusionQuery' => 'PhabricatorQuery', 3159 3151 'DiffusionRawDiffQuery' => 'DiffusionQuery', 3160 3152 'DiffusionRepositoryController' => 'DiffusionController', ··· 3172 3164 'DiffusionRepositoryEditLocalController' => 'DiffusionRepositoryEditController', 3173 3165 'DiffusionRepositoryEditMainController' => 'DiffusionRepositoryEditController', 3174 3166 'DiffusionRepositoryEditSubversionController' => 'DiffusionRepositoryEditController', 3175 - 'DiffusionRepositoryListController' => 3176 - array( 3177 - 0 => 'DiffusionController', 3178 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3179 - ), 3167 + 'DiffusionRepositoryListController' => 'DiffusionController', 3180 3168 'DiffusionRepositoryNewController' => 'DiffusionController', 3181 3169 'DiffusionRepositoryRef' => 'Phobject', 3182 3170 'DiffusionRepositoryRemarkupRule' => 'PhabricatorRemarkupRuleObject', ··· 3208 3196 'DivinerArticleAtomizer' => 'DivinerAtomizer', 3209 3197 'DivinerAtomCache' => 'DivinerDiskCache', 3210 3198 'DivinerAtomController' => 'DivinerController', 3211 - 'DivinerAtomListController' => 3212 - array( 3213 - 0 => 'DivinerController', 3214 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3215 - ), 3199 + 'DivinerAtomListController' => 'DivinerController', 3216 3200 'DivinerAtomQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 3217 3201 'DivinerAtomSearchEngine' => 'PhabricatorApplicationSearchEngine', 3218 3202 'DivinerAtomizeWorkflow' => 'DivinerWorkflow', ··· 3281 3265 'DrydockBlueprintCreateController' => 'DrydockBlueprintController', 3282 3266 'DrydockBlueprintEditController' => 'DrydockBlueprintController', 3283 3267 'DrydockBlueprintEditor' => 'PhabricatorApplicationTransactionEditor', 3284 - 'DrydockBlueprintListController' => 3285 - array( 3286 - 0 => 'DrydockBlueprintController', 3287 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3288 - ), 3268 + 'DrydockBlueprintListController' => 'DrydockBlueprintController', 3289 3269 'DrydockBlueprintQuery' => 'DrydockQuery', 3290 3270 'DrydockBlueprintSearchEngine' => 'PhabricatorApplicationSearchEngine', 3291 3271 'DrydockBlueprintTransaction' => 'PhabricatorApplicationTransaction', ··· 3438 3418 2 => 'HarbormasterBuildableInterface', 3439 3419 ), 3440 3420 'HarbormasterBuildableActionController' => 'HarbormasterController', 3441 - 'HarbormasterBuildableListController' => 3442 - array( 3443 - 0 => 'HarbormasterController', 3444 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3445 - ), 3421 + 'HarbormasterBuildableListController' => 'HarbormasterController', 3446 3422 'HarbormasterBuildableQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 3447 3423 'HarbormasterBuildableSearchEngine' => 'PhabricatorApplicationSearchEngine', 3448 3424 'HarbormasterBuildableViewController' => 'HarbormasterController', ··· 3466 3442 'HarbormasterPlanController' => 'HarbormasterController', 3467 3443 'HarbormasterPlanDisableController' => 'HarbormasterPlanController', 3468 3444 'HarbormasterPlanEditController' => 'HarbormasterPlanController', 3469 - 'HarbormasterPlanListController' => 3470 - array( 3471 - 0 => 'HarbormasterPlanController', 3472 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3473 - ), 3445 + 'HarbormasterPlanListController' => 'HarbormasterPlanController', 3474 3446 'HarbormasterPlanOrderController' => 'HarbormasterController', 3475 3447 'HarbormasterPlanRunController' => 'HarbormasterController', 3476 3448 'HarbormasterPlanViewController' => 'HarbormasterPlanController', ··· 3520 3492 'HeraldRuleEditHistoryController' => 'HeraldController', 3521 3493 'HeraldRuleEditHistoryView' => 'AphrontView', 3522 3494 'HeraldRuleEditor' => 'PhabricatorApplicationTransactionEditor', 3523 - 'HeraldRuleListController' => 3524 - array( 3525 - 0 => 'HeraldController', 3526 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 3527 - ), 3495 + 'HeraldRuleListController' => 'HeraldController', 3528 3496 'HeraldRuleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 3529 3497 'HeraldRuleSearchEngine' => 'PhabricatorApplicationSearchEngine', 3530 3498 'HeraldRuleTransaction' => 'PhabricatorApplicationTransaction', ··· 4133 4101 'PhabricatorConduitConsoleController' => 'PhabricatorConduitController', 4134 4102 'PhabricatorConduitController' => 'PhabricatorController', 4135 4103 'PhabricatorConduitDAO' => 'PhabricatorLiskDAO', 4136 - 'PhabricatorConduitListController' => 4137 - array( 4138 - 0 => 'PhabricatorConduitController', 4139 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 4140 - ), 4104 + 'PhabricatorConduitListController' => 'PhabricatorConduitController', 4141 4105 'PhabricatorConduitLogController' => 'PhabricatorConduitController', 4142 4106 'PhabricatorConduitLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 4143 4107 'PhabricatorConduitMethodCallLog' => ··· 4202 4166 'PhabricatorCountdownDAO' => 'PhabricatorLiskDAO', 4203 4167 'PhabricatorCountdownDeleteController' => 'PhabricatorCountdownController', 4204 4168 'PhabricatorCountdownEditController' => 'PhabricatorCountdownController', 4205 - 'PhabricatorCountdownListController' => 4206 - array( 4207 - 0 => 'PhabricatorCountdownController', 4208 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 4209 - ), 4169 + 'PhabricatorCountdownListController' => 'PhabricatorCountdownController', 4210 4170 'PhabricatorCountdownPHIDTypeCountdown' => 'PhabricatorPHIDType', 4211 4171 'PhabricatorCountdownQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 4212 4172 'PhabricatorCountdownRemarkupRule' => 'PhabricatorRemarkupRuleObject', ··· 4265 4225 'PhabricatorDashboardController' => 'PhabricatorController', 4266 4226 'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO', 4267 4227 'PhabricatorDashboardEditController' => 'PhabricatorDashboardController', 4268 - 'PhabricatorDashboardListController' => 4269 - array( 4270 - 0 => 'PhabricatorDashboardController', 4271 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 4272 - ), 4228 + 'PhabricatorDashboardListController' => 'PhabricatorDashboardController', 4273 4229 'PhabricatorDashboardPHIDTypeDashboard' => 'PhabricatorPHIDType', 4274 4230 'PhabricatorDashboardPHIDTypePanel' => 'PhabricatorPHIDType', 4275 4231 'PhabricatorDashboardPanel' => ··· 4286 4242 'PhabricatorDashboardPanelCreateController' => 'PhabricatorDashboardController', 4287 4243 'PhabricatorDashboardPanelCustomField' => 'PhabricatorCustomField', 4288 4244 'PhabricatorDashboardPanelEditController' => 'PhabricatorDashboardController', 4289 - 'PhabricatorDashboardPanelListController' => 4290 - array( 4291 - 0 => 'PhabricatorDashboardController', 4292 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 4293 - ), 4245 + 'PhabricatorDashboardPanelListController' => 'PhabricatorDashboardController', 4294 4246 'PhabricatorDashboardPanelQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 4295 4247 'PhabricatorDashboardPanelRenderController' => 'PhabricatorDashboardController', 4296 4248 'PhabricatorDashboardPanelRenderingEngine' => 'Phobject', ··· 4415 4367 'PhabricatorFileInfoController' => 'PhabricatorFileController', 4416 4368 'PhabricatorFileLinkListView' => 'AphrontView', 4417 4369 'PhabricatorFileLinkView' => 'AphrontView', 4418 - 'PhabricatorFileListController' => 4419 - array( 4420 - 0 => 'PhabricatorFileController', 4421 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 4422 - ), 4370 + 'PhabricatorFileListController' => 'PhabricatorFileController', 4423 4371 'PhabricatorFilePHIDTypeFile' => 'PhabricatorPHIDType', 4424 4372 'PhabricatorFileQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 4425 4373 'PhabricatorFileSearchEngine' => 'PhabricatorApplicationSearchEngine', ··· 4452 4400 'PhabricatorFlagDAO' => 'PhabricatorLiskDAO', 4453 4401 'PhabricatorFlagDeleteController' => 'PhabricatorFlagController', 4454 4402 'PhabricatorFlagEditController' => 'PhabricatorFlagController', 4455 - 'PhabricatorFlagListController' => 4456 - array( 4457 - 0 => 'PhabricatorFlagController', 4458 - 1 => 'PhabricatorApplicationSearchResultsControllerInterface', 4459 - ), 4403 + 'PhabricatorFlagListController' => 'PhabricatorFlagController', 4460 4404 'PhabricatorFlagQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 4461 4405 'PhabricatorFlagSearchEngine' => 'PhabricatorApplicationSearchEngine', 4462 4406 'PhabricatorFlagSelectControl' => 'AphrontFormControl',
+2 -23
src/applications/dashboard/controller/PhabricatorDashboardPanelListController.php
··· 1 1 <?php 2 2 3 3 final class PhabricatorDashboardPanelListController 4 - extends PhabricatorDashboardController 5 - implements PhabricatorApplicationSearchResultsControllerInterface { 4 + extends PhabricatorDashboardController { 6 5 7 6 private $queryKey; 7 + 8 8 public function willProcessRequest(array $data) { 9 9 $this->queryKey = idx($data, 'queryKey'); 10 10 } ··· 45 45 ->setHref($this->getApplicationURI().'panel/create/')); 46 46 47 47 return $crumbs; 48 - } 49 - 50 - public function renderResultsList( 51 - array $panels, 52 - PhabricatorSavedQuery $query) { 53 - 54 - $viewer = $this->getRequest()->getUser(); 55 - 56 - $list = new PHUIObjectItemListView(); 57 - $list->setUser($viewer); 58 - foreach ($panels as $panel) { 59 - $item = id(new PHUIObjectItemView()) 60 - ->setObjectName($panel->getMonogram()) 61 - ->setHeader($panel->getName()) 62 - ->setHref('/'.$panel->getMonogram()) 63 - ->setObject($panel); 64 - 65 - $list->addItem($item); 66 - } 67 - 68 - return $list; 69 48 } 70 49 71 50 }
+26
src/applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php
··· 3 3 final class PhabricatorDashboardPanelSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationDashboard'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 44 48 } 45 49 46 50 return parent::buildSavedQueryFromBuiltin($query_key); 51 + } 52 + 53 + protected function renderResultList( 54 + array $panels, 55 + PhabricatorSavedQuery $query, 56 + array $handles) { 57 + 58 + $viewer = $this->requireViewer(); 59 + 60 + $list = new PHUIObjectItemListView(); 61 + $list->setUser($viewer); 62 + foreach ($panels as $panel) { 63 + $item = id(new PHUIObjectItemView()) 64 + ->setObjectName($panel->getMonogram()) 65 + ->setHeader($panel->getName()) 66 + ->setHref('/'.$panel->getMonogram()) 67 + ->setObject($panel); 68 + 69 + $list->addItem($item); 70 + } 71 + 72 + return $list; 47 73 } 48 74 49 75 }
+1 -62
src/applications/differential/controller/DifferentialRevisionListController.php
··· 1 1 <?php 2 2 3 - final class DifferentialRevisionListController extends DifferentialController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class DifferentialRevisionListController extends DifferentialController { 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 $revisions, 28 - PhabricatorSavedQuery $query) { 29 - assert_instances_of($revisions, 'DifferentialRevision'); 30 - 31 - $user = $this->getRequest()->getUser(); 32 - $template = id(new DifferentialRevisionListView()) 33 - ->setUser($user); 34 - 35 - $views = array(); 36 - if ($query->getQueryKey() == 'active') { 37 - $split = DifferentialRevisionQuery::splitResponsible( 38 - $revisions, 39 - $query->getParameter('responsiblePHIDs')); 40 - list($blocking, $active, $waiting) = $split; 41 - 42 - $views[] = id(clone $template) 43 - ->setHeader(pht('Blocking Others')) 44 - ->setNoDataString( 45 - pht('No revisions are blocked on your action.')) 46 - ->setHighlightAge(true) 47 - ->setRevisions($blocking) 48 - ->setHandles(array()); 49 - 50 - $views[] = id(clone $template) 51 - ->setHeader(pht('Action Required')) 52 - ->setNoDataString( 53 - pht('No revisions require your action.')) 54 - ->setHighlightAge(true) 55 - ->setRevisions($active) 56 - ->setHandles(array()); 57 - 58 - $views[] = id(clone $template) 59 - ->setHeader(pht('Waiting on Others')) 60 - ->setNoDataString( 61 - pht('You have no revisions waiting on others.')) 62 - ->setRevisions($waiting) 63 - ->setHandles(array()); 64 - } else { 65 - $views[] = id(clone $template) 66 - ->setRevisions($revisions) 67 - ->setHandles(array()); 68 - } 69 - 70 - $phids = array_mergev(mpull($views, 'getRequiredHandlePHIDs')); 71 - $handles = $this->loadViewerHandles($phids); 72 - 73 - foreach ($views as $view) { 74 - $view->setHandles($handles); 75 - } 76 - 77 - if (count($views) == 1) { 78 - // Reduce this to a PHUIObjectItemListView so we can get the free 79 - // support from ApplicationSearch. 80 - return head($views)->render(); 81 - } else { 82 - return $views; 83 - } 84 23 } 85 24 86 25 }
+72
src/applications/differential/query/DifferentialRevisionSearchEngine.php
··· 3 3 final class DifferentialRevisionSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationDifferential'; 8 + } 9 + 6 10 public function getPageSize(PhabricatorSavedQuery $saved) { 7 11 if ($saved->getQueryKey() == 'active') { 8 12 return 0xFFFF; ··· 241 245 DifferentialRevisionQuery::ORDER_CREATED => pht('Created'), 242 246 DifferentialRevisionQuery::ORDER_MODIFIED => pht('Updated'), 243 247 ); 248 + } 249 + 250 + protected function renderResultList( 251 + array $revisions, 252 + PhabricatorSavedQuery $query, 253 + array $handles) { 254 + assert_instances_of($revisions, 'DifferentialRevision'); 255 + 256 + $viewer = $this->requireViewer(); 257 + $template = id(new DifferentialRevisionListView()) 258 + ->setUser($viewer); 259 + 260 + $views = array(); 261 + if ($query->getQueryKey() == 'active') { 262 + $split = DifferentialRevisionQuery::splitResponsible( 263 + $revisions, 264 + $query->getParameter('responsiblePHIDs')); 265 + list($blocking, $active, $waiting) = $split; 266 + 267 + $views[] = id(clone $template) 268 + ->setHeader(pht('Blocking Others')) 269 + ->setNoDataString( 270 + pht('No revisions are blocked on your action.')) 271 + ->setHighlightAge(true) 272 + ->setRevisions($blocking) 273 + ->setHandles(array()); 274 + 275 + $views[] = id(clone $template) 276 + ->setHeader(pht('Action Required')) 277 + ->setNoDataString( 278 + pht('No revisions require your action.')) 279 + ->setHighlightAge(true) 280 + ->setRevisions($active) 281 + ->setHandles(array()); 282 + 283 + $views[] = id(clone $template) 284 + ->setHeader(pht('Waiting on Others')) 285 + ->setNoDataString( 286 + pht('You have no revisions waiting on others.')) 287 + ->setRevisions($waiting) 288 + ->setHandles(array()); 289 + } else { 290 + $views[] = id(clone $template) 291 + ->setRevisions($revisions) 292 + ->setHandles(array()); 293 + } 294 + 295 + $phids = array_mergev(mpull($views, 'getRequiredHandlePHIDs')); 296 + if ($phids) { 297 + $handles = id(new PhabricatorHandleQuery()) 298 + ->setViewer($viewer) 299 + ->withPHIDs($phids) 300 + ->execute(); 301 + } else { 302 + $handles = array(); 303 + } 304 + 305 + foreach ($views as $view) { 306 + $view->setHandles($handles); 307 + } 308 + 309 + if (count($views) == 1) { 310 + // Reduce this to a PHUIObjectItemListView so we can get the free 311 + // support from ApplicationSearch. 312 + return head($views)->render(); 313 + } else { 314 + return $views; 315 + } 244 316 } 245 317 246 318 }
+1 -2
src/applications/diffusion/controller/DiffusionPushLogListController.php
··· 1 1 <?php 2 2 3 - final class DiffusionPushLogListController extends DiffusionPushLogController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class DiffusionPushLogListController extends DiffusionPushLogController { 5 4 6 5 private $queryKey; 7 6
+1 -79
src/applications/diffusion/controller/DiffusionRepositoryListController.php
··· 1 1 <?php 2 2 3 - final class DiffusionRepositoryListController extends DiffusionController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class DiffusionRepositoryListController extends DiffusionController { 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 $repositories, 28 - PhabricatorSavedQuery $query) { 29 - assert_instances_of($repositories, 'PhabricatorRepository'); 30 - 31 - $viewer = $this->getRequest()->getUser(); 32 - 33 - $project_phids = array_fuse( 34 - array_mergev( 35 - mpull($repositories, 'getProjectPHIDs'))); 36 - $project_handles = $this->loadViewerHandles($project_phids); 37 - 38 - $list = new PHUIObjectItemListView(); 39 - $list->setCards(true); 40 - foreach ($repositories as $repository) { 41 - $id = $repository->getID(); 42 - 43 - $item = id(new PHUIObjectItemView()) 44 - ->setUser($viewer) 45 - ->setHeader($repository->getName()) 46 - ->setObjectName('r'.$repository->getCallsign()) 47 - ->setHref($this->getApplicationURI($repository->getCallsign().'/')); 48 - 49 - $commit = $repository->getMostRecentCommit(); 50 - if ($commit) { 51 - $commit_link = DiffusionView::linkCommit( 52 - $repository, 53 - $commit->getCommitIdentifier(), 54 - $commit->getSummary()); 55 - $item->setSubhead($commit_link); 56 - $item->setEpoch($commit->getEpoch()); 57 - } 58 - 59 - $item->addIcon( 60 - 'none', 61 - PhabricatorRepositoryType::getNameForRepositoryType( 62 - $repository->getVersionControlSystem())); 63 - 64 - $size = $repository->getCommitCount(); 65 - if ($size) { 66 - $history_uri = DiffusionRequest::generateDiffusionURI( 67 - array( 68 - 'callsign' => $repository->getCallsign(), 69 - 'action' => 'history', 70 - )); 71 - 72 - $item->addAttribute( 73 - phutil_tag( 74 - 'a', 75 - array( 76 - 'href' => $history_uri, 77 - ), 78 - pht('%s Commit(s)', new PhutilNumber($size)))); 79 - } else { 80 - $item->addAttribute(pht('No Commits')); 81 - } 82 - 83 - $handles = array_select_keys( 84 - $project_handles, 85 - $repository->getProjectPHIDs()); 86 - if ($handles) { 87 - $item->addAttribute( 88 - id(new ManiphestTaskProjectsView()) 89 - ->setHandles($handles)); 90 - } 91 - 92 - if (!$repository->isTracked()) { 93 - $item->setDisabled(true); 94 - $item->addIcon('disable-grey', pht('Inactive')); 95 - } 96 - 97 - $list->addItem($item); 98 - } 99 - 100 - return $list; 101 23 } 102 24 103 25 public function buildSideNavView($for_app = false) {
+1 -30
src/applications/diviner/controller/DivinerAtomListController.php
··· 1 1 <?php 2 2 3 - final class DivinerAtomListController extends DivinerController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class DivinerAtomListController extends DivinerController { 5 4 6 5 private $key; 7 6 ··· 21 20 ->setNavigation($this->buildSideNavView()); 22 21 23 22 return $this->delegateToController($controller); 24 - } 25 - 26 - public function renderResultsList( 27 - array $symbols, 28 - PhabricatorSavedQuery $query) { 29 - 30 - assert_instances_of($symbols, 'DivinerLiveSymbol'); 31 - 32 - $request = $this->getRequest(); 33 - $viewer = $request->getUser(); 34 - 35 - $list = id(new PHUIObjectItemListView()) 36 - ->setUser($viewer); 37 - 38 - foreach ($symbols as $symbol) { 39 - $type = $symbol->getType(); 40 - $type_name = DivinerAtom::getAtomTypeNameString($type); 41 - 42 - $item = id(new PHUIObjectItemView()) 43 - ->setHeader($symbol->getTitle()) 44 - ->setHref($symbol->getURI()) 45 - ->addAttribute($symbol->getSummary()) 46 - ->addIcon('none', $type_name); 47 - 48 - $list->addItem($item); 49 - } 50 - 51 - return $list; 52 23 } 53 24 54 25 }
+32
src/applications/diviner/query/DivinerAtomSearchEngine.php
··· 3 3 final class DivinerAtomSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationDiviner'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 86 90 } 87 91 88 92 return parent::buildSavedQueryFromBuiltin($query_key); 93 + } 94 + 95 + protected function renderResultList( 96 + array $symbols, 97 + PhabricatorSavedQuery $query, 98 + array $handles) { 99 + 100 + assert_instances_of($symbols, 'DivinerLiveSymbol'); 101 + 102 + $viewer = $this->requireViewer(); 103 + 104 + $list = id(new PHUIObjectItemListView()) 105 + ->setUser($viewer); 106 + 107 + foreach ($symbols as $symbol) { 108 + $type = $symbol->getType(); 109 + $type_name = DivinerAtom::getAtomTypeNameString($type); 110 + 111 + $item = id(new PHUIObjectItemView()) 112 + ->setHeader($symbol->getTitle()) 113 + ->setHref($symbol->getURI()) 114 + ->addAttribute($symbol->getSummary()) 115 + ->addIcon('none', $type_name); 116 + 117 + $list->addItem($item); 118 + } 119 + 120 + return $list; 89 121 } 90 122 91 123 }
+1 -28
src/applications/drydock/controller/DrydockBlueprintListController.php
··· 1 1 <?php 2 2 3 - final class DrydockBlueprintListController extends DrydockBlueprintController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class DrydockBlueprintListController extends DrydockBlueprintController { 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 $blueprints, 28 - PhabricatorSavedQuery $query) { 29 - assert_instances_of($blueprints, 'DrydockBlueprint'); 30 - 31 - $viewer = $this->getRequest()->getUser(); 32 - $view = new PHUIObjectItemListView(); 33 - 34 - foreach ($blueprints as $blueprint) { 35 - $item = id(new PHUIObjectItemView()) 36 - ->setHeader($blueprint->getBlueprintName()) 37 - ->setHref($this->getApplicationURI('/blueprint/'.$blueprint->getID())) 38 - ->setObjectName(pht('Blueprint %d', $blueprint->getID())); 39 - 40 - if (!$blueprint->getImplementation()->isEnabled()) { 41 - $item->setDisabled(true); 42 - } 43 - 44 - $item->addAttribute($blueprint->getImplementation()->getBlueprintName()); 45 - 46 - $view->addItem($item); 47 - } 48 - 49 - return $view; 50 23 } 51 24 52 25 public function buildApplicationCrumbs() {
+31
src/applications/drydock/query/DrydockBlueprintSearchEngine.php
··· 3 3 final class DrydockBlueprintSearchEngine 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 + public function renderResultList( 53 + array $blueprints, 54 + PhabricatorSavedQuery $query, 55 + array $handles) { 56 + assert_instances_of($blueprints, 'DrydockBlueprint'); 57 + 58 + $viewer = $this->requireViewer(); 59 + $view = new PHUIObjectItemListView(); 60 + 61 + foreach ($blueprints as $blueprint) { 62 + $item = id(new PHUIObjectItemView()) 63 + ->setHeader($blueprint->getBlueprintName()) 64 + ->setHref($this->getApplicationURI('/blueprint/'.$blueprint->getID())) 65 + ->setObjectName(pht('Blueprint %d', $blueprint->getID())); 66 + 67 + if (!$blueprint->getImplementation()->isEnabled()) { 68 + $item->setDisabled(true); 69 + } 70 + 71 + $item->addAttribute($blueprint->getImplementation()->getBlueprintName()); 72 + 73 + $view->addItem($item); 74 + } 75 + 76 + return $view; 46 77 } 47 78 48 79 }
-3
src/applications/files/application/PhabricatorApplicationFiles.php
··· 1 1 <?php 2 2 3 - /** 4 - * @group file 5 - */ 6 3 final class PhabricatorApplicationFiles extends PhabricatorApplication { 7 4 8 5 public function getBaseURI() {
+1 -63
src/applications/files/controller/PhabricatorFileListController.php
··· 1 1 <?php 2 2 3 - final class PhabricatorFileListController extends PhabricatorFileController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class PhabricatorFileListController extends PhabricatorFileController { 5 4 6 5 private $key; 7 6 ··· 21 20 ->setNavigation($this->buildSideNavView()); 22 21 23 22 return $this->delegateToController($controller); 24 - } 25 - 26 - public function renderResultsList( 27 - array $files, 28 - PhabricatorSavedQuery $query) { 29 - 30 - assert_instances_of($files, 'PhabricatorFile'); 31 - 32 - $request = $this->getRequest(); 33 - $user = $request->getUser(); 34 - 35 - $highlighted_ids = $request->getStrList('h'); 36 - $this->loadHandles(mpull($files, 'getAuthorPHID')); 37 - 38 - $request = $this->getRequest(); 39 - $user = $request->getUser(); 40 - 41 - $highlighted_ids = array_fill_keys($highlighted_ids, true); 42 - 43 - $list_view = id(new PHUIObjectItemListView()) 44 - ->setUser($user); 45 - 46 - foreach ($files as $file) { 47 - $id = $file->getID(); 48 - $phid = $file->getPHID(); 49 - $name = $file->getName(); 50 - $file_uri = $this->getApplicationURI("/info/{$phid}/"); 51 - 52 - $date_created = phabricator_date($file->getDateCreated(), $user); 53 - $author_phid = $file->getAuthorPHID(); 54 - if ($author_phid) { 55 - $author_link = $this->getHandle($author_phid)->renderLink(); 56 - $uploaded = pht('Uploaded by %s on %s', $author_link, $date_created); 57 - } else { 58 - $uploaded = pht('Uploaded on %s', $date_created); 59 - } 60 - 61 - $item = id(new PHUIObjectItemView()) 62 - ->setObject($file) 63 - ->setObjectName("F{$id}") 64 - ->setHeader($name) 65 - ->setHref($file_uri) 66 - ->addAttribute($uploaded) 67 - ->addIcon('none', phabricator_format_bytes($file->getByteSize())); 68 - 69 - $ttl = $file->getTTL(); 70 - if ($ttl !== null) { 71 - $item->addIcon('blame', pht('Temporary')); 72 - } 73 - 74 - if (isset($highlighted_ids[$id])) { 75 - $item->setEffect('highlighted'); 76 - } 77 - 78 - $list_view->addItem($item); 79 - } 80 - 81 - $list_view->appendChild(id(new PhabricatorGlobalUploadTargetView()) 82 - ->setUser($user)); 83 - 84 - return $list_view; 85 23 } 86 24 87 25 }
+72 -3
src/applications/files/query/PhabricatorFileSearchEngine.php
··· 1 1 <?php 2 2 3 - /** 4 - * @group file 5 - */ 6 3 final class PhabricatorFileSearchEngine 7 4 extends PhabricatorApplicationSearchEngine { 5 + 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationFiles'; 8 + } 8 9 9 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 10 11 $saved = new PhabricatorSavedQuery(); ··· 111 112 } 112 113 113 114 return parent::buildSavedQueryFromBuiltin($query_key); 115 + } 116 + 117 + protected function getRequiredHandlePHIDsForResultList( 118 + array $files, 119 + PhabricatorSavedQuery $query) { 120 + return mpull($files, 'getAuthorPHID'); 121 + } 122 + 123 + protected function renderResultList( 124 + array $files, 125 + PhabricatorSavedQuery $query, 126 + array $handles) { 127 + 128 + assert_instances_of($files, 'PhabricatorFile'); 129 + 130 + $request = $this->getRequest(); 131 + if ($request) { 132 + $highlighted_ids = $request->getStrList('h'); 133 + } else { 134 + $highlighted_ids = array(); 135 + } 136 + 137 + $viewer = $this->requireViewer(); 138 + 139 + $highlighted_ids = array_fill_keys($highlighted_ids, true); 140 + 141 + $list_view = id(new PHUIObjectItemListView()) 142 + ->setUser($viewer); 143 + 144 + foreach ($files as $file) { 145 + $id = $file->getID(); 146 + $phid = $file->getPHID(); 147 + $name = $file->getName(); 148 + $file_uri = $this->getApplicationURI("/info/{$phid}/"); 149 + 150 + $date_created = phabricator_date($file->getDateCreated(), $viewer); 151 + $author_phid = $file->getAuthorPHID(); 152 + if ($author_phid) { 153 + $author_link = $handles[$author_phid]->renderLink(); 154 + $uploaded = pht('Uploaded by %s on %s', $author_link, $date_created); 155 + } else { 156 + $uploaded = pht('Uploaded on %s', $date_created); 157 + } 158 + 159 + $item = id(new PHUIObjectItemView()) 160 + ->setObject($file) 161 + ->setObjectName("F{$id}") 162 + ->setHeader($name) 163 + ->setHref($file_uri) 164 + ->addAttribute($uploaded) 165 + ->addIcon('none', phabricator_format_bytes($file->getByteSize())); 166 + 167 + $ttl = $file->getTTL(); 168 + if ($ttl !== null) { 169 + $item->addIcon('blame', pht('Temporary')); 170 + } 171 + 172 + if (isset($highlighted_ids[$id])) { 173 + $item->setEffect('highlighted'); 174 + } 175 + 176 + $list_view->addItem($item); 177 + } 178 + 179 + $list_view->appendChild(id(new PhabricatorGlobalUploadTargetView()) 180 + ->setUser($viewer)); 181 + 182 + return $list_view; 114 183 } 115 184 116 185 }
+1 -54
src/applications/flag/controller/PhabricatorFlagListController.php
··· 1 1 <?php 2 2 3 - final class PhabricatorFlagListController extends PhabricatorFlagController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class PhabricatorFlagListController extends PhabricatorFlagController { 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 $flags, 28 - PhabricatorSavedQuery $query) { 29 - assert_instances_of($flags, 'PhabricatorFlag'); 30 - 31 - $viewer = $this->getRequest()->getUser(); 32 - 33 - $list = id(new PHUIObjectItemListView()) 34 - ->setUser($viewer); 35 - foreach ($flags as $flag) { 36 - $id = $flag->getID(); 37 - $phid = $flag->getObjectPHID(); 38 - 39 - $class = PhabricatorFlagColor::getCSSClass($flag->getColor()); 40 - 41 - $flag_icon = phutil_tag( 42 - 'div', 43 - array( 44 - 'class' => 'phabricator-flag-icon '.$class, 45 - ), 46 - ''); 47 - 48 - $item = id(new PHUIObjectItemView()) 49 - ->addHeadIcon($flag_icon) 50 - ->setHeader($flag->getHandle()->renderLink()); 51 - 52 - $item->addAction( 53 - id(new PHUIListItemView()) 54 - ->setIcon('edit') 55 - ->setHref($this->getApplicationURI("edit/{$phid}/")) 56 - ->setWorkflow(true)); 57 - 58 - $item->addAction( 59 - id(new PHUIListItemView()) 60 - ->setIcon('delete') 61 - ->setHref($this->getApplicationURI("delete/{$id}/")) 62 - ->setWorkflow(true)); 63 - 64 - if ($flag->getNote()) { 65 - $item->addAttribute($flag->getNote()); 66 - } 67 - 68 - $item->addIcon( 69 - 'none', 70 - phabricator_datetime($flag->getDateCreated(), $viewer)); 71 - 72 - $list->addItem($item); 73 - } 74 - 75 - return $list; 76 23 } 77 24 78 25 }
+58
src/applications/flag/query/PhabricatorFlagSearchEngine.php
··· 3 3 final class PhabricatorFlagSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationFlags'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 $saved->setParameter('colors', $request->getArr('colors')); ··· 114 118 115 119 return $options; 116 120 } 121 + 122 + protected function renderResultList( 123 + array $flags, 124 + PhabricatorSavedQuery $query, 125 + array $handles) { 126 + assert_instances_of($flags, 'PhabricatorFlag'); 127 + 128 + $viewer = $this->requireViewer(); 129 + 130 + $list = id(new PHUIObjectItemListView()) 131 + ->setUser($viewer); 132 + foreach ($flags as $flag) { 133 + $id = $flag->getID(); 134 + $phid = $flag->getObjectPHID(); 135 + 136 + $class = PhabricatorFlagColor::getCSSClass($flag->getColor()); 137 + 138 + $flag_icon = phutil_tag( 139 + 'div', 140 + array( 141 + 'class' => 'phabricator-flag-icon '.$class, 142 + ), 143 + ''); 144 + 145 + $item = id(new PHUIObjectItemView()) 146 + ->addHeadIcon($flag_icon) 147 + ->setHeader($flag->getHandle()->renderLink()); 148 + 149 + $item->addAction( 150 + id(new PHUIListItemView()) 151 + ->setIcon('edit') 152 + ->setHref($this->getApplicationURI("edit/{$phid}/")) 153 + ->setWorkflow(true)); 154 + 155 + $item->addAction( 156 + id(new PHUIListItemView()) 157 + ->setIcon('delete') 158 + ->setHref($this->getApplicationURI("delete/{$id}/")) 159 + ->setWorkflow(true)); 160 + 161 + if ($flag->getNote()) { 162 + $item->addAttribute($flag->getNote()); 163 + } 164 + 165 + $item->addIcon( 166 + 'none', 167 + phabricator_datetime($flag->getDateCreated(), $viewer)); 168 + 169 + $list->addItem($item); 170 + } 171 + 172 + return $list; 173 + } 174 + 117 175 118 176 }
+1 -55
src/applications/harbormaster/controller/HarbormasterBuildableListController.php
··· 1 1 <?php 2 2 3 - final class HarbormasterBuildableListController 4 - extends HarbormasterController 5 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class HarbormasterBuildableListController extends HarbormasterController { 6 4 7 5 private $queryKey; 8 6 ··· 22 20 ->setNavigation($this->buildSideNavView()); 23 21 24 22 return $this->delegateToController($controller); 25 - } 26 - 27 - public function renderResultsList( 28 - array $buildables, 29 - PhabricatorSavedQuery $query) { 30 - assert_instances_of($buildables, 'HarbormasterBuildable'); 31 - 32 - $viewer = $this->getRequest()->getUser(); 33 - 34 - $list = new PHUIObjectItemListView(); 35 - $list->setCards(true); 36 - foreach ($buildables as $buildable) { 37 - $id = $buildable->getID(); 38 - 39 - $item = id(new PHUIObjectItemView()) 40 - ->setHeader(pht('Buildable %d', $buildable->getID())); 41 - if ($buildable->getContainerHandle() !== null) { 42 - $item->addAttribute($buildable->getContainerHandle()->getName()); 43 - } 44 - if ($buildable->getBuildableHandle() !== null) { 45 - $item->addAttribute($buildable->getBuildableHandle()->getFullName()); 46 - } 47 - 48 - if ($id) { 49 - $item->setHref("/B{$id}"); 50 - } 51 - 52 - if ($buildable->getIsManualBuildable()) { 53 - $item->addIcon('wrench-grey', pht('Manual')); 54 - } 55 - 56 - switch ($buildable->getBuildableStatus()) { 57 - case HarbormasterBuildable::STATUS_PASSED: 58 - $item->setBarColor('green'); 59 - $item->addByline(pht('Build Passed')); 60 - break; 61 - case HarbormasterBuildable::STATUS_FAILED: 62 - $item->setBarColor('red'); 63 - $item->addByline(pht('Build Failed')); 64 - break; 65 - case HarbormasterBuildable::STATUS_BUILDING: 66 - $item->setBarColor('red'); 67 - $item->addByline(pht('Building')); 68 - break; 69 - 70 - } 71 - 72 - $list->addItem($item); 73 - 74 - } 75 - 76 - return $list; 77 23 } 78 24 79 25 public function buildSideNavView($for_app = false) {
+1 -30
src/applications/harbormaster/controller/HarbormasterPlanListController.php
··· 1 1 <?php 2 2 3 - final class HarbormasterPlanListController 4 - extends HarbormasterPlanController 5 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class HarbormasterPlanListController extends HarbormasterPlanController { 6 4 7 5 private $queryKey; 8 6 ··· 22 20 ->setNavigation($this->buildSideNavView()); 23 21 24 22 return $this->delegateToController($controller); 25 - } 26 - 27 - public function renderResultsList( 28 - array $plans, 29 - PhabricatorSavedQuery $query) { 30 - assert_instances_of($plans, 'HarbormasterBuildPlan'); 31 - 32 - $viewer = $this->getRequest()->getUser(); 33 - 34 - $list = new PHUIObjectItemListView(); 35 - foreach ($plans as $plan) { 36 - $id = $plan->getID(); 37 - 38 - $item = id(new PHUIObjectItemView()) 39 - ->setObjectName(pht('Plan %d', $plan->getID())) 40 - ->setHeader($plan->getName()); 41 - 42 - if ($plan->isDisabled()) { 43 - $item->setDisabled(true); 44 - } 45 - 46 - $item->setHref($this->getApplicationURI("plan/{$id}/")); 47 - 48 - $list->addItem($item); 49 - } 50 - 51 - return $list; 52 23 } 53 24 54 25 public function buildSideNavView($for_app = false) {
+32
src/applications/harbormaster/query/HarbormasterBuildPlanSearchEngine.php
··· 3 3 final class HarbormasterBuildPlanSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationHarbormaster'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 77 81 } 78 82 79 83 return parent::buildSavedQueryFromBuiltin($query_key); 84 + } 85 + 86 + protected function renderResultList( 87 + array $plans, 88 + PhabricatorSavedQuery $query, 89 + array $handles) { 90 + assert_instances_of($plans, 'HarbormasterBuildPlan'); 91 + 92 + $viewer = $this->requireViewer(); 93 + 94 + $list = new PHUIObjectItemListView(); 95 + foreach ($plans as $plan) { 96 + $id = $plan->getID(); 97 + 98 + $item = id(new PHUIObjectItemView()) 99 + ->setObjectName(pht('Plan %d', $plan->getID())) 100 + ->setHeader($plan->getName()); 101 + 102 + if ($plan->isDisabled()) { 103 + $item->setDisabled(true); 104 + } 105 + 106 + $item->setHref($this->getApplicationURI("plan/{$id}/")); 107 + 108 + $list->addItem($item); 109 + } 110 + 111 + return $list; 80 112 } 81 113 82 114 }
+56
src/applications/harbormaster/query/HarbormasterBuildableSearchEngine.php
··· 3 3 final class HarbormasterBuildableSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationHarbormaster'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 172 176 return parent::buildSavedQueryFromBuiltin($query_key); 173 177 } 174 178 179 + protected function renderResultList( 180 + array $buildables, 181 + PhabricatorSavedQuery $query, 182 + array $handles) { 183 + assert_instances_of($buildables, 'HarbormasterBuildable'); 184 + 185 + $viewer = $this->requireViewer(); 186 + 187 + $list = new PHUIObjectItemListView(); 188 + $list->setCards(true); 189 + foreach ($buildables as $buildable) { 190 + $id = $buildable->getID(); 191 + 192 + $item = id(new PHUIObjectItemView()) 193 + ->setHeader(pht('Buildable %d', $buildable->getID())); 194 + if ($buildable->getContainerHandle() !== null) { 195 + $item->addAttribute($buildable->getContainerHandle()->getName()); 196 + } 197 + if ($buildable->getBuildableHandle() !== null) { 198 + $item->addAttribute($buildable->getBuildableHandle()->getFullName()); 199 + } 200 + 201 + if ($id) { 202 + $item->setHref("/B{$id}"); 203 + } 204 + 205 + if ($buildable->getIsManualBuildable()) { 206 + $item->addIcon('wrench-grey', pht('Manual')); 207 + } 208 + 209 + switch ($buildable->getBuildableStatus()) { 210 + case HarbormasterBuildable::STATUS_PASSED: 211 + $item->setBarColor('green'); 212 + $item->addByline(pht('Build Passed')); 213 + break; 214 + case HarbormasterBuildable::STATUS_FAILED: 215 + $item->setBarColor('red'); 216 + $item->addByline(pht('Build Failed')); 217 + break; 218 + case HarbormasterBuildable::STATUS_BUILDING: 219 + $item->setBarColor('red'); 220 + $item->addByline(pht('Building')); 221 + break; 222 + 223 + } 224 + 225 + $list->addItem($item); 226 + 227 + } 228 + 229 + return $list; 230 + } 175 231 }
+1 -54
src/applications/herald/controller/HeraldRuleListController.php
··· 1 1 <?php 2 2 3 - final class HeraldRuleListController extends HeraldController 4 - implements PhabricatorApplicationSearchResultsControllerInterface { 3 + final class HeraldRuleListController extends HeraldController { 5 4 6 5 private $queryKey; 7 6 ··· 23 22 return $this->delegateToController($controller); 24 23 } 25 24 26 - public function renderResultsList( 27 - array $rules, 28 - PhabricatorSavedQuery $query) { 29 - assert_instances_of($rules, 'HeraldRule'); 30 - 31 - $viewer = $this->getRequest()->getUser(); 32 - 33 - $phids = mpull($rules, 'getAuthorPHID'); 34 - $this->loadHandles($phids); 35 - 36 - $content_type_map = HeraldAdapter::getEnabledAdapterMap($viewer); 37 - 38 - $list = id(new PHUIObjectItemListView()) 39 - ->setUser($viewer) 40 - ->setCards(true); 41 - foreach ($rules as $rule) { 42 - $id = $rule->getID(); 43 - 44 - $item = id(new PHUIObjectItemView()) 45 - ->setObjectName("H{$id}") 46 - ->setHeader($rule->getName()) 47 - ->setHref($this->getApplicationURI("rule/{$id}/")); 48 - 49 - if ($rule->isPersonalRule()) { 50 - $item->addIcon('user', pht('Personal Rule')); 51 - $item->addByline( 52 - pht( 53 - 'Authored by %s', 54 - $this->getHandle($rule->getAuthorPHID())->renderLink())); 55 - } else { 56 - $item->addIcon('world', pht('Global Rule')); 57 - } 58 - 59 - if ($rule->getIsDisabled()) { 60 - $item->setDisabled(true); 61 - $item->addIcon('disable-grey', pht('Disabled')); 62 - } 63 - 64 - $item->addAction( 65 - id(new PHUIListItemView()) 66 - ->setHref($this->getApplicationURI("history/{$id}/")) 67 - ->setIcon('transcript') 68 - ->setName(pht('Edit Log'))); 69 - 70 - $content_type_name = idx($content_type_map, $rule->getContentType()); 71 - $item->addAttribute(pht('Affects: %s', $content_type_name)); 72 - 73 - $list->addItem($item); 74 - } 75 - 76 - return $list; 77 - } 78 25 79 26 }
+61
src/applications/herald/query/HeraldRuleSearchEngine.php
··· 3 3 final class HeraldRuleSearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationHerald'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 150 154 151 155 private function getRuleTypeValues() { 152 156 return array_fuse(array_keys(HeraldRuleTypeConfig::getRuleTypeMap())); 157 + } 158 + 159 + protected function getRequiredHandlePHIDsForResultList( 160 + array $rules, 161 + PhabricatorSavedQuery $query) { 162 + return mpull($rules, 'getAuthorPHID'); 163 + } 164 + 165 + protected function renderResultList( 166 + array $rules, 167 + PhabricatorSavedQuery $query, 168 + array $handles) { 169 + assert_instances_of($rules, 'HeraldRule'); 170 + 171 + $viewer = $this->requireViewer(); 172 + 173 + $content_type_map = HeraldAdapter::getEnabledAdapterMap($viewer); 174 + 175 + $list = id(new PHUIObjectItemListView()) 176 + ->setUser($viewer) 177 + ->setCards(true); 178 + foreach ($rules as $rule) { 179 + $id = $rule->getID(); 180 + 181 + $item = id(new PHUIObjectItemView()) 182 + ->setObjectName("H{$id}") 183 + ->setHeader($rule->getName()) 184 + ->setHref($this->getApplicationURI("rule/{$id}/")); 185 + 186 + if ($rule->isPersonalRule()) { 187 + $item->addIcon('user', pht('Personal Rule')); 188 + $item->addByline( 189 + pht( 190 + 'Authored by %s', 191 + $handles[$rule->getAuthorPHID()]->renderLink())); 192 + } else { 193 + $item->addIcon('world', pht('Global Rule')); 194 + } 195 + 196 + if ($rule->getIsDisabled()) { 197 + $item->setDisabled(true); 198 + $item->addIcon('disable-grey', pht('Disabled')); 199 + } 200 + 201 + $item->addAction( 202 + id(new PHUIListItemView()) 203 + ->setHref($this->getApplicationURI("history/{$id}/")) 204 + ->setIcon('transcript') 205 + ->setName(pht('Edit Log'))); 206 + 207 + $content_type_name = idx($content_type_map, $rule->getContentType()); 208 + $item->addAttribute(pht('Affects: %s', $content_type_name)); 209 + 210 + $list->addItem($item); 211 + } 212 + 213 + return $list; 153 214 } 154 215 155 216 }
+83
src/applications/repository/query/PhabricatorRepositorySearchEngine.php
··· 3 3 final class PhabricatorRepositorySearchEngine 4 4 extends PhabricatorApplicationSearchEngine { 5 5 6 + public function getApplicationClassName() { 7 + return 'PhabricatorApplicationDiffusion'; 8 + } 9 + 6 10 public function buildSavedQueryFromRequest(AphrontRequest $request) { 7 11 $saved = new PhabricatorSavedQuery(); 8 12 ··· 213 217 'phabricator' => PhabricatorRepositoryQuery::HOSTED_PHABRICATOR, 214 218 'remote' => PhabricatorRepositoryQuery::HOSTED_REMOTE, 215 219 ); 220 + } 221 + 222 + protected function getRequiredHandlePHIDsForResultList( 223 + array $repositories, 224 + PhabricatorSavedQuery $query) { 225 + return array_mergev(mpull($repositories, 'getProjectPHIDs')); 226 + } 227 + 228 + protected function renderResultList( 229 + array $repositories, 230 + PhabricatorSavedQuery $query, 231 + array $handles) { 232 + assert_instances_of($repositories, 'PhabricatorRepository'); 233 + 234 + $viewer = $this->requireViewer();; 235 + 236 + $list = new PHUIObjectItemListView(); 237 + $list->setCards(true); 238 + foreach ($repositories as $repository) { 239 + $id = $repository->getID(); 240 + 241 + $item = id(new PHUIObjectItemView()) 242 + ->setUser($viewer) 243 + ->setHeader($repository->getName()) 244 + ->setObjectName('r'.$repository->getCallsign()) 245 + ->setHref($this->getApplicationURI($repository->getCallsign().'/')); 246 + 247 + $commit = $repository->getMostRecentCommit(); 248 + if ($commit) { 249 + $commit_link = DiffusionView::linkCommit( 250 + $repository, 251 + $commit->getCommitIdentifier(), 252 + $commit->getSummary()); 253 + $item->setSubhead($commit_link); 254 + $item->setEpoch($commit->getEpoch()); 255 + } 256 + 257 + $item->addIcon( 258 + 'none', 259 + PhabricatorRepositoryType::getNameForRepositoryType( 260 + $repository->getVersionControlSystem())); 261 + 262 + $size = $repository->getCommitCount(); 263 + if ($size) { 264 + $history_uri = DiffusionRequest::generateDiffusionURI( 265 + array( 266 + 'callsign' => $repository->getCallsign(), 267 + 'action' => 'history', 268 + )); 269 + 270 + $item->addAttribute( 271 + phutil_tag( 272 + 'a', 273 + array( 274 + 'href' => $history_uri, 275 + ), 276 + pht('%s Commit(s)', new PhutilNumber($size)))); 277 + } else { 278 + $item->addAttribute(pht('No Commits')); 279 + } 280 + 281 + $project_handles = array_select_keys( 282 + $handles, 283 + $repository->getProjectPHIDs()); 284 + if ($project_handles) { 285 + $item->addAttribute( 286 + id(new ManiphestTaskProjectsView()) 287 + ->setHandles($project_handles)); 288 + } 289 + 290 + if (!$repository->isTracked()) { 291 + $item->setDisabled(true); 292 + $item->addIcon('disable-grey', pht('Inactive')); 293 + } 294 + 295 + $list->addItem($item); 296 + } 297 + 298 + return $list; 216 299 } 217 300 218 301 }
+2
src/applications/search/controller/PhabricatorApplicationSearchController.php
··· 220 220 if ($parent instanceof $interface) { 221 221 $list = $parent->renderResultsList($objects, $saved_query); 222 222 } else { 223 + $engine->setRequest($request); 224 + 223 225 $list = $engine->renderResults( 224 226 $objects, 225 227 $saved_query);
+10
src/applications/search/engine/PhabricatorApplicationSearchEngine.php
··· 21 21 private $viewer; 22 22 private $errors = array(); 23 23 private $customFields = false; 24 + private $request; 24 25 25 26 public function setViewer(PhabricatorUser $viewer) { 26 27 $this->viewer = $viewer; ··· 592 593 593 594 /* -( Rendering )---------------------------------------------------------- */ 594 595 596 + 597 + public function setRequest(AphrontRequest $request) { 598 + $this->request = $request; 599 + return $this; 600 + } 601 + 602 + public function getRequest() { 603 + return $this->request; 604 + } 595 605 596 606 public function renderResults( 597 607 array $objects,