src/Controller/Contact/ContactController.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Contact;
  3. use App\Entity\Adresses\Adresse;
  4. use App\Entity\Articles\Article;
  5. use App\Entity\FO\Societe;
  6. use App\Entity\GestionComerciale\Commande;
  7. use App\Entity\Clients\HistoriqueClient;
  8. use App\Entity\GestionComerciale\StatutCommande;
  9. use App\Form\Contact\ContactType;
  10. use App\Library\Datatable\Util\Datatable;
  11. use App\Library\Uploader\Services\FileUploader;
  12. use App\Model\GestionCommerciale\TypeDocumentCommercial;
  13. use App\Security\Voter\EntityVoter;
  14. use App\Service\Articles\ArticleCategorieService;
  15. use App\Service\Articles\ArticleService;
  16. use App\Service\GestionComerciale\EmailService;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use DTS\eBaySDK\FileTransfer\Types\Data;
  19. use JMS\Serializer\SerializerBuilder;
  20. use Knp\Component\Pager\PaginatorInterface;
  21. use Knp\Snappy\Pdf;
  22. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\JsonResponse;
  25. use Symfony\Component\HttpFoundation\Response;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  28. use Symfony\Component\Validator\Validator\ValidatorInterface;
  29. use Symfony\Contracts\Translation\TranslatorInterface;
  30. use Symfony\Component\Validator\Validation;
  31. use Symfony\Component\Validator\Constraints\Email;
  32. use Symfony\Component\HttpClient\HttpClient;
  33. use Symfony\Component\Form\FormError;
  34. class ContactController extends AbstractController
  35. {
  36.     /**
  37.      * @Route("/nous-contacter", name="dtc_contact")
  38.      */
  39.     public function ContactAction(Request$requestEntityManagerInterface $em,TranslatorInterface $translator,ValidatorInterface $validator,EmailService $emailService)
  40.     {
  41.         $user $this->getUser();
  42.         $historiqueClient = new HistoriqueClient();
  43.         $form   $this->createForm(ContactType::class, $historiqueClient);
  44.         $errors = [];
  45.         $form->handleRequest($request);
  46.         if ($form->isSubmitted()) {
  47.             if ($form->isValid()) {
  48.                 // ==============================
  49.                 // Vérification Cloudflare Turnstile
  50.                 // ==============================
  51.                 $token $request->request->get('cf-turnstile-response');
  52.                 if (empty($token)) {
  53.                     $this->addFlash('error''Veuillez valider la vérification anti-spam.');
  54.                     return $this->redirectToRoute('dtc_contact');
  55.                 }
  56.                 $client HttpClient::create();
  57.                 $response $client->request(
  58.                     'POST',
  59.                     'https://challenges.cloudflare.com/turnstile/v0/siteverify',
  60.                     [
  61.                         'body' => [
  62.                             'secret'   => $_ENV['TURNSTILE_SECRET_KEY'],
  63.                             'response' => $token,
  64.                             'remoteip' => $request->getClientIp(),
  65.                         ],
  66.                     ]
  67.                 );
  68.                 $result $response->toArray();
  69.                 if (!$result['success']) {
  70.                     $this->addFlash('error''La vérification anti-spam a échoué.');
  71.                     return $this->redirectToRoute('dtc_contact');
  72.                 }
  73.                 $reference $form->get('reference')->getData();
  74.                 $sujet $form->get('sujet')->getData();
  75.                 $prenom $form->get('prenom')->getData();
  76.                 $nom $form->get('nom')->getData();
  77.                 $email $form->get('email')->getData();
  78.                 $telephone $form->get('telephone')->getData();
  79.                 $message $form->get('message')->getData();
  80.                 $rendu_message     $this->renderView('FO/Email/contact.html.twig', ["prenom"=>$prenom,"sujet"=>$sujet,"nom"=>$nom,"email"=>$email,"message"=>$message]);
  81.                 $societe $em->getRepository(Societe::class)->find(1);
  82.                 if (is_object($societe)) {
  83.                     $emailDestination $societe->getEmail();
  84.                     if($societe->getMailTest()) $emailDestination $societe->getEmailTest();
  85.                 } else {
  86.                     $emailDestination 'thomas@noogaa.com';
  87.                 }
  88.                 $prefixe_sujet "";
  89.                 if($sujet=="demande_information")  $prefixe_sujet "[DEMANDE INFORMATION] ";
  90.                 else if($sujet=="support_technique"$prefixe_sujet "[SUPPORT TECHNIQUE] ";
  91.                 else if($sujet=="partenariat"$prefixe_sujet "[PARTENARIAT] ";
  92.                 else if($sujet=="autre"$prefixe_sujet "[AUTRE] ";
  93.                 $titre_email $prefixe_sujet."Formulaire de contact";
  94.                 $donneesEmail=["destinataires"=>[$emailDestination],"message"=>$rendu_message,"titre"=>$titre_email];
  95.                 $errors_envoi $emailService->envoyerEmailClassique($donneesEmail);
  96.                 $em->persist($historiqueClient);
  97.                 $em->flush($historiqueClient);
  98.                 $this->addFlash('notice'$translator->trans('Message envoyé avec succès !'));
  99.                 return $this->redirectToRoute('dtc_contact');
  100.             }
  101.             else {
  102.                 $errors $validator->validate($historiqueClient);
  103.             }
  104.         }
  105.         return $this->render('Contact/Contact/contact.html.twig',['form' => $form->createView(), 'errors' => $errors,'turnstile_site_key' => $_ENV['TURNSTILE_SITE_KEY']]);
  106.     }
  107.     /**
  108.      * @Route("/contact", name="dtc_contact_modal")
  109.      */
  110.     public function ContactModalAction(Request$requestEntityManagerInterface $em,TranslatorInterface $translator,ValidatorInterface $validator,EmailService $emailService)
  111.     {
  112.         $titre_modal "Nous contacter";
  113.         $article $request->query->get('article');
  114.         $devis $request->query->get('devis');
  115.         $commande $request->query->get('commande');
  116.         $api $request->query->get('api');
  117.         $valider $request->query->get('valider');
  118.         $historiqueClient = new HistoriqueClient();
  119.         if($devis != "") {
  120.             $devis_obj $em->getRepository(Commande::class)->find($devis);
  121.             $historiqueClient->setMessage("Demande d'informations pour le devis : ".$devis_obj->getReference()."\n");
  122.             if($valider != "") {
  123.                 $titre_modal "Commande Devis ".$devis_obj->getReference();
  124.                 $historiqueClient->setMessage("Validation du devis ".$devis_obj->getReference()."\n");
  125.             }
  126.         }
  127.         else if($article != "") {
  128.             $article_obj $em->getRepository(Article::class)->find($article);
  129.             $historiqueClient->setMessage("Demande d'informations pour le produit : ".$article_obj->getReference()."\n");
  130.         }
  131.         else if($commande != "") {
  132.             $commande_obj $em->getRepository(Commande::class)->find($commande);
  133.             $historiqueClient->setMessage("Demande d'informations pour la commande : ".$commande_obj->getReference()."\n");
  134.         }
  135.         else if($api != "") {
  136.             $historiqueClient->setMessage("Demande d'informations pour API\n");
  137.         }
  138.         $form $this->createForm(ContactType::class, $historiqueClient, [
  139.             'default_sujet' => $devis || $commande || $article || $api 'demande_information' null,
  140.         ]);
  141.         $errors = [];
  142.         $form->handleRequest($request);
  143.         if ($form->isSubmitted()) {
  144.             // ==============================
  145.             // Vérification Cloudflare Turnstile
  146.             // ==============================
  147.             $token $request->request->get('cf-turnstile-response');
  148.             if (empty($token)) {
  149.                 $error = new FormError("Veuillez valider la vérification anti-spam.");
  150.                 $form->get('prenom')->addError($error);
  151.             }
  152.             $client HttpClient::create();
  153.             $response $client->request(
  154.                 'POST',
  155.                 'https://challenges.cloudflare.com/turnstile/v0/siteverify',
  156.                 [
  157.                     'body' => [
  158.                         'secret'   => $_ENV['TURNSTILE_SECRET_KEY'],
  159.                         'response' => $token,
  160.                         'remoteip' => $request->getClientIp(),
  161.                     ],
  162.                 ]
  163.             );
  164.             $result $response->toArray();
  165.             if (!$result['success']) {
  166.                 // $this->addFlash('error', 'La vérification anti-spam a échoué.');
  167.                 $error = new FormError("La vérification anti-spam a échoué.");
  168.                 $form->get('prenom')->addError($error);
  169.             }
  170.             if ($form->isValid()) {
  171.                 $article NULL;
  172.                 if($request->query->get('article') != ""$article $em->getRepository(Article::class)->find($request->query->get('article'));
  173.                 $reference $form->get('reference')->getData();
  174.                 $sujet $form->get('sujet')->getData();
  175.                 $prenom $form->get('prenom')->getData();
  176.                 $nom $form->get('nom')->getData();
  177.                 $email $form->get('email')->getData();
  178.                 $telephone $form->get('telephone')->getData();
  179.                 $message $form->get('message')->getData();
  180.                 if($devis != "") {
  181.                     if($valider != "") {
  182.                         $sujet "Commande devis";
  183.                     }
  184.                 }
  185.                 $rendu_message     $this->renderView('FO/Email/contact.html.twig', ["prenom"=>$prenom,"sujet"=>$sujet,"nom"=>$nom,"email"=>$email,"message"=>$message,"article"=>$article,"devis"=>$devis]);
  186.                 $prefixe_sujet "";
  187.                 if($sujet=="demande_information")  $prefixe_sujet "[DEMANDE INFORMATION] ";
  188.                 else if($sujet=="support_technique"$prefixe_sujet "[SUPPORT TECHNIQUE] ";
  189.                 else if($sujet=="partenariat"$prefixe_sujet "[PARTENARIAT] ";
  190.                 else if($sujet=="autre"$prefixe_sujet "[AUTRE] ";
  191.                 $titre_email $prefixe_sujet."Formulaire de contact";
  192.                 //demande_information
  193.                 //support_technique
  194.                 //partenariat
  195.                 //autre
  196.                 if($article) {
  197.                     $titre_email $prefixe_sujet." Produit:".$article->getReference();
  198.                 }
  199.                 else if($devis != "") {
  200.                     $titre_email $prefixe_sujet." Devis:".$devis_obj->getReference();
  201.                 }
  202.                 else if($api != "") {
  203.                     $titre_email $prefixe_sujet." API";
  204.                 }
  205.                 if($devis != "") {
  206.                     if($valider != "") {
  207.                         $prefixe_sujet "[COMMANDE DEVIS] ";
  208.                         $titre_email $prefixe_sujet." Devis:".$devis_obj->getReference();
  209.                     }
  210.                 }
  211.                 $societe $em->getRepository(Societe::class)->find(1);
  212.                 if (is_object($societe)) {
  213.                     $emailDestination $societe->getEmail();
  214.                     if($societe->getMailTest()) $emailDestination $societe->getEmailTest();
  215.                 } else {
  216.                     $emailDestination 'thomas@noogaa.com';
  217.                 }
  218.                 $donneesEmail=["destinataires"=>[$emailDestination],"message"=>$rendu_message,"titre"=>$titre_email];
  219.                 $errors_envoi $emailService->envoyerEmailClassique($donneesEmail);
  220.                 $em->persist($historiqueClient);
  221.                 $em->flush($historiqueClient);
  222.                 return new Response(
  223.                     json_encode(['rendu' => '''valide' => '1''url' => '''type' => 'callBackContactProduit']),
  224.                     200,
  225.                     ['Content-Type' => 'application/json']
  226.                 );
  227.             }
  228.             else {
  229.                 $errors $validator->validate($historiqueClient);
  230.             }
  231.         }
  232.         $rendu     $this->renderView('Contact/Contact/contact_modal.html.twig',['form' => $form->createView(), 'errors' => $errors,'turnstile_site_key' => $_ENV['TURNSTILE_SITE_KEY']]);
  233.         // $rendu = $this->renderView('FO/Supprimer/supprimer_impossible.html.twig', ['errors' => $erreur]);
  234.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  235.     }
  236.     /**
  237.      * @Route("/devis-personnalise/html", name="dtc_devis_personnalise_html")
  238.      */
  239.     public function ContactDevisPersonnaliseHtml(Request $request,EntityManagerInterface $em,EmailService $emailService)
  240.     {
  241.         $commandeRepo $em->getRepository(Commande::class);
  242.         $user $this->getUser();
  243.         $statutPanier $em->getRepository(StatutCommande::class)->findOneBy(["documentCommercial" => TypeDocumentCommercial::PANIER"ordre" => "1"] );
  244.         // Récupérer ou créer le panier
  245.         $panier $commandeRepo->findOneBy([
  246.             'statutCommande' => $statutPanier,
  247.             'utilisateur' => $user,
  248.             'typeDocumentCommercial' => TypeDocumentCommercial::PANIER
  249.         ]);
  250.         return $this->render(
  251.             'FO/Email/devis_personnalise.html.twig',
  252.             [
  253.                 'sujet'=> 'dee',
  254.                 'panier'=> $panier,
  255.                 'user'=> $user,
  256.             ]
  257.         );
  258.     }
  259.     /**
  260.      * @Route("/devis-personnalise", name="dtc_devis_personnalise", methods={"POST"})
  261.      */
  262.     public function ContactDevisPersonnalise(Request $request,EntityManagerInterface $em,EmailService $emailService): JsonResponse
  263.     {
  264.         $email $request->request->get('email''');
  265.         $adresseLivraisonId $request->request->get('adresseLivraison''');
  266.         $adresseRepository $em->getRepository(Adresse::class);
  267.         $adresseLivraison $adresseRepository->find($adresseLivraisonId);
  268.         if (!$adresseLivraison) {
  269.             return new JsonResponse([
  270.                 'success' => false,
  271.                 'message' => 'Adresse invalide.',
  272.             ]);
  273.         }
  274.         $commandeRepo $em->getRepository(Commande::class);
  275.         $validator Validation::createValidator();
  276.         $errors $validator->validate($email, [
  277.             new Email(),
  278.         ]);
  279.         if (count($errors) > 0) {
  280.             return new JsonResponse([
  281.                 'success' => false,
  282.                 'message' => 'Email invalide.',
  283.             ]);
  284.         }
  285.         $user $this->getUser();
  286.         $historiqueClient = new HistoriqueClient();
  287.         $historiqueClient->setMessage("Devis personnalisé\n");
  288.         $historiqueClient->setUtilisateur($user);
  289.         $historiqueClient->setClient($user->getClient());
  290.         $societe $em->getRepository(Societe::class)->find(1);
  291.         if (is_object($societe)) {
  292.             $emailDestination $societe->getEmail();
  293.             if($societe->getMailTest()) $emailDestination $societe->getEmailTest();
  294.         } else {
  295.             $emailDestination 'thomas@noogaa.com';
  296.         }
  297.         $sujet "Demande de devis personnalisé";
  298.         $titre_email $sujet;
  299.         $statutPanier $em->getRepository(StatutCommande::class)->findOneBy(["documentCommercial" => TypeDocumentCommercial::PANIER"ordre" => "1"] );
  300.         // Récupérer ou créer le panier
  301.         $panier $commandeRepo->findOneBy([
  302.             'statutCommande' => $statutPanier,
  303.             'utilisateur' => $user,
  304.             'typeDocumentCommercial' => TypeDocumentCommercial::PANIER
  305.         ]);
  306.         $rendu_message     $this->renderView('FO/Email/devis_personnalise.html.twig', ["sujet"=>$sujet,"panier"=>$panier,'user'=>$user,'adresseLivraison'=>$adresseLivraison]);
  307.         $donneesEmail=["destinataires"=>[$emailDestination],"message"=>$rendu_message,"titre"=>$titre_email];
  308.         $errors_envoi $emailService->envoyerEmailClassique($donneesEmail);
  309.         $em->persist($historiqueClient);
  310.         $em->flush($historiqueClient);
  311.         return new JsonResponse([
  312.             'success' => true,
  313.             'message' => 'Merci ! Votre demande a été prise en compte.',
  314.         ]);
  315.     }
  316. }