Path: blob/master/src/applications/drydock/controller/DrydockBlueprintViewController.php
12262 views
<?php12final class DrydockBlueprintViewController extends DrydockBlueprintController {34public function handleRequest(AphrontRequest $request) {5$viewer = $request->getViewer();6$id = $request->getURIData('id');78$blueprint = id(new DrydockBlueprintQuery())9->setViewer($viewer)10->withIDs(array($id))11->executeOne();12if (!$blueprint) {13return new Aphront404Response();14}1516$title = $blueprint->getBlueprintName();1718$header = id(new PHUIHeaderView())19->setHeader($title)20->setUser($viewer)21->setPolicyObject($blueprint)22->setHeaderIcon('fa-map-o');2324if ($blueprint->getIsDisabled()) {25$header->setStatus('fa-ban', 'red', pht('Disabled'));26} else {27$header->setStatus('fa-check', 'bluegrey', pht('Active'));28}2930$curtain = $this->buildCurtain($blueprint);31$properties = $this->buildPropertyListView($blueprint);3233$crumbs = $this->buildApplicationCrumbs();34$crumbs->addTextCrumb(pht('Blueprint %d', $blueprint->getID()));35$crumbs->setBorder(true);3637$field_list = PhabricatorCustomField::getObjectFields(38$blueprint,39PhabricatorCustomField::ROLE_VIEW);40$field_list41->setViewer($viewer)42->readFieldsFromStorage($blueprint);4344$field_list->appendFieldsToPropertyList(45$blueprint,46$viewer,47$properties);4849$resources = $this->buildResourceBox($blueprint);50$authorizations = $this->buildAuthorizationsBox($blueprint);5152$timeline = $this->buildTransactionTimeline(53$blueprint,54new DrydockBlueprintTransactionQuery());55$timeline->setShouldTerminate(true);5657$log_query = id(new DrydockLogQuery())58->withBlueprintPHIDs(array($blueprint->getPHID()));5960$log_table = $this->buildLogTable($log_query)61->setHideBlueprints(true);6263$logs = $this->buildLogBox(64$log_table,65$this->getApplicationURI("blueprint/{$id}/logs/query/all/"));6667$view = id(new PHUITwoColumnView())68->setHeader($header)69->setCurtain($curtain)70->addPropertySection(pht('Properties'), $properties)71->setMainColumn(array(72$resources,73$authorizations,74$logs,75$timeline,76));7778return $this->newPage()79->setTitle($title)80->setCrumbs($crumbs)81->appendChild(82array(83$view,84));8586}8788private function buildCurtain(DrydockBlueprint $blueprint) {89$viewer = $this->getViewer();90$id = $blueprint->getID();9192$curtain = $this->newCurtainView($blueprint);93$edit_uri = $this->getApplicationURI("blueprint/edit/{$id}/");9495$can_edit = PhabricatorPolicyFilter::hasCapability(96$viewer,97$blueprint,98PhabricatorPolicyCapability::CAN_EDIT);99100$curtain->addAction(101id(new PhabricatorActionView())102->setHref($edit_uri)103->setName(pht('Edit Blueprint'))104->setIcon('fa-pencil')105->setWorkflow(!$can_edit)106->setDisabled(!$can_edit));107108if (!$blueprint->getIsDisabled()) {109$disable_name = pht('Disable Blueprint');110$disable_icon = 'fa-ban';111$disable_uri = $this->getApplicationURI("blueprint/{$id}/disable/");112} else {113$disable_name = pht('Enable Blueprint');114$disable_icon = 'fa-check';115$disable_uri = $this->getApplicationURI("blueprint/{$id}/enable/");116}117118$curtain->addAction(119id(new PhabricatorActionView())120->setHref($disable_uri)121->setName($disable_name)122->setIcon($disable_icon)123->setWorkflow(true)124->setDisabled(!$can_edit));125126return $curtain;127}128129private function buildPropertyListView(130DrydockBlueprint $blueprint) {131$viewer = $this->getViewer();132133$view = id(new PHUIPropertyListView())134->setUser($viewer);135136$view->addProperty(137pht('Type'),138$blueprint->getImplementation()->getBlueprintName());139140return $view;141}142143private function buildResourceBox(DrydockBlueprint $blueprint) {144$viewer = $this->getViewer();145146$resources = id(new DrydockResourceQuery())147->setViewer($viewer)148->withBlueprintPHIDs(array($blueprint->getPHID()))149->withStatuses(150array(151DrydockResourceStatus::STATUS_PENDING,152DrydockResourceStatus::STATUS_ACTIVE,153))154->setLimit(100)155->execute();156157$resource_list = id(new DrydockResourceListView())158->setUser($viewer)159->setResources($resources)160->render()161->setNoDataString(pht('This blueprint has no active resources.'));162163$id = $blueprint->getID();164$resources_uri = "blueprint/{$id}/resources/query/all/";165$resources_uri = $this->getApplicationURI($resources_uri);166167$resource_header = id(new PHUIHeaderView())168->setHeader(pht('Active Resources'))169->addActionLink(170id(new PHUIButtonView())171->setTag('a')172->setHref($resources_uri)173->setIcon('fa-search')174->setText(pht('View All')));175176return id(new PHUIObjectBoxView())177->setHeader($resource_header)178->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)179->setObjectList($resource_list);180}181182private function buildAuthorizationsBox(DrydockBlueprint $blueprint) {183$viewer = $this->getViewer();184185$limit = 25;186187// If there are pending authorizations against this blueprint, make sure188// we show them first.189190$pending_authorizations = id(new DrydockAuthorizationQuery())191->setViewer($viewer)192->withBlueprintPHIDs(array($blueprint->getPHID()))193->withObjectStates(194array(195DrydockAuthorization::OBJECTAUTH_ACTIVE,196))197->withBlueprintStates(198array(199DrydockAuthorization::BLUEPRINTAUTH_REQUESTED,200))201->setLimit($limit)202->execute();203204$all_authorizations = id(new DrydockAuthorizationQuery())205->setViewer($viewer)206->withBlueprintPHIDs(array($blueprint->getPHID()))207->withObjectStates(208array(209DrydockAuthorization::OBJECTAUTH_ACTIVE,210))211->withBlueprintStates(212array(213DrydockAuthorization::BLUEPRINTAUTH_REQUESTED,214DrydockAuthorization::BLUEPRINTAUTH_AUTHORIZED,215))216->setLimit($limit)217->execute();218219$authorizations =220mpull($pending_authorizations, null, 'getPHID') +221mpull($all_authorizations, null, 'getPHID');222223$authorization_list = id(new DrydockAuthorizationListView())224->setUser($viewer)225->setAuthorizations($authorizations)226->setNoDataString(227pht('No objects have active authorizations to use this blueprint.'));228229$id = $blueprint->getID();230$authorizations_uri = "blueprint/{$id}/authorizations/query/all/";231$authorizations_uri = $this->getApplicationURI($authorizations_uri);232233$authorizations_header = id(new PHUIHeaderView())234->setHeader(pht('Active Authorizations'))235->addActionLink(236id(new PHUIButtonView())237->setTag('a')238->setHref($authorizations_uri)239->setIcon('fa-search')240->setText(pht('View All')));241242return id(new PHUIObjectBoxView())243->setHeader($authorizations_header)244->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)245->setObjectList($authorization_list);246247}248249250}251252253