Path: blob/master/src/applications/almanac/controller/AlmanacBindingViewController.php
12262 views
<?php12final class AlmanacBindingViewController3extends AlmanacServiceController {45public function shouldAllowPublic() {6return true;7}89public function handleRequest(AphrontRequest $request) {10$viewer = $request->getViewer();1112$id = $request->getURIData('id');1314$binding = id(new AlmanacBindingQuery())15->setViewer($viewer)16->withIDs(array($id))17->needProperties(true)18->executeOne();19if (!$binding) {20return new Aphront404Response();21}2223$service = $binding->getService();24$service_uri = $service->getURI();2526$title = pht('Binding %s', $binding->getID());2728$properties = $this->buildPropertyList($binding);29$details = $this->buildPropertySection($binding);30$curtain = $this->buildCurtain($binding);3132$header = id(new PHUIHeaderView())33->setUser($viewer)34->setHeader($title)35->setPolicyObject($binding)36->setHeaderIcon('fa-object-group');3738if ($binding->getIsDisabled()) {39$header->setStatus('fa-ban', 'red', pht('Disabled'));40}4142$issue = null;43if ($binding->getService()->isClusterService()) {44$issue = $this->addClusterMessage(45pht('The service for this binding is a cluster service.'),46pht(47'The service for this binding is a cluster service. You do not '.48'have permission to manage cluster services, so this binding can '.49'not be edited.'));50}5152$crumbs = $this->buildApplicationCrumbs();53$crumbs->addTextCrumb($service->getName(), $service_uri);54$crumbs->addTextCrumb($title);55$crumbs->setBorder(true);5657$timeline = $this->buildTransactionTimeline(58$binding,59new AlmanacBindingTransactionQuery());60$timeline->setShouldTerminate(true);6162$view = id(new PHUITwoColumnView())63->setHeader($header)64->setCurtain($curtain)65->setMainColumn(array(66$issue,67$this->buildAlmanacPropertiesTable($binding),68$timeline,69))70->addPropertySection(pht('Details'), $details);7172return $this->newPage()73->setTitle($title)74->setCrumbs($crumbs)75->appendChild(76array(77$view,78));79}8081private function buildPropertySection(AlmanacBinding $binding) {82$viewer = $this->getViewer();8384$properties = id(new PHUIPropertyListView())85->setUser($viewer);8687$properties->addProperty(88pht('Service'),89$viewer->renderHandle($binding->getServicePHID()));9091$properties->addProperty(92pht('Device'),93$viewer->renderHandle($binding->getDevicePHID()));9495$properties->addProperty(96pht('Network'),97$viewer->renderHandle($binding->getInterface()->getNetworkPHID()));9899$properties->addProperty(100pht('Interface'),101$binding->getInterface()->renderDisplayAddress());102103return $properties;104}105106private function buildPropertyList(AlmanacBinding $binding) {107$viewer = $this->getViewer();108109$properties = id(new PHUIPropertyListView())110->setUser($viewer)111->setObject($binding);112$properties->invokeWillRenderEvent();113114return $properties;115}116117private function buildCurtain(AlmanacBinding $binding) {118$viewer = $this->getViewer();119120$can_edit = PhabricatorPolicyFilter::hasCapability(121$viewer,122$binding,123PhabricatorPolicyCapability::CAN_EDIT);124125$id = $binding->getID();126$edit_uri = $this->getApplicationURI("binding/edit/{$id}/");127$disable_uri = $this->getApplicationURI("binding/disable/{$id}/");128129$curtain = $this->newCurtainView($binding);130131$curtain->addAction(132id(new PhabricatorActionView())133->setIcon('fa-pencil')134->setName(pht('Edit Binding'))135->setHref($edit_uri)136->setWorkflow(!$can_edit)137->setDisabled(!$can_edit));138139if ($binding->getIsDisabled()) {140$disable_icon = 'fa-check';141$disable_text = pht('Enable Binding');142} else {143$disable_icon = 'fa-ban';144$disable_text = pht('Disable Binding');145}146147$curtain->addAction(148id(new PhabricatorActionView())149->setIcon($disable_icon)150->setName($disable_text)151->setHref($disable_uri)152->setWorkflow(true)153->setDisabled(!$can_edit));154155return $curtain;156}157158}159160161