private function cleanMenuLevel(MenuItem $menu) { if (!$menu->hasChildren()) { return; } foreach ($menu->getChildren() as $menuItem) { $this->cleanMenuLevel($menuItem); if (!$menuItem instanceof RoutableItem && !$menuItem->hasChildren()) { $menu->removeChild($menuItem->getName()); } } }
/** * @param \FSi\Bundle\AdminBundle\Event\MenuEvent $event * @param \FSi\Bundle\AdminBundle\Menu\Item\Item $menu * @param \FSi\Bundle\AdminBundle\Menu\Item\ElementItem $childItem1 * @param \FSi\Bundle\AdminBundle\Menu\Item\RoutableItem $childItem2 * @param \FSi\Bundle\AdminBundle\Menu\Item\Item $childItem3 * @param \FSi\Bundle\AdminBundle\Menu\Item\RoutableItem $childItem31 * @param \FSi\Bundle\AdminBundle\Menu\Item\Item $childItem4 * @param \FSi\Bundle\AdminBundle\Menu\Item\Item $childItem41 * @param \FSi\Bundle\AdminBundle\Menu\Item\Item $childItem411 */ public function it_remove_empty_menus($event, $menu, $childItem1, $childItem2, $childItem3, $childItem31, $childItem4, $childItem41, $childItem411) { $event->getMenu()->willReturn($menu); $menu->hasChildren()->willReturn(true); $childItem3->getName()->willReturn('item3'); $childItem3->hasChildren()->willReturn(true); $childItem3->getChildren()->willReturn([$childItem31]); $childItem4->getName()->willReturn('item4'); $childItem4->hasChildren()->willReturn(false); //after cleanup of item41 $childItem4->getChildren()->willReturn([$childItem41]); $menu->removeChild('item4')->shouldBeCalled(); $childItem41->getName()->willReturn('item41'); $childItem41->hasChildren()->willReturn(false); //after cleanup of item411 $childItem41->getChildren()->willReturn([$childItem411]); $childItem411->getName()->willReturn('item411'); $childItem411->hasChildren()->willReturn(false); $menu->getChildren()->willReturn([$childItem1, $childItem2, $childItem3, $childItem4]); $this->cleanUpMenu($event); }
/** * @param \Knp\Menu\FactoryInterface $factory * @param \Knp\Menu\ItemInterface $knpRootItem * @param \Knp\Menu\ItemInterface $knpFirstItem * @param \Knp\Menu\ItemInterface $knpSecondItem * @param \Knp\Menu\ItemInterface $knpChildOfSecondItem * @param \FSi\Bundle\AdminBundle\Menu\KnpMenu\ItemDecorator $itemDecorator * @param \FSi\Bundle\AdminBundle\Menu\Builder\Builder $builder * @param \FSi\Bundle\AdminBundle\Menu\Item\Item $rootItem * @param \FSi\Bundle\AdminBundle\Menu\Item\Item $firstItem * @param \FSi\Bundle\AdminBundle\Menu\Item\Item $secondItem * @param \FSi\Bundle\AdminBundle\Menu\Item\Item $childOfSecondItem */ function it_builds_knp_menu_and_decorates_items($factory, $knpRootItem, $knpFirstItem, $knpSecondItem, $knpChildOfSecondItem, $itemDecorator, $builder, $rootItem, $firstItem, $secondItem, $childOfSecondItem) { $builder->buildMenu()->willReturn($rootItem); $firstItem->getName()->willReturn('first item'); $firstItem->hasChildren()->willReturn(false); $secondItem->getName()->willReturn('second item'); $secondItem->hasChildren()->willReturn(true); $childOfSecondItem->getName()->willReturn('child of second item'); $childOfSecondItem->hasChildren()->willReturn(false); $rootItem->getChildren()->willReturn(array($firstItem, $secondItem)); $secondItem->getChildren()->willReturn(array($childOfSecondItem)); $rootItem->getOption('attr')->willReturn(array('id' => null, 'class' => 'some class')); $factory->createItem('root')->willReturn($knpRootItem); $knpRootItem->addChild('first item', array())->willReturn($knpFirstItem); $knpRootItem->addChild('second item', array())->willReturn($knpSecondItem); $knpSecondItem->addChild('child of second item', array())->willReturn($knpChildOfSecondItem); $knpRootItem->setChildrenAttribute('id', null)->shouldBeCalled(); $knpRootItem->setChildrenAttribute('class', 'some class')->shouldBeCalled(); $itemDecorator->decorate($knpFirstItem, $firstItem)->shouldBeCalled(); $itemDecorator->decorate($knpSecondItem, $secondItem)->shouldBeCalled(); $itemDecorator->decorate($knpChildOfSecondItem, $childOfSecondItem)->shouldBeCalled(); $this->createMenu($builder); }