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\Auth\AuthUser;
  10. use App\Entity\Client;
  11. use App\Entity\ClientRoleUser;
  12. use App\Entity\Coupure;
  13. use App\Entity\Mailling;
  14. use App\Entity\PieceJointeMailling;
  15. use App\Ovh\OvhSend;
  16. use App\Service\Coupure\GenerateCoupureInterface;
  17. use App\Service\MaillingEnCour\MaillingEnCour;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  20. use Spipu\Html2Pdf\Html2Pdf;
  21. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  22. use Symfony\Component\HttpFoundation\JsonResponse;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\HttpKernel\KernelInterface;
  26. use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
  27. use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader;
  28. use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
  29. use Symfony\Component\Serializer\Normalizer\PropertyNormalizer;
  30. use Symfony\Component\Serializer\Serializer;
  31. use Symfony\Component\Serializer\Encoder\XmlEncoder;
  32. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  33. use Doctrine\Common\Annotations\AnnotationReader;
  34. class MaillingController extends Controller
  35. {
  36.     /**
  37.      * @Route("api/maillings/maillings/getErreur/{idMailling}", methods={"GET"}, name="get.erreur.mailling.en.cours")
  38.      */
  39.     public function getErreurMaillingEnCourAction($idMaillingEntityManagerInterface $emMaillingEnCour $maillingEnCour){
  40.         $maillingEnCoursErreur $maillingEnCour->getMaillingErreur($idMailling);
  41.         $encoders = array(new XmlEncoder(), new JsonEncoder());
  42.         $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
  43.         $normalizer = new PropertyNormalizer($classMetadataFactory);
  44.         $dateTimeNormalizer = new DateTimeNormalizer('d-m-y H:i');
  45.         $serializer = new Serializer([$normalizer,$dateTimeNormalizer], $encoders);
  46.         $jsonContent $serializer->normalize($maillingEnCoursErreurnull, array('groups' => array('email_retour')));
  47.         $response = new JsonResponse($jsonContent);
  48.         $response->headers->set('Content-Type''application/json');
  49.         return $response;
  50.     }
  51.     /**
  52.      * @Route("/maillings/content/{id}",methods={"GET"},name="get.mailling.content")
  53.      */
  54.     public function getMaillingContentAction($idRequest $requestKernelInterface $kernel)
  55.     {
  56.         $em $this->get('doctrine.orm.entity_manager');
  57.         $mailling $em->getRepository('App\Entity\Mailling')
  58.             ->find($request->get('id'));
  59.         $path $kernel->getRootDir() . '/../public/maillings/' $mailling->getAncienId() . '.html';
  60.         $read file_get_contents($path);
  61.         return new JsonResponse(utf8_encode($read));
  62.     }
  63.     /**
  64.      * @Route("/maillings/getNbEnvoyer/{id}",methods={"GET"},name="get.mailling.nb.envoyer")
  65.      */
  66.     public function getMaillingNbEnvoyer($id)
  67.     {
  68.         $em $this->get('doctrine.orm.entity_manager');
  69.         $mailling $em->getRepository('App\Entity\Mailling')
  70.             ->findOneBy(['ancienId' => $id]);
  71.         return new JsonResponse($mailling->getNbMailEnvoye());
  72.     }
  73.     /**
  74.      * @Route("/maillings/checkDelete",methods={"GET"},name="mail.check")
  75.      */
  76.     public function getCheckMailAction()
  77.     {
  78.         $em $this->get('doctrine.orm.entity_manager');
  79.         $maillings $em->getRepository("App\Entity\Mailling")
  80.             ->findBy(['envoyer' => 'enCour' => ]);
  81.         $checkIfMaillingExist $this->get('check.mailling.exist');
  82.         $anomalieGestion $this->get('gestion.anomalie');
  83.         foreach ($maillings as $mailling){
  84.             if($checkIfMaillingExist->checKMailling($mailling) < 1){
  85.                 $suivitOuvertures $em->getRepository('App:SuivitOuvertureMailling')
  86.                     ->findBy(['mailling' => $mailling]);
  87.                 if(count($suivitOuvertures) < 1){
  88.                     $em->remove($mailling);
  89.                 }
  90.                 else{
  91.                     $anomalieGestion->addAnomalieDeleteWithSuivit($mailling);
  92.                 }
  93.             }
  94.         }
  95.         $em->flush();
  96.         return new Response('ok');
  97.     }
  98.     /**
  99.      * @Route("/maillings/send/test/{idMailling}/{idAuthUser}",methods={"GET"},name="send.mailling.test")
  100.      */
  101.     public function getSendMailTestAction($idMailling$idAuthUserMaillingEnCour $maillingEnCourKernelInterface $kernel)
  102.     {
  103.         $em $this->get('doctrine.orm.entity_manager');
  104.         $mailling $em->getRepository("App\Entity\Mailling")
  105.             ->find($idMailling);
  106.         $authUser $em->getRepository("App\Entity\Auth\AuthUser")
  107.             ->find($idAuthUser);
  108.         if($authUser){
  109.             if($mailling){
  110.                 /** @var Mailling $mailling
  111.                  *  @var AuthUser $authUser
  112.                  */
  113.                 if (strpos($mailling->getEnvoyePar()->getAdresseEnvoi(), '@escalconsulting.com') !== false) {
  114.                     $maillingEnCour->addTestSend($mailling,$authUser);
  115.                     return new JsonResponse('mail test lancé en envoie');
  116.                 } else {
  117.                     return new JsonResponse('l\'utilisateur ne possède pas d\'addresse d\'envoi');
  118.                 }
  119.             } else {
  120.                 return new JsonResponse('le mailling n\'existe pas');
  121.             }
  122.         } else {
  123.             return new JsonResponse('l\'utilisateur n\'existe pas');
  124.         }
  125.     }
  126.     /**
  127.      * @Route("/maillings/send/veille/{id}", methods={"GET"}, name="mailling.veille.send")
  128.      */
  129.     public function sendVeilleAction(MaillingEnCour $maillingEnCourEntityManagerInterface $em$id){
  130.         $veille $em->getRepository('App:Veille')->find($id);
  131.         if($veille){
  132.             $match_date $veille->getDate();
  133.             $date = new \DateTime();
  134.             $interval $date->diff($match_date);
  135.             if($interval->days == 0) {
  136.                 if(!$veille->getValider()){
  137.                     $veille->setValider(true);
  138.                     $em->persist($veille);
  139.                     $em->flush();
  140.                     $maillingEnCour->addVeilleSend($veille);
  141.                     return new JsonResponse('veille lancer en envoie');
  142.                 }
  143.             }
  144.         }
  145.        return new JsonResponse('veille déja envoyé');
  146.     }
  147.     /**
  148.      * @Route("/maillings/send/date/{idMailling}",methods={"GET"},name="send.mail.date")
  149.      */
  150.     public function getSendMaillingDateAction($idMailling MaillingEnCour $maillingEnCourRequest $request)
  151.     {
  152.         ini_set('memory_limit',-1);
  153.         set_time_limit(0);
  154.         $dateEnvoie $request->query->get('date');
  155.         $dateEnvoie = new \DateTime($dateEnvoie);
  156.         $em $this->get('doctrine.orm.entity_manager');
  157.         $mailling $em->getRepository("App\Entity\Mailling")
  158.             ->find($idMailling);
  159.         if($mailling){
  160.             if($mailling->getValiderEnvoi()){
  161.                 if(!$mailling->getEnCour()){
  162.                     if(!$mailling->getEnvoyer()){
  163.                         if (strpos($mailling->getEnvoyePar()->getAdresseEnvoi(), '@escalconsulting.com') !== false) {
  164.                             $mailling->setEnCour(true);
  165.                             $em->persist($mailling);
  166.                             $em->flush();
  167.                             if($maillingEnCour->addMaillingSend($mailling$dateEnvoietrue) == false){
  168.                                 return new JsonResponse('le mailling est déja en cours d\'envoi');
  169.                             }
  170.                             return new JsonResponse('le mailling a été lancé en envoi');
  171.                         } else {
  172.                             return new JsonResponse('l\'utilisateur ne possède pas d\'addresse d\'envoi');
  173.                         }
  174.                     } else {
  175.                         return new JsonResponse('le mailling est déjà en envoyé');
  176.                     }
  177.                 } else {
  178.                     return new JsonResponse('le mailling est déjà en cours d\'envoi');
  179.                 }
  180.             } else {
  181.                 return new JsonResponse('le mailling doit être validé');
  182.             }
  183.         } else {
  184.             return new JsonResponse('le mailling n\'existe pas');
  185.         }
  186.     }
  187.     /**
  188.      * @Route("/maillings/send/{idMailling}",methods={"GET"},name="send.mail.reel")
  189.      */
  190.     public function getSendMaillingAction($idMailling MaillingEnCour $maillingEnCour)
  191.     {
  192.         ini_set('memory_limit',-1);
  193.         set_time_limit(0);
  194.         $em $this->get('doctrine.orm.entity_manager');
  195.         $mailling $em->getRepository("App\Entity\Mailling")
  196.             ->find($idMailling);
  197.         /** @var Mailling $mailling */
  198.         if($mailling){
  199.             if($mailling->getValiderEnvoi()){
  200.                 if(!$mailling->getEnCour()){
  201.                     if(!$mailling->getEnvoyer()){
  202.                         if (strpos($mailling->getEnvoyePar()->getAdresseEnvoi(), '@escalconsulting.com') !== false) {
  203.                             $mailling->setEnCour(true);
  204.                             $em->persist($mailling);
  205.                             $em->flush();
  206.                             if($maillingEnCour->addMaillingSend($mailling, new \DateTime('now')) == false){
  207.                                 return new JsonResponse('le mailling est déja en cours d\'envoi');
  208.                             }
  209.                             return new JsonResponse('le mailling a été lancé en envoi');
  210.                         } else {
  211.                             return new JsonResponse('l\'utilisateur ne possède pas d\'addresse d\'envoi');
  212.                         }
  213.                     } else {
  214.                         return new JsonResponse('le mailling est déjà en envoyé');
  215.                     }
  216.                 } else {
  217.                     return new JsonResponse('le mailling est déjà en cours d\'envoi');
  218.                 }
  219.             } else {
  220.                 return new JsonResponse('le mailling doit être validé');
  221.             }
  222.         } else {
  223.             return new JsonResponse('le mailling n\'existe pas');
  224.         }
  225.     }
  226.     /**
  227.      * @Route("/mailling/enCour/{idMailling}", methods={"GET"}, name="mailling.en.cour.status")
  228.      */
  229.     public function getMaillingInfoEnCourAction($idMaillingEntityManagerInterface $emMaillingEnCour $maillingEnCour){
  230.         $mailling $em->getRepository('App:Mailling')->find($idMailling);
  231.         $retour = [];
  232.         if($mailling){
  233.             $debutMailling $maillingEnCour->getIfMaillingBegin($mailling);
  234.             if($debutMailling !== false){
  235.                 $nbMailling $maillingEnCour->getNbMailMailling($mailling);
  236.                 $nbMaillingAttente $maillingEnCour->getNbMailRestantAvantFin($mailling);
  237.                 if($nbMaillingAttente != false){
  238.                     $dateFurtureEnvoie $maillingEnCour->getHeureEnvoieFuture($mailling);
  239.                     if( $dateFurtureEnvoie == false){
  240.                         $retour['nbMaillAttente'] = $nbMaillingAttente;
  241.                         $retour['nbMailToSend'] = $nbMailling[0];
  242.                         $retour['nbMailSend'] = $nbMailling[1];
  243.                     } else {
  244.                         $retour['message_erreur'] = 'le mailling commencera a être envoyé le ' $dateFurtureEnvoie;
  245.                     }
  246.                 } else {
  247.                     if($mailling->getEnvoyer() == true){
  248.                         $retour['message_erreur'] = 'le mailling a fini d\'être envoyé';
  249.                     }
  250.                     $retour['message_erreur'] = 'Le mailling est en cours d\'envoi, l\'affichage du diagramme peut prendre plusieurs minutes. Merci de patienter.';
  251.                 }
  252.             } else {
  253.                 $retour['message_erreur'] = 'le mailling n\'est pas en envoie';
  254.             }
  255.         } else {
  256.             $retour['message_erreur'] = 'le mailling n\'existe pas';
  257.         }
  258.         return new JsonResponse($retour);
  259.     }
  260.     /**
  261.      * @Route("/maillings/deleteMailling/{idMailling}", methods={"DELETE"}, name="delete.mailling")
  262.      */
  263.     public function deleteMailling($idMaillingEntityManagerInterface $em){
  264.         $mailling $em->getRepository('App:Mailling')->find($idMailling);
  265.         if($mailling->getEnCour() === false){
  266.             $maillingsEnCour $em->getRepository('App:MaillingEnCour')->findBy(['mailling' => $mailling]);
  267.             foreach ($maillingsEnCour as $maillingEnCour){
  268.                 $em->remove($maillingEnCour);
  269.             }
  270.             $em->remove($mailling);
  271.             $em->flush();
  272.             $retour['message'] = 'le mailling a été supprimmer';
  273.         } else {
  274.             $retour['message'] = 'le mailling a déja été lancé en envoie';
  275.         }
  276.         return new JsonResponse($retour);
  277.     }
  278.     /**
  279.      * @Route("/maillings/prepareCoupure/{idClient}", methods={"GET"}, name="mailling.cree.coupure")
  280.      */
  281.     public function creeMaillingCoupure($idClientEntityManagerInterface $emGenerateCoupureInterface $generateCoupure){
  282.         $client $em->getRepository('App:Client')->find($idClient);
  283.         if($client){
  284.             /** @var Client $client */
  285.             $mailling $em->getRepository('App:Mailling')->findOneBy(['client' => $client'typeMail' => 'Coupure''envoyer' => false]);
  286.             /** @var Mailling $mailling */
  287.             if($mailling){
  288.                 foreach ($mailling->getPiecesJointes() as $piecesJointe){
  289.                     $mailling->removePiecesJointe($piecesJointe);
  290.                     $em->remove($piecesJointe);
  291.                 }
  292.                 $em->flush();
  293.             } else{
  294.                 $mailling = new Mailling();
  295.                 $mailling->setClient($client);
  296.                 $date = new \DateTime('now');
  297.                 $mailling->setNom('Retombées presse '$client->getNom(). ' du '.date_format($date'd/m/Y'));
  298.                 $mailling->setObjet('Retombées presse '$client->getNom(). ' du '.date_format($date'd/m/Y'));
  299.                 foreach ($client->getRolesUserClient() as $roleUserClient){
  300.                     /** @var ClientRoleUser $roleUserClient */
  301.                     if($roleUserClient->getRole() == 'Bo'){
  302.                         $mailling->setEnvoyePar($roleUserClient->getAuthUser());
  303.                         $mailling->setReplyTo($roleUserClient->getAuthUser());
  304.                     }
  305.                 }
  306.                 $mailling->setTypeMail('Coupure');
  307.             }
  308.             $coupuresClient $em->getRepository('App:Coupure')->findBy(['client' => $client'envoyer' => false]);
  309.             foreach ($coupuresClient as $coupure){
  310.                 /** @var Coupure $coupure */
  311.                 $pieceJointeMailling = new PieceJointeMailling();
  312.                 $pieceJointeMailling->setUrl($coupure->getPiecesJointe());
  313.                 $pieceJointeMailling->setCoupure($coupure);
  314.                 $pieceJointeMailling->setMailling($mailling);
  315.                 $mailling->addPiecesJointe($pieceJointeMailling);
  316.             }
  317.             $mailling->setValiderEnvoi(0);
  318.             $mailling->setEnCour(0);
  319.             $mailling->setEnvoyer(0);
  320.             $mailling->setNbMail(0);
  321.             $mailling->setNbMailEnvoye(0);
  322.             $mailling->setDebutMailCoupure($generateCoupure->generateDebutMail($mailling));
  323.             $mailling->setFinMailCoupure($generateCoupure->generateFinMail($mailling));
  324.             $mailling->sethyperlien(1);
  325.             $em->persist($mailling);
  326.             $em->flush();
  327.         } else {
  328.             $retour['message_erreur'] = 'le client n\'existe pas';
  329.         }
  330.         return new JsonResponse(['idMailling' => $mailling->getId()]);
  331.     }
  332.     /**
  333.      * @Route("/maillings/information/{idMailling}", methods={"GET"}, name="nb.mail.envoyer")
  334.      */
  335.     public function getNombreMailEnvoyer($idMaillingEntityManagerInterface $em){
  336.         $mailling $em->getRepository('App:Mailling')->findBy(['ancienId' => $idMailling]);
  337.         if(!isset($mailling[0])){
  338.             return new JsonResponse(0);
  339.         }
  340.         $mailling $mailling[0];
  341.         return new JsonResponse($mailling->getNbMailEnvoye());
  342.     }
  343.     /**
  344.      * @Route("/maillings/refreshNbMail/{idMailling}", methods={"GET"}, name="nb.mail.envoyer.refresh")
  345.      */
  346.     public function getRefreshNombreMail(OvhSend $ovhSend$idMaillingEntityManagerInterface $em){
  347.         $mailling $em->getRepository('App:Mailling')->find($idMailling);
  348.         /** @var Mailling $mailling */
  349.         $contactsSend $ovhSend->getContactSend($mailling);
  350.         $nbMail 0;
  351.         foreach ($contactsSend as $contactSend) {
  352.             $userInfo explode('#'$contactSend);
  353.             $userMail trim($userInfo[0]);
  354.             $blackList $em->getRepository('App:BlackList')
  355.                 ->findOneBy(['email'=> $userMail]);
  356.             if(!$blackList) {
  357.                 $nbMail $nbMail 1;
  358.             }
  359.         }
  360.         if($mailling->getNbMail() != $nbMail){
  361.            $mailling->setNbMail($nbMail);
  362.         }
  363.         $em->persist($mailling);
  364.         $em->flush();
  365.         return new JsonResponse($mailling->getNbMail());
  366.     }
  367.     /**
  368.      * @Route("/mailing/contactsenvoireel/{idMailling}", methods={"GET"}, name="mailing.contact.Envoi.reel")
  369.      */
  370.     public function getContactsEnvoiReel($idMaillingEntityManagerInterface $em) {
  371.         $mailing $em->getRepository('App:Mailling')->findOneBy(["ancienId" => $idMailling]);
  372.         $mailingsEnCours $em->getRepository('App:MaillingEnCour')->findBy(["mailling" => $mailing->getId()]);
  373.         $contactsIDIntranet = [];
  374.         foreach ($mailingsEnCours as $mailingEncours) {
  375.             if(!is_null($mailingEncours->getUserId()))
  376.                 $contactsIDIntranet[] = $mailingEncours->getUserId();
  377.         }
  378.         return new JsonResponse($contactsIDIntranet);
  379.     }
  380. }