NavigationItemRenderer: Add support for options

refs #5600
This commit is contained in:
Johannes Meyer 2015-09-03 13:36:13 +02:00
parent c3ad665c15
commit 67dee62c57
2 changed files with 45 additions and 6 deletions

View File

@ -581,17 +581,24 @@ class NavigationItem implements IteratorAggregate
/**
* Create and return the given renderer
*
* @param string $name
* @param string|array $name
*
* @return NavigationItemRenderer
*/
protected function createRenderer($name)
{
if (is_array($name)) {
$options = array_splice($name, 1);
$name = $name[0];
} else {
$options = array();
}
$renderer = null;
foreach (Icinga::app()->getModuleManager()->getLoadedModules() as $module) {
$classPath = 'Icinga\\Module\\' . $module->getName() . '\\' . static::RENDERER_NS . '\\' . $name;
if (class_exists($classPath)) {
$renderer = new $classPath();
$renderer = new $classPath($options);
break;
}
}
@ -599,7 +606,7 @@ class NavigationItem implements IteratorAggregate
if ($renderer === null) {
$classPath = 'Icinga\\' . static::RENDERER_NS . '\\' . $name;
if (class_exists($classPath)) {
$renderer = new $classPath();
$renderer = new $classPath($options);
}
}
@ -619,7 +626,7 @@ class NavigationItem implements IteratorAggregate
/**
* Set this item's renderer
*
* @param string|NavigationItemRenderer $renderer
* @param string|array|NavigationItemRenderer $renderer
*
* @return $this
*
@ -627,10 +634,12 @@ class NavigationItem implements IteratorAggregate
*/
public function setRenderer($renderer)
{
if (is_string($renderer)) {
if (is_string($renderer) || is_array($renderer)) {
$renderer = $this->createRenderer($renderer);
} elseif (! $renderer instanceof NavigationItemRenderer) {
throw new InvalidArgumentException('Argument $renderer must be of type string or NavigationItemRenderer');
throw new InvalidArgumentException(
'Argument $renderer must be of type string, array or NavigationItemRenderer'
);
}
$this->renderer = $renderer;

View File

@ -4,6 +4,7 @@
namespace Icinga\Web\Navigation\Renderer;
use Icinga\Application\Icinga;
use Icinga\Util\String;
use Icinga\Web\Navigation\NavigationItem;
use Icinga\Web\View;
@ -19,6 +20,35 @@ class NavigationItemRenderer
*/
protected $view;
/**
* Create a new NavigationItemRenderer
*
* @param array $options
*/
public function __construct(array $options = null)
{
if (! empty($options)) {
$this->setOptions($options);
}
}
/**
* Set the given options
*
* @param array $options
*
* @return $this
*/
public function setOptions(array $options)
{
foreach ($options as $name => $value) {
$setter = 'set' . String::cname($name);
if (method_exists($this, $setter)) {
$this->$setter($value);
}
}
}
/**
* Return the view
*