src/WebBundle/Controller/HomeController.php line 62

Open in your IDE?
  1. <?php
  2. namespace WebBundle\Controller;
  3. use Exception;
  4. use FlexApp\Helper\MetaHelper;
  5. use Import1CBundle\Helper\v4\TranslitNameHelper;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use WebBundle\Helper\App;
  10. use WebBundle\Helper\CookieHelper;
  11. use WebBundle\Helper\LocaleHelper;
  12. use WebBundle\Helper\PathHelper;
  13. use WebBundle\Helper\RequestHelper;
  14. use WebBundle\Helper\UserHelper;
  15. use WebBundle\Repository\CollectionRepository;
  16. use WebBundle\Repository\FilterRepository;
  17. use WebBundle\Repository\IdeaRepository;
  18. use WebBundle\Repository\InteriorHistoryRepository;
  19. use WebBundle\Repository\PublicationRepository;
  20. use WebBundle\Service\HomeService;
  21. use WebBundle\Service\PublicationService;
  22. use WebBundle\Service\WidjetReviewService;
  23. class HomeController extends ExtendedController
  24. {
  25.     /** @required */
  26.     public PublicationService $publicationService;
  27.     /** @required */
  28.     public WidjetReviewService $widgetReviewService;
  29.     /** @required */
  30.     public HomeService $homeService;
  31.     /** @required */
  32.     public FilterRepository $filterRepository;
  33.     /** @required */
  34.     public CollectionRepository $collectionRepository;
  35.     /** @required */
  36.     public PublicationRepository $publicationRepository;
  37.     /** @required */
  38.     public IdeaRepository $ideaRepository;
  39.     /** @required */
  40.     public InteriorHistoryRepository $interiorHistoryRepository;
  41.     public function rusAction(): Response
  42.     {
  43.         return $this->render('@Web/Home/rus.html.twig');
  44.     }
  45.     /**
  46.      * Главная страница.
  47.      *
  48.      * @return Response
  49.      * @throws Exception
  50.      */
  51.     public function mainAction(): Response
  52.     {
  53.         $publications $this->publicationService->page(116);
  54.         $metaManager MetaHelper::getManager();
  55.         $topCarousel $this->filterRepository->getItemsForTopCollectionCarouselMenu();
  56.         $title $metaManager->getTitle();
  57.         $title TranslitNameHelper::convertTitle($title);
  58.         $output = [
  59.             'publications' => $publications,
  60.             'topCarousel' => $topCarousel,
  61.             'meta' => [
  62.                 'title' => $title,
  63.                 'description' => $metaManager->getDescription(),
  64.                 'keywords' => $metaManager->getKeywords(),
  65.             ],
  66.         ];
  67.         // отслеживаем посещения главной страницы
  68.         $visitCount CookieHelper::get('visitCount'0);
  69.         if ($visitCount 5) {
  70.             $output['isFirstFourVisit'] = true;
  71.             $visitCount++;
  72.             CookieHelper::set('visitCount'$visitCount);
  73.         }
  74.         $ides $this->collectionRepository->getCollectionIdes(11);
  75.         $collections $this->collectionRepository->getCollections(['ides' => $ides]);
  76.         $collection $collections[0] ?? null;
  77.         if ($collection) {
  78.             $urlFirstCollection PathHelper::pathGenerate('m-main'$collection);
  79.         } else {
  80.             $urlFirstCollection '';
  81.         }
  82.         // получаем ключ блога по образцам
  83.         $output['samples'] = $this->publicationRepository->getKey(PublicationController::BLOG_ABOUT_SAMPLE_IDApp::getCurLocale());
  84.         $output['imagePreload'] = $urlFirstCollection;
  85.         return $this->render('@Web/Home/main.html.twig'$output);
  86.     }
  87.     /**
  88.      * Render carousel template
  89.      * @param string $type
  90.      * @param int $page
  91.      * @return Response
  92.      * @throws Exception
  93.      */
  94.     public function carouselAction(string $type 'last-collection'int $page 1)
  95.     {
  96.         $favorites $this->ideaRepository->getInteriorsIdeasByToken(UserHelper::getInstance()->getToken());
  97.         $limit 20;
  98.         if ($type == 'last-collection') {
  99.             $ides $this->collectionRepository->getCollectionIdes($page$limit);
  100.             $colls $this->collectionRepository->getCollections(['ides' => $ides]);
  101.             foreach ($colls as $i => $coll) {
  102.                 // получение данных по наградам
  103.                 if (isset($colls[$i]['awards'])) {
  104.                     $colls[$i]['awards'] = [];
  105.                 }
  106.                 if (!empty($coll['awards'])) {
  107.                     $aAwards $this->filterRepository->getAwards($coll['awards']);
  108.                     if ($aAwards) {
  109.                         $colls[$i]['awards'] = $aAwards;
  110.                     }
  111.                 }
  112.                 // проверяем наличие выставок и получаем по ним данные, если есть
  113.                 $exhibitions = [];
  114.                 $colls[$i]['exhibition'] = $exhibitions;
  115.                 $colls[$i]['priceSort'] = LocaleHelper::getPrMin($colls[$i]);
  116.                 $colls[$i]['priceSortCur'] = LocaleHelper::getCurrency();
  117.                 $colls[$i]['priceSortMea'] = LocaleHelper::getUserMeasure();
  118.             }
  119.             if ($page == 1) {
  120.                 $response $this->render(
  121.                     '@Web/Home/carousel-element.html.twig',
  122.                     [
  123.                         'type' => $type,
  124.                         'withDate' => 1,
  125.                         'collections' => $colls,
  126.                         'favourites' => $favorites,
  127.                     ]
  128.                 );
  129.             } else {
  130.                 $response = new JsonResponse([
  131.                     'html' => $this->render(
  132.                         '@Web/Home/carousel-items.html.twig',
  133.                         [
  134.                             'withDate' => 1,
  135.                             'collections' => $colls,
  136.                             'favourites' => $favorites,
  137.                         ]
  138.                     )->getContent(),
  139.                 ]);
  140.             }
  141.         } else {
  142.             $colls = [];
  143.             CookieHelper::set('homeTopCarousel'$type);
  144.             if ($type == 'top-week') {
  145.                 $withDate 2;
  146.                 $collTop $this->interiorHistoryRepository->getCollections(7$page);
  147.                 CookieHelper::set('carousel''top-week');
  148.             } elseif ($type == 'top-month' || $type == 'top-20') {
  149.                 $withDate 2;
  150.                 $collTop $this->interiorHistoryRepository->getCollections(30$page);
  151.             } else {
  152.                 $withDate 3;
  153.                 $ides $this->collectionRepository->getCollectionIdes($page$limit'c.rating DESC, c.id');
  154.                 $colls $this->collectionRepository->getCollections(['ides' => $ides'order' => 'c.rating DESC, c.id']);
  155.             }
  156.             if (!empty($collTop)) {
  157.                 $collections $this->collectionRepository->getCollections(['ides' => array_keys($collTop), 'showMain' => true]);
  158.                 foreach ($collections as $row) {
  159.                     $colls[$collTop[$row['id']]['key']] = array_merge($row$collTop[$row['id']]);
  160.                 }
  161.                 ksort($colls);
  162.             }
  163.             // получение данных по наградам
  164.             foreach ($colls as $i => $coll) {
  165.                 if (isset($colls[$i]['awards'])) {
  166.                     $colls[$i]['awards'] = [];
  167.                 }
  168.                 if (!empty($coll['awards'])) {
  169.                     $aAwards $this->filterRepository->getAwards($coll['awards']);
  170.                     if ($aAwards) {
  171.                         $colls[$i]['awards'] = $aAwards;
  172.                     }
  173.                 }
  174.                 // проверяем наличие выставок и получаем по ним даныне, если есть
  175.                 $exhibitions = [];
  176.                 if (!empty($coll['exhibition'])) {
  177.                     $exhibitions $this->filterRepository->getExhibitions($coll['exhibition']);
  178.                 }
  179.                 $colls[$i]['exhibition'] = $exhibitions;
  180.                 $colls[$i]['priceSort'] = LocaleHelper::getPrMin($colls[$i]);
  181.                 $colls[$i]['priceSortCur'] = LocaleHelper::getCurrency();
  182.                 $colls[$i]['priceSortMea'] = LocaleHelper::getUserMeasure();
  183.             }
  184.             if ($page == && !RequestHelper::isAjax()) {
  185.                 $response $this->render(
  186.                     '@Web/Home/carousel-element.html.twig',
  187.                     [
  188.                         'type' => $type,
  189.                         'withDate' => $withDate,
  190.                         'collections' => $colls,
  191.                         'favourites' => $favorites,
  192.                     ]
  193.                 );
  194.             } else {
  195.                 $response = new JsonResponse([
  196.                     'html' => $this->render(
  197.                         '@Web/Home/carousel-items.html.twig',
  198.                         [
  199.                             'type' => $type,
  200.                             'withDate' => $withDate,
  201.                             'collections' => $colls,
  202.                             'favourites' => $favorites,
  203.                         ]
  204.                     )->getContent(),
  205.                 ]);
  206.             }
  207.         }
  208.         return $response;
  209.     }
  210.     public function setVarSessionAlertPopupAction(): JsonResponse
  211.     {
  212.         $session $this->get('session');
  213.         if (!$session->get('alert_popup')) {
  214.             $session->set('alert_popup''1');
  215.         }
  216.         return new JsonResponse($session->get('alert_popup'));
  217.     }
  218.     /**
  219.      * @param Request $request
  220.      * @return Response
  221.      * @throws Exception
  222.      */
  223.     public function reviewsAction(Request $request): Response
  224.     {
  225.         $reviews $this->widgetReviewService->getReviews($request);
  226.         $response $this->render('@Web/Home/reviews.html.twig', [
  227.             'reviews' => $reviews,
  228.         ]);
  229.         if (App::isGeneral()) {
  230.             $response->setCache([
  231.                 'max_age' => 300,
  232.                 's_maxage' => 300,
  233.                 'public' => true,
  234.             ]);
  235.         }
  236.         return $response;
  237.     }
  238. }