<?php
namespace App\EventSubscriber;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
class EasyAdminSubscriber implements EventSubscriberInterface
{
private $entityManager;
private $passwordHasher;
public function __construct(EntityManagerInterface $entityManager, UserPasswordHasherInterface $passwordHasher)
{
$this->entityManager = $entityManager;
$this->passwordHasher = $passwordHasher;
}
public static function getSubscribedEvents():array
{
return [
BeforeEntityPersistedEvent::class => ['add'],
BeforeEntityUpdatedEvent::class => ['update'],
];
}
public function update(BeforeEntityUpdatedEvent $event)
{
$entity = $event->getEntityInstance();
if ($entity instanceof User) {
$this->setPassword($entity);
}else{
return;
}
}
public function add(BeforeEntityPersistedEvent $event)
{
$entity = $event->getEntityInstance();
if ($entity instanceof User) {
$this->setPassword($entity);
}else{
return;
}
}
/**
* @param User $entity
*/
public function setPassword(User $entity): void
{
$password = $entity->getPassword();
if ($entity->getPlainPassword() !== null) {
$password = $entity->getPlainPassword();
}
if(preg_match('/^\$2[ayb]\$.{56}$/', $password) == 0){
$hash_password = $this->passwordHasher->hashPassword($entity, $password);
$entity->setPassword($hash_password);
$this->entityManager->persist($entity);
$this->entityManager->flush();
}
}
}