Path: blob/master/src/applications/drydock/controller/DrydockLeaseViewController.php
12256 views
<?php12final class DrydockLeaseViewController extends DrydockLeaseController {34public function handleRequest(AphrontRequest $request) {5$viewer = $request->getViewer();6$id = $request->getURIData('id');78$lease = id(new DrydockLeaseQuery())9->setViewer($viewer)10->withIDs(array($id))11->needUnconsumedCommands(true)12->executeOne();13if (!$lease) {14return new Aphront404Response();15}1617$id = $lease->getID();18$lease_uri = $this->getApplicationURI("lease/{$id}/");1920$title = pht('Lease %d', $lease->getID());2122$header = id(new PHUIHeaderView())23->setHeader($title)24->setHeaderIcon('fa-link')25->setStatus(26$lease->getStatusIcon(),27$lease->getStatusColor(),28$lease->getStatusDisplayName());2930if ($lease->isReleasing()) {31$header->addTag(32id(new PHUITagView())33->setType(PHUITagView::TYPE_SHADE)34->setIcon('fa-exclamation-triangle')35->setColor('red')36->setName('Releasing'));37}3839$curtain = $this->buildCurtain($lease);40$properties = $this->buildPropertyListView($lease);4142$log_query = id(new DrydockLogQuery())43->withLeasePHIDs(array($lease->getPHID()));4445$log_table = $this->buildLogTable($log_query)46->setHideLeases(true);4748$logs = $this->buildLogBox(49$log_table,50$this->getApplicationURI("lease/{$id}/logs/query/all/"));5152$crumbs = $this->buildApplicationCrumbs();53$crumbs->addTextCrumb($title, $lease_uri);54$crumbs->setBorder(true);5556$locks = $this->buildLocksTab($lease->getPHID());57$commands = $this->buildCommandsTab($lease->getPHID());5859$tab_group = id(new PHUITabGroupView())60->addTab(61id(new PHUITabView())62->setName(pht('Properties'))63->setKey('properties')64->appendChild($properties))65->addTab(66id(new PHUITabView())67->setName(pht('Slot Locks'))68->setKey('locks')69->appendChild($locks))70->addTab(71id(new PHUITabView())72->setName(pht('Commands'))73->setKey('commands')74->appendChild($commands));7576$object_box = id(new PHUIObjectBoxView())77->setHeaderText(pht('Properties'))78->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)79->addTabGroup($tab_group);8081$view = id(new PHUITwoColumnView())82->setHeader($header)83->setCurtain($curtain)84->setMainColumn(array(85$object_box,86$logs,87));8889return $this->newPage()90->setTitle($title)91->setCrumbs($crumbs)92->appendChild(93array(94$view,95));9697}9899private function buildCurtain(DrydockLease $lease) {100$viewer = $this->getViewer();101102$curtain = $this->newCurtainView($lease);103$id = $lease->getID();104105$can_release = $lease->canRelease();106if ($lease->isReleasing()) {107$can_release = false;108}109110$can_edit = PhabricatorPolicyFilter::hasCapability(111$viewer,112$lease,113PhabricatorPolicyCapability::CAN_EDIT);114115$curtain->addAction(116id(new PhabricatorActionView())117->setName(pht('Release Lease'))118->setIcon('fa-times')119->setHref($this->getApplicationURI("/lease/{$id}/release/"))120->setWorkflow(true)121->setDisabled(!$can_release || !$can_edit));122123return $curtain;124}125126private function buildPropertyListView(127DrydockLease $lease) {128$viewer = $this->getViewer();129130$view = new PHUIPropertyListView();131132$view->addProperty(133pht('Resource Type'),134$lease->getResourceType());135136$owner_phid = $lease->getOwnerPHID();137if ($owner_phid) {138$owner_display = $viewer->renderHandle($owner_phid);139} else {140$owner_display = phutil_tag('em', array(), pht('No Owner'));141}142$view->addProperty(pht('Owner'), $owner_display);143144$authorizing_phid = $lease->getAuthorizingPHID();145if ($authorizing_phid) {146$authorizing_display = $viewer->renderHandle($authorizing_phid);147} else {148$authorizing_display = phutil_tag('em', array(), pht('None'));149}150$view->addProperty(pht('Authorized By'), $authorizing_display);151152$resource_phid = $lease->getResourcePHID();153if ($resource_phid) {154$resource_display = $viewer->renderHandle($resource_phid);155} else {156$resource_display = phutil_tag('em', array(), pht('No Resource'));157}158$view->addProperty(pht('Resource'), $resource_display);159160$until = $lease->getUntil();161if ($until) {162$until_display = phabricator_datetime($until, $viewer);163} else {164$until_display = phutil_tag('em', array(), pht('Never'));165}166$view->addProperty(pht('Expires'), $until_display);167168$acquired_epoch = $lease->getAcquiredEpoch();169$activated_epoch = $lease->getActivatedEpoch();170171if ($acquired_epoch) {172$acquired_display = phabricator_datetime($acquired_epoch, $viewer);173} else {174if ($activated_epoch) {175$acquired_display = phutil_tag(176'em',177array(),178pht('Activated on Acquisition'));179} else {180$acquired_display = phutil_tag('em', array(), pht('Not Acquired'));181}182}183$view->addProperty(pht('Acquired'), $acquired_display);184185if ($activated_epoch) {186$activated_display = phabricator_datetime($activated_epoch, $viewer);187} else {188$activated_display = phutil_tag('em', array(), pht('Not Activated'));189}190$view->addProperty(pht('Activated'), $activated_display);191192$attributes = $lease->getAttributes();193if ($attributes) {194$view->addSectionHeader(195pht('Attributes'), 'fa-list-ul');196foreach ($attributes as $key => $value) {197$view->addProperty($key, $value);198}199}200201return $view;202}203204}205206207