diff --git a/src/Bundle/ChillDocStoreBundle/Controller/DocumentAccompanyingCourseController.php b/src/Bundle/ChillDocStoreBundle/Controller/DocumentAccompanyingCourseController.php index 253fa49b3..2df90e854 100644 --- a/src/Bundle/ChillDocStoreBundle/Controller/DocumentAccompanyingCourseController.php +++ b/src/Bundle/ChillDocStoreBundle/Controller/DocumentAccompanyingCourseController.php @@ -13,6 +13,7 @@ namespace Chill\DocStoreBundle\Controller; use Chill\DocStoreBundle\Entity\AccompanyingCourseDocument; use Chill\DocStoreBundle\Form\AccompanyingCourseDocumentType; +use Chill\DocStoreBundle\Repository\AccompanyingCourseDocumentRepository; use Chill\DocStoreBundle\Security\Authorization\AccompanyingCourseDocumentVoter; use Chill\MainBundle\Pagination\PaginatorFactory; use Chill\MainBundle\Security\Authorization\AuthorizationHelper; @@ -38,6 +39,8 @@ class DocumentAccompanyingCourseController extends AbstractController private PaginatorFactory $paginatorFactory; + private AccompanyingCourseDocumentRepository $courseRepository; + /** * DocumentAccompanyingCourseController constructor. */ @@ -45,12 +48,14 @@ class DocumentAccompanyingCourseController extends AbstractController TranslatorInterface $translator, EventDispatcherInterface $eventDispatcher, AuthorizationHelper $authorizationHelper, - PaginatorFactory $paginatorFactory + PaginatorFactory $paginatorFactory, + AccompanyingCourseDocumentRepository $courseRepository ) { $this->translator = $translator; $this->eventDispatcher = $eventDispatcher; $this->authorizationHelper = $authorizationHelper; $this->paginatorFactory = $paginatorFactory; + $this->courseRepository = $courseRepository; } /** @@ -126,15 +131,17 @@ class DocumentAccompanyingCourseController extends AbstractController $this->denyAccessUnlessGranted(AccompanyingCourseDocumentVoter::SEE, $course); - $documents = $em - ->getRepository('ChillDocStoreBundle:AccompanyingCourseDocument') + $total = $this->courseRepository->countByCourse($course); + $pagination = $this->paginatorFactory->create($total); + + $documents = $this->courseRepository ->findBy( ['course' => $course], - ['date' => 'DESC'] + ['date' => 'DESC'], + $pagination->getItemsPerPage(), + $pagination->getCurrentPageFirstItemNumber() ); - $total = count($documents); - $pagination = $this->paginatorFactory->create($total); return $this->render( 'ChillDocStoreBundle:AccompanyingCourseDocument:index.html.twig', diff --git a/src/Bundle/ChillDocStoreBundle/Repository/AccompanyingCourseDocumentRepository.php b/src/Bundle/ChillDocStoreBundle/Repository/AccompanyingCourseDocumentRepository.php new file mode 100644 index 000000000..9dd04185e --- /dev/null +++ b/src/Bundle/ChillDocStoreBundle/Repository/AccompanyingCourseDocumentRepository.php @@ -0,0 +1,77 @@ +em = $em; + $this->repository = $em->getRepository(AccompanyingCourseDocument::class); + } + + public function find($id): ?AccompanyingCourseDocument + { + return $this->repository->find($id); + } + + public function buildQueryByCourse(AccompanyingPeriod $course): QueryBuilder + { + $qb = $this->repository->createQueryBuilder('d'); + + $qb + ->where($qb->expr()->eq('d.course', ':course')) + ->setParameter('course', $course) + ; + + return $qb; + } + + public function countByCourse(AccompanyingPeriod $course): int + { + $qb = $this->buildQueryByCourse($course)->select('COUNT(d)'); + + return $qb->getQuery()->getSingleScalarResult(); + } + + public function findAll(): array + { + return $this->repository->findAll(); + } + + public function findBy(array $criteria, ?array $orderBy = null, $limit = null, $offset = null) + { + return $this->repository->findBy($criteria, $orderBy, $limit, $offset); + } + + public function findOneBy(array $criteria): ?AccompanyingCourseDocument + { + return $this->findOneBy($criteria); + } + + public function getClassName() + { + return AccompanyingCourseDocument::class; + } + +} \ No newline at end of file