diff --git a/src/Bundle/ChillMainBundle/Controller/AuditTrailSearchController.php b/src/Bundle/ChillMainBundle/Controller/AuditTrailSearchController.php index 9b5d585e4..23e77b17b 100644 --- a/src/Bundle/ChillMainBundle/Controller/AuditTrailSearchController.php +++ b/src/Bundle/ChillMainBundle/Controller/AuditTrailSearchController.php @@ -52,6 +52,7 @@ final class AuditTrailSearchController ->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')) + ->addUserPicker('user', new TranslatableMessage('audit_trail.list.by_users'), ['multiple' => true, 'required' => false]) ; return $filter->build(); @@ -74,6 +75,10 @@ final class AuditTrailSearchController $criteria['to_date'] = $filterOrderHelper->getDateRangeData('date_range')['to']; } + if ([] !== $byUsers = $filterOrderHelper->getUserPickerData('user')) { + $criteria['by_users'] = $byUsers; + } + return $criteria; } } diff --git a/src/Bundle/ChillMainBundle/Repository/AuditTrailRepository.php b/src/Bundle/ChillMainBundle/Repository/AuditTrailRepository.php index 79275686b..873c21130 100644 --- a/src/Bundle/ChillMainBundle/Repository/AuditTrailRepository.php +++ b/src/Bundle/ChillMainBundle/Repository/AuditTrailRepository.php @@ -13,6 +13,7 @@ namespace Chill\MainBundle\Repository; use Chill\MainBundle\Audit\Subject; use Chill\MainBundle\Entity\AuditTrail; +use Chill\MainBundle\Entity\User; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\QueryBuilder; @@ -61,7 +62,7 @@ class AuditTrailRepository extends ServiceEntityRepository } /** - * @param array{} $criteria + * @param array{subjects?: list, from_date?: \DateTimeImmutable, to_date?: \DateTimeImmutable, by_users?: list} $criteria * * @return array */ @@ -75,11 +76,12 @@ class AuditTrailRepository extends ServiceEntityRepository } /** - * @param array{subjects?: list, from_date?: \DateTimeImmutable, to_date?: \DateTimeImmutable} $criteria + * @param array{subjects?: list, from_date?: \DateTimeImmutable, to_date?: \DateTimeImmutable, by_users?: list} $criteria */ private function buildByCriteriaQuery(array $criteria): QueryBuilder { $qb = $this->createQueryBuilder('audit'); + $k = 0; if (null !== $fromDate = $criteria['from_date'] ?? null) { $qb->andWhere('audit.occurredAt >= :from_date'); @@ -93,7 +95,6 @@ class AuditTrailRepository extends ServiceEntityRepository if ([] !== $subjects = $criteria['subjects'] ?? []) { $orx = $qb->expr()->orX(); - $k = 0; foreach ($subjects as $subject) { $orx->add($qb->expr()->eq('audit.mainSubject', ':subject_'.$k)); $qb->setParameter('subject_'.$k, $subject->asArray(), Types::JSON); @@ -105,6 +106,16 @@ class AuditTrailRepository extends ServiceEntityRepository $qb->andWhere($orx); } + if ([] !== $users = $criteria['by_users'] ?? []) { + $orx = $qb->expr()->orX(); + foreach ($users as $user) { + $orx->add($qb->expr()->eq('audit.user', ':user_'.$k)); + $qb->setParameter('user_'.$k, $user); + ++$k; + } + $qb->andWhere($orx); + } + return $qb; } } diff --git a/src/Bundle/ChillMainBundle/Resources/views/AuditTrail/list.html.twig b/src/Bundle/ChillMainBundle/Resources/views/AuditTrail/list.html.twig index 41375a82a..6cbfe9aec 100644 --- a/src/Bundle/ChillMainBundle/Resources/views/AuditTrail/list.html.twig +++ b/src/Bundle/ChillMainBundle/Resources/views/AuditTrail/list.html.twig @@ -1,5 +1,15 @@ {% extends '@ChillMain/layout.html.twig' %} +{% block js %} + {{ parent() }} + {{ encore_entry_script_tags('mod_pickentity_type') }} +{% endblock %} + +{% block css %} + {{ parent() }} + {{ encore_entry_link_tags('mod_pickentity_type') }} +{% endblock %} + {% block title 'audit_trail.list.title'|trans %} {% block content %} diff --git a/src/Bundle/ChillMainBundle/translations/messages.fr.yml b/src/Bundle/ChillMainBundle/translations/messages.fr.yml index 12bd22b70..2ad007d5c 100644 --- a/src/Bundle/ChillMainBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillMainBundle/translations/messages.fr.yml @@ -1024,3 +1024,4 @@ audit_trail: date_range: Date de l'accès course_number: Numéro du parcours person_number: Identifiant usager + by_users: Utilisateurs