icingaweb2-module-director/library/Director/Web/Tabs/ObjectTabs.php

156 lines
4.6 KiB
PHP
Raw Normal View History

<?php
namespace Icinga\Module\Director\Web\Tabs;
use Icinga\Authentication\Auth;
use Icinga\Module\Director\Objects\IcingaObject;
use gipfl\Translation\TranslationHelper;
use gipfl\IcingaWeb2\Widget\Tabs;
class ObjectTabs extends Tabs
{
use TranslationHelper;
/** @var string */
private $type;
/** @var Auth */
private $auth;
/** @var IcingaObject $object */
private $object;
2017-08-17 00:01:56 +02:00
private $allowedExternals = [
'apiuser',
'endpoint'
2017-08-17 00:01:56 +02:00
];
public function __construct($type, Auth $auth, IcingaObject $object = null)
{
$this->type = $type;
$this->auth = $auth;
$this->object = $object;
// We are not a BaseElement, not yet
$this->assemble();
}
protected function assemble()
{
if (null === $this->object) {
$this->addTabsForNewObject();
} else {
$this->addTabsForExistingObject();
}
}
protected function addTabsForNewObject()
{
$type = $this->type;
$this->add('add', array(
'url' => sprintf('director/%s/add', $type),
'label' => sprintf($this->translate('Add %s'), ucfirst($type)),
));
}
protected function addTabsForExistingObject()
{
$type = $this->type;
$auth = $this->auth;
$object = $this->object;
$params = $object->getUrlParams();
if (! $object->isExternal()
|| in_array($object->getShortTableName(), $this->allowedExternals)
) {
$this->add('modify', array(
'url' => sprintf('director/%s', $type),
'urlParams' => $params,
'label' => $this->translate(ucfirst($type))
));
}
if ($object->getShortTableName() === 'host') {
$this->add('services', [
'url' => 'director/host/services',
'urlParams' => $params,
'label' => $this->translate('Services')
]);
}
if ($auth->hasPermission('director/showconfig')) {
if ($object->getShortTableName() !== 'service'
|| $object->get('service_set_id') === null
) {
$this->add('render', array(
'url' => sprintf('director/%s/render', $type),
'urlParams' => $params,
'label' => $this->translate('Preview'),
));
}
}
if ($auth->hasPermission('director/audit')) {
$this->add('history', array(
'url' => sprintf('director/%s/history', $type),
'urlParams' => $params,
'label' => $this->translate('History')
));
}
if ($auth->hasPermission('director/admin') && $this->hasFields()) {
$this->add('fields', array(
'url' => sprintf('director/%s/fields', $type),
'urlParams' => $params,
'label' => $this->translate('Fields')
));
}
2017-07-11 14:05:49 +02:00
// TODO: remove table check once we resolve all group types
2018-10-21 20:16:53 +02:00
if ($object->isGroup() &&
($object->getShortTableName() === 'hostgroup' || $object->getShortTableName() === 'servicegroup')
) {
$this->add('membership', [
'url' => sprintf('director/%s/membership', $type),
'urlParams' => $params,
'label' => $this->translate('Members')
]);
}
if ($object->supportsRanges()) {
$this->add('ranges', [
'url' => "director/${type}/ranges",
'urlParams' => $params,
'label' => $this->translate('Ranges')
]);
}
if ($object->getShortTableName() === 'endpoint'
&& $object->get('apiuser_id')
) {
$this->add('inspect', [
'url' => 'director/inspect/types',
'urlParams' => ['endpoint' => $object->getObjectName()],
'label' => $this->translate('Inspect')
]);
}
if ($object->getShortTableName() === 'host') {
$this->add('agent', [
'url' => 'director/host/agent',
'urlParams' => $params,
'label' => $this->translate('Agent')
]);
}
}
protected function hasFields()
{
if (! ($object = $this->object)) {
return false;
}
return $object->hasBeenLoadedFromDb()
&& $object->supportsFields()
&& ($object->isTemplate() || $this->type === 'command');
}
}