[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class AlmanacDeviceViewController 4 extends AlmanacDeviceController { 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 $device = id(new AlmanacDeviceQuery()) 16 ->setViewer($viewer) 17 ->withNames(array($name)) 18 ->executeOne(); 19 if (!$device) { 20 return new Aphront404Response(); 21 } 22 23 $title = pht('Device %s', $device->getName()); 24 25 $property_list = $this->buildPropertyList($device); 26 $action_list = $this->buildActionList($device); 27 $property_list->setActionList($action_list); 28 29 $header = id(new PHUIHeaderView()) 30 ->setUser($viewer) 31 ->setHeader($device->getName()) 32 ->setPolicyObject($device); 33 34 $box = id(new PHUIObjectBoxView()) 35 ->setHeader($header) 36 ->addPropertyList($property_list); 37 38 $interfaces = $this->buildInterfaceList($device); 39 40 $crumbs = $this->buildApplicationCrumbs(); 41 $crumbs->addTextCrumb($device->getName()); 42 43 $xactions = id(new AlmanacDeviceTransactionQuery()) 44 ->setViewer($viewer) 45 ->withObjectPHIDs(array($device->getPHID())) 46 ->execute(); 47 48 $xaction_view = id(new PhabricatorApplicationTransactionView()) 49 ->setUser($viewer) 50 ->setObjectPHID($device->getPHID()) 51 ->setTransactions($xactions) 52 ->setShouldTerminate(true); 53 54 return $this->buildApplicationPage( 55 array( 56 $crumbs, 57 $box, 58 $interfaces, 59 $this->buildAlmanacPropertiesTable($device), 60 $this->buildSSHKeysTable($device), 61 $xaction_view, 62 ), 63 array( 64 'title' => $title, 65 )); 66 } 67 68 private function buildPropertyList(AlmanacDevice $device) { 69 $viewer = $this->getViewer(); 70 71 $properties = id(new PHUIPropertyListView()) 72 ->setUser($viewer) 73 ->setObject($device); 74 75 return $properties; 76 } 77 78 private function buildActionList(AlmanacDevice $device) { 79 $viewer = $this->getViewer(); 80 $id = $device->getID(); 81 82 $can_edit = PhabricatorPolicyFilter::hasCapability( 83 $viewer, 84 $device, 85 PhabricatorPolicyCapability::CAN_EDIT); 86 87 $actions = id(new PhabricatorActionListView()) 88 ->setUser($viewer); 89 90 $actions->addAction( 91 id(new PhabricatorActionView()) 92 ->setIcon('fa-pencil') 93 ->setName(pht('Edit Device')) 94 ->setHref($this->getApplicationURI("device/edit/{$id}/")) 95 ->setWorkflow(!$can_edit) 96 ->setDisabled(!$can_edit)); 97 98 return $actions; 99 } 100 101 private function buildInterfaceList(AlmanacDevice $device) { 102 $viewer = $this->getViewer(); 103 $id = $device->getID(); 104 105 $can_edit = PhabricatorPolicyFilter::hasCapability( 106 $viewer, 107 $device, 108 PhabricatorPolicyCapability::CAN_EDIT); 109 110 $interfaces = id(new AlmanacInterfaceQuery()) 111 ->setViewer($viewer) 112 ->withDevicePHIDs(array($device->getPHID())) 113 ->execute(); 114 115 $phids = array(); 116 foreach ($interfaces as $interface) { 117 $phids[] = $interface->getNetworkPHID(); 118 $phids[] = $interface->getDevicePHID(); 119 } 120 $handles = $this->loadViewerHandles($phids); 121 122 $table = id(new AlmanacInterfaceTableView()) 123 ->setUser($viewer) 124 ->setInterfaces($interfaces) 125 ->setHandles($handles); 126 127 $header = id(new PHUIHeaderView()) 128 ->setHeader(pht('Device Interfaces')) 129 ->addActionLink( 130 id(new PHUIButtonView()) 131 ->setTag('a') 132 ->setHref($this->getApplicationURI("interface/edit/?deviceID={$id}")) 133 ->setWorkflow(!$can_edit) 134 ->setDisabled(!$can_edit) 135 ->setText(pht('Add Interface')) 136 ->setIcon( 137 id(new PHUIIconView()) 138 ->setIconFont('fa-plus'))); 139 140 return id(new PHUIObjectBoxView()) 141 ->setHeader($header) 142 ->appendChild($table); 143 } 144 145 private function buildSSHKeysTable(AlmanacDevice $device) { 146 $viewer = $this->getViewer(); 147 $id = $device->getID(); 148 $device_phid = $device->getPHID(); 149 150 $can_edit = PhabricatorPolicyFilter::hasCapability( 151 $viewer, 152 $device, 153 PhabricatorPolicyCapability::CAN_EDIT); 154 155 $keys = id(new PhabricatorAuthSSHKeyQuery()) 156 ->setViewer($viewer) 157 ->withObjectPHIDs(array($device_phid)) 158 ->execute(); 159 160 $table = id(new PhabricatorAuthSSHKeyTableView()) 161 ->setUser($viewer) 162 ->setKeys($keys) 163 ->setCanEdit($can_edit) 164 ->setShowID(true) 165 ->setShowTrusted(true) 166 ->setNoDataString(pht('This device has no associated SSH public keys.')); 167 168 try { 169 PhabricatorSSHKeyGenerator::assertCanGenerateKeypair(); 170 $can_generate = true; 171 } catch (Exception $ex) { 172 $can_generate = false; 173 } 174 175 $generate_uri = '/auth/sshkey/generate/?objectPHID='.$device_phid; 176 $upload_uri = '/auth/sshkey/upload/?objectPHID='.$device_phid; 177 178 $header = id(new PHUIHeaderView()) 179 ->setHeader(pht('SSH Public Keys')) 180 ->addActionLink( 181 id(new PHUIButtonView()) 182 ->setTag('a') 183 ->setHref($generate_uri) 184 ->setWorkflow(true) 185 ->setDisabled(!$can_edit || !$can_generate) 186 ->setText(pht('Generate Keypair')) 187 ->setIcon( 188 id(new PHUIIconView()) 189 ->setIconFont('fa-lock'))) 190 ->addActionLink( 191 id(new PHUIButtonView()) 192 ->setTag('a') 193 ->setHref($upload_uri) 194 ->setWorkflow(true) 195 ->setDisabled(!$can_edit) 196 ->setText(pht('Upload Public Key')) 197 ->setIcon( 198 id(new PHUIIconView()) 199 ->setIconFont('fa-upload'))); 200 201 return id(new PHUIObjectBoxView()) 202 ->setHeader($header) 203 ->appendChild($table); 204 205 206 } 207 208 }
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 |