mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
update MenuComposer to fit with #179 spec
This commit is contained in:
parent
2e8fa3b064
commit
2367a78845
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace CL\Chill\MainBundle\DependencyInjection\Services;
|
||||
namespace CL\Chill\MainBundle\Routing;
|
||||
|
||||
use Symfony\Component\Routing\RouterInterface;
|
||||
use Symfony\Component\Routing\RouteCollection;
|
||||
@ -47,23 +47,15 @@ class MenuComposer
|
||||
|
||||
foreach ($this->routeCollection->all() as $routeKey => $route) {
|
||||
if ($route->hasOption('menus')) {
|
||||
foreach ($route->getOption('menus') as $menuKey => $params) {
|
||||
if ($menuId === $menuKey) {
|
||||
$route = array();
|
||||
$route['route'] = $routeKey;
|
||||
$route['label'] = $params['label'];
|
||||
$route['helper'] =
|
||||
(isset($params['helper'])) ? $params['helper'] : null;
|
||||
|
||||
//add route to the routes array, avoiding duplicate 'order'
|
||||
// to erase previously added
|
||||
if (!isset($routes[$params['order']])) {
|
||||
$routes[$params['order']] = $route;
|
||||
} else {
|
||||
$routes[$params['order'] + 1 ] = $route;
|
||||
}
|
||||
|
||||
}
|
||||
if (array_key_exists($menuId, $route->getOption('menus'))) {
|
||||
$route = $route->getOption('menus')[$menuId];
|
||||
|
||||
$route['key'] = $routeKey;
|
||||
|
||||
$order = $this->resolveOrder($routes, $route['order']);
|
||||
//we do not want to duplicate order information
|
||||
unset($route['order']);
|
||||
$routes[$order] = $route;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -72,5 +64,22 @@ class MenuComposer
|
||||
|
||||
return $routes;
|
||||
}
|
||||
|
||||
/**
|
||||
* recursive function to resolve the order of a array of routes.
|
||||
* If the order chosen in routing.yml is already in used, find the
|
||||
* first next order available.
|
||||
*
|
||||
* @param array $routes the routes previously added
|
||||
* @param int $order
|
||||
* @return int
|
||||
*/
|
||||
private function resolveOrder($routes, $order){
|
||||
if (isset($routes[$order])) {
|
||||
return $this->resolveOrder($routes, $order + 1);
|
||||
} else {
|
||||
return $order;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -8,7 +8,8 @@ chill_main_dummy_0:
|
||||
menus:
|
||||
dummy0:
|
||||
order: 50
|
||||
label: 'test0'
|
||||
label: test0
|
||||
otherkey: othervalue
|
||||
dummy1:
|
||||
order: 50
|
||||
label: test dummy 1
|
||||
|
@ -49,18 +49,37 @@ class MenuComposerTest extends KernelTestCase
|
||||
'Failing to assert that routes are ordered');
|
||||
}
|
||||
}
|
||||
$this->assertSame(array(
|
||||
|
||||
//check that the array are identical, order is not important :
|
||||
|
||||
$expected = array(
|
||||
50 => array(
|
||||
'route' => 'chill_main_dummy_0',
|
||||
'key' => 'chill_main_dummy_0',
|
||||
'label' => 'test0',
|
||||
'helper'=> null
|
||||
'otherkey' => 'othervalue'
|
||||
),
|
||||
51 => array(
|
||||
'route' => 'chill_main_dummy_1',
|
||||
'key' => 'chill_main_dummy_1',
|
||||
'label' => 'test1',
|
||||
'helper'=> 'great helper'
|
||||
)
|
||||
));
|
||||
|
||||
|
||||
foreach ($expected as $order => $route ){
|
||||
|
||||
), $routes);
|
||||
}
|
||||
|
||||
//compare arrays
|
||||
foreach($expected as $order => $route) {
|
||||
//check the key are the one expected
|
||||
$this->assertTrue(isset($routes[$order]));
|
||||
|
||||
if (isset($routes[$order])){ #avoid an exception if routes with order does not exists
|
||||
//sort arrays. Order matters for phpunit::assertSame
|
||||
ksort($route);
|
||||
ksort($routes[$order]);
|
||||
$this->assertSame($route, $routes[$order]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user