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 getLanguagesController(array $languages): ?array
  130.     {
  131.         foreach ($languages as &$language) {
  132.             $shopLink $this->getShopLanguageLink($language['id']);
  133.             if ($shopLink) {
  134.                 $language['url'] = $shopLink;
  135.                 continue;
  136.             }
  137.             $cmsRoute $this->linkGenerator->getCmsLink(null$language['id']);
  138.             $language['url'] = $cmsRoute;
  139.         }
  140.         return $languages;
  141.     }
  142.     public function getShopLanguageLink(int $languageId): ?string
  143.     {
  144.         $route $this->requestStack->getMainRequest()->get('_route');
  145.         switch ($route) {
  146.             case 'shop_brand':
  147.                 $params $this->requestStack->getMainRequest()->get('_route_params');
  148.                 $language $this->languageManager->getLanguageByIsoLanguage($params['lang']);
  149.                 $brandLanguage $this->brandLanguageManager->findOneByLinkRewriteAndLanguage(
  150.                     $params['url'],
  151.                     $language->getId()
  152.                 );
  153.                 if (!$brandLanguage) {
  154.                     return null;
  155.                 }
  156.                 return $this->linkGenerator->getManufacturerLink($brandLanguage->getBrand()->getId(), $languageId);
  157.             case 'shop_category':
  158.                 $params $this->requestStack->getMainRequest()->get('_route_params');
  159.                 $language $this->languageManager->getLanguageByIsoLanguage($params['lang']);
  160.                 $taxonomyLanguage $this->taxonomyLanguageManager->findOneByLinkRewriteAndLanguage(
  161.                     $params['url'],
  162.                     $language->getId()
  163.                 );
  164.                 if (!$taxonomyLanguage) {
  165.                     return null;
  166.                 }
  167.                 return $this->linkGenerator->getTaxonomyLink($taxonomyLanguage->getTaxonomy()->getId(), $languageId);
  168.             case 'shop_tag':
  169.                 $params $this->requestStack->getMainRequest()->get('_route_params');
  170.                 $language $this->languageManager->getLanguageByIsoLanguage($params['lang']);
  171.                 $tagOrigin $this->tagManager->findOneByLinkRewriteAndLanguage(
  172.                     $params['url'],
  173.                     $language->getId()
  174.                 );
  175.                 if (!$tagOrigin) {
  176.                     return null;
  177.                 }
  178.                 $tag $this->tagManager->findOneByTagIdAndLanguage(
  179.                     $tagOrigin->getId(),
  180.                     $languageId
  181.                 );
  182.                 return $this->linkGenerator->getTagLink($tag->getLinkRewrite(), $tag->getLanguage()->getIsoCode());
  183.             case 'shop_product':
  184.             case 'shop_service':
  185.             case 'shop_course':
  186.                 $params $this->requestStack->getMainRequest()->get('_route_params');
  187.                 $language $this->languageManager->getLanguageByIsoLanguage($params['lang']);
  188.                 $productLanguage $this->productManager->findOneProductLangByLinkRewriteAndLanguage(
  189.                     $params['url'],
  190.                     $language->getIsoCode()
  191.                 );
  192.                 if (!$productLanguage) {
  193.                     return null;
  194.                 }
  195.                 return $this->linkGenerator->getProductLink($productLanguage->getProduct()->getId(), $languageId);
  196.             case 'checkout':
  197.                 $language $this->languageManager->findOneById($languageId);
  198.                 return $this->router->generate('checkout', ['_locale' => $language->getIsoCode()]);
  199.         }
  200.         return null;
  201.     }
  202.     // TODO reimplement in Symfony
  203.     /**
  204.      * @return int
  205.      */
  206.     public function getCartNumberOfProducts(): int
  207.     {
  208.         return (int)\Cart::staticCountProductsInCart($this->sessionService->get('id_cart'));
  209.     }
  210.     // TODO reimplement in Symfony
  211.     /**
  212.      * @return array|null[]|string[]
  213.      */
  214.     public function getCustomerPackInfo(): array
  215.     {
  216.         /** @var Customer $user */
  217.         $user $this->security->getUser();
  218.         if (!$user) {
  219.             return [
  220.                 'pack_name' => null,
  221.                 'pack_id' => null,
  222.             ];
  223.         }
  224.         $customer $this->customerManager->findOneById((int)$user->getId());
  225.         if (!$customer) {
  226.             return [
  227.                 'pack_name' => null,
  228.                 'pack_id' => null,
  229.             ];
  230.         }
  231.         /** @var Pack $pack */
  232.         $pack $this->packManager->findOneBy(['id' => $customer->getIdPack(), 'language' => $customer->getLanguage()]);
  233.         $packCustomer $pack->getName();
  234.         return [
  235.             'pack_name' => $packCustomer,
  236.             'pack_id' => $customer->getIdPack(),
  237.         ];
  238.     }
  239.     public function getCategoryTreeInfo(): array
  240.     {
  241.         return [];
  242.     }
  243.     /**
  244.      * @param array $days
  245.      *
  246.      * @return string
  247.      */
  248.     protected function getPopupTextDays(array $days): string
  249.     {
  250.         $popupTextDays '<strong>';
  251.         $daysIndexedByMonth = [];
  252.         foreach ($days as $day) {
  253.             $dayMonth explode('-'$day);
  254.             $daysIndexedByMonth[$dayMonth[1]][] = $dayMonth[0];
  255.         }
  256.         foreach ($daysIndexedByMonth as $month => $daysMonth) {
  257.             $popupTextDays .= implode(','$daysMonth).' '.\Tools::displayTextMonth($month).', ';
  258.         }
  259.         return \substr($popupTextDays0, -2).'</strong>';
  260.     }
  261.     public function getRightMenuData(?Customer $loggedUser): array
  262.     {
  263.         $data = [];
  264.         if ($loggedUser) {
  265.             $data['link'] = $this->controlPanelLinkGenerator->getControlPanelLink();
  266.             $data['link_text'] = $this->translator->trans('menu.header.general.right.controlpanel');
  267.         }
  268.         return $data;
  269.     }
  270. }