CommandController: branch support, argument table

This commit is contained in:
Thomas Gelf 2021-10-05 23:13:40 +02:00
parent 2b62742362
commit 97b2f6c946
2 changed files with 107 additions and 5 deletions

View File

@ -3,6 +3,8 @@
namespace Icinga\Module\Director\Controllers; namespace Icinga\Module\Director\Controllers;
use gipfl\Web\Widget\Hint; use gipfl\Web\Widget\Hint;
use Icinga\Module\Director\Objects\IcingaCommandArgument;
use Icinga\Module\Director\Web\Table\BranchedIcingaCommandArgumentTable;
use ipl\Html\Html; use ipl\Html\Html;
use Icinga\Module\Director\Forms\IcingaCommandArgumentForm; use Icinga\Module\Director\Forms\IcingaCommandArgumentForm;
use Icinga\Module\Director\Objects\IcingaCommand; use Icinga\Module\Director\Objects\IcingaCommand;
@ -22,9 +24,14 @@ class CommandController extends ObjectController
parent::init(); parent::init();
$o = $this->object; $o = $this->object;
if ($o && ! $o->isExternal()) { if ($o && ! $o->isExternal()) {
if ($this->getBranch()->isBranch()) {
$urlParams = ['uuid' => $o->getUniqueId()->toString()];
} else {
$urlParams = ['name' => $o->getObjectName()];
}
$this->tabs()->add('arguments', [ $this->tabs()->add('arguments', [
'url' => 'director/command/arguments', 'url' => 'director/command/arguments',
'urlParams' => ['name' => $o->getObjectName()], 'urlParams' => $urlParams,
'label' => 'Arguments' 'label' => 'Arguments'
]); ]);
} }
@ -83,16 +90,33 @@ class CommandController extends ObjectController
$o = $this->object; $o = $this->object;
$this->tabs()->activate('arguments'); $this->tabs()->activate('arguments');
$this->addTitle($this->translate('Command arguments: %s'), $o->getObjectName()); $this->addTitle($this->translate('Command arguments: %s'), $o->getObjectName());
$form = IcingaCommandArgumentForm::load()->setCommandObject($o); $form = (new IcingaCommandArgumentForm)
if ($id = $p->shift('argument_id')) { ->setBranch($this->getBranch())
->setCommandObject($o);
if ($argument = $p->shift('argument')) {
$this->addBackLink('director/command/arguments', [ $this->addBackLink('director/command/arguments', [
'name' => $p->get('name') 'name' => $p->get('name')
]); ]);
$form->loadObject($id); if ($this->branch->isBranch()) {
$arguments = $o->arguments();
$argument = $arguments->get($argument);
// IcingaCommandArgument::create((array) $arguments->get($argument)->toFullPlainObject());
// $argument->setBeingLoadedFromDb();
} else {
$argument = IcingaCommandArgument::load([
'command_id' => $o->get('id'),
'argument_name' => $argument
], $this->db());
}
$form->setObject($argument);
} }
$form->handleRequest(); $form->handleRequest();
$this->content()->add([$form]); $this->content()->add([$form]);
IcingaCommandArgumentTable::create($o)->renderTo($this); if ($this->branch->isBranch()) {
(new BranchedIcingaCommandArgumentTable($o, $this->getBranch()))->renderTo($this);
} else {
(new IcingaCommandArgumentTable($o, $this->getBranch()))->renderTo($this);
}
} }
protected function hasBasketSupport() protected function hasBasketSupport()

View File

@ -0,0 +1,78 @@
<?php
namespace Icinga\Module\Director\Web\Table;
use gipfl\IcingaWeb2\Data\SimpleQueryPaginationAdapter;
use gipfl\IcingaWeb2\Table\QueryBasedTable;
use Icinga\Data\DataArray\ArrayDatasource;
use Icinga\Module\Director\Db\Branch\Branch;
use Icinga\Module\Director\Objects\IcingaCommand;
use gipfl\IcingaWeb2\Link;
class BranchedIcingaCommandArgumentTable extends QueryBasedTable
{
/** @var IcingaCommand */
protected $command;
/** @var Branch */
protected $branch;
protected $searchColumns = [
'ca.argument_name',
'ca.argument_value',
];
public function __construct(IcingaCommand $command, Branch $branch)
{
$this->command = $command;
$this->branch = $branch;
$this->getAttributes()->set('data-base-target', '_self');
}
public function renderRow($row)
{
return $this::row([
Link::create($row->argument_name, 'director/command/arguments', [
'argument' => $row->argument_name,
'uuid' => $this->command->getUniqueId()->toString(),
]),
$row->argument_value
]);
}
public function getColumnsToBeRendered()
{
return [
$this->translate('Argument'),
$this->translate('Value'),
];
}
protected function getPaginationAdapter()
{
return new SimpleQueryPaginationAdapter($this->getQuery());
}
public function getQuery()
{
return $this->prepareQuery();
}
protected function fetchQueryRows()
{
return $this->getQuery()->fetchAll();
}
protected function prepareQuery()
{
$list = [];
foreach ($this->command->arguments()->toPlainObject() as $name => $argument) {
$new = (object) [];
$new->argument_name = $name;
$new->argument_value = isset($argument->value) ? $argument->value : null;
$list[] = $new;
}
return (new ArrayDatasource($list))->select();
}
}