[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class AlmanacServiceViewController 4 extends AlmanacServiceController { 5 6 public function shouldAllowPublic() { 7 return true; 8 } 9 10 public function handleRequest(AphrontRequest $request) { 11 $viewer = $request->getViewer(); 12 13 $name = $request->getURIData('name'); 14 15 $service = id(new AlmanacServiceQuery()) 16 ->setViewer($viewer) 17 ->withNames(array($name)) 18 ->executeOne(); 19 if (!$service) { 20 return new Aphront404Response(); 21 } 22 23 $title = pht('Service %s', $service->getName()); 24 25 $property_list = $this->buildPropertyList($service); 26 $action_list = $this->buildActionList($service); 27 $property_list->setActionList($action_list); 28 29 $header = id(new PHUIHeaderView()) 30 ->setUser($viewer) 31 ->setHeader($service->getName()) 32 ->setPolicyObject($service); 33 34 $box = id(new PHUIObjectBoxView()) 35 ->setHeader($header) 36 ->addPropertyList($property_list); 37 38 $bindings = $this->buildBindingList($service); 39 40 $crumbs = $this->buildApplicationCrumbs(); 41 $crumbs->addTextCrumb($service->getName()); 42 43 $xactions = id(new AlmanacServiceTransactionQuery()) 44 ->setViewer($viewer) 45 ->withObjectPHIDs(array($service->getPHID())) 46 ->execute(); 47 48 $xaction_view = id(new PhabricatorApplicationTransactionView()) 49 ->setUser($viewer) 50 ->setObjectPHID($service->getPHID()) 51 ->setTransactions($xactions) 52 ->setShouldTerminate(true); 53 54 return $this->buildApplicationPage( 55 array( 56 $crumbs, 57 $box, 58 $bindings, 59 $this->buildAlmanacPropertiesTable($service), 60 $xaction_view, 61 ), 62 array( 63 'title' => $title, 64 )); 65 } 66 67 private function buildPropertyList(AlmanacService $service) { 68 $viewer = $this->getViewer(); 69 70 $properties = id(new PHUIPropertyListView()) 71 ->setUser($viewer) 72 ->setObject($service); 73 74 return $properties; 75 } 76 77 private function buildActionList(AlmanacService $service) { 78 $viewer = $this->getViewer(); 79 $id = $service->getID(); 80 81 $can_edit = PhabricatorPolicyFilter::hasCapability( 82 $viewer, 83 $service, 84 PhabricatorPolicyCapability::CAN_EDIT); 85 86 $actions = id(new PhabricatorActionListView()) 87 ->setUser($viewer); 88 89 $actions->addAction( 90 id(new PhabricatorActionView()) 91 ->setIcon('fa-pencil') 92 ->setName(pht('Edit Service')) 93 ->setHref($this->getApplicationURI("service/edit/{$id}/")) 94 ->setWorkflow(!$can_edit) 95 ->setDisabled(!$can_edit)); 96 97 return $actions; 98 } 99 100 private function buildBindingList(AlmanacService $service) { 101 $viewer = $this->getViewer(); 102 $id = $service->getID(); 103 104 $can_edit = PhabricatorPolicyFilter::hasCapability( 105 $viewer, 106 $service, 107 PhabricatorPolicyCapability::CAN_EDIT); 108 109 $bindings = id(new AlmanacBindingQuery()) 110 ->setViewer($viewer) 111 ->withServicePHIDs(array($service->getPHID())) 112 ->execute(); 113 114 $phids = array(); 115 foreach ($bindings as $binding) { 116 $phids[] = $binding->getServicePHID(); 117 $phids[] = $binding->getDevicePHID(); 118 $phids[] = $binding->getInterface()->getNetworkPHID(); 119 } 120 $handles = $this->loadViewerHandles($phids); 121 122 $table = id(new AlmanacBindingTableView()) 123 ->setNoDataString( 124 pht('This service has not been bound to any device interfaces yet.')) 125 ->setUser($viewer) 126 ->setBindings($bindings) 127 ->setHandles($handles); 128 129 $header = id(new PHUIHeaderView()) 130 ->setHeader(pht('Service Bindings')) 131 ->addActionLink( 132 id(new PHUIButtonView()) 133 ->setTag('a') 134 ->setHref($this->getApplicationURI("binding/edit/?serviceID={$id}")) 135 ->setWorkflow(!$can_edit) 136 ->setDisabled(!$can_edit) 137 ->setText(pht('Add Binding')) 138 ->setIcon( 139 id(new PHUIIconView()) 140 ->setIconFont('fa-plus'))); 141 142 return id(new PHUIObjectBoxView()) 143 ->setHeader($header) 144 ->appendChild($table); 145 } 146 147 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |