<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
#-----------(Tables)ENTITY--------------
use App\Entity\Sites;
use App\Entity\Abouts;
use App\Entity\Clients;
use App\Entity\Articles;
use App\Entity\Customers;
use App\Entity\Packsites;
use App\Entity\AccesSites;
use App\Entity\Commandes;
use App\Entity\Categories;
use App\Entity\Produits;
use App\Entity\Bannieres;
use App\Entity\Commentaires;
use App\Entity\Detailcmd;
use App\Entity\Users;
use App\Entity\Models;
use App\Entity\Partenaires;
use App\Entity\Souhaits;
use App\Entity\Typesites;
#------------------------------------
use App\Form\SearchType;
use App\Form\UserFormType;
use App\Form\ClientFormType;
use App\Form\ContactFormType;
use App\Form\CustomerFormType;
use App\Form\CommentaireFormType;
use App\Repository\AboutsRepository;
use App\Repository\ArticlesRepository;
#-----------REPOSITORY--------------
use App\Repository\ClientsRepository;
use App\Repository\CommentairesRepository;
use App\Repository\CustomersRepository;
use App\Repository\ModelsRepository;
use App\Repository\SouhaitsRepository;
use App\Repository\TypesitesRepository;
use App\Repository\NewslettersRepository;
use App\Repository\ParametragesRepository;
use App\Repository\CategoriesRepository;
use App\Repository\ProduitsRepository;
use App\Repository\BannieresRepository;
use App\Repository\PubsRepository;
use App\Repository\PaniersRepository;
use App\Twig\AppExtension;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
// 👇 Ajoute cette ligne si elle manque
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
#---------------------------------------------
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
#-------------------------------
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class FrontController extends AbstractController
{
#[Route('/', name: 'temoin')]
public function temoignage(): Response {
return $this->render('erreur404.html.twig');
}
#[Route('/{slug}',name: 'front.site.index',methods: ['GET', 'POST'])]
public function read_site(
string $slug,
EntityManagerInterface $entityManager,
ArticlesRepository $articleRepository,
CategoriesRepository $categorieRepository,
AppExtension $AppExtension
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$Param = $siteData['Param'];
$lastProd = $siteData['lastProd'];
$slug = $siteData['slug'];
$verifySite = $entityManager->createQueryBuilder()
->select('site.slug')
->from(Sites::class, 'site')
->where('site.slug = :slug')
->setParameter('slug', $slug)
->getQuery()
->getOneOrNullResult();
if (!empty($typeSite) && !empty($template)) {
$apropos = $entityManager->createQueryBuilder();
$apropos
->select('ap.img','ap.texte','ap.adminsid')
->from(Abouts::class, 'ap')
->where('ap.adminsid = :adminsid')
->setParameter('adminsid', $siteId);
$about = $apropos->getQuery()->getResult();
$texteDecode = null;
if ($about) {
$texteDecode = html_entity_decode($about[0]['texte'], ENT_QUOTES, 'UTF-8');
}
$derniers_articles = $entityManager->createQueryBuilder();
$derniers_articles
->select(
'cat.id','art.title', 'art.slug', 'art.img', 'art.resume',
'art.texte','art.statut','cat.nom AS catNom', 'cat.slug AS catSlug',
'art.createdat'
)
->from(Articles::class, 'art')
->innerJoin(Categories::class, 'cat', 'WITH', 'art.catid = cat.id')
->where('art.adminsid = :adminsid')
->setParameter('adminsid', $siteId)
->orderBy('art.createdat', 'DESC')
->setMaxResults(4);
$recents = $derniers_articles->getQuery()->getResult();
$categories = $categorieRepository->findBy(['adminsid'=>$siteId]);
/*$query = $entityManager->createQueryBuilder()
->select('p.nom', 'p.slug AS ProdSlug', 'p.img', 'p.prix', 'p.stock',
'cat.nom AS catNom', 'cat.slug AS catSlug', 'SUM(d.quantite) AS totalCommandes')
->from(Produits::class, 'p')
->innerJoin(Categories::class, 'cat', 'WITH', 'p.catid = cat.id')
->leftJoin(Detailcmd::class, 'd', 'WITH', 'd.produit = p.id')
->where('cat.adminsid = :adminsid')
->setParameter('adminsid', $siteId)
->groupBy('p.id')
->orderBy('totalCommandes', 'DESC')
->setMaxResults(10);
$result = $query->getQuery()->getArrayResult();*/
$query = $entityManager->createQueryBuilder()
->select('p.id','p.nom', 'p.slug AS ProdSlug', 'p.img', 'p.prix', 'p.stock',
'cat.nom AS catNom', 'cat.slug AS catSlug','SUM(d.quantite) AS totalCommandes')
->from(Produits::class, 'p')
->innerJoin(Categories::class, 'cat', 'WITH', 'p.catid = cat.id')
->innerJoin(Partenaires::class, 'part', 'WITH', 'p.partid = part.id')
->innerJoin(Detailcmd::class, 'd', 'WITH', 'd.produit = p.id')
->where('cat.adminsid = :adminsid')
->setParameter('adminsid', $siteId)
->groupBy('p.id')
->orderBy('totalCommandes', 'DESC')
->setMaxResults(10)
->getQuery();
$result = $query->getArrayResult();
$produits = is_array($result) ? $result : [];
//dd($result);
if (empty($result) || (isset($result[0]['totalCommandes']) && $result[0]['totalCommandes'] == 0)) {
$result = $entityManager->createQueryBuilder()
->select('p')
->from(Produits::class, 'p')
->orderBy('p.createdat', 'DESC')
->setMaxResults(10)
->getQuery()
->getResult();
}
$articles = $entityManager->createQueryBuilder();
$articles
->select('art.title', 'art.slug', 'art.img', 'art.resume', 'art.texte','art.statut','cat.nom AS catNom', 'cat.slug AS catSlug')
->from(Articles::class, 'art')
->innerJoin(Categories::class, 'cat', 'WITH', 'art.catid = cat.id')
->where('art.adminsid = :adminsid')
->setParameter('adminsid', $siteId)
->setMaxResults(10); // ✅ limite à 10 résultats
$listarticle = $articles->getQuery()->getResult();
return $this->render('front/'.$typeSite.'/'.$template.'/front/index.html.twig', [
'slug' => $slug,
'prod' => $produits,
'about' => $about,
'texteDecode' => $texteDecode,
'Param' => $Param,
'code' => $typeSite,
'templ' => $template,
'articles' => $listarticle,
'lastProd' => $lastProd,
'recents' => $recents,
'categories' => $categories,
]);
} else {
if($verifySite){
return $this->render('siteinactif.html.twig');
}else{
return $this->render('erreur404.html.twig');
}
}
}
#[Route('/{slug}/articles', name: 'front.site.articles', methods:['GET','POST'])]
public function read_article(
string $slug,
Request $request,
AppExtension $AppExtension,
PaginatorInterface $paginator,
EntityManagerInterface $entityManager,
ArticlesRepository $articleRepository,
CategoriesRepository $categorieRepository
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$Param = $siteData['Param'];
if (!empty($typeSite) && !empty($template)) {
if($typeSite == 'e-commerce'){
return $this->render('front/'.$typeSite.'/'.$template.'/front/produit.html.twig', [
'controller_name' => 'FrontController',
]);
}else if($typeSite == 'blog'){
$derniers_articles = $entityManager->createQueryBuilder();
$derniers_articles
->select(
'cat.id','art.title', 'art.slug', 'art.img', 'art.resume',
'art.texte','art.statut','cat.nom AS catNom', 'cat.slug AS catSlug',
'art.createdat'
)
->from(Articles::class, 'art')
->innerJoin(Categories::class, 'cat', 'WITH', 'art.catid = cat.id')
->where('art.adminsid = :adminsid')
->setParameter('adminsid', $siteId)
->orderBy('art.createdat', 'DESC')
->setMaxResults(4);
$recents = $derniers_articles->getQuery()->getResult();
$articles = $entityManager->createQueryBuilder();
$articles
->select('cat.id', 'art.title', 'art.slug', 'art.img',
'art.resume', 'art.texte','art.statut','cat.nom AS catNom',
'cat.slug AS catSlug'
)
->from(Articles::class, 'art')
->innerJoin(Categories::class, 'cat', 'WITH', 'art.catid = cat.id')
->where('art.adminsid = :adminsid')
->setParameter('adminsid', $siteId)
->orderBy('art.createdat', 'DESC'); // ✅ limite à 10 résultats
// $listarticle = $articles->getQuery()->getResult();
$pagination = $paginator->paginate(
$articles, /* Query ou tableau */
$request->query->getInt('page', 1), /* Page actuelle */
10 /* Nombre d’éléments par page */
);
$categories = $categorieRepository->findBy(['adminsid'=>$siteId]);
return $this->render('front/'.$typeSite.'/'.$template.'/front/articles.html.twig', [
'recents' => $recents,
'categories' => $categories,
'articles' => $pagination,
]);
}
}
return $this->render('erreur404.html.twig');
}
#[Route('/{slug}/articles/{cat}', name: 'front.site.categorie.articles', methods:['GET','POST'])]
public function read_article_categorie(
string $slug,
string $cat,
Request $request,
AppExtension $AppExtension,
PaginatorInterface $paginator,
EntityManagerInterface $entityManager,
CategoriesRepository $categorieRepository
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$Param = $siteData['Param'];
if (!empty($typeSite) && !empty($template)) {
if($typeSite == 'e-commerce'){
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->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')
->from(Produits::class, 'prod')
->innerJoin(Categories::class, 'cat', 'WITH', 'prod.catid = cat.id')
->innerJoin(Partenaires::class, 'part', 'WITH', 'prod.partid = part.id')
->where('prod.adminsid = :adminsid')
->andWhere('cat.slug = :catSlug')
->setParameter('adminsid', $siteId)
->setParameter('catSlug', $cat)
->orderBy('prod.id', 'DESC')
->setMaxResults(6);
$query = $entityManager->createQueryBuilder()
->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')
->from(Produits::class, 'prod')
->innerJoin(Categories::class, 'cat', 'WITH', 'prod.catid = cat.id')
->innerJoin(Partenaires::class, 'part', 'WITH', 'prod.partid = part.id')
->where('prod.adminsid = :adminsid')
->andWhere('cat.slug = :catSlug')
->setParameter('adminsid', $siteId)
->setParameter('catSlug', $cat)
->orderBy('prod.id', 'DESC')
->getQuery();
$paginationCategorie = $paginator->paginate(
$query,
$request?->query->getInt('page', 1) ?? 1,
10
);
$paginationCategorie2 = $paginator->paginate(
$query,
$request?->query->getInt('page', 1) ?? 1,
12
);
// dd($paginationCategorie2);
return $this->render('front/'.$typeSite.'/'.$template.'/front/produit-categorie.html.twig', [
'paginationCategorie' => $paginationCategorie,
'paginationCategorie2' => $paginationCategorie2
]);
}else if($typeSite == 'blog'){
$derniers_articles = $entityManager->createQueryBuilder();
$derniers_articles
->select(
'cat.id','art.title', 'art.slug', 'art.img', 'art.resume',
'art.texte','art.statut','cat.nom AS catNom', 'cat.slug AS catSlug',
'art.createdat'
)
->from(Articles::class, 'art')
->innerJoin(Categories::class, 'cat', 'WITH', 'art.catid = cat.id')
->where('art.adminsid = :adminsid')
->setParameter('adminsid', $siteId)
->orderBy('art.createdat', 'DESC')
->setMaxResults(4);
$recents = $derniers_articles->getQuery()->getResult();
$categories = $categorieRepository->findBy(['adminsid'=>$siteId]);
$articles = $entityManager->createQueryBuilder();
$articles
->select('art.title', 'cat.id','art.img', 'art.slug', 'art.texte','art.resume', 'art.statut','cat.nom AS catNom',
'cat.slug AS catSlug')
->from(Articles::class, 'art')
->innerJoin(Categories::class, 'cat', 'WITH', 'art.catid = cat.id')
->where('art.adminsid = :adminsid')
->andWhere('cat.slug = :catSlug')
->setParameter('adminsid', $siteId)
->setParameter('catSlug', $cat)
->orderBy('art.createdat', 'DESC');
$pagination = $paginator->paginate(
$articles, /* Query ou tableau */
$request->query->getInt('page', 1), /* Page actuelle */
10 /* Nombre d’éléments par page */
);
return $this->render('front/'.$typeSite.'/'.$template.'/front/categorie-post.html.twig', [
'categories' => $categories,
'articles' => $pagination,
'recents' => $recents,
'categorie' => $cat
]);
}
}
return $this->render('erreur404.html.twig');
}
#[Route('/{slug}/articles/marque/{marque}', name: 'front.site.marque.articles', methods:['GET','POST'])]
public function read_article_marque(
string $slug,
string $marque,
Request $request,
AppExtension $AppExtension,
PaginatorInterface $paginator,
EntityManagerInterface $entityManager,
CategoriesRepository $categorieRepository
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$Param = $siteData['Param'];
if (!empty($typeSite) && !empty($template)) {
if($typeSite == 'e-commerce'){
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->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')
->from(Produits::class, 'prod')
->innerJoin(Categories::class, 'cat', 'WITH', 'prod.catid = cat.id')
->innerJoin(Partenaires::class, 'part', 'WITH', 'prod.partid = part.id')
->where('prod.adminsid = :adminsid')
->andWhere('part.nompart = :marque')
->setParameter('adminsid', $siteId)
->setParameter('marque', $marque)
->orderBy('prod.id', 'DESC')
->setMaxResults(6);
$query = $entityManager->createQueryBuilder()
->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')
->from(Produits::class, 'prod')
->innerJoin(Categories::class, 'cat', 'WITH', 'prod.catid = cat.id')
->innerJoin(Partenaires::class, 'part', 'WITH', 'prod.partid = part.id')
->where('prod.adminsid = :adminsid')
->andWhere('part.nompart = :marque')
->setParameter('adminsid', $siteId)
->setParameter('marque', $marque)
->orderBy('prod.id', 'DESC')
->getQuery();
$paginationMarque1 = $paginator->paginate(
$query,
$request?->query->getInt('page', 1) ?? 1,
10
);
$paginationMarque2 = $paginator->paginate(
$query,
$request?->query->getInt('page', 1) ?? 1,
12
);
// dd($paginationCategorie2);
return $this->render('front/'.$typeSite.'/'.$template.'/front/produit-marque.html.twig', [
'paginationMarque1' => $paginationMarque1,
'paginationMarque2' => $paginationMarque2
]);
}else if($typeSite == 'blog'){
$derniers_articles = $entityManager->createQueryBuilder();
$derniers_articles
->select(
'cat.id','art.title', 'art.slug', 'art.img', 'art.resume',
'art.texte','art.statut','cat.nom AS catNom', 'cat.slug AS catSlug',
'art.createdat'
)
->from(Articles::class, 'art')
->innerJoin(Categories::class, 'cat', 'WITH', 'art.catid = cat.id')
->where('art.adminsid = :adminsid')
->setParameter('adminsid', $siteId)
->orderBy('art.createdat', 'DESC')
->setMaxResults(4);
$recents = $derniers_articles->getQuery()->getResult();
$categories = $categorieRepository->findBy(['adminsid'=>$siteId]);
$articles = $entityManager->createQueryBuilder();
$articles
->select('art.title', 'cat.id','art.img', 'art.slug', 'art.texte','art.resume', 'art.statut','cat.nom AS catNom',
'cat.slug AS catSlug')
->from(Articles::class, 'art')
->innerJoin(Categories::class, 'cat', 'WITH', 'art.catid = cat.id')
->where('art.adminsid = :adminsid')
->andWhere('cat.slug = :catSlug')
->setParameter('adminsid', $siteId)
->setParameter('catSlug', $cat)
->orderBy('art.createdat', 'DESC');
$pagination = $paginator->paginate(
$articles, /* Query ou tableau */
$request->query->getInt('page', 1), /* Page actuelle */
10 /* Nombre d’éléments par page */
);
return $this->render('front/'.$typeSite.'/'.$template.'/front/categorie-post.html.twig', [
'categories' => $categories,
'articles' => $pagination,
'recents' => $recents,
'categorie' => $cat
]);
}
}
return $this->render('erreur404.html.twig');
}
#[Route('{slug}/produit/{ProdSlug}', name: 'front.site.detail.prod')]
public function detail_prod(
$slug,
$ProdSlug,
Request $request,
AppExtension $AppExtension,
EntityManagerInterface $entityManager,
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$lastProd = $siteData['lastProd'];
$slug = $siteData['slug'];
if (!empty($typeSite) && !empty($template)) {
if($typeSite == 'e-commerce'){
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->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')
->from(Produits::class, 'prod')
->innerJoin(Categories::class, 'cat', 'WITH', 'prod.catid = cat.id')
->innerJoin(Partenaires::class, 'part', 'WITH', 'prod.partid = part.id')
->where('prod.adminsid = :adminsid')
->andWhere('prod.slug = :ProdSlug')
->setParameter('adminsid', $siteId)
->setParameter('ProdSlug', $ProdSlug);
$query = $queryBuilder->getQuery();
$DetailProd = $query->getResult();
$queryBuilderProd = $entityManager->createQueryBuilder();
$queryBuilderProd
->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')
->from(Produits::class, 'prod')
->innerJoin(Categories::class, 'cat', 'WITH', 'prod.catid = cat.id')
->innerJoin(Partenaires::class, 'part', 'WITH', 'prod.partid = part.id')
->where('prod.adminsid = :adminsid')
->andWhere('cat.nom != :catNom')
->setParameter('adminsid', $siteId)
->setParameter('catNom', 'autres')
->orderBy('prod.id', 'DESC')
->setMaxResults(5);
$NewProd = $queryBuilderProd->getQuery()->getResult();
$queryBuilderProd2 = $entityManager->createQueryBuilder();
$queryBuilderProd2
->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')
->from(Produits::class, 'prod')
->innerJoin(Categories::class, 'cat', 'WITH', 'prod.catid = cat.id')
->innerJoin(Partenaires::class, 'part', 'WITH', 'prod.partid = part.id')
->where('prod.adminsid = :adminsid')
->andWhere('cat.nom != :catNom')
->setParameter('adminsid', $siteId)
->setParameter('catNom', 'autres')
->orderBy('prod.id', 'DESC')
->setMaxResults(4);
$NewProd2 = $queryBuilderProd2->getQuery()->getResult();
return $this->render('front/'.$typeSite.'/'.$template.'/front/detail-prod.html.twig', [
'detailProd' => $DetailProd,
'NewProd2' => $NewProd2,
'NewProd' => $NewProd
]);
}
}
return $this->render('erreur404.html.twig');
}
#[Route('{slug}/article/{ArtSlug}', name: 'front.site.detail.article', methods:['GET','POST'])]
public function detail_article(
$ArtSlug,
Request $request,
AppExtension $AppExtension,
CategoriesRepository $categorieRepository,
CommentairesRepository $commentaireRepository,
EntityManagerInterface $entityManager,
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$lastProd = $siteData['lastProd'];
$post = $entityManager->getRepository(Articles::class)->findOneBy(['slug' => $ArtSlug]);
if (!$post) {
throw $this->createNotFoundException('Article non trouvé');
}
$list = $commentaireRepository->findBy(['sitesid'=>$siteId]);
$comment = new Commentaires();
$addcomment = $this->createForm(CommentaireFormType::class, $comment);
$addcomment->handleRequest($request);
$id = $post->getId();
$commentPost = $entityManager->createQueryBuilder();
$commentPost
->select('cmt.nom','cmt.mail','cmt.commentaire','cmt.postsid','cmt.sitesid','cmt.updatedat')
->from(Commentaires::class, 'cmt')
->where('cmt.postsid = :postsid')
->andwhere('cmt.sitesid = :sitesid')
->andwhere('cmt.statut = :statut')
->setParameter('postsid', $id)
->setParameter('sitesid', $siteId)
->setParameter('statut', 'posté');
$commentaires = $commentPost->getQuery()->getResult();
$commentPost = $entityManager->createQueryBuilder();
$commentPost
->select('COUNT(cmt.id)')
->from(Commentaires::class, 'cmt')
->where('cmt.postsid = :postsid')
->andWhere('cmt.sitesid = :sitesid')
->andWhere('cmt.statut = :statut')
->setParameter('postsid', $id)
->setParameter('sitesid', $siteId)
->setParameter('statut', 'posté');
$commentCount = $commentPost->getQuery()->getSingleScalarResult();
if (!empty($typeSite) && !empty($template)) {
if($typeSite == 'blog'){
if ($addcomment->isSubmitted()) {
$nom = $addcomment->get('nom')->getData();
$mail = $addcomment->get('mail')->getData();
$texte = $addcomment->get('commentaire')->getData();
$commentPost = $entityManager->createQueryBuilder();
$commentPost
->select('cmt.nom','cmt.mail','cmt.commentaire','cmt.postsid','cmt.updatedat')
->from(Commentaires::class, 'cmt')
->where('cmt.nom = :noms')
->andwhere('cmt.mail = :mails')
->andwhere('cmt.commentaire = :cmts')
->setParameter('noms', $nom)
->setParameter('mails', $mail)
->setParameter('cmts', $texte);
$comments = $commentPost->getQuery()->getResult();
if($comments){
$this->addFlash('warning', 'Votre message à été déjà envoyé.');
return $this->redirect($request->getUri());
}
$comment->setNom($nom);
$comment->setMail($mail);
$comment->setCommentaire($texte);
$comment->setPostsId($id); // on stocke l'ID
$comment->setStatut('en attente');
$entityManager->persist($comment);
$entityManager->flush();
$this->addFlash('success', 'Votre commentaire a été bien enregistré.');
}
$derniers_articles = $entityManager->createQueryBuilder();
$derniers_articles
->select(
'cat.id','art.title', 'art.slug', 'art.img', 'art.resume',
'art.texte','art.statut','cat.nom AS catNom', 'cat.slug AS catSlug',
'art.createdat'
)
->from(Articles::class, 'art')
->innerJoin(Categories::class, 'cat', 'WITH', 'art.catid = cat.id')
->where('art.adminsid = :adminsid')
->setParameter('adminsid', $siteId)
->orderBy('art.createdat', 'DESC')
->setMaxResults(4);
$recents = $derniers_articles->getQuery()->getResult();
$articles = $entityManager->createQueryBuilder();
$articles
->select('art.title', 'art.createdat', 'art.id','art.img', 'art.slug',
'art.texte','art.resume', 'art.statut','cat.nom AS catNom', 'cat.slug AS catSlug')
->from(Articles::class, 'art')
->innerJoin(Categories::class, 'cat', 'WITH', 'art.catid = cat.id')
->where('art.adminsid = :adminsid')
->andWhere('art.slug = :catSlug')
->setParameter('adminsid', $siteId)
->setParameter('catSlug', $ArtSlug);
$query = $articles->getQuery();
$DetailProd = $query->getResult();
$categories = $categorieRepository->findBy(['adminsid'=>$siteId]);
return $this->render('front/'.$typeSite.'/'.$template.'/front/detailpost.html.twig', [
'commentCount' => $commentCount,
'commentaires' => $commentaires,
'categories' => $categories,
'detailArt' => $DetailProd,
'recents' => $recents,
'post' => $post,
'addcomment' => $addcomment->createView(),
]);
}
}
return $this->render('erreur404.html.twig');
}
#[Route('{slug}/connexion', name: 'front.site.connexion', methods: ['POST','GET'])]
public function connexion(
AppExtension $AppExtension,
EntityManagerInterface $entityManager,
AuthenticationUtils $authenticationUtils
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$Param = $siteData['Param'];
$slug = $siteData['slug'];
$UserLogin = $siteData['current_user'];
if (!empty($typeSite) && !empty($template)) {
if($typeSite == 'e-commerce'){
if($UserLogin == null){
return $this->render('front/'.$typeSite.'/'.$template.'/front/connexion.html.twig', [
'Param' => $Param,'code' => $typeSite,'templ' => $template,
]);
}else{
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('cust.nom', 'cust.mail', 'cust.contact', 'cust.adresse', 'cust.code','acces.usercode', 'acces.role')
->from(Customers::class, 'cust')
->innerJoin(AccesSites::class, 'acces', 'WITH', 'cust.accesid = acces.id');
$query = $queryBuilder->getQuery();
$info = $query->getResult();
return $this->redirectToRoute('front.site.compte',['slug' => $slug]);
// return $this->render('front/'.$typeSite.'/'.$template.'/front/compte/dashboard.html.twig', [
// 'Param' => $Param,'code' => $typeSite,'templ' => $template,'infouser' => $info
// ]);
}
}
}
return $this->render('erreur404.html.twig');
}
#[Route('{slug}/deconnexion', name: 'front.site.logout')]
public function logout(): void{
$this->addFlash(
'success',
'Votre compte a été déconnecté avec succčs');
throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall');
}
#[Route('{slug}/inscription', name: 'front.site.inscription', methods: ['POST','GET'])]
public function inscription(
Request $request,
CustomersRepository $customerRepository,
EntityManagerInterface $entityManager,
UserPasswordHasherInterface $passwordHasher,
AppExtension $AppExtension
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$Param = $siteData['Param'];
$slug = $siteData['slug'];
$customer = new Customers();
$accesite = new AccesSites();
$addCustomerForm = $this->createForm(CustomerFormType::class, $customer);
$addCustomerForm->handleRequest($request);
if (!empty($typeSite) && !empty($template)) {
if($typeSite == 'e-commerce'){
if($addCustomerForm->isSubmitted() && $addCustomerForm->isValid()){
$listslides = $customerRepository->findAll();
$customer = $addCustomerForm->getData();
// ACCES SITE
$usercode = substr(str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"), 0, 6);
$liensite = "N/A";
$lienadmin = "N/A";
$easycode = 'easy_'.$usercode;
$Idsite = $siteId;
$role = "client";
// CLIENTS
$code = substr(str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"), 0, 10);
$nom = $addCustomerForm->get('nom')->getData();
$mail = $addCustomerForm->get('mail')->getData();
$contact = 'N/A';
$adresse = 'N/A';
// $statut = 'actif';
$plaintextPassword = $addCustomerForm->get('password')->getData();
$hashedPassword = $passwordHasher->hashPassword($accesite, $plaintextPassword);
$checkClient = $customerRepository->findOneBy(['mail' => $mail]);
if($checkClient){
$this->addFlash('warning','Alerte, cette adresse mail a déjŕ été utilisée');
return $this->redirectToRoute('front.site.inscription',['slug' => $slug]); // par exemple 'client_new'
}
$accesite->setLiensite($liensite);
$accesite->setLienadmin($lienadmin);
$accesite->setUsercode($easycode);
$accesite->setPassword($hashedPassword);
$accesite->setSitesid($Idsite);
$accesite->setRole($role);
$entityManager->persist($accesite);
$entityManager->flush();
$lastId = $accesite->getId();
$customer->setCode($code);
$customer->setNom($nom);
$customer->setAdresse($adresse);
$customer->setContact($contact);
$customer->setAccesId($lastId);
$entityManager->persist($customer);
$entityManager->flush();
$this->addFlash(
'success',
'Félicitation, votre compte crée avec succčs');
return $this->redirectToRoute('front.site.inscription',['slug' => $slug]);
}
return $this->render('front/'.$typeSite.'/'.$template.'/front/inscription.html.twig', [
'Param' => $Param,
'code' => $typeSite,
'templ' => $template,
'addClientForm' => $addCustomerForm->createView(),
]);
}
}
return $this->render('erreur404.html.twig');
}
//----FONCTION DU PANIER-------------------------------------------
#[Route('{slug}/panier', name: 'front.site.panier')]
public function panier(
Request $request,
EntityManagerInterface $entityManager,
AppExtension $AppExtension
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$Param = $siteData['Param'];
$slug = $siteData['slug'];
$session = $request->getSession();
$panier = $session->get('panier', []);
$panierData = [];
$total = 0;
foreach ($panier as $id => $quantite) {
$produit = $entityManager->getRepository(Produits::class)->find($id);
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->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'
)
->from(Produits::class, 'prod')
->innerJoin(Categories::class, 'cat', 'WITH', 'prod.catid = cat.id')
->innerJoin(Partenaires::class, 'part', 'WITH', 'prod.partid = part.id')
->where('prod.id = :id')
->setParameter('id', $id);
$query = $queryBuilder->getQuery();
$DetailProd = $query->getOneOrNullResult();
// dd($DetailProd,$panier,$panierData);
if ($DetailProd) {
$panierData[] = [
'id' => $DetailProd['id'],
'nom' => $DetailProd['nom'],
'prix' => $DetailProd['prix'],
'marque' => $DetailProd['nompart'],
'categorie' => $DetailProd['catNom'],
'img' => $DetailProd['img'],
'quantite' => (int)$quantite,
'total' => (float)$produit->getPrix() * (int)$quantite
];
$total += (float)$produit->getPrix() * (int)$quantite;
}
}
if (!empty($typeSite) && !empty($template)) {
if($typeSite == 'e-commerce'){
return $this->render('front/'.$typeSite.'/'.$template.'/front/panier.html.twig', [
'slug' => $slug,
'panier' => $panierData,
'total' => $total
]);
}
}
return $this->render('erreur404.html.twig');
}
//----AJOUT DU PANIER-------------------------------------------
#[Route('{slug}/panier/ajouter/{id}', name: 'front.site.panier.ajouter')]
public function ajouterPanier(
int $id,
Request $request,
EntityManagerInterface $em
): Response
{
$session = $request->getSession();
$panier = $session->get('panier', []);
// Vérifie si le produit existe
$produit = $em->getRepository(Produits::class)->find($id);
if (!$produit) {
return new JsonResponse(['error' => 'Produit introuvable'], 404);
}
// Ajouter ou incrémenter la quantité dans le panier
if (isset($panier[$id])) {
$panier[$id]++; // incrémente
} else {
$panier[$id] = 1; // première fois
}
// Sauvegarde le panier en session
$session->set('panier', $panier);
// Prépare les données pour l'affichage
$panierData = [];
$total = 0;
foreach ($panier as $prodId => $quantite) {
$prod = $em->getRepository(Produits::class)->find($prodId);
if (!$prod) continue;
$panierData[] = [
'id' => $prod->getId(),
'nom' => $prod->getNom(),
'prix' => $prod->getPrix(),
'img' => $prod->getImg(),
'quantite' => $quantite,
'total' => (float)$prod->getPrix() * (int)$quantite
];
$total += (float)$prod->getPrix() * (int)$quantite;
}
return new JsonResponse([
'success' => true,
'message' => 'Produit ajouté au panier !',
'panier' => $panierData,
'total' => $total,
'count' => array_sum($panier) // nombre total d'articles
]);
}
//-----SUPPRESSION AVEC AJAX-------------------------------------
#[Route('{slug}/panier/supprimer/{id}', name: 'front.site.panier.supprimer', methods: ['GET'])]
public function supprimerPanier(
int $id,
Request $request,
EntityManagerInterface $em
): JsonResponse {
$session = $request->getSession();
$panier = $session->get('panier', []);
if (isset($panier[$id])) {
unset($panier[$id]);
$session->set('panier', $panier);
return new JsonResponse([
'success' => true,
'message' => 'Produit supprimé du panier avec succès !',
'total' => count($panier)
]);
}
return new JsonResponse([
'success' => false,
'error' => 'Produit non trouvé dans le panier.'
], 404);
}
//----MODIFICATION DE LA QUANTITE DU PANIER-------------------------------------------
#[Route('{slug}/panier/modifier/{id}/{quantite}', name: 'panier_modifier', methods: ['POST'])]
public function modifierQuantite(int $id, int $quantite, Request $request, EntityManagerInterface $entityManager): JsonResponse
{
$session = $request->getSession();
$panier = $session->get('panier', []);
if (!empty($panier[$id])) {
if ($quantite > 0) {
$panier[$id] = $quantite; // on stocke juste la quantité
} else {
unset($panier[$id]);
}
$session->set('panier', $panier);
}
// Recalcul du panier complet pour renvoyer au JS
$panierData = [];
$total = 0;
foreach ($panier as $prodId => $qte) {
$produit = $entityManager->getRepository(Produits::class)->find($prodId);
if (!$produit) continue;
$panierData[] = [
'id' => $produit->getId(),
'nom' => $produit->getNom(),
'prix' => $produit->getPrix(),
'img' => $produit->getImg(),
'quantite' => $qte,
'total' => (float)$produit->getPrix() * (int)$quantite
];
$total += (float)$produit->getPrix() * (int)$quantite;
}
return $this->json([
'success' => true,
'panier' => $panierData,
'total' => $total,
'count' => count($panier)
]);
}
//------FONCTION AJOUT AU FAVOIRS---------------------------------------------
#[Route('{slug}/souhaits', name: 'front.site.souhait')]
public function souhait(
AppExtension $AppExtension,
EntityManagerInterface $entityManager
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$Param = $siteData['Param'];
$slug = $siteData['slug'];
$user = $this->getUser();
//dd($user);
//$useridsite = $user->getSitesid();
if($user == null){
$this->addFlash(
'warning',
'Connectez vous avant d\'effectuer cette opération');
return $this->redirectToRoute('front.site.connexion',['slug' => $slug]);
}
$useridsite = $user->getSitesid();
$queryBuilder = $entityManager->createQueryBuilder();
$queryBuilder
->select('part.nompart','prod.id','prod.nom','prod.slug AS ProdSlug','prod.texte',
'prod.img','prod.prix','prod.stock','cat.nom AS catNom','cat.slug AS catSlug'
)
->from(Souhaits::class, 'souh')
->innerJoin(AccesSites::class, 'acces', 'WITH', 'souh.accesid = acces.id')
->innerJoin(Produits::class, 'prod', 'WITH', 'souh.produitid = prod.id')
->innerJoin(Categories::class, 'cat', 'WITH', 'prod.catid = cat.id')
->innerJoin(Partenaires::class, 'part', 'WITH', 'prod.partid = part.id')
->where('souh.accesid = :accesite')
->setParameter('accesite', $useridsite);
$query = $queryBuilder->getQuery();
$info = $query->getResult();
if (!empty($typeSite) && !empty($template)) {
if($typeSite == 'e-commerce'){
return $this->render('front/'.$typeSite.'/'.$template.'/front/favoris.html.twig', [
'info' => $info,
]);
}
}
return $this->render('erreur404.html.twig');
}
#[Route('{slug}/souhait/ajouter/{id}', name: 'front.site.ajouter.souhait', methods: ['POST'])]
public function ajouter(
int $id,
Request $request,
AppExtension $AppExtension,
ProduitsRepository $produitsRepository,
SouhaitsRepository $souhaitRepository,
EntityManagerInterface $entityManager
): Response {
$siteData = $AppExtension->getGlobals();
$slug = $siteData['slug'];
$siteId = $siteData['siteId'];
$user = $this->getUser();
if (!$user) {
return new JsonResponse(['success' => false, 'message' => 'Veuillez vous connecter.'], 401);
}
$Useridsite = $user->getSitesid();
$getprod = $produitsRepository->find($id);
if (!$getprod) {
return new JsonResponse(['success' => false, 'message' => 'Produit introuvable.'], 404);
}
$souhaitExiste = $souhaitRepository->findOneBy(['produitid' => $id, 'accesid' => $Useridsite]);
if ($souhaitExiste) {
return new JsonResponse(['success' => false, 'message' => 'Cet article est déjà dans votre liste de souhait.']);
}
if ($Useridsite != $siteId) {
return new JsonResponse(['success' => false, 'message' => 'Cette action n\'est pas autorisée.']);
}
$souhaits = new Souhaits();
$souhaits->setAccesId($Useridsite);
$souhaits->setProduitId($id);
$entityManager->persist($souhaits);
$entityManager->flush();
return new JsonResponse(['success' => true, 'message' => 'Ajouté à vos favoris !']);
}
#[Route('{slug}/souhait/supprimer/{id}', name: 'front.site.supprimer.souhait', methods:['POST'])]
public function supprimerSouhait(
int $id,
SouhaitsRepository $souhaitsRepository,
EntityManagerInterface $entityManager
): JsonResponse {
$user = $this->getUser();
if (!$user) {
return new JsonResponse(['success' => false, 'message' => 'Veuillez vous connecter.']);
}
$Useridsite = $user->getSitesid();
$souhait = $souhaitsRepository->findOneBy([
'produitid' => $id,
'accesid' => $Useridsite
]);
if (!$souhait) {
return new JsonResponse(['success' => false, 'message' => 'Cet article n’existe pas dans vos favoris.']);
}
$entityManager->remove($souhait);
$entityManager->flush();
return new JsonResponse(['success' => true, 'message' => 'Article retiré de vos favoris.']);
}
#[Route('{slug}/valider-commande', name: 'front.valide.commande', methods:['POST','GET'])]
public function validerCommande(
Request $request,
AppExtension $AppExtension,
CustomersRepository $customerRepository,
EntityManagerInterface $em)
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$Param = $siteData['Param'];
$slug = $siteData['slug'];
$user = $this->getUser();
if($user == null){
$this->addFlash(
'warning',
'Connectez vous avant d\'effectuer cette opération');
return $this->redirectToRoute('front.site.connexion',['slug' => $slug]);
}
$IdUser = $user->getId();
$idsite = $user->getSitesid();
$session = $request->getSession();
$panier = $session->get('panier', []);
$customer = $customerRepository->findOneBy(array('accesid' => $IdUser));
$contact = $customer->getContact();
if($contact = 'N/A'){
$this->addFlash('warning', 'Le contact de reception n\'est pas activé.');
return $this->redirectToRoute('front.site.panier',['slug' => $slug]);
}
if (empty($panier)) {
$this->addFlash('error', 'Votre panier est vide.');
return $this->redirectToRoute('front.site.panier',['slug' => $slug]);
}
$commande = new Commandes();
$commande->setCodeCommande('CMD-' . date('YmdHis'));
$commande->setUserId($IdUser);
$commande->setStatut('en attente');
// $commande->setDateCommande(new \DateTime());
foreach ($panier as $produit => $quantite) {
$produit = $em->getRepository(Produits::class)->find($produit);
if ($produit) {
$detail = new Detailcmd();
$detail->setProduit($produit->getNom());
$detail->setQuantite($quantite);
$detail->setPrixUnitaire($produit->getPrix());
$detail->setRefCMD($commande->getCodeCommande());
$em->persist($detail);
$em->flush();
}
}
$em->persist($commande);
$em->flush();
$session->remove('panier');
$lienCommande = $this->generateUrl('commande_detail',['slug' => $slug, 'codecommande' => $commande->getCodeCommande()],
\Symfony\Component\Routing\Generator\UrlGeneratorInterface::ABSOLUTE_URL
);
$phone = '225'.$contact;
$adminPhone = $phone;
//dd($adminPhone);
$message = urlencode("Nouvelle commande reçue ✅\n\nCode : {$commande->getCodeCommande()}\nDétails : {$lienCommande}");
$lienWhatsapp = "https://wa.me/{$adminPhone}?text={$message}";
$this->addFlash('success', 'Votre commande a été enregistrée avec succès.');
return $this->redirect($lienWhatsapp);
}
#[Route('{slug}/detail-commande/{codecommande}', name: 'commande_detail')]
public function detail(
string $codecommande,
AppExtension $AppExtension,
EntityManagerInterface $em
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
// $siteId = $siteData['siteId'];
$Param = $siteData['Param'];
// $slug = $siteData['slug'];
$user = $this->getUser();
$IdUser = $user ? $user->getId() : 0;
// $idsite = $user ? $user->getSitesid() : 0;
$queryBuilder = $em->createQueryBuilder();
$queryBuilder
->select('cust.nom','cust.contact','cust.adresse','cmd.codecommande','det.produit',
'det.quantite','det.prixunitaire','det.refcmd','cust.mail','cmd.statut'
)
->from(Detailcmd::class, alias: 'det')
->innerJoin(join: Commandes::class, alias: 'cmd', conditionType: 'WITH', condition: 'det.refcmd = cmd.codecommande')
->innerJoin(join: Customers::class, alias: 'cust', conditionType: 'WITH', condition: 'cmd.userid = cust.accesid')
->where('cmd.codecommande = :codecmd')
->setParameter('codecmd', $codecommande)
->setMaxResults(1);
$query = $queryBuilder->getQuery();
$UserInfo = $query->getOneOrNullResult();
$queryBuilder = $em->createQueryBuilder();
$queryBuilder
->select('cust.nom','cust.contact','cust.adresse','cmd.codecommande','det.produit',
'det.quantite','det.prixunitaire','det.refcmd','cust.mail','cmd.statut'
)
->from(Detailcmd::class, alias: 'det')
->innerJoin(join: Commandes::class, alias: 'cmd', conditionType: 'WITH', condition: 'det.refcmd = cmd.codecommande')
->innerJoin(join: Customers::class, alias: 'cust', conditionType: 'WITH', condition: 'cmd.userid = cust.accesid')
->where('cmd.codecommande = :codecmd')
->setParameter('codecmd', $codecommande);
$query = $queryBuilder->getQuery();
$info = $query->getResult();
if (!$info) {
throw $this->createNotFoundException("Commande non trouvée");
}
if (!$IdUser){
$queryBuilder = $em->createQueryBuilder();
$queryBuilder
->select('cust.nom','cust.contact','cust.adresse','cmd.codecommande','det.produit',
'det.quantite','det.prixunitaire','det.refcmd','cust.mail','cmd.statut'
)
->from(Detailcmd::class, 'det')
->innerJoin(Commandes::class, 'cmd', 'WITH', 'det.refcmd = cmd.codecommande')
->innerJoin(Customers::class, 'cust', 'WITH', 'cmd.userid = cust.accesid')
->where('cmd.codecommande = :codecmd')
->andwhere('cust.accesid = :accesite')
->setParameter('codecmd', $codecommande)
->setParameter('accesite', $IdUser);
$query = $queryBuilder->getQuery();
$commandes = $query->getResult();
return $this->render('front/'.$typeSite.'/'.$template.'/front/detail.html.twig', [
'IdUser' => $IdUser,
'param' => $Param,
'commande' => $info,
'UserInfo' => $UserInfo
]);
}
return $this->render('front/'.$typeSite.'/'.$template.'/front/detail.html.twig', [
'IdUser' => $IdUser,
'param' => $Param,
'commande' => $info,
'UserInfo' => $UserInfo
]);
}
#[Route('{slug}/detail-commande/{codecommande}/{statut}', name: 'front.site.refresh.statut',methods: ['GET'])]
public function refresh(
$statut,
string $codecommande,
AppExtension $AppExtension,
CommandesRepository $commandeRepository,
CustomersRepository $customerRepository,
EntityManagerInterface $em
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$Param = $siteData['Param'];
$slug = $siteData['slug'];
$user = $this->getUser();
$IdUser = $user->getId();
$idsite = $user->getSitesid();
$queryBuilder = $em->createQueryBuilder();
$queryBuilder
->select('cust.nom','cust.contact','cust.adresse','cmd.codecommande',
'cust.mail','cmd.statut'
)
->from(Commandes::class, alias: 'cmd')
->innerJoin(join: Customers::class, alias: 'cust', conditionType: 'WITH', condition: 'cmd.userid = cust.accesid')
->where('cust.accesid = :accesite')
->setParameter('accesite', $IdUser);
$query = $queryBuilder->getQuery();
$UserInfo = $query->getResult();
$queryBuilder = $em->createQueryBuilder();
$queryBuilder
->select('cust.nom','cust.contact','cust.adresse','cmd.codecommande','det.produit',
'det.quantite','det.prixunitaire','det.refcmd','cust.mail','cmd.statut'
)
->from(Detailcmd::class, alias: 'det')
->innerJoin(join: Commandes::class, alias: 'cmd', conditionType: 'WITH', condition: 'det.refcmd = cmd.codecommande')
->innerJoin(join: Customers::class, alias: 'cust', conditionType: 'WITH', condition: 'cmd.userid = cust.accesid')
->where('cust.accesid = :accesite')
->setParameter('accesite', $IdUser);
$query = $queryBuilder->getQuery();
$info = $query->getResult();
if (!$UserInfo) {
throw $this->createNotFoundException("Commande non trouvée");
}
$customer = $customerRepository->findOneBy(array('accesid' => $IdUser));
if($customer){
$commandes = $commandeRepository->findOneBy(array('userid' => $IdUser));
if($commandes){
if($statut == "annuler"){
$commandes->setStatut($statut);
$em->flush();
$this->addFlash('warning','Le compte de l\'utilisateur a été bien désactivé');
return $this->redirectToRoute('commande_detail',['slug' => $slug, 'codecommande' => $codecommande]);
}else if($statut == "annuler"){
$commandes->setStatut($statut);
$em->flush();
$this->addFlash('warning','Le compte de l\'utilisateur a été bien désactivé');
return $this->redirectToRoute('commande_detail',['slug' => $slug, 'codecommande' => $codecommande]);
}else if($statut == "annuler"){
$commandes->setStatut($statut);
$em->flush();
$this->addFlash('warning','Le compte de l\'utilisateur a été bien désactivé');
return $this->redirectToRoute('commande_detail',['slug' => $slug, 'codecommande' => $codecommande]);
}else{
$this->addFlash('warning','Page introuvable');
return $this->redirectToRoute('erreur404.html.twig');
}
}else{
$this->addFlash('warning','Commande introuvable');
return $this->redirectToRoute('erreur404.html.twig');
}
}
return $this->render('front/'.$typeSite.'/'.$template.'/front/detail.html.twig', [
'param' => $Param,
'commande' => $info,
'UserInfo' => $UserInfo
]);
}
#[Route('/test', name: 'front.site.test')]
#[Route('{slug}/test', name: 'front.site.test')]
public function test(): Response
{
dd("test");
// return $this->render('front/e-commerce/T02/front/compte/dashboard.html.twig', [
// 'controller_name' => 'FrontController',
// ]);
}
#[Route('/test', name: 'front.site.test')]
#[Route('{slug}/test', name: 'front.site.test')]
public function test_test(): Response
{
dd("test");
// return $this->render('front/e-commerce/T02/front/compte/dashboard.html.twig', [
// 'controller_name' => 'FrontController',
// ]);
}
#[Route('/{slug}/a-propos', name: 'front.site.apropos')]
public function apropos(
AboutsRepository $aboutRepository,
EntityManagerInterface $entityManager,
AppExtension $AppExtension,
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$Param = $siteData['Param'];
if (!empty($typeSite) && !empty($template)) {
if($typeSite == 'e-commerce'){
$apropos = $entityManager->createQueryBuilder();
$apropos
->select('ap.img','ap.texte','ap.adminsid')
->from(Abouts::class, 'ap')
->where('ap.adminsid = :adminsid')
->setParameter('adminsid', $siteId);
$about = $apropos->getQuery()->getResult();
return $this->render('front/'.$typeSite.'/'.$template.'/front/apropos.html.twig', [
'about' => $about,
]);
}else if($typeSite == 'blog'){
$apropos = $entityManager->createQueryBuilder();
$apropos
->select('ap.img','ap.texte','ap.adminsid')
->from(Abouts::class, 'ap')
->where('ap.adminsid = :adminsid')
->setParameter('adminsid', $siteId);
$about = $apropos->getQuery()->getResult();
return $this->render('front/'.$typeSite.'/'.$template.'/front/about.html.twig', [
'about' => $about,
]);
}
}
return $this->render('erreur404.html.twig');
}
#[Route('/{slug}/contact', name: 'front.site.contact')]
public function contact(
Request $request,
MailerInterface $mailer,
AppExtension $AppExtension
): Response
{
$siteData = $AppExtension->getGlobals();
$template = $siteData['template'];
$typeSite = $siteData['typeSite'];
$siteId = $siteData['siteId'];
$Param = $siteData['Param'];
// Formulaire de contact
$contactForm = $this->createForm(ContactFormType::class);
$contactForm->handleRequest($request);
// Vérifier que les variables nécessaires existent
if (!empty($typeSite) && !empty($template)) {
if ($typeSite === 'e-commerce') {
if ($contactForm->isSubmitted() && $contactForm->isValid()) {
// Récupération et sécurisation des données
$nom = htmlspecialchars($contactForm->get('nom')->getData());
$email = htmlspecialchars($contactForm->get('email')->getData());
$objet = htmlspecialchars($contactForm->get('objet')->getData());
$message = htmlspecialchars($contactForm->get('message')->getData());
// Création du message
$emailMessage = (new Email())
->from($email)
->to('support@cimef-technologies.com')
->subject($objet)
->html("
<h3>Nouveau message de contact</h3>
<p><strong>Nom :</strong> $nom</p>
<p><strong>Email :</strong> $email</p>
<p><strong>Message :</strong><br>$message</p>
");
// Envoi du mail
$mailer->send($emailMessage);
// Message de confirmation
$this->addFlash('success', 'Votre message a été envoyé avec succès.');
// Redirection pour éviter le renvoi du formulaire
return $this->redirectToRoute('front.site.contact', ['slug' => $request->get('slug')]);
}
// Affichage du formulaire
return $this->render("front/{$typeSite}/{$template}/front/contact.html.twig", [
'controller_name' => 'FrontController',
'form' => $contactForm->createView(),
]);
}
elseif ($typeSite === 'blog') {
$contactForm = $this->createForm(ContactFormType::class);
$contactForm->handleRequest($request);
return $this->render("front/{$typeSite}/{$template}/front/contact.html.twig", [
'controller_name' => 'FrontController',
'form' => $contactForm->createView(),
]);
}
}
// Page 404 si le type de site n’existe pas
return $this->render('erreur404.html.twig');
}
#[Route('/test/blog', name: 'front.blog.test')]
public function blog(): Response
{
// dd("test");
// ACCUEIL
return $this->render('front/blog/T01/front/home.html.twig', [
'controller_name' => 'FrontController',
]);
// ARTICLES
// return $this->render('front/blog/T01/front/articles.html.twig', [
// 'controller_name' => 'FrontController',
// ]);
// // A PROPOS
// return $this->render('front/blog/T01/front/about.html.twig', [
// 'controller_name' => 'FrontController',
// ]);
// CONTACT
// return $this->render('front/blog/T01/front/contact.html.twig', [
// 'controller_name' => 'FrontController',
// ]);
}
}