src/DcSiteBundle/Controller/LandRover/MainController.php line 206

Open in your IDE?
  1. <?php
  2. namespace DcSiteBundle\Controller\LandRover;
  3. use CoreBundle\Component\CoreFormFactory;
  4. use CoreBundle\Component\FormManager;
  5. use CoreBundle\Entity\Vehicles\Vehicle;
  6. use CoreBundle\Entity\Vehicles\VehicleFile;
  7. use CoreBundle\Factory\Vehicle as VehicleFactory;
  8. use CoreBundle\Model\Api\OnlineService\ApiServer1C;
  9. use CoreBundle\Model\Post;
  10. use CoreBundle\Model\Vehicles\Repository;
  11. use CoreBundle\Model\WinnerRate;
  12. use CoreBundle\Services\MediaExtensionVidi;
  13. use DcSiteBundle\Entity\MainSlider;
  14. use DcSiteBundle\Entity\ReplacementCarCondition;
  15. use DcSiteBundle\Entity\SalesContract;
  16. use DcSiteBundle\Entity\TermsMaintenance;
  17. use DcSiteBundle\Model\Form\ServicesOrderForm;
  18. use DcSiteBundle\Services\ModelRange\Pages\PagesService;
  19. use Doctrine\ORM\EntityManagerInterface;
  20. use Exception;
  21. use PortalBundle\Model\SeoMetaTag;
  22. use Symfony\Component\Filesystem\Filesystem;
  23. use Symfony\Component\HttpFoundation\JsonResponse;
  24. use Symfony\Component\HttpFoundation\RedirectResponse;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\HttpFoundation\RequestStack;
  27. use Symfony\Component\HttpFoundation\Response;
  28. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  29. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  30. use Symfony\Component\Routing\RouterInterface;
  31. use Twig\Environment;
  32. class MainController extends BaseController
  33. {
  34.     public function __construct(CoreFormFactory $coreFormFactorySeoMetaTag $seoMetaTagRequestStack $requestStackRouterInterface $routerFormManager $formManagerEntityManagerInterface $emApiServer1C $apiServer1CSessionInterface $sessionFilesystem $filesystemMediaExtensionVidi $mediaExtensionVidiRepository $vehicleRepositoryVehicleFactory $vehicleFactoryEnvironment $twig)
  35.     {
  36.         parent::__construct($coreFormFactory$seoMetaTag$requestStack$router$formManager$em$apiServer1C$session$filesystem$mediaExtensionVidi$vehicleRepository$vehicleFactory$twig);
  37.     }
  38.     public function redirectLandRover(): RedirectResponse
  39.     {
  40.         return $this->redirectToRoute('landrover_homepage', [], 301);
  41.     }
  42.     public function index(Request $request): Response
  43.     {
  44.         $media $this->mediaExtensionVidi;
  45.         $sliders $this->em->getRepository(MainSlider::class)->getMainSlidersByDealer($this->getDealer());
  46.         $sliders array_map(fn($row) => [
  47.             'title' => $row->getTitle($request->getLocale()),
  48.             'subTitle' => $row->getSubTitle($request->getLocale()),
  49.             'btn' => $row->getBtnFstTitle($request->getLocale()),
  50.             'url' => $row->getUrl(),
  51.             'image' => $media->getPath($row->getImage(), 'reference'),
  52.             'image_webp' => $media->pathWebp($row->getImage(), 'reference'),
  53.             'image_mobile' => $media->getPath($row->getImageMobile(), 'reference'),
  54.             'image_webp_mobile' => $media->pathWebp($row->getImageMobile(), 'reference')
  55.         ], $sliders);
  56.         $cars $this->vehicleRepository->getNewByDealer($this->getDealer());
  57.         $cars array_reduce($cars, function ($rows$row) use ($request) {
  58.             try {
  59.                 $row $this->vehicleFactory->createByEntity($row);
  60.                 if (empty($row)) {
  61.                     return $rows;
  62.                 }
  63.                 $rows[] = [
  64.                     'vehicleId' => $row->getVehicleId(),
  65.                     'isNew' => $row->isNew(),
  66.                     'fullName' => $row->getFullName(),
  67.                     'modelName' => $row->getModelName(),
  68.                     'slogan' => $row->getSlogan($request->getLocale()),
  69.                     'price' => round($row->price()),
  70.                     'url' => $row->getUrl(),
  71.                     'image' => $row->getPreviewPath('reference'),
  72.                     'image_webp' => $row->getPreviewPathWebp('reference')
  73.                 ];
  74.                 return $rows;
  75.             } catch (Exception $e) {
  76.                 return $rows;
  77.             }
  78.         }, []);
  79.         return $this->baseLandRoverRender('@DcSite/LandRover/Main/index.html.twig', [
  80.             'serviceForm' => $this->CoreFormFactory()->serviceForm()->createView(),
  81.             'cars' => $cars,
  82.             'sliders' => $sliders
  83.         ]);
  84.     }
  85.     public function modelLineup(Request $requestPagesService $pagesService): ?Response
  86.     {
  87.         $sliders $this->em->getRepository(MainSlider::class)->getMainSlidersByDealer($this->getDealer());
  88.         $vehicles $this->vehicleRepository->getNewByDealer($this->getDealer());
  89.         $result = [];
  90.         foreach ($vehicles as $vehicle) {
  91.             $result[] = $this->vehicleFactory->createByEntity($vehicle);
  92.         }
  93.         return $this->baseLandRoverRender('@DcSite/LandRover/model-lineup.html.twig', [
  94.             'serviceForm' => $this->CoreFormFactory()->serviceForm()->createView(),
  95.             'cars' => $result,
  96.             'sliders' => $sliders,
  97.             'catalogModelRangePages' => $pagesService
  98.                 ->setLang($request->getLocale())
  99.                 ->getPages($this->getDealer())
  100.         ]);
  101.     }
  102.     public function modelLineupPage(Request $requestPagesService $pagesServicestring $url): ?Response
  103.     {
  104.         $page $pagesService
  105.             ->setLang($request->getLocale())
  106.             ->getPage($this->getDealer(), $url);
  107.         if (empty($page)) {
  108.             throw new NotFoundHttpException();
  109.         }
  110.         return $this->baseLandRoverRender('@DcSite/LandRover/model-lineup-page.html.twig', ['page' => $page]);
  111.     }
  112.     public function notFound(): ?Response
  113.     {
  114. //        $Response = new Response('',Response::HTTP_NOT_FOUND);
  115. //        return $this->$this->baseLandRoverRender('@DcSite/LandRover/404.html.twig', ['_locale' => $request->getLocale()]);
  116.         $Response = new Response();
  117.         $Response->setStatusCode(Response::HTTP_NOT_FOUND);
  118.         return $this->baseLandRoverRender('@DcSite/LandRover/404.html.twig', [], $Response);
  119.     }
  120.     public function specialOffers(): ?Response
  121.     {
  122.         $specialsCars $this->em->getRepository(\CoreBundle\Entity\Post::class)->getActionsByDealer($this->getDealer(), Post::ACTION_TYPE_CAR);
  123.         $specialsService $this->em->getRepository(\CoreBundle\Entity\Post::class)->getActionsByDealer($this->getDealer(), Post::ACTION_TYPE_SERVICE);
  124.         return $this->baseLandRoverRender('@DcSite/LandRover/Specials/special-offers.html.twig', [
  125.             'specialsCars' => $specialsCars,
  126.             'specialsService' => $specialsService,
  127.         ]);
  128.     }
  129.     public function specialOffersSingle(Request $requestPost $postModel$url): ?Response
  130.     {
  131.         $post $postModel->initByUrl($this->getDealer(), $url);
  132.         return $this->baseLandRoverRender('@DcSite/LandRover/Specials/specials-single.html.twig', [
  133.             'post' => $post,
  134.             'serviceOrderForm' => $this->CoreFormFactory()->servicesOrderForm(ServicesOrderForm::LEASING$request->getLocale())->createView()
  135.         ]);
  136.     }
  137.     public function menuInit(Request $requestWinnerRate $winnerRate): JsonResponse
  138.     {
  139.         $vehicles $this->vehicleRepository->getNewByDealer($this->getDealer());
  140.         $rate $winnerRate->getRateWinner($this->getDealer());
  141.         $domain $this->getDealer()->getDomain();
  142.         $data = [];
  143.         $position = [];
  144.         /** @var $vehicle Vehicle */
  145.         foreach ($vehicles as $vehicle) {
  146.             $vehicleModel $this->vehicleFactory->createByEntity($vehicle);
  147.             if (!$vehicleModel) {
  148.                 continue;
  149.             }
  150.             $vehicleId $vehicleModel->getVehicleId();
  151.             $data[$vehicleId] = [
  152.                 'id' => $vehicleId,
  153.                 'name' => $vehicleModel->getModelName(),
  154.                 'modelName' => $vehicleModel->getModelName(),
  155.                 'preview' => $vehicleModel->getPreviewPath('big'),
  156.                 'preview_webp' => $vehicleModel->getPreviewPathWebp('reference'),
  157.                 'price' => $vehicleModel->price(),
  158.                 'slogan' => $vehicleModel->getSlogan($request->getLocale()),
  159.                 'url' => $vehicleModel->getUrl(),
  160.                 'link' => 'https://' $domain $this->router->generate('landrover_card_car', ['car' => $vehicleModel->getUrl()]),
  161.                 'linkCarConfiguration' => 'https://' $domain $this->router->generate('landrover_card_car_configuraion', ['car' => $vehicleModel->getUrl()]),
  162.                 'configuratorPath' => 'https://' $domain $this->router->generate('landrover_car_configurator', ['url' => $vehicleModel->getUrl()]),
  163.             ];
  164.             $position[$vehicleId] = $vehicle->getPosition();
  165.         }
  166.         array_multisort($positionSORT_ASC$data);
  167.         return $this->json(['success' => true'data' => $data'rate' => $rate'date' => date('d.m.Y')]);
  168.     }
  169.     public function consent(): ?Response
  170.     {
  171.         return $this->baseLandRoverRender('@DcSite/LandRover/consent.html.twig');
  172.     }
  173.     public function cokie(): ?Response
  174.     {
  175.         return $this->baseLandRoverRender('@DcSite/LandRover/cokie-and-privacy-policy.html.twig');
  176.     }
  177.     public function testDrivePrivacy(): ?Response
  178.     {
  179.         return $this->baseLandRoverRender('@DcSite/LandRover/td-privacy.html.twig');
  180.     }
  181.     public function conditions(): ?Response
  182.     {
  183.         $filesByType $this->em->getRepository(SalesContract::class)->getFilesByTypes($this->getDealer());
  184.         return $this->baseLandRoverRender('@DcSite/LandRover/conditions-of-sales.html.twig', [
  185.             'filesByType' => $filesByType,
  186.         ]);
  187.     }
  188.     public function termsMaintenance(): ?Response
  189.     {
  190.         $files $this->em->getRepository(TermsMaintenance::class)->findBy(['dealer' => $this->getDealer()], ['begin_date' => 'ASC']);
  191.         return $this->baseLandRoverRender('@DcSite/LandRover/terms-maintenance.html.twig', [
  192.             'mainFile' => array_pop($files),
  193.             'files' => $files,
  194.             'dealer' => $this->getDealer(),
  195.         ]);
  196.     }
  197.     public function broshure(Request $request): ?Response
  198.     {
  199.         $vehicles $this->vehicleRepository->getNewByDealer($this->getDealer());
  200.         $result = [];
  201.         /** @var Vehicle $car */
  202.         foreach ($vehicles as $car) {
  203.             $vehicleId $car->getId();
  204.             $files $car->getFiles();
  205.             if (!$files->count()) {
  206.                 continue;
  207.             }
  208.             $item = [
  209.                 'car' => $car,
  210.                 'files' => [],
  211.             ];
  212.             /** @var VehicleFile $file */
  213.             foreach ($files as $file) {
  214.                 $item['files'][] = [
  215.                     'title' => $file->getTitle($request->getLocale()),
  216.                     'href' => $this->router->generate('base_download_file', ['id' => $file->getId()])
  217.                 ];
  218.             }
  219.             $result[$vehicleId] = $item;
  220.             $position[$vehicleId] = $car->getPosition();
  221.         }
  222.         array_multisort($positionSORT_ASC$result);
  223.         return $this->baseLandRoverRender('@DcSite/LandRover/broshure.html.twig', ['cars' => $result]);
  224.     }
  225.     public function personalProposition(): ?Response
  226.     {
  227.         return $this->baseLandRoverRender('@DcSite/LandRover/personal-proposition.html.twig');
  228.     }
  229.     public function termsReplacement(): ?Response
  230.     {
  231.         $files $this->em->getRepository(ReplacementCarCondition::class)->findBy(['dealer' => $this->getDealer()], ['begin_date' => 'DESC']);
  232.         return $this->baseLandRoverRender('@DcSite/LandRover/Terms/terms-providing-replacement-car.html.twig', [
  233.             'files' => $files,
  234.         ]);
  235.     }
  236. }