<?php
namespace App\Controller\FrontendShop;
use App\Entity\Gos\Category;
use App\Entity\Gos\ProductMainType;
use App\Entity\Gos\ProductVariant;
use App\Entity\Gos\Tmpl\TemplateType;
use App\Utils\Eforum\SearchUtil;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\Gos\Tmpl\Template as TemplateEntity;
use Symfony\Component\Routing\Annotation\Route;
class CatalogController extends AbstractController
{
private $em;
private $searchUtils;
public function __construct(EntityManagerInterface $em, SearchUtil $searchUtil)
{
$this->em = $em;
$this->searchUtils = $searchUtil;
}
/**
* @Route("/kategoria/{category}/{productType}", name="category_show")
*/
public function categoriesAction(Request $request, $category = null, $productType = null)
{
$canonical = null;
$filters = array();
$template = $this->em->getRepository(TemplateEntity::class)->findOneBy(array(
'templateType' => $this->em->getRepository(TemplateType::class)->findOneByName('category')
));
if ($category === 'wszystkie-produkty')
{
$category = null;
}
if ($category !== null)
{
$categoryEntity = $this->em->getRepository(Category::class)->findOneByCategorySlug($category);
if ($categoryEntity === null)
{
throw $this->createNotFoundException();
}
$filters['mainCategory'] = $categoryEntity->getId();
}
if ($productType !== null)
{
$productTypeEntity = $this->em->getRepository(ProductMainType::class)->findOneBySlug($productType);
if ($productTypeEntity)
{
$filters['productType'] = $productTypeEntity->getId();
}
}
$this->searchUtils->appendFilters($request, $filters);
if ($request->query->get('page') > 1)
{
$canonical = explode('?',$request->getUri())[0];
}
$parameters = $this->searchUtils->filterData($request, $template, $filters, $canonical);
$parameters['category'] = $categoryEntity ?? null;
$product_variants = $this->em->getRepository(ProductVariant::class)
->findBy(
['isPublished' => true,
'variantState' => 'Active']
);
$dataLayer['ecomm_prodid'] = false;
/** @var ProductVariant $variant */
foreach ($product_variants as $variant)
{
if ((preg_match('/ekonomiczn/', strtolower($variant->getTradeName())))
or
(preg_match('/jednostanowiskow/', strtolower($variant->getTradeName())))
)
{
$dataLayer['ecomm_prodid'] = $dataLayer['ecomm_prodid'] . $variant->getProductVariantNoComplete() . ';';
}
}
$parameters['dataLayer'] = $dataLayer;
return $this->render('/frontend-eforum/category/results.html.twig', $parameters);
}
}