parent
c3ad665c15
commit
67dee62c57
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue