src/Controller/FrontendShop/ProductController.php line 103

Open in your IDE?
  1. <?php
  2. namespace App\Controller\FrontendShop;
  3. use App\Entity\Gos\Category;
  4. use App\Entity\Gos\Product;
  5. use App\Entity\Gos\ProductAssociation;
  6. use App\Entity\Gos\ProductVariant;
  7. use App\Utils\ProductAssociationUtils;
  8. use App\Utils\TemplateView;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. /**
  15.  * @Route("/")
  16.  */
  17. class ProductController extends AbstractController
  18. {
  19.     private EntityManagerInterface $em;
  20.     private TemplateView $templateView;
  21.     public function __construct(EntityManagerInterface $emTemplateView $templateView)
  22.     {
  23.         $this->em $em;
  24.         $this->templateView $templateView;
  25.     }
  26.     /**
  27.      * @Route("produkt/preview/{type}/{productAssociationId}", name="efProductPreview")
  28.      */
  29.     public function previewAction($productAssociationId$type 'product'): JsonResponse
  30.     {
  31.         switch ($type)
  32.         {
  33.             case 'product':
  34.                 $parameters $this->templateView->resolveProductQuickPreviewParameters(
  35.                     (int)$productAssociationId
  36.                 );
  37.                 $template '/frontend-eforum/_partials/modules/productBanner.html.twig';
  38.                 $parameters['isModal'] = 'isModal';
  39.                 if (isset($parameters['product']))
  40.                 {
  41.                     foreach ($parameters['product']->getProducts() as $product)
  42.                     {
  43.                         /** @var Product $product */
  44.                         if ($product->getIsEvent())
  45.                         {
  46.                             $template '/frontend-eforum/_partials/modules/productEventBanner.html.twig';
  47.                         }
  48.                     }
  49.                 }
  50.                 break;
  51.             case 'changeSubscriptions':
  52.             case 'subscriptions':
  53.                 $parameters $this->templateView->resolveSubscriptionsPreviewParameters(
  54.                     (int)$productAssociationId
  55.                 );
  56.                 if ($type === 'changeSubscriptions')
  57.                 {
  58.                     $parameters['change'] = true;
  59.                 }
  60.                 $template '/frontend-eforum/_partials/modal-subscriptions.html.twig';
  61.                 break;
  62.         }
  63.         if (isset($parameters) && isset($template))
  64.         {
  65.             if ($parameters['code'] != 500)
  66.             {
  67.                 $body $this->render($template$parameters);
  68.             }
  69.             else
  70.             {
  71.                 return $this->json([
  72.                     'code' => 500,
  73.                     'body' => ''
  74.                 ]);
  75.             }
  76.             return $this->json([
  77.                 'code' => $parameters['code'],
  78.                 'body' => $body->getContent()
  79.             ]);
  80.         }
  81.         return $this->json([
  82.             'code' => 500,
  83.             'body' => ''
  84.         ]);
  85.     }
  86.     /**
  87.      * @Route("{categorySlug}/{categoryChildSlug}/{productAssociationSlug}", name="efShowProduct", requirements={"categorySlug"="^(?!reset).*"})
  88.      * @Route("hiddenProduct/{categorySlug}/{categoryChildSlug}/{productAssociationSlug}", name="efShowHiddenProduct", requirements={"categorySlug"="^(?!reset).*"})
  89.      */
  90.     public function showAction(Request $requestProductAssociationUtils $associationUtils$categoryChildSlug$productAssociationSlug)
  91.     {
  92.         $repoProductAssociation $this->em->getRepository(ProductAssociation::class);
  93.         /** @var ProductAssociation $productAssociation */
  94.         $productAssociation $repoProductAssociation->findOneBySlug($productAssociationSlug);
  95.         /** @var Category $categoryChild */
  96.         $categoryChild $this->em->getRepository(Category::class)->findOneByCategorySlug($categoryChildSlug);
  97.         if ($productAssociation === null)
  98.         {
  99.             throw $this->createNotFoundException();
  100.         }
  101.         if ($productAssociation->getIsHidden())
  102.         {
  103.             $route $request->getUri();
  104.             $route strpos($route'hiddenProduct');
  105.             if (!$route)
  106.             {
  107.                 return $this->redirectToRoute('efShowDynamicTemplate');
  108.             }
  109.         }
  110.         $modules $this->templateView->getView($productAssociation);
  111.         if ($modules === null)
  112.         {
  113.             return $this->redirectToRoute('efShowDynamicTemplate');
  114.         }
  115.         if ($categoryChild instanceof Category)
  116.         {
  117.             $modules['productsInCategory'] = $repoProductAssociation
  118.                 ->findAllWithinCategoryWithoutSelf($categoryChild->getId(), $productAssociation);
  119.         }
  120.         $parameters                     $this->templateView->getExtraParameters(null$productAssociation);
  121.         $parameters['modules']          = $modules;
  122.         $parameters['product']          = $productAssociation;
  123.         $parameters['productVariants']  = $productAssociation->getProductVariants()->toArray();
  124.         $parameters['breadcrumbs']      = [];
  125.         $parameters['isProductPage']    = true;
  126.         usort($parameters['productVariants'], [$associationUtils'sortProductVariantsByPrice']);
  127.         if ($productAssociation->getMainCategory() instanceof Category)
  128.         {
  129.             $parameters['breadcrumbs'][] = [
  130.                 'url'  => $this->generateUrl(
  131.                     'category_show',
  132.                     ['category' => $productAssociation->getParentCategorySlug()]
  133.                 ),
  134.                 'name' => $productAssociation->getMainCategory()->getCategoryName()
  135.             ];
  136.         }
  137.         if ($productAssociation->getCategoryMaster() instanceof Category)
  138.         {
  139.             $parameters['breadcrumbs'][] = [
  140.                 'url'  => $this->generateUrl(
  141.                     'category_show',
  142.                     ['category' => $productAssociation->getCategorySlug()]
  143.                 ),
  144.                 'name' => $productAssociation->getCategoryMaster()->getCategoryName()
  145.             ];
  146.         }
  147.         if ($productAssociation->getCategoryMaster() instanceof Category)
  148.         {
  149.             $parameters['breadcrumbs'][] = ['name' => $productAssociation->getTitle()];
  150.         }
  151.         // parameters to dataLayer
  152.         $categoriesList = [];
  153.         $categoriesList['6206'] = 'Oprogramowanie > Programy edukacyjne';
  154.         $categoriesList['6443'] = 'Oprogramowanie > Programy edukacyjne';
  155.         $categoriesList['6203'] = 'Oprogramowanie > Programy edukacyjne';
  156.         $categoriesList['6281'] = 'Oprogramowanie > Programy edukacyjne';
  157.         $categoriesList['6356'] = 'Oprogramowanie > Programy edukacyjne';
  158.         $categoriesList['6429'] = 'Oprogramowanie > Programy edukacyjne';
  159.         $categoriesList['6244'] = 'Oprogramowanie > Programy edukacyjne';
  160.         $categoriesList['5111'] = 'Oprogramowanie > Programy edukacyjne';
  161.         $categoriesList['5291'] = 'Oprogramowanie > Programy edukacyjne';
  162.         $categoriesList['5321'] = 'Oprogramowanie > Programy edukacyjne';
  163.         $categoriesList['5071'] = 'Oprogramowanie > Programy edukacyjne';
  164.         $categoriesList['5081'] = 'Oprogramowanie > Programy edukacyjne';
  165.         $categoriesList['5221'] = 'Oprogramowanie > Programy edukacyjne';
  166.         $categoriesList['61533'] = 'Media > Gazety i czasopisma';
  167.         $categoriesList['61708'] = 'Media > Gazety i czasopisma';
  168.         $categoriesList['61548'] = 'Media > Gazety i czasopisma';
  169.         $categoriesList['61703'] = 'Media > Gazety i czasopisma';
  170.         $categoriesList['61536'] = 'Media > Gazety i czasopisma';
  171.         $categoriesList['61706'] = 'Media > Gazety i czasopisma';
  172.         $categoriesList['61405'] = 'Media > Gazety i czasopisma';
  173.         $categoriesList['61540'] = 'Media > Gazety i czasopisma';
  174.         $categoriesList['61531'] = 'Media > Gazety i czasopisma';
  175.         $categoriesList['61543'] = 'Media > Gazety i czasopisma';
  176.         $categoriesList['61575'] = 'Media > Gazety i czasopisma';
  177.         $categoriesList['61410'] = 'Media > Gazety i czasopisma';
  178.         $categoriesList['61370'] = 'Media > Gazety i czasopisma';
  179.         $categoriesList['61544'] = 'Media > Gazety i czasopisma';
  180.         $categoriesList['61592'] = 'Media > Gazety i czasopisma';
  181.         $categoriesList['1505'] = 'Media > Gazety i czasopisma';
  182.         $categoriesList['61587'] = 'Media > Gazety i czasopisma';
  183.         $categoriesList['61705'] = 'Media > Gazety i czasopisma';
  184.         $categoriesList['61801'] = 'Media > Gazety i czasopisma';
  185.         $categoriesList['61528'] = 'Media > Gazety i czasopisma';
  186.         $categoriesList['61507'] = 'Media > Gazety i czasopisma';
  187.         $categoriesList['61555'] = 'Media > Gazety i czasopisma';
  188.         $categoriesList['4500'] = 'Media > Gazety i czasopisma';
  189.         $categoriesList['4754'] = 'Media > Gazety i czasopisma';
  190.         $categoriesList['4409'] = 'Media > Gazety i czasopisma';
  191.         $categoriesList['4408'] = 'Media > Gazety i czasopisma';
  192.         $categoriesList['4407'] = 'Media > Gazety i czasopisma';
  193.         $categoriesList['4667'] = 'Media > Gazety i czasopisma';
  194.         $categoriesList['4600'] = 'Media > Gazety i czasopisma';
  195.         $categoriesList['4606'] = 'Media > Gazety i czasopisma';
  196.         $categoriesList['4622'] = 'Media > Gazety i czasopisma';
  197.         $categoriesList['4683'] = 'Media > Gazety i czasopisma';
  198.         $categoriesList['4653'] = 'Media > Gazety i czasopisma';
  199.         $categoriesList['4406'] = 'Media > Gazety i czasopisma';
  200.         $categoriesList['4410'] = 'Media > Gazety i czasopisma';
  201.         $categoriesList['4405'] = 'Media > Gazety i czasopisma';
  202.         $categoriesList['4644'] = 'Media > Gazety i czasopisma';
  203.         $categoriesList['4654'] = 'Media > Gazety i czasopisma';
  204.         $categoriesList['4615'] = 'Media > Gazety i czasopisma';
  205.         $categoriesList['4635'] = 'Media > Gazety i czasopisma';
  206.         $categoriesList['4681'] = 'Media > Gazety i czasopisma';
  207.         $categoriesList['4680'] = 'Media > Gazety i czasopisma';
  208.         $categoriesList['4695'] = 'Media > Gazety i czasopisma';
  209.         $categoriesList['4753'] = 'Media > Gazety i czasopisma';
  210.         $categoriesList['4686'] = 'Media > Gazety i czasopisma';
  211.         $categoriesList['4674'] = 'Media > Gazety i czasopisma';
  212.         $categoriesList['4632'] = 'Media > Gazety i czasopisma';
  213.         $categoriesList['4697'] = 'Media > Gazety i czasopisma';
  214.         $categoriesList['4760'] = 'Media > Gazety i czasopisma';
  215.         $categoriesList['4655'] = 'Media > Gazety i czasopisma';
  216.         $categoriesList['4202'] = 'Media > Gazety i czasopisma';
  217.         $categoriesList['4699'] = 'Media > Gazety i czasopisma';
  218.         $categoriesList['4673'] = 'Media > Gazety i czasopisma';
  219.         $categoriesList['4245'] = 'Media > Gazety i czasopisma';
  220.         $categoriesList['4235'] = 'Media > Gazety i czasopisma';
  221.         $categoriesList['4237'] = 'Media > Gazety i czasopisma';
  222.         $categoriesList['4231'] = 'Media > Gazety i czasopisma';
  223.         $categoriesList['4218'] = 'Media > Gazety i czasopisma';
  224.         $categoriesList['4239'] = 'Media > Gazety i czasopisma';
  225.         $categoriesList['4698'] = 'Media > Gazety i czasopisma';
  226.         $categoriesList['4761'] = 'Media > Gazety i czasopisma';
  227.         $categoriesList['4689'] = 'Media > Gazety i czasopisma';
  228.         $categoriesList['4241'] = 'Media > Gazety i czasopisma';
  229.         $categoriesList['4217'] = 'Media > Gazety i czasopisma';
  230.         $categoriesList['8887'] = 'Media > Gazety i czasopisma';
  231.         $categoriesList['4764'] = 'Media > Gazety i czasopisma';
  232.         $categoriesList['4758'] = 'Media > Gazety i czasopisma';
  233.         $categoriesList['4785'] = 'Media > Gazety i czasopisma';
  234.         $categoriesList['4786'] = 'Media > Gazety i czasopisma';
  235.         $categoriesList['4782'] = 'Media > Gazety i czasopisma';
  236.         $dataLayer false;
  237.         /** @var ProductVariant $variant */
  238.         foreach ($productAssociation->getProductVariants()->toArray() as $variant)
  239.         {
  240.             if ((preg_match('/ekonomiczn/'strtolower($variant->getTradeName())))
  241.                 or
  242.                 (preg_match('/jednostanowiskow/'strtolower($variant->getTradeName())))
  243.               )
  244.             {
  245.                 $prodId explode('/'$variant->getProductVariantNoComplete());
  246.                 $prodId = ($prodId[0] ?? '');
  247.                 $dataLayer = [];
  248.                 $dataLayer['ecomm_prodid'] = $variant->getProductVariantNoComplete();
  249.                 $dataLayer['ecomm_pagetype'] = 'product';
  250.                 $dataLayer['ecomm_totalvalue'] = $variant->getPriceNet();
  251.                 $dataLayer['ecomm_category'] = ($categoriesList[$prodId] ?? 'Media > Gazety i czasopisma');
  252.                 break;
  253.             }
  254.         }
  255.         $parameters['dataLayer'] = $dataLayer;
  256.         return $this->render('frontend-eforum/index-product.html.twig'$parameters);
  257.     }
  258. }