vendor/ibexa/admin-ui/src/lib/Menu/Listener/ReorderByOrderNumberListener.php line 16

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. declare(strict_types=1);
  7. namespace Ibexa\AdminUi\Menu\Listener;
  8. use Ibexa\AdminUi\Menu\Event\ConfigureMenuEvent;
  9. use Knp\Menu\ItemInterface;
  10. final class ReorderByOrderNumberListener
  11. {
  12.     public function reorderMenuItems(ConfigureMenuEvent $event): void
  13.     {
  14.         $menu $event->getMenu();
  15.         $this->recursiveReorderMenuItems($menu);
  16.     }
  17.     private function recursiveReorderMenuItems(ItemInterface $menuItem): void
  18.     {
  19.         $menuItemList = [];
  20.         $unorderedMenuItemsList = [];
  21.         foreach ($menuItem->getChildren() as $nestedMenuItem) {
  22.             if ($nestedMenuItem->hasChildren()) {
  23.                 $this->recursiveReorderMenuItems($nestedMenuItem);
  24.             }
  25.             $orderNumber $nestedMenuItem->getExtra('orderNumber');
  26.             if ($orderNumber === null) {
  27.                 $unorderedMenuItemsList[] = $nestedMenuItem;
  28.             } else {
  29.                 $menuItemList[$orderNumber][] = $nestedMenuItem;
  30.             }
  31.         }
  32.         ksort($menuItemList);
  33.         $menuItemList[] = $unorderedMenuItemsList;
  34.         $menuItem->reorderChildren(
  35.             array_map(static function (ItemInterface $item): string {
  36.                 return $item->getName();
  37.             }, array_merge(...$menuItemList))
  38.         );
  39.     }
  40. }
  41. class_alias(ReorderByOrderNumberListener::class, 'EzSystems\EzPlatformAdminUi\Menu\Listener\ReorderByOrderNumberListener');