Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15411793
D14157.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Referenced Files
None
Subscribers
None
D14157.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D14157: Show recent active resources on Drydock blueprint detail, with link to all
Attached
Detach File
Event Timeline
Log In to Comment