mirror of
https://we.phorge.it/source/phorge.git
synced 2025-02-07 20:38:32 +01:00
a4784e03ff
Summary: Converts most all tables to be directly set via `setTable` to an ObjectBox. I think this path is more flexible design wise, as we can change the box based on children, and not just CSS. We also already do this with PropertyList, Forms, ObjectList, and Header. `setCollapsed` is added to ObjectBox to all children objects to bleed to the edges (like diffs). Test Plan: I did a grep of `appendChild($table)` as well as searches for `PHUIObjectBoxView`, also with manual opening of hundreds of files. I'm sure I missed 5-8 places. If you just appendChild($table) nothing breaks, it just looks a little funny. Reviewers: epriestley, btrahan Subscribers: Korvin, epriestley Differential Revision: https://secure.phabricator.com/D12955
147 lines
3.8 KiB
PHP
147 lines
3.8 KiB
PHP
<?php
|
|
|
|
final class AlmanacServiceViewController
|
|
extends AlmanacServiceController {
|
|
|
|
public function shouldAllowPublic() {
|
|
return true;
|
|
}
|
|
|
|
public function handleRequest(AphrontRequest $request) {
|
|
$viewer = $request->getViewer();
|
|
|
|
$name = $request->getURIData('name');
|
|
|
|
$service = id(new AlmanacServiceQuery())
|
|
->setViewer($viewer)
|
|
->withNames(array($name))
|
|
->executeOne();
|
|
if (!$service) {
|
|
return new Aphront404Response();
|
|
}
|
|
|
|
$title = pht('Service %s', $service->getName());
|
|
|
|
$property_list = $this->buildPropertyList($service);
|
|
$action_list = $this->buildActionList($service);
|
|
$property_list->setActionList($action_list);
|
|
|
|
$header = id(new PHUIHeaderView())
|
|
->setUser($viewer)
|
|
->setHeader($service->getName())
|
|
->setPolicyObject($service);
|
|
|
|
$box = id(new PHUIObjectBoxView())
|
|
->setHeader($header)
|
|
->addPropertyList($property_list);
|
|
|
|
$messages = $service->getServiceType()->getStatusMessages($service);
|
|
if ($messages) {
|
|
$box->setFormErrors($messages);
|
|
}
|
|
|
|
if ($service->getIsLocked()) {
|
|
$this->addLockMessage(
|
|
$box,
|
|
pht('This service is locked, and can not be edited.'));
|
|
}
|
|
|
|
$bindings = $this->buildBindingList($service);
|
|
|
|
$crumbs = $this->buildApplicationCrumbs();
|
|
$crumbs->addTextCrumb($service->getName());
|
|
|
|
$timeline = $this->buildTransactionTimeline(
|
|
$service,
|
|
new AlmanacServiceTransactionQuery());
|
|
$timeline->setShouldTerminate(true);
|
|
|
|
return $this->buildApplicationPage(
|
|
array(
|
|
$crumbs,
|
|
$box,
|
|
$bindings,
|
|
$this->buildAlmanacPropertiesTable($service),
|
|
$timeline,
|
|
),
|
|
array(
|
|
'title' => $title,
|
|
));
|
|
}
|
|
|
|
private function buildPropertyList(AlmanacService $service) {
|
|
$viewer = $this->getViewer();
|
|
|
|
$properties = id(new PHUIPropertyListView())
|
|
->setUser($viewer)
|
|
->setObject($service);
|
|
|
|
$properties->addProperty(
|
|
pht('Service Type'),
|
|
$service->getServiceType()->getServiceTypeShortName());
|
|
|
|
return $properties;
|
|
}
|
|
|
|
private function buildActionList(AlmanacService $service) {
|
|
$viewer = $this->getViewer();
|
|
$id = $service->getID();
|
|
|
|
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
|
$viewer,
|
|
$service,
|
|
PhabricatorPolicyCapability::CAN_EDIT);
|
|
|
|
$actions = id(new PhabricatorActionListView())
|
|
->setUser($viewer);
|
|
|
|
$actions->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setIcon('fa-pencil')
|
|
->setName(pht('Edit Service'))
|
|
->setHref($this->getApplicationURI("service/edit/{$id}/"))
|
|
->setWorkflow(!$can_edit)
|
|
->setDisabled(!$can_edit));
|
|
|
|
return $actions;
|
|
}
|
|
|
|
private function buildBindingList(AlmanacService $service) {
|
|
$viewer = $this->getViewer();
|
|
$id = $service->getID();
|
|
|
|
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
|
$viewer,
|
|
$service,
|
|
PhabricatorPolicyCapability::CAN_EDIT);
|
|
|
|
$bindings = id(new AlmanacBindingQuery())
|
|
->setViewer($viewer)
|
|
->withServicePHIDs(array($service->getPHID()))
|
|
->execute();
|
|
|
|
$table = id(new AlmanacBindingTableView())
|
|
->setNoDataString(
|
|
pht('This service has not been bound to any device interfaces yet.'))
|
|
->setUser($viewer)
|
|
->setBindings($bindings);
|
|
|
|
$header = id(new PHUIHeaderView())
|
|
->setHeader(pht('Service Bindings'))
|
|
->addActionLink(
|
|
id(new PHUIButtonView())
|
|
->setTag('a')
|
|
->setHref($this->getApplicationURI("binding/edit/?serviceID={$id}"))
|
|
->setWorkflow(!$can_edit)
|
|
->setDisabled(!$can_edit)
|
|
->setText(pht('Add Binding'))
|
|
->setIcon(
|
|
id(new PHUIIconView())
|
|
->setIconFont('fa-plus')));
|
|
|
|
return id(new PHUIObjectBoxView())
|
|
->setHeader($header)
|
|
->setTable($table);
|
|
}
|
|
|
|
}
|