<?php
namespace App\EasyAdmin\Controller;
use App\Entity\Remplacant;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\EmailField;
use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField;
use EasyCorp\Bundle\EasyAdminBundle\Field\UrlField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
use EasyCorp\Bundle\EasyAdminBundle\Field\PasswordField;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use App\Entity\RemplacantSpecialite;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Filter\TextFilter;
use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use App\Form\RemplacantSpecialiteType;
class RemplacantCrudController extends AbstractCrudController implements EventSubscriberInterface
{
private $passwordEncoder;
public function __construct(UserPasswordEncoderInterface $passwordEncoder)
{
$this->passwordEncoder = $passwordEncoder;
}
public static function getEntityFqcn(): string
{
return Remplacant::class;
}
public static function getSubscribedEvents(): array
{
return [
BeforeEntityPersistedEvent::class => 'hashPassword',
BeforeEntityUpdatedEvent::class => 'hashPassword',
];
}
public function configureFilters(Filters $filters): Filters
{
return $filters
->add(TextFilter::new('name', 'Prénom'))
->add(TextFilter::new('lastname', 'Nom'))
->add(TextFilter::new('mail', 'E-mail'));
}
public function configureFields(string $pageName): iterable
{
return [
IdField::new('id')->hideOnForm(),
TextField::new('civilite', 'Civilité'),
TextField::new('name', 'Prénom'),
TextField::new('lastname', 'Nom'),
EmailField::new('mail', 'E-mail'),
IntegerField::new('phone', 'Téléphone'),
ImageField::new('imgUrl')
->setLabel('Profile Image')
->setBasePath('uploads/images')
->setUploadDir('public/uploads/images')
->setRequired(false),
TextField::new('plainPassword', 'Mot de passe')
->setFormTypeOption('attr', ['type' => 'password'])
->setRequired(false)
->setHelp('Le mot de passe sera encodé automatiquement.')->onlyOnForms(),
AssociationField::new('id_audio', 'Audio')->autocomplete(),
CollectionField::new('rdvs', 'Rendez-vous')->onlyOnDetail(),
CollectionField::new('remplacantSpecialites', 'Spécialités')
->setEntryType(RemplacantSpecialiteType::class)
->allowAdd()
->allowDelete()
->setFormTypeOptions([
'by_reference' => false,
]),
];
}
public function hashPassword($event): void
{
$entity = $event->getEntityInstance();
if (!$entity instanceof Remplacant) {
return;
}
if (!empty($entity->plainPassword)) {
$hashedPassword = password_hash($entity->plainPassword, PASSWORD_DEFAULT);
$entity->setPassword($hashedPassword);
}
}
public function configureActions(Actions $actions): Actions
{
return $actions
->add(Crud::PAGE_INDEX, Action::DETAIL);
}
}