← Back
Editing: AgentCrudController.php
<?php namespace App\Controller\Admin\User; use App\Entity\User; use App\Enum\UserRole; use App\Form\EmailAliasType; use App\Service\SolutionService; use Doctrine\ORM\QueryBuilder; use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection; use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection; use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; use EasyCorp\Bundle\EasyAdminBundle\Config\Filters; use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController; use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto; use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto; use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField; use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField; use EasyCorp\Bundle\EasyAdminBundle\Field\ChoiceField; use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField; use EasyCorp\Bundle\EasyAdminBundle\Field\IdField; use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField; use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Filter\TextFilter; use Symfony\Component\Form\Extension\Core\Type\PasswordType; class AgentCrudController extends AbstractCrudController { public function __construct( private readonly SolutionService $solutionService ) { } public static function getEntityFqcn(): string { return User::class; } public function configureFilters(Filters $filters): Filters { return $filters ->add('nom') ->add('prenom') ->add('email') ->add('agency') ->add(TextFilter::new('manager')) ->add('roles'); } public function configureCrud(Crud $crud): Crud { return $crud // the visible title at the top of the page and the content of the <title> element // it can include these placeholders: %entity_id%, %entity_label_singular%, %entity_label_plural% ->setPageTitle('index', 'Agents') ->setPageTitle('new', 'Créer un agent') ->setPageTitle('edit', 'Modifier un agent'); } public function configureFields(string $pageName): iterable { return [ IdField::new('id')->hideOnForm(), AssociationField::new('agency'), AssociationField::new('manager') ->setFormTypeOption('choice_label', fn (User $entity) => sprintf('%s (%s)', $entity, $entity->getEmail()) ) ->hideOnIndex(), TextField::new('username')->hideOnIndex(), TextField::new('email'), TextField::new('plainPassword')->setFormType(PasswordType::class)->onlyWhenUpdating(), TextField::new('nom'), TextField::new('prenom'), ChoiceField::new('roles')->setChoices(UserRole::choices())->allowMultipleChoices(), AssociationField::new('userAddresses') ->setFormTypeOption('query_builder', function ($repository) { $currentUser = $this->getContext()?->getEntity()?->getInstance(); $qb = $repository->createQueryBuilder('entity') ->leftJoin('entity.address', 'address') ->andWhere('address.solution = :solution') ->setParameter('solution', $this->solutionService->getCurrent()); if ($currentUser instanceof User) { $qb->andWhere('entity.user = :currentUser') ->setParameter('currentUser', $currentUser); } return $qb; }) ->setLabel( 'Peut faire des contrôles aux adresses' ) ->hideOnIndex() ->onlyWhenUpdating(), CollectionField::new('emailAliases') ->hideOnIndex() ->setFormTypeOptions([ 'entry_type' => EmailAliasType::class, 'entry_options' => ['label' => false], 'allow_add' => true, 'prototype' => true, 'allow_delete' => true, 'by_reference' => false, ]), NumberField::new('objectifControle')->hideOnIndex(), NumberField::new('rappel')->hideOnIndex(), AssociationField::new('solutions')->hideOnIndex(), BooleanField::new('isActive'), ]; } public function createIndexQueryBuilder( SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters ): QueryBuilder { $response = parent::createIndexQueryBuilder( $searchDto, $entityDto, $fields, $filters ); $response->andWhere('entity.roles LIKE :roleAgent') ->setParameter('roleAgent', '%ROLE_AGENT%'); return $response; } }
Save File
Cancel