src/Controller/FurnitureTypeController.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Category;
  4. use App\Form\Type\ProductSearchFiltersType;
  5. use App\Helper\VeltisControllerTrait;
  6. use App\Repository\ArticleRepository;
  7. use App\Repository\AvailabilityRepository;
  8. use App\Repository\BannerRepository;
  9. use App\Repository\CategoryRepository;
  10. use App\Repository\FurnitureTypeRepository;
  11. use App\Repository\NewsRepository;
  12. use App\Repository\ProductParameterRepository;
  13. use App\Repository\ProductRepository;
  14. use App\Repository\ProductViewRepository;
  15. use App\Repository\WorkingHoursRepository;
  16. use App\Services\CompareManager;
  17. use Doctrine\Common\Collections\ArrayCollection;
  18. use Doctrine\ORM\NoResultException;
  19. use Knp\Component\Pager\PaginatorInterface;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  23. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. use Symfony\Component\HttpFoundation\Response;
  26. class FurnitureTypeController extends AbstractController
  27. {
  28.     use VeltisControllerTrait;
  29.     /**
  30.      * @Route("/{slug}/{furnitureTypeId}/t/{customFilter}", name="furnitureType", defaults={"customFilter": null})
  31.      */
  32.     public function indexAction(Request $requestCategoryRepository $categoryRepositoryProductRepository $productRepositoryPaginatorInterface $paginatorFurnitureTypeRepository $furnitureTypeRepositoryProductViewRepository $productViewRepositorySessionInterface $sessionCompareManager $compareManager)
  33.     {
  34.         $categories $categoryRepository->getMainCategories($request->getLocale(), [Category::TYPE_24hCategory::TYPE_SZOK_CENOWYCategory::TYPE_OUTLET])->getQuery()->getResult();
  35.         $furnitureTypes $furnitureTypeRepository->getForCategory($request->getLocale())->getQuery()->getResult();
  36.         try {
  37.             $furnitureType $furnitureTypeRepository->getSingle($request->attributes->get('furnitureTypeId'), $request->getLocale())->getQuery()->getSingleResult();
  38.         } catch (NoResultException $e) {
  39.             throw new NotFoundHttpException();
  40.         }
  41.         if ($request->attributes->get('slug') !== $furnitureType->translate($request->getLocale())->getSlug()) {
  42.             return $this->redirect($this->generateUrl('furnitureType', ['furnitureTypeId'=>$furnitureType->getId(), 'slug'=>$furnitureType->translate($request->getLocale())->getSlug()]), 301);
  43.         }
  44.         $form $this->createForm(
  45.             ProductSearchFiltersType::class
  46.         );
  47.         $form->handleRequest($request);
  48.         $searchData = [];
  49.         if ($form->isSubmitted()) {
  50.             $searchData $form->getData();
  51.         }
  52.         $searchData['locale'] = $request->getLocale();
  53.         if ($request->attributes->get(('customFilter'))) {
  54.             if ($request->attributes->get(('customFilter')) === '24h') {
  55.                 $arr = new ArrayCollection();
  56.                 $arr->add($this->em()->getRepository(\App\Entity\Availability::class)->find(1));
  57.                 $arr->add($this->em()->getRepository(\App\Entity\Availability::class)->find(5));
  58.                 $arr->add($this->em()->getRepository(\App\Entity\Availability::class)->find(15));
  59.                 $searchData['availability'] = $arr;
  60.             } elseif ($request->attributes->get(('customFilter')) == 'promotions') {
  61.                 $searchData['promotions'] = 1;
  62.             } elseif ($request->attributes->get('customFilter') != '24h' && $request->attributes->get('customFilter') != 'promotions') {
  63.                 throw new NotFoundHttpException();
  64.             }
  65.         }
  66.         $products $productRepository->getForFurnitureType($furnitureType$searchData);
  67.         $pagination $paginator->paginate($products$request->query->getInt('page'1), $session->get('productsPerPage',15), ['wrap-queries'=>true]);
  68.         $lastViewed $productViewRepository->getLastViewed($session->getId(), $request->getLocale())->getQuery()->getResult();
  69.         return $this->render('frontend/furnitureType/furnitureType.html.twig', [
  70.             'categories' => $categories,
  71.             'locale' => $request->getLocale(),
  72.             'furnitureTypes' =>$furnitureTypes,
  73.             'language' => $this->resolveLanguage($request->getLocale()),
  74.             'products' => $pagination,
  75.             'productsPerPage' => $session->get('productsPerPage',15),
  76.             'compareIds' => $compareManager->getIdsCompareProducts(),
  77.             'lastViewed' => $lastViewed,
  78.             'searchData' => $searchData,
  79.             'form' => $form->createView(),
  80.             'furnitureType' => $furnitureType
  81.         ]);
  82.     }
  83. }