src/EventSubscriber/UserEventSubscriber.php line 295

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\AppUserEvent;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Psr\Log\LoggerInterface;
  7. use App\Event\EleveEvent;
  8. use App\Event\CreditEvent;
  9. use App\Event\EnseignantEvent;
  10. use App\Event\InscriptionFormateurEvent;
  11. use App\Event\InscriptionEleveEvent;
  12. use App\Event\ValidationFormateurEvent;
  13. use App\Event\VehiculeEvent;
  14. use App\Controller\ApiEnseignantController;
  15. use App\Cacher\ApiEleveCacher;
  16. use App\Cacher\EnseignantCacher;
  17. use App\Cacher\VehiculeEnseignantCacher;
  18. use App\Cacher\PreSetCacher;
  19. use App\Event\UserEvent;
  20. use Symfony\Component\Mailer\MailerInterface;
  21. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\Mime\Address;
  24. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  25. class UserEventSubscriber implements EventSubscriberInterface
  26. {
  27.     private $logger;
  28.     public function __construct(LoggerInterface $lifecycleLoggerEntityManagerInterface $entityManagerMailerInterface $mailer
  29.         UrlGeneratorInterface $router,
  30.         ApiEleveCacher $eleve_cacherEnseignantCacher $profcacherVehiculeEnseignantCacher $vroum_cacherPreSetCacher $cacher
  31.     )
  32.     {
  33.         $this->logger $lifecycleLogger;
  34.         $this->eleve_cacher $eleve_cacher;
  35.         $this->entityManager $entityManager;
  36.         $cacher->setItemName('inscriptions');
  37.         $this->inscriptions_cacher = clone $cacher;
  38.         $this->prof_cacher $profcacher;
  39.         $this->vroum_cacher $vroum_cacher;
  40.         $cacher->setItemName('lifecycle');
  41.         $this->lifecycle_cacher = clone $cacher;
  42.         $this->mailer $mailer;
  43.         $this->router $router;
  44.     }
  45.     public static function getSubscribedEvents() : array
  46.     {
  47.         return [
  48.             EnseignantEvent::DELETE => 'onEnseignantDelete',
  49.             EnseignantEvent::UPDATE => 'onEnseignantUpdate',
  50.             EnseignantEvent::CREATE => 'onEnseignantCreate',
  51.             EnseignantEvent::UNSUSPENDED => 'onEnseignantUnsuspend',
  52.             EnseignantEvent::SUSPENDED => 'onEnseignantSuspend',
  53.             EleveEvent::DELETE => 'onEleveDelete',
  54.             EleveEvent::UPDATE => 'onEleveUpdate',
  55.             EleveEvent::CREATE => 'onEleveCreate',
  56.             CreditEvent::ADDED => 'onEleveCreditAdd',
  57.             InscriptionFormateurEvent::NAME => 'onInscriptionFormateurNew',
  58.             InscriptionEleveEvent::NAME => 'onInscriptionEleveNew',
  59.             InscriptionEleveEvent::VALIDATE => 'onInscriptionEleveValidate',
  60.             InscriptionFormateurEvent::VALIDATE => 'onInscriptionFormateurValidate',
  61.             ValidationFormateurEvent::NAME => 'onInscriptionValidate',
  62.             VehiculeEvent::EVALUATED => 'onVehiculeEvaluate',
  63.             VehiculeEvent::CREATED => 'onVehiculeCreate',
  64.             VehiculeEvent::UPDATED => 'onVehiculeUpdate',
  65.             VehiculeEvent::DELETED => 'onVehiculeDelete',
  66.             UserEvent::ANONYMISE => 'onUserAnonymise',
  67.         ];
  68.     }
  69.     public function onUserAnonymise(UserEvent $event){
  70.         $user $event->getUser();
  71.         // Log the event
  72.         $this->logger->info('ANONYMISATION', [
  73.             'mail' => $user->getEmail(),
  74.             'nom' => $user->getNom(),
  75.             'prenom' => $user->getPrenom(),
  76.             'roles' => $user->getRoles(),
  77.             'username' => $user->getUsername(),
  78.         ]);
  79.         $this->eleve_cacher->delete($user);
  80.         // $user->
  81.         // Send an email
  82.         // $this->mailer->send((new TemplatedEmail())
  83.         //     ->to(new Address($user->getEmail(), $user->getPrenom().' '.$user->getNom()))
  84.         //     ->subject('Anonymisation de votre compte')
  85.         //     ->htmlTemplate('mail/anonymisation.html.twig')
  86.         //     ->context([
  87.         //         'user' => $user,
  88.         //     ])
  89.         // );
  90.     }
  91.     public function onEleveCreditAdd(CreditEvent $event){
  92.         // Log the event
  93.         $this->logger->info('crédit ajouté', [
  94.             'User'=>$event->getEleve()->getUserIdentifier(),
  95.             'Categorie'=>$event->getCategorie()->getIntitule(),
  96.             'points'=>$event->getMovedPoints()
  97.         ]);
  98.         $e = new \Exception;
  99.         $trace print_r($e->getTraceAsString(),true);
  100.         $trace .= '#_GET '.print_r($_GET,true);
  101.         $trace .= '#_POST '.print_r($_POST,true);
  102.         $trace .= '#_SERVER '.print_r($_SERVER,true);
  103.         $trace .= '#Request '.print_r(Request::createFromGlobals()->getContent(),true);
  104.         $this->mailer->send((new TemplatedEmail())
  105.             ->to('gabriel@pyreweb.com')
  106.             ->subject('Points ajoutés')
  107.             ->textTemplate('maildebug.txt.twig')
  108.             ->context([
  109.                 'texte'=>$event->getEleve()->getUserIdentifier().' a reçu '.$event->getMovedPoints().' points de la catégorie '.$event->getCategorie()->getIntitule().'.'.PHP_EOL.$trace,
  110.             ])
  111.         );
  112.         $this->eleve_cacher->delete($event->getEleve());
  113.     }
  114.     public function onEleveDelete(EleveEvent $event)
  115.     {
  116.         $eleve $event->getUser();
  117.         
  118.         // Log the event
  119.         $this->logger->info('SUPPRESSION', [
  120.             'mail' => $eleve->getEmail(),
  121.             'nom' => $eleve->getNom(),
  122.             'prenom' => $eleve->getPrenom(),
  123.         ]);
  124.         // Register the event in DB
  125.         $userEvent = new AppUserEvent();
  126.         $userEvent->setType('SUPPRESSION');
  127.         $userEvent->setMail($eleve->getEmail());
  128.         $userEvent->setNom($eleve->getNom());
  129.         $userEvent->setPrenom($eleve->getPrenom());
  130.         $this->eleve_cacher->delete($eleve);
  131.     }
  132.     public function onEleveCreate(EleveEvent $event)
  133.     {
  134.         $eleve $event->getUser();
  135.         $this->eleve_cacher->delete($eleve);
  136.     }
  137.     public function onEleveUpdate(EleveEvent $event)
  138.     {
  139.         $eleve $event->getUser();
  140.         $eleve->setUpdatedAt(new \DateTime('NOW'));
  141.         $this->entityManager->persist($eleve);
  142.         $this->entityManager->flush();
  143.         $this->eleve_cacher->delete($eleve);
  144.     }
  145.     public function onVehiculeUpdate(VehiculeEvent $event)
  146.     {
  147.         $vehicule $event->getVehicule();
  148.         $this->vroum_cacher->delete($vehicule);
  149.     }
  150.     public function onVehiculeDelete(VehiculeEvent $event)
  151.     {
  152.         $vehicule $event->getVehicule();
  153.         $this->vroum_cacher->delete($vehicule);
  154.     }
  155.     public function onVehiculeCreate(VehiculeEvent $event)
  156.     {
  157.         $prof $event->getEnseignant();
  158.         $vehicule $event->getVehicule();
  159.         $this->vroum_cacher->delete($vehicule);
  160.         $context = [
  161.             'user'=>$prof,
  162.             'vehicule'=>$vehicule,
  163.         ];
  164.         try {
  165.             $dataV = [];
  166.             $dataV['id'] = $prof->getId();
  167.             $dataV['vehicule_immatriculation'] = $vehicule->getVehiculeImmatriculation();
  168.             if ($vehicule->getVehiculeAssurance()) {
  169.                 $dataV['path'] = $vehicule->getVehiculeAssurance()->getPath();
  170.                 $context['assurance'] = $this->router->generate('admin_vehicule_download_document'$dataVUrlGeneratorInterface::ABSOLUTE_URL);
  171.             }
  172.             if ($vehicule->getVehiculeControle()) {
  173.                 $dataV['path'] = $vehicule->getVehiculeControle()->getPath();
  174.                 $context['controle'] = $this->router->generate('admin_vehicule_download_document'$dataVUrlGeneratorInterface::ABSOLUTE_URL);
  175.             }
  176.         } catch (\Symfony\Component\Routing\Exception\InvalidParameterException $e) {
  177.         }
  178.         $this->mailer->send((new TemplatedEmail())
  179.         ->subject('Véhicule ajouté')
  180.         ->htmlTemplate('admin/mail/ajout_vehicule.html.twig')
  181.         ->context($context));
  182.     }
  183.     public function onVehiculeEvaluate(VehiculeEvent $event){
  184.         $prof $event->getEnseignant();
  185.         $vehicule $event->getVehicule();
  186.         $this->vroum_cacher->delete($vehicule);
  187.         // Log the event
  188.         $this->logger->info('évaluation véhicule', [
  189.             'immatriculation' => $vehicule->getVehiculeImmatriculation(),
  190.             'nom' => $prof->getNom(),
  191.             'prenom' => $prof->getPrenom(),
  192.             'valid' => $vehicule->getValid(),
  193.             'invalid' => $vehicule->getInvalid(),
  194.         ]);
  195.         $this->mailer->send((new TemplatedEmail())
  196.         ->to($prof->getEMail())
  197.         ->subject('Véhicule évalué')
  198.         ->htmlTemplate('admin/mail/evaluation_vehicule.html.twig')
  199.         ->context([
  200.             'user'=>$prof,
  201.             'vehicule'=>$vehicule,
  202.         ]));
  203.     }
  204.     public function onEnseignantSuspend(EnseignantEvent $event)
  205.     {
  206.         $prof $event->getUser();
  207.         
  208.         // Log the event
  209.         $this->logger->info('DESACTIVATION', [
  210.             'mail' => $prof->getEmail(),
  211.             'nom' => $prof->getNom(),
  212.             'prenom' => $prof->getPrenom(),
  213.         ]);
  214.         // Register the event in DB
  215.         $userEvent = new AppUserEvent();
  216.         $userEvent->setType('DESACTIVATION');
  217.         $userEvent->setMail($prof->getEmail());
  218.         $userEvent->setNom($prof->getNom());
  219.         $userEvent->setPrenom($prof->getPrenom());
  220.         $this->prof_cacher->delete($prof);
  221.         $objet 'Compte suspendu';
  222.         $this->mailer->send((new TemplatedEmail())
  223.         ->to($prof->getEMail())
  224.         ->subject($objet)
  225.         ->htmlTemplate('admin/mail/reactivation_prof.html.twig')
  226.         ->context([
  227.             'user'=>$prof,
  228.         ]));
  229.     }
  230.     public function onEnseignantUnsuspend(EnseignantEvent $event)
  231.     {
  232.         $prof $event->getUser();
  233.         
  234.         // Log the event
  235.         $this->logger->info('REACTIVATION', [
  236.             'mail' => $prof->getEmail(),
  237.             'nom' => $prof->getNom(),
  238.             'prenom' => $prof->getPrenom(),
  239.         ]);
  240.         // Register the event in DB
  241.         $userEvent = new AppUserEvent();
  242.         $userEvent->setType('REACTIVATION');
  243.         $userEvent->setMail($prof->getEmail());
  244.         $userEvent->setNom($prof->getNom());
  245.         $userEvent->setPrenom($prof->getPrenom());
  246.         $this->prof_cacher->delete($prof);
  247.         $objet 'Compte réactivé';
  248.         $this->mailer->send((new TemplatedEmail())
  249.         ->to($prof->getEMail())
  250.         ->subject($objet)
  251.         ->htmlTemplate('admin/mail/desactivation_prof.html.twig')
  252.         ->context([
  253.             'user'=>$prof,
  254.         ]));
  255.     }
  256.     public function onEnseignantDelete(EnseignantEvent $event)
  257.     {
  258.         $prof $event->getUser();
  259.         
  260.         // Log the event
  261.         $this->logger->info('SUPPRESSION', [
  262.             'mail' => $prof->getEmail(),
  263.             'nom' => $prof->getNom(),
  264.             'prenom' => $prof->getPrenom(),
  265.         ]);
  266.         // Register the event in DB
  267.         $userEvent = new AppUserEvent();
  268.         $userEvent->setType('SUPPRESSION');
  269.         $userEvent->setMail($prof->getEmail());
  270.         $userEvent->setNom($prof->getNom());
  271.         $userEvent->setPrenom($prof->getPrenom());
  272.         $this->prof_cacher->delete($prof);
  273.         $objet 'Compte supprimé';
  274.         $this->mailer->send((new TemplatedEmail())
  275.         ->to($prof->getEMail())
  276.         ->subject($objet)
  277.         ->htmlTemplate('admin/mail/suppression_prof.html.twig')
  278.         ->context([
  279.             'user'=>$prof,
  280.         ]));
  281.     }
  282.     public function onEnseignantCreate(EnseignantEvent $event)
  283.     {
  284.         $prof $event->getUser();
  285.         $this->prof_cacher->delete($prof);
  286.     }
  287.     public function onEnseignantUpdate(EnseignantEvent $event)
  288.     {
  289.         $prof $event->getUser();
  290.         $prof->setUpdatedAt(new \DateTime('NOW'));
  291.         $this->entityManager->persist($prof);
  292.         $this->entityManager->flush();
  293.         $this->prof_cacher->delete($prof);
  294.     }
  295.     public function onInscriptionFormateurNew(InscriptionFormateurEvent $event)
  296.     {
  297.         
  298.         $prof $event->getInscription();
  299.         // Delete the cache entries
  300.         $this->inscriptions_cacher->empty();
  301.         $this->lifecycle_cacher->empty();
  302.         
  303.         // Log the event
  304.         $this->logger->info('INSCRIPTION', [
  305.             'mail' => $prof->getEmail(),
  306.             'nom' => $prof->getNom(),
  307.             'prenom' => $prof->getPrenom(),
  308.         ]);
  309.         if (!$prof->getUserEnseignantAccountDetail()) {
  310.             $detail = new \App\Entity\UserEnseignantAccountDetail;
  311.             $prof->setUserEnseignantAccountDetail($detail);
  312.             $this->entityManager->persist($prof);
  313.         }
  314.         // Register the event in DB
  315.         $userEvent = new AppUserEvent();
  316.         $userEvent->setType('INSCRIPTION');
  317.         $userEvent->setMail($prof->getEmail());
  318.         $userEvent->setNom($prof->getNom());
  319.         $userEvent->setPrenom($prof->getPrenom());
  320.         $this->entityManager->persist($userEvent);
  321.         $this->entityManager->flush();
  322.         // Send Mail
  323.     }
  324.     public function onInscriptionEleveNew(InscriptionEleveEvent $event)
  325.     {
  326.         // Delete the cache entries
  327.         $this->lifecycle_cacher->empty();
  328.         $this->eleve_cacher->delete($event->getInscription());
  329.         $this->eleve_cacher->delete('count');
  330.         // Log the event
  331.         $this->logger->info('ELEVE', [
  332.             'mail' => $event->getInscription()->getEmail(),
  333.             'nom' => $event->getInscription()->getNom(),
  334.             'prenom' => $event->getInscription()->getPrenom(),
  335.         ]);
  336.         // Register the event in DB
  337.         $userEvent = new AppUserEvent();
  338.         $userEvent->setType('ELEVE');
  339.         $userEvent->setMail($event->getInscription()->getEmail());
  340.         $userEvent->setNom($event->getInscription()->getNom());
  341.         $userEvent->setPrenom($event->getInscription()->getPrenom());
  342.         $this->entityManager->persist($userEvent);
  343.         $this->entityManager->flush();
  344.     }
  345.     public function onInscriptionEleveValidate(InscriptionEleveEvent $event)
  346.     {
  347.         $context = [];
  348.         $context['eleve'] = $event->getInscription();
  349.         $this->mailer->send((new TemplatedEmail())
  350.         ->subject('Nouvelle inscription')
  351.         ->htmlTemplate('admin/mail/new_eleve.html.twig')
  352.         ->context($context));
  353.     }
  354.     public function onInscriptionFormateurValidate(InscriptionFormateurEvent $event)
  355.     {
  356.         $context = [];
  357.         $context['enseignant'] = $event->getInscription();
  358.         $this->mailer->send((new TemplatedEmail())
  359.         ->subject('Nouvelle inscription')
  360.         ->htmlTemplate('admin/mail/new_enseignant.html.twig')
  361.         ->context($context));
  362.         $this->inscriptions_cacher->delete($event->getInscription());
  363.         $this->prof_cacher->delete($event->getInscription());
  364.     }
  365.     public function onInscriptionValidate(ValidationFormateurEvent $event)
  366.     {
  367.         // Delete the cache entries
  368.         $this->inscriptions_cacher->empty();
  369.         $this->prof_cacher->empty();
  370.         $this->lifecycle_cacher->empty();
  371.         // Log the event
  372.         $this->logger->info('VALIDATION', [
  373.             'mail' => $event->getValidation()->getEmail(),
  374.             'nom' => $event->getValidation()->getNom(),
  375.             'prenom' => $event->getValidation()->getPrenom(),
  376.         ]);
  377.         // Register the event in DB
  378.         $userEvent = new AppUserEvent();
  379.         $userEvent->setType('VALIDATION');
  380.         $userEvent->setMail($event->getValidation()->getEmail());
  381.         $userEvent->setNom($event->getValidation()->getNom());
  382.         $userEvent->setPrenom($event->getValidation()->getPrenom());
  383.         $this->entityManager->persist($userEvent);
  384.         $this->entityManager->flush();
  385.         
  386.         $context = [];
  387.         $context['user'] = $event->getValidation();
  388.         $this->mailer->send((new TemplatedEmail())
  389.         ->to($event->getValidation()->getEMail())
  390.         ->subject('Inscription validée')
  391.         ->htmlTemplate('enseignant/mail/validation_inscription.html.twig')
  392.         ->context($context));
  393.     }
  394.     
  395. }