src/Application/Service/Menu/BaseMenuService.php line 93

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Application\Service\Menu;
  4. use App\Application\Service\Session\SessionService;
  5. use App\Controller\LegacyController;
  6. use App\Manager\System\BrandLanguageManager;
  7. use App\Manager\System\CustomerManager;
  8. use App\Manager\System\LanguageManager;
  9. use App\Application\Service\Helper\ControlPanelLinkGenerator;
  10. use App\Application\Service\Helper\LegacyTranslator;
  11. use App\Application\Service\Helper\LinkGenerator;
  12. use App\Entity\System\Customer;
  13. use App\Manager\System\PackManager;
  14. use App\Manager\System\ProductManager;
  15. use App\Manager\System\TagManager;
  16. use App\Manager\System\TaxonomyLanguageManager;
  17. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  18. use Symfony\Component\HttpFoundation\RequestStack;
  19. use Symfony\Component\Routing\RouterInterface;
  20. use Symfony\Component\Security\Core\Security;
  21. use Symfony\Contracts\Translation\TranslatorInterface;
  22. use App\Entity\System\Pack;
  23. abstract class BaseMenuService
  24. {
  25.     public const CORPORATE 1;
  26.     public const SHOP 2;
  27.     protected LegacyTranslator $legacyTranslator;
  28.     protected RequestStack $requestStack;
  29.     protected LinkGenerator $linkGenerator;
  30.     protected string $baseUrl;
  31.     private LanguageManager $languageManager;
  32.     protected TranslatorInterface $translator;
  33.     protected RouterInterface $router;
  34.     protected ControlPanelLinkGenerator $controlPanelLinkGenerator;
  35.     private Security $security;
  36.     private SessionService $sessionService;
  37.     private CustomerManager $customerManager;
  38.     private PackManager $packManager;
  39.     private BrandLanguageManager $brandLanguageManager;
  40.     private TaxonomyLanguageManager $taxonomyLanguageManager;
  41.     private TagManager $tagManager;
  42.     private ProductManager $productManager;
  43.     public function __construct(
  44.         LegacyTranslator $legacyTranslator,
  45.         LinkGenerator $linkGenerator,
  46.         RequestStack $requestStack,
  47.         LanguageManager $languageManager,
  48.         ParameterBagInterface $parameterBag,
  49.         TranslatorInterface $translator,
  50.         RouterInterface $router,
  51.         ControlPanelLinkGenerator $controlPanelLinkGenerator,
  52.         Security $security,
  53.         SessionService $sessionService,
  54.         CustomerManager $customerManager,
  55.         PackManager $packManager,
  56.         BrandLanguageManager $brandLanguageManager,
  57.         TaxonomyLanguageManager $taxonomyLanguageManager,
  58.         TagManager $tagManager,
  59.         ProductManager $productManager
  60.     ) {
  61.         $this->legacyTranslator $legacyTranslator;
  62.         $this->linkGenerator $linkGenerator;
  63.         $this->baseUrl $parameterBag->get('base_url');
  64.         $this->requestStack $requestStack;
  65.         $this->languageManager $languageManager;
  66.         $this->translator $translator;
  67.         $this->router $router;
  68.         $this->controlPanelLinkGenerator $controlPanelLinkGenerator;
  69.         $this->security $security;
  70.         $this->sessionService $sessionService;
  71.         $this->customerManager $customerManager;
  72.         $this->packManager $packManager;
  73.         $this->brandLanguageManager $brandLanguageManager;
  74.         $this->taxonomyLanguageManager $taxonomyLanguageManager;
  75.         $this->tagManager $tagManager;
  76.         $this->productManager $productManager;
  77.     }
  78.     /**
  79.      * @return array[]
  80.      */
  81.     public function getTopbarLinks(int $selectedLink): array
  82.     {
  83.         return [
  84.             [
  85.                 'name' => $this->legacyTranslator->trans('Empresa''accountController'),
  86.                 'url' => $this->baseUrl.$this->requestStack->getSession()->get('lang'),
  87.                 'selected' => $selectedLink === self::CORPORATE,
  88.             ],
  89.             [
  90.                 'name' => $this->translator->trans('menu.base.shopb2b.title'),
  91.                 'url' => $this->linkGenerator->getFrontUrl('tiendab2b.html'),
  92.                 'selected' => $selectedLink === self::SHOP,
  93.             ],
  94.         ];
  95.     }
  96.     public function getLanguages(): array
  97.     {
  98.         return $this->languageManager->findAllActiveNamesAndIsoCodes();
  99.     }
  100.     /**
  101.      * @return array<int, array{id: int, name: string, isoCode: string, isoCodeReal: string|null, url: string|null}>
  102.      */
  103.     public function getLanguageLinks(string $parentController, ?string $url null): array
  104.     {
  105.         $languages $this->languageManager->findAllActiveNamesAndIsoCodes();
  106.         $isLegacyController = (false !== strpos($parentControllerLegacyController::class));
  107.         $languageLinks $this->getLanguagesController($languages);
  108.         if (
  109.             $languageLinks
  110.             && (!$isLegacyController || $this->requestStack->getSession()->get('cms_new') === true)
  111.         ) {
  112.             return $languageLinks;
  113.         }
  114.         $controllerName $this->requestStack->getSession()->get('controller');
  115.         if ($controllerName === 'indexController') {
  116.             $controllerName '';
  117.         }
  118.         if ($url === LinkGenerator::NAME_URL_TIENDA_B2B_WITH_TERMINATION_HTML) {
  119.             $controllerName LinkGenerator::NAME_URL_TIENDA_B2B;
  120.         }
  121.         $controllerName str_replace('Controller'''$controllerName);
  122.         $languagesResult = [];
  123.         foreach ($languages as $language) {
  124.             $language['url'] = $this->linkGenerator->getCurrentLink($controllerName$language['id']);
  125.             $languagesResult[] = $language;
  126.         }
  127.         return $languagesResult;
  128.     }
  129.     public function getLanguagesCmsController($languages): ?array
  130.     {
  131.         foreach ($languages as &$language) {
  132.             $language['url'] = $this->linkGenerator->getCmsLink(null$language['id']);
  133.         }
  134.         return $languages;
  135.     }
  136.     public function getLanguagesController(array $languages): ?array
  137.     {
  138.         foreach ($languages as &$language) {
  139.             $shopLink $this->getShopLanguageLink($language['id']);
  140.             if ($shopLink) {
  141.                 $language['url'] = $shopLink;
  142.                 continue;
  143.             }
  144.             $cmsRoute $this->linkGenerator->getCmsLink(null$language['id']);
  145.             $language['url'] = $cmsRoute;
  146.         }
  147.         return $languages;
  148.     }
  149.     public function getShopLanguageLink(int $languageId): ?string
  150.     {
  151.         $route $this->requestStack->getMainRequest()->get('_route');
  152.         switch ($route) {
  153.             case 'shop_brand':
  154.                 $params $this->requestStack->getMainRequest()->get('_route_params');
  155.                 $language $this->languageManager->getLanguageByIsoLanguage($params['lang']);
  156.                 $brandLanguage $this->brandLanguageManager->findOneByLinkRewriteAndLanguage(
  157.                     $params['url'],
  158.                     $language->getId()
  159.                 );
  160.                 if (!$brandLanguage) {
  161.                     return null;
  162.                 }
  163.                 return $this->linkGenerator->getManufacturerLink($brandLanguage->getBrand()->getId(), $languageId);
  164.             case 'shop_category':
  165.                 $params $this->requestStack->getMainRequest()->get('_route_params');
  166.                 $language $this->languageManager->getLanguageByIsoLanguage($params['lang']);
  167.                 $taxonomyLanguage $this->taxonomyLanguageManager->findOneByLinkRewriteAndLanguage(
  168.                     $params['url'],
  169.                     $language->getId()
  170.                 );
  171.                 if (!$taxonomyLanguage) {
  172.                     return null;
  173.                 }
  174.                 return $this->linkGenerator->getTaxonomyLink($taxonomyLanguage->getTaxonomy()->getId(), $languageId);
  175.             case 'shop_tag':
  176.                 $params $this->requestStack->getMainRequest()->get('_route_params');
  177.                 $language $this->languageManager->getLanguageByIsoLanguage($params['lang']);
  178.                 $tagOrigin $this->tagManager->findOneByLinkRewriteAndLanguage(
  179.                     $params['url'],
  180.                     $language->getId()
  181.                 );
  182.                 if (!$tagOrigin) {
  183.                     return null;
  184.                 }
  185.                 $tag $this->tagManager->findOneByTagIdAndLanguage(
  186.                     $tagOrigin->getId(),
  187.                     $languageId
  188.                 );
  189.                 return $this->linkGenerator->getTagLink($tag->getLinkRewrite(), $tag->getLanguage()->getIsoCode());
  190.             case 'shop_product':
  191.             case 'shop_service':
  192.                 $params $this->requestStack->getMainRequest()->get('_route_params');
  193.                 $language $this->languageManager->getLanguageByIsoLanguage($params['lang']);
  194.                 $productLanguage $this->productManager->findOneProductLangByLinkRewriteAndLanguage(
  195.                     $params['url'],
  196.                     $language->getIsoCode()
  197.                 );
  198.                 if (!$productLanguage) {
  199.                     return null;
  200.                 }
  201.                 return $this->linkGenerator->getProductLink($productLanguage->getProduct()->getId(), $languageId);
  202.             case 'checkout':
  203.                 $language $this->languageManager->findOneById($languageId);
  204.                 return $this->router->generate('checkout', ['_locale' => $language->getIsoCode()]);
  205.         }
  206.         return null;
  207.     }
  208.     // TODO reimplement in Symfony
  209.     /**
  210.      * @return int
  211.      */
  212.     public function getCartNumberOfProducts(): int
  213.     {
  214.         return (int)\Cart::staticCountProductsInCart($this->sessionService->get('id_cart'));
  215.     }
  216.     // TODO reimplement in Symfony
  217.     /**
  218.      * @return array|null[]|string[]
  219.      */
  220.     public function getCustomerPackInfo(): array
  221.     {
  222.         /** @var Customer $user */
  223.         $user $this->security->getUser();
  224.         if (!$user) {
  225.             return [
  226.                 'pack_name' => null,
  227.                 'pack_id' => null,
  228.             ];
  229.         }
  230.         $customer $this->customerManager->findOneById((int)$user->getId());
  231.         if (!$customer) {
  232.             return [
  233.                 'pack_name' => null,
  234.                 'pack_id' => null,
  235.             ];
  236.         }
  237.         $packId $customer->getIdPack() ?? Pack::PACK_WITHOUT_PACK;
  238.         /** @var Pack $pack */
  239.         $pack $this->packManager->findOneBy(['id' => $packId'language' => $customer->getLanguage()]);
  240.         $packCustomer $pack->getName();
  241.         return [
  242.             'pack_name' => $packCustomer,
  243.             'pack_id' => $packId,
  244.         ];
  245.     }
  246.     public function getCategoryTreeInfo(): array
  247.     {
  248.         return [];
  249.     }
  250.     /**
  251.      * @param array $days
  252.      *
  253.      * @return string
  254.      */
  255.     protected function getPopupTextDays(array $days): string
  256.     {
  257.         $popupTextDays '<strong>';
  258.         $daysIndexedByMonth = [];
  259.         foreach ($days as $day) {
  260.             $dayMonth explode('-'$day);
  261.             $daysIndexedByMonth[$dayMonth[1]][] = $dayMonth[0];
  262.         }
  263.         foreach ($daysIndexedByMonth as $month => $daysMonth) {
  264.             $popupTextDays .= implode(','$daysMonth).' '.\Tools::displayTextMonth($month).', ';
  265.         }
  266.         return \substr($popupTextDays0, -2).'</strong>';
  267.     }
  268.     public function getRightMenuData(?Customer $loggedUser): array
  269.     {
  270.         $data = [];
  271.         if ($loggedUser) {
  272.             $data['link'] = $this->controlPanelLinkGenerator->getControlPanelLink();
  273.             $data['link_text'] = $this->translator->trans('menu.header.general.right.controlpanel');
  274.         }
  275.         return $data;
  276.     }
  277. }