src/Controller/Front/Channel/ShowTrainingListController.php line 57

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front\Channel;
  3. use App\Entity\Channel\Channel;
  4. use App\Form\Channel\Filter\ChannelTrainingFilter;
  5. use App\Service\Scholar\TrainingTransformerService;
  6. use Knp\Component\Pager\PaginatorInterface;
  7. use App\Repository\Scholar\TrainingRepository;
  8. use Spiriit\Bundle\FormFilterBundle\Filter\FilterBuilderUpdaterInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. class ShowTrainingListController extends AbstractController
  14. {
  15. public function __construct(
  16. private TrainingRepository $trainingRepository,
  17. private PaginatorInterface $paginator,
  18. private FilterBuilderUpdaterInterface $builderUpdater,
  19. private TrainingTransformerService $trainingTransformerService,
  20. )
  21. {
  22. }
  23. #[Route(path: '/channel/{id}/trainings', name: 'front_channel_trainings')]
  24. public function __invoke(Request $request, Channel $channel): Response
  25. {
  26. $filtersForm = $this->createForm(ChannelTrainingFilter::class);
  27. $searchInput = null;
  28. if ($request->query->has($filtersForm->getName())) {
  29. $filtersForm->submit($request->query->get($filtersForm->getName()));
  30. $searchInput = $request->query->get($filtersForm->getName())['search'];
  31. }
  32. if (!empty($searchInput)) {
  33. $trainingsQueryBuilder = $this->trainingRepository->getBySearchAndOwnerChannel($searchInput, $channel);
  34. $countTrainings = $this->trainingRepository->countBySearchAndOwnerChannel($searchInput, $channel);
  35. } else {
  36. $trainingsQueryBuilder = $this->trainingRepository->getByOwnerChannelWithFilters($channel, null, null, true);
  37. $countTrainings = $this->trainingRepository->countByOwnerChannel($channel);
  38. }
  39. $this->builderUpdater->addFilterConditions($filtersForm, $trainingsQueryBuilder);
  40. // Pagination
  41. $trainingsPagination = $this->paginator->paginate(
  42. $trainingsQueryBuilder,
  43. $request->query->getInt('page', 1),
  44. 16,
  45. array('wrap-queries' => true),
  46. );
  47. $trainingsPaginationDTOs = $this->trainingTransformerService->toPaginationDTOs($trainingsPagination);
  48. return $this->render('Front/Channel/showTrainingList.html.twig', [
  49. 'channel' => $channel,
  50. 'count_trainings' => $countTrainings,
  51. 'trainings' => $trainingsPaginationDTOs,
  52. 'filters' => $filtersForm->createView(),
  53. 'searchInput' => $searchInput,
  54. 'disable_header_search' => true,
  55. ]);
  56. }
  57. }