mirror of
https://github.com/Icinga/icingaweb2-module-director.git
synced 2025-07-29 08:44:11 +02:00
TemplateUsage: make code generic, do no longer...
...require concrete implementations fixes #1028 fixes #1032
This commit is contained in:
parent
75ca51e85b
commit
dac5dbdcc0
@ -2,142 +2,11 @@
|
||||
|
||||
namespace Icinga\Module\Director\Controllers;
|
||||
|
||||
use Icinga\Module\Director\Objects\IcingaObject;
|
||||
use Icinga\Module\Director\Objects\IcingaTimePeriod;
|
||||
use Icinga\Module\Director\Web\Controller\Extension\DirectorDb;
|
||||
use Icinga\Module\Director\Web\Table\ObjectsTable;
|
||||
use Icinga\Module\Director\Web\Table\TemplatesTable;
|
||||
use Icinga\Module\Director\Web\Table\TemplateUsageTable;
|
||||
use ipl\Html\FormattedString;
|
||||
use ipl\Html\Html;
|
||||
use ipl\Html\Link;
|
||||
use ipl\Web\CompatController;
|
||||
use ipl\Web\Widget\UnorderedList;
|
||||
use Icinga\Module\Director\Web\Controller\TemplateController;
|
||||
|
||||
class TimeperiodtemplateController extends CompatController
|
||||
class TimeperiodtemplateController extends TemplateController
|
||||
{
|
||||
use DirectorDb;
|
||||
|
||||
public function objectsAction()
|
||||
{
|
||||
$template = $this->requireTemplate();
|
||||
$type = $template->getShortTableName();
|
||||
$this
|
||||
->addSingleTab($this->translate('Timeperiods'))
|
||||
->setAutorefreshInterval(10)
|
||||
->addTitle(
|
||||
$this->translate('Timeperiods based on %s'),
|
||||
$template->getObjectName()
|
||||
)->addBackToUsageLink($template);
|
||||
|
||||
ObjectsTable::create($type, $this->db())
|
||||
->setAuth($this->Auth())
|
||||
->filterTemplate($template, $this->params->get('inheritance', 'direct'))
|
||||
->renderTo($this);
|
||||
}
|
||||
|
||||
public function templatesAction()
|
||||
{
|
||||
$template = $this->requireTemplate();
|
||||
$type = $template->getShortTableName();
|
||||
$this
|
||||
->addSingleTab($this->translate('Timeperiod Templates'))
|
||||
->setAutorefreshInterval(10)
|
||||
->addTitle(
|
||||
$this->translate('Timeperiod templates based on %s'),
|
||||
$template->getObjectName()
|
||||
)->addBackToUsageLink($template);
|
||||
|
||||
$table = TemplatesTable::create($type, $this->db());
|
||||
$table->filterTemplate($template, $this->params->get('inheritance', 'direct'));
|
||||
$table->renderTo($this);
|
||||
}
|
||||
|
||||
protected function addBackToUsageLink(IcingaObject $template)
|
||||
{
|
||||
$this->actions()->add(
|
||||
Link::create(
|
||||
$this->translate('Back'),
|
||||
'director/timeperiodtemplate/usage',
|
||||
['name' => $template->getObjectName()],
|
||||
['class' => 'icon-left-big']
|
||||
)
|
||||
);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function usageAction()
|
||||
{
|
||||
$template = $this->requireTemplate();
|
||||
$templateName = $template->getObjectName();
|
||||
|
||||
$this
|
||||
->addSingleTab($this->translate('Timeperiod Template Usage'))
|
||||
->addTitle($this->translate('Template: %s'), $templateName)
|
||||
->setAutorefreshInterval(10);
|
||||
|
||||
$type = $template->getShortTableName();
|
||||
$this->actions()->add([
|
||||
Link::create(
|
||||
$this->translate('Modify'),
|
||||
"director/$type/edit",
|
||||
['name' => $templateName],
|
||||
['class' => 'icon-edit']
|
||||
),
|
||||
Link::create(
|
||||
$this->translate('Preview'),
|
||||
"director/$type/render",
|
||||
['name' => $templateName],
|
||||
[
|
||||
'title' => $this->translate('Template rendering preview'),
|
||||
'class' => 'icon-doc-text'
|
||||
]
|
||||
),
|
||||
Link::create(
|
||||
$this->translate('History'),
|
||||
"director/$type/history",
|
||||
['name' => $templateName],
|
||||
[
|
||||
'title' => $this->translate('Template history'),
|
||||
'class' => 'icon-history'
|
||||
]
|
||||
)
|
||||
]);
|
||||
|
||||
$this->content()->addPrintf(
|
||||
$this->translate(
|
||||
'This is the "%s" Timeperiod Template. Based on this, you might want to:'
|
||||
),
|
||||
$templateName
|
||||
)->add(
|
||||
new UnorderedList([
|
||||
new FormattedString($this->translate('Create a new %s inheriting from this one'), [
|
||||
Link::create(
|
||||
$this->translate('Object'),
|
||||
'director/timeperiod/add',
|
||||
['import' => $templateName]
|
||||
)
|
||||
]),
|
||||
new FormattedString($this->translate('Create a new %s inheriting from this one'), [
|
||||
Link::create(
|
||||
$this->translate('Template'),
|
||||
'director/timeperiod/add',
|
||||
['import' => $templateName, 'type' => 'template']
|
||||
)
|
||||
])
|
||||
], [
|
||||
'class' => 'vertical-action-list'
|
||||
])
|
||||
)->add(
|
||||
Html::tag('h2', null, $this->translate('Current Template Usage'))
|
||||
);
|
||||
|
||||
$this->content()->add(
|
||||
TemplateUsageTable::forTemplate($template)
|
||||
);
|
||||
}
|
||||
|
||||
protected function requireTemplate()
|
||||
{
|
||||
return IcingaTimePeriod::load([
|
||||
|
16
application/controllers/UsertemplateController.php
Normal file
16
application/controllers/UsertemplateController.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace Icinga\Module\Director\Controllers;
|
||||
|
||||
use Icinga\Module\Director\Objects\IcingaUser;
|
||||
use Icinga\Module\Director\Web\Controller\TemplateController;
|
||||
|
||||
class UsertemplateController extends TemplateController
|
||||
{
|
||||
protected function requireTemplate()
|
||||
{
|
||||
return IcingaUser::load([
|
||||
'object_name' => $this->params->get('name')
|
||||
], $this->db());
|
||||
}
|
||||
}
|
184
library/Director/Web/Controller/TemplateController.php
Normal file
184
library/Director/Web/Controller/TemplateController.php
Normal file
@ -0,0 +1,184 @@
|
||||
<?php
|
||||
|
||||
namespace Icinga\Module\Director\Web\Controller;
|
||||
|
||||
use Icinga\Module\Director\Objects\IcingaObject;
|
||||
use Icinga\Module\Director\Web\Controller\Extension\DirectorDb;
|
||||
use Icinga\Module\Director\Web\Table\ObjectsTable;
|
||||
use Icinga\Module\Director\Web\Table\TemplatesTable;
|
||||
use Icinga\Module\Director\Web\Table\TemplateUsageTable;
|
||||
use ipl\Html\FormattedString;
|
||||
use ipl\Html\Html;
|
||||
use ipl\Html\Link;
|
||||
use ipl\Web\CompatController;
|
||||
use ipl\Web\Widget\UnorderedList;
|
||||
|
||||
abstract class TemplateController extends CompatController
|
||||
{
|
||||
use DirectorDb;
|
||||
|
||||
/** @var IcingaObject */
|
||||
protected $template;
|
||||
|
||||
public function objectsAction()
|
||||
{
|
||||
$template = $this->requireTemplate();
|
||||
$plural = $this->getTranslatedPluralType();
|
||||
$this
|
||||
->addSingleTab($plural)
|
||||
->setAutorefreshInterval(10)
|
||||
->addTitle(
|
||||
$this->translate('%s based on %s'),
|
||||
$plural,
|
||||
$template->getObjectName()
|
||||
)->addBackToUsageLink($template);
|
||||
|
||||
ObjectsTable::create($this->getType(), $this->db())
|
||||
->setAuth($this->Auth())
|
||||
->filterTemplate($template, $this->params->get('inheritance', 'direct'))
|
||||
->renderTo($this);
|
||||
}
|
||||
|
||||
public function templatesAction()
|
||||
{
|
||||
$template = $this->requireTemplate();
|
||||
$typeName = $this->getTranslatedType();
|
||||
$this
|
||||
->addSingleTab(sprintf($this->translate('%s Templates'), $typeName))
|
||||
->setAutorefreshInterval(10)
|
||||
->addTitle(
|
||||
$this->translate('%s templates based on %s'),
|
||||
$typeName,
|
||||
$template->getObjectName()
|
||||
)->addBackToUsageLink($template);
|
||||
|
||||
$table = TemplatesTable::create($this->getType(), $this->db());
|
||||
$table->filterTemplate($template, $this->params->get('inheritance', 'direct'));
|
||||
$table->renderTo($this);
|
||||
}
|
||||
|
||||
protected function addBackToUsageLink(IcingaObject $template)
|
||||
{
|
||||
$type = $this->getType();
|
||||
$this->actions()->add(
|
||||
Link::create(
|
||||
$this->translate('Back'),
|
||||
"director/${type}template/usage",
|
||||
['name' => $template->getObjectName()],
|
||||
['class' => 'icon-left-big']
|
||||
)
|
||||
);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function usageAction()
|
||||
{
|
||||
$template = $this->requireTemplate();
|
||||
$templateName = $template->getObjectName();
|
||||
|
||||
$this
|
||||
->addSingleTab($this->translate('Template Usage'))
|
||||
->addTitle($this->translate('Template: %s'), $templateName)
|
||||
->setAutorefreshInterval(10);
|
||||
|
||||
$type = $this->getType();
|
||||
$this->actions()->add([
|
||||
Link::create(
|
||||
$this->translate('Modify'),
|
||||
"director/$type/edit",
|
||||
['name' => $templateName],
|
||||
['class' => 'icon-edit']
|
||||
),
|
||||
Link::create(
|
||||
$this->translate('Preview'),
|
||||
"director/$type/render",
|
||||
['name' => $templateName],
|
||||
[
|
||||
'title' => $this->translate('Template rendering preview'),
|
||||
'class' => 'icon-doc-text'
|
||||
]
|
||||
),
|
||||
Link::create(
|
||||
$this->translate('History'),
|
||||
"director/$type/history",
|
||||
['name' => $templateName],
|
||||
[
|
||||
'title' => $this->translate('Template history'),
|
||||
'class' => 'icon-history'
|
||||
]
|
||||
)
|
||||
]);
|
||||
|
||||
$typeName = $this->getTranslatedType();
|
||||
$this->content()->addPrintf(
|
||||
$this->translate(
|
||||
'This is the "%s" %s Template. Based on this, you might want to:'
|
||||
),
|
||||
$typeName,
|
||||
$templateName
|
||||
)->add(
|
||||
new UnorderedList([
|
||||
new FormattedString($this->translate('Create a new %s inheriting from this one'), [
|
||||
Link::create(
|
||||
$this->translate('Object'),
|
||||
"director/$type/add",
|
||||
['import' => $templateName]
|
||||
)
|
||||
]),
|
||||
new FormattedString($this->translate('Create a new %s inheriting from this one'), [
|
||||
Link::create(
|
||||
$this->translate('Template'),
|
||||
"director/$type/add",
|
||||
['import' => $templateName, 'type' => 'template']
|
||||
)
|
||||
])
|
||||
], [
|
||||
'class' => 'vertical-action-list'
|
||||
])
|
||||
)->add(
|
||||
Html::tag('h2', null, $this->translate('Current Template Usage'))
|
||||
);
|
||||
|
||||
$this->content()->add(
|
||||
TemplateUsageTable::forTemplate($template)
|
||||
);
|
||||
}
|
||||
|
||||
protected function getType()
|
||||
{
|
||||
return $this->template()->getShortTableName();
|
||||
}
|
||||
|
||||
protected function getPluralType()
|
||||
{
|
||||
return $this->template()->getShortTableName() . 's';
|
||||
}
|
||||
|
||||
protected function getTranslatedType()
|
||||
{
|
||||
return $this->translate(ucfirst($this->getType()));
|
||||
}
|
||||
|
||||
protected function getTranslatedPluralType()
|
||||
{
|
||||
return $this->translate(ucfirst($this->getPluralType()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return IcingaObject
|
||||
*/
|
||||
protected function template()
|
||||
{
|
||||
if ($this->template === null) {
|
||||
$this->template = $this->requireTemplate();
|
||||
}
|
||||
|
||||
return $this->template;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return IcingaObject
|
||||
*/
|
||||
abstract protected function requireTemplate();
|
||||
}
|
@ -9,7 +9,7 @@ use ipl\Html\Link;
|
||||
use ipl\Html\Table;
|
||||
use ipl\Translation\TranslationHelper;
|
||||
|
||||
abstract class TemplateUsageTable extends Table
|
||||
class TemplateUsageTable extends Table
|
||||
{
|
||||
use TranslationHelper;
|
||||
|
||||
@ -17,7 +17,21 @@ abstract class TemplateUsageTable extends Table
|
||||
|
||||
protected $objectType;
|
||||
|
||||
abstract public function getTypes();
|
||||
public function getTypes()
|
||||
{
|
||||
return [
|
||||
'templates' => $this->translate('Templates'),
|
||||
'objects' => $this->translate('Objects'),
|
||||
];
|
||||
}
|
||||
|
||||
protected function getTypeSummaryDefinitions()
|
||||
{
|
||||
return [
|
||||
'templates' => $this->getSummaryLine('template'),
|
||||
'objects' => $this->getSummaryLine('object'),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param IcingaObject $template
|
||||
@ -27,7 +41,11 @@ abstract class TemplateUsageTable extends Table
|
||||
{
|
||||
$type = ucfirst($template->getShortTableName());
|
||||
$class = __NAMESPACE__ . "\\${type}TemplateUsageTable";
|
||||
return new $class($template);
|
||||
if (class_exists($class)) {
|
||||
return new $class($template);
|
||||
} else {
|
||||
return new static($template);
|
||||
}
|
||||
}
|
||||
|
||||
protected function __construct(IcingaObject $template)
|
||||
@ -83,8 +101,6 @@ abstract class TemplateUsageTable extends Table
|
||||
}
|
||||
}
|
||||
|
||||
abstract protected function getTypeSummaryDefinitions();
|
||||
|
||||
protected function getUsageSummary(IcingaObject $template)
|
||||
{
|
||||
$id = $template->getAutoincId();
|
||||
|
Loading…
x
Reference in New Issue
Block a user