src/Controller/MainController.php line 161

  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 Knp\Component\Pager\PaginatorInterface;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use App\Repository\BusinessInformationRepository;
  9. use App\Repository\BannerRepository;
  10. use App\Repository\LogoPARepository;
  11. use App\Repository\BlogRepository;
  12. use App\Repository\BusinessCategoriesRepository;
  13. use App\Repository\BusinessCategoryGroupRepository;
  14. use App\Repository\CategoryBannerVRepository;
  15. use App\Entity\Company;
  16. use App\Repository\CompanyRepository;
  17. //use App\Repository\CategoryBannerVRepository;
  18. use App\Form\CompanyType;
  19. use Doctrine\Persistence\ManagerRegistry as PersistenceManagerRegistry;
  20. //use Doctrine\ORM\EntityManagerInterface;
  21. use Doctrine\ORM\EntityManagerInterface;
  22. use App\Service\SeoBusinessGenerator;
  23. class MainController extends AbstractController
  24. {
  25. #[Route('/', name: 'app_main')]
  26. public function index(Request $request, BusinessInformationRepository $repository, BlogRepository $blog_repository, LogoPARepository $logo_repository, BannerRepository $banner_repository, PaginatorInterface $paginator): Response
  27. {
  28. // Récupération des statistiques dynamiques
  29. $totalBusinesses = $repository->countAllBusinesses();
  30. $totalWilayas = $repository->countDistinctWilayas();
  31. // 🌟 Récupération du chiffre exact depuis le fichier .env
  32. $googleClicks = $_ENV['MARKETING_GOOGLE_CLICKS'] ?? 18133;
  33. //show banner
  34. $banner= $banner_repository->findBy( ['active' => true]);
  35. //client a la une
  36. $business=$paginator->paginate($repository->findBy(
  37. ['alaune' => true]
  38. ),
  39. $request->query->getInt('page', 1),
  40. 20);
  41. //Logo Page d'Accueil
  42. $logo= $logo_repository->findBy( ['active' => true]);
  43. //Blog Page d'Accueil
  44. $blog= $blog_repository->findBy( ['active' => true]);
  45. return $this->render('main/index.html.twig',[
  46. 'total_businesses' => $totalBusinesses,
  47. 'total_wilayas' => $totalWilayas,
  48. 'google_clicks' => $googleClicks,
  49. "business"=>$business,
  50. "banners"=>$banner,
  51. "logos"=>$logo,
  52. "blogs"=>$blog,
  53. ]);
  54. }
  55. // Fonction ajouter entreprise
  56. #[Route('/ajouter', name: 'ajouter')]
  57. public function ajouter(Request $request, PersistenceManagerRegistry $doctrine) :Response
  58. {
  59. $em = $doctrine->getManager();
  60. $company=new Company();
  61. //$email=$company->getEmail();
  62. $form = $this->createForm(CompanyType::class, $company);
  63. $form->handleRequest($request);
  64. if ($form->isSubmitted() && $form->isValid()){
  65. $em->persist($company);
  66. $em->flush();
  67. // send mail
  68. $this->addFlash('success', 'Ajout avec succes');
  69. return $this->redirectToRoute('ajouter');
  70. }
  71. return $this->render('main/ajouter_entreprise.html.twig',[
  72. 'company'=>$company,
  73. 'form'=>$form->createView()
  74. ]);
  75. }
  76. //SHOW CUSTMER DETAIL
  77. #[Route('/c/{id}-{slug}', name: 'customer.show')]
  78. public function show($id, $slug,Request $request, BusinessInformationRepository $repository, SeoBusinessGenerator $seo) :Response
  79. {
  80. $business = $repository->find($id);
  81. // dd($business);
  82. $seoContent = $seo->generateSeoContent($business);
  83. return $this->render('main/showcustomerdetail.html.twig',[
  84. 'business' => $business ,
  85. 'seoContent' => $seoContent,
  86. ]);
  87. //dd($seoContent);
  88. }
  89. //Recherche par secteur d'activité
  90. // Recherche par secteur d'activité
  91. #[Route('/s/{id}-{slug}', name: 'customer.secteur')]
  92. public function SecteurActivity(
  93. PaginatorInterface $paginator,
  94. Request $request,
  95. $id,
  96. $slug,
  97. BusinessCategoriesRepository $businesscat,
  98. BusinessCategoryGroupRepository $secteur,
  99. CategoryBannerVRepository $banner_repository
  100. ): Response {
  101. $sec = $secteur->find($id);
  102. $banner = $banner_repository->find($id);
  103. $group_id = $id;
  104. // 1. Récupérer toutes les rubriques liées à ce secteur pour la grille interactive
  105. // On les trie par nom de A à Z
  106. $rubriques = $businesscat->findBy(
  107. ['group_id' => $group_id],
  108. ['business_category_name' => 'ASC'] // Ajustez 'nom' selon le nom réel de votre colonne dans l'entité BusinessCategories
  109. );
  110. // 2. Votre pagination actuelle (Liste des clients du secteur)
  111. $business = $paginator->paginate(
  112. $businesscat->findBy(
  113. ['group_id' => $group_id],
  114. ['statut' => 'DESC']
  115. ),
  116. $request->query->getInt('page', 1),
  117. 45
  118. );
  119. // 3. Envoi des variables au template existant
  120. return $this->render('main/showcustomersecteur.html.twig', [
  121. "business" => $business,
  122. "banner" => $banner,
  123. "secteur" => $sec,
  124. "rubriques" => $rubriques, // Nouvelle variable passée à Twig
  125. ]);
  126. }
  127. // Liste client de la rubriques
  128. #[Route('/detail/{id}-{slug}', name: 'customer.detail.rubrique') ]
  129. public function BusinessDetailRubrique(PaginatorInterface $paginator, Request $request, $id, $slug, BusinessInformationRepository $repository, BusinessCategoriesRepository $repository2, CategoryBannerVRepository $banner_v ) :Response
  130. {
  131. //$sec_id=$idsec;
  132. $id_sec = $request->query->get('idsec'); // idsec Récupère la valeur après le '?'
  133. // dd($id_sec); // Ne sera plus null
  134. // dd($sec_id);
  135. $category=$id;
  136. $category = (string)$id;
  137. $category_name=$slug;
  138. //show seo
  139. $seo= $repository2->findBy( ['id' => $id]);
  140. $banner_rub= $banner_v->findBy( ['businessCategoryGroup' => $id_sec]);
  141. //dd($banner_rub);
  142. // $article=$seo;
  143. //$banner=$bv;
  144. // dd($seo);
  145. // echo $category;
  146. // $business = $this->repository->findCategory($category);
  147. // $repository = $this->getDoctrine()->getRepository(BusinessInformation::class);
  148. /* $business=$paginator->paginate($repository->findBy(
  149. ['categories' => $category] ),
  150. $request->query->getInt('page', 1),
  151. 9);
  152. */
  153. $business=$paginator->paginate($repository->findCategory($category),
  154. $request->query->getInt('page', 1),
  155. 45);
  156. // dump($business);
  157. return $this->render('main/showcustomers.html.twig',[
  158. "business"=>$business,
  159. "category_name" =>$category_name,
  160. "article" =>$seo,
  161. "bannerv"=>$banner_rub
  162. ] );
  163. // return new Response( '<html><body>Lucky number: '.$category.'</body></html>' );
  164. }
  165. //Static Routes
  166. #[Route('/qui-sommes-nous', name: 'app_about')]
  167. public function about(): Response
  168. {
  169. return $this->render('main/about.html.twig');
  170. }
  171. #[Route('/nos-offres', name: 'app_nos_offres')]
  172. public function offre(): Response
  173. {
  174. return $this->render('main/offre.html.twig');
  175. }
  176. #[Route('/appel-offres', name: 'app_appel_offres')]
  177. public function appel(): Response
  178. {
  179. return $this->render('main/appel_offre.html.twig');
  180. }
  181. #[Route('/tout-secteur', name: 'app_secteur')]
  182. public function secteur(): Response
  183. {
  184. return $this->render('main/secteurs.html.twig');
  185. }
  186. #[Route('/blogs', name: 'app_blogs')]
  187. public function blog(BlogRepository $blog_repository): Response
  188. {
  189. $blog=$blog_repository->findAll();
  190. return $this->render('main/blogs.html.twig',
  191. [
  192. "blogs"=>$blog
  193. ]);
  194. }
  195. }