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

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 $requestChannel $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($channelnullnulltrue);
  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. }