<?php
namespace App\EasyAdmin\Controller;
use App\Entity\AccessControl\AccessUser;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Field\ArrayField;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Field\EmailField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class AccessUserCrudController extends AbstractCrudController implements EventSubscriberInterface
{
private $passwordEncoder;
public function __construct(UserPasswordEncoderInterface $passwordEncoder)
{
$this->passwordEncoder = $passwordEncoder;
}
public static function getSubscribedEvents(): array
{
return [
BeforeEntityPersistedEvent::class => 'hashPassword',
BeforeEntityUpdatedEvent::class => 'hashPassword',
];
}
public function hashPassword($event): void
{
$entity = $event->getEntityInstance();
if (!$entity instanceof AccessUser) {
return;
}
if(empty($entity->getUsername())) {
$entity->setUsername($entity->getEmail());
}
if (!empty($entity->plainPassword)) {
$hashedPassword = $this->passwordEncoder->encodePassword($entity, $entity->plainPassword);
$entity->setPassword($hashedPassword);
}
}
public static function getEntityFqcn(): string
{
return AccessUser::class;
}
public function configureFields(string $pageName): iterable
{
return [
ChoiceField::new('roles', 'Rôles')
->setChoices([
'Super Administrateur' => 'ROLE_SUPER_ADMIN',
'Partenaire de rédaction' => 'ROLE_CONTENT_WRITER',
])
->allowMultipleChoices()
->onlyOnForms(),
TextField::new('name', 'Prénom')->setColumns(6),
TextField::new('lastname', 'Nom')->setColumns(6),
EmailField::new('email', 'Email')->setColumns(6),
TextField::new('plainPassword', 'Mot de passe')
->setFormTypeOption('attr', ['type' => 'password'])
->setRequired(false)
->setHelp('Le mot de passe sera encodé automatiquement.')->onlyOnForms()->setColumns(6),
];
}
}