src/EventSubscriber/User/UserSubscriber.php line 62

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\User;
  3. use App\Entity\User\UserHistorique;
  4. use App\Event\UserEvent;
  5. use App\Utils\Emails\UserEmail;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use App\Entity\User\User;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class UserSubscriber implements EventSubscriberInterface
  10. {
  11.     private $em;
  12.     private $userEmail;
  13.     public function __construct(
  14.         EntityManagerInterface $entityManager,
  15.         UserEmail $userEmail
  16.     ) {
  17.         $this->em           $entityManager;
  18.         $this->userEmail    $userEmail;
  19.     }
  20.     public static function getSubscribedEvents()
  21.     {
  22.         return array(
  23.             UserEvent::USER_ENREGISTRER_STATUT          => array('onUserEnregistrerStatut', -10),
  24.             UserEvent::USER_ENREGISTRER_DATE_VALIDITE   => array('onUserEnregistrerDateValidite', -10),
  25.         );
  26.     }
  27.     public function onUserEnregistrerDateValidite(UserEvent $event)
  28.     {
  29.         $userModifie    $event->getUserModifie();
  30.         $dateActuelle   = new \DateTime();
  31.         // Cas 1 - Date de validite expirée
  32.         if (
  33.             true === $userModifie->isEnabled() &&
  34.             !is_null($userModifie->getDateFinValidite()) &&
  35.             ($userModifie->getDateFinValidite() <= $dateActuelle)
  36.         ) {
  37.             $userModifie->setEnabled(false);
  38.             $this->em->persist($userModifie);
  39.             $this->em->flush();
  40.         }
  41.         // Cas 2 - Date de validite non définie ou non expirée
  42.         if (
  43.             false === $userModifie->isEnabled() &&
  44.             $userModifie->getStatut() == User::STATUT_VALIDE &&
  45.             (is_null($userModifie->getDateFinValidite()) ||
  46.             (!is_null($userModifie->getDateFinValidite()) && ($userModifie->getDateFinValidite() > $dateActuelle)))
  47.         ) {
  48.             $userModifie->setEnabled(true);
  49.             $this->em->persist($userModifie);
  50.             $this->em->flush();
  51.         }
  52.     }
  53.     public function onUserEnregistrerStatut(UserEvent $event)
  54.     {
  55.         $userModifie    $event->getUserModifie();
  56.         $user           $event->getUser();
  57.         if ($userModifie->getStatut() == User::STATUT_VALIDE) {
  58.             if (false === strpos($userModifie->getEmail(), getenv('APP_SERVER_NAME'))) {
  59.                 $this->userEmail->alerteCreationCompteConfirmation($userModifie);
  60.             }
  61.             $userModifie->setEnabled(true);
  62.             $this->em->persist($userModifie);
  63.             $this->em->flush();
  64.         }
  65.         if ($userModifie->getStatut() == User::STATUT_ATTENTE) {
  66.             if (false === strpos($userModifie->getEmail(), getenv('APP_SERVER_NAME'))) {
  67.                 $this->userEmail->alerteCreationCompteModeration($userModifie);
  68.             }
  69.             $userModifie->setEnabled(false);
  70.             $this->em->persist($userModifie);
  71.             $this->em->flush();
  72.         }
  73.         if ($userModifie->getStatut() == User::STATUT_REFUSE) {
  74.             if (false === strpos($userModifie->getEmail(), getenv('APP_SERVER_NAME'))) {
  75.                 $this->userEmail->alerteCreationCompteRefuse($userModifie);
  76.             }
  77.             $userModifie->setEnabled(false);
  78.             $this->em->persist($userModifie);
  79.             $this->em->flush();
  80.         }
  81.         // Ajout dans table historique
  82.         $userHistorique = new UserHistorique();
  83.         $userHistorique->setUserModifie($userModifie);
  84.         $userHistorique->setUser($user);
  85.         $userHistorique->setStatut($userModifie->getStatut());
  86.         $userModifie->addUserHistorique($userHistorique);
  87.         $this->em->persist($userModifie);
  88.         $this->em->flush();
  89.     }
  90. }