src/Controller/FrontController.php line 163

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Controller\SecurityController;
  4. use App\Controller\FonctionsController;
  5. use App\Controller\StatsController;
  6. use App\Controller\CookieController;
  7. use App\Entity\ModUser;
  8. use App\Repository\ModUserRepository;
  9. use App\Entity\ModPage;
  10. use App\Repository\ModPageRepository;
  11. use App\Entity\ModNewsletter;
  12. use App\Repository\ModNewsletterRepository;
  13. use App\Entity\Devis;
  14. use App\Repository\DevisRepository;
  15. use App\Form\ModUserType;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  21. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use Symfony\Component\Mailer\MailerInterface;
  24. use Symfony\Component\Mime\Email;
  25. use Symfony\Component\Mime\Address;
  26. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  27. use phpDocumentor\Reflection\Project;
  28. use Symfony\Component\OptionsResolver\OptionsResolver;
  29. use Symfony\Component\Form\Extension\Core\Type\TextType;
  30. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  31. use Symfony\Component\Validator\Constraints\NotBlank;
  32. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  33. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  34. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  35. use Symfony\Component\Form\Extension\Core\Type\RadioType;
  36. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  37. class FrontController extends AbstractController
  38. {
  39.     
  40.     public function __construct(ModNewsletterRepository $newsletterRepoModPageRepository $pagesRepoModUserRepository $userRepoUserPasswordHasherInterface $passwordEncoderStatsController $statsFonctionsController $foncEntityManagerInterface $em)
  41.     {
  42.       $this->newsletterRepo $newsletterRepo;
  43.       $this->pagesRepo $pagesRepo;
  44.       $this->userRepo $userRepo;
  45.       $this->passwordEncoder $passwordEncoder;
  46.       $this->stats $stats;
  47.       $this->fonc $fonc;
  48.       $this->em $em;
  49.     }
  50.     /*** Fonctions formulaires *******************************************************/
  51.       // formulaire devis
  52.       public function formDevis(){
  53.         $form $this->createFormBuilder()
  54.         ->add('prenom'TextType::class, [
  55.             'label' => 'Prénom',
  56.             'required'   => false,
  57.             'attr' => [
  58.                 "placeholder" => "Prénom",
  59.             ],
  60.         ])
  61.         ->add('nom'TextType::class, [
  62.             'label' => 'Nom *',
  63.             'required'   => true,
  64.             'constraints' => new NotBlank(),
  65.             'attr' => [
  66.                 "placeholder" => "Nom",
  67.             ],
  68.         ])
  69.         ->add('societe'TextType::class, [
  70.             'label' => 'Société',
  71.             'required'   => false,
  72.             'attr' => [
  73.                 "placeholder" => "Société",
  74.             ],
  75.         ])
  76.         ->add('tel'TextType::class, [
  77.             'label'    => 'Téléphone *',
  78.             'required'   => true,
  79.             'constraints' => new NotBlank(),
  80.             'attr' => [
  81.                 "placeholder" => "Téléphone",
  82.             ],
  83.         ])
  84.         ->add('mailx'EmailType::class, [
  85.             'label' => 'E-mail *',
  86.             'required'   => true,
  87.             'constraints' => new NotBlank(),
  88.             'attr' => [
  89.                 "placeholder" => "E-mail",
  90.             ],
  91.         ])
  92.         ->add('texte'TextareaType::class, [
  93.           'required' => false,
  94.           'label' => 'Présentez votre projet',
  95.           'attr' => ['class' => '''style' => ""]
  96.         ])
  97.         ->getForm();
  98.         return $form;
  99.       }
  100.       // formulaire newsletter
  101.       public function formNewsletter(){
  102.         $form $this->createFormBuilder()
  103.         ->add('mailx'EmailType::class, [
  104.             'label' => 'E-mail *',
  105.             'required'   => true,
  106.             'constraints' => new NotBlank(),
  107.             'attr' => [
  108.                 "placeholder" => "E-mail",
  109.             ],
  110.         ])
  111.         ->getForm();
  112.         return $form;
  113.       }
  114.       public function formTestApi(){
  115.         $form $this->createFormBuilder()
  116.         ->add('tel'TextType::class, [
  117.             'label'    => 'Téléphone *',
  118.             'required'   => true,
  119.             'constraints' => new NotBlank(),
  120.             'attr' => [
  121.                 "placeholder" => "Téléphone",
  122.             ],
  123.         ])
  124.         ->add('save'SubmitType::class, [
  125.             'label' => 'Enregistrer'
  126.             'attr' => [
  127.                 "class" => "btn btn-block btn-primary font-weight-medium auth-form-btn",
  128.             ],
  129.         ])
  130.         ->getForm();
  131.         return $form;
  132.       }
  133.     /*** Fonctions pages *******************************************************/
  134.     /**
  135.      * @Route("/", name="front_index")
  136.      */
  137.     public function front_index(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  138.     {
  139.       // A. statistiques et securité
  140.       $this->stats->enregistreStat("front_index");
  141.       // 3. affichage de la page
  142.       return $this->render('front/index.html.twig', [
  143.         'controller_name' => 'front_index',
  144.       ]);
  145.       
  146.     }
  147.     /**
  148.      * @Route("/testAPIChrono", name="front_testAPIChrono")
  149.      */
  150.     public function front_testAPIChrono(Request $requestMailerInterface $mailer): Response
  151.     {
  152.         // A. statistiques et securité
  153.         $this->stats->enregistreStat("front_testAPIChrono");
  154.         // 2. recupération du formulaire
  155.         $form $this->formTestApi();
  156.         $form->handleRequest($request);
  157.         // 3. affichage de la page
  158.         return $this->render('front/testApi/index.html.twig', [
  159.             'controller_name' => 'front_testAPIChrono',
  160.             'form' => $form->createView(),
  161.         ]);
  162.     }
  163.     
  164.     /**
  165.      * @Route("/erreur404", name="front_404")
  166.      */
  167.     public function front_404(SecurityController $securMailerInterface $mailer): Response
  168.     {
  169.       // 1. affichage de la page
  170.       return $this->render('front/index.html.twig', [
  171.         'controller_name' => 'front_404',
  172.       ]);
  173.     }
  174.     /*** Fonctions test *******************************************************/
  175.       /**
  176.        * @Route("/test/q1", name="front_test")
  177.        */
  178.       public function front_test(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  179.       {
  180.         
  181.         // A. statistiques et securité
  182.         $this->stats->enregistreStat("front_test");
  183.         // 3. affichage de la page
  184.         return $this->render('front/test/question1.html.twig', [
  185.           'controller_name' => 'front_test',
  186.         ]);
  187.         
  188.       }
  189.       /**
  190.        * @Route("/test/q2", name="front_test2")
  191.        */
  192.       public function front_test2(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  193.       {
  194.         // A. statistiques et securité
  195.         $this->stats->enregistreStat("front_test2");
  196.         // 3. affichage de la page
  197.         return $this->render('front/test/question2.html.twig', [
  198.           'controller_name' => 'front_test2',
  199.         ]);
  200.         
  201.       }
  202.       /**
  203.        * @Route("/test/q3", name="front_test3")
  204.        */
  205.       public function front_test3(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  206.       {
  207.         // A. statistiques et securité
  208.         $this->stats->enregistreStat("front_test3");
  209.         // 3. affichage de la page
  210.         return $this->render('front/test/question3.html.twig', [
  211.           'controller_name' => 'front_test3',
  212.         ]);
  213.         
  214.       }
  215.       /**
  216.        * @Route("/test/q4", name="front_test4")
  217.        */
  218.       public function front_test4(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  219.       {
  220.         // A. statistiques et securité
  221.         $this->stats->enregistreStat("front_test4");
  222.         // 3. affichage de la page
  223.         return $this->render('front/test/question4.html.twig', [
  224.           'controller_name' => 'front_test4',
  225.         ]);
  226.         
  227.       }
  228.       /**
  229.        * @Route("/test/q5", name="front_test5")
  230.        */
  231.       public function front_test5(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  232.       {
  233.         // A. statistiques et securité
  234.         $this->stats->enregistreStat("front_test5");
  235.         // 3. affichage de la page
  236.         return $this->render('front/test/question5.html.twig', [
  237.           'controller_name' => 'front_test5',
  238.         ]);
  239.         
  240.       }
  241.       /**
  242.        * @Route("/test/q6", name="front_test6")
  243.        */
  244.       public function front_test6(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  245.       {
  246.         // A. statistiques et securité
  247.         $this->stats->enregistreStat("front_test6");
  248.         // 3. affichage de la page
  249.         return $this->render('front/test/question6.html.twig', [
  250.           'controller_name' => 'front_test6',
  251.         ]);
  252.         
  253.       }
  254.     /*** Fonctions test produits *******************************************************/
  255.       /**
  256.        * @Route("/produit/application", name="front_produit_application")
  257.        */
  258.       public function front_produit_application(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  259.       {
  260.         if (isset($_GET['test'])){
  261.           $test $_GET['test'];
  262.         }
  263.         else {
  264.           $test '';
  265.         }
  266.         // A. statistiques et securité
  267.         $this->stats->enregistreStat("front_produit_application");
  268.         // 3. affichage de la page
  269.         return $this->render('front/produit/application.html.twig', [
  270.           'controller_name' => 'front_produit_application',
  271.           'test' => $test,
  272.         ]);
  273.         
  274.       }
  275.       /**
  276.        * @Route("/produit/boutique", name="front_produit_boutique")
  277.        */
  278.       public function front_produit_boutique(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  279.       {
  280.         if (isset($_GET['test'])){
  281.           $test $_GET['test'];
  282.         }
  283.         else {
  284.           $test '';
  285.         }
  286.         // A. statistiques et securité
  287.         $this->stats->enregistreStat("front_produit_application");
  288.         // 3. affichage de la page
  289.         return $this->render('front/produit/boutique.html.twig', [
  290.           'controller_name' => 'front_produit_boutique',
  291.           'test' => $test,
  292.         ]);
  293.         
  294.       }
  295.       /**
  296.        * @Route("/produit/landingpage", name="front_produit_landingpage")
  297.        */
  298.       public function front_produit_landingpage(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  299.       {
  300.         if (isset($_GET['test'])){
  301.           $test $_GET['test'];
  302.         }
  303.         else {
  304.           $test '';
  305.         }
  306.         // A. statistiques et securité
  307.         $this->stats->enregistreStat("front_produit_landingpage");
  308.         // 3. affichage de la page
  309.         return $this->render('front/produit/landingpage.html.twig', [
  310.           'controller_name' => 'front_produit_landingpage',
  311.           'test' => $test,
  312.         ]);
  313.         
  314.       }
  315.       /**
  316.        * @Route("/produit/microsite", name="front_produit_microsite")
  317.        */
  318.       public function front_produit_microsite(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  319.       {
  320.         if (isset($_GET['test'])){
  321.           $test $_GET['test'];
  322.         }
  323.         else {
  324.           $test '';
  325.         }
  326.         // A. statistiques et securité
  327.         $this->stats->enregistreStat("front_produit_microsite");
  328.         // 3. affichage de la page
  329.         return $this->render('front/produit/microsite.html.twig', [
  330.           'controller_name' => 'front_produit_microsite',
  331.           'test' => $test,
  332.         ]);
  333.         
  334.       }
  335.       /**
  336.        * @Route("/produit/blog", name="front_produit_blog")
  337.        */
  338.       public function front_produit_blog(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  339.       {
  340.         if (isset($_GET['test'])){
  341.           $test $_GET['test'];
  342.         }
  343.         else {
  344.           $test '';
  345.         }
  346.         // A. statistiques et securité
  347.         $this->stats->enregistreStat("front_produit_blog");
  348.         // 3. affichage de la page
  349.         return $this->render('front/produit/blog.html.twig', [
  350.           'controller_name' => 'front_produit_blog',
  351.           'test' => $test,
  352.         ]);
  353.         
  354.       }
  355.       /**
  356.        * @Route("/produit/website", name="front_produit_website")
  357.        */
  358.       public function front_produit_website(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  359.       {
  360.         if (isset($_GET['test'])){
  361.           $test $_GET['test'];
  362.         }
  363.         else {
  364.           $test '';
  365.         }
  366.         // A. statistiques et securité
  367.         $this->stats->enregistreStat("front_pfront_produit_websiteroduit_blog");
  368.         // 3. affichage de la page
  369.         return $this->render('front/produit/website.html.twig', [
  370.           'controller_name' => 'front_produit_website',
  371.           'test' => $test,
  372.         ]);
  373.         
  374.       }
  375.       /**
  376.        * @Route("/produit/portfolio", name="front_produit_portfolio")
  377.        */
  378.       public function front_produit_portfolio(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  379.       {
  380.         if (isset($_GET['test'])){
  381.           $test $_GET['test'];
  382.         }
  383.         else {
  384.           $test '';
  385.         }
  386.         // A. statistiques et securité
  387.         $this->stats->enregistreStat("front_produit_portfolio");
  388.         // 3. affichage de la page
  389.         return $this->render('front/produit/portfolio.html.twig', [
  390.           'controller_name' => 'front_produit_portfolio',
  391.           'test' => $test,
  392.         ]);
  393.         
  394.       }
  395.       /**
  396.        * @Route("/demande_de_devis", name="front_devis")
  397.        */
  398.       public function front_devis(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  399.       {
  400.         if (isset($_GET['produit'])){
  401.           $produit $_GET['produit'];
  402.         }
  403.         else {
  404.           $produit '';
  405.         }
  406.         // A. statistiques et securité
  407.         $this->stats->enregistreStat("front_devis");
  408.         // on instancie l'objet Devis
  409.         $newDevis = new Devis();
  410.         // on place le formulaire
  411.         $formDevis $this->formDevis($newDevis);
  412.         // 3. affichage de la page
  413.         return $this->render('front/produit/devis.html.twig', [
  414.           'controller_name' => 'front_devis',
  415.           'produit' => $produit,
  416.           'formDevis' => $formDevis->createView(),
  417.         ]);
  418.         
  419.       }
  420.       /**
  421.        * @Route("/demande_de_devis/traitement", name="devis_traitement")
  422.        */
  423.       public function devis_traitement(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  424.       {
  425.           // A. statistiques et securité
  426.           $this->stats->enregistreStat("devis_traitement");
  427.           // recupere datas de l'ajax
  428.           $form "peugeot_demandeDevis024_02";
  429.           $prenom $_POST["prenom"];
  430.           $nom $_POST["nom"];
  431.           $societe $_POST["societe"];
  432.           $numero $_POST["numero"];
  433.           $emailx $_POST["emailx"];
  434.           $texte $_POST["texte"];
  435.         // on instancie l'objet Devis
  436.         $newDevis = new Devis();
  437.         // rempli l'objet
  438.         $newDevis->setNom($nom);
  439.         $newDevis->setPrenom($prenom);
  440.         $newDevis->setSociete($societe);
  441.         $newDevis->setTel($numero);
  442.         $newDevis->setMailx($emailx);
  443.         $newDevis->setTexte($texte);
  444.           // prise en compte de l'objet
  445.           $this->em->persist($newDevis);
  446.           // inscription dans la base
  447.           $this->em->flush();
  448.           // preparation à l envoi un email à l inscrit
  449.           $messageClient "Bonjour, votre message est en cours de traitement. Un conseiller commercial va prendre contact avec vous dans les plus brefs délais afin d'afiner au mieux le devis demandé.";
  450.           $contextClient = [
  451.               'titreDansLeMail' => "Demande de devis Webgiciel",
  452.           ];
  453.           // envoi mail client
  454.           $emailClient = (new TemplatedEmail())
  455.               ->from($this->from)
  456.               ->to(new Address($emailx))
  457.               ->subject("Demande de devis Webgiciel")
  458.               ->text($messageClient)
  459.               ->htmlTemplate($this->templateMail_Client)
  460.               ->context($contextClient)
  461.           ;
  462.           $mailer->send($emailClient);
  463.           // preparation à l envoi un email à l admin
  464.           $messageAdmin "Bonjour, ".$nom." vient de faire une demande de devis. ";
  465.           $contextAdmin = [
  466.             'titreDansLeMail' => "Une demande de devis vient d'arrivée",
  467.             'prenom' => $prenom,
  468.             'nom' => $nom,
  469.             'societe' => $societe,
  470.             'numero' => $numero,
  471.             'emailx' => $emailx,
  472.             'texte' => $texte,
  473.           ];
  474.           // envoi mail admin
  475.           $emailAdmin = (new TemplatedEmail())
  476.               ->from($this->from)
  477.               ->to(new Address($this->mailStef))
  478.               ->subject("Une demande de devis vient d'arrivée")
  479.               ->text($messageAdmin)
  480.               ->htmlTemplate($this->templateMail_Devis)
  481.               ->context($contextAdmin)
  482.           ;
  483.           $mailer->send($emailAdmin);
  484.           //
  485.           return $this->json([
  486.             'msg' => "ok"
  487.         ]);
  488.       } 
  489.       /**
  490.        * @Route("/demande_de_devis/ok", name="devis_ok")
  491.        */
  492.       public function devis_ok(TokenStorageInterface $tokenStorageSecurityController $securMailerInterface $mailer): Response
  493.       {
  494.           // A. statistiques et securité
  495.           $this->stats->enregistreStat("devis_ok");
  496.         // enregistre la visite de la page
  497.         $this->fonc->visiteCompteur($this->pathStats"front_devis");
  498.         // 3. affichage de la page
  499.         return $this->render('front/produit/devis_ok.html.twig', [
  500.           'controller_name' => 'front_devis',
  501.           'user' => $user,
  502.         ]);
  503.       }
  504.     /*** Fonctions end *******************************************************/
  505. }