1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-09-20 09:18:48 +02:00

Use ApplicationSearch for Drydock Blueprints

Summary: Ref T2015. This turns the side nav into a bigger mess for now, but uses ApplicationSearch for blueprints.

Test Plan: Queried blueprints in the UI.

Reviewers: btrahan

Reviewed By: btrahan

CC: hach-que, aran

Maniphest Tasks: T2015

Differential Revision: https://secure.phabricator.com/D7829
This commit is contained in:
epriestley 2013-12-26 12:30:04 -08:00
parent 1a82743491
commit fa00e86f87
7 changed files with 101 additions and 48 deletions

View file

@ -642,6 +642,7 @@ phutil_register_library_map(array(
'DrydockBlueprintListController' => 'applications/drydock/controller/DrydockBlueprintListController.php',
'DrydockBlueprintQuery' => 'applications/drydock/query/DrydockBlueprintQuery.php',
'DrydockBlueprintScopeGuard' => 'applications/drydock/util/DrydockBlueprintScopeGuard.php',
'DrydockBlueprintSearchEngine' => 'applications/drydock/query/DrydockBlueprintSearchEngine.php',
'DrydockBlueprintViewController' => 'applications/drydock/controller/DrydockBlueprintViewController.php',
'DrydockCommandInterface' => 'applications/drydock/interface/command/DrydockCommandInterface.php',
'DrydockConstants' => 'applications/drydock/constants/DrydockConstants.php',
@ -3042,8 +3043,13 @@ phutil_register_library_map(array(
),
'DrydockBlueprintCreateController' => 'DrydockController',
'DrydockBlueprintEditController' => 'DrydockController',
'DrydockBlueprintListController' => 'DrydockController',
'DrydockBlueprintListController' =>
array(
0 => 'DrydockController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'DrydockBlueprintQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DrydockBlueprintSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DrydockBlueprintViewController' => 'DrydockController',
'DrydockCommandInterface' => 'DrydockInterface',
'DrydockController' => 'PhabricatorController',

View file

@ -35,7 +35,7 @@ final class PhabricatorApplicationDrydock extends PhabricatorApplication {
'/drydock/' => array(
'' => 'DrydockResourceListController',
'blueprint/' => array(
'' => 'DrydockBlueprintListController',
'(?:query/(?P<queryKey>[^/]+)/)?' => 'DrydockBlueprintListController',
'(?P<id>[1-9]\d*)/' => 'DrydockBlueprintViewController',
'create/' => 'DrydockBlueprintCreateController',
'edit/(?P<id>[1-9]\d*)/' => 'DrydockBlueprintEditController',

View file

@ -1,52 +1,34 @@
<?php
final class DrydockBlueprintListController extends DrydockController {
final class DrydockBlueprintListController extends DrydockController
implements PhabricatorApplicationSearchResultsControllerInterface {
private $queryKey;
public function shouldAllowPublic() {
return true;
}
public function willProcessRequest(array $data) {
$this->queryKey = idx($data, 'queryKey');
}
public function processRequest() {
$request = $this->getRequest();
$user = $request->getUser();
$title = pht('Blueprints');
$blueprint_header = id(new PHUIHeaderView())
->setHeader($title);
$blueprints = id(new DrydockBlueprintQuery())
->setViewer($user)
->execute();
$blueprint_list = $this->buildBlueprintListView($blueprints);
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addTextCrumb($title, $request->getRequestURI());
$crumbs->addAction(
id(new PHUIListItemView())
->setName(pht('New Blueprint'))
->setHref($this->getApplicationURI('blueprint/create/'))
->setIcon('create'));
$nav = $this->buildSideNav('blueprint');
$nav->setCrumbs($crumbs);
$nav->appendChild(
array(
$blueprint_header,
$blueprint_list
));
return $this->buildApplicationPage(
$nav,
array(
'title' => $title,
'device' => true,
));
$controller = id(new PhabricatorApplicationSearchController($request))
->setQueryKey($this->queryKey)
->setSearchEngine(new DrydockBlueprintSearchEngine())
->setNavigation($this->buildSideNav());
return $this->delegateToController($controller);
}
protected function buildBlueprintListView(array $blueprints) {
public function renderResultsList(
array $blueprints,
PhabricatorSavedQuery $query) {
assert_instances_of($blueprints, 'DrydockBlueprint');
$user = $this->getRequest()->getUser();
$viewer = $this->getRequest()->getUser();
$view = new PHUIObjectItemListView();
foreach ($blueprints as $blueprint) {

View file

@ -5,13 +5,18 @@ abstract class DrydockController extends PhabricatorController {
final protected function buildSideNav($selected = null) {
$nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI('/drydock/'));
$nav->addFilter('blueprint', 'Blueprints');
$nav->addFilter('resource', 'Resources');
id(new DrydockBlueprintSearchEngine())
->setViewer($this->getRequest()->getUser())
->addNavigationItems($nav->getMenu(), pht('Blueprints'));
id(new DrydockLeaseSearchEngine())
->setViewer($this->getRequest()->getUser())
->addNavigationItems($nav->getMenu(), pht('Leases'));
$nav->addLabel(pht('Resources'));
$nav->addFilter('resource', 'Resources');
$nav->addLabel(pht('Logs'));
$nav->addFilter('log', 'Logs');

View file

@ -0,0 +1,48 @@
<?php
final class DrydockBlueprintSearchEngine
extends PhabricatorApplicationSearchEngine {
public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery();
return $saved;
}
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
$query = id(new DrydockBlueprintQuery());
return $query;
}
public function buildSearchForm(
AphrontFormView $form,
PhabricatorSavedQuery $saved) {
}
protected function getURI($path) {
return '/drydock/blueprint/'.$path;
}
public function getBuiltinQueryNames() {
$names = array(
'all' => pht('All Blueprints'),
);
return $names;
}
public function buildSavedQueryFromBuiltin($query_key) {
$query = $this->newSavedQuery();
$query->setQueryKey($query_key);
switch ($query_key) {
case 'all':
return $query;
}
return parent::buildSavedQueryFromBuiltin($query_key);
}
}

View file

@ -154,8 +154,8 @@ final class PhabricatorApplicationSearchController
}
$nav->selectFilter(
'query/'.$saved_query->getQueryKey(),
'query/advanced');
$engine->getNavPrefix().'query/'.$saved_query->getQueryKey(),
$engine->getNavPrefix().'query/advanced');
$form = id(new AphrontFormView())
->setUser($user);

View file

@ -107,6 +107,9 @@ abstract class PhabricatorApplicationSearchEngine {
->setEngineClassName(get_class($this));
}
public function getNavPrefix() {
return get_class($this).':';
}
public function addNavigationItems(PHUIListView $menu, $label = null) {
$viewer = $this->requireViewer();
@ -114,21 +117,30 @@ abstract class PhabricatorApplicationSearchEngine {
$menu->newLabel(coalesce($label, pht('Queries')));
$named_queries = $this->loadEnabledNamedQueries();
$prefix = $this->getNavPrefix();
foreach ($named_queries as $query) {
$key = $query->getQueryKey();
$uri = $this->getQueryResultsPageURI($key);
$menu->newLink($query->getQueryName(), $uri, 'query/'.$key);
$menu->newLink(
$query->getQueryName(),
$uri,
$prefix.'query/'.$key);
}
if ($viewer->isLoggedIn()) {
$manage_uri = $this->getQueryManagementURI();
$menu->newLink(pht('Edit Queries...'), $manage_uri, 'query/edit');
$menu->newLink(
pht('Edit Queries...'),
$manage_uri,
$prefix.'query/edit');
}
$menu->newLabel(pht('Search'));
$advanced_uri = $this->getQueryResultsPageURI('advanced');
$menu->newLink(pht('Advanced Search'), $advanced_uri, 'query/advanced');
$menu->newLink(
pht('Advanced Search'),
$advanced_uri, $prefix.'query/advanced');
return $this;
}