<?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 ArticleController extends AbstractController
{
private EntityManagerInterface $entityManager;
private ArticleBuilder $articleBuilder;
private FamilyBuilder $familyBuilder;
public function __construct(EntityManagerInterface $entityManager, ArticleBuilder $articleBuilder, FamilyBuilder $familyBuilder)
{
$this->entityManager = $entityManager;
$this->articleBuilder = $articleBuilder;
$this->familyBuilder = $familyBuilder;
}
/**
* @Route("/home", name="home")
* @Route("/{prePackaged}/home", name="home_prePackaged")
*/
public function home(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)->getArticleSearch($request->query->get('search'), $request->getLocale(), $catalog, $customerId, $prePackaged);
} else {
$articles = $this->entityManager->getRepository(Article::class)->getArticles($request->getLocale(), $catalog, $customerId, $prePackaged);
}
$articlePagination = $paginator->paginate(
$this->articleBuilder->getArticleUser($request->getLocale(), $articles, $this->getUser()),
$request->query->getInt('page', 1),
9
);
return $this->render('article/home.html.twig', [
"articlePagination" => $articlePagination,
]);
}
/**
* @Route("/article/{id}", name="article")
* @Route("/{prePackaged}/article/{id}", name="article_prePackaged")
*/
public function article(Article $article, Request $request, ?string $prePackaged): Response
{
$customer = null;
if ($this->getUser()) {
$customer = $this->getUser()->getCustomerId();
} else {
$defaultUser = $this->entityManager->getRepository(User::class)->findOneBy(['defaultUser' => true]);
if ($defaultUser) {
$customer = $defaultUser->getCustomerId();
}
}
$catalog = $this->entityManager->getRepository(Catalog::class)->findOneBy(['customer' => $customer]);
$verification = $this->entityManager->getRepository(Catalog::class)->findOneBy(['article' => $article, "customer" => $customer]);
if ($article->getIsActive() && ($verification && $catalog) || ($verification == null && $catalog == null)) {
return $this->render('article/article.html.twig', [
'article' => $this->articleBuilder->getArticleDetailsUser($request->getLocale(), $article, $this->getUser()),
]);
}
return $this->redirectToRoute('home');
}
}