diff --git a/application/controllers/NavigationController.php b/application/controllers/NavigationController.php index b1bcb3309..acad48487 100644 --- a/application/controllers/NavigationController.php +++ b/application/controllers/NavigationController.php @@ -5,6 +5,7 @@ namespace Icinga\Controllers; use Exception; use Icinga\Application\Config; +use Icinga\Application\Icinga; use Icinga\Exception\NotFoundError; use Icinga\Forms\ConfirmRemovalForm; use Icinga\Forms\Navigation\NavigationConfigForm; @@ -18,6 +19,44 @@ use Icinga\Web\Url; */ class NavigationController extends Controller { + /** + * The default item types provided by Icinga Web 2 + * + * @var array + */ + protected $defaultItemTypes; + + /** + * {@inheritdoc} + */ + public function init() + { + parent::init(); + + $this->defaultItemTypes = array( + 'menu-item' => $this->translate('Menu Entry'), + 'dashlet' => 'Dashlet' + ); + } + + /** + * Return a list of available navigation item types + * + * @return array + */ + protected function listItemTypes() + { + $types = $this->defaultItemTypes; + foreach (Icinga::app()->getModuleManager()->getLoadedModules() as $module) { + $moduleTypes = $module->getNavigationItems(); + if (! empty($moduleTypes)) { + $types = array_merge($types, $moduleTypes); + } + } + + return $types; + } + /** * Show the current user a list of his/her navigation items */ @@ -88,6 +127,7 @@ class NavigationController extends Controller { $form = new NavigationConfigForm(); $form->setRedirectUrl('navigation'); + $form->setItemTypes($this->listItemTypes()); $form->setTitle($this->translate('Create New Navigation Item')); $form->addDescription($this->translate('Create a new navigation item, such as a menu entry or dashlet.')); $form->setUser($this->Auth()->getUser()); @@ -122,6 +162,7 @@ class NavigationController extends Controller $form = new NavigationConfigForm(); $form->setRedirectUrl('navigation'); + $form->setItemTypes($this->listItemTypes()); $form->setTitle(sprintf($this->translate('Edit Navigation Item %s'), $itemName)); $form->setUser($this->Auth()->getUser()); $form->setShareConfig(Config::app('navigation')); diff --git a/application/forms/Navigation/NavigationConfigForm.php b/application/forms/Navigation/NavigationConfigForm.php index d758222cc..7e4583609 100644 --- a/application/forms/Navigation/NavigationConfigForm.php +++ b/application/forms/Navigation/NavigationConfigForm.php @@ -5,7 +5,6 @@ namespace Icinga\Forms\Navigation; use InvalidArgumentException; use Icinga\Application\Config; -use Icinga\Application\Icinga; use Icinga\Exception\IcingaException; use Icinga\Exception\NotFoundError; use Icinga\Forms\ConfigForm; @@ -17,13 +16,6 @@ use Icinga\Web\Form; */ class NavigationConfigForm extends ConfigForm { - /** - * The default item types provided by Icinga Web 2 - * - * @var array - */ - protected $defaultItemTypes; - /** * The secondary configuration to write * @@ -62,6 +54,13 @@ class NavigationConfigForm extends ConfigForm */ protected $shareConfig; + /** + * The available navigation item types + * + * @var array + */ + protected $itemTypes; + /** * Initialize this form */ @@ -69,11 +68,6 @@ class NavigationConfigForm extends ConfigForm { $this->setName('form_config_navigation'); $this->setSubmitLabel($this->translate('Save Changes')); - - $this->defaultItemTypes = array( - 'menu-item' => $this->translate('Menu Entry'), - 'dashlet' => 'Dashlet' - ); } /** @@ -149,6 +143,29 @@ class NavigationConfigForm extends ConfigForm return $this->shareConfig; } + /** + * Set the available navigation item types + * + * @param array $itemTypes + * + * @return $this + */ + public function setItemTypes(array $itemTypes) + { + $this->itemTypes = $itemTypes; + return $this; + } + + /** + * Return the available navigation item types + * + * @return array + */ + public function getItemTypes() + { + return $this->itemTypes ?: array(); + } + /** * Populate the form with the given navigation item's config * @@ -329,7 +346,7 @@ class NavigationConfigForm extends ConfigForm */ public function createElements(array $formData) { - $itemTypes = $this->listItemTypes(); + $itemTypes = $this->getItemTypes(); $itemType = isset($formData['type']) ? $formData['type'] : key($itemTypes); $this->addElement( @@ -434,23 +451,6 @@ class NavigationConfigForm extends ConfigForm } } - /** - * Return a list of available item types - * - * @return array - */ - protected function listItemTypes() - { - $types = $this->defaultItemTypes; - foreach (Icinga::app()->getModuleManager()->getLoadedModules() as $moduleName => $module) { - foreach ($module->getNavigationItems() as $type => $label) { - $types[$type] = mt($moduleName, $label); - } - } - - return $types; - } - /** * Return the navigation configuration the given item is a part of *