Allow leases to be explicitly released via web or CLI

Summary: Permit the forcible release of Drydock leases. The implementation isn't very exciting for now.

Test Plan: Released leases via web and CLI.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T2015

Differential Revision: https://secure.phabricator.com/D4181
This commit is contained in:
epriestley
2012-12-14 15:42:58 -08:00
parent 081163ab6d
commit e4bb9255be
8 changed files with 153 additions and 3 deletions

View File

@@ -0,0 +1,56 @@
<?php
final class DrydockLeaseReleaseController extends DrydockController {
private $id;
public function willProcessRequest(array $data) {
$this->id = $data['id'];
}
public function processRequest() {
$request = $this->getRequest();
$user = $request->getUser();
$lease = id(new DrydockLease())->load($this->id);
if (!$lease) {
return new Aphront404Response();
}
$lease_uri = '/lease/'.$lease->getID().'/';
$lease_uri = $this->getApplicationURI($lease_uri);
if ($lease->getStatus() != DrydockLeaseStatus::STATUS_ACTIVE) {
$dialog = id(new AphrontDialogView())
->setUser($user)
->setTitle(pht('Lease Not Active'))
->appendChild(
'<p>'.pht('You can only release "active" leases.').'</p>')
->addCancelButton($lease_uri);
return id(new AphrontDialogResponse())->setDialog($dialog);
}
if (!$request->isDialogFormPost()) {
$dialog = id(new AphrontDialogView())
->setUser($user)
->setTitle(pht('Really release lease?'))
->appendChild(
'<p>'.pht(
'Releasing a lease may cause trouble for the lease holder and '.
'trigger cleanup of the underlying resource. It can not be '.
'undone. Continue?').'</p>')
->addSubmitButton(pht('Release Lease'))
->addCancelButton($lease_uri);
return id(new AphrontDialogResponse())->setDialog($dialog);
}
$resource = $lease->loadResource();
$blueprint = $resource->getBlueprint();
$blueprint->releaseLease($resource, $lease);
return id(new AphrontReloadResponse())->setURI($lease_uri);
}
}

View File

@@ -62,6 +62,18 @@ final class DrydockLeaseViewController extends DrydockController {
->setUser($this->getRequest()->getUser())
->setObject($lease);
$id = $lease->getID();
$can_release = ($lease->getStatus() == DrydockLeaseStatus::STATUS_ACTIVE);
$view->addAction(
id(new PhabricatorActionView())
->setName(pht('Release Lease'))
->setIcon('delete')
->setHref($this->getApplicationURI("/lease/{$id}/release/"))
->setWorkflow(true)
->setDisabled(!$can_release));
return $view;
}