<?php
namespace App\Controller;
use App\Entity\Category;
use App\Form\Type\ProductSearchFiltersType;
use App\Helper\VeltisControllerTrait;
use App\Repository\ArticleRepository;
use App\Repository\AvailabilityRepository;
use App\Repository\BannerRepository;
use App\Repository\CategoryRepository;
use App\Repository\FurnitureTypeRepository;
use App\Repository\NewsRepository;
use App\Repository\ProductParameterRepository;
use App\Repository\ProductRepository;
use App\Repository\ProductViewRepository;
use App\Repository\WorkingHoursRepository;
use App\Services\CompareManager;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\NoResultException;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
class FurnitureTypeController extends AbstractController
{
use VeltisControllerTrait;
/**
* @Route("/{slug}/{furnitureTypeId}/t/{customFilter}", name="furnitureType", defaults={"customFilter": null})
*/
public function indexAction(Request $request, CategoryRepository $categoryRepository, ProductRepository $productRepository, PaginatorInterface $paginator, FurnitureTypeRepository $furnitureTypeRepository, ProductViewRepository $productViewRepository, SessionInterface $session, CompareManager $compareManager)
{
$categories = $categoryRepository->getMainCategories($request->getLocale(), [Category::TYPE_24h, Category::TYPE_SZOK_CENOWY, Category::TYPE_OUTLET])->getQuery()->getResult();
$furnitureTypes = $furnitureTypeRepository->getForCategory($request->getLocale())->getQuery()->getResult();
try {
$furnitureType = $furnitureTypeRepository->getSingle($request->attributes->get('furnitureTypeId'), $request->getLocale())->getQuery()->getSingleResult();
} catch (NoResultException $e) {
throw new NotFoundHttpException();
}
if ($request->attributes->get('slug') !== $furnitureType->translate($request->getLocale())->getSlug()) {
return $this->redirect($this->generateUrl('furnitureType', ['furnitureTypeId'=>$furnitureType->getId(), 'slug'=>$furnitureType->translate($request->getLocale())->getSlug()]), 301);
}
$form = $this->createForm(
ProductSearchFiltersType::class
);
$form->handleRequest($request);
$searchData = [];
if ($form->isSubmitted()) {
$searchData = $form->getData();
}
$searchData['locale'] = $request->getLocale();
if ($request->attributes->get(('customFilter'))) {
if ($request->attributes->get(('customFilter')) === '24h') {
$arr = new ArrayCollection();
$arr->add($this->em()->getRepository(\App\Entity\Availability::class)->find(1));
$arr->add($this->em()->getRepository(\App\Entity\Availability::class)->find(5));
$arr->add($this->em()->getRepository(\App\Entity\Availability::class)->find(15));
$searchData['availability'] = $arr;
} elseif ($request->attributes->get(('customFilter')) == 'promotions') {
$searchData['promotions'] = 1;
} elseif ($request->attributes->get('customFilter') != '24h' && $request->attributes->get('customFilter') != 'promotions') {
throw new NotFoundHttpException();
}
}
$products = $productRepository->getForFurnitureType($furnitureType, $searchData);
$pagination = $paginator->paginate($products, $request->query->getInt('page', 1), $session->get('productsPerPage',15), ['wrap-queries'=>true]);
$lastViewed = $productViewRepository->getLastViewed($session->getId(), $request->getLocale())->getQuery()->getResult();
return $this->render('frontend/furnitureType/furnitureType.html.twig', [
'categories' => $categories,
'locale' => $request->getLocale(),
'furnitureTypes' =>$furnitureTypes,
'language' => $this->resolveLanguage($request->getLocale()),
'products' => $pagination,
'productsPerPage' => $session->get('productsPerPage',15),
'compareIds' => $compareManager->getIdsCompareProducts(),
'lastViewed' => $lastViewed,
'searchData' => $searchData,
'form' => $form->createView(),
'furnitureType' => $furnitureType
]);
}
}