From f8db33205822dca3b213f380bff65132dbc97db8 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Mon, 18 Apr 2022 16:02:47 +0200 Subject: [PATCH] add establishment filters --- .../EstablishmentAdminController.php | 3 +- src/Form/EstablishmentFilterType.php | 40 +++++++++++++++++++ .../EstablishmentRepositoryQuery.php | 26 +++++++++++- 3 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 src/Form/EstablishmentFilterType.php diff --git a/src/Controller/EstablishmentAdminController.php b/src/Controller/EstablishmentAdminController.php index c75ad71..3ba8abd 100644 --- a/src/Controller/EstablishmentAdminController.php +++ b/src/Controller/EstablishmentAdminController.php @@ -10,6 +10,7 @@ use App\Core\Manager\EntityManager; use App\Entity\Establishment as Entity; use App\Factory\EstablishmentFactory as Factory; use App\Form\EstablishmentType as Type; +use App\Form\EstablishmentFilterType as FilterType; use App\Repository\EstablishmentRepositoryQuery as RepositoryQuery; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -118,7 +119,7 @@ class EstablishmentAdminController extends CrudController ->setForm('edit', Type::class, []) ->setForm('new', Type::class) - // ->setForm('filter', Type::class) + ->setForm('filter', FilterType::class) ->setView('form', 'admin/establishment/_form.html.twig') diff --git a/src/Form/EstablishmentFilterType.php b/src/Form/EstablishmentFilterType.php new file mode 100644 index 0000000..9984bf4 --- /dev/null +++ b/src/Form/EstablishmentFilterType.php @@ -0,0 +1,40 @@ +add('name', null, [ + 'required' => false, + ]) + ->add('project', EntityType::class, [ + 'class' => Project::class, + 'required' => false, + 'query_builder' => function (EntityRepository $er) { + return $er->createQueryBuilder('p') + ->orderBy('p.label', 'ASC'); + }, + ]) + ; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => null, + 'csrf_protection' => false, + ]); + } +} diff --git a/src/Repository/EstablishmentRepositoryQuery.php b/src/Repository/EstablishmentRepositoryQuery.php index c49a72a..32a6d76 100644 --- a/src/Repository/EstablishmentRepositoryQuery.php +++ b/src/Repository/EstablishmentRepositoryQuery.php @@ -3,8 +3,9 @@ namespace App\Repository; use App\Core\Repository\RepositoryQuery; -use Knp\Component\Pager\PaginatorInterface; +use App\Entity\Project; use App\Repository\EstablishmentRepository as Repository; +use Knp\Component\Pager\PaginatorInterface; class EstablishmentRepositoryQuery extends RepositoryQuery { @@ -12,4 +13,27 @@ class EstablishmentRepositoryQuery extends RepositoryQuery { parent::__construct($repository, 'e', $paginator); } + + public function withProject(?Project $project): self + { + if (!$project) { + return $this; + } + + $keyProject = 'k'.mt_rand(); + $keyId = 'id'.mt_rand(); + + return $this + ->innerJoin('.projects', $keyProject) + ->andWhere($keyProject.'.id = :'.$keyId) + ->setParameter($keyId, $project->getId()) + ; + } + + protected function filterHandler(string $name, $value) + { + if ('project' === $name) { + return $this->withProject($value); + } + } }