1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-24 06:20:56 +01:00

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
This commit is contained in:
epriestley 2014-05-08 10:08:37 -07:00
parent c6a68aadc0
commit 78b89711cb
25 changed files with 561 additions and 556 deletions

View file

@ -3061,11 +3061,7 @@ phutil_register_library_map(array(
'DifferentialRevisionEditController' => 'DifferentialController', 'DifferentialRevisionEditController' => 'DifferentialController',
'DifferentialRevisionIDField' => 'DifferentialCustomField', 'DifferentialRevisionIDField' => 'DifferentialCustomField',
'DifferentialRevisionLandController' => 'DifferentialController', 'DifferentialRevisionLandController' => 'DifferentialController',
'DifferentialRevisionListController' => 'DifferentialRevisionListController' => 'DifferentialController',
array(
0 => 'DifferentialController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'DifferentialRevisionListView' => 'AphrontView', 'DifferentialRevisionListView' => 'AphrontView',
'DifferentialRevisionMailReceiver' => 'PhabricatorObjectMailReceiver', 'DifferentialRevisionMailReceiver' => 'PhabricatorObjectMailReceiver',
'DifferentialRevisionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'DifferentialRevisionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
@ -3150,11 +3146,7 @@ phutil_register_library_map(array(
'DiffusionPathValidateController' => 'DiffusionController', 'DiffusionPathValidateController' => 'DiffusionController',
'DiffusionPushEventViewController' => 'DiffusionPushLogController', 'DiffusionPushEventViewController' => 'DiffusionPushLogController',
'DiffusionPushLogController' => 'DiffusionController', 'DiffusionPushLogController' => 'DiffusionController',
'DiffusionPushLogListController' => 'DiffusionPushLogListController' => 'DiffusionPushLogController',
array(
0 => 'DiffusionPushLogController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'DiffusionQuery' => 'PhabricatorQuery', 'DiffusionQuery' => 'PhabricatorQuery',
'DiffusionRawDiffQuery' => 'DiffusionQuery', 'DiffusionRawDiffQuery' => 'DiffusionQuery',
'DiffusionRepositoryController' => 'DiffusionController', 'DiffusionRepositoryController' => 'DiffusionController',
@ -3172,11 +3164,7 @@ phutil_register_library_map(array(
'DiffusionRepositoryEditLocalController' => 'DiffusionRepositoryEditController', 'DiffusionRepositoryEditLocalController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditMainController' => 'DiffusionRepositoryEditController', 'DiffusionRepositoryEditMainController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditSubversionController' => 'DiffusionRepositoryEditController', 'DiffusionRepositoryEditSubversionController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryListController' => 'DiffusionRepositoryListController' => 'DiffusionController',
array(
0 => 'DiffusionController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'DiffusionRepositoryNewController' => 'DiffusionController', 'DiffusionRepositoryNewController' => 'DiffusionController',
'DiffusionRepositoryRef' => 'Phobject', 'DiffusionRepositoryRef' => 'Phobject',
'DiffusionRepositoryRemarkupRule' => 'PhabricatorRemarkupRuleObject', 'DiffusionRepositoryRemarkupRule' => 'PhabricatorRemarkupRuleObject',
@ -3208,11 +3196,7 @@ phutil_register_library_map(array(
'DivinerArticleAtomizer' => 'DivinerAtomizer', 'DivinerArticleAtomizer' => 'DivinerAtomizer',
'DivinerAtomCache' => 'DivinerDiskCache', 'DivinerAtomCache' => 'DivinerDiskCache',
'DivinerAtomController' => 'DivinerController', 'DivinerAtomController' => 'DivinerController',
'DivinerAtomListController' => 'DivinerAtomListController' => 'DivinerController',
array(
0 => 'DivinerController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'DivinerAtomQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'DivinerAtomQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DivinerAtomSearchEngine' => 'PhabricatorApplicationSearchEngine', 'DivinerAtomSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DivinerAtomizeWorkflow' => 'DivinerWorkflow', 'DivinerAtomizeWorkflow' => 'DivinerWorkflow',
@ -3281,11 +3265,7 @@ phutil_register_library_map(array(
'DrydockBlueprintCreateController' => 'DrydockBlueprintController', 'DrydockBlueprintCreateController' => 'DrydockBlueprintController',
'DrydockBlueprintEditController' => 'DrydockBlueprintController', 'DrydockBlueprintEditController' => 'DrydockBlueprintController',
'DrydockBlueprintEditor' => 'PhabricatorApplicationTransactionEditor', 'DrydockBlueprintEditor' => 'PhabricatorApplicationTransactionEditor',
'DrydockBlueprintListController' => 'DrydockBlueprintListController' => 'DrydockBlueprintController',
array(
0 => 'DrydockBlueprintController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'DrydockBlueprintQuery' => 'DrydockQuery', 'DrydockBlueprintQuery' => 'DrydockQuery',
'DrydockBlueprintSearchEngine' => 'PhabricatorApplicationSearchEngine', 'DrydockBlueprintSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DrydockBlueprintTransaction' => 'PhabricatorApplicationTransaction', 'DrydockBlueprintTransaction' => 'PhabricatorApplicationTransaction',
@ -3438,11 +3418,7 @@ phutil_register_library_map(array(
2 => 'HarbormasterBuildableInterface', 2 => 'HarbormasterBuildableInterface',
), ),
'HarbormasterBuildableActionController' => 'HarbormasterController', 'HarbormasterBuildableActionController' => 'HarbormasterController',
'HarbormasterBuildableListController' => 'HarbormasterBuildableListController' => 'HarbormasterController',
array(
0 => 'HarbormasterController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'HarbormasterBuildableQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'HarbormasterBuildableQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HarbormasterBuildableSearchEngine' => 'PhabricatorApplicationSearchEngine', 'HarbormasterBuildableSearchEngine' => 'PhabricatorApplicationSearchEngine',
'HarbormasterBuildableViewController' => 'HarbormasterController', 'HarbormasterBuildableViewController' => 'HarbormasterController',
@ -3466,11 +3442,7 @@ phutil_register_library_map(array(
'HarbormasterPlanController' => 'HarbormasterController', 'HarbormasterPlanController' => 'HarbormasterController',
'HarbormasterPlanDisableController' => 'HarbormasterPlanController', 'HarbormasterPlanDisableController' => 'HarbormasterPlanController',
'HarbormasterPlanEditController' => 'HarbormasterPlanController', 'HarbormasterPlanEditController' => 'HarbormasterPlanController',
'HarbormasterPlanListController' => 'HarbormasterPlanListController' => 'HarbormasterPlanController',
array(
0 => 'HarbormasterPlanController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'HarbormasterPlanOrderController' => 'HarbormasterController', 'HarbormasterPlanOrderController' => 'HarbormasterController',
'HarbormasterPlanRunController' => 'HarbormasterController', 'HarbormasterPlanRunController' => 'HarbormasterController',
'HarbormasterPlanViewController' => 'HarbormasterPlanController', 'HarbormasterPlanViewController' => 'HarbormasterPlanController',
@ -3520,11 +3492,7 @@ phutil_register_library_map(array(
'HeraldRuleEditHistoryController' => 'HeraldController', 'HeraldRuleEditHistoryController' => 'HeraldController',
'HeraldRuleEditHistoryView' => 'AphrontView', 'HeraldRuleEditHistoryView' => 'AphrontView',
'HeraldRuleEditor' => 'PhabricatorApplicationTransactionEditor', 'HeraldRuleEditor' => 'PhabricatorApplicationTransactionEditor',
'HeraldRuleListController' => 'HeraldRuleListController' => 'HeraldController',
array(
0 => 'HeraldController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'HeraldRuleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'HeraldRuleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'HeraldRuleSearchEngine' => 'PhabricatorApplicationSearchEngine', 'HeraldRuleSearchEngine' => 'PhabricatorApplicationSearchEngine',
'HeraldRuleTransaction' => 'PhabricatorApplicationTransaction', 'HeraldRuleTransaction' => 'PhabricatorApplicationTransaction',
@ -4133,11 +4101,7 @@ phutil_register_library_map(array(
'PhabricatorConduitConsoleController' => 'PhabricatorConduitController', 'PhabricatorConduitConsoleController' => 'PhabricatorConduitController',
'PhabricatorConduitController' => 'PhabricatorController', 'PhabricatorConduitController' => 'PhabricatorController',
'PhabricatorConduitDAO' => 'PhabricatorLiskDAO', 'PhabricatorConduitDAO' => 'PhabricatorLiskDAO',
'PhabricatorConduitListController' => 'PhabricatorConduitListController' => 'PhabricatorConduitController',
array(
0 => 'PhabricatorConduitController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'PhabricatorConduitLogController' => 'PhabricatorConduitController', 'PhabricatorConduitLogController' => 'PhabricatorConduitController',
'PhabricatorConduitLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorConduitLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorConduitMethodCallLog' => 'PhabricatorConduitMethodCallLog' =>
@ -4202,11 +4166,7 @@ phutil_register_library_map(array(
'PhabricatorCountdownDAO' => 'PhabricatorLiskDAO', 'PhabricatorCountdownDAO' => 'PhabricatorLiskDAO',
'PhabricatorCountdownDeleteController' => 'PhabricatorCountdownController', 'PhabricatorCountdownDeleteController' => 'PhabricatorCountdownController',
'PhabricatorCountdownEditController' => 'PhabricatorCountdownController', 'PhabricatorCountdownEditController' => 'PhabricatorCountdownController',
'PhabricatorCountdownListController' => 'PhabricatorCountdownListController' => 'PhabricatorCountdownController',
array(
0 => 'PhabricatorCountdownController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'PhabricatorCountdownPHIDTypeCountdown' => 'PhabricatorPHIDType', 'PhabricatorCountdownPHIDTypeCountdown' => 'PhabricatorPHIDType',
'PhabricatorCountdownQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorCountdownQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorCountdownRemarkupRule' => 'PhabricatorRemarkupRuleObject', 'PhabricatorCountdownRemarkupRule' => 'PhabricatorRemarkupRuleObject',
@ -4265,11 +4225,7 @@ phutil_register_library_map(array(
'PhabricatorDashboardController' => 'PhabricatorController', 'PhabricatorDashboardController' => 'PhabricatorController',
'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO', 'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO',
'PhabricatorDashboardEditController' => 'PhabricatorDashboardController', 'PhabricatorDashboardEditController' => 'PhabricatorDashboardController',
'PhabricatorDashboardListController' => 'PhabricatorDashboardListController' => 'PhabricatorDashboardController',
array(
0 => 'PhabricatorDashboardController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'PhabricatorDashboardPHIDTypeDashboard' => 'PhabricatorPHIDType', 'PhabricatorDashboardPHIDTypeDashboard' => 'PhabricatorPHIDType',
'PhabricatorDashboardPHIDTypePanel' => 'PhabricatorPHIDType', 'PhabricatorDashboardPHIDTypePanel' => 'PhabricatorPHIDType',
'PhabricatorDashboardPanel' => 'PhabricatorDashboardPanel' =>
@ -4286,11 +4242,7 @@ phutil_register_library_map(array(
'PhabricatorDashboardPanelCreateController' => 'PhabricatorDashboardController', 'PhabricatorDashboardPanelCreateController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelCustomField' => 'PhabricatorCustomField', 'PhabricatorDashboardPanelCustomField' => 'PhabricatorCustomField',
'PhabricatorDashboardPanelEditController' => 'PhabricatorDashboardController', 'PhabricatorDashboardPanelEditController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelListController' => 'PhabricatorDashboardPanelListController' => 'PhabricatorDashboardController',
array(
0 => 'PhabricatorDashboardController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'PhabricatorDashboardPanelQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorDashboardPanelQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorDashboardPanelRenderController' => 'PhabricatorDashboardController', 'PhabricatorDashboardPanelRenderController' => 'PhabricatorDashboardController',
'PhabricatorDashboardPanelRenderingEngine' => 'Phobject', 'PhabricatorDashboardPanelRenderingEngine' => 'Phobject',
@ -4415,11 +4367,7 @@ phutil_register_library_map(array(
'PhabricatorFileInfoController' => 'PhabricatorFileController', 'PhabricatorFileInfoController' => 'PhabricatorFileController',
'PhabricatorFileLinkListView' => 'AphrontView', 'PhabricatorFileLinkListView' => 'AphrontView',
'PhabricatorFileLinkView' => 'AphrontView', 'PhabricatorFileLinkView' => 'AphrontView',
'PhabricatorFileListController' => 'PhabricatorFileListController' => 'PhabricatorFileController',
array(
0 => 'PhabricatorFileController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'PhabricatorFilePHIDTypeFile' => 'PhabricatorPHIDType', 'PhabricatorFilePHIDTypeFile' => 'PhabricatorPHIDType',
'PhabricatorFileQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorFileQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorFileSearchEngine' => 'PhabricatorApplicationSearchEngine', 'PhabricatorFileSearchEngine' => 'PhabricatorApplicationSearchEngine',
@ -4452,11 +4400,7 @@ phutil_register_library_map(array(
'PhabricatorFlagDAO' => 'PhabricatorLiskDAO', 'PhabricatorFlagDAO' => 'PhabricatorLiskDAO',
'PhabricatorFlagDeleteController' => 'PhabricatorFlagController', 'PhabricatorFlagDeleteController' => 'PhabricatorFlagController',
'PhabricatorFlagEditController' => 'PhabricatorFlagController', 'PhabricatorFlagEditController' => 'PhabricatorFlagController',
'PhabricatorFlagListController' => 'PhabricatorFlagListController' => 'PhabricatorFlagController',
array(
0 => 'PhabricatorFlagController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'PhabricatorFlagQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorFlagQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorFlagSearchEngine' => 'PhabricatorApplicationSearchEngine', 'PhabricatorFlagSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorFlagSelectControl' => 'AphrontFormControl', 'PhabricatorFlagSelectControl' => 'AphrontFormControl',

View file

@ -1,10 +1,10 @@
<?php <?php
final class PhabricatorDashboardPanelListController final class PhabricatorDashboardPanelListController
extends PhabricatorDashboardController extends PhabricatorDashboardController {
implements PhabricatorApplicationSearchResultsControllerInterface {
private $queryKey; private $queryKey;
public function willProcessRequest(array $data) { public function willProcessRequest(array $data) {
$this->queryKey = idx($data, 'queryKey'); $this->queryKey = idx($data, 'queryKey');
} }
@ -47,25 +47,4 @@ final class PhabricatorDashboardPanelListController
return $crumbs; return $crumbs;
} }
public function renderResultsList(
array $panels,
PhabricatorSavedQuery $query) {
$viewer = $this->getRequest()->getUser();
$list = new PHUIObjectItemListView();
$list->setUser($viewer);
foreach ($panels as $panel) {
$item = id(new PHUIObjectItemView())
->setObjectName($panel->getMonogram())
->setHeader($panel->getName())
->setHref('/'.$panel->getMonogram())
->setObject($panel);
$list->addItem($item);
}
return $list;
}
} }

View file

@ -3,6 +3,10 @@
final class PhabricatorDashboardPanelSearchEngine final class PhabricatorDashboardPanelSearchEngine
extends PhabricatorApplicationSearchEngine { extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationDashboard';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) { public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery(); $saved = new PhabricatorSavedQuery();
@ -46,4 +50,26 @@ final class PhabricatorDashboardPanelSearchEngine
return parent::buildSavedQueryFromBuiltin($query_key); return parent::buildSavedQueryFromBuiltin($query_key);
} }
protected function renderResultList(
array $panels,
PhabricatorSavedQuery $query,
array $handles) {
$viewer = $this->requireViewer();
$list = new PHUIObjectItemListView();
$list->setUser($viewer);
foreach ($panels as $panel) {
$item = id(new PHUIObjectItemView())
->setObjectName($panel->getMonogram())
->setHeader($panel->getName())
->setHref('/'.$panel->getMonogram())
->setObject($panel);
$list->addItem($item);
}
return $list;
}
} }

View file

@ -1,7 +1,6 @@
<?php <?php
final class DifferentialRevisionListController extends DifferentialController final class DifferentialRevisionListController extends DifferentialController {
implements PhabricatorApplicationSearchResultsControllerInterface {
private $queryKey; private $queryKey;
@ -23,64 +22,4 @@ final class DifferentialRevisionListController extends DifferentialController
return $this->delegateToController($controller); return $this->delegateToController($controller);
} }
public function renderResultsList(
array $revisions,
PhabricatorSavedQuery $query) {
assert_instances_of($revisions, 'DifferentialRevision');
$user = $this->getRequest()->getUser();
$template = id(new DifferentialRevisionListView())
->setUser($user);
$views = array();
if ($query->getQueryKey() == 'active') {
$split = DifferentialRevisionQuery::splitResponsible(
$revisions,
$query->getParameter('responsiblePHIDs'));
list($blocking, $active, $waiting) = $split;
$views[] = id(clone $template)
->setHeader(pht('Blocking Others'))
->setNoDataString(
pht('No revisions are blocked on your action.'))
->setHighlightAge(true)
->setRevisions($blocking)
->setHandles(array());
$views[] = id(clone $template)
->setHeader(pht('Action Required'))
->setNoDataString(
pht('No revisions require your action.'))
->setHighlightAge(true)
->setRevisions($active)
->setHandles(array());
$views[] = id(clone $template)
->setHeader(pht('Waiting on Others'))
->setNoDataString(
pht('You have no revisions waiting on others.'))
->setRevisions($waiting)
->setHandles(array());
} else {
$views[] = id(clone $template)
->setRevisions($revisions)
->setHandles(array());
}
$phids = array_mergev(mpull($views, 'getRequiredHandlePHIDs'));
$handles = $this->loadViewerHandles($phids);
foreach ($views as $view) {
$view->setHandles($handles);
}
if (count($views) == 1) {
// Reduce this to a PHUIObjectItemListView so we can get the free
// support from ApplicationSearch.
return head($views)->render();
} else {
return $views;
}
}
} }

View file

@ -3,6 +3,10 @@
final class DifferentialRevisionSearchEngine final class DifferentialRevisionSearchEngine
extends PhabricatorApplicationSearchEngine { extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationDifferential';
}
public function getPageSize(PhabricatorSavedQuery $saved) { public function getPageSize(PhabricatorSavedQuery $saved) {
if ($saved->getQueryKey() == 'active') { if ($saved->getQueryKey() == 'active') {
return 0xFFFF; return 0xFFFF;
@ -243,4 +247,72 @@ final class DifferentialRevisionSearchEngine
); );
} }
protected function renderResultList(
array $revisions,
PhabricatorSavedQuery $query,
array $handles) {
assert_instances_of($revisions, 'DifferentialRevision');
$viewer = $this->requireViewer();
$template = id(new DifferentialRevisionListView())
->setUser($viewer);
$views = array();
if ($query->getQueryKey() == 'active') {
$split = DifferentialRevisionQuery::splitResponsible(
$revisions,
$query->getParameter('responsiblePHIDs'));
list($blocking, $active, $waiting) = $split;
$views[] = id(clone $template)
->setHeader(pht('Blocking Others'))
->setNoDataString(
pht('No revisions are blocked on your action.'))
->setHighlightAge(true)
->setRevisions($blocking)
->setHandles(array());
$views[] = id(clone $template)
->setHeader(pht('Action Required'))
->setNoDataString(
pht('No revisions require your action.'))
->setHighlightAge(true)
->setRevisions($active)
->setHandles(array());
$views[] = id(clone $template)
->setHeader(pht('Waiting on Others'))
->setNoDataString(
pht('You have no revisions waiting on others.'))
->setRevisions($waiting)
->setHandles(array());
} else {
$views[] = id(clone $template)
->setRevisions($revisions)
->setHandles(array());
}
$phids = array_mergev(mpull($views, 'getRequiredHandlePHIDs'));
if ($phids) {
$handles = id(new PhabricatorHandleQuery())
->setViewer($viewer)
->withPHIDs($phids)
->execute();
} else {
$handles = array();
}
foreach ($views as $view) {
$view->setHandles($handles);
}
if (count($views) == 1) {
// Reduce this to a PHUIObjectItemListView so we can get the free
// support from ApplicationSearch.
return head($views)->render();
} else {
return $views;
}
}
} }

View file

@ -1,7 +1,6 @@
<?php <?php
final class DiffusionPushLogListController extends DiffusionPushLogController final class DiffusionPushLogListController extends DiffusionPushLogController {
implements PhabricatorApplicationSearchResultsControllerInterface {
private $queryKey; private $queryKey;

View file

@ -1,7 +1,6 @@
<?php <?php
final class DiffusionRepositoryListController extends DiffusionController final class DiffusionRepositoryListController extends DiffusionController {
implements PhabricatorApplicationSearchResultsControllerInterface {
private $queryKey; private $queryKey;
@ -23,83 +22,6 @@ final class DiffusionRepositoryListController extends DiffusionController
return $this->delegateToController($controller); return $this->delegateToController($controller);
} }
public function renderResultsList(
array $repositories,
PhabricatorSavedQuery $query) {
assert_instances_of($repositories, 'PhabricatorRepository');
$viewer = $this->getRequest()->getUser();
$project_phids = array_fuse(
array_mergev(
mpull($repositories, 'getProjectPHIDs')));
$project_handles = $this->loadViewerHandles($project_phids);
$list = new PHUIObjectItemListView();
$list->setCards(true);
foreach ($repositories as $repository) {
$id = $repository->getID();
$item = id(new PHUIObjectItemView())
->setUser($viewer)
->setHeader($repository->getName())
->setObjectName('r'.$repository->getCallsign())
->setHref($this->getApplicationURI($repository->getCallsign().'/'));
$commit = $repository->getMostRecentCommit();
if ($commit) {
$commit_link = DiffusionView::linkCommit(
$repository,
$commit->getCommitIdentifier(),
$commit->getSummary());
$item->setSubhead($commit_link);
$item->setEpoch($commit->getEpoch());
}
$item->addIcon(
'none',
PhabricatorRepositoryType::getNameForRepositoryType(
$repository->getVersionControlSystem()));
$size = $repository->getCommitCount();
if ($size) {
$history_uri = DiffusionRequest::generateDiffusionURI(
array(
'callsign' => $repository->getCallsign(),
'action' => 'history',
));
$item->addAttribute(
phutil_tag(
'a',
array(
'href' => $history_uri,
),
pht('%s Commit(s)', new PhutilNumber($size))));
} else {
$item->addAttribute(pht('No Commits'));
}
$handles = array_select_keys(
$project_handles,
$repository->getProjectPHIDs());
if ($handles) {
$item->addAttribute(
id(new ManiphestTaskProjectsView())
->setHandles($handles));
}
if (!$repository->isTracked()) {
$item->setDisabled(true);
$item->addIcon('disable-grey', pht('Inactive'));
}
$list->addItem($item);
}
return $list;
}
public function buildSideNavView($for_app = false) { public function buildSideNavView($for_app = false) {
$viewer = $this->getRequest()->getUser(); $viewer = $this->getRequest()->getUser();

View file

@ -1,7 +1,6 @@
<?php <?php
final class DivinerAtomListController extends DivinerController final class DivinerAtomListController extends DivinerController {
implements PhabricatorApplicationSearchResultsControllerInterface {
private $key; private $key;
@ -23,32 +22,4 @@ final class DivinerAtomListController extends DivinerController
return $this->delegateToController($controller); return $this->delegateToController($controller);
} }
public function renderResultsList(
array $symbols,
PhabricatorSavedQuery $query) {
assert_instances_of($symbols, 'DivinerLiveSymbol');
$request = $this->getRequest();
$viewer = $request->getUser();
$list = id(new PHUIObjectItemListView())
->setUser($viewer);
foreach ($symbols as $symbol) {
$type = $symbol->getType();
$type_name = DivinerAtom::getAtomTypeNameString($type);
$item = id(new PHUIObjectItemView())
->setHeader($symbol->getTitle())
->setHref($symbol->getURI())
->addAttribute($symbol->getSummary())
->addIcon('none', $type_name);
$list->addItem($item);
}
return $list;
}
} }

View file

@ -3,6 +3,10 @@
final class DivinerAtomSearchEngine final class DivinerAtomSearchEngine
extends PhabricatorApplicationSearchEngine { extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationDiviner';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) { public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery(); $saved = new PhabricatorSavedQuery();
@ -88,4 +92,32 @@ final class DivinerAtomSearchEngine
return parent::buildSavedQueryFromBuiltin($query_key); return parent::buildSavedQueryFromBuiltin($query_key);
} }
protected function renderResultList(
array $symbols,
PhabricatorSavedQuery $query,
array $handles) {
assert_instances_of($symbols, 'DivinerLiveSymbol');
$viewer = $this->requireViewer();
$list = id(new PHUIObjectItemListView())
->setUser($viewer);
foreach ($symbols as $symbol) {
$type = $symbol->getType();
$type_name = DivinerAtom::getAtomTypeNameString($type);
$item = id(new PHUIObjectItemView())
->setHeader($symbol->getTitle())
->setHref($symbol->getURI())
->addAttribute($symbol->getSummary())
->addIcon('none', $type_name);
$list->addItem($item);
}
return $list;
}
} }

View file

@ -1,7 +1,6 @@
<?php <?php
final class DrydockBlueprintListController extends DrydockBlueprintController final class DrydockBlueprintListController extends DrydockBlueprintController {
implements PhabricatorApplicationSearchResultsControllerInterface {
private $queryKey; private $queryKey;
@ -23,32 +22,6 @@ final class DrydockBlueprintListController extends DrydockBlueprintController
return $this->delegateToController($controller); return $this->delegateToController($controller);
} }
public function renderResultsList(
array $blueprints,
PhabricatorSavedQuery $query) {
assert_instances_of($blueprints, 'DrydockBlueprint');
$viewer = $this->getRequest()->getUser();
$view = new PHUIObjectItemListView();
foreach ($blueprints as $blueprint) {
$item = id(new PHUIObjectItemView())
->setHeader($blueprint->getBlueprintName())
->setHref($this->getApplicationURI('/blueprint/'.$blueprint->getID()))
->setObjectName(pht('Blueprint %d', $blueprint->getID()));
if (!$blueprint->getImplementation()->isEnabled()) {
$item->setDisabled(true);
}
$item->addAttribute($blueprint->getImplementation()->getBlueprintName());
$view->addItem($item);
}
return $view;
}
public function buildApplicationCrumbs() { public function buildApplicationCrumbs() {
$can_create = $this->hasApplicationCapability( $can_create = $this->hasApplicationCapability(
DrydockCapabilityCreateBlueprints::CAPABILITY); DrydockCapabilityCreateBlueprints::CAPABILITY);

View file

@ -3,6 +3,10 @@
final class DrydockBlueprintSearchEngine final class DrydockBlueprintSearchEngine
extends PhabricatorApplicationSearchEngine { extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationDrydock';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) { public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery(); $saved = new PhabricatorSavedQuery();
@ -45,4 +49,31 @@ final class DrydockBlueprintSearchEngine
return parent::buildSavedQueryFromBuiltin($query_key); return parent::buildSavedQueryFromBuiltin($query_key);
} }
public function renderResultList(
array $blueprints,
PhabricatorSavedQuery $query,
array $handles) {
assert_instances_of($blueprints, 'DrydockBlueprint');
$viewer = $this->requireViewer();
$view = new PHUIObjectItemListView();
foreach ($blueprints as $blueprint) {
$item = id(new PHUIObjectItemView())
->setHeader($blueprint->getBlueprintName())
->setHref($this->getApplicationURI('/blueprint/'.$blueprint->getID()))
->setObjectName(pht('Blueprint %d', $blueprint->getID()));
if (!$blueprint->getImplementation()->isEnabled()) {
$item->setDisabled(true);
}
$item->addAttribute($blueprint->getImplementation()->getBlueprintName());
$view->addItem($item);
}
return $view;
}
} }

View file

@ -1,8 +1,5 @@
<?php <?php
/**
* @group file
*/
final class PhabricatorApplicationFiles extends PhabricatorApplication { final class PhabricatorApplicationFiles extends PhabricatorApplication {
public function getBaseURI() { public function getBaseURI() {

View file

@ -1,7 +1,6 @@
<?php <?php
final class PhabricatorFileListController extends PhabricatorFileController final class PhabricatorFileListController extends PhabricatorFileController {
implements PhabricatorApplicationSearchResultsControllerInterface {
private $key; private $key;
@ -23,65 +22,4 @@ final class PhabricatorFileListController extends PhabricatorFileController
return $this->delegateToController($controller); return $this->delegateToController($controller);
} }
public function renderResultsList(
array $files,
PhabricatorSavedQuery $query) {
assert_instances_of($files, 'PhabricatorFile');
$request = $this->getRequest();
$user = $request->getUser();
$highlighted_ids = $request->getStrList('h');
$this->loadHandles(mpull($files, 'getAuthorPHID'));
$request = $this->getRequest();
$user = $request->getUser();
$highlighted_ids = array_fill_keys($highlighted_ids, true);
$list_view = id(new PHUIObjectItemListView())
->setUser($user);
foreach ($files as $file) {
$id = $file->getID();
$phid = $file->getPHID();
$name = $file->getName();
$file_uri = $this->getApplicationURI("/info/{$phid}/");
$date_created = phabricator_date($file->getDateCreated(), $user);
$author_phid = $file->getAuthorPHID();
if ($author_phid) {
$author_link = $this->getHandle($author_phid)->renderLink();
$uploaded = pht('Uploaded by %s on %s', $author_link, $date_created);
} else {
$uploaded = pht('Uploaded on %s', $date_created);
}
$item = id(new PHUIObjectItemView())
->setObject($file)
->setObjectName("F{$id}")
->setHeader($name)
->setHref($file_uri)
->addAttribute($uploaded)
->addIcon('none', phabricator_format_bytes($file->getByteSize()));
$ttl = $file->getTTL();
if ($ttl !== null) {
$item->addIcon('blame', pht('Temporary'));
}
if (isset($highlighted_ids[$id])) {
$item->setEffect('highlighted');
}
$list_view->addItem($item);
}
$list_view->appendChild(id(new PhabricatorGlobalUploadTargetView())
->setUser($user));
return $list_view;
}
} }

View file

@ -1,11 +1,12 @@
<?php <?php
/**
* @group file
*/
final class PhabricatorFileSearchEngine final class PhabricatorFileSearchEngine
extends PhabricatorApplicationSearchEngine { extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationFiles';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) { public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery(); $saved = new PhabricatorSavedQuery();
$saved->setParameter( $saved->setParameter(
@ -113,4 +114,72 @@ final class PhabricatorFileSearchEngine
return parent::buildSavedQueryFromBuiltin($query_key); return parent::buildSavedQueryFromBuiltin($query_key);
} }
protected function getRequiredHandlePHIDsForResultList(
array $files,
PhabricatorSavedQuery $query) {
return mpull($files, 'getAuthorPHID');
}
protected function renderResultList(
array $files,
PhabricatorSavedQuery $query,
array $handles) {
assert_instances_of($files, 'PhabricatorFile');
$request = $this->getRequest();
if ($request) {
$highlighted_ids = $request->getStrList('h');
} else {
$highlighted_ids = array();
}
$viewer = $this->requireViewer();
$highlighted_ids = array_fill_keys($highlighted_ids, true);
$list_view = id(new PHUIObjectItemListView())
->setUser($viewer);
foreach ($files as $file) {
$id = $file->getID();
$phid = $file->getPHID();
$name = $file->getName();
$file_uri = $this->getApplicationURI("/info/{$phid}/");
$date_created = phabricator_date($file->getDateCreated(), $viewer);
$author_phid = $file->getAuthorPHID();
if ($author_phid) {
$author_link = $handles[$author_phid]->renderLink();
$uploaded = pht('Uploaded by %s on %s', $author_link, $date_created);
} else {
$uploaded = pht('Uploaded on %s', $date_created);
}
$item = id(new PHUIObjectItemView())
->setObject($file)
->setObjectName("F{$id}")
->setHeader($name)
->setHref($file_uri)
->addAttribute($uploaded)
->addIcon('none', phabricator_format_bytes($file->getByteSize()));
$ttl = $file->getTTL();
if ($ttl !== null) {
$item->addIcon('blame', pht('Temporary'));
}
if (isset($highlighted_ids[$id])) {
$item->setEffect('highlighted');
}
$list_view->addItem($item);
}
$list_view->appendChild(id(new PhabricatorGlobalUploadTargetView())
->setUser($viewer));
return $list_view;
}
} }

View file

@ -1,7 +1,6 @@
<?php <?php
final class PhabricatorFlagListController extends PhabricatorFlagController final class PhabricatorFlagListController extends PhabricatorFlagController {
implements PhabricatorApplicationSearchResultsControllerInterface {
private $queryKey; private $queryKey;
@ -23,56 +22,4 @@ final class PhabricatorFlagListController extends PhabricatorFlagController
return $this->delegateToController($controller); return $this->delegateToController($controller);
} }
public function renderResultsList(
array $flags,
PhabricatorSavedQuery $query) {
assert_instances_of($flags, 'PhabricatorFlag');
$viewer = $this->getRequest()->getUser();
$list = id(new PHUIObjectItemListView())
->setUser($viewer);
foreach ($flags as $flag) {
$id = $flag->getID();
$phid = $flag->getObjectPHID();
$class = PhabricatorFlagColor::getCSSClass($flag->getColor());
$flag_icon = phutil_tag(
'div',
array(
'class' => 'phabricator-flag-icon '.$class,
),
'');
$item = id(new PHUIObjectItemView())
->addHeadIcon($flag_icon)
->setHeader($flag->getHandle()->renderLink());
$item->addAction(
id(new PHUIListItemView())
->setIcon('edit')
->setHref($this->getApplicationURI("edit/{$phid}/"))
->setWorkflow(true));
$item->addAction(
id(new PHUIListItemView())
->setIcon('delete')
->setHref($this->getApplicationURI("delete/{$id}/"))
->setWorkflow(true));
if ($flag->getNote()) {
$item->addAttribute($flag->getNote());
}
$item->addIcon(
'none',
phabricator_datetime($flag->getDateCreated(), $viewer));
$list->addItem($item);
}
return $list;
}
} }

View file

@ -3,6 +3,10 @@
final class PhabricatorFlagSearchEngine final class PhabricatorFlagSearchEngine
extends PhabricatorApplicationSearchEngine { extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationFlags';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) { public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery(); $saved = new PhabricatorSavedQuery();
$saved->setParameter('colors', $request->getArr('colors')); $saved->setParameter('colors', $request->getArr('colors'));
@ -115,4 +119,58 @@ final class PhabricatorFlagSearchEngine
return $options; return $options;
} }
protected function renderResultList(
array $flags,
PhabricatorSavedQuery $query,
array $handles) {
assert_instances_of($flags, 'PhabricatorFlag');
$viewer = $this->requireViewer();
$list = id(new PHUIObjectItemListView())
->setUser($viewer);
foreach ($flags as $flag) {
$id = $flag->getID();
$phid = $flag->getObjectPHID();
$class = PhabricatorFlagColor::getCSSClass($flag->getColor());
$flag_icon = phutil_tag(
'div',
array(
'class' => 'phabricator-flag-icon '.$class,
),
'');
$item = id(new PHUIObjectItemView())
->addHeadIcon($flag_icon)
->setHeader($flag->getHandle()->renderLink());
$item->addAction(
id(new PHUIListItemView())
->setIcon('edit')
->setHref($this->getApplicationURI("edit/{$phid}/"))
->setWorkflow(true));
$item->addAction(
id(new PHUIListItemView())
->setIcon('delete')
->setHref($this->getApplicationURI("delete/{$id}/"))
->setWorkflow(true));
if ($flag->getNote()) {
$item->addAttribute($flag->getNote());
}
$item->addIcon(
'none',
phabricator_datetime($flag->getDateCreated(), $viewer));
$list->addItem($item);
}
return $list;
}
} }

View file

@ -1,8 +1,6 @@
<?php <?php
final class HarbormasterBuildableListController final class HarbormasterBuildableListController extends HarbormasterController {
extends HarbormasterController
implements PhabricatorApplicationSearchResultsControllerInterface {
private $queryKey; private $queryKey;
@ -24,58 +22,6 @@ final class HarbormasterBuildableListController
return $this->delegateToController($controller); return $this->delegateToController($controller);
} }
public function renderResultsList(
array $buildables,
PhabricatorSavedQuery $query) {
assert_instances_of($buildables, 'HarbormasterBuildable');
$viewer = $this->getRequest()->getUser();
$list = new PHUIObjectItemListView();
$list->setCards(true);
foreach ($buildables as $buildable) {
$id = $buildable->getID();
$item = id(new PHUIObjectItemView())
->setHeader(pht('Buildable %d', $buildable->getID()));
if ($buildable->getContainerHandle() !== null) {
$item->addAttribute($buildable->getContainerHandle()->getName());
}
if ($buildable->getBuildableHandle() !== null) {
$item->addAttribute($buildable->getBuildableHandle()->getFullName());
}
if ($id) {
$item->setHref("/B{$id}");
}
if ($buildable->getIsManualBuildable()) {
$item->addIcon('wrench-grey', pht('Manual'));
}
switch ($buildable->getBuildableStatus()) {
case HarbormasterBuildable::STATUS_PASSED:
$item->setBarColor('green');
$item->addByline(pht('Build Passed'));
break;
case HarbormasterBuildable::STATUS_FAILED:
$item->setBarColor('red');
$item->addByline(pht('Build Failed'));
break;
case HarbormasterBuildable::STATUS_BUILDING:
$item->setBarColor('red');
$item->addByline(pht('Building'));
break;
}
$list->addItem($item);
}
return $list;
}
public function buildSideNavView($for_app = false) { public function buildSideNavView($for_app = false) {
$user = $this->getRequest()->getUser(); $user = $this->getRequest()->getUser();

View file

@ -1,8 +1,6 @@
<?php <?php
final class HarbormasterPlanListController final class HarbormasterPlanListController extends HarbormasterPlanController {
extends HarbormasterPlanController
implements PhabricatorApplicationSearchResultsControllerInterface {
private $queryKey; private $queryKey;
@ -24,33 +22,6 @@ final class HarbormasterPlanListController
return $this->delegateToController($controller); return $this->delegateToController($controller);
} }
public function renderResultsList(
array $plans,
PhabricatorSavedQuery $query) {
assert_instances_of($plans, 'HarbormasterBuildPlan');
$viewer = $this->getRequest()->getUser();
$list = new PHUIObjectItemListView();
foreach ($plans as $plan) {
$id = $plan->getID();
$item = id(new PHUIObjectItemView())
->setObjectName(pht('Plan %d', $plan->getID()))
->setHeader($plan->getName());
if ($plan->isDisabled()) {
$item->setDisabled(true);
}
$item->setHref($this->getApplicationURI("plan/{$id}/"));
$list->addItem($item);
}
return $list;
}
public function buildSideNavView($for_app = false) { public function buildSideNavView($for_app = false) {
$user = $this->getRequest()->getUser(); $user = $this->getRequest()->getUser();

View file

@ -3,6 +3,10 @@
final class HarbormasterBuildPlanSearchEngine final class HarbormasterBuildPlanSearchEngine
extends PhabricatorApplicationSearchEngine { extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationHarbormaster';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) { public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery(); $saved = new PhabricatorSavedQuery();
@ -79,4 +83,32 @@ final class HarbormasterBuildPlanSearchEngine
return parent::buildSavedQueryFromBuiltin($query_key); return parent::buildSavedQueryFromBuiltin($query_key);
} }
protected function renderResultList(
array $plans,
PhabricatorSavedQuery $query,
array $handles) {
assert_instances_of($plans, 'HarbormasterBuildPlan');
$viewer = $this->requireViewer();
$list = new PHUIObjectItemListView();
foreach ($plans as $plan) {
$id = $plan->getID();
$item = id(new PHUIObjectItemView())
->setObjectName(pht('Plan %d', $plan->getID()))
->setHeader($plan->getName());
if ($plan->isDisabled()) {
$item->setDisabled(true);
}
$item->setHref($this->getApplicationURI("plan/{$id}/"));
$list->addItem($item);
}
return $list;
}
} }

View file

@ -3,6 +3,10 @@
final class HarbormasterBuildableSearchEngine final class HarbormasterBuildableSearchEngine
extends PhabricatorApplicationSearchEngine { extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationHarbormaster';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) { public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery(); $saved = new PhabricatorSavedQuery();
@ -172,4 +176,56 @@ final class HarbormasterBuildableSearchEngine
return parent::buildSavedQueryFromBuiltin($query_key); return parent::buildSavedQueryFromBuiltin($query_key);
} }
protected function renderResultList(
array $buildables,
PhabricatorSavedQuery $query,
array $handles) {
assert_instances_of($buildables, 'HarbormasterBuildable');
$viewer = $this->requireViewer();
$list = new PHUIObjectItemListView();
$list->setCards(true);
foreach ($buildables as $buildable) {
$id = $buildable->getID();
$item = id(new PHUIObjectItemView())
->setHeader(pht('Buildable %d', $buildable->getID()));
if ($buildable->getContainerHandle() !== null) {
$item->addAttribute($buildable->getContainerHandle()->getName());
}
if ($buildable->getBuildableHandle() !== null) {
$item->addAttribute($buildable->getBuildableHandle()->getFullName());
}
if ($id) {
$item->setHref("/B{$id}");
}
if ($buildable->getIsManualBuildable()) {
$item->addIcon('wrench-grey', pht('Manual'));
}
switch ($buildable->getBuildableStatus()) {
case HarbormasterBuildable::STATUS_PASSED:
$item->setBarColor('green');
$item->addByline(pht('Build Passed'));
break;
case HarbormasterBuildable::STATUS_FAILED:
$item->setBarColor('red');
$item->addByline(pht('Build Failed'));
break;
case HarbormasterBuildable::STATUS_BUILDING:
$item->setBarColor('red');
$item->addByline(pht('Building'));
break;
}
$list->addItem($item);
}
return $list;
}
} }

View file

@ -1,7 +1,6 @@
<?php <?php
final class HeraldRuleListController extends HeraldController final class HeraldRuleListController extends HeraldController {
implements PhabricatorApplicationSearchResultsControllerInterface {
private $queryKey; private $queryKey;
@ -23,57 +22,5 @@ final class HeraldRuleListController extends HeraldController
return $this->delegateToController($controller); return $this->delegateToController($controller);
} }
public function renderResultsList(
array $rules,
PhabricatorSavedQuery $query) {
assert_instances_of($rules, 'HeraldRule');
$viewer = $this->getRequest()->getUser();
$phids = mpull($rules, 'getAuthorPHID');
$this->loadHandles($phids);
$content_type_map = HeraldAdapter::getEnabledAdapterMap($viewer);
$list = id(new PHUIObjectItemListView())
->setUser($viewer)
->setCards(true);
foreach ($rules as $rule) {
$id = $rule->getID();
$item = id(new PHUIObjectItemView())
->setObjectName("H{$id}")
->setHeader($rule->getName())
->setHref($this->getApplicationURI("rule/{$id}/"));
if ($rule->isPersonalRule()) {
$item->addIcon('user', pht('Personal Rule'));
$item->addByline(
pht(
'Authored by %s',
$this->getHandle($rule->getAuthorPHID())->renderLink()));
} else {
$item->addIcon('world', pht('Global Rule'));
}
if ($rule->getIsDisabled()) {
$item->setDisabled(true);
$item->addIcon('disable-grey', pht('Disabled'));
}
$item->addAction(
id(new PHUIListItemView())
->setHref($this->getApplicationURI("history/{$id}/"))
->setIcon('transcript')
->setName(pht('Edit Log')));
$content_type_name = idx($content_type_map, $rule->getContentType());
$item->addAttribute(pht('Affects: %s', $content_type_name));
$list->addItem($item);
}
return $list;
}
} }

View file

@ -3,6 +3,10 @@
final class HeraldRuleSearchEngine final class HeraldRuleSearchEngine
extends PhabricatorApplicationSearchEngine { extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationHerald';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) { public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery(); $saved = new PhabricatorSavedQuery();
@ -152,4 +156,61 @@ final class HeraldRuleSearchEngine
return array_fuse(array_keys(HeraldRuleTypeConfig::getRuleTypeMap())); return array_fuse(array_keys(HeraldRuleTypeConfig::getRuleTypeMap()));
} }
protected function getRequiredHandlePHIDsForResultList(
array $rules,
PhabricatorSavedQuery $query) {
return mpull($rules, 'getAuthorPHID');
}
protected function renderResultList(
array $rules,
PhabricatorSavedQuery $query,
array $handles) {
assert_instances_of($rules, 'HeraldRule');
$viewer = $this->requireViewer();
$content_type_map = HeraldAdapter::getEnabledAdapterMap($viewer);
$list = id(new PHUIObjectItemListView())
->setUser($viewer)
->setCards(true);
foreach ($rules as $rule) {
$id = $rule->getID();
$item = id(new PHUIObjectItemView())
->setObjectName("H{$id}")
->setHeader($rule->getName())
->setHref($this->getApplicationURI("rule/{$id}/"));
if ($rule->isPersonalRule()) {
$item->addIcon('user', pht('Personal Rule'));
$item->addByline(
pht(
'Authored by %s',
$handles[$rule->getAuthorPHID()]->renderLink()));
} else {
$item->addIcon('world', pht('Global Rule'));
}
if ($rule->getIsDisabled()) {
$item->setDisabled(true);
$item->addIcon('disable-grey', pht('Disabled'));
}
$item->addAction(
id(new PHUIListItemView())
->setHref($this->getApplicationURI("history/{$id}/"))
->setIcon('transcript')
->setName(pht('Edit Log')));
$content_type_name = idx($content_type_map, $rule->getContentType());
$item->addAttribute(pht('Affects: %s', $content_type_name));
$list->addItem($item);
}
return $list;
}
} }

View file

@ -3,6 +3,10 @@
final class PhabricatorRepositorySearchEngine final class PhabricatorRepositorySearchEngine
extends PhabricatorApplicationSearchEngine { extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationDiffusion';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) { public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery(); $saved = new PhabricatorSavedQuery();
@ -215,4 +219,83 @@ final class PhabricatorRepositorySearchEngine
); );
} }
protected function getRequiredHandlePHIDsForResultList(
array $repositories,
PhabricatorSavedQuery $query) {
return array_mergev(mpull($repositories, 'getProjectPHIDs'));
}
protected function renderResultList(
array $repositories,
PhabricatorSavedQuery $query,
array $handles) {
assert_instances_of($repositories, 'PhabricatorRepository');
$viewer = $this->requireViewer();;
$list = new PHUIObjectItemListView();
$list->setCards(true);
foreach ($repositories as $repository) {
$id = $repository->getID();
$item = id(new PHUIObjectItemView())
->setUser($viewer)
->setHeader($repository->getName())
->setObjectName('r'.$repository->getCallsign())
->setHref($this->getApplicationURI($repository->getCallsign().'/'));
$commit = $repository->getMostRecentCommit();
if ($commit) {
$commit_link = DiffusionView::linkCommit(
$repository,
$commit->getCommitIdentifier(),
$commit->getSummary());
$item->setSubhead($commit_link);
$item->setEpoch($commit->getEpoch());
}
$item->addIcon(
'none',
PhabricatorRepositoryType::getNameForRepositoryType(
$repository->getVersionControlSystem()));
$size = $repository->getCommitCount();
if ($size) {
$history_uri = DiffusionRequest::generateDiffusionURI(
array(
'callsign' => $repository->getCallsign(),
'action' => 'history',
));
$item->addAttribute(
phutil_tag(
'a',
array(
'href' => $history_uri,
),
pht('%s Commit(s)', new PhutilNumber($size))));
} else {
$item->addAttribute(pht('No Commits'));
}
$project_handles = array_select_keys(
$handles,
$repository->getProjectPHIDs());
if ($project_handles) {
$item->addAttribute(
id(new ManiphestTaskProjectsView())
->setHandles($project_handles));
}
if (!$repository->isTracked()) {
$item->setDisabled(true);
$item->addIcon('disable-grey', pht('Inactive'));
}
$list->addItem($item);
}
return $list;
}
} }

View file

@ -220,6 +220,8 @@ final class PhabricatorApplicationSearchController
if ($parent instanceof $interface) { if ($parent instanceof $interface) {
$list = $parent->renderResultsList($objects, $saved_query); $list = $parent->renderResultsList($objects, $saved_query);
} else { } else {
$engine->setRequest($request);
$list = $engine->renderResults( $list = $engine->renderResults(
$objects, $objects,
$saved_query); $saved_query);

View file

@ -21,6 +21,7 @@ abstract class PhabricatorApplicationSearchEngine {
private $viewer; private $viewer;
private $errors = array(); private $errors = array();
private $customFields = false; private $customFields = false;
private $request;
public function setViewer(PhabricatorUser $viewer) { public function setViewer(PhabricatorUser $viewer) {
$this->viewer = $viewer; $this->viewer = $viewer;
@ -593,6 +594,15 @@ abstract class PhabricatorApplicationSearchEngine {
/* -( Rendering )---------------------------------------------------------- */ /* -( Rendering )---------------------------------------------------------- */
public function setRequest(AphrontRequest $request) {
$this->request = $request;
return $this;
}
public function getRequest() {
return $this->request;
}
public function renderResults( public function renderResults(
array $objects, array $objects,
PhabricatorSavedQuery $query) { PhabricatorSavedQuery $query) {