[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/almanac/controller/ -> AlmanacDeviceViewController.php (source)

   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  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1