summaryrefslogtreecommitdiffstats
path: root/application/controllers/CommandController.php
diff options
context:
space:
mode:
Diffstat (limited to 'application/controllers/CommandController.php')
-rw-r--r--application/controllers/CommandController.php126
1 files changed, 126 insertions, 0 deletions
diff --git a/application/controllers/CommandController.php b/application/controllers/CommandController.php
new file mode 100644
index 0000000..de0ba54
--- /dev/null
+++ b/application/controllers/CommandController.php
@@ -0,0 +1,126 @@
+<?php
+
+namespace Icinga\Module\Director\Controllers;
+
+use gipfl\Web\Widget\Hint;
+use Icinga\Module\Director\Objects\IcingaCommandArgument;
+use Icinga\Module\Director\Web\Table\BranchedIcingaCommandArgumentTable;
+use ipl\Html\Html;
+use Icinga\Module\Director\Forms\IcingaCommandArgumentForm;
+use Icinga\Module\Director\Objects\IcingaCommand;
+use Icinga\Module\Director\Resolver\CommandUsage;
+use Icinga\Module\Director\Web\Controller\ObjectController;
+use Icinga\Module\Director\Web\Table\IcingaCommandArgumentTable;
+
+class CommandController extends ObjectController
+{
+ /**
+ * @throws \Icinga\Exception\AuthenticationException
+ * @throws \Icinga\Exception\NotFoundError
+ * @throws \Icinga\Security\SecurityException
+ */
+ public function init()
+ {
+ parent::init();
+ $o = $this->object;
+ if ($o && ! $o->isExternal()) {
+ if ($this->getBranch()->isBranch()) {
+ $urlParams = ['uuid' => $o->getUniqueId()->toString()];
+ } else {
+ $urlParams = ['name' => $o->getObjectName()];
+ }
+ $this->tabs()->add('arguments', [
+ 'url' => 'director/command/arguments',
+ 'urlParams' => $urlParams,
+ 'label' => 'Arguments'
+ ]);
+ }
+ }
+
+ /**
+ * @throws \Icinga\Exception\NotFoundError
+ * @throws \Zend_Db_Select_Exception
+ */
+ public function indexAction()
+ {
+ if (! $this->getRequest()->isApiRequest()) {
+ $this->showUsage();
+ }
+ parent::indexAction();
+ }
+
+ /**
+ * @throws \Icinga\Exception\NotFoundError
+ * @throws \Icinga\Security\SecurityException
+ * @throws \Zend_Db_Select_Exception
+ */
+ public function renderAction()
+ {
+ if ($this->object->isExternal()) {
+ $this->showUsage();
+ }
+
+ parent::renderAction();
+ }
+
+ /**
+ * @throws \Zend_Db_Select_Exception
+ */
+ protected function showUsage()
+ {
+ /** @var IcingaCommand $command */
+ $command = $this->object;
+ if ($command->isInUse()) {
+ $usage = new CommandUsage($command);
+ $this->content()->add(Hint::info(Html::sprintf(
+ $this->translate('This Command is currently being used by %s'),
+ Html::tag('span', null, $usage->getLinks())->setSeparator(', ')
+ ))->addAttributes([
+ 'data-base-target' => '_next'
+ ]));
+ } else {
+ $this->content()->add(Hint::warning($this->translate('This Command is currently not in use')));
+ }
+ }
+
+ public function argumentsAction()
+ {
+ $p = $this->params;
+ /** @var IcingaCommand $o */
+ $o = $this->object;
+ $this->tabs()->activate('arguments');
+ $this->addTitle($this->translate('Command arguments: %s'), $o->getObjectName());
+ $form = (new IcingaCommandArgumentForm)
+ ->setBranch($this->getBranch())
+ ->setCommandObject($o);
+ if ($argument = $p->shift('argument')) {
+ $this->addBackLink('director/command/arguments', [
+ 'name' => $p->get('name')
+ ]);
+ 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();
+ $this->content()->add([$form]);
+ if ($this->branch->isBranch()) {
+ (new BranchedIcingaCommandArgumentTable($o, $this->getBranch()))->renderTo($this);
+ } else {
+ (new IcingaCommandArgumentTable($o, $this->getBranch()))->renderTo($this);
+ }
+ }
+
+ protected function hasBasketSupport()
+ {
+ return true;
+ }
+}