Add pagination support to Audit Trail listing

- Added `countByCriteria` method in `AuditTrailRepository` to retrieve the total count of records based on criteria.
- Injected `PaginatorFactoryInterface` into `AuditTrailSearchController` and updated the controller to handle pagination logic.
- Updated the `list.html.twig` template to render the pagination controls using `chill_pagination`.
This commit is contained in:
2026-02-17 11:07:12 +01:00
parent 30d4623db6
commit ceb58de858
3 changed files with 20 additions and 1 deletions

View File

@@ -12,6 +12,7 @@ declare(strict_types=1);
namespace Chill\MainBundle\Controller;
use Chill\MainBundle\Audit\Subject;
use Chill\MainBundle\Pagination\PaginatorFactoryInterface;
use Chill\MainBundle\Repository\AuditTrailRepository;
use Chill\MainBundle\Templating\Listing\FilterOrderHelper;
use Chill\MainBundle\Templating\Listing\FilterOrderHelperFactoryInterface;
@@ -29,6 +30,7 @@ final class AuditTrailSearchController
private AuditTrailRepository $auditTrailRepository,
private FilterOrderHelperFactoryInterface $filterOrderHelperFactory,
private Environment $twig,
private PaginatorFactoryInterface $paginatorFactory,
) {}
#[Route('/{_locale}/main/audit-trail/list', name: 'chill_main_audit_trail_list')]
@@ -36,11 +38,16 @@ final class AuditTrailSearchController
{
$filter = $this->buildFilter();
$criteria = $this->buildFilterCriteria($filter);
$auditTrails = $this->auditTrailRepository->findByCriteria($criteria);
$count = $this->auditTrailRepository->countByCriteria($criteria);
$pagination = $this->paginatorFactory->create($count);
$pagination->setItemsPerPage(100);
$auditTrails = $this->auditTrailRepository->findByCriteria($criteria, offset: $pagination->getCurrentPageFirstItemNumber(), limit: $pagination->getItemsPerPage());
return new Response($this->twig->render('@ChillMain/AuditTrail/list.html.twig', [
'auditTrails' => $auditTrails,
'filter' => $filter,
'pagination' => $pagination,
]));
}

View File

@@ -75,6 +75,16 @@ class AuditTrailRepository extends ServiceEntityRepository
->getQuery()->getResult();
}
/**
* @param array{subjects?: list<Subject>, from_date?: \DateTimeImmutable, to_date?: \DateTimeImmutable, by_users?: list<User>} $criteria
*/
public function countByCriteria(array $criteria): int
{
return $this->buildByCriteriaQuery($criteria)
->select('COUNT(audit)')
->getQuery()->getSingleScalarResult();
}
/**
* @param array{subjects?: list<Subject>, from_date?: \DateTimeImmutable, to_date?: \DateTimeImmutable, by_users?: list<User>} $criteria
*/

View File

@@ -22,4 +22,6 @@
{{ include('@ChillMain/AuditTrail/_list_item.html.twig') }}
{% endfor %}
</div>
{{ chill_pagination(pagination) }}
{% endblock %}