diff --git a/src/Bundle/ChillMainBundle/Controller/AuditTrailSearchController.php b/src/Bundle/ChillMainBundle/Controller/AuditTrailSearchController.php index 9f11b13af..9b5d585e4 100644 --- a/src/Bundle/ChillMainBundle/Controller/AuditTrailSearchController.php +++ b/src/Bundle/ChillMainBundle/Controller/AuditTrailSearchController.php @@ -11,12 +11,15 @@ declare(strict_types=1); namespace Chill\MainBundle\Controller; +use Chill\MainBundle\Audit\Subject; use Chill\MainBundle\Repository\AuditTrailRepository; +use Chill\MainBundle\Templating\Listing\FilterOrderHelper; use Chill\MainBundle\Templating\Listing\FilterOrderHelperFactoryInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Security\Core\Security; +use Symfony\Component\Translation\TranslatableMessage; use Twig\Environment; final class AuditTrailSearchController @@ -31,10 +34,46 @@ final class AuditTrailSearchController #[Route('/{_locale}/main/audit-trail/list', name: 'chill_main_audit_trail_list')] public function list(Request $request): Response { - $auditTrails = $this->auditTrailRepository->findByCriteria([]); + $filter = $this->buildFilter(); + $criteria = $this->buildFilterCriteria($filter); + $auditTrails = $this->auditTrailRepository->findByCriteria($criteria); return new Response($this->twig->render('@ChillMain/AuditTrail/list.html.twig', [ 'auditTrails' => $auditTrails, + 'filter' => $filter, ])); } + + private function buildFilter(): FilterOrderHelper + { + $filter = $this->filterOrderHelperFactory->create(self::class); + + $filter + ->addDateRange('date_range', new TranslatableMessage('audit_trail.list.date_range')) + ->addIntegerField('course_number', new TranslatableMessage('audit_trail.list.course_number')) + ->addIntegerField('person_number', new TranslatableMessage('audit_trail.list.person_number')) + ; + + return $filter->build(); + } + + private function buildFilterCriteria(FilterOrderHelper $filterOrderHelper): array + { + $criteria = []; + + if (null !== $courseNumber = $filterOrderHelper->getIntegerField('course_number')) { + $criteria['subjects'][] = new Subject('accompanying_period', ['id' => $courseNumber]); + } + + if (null !== $personNumber = $filterOrderHelper->getIntegerField('person_number')) { + $criteria['subjects'][] = new Subject('person', ['id' => $personNumber]); + } + + if ($filterOrderHelper->hasDateRangeData('date_range')) { + $criteria['from_date'] = $filterOrderHelper->getDateRangeData('date_range')['from']; + $criteria['to_date'] = $filterOrderHelper->getDateRangeData('date_range')['to']; + } + + return $criteria; + } } diff --git a/src/Bundle/ChillMainBundle/Resources/views/AuditTrail/list.html.twig b/src/Bundle/ChillMainBundle/Resources/views/AuditTrail/list.html.twig index c1a5f54bc..41375a82a 100644 --- a/src/Bundle/ChillMainBundle/Resources/views/AuditTrail/list.html.twig +++ b/src/Bundle/ChillMainBundle/Resources/views/AuditTrail/list.html.twig @@ -5,6 +5,8 @@ {% block content %}