src/Controller/FrontController.php line 73

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Request;
  7. #-----------(Tables)ENTITY--------------
  8. use App\Entity\Sites;
  9. use App\Entity\Abouts;
  10. use App\Entity\Clients;
  11. use App\Entity\Articles;
  12. use App\Entity\Customers;
  13. use App\Entity\Packsites;
  14. use App\Entity\AccesSites;
  15. use App\Entity\Commandes;
  16. use App\Entity\Categories;
  17. use App\Entity\Produits;
  18. use App\Entity\Bannieres;
  19. use App\Entity\Commentaires;
  20. use App\Entity\Detailcmd;
  21. use App\Entity\Users;
  22. use App\Entity\Models;
  23. use App\Entity\Partenaires;
  24. use App\Entity\Souhaits;
  25. use App\Entity\Typesites;
  26. #------------------------------------
  27. use App\Form\SearchType;
  28. use App\Form\UserFormType;
  29. use App\Form\ClientFormType;
  30. use App\Form\ContactFormType;
  31. use App\Form\CustomerFormType;
  32. use App\Form\CommentaireFormType;
  33. use App\Repository\AboutsRepository;
  34. use App\Repository\ArticlesRepository;
  35. #-----------REPOSITORY--------------
  36. use App\Repository\ClientsRepository;
  37. use App\Repository\CommentairesRepository;
  38. use App\Repository\CustomersRepository;
  39. use App\Repository\ModelsRepository;
  40. use App\Repository\SouhaitsRepository;
  41. use App\Repository\TypesitesRepository;
  42. use App\Repository\NewslettersRepository;
  43. use App\Repository\ParametragesRepository;
  44. use App\Repository\CategoriesRepository;
  45. use App\Repository\ProduitsRepository;
  46. use App\Repository\BannieresRepository;
  47. use App\Repository\PubsRepository;
  48. use App\Repository\PaniersRepository;
  49. use App\Twig\AppExtension;
  50. use Knp\Component\Pager\PaginatorInterface;
  51. use Symfony\Component\HttpFoundation\JsonResponse;
  52. // đꑇ Ajoute cette ligne si elle manque
  53. use Symfony\Component\Mailer\MailerInterface;
  54. use Symfony\Component\Mime\Email;
  55. #---------------------------------------------
  56. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  57. #-------------------------------
  58. use Doctrine\ORM\EntityManagerInterface;
  59. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  60. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  61. class FrontController extends AbstractController
  62. {
  63.     #[Route('/'name'temoin')]
  64.     public function temoignage(): Response {
  65.         return $this->render('erreur404.html.twig');
  66.     }
  67.     #[Route('/{slug}',name'front.site.index',methods: ['GET''POST'])]
  68.     public function read_site(
  69.         string $slug,
  70.         EntityManagerInterface $entityManager,
  71.         ArticlesRepository $articleRepository,
  72.         CategoriesRepository $categorieRepository,
  73.         AppExtension $AppExtension
  74.     ): Response
  75.     {
  76.         $siteData $AppExtension->getGlobals();
  77.         $template $siteData['template'];
  78.         $typeSite $siteData['typeSite'];
  79.         $siteId   $siteData['siteId'];
  80.         $Param    $siteData['Param'];
  81.         $lastProd $siteData['lastProd'];
  82.         $slug     $siteData['slug'];
  83.         
  84.         $verifySite $entityManager->createQueryBuilder()
  85.             ->select('site.slug')
  86.             ->from(Sites::class, 'site')
  87.             ->where('site.slug = :slug')
  88.             ->setParameter('slug'$slug)
  89.             ->getQuery()
  90.             ->getOneOrNullResult();
  91.         
  92.         if (!empty($typeSite) && !empty($template)) {
  93.             $apropos $entityManager->createQueryBuilder();
  94.             $apropos
  95.             ->select('ap.img','ap.texte','ap.adminsid')
  96.             ->from(Abouts::class, 'ap')
  97.             ->where('ap.adminsid = :adminsid')
  98.             ->setParameter('adminsid'$siteId);
  99.             $about $apropos->getQuery()->getResult();
  100.             $texteDecode null;
  101.             if ($about) {
  102.                 $texteDecode html_entity_decode($about[0]['texte'], ENT_QUOTES'UTF-8');
  103.             }
  104.             $derniers_articles $entityManager->createQueryBuilder();
  105.             $derniers_articles
  106.             ->select(
  107.                 'cat.id','art.title''art.slug''art.img''art.resume'
  108.                 'art.texte','art.statut','cat.nom AS catNom''cat.slug AS catSlug'
  109.                 'art.createdat'
  110.             )
  111.             ->from(Articles::class,  'art')
  112.             ->innerJoin(Categories::class,  'cat''WITH',  'art.catid = cat.id')
  113.             ->where('art.adminsid = :adminsid')
  114.             ->setParameter('adminsid'$siteId)
  115.             ->orderBy('art.createdat''DESC')
  116.             ->setMaxResults(4);
  117.             $recents $derniers_articles->getQuery()->getResult();
  118.             $categories $categorieRepository->findBy(['adminsid'=>$siteId]);
  119.             /*$query = $entityManager->createQueryBuilder()
  120.                 ->select('p.nom', 'p.slug AS ProdSlug', 'p.img', 'p.prix', 'p.stock',
  121.                          'cat.nom AS catNom', 'cat.slug AS catSlug', 'SUM(d.quantite) AS totalCommandes')
  122.                 ->from(Produits::class, 'p')
  123.                 ->innerJoin(Categories::class, 'cat', 'WITH', 'p.catid = cat.id')
  124.                 ->leftJoin(Detailcmd::class, 'd', 'WITH', 'd.produit = p.id')
  125.                 ->where('cat.adminsid = :adminsid')
  126.                 ->setParameter('adminsid', $siteId)
  127.                 ->groupBy('p.id')
  128.                 ->orderBy('totalCommandes', 'DESC')
  129.                 ->setMaxResults(10);
  130.             
  131.             $result = $query->getQuery()->getArrayResult();*/
  132.             $query $entityManager->createQueryBuilder()
  133.             ->select('p.id','p.nom''p.slug AS ProdSlug''p.img''p.prix''p.stock'
  134.             'cat.nom AS catNom''cat.slug AS catSlug','SUM(d.quantite) AS totalCommandes')
  135.             ->from(Produits::class, 'p')
  136.             ->innerJoin(Categories::class, 'cat''WITH''p.catid = cat.id')
  137.             ->innerJoin(Partenaires::class, 'part''WITH''p.partid = part.id')
  138.             ->innerJoin(Detailcmd::class, 'd''WITH''d.produit = p.id')
  139.             ->where('cat.adminsid = :adminsid')
  140.             ->setParameter('adminsid'$siteId)
  141.             ->groupBy('p.id')
  142.             ->orderBy('totalCommandes''DESC')
  143.             ->setMaxResults(10)
  144.             ->getQuery();
  145.             $result $query->getArrayResult();
  146.             $produits is_array($result) ? $result : [];
  147.             
  148.             //dd($result); 
  149.             if (empty($result) || (isset($result[0]['totalCommandes']) && $result[0]['totalCommandes'] == 0)) {
  150.                 $result $entityManager->createQueryBuilder()
  151.                 ->select('p')
  152.                 ->from(Produits::class, 'p')
  153.                 ->orderBy('p.createdat''DESC')
  154.                 ->setMaxResults(10)
  155.                 ->getQuery()
  156.                 ->getResult();
  157.             }
  158.             $articles $entityManager->createQueryBuilder();
  159.             $articles
  160.             ->select('art.title''art.slug''art.img''art.resume''art.texte','art.statut','cat.nom AS catNom''cat.slug AS catSlug')
  161.             ->from(Articles::class,  'art')
  162.             ->innerJoin(Categories::class,  'cat''WITH',  'art.catid = cat.id')
  163.             ->where('art.adminsid = :adminsid')
  164.             ->setParameter('adminsid'$siteId)
  165.             ->setMaxResults(10);           // âś… limite Ă  10 rĂ©sultats
  166.             $listarticle $articles->getQuery()->getResult();
  167.             return $this->render('front/'.$typeSite.'/'.$template.'/front/index.html.twig', [
  168.                 'slug' => $slug,
  169.                 'prod' => $produits,
  170.                 'about' => $about,
  171.                 'texteDecode' => $texteDecode,
  172.                 'Param' => $Param,
  173.                 'code' => $typeSite,
  174.                 'templ' => $template,
  175.                 'articles' => $listarticle,
  176.                 'lastProd' => $lastProd,
  177.                 'recents' => $recents,
  178.                 'categories' => $categories,
  179.             ]);
  180.         } else {
  181.             if($verifySite){
  182.                 return $this->render('siteinactif.html.twig');
  183.             }else{
  184.                 return $this->render('erreur404.html.twig');
  185.             }
  186.         }
  187.     }
  188.     #[Route('/{slug}/articles'name'front.site.articles'methods:['GET','POST'])]
  189.     public function read_article(
  190.         string $slug,
  191.         Request $request
  192.         AppExtension $AppExtension,
  193.         PaginatorInterface $paginator,
  194.         EntityManagerInterface $entityManager,
  195.         ArticlesRepository $articleRepository,
  196.         CategoriesRepository $categorieRepository
  197.     ): Response
  198.     {
  199.         $siteData $AppExtension->getGlobals();
  200.         $template $siteData['template'];
  201.         $typeSite $siteData['typeSite'];
  202.         $siteId   $siteData['siteId'];
  203.         $Param    $siteData['Param'];
  204.         if (!empty($typeSite) && !empty($template)) {
  205.             if($typeSite == 'e-commerce'){
  206.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/produit.html.twig', [
  207.                     'controller_name' => 'FrontController',
  208.                 ]);
  209.             }else if($typeSite == 'blog'){
  210.                 $derniers_articles $entityManager->createQueryBuilder();
  211.                 $derniers_articles
  212.                 ->select(
  213.                     'cat.id','art.title''art.slug''art.img''art.resume'
  214.                     'art.texte','art.statut','cat.nom AS catNom''cat.slug AS catSlug'
  215.                     'art.createdat'
  216.                 )
  217.                 ->from(Articles::class,  'art')
  218.                 ->innerJoin(Categories::class,  'cat''WITH',  'art.catid = cat.id')
  219.                 ->where('art.adminsid = :adminsid')
  220.                 ->setParameter('adminsid'$siteId)
  221.                 ->orderBy('art.createdat''DESC')
  222.                 ->setMaxResults(4);
  223.                 $recents $derniers_articles->getQuery()->getResult();
  224.                 $articles $entityManager->createQueryBuilder();
  225.                 $articles
  226.                 ->select('cat.id''art.title''art.slug''art.img'
  227.                     'art.resume''art.texte','art.statut','cat.nom AS catNom'
  228.                     'cat.slug AS catSlug'
  229.                 )
  230.                 ->from(Articles::class,  'art')
  231.                 ->innerJoin(Categories::class,  'cat''WITH',  'art.catid = cat.id')
  232.                 ->where('art.adminsid = :adminsid')
  233.                 ->setParameter('adminsid'$siteId)
  234.                 ->orderBy('art.createdat''DESC');        // âś… limite Ă  10 rĂ©sultats
  235.                 // $listarticle = $articles->getQuery()->getResult();
  236.                 $pagination $paginator->paginate(
  237.                     $articles/* Query ou tableau */
  238.                     $request->query->getInt('page'1), /* Page actuelle */
  239.                     10 /* Nombre d’élĂ©ments par page */
  240.                 );  
  241.                 $categories $categorieRepository->findBy(['adminsid'=>$siteId]);
  242.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/articles.html.twig', [
  243.                     'recents' => $recents,
  244.                     'categories' => $categories,
  245.                     'articles' => $pagination,
  246.                 ]);
  247.             }
  248.         }
  249.         return $this->render('erreur404.html.twig');
  250.     }
  251.     
  252.     #[Route('/{slug}/articles/{cat}'name'front.site.categorie.articles'methods:['GET','POST'])]
  253.     public function read_article_categorie(
  254.         string $slug,
  255.         string $cat,
  256.         Request $request,
  257.         AppExtension $AppExtension,
  258.         PaginatorInterface $paginator,
  259.         EntityManagerInterface $entityManager,
  260.         CategoriesRepository $categorieRepository
  261.     ): Response
  262.     {
  263.         $siteData $AppExtension->getGlobals();
  264.         $template $siteData['template'];
  265.         $typeSite $siteData['typeSite'];
  266.         $siteId   $siteData['siteId'];
  267.         $Param    $siteData['Param'];
  268.         if (!empty($typeSite) && !empty($template)) {
  269.             if($typeSite == 'e-commerce'){
  270.                 $queryBuilder $entityManager->createQueryBuilder();
  271.                 $queryBuilder
  272.                     ->select('part.nompart','prod.nom','prod.id''prod.slug AS ProdSlug''prod.img''prod.prix''prod.stock''cat.nom AS catNom''cat.slug AS catSlug')
  273.                     ->from(Produits::class, 'prod')
  274.                     ->innerJoin(Categories::class, 'cat''WITH''prod.catid = cat.id')
  275.                     ->innerJoin(Partenaires::class, 'part''WITH''prod.partid = part.id')
  276.                     ->where('prod.adminsid = :adminsid')
  277.                     ->andWhere('cat.slug = :catSlug')
  278.                     ->setParameter('adminsid'$siteId)
  279.                     ->setParameter('catSlug'$cat)
  280.                     ->orderBy('prod.id''DESC')
  281.                     ->setMaxResults(6);
  282.                 $query $entityManager->createQueryBuilder()
  283.                     ->select('part.nompart','prod.nom','prod.id''prod.slug AS ProdSlug''prod.img''prod.prix''prod.stock''cat.nom AS catNom''cat.slug AS catSlug')
  284.                     ->from(Produits::class, 'prod')
  285.                     ->innerJoin(Categories::class, 'cat''WITH''prod.catid = cat.id')
  286.                     ->innerJoin(Partenaires::class, 'part''WITH''prod.partid = part.id')
  287.                     ->where('prod.adminsid = :adminsid')
  288.                     ->andWhere('cat.slug = :catSlug')
  289.                     ->setParameter('adminsid'$siteId)
  290.                     ->setParameter('catSlug'$cat)
  291.                     ->orderBy('prod.id''DESC')
  292.                     ->getQuery();
  293.                 $paginationCategorie $paginator->paginate(
  294.                     $query,
  295.                     $request?->query->getInt('page'1) ?? 1,
  296.                     10
  297.                 );
  298.                 $paginationCategorie2 $paginator->paginate(
  299.                     $query,
  300.                     $request?->query->getInt('page'1) ?? 1,
  301.                     12
  302.                 );
  303.                 // dd($paginationCategorie2);
  304.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/produit-categorie.html.twig', [
  305.                     'paginationCategorie' => $paginationCategorie,
  306.                     'paginationCategorie2' => $paginationCategorie2
  307.                 ]);
  308.             }else if($typeSite == 'blog'){
  309.                 $derniers_articles $entityManager->createQueryBuilder();
  310.                 $derniers_articles
  311.                 ->select(
  312.                     'cat.id','art.title''art.slug''art.img''art.resume'
  313.                     'art.texte','art.statut','cat.nom AS catNom''cat.slug AS catSlug'
  314.                     'art.createdat'
  315.                 )
  316.                 ->from(Articles::class,  'art')
  317.                 ->innerJoin(Categories::class,  'cat''WITH',  'art.catid = cat.id')
  318.                 ->where('art.adminsid = :adminsid')
  319.                 ->setParameter('adminsid'$siteId)
  320.                 ->orderBy('art.createdat''DESC')
  321.                 ->setMaxResults(4);
  322.                 $recents $derniers_articles->getQuery()->getResult();
  323.                 $categories $categorieRepository->findBy(['adminsid'=>$siteId]);
  324.                 $articles $entityManager->createQueryBuilder();
  325.                 $articles
  326.                 ->select('art.title''cat.id','art.img''art.slug''art.texte','art.resume''art.statut','cat.nom AS catNom'
  327.                     'cat.slug AS catSlug')
  328.                 ->from(Articles::class,  'art')
  329.                 ->innerJoin(Categories::class,  'cat''WITH',  'art.catid = cat.id')
  330.                 ->where('art.adminsid = :adminsid')
  331.                 ->andWhere('cat.slug = :catSlug')
  332.                 ->setParameter('adminsid'$siteId)
  333.                 ->setParameter('catSlug'$cat)
  334.                 ->orderBy('art.createdat''DESC'); 
  335.                 $pagination $paginator->paginate(
  336.                     $articles/* Query ou tableau */
  337.                     $request->query->getInt('page'1), /* Page actuelle */
  338.                     10 /* Nombre d’élĂ©ments par page */
  339.                 );  
  340.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/categorie-post.html.twig', [
  341.                     'categories' => $categories,
  342.                     'articles' => $pagination,
  343.                     'recents' => $recents,
  344.                     'categorie' => $cat
  345.                 ]);
  346.             }
  347.         }
  348.         return $this->render('erreur404.html.twig');
  349.     }
  350.     
  351.     #[Route('/{slug}/articles/marque/{marque}'name'front.site.marque.articles'methods:['GET','POST'])]
  352.     public function read_article_marque(
  353.         string $slug,
  354.         string $marque,
  355.         Request $request,
  356.         AppExtension $AppExtension,
  357.         PaginatorInterface $paginator,
  358.         EntityManagerInterface $entityManager,
  359.         CategoriesRepository $categorieRepository
  360.     ): Response
  361.     {
  362.         $siteData $AppExtension->getGlobals();
  363.         $template $siteData['template'];
  364.         $typeSite $siteData['typeSite'];
  365.         $siteId   $siteData['siteId'];
  366.         $Param    $siteData['Param'];
  367.         
  368.         if (!empty($typeSite) && !empty($template)) {
  369.             if($typeSite == 'e-commerce'){
  370.                 $queryBuilder $entityManager->createQueryBuilder();
  371.                 $queryBuilder
  372.                     ->select('part.nompart','prod.nom','prod.id''prod.slug AS ProdSlug''prod.img''prod.prix''prod.stock''cat.nom AS catNom''cat.slug AS catSlug')
  373.                     ->from(Produits::class, 'prod')
  374.                     ->innerJoin(Categories::class, 'cat''WITH''prod.catid = cat.id')
  375.                     ->innerJoin(Partenaires::class, 'part''WITH''prod.partid = part.id')
  376.                     ->where('prod.adminsid = :adminsid')
  377.                     ->andWhere('part.nompart = :marque')
  378.                     ->setParameter('adminsid'$siteId)
  379.                     ->setParameter('marque'$marque)
  380.                     ->orderBy('prod.id''DESC')
  381.                     ->setMaxResults(6);
  382.                 $query $entityManager->createQueryBuilder()
  383.                     ->select('part.nompart','prod.nom','prod.id''prod.slug AS ProdSlug''prod.img''prod.prix''prod.stock''cat.nom AS catNom''cat.slug AS catSlug')
  384.                     ->from(Produits::class, 'prod')
  385.                     ->innerJoin(Categories::class, 'cat''WITH''prod.catid = cat.id')
  386.                     ->innerJoin(Partenaires::class, 'part''WITH''prod.partid = part.id')
  387.                     ->where('prod.adminsid = :adminsid')
  388.                     ->andWhere('part.nompart = :marque')
  389.                     ->setParameter('adminsid'$siteId)
  390.                     ->setParameter('marque'$marque)
  391.                     ->orderBy('prod.id''DESC')
  392.                     ->getQuery();
  393.                 $paginationMarque1 $paginator->paginate(
  394.                     $query,
  395.                     $request?->query->getInt('page'1) ?? 1,
  396.                     10
  397.                 );
  398.                 $paginationMarque2 $paginator->paginate(
  399.                     $query,
  400.                     $request?->query->getInt('page'1) ?? 1,
  401.                     12
  402.                 );
  403.                 // dd($paginationCategorie2);
  404.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/produit-marque.html.twig', [
  405.                     'paginationMarque1' => $paginationMarque1,
  406.                     'paginationMarque2' => $paginationMarque2
  407.                 ]);
  408.             }else if($typeSite == 'blog'){
  409.                 $derniers_articles $entityManager->createQueryBuilder();
  410.                 $derniers_articles
  411.                 ->select(
  412.                     'cat.id','art.title''art.slug''art.img''art.resume'
  413.                     'art.texte','art.statut','cat.nom AS catNom''cat.slug AS catSlug'
  414.                     'art.createdat'
  415.                 )
  416.                 ->from(Articles::class,  'art')
  417.                 ->innerJoin(Categories::class,  'cat''WITH',  'art.catid = cat.id')
  418.                 ->where('art.adminsid = :adminsid')
  419.                 ->setParameter('adminsid'$siteId)
  420.                 ->orderBy('art.createdat''DESC')
  421.                 ->setMaxResults(4);
  422.                 $recents $derniers_articles->getQuery()->getResult();
  423.                 $categories $categorieRepository->findBy(['adminsid'=>$siteId]);
  424.                 $articles $entityManager->createQueryBuilder();
  425.                 $articles
  426.                 ->select('art.title''cat.id','art.img''art.slug''art.texte','art.resume''art.statut','cat.nom AS catNom'
  427.                     'cat.slug AS catSlug')
  428.                 ->from(Articles::class,  'art')
  429.                 ->innerJoin(Categories::class,  'cat''WITH',  'art.catid = cat.id')
  430.                 ->where('art.adminsid = :adminsid')
  431.                 ->andWhere('cat.slug = :catSlug')
  432.                 ->setParameter('adminsid'$siteId)
  433.                 ->setParameter('catSlug'$cat)
  434.                 ->orderBy('art.createdat''DESC'); 
  435.                 $pagination $paginator->paginate(
  436.                     $articles/* Query ou tableau */
  437.                     $request->query->getInt('page'1), /* Page actuelle */
  438.                     10 /* Nombre d’élĂ©ments par page */
  439.                 );  
  440.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/categorie-post.html.twig', [
  441.                     'categories' => $categories,
  442.                     'articles' => $pagination,
  443.                     'recents' => $recents,
  444.                     'categorie' => $cat
  445.                 ]);
  446.             }
  447.         }
  448.         return $this->render('erreur404.html.twig');
  449.     }
  450.     #[Route('{slug}/produit/{ProdSlug}'name'front.site.detail.prod')]
  451.     public function detail_prod(
  452.         $slug,
  453.         $ProdSlug,
  454.         Request $request
  455.         AppExtension $AppExtension,
  456.         EntityManagerInterface $entityManager,
  457.     ): Response
  458.     {
  459.         $siteData $AppExtension->getGlobals();
  460.         $template $siteData['template'];
  461.         $typeSite $siteData['typeSite'];
  462.         $siteId   $siteData['siteId'];
  463.         $lastProd $siteData['lastProd'];
  464.         $slug     $siteData['slug'];
  465.         if (!empty($typeSite) && !empty($template)) {
  466.             if($typeSite == 'e-commerce'){
  467.                 $queryBuilder $entityManager->createQueryBuilder();
  468.                 $queryBuilder
  469.                     ->select('prod.id','part.nompart','prod.nom''prod.slug AS ProdSlug''prod.texte''prod.img''prod.prix''prod.stock''cat.nom AS catNom''cat.slug AS catSlug')
  470.                     ->from(Produits::class, 'prod')
  471.                     ->innerJoin(Categories::class, 'cat''WITH''prod.catid = cat.id')
  472.                     ->innerJoin(Partenaires::class, 'part''WITH''prod.partid = part.id')
  473.                     ->where('prod.adminsid = :adminsid')
  474.                     ->andWhere('prod.slug = :ProdSlug')
  475.                     ->setParameter('adminsid'$siteId)
  476.                     ->setParameter('ProdSlug'$ProdSlug);
  477.                 $query $queryBuilder->getQuery();
  478.                 $DetailProd $query->getResult();
  479.                 $queryBuilderProd $entityManager->createQueryBuilder();
  480.                 $queryBuilderProd
  481.                     ->select('prod.id','part.nompart','prod.nom''prod.slug AS ProdSlug''prod.img''prod.prix''prod.stock''cat.nom AS catNom''cat.slug AS catSlug')
  482.                     ->from(Produits::class, 'prod')
  483.                     ->innerJoin(Categories::class, 'cat''WITH''prod.catid = cat.id')
  484.                     ->innerJoin(Partenaires::class, 'part''WITH''prod.partid = part.id')
  485.                     ->where('prod.adminsid = :adminsid')
  486.                     ->andWhere('cat.nom != :catNom')
  487.                     ->setParameter('adminsid'$siteId)
  488.                     ->setParameter('catNom''autres')
  489.                     ->orderBy('prod.id''DESC')
  490.                     ->setMaxResults(5);
  491.                 $NewProd $queryBuilderProd->getQuery()->getResult();
  492.                 $queryBuilderProd2 $entityManager->createQueryBuilder();
  493.                 $queryBuilderProd2
  494.                     ->select('prod.id','part.nompart','prod.nom''prod.slug AS ProdSlug''prod.img''prod.prix''prod.stock''cat.nom AS catNom''cat.slug AS catSlug')
  495.                     ->from(Produits::class, 'prod')
  496.                     ->innerJoin(Categories::class, 'cat''WITH''prod.catid = cat.id')
  497.                     ->innerJoin(Partenaires::class, 'part''WITH''prod.partid = part.id')
  498.                     ->where('prod.adminsid = :adminsid')
  499.                     ->andWhere('cat.nom != :catNom')
  500.                     ->setParameter('adminsid'$siteId)
  501.                     ->setParameter('catNom''autres')
  502.                     ->orderBy('prod.id''DESC')
  503.                     ->setMaxResults(4);
  504.                 $NewProd2 $queryBuilderProd2->getQuery()->getResult();
  505.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/detail-prod.html.twig', [
  506.                     'detailProd' => $DetailProd,
  507.                     'NewProd2' => $NewProd2,
  508.                     'NewProd' => $NewProd
  509.                 ]);
  510.             }
  511.         }
  512.         return $this->render('erreur404.html.twig');
  513.     }
  514.     
  515.     #[Route('{slug}/article/{ArtSlug}'name'front.site.detail.article'methods:['GET','POST'])]
  516.     public function detail_article(
  517.         $ArtSlug,
  518.         Request $request
  519.         AppExtension $AppExtension,
  520.         CategoriesRepository $categorieRepository,
  521.         CommentairesRepository $commentaireRepository,
  522.         EntityManagerInterface $entityManager,
  523.     ): Response
  524.     {
  525.         $siteData $AppExtension->getGlobals();
  526.         $template $siteData['template'];
  527.         $typeSite $siteData['typeSite'];
  528.         $siteId   $siteData['siteId'];
  529.         $lastProd $siteData['lastProd'];
  530.         $post $entityManager->getRepository(Articles::class)->findOneBy(['slug' => $ArtSlug]);
  531.         if (!$post) {
  532.             throw $this->createNotFoundException('Article non trouvĂ©');
  533.         }
  534.         $list $commentaireRepository->findBy(['sitesid'=>$siteId]);
  535.         $comment = new Commentaires();
  536.         $addcomment $this->createForm(CommentaireFormType::class, $comment);
  537.         $addcomment->handleRequest($request);
  538.         $id $post->getId();
  539.         $commentPost $entityManager->createQueryBuilder();
  540.         $commentPost
  541.             ->select('cmt.nom','cmt.mail','cmt.commentaire','cmt.postsid','cmt.sitesid','cmt.updatedat')
  542.             ->from(Commentaires::class,  'cmt')
  543.             ->where('cmt.postsid = :postsid')
  544.             ->andwhere('cmt.sitesid = :sitesid')
  545.             ->andwhere('cmt.statut = :statut')
  546.             ->setParameter('postsid'$id)
  547.             ->setParameter('sitesid'$siteId)
  548.             ->setParameter('statut''postĂ©');
  549.         $commentaires $commentPost->getQuery()->getResult();
  550.         $commentPost $entityManager->createQueryBuilder();
  551.         $commentPost
  552.             ->select('COUNT(cmt.id)')
  553.             ->from(Commentaires::class, 'cmt')
  554.             ->where('cmt.postsid = :postsid')
  555.             ->andWhere('cmt.sitesid = :sitesid')
  556.             ->andWhere('cmt.statut = :statut')
  557.             ->setParameter('postsid'$id)
  558.             ->setParameter('sitesid'$siteId)
  559.             ->setParameter('statut''postĂ©');
  560.         $commentCount $commentPost->getQuery()->getSingleScalarResult();
  561.         if (!empty($typeSite) && !empty($template)) {
  562.             if($typeSite == 'blog'){
  563.                 if ($addcomment->isSubmitted()) {
  564.                     $nom $addcomment->get('nom')->getData();
  565.                     $mail $addcomment->get('mail')->getData();
  566.                     $texte $addcomment->get('commentaire')->getData();
  567.                     $commentPost $entityManager->createQueryBuilder();
  568.                     $commentPost
  569.                         ->select('cmt.nom','cmt.mail','cmt.commentaire','cmt.postsid','cmt.updatedat')
  570.                         ->from(Commentaires::class,  'cmt')
  571.                         ->where('cmt.nom = :noms')
  572.                         ->andwhere('cmt.mail = :mails')
  573.                         ->andwhere('cmt.commentaire = :cmts')
  574.                         ->setParameter('noms'$nom)
  575.                         ->setParameter('mails'$mail)
  576.                         ->setParameter('cmts'$texte);
  577.                     $comments $commentPost->getQuery()->getResult();
  578.                     
  579.                     if($comments){
  580.                         $this->addFlash('warning''Votre message Ă  Ă©tĂ© dĂ©jĂ  envoyĂ©.');
  581.                         return $this->redirect($request->getUri());
  582.                     }
  583.                     
  584.                     $comment->setNom($nom);
  585.                     $comment->setMail($mail);
  586.                     $comment->setCommentaire($texte);
  587.                     $comment->setPostsId($id); // on stocke l'ID
  588.                     $comment->setStatut('en attente');
  589.                     $entityManager->persist($comment);
  590.                     $entityManager->flush();
  591.                     $this->addFlash('success''Votre commentaire a Ă©tĂ© bien enregistrĂ©.');
  592.                 }
  593.                 $derniers_articles $entityManager->createQueryBuilder();
  594.                 $derniers_articles
  595.                     ->select(
  596.                         'cat.id','art.title''art.slug''art.img''art.resume'
  597.                         'art.texte','art.statut','cat.nom AS catNom''cat.slug AS catSlug'
  598.                         'art.createdat'
  599.                     )
  600.                     ->from(Articles::class,  'art')
  601.                     ->innerJoin(Categories::class,  'cat''WITH',  'art.catid = cat.id')
  602.                     ->where('art.adminsid = :adminsid')
  603.                     ->setParameter('adminsid'$siteId)
  604.                     ->orderBy('art.createdat''DESC')
  605.                     ->setMaxResults(4);
  606.                 $recents $derniers_articles->getQuery()->getResult();
  607.                 $articles $entityManager->createQueryBuilder();
  608.                     $articles
  609.                     ->select('art.title''art.createdat''art.id','art.img''art.slug'
  610.                     'art.texte','art.resume''art.statut','cat.nom AS catNom''cat.slug AS catSlug')
  611.                     ->from(Articles::class,  'art')
  612.                     ->innerJoin(Categories::class,  'cat''WITH',  'art.catid = cat.id')
  613.                     ->where('art.adminsid = :adminsid')
  614.                     ->andWhere('art.slug = :catSlug')
  615.                     ->setParameter('adminsid'$siteId)
  616.                     ->setParameter('catSlug'$ArtSlug);
  617.                     $query $articles->getQuery();
  618.                 $DetailProd $query->getResult(); 
  619.                 $categories $categorieRepository->findBy(['adminsid'=>$siteId]);
  620.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/detailpost.html.twig', [
  621.                     'commentCount' => $commentCount,
  622.                     'commentaires' => $commentaires,
  623.                     'categories' => $categories,
  624.                     'detailArt' => $DetailProd,
  625.                     'recents' => $recents,
  626.                     'post' => $post,
  627.                     'addcomment' => $addcomment->createView(),
  628.                 ]);
  629.             }
  630.         }
  631.         return $this->render('erreur404.html.twig');
  632.     }    
  633.     #[Route('{slug}/connexion'name'front.site.connexion'methods: ['POST','GET'])]
  634.     public function connexion(
  635.         AppExtension $AppExtension,
  636.         EntityManagerInterface $entityManager,
  637.         AuthenticationUtils $authenticationUtils
  638.     ): Response
  639.     {
  640.         $siteData $AppExtension->getGlobals();
  641.         $template $siteData['template'];
  642.         $typeSite $siteData['typeSite'];
  643.         $Param    $siteData['Param'];
  644.         $slug    $siteData['slug'];
  645.         $UserLogin    $siteData['current_user'];
  646.     
  647.         if (!empty($typeSite) && !empty($template)) {
  648.             if($typeSite == 'e-commerce'){
  649.                 if($UserLogin == null){
  650.                     return $this->render('front/'.$typeSite.'/'.$template.'/front/connexion.html.twig', [
  651.                         'Param' => $Param,'code' => $typeSite,'templ' => $template,
  652.                     ]);
  653.                 }else{
  654.                 $queryBuilder $entityManager->createQueryBuilder();
  655.                 $queryBuilder
  656.                 ->select('cust.nom''cust.mail''cust.contact''cust.adresse''cust.code','acces.usercode''acces.role')
  657.                 ->from(Customers::class,  'cust')
  658.                 ->innerJoin(AccesSites::class,  'acces''WITH',  'cust.accesid = acces.id');
  659.                 $query $queryBuilder->getQuery();
  660.                 $info $query->getResult();
  661.                     return $this->redirectToRoute('front.site.compte',['slug' => $slug]);
  662.                     // return $this->render('front/'.$typeSite.'/'.$template.'/front/compte/dashboard.html.twig', [
  663.                     //     'Param' => $Param,'code' => $typeSite,'templ' => $template,'infouser' => $info
  664.                     // ]);
  665.                 }
  666.             }
  667.         }
  668.         return $this->render('erreur404.html.twig');
  669.     }
  670.     #[Route('{slug}/deconnexion'name'front.site.logout')]
  671.     public function logout(): void{
  672.         $this->addFlash(
  673.             'success',
  674.             'Votre compte a été déconnecté avec succčs');
  675.         throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall');
  676.     }
  677.     #[Route('{slug}/inscription'name'front.site.inscription'methods: ['POST','GET'])]
  678.     public function inscription(
  679.         Request $request
  680.         CustomersRepository $customerRepository,
  681.         EntityManagerInterface $entityManager,
  682.         UserPasswordHasherInterface $passwordHasher
  683.         AppExtension $AppExtension
  684.     ): Response
  685.     {
  686.         $siteData $AppExtension->getGlobals();
  687.         $template $siteData['template'];
  688.         $typeSite $siteData['typeSite'];
  689.         $siteId   $siteData['siteId'];
  690.         $Param    $siteData['Param'];
  691.         $slug     $siteData['slug'];
  692.         $customer = new Customers();
  693.         $accesite = new AccesSites();
  694.         $addCustomerForm $this->createForm(CustomerFormType::class, $customer);
  695.         $addCustomerForm->handleRequest($request);
  696.         if (!empty($typeSite) && !empty($template)) {
  697.             if($typeSite == 'e-commerce'){
  698.                 if($addCustomerForm->isSubmitted() && $addCustomerForm->isValid()){
  699.                     $listslides $customerRepository->findAll();
  700.                     $customer $addCustomerForm->getData();
  701.                     // ACCES SITE 
  702.                     $usercode substr(str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"), 06);
  703.                     $liensite "N/A";
  704.                     $lienadmin "N/A";
  705.                     $easycode 'easy_'.$usercode;
  706.                     $Idsite $siteId;
  707.                     $role "client";
  708.                     
  709.                     // CLIENTS
  710.                     $code substr(str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"), 010);
  711.                     $nom $addCustomerForm->get('nom')->getData();
  712.                     $mail $addCustomerForm->get('mail')->getData();
  713.                     $contact 'N/A';
  714.                     $adresse 'N/A';
  715.                     // $statut = 'actif';
  716.                 
  717.                     $plaintextPassword $addCustomerForm->get('password')->getData();
  718.                     $hashedPassword $passwordHasher->hashPassword($accesite$plaintextPassword);
  719.                     $checkClient $customerRepository->findOneBy(['mail' => $mail]);
  720.                     if($checkClient){
  721.                         $this->addFlash('warning','Alerte, cette adresse mail a déjŕ été utilisée');
  722.                         return $this->redirectToRoute('front.site.inscription',['slug' => $slug]); // par exemple 'client_new'
  723.                     }
  724.                     $accesite->setLiensite($liensite);
  725.                     $accesite->setLienadmin($lienadmin);
  726.                     $accesite->setUsercode($easycode);
  727.                     $accesite->setPassword($hashedPassword);
  728.                     $accesite->setSitesid($Idsite);
  729.                     $accesite->setRole($role);
  730.                     $entityManager->persist($accesite);
  731.                     $entityManager->flush();
  732.                     $lastId $accesite->getId();
  733.                     $customer->setCode($code);
  734.                     $customer->setNom($nom);
  735.                     $customer->setAdresse($adresse);
  736.                     $customer->setContact($contact);
  737.                     $customer->setAccesId($lastId);
  738.                     $entityManager->persist($customer);
  739.                     $entityManager->flush();
  740.                     $this->addFlash(
  741.                         'success',
  742.                         'Félicitation, votre compte crée avec succčs');
  743.                         return $this->redirectToRoute('front.site.inscription',['slug' => $slug]);
  744.                 }
  745.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/inscription.html.twig', [
  746.                     'Param' => $Param,
  747.                     'code' => $typeSite,
  748.                     'templ' => $template,
  749.                     'addClientForm' => $addCustomerForm->createView(),
  750.                 ]);
  751.             }
  752.         }
  753.         return $this->render('erreur404.html.twig');
  754.     }
  755.     //----FONCTION DU PANIER-------------------------------------------
  756.     #[Route('{slug}/panier'name'front.site.panier')]
  757.     public function panier(
  758.         Request $request
  759.         EntityManagerInterface $entityManager,
  760.         AppExtension $AppExtension
  761.     ): Response
  762.     {
  763.         $siteData $AppExtension->getGlobals();
  764.         $template $siteData['template'];
  765.         $typeSite $siteData['typeSite'];
  766.         $siteId   $siteData['siteId'];
  767.         $Param    $siteData['Param'];
  768.         $slug    $siteData['slug'];
  769.         $session $request->getSession();
  770.         $panier $session->get('panier', []);
  771.         $panierData = [];
  772.         $total 0;
  773.         foreach ($panier as $id => $quantite) {
  774.             $produit $entityManager->getRepository(Produits::class)->find($id);
  775.             $queryBuilder $entityManager->createQueryBuilder();
  776.             $queryBuilder
  777.                 ->select(
  778.                     'prod.id',
  779.                     'part.nompart',
  780.                     'prod.nom',
  781.                     'prod.slug AS ProdSlug',
  782.                     'prod.texte',
  783.                     'prod.img',
  784.                     'prod.prix',
  785.                     'prod.stock',
  786.                     'cat.nom AS catNom',
  787.                     'cat.slug AS catSlug'
  788.                 )
  789.                 ->from(Produits::class, 'prod')
  790.                 ->innerJoin(Categories::class, 'cat''WITH''prod.catid = cat.id')
  791.                 ->innerJoin(Partenaires::class, 'part''WITH''prod.partid = part.id')
  792.                 ->where('prod.id = :id')
  793.                 ->setParameter('id'$id);
  794.             $query $queryBuilder->getQuery();
  795.             $DetailProd $query->getOneOrNullResult();
  796.             // dd($DetailProd,$panier,$panierData);
  797.             if ($DetailProd) {
  798.                 $panierData[] = [
  799.                     'id' => $DetailProd['id'],
  800.                     'nom' => $DetailProd['nom'],
  801.                     'prix' => $DetailProd['prix'],
  802.                     'marque' => $DetailProd['nompart'],
  803.                     'categorie' => $DetailProd['catNom'],
  804.                     'img' => $DetailProd['img'],
  805.                     'quantite' => (int)$quantite,
  806.                     'total' => (float)$produit->getPrix() * (int)$quantite
  807.                 ];
  808.                 $total += (float)$produit->getPrix() * (int)$quantite;
  809.             }
  810.         }
  811.         if (!empty($typeSite) && !empty($template)) {
  812.             if($typeSite == 'e-commerce'){
  813.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/panier.html.twig', [
  814.                     'slug' => $slug,
  815.                     'panier' => $panierData,
  816.                     'total' => $total
  817.                 ]);
  818.             }
  819.         }
  820.         return $this->render('erreur404.html.twig');
  821.     }
  822.     //----AJOUT DU PANIER-------------------------------------------    
  823.     #[Route('{slug}/panier/ajouter/{id}'name'front.site.panier.ajouter')]
  824.     public function ajouterPanier(
  825.         int $id
  826.         Request $request
  827.         EntityManagerInterface $em
  828.     ): Response
  829.     {
  830.         $session $request->getSession();
  831.         $panier $session->get('panier', []);
  832.         // VĂ©rifie si le produit existe
  833.         $produit $em->getRepository(Produits::class)->find($id);
  834.         if (!$produit) {
  835.             return new JsonResponse(['error' => 'Produit introuvable'], 404);
  836.         }
  837.         // Ajouter ou incrĂ©menter la quantitĂ© dans le panier
  838.         if (isset($panier[$id])) {
  839.             $panier[$id]++; // incrĂ©mente
  840.         } else {
  841.             $panier[$id] = 1// première fois
  842.         }
  843.         // Sauvegarde le panier en session
  844.         $session->set('panier'$panier);
  845.         // PrĂ©pare les donnĂ©es pour l'affichage
  846.         $panierData = [];
  847.         $total 0;
  848.         foreach ($panier as $prodId => $quantite) {
  849.             $prod $em->getRepository(Produits::class)->find($prodId);
  850.             if (!$prod) continue;
  851.             $panierData[] = [
  852.                 'id' => $prod->getId(),
  853.                 'nom' => $prod->getNom(),
  854.                 'prix' => $prod->getPrix(),
  855.                 'img' => $prod->getImg(),
  856.                 'quantite' => $quantite,
  857.                 'total' => (float)$prod->getPrix() * (int)$quantite
  858.             ];
  859.             $total += (float)$prod->getPrix() * (int)$quantite;
  860.         }
  861.         return new JsonResponse([
  862.             'success' => true,
  863.             'message' => 'Produit ajoutĂ© au panier !',
  864.             'panier' => $panierData,
  865.             'total' => $total,
  866.             'count' => array_sum($panier// nombre total d'articles
  867.         ]);
  868.     }
  869.     //-----SUPPRESSION AVEC AJAX-------------------------------------
  870.     #[Route('{slug}/panier/supprimer/{id}'name'front.site.panier.supprimer'methods: ['GET'])]
  871.     public function supprimerPanier(
  872.         int $id,
  873.         Request $request,
  874.         EntityManagerInterface $em
  875.     ): JsonResponse {
  876.         $session $request->getSession();
  877.         $panier $session->get('panier', []);
  878.         if (isset($panier[$id])) {
  879.             unset($panier[$id]);
  880.             $session->set('panier'$panier);
  881.             return new JsonResponse([
  882.                 'success' => true,
  883.                 'message' => 'Produit supprimĂ© du panier avec succès !',
  884.                 'total' => count($panier)
  885.             ]);
  886.         }
  887.         return new JsonResponse([
  888.             'success' => false,
  889.             'error' => 'Produit non trouvĂ© dans le panier.'
  890.         ], 404);
  891.     }
  892.     //----MODIFICATION DE LA QUANTITE DU PANIER-------------------------------------------
  893.     #[Route('{slug}/panier/modifier/{id}/{quantite}'name'panier_modifier'methods: ['POST'])]
  894.     public function modifierQuantite(int $idint $quantiteRequest $requestEntityManagerInterface $entityManager): JsonResponse
  895.     {
  896.         $session $request->getSession();
  897.         $panier $session->get('panier', []);
  898.         if (!empty($panier[$id])) {
  899.             if ($quantite 0) {
  900.                 $panier[$id] = $quantite// on stocke juste la quantitĂ©
  901.             } else {
  902.                 unset($panier[$id]);
  903.             }
  904.             $session->set('panier'$panier);
  905.         }
  906.         // Recalcul du panier complet pour renvoyer au JS
  907.         $panierData = [];
  908.         $total 0;
  909.         foreach ($panier as $prodId => $qte) {
  910.             $produit $entityManager->getRepository(Produits::class)->find($prodId);
  911.             if (!$produit) continue;
  912.             $panierData[] = [
  913.                 'id' => $produit->getId(),
  914.                 'nom' => $produit->getNom(),
  915.                 'prix' => $produit->getPrix(),
  916.                 'img' => $produit->getImg(),
  917.                 'quantite' => $qte,
  918.                 'total' => (float)$produit->getPrix() * (int)$quantite
  919.             ];
  920.             $total += (float)$produit->getPrix() * (int)$quantite;
  921.         }
  922.         return $this->json([
  923.             'success' => true,
  924.             'panier' => $panierData,
  925.             'total' => $total,
  926.             'count' => count($panier)
  927.         ]);
  928.     }
  929.     //------FONCTION AJOUT AU FAVOIRS---------------------------------------------
  930.     #[Route('{slug}/souhaits'name'front.site.souhait')]
  931.     public function souhait(        
  932.         AppExtension $AppExtension,
  933.         EntityManagerInterface $entityManager
  934.     ): Response
  935.     {
  936.         $siteData $AppExtension->getGlobals();
  937.         $template $siteData['template'];
  938.         $typeSite $siteData['typeSite'];
  939.         $siteId   $siteData['siteId'];
  940.         $Param    $siteData['Param'];
  941.         $slug     $siteData['slug'];
  942.         $user $this->getUser();
  943.         //dd($user);
  944.         //$useridsite = $user->getSitesid();
  945.         if($user == null){
  946.             $this->addFlash(
  947.             'warning',
  948.             'Connectez vous avant d\'effectuer cette opération');
  949.             return $this->redirectToRoute('front.site.connexion',['slug' => $slug]);
  950.         }
  951.         $useridsite $user->getSitesid();
  952.         $queryBuilder $entityManager->createQueryBuilder();
  953.         $queryBuilder
  954.         ->select('part.nompart','prod.id','prod.nom','prod.slug AS ProdSlug','prod.texte',
  955.             'prod.img','prod.prix','prod.stock','cat.nom AS catNom','cat.slug AS catSlug'
  956.         )
  957.         ->from(Souhaits::class,  'souh')
  958.         ->innerJoin(AccesSites::class,  'acces''WITH',  'souh.accesid = acces.id')
  959.         ->innerJoin(Produits::class,  'prod''WITH',  'souh.produitid = prod.id')
  960.         ->innerJoin(Categories::class, 'cat''WITH''prod.catid = cat.id')
  961.         ->innerJoin(Partenaires::class, 'part''WITH''prod.partid = part.id')
  962.         ->where('souh.accesid = :accesite')
  963.         ->setParameter('accesite'$useridsite);
  964.         $query $queryBuilder->getQuery();
  965.         $info $query->getResult();
  966.         if (!empty($typeSite) && !empty($template)) {
  967.             if($typeSite == 'e-commerce'){
  968.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/favoris.html.twig', [
  969.                     'info' => $info,
  970.                 ]);
  971.             }
  972.         }
  973.         return $this->render('erreur404.html.twig');
  974.     }
  975.     #[Route('{slug}/souhait/ajouter/{id}'name'front.site.ajouter.souhait'methods: ['POST'])]
  976.     public function ajouter(
  977.         int $id
  978.         Request $request
  979.         AppExtension $AppExtension,
  980.         ProduitsRepository $produitsRepository,
  981.         SouhaitsRepository $souhaitRepository,
  982.         EntityManagerInterface $entityManager
  983.     ): Response {
  984.         $siteData $AppExtension->getGlobals();
  985.         $slug    $siteData['slug'];
  986.         $siteId  $siteData['siteId'];
  987.         $user $this->getUser();
  988.         if (!$user) {
  989.             return new JsonResponse(['success' => false'message' => 'Veuillez vous connecter.'], 401);
  990.         }
  991.         $Useridsite $user->getSitesid();
  992.         $getprod $produitsRepository->find($id);
  993.         if (!$getprod) {
  994.             return new JsonResponse(['success' => false'message' => 'Produit introuvable.'], 404);
  995.         }
  996.         $souhaitExiste $souhaitRepository->findOneBy(['produitid' => $id'accesid' => $Useridsite]);
  997.         if ($souhaitExiste) {
  998.             return new JsonResponse(['success' => false'message' => 'Cet article est dĂ©jĂ  dans votre liste de souhait.']);
  999.         }
  1000.         if ($Useridsite != $siteId) {
  1001.             return new JsonResponse(['success' => false'message' => 'Cette action n\'est pas autorisĂ©e.']);
  1002.         }
  1003.         $souhaits = new Souhaits();
  1004.         $souhaits->setAccesId($Useridsite);
  1005.         $souhaits->setProduitId($id);
  1006.         $entityManager->persist($souhaits);
  1007.         $entityManager->flush();
  1008.         return new JsonResponse(['success' => true'message' => 'AjoutĂ© Ă  vos favoris !']);
  1009.     }
  1010.     #[Route('{slug}/souhait/supprimer/{id}'name'front.site.supprimer.souhait'methods:['POST'])]
  1011.     public function supprimerSouhait(
  1012.         int $id,
  1013.         SouhaitsRepository $souhaitsRepository,
  1014.         EntityManagerInterface $entityManager
  1015.     ): JsonResponse {
  1016.         $user $this->getUser();
  1017.         if (!$user) {
  1018.             return new JsonResponse(['success' => false'message' => 'Veuillez vous connecter.']);
  1019.         }
  1020.         $Useridsite $user->getSitesid();
  1021.         $souhait $souhaitsRepository->findOneBy([
  1022.             'produitid' => $id,
  1023.             'accesid' => $Useridsite
  1024.         ]);
  1025.         if (!$souhait) {
  1026.             return new JsonResponse(['success' => false'message' => 'Cet article n’existe pas dans vos favoris.']);
  1027.         }
  1028.         $entityManager->remove($souhait);
  1029.         $entityManager->flush();
  1030.         return new JsonResponse(['success' => true'message' => 'Article retirĂ© de vos favoris.']);
  1031.     }
  1032.     #[Route('{slug}/valider-commande'name'front.valide.commande'methods:['POST','GET'])]
  1033.     public function validerCommande(
  1034.         Request $request
  1035.         AppExtension $AppExtension,
  1036.         CustomersRepository $customerRepository,
  1037.         EntityManagerInterface $em)
  1038.     {
  1039.         $siteData $AppExtension->getGlobals();
  1040.         $template $siteData['template'];
  1041.         $typeSite $siteData['typeSite'];
  1042.         $siteId   $siteData['siteId'];
  1043.         $Param    $siteData['Param'];
  1044.         $slug     $siteData['slug'];
  1045.         $user $this->getUser();
  1046.         if($user == null){
  1047.             $this->addFlash(
  1048.             'warning',
  1049.             'Connectez vous avant d\'effectuer cette opĂ©ration');
  1050.             return $this->redirectToRoute('front.site.connexion',['slug' => $slug]);
  1051.         }
  1052.         
  1053.         $IdUser $user->getId();
  1054.         $idsite $user->getSitesid();
  1055.         $session $request->getSession();
  1056.         $panier $session->get('panier', []);
  1057.         
  1058.         $customer $customerRepository->findOneBy(array('accesid' => $IdUser));
  1059.         $contact $customer->getContact();
  1060.         if($contact 'N/A'){
  1061.             $this->addFlash('warning''Le contact de reception n\'est pas activĂ©.');
  1062.             return $this->redirectToRoute('front.site.panier',['slug' => $slug]);
  1063.         }        
  1064.         
  1065.         if (empty($panier)) {
  1066.             $this->addFlash('error''Votre panier est vide.');
  1067.             return $this->redirectToRoute('front.site.panier',['slug' => $slug]);
  1068.         }
  1069.         $commande = new Commandes();
  1070.         $commande->setCodeCommande('CMD-' date('YmdHis'));
  1071.         $commande->setUserId($IdUser);
  1072.         $commande->setStatut('en attente');
  1073.         // $commande->setDateCommande(new \DateTime());
  1074.         foreach ($panier as $produit => $quantite) {
  1075.             $produit $em->getRepository(Produits::class)->find($produit);
  1076.             if ($produit) {
  1077.                 $detail = new Detailcmd();
  1078.                 $detail->setProduit($produit->getNom());
  1079.                 $detail->setQuantite($quantite);
  1080.                 $detail->setPrixUnitaire($produit->getPrix());
  1081.                 $detail->setRefCMD($commande->getCodeCommande());
  1082.                 $em->persist($detail);
  1083.                 $em->flush();
  1084.             }
  1085.         }
  1086.         $em->persist($commande);
  1087.         $em->flush();
  1088.         $session->remove('panier');
  1089.         
  1090.         $lienCommande $this->generateUrl('commande_detail',['slug' => $slug'codecommande' => $commande->getCodeCommande()],
  1091.             \Symfony\Component\Routing\Generator\UrlGeneratorInterface::ABSOLUTE_URL
  1092.         );
  1093.         $phone '225'.$contact;
  1094.         $adminPhone $phone;
  1095.         //dd($adminPhone);
  1096.         $message urlencode("Nouvelle commande reçue âś…\n\nCode : {$commande->getCodeCommande()}\nDĂ©tails : {$lienCommande}");
  1097.         $lienWhatsapp "https://wa.me/{$adminPhone}?text={$message}";
  1098.         $this->addFlash('success''Votre commande a Ă©tĂ© enregistrĂ©e avec succès.');
  1099.         return $this->redirect($lienWhatsapp);
  1100.     }
  1101.     #[Route('{slug}/detail-commande/{codecommande}'name'commande_detail')]
  1102.     public function detail(
  1103.         string $codecommande,
  1104.         AppExtension $AppExtension,
  1105.         EntityManagerInterface $em
  1106.     ): Response
  1107.     {
  1108.         $siteData $AppExtension->getGlobals();
  1109.         $template $siteData['template'];
  1110.         $typeSite $siteData['typeSite'];
  1111.         // $siteId   = $siteData['siteId'];
  1112.         $Param    $siteData['Param'];
  1113.         // $slug     = $siteData['slug'];
  1114.         $user $this->getUser();
  1115.         $IdUser $user $user->getId() : 0;
  1116.         // $idsite = $user ? $user->getSitesid() : 0;
  1117.         
  1118.         $queryBuilder $em->createQueryBuilder();
  1119.         $queryBuilder
  1120.         ->select('cust.nom','cust.contact','cust.adresse','cmd.codecommande','det.produit',
  1121.             'det.quantite','det.prixunitaire','det.refcmd','cust.mail','cmd.statut'
  1122.         )
  1123.         ->from(Detailcmd::class, alias'det')
  1124.         ->innerJoin(joinCommandes::class, alias'cmd'conditionType'WITH'condition'det.refcmd = cmd.codecommande')
  1125.         ->innerJoin(joinCustomers::class, alias'cust'conditionType'WITH'condition'cmd.userid = cust.accesid')
  1126.         ->where('cmd.codecommande = :codecmd')
  1127.         ->setParameter('codecmd'$codecommande)
  1128.         ->setMaxResults(1);
  1129.         $query $queryBuilder->getQuery();
  1130.         $UserInfo $query->getOneOrNullResult();
  1131.         $queryBuilder $em->createQueryBuilder();
  1132.         $queryBuilder
  1133.         ->select('cust.nom','cust.contact','cust.adresse','cmd.codecommande','det.produit',
  1134.             'det.quantite','det.prixunitaire','det.refcmd','cust.mail','cmd.statut'
  1135.         )
  1136.         ->from(Detailcmd::class, alias'det')
  1137.         ->innerJoin(joinCommandes::class, alias'cmd'conditionType'WITH'condition'det.refcmd = cmd.codecommande')
  1138.         ->innerJoin(joinCustomers::class, alias'cust'conditionType'WITH'condition'cmd.userid = cust.accesid')
  1139.         ->where('cmd.codecommande = :codecmd')
  1140.         ->setParameter('codecmd'$codecommande);
  1141.         $query $queryBuilder->getQuery();
  1142.         $info $query->getResult();
  1143.         if (!$info) {
  1144.             throw $this->createNotFoundException("Commande non trouvĂ©e");
  1145.         }
  1146.         
  1147.         if (!$IdUser){
  1148.             $queryBuilder $em->createQueryBuilder();
  1149.             $queryBuilder
  1150.             ->select('cust.nom','cust.contact','cust.adresse','cmd.codecommande','det.produit',
  1151.                 'det.quantite','det.prixunitaire','det.refcmd','cust.mail','cmd.statut'
  1152.             )
  1153.             ->from(Detailcmd::class, 'det')
  1154.             ->innerJoin(Commandes::class, 'cmd''WITH''det.refcmd = cmd.codecommande')
  1155.             ->innerJoin(Customers::class, 'cust''WITH''cmd.userid = cust.accesid')
  1156.             ->where('cmd.codecommande = :codecmd')
  1157.             ->andwhere('cust.accesid = :accesite')
  1158.             ->setParameter('codecmd'$codecommande)
  1159.             ->setParameter('accesite'$IdUser);
  1160.             $query $queryBuilder->getQuery();
  1161.             $commandes $query->getResult();
  1162.             
  1163.             return $this->render('front/'.$typeSite.'/'.$template.'/front/detail.html.twig', [
  1164.                 'IdUser' => $IdUser,
  1165.                 'param' => $Param,
  1166.                 'commande' => $info,
  1167.                 'UserInfo' => $UserInfo
  1168.             ]);
  1169.         }
  1170.         return $this->render('front/'.$typeSite.'/'.$template.'/front/detail.html.twig', [
  1171.             'IdUser' => $IdUser,
  1172.             'param' => $Param,
  1173.             'commande' => $info,
  1174.             'UserInfo' => $UserInfo
  1175.         ]);
  1176.     }
  1177.     #[Route('{slug}/detail-commande/{codecommande}/{statut}'name'front.site.refresh.statut',methods: ['GET'])]
  1178.     public function refresh(
  1179.         $statut,
  1180.         string $codecommande,
  1181.         AppExtension $AppExtension,
  1182.         CommandesRepository $commandeRepository,
  1183.         CustomersRepository $customerRepository,
  1184.         EntityManagerInterface $em
  1185.     ): Response
  1186.     {
  1187.         $siteData $AppExtension->getGlobals();
  1188.         $template $siteData['template'];
  1189.         $typeSite $siteData['typeSite'];
  1190.         $siteId   $siteData['siteId'];
  1191.         $Param    $siteData['Param'];
  1192.         $slug     $siteData['slug'];
  1193.         $user $this->getUser();
  1194.         $IdUser $user->getId();
  1195.         $idsite $user->getSitesid();
  1196.         $queryBuilder $em->createQueryBuilder();
  1197.         $queryBuilder
  1198.         ->select('cust.nom','cust.contact','cust.adresse','cmd.codecommande',
  1199.             'cust.mail','cmd.statut'
  1200.         )
  1201.         ->from(Commandes::class, alias'cmd')
  1202.         ->innerJoin(joinCustomers::class, alias'cust'conditionType'WITH'condition'cmd.userid = cust.accesid')
  1203.         ->where('cust.accesid = :accesite')
  1204.         ->setParameter('accesite'$IdUser);
  1205.         $query $queryBuilder->getQuery();
  1206.         $UserInfo $query->getResult();
  1207.         $queryBuilder $em->createQueryBuilder();
  1208.         $queryBuilder
  1209.         ->select('cust.nom','cust.contact','cust.adresse','cmd.codecommande','det.produit',
  1210.             'det.quantite','det.prixunitaire','det.refcmd','cust.mail','cmd.statut'
  1211.         )
  1212.         ->from(Detailcmd::class, alias'det')
  1213.         ->innerJoin(joinCommandes::class, alias'cmd'conditionType'WITH'condition'det.refcmd = cmd.codecommande')
  1214.         ->innerJoin(joinCustomers::class, alias'cust'conditionType'WITH'condition'cmd.userid = cust.accesid')
  1215.         ->where('cust.accesid = :accesite')
  1216.         ->setParameter('accesite'$IdUser);
  1217.         $query $queryBuilder->getQuery();
  1218.         $info $query->getResult();
  1219.         if (!$UserInfo) {
  1220.             throw $this->createNotFoundException("Commande non trouvĂ©e");
  1221.         }
  1222.         $customer $customerRepository->findOneBy(array('accesid' => $IdUser));
  1223.         if($customer){
  1224.             $commandes $commandeRepository->findOneBy(array('userid' => $IdUser));
  1225.             if($commandes){
  1226.                 if($statut == "annuler"){
  1227.                     $commandes->setStatut($statut);
  1228.                     $em->flush();
  1229.                         $this->addFlash('warning','Le compte de l\'utilisateur a Ă©tĂ© bien dĂ©sactivĂ©');
  1230.                          return $this->redirectToRoute('commande_detail',['slug' => $slug'codecommande' => $codecommande]);
  1231.                 }else if($statut == "annuler"){
  1232.                     $commandes->setStatut($statut);
  1233.                     $em->flush();
  1234.                         $this->addFlash('warning','Le compte de l\'utilisateur a Ă©tĂ© bien dĂ©sactivĂ©');
  1235.                          return $this->redirectToRoute('commande_detail',['slug' => $slug'codecommande' => $codecommande]);
  1236.                 }else if($statut == "annuler"){
  1237.                     $commandes->setStatut($statut);
  1238.                     $em->flush();
  1239.                         $this->addFlash('warning','Le compte de l\'utilisateur a Ă©tĂ© bien dĂ©sactivĂ©');
  1240.                         return $this->redirectToRoute('commande_detail',['slug' => $slug'codecommande' => $codecommande]);
  1241.                 }else{
  1242.                     $this->addFlash('warning','Page introuvable');
  1243.                     return $this->redirectToRoute('erreur404.html.twig');
  1244.                 }
  1245.             }else{
  1246.                 $this->addFlash('warning','Commande introuvable');
  1247.                 return $this->redirectToRoute('erreur404.html.twig');
  1248.             }
  1249.         }
  1250.         return $this->render('front/'.$typeSite.'/'.$template.'/front/detail.html.twig', [
  1251.             'param' => $Param,
  1252.             'commande' => $info,
  1253.             'UserInfo' => $UserInfo
  1254.         ]);
  1255.     }
  1256.     #[Route('/test'name'front.site.test')]
  1257.     #[Route('{slug}/test'name'front.site.test')]
  1258.     public function test(): Response
  1259.     {
  1260.         dd("test");
  1261.         // return $this->render('front/e-commerce/T02/front/compte/dashboard.html.twig', [
  1262.         //     'controller_name' => 'FrontController',
  1263.         // ]);
  1264.     }
  1265.     #[Route('/test'name'front.site.test')]
  1266.     #[Route('{slug}/test'name'front.site.test')]
  1267.     public function test_test(): Response
  1268.     {
  1269.         dd("test");
  1270.         // return $this->render('front/e-commerce/T02/front/compte/dashboard.html.twig', [
  1271.         //     'controller_name' => 'FrontController',
  1272.         // ]);
  1273.     }
  1274.     #[Route('/{slug}/a-propos'name'front.site.apropos')]
  1275.     public function apropos(
  1276.         AboutsRepository $aboutRepository,
  1277.         EntityManagerInterface $entityManager,
  1278.         AppExtension $AppExtension,
  1279.     ): Response
  1280.     {
  1281.         $siteData $AppExtension->getGlobals();
  1282.         $template $siteData['template'];
  1283.         $typeSite $siteData['typeSite'];
  1284.         $siteId   $siteData['siteId'];
  1285.         $Param    $siteData['Param'];
  1286.         if (!empty($typeSite) && !empty($template)) {
  1287.             if($typeSite == 'e-commerce'){
  1288.                 $apropos $entityManager->createQueryBuilder();
  1289.                 $apropos
  1290.                 ->select('ap.img','ap.texte','ap.adminsid')
  1291.                 ->from(Abouts::class,  'ap')
  1292.                 ->where('ap.adminsid = :adminsid')
  1293.                 ->setParameter('adminsid'$siteId);
  1294.                 $about $apropos->getQuery()->getResult();
  1295.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/apropos.html.twig', [
  1296.                     'about' => $about,
  1297.                 ]);
  1298.             }else if($typeSite == 'blog'){
  1299.                 $apropos $entityManager->createQueryBuilder();
  1300.                 $apropos
  1301.                 ->select('ap.img','ap.texte','ap.adminsid')
  1302.                 ->from(Abouts::class,  'ap')
  1303.                 ->where('ap.adminsid = :adminsid')
  1304.                 ->setParameter('adminsid'$siteId);
  1305.                 $about $apropos->getQuery()->getResult();
  1306.                 return $this->render('front/'.$typeSite.'/'.$template.'/front/about.html.twig', [
  1307.                     'about' => $about,
  1308.                 ]);
  1309.             }
  1310.         }
  1311.         return $this->render('erreur404.html.twig');
  1312.     }
  1313.     #[Route('/{slug}/contact'name'front.site.contact')]
  1314.     public function contact(
  1315.         Request $request
  1316.         MailerInterface $mailer,
  1317.         AppExtension $AppExtension
  1318.     ): Response
  1319.     {
  1320.         $siteData $AppExtension->getGlobals();
  1321.         $template $siteData['template'];
  1322.         $typeSite $siteData['typeSite'];
  1323.         $siteId   $siteData['siteId'];
  1324.         $Param    $siteData['Param'];
  1325.     
  1326.         // Formulaire de contact
  1327.         $contactForm $this->createForm(ContactFormType::class);
  1328.         $contactForm->handleRequest($request);
  1329.     
  1330.         // Vérifier que les variables nécessaires existent
  1331.         if (!empty($typeSite) && !empty($template)) {
  1332.             if ($typeSite === 'e-commerce') {
  1333.     
  1334.                 if ($contactForm->isSubmitted() && $contactForm->isValid()) {
  1335.                     // RĂ©cupĂ©ration et sĂ©curisation des donnĂ©es
  1336.                     $nom     htmlspecialchars($contactForm->get('nom')->getData());
  1337.                     $email   htmlspecialchars($contactForm->get('email')->getData());
  1338.                     $objet   htmlspecialchars($contactForm->get('objet')->getData());
  1339.                     $message htmlspecialchars($contactForm->get('message')->getData());
  1340.     
  1341.                     // CrĂ©ation du message
  1342.                     $emailMessage = (new Email())
  1343.                         ->from($email)
  1344.                         ->to('support@cimef-technologies.com')
  1345.                         ->subject($objet)
  1346.                         ->html("
  1347.                             <h3>Nouveau message de contact</h3>
  1348.                             <p><strong>Nom :</strong> $nom</p>
  1349.                             <p><strong>Email :</strong> $email</p>
  1350.                             <p><strong>Message :</strong><br>$message</p>
  1351.                         ");
  1352.     
  1353.                     // Envoi du mail
  1354.                     $mailer->send($emailMessage);
  1355.     
  1356.                     // Message de confirmation
  1357.                     $this->addFlash('success''Votre message a Ă©tĂ© envoyĂ© avec succès.');
  1358.     
  1359.                     // Redirection pour Ă©viter le renvoi du formulaire
  1360.                     return $this->redirectToRoute('front.site.contact', ['slug' => $request->get('slug')]);
  1361.                 }
  1362.     
  1363.                 // Affichage du formulaire
  1364.                 return $this->render("front/{$typeSite}/{$template}/front/contact.html.twig", [
  1365.                     'controller_name' => 'FrontController',
  1366.                     'form' => $contactForm->createView(),
  1367.                 ]);
  1368.             } 
  1369.             elseif ($typeSite === 'blog') {
  1370.                 $contactForm $this->createForm(ContactFormType::class);
  1371.                 $contactForm->handleRequest($request);
  1372.     
  1373.                 return $this->render("front/{$typeSite}/{$template}/front/contact.html.twig", [
  1374.                     'controller_name' => 'FrontController',
  1375.                     'form' => $contactForm->createView(),
  1376.                 ]);
  1377.             }
  1378.         }
  1379.     
  1380.         // Page 404 si le type de site n’existe pas
  1381.         return $this->render('erreur404.html.twig');
  1382.     }
  1383.     #[Route('/test/blog'name'front.blog.test')]
  1384.     public function blog(): Response
  1385.     {
  1386.         // dd("test");
  1387.         // ACCUEIL
  1388.         return $this->render('front/blog/T01/front/home.html.twig', [
  1389.             'controller_name' => 'FrontController',
  1390.         ]);
  1391.         // ARTICLES
  1392.         // return $this->render('front/blog/T01/front/articles.html.twig', [
  1393.         //     'controller_name' => 'FrontController',
  1394.         // ]);
  1395.         // // A PROPOS
  1396.         // return $this->render('front/blog/T01/front/about.html.twig', [
  1397.         //     'controller_name' => 'FrontController',
  1398.         // ]);
  1399.         // CONTACT
  1400.         // return $this->render('front/blog/T01/front/contact.html.twig', [
  1401.         //     'controller_name' => 'FrontController',
  1402.         // ]);
  1403.     }
  1404. }