src/EventSubscriber/UserSubscriber.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use App\Manager\UserManager;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;
  7. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  10. class UserSubscriber implements EventSubscriberInterface
  11. {
  12.     /**
  13.      * @var UserManager
  14.      */
  15.     private $userManager;
  16.     /**
  17.      * @var EntityManagerInterface
  18.      */
  19.     private $entityManager;
  20.     /**
  21.      * @var UserPasswordEncoderInterface
  22.      */
  23.     private $passwordEncoder;
  24.     public function __construct(UserManager $userManagerEntityManagerInterface $entityManagerUserPasswordEncoderInterface $passwordEncoder)
  25.     {
  26.         $this->userManager $userManager;
  27.         $this->entityManager $entityManager;
  28.         $this->passwordEncoder $passwordEncoder;
  29.     }
  30.     public static function getSubscribedEvents()
  31.     {
  32.         return [
  33.             AfterEntityPersistedEvent::class => ['sendEmail'],
  34.             BeforeEntityUpdatedEvent::class => ['updatePasswordIfExisting'],
  35.         ];
  36.     }
  37.     public function updatePasswordIfExisting(BeforeEntityUpdatedEvent $event)
  38.     {
  39.         $entity $event->getEntityInstance();
  40.         if (!($entity instanceof User)) {
  41.             return;
  42.         }
  43.         $uow $this->entityManager->getUnitOfWork();
  44.         $uow->computeChangeSets();
  45.         $changeset $uow->getEntityChangeSet($entity);
  46.         if (array_key_exists('password'$changeset) && $changeset['password'][0] !== $changeset['password'][1]) {
  47.             $entity->setPassword($this->passwordEncoder->encodePassword($entity$changeset['password'][1]));
  48.         }
  49.     }
  50.     public function sendEmail(AfterEntityPersistedEvent $event)
  51.     {
  52.         $entity $event->getEntityInstance();
  53.         if (!($entity instanceof User)) {
  54.             return;
  55.         }
  56.         $this->userManager->sendConfirmationRegisterMail($entity);
  57.     }
  58. }