Add user-based filtering support to Audit Trail search functionality

- Extended `AuditTrailRepository` to include user-based query filtering.
- Updated `AuditTrailSearchController` to handle `by_users` filter criteria.
- Modified translations and templates to support the new user picker field in the search form.
- Injected required CSS and JS assets for the user picker functionality.
This commit is contained in:
2026-02-17 11:01:59 +01:00
parent 84c5235446
commit 30d4623db6
4 changed files with 30 additions and 3 deletions

View File

@@ -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<Subject>, from_date?: \DateTimeImmutable, to_date?: \DateTimeImmutable, by_users?: list<User>} $criteria
*
* @return array<AuditTrail>
*/
@@ -75,11 +76,12 @@ class AuditTrailRepository extends ServiceEntityRepository
}
/**
* @param array{subjects?: list<Subject>, from_date?: \DateTimeImmutable, to_date?: \DateTimeImmutable} $criteria
* @param array{subjects?: list<Subject>, from_date?: \DateTimeImmutable, to_date?: \DateTimeImmutable, by_users?: list<User>} $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;
}
}