mirror of
https://github.com/Icinga/icingaweb2-module-director.git
synced 2025-07-28 16:24:05 +02:00
Modify IcingaObjectFilterHelper::filterByTemplate
for director branches
Icinga objects must be filterable based on templates when a director branch is active.
This commit is contained in:
parent
e6f7d82c09
commit
3c7082cabc
@ -5,6 +5,7 @@ namespace Icinga\Module\Director\Db;
|
||||
use Icinga\Module\Director\Objects\IcingaObject;
|
||||
use Icinga\Module\Director\Resolver\TemplateTree;
|
||||
use InvalidArgumentException;
|
||||
use Ramsey\Uuid\UuidInterface;
|
||||
use RuntimeException;
|
||||
use Zend_Db_Select as ZfSelect;
|
||||
|
||||
@ -46,13 +47,42 @@ class IcingaObjectFilterHelper
|
||||
ZfSelect $query,
|
||||
$template,
|
||||
$tableAlias = 'o',
|
||||
$inheritanceType = self::INHERIT_DIRECT
|
||||
$inheritanceType = self::INHERIT_DIRECT,
|
||||
UuidInterface $branchuuid = null
|
||||
) {
|
||||
$i = $tableAlias . 'i';
|
||||
$o = $tableAlias;
|
||||
$type = $template->getShortTableName();
|
||||
$db = $template->getDb();
|
||||
$id = static::wantId($template);
|
||||
|
||||
if ($branchuuid) {
|
||||
if ($inheritanceType === self::INHERIT_DIRECT) {
|
||||
return $query->where('imports LIKE \'%"' . $template->getObjectName() . '"%\'');
|
||||
} elseif ($inheritanceType === self::INHERIT_INDIRECT
|
||||
|| $inheritanceType === self::INHERIT_DIRECT_OR_INDIRECT
|
||||
) {
|
||||
$tree = new TemplateTree($type, $template->getConnection());
|
||||
$templateNames = $tree->getDescendantsFor($template);
|
||||
|
||||
if ($inheritanceType === self::INHERIT_DIRECT_OR_INDIRECT) {
|
||||
$templateNames[] = $template->getObjectName();
|
||||
}
|
||||
|
||||
if (empty($templateNames)) {
|
||||
$condition = '(1 = 0)';
|
||||
} else {
|
||||
$condition = 'imports LIKE \'%"' . array_pop($templateNames) . '"%\'';
|
||||
|
||||
foreach ($templateNames as $templateName) {
|
||||
$condition .= " OR imports LIKE '%\"$templateName\"%'";
|
||||
}
|
||||
}
|
||||
|
||||
return $query->where($condition);
|
||||
}
|
||||
}
|
||||
|
||||
$sub = $db->select()->from(
|
||||
array($i => "icinga_{$type}_inheritance"),
|
||||
array('e' => '(1)')
|
||||
|
@ -25,6 +25,8 @@ abstract class TemplateController extends CompatController
|
||||
{
|
||||
use DirectorDb;
|
||||
|
||||
use BranchHelper;
|
||||
|
||||
/** @var IcingaObject */
|
||||
protected $template;
|
||||
|
||||
@ -43,6 +45,7 @@ abstract class TemplateController extends CompatController
|
||||
|
||||
ObjectsTable::create($this->getType(), $this->db())
|
||||
->setAuth($this->Auth())
|
||||
->setBranch($this->getBranch())
|
||||
->setBaseObjectUrl($this->getBaseObjectUrl())
|
||||
->filterTemplate($template, $this->getInheritance())
|
||||
->renderTo($this);
|
||||
|
@ -3,9 +3,11 @@
|
||||
namespace Icinga\Module\Director\Web\Table;
|
||||
|
||||
use Icinga\Exception\ProgrammingError;
|
||||
use Icinga\Module\Director\Db\Branch\Branch;
|
||||
use Icinga\Module\Director\Objects\IcingaObject;
|
||||
use Icinga\Module\Director\Resolver\TemplateTree;
|
||||
use gipfl\IcingaWeb2\Link;
|
||||
use Icinga\Module\Director\Web\Controller\BranchHelper;
|
||||
use ipl\Html\Table;
|
||||
use gipfl\Translation\TranslationHelper;
|
||||
|
||||
@ -13,10 +15,14 @@ class TemplateUsageTable extends Table
|
||||
{
|
||||
use TranslationHelper;
|
||||
|
||||
use TableWithBranchSupport;
|
||||
|
||||
protected $defaultAttributes = ['class' => 'pivot'];
|
||||
|
||||
protected $objectType;
|
||||
|
||||
protected $searchColumns = [];
|
||||
|
||||
public function getTypes()
|
||||
{
|
||||
return [
|
||||
@ -37,14 +43,14 @@ class TemplateUsageTable extends Table
|
||||
* @param IcingaObject $template
|
||||
* @return TemplateUsageTable
|
||||
*/
|
||||
public static function forTemplate(IcingaObject $template)
|
||||
public static function forTemplate(IcingaObject $template, Branch $branch = null)
|
||||
{
|
||||
$type = ucfirst($template->getShortTableName());
|
||||
$class = __NAMESPACE__ . "\\{$type}TemplateUsageTable";
|
||||
if (class_exists($class)) {
|
||||
return new $class($template);
|
||||
return new $class($template, $branch);
|
||||
} else {
|
||||
return new static($template);
|
||||
return new static($template, $branch);
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,7 +64,7 @@ class TemplateUsageTable extends Table
|
||||
];
|
||||
}
|
||||
|
||||
protected function __construct(IcingaObject $template)
|
||||
protected function __construct(IcingaObject $template, Branch $branch = null)
|
||||
{
|
||||
|
||||
if ($template->get('object_type') !== 'template') {
|
||||
@ -68,6 +74,7 @@ class TemplateUsageTable extends Table
|
||||
);
|
||||
}
|
||||
|
||||
$this->setBranch($branch);
|
||||
$this->objectType = $objectType = $template->getShortTableName();
|
||||
$types = $this->getTypes();
|
||||
$usage = $this->getUsageSummary($template);
|
||||
|
Loading…
x
Reference in New Issue
Block a user