<?php
namespace App\Controller;
use App\Builder\ArticleBuilder;
use App\Builder\FamilyBuilder;
use App\Entity\Article;
use App\Entity\Catalog;
use App\Entity\Family;
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 FamilyController extends AbstractController
{
private EntityManagerInterface $entityManager;
private FamilyBuilder $familyBuilder;
private ArticleBuilder $articleBuilder;
public function __construct(EntityManagerInterface $entityManager, ArticleBuilder $articleBuilder, FamilyBuilder $familyBuilder)
{
$this->entityManager = $entityManager;
$this->familyBuilder = $familyBuilder;
$this->articleBuilder = $articleBuilder;
}
/**
* @Route("/family/{id}", name="family")
* @Route("/{prePackaged}/family/{id}", name="family_prePackaged")
* @param Family $family
* @param PaginatorInterface $paginator
* @param Request $request
* @param string|null $prePackaged
* @return Response
*/
public function family(Family $family, 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)->getArticleSearchFamily($request->query->get('search'), $family, $request->getLocale(), $catalog, $customerId, $prePackaged);
} else {
$articles = $this->entityManager->getRepository(Article::class)->getArticlesFamily($request->getLocale(), $family, $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,
"family" => $this->familyBuilder->getFamilyTraduction($request->getLocale(), $family),
"familySelect" => $family,
]);
}
}