<?php
namespace App\Controller;
use App\Builder\ArticleBuilder;
use App\Builder\CategoryBuilder;
use App\Entity\Article;
use App\Entity\Catalog;
use App\Entity\Category;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class CategoryController extends AbstractController
{
private EntityManagerInterface $entityManager;
private CategoryBuilder $categoryBuilder;
private ArticleBuilder $articleBuilder;
public function __construct(EntityManagerInterface $entityManager, ArticleBuilder $articleBuilder, CategoryBuilder $categoryBuilder)
{
$this->entityManager = $entityManager;
$this->categoryBuilder = $categoryBuilder;
$this->articleBuilder = $articleBuilder;
}
/**
* @Route("/category/{id}", name="category")
* @Route("/{prePackaged}/category", name="category_prePackaged")
* @param Category $category
* @param PaginatorInterface $paginator
* @param Request $request
* @param string|null $prePackaged
* @return Response
*/
public function category(Category $category, PaginatorInterface $paginator, Request $request, ?string $prePackaged): Response
{
$catalog = null;
$customerId = null;
if ($prePackaged == 'prePackaged') {
$prePackaged = true;
} else {
$prePackaged = false;
}
if ($this->getUser()) {
$customerId = $this->getUser()->getCustomerId();
$catalog = $this->entityManager->getRepository(Catalog::class)->findOneBy(['customer' => $customerId]);
} else {
$defaultUser = $this->entityManager->getRepository(User::class)->findOneBy(['defaultUser' => true]);
if ($defaultUser) {
$customerId = $defaultUser->getCustomerId();
$catalog = $this->entityManager->getRepository(Catalog::class)->findOneBy(['customer' => $customerId]);
}
}
if ($request->query->get("search")) {
$articles = $this->entityManager->getRepository(Article::class)->getArticleSearchCategory($request->query->get('search'), $category, $request->getLocale(), $catalog, $customerId, $prePackaged);
} else {
$articles = $this->entityManager->getRepository(Article::class)->getArticlesCategory($request->getLocale(), $category, $catalog, $customerId, $prePackaged);
}
$articlePagination = $paginator->paginate(
$this->articleBuilder->getArticleUser($request->getLocale(), $articles, $this->getUser()),
$request->query->getInt('page', 1),
12
);
return $this->render('article/home.html.twig', [
"articlePagination" => $articlePagination,
"category" => $this->categoryBuilder->getCategoryTraduction($request->getLocale(), $category),
"categorySelect" => $category,
]);
}
}