118 lines
5.2 KiB
PHP
118 lines
5.2 KiB
PHP
<?php
|
|
|
|
namespace Trinity\Bundle\AdminMenuBundle\Menu;
|
|
|
|
use Symfony\Bundle\FrameworkBundle\Routing\Router;
|
|
use Trinity\Bundle\SecurityBundle\AccessControl\RouteAccessControl;
|
|
|
|
class ConfigurationTransformer
|
|
{
|
|
protected $router;
|
|
|
|
protected $factory;
|
|
|
|
protected $config;
|
|
|
|
public function __construct(RouteAccessControl $rac, Router $router, MenuFactory $factory, array $config)
|
|
{
|
|
$this->router = $router;
|
|
$this->factory = $factory;
|
|
$this->config = $config;
|
|
$this->rac = $rac;
|
|
}
|
|
|
|
public function getMenu()
|
|
{
|
|
$menu = $this->factory->createItem($this->config['title']);
|
|
|
|
foreach ($this->config['items'] as $item) {
|
|
if (isset($item['callback']) && is_array($item['callback']) && count($item['callback']) === 2) {
|
|
$item = call_user_func(array($item['callback'][0], $item['callback'][1]));
|
|
}
|
|
|
|
if (isset($item['items']) && is_array($item['items'])) {
|
|
$obj_category = $menu->addChild($item['title']);
|
|
|
|
foreach ($item['items'] as $sub_category) {
|
|
if (isset($sub_category['callback']) && is_array($sub_category['callback']) && count($sub_category['callback']) === 2) {
|
|
$sub_category = call_user_func(array($sub_category['callback'][0], $sub_category['callback'][1]));
|
|
}
|
|
|
|
$method = $sub_category['test_is_granted'] ? 'addChildIfGranted' : 'addChild';
|
|
$title = $sub_category['title'];
|
|
|
|
$options = array();
|
|
|
|
if (!empty($sub_category['route_name']) || !empty($sub_category['route_uri'])) {
|
|
$options['uri'] = !empty($sub_category['route_uri']) ? $sub_category['route_uri'] : $this->router->generate($sub_category['route_name'], $sub_category['route_params']);
|
|
}
|
|
|
|
if (!empty($sub_category['query_string'])) {
|
|
$options['uri'].= '?'.trim($sub_category['query_string'], '? ');
|
|
}
|
|
|
|
if ($sub_category['test_is_granted']) {
|
|
$obj_sub_category = $obj_category->addChildIfGranted($title, $this->rac, $options);
|
|
} else {
|
|
$obj_sub_category = $obj_category->addChild($title, $options);
|
|
}
|
|
|
|
if (!empty($sub_category['icon'])) {
|
|
call_user_func(
|
|
array(
|
|
$obj_sub_category,
|
|
'setIcon'
|
|
),
|
|
$sub_category['icon'],
|
|
isset($sub_category['icon_attr']) && is_array($sub_category['icon_attr']) ? $sub_category['icon_attr'] : array()
|
|
);
|
|
}
|
|
|
|
if (isset($sub_category['items']) && is_array($sub_category['items'])) {
|
|
foreach ($sub_category['items'] as $sub_sub_category) {
|
|
if (isset($sub_sub_category['callback']) && is_array($sub_sub_category['callback']) && count($sub_sub_category['callback']) === 2) {
|
|
$sub_sub_category = call_user_func(array($sub_sub_category['callback'][0], $sub_sub_category['callback'][1]));
|
|
}
|
|
|
|
$title = $sub_sub_category['title'];
|
|
|
|
$options = array();
|
|
|
|
if (!empty($sub_sub_category['route_name']) || !empty($sub_sub_category['route_uri'])) {
|
|
$options['uri'] = !empty($sub_sub_category['route_uri']) ? $sub_sub_category['route_uri'] : $this->router->generate($sub_sub_category['route_name'], $sub_sub_category['route_params']);
|
|
}
|
|
|
|
if (!empty($sub_sub_category['query_string'])) {
|
|
$options['uri'].= '?'.trim($sub_category['query_string'], '? ');
|
|
}
|
|
|
|
if ($sub_sub_category['test_is_granted']) {
|
|
$obj_sub_sub_category = $obj_sub_category->addChildIfGranted($title, $this->rac, $options);
|
|
} else {
|
|
$obj_sub_sub_category = $obj_sub_category->addChild($title, $options);
|
|
}
|
|
|
|
if (!empty($sub_sub_category['icon'])) {
|
|
call_user_func(
|
|
array(
|
|
$obj_sub_sub_category,
|
|
'setIcon'
|
|
),
|
|
$sub_sub_category['icon'],
|
|
isset($sub_sub_category['icon_attr']) && is_array($sub_sub_category['icon_attr']) ? $sub_sub_category['icon_attr'] : array()
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!$obj_category->hasChildren()) {
|
|
$menu->removeChild($item['title']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $menu;
|
|
}
|
|
}
|