src/Controller/Front/FrontHomeController.php line 36

Open in your IDE?
  1. <?php
  2. namespace Acme\SudcmsBundle\Controller\Front;
  3. use Acme\SudcmsBundle\Repository\ActualiteRepository;
  4. use Acme\SudcmsBundle\Repository\AutopromoRepository;
  5. use Acme\SudcmsBundle\Repository\CatalogRepository;
  6. use Acme\SudcmsBundle\Repository\EcoProductsRepository;
  7. use Acme\SudcmsBundle\Repository\FlashMessageRepository;
  8. use Acme\SudcmsBundle\Repository\FormAdressesRepository;
  9. use Acme\SudcmsBundle\Repository\SiteReferencementRepository;
  10. use Acme\SudcmsBundle\Repository\SiteRepository;
  11. use Acme\SudcmsBundle\Service\BrevoService;
  12. use Acme\SudcmsBundle\Service\MailerService;
  13. use Acme\SudcmsBundle\Service\OtideaUtils;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Session\Session;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Twig\Environment;
  20. use const SITE_NAME;
  21. class FrontHomeController extends AbstractController
  22. {
  23.     private $twig false;
  24.     private $session;
  25.     public function __construct()
  26.     {
  27.         $this->session = new Session();
  28.     }
  29.     #[Route(path'/'name'front_home')]
  30.     public function index(Request $requestEnvironment $twigAutopromoRepository $autopromoRepositoryOtideaUtils $otideaUtilsFlashMessageRepository $flashMessageSiteReferencementRepository $repoAccRefEcoProductsRepository $repoProdCatalogRepository $repoCatalogActualiteRepository $repoActuSiteRepository $siteRepository)
  31.     {
  32.         $this->twig $twig;
  33.         // use to delete old data in ContactHistorique for ex.
  34.         $otideaUtils->deleteOldData();
  35.         $accRef $repoAccRef->findOneBy(['site_lang' => $request->getLocale(), 'site_uid' => CURRENT_SITE_ID]);
  36.         if (is_null($accRef)) {
  37.             $accRef $repoAccRef->findOneBy(['site_uid' => $this->session->get('admin_site_uid'), 'site_lang' => 'fr']);
  38.         }
  39.         //autopromo
  40.         $tabPromoZone1 $tabPromoZone2 $tabPromoZone3 null;
  41.         $autoPromos $autopromoRepository->findBy(array("isOnline" => 1'siteLang' => $request->getLocale(), 'siteUid' => CURRENT_SITE_ID), array('autopromoOrder' => 'ASC'));
  42.         $productsBestSellers $repoProd->findBestSellerHome();
  43.         $productsNews $repoProd->findNouveauteHome();
  44.         foreach ($autoPromos as $auto) {
  45.             if ($auto->getSection() == 1)
  46.                 $tabPromoZone1[] = $auto;
  47.             elseif ($auto->getSection() == 2)
  48.                 $tabPromoZone2[] = $auto;
  49.             elseif ($auto->getSection() == 3)
  50.                 $tabPromoZone3[] = $auto;
  51.         }
  52.         $verifVideo $this->verifVideo();
  53.         $flashInfo $flashMessage->findBy(array('flash_enligne' => 1'site_lang' => $request->getLocale(), 'site_uid' => CURRENT_SITE_ID), array('flash_ordre' => 'ASC'));
  54.         $limitActu $siteRepository->findOneBy(['id' => CURRENT_SITE_ID]);
  55.         $rentCatalog $repoCatalog->findByCatAllCatalog(['site_lang' => $request->getLocale(), 'site_uid' => CURRENT_SITE_ID'categorie' => 0'isSell' => 2], ['cat_date_publication' => 'DESC']);
  56.         return $this->render('front/front_home/index.html.twig', [
  57.             'autoPromoList' => $autoPromos,
  58.             'rentCatalog' => $rentCatalog,
  59.             'tabPromoZone1' => $tabPromoZone1,
  60.             'tabPromoZone2' => $tabPromoZone2,
  61.             'tabPromoZone3' => $tabPromoZone3,
  62.             'actualites' => $repoActu->findByCatAllActu(['site_lang' => $request->getLocale(), 'site_uid' => CURRENT_SITE_ID'limit' => 3'categorie' => 0]),
  63.             'flashInfo' => $flashInfo,
  64.             'verifVideo' => $verifVideo,
  65.             'accRef' => $accRef,
  66.             'productsNews' => $productsNews,
  67.             'productsBestSellers' => $productsBestSellers,
  68.             'isHome' => true,
  69.         ]);
  70.     }
  71.     #[Route(path'/axAddNewsletter'name'axAddNewsletter')]
  72.     public function axAddNewsletter(Request $requestBrevoService $brevoService)
  73.     {
  74.         if (!$request->isXmlHttpRequest()) {
  75.             return new JsonResponse(['status' => false]);
  76.         }
  77.         $rgpd filter_var($request->get('rgpd'), FILTER_VALIDATE_BOOLEAN);
  78.         $mail $request->get('mail');
  79.         $flashMsg '';
  80.         // Validation de l'e-mail avec une expression régulière
  81.         if (!filter_var($mailFILTER_VALIDATE_EMAIL)) {
  82.             $flashMsg 'Veuillez saisir une adresse e-mail valide.';
  83.             return new JsonResponse(['status' => false'flashMsg' => $flashMsg]);
  84.         }
  85.         // Filtrage supplémentaire pour restreindre les caractères autorisés
  86.         if (preg_match('/[^a-zA-Z0-9@._-]/'$mail)) {
  87.             $flashMsg 'L\'adresse e-mail ne doit contenir que des lettres, des chiffres, et les caractères @, ., - et _.';
  88.             return new JsonResponse(['status' => false'flashMsg' => $flashMsg]);
  89.         }
  90.         if (!$rgpd) {
  91.             $flashMsg 'Veuillez accepter les conditions.';
  92.             return new JsonResponse(['status' => false'flashMsg' => $flashMsg]);
  93.         }
  94.         try {
  95.             if ($mail) {
  96.                 $brevoService->addReplyTo($mail);
  97.                 $flashMsg 'Vous avez été ajouté avec succès à notre newsletter.';
  98.             } else {
  99.                 $flashMsg "Veuillez remplir tous les champs requis.";
  100.             }
  101.             return new JsonResponse(['status' => true'flashMsg' => $flashMsg]);
  102.         } catch (\Exception $e) {
  103.             if ($e->getCode() === 400 && str_contains($e->getMessage(), 'Invalid email address')) {
  104.                 $flashMsg 'Veuillez saisir une adresse e-mail valide.';
  105.             } elseif (str_contains($e->getMessage(), 'missing_parameter')) {
  106.                 $flashMsg 'Veuillez remplir tous les champs requis.';
  107.             } elseif (str_contains($e->getMessage(), 'Contact already exist')) {
  108.                 $flashMsg 'Vous êtes déjà inscrit à notre newsletter.';
  109.             } else {
  110.                 $flashMsg 'Une erreur est survenue, veuillez réessayer ultérieurement.';
  111.             }
  112.             return new JsonResponse(['status' => false'flashMsg' => $flashMsg]);
  113.         }
  114.     }
  115.     public function verifVideo()
  116.     {
  117.         $exist false;
  118.         $directory[] = $this->getParameter("upload_directory_" CURRENT_SITE_ID) . '/video_accueil';
  119.         foreach ($directory as $dir) {
  120.             if (!file_exists($dir)) {
  121.                 mkdir($dir755);
  122.             }
  123.         }
  124. //        $allFiles = scandir($this->getParameter("upload_directory") . '/video_accueil');
  125.         $allFiles scandir($this->getParameter("upload_directory_" CURRENT_SITE_ID) . '/video_accueil');
  126.         $files array_diff($allFiles, array('.''..'));
  127.         foreach ($files as $file) {
  128.             if ($file == 'home-loop.mp4') {
  129.                 $exist true;
  130.             }
  131.         }
  132.         return $exist;
  133.     }
  134.     public function emailExemple(MailerService $mailerServiceFormAdressesRepository $adressesRepository)
  135.     {
  136.         $files = array();
  137.         $mailerService->fromEmail "no-reply@domaine.fr";
  138.         $mailerService->fromName SITE_NAME;
  139.         $mailerService->subject "Validation de votre commande";
  140.         $allRecipients = [];
  141.         $recipients $adressesRepository->findBy(["form" => "contact"]);
  142.         if (sizeof($recipients) > 0) {
  143.             foreach ($recipients as $element) {
  144.                 $allRecipients[] = [
  145.                     "nom" => $element->getNom(),
  146.                     "prenom" => $element->getPrenom(),
  147.                     "email" => $element->getEmail(),
  148.                     "type" => $element->getType()
  149.                 ];
  150.             }
  151.         }
  152.         $htmlContent $this->renderView('layouts_emails/validation_commande.html.twig', [
  153.             'articles' => '',
  154.         ]);
  155.         $mailerService->sendMail($allRecipients$htmlContent$files);
  156.     }
  157. }