protected function loadPage()
 {
     $table = new AlmanacBinding();
     $conn_r = $table->establishConnection('r');
     $data = queryfx_all($conn_r, 'SELECT * FROM %T %Q %Q %Q', $table->getTableName(), $this->buildWhereClause($conn_r), $this->buildOrderClause($conn_r), $this->buildLimitClause($conn_r));
     return $table->loadAllFromArray($data);
 }
 private function buildActionList(AlmanacBinding $binding)
 {
     $viewer = $this->getViewer();
     $id = $binding->getID();
     $can_edit = PhabricatorPolicyFilter::hasCapability($viewer, $binding, PhabricatorPolicyCapability::CAN_EDIT);
     $actions = id(new PhabricatorActionListView())->setUser($viewer);
     $actions->addAction(id(new PhabricatorActionView())->setIcon('fa-pencil')->setName(pht('Edit Binding'))->setHref($this->getApplicationURI("binding/edit/{$id}/"))->setWorkflow(!$can_edit)->setDisabled(!$can_edit));
     return $actions;
 }
 private function buildPropertySection(AlmanacBinding $binding)
 {
     $viewer = $this->getViewer();
     $properties = id(new PHUIPropertyListView())->setUser($viewer);
     $properties->addProperty(pht('Service'), $viewer->renderHandle($binding->getServicePHID()));
     $properties->addProperty(pht('Device'), $viewer->renderHandle($binding->getDevicePHID()));
     $properties->addProperty(pht('Network'), $viewer->renderHandle($binding->getInterface()->getNetworkPHID()));
     $properties->addProperty(pht('Interface'), $binding->getInterface()->renderDisplayAddress());
     return $properties;
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $id = $request->getURIData('id');
     if ($id) {
         $binding = id(new AlmanacBindingQuery())->setViewer($viewer)->withIDs(array($id))->requireCapabilities(array(PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT))->executeOne();
         if (!$binding) {
             return new Aphront404Response();
         }
         $service = $binding->getService();
         $is_new = false;
         $service_uri = $service->getURI();
         $cancel_uri = $binding->getURI();
         $title = pht('Edit Binding');
         $save_button = pht('Save Changes');
     } else {
         $service = id(new AlmanacServiceQuery())->setViewer($viewer)->withIDs(array($request->getStr('serviceID')))->requireCapabilities(array(PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT))->executeOne();
         $binding = AlmanacBinding::initializeNewBinding($service);
         $is_new = true;
         $service_uri = $service->getURI();
         $cancel_uri = $service_uri;
         $title = pht('Create Binding');
         $save_button = pht('Create Binding');
     }
     $v_interface = array();
     if ($binding->getInterfacePHID()) {
         $v_interface = array($binding->getInterfacePHID());
     }
     $e_interface = true;
     $validation_exception = null;
     if ($request->isFormPost()) {
         $v_interface = $request->getArr('interfacePHIDs');
         $type_interface = AlmanacBindingTransaction::TYPE_INTERFACE;
         $xactions = array();
         $xactions[] = id(new AlmanacBindingTransaction())->setTransactionType($type_interface)->setNewValue(head($v_interface));
         $editor = id(new AlmanacBindingEditor())->setActor($viewer)->setContentSourceFromRequest($request)->setContinueOnNoEffect(true);
         try {
             $editor->applyTransactions($binding, $xactions);
             $binding_uri = $binding->getURI();
             return id(new AphrontRedirectResponse())->setURI($binding_uri);
         } catch (PhabricatorApplicationTransactionValidationException $ex) {
             $validation_exception = $ex;
             $e_interface = $ex->getShortMessage($type_interface);
         }
     }
     $form = id(new AphrontFormView())->setUser($viewer)->appendControl(id(new AphrontFormTokenizerControl())->setName('interfacePHIDs')->setLabel(pht('Interface'))->setLimit(1)->setDatasource(new AlmanacInterfaceDatasource())->setValue($v_interface)->setError($e_interface))->appendChild(id(new AphrontFormSubmitControl())->addCancelButton($cancel_uri)->setValue($save_button));
     $box = id(new PHUIObjectBoxView())->setValidationException($validation_exception)->setHeaderText(pht('Binding'))->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)->appendChild($form);
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb($service->getName(), $service_uri);
     if ($is_new) {
         $crumbs->addTextCrumb(pht('Create Binding'));
         $header = id(new PHUIHeaderView())->setHeader(pht('Create Binding'))->setHeaderIcon('fa-plus-square');
     } else {
         $crumbs->addTextCrumb(pht('Edit Binding'));
         $header = id(new PHUIHeaderView())->setHeader(pht('Create Binding'))->setHeaderIcon('fa-pencil');
     }
     $crumbs->setBorder(true);
     $view = id(new PHUITwoColumnView())->setHeader($header)->setFooter(array($box));
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($view);
 }
 private function buildActionList(AlmanacBinding $binding)
 {
     $viewer = $this->getViewer();
     $id = $binding->getID();
     $can_edit = PhabricatorPolicyFilter::hasCapability($viewer, $binding, PhabricatorPolicyCapability::CAN_EDIT);
     $actions = id(new PhabricatorActionListView())->setUser($viewer);
     $actions->addAction(id(new PhabricatorActionView())->setIcon('fa-pencil')->setName(pht('Edit Binding'))->setHref($this->getApplicationURI("binding/edit/{$id}/"))->setWorkflow(!$can_edit)->setDisabled(!$can_edit));
     if ($binding->getIsDisabled()) {
         $disable_icon = 'fa-check';
         $disable_text = pht('Enable Binding');
     } else {
         $disable_icon = 'fa-ban';
         $disable_text = pht('Disable Binding');
     }
     $disable_href = $this->getApplicationURI("binding/disable/{$id}/");
     $actions->addAction(id(new PhabricatorActionView())->setIcon($disable_icon)->setName($disable_text)->setHref($disable_href)->setWorkflow(true)->setDisabled(!$can_edit));
     return $actions;
 }
 public function getClusterRepositoryURIFromBinding(AlmanacBinding $binding)
 {
     $protocol = $binding->getAlmanacPropertyValue('protocol');
     if ($protocol === null) {
         $protocol = 'https';
     }
     $iface = $binding->getInterface();
     $address = $iface->renderDisplayAddress();
     $path = $this->getURI();
     return id(new PhutilURI("{$protocol}://{$address}"))->setPath($path);
 }
 protected function getBindingDictionary(AlmanacBinding $binding)
 {
     return array('id' => (int) $binding->getID(), 'phid' => $binding->getPHID(), 'properties' => $this->getPropertiesDictionary($binding), 'interface' => $this->getInterfaceDictionary($binding->getInterface()));
 }
 protected function getAlmanacBindingDictionary(AlmanacBinding $binding)
 {
     $interface = $binding->getInterface();
     return array('id' => (int) $binding->getID(), 'phid' => $binding->getPHID(), 'properties' => $this->getAlmanacPropertyList($binding), 'interface' => $this->getAlmanacInterfaceDictionary($interface), 'disabled' => (bool) $binding->getIsDisabled());
 }