<?php
namespace App\Controller;
use App\Entity\Category;
use App\Entity\Entreprise;
use App\Entity\Produits;
use App\Entity\Visiteur;
use App\Form\ProfileUserType;
use App\Repository\CategoryRepository;
use App\Repository\EntrepriseRepository;
use App\Repository\ProduitsRepository;
use App\Repository\VisiteurRepository;
use DateTime;
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 ExposantController extends AbstractController
{
private $entityManager;
private $visiteurRepo;
private $entrepriseRepository;
public function __construct(EntityManagerInterface $entityManager, VisiteurRepository $visiteurRepository, EntrepriseRepository $entrepriseRepository)
{
$this->entityManager = $entityManager;
$this->visiteurRepo = $visiteurRepository;
$this->entrepriseRepository = $entrepriseRepository;
}
/**
* @Route("/tous-les-exposants", name="app_exposant")
*/
public function exposants(Request $request, CategoryRepository $categoryRepository, PaginatorInterface $paginator)
{
$query = $this->entrepriseRepository->findAll();
$exposants = $paginator->paginate(
$query,
$request->query->getInt('page', 1),
8
);
return $this->render('exposant/index.html.twig', [
'exposants' => $exposants,
'categories' => $categoryRepository->findAll(),
]);
}
/**
* @Route("/exposant/{slug}", name="app_show_exposant")
*/
public function index(Entreprise $entreprise, CategoryRepository $categoryRepository): Response
{
return $this->render('exposant/show.html.twig', [
'exposant' => $entreprise,
'categories' => $categoryRepository->findAll(),
]);
}
/**
* @Route("/produit/{slug}", name="app_product_detail")
*/
public function produit(Request $request, Produits $produit, CategoryRepository $categoryRepository, ProduitsRepository $produitrepository)
{
$cat_id = $produit->getCategories()->getId();
$similarProducts = $produitrepository->findBy(
['categories' => $cat_id ],
['createdAt' =>'DESC'],
5
);
$request = Request::createFromGlobals();
$clientIp = $request->getClientIp();
$visiteur = new Visiteur();
$ipAdress = $this->visiteurRepo->findOneBy(['adressIp' => $clientIp]);
if(!$ipAdress){
$visiteur->setAdressIp($clientIp);
$visiteur->setConnectedAt(new DateTime('now'));
$produit->setVue($produit->getVue()+1);
$this->entityManager->persist($visiteur);
$this->entityManager->persist($produit);
}
$this->entityManager->flush();
return $this->render('exposant/show_product.html.twig', [
'produit' => $produit,
'categories' => $categoryRepository->findAll(),
'similarProducts' => $similarProducts
]);
}
/**
* @Route("/categorie/{slug}", name="app_category")
*/
public function showProductByCategory(Request $request,Category $category,CategoryRepository $categoryRepository,
ProduitsRepository $produitrepository, PaginatorInterface $paginator)
{
$query = $produitrepository->findBy(
['categories' => $category],
['createdAt' => 'ASC']
);
$produits = $paginator->paginate(
$query,
$request->query->getInt('page', 1),
15
);
return $this->render('exposant/product_by_category.html.twig', [
'produits' => $produits,
'category' => $category,
'categories' => $categoryRepository->findAll(),
]);
}
/**
* @Route("/me/profile", name="app_profile", methods={"GET", "POST"})
*/
public function profile(Request $request)
{
$user = $this->getUser();
$form = $this->createForm(ProfileUserType::class, $user);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
$this->addFlash('success', 'Profil mis à jour');
return $this->redirectToRoute('app_profile');
}
return $this->render('admin/exposant/profile.html.twig', [
'form' => $form->createView(),
]);
}
}