mirror of
https://we.phorge.it/source/phorge.git
synced 2025-03-13 12:54:53 +01:00
Summary: Ref T10449. Currently, we store classes (like "AlmanacClusterRepositoryServiceType") in the database. Instead, store types (like "cluster.repository"). This is a small change, but types are a little more flexible (they let us freely reanme classes), a little cleaner (fewer magic strings in the codebase), and a little better for API usage (they're more human readable). Make this minor usability change now, before we unprototype. Also make services searchable by type. Also remove old Almanac API endpoints. Test Plan: - Ran migration, verified all data migrated properly. - Created, edited, rebound, and changed properties of services. - Searched for services by service type. - Reviewed available Conduit methods. Reviewers: chad Reviewed By: chad Subscribers: yelirekim Maniphest Tasks: T10449 Differential Revision: https://secure.phabricator.com/D15346
144 lines
3.9 KiB
PHP
144 lines
3.9 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))
|
|
->needProperties(true)
|
|
->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);
|
|
|
|
if ($service->isClusterService()) {
|
|
$this->addClusterMessage(
|
|
$box,
|
|
pht('This is a cluster service.'),
|
|
pht(
|
|
'This service is a cluster service. You do not have permission to '.
|
|
'edit cluster services, so you can not edit this service.'));
|
|
}
|
|
|
|
$bindings = $this->buildBindingList($service);
|
|
|
|
$crumbs = $this->buildApplicationCrumbs();
|
|
$crumbs->addTextCrumb($service->getName());
|
|
|
|
$timeline = $this->buildTransactionTimeline(
|
|
$service,
|
|
new AlmanacServiceTransactionQuery());
|
|
$timeline->setShouldTerminate(true);
|
|
|
|
return $this->newPage()
|
|
->setTitle($title)
|
|
->setCrumbs($crumbs)
|
|
->appendChild(
|
|
array(
|
|
$box,
|
|
$bindings,
|
|
$this->buildAlmanacPropertiesTable($service),
|
|
$timeline,
|
|
));
|
|
}
|
|
|
|
private function buildPropertyList(AlmanacService $service) {
|
|
$viewer = $this->getViewer();
|
|
|
|
$properties = id(new PHUIPropertyListView())
|
|
->setUser($viewer)
|
|
->setObject($service);
|
|
|
|
$properties->addProperty(
|
|
pht('Service Type'),
|
|
$service->getServiceImplementation()->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)
|
|
->setHideServiceColumn(true);
|
|
|
|
$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('fa-plus'));
|
|
|
|
return id(new PHUIObjectBoxView())
|
|
->setHeader($header)
|
|
->setTable($table);
|
|
}
|
|
|
|
}
|