src/EventSubscriber/EasyAdminSubscriber.php line 57

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\FormerStudent;
  4. use App\Entity\FormerStudentContribution;
  5. use App\Entity\ClassRoom;
  6. use App\Entity\ContributionType;
  7. use App\Entity\User;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  10. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\RequestStack;
  14. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  15. class EasyAdminSubscriber implements EventSubscriberInterface
  16. {
  17.     public function __construct(
  18.         private UserPasswordHasherInterface $passwordHasher,
  19.         private EntityManagerInterface      $em,
  20.         private RequestStack                $requestStack,
  21.     )
  22.     {
  23.     }
  24.     public static function getSubscribedEvents()
  25.     {
  26.         return [
  27.             BeforeEntityPersistedEvent::class => ['onCreate'],
  28.             BeforeEntityUpdatedEvent::class => ['onUpdate']
  29.         ];
  30.     }
  31.     public function onCreate(BeforeEntityPersistedEvent $event)
  32.     {
  33.         $entity $event->getEntityInstance();
  34.         if ($entity instanceof User) {
  35.             $this->hashPassword($entity$this->requestStack->getCurrentRequest()->get('User'));
  36.         }
  37.         if ($entity instanceof FormerStudentContribution) {
  38.             $contributionType $this->requestStack->getCurrentRequest()->get('contributionTypeSelect');
  39.             $contributionType $this->em->getRepository(ContributionType::class)->find(intval($contributionType));
  40.             $entity->setContributionType($contributionType->getName());
  41.             $entity->setRate($contributionType->getRate());
  42.             $entity->setYear($entity->getContribution()->getYear());
  43.             $this->em->persist($entity);
  44.             $this->em->flush();
  45.         }
  46.     }
  47.     public function onUpdate(BeforeEntityUpdatedEvent $event)
  48.     {
  49.         $entity $event->getEntityInstance();
  50.         if ($entity instanceof User) {
  51.             $this->hashPassword($entity$this->requestStack->getCurrentRequest()->get('User'));
  52.         }
  53.         if ($entity instanceof ClassRoom) {
  54.             $this->em->persist($entity);
  55.             $this->em->flush($entity);
  56.         }
  57.     }
  58.     public function hashPassword($entity$request)
  59.     {
  60.         $newPassword $request['plainText']['plainPassword']['first'] ?: null;
  61.         if ($newPassword) {
  62.             $hashedPassword $this->passwordHasher->hashPassword(
  63.                 $entity,
  64.                 $newPassword
  65.             );
  66.             $entity->setPassword($hashedPassword);
  67.             $this->em->persist($entity);
  68.             $this->em->flush();
  69.         }
  70.     }
  71. }