deblan.tv/vendor/trinity/src/Trinity/Bundle/AdminMenuBundle/Menu/ConfigurationTransformer.php
2015-03-02 21:57:49 +01:00

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;
}
}