src/AutomarketBundle/Controller/CarController.php line 86

Open in your IDE?
  1. <?php
  2. namespace AutomarketBundle\Controller;
  3. use AutomarketBundle\Services\MainService;
  4. use CoreBundle\Component\CoreFormFactory;
  5. use CoreBundle\Factory\Vehicle;
  6. use DateTime;
  7. use DcSiteBundle\Model\CreditModel;
  8. use DcSiteBundle\Services\VehicleViewService;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use PortalBundle\Model\SeoMetaTag;
  11. use Symfony\Component\HttpFoundation\RequestStack;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use CoreBundle\Entity\Featured;
  14. use CoreBundle\Model\Vehicles\AbstractVehicle;
  15. use DcSiteBundle\Form\SendQuestionType;
  16. use PortalBundle\Model\Catalog;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  19. use Symfony\Component\Routing\RouterInterface;
  20. class CarController extends BaseController
  21. {
  22.     private MainService $mainService;
  23.     private RouterInterface $router;
  24.     public function __construct(CoreFormFactory $coreFormFactoryRequestStack $requestStackEntityManagerInterface $em,
  25.                                 SeoMetaTag $seoMetaTagRouterInterface $routerMainService $mainService)
  26.     {
  27.         parent::__construct($coreFormFactory$requestStack$em$seoMetaTag);
  28.         $this->router $router;
  29.         $this->mainService $mainService;
  30.     }
  31.     public function car(Request $requestVehicleViewService $vehicleViewServiceCreditModel $creditModelVehicle $vehicleFactory): Response
  32.     {
  33.         $lang $request->getLocale();
  34.         $id $request->get('id');
  35.         $vehicle $vehicleFactory->createUsedById($id);
  36.         if (!$vehicle || (!$vehicle->getState() && !$vehicle->getSold())) {
  37.             throw new NotFoundHttpException();
  38.         }
  39.         $vehicleViewService->saveViewVehicle($vehicle$request->getClientIp(), new DateTime());
  40.         $vehicle->getVehicleEntity()->setViews((int)$vehicle->getVehicleEntity()->getViews() + 1);
  41.         $this->em->persist($vehicle->getVehicleEntity());
  42.         $this->em->flush();
  43.         $this->mainService->setLang($request->getLocale());
  44.         //TODO Видалити коли буде merge VIDI карточки авто
  45.         $featuresIds $this->getFeatures($this->getUser());
  46.         $isFeature $featuresIds[$vehicle->getVehicleItemId()] ?? null;
  47.         //TODO Видалити коли буде merge VIDI карточки авто
  48.         $isCompared $this->getComparison($vehicle);
  49.         if($this->getUser() && $this->getUser()->hasRole('ROLE_EMPLOYEE_MANAGER') && $vehicle->getFiles() && $vehicle->getFiles()->first()){
  50.             $file $vehicle->getFiles()->first();
  51.             $pathFile $this->router->generate('base_download_file', ['id' => $file->getId()]);
  52.         }
  53.         return $this->baseAutomarketRender('@Automarket/Car/card-car.html.twig', [
  54.             'vehicle' => $vehicle,
  55.             'pathFile' => $pathFile ?? null,
  56.             'featuredId' => $isFeature,
  57.             'comparedId' => $isCompared,
  58.             'isSelect' => !in_array($vehicle->getDealer()->getId(), Catalog::NOT_VIDI_SELECT_DEALERS),
  59.             'creditPayment' => $creditModel->getMinPayment($vehicle),
  60.             'vehicleType1' => $this->mainService->getProposeVehicles($this->getDealer(), $this->getUser(), true$lang$vehicle$vehicle->getVehicleItemId(), true),
  61.             'vehicleType2' => $this->mainService->getProposeVehicles($this->getDealer(), $this->getUser(), true$lang$vehicle$vehicle->getVehicleItemId()),
  62.             'vehicleType3' => $this->mainService->getNewArrivals($this->getDealer(), $this->getUser(), true$lang),
  63.             'buyForm' => $this->CoreFormFactory()->buyForm(null$vehicle->getVehicleEntity())->createView(),
  64.             'sendQuestionForm' => $this->CoreFormFactory()->sendQuestionForm(null$this->getDealer(), nullSendQuestionType::NOTIFY_ABOUT_PRICE_TYPE)->createView(),
  65.             'vehicleUrl' => $request->getSchemeAndHttpHost().$this->router->generate('automarket_vehicle', ['state' => $request->get('state'), 'type' => $request->get('type'), 'brand' => $request->get('brand'), 'model' => $request->get('model'), 'id' => $request->get('id')]),
  66.             'privacyLink' => $this->router->generate('automarket_personal_data_agreement'),
  67.         ]);
  68.     }
  69.     //TODO Видалити коли буде merge VIDI карточки авто
  70.     public function getComparison(AbstractVehicle $vehicle)
  71.     {
  72.         $request $this->requestStack->getCurrentRequest();
  73.         $compareCookie $request->cookies->get('compare');
  74.         $vehicleComparison explode(','$compareCookie);
  75.         return in_array($vehicle->getVehicleItemId(), $vehicleComparison) ? $vehicle->getVehicleItemId() : null;
  76.     }
  77.     //TODO Видалити коли буде merge VIDI карточки авто
  78.     public function getFeatures($user): array
  79.     {
  80.         $featuresIds = [];
  81.         if (!$user) {
  82.             return $featuresIds;
  83.         }
  84.         $features $this->em->getRepository(Featured::class)->findBy(['type' => 'vehicle''user' => $user]);
  85.         /** @var Featured $feature */
  86.         foreach ($features as $feature) {
  87.             $favData json_decode($feature->getData());
  88.             if (!isset($favData->vehicleItemId)) {
  89.                 continue;
  90.             }
  91.             $featuresIds[$favData->vehicleItemId] = $feature->getId();
  92.         }
  93.         return $featuresIds;
  94.     }
  95. }