[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

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

   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  }


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