From 98cbfed054a2db63d90e981f9ee8251831db4d98 Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Tue, 9 Dec 2025 17:07:42 +0100 Subject: [PATCH] Add filtering methods to controllers --- .../Controller/SocialWork/GoalController.php | 31 +++++++++++++++++++ .../SocialWork/ResultController.php | 31 +++++++++++++++++++ .../SocialWork/SocialActionController.php | 31 +++++++++++++++++++ .../SocialWork/SocialIssueController.php | 31 +++++++++++++++++++ 4 files changed, 124 insertions(+) diff --git a/src/Bundle/ChillPersonBundle/Controller/SocialWork/GoalController.php b/src/Bundle/ChillPersonBundle/Controller/SocialWork/GoalController.php index 1655356bc..1899e53a9 100644 --- a/src/Bundle/ChillPersonBundle/Controller/SocialWork/GoalController.php +++ b/src/Bundle/ChillPersonBundle/Controller/SocialWork/GoalController.php @@ -14,10 +14,12 @@ namespace Chill\PersonBundle\Controller\SocialWork; use Chill\MainBundle\CRUD\Controller\CRUDController; use Chill\MainBundle\Pagination\PaginatorInterface; use Chill\MainBundle\Templating\Listing\FilterOrderHelper; +use Chill\PersonBundle\Repository\SocialWork\GoalRepository; use Symfony\Component\HttpFoundation\Request; class GoalController extends CRUDController { + public function __construct(private readonly GoalRepository $repository) {} protected function orderQuery(string $action, $query, Request $request, PaginatorInterface $paginator) { $query->addOrderBy('e.id', 'ASC'); @@ -25,6 +27,35 @@ class GoalController extends CRUDController return parent::orderQuery($action, $query, $request, $paginator); } + protected function getQueryResult( + string $action, + Request $request, + int $totalItems, + PaginatorInterface $paginator, + ?FilterOrderHelper $filterOrder = null, + ) { + if (0 === $totalItems) { + return []; + } + + if (!$filterOrder instanceof FilterOrderHelper) { + return parent::getQueryResult($action, $request, $totalItems, $paginator, $filterOrder); + } + + $queryString = $filterOrder->getQueryString(); + $activeFilter = $filterOrder->getCheckboxData('activeFilter'); + $nb = $this->repository->countFilteredGoals($queryString, $activeFilter); + + $paginator = $this->getPaginatorFactory()->create($nb); + + return $this->repository->findFilteredGoals( + $queryString, + $activeFilter, + $paginator->getCurrentPageFirstItemNumber(), + $paginator->getItemsPerPage() + ); + } + protected function buildFilterOrderHelper(string $action, Request $request): ?FilterOrderHelper { return $this->getFilterOrderHelperFactory() diff --git a/src/Bundle/ChillPersonBundle/Controller/SocialWork/ResultController.php b/src/Bundle/ChillPersonBundle/Controller/SocialWork/ResultController.php index 775106a40..ac068f664 100644 --- a/src/Bundle/ChillPersonBundle/Controller/SocialWork/ResultController.php +++ b/src/Bundle/ChillPersonBundle/Controller/SocialWork/ResultController.php @@ -14,10 +14,12 @@ namespace Chill\PersonBundle\Controller\SocialWork; use Chill\MainBundle\CRUD\Controller\CRUDController; use Chill\MainBundle\Pagination\PaginatorInterface; use Chill\MainBundle\Templating\Listing\FilterOrderHelper; +use Chill\PersonBundle\Repository\SocialWork\ResultRepository; use Symfony\Component\HttpFoundation\Request; class ResultController extends CRUDController { + public function __construct(private readonly ResultRepository $repository) {} protected function orderQuery(string $action, $query, Request $request, PaginatorInterface $paginator) { $query->addOrderBy('e.id', 'ASC'); @@ -25,6 +27,35 @@ class ResultController extends CRUDController return parent::orderQuery($action, $query, $request, $paginator); } + protected function getQueryResult( + string $action, + Request $request, + int $totalItems, + PaginatorInterface $paginator, + ?FilterOrderHelper $filterOrder = null, + ) { + if (0 === $totalItems) { + return []; + } + + if (!$filterOrder instanceof FilterOrderHelper) { + return parent::getQueryResult($action, $request, $totalItems, $paginator, $filterOrder); + } + + $queryString = $filterOrder->getQueryString(); + $activeFilter = $filterOrder->getCheckboxData('activeFilter'); + $nb = $this->repository->countFilteredResults($queryString, $activeFilter); + + $paginator = $this->getPaginatorFactory()->create($nb); + + return $this->repository->findFilteredResults( + $queryString, + $activeFilter, + $paginator->getCurrentPageFirstItemNumber(), + $paginator->getItemsPerPage() + ); + } + protected function buildFilterOrderHelper(string $action, Request $request): ?FilterOrderHelper { return $this->getFilterOrderHelperFactory() diff --git a/src/Bundle/ChillPersonBundle/Controller/SocialWork/SocialActionController.php b/src/Bundle/ChillPersonBundle/Controller/SocialWork/SocialActionController.php index a54c411f7..b3bf127fa 100644 --- a/src/Bundle/ChillPersonBundle/Controller/SocialWork/SocialActionController.php +++ b/src/Bundle/ChillPersonBundle/Controller/SocialWork/SocialActionController.php @@ -14,10 +14,12 @@ namespace Chill\PersonBundle\Controller\SocialWork; use Chill\MainBundle\CRUD\Controller\CRUDController; use Chill\MainBundle\Pagination\PaginatorInterface; use Chill\MainBundle\Templating\Listing\FilterOrderHelper; +use Chill\PersonBundle\Repository\SocialWork\SocialActionRepository; use Symfony\Component\HttpFoundation\Request; class SocialActionController extends CRUDController { + public function __construct(private readonly SocialActionRepository $repository) {} protected function orderQuery(string $action, $query, Request $request, PaginatorInterface $paginator) { $query->addOrderBy('e.ordering', 'ASC'); @@ -25,6 +27,35 @@ class SocialActionController extends CRUDController return parent::orderQuery($action, $query, $request, $paginator); } + protected function getQueryResult( + string $action, + Request $request, + int $totalItems, + PaginatorInterface $paginator, + ?FilterOrderHelper $filterOrder = null, + ) { + if (0 === $totalItems) { + return []; + } + + if (!$filterOrder instanceof FilterOrderHelper) { + return parent::getQueryResult($action, $request, $totalItems, $paginator, $filterOrder); + } + + $queryString = $filterOrder->getQueryString(); + $activeFilter = $filterOrder->getCheckboxData('activeFilter'); + $nb = $this->repository->countFilteredSocialActions($queryString, $activeFilter); + + $paginator = $this->getPaginatorFactory()->create($nb); + + return $this->repository->findFilteredSocialActions( + $queryString, + $activeFilter, + $paginator->getCurrentPageFirstItemNumber(), + $paginator->getItemsPerPage() + ); + } + protected function buildFilterOrderHelper(string $action, Request $request): ?FilterOrderHelper { return $this->getFilterOrderHelperFactory() diff --git a/src/Bundle/ChillPersonBundle/Controller/SocialWork/SocialIssueController.php b/src/Bundle/ChillPersonBundle/Controller/SocialWork/SocialIssueController.php index d47a56a8a..f92daad8a 100644 --- a/src/Bundle/ChillPersonBundle/Controller/SocialWork/SocialIssueController.php +++ b/src/Bundle/ChillPersonBundle/Controller/SocialWork/SocialIssueController.php @@ -14,11 +14,13 @@ namespace Chill\PersonBundle\Controller\SocialWork; use Chill\MainBundle\CRUD\Controller\CRUDController; use Chill\MainBundle\Pagination\PaginatorInterface; use Chill\MainBundle\Templating\Listing\FilterOrderHelper; +use Chill\PersonBundle\Repository\SocialWork\SocialIssueRepository; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; class SocialIssueController extends CRUDController { + public function __construct(private readonly SocialIssueRepository $repository) {} protected function createFormFor(string $action, $entity, ?string $formClass = null, array $formOptions = []): FormInterface { if ('new' === $action) { @@ -39,6 +41,35 @@ class SocialIssueController extends CRUDController return parent::orderQuery($action, $query, $request, $paginator); } + protected function getQueryResult( + string $action, + Request $request, + int $totalItems, + PaginatorInterface $paginator, + ?FilterOrderHelper $filterOrder = null, + ) { + if (0 === $totalItems) { + return []; + } + + if (!$filterOrder instanceof FilterOrderHelper) { + return parent::getQueryResult($action, $request, $totalItems, $paginator, $filterOrder); + } + + $queryString = $filterOrder->getQueryString(); + $activeFilter = $filterOrder->getCheckboxData('activeFilter'); + $nb = $this->repository->countFilteredSocialIssues($queryString, $activeFilter); + + $paginator = $this->getPaginatorFactory()->create($nb); + + return $this->repository->findFilteredSocialIssues( + $queryString, + $activeFilter, + $paginator->getCurrentPageFirstItemNumber(), + $paginator->getItemsPerPage() + ); + } + protected function buildFilterOrderHelper(string $action, Request $request): ?FilterOrderHelper { return $this->getFilterOrderHelperFactory()