src/EventSubscriber/ActiviteEventSubscriber.php line 147

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::DELETEDS => 'onMassRemove',
  41.             DisponibiliteEvent::UPDATED => 'onChange',
  42.         ];
  43.     }
  44.     public function onSubscribe (InscriptionCoursEvent $Event) {
  45.         $ici = new \DateTimeZone('Europe/Paris');
  46.         $entityManager $this->entityManager;
  47.         $inscription $Event->getInscription();
  48.         $dispo $Event->getDisponibilite();
  49.         $prof $Event->getProf();
  50.         $eleve $Event->getEleve();
  51.         $credit $entityManager->getRepository(UserEleveCredit::class)->findOneByCategorieAndUser($dispo->getCategorie(), $inscription->getUser());
  52.         /* création de la consommation */
  53.         $conso = new UserEleveCreditConsommation;
  54.         $conso->setQuantite($dispo->getHours());
  55.         $conso->setCredit($credit);
  56.         $conso->setUtilisationCours($inscription);
  57.         $inscription->setUserEleveCreditConsommation($conso);
  58.         $entityManager->persist($conso);
  59.         /* Mise à jour des crédits généraux de l'utilisateur */
  60.         $credit->expendsPoints($conso->getQuantite());
  61.         $entityManager->persist($credit);
  62.         $entityManager->flush();
  63.         $debut $dispo->getDebut();
  64.         $debut->modify('+'$ici->getOffset($debut) .' seconds');
  65.         /* prévenir quelqu'un? */
  66.         $this->eleve_cacher->delete($Event->getEleve());
  67.         $this->dispo_cacher->delete($Event->getDisponibilite());
  68.         $this->mailer->send((new TemplatedEmail())
  69.         // ->to('gabriel@pyreweb.com')
  70.         ->to($prof->getEMail())
  71.         ->subject('Créneau réservé')
  72.         ->htmlTemplate('enseignant/mail/reservation.html.twig')
  73.         ->context([
  74.             'user'=>$prof,
  75.             'enseignant'=>$prof,
  76.             'eleve'=>$eleve,
  77.             'dispo'=>$dispo,
  78.             'inscription'=>$inscription,
  79.         ]));
  80.         $this->mailer->send((new TemplatedEmail())
  81.         // ->to('gabriel@pyreweb.com')
  82.         ->to($eleve->getEMail())
  83.         ->subject('Créneau réservé')
  84.         ->htmlTemplate('eleve/mail/reservation.html.twig')
  85.         ->context([
  86.             'user'=>$eleve,
  87.             'enseignant'=>$prof,
  88.             'eleve'=>$eleve,
  89.             'dispo'=>$dispo,
  90.             'inscription'=>$inscription,
  91.         ]));
  92.         $debut->modify('-'$ici->getOffset($debut) .' seconds');
  93.     }
  94.     public function onUnSubscribe (InscriptionCoursEvent $Event) {
  95.         $ici = new \DateTimeZone('Europe/Paris');
  96.         $entityManager $this->entityManager;
  97.         $inscription $Event->getInscription();
  98.         $conso $inscription->getUserEleveCreditConsommation();
  99.         $dispo $Event->getDisponibilite();
  100.         $credit $entityManager->getRepository(UserEleveCredit::class)->findOneByCategorieAndUser($dispo->getCategorie(), $inscription->getUser());
  101.         $prof $Event->getProf();
  102.         $eleve $Event->getEleve();
  103.         /* Mise à jour des crédits généraux de l'utilisateur */
  104.         $credit->redeemPoints($conso->getQuantite());
  105.         $entityManager->persist($credit);
  106.         $entityManager->flush();
  107.         /* prévenir quelqu'un? */
  108.         $this->eleve_cacher->delete($Event->getEleve());
  109.         $this->dispo_cacher->delete($Event->getDisponibilite());
  110.         $debut $dispo->getDebut();
  111.         $debut->modify('+'$ici->getOffset($debut) .' seconds');
  112.         $this->mailer->send((new TemplatedEmail())
  113.         // ->to('gabriel@pyreweb.com')
  114.         ->to($prof->getEMail())
  115.         ->subject('Réservation annulée')
  116.         ->htmlTemplate('enseignant/mail/annulation.html.twig')
  117.         ->context([
  118.             'user'=>$prof,
  119.             'enseignant'=>$prof,
  120.             'eleve'=>$eleve,
  121.             'dispo'=>$dispo,
  122.             'inscription'=>$inscription,
  123.         ]));
  124.         $this->mailer->send((new TemplatedEmail())
  125.         // ->to('gabriel@pyreweb.com')
  126.         ->to($eleve->getEMail())
  127.         ->subject('Réservation annulée')
  128.         ->htmlTemplate('eleve/mail/annulation.html.twig')
  129.         ->context([
  130.             'user'=>$eleve,
  131.             'enseignant'=>$prof,
  132.             'eleve'=>$eleve,
  133.             'dispo'=>$dispo,
  134.             'inscription'=>$inscription,
  135.         ]));
  136.         $debut->modify('-'$ici->getOffset($debut) .' seconds');
  137.     }
  138.     public function onComment (InscriptionCoursEvent $Event) {
  139.         /* prévenir quelqu'un? */
  140.         $this->cours_cacher->delete($Event->getInscription());
  141.     }
  142.     public function onRemove (DisponibiliteEvent $Event) {
  143.         /* désinscrire les élèves? */
  144.         /* prévenir quelqu'un? */
  145.         $this->dispo_cacher->delete($Event->getDisponibilite());
  146.     }
  147.     public function onMassRemove (DisponibiliteEvent $Event) {
  148.         /* désinscrire les élèves? */
  149.         /* prévenir quelqu'un? */
  150.         $this->dispo_cacher->empty();
  151.     }
  152.     public function onChange (DisponibiliteEvent $Event) {
  153.         /* désinscrire les élèves? */
  154.         /* prévenir quelqu'un? */
  155.         $this->dispo_cacher->delete($Event->getDisponibilite());
  156.     }
  157.     public function onAdd (DisponibiliteEvent $Event) {
  158.         /* prévenir quelqu'un? */
  159.         $this->dispo_cacher->delete($Event->getDisponibilite());
  160.     }
  161. }