<?php
namespace App\Controller;
use App\Entity\Bloc\Bloc;
use App\Entity\Contenu\PageAccueil;
use App\Repository\Contenu\LienBlocPageAccueilRepository;
use App\Repository\Contenu\LienDiaporamaPageAccueilRepository;
use App\Repository\Contenu\PageAccueilRepository;
use FOS\UserBundle\Model\UserInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
class AccueilController extends AbstractController
{
/**
* @Route("/", name="accueil.index", defaults={"seoEntity" = "Contenu\PageAccueil", "id" = PageAccueil::PAGE_ACCUEIL})
* @ParamConverter("pageAccueil", class="App:Contenu\PageAccueil", options={"repository_method"="findOneById", "map_method_signature" = true})
* @return Response
*/
public function index(
PageAccueil $pageAccueil,
PageAccueilRepository $pageAccueilRepository,
LienBlocPageAccueilRepository $lienBlocPageAccueilRepository,
LienDiaporamaPageAccueilRepository $lienDiaporamaPageAccueilRepository
): Response
{
$user = $this->getUser();
if (getenv('APP_SITE_SLUG') != 'prestatime' && (!is_object($user) || !$user instanceof UserInterface)) {
$pageAccueil = $pageAccueilRepository->findOneById(PageAccueil::PAGE_ACCUEIL_GUEST);
}
// Cette méthode a été crée pour optimiser le nombre de requêtes sur la homepage
$lienBlocPageAccueils = $lienBlocPageAccueilRepository->findLienBlocPageAccueils(
true,
$pageAccueil->getId(),
['LBPA.position' => 'ASC']
);
// Cette méthode a été crée pour optimiser le nombre de requêtes sur la homepage
$lienDiaporamaPageAccueils = $lienDiaporamaPageAccueilRepository->findLienDiaporamaPageAccueils(
true,
$pageAccueil->getId(),
['LDPA.position' => 'ASC']
);
return $this->render('accueil/detail.html.twig', [
'lienDiaporamaPageAccueils' => $lienDiaporamaPageAccueils,
'lienBlocPageAccueils' => $lienBlocPageAccueils,
'page' => $pageAccueil
]);
}
/**
* @Route("/feed/promotionfeed", name="accueil.promotion", defaults={"id" = PageAccueil::PAGE_ACCUEIL, "_format"="xml"})
* @ParamConverter("pageAccueil", class="App:Contenu\PageAccueil", options={"repository_method"="findOneById", "map_method_signature" = true})
* @return Response
*/
public function promotion(
PageAccueil $pageAccueil,
PageAccueilRepository $pageAccueilRepository,
LienBlocPageAccueilRepository $lienBlocPageAccueilRepository,
LienDiaporamaPageAccueilRepository $lienDiaporamaPageAccueilRepository
): Response
{
// Cette méthode a été crée pour optimiser le nombre de requêtes sur la homepage
$lienBlocPageAccueils = $lienBlocPageAccueilRepository->findLienBlocPageAccueils(
true,
$pageAccueil->getId(),
['LBPA.position' => 'ASC']
);
$produits = [];
foreach ($lienBlocPageAccueils as $lienBlocPageAccueil) {
$bloc = $lienBlocPageAccueil->getBloc();
if (!$bloc->getType() == Bloc::TYPE_PRODUITS) {
continue;
}
if (count($produits) >= 6) {
break;
}
if (!is_null($bloc->getCategorie())) {
$items = $bloc->produits;
} else {
$items = [];
foreach ($bloc->getLienBlocLigneProduitsVisibles() as $lienBlocLigneProduit) {
$items[] = $lienBlocLigneProduit->getProduit();
}
}
$cpt = 0;
foreach ($items as $item) {
if ($cpt < 2 && true === $item->getVisible() && true === $item->getActive()) {
$produits[] = $item;
$cpt++;
}
}
}
$content = $this->renderView('widget/rss/promotion.xml.twig', [
'produits' => $produits
]);
$response = new Response();
$response->headers->set("Content-type", "text/xml");
$response->setContent($content);
return $response;
}
}