Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14879480
D14158.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
8 KB
Referenced Files
None
Subscribers
None
D14158.id.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
@@ -64,6 +64,8 @@
'(?P<id>[1-9]\d*)/' => array(
'' => 'DrydockResourceViewController',
'release/' => 'DrydockResourceReleaseController',
+ 'leases/(?:query/(?P<queryKey>[^/]+)/)?' =>
+ 'DrydockLeaseListController',
),
),
'lease/' => array(
diff --git a/src/applications/drydock/controller/DrydockLeaseController.php b/src/applications/drydock/controller/DrydockLeaseController.php
--- a/src/applications/drydock/controller/DrydockLeaseController.php
+++ b/src/applications/drydock/controller/DrydockLeaseController.php
@@ -3,13 +3,29 @@
abstract class DrydockLeaseController
extends DrydockController {
+ private $resource;
+
+ public function setResource($resource) {
+ $this->resource = $resource;
+ return $this;
+ }
+
+ public function getResource() {
+ return $this->resource;
+ }
+
public function buildSideNavView() {
$nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
- id(new DrydockLeaseSearchEngine())
- ->setViewer($this->getRequest()->getUser())
- ->addNavigationItems($nav->getMenu());
+ $engine = id(new DrydockLeaseSearchEngine())
+ ->setViewer($this->getRequest()->getUser());
+
+ if ($this->getResource()) {
+ $engine->setResource($this->getResource());
+ }
+
+ $engine->addNavigationItems($nav->getMenu());
$nav->selectFilter(null);
@@ -18,9 +34,28 @@
protected function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
- $crumbs->addTextCrumb(
- pht('Leases'),
- $this->getApplicationURI('lease/'));
+
+ $resource = $this->getResource();
+ if ($resource) {
+ $id = $resource->getID();
+
+ $crumbs->addTextCrumb(
+ pht('Resources'),
+ $this->getApplicationURI('resource/'));
+
+ $crumbs->addTextCrumb(
+ $resource->getName(),
+ $this->getApplicationURI("resource/{$id}/"));
+
+ $crumbs->addTextCrumb(
+ pht('Leases'),
+ $this->getApplicationURI("resource/{$id}/leases/"));
+
+ } else {
+ $crumbs->addTextCrumb(
+ pht('Leases'),
+ $this->getApplicationURI('lease/'));
+ }
return $crumbs;
}
diff --git a/src/applications/drydock/controller/DrydockLeaseListController.php b/src/applications/drydock/controller/DrydockLeaseListController.php
--- a/src/applications/drydock/controller/DrydockLeaseListController.php
+++ b/src/applications/drydock/controller/DrydockLeaseListController.php
@@ -8,11 +8,26 @@
public function handleRequest(AphrontRequest $request) {
$viewer = $request->getViewer();
- $querykey = $request->getURIData('queryKey');
+ $query_key = $request->getURIData('queryKey');
+
+ $engine = new DrydockLeaseSearchEngine();
+
+ $id = $request->getURIData('id');
+ if ($id) {
+ $resource = id(new DrydockResourceQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($id))
+ ->executeOne();
+ if (!$resource) {
+ return new Aphront404Response();
+ }
+ $this->setResource($resource);
+ $engine->setResource($resource);
+ }
$controller = id(new PhabricatorApplicationSearchController())
- ->setQueryKey($querykey)
- ->setSearchEngine(new DrydockLeaseSearchEngine())
+ ->setQueryKey($query_key)
+ ->setSearchEngine($engine)
->setNavigation($this->buildSideNavView());
return $this->delegateToController($controller);
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
@@ -18,9 +18,14 @@
$nav = new AphrontSideNavFilterView();
$nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
- id(new DrydockResourceSearchEngine())
- ->setViewer($this->getViewer())
- ->addNavigationItems($nav->getMenu());
+ $engine = id(new DrydockResourceSearchEngine())
+ ->setViewer($this->getViewer());
+
+ if ($this->getBlueprint()) {
+ $engine->setBlueprint($this->getBlueprint());
+ }
+
+ $engine->addNavigationItems($nav->getMenu());
$nav->selectFilter(null);
diff --git a/src/applications/drydock/controller/DrydockResourceViewController.php b/src/applications/drydock/controller/DrydockResourceViewController.php
--- a/src/applications/drydock/controller/DrydockResourceViewController.php
+++ b/src/applications/drydock/controller/DrydockResourceViewController.php
@@ -27,17 +27,6 @@
$resource_uri = 'resource/'.$resource->getID().'/';
$resource_uri = $this->getApplicationURI($resource_uri);
- $leases = id(new DrydockLeaseQuery())
- ->setViewer($viewer)
- ->withResourcePHIDs(array($resource->getPHID()))
- ->execute();
-
- $lease_list = id(new DrydockLeaseListView())
- ->setUser($viewer)
- ->setLeases($leases)
- ->render();
- $lease_list->setNoDataString(pht('This resource has no leases.'));
-
$pager = new PHUIPagerView();
$pager->setURI(new PhutilURI($resource_uri), 'offset');
$pager->setOffset($request->getInt('offset'));
@@ -65,9 +54,7 @@
->addPropertyList($locks, pht('Slot Locks'))
->addPropertyList($commands, pht('Commands'));
- $lease_box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Leases'))
- ->setObjectList($lease_list);
+ $lease_box = $this->buildLeaseBox($resource);
$log_box = id(new PHUIObjectBoxView())
->setHeaderText(pht('Resource Logs'))
@@ -149,4 +136,43 @@
return $view;
}
+ private function buildLeaseBox(DrydockResource $resource) {
+ $viewer = $this->getViewer();
+
+ $leases = id(new DrydockLeaseQuery())
+ ->setViewer($viewer)
+ ->withResourcePHIDs(array($resource->getPHID()))
+ ->withStatuses(
+ array(
+ DrydockLeaseStatus::STATUS_PENDING,
+ DrydockLeaseStatus::STATUS_ACQUIRED,
+ DrydockLeaseStatus::STATUS_ACTIVE,
+ ))
+ ->setLimit(100)
+ ->execute();
+
+ $id = $resource->getID();
+ $leases_uri = "resource/{$id}/leases/query/all/";
+ $leases_uri = $this->getApplicationURI($leases_uri);
+
+ $lease_header = id(new PHUIHeaderView())
+ ->setHeader(pht('Active Leases'))
+ ->addActionLink(
+ id(new PHUIButtonView())
+ ->setTag('a')
+ ->setHref($leases_uri)
+ ->setIconFont('fa-search')
+ ->setText(pht('View All Leases')));
+
+ $lease_list = id(new DrydockLeaseListView())
+ ->setUser($viewer)
+ ->setLeases($leases)
+ ->render()
+ ->setNoDataString(pht('This resource has no active leases.'));
+
+ return id(new PHUIObjectBoxView())
+ ->setHeader($lease_header)
+ ->setObjectList($lease_list);
+ }
+
}
diff --git a/src/applications/drydock/query/DrydockLeaseSearchEngine.php b/src/applications/drydock/query/DrydockLeaseSearchEngine.php
--- a/src/applications/drydock/query/DrydockLeaseSearchEngine.php
+++ b/src/applications/drydock/query/DrydockLeaseSearchEngine.php
@@ -3,6 +3,17 @@
final class DrydockLeaseSearchEngine
extends PhabricatorApplicationSearchEngine {
+ private $resource;
+
+ public function setResource($resource) {
+ $this->resource = $resource;
+ return $this;
+ }
+
+ public function getResource() {
+ return $this->resource;
+ }
+
public function getResultTypeDescription() {
return pht('Drydock Leases');
}
@@ -12,7 +23,14 @@
}
public function newQuery() {
- return new DrydockLeaseQuery();
+ $query = new DrydockLeaseQuery();
+
+ $resource = $this->getResource();
+ if ($resource) {
+ $query->withResourcePHIDs(array($resource->getPHID()));
+ }
+
+ return $query;
}
protected function buildQueryFromParameters(array $map) {
@@ -35,7 +53,13 @@
}
protected function getURI($path) {
- return '/drydock/lease/'.$path;
+ $resource = $this->getResource();
+ if ($resource) {
+ $id = $resource->getID();
+ return "/drydock/resource/{$id}/leases/".$path;
+ } else {
+ return '/drydock/lease/'.$path;
+ }
}
protected function getBuiltinQueryNames() {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Feb 9, 11:21 PM (18 h, 56 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7109635
Default Alt Text
D14158.id.diff (8 KB)
Attached To
Mode
D14158: Show recent active leases on Drydock resource detail
Attached
Detach File
Event Timeline
Log In to Comment