mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2026-03-03 12:39:42 +00:00
Add advanced filtering support to AuditTrailSearchController and related views
- Introduced filters for date range, course number, and person number using `FilterOrderHelper`. - Updated `AuditTrailSearchController` to build and process filtering criteria dynamically. - Enhanced translations and updated templates to render the new filter options.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
{% block content %}
|
||||
<h1>{{ block('title') }}</h1>
|
||||
|
||||
{{ filter|chill_render_filter_order_helper }}
|
||||
|
||||
<div class="audit-trail list flex-table">
|
||||
{% for audit in auditTrails %}
|
||||
{{ include('@ChillMain/AuditTrail/_list_item.html.twig') }}
|
||||
|
||||
@@ -1021,3 +1021,6 @@ audit_trail:
|
||||
list:
|
||||
title: Liste des événements
|
||||
associated_subject: Entités associées
|
||||
date_range: Date de l'accès
|
||||
course_number: Numéro du parcours
|
||||
person_number: Identifiant usager
|
||||
|
||||
Reference in New Issue
Block a user