diff options
Diffstat (limited to 'library/Director/Web/ActionBar')
5 files changed, 228 insertions, 0 deletions
diff --git a/library/Director/Web/ActionBar/AutomationObjectActionBar.php b/library/Director/Web/ActionBar/AutomationObjectActionBar.php new file mode 100644 index 0000000..247677f --- /dev/null +++ b/library/Director/Web/ActionBar/AutomationObjectActionBar.php @@ -0,0 +1,65 @@ +<?php + +namespace Icinga\Module\Director\Web\ActionBar; + +use gipfl\IcingaWeb2\Link; +use gipfl\Translation\TranslationHelper; +use gipfl\IcingaWeb2\Widget\ActionBar; +use Icinga\Web\Request; + +class AutomationObjectActionBar extends ActionBar +{ + use TranslationHelper; + + /** @var Request */ + protected $request; + + protected $label; + + public function __construct(Request $request) + { + $this->request = $request; + } + + protected function assemble() + { + $request = $this->request; + $action = $request->getActionName(); + $controller = $request->getControllerName(); + $params = ['id' => $request->getParam('id')]; + $links = [ + 'index' => Link::create( + $this->translate('Overview'), + "director/$controller", + $params, + ['class' => 'icon-info'] + ), + 'edit' => Link::create( + $this->translate('Modify'), + "director/$controller/edit", + $params, + ['class' => 'icon-edit'] + ), + 'clone' => Link::create( + $this->translate('Clone'), + "director/$controller/clone", + $params, + ['class' => 'icon-paste'] + ), + /* + // TODO: enable once handled in the controller + 'export' => Link::create( + $this->translate('Download JSON'), + $this->request->getUrl()->with('format', 'json'), + null, + [ + 'data-base-target' => '_blank', + ] + ) + */ + + ]; + unset($links[$action]); + $this->add($links); + } +} diff --git a/library/Director/Web/ActionBar/ChoicesActionBar.php b/library/Director/Web/ActionBar/ChoicesActionBar.php new file mode 100644 index 0000000..7b59d2c --- /dev/null +++ b/library/Director/Web/ActionBar/ChoicesActionBar.php @@ -0,0 +1,27 @@ +<?php + +namespace Icinga\Module\Director\Web\ActionBar; + +use gipfl\IcingaWeb2\Link; + +class ChoicesActionBar extends DirectorBaseActionBar +{ + protected function assemble() + { + $type = $this->type; + $this->add( + $this->getBackToDashboardLink() + )->add( + Link::create( + $this->translate('Add'), + "director/templatechoice/$type", + ['type' => 'object'], + [ + 'title' => $this->translate('Create a new template choice'), + 'class' => 'icon-plus', + 'data-base-target' => '_next' + ] + ) + ); + } +} diff --git a/library/Director/Web/ActionBar/DirectorBaseActionBar.php b/library/Director/Web/ActionBar/DirectorBaseActionBar.php new file mode 100644 index 0000000..8612a0d --- /dev/null +++ b/library/Director/Web/ActionBar/DirectorBaseActionBar.php @@ -0,0 +1,67 @@ +<?php + +namespace Icinga\Module\Director\Web\ActionBar; + +use Icinga\Module\Director\Dashboard\Dashboard; +use gipfl\IcingaWeb2\Link; +use gipfl\Translation\TranslationHelper; +use gipfl\IcingaWeb2\Widget\ActionBar; +use gipfl\IcingaWeb2\Url; + +class DirectorBaseActionBar extends ActionBar +{ + use TranslationHelper; + + /** @var Url */ + protected $url; + + /** @var string */ + protected $type; + + public function __construct($type, Url $url) + { + $this->type = $type; + $this->url = $url; + } + + protected function getBackToDashboardLink() + { + $name = $this->getPluralBaseType(); + if (! Dashboard::exists($name)) { + return null; + } + + return Link::create( + $this->translate('back'), + 'director/dashboard', + ['name' => $name], + [ + 'title' => sprintf( + $this->translate('Go back to "%s" Dashboard'), + $this->translate(ucfirst($this->type)) + ), + 'class' => 'icon-left-big', + 'data-base-target' => '_main' + ] + ); + } + + protected function getBaseType() + { + if (substr($this->type, -5) === 'Group') { + return substr($this->type, 0, -5); + } else { + return $this->type; + } + } + + protected function getPluralType() + { + return $this->type . 's'; + } + + protected function getPluralBaseType() + { + return $this->getBaseType() . 's'; + } +} diff --git a/library/Director/Web/ActionBar/ObjectsActionBar.php b/library/Director/Web/ActionBar/ObjectsActionBar.php new file mode 100644 index 0000000..5f86949 --- /dev/null +++ b/library/Director/Web/ActionBar/ObjectsActionBar.php @@ -0,0 +1,27 @@ +<?php + +namespace Icinga\Module\Director\Web\ActionBar; + +use gipfl\IcingaWeb2\Link; + +class ObjectsActionBar extends DirectorBaseActionBar +{ + protected function assemble() + { + $type = $this->type; + $this->add( + $this->getBackToDashboardLink() + )->add( + Link::create( + $this->translate('Add'), + "director/$type/add", + ['type' => 'object'], + [ + 'title' => $this->translate('Create a new object'), + 'class' => 'icon-plus', + 'data-base-target' => '_next' + ] + ) + ); + } +} diff --git a/library/Director/Web/ActionBar/TemplateActionBar.php b/library/Director/Web/ActionBar/TemplateActionBar.php new file mode 100644 index 0000000..53e65ed --- /dev/null +++ b/library/Director/Web/ActionBar/TemplateActionBar.php @@ -0,0 +1,42 @@ +<?php + +namespace Icinga\Module\Director\Web\ActionBar; + +use gipfl\IcingaWeb2\Link; + +class TemplateActionBar extends DirectorBaseActionBar +{ + protected function assemble() + { + $type = str_replace('_', '-', $this->type); + $plType = preg_replace('/cys$/', 'cies', $type . 's'); + $renderTree = $this->url->getParam('render') === 'tree'; + $renderParams = $renderTree ? null : ['render' => 'tree']; + $this->add( + $this->getBackToDashboardLink() + )->add( + Link::create( + $this->translate('Add'), + "director/$type/add", + ['type' => 'template'], + [ + 'title' => $this->translate('Create a new Template'), + 'class' => 'icon-plus', + 'data-base-target' => '_next' + ] + ) + )->add( + Link::create( + $renderTree ? $this->translate('Table') : $this->translate('Tree'), + "director/$plType/templates", + $renderParams, + [ + 'class' => 'icon-' . ($renderTree ? 'doc-text' : 'sitemap'), + 'title' => $renderTree + ? $this->translate('Switch to Tree view') + : $this->translate('Switch to Table view') + ] + ) + ); + } +} |