lib/composer/MenuBundle/src/VisualMedia/MenuBundle/Manager/BaseMenuManager.php line 48

Open in your IDE?
  1. <?php
  2. /**
  3.  * Base Menu Manager
  4.  *
  5.  * @author Vincent van Waasbergen <v.vanwaasbergen@visualmedia.nl>
  6.  */
  7. namespace VisualMedia\MenuBundle\Manager;
  8. use Doctrine\Common\Collections\ArrayCollection;
  9. use VisualMedia\LisaBundle\Component\Interfaces\BundleInterfaces\MenuManagerInterface;
  10. use VisualMedia\LisaBundle\Component\ManagerData;
  11. use VisualMedia\MenuBundle\Repository\BaseMenuRepository;
  12. use VisualMedia\MenuBundle\Entity\BaseMenu;
  13. use VisualMedia\OrderingBundle\Helper\OrderingHelper;
  14. use VisualMedia\TranslationBundle\Service\ChannelProvider;
  15. /**
  16.  * Base Menu Manager
  17.  */
  18. class BaseMenuManager extends BaseMenuRepository implements MenuManagerInterface
  19. {
  20.     /**
  21.      * @var ChannelProvider
  22.      */
  23.     protected $channelProvider;
  24.     /**
  25.      * {@inheritdoc}
  26.      */
  27.     public static function getEntityName(): string
  28.     {
  29.         return BaseMenu::class;
  30.     }
  31.     /**
  32.      * @param ChannelProvider $channelProvider
  33.      */
  34.     public function initialize(ChannelProvider $channelProvider): void
  35.     {
  36.         $this->channelProvider $channelProvider;
  37.     }
  38.     /**
  39.      * {@inheritdoc}
  40.      */
  41.     public function getMenuIndex(ManagerData $data null) : array
  42.     {
  43.         $channel $this->channelProvider->getCurrentChannel();
  44.         foreach ($result $this->getIndex($data) as $index=>$menu) {
  45.             if (!$menu->channels->contains($channel)) {
  46.                 unset($result[$index]);
  47.             }
  48.             $menuItems $menu->getMenuItems()->toArray();
  49.             OrderingHelper::postProcess($menuItems);
  50.             $menu->setMenuItems(new ArrayCollection($menuItems));
  51.         }
  52.         return $result;
  53.     }
  54.     /**
  55.      * @param string $reference
  56.      * @return BaseMenu
  57.      */
  58.     public function getOrCreateMenu(string $reference): ?BaseMenu
  59.     {
  60.         $channel $this->channelProvider->getCurrentChannel();
  61.         $managerData = new ManagerData([
  62.             'reference' => $reference,
  63.             'channel' => $channel,
  64.         ]);
  65.         if (null === $menu $this->getFirst($managerData)) {
  66.             $menu = new BaseMenu();
  67.             $menu->setReference($reference);
  68.             $menu->setTitle(sprintf('%s (%s)'ucfirst(str_replace('_'' '$reference)), $channel->title));
  69.             $menu->channels->add($channel);
  70.             $this->persist($menu);
  71.             $this->flush();
  72.         }
  73.         return $menu;
  74.     }
  75. }