src/Controller/CronController.php line 97

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. use Symfony\Component\Mailer\MailerInterface;
  10. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  11. use Symfony\Component\Mime\Email;
  12. use Symfony\Component\Mime\Address;
  13. use Symfony\Component\Mime\Crypto\DkimSigner;
  14. use Symfony\Component\Mime\Crypto\DkimOptions;
  15. use Symfony\Component\String\Slugger\SluggerInterface;
  16. use App\Service\EvenementInfo;
  17. use App\Entity\Envoi;
  18. use App\Entity\Evenement;
  19. use App\Entity\Message;
  20. use App\Entity\EvenementIntervenant;
  21. use App\Entity\Inscription;
  22. /**
  23.  * @Route("/cron", name="app_cron_")
  24.  */
  25. class CronController extends AbstractController
  26. {
  27.     private $doctrine;
  28.     private $mailer;
  29.     private $slugger;
  30.     private $evtInfo;
  31.     public function __construct(ManagerRegistry $doctrineMailerInterface $mailerSluggerInterface $sluggerEvenementInfo $evtInfo)
  32.     {
  33.         $this->doctrine $doctrine;
  34.         $this->mailer $mailer;
  35.         $this->slugger $slugger;
  36.         $this->evtInfo $evtInfo;
  37.     }
  38.     
  39.     /**
  40.      * @Route("/testics", name="testics")
  41.      */
  42.     public function testics(): Response
  43.     {
  44.         $evenement $this->doctrine->getRepository(Evenement::class)->find(4);
  45.         $dateStartEnd $this->evtInfo->getStartEndEvt($evenement);
  46.         $ics $this->evtInfo->createIcs($evenement$dateStartEnd);
  47.         return new Response(
  48.             '<html><body>-OK-</body></html>'
  49.         );
  50.     }
  51.     /**
  52.      * @Route("/envoi", name="cronenvoi")
  53.      */
  54.     public function cronenvoi(): Response
  55.     {
  56.         //$response = $this->envoi();
  57.         $response null;
  58.         for ($i=0$i $i++) { 
  59.             $response $this->envoi();
  60.             
  61.             if($response == "error") break;
  62.             else {
  63.                 sleep(9);
  64.             }
  65.         }
  66.         return $this->redirectToRoute("app_cron_cronsatisfaction");
  67.         // dd($response)
  68.         // if($response == "error") {
  69.         // }
  70.         
  71.         return new Response(
  72.             '<html><body>-'.$response.'-</body></html>'
  73.         );
  74.     }
  75.     
  76.     /**
  77.      * @Route("/recap", name="cronrecap")
  78.      */
  79.     public function cronrecap(): Response
  80.     {
  81.         $inscriptions $this->doctrine->getRepository(Inscription::class)->findRecap();
  82.         $em $this->doctrine->getManager();
  83.         //dump($inscriptions);
  84.         if(!empty($inscriptions) && $inscription $inscriptions[0]) {
  85.             $message $this->doctrine->getRepository(Message::class)->findOneBy(
  86.                 [
  87.                     'evenement' => $inscription->getEvenement(),
  88.                     'type' => 'j-1'
  89.                 ]
  90.             );
  91.             $titre $this->slugger->slug(strtolower($message->getEvenement()->getTitre()));
  92.             $html $this->renderView('email/email.html.twig', [
  93.                 'message' => $message,
  94.                 'titre' => $titre,
  95.             ]);
  96.             $email = (new Email())
  97.                 ->from(new Address('noreply@evenements.engie-solutions.com ''Invitation ENGIE Solutions'))
  98.                 ->subject($message->getObjet())
  99.                 ->replyTo('evenements.engiesolutions@engie.com')
  100.                 ->to(new Address($inscription->getContact()->getEmail(), $inscription->getContact()->getPrenom().' '.$inscription->getContact()->getNom()))
  101.                 ->html($html)
  102.                 ->text(strip_tags($html))
  103.             ;
  104.             if($message->getPiecejointe() != null) {
  105.                 $email->attachFromPath($this->getParameter('folder.uploadsite').$message->getPiecejointe());
  106.             }
  107.             //$signer = new DkimSigner('file:///'.$this->getParameter('folder.key').'/dkimkey.key', 'plusvertmoinscherevent.engie.fr', 'mail');
  108.             //$signedEmail = $signer->sign($email);
  109.             $signedEmail =$email;
  110.             
  111.             try {
  112.                 $this->mailer->send($signedEmail);
  113.                 $inscription->setEnvoiRecap(new \DateTime);
  114.                 $em->persist($inscription);
  115.                 $em->flush();
  116.             } catch (TransportExceptionInterface $e) {
  117.                 $date = \DateTime::createFromFormat('YmdHis''20000101000000');
  118.                 $inscription->setEnvoiRecap($date);
  119.                 $em->persist($inscription);
  120.                 $em->flush();
  121.             }
  122.         }
  123.         
  124.         return new Response(
  125.             '<html><body></body></html>'
  126.         );
  127.     }
  128.     /**
  129.      * @Route("/satisfaction", name="cronsatisfaction")
  130.      */
  131.     public function cronsatisfaction(): Response
  132.     {
  133.         $inscriptions $this->doctrine->getRepository(Inscription::class)->findSatisfaction();
  134.         //dump($inscriptions);
  135.         if(!empty($inscriptions) && $inscription $inscriptions[0]) {
  136.             $message $this->doctrine->getRepository(Message::class)->findOneBy(
  137.                 [
  138.                     'evenement' => $inscription->getEvenement(),
  139.                     'type' => 'j+1'
  140.                 ]
  141.             );
  142.             if($message) {
  143.                 $response $this->envoiSatisfaction($message$inscription"setEnvoiSatisfaction");
  144.                 if($response) {
  145.                     return new Response(
  146.                         '<html><body>*'.$response.'*</body></html>'
  147.                     );
  148.                 } 
  149.             }                        
  150.         }
  151.         return $this->redirectToRoute("app_cron_cronrecap");
  152.         return new Response(
  153.             '<html><body></body></html>'
  154.         );
  155.     }
  156.     private function envoiSatisfaction($message$inscription$methode) {
  157.         $em $this->doctrine->getManager();
  158.         $titre $this->slugger->slug(strtolower($message->getEvenement()->getTitre()));
  159.         
  160.         $html $this->renderView('email/email.html.twig', [
  161.             'message'     => $message,
  162.             'inscription' => $inscription,
  163.             'titre'       => $titre,
  164.         ]);
  165.         $email = (new Email())
  166.             ->from(new Address('contact@evenements.engie-solutions.com ''Invitation ENGIE Solutions'))
  167.             ->subject($message->getObjet())
  168.             ->replyTo('evenements.engiesolutions@engie.com')
  169.             ->to(new Address($inscription->getContact()->getEmail(), $inscription->getContact()->getPrenom().' '.$inscription->getContact()->getNom()))
  170.             ->html($html)
  171.             ->text(strip_tags($html))
  172.         ;
  173.         if($message->getPiecejointe() != null) {
  174.             $email->attachFromPath($this->getParameter('folder.uploadsite').$message->getPiecejointe());
  175.         }
  176.         // $signer = new DkimSigner('file:///'.$this->getParameter('folder.key').'/dkimkey.key', 'plusvertmoinscherevent.engie.fr', 'mail');
  177.         // $signedEmail = $signer->sign($email);
  178.         $signedEmail =$email;
  179.         
  180.         try {
  181.             $this->mailer->send($signedEmail);
  182.             $inscription->{$methode}(new \DateTime);
  183.             $em->persist($inscription);
  184.             $em->flush();
  185.             return $inscription->getId();
  186.         } catch (TransportExceptionInterface $e) {
  187.             $date = \DateTime::createFromFormat('YmdHis''20000101000000');
  188.             $inscription->{$methode}($date);
  189.             $em->persist($inscription);
  190.             $em->flush();
  191.             return false;
  192.         }
  193.     }
  194.     public function envoi()
  195.     {
  196.         
  197.         $envoi $this->doctrine->getRepository(Envoi::class)->findNextToSend();
  198.         
  199.         if($envoi) {
  200.             $titre $this->slugger->slug(strtolower($envoi->getMessage()->getEvenement()->getTitre()));
  201.             
  202.             $html $this->renderView('email/email.html.twig', [
  203.                 'message' => $envoi->getMessage(),
  204.                 'envoi' => $envoi,
  205.                 'titre' => $titre,
  206.                 'intervenants' => $this->doctrine->getRepository(EvenementIntervenant::class)->findBy(['evenement' => $envoi->getMessage()->getEvenement()]),
  207.             ]);
  208.             $email = (new Email())
  209.                 ->from(new Address('contact@evenements.engie-solutions.com ''Invitation ENGIE Solutions'))
  210.                 ->subject($envoi->getMessage()->getObjet())
  211.                 ->replyTo('evenements.engiesolutions@engie.com')
  212.                 ->to(new Address($envoi->getContact()->getEmail(), $envoi->getContact()->getPrenom().' '.$envoi->getContact()->getNom()))
  213.                 ->html($html)
  214.                 ->text(strip_tags($html))
  215.             ;
  216.            
  217.             if($envoi->getMessage()->getPiecejointe() != null) {
  218.                 $email->attachFromPath($this->getParameter('folder.uploadsite').$envoi->getMessage()->getPiecejointe());
  219.             }
  220.             // AJOUT DU ICS
  221.             if($envoi->getMessage()->getType() == "savethedate" || $envoi->getMessage()->getType() == "invitation") {
  222.                 $dateStartEnd $this->evtInfo->getStartEndEvt($envoi->getMessage()->getEvenement());
  223.                 $ics $this->evtInfo->createIcs($envoi->getMessage()->getEvenement(), $dateStartEnd);
  224.                 
  225.                 $email->attachFromPath($this->getParameter('folder.uploadsite').$ics);
  226.             }
  227.             // $signer = new DkimSigner('file:///'.$this->getParameter('folder.key').'/dkimkey.key', 'plusvertmoinscherevent.engie.fr', 'mail');
  228.             // $signedEmail = $signer->sign($email);
  229.             // $signedEmail = $signer->sign($email, (new DkimOptions())
  230.             //     ->bodyCanon('relaxed')
  231.             //     ->headerCanon('relaxed')
  232.             //     ->headersToIgnore(['Message-ID'])
  233.             //     ->toArray()
  234.             // );
  235.             $signedEmail $email;
  236.             $em $this->doctrine->getManager();
  237.             try {
  238.                 $this->mailer->send($signedEmail);
  239.                 $envoi->setDateEnvoi(new \DateTime);
  240.                 $em->persist($envoi);
  241.                 $em->flush();
  242.                 return $envoi->getId();
  243.             } catch (TransportExceptionInterface $e) {
  244.                 $date = \DateTime::createFromFormat('YmdHis''20000101000000');
  245.                 $envoi->setDateEnvoi($date);
  246.                 $em->persist($envoi);
  247.                 $em->flush();
  248.             }            
  249.         } else {
  250.             return "error";
  251.         }
  252.     }
  253.     /**
  254.      * @Route("/envoitest-{messageId<\d+>}", name="envoitest")
  255.      */
  256.     public function envoiTest($messageIdRequest $request)
  257.     {
  258.         
  259.         $message $this->doctrine->getRepository(Message::class)->find($messageId);
  260.         
  261.         if($message) {
  262.             $titre $this->slugger->slug(strtolower($message->getEvenement()->getTitre()));
  263.             $html $this->renderView('email/email.html.twig', [
  264.                 'message' => $message,
  265.                 'titre' => $titre,
  266.                 'intervenants' => $this->doctrine->getRepository(EvenementIntervenant::class)->findBy(['evenement' => $message->getEvenement()]),
  267.             ]);
  268.             $email = (new Email())
  269.                 ->from(new Address('contact@evenements.engie-solutions.com ''Invitation ENGIE Solutions'))
  270.                 ->subject($message->getObjet())
  271.                 ->replyTo('evenements.engiesolutions@engie.com')
  272.                 ->to(new Address($request->request->get('email'), "Prénom Nom" ))
  273.                 ->html($html)
  274.                 ->text(strip_tags($html))
  275.             ;
  276.             if($message->getPiecejointe() != null) {
  277.                 $email->attachFromPath($this->getParameter('folder.uploadsite').$message->getPiecejointe());
  278.             }
  279.             // $signer = new DkimSigner('file:///'.$this->getParameter('folder.key').'/dkimkey.key', 'plusvertmoinscherevent.engie.fr', 'mail');
  280.             // $email = $signer->sign($email);
  281.             try {
  282.                 $this->mailer->send($email);
  283.             } catch (TransportExceptionInterface $e) {
  284.             }     
  285.             return $this->redirectToRoute('app_evenement', ['idevenement' => $message->getEvenement()->getId()]);
  286.         } else {
  287.             return "error";
  288.         }
  289.     }
  290.     
  291.     /**
  292.      * @Route("/cleandoublons", name="cleandoublons")
  293.      */
  294.     public function cleandoublons() {
  295.         
  296.         // Modif du 17/05/2023
  297.         // Finalement c'est plus une liste unique par event, on avait pas dit jacadi
  298.         // Aled, il y a des doublons dans tous les sens
  299.         $emailsEnvoi = [];
  300.         $doublons = [];
  301.         $envoiProgrammes $this->doctrine->getRepository(Envoi::class)->findForEvent(6true);
  302.         $toRemove = [];
  303.         $toKeep = [];
  304.         $em $this->doctrine->getManager();
  305.         foreach ($envoiProgrammes as $envoi) {
  306.             // Si l'email du contact de l'envoi est déjà dans la liste pour ce message, on vire l'envoi qui est un doublon
  307.             if(
  308.                 isset($emailsEnvoi[$envoi->getMessage()->getId()]) 
  309.                 && in_array($envoi->getContact()->getEmail(), $emailsEnvoi[$envoi->getMessage()->getId()])
  310.                 && $envoi->getDateEnvoi() == null
  311.             ) {
  312.                 //if($envoi->getDateEnvoi() == null) $em->remove($envoi);
  313.                 
  314.                 
  315.                 $doublons[$envoi->getContact()->getId()] = ($envoi->getMessage()->getId()." / ".$envoi->getContact()->getEmail());
  316.                 $inscription $this->doctrine->getRepository(Inscription::class)->findOneBy(
  317.                     ['contact' => $envoi->getContact()]
  318.                 );
  319.                 if($inscription) {
  320.                     //dump($inscription);
  321.                     $toKeep[$envoi->getContact()->getId()] = $envoi->getContact();
  322.                 } else {
  323.                     //$toRemove[$envoi->getContact()->getId()] = $envoi->getContact();
  324.                     $em->remove($envoi->getContact());
  325.                 }
  326.             } else {
  327.                 $emailsEnvoi[$envoi->getMessage()->getId()][] = trim($envoi->getContact()->getEmail());
  328.             }
  329.         }
  330.         $em->flush();
  331.         // dump($toKeep);
  332.         // dump($toRemove);
  333.         // $emailInscrit = [];
  334.         // $dejaListes = [];
  335.         // $caDegage = [];
  336.         // foreach($doublons as $idcontact=>$email) {
  337.         //     $inscription = $this->doctrine->getRepository(Inscription::class)->findOneBy(
  338.         //         ['contact' => $idcontact, 'evenement' => 6]
  339.         //     );
  340.         //     if($inscription) {
  341.         //         dump($inscription);
  342.         //         $emailInscrit[] = $email;
  343.         //     } else {
  344.         //         if(in_array($email, $dejaListes) && !in_array($email, $emailInscrit)) {
  345.         //             $caDegage[] = $idcontact;
  346.         //         }
  347.         //     }
  348.         //     $dejaListes[] = $email;
  349.         // }
  350.         
  351.         // dump($caDegage);
  352.         dd($doublons);
  353.         
  354.         //$em->flush();
  355.     }
  356. }