<?php
namespace App\EventSubscriber\User;
use App\Entity\User\UserHistorique;
use App\Event\UserEvent;
use App\Utils\Emails\UserEmail;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\User\User;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class UserSubscriber implements EventSubscriberInterface
{
private $em;
private $userEmail;
public function __construct(
EntityManagerInterface $entityManager,
UserEmail $userEmail
) {
$this->em = $entityManager;
$this->userEmail = $userEmail;
}
public static function getSubscribedEvents()
{
return array(
UserEvent::USER_ENREGISTRER_STATUT => array('onUserEnregistrerStatut', -10),
UserEvent::USER_ENREGISTRER_DATE_VALIDITE => array('onUserEnregistrerDateValidite', -10),
);
}
public function onUserEnregistrerDateValidite(UserEvent $event)
{
$userModifie = $event->getUserModifie();
$dateActuelle = new \DateTime();
// Cas 1 - Date de validite expirée
if (
true === $userModifie->isEnabled() &&
!is_null($userModifie->getDateFinValidite()) &&
($userModifie->getDateFinValidite() <= $dateActuelle)
) {
$userModifie->setEnabled(false);
$this->em->persist($userModifie);
$this->em->flush();
}
// Cas 2 - Date de validite non définie ou non expirée
if (
false === $userModifie->isEnabled() &&
$userModifie->getStatut() == User::STATUT_VALIDE &&
(is_null($userModifie->getDateFinValidite()) ||
(!is_null($userModifie->getDateFinValidite()) && ($userModifie->getDateFinValidite() > $dateActuelle)))
) {
$userModifie->setEnabled(true);
$this->em->persist($userModifie);
$this->em->flush();
}
}
public function onUserEnregistrerStatut(UserEvent $event)
{
$userModifie = $event->getUserModifie();
$user = $event->getUser();
if ($userModifie->getStatut() == User::STATUT_VALIDE) {
if (false === strpos($userModifie->getEmail(), getenv('APP_SERVER_NAME'))) {
$this->userEmail->alerteCreationCompteConfirmation($userModifie);
}
$userModifie->setEnabled(true);
$this->em->persist($userModifie);
$this->em->flush();
}
if ($userModifie->getStatut() == User::STATUT_ATTENTE) {
if (false === strpos($userModifie->getEmail(), getenv('APP_SERVER_NAME'))) {
$this->userEmail->alerteCreationCompteModeration($userModifie);
}
$userModifie->setEnabled(false);
$this->em->persist($userModifie);
$this->em->flush();
}
if ($userModifie->getStatut() == User::STATUT_REFUSE) {
if (false === strpos($userModifie->getEmail(), getenv('APP_SERVER_NAME'))) {
$this->userEmail->alerteCreationCompteRefuse($userModifie);
}
$userModifie->setEnabled(false);
$this->em->persist($userModifie);
$this->em->flush();
}
// Ajout dans table historique
$userHistorique = new UserHistorique();
$userHistorique->setUserModifie($userModifie);
$userHistorique->setUser($user);
$userHistorique->setStatut($userModifie->getStatut());
$userModifie->addUserHistorique($userHistorique);
$this->em->persist($userModifie);
$this->em->flush();
}
}