Page MenuHomePhabricator

D14157.diff
No OneTemporary

D14157.diff

diff --git a/src/applications/drydock/application/PhabricatorDrydockApplication.php b/src/applications/drydock/application/PhabricatorDrydockApplication.php
--- a/src/applications/drydock/application/PhabricatorDrydockApplication.php
+++ b/src/applications/drydock/application/PhabricatorDrydockApplication.php
@@ -53,6 +53,8 @@
'' => 'DrydockBlueprintViewController',
'(?P<action>disable|enable)/' =>
'DrydockBlueprintDisableController',
+ 'resources/(?:query/(?P<queryKey>[^/]+)/)?' =>
+ 'DrydockResourceListController',
),
'create/' => 'DrydockBlueprintCreateController',
'edit/(?:(?P<id>[1-9]\d*)/)?' => 'DrydockBlueprintEditController',
diff --git a/src/applications/drydock/controller/DrydockBlueprintViewController.php b/src/applications/drydock/controller/DrydockBlueprintViewController.php
--- a/src/applications/drydock/controller/DrydockBlueprintViewController.php
+++ b/src/applications/drydock/controller/DrydockBlueprintViewController.php
@@ -30,24 +30,6 @@
$actions = $this->buildActionListView($blueprint);
$properties = $this->buildPropertyListView($blueprint, $actions);
- $blueprint_uri = 'blueprint/'.$blueprint->getID().'/';
- $blueprint_uri = $this->getApplicationURI($blueprint_uri);
-
- $resources = id(new DrydockResourceQuery())
- ->withBlueprintPHIDs(array($blueprint->getPHID()))
- ->setViewer($viewer)
- ->execute();
-
- $resource_list = id(new DrydockResourceListView())
- ->setUser($viewer)
- ->setResources($resources)
- ->render();
- $resource_list->setNoDataString(pht('This blueprint has no resources.'));
-
- $pager = new PHUIPagerView();
- $pager->setURI(new PhutilURI($blueprint_uri), 'offset');
- $pager->setOffset($request->getInt('offset'));
-
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addTextCrumb(pht('Blueprint %d', $blueprint->getID()));
@@ -67,9 +49,7 @@
$viewer,
$properties);
- $resource_box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Resources'))
- ->setObjectList($resource_list);
+ $resource_box = $this->buildResourceBox($blueprint);
$timeline = $this->buildTransactionTimeline(
$blueprint,
@@ -148,4 +128,43 @@
return $view;
}
+ private function buildResourceBox(DrydockBlueprint $blueprint) {
+ $viewer = $this->getViewer();
+
+ $resources = id(new DrydockResourceQuery())
+ ->setViewer($viewer)
+ ->withBlueprintPHIDs(array($blueprint->getPHID()))
+ ->withStatuses(
+ array(
+ DrydockResourceStatus::STATUS_PENDING,
+ DrydockResourceStatus::STATUS_ACTIVE,
+ ))
+ ->setLimit(100)
+ ->execute();
+
+ $resource_list = id(new DrydockResourceListView())
+ ->setUser($viewer)
+ ->setResources($resources)
+ ->render()
+ ->setNoDataString(pht('This blueprint has no active resources.'));
+
+ $id = $blueprint->getID();
+ $resources_uri = "blueprint/{$id}/resources/query/all/";
+ $resources_uri = $this->getApplicationURI($resources_uri);
+
+ $resource_header = id(new PHUIHeaderView())
+ ->setHeader(pht('Active Resources'))
+ ->addActionLink(
+ id(new PHUIButtonView())
+ ->setTag('a')
+ ->setHref($resources_uri)
+ ->setIconFont('fa-search')
+ ->setText(pht('View All Resources')));
+
+ return id(new PHUIObjectBoxView())
+ ->setHeader($resource_header)
+ ->setObjectList($resource_list);
+ }
+
+
}
diff --git a/src/applications/drydock/controller/DrydockResourceController.php b/src/applications/drydock/controller/DrydockResourceController.php
--- a/src/applications/drydock/controller/DrydockResourceController.php
+++ b/src/applications/drydock/controller/DrydockResourceController.php
@@ -3,12 +3,23 @@
abstract class DrydockResourceController
extends DrydockController {
+ private $blueprint;
+
+ public function setBlueprint($blueprint) {
+ $this->blueprint = $blueprint;
+ return $this;
+ }
+
+ public function getBlueprint() {
+ return $this->blueprint;
+ }
+
public function buildSideNavView() {
$nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
id(new DrydockResourceSearchEngine())
- ->setViewer($this->getRequest()->getUser())
+ ->setViewer($this->getViewer())
->addNavigationItems($nav->getMenu());
$nav->selectFilter(null);
@@ -18,9 +29,26 @@
protected function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
- $crumbs->addTextCrumb(
- pht('Resources'),
- $this->getApplicationURI('resource/'));
+
+ $blueprint = $this->getBlueprint();
+ if ($blueprint) {
+ $id = $blueprint->getID();
+ $crumbs->addTextCrumb(
+ pht('Blueprints'),
+ $this->getApplicationURI('blueprint/'));
+
+ $crumbs->addTextCrumb(
+ $blueprint->getBlueprintName(),
+ $this->getApplicationURI("blueprint/{$id}/"));
+
+ $crumbs->addTextCrumb(
+ pht('Resources'),
+ $this->getApplicationURI("blueprint/{$id}/resources/"));
+ } else {
+ $crumbs->addTextCrumb(
+ pht('Resources'),
+ $this->getApplicationURI('resource/'));
+ }
return $crumbs;
}
diff --git a/src/applications/drydock/controller/DrydockResourceListController.php b/src/applications/drydock/controller/DrydockResourceListController.php
--- a/src/applications/drydock/controller/DrydockResourceListController.php
+++ b/src/applications/drydock/controller/DrydockResourceListController.php
@@ -7,12 +7,28 @@
}
public function handleRequest(AphrontRequest $request) {
- $viewer = $request->getViewer();
+ $viewer = $this->getViewer();
+
+ $engine = new DrydockResourceSearchEngine();
+
+ $id = $request->getURIData('id');
+ if ($id) {
+ $blueprint = id(new DrydockBlueprintQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($id))
+ ->executeOne();
+ if (!$blueprint) {
+ return new Aphront404Response();
+ }
+ $this->setBlueprint($blueprint);
+ $engine->setBlueprint($blueprint);
+ }
+
$querykey = $request->getURIData('queryKey');
$controller = id(new PhabricatorApplicationSearchController())
->setQueryKey($querykey)
- ->setSearchEngine(new DrydockResourceSearchEngine())
+ ->setSearchEngine($engine)
->setNavigation($this->buildSideNavView());
return $this->delegateToController($controller);
diff --git a/src/applications/drydock/query/DrydockResourceSearchEngine.php b/src/applications/drydock/query/DrydockResourceSearchEngine.php
--- a/src/applications/drydock/query/DrydockResourceSearchEngine.php
+++ b/src/applications/drydock/query/DrydockResourceSearchEngine.php
@@ -3,6 +3,17 @@
final class DrydockResourceSearchEngine
extends PhabricatorApplicationSearchEngine {
+ private $blueprint;
+
+ public function setBlueprint(DrydockBlueprint $blueprint) {
+ $this->blueprint = $blueprint;
+ return $this;
+ }
+
+ public function getBlueprint() {
+ return $this->blueprint;
+ }
+
public function getResultTypeDescription() {
return pht('Drydock Resources');
}
@@ -12,7 +23,14 @@
}
public function newQuery() {
- return new DrydockResourceQuery();
+ $query = new DrydockResourceQuery();
+
+ $blueprint = $this->getBlueprint();
+ if ($blueprint) {
+ $query->withBlueprintPHIDs(array($blueprint->getPHID()));
+ }
+
+ return $query;
}
protected function buildQueryFromParameters(array $map) {
@@ -35,7 +53,13 @@
}
protected function getURI($path) {
- return '/drydock/resource/'.$path;
+ $blueprint = $this->getBlueprint();
+ if ($blueprint) {
+ $id = $blueprint->getID();
+ return "/drydock/blueprint/{$id}/resources/".$path;
+ } else {
+ return '/drydock/resource/'.$path;
+ }
}
protected function getBuiltinQueryNames() {

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 20, 9:49 AM (1 w, 5 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7705694
Default Alt Text
D14157.diff (7 KB)

Event Timeline