src/EventSubscriber/ActiviteEventSubscriber.php line 48

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Psr\Log\LoggerInterface;
  6. use App\Entity\UserEleveCredit;
  7. use App\Entity\UserEleveCreditConsommation;
  8. use App\Event\InscriptionCoursEvent;
  9. use App\Event\DisponibiliteEvent;
  10. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  11. use Symfony\Component\Mailer\MailerInterface;
  12. class ActiviteEventSubscriber implements EventSubscriberInterface
  13. {
  14.     private $logger;
  15.     private $eleve_cacher;
  16.     private $dispo_cacher;
  17.     private $cours_cacher;
  18.     private $entityManager;
  19.     private $mailer;
  20.     public function __construct(LoggerInterface $lifecycleLogger
  21.     EntityManagerInterface $entityManager\App\Cacher\ApiEleveCacher $eleve_cacher\App\Cacher\PreSetCacher $cacherMailerInterface $mailer)
  22.     {
  23.         $this->logger $lifecycleLogger;
  24.         $this->eleve_cacher $eleve_cacher;
  25.         $cacher->setItemName('disponibilite');
  26.         $this->dispo_cacher = clone $cacher;
  27.         $cacher->setItemName('cours');
  28.         $this->cours_cacher = clone $cacher;
  29.         $this->entityManager $entityManager;
  30.         $this->mailer $mailer;
  31.     }
  32.     public static function getSubscribedEvents() : array
  33.     {
  34.         return [
  35.             InscriptionCoursEvent::COMMENTED => 'onComment',
  36.             InscriptionCoursEvent::CREATED => 'onSubscribe',
  37.             InscriptionCoursEvent::DELETED => 'onUnSubscribe',
  38.             DisponibiliteEvent::CREATED => 'onAdd',
  39.             DisponibiliteEvent::DELETED => 'onRemove',
  40.             DisponibiliteEvent::UPDATED => 'onChange',
  41.         ];
  42.     }
  43.     public function onSubscribe (InscriptionCoursEvent $Event) {
  44.         $ici = new \DateTimeZone('Europe/Paris');
  45.         $entityManager $this->entityManager;
  46.         $inscription $Event->getInscription();
  47.         $dispo $Event->getDisponibilite();
  48.         $prof $Event->getProf();
  49.         $eleve $Event->getEleve();
  50.         $credit $entityManager->getRepository(UserEleveCredit::class)->findOneByCategorieAndUser($dispo->getCategorie(), $inscription->getUser());
  51.         /* création de la consommation */
  52.         $conso = new UserEleveCreditConsommation;
  53.         $conso->setQuantite($dispo->getHours());
  54.         $conso->setCredit($credit);
  55.         $conso->setUtilisationCours($inscription);
  56.         $inscription->setUserEleveCreditConsommation($conso);
  57.         $entityManager->persist($conso);
  58.         /* Mise à jour des crédits généraux de l'utilisateur */
  59.         $credit->expendsPoints($conso->getQuantite());
  60.         $entityManager->persist($credit);
  61.         $entityManager->flush();
  62.         $debut $dispo->getDebut();
  63.         $debut->modify('+'$ici->getOffset($debut) .' seconds');
  64.         /* prévenir quelqu'un? */
  65.         $this->eleve_cacher->delete($Event->getEleve());
  66.         $this->dispo_cacher->delete($Event->getDisponibilite());
  67.         $this->mailer->send((new TemplatedEmail())
  68.         // ->to('gabriel@pyreweb.com')
  69.         ->to($prof->getEMail())
  70.         ->subject('Créneau réservé')
  71.         ->htmlTemplate('enseignant/mail/reservation.html.twig')
  72.         ->context([
  73.             'user'=>$prof,
  74.             'enseignant'=>$prof,
  75.             'eleve'=>$eleve,
  76.             'dispo'=>$dispo,
  77.             'inscription'=>$inscription,
  78.         ]));
  79.         $this->mailer->send((new TemplatedEmail())
  80.         // ->to('gabriel@pyreweb.com')
  81.         ->to($eleve->getEMail())
  82.         ->subject('Créneau réservé')
  83.         ->htmlTemplate('eleve/mail/reservation.html.twig')
  84.         ->context([
  85.             'user'=>$eleve,
  86.             'enseignant'=>$prof,
  87.             'eleve'=>$eleve,
  88.             'dispo'=>$dispo,
  89.             'inscription'=>$inscription,
  90.         ]));
  91.         $debut->modify('-'$ici->getOffset($debut) .' seconds');
  92.     }
  93.     public function onUnSubscribe (InscriptionCoursEvent $Event) {
  94.         $ici = new \DateTimeZone('Europe/Paris');
  95.         $entityManager $this->entityManager;
  96.         $inscription $Event->getInscription();
  97.         $conso $inscription->getUserEleveCreditConsommation();
  98.         $dispo $Event->getDisponibilite();
  99.         $credit $entityManager->getRepository(UserEleveCredit::class)->findOneByCategorieAndUser($dispo->getCategorie(), $inscription->getUser());
  100.         $prof $Event->getProf();
  101.         $eleve $Event->getEleve();
  102.         /* Mise à jour des crédits généraux de l'utilisateur */
  103.         $credit->redeemPoints($conso->getQuantite());
  104.         $entityManager->persist($credit);
  105.         $entityManager->flush();
  106.         /* prévenir quelqu'un? */
  107.         $this->eleve_cacher->delete($Event->getEleve());
  108.         $this->dispo_cacher->delete($Event->getDisponibilite());
  109.         $debut $dispo->getDebut();
  110.         $debut->modify('+'$ici->getOffset($debut) .' seconds');
  111.         $this->mailer->send((new TemplatedEmail())
  112.         // ->to('gabriel@pyreweb.com')
  113.         ->to($prof->getEMail())
  114.         ->subject('Réservation annulée')
  115.         ->htmlTemplate('enseignant/mail/annulation.html.twig')
  116.         ->context([
  117.             'user'=>$prof,
  118.             'enseignant'=>$prof,
  119.             'eleve'=>$eleve,
  120.             'dispo'=>$dispo,
  121.             'inscription'=>$inscription,
  122.         ]));
  123.         $this->mailer->send((new TemplatedEmail())
  124.         // ->to('gabriel@pyreweb.com')
  125.         ->to($eleve->getEMail())
  126.         ->subject('Réservation annulée')
  127.         ->htmlTemplate('eleve/mail/annulation.html.twig')
  128.         ->context([
  129.             'user'=>$eleve,
  130.             'enseignant'=>$prof,
  131.             'eleve'=>$eleve,
  132.             'dispo'=>$dispo,
  133.             'inscription'=>$inscription,
  134.         ]));
  135.         $debut->modify('-'$ici->getOffset($debut) .' seconds');
  136.     }
  137.     public function onComment (InscriptionCoursEvent $Event) {
  138.         /* prévenir quelqu'un? */
  139.         $this->cours_cacher->delete($Event->getInscription());
  140.     }
  141.     public function onRemove (DisponibiliteEvent $Event) {
  142.         /* désinscrire les élèves? */
  143.         /* prévenir quelqu'un? */
  144.         $this->dispo_cacher->delete($Event->getDisponibilite());
  145.     }
  146.     public function onChange (DisponibiliteEvent $Event) {
  147.         /* désinscrire les élèves? */
  148.         /* prévenir quelqu'un? */
  149.         $this->dispo_cacher->delete($Event->getDisponibilite());
  150.     }
  151.     public function onAdd (DisponibiliteEvent $Event) {
  152.         /* prévenir quelqu'un? */
  153.         $this->dispo_cacher->delete($Event->getDisponibilite());
  154.     }
  155. }