src/Controller/MaillingController.php line 363

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: anthony
  5.  * Date: 25/05/18
  6.  * Time: 10:45
  7.  */
  8. namespace App\Controller;
  9. use App\Entity\Actualite;
  10. use App\Entity\Auth\AuthUser;
  11. use App\Entity\Client;
  12. use App\Entity\ClientRoleUser;
  13. use App\Entity\Coupure;
  14. use App\Entity\Email\AdresseMailVerif;
  15. use App\Entity\Email\EmailRetour;
  16. use App\Entity\Mailling;
  17. use App\Entity\PieceJointeMailling;
  18. use App\Entity\ThemeDescriptif;
  19. use App\Ovh\OvhSend;
  20. use App\Service\Coupure\GenerateCoupureInterface;
  21. use App\Service\MaillingEnCour\MaillingEnCour;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  24. use Spipu\Html2Pdf\Html2Pdf;
  25. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  26. use Symfony\Component\HttpFoundation\JsonResponse;
  27. use Symfony\Component\HttpFoundation\Request;
  28. use Symfony\Component\HttpFoundation\Response;
  29. use Symfony\Component\HttpKernel\KernelInterface;
  30. use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
  31. use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
  32. use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
  33. use Symfony\Component\Serializer\Normalizer\PropertyNormalizer;
  34. use Symfony\Component\Serializer\Serializer;
  35. use Symfony\Component\Serializer\Encoder\XmlEncoder;
  36. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  37. use Doctrine\Common\Annotations\AnnotationReader;
  38. use PDO;
  39. class MaillingController extends Controller
  40. {
  41.     /**
  42.      * @Route("api/maillings/maillings/getErreur/{idMailling}", methods={"GET"}, name="get.erreur.mailling.en.cours")
  43.      */
  44.     public function getErreurMaillingEnCourAction($idMaillingEntityManagerInterface $emMaillingEnCour $maillingEnCour){
  45.         $maillingEnCoursErreur $maillingEnCour->getMaillingErreur($idMailling);
  46.         $encoders = array(new XmlEncoder(), new JsonEncoder());
  47.         $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
  48.         $normalizer = new PropertyNormalizer($classMetadataFactory);
  49.         $dateTimeNormalizer = new DateTimeNormalizer('d-m-y H:i');
  50.         $serializer = new Serializer([$normalizer,$dateTimeNormalizer], $encoders);
  51.         $jsonContent $serializer->normalize($maillingEnCoursErreurnull, array('groups' => array('email_retour')));
  52.         $response = new JsonResponse($jsonContent);
  53.         $response->headers->set('Content-Type''application/json');
  54.         return $response;
  55.     }
  56.     /**
  57.      * @Route("/maillings/content/{id}",methods={"GET"},name="get.mailling.content")
  58.      */
  59.     public function getMaillingContentAction($idRequest $requestKernelInterface $kernel)
  60.     {
  61.         $em $this->get('doctrine.orm.entity_manager');
  62.         $mailling $em->getRepository('App\Entity\Mailling')
  63.             ->find($request->get('id'));
  64.         $path $kernel->getRootDir() . '/../public/maillings/' $mailling->getAncienId() . '.html';
  65.         $read file_get_contents($path);
  66.         return new JsonResponse(utf8_encode($read));
  67.     }
  68.     /**
  69.      * @Route("/maillings/getNbEnvoyer/{id}",methods={"GET"},name="get.mailling.nb.envoyer")
  70.      */
  71.     public function getMaillingNbEnvoyer($id)
  72.     {
  73.         $em $this->get('doctrine.orm.entity_manager');
  74.         $mailling $em->getRepository('App\Entity\Mailling')
  75.             ->findOneBy(['ancienId' => $id]);
  76.         return new JsonResponse($mailling->getNbMailEnvoye());
  77.     }
  78.     /**
  79.      * @Route("/maillings/checkDelete",methods={"GET"},name="mail.check")
  80.      */
  81.     public function getCheckMailAction()
  82.     {
  83.         $em $this->get('doctrine.orm.entity_manager');
  84.         $maillings $em->getRepository("App\Entity\Mailling")
  85.             ->findBy(['envoyer' => 'enCour' => ]);
  86.         $checkIfMaillingExist $this->get('check.mailling.exist');
  87.         $anomalieGestion $this->get('gestion.anomalie');
  88.         foreach ($maillings as $mailling){
  89.             if($checkIfMaillingExist->checKMailling($mailling) < 1){
  90.                 $suivitOuvertures $em->getRepository('App:SuivitOuvertureMailling')
  91.                     ->findBy(['mailling' => $mailling]);
  92.                 if(count($suivitOuvertures) < 1){
  93.                     $em->remove($mailling);
  94.                 }
  95.                 else{
  96.                     $anomalieGestion->addAnomalieDeleteWithSuivit($mailling);
  97.                 }
  98.             }
  99.         }
  100.         $em->flush();
  101.         return new Response('ok');
  102.     }
  103.     /**
  104.      * @Route("/maillings/send/test/{idMailling}/{idAuthUser}",methods={"GET"},name="send.mailling.test")
  105.      */
  106.     public function getSendMailTestAction($idMailling$idAuthUserMaillingEnCour $maillingEnCourKernelInterface $kernel)
  107.     {
  108.         $em $this->get('doctrine.orm.entity_manager');
  109.         $mailling $em->getRepository("App\Entity\Mailling")
  110.             ->find($idMailling);
  111.         $authUser $em->getRepository("App\Entity\Auth\AuthUser")
  112.             ->find($idAuthUser);
  113.         if($authUser){
  114.             if($mailling){
  115.                 /** @var Mailling $mailling
  116.                  *  @var AuthUser $authUser
  117.                  */
  118.                 if (strpos($mailling->getEnvoyePar()->getAdresseEnvoi(), '@escalconsulting.com') !== false) {
  119.                     $maillingEnCour->addTestSend($mailling,$authUser);
  120.                     return new JsonResponse('mail test lancé en envoi');
  121.                 } else {
  122.                     return new JsonResponse('l\'utilisateur ne possède pas d\'addresse d\'envoi');
  123.                 }
  124.             } else {
  125.                 return new JsonResponse('le mailling n\'existe pas');
  126.             }
  127.         } else {
  128.             return new JsonResponse('l\'utilisateur n\'existe pas');
  129.         }
  130.     }
  131.     /**
  132.      * @Route("/maillings/send/veille/{id}", methods={"GET"}, name="mailling.veille.send")
  133.      */
  134.     public function sendVeilleAction(MaillingEnCour $maillingEnCourEntityManagerInterface $em$id){
  135.         $veille $em->getRepository('App:Veille')->find($id);
  136.         if($veille){
  137.             $match_date $veille->getDate();
  138.             $date = new \DateTime();
  139.             $interval $date->diff($match_date);
  140.             if($interval->days == 0) {
  141.                 if(!$veille->getValider()){
  142.                     $veille->setValider(true);
  143.                     $em->persist($veille);
  144.                     $em->flush();
  145.                     $maillingEnCour->addVeilleSend($veille);
  146.                     return new JsonResponse('veille lancer en envoi');
  147.                 }
  148.             }
  149.         }
  150.        return new JsonResponse('veille déja envoyé');
  151.     }
  152.     /**
  153.      * @Route("/maillings/send/date/{idMailling}",methods={"GET"},name="send.mail.date")
  154.      */
  155.     public function getSendMaillingDateAction($idMailling MaillingEnCour $maillingEnCourRequest $request)
  156.     {
  157.         ini_set('memory_limit',-1);
  158.         set_time_limit(0);
  159.         $dateEnvoie $request->query->get('date');
  160.         $dateEnvoie = new \DateTime($dateEnvoie);
  161.         $em $this->get('doctrine.orm.entity_manager');
  162.         $mailling $em->getRepository("App\Entity\Mailling")
  163.             ->find($idMailling);
  164.         if($mailling){
  165.             if($mailling->getValiderEnvoi()){
  166.                 if(!$mailling->getEnCour()){
  167.                     if(!$mailling->getEnvoyer()){
  168.                         if (strpos($mailling->getEnvoyePar()->getAdresseEnvoi(), '@escalconsulting.com') !== false) {
  169.                             $mailling->setEnCour(true);
  170.                             $em->persist($mailling);
  171.                             $em->flush();
  172.                             if($maillingEnCour->addMaillingSend($mailling$dateEnvoietrue) == false){
  173.                                 return new JsonResponse('le mailling est déja en cours d\'envoi');
  174.                             }
  175.                             return new JsonResponse('le mailling a été lancé en envoi');
  176.                         } else {
  177.                             return new JsonResponse('l\'utilisateur ne possède pas d\'addresse d\'envoi');
  178.                         }
  179.                     } else {
  180.                         return new JsonResponse('le mailling est déjà en envoyé');
  181.                     }
  182.                 } else {
  183.                     return new JsonResponse('le mailling est déjà en cours d\'envoi');
  184.                 }
  185.             } else {
  186.                 return new JsonResponse('le mailling doit être validé');
  187.             }
  188.         } else {
  189.             return new JsonResponse('le mailling n\'existe pas');
  190.         }
  191.     }
  192.     /**
  193.      * @Route("/maillings/send/{idMailling}",methods={"GET"},name="send.mail.reel")
  194.      */
  195.     public function getSendMaillingAction($idMailling MaillingEnCour $maillingEnCourOvhSend $ovhSendActualiteController $actualiteController)
  196.     {
  197.         ini_set('memory_limit',-1);
  198.         set_time_limit(0);
  199.         $em $this->get('doctrine.orm.entity_manager');
  200.         $mailling $em->getRepository("App\Entity\Mailling")
  201.             ->find($idMailling);
  202.         /** @var Mailling $mailling */
  203.         if($mailling){
  204.             if($mailling->getValiderEnvoi()){
  205.                 if(!$mailling->getEnCour()){
  206.                     if(!$mailling->getEnvoyer()){
  207.                         if (strpos($mailling->getEnvoyePar()->getAdresseEnvoi(), '@escalconsulting.com') !== false) {
  208.                             $mailling->setEnCour(true);
  209.                             $em->persist($mailling);
  210.                             $em->flush();
  211.                             if ($mailling->getTypeMail() == 'CP') {
  212.                                 $this->creerActualiteMailing($idMailling$em$ovhSend$actualiteController);
  213.                             }
  214.                             if($maillingEnCour->addMaillingSend($mailling, new \DateTime('now')) == false){
  215.                                 return new JsonResponse('le mailling est déja en cours d\'envoi');
  216.                             }
  217.                             return new JsonResponse('le mailling a été lancé en envoi');
  218.                         } else {
  219.                             return new JsonResponse('l\'utilisateur ne possède pas d\'addresse d\'envoi');
  220.                         }
  221.                     } else {
  222.                         return new JsonResponse('le mailling est déjà en envoyé');
  223.                     }
  224.                 } else {
  225.                     return new JsonResponse('le mailling est déjà en cours d\'envoi');
  226.                 }
  227.             } else {
  228.                 return new JsonResponse('le mailling doit être validé');
  229.             }
  230.         } else {
  231.             return new JsonResponse('le mailling n\'existe pas');
  232.         }
  233.     }
  234.     /**
  235.      * @Route("/maillings/creer/actualite/suite/envoie/{idMailling}", methods={"GET"}, name="creer_actu_mailing")
  236.      */
  237.     public function creerActualiteMailing($idMaillingEntityManagerInterface $emOvhSend $ovhSendActualiteController $actualiteController){
  238.         $mailling $em->getRepository('App:Mailling')->find($idMailling);
  239.         $actualite = new Actualite();
  240.         $nomMailling str_replace('&#039;''\''$mailling->getNom());
  241.         $actualite->setNom($nomMailling);
  242.         $actualite->setClient($mailling->getClient());
  243.         $actualite->setPitch($mailling->getResumer());
  244.         $actualite->setCreation(new \DateTime('now'));
  245.         $actualite->setAuteur($mailling->getEnvoyePar());
  246.         $em->persist($actualite);
  247.         $em->flush();
  248.         $actualite $em->getRepository('App:Actualite')->findDerniereActu();
  249.         $theme = new ThemeDescriptif();
  250.         $theme->setLibelle($mailling->getResumerCour());
  251.         $theme->setActualite($actualite);
  252.         $em->persist($theme);
  253.         $em->flush();
  254.         $actualiteController->parutionImporterCopie($actualite->getId(), 0$em);
  255.         try
  256.         {
  257.             $bdd = new PDO('mysql:host=185.126.230.125;dbname=escal_web;charset=utf8''escalprod''skl001');
  258.         }
  259.         catch (Exception $e)
  260.         {
  261.             die('Erreur : ' $e->getMessage());
  262.         }
  263.         $query 'SELECT MAX(`ID_actualite`) as actuId FROM `ecw_actualites`';
  264.         $reponse $bdd->query($query);
  265.         while ($row $reponse->fetch()) {
  266.             $actuAncienId $row['actuId'];
  267.         }
  268.         $reponse->closeCursor();
  269.         $actualite->setAncienId($actuAncienId);
  270.         $em->flush();
  271.         $ovhSend->sendMailNouvelleActualite($actualite);
  272.         return new JsonResponse('ok');
  273.     }
  274.     /**
  275.      * @Route("/mailling/enCour/{idMailling}", methods={"GET"}, name="mailling.en.cour.status")
  276.      */
  277.     public function getMaillingInfoEnCourAction($idMaillingEntityManagerInterface $emMaillingEnCour $maillingEnCour){
  278.         $mailling $em->getRepository('App:Mailling')->find($idMailling);
  279.         $retour = [];
  280.         if($mailling){
  281.             $debutMailling $maillingEnCour->getIfMaillingBegin($mailling);
  282.             if($debutMailling !== false){
  283.                 $nbMailling $maillingEnCour->getNbMailMailling($mailling);
  284.                 $nbMaillingAttente $maillingEnCour->getNbMailRestantAvantFin($mailling);
  285.                 if($nbMaillingAttente != false){
  286.                     $dateFurtureEnvoie $maillingEnCour->getHeureEnvoieFuture($mailling);
  287.                     if( $dateFurtureEnvoie == false){
  288.                         $retour['nbMaillAttente'] = $nbMaillingAttente;
  289.                         $retour['nbMailToSend'] = $nbMailling[0];
  290.                         $retour['nbMailSend'] = $nbMailling[1];
  291.                     } else {
  292.                         $retour['message_erreur'] = 'le mailling commencera a être envoyé le ' $dateFurtureEnvoie;
  293.                     }
  294.                 } else {
  295.                     if($mailling->getEnvoyer() == true){
  296.                         $retour['message_erreur'] = 'le mailling a fini d\'être envoyé';
  297.                     }
  298.                     $retour['message_erreur'] = 'Le mailling est en cours d\'envoi, l\'affichage du diagramme peut prendre plusieurs minutes. Merci de patienter.';
  299.                 }
  300.             } else {
  301.                 $retour['message_erreur'] = 'le mailling n\'est pas en envoi';
  302.             }
  303.         } else {
  304.             $retour['message_erreur'] = 'le mailling n\'existe pas';
  305.         }
  306.         return new JsonResponse($retour);
  307.     }
  308.     /**
  309.      * @Route("/maillings/deleteMailling/{idMailling}", methods={"DELETE"}, name="delete.mailling")
  310.      */
  311.     public function deleteMailling($idMaillingEntityManagerInterface $em){
  312.         $mailling $em->getRepository('App:Mailling')->find($idMailling);
  313.         if($mailling->getEnCour() === false){
  314.             $maillingsEnCour $em->getRepository('App:MaillingEnCour')->findBy(['mailling' => $mailling]);
  315.             foreach ($maillingsEnCour as $maillingEnCour){
  316.                 $em->remove($maillingEnCour);
  317.             }
  318.             $em->remove($mailling);
  319.             $em->flush();
  320.             $retour['message'] = 'le mailling a été supprimmer';
  321.         } else {
  322.             $retour['message'] = 'le mailling a déja été lancé en envoi';
  323.         }
  324.         return new JsonResponse($retour);
  325.     }
  326.     /**
  327.      * @Route("/maillings/prepareCoupure/{idClient}", methods={"GET"}, name="mailling.cree.coupure")
  328.      */
  329.     public function creeMaillingCoupure($idClientEntityManagerInterface $emGenerateCoupureInterface $generateCoupure){
  330.         $client $em->getRepository('App:Client')->find($idClient);
  331.         if($client){
  332.             /** @var Client $client */
  333.             $mailling $em->getRepository('App:Mailling')->findOneBy(['client' => $client'typeMail' => 'Coupure''envoyer' => false]);
  334.             /** @var Mailling $mailling */
  335.             if($mailling){
  336.                 foreach ($mailling->getPiecesJointes() as $piecesJointe){
  337.                     $mailling->removePiecesJointe($piecesJointe);
  338.                     $em->remove($piecesJointe);
  339.                 }
  340.                 $em->flush();
  341.             } else{
  342.                 $mailling = new Mailling();
  343.                 $mailling->setClient($client);
  344.                 $date = new \DateTime('now');
  345.                 $mailling->setNom('Retombées presse '$client->getNom(). ' du '.date_format($date'd/m/Y'));
  346.                 $mailling->setObjet('Retombées presse '$client->getNom(). ' du '.date_format($date'd/m/Y'));
  347.                 foreach ($client->getRolesUserClient() as $roleUserClient){
  348.                     /** @var ClientRoleUser $roleUserClient */
  349.                     if($roleUserClient->getRole() == 'Bo'){
  350.                         $mailling->setEnvoyePar($roleUserClient->getAuthUser());
  351.                         $mailling->setReplyTo($roleUserClient->getAuthUser());
  352.                     }
  353.                 }
  354.                 $mailling->setTypeMail('Coupure');
  355.             }
  356.             $coupuresClient $em->getRepository('App:Coupure')->findBy(['client' => $client'envoyer' => false]);
  357.             foreach ($coupuresClient as $coupure){
  358.                 /** @var Coupure $coupure */
  359.                 $pieceJointeMailling = new PieceJointeMailling();
  360.                 $pieceJointeMailling->setUrl($coupure->getPiecesJointe());
  361.                 $pieceJointeMailling->setCoupure($coupure);
  362.                 $pieceJointeMailling->setMailling($mailling);
  363.                 $mailling->addPiecesJointe($pieceJointeMailling);
  364.             }
  365.             $mailling->setValiderEnvoi(0);
  366.             $mailling->setEnCour(0);
  367.             $mailling->setEnvoyer(0);
  368.             $mailling->setNbMail(0);
  369.             $mailling->setNbMailEnvoye(0);
  370.             $mailling->setDebutMailCoupure($generateCoupure->generateDebutMail($mailling));
  371.             $mailling->setFinMailCoupure($generateCoupure->generateFinMail($mailling));
  372.             $mailling->sethyperlien(1);
  373.             $em->persist($mailling);
  374.             $em->flush();
  375.         } else {
  376.             $retour['message_erreur'] = 'le client n\'existe pas';
  377.         }
  378.         return new JsonResponse(['idMailling' => $mailling->getId()]);
  379.     }
  380.     /**
  381.      * @Route("/maillings/information/{idMailling}", methods={"GET"}, name="nb.mail.envoyer")
  382.      */
  383.     public function getNombreMailEnvoyer($idMaillingEntityManagerInterface $em){
  384.         $mailling $em->getRepository('App:Mailling')->findBy(['ancienId' => $idMailling]);
  385.         if(!isset($mailling[0])){
  386.             return new JsonResponse(0);
  387.         }
  388.         $mailling $mailling[0];
  389.         return new JsonResponse($mailling->getNbMailEnvoye());
  390.     }
  391.     /**
  392.      * @Route("/maillings/refreshNbMail/{idMailling}", methods={"GET"}, name="nb.mail.envoyer.refresh")
  393.      */
  394.     public function getRefreshNombreMail(OvhSend $ovhSend$idMaillingEntityManagerInterface $em){
  395.         $mailling $em->getRepository('App:Mailling')->find($idMailling);
  396.         /** @var Mailling $mailling */
  397.         $contactsSend $ovhSend->getContactSend($mailling);
  398.         $nbMail 0;
  399.         foreach ($contactsSend as $contactSend) {
  400.             $userInfo explode('#'$contactSend);
  401.             $userMail trim($userInfo[0]);
  402.             $blackList $em->getRepository('App:BlackList')
  403.                 ->findOneBy(['email'=> $userMail]);
  404.             if(!$blackList) {
  405.                 $nbMail $nbMail 1;
  406.             }
  407.         }
  408.         if($mailling->getNbMail() != $nbMail){
  409.            $mailling->setNbMail($nbMail);
  410.         }
  411.         $em->persist($mailling);
  412.         $em->flush();
  413.         return new JsonResponse($mailling->getNbMail());
  414.     }
  415.     /**
  416.      * @Route("/mailing/contactsenvoireel/{idMailling}", methods={"GET"}, name="mailing.contact.Envoi.reel")
  417.      */
  418.     public function getContactsEnvoiReel($idMaillingEntityManagerInterface $em) {
  419.         $mailing $em->getRepository('App:Mailling')->findOneBy(["ancienId" => $idMailling]);
  420.         $mailingsEnCours $em->getRepository('App:MaillingEnCour')->findBy(["mailling" => $mailing->getId()]);
  421.         $contactsIDIntranet = [];
  422.         foreach ($mailingsEnCours as $mailingEncours) {
  423.             if(!is_null($mailingEncours->getUserId()))
  424.                 $contactsIDIntranet[] = $mailingEncours->getUserId();
  425.         }
  426.         return new JsonResponse($contactsIDIntranet);
  427.     }
  428.     /**
  429.      * @Route("/mailing/get/contacts/safe/{idMailling}", methods={"GET"}, name="mailing_contact_safe_envoi")
  430.      */
  431.     public function getContactsSafeEnvoi($idMaillingEntityManagerInterface $emOvhSend $ovhSend) {
  432.         $contactsSafe '';
  433.         // liste contacts hors blacklist et email retour
  434.         $mailing $em->getRepository('App:Mailling')->findOneBy(["ancienId" => $idMailling]);
  435.         $contactsSend $ovhSend->getContactSend($mailing);
  436.         foreach ($contactsSend as $contactSend) {
  437.             $contactInfo explode('#'$contactSend);
  438.             $contactMail trim($contactInfo[0]);
  439.             $contactID trim($contactInfo[1]);
  440.             $adresseEmailVerif $em->getRepository('App:Email\AdresseMailVerif')->findOneBy(['email' => $contactMail]);
  441.             $emailsRetours $em->getRepository('App:Email\EmailRetour')->findBy(['email' => $contactMail]);
  442.             // Prendre en compte la dernière raison
  443.             $emailRetour end($emailsRetours);
  444.             $safeToSend 0;
  445.             //Si l'adresse mail a deja ete verifie  : recuperer le statut de l'adresse mail verifiee
  446.             if ($adresseEmailVerif){
  447.                 // Gestion de cas des adresses mails de type "Accept All"
  448.                 if(!$emailRetour && $adresseEmailVerif->getSafeToSend()==1){
  449.                     $safeToSend 1;
  450.                 }
  451.             }
  452.             $blackList $em->getRepository('App:BlackList')->findOneBy(['email' => $contactMail]);
  453.             if (!$blackList || $blackList->getAutorise() == 1) {
  454.                 $dateDuJour = new \DateTime('now');
  455.                 //La dateAbsence correspond à la date de retour
  456.                 if($emailRetour && $emailRetour->getDateAbsence()>$dateDuJour) {
  457.                     $safeToSend 0;
  458.                 }
  459.                 // Ne pas bloquer l'envoi à l'adresse mail classée 'autre' par les BO
  460.                 if($emailRetour && $emailRetour->getRaison() == 'autre') {
  461.                     $safeToSend 1;
  462.                 }
  463.                 if($safeToSend == 1) {
  464.                     $contactsSafe $contactsSafe '"'.$contactMail.'", ';
  465.                 }
  466.             }
  467.         }
  468.         return new JsonResponse($contactsSafe);
  469.     }
  470. }