src/Pumukit/WebTVBundle/Controller/SearchController.php line 106

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Pumukit\WebTVBundle\Controller;
  4. use Doctrine\ODM\MongoDB\DocumentManager;
  5. use Pumukit\CoreBundle\Controller\WebTVControllerInterface;
  6. use Pumukit\CoreBundle\Services\PaginationService;
  7. use Pumukit\SchemaBundle\Document\EmbeddedBroadcast;
  8. use Pumukit\SchemaBundle\Document\MultimediaObject;
  9. use Pumukit\SchemaBundle\Document\Series;
  10. use Pumukit\SchemaBundle\Document\Tag;
  11. use Pumukit\WebTVBundle\Services\BreadcrumbsService;
  12. use Pumukit\WebTVBundle\Services\SearchService;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\RequestStack;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Contracts\Translation\TranslatorInterface;
  20. class SearchController extends AbstractController implements WebTVControllerInterface
  21. {
  22.     protected $translator;
  23.     protected $breadcrumbsService;
  24.     protected $searchService;
  25.     protected $documentManager;
  26.     protected $requestStack;
  27.     protected $paginationService;
  28.     protected $menuSearchTitle;
  29.     protected $columnsObjsSearch;
  30.     protected $pumukitNewAdminLicenses;
  31.     protected $limitObjsSearch;
  32.     public function __construct(
  33.         TranslatorInterface $translator,
  34.         BreadcrumbsService $breadcrumbsService,
  35.         SearchService $searchService,
  36.         DocumentManager $documentManager,
  37.         RequestStack $requestStack,
  38.         PaginationService $paginationService,
  39.         $menuSearchTitle,
  40.         $columnsObjsSearch,
  41.         $pumukitNewAdminLicenses,
  42.         $limitObjsSearch
  43.     ) {
  44.         $this->translator $translator;
  45.         $this->breadcrumbsService $breadcrumbsService;
  46.         $this->searchService $searchService;
  47.         $this->documentManager $documentManager;
  48.         $this->requestStack $requestStack;
  49.         $this->paginationService $paginationService;
  50.         $this->menuSearchTitle $menuSearchTitle;
  51.         $this->columnsObjsSearch $columnsObjsSearch;
  52.         $this->pumukitNewAdminLicenses $pumukitNewAdminLicenses;
  53.         $this->limitObjsSearch $limitObjsSearch;
  54.     }
  55.     /**
  56.      * @Route("/searchseries", name="pumukit_webtv_search_series")
  57.      */
  58.     public function seriesAction(Request $request): Response
  59.     {
  60.         $this->breadcrumbsService->addList($this->translator->trans('Series search'), 'pumukit_webtv_search_series');
  61.         $searchYears $this->searchService->getYears(SearchService::SERIES);
  62.         $searchFound $request->query->get('search');
  63.         $startFound $request->query->get('start');
  64.         $endFound $request->query->get('end');
  65.         $yearFound $request->query->get('year');
  66.         $request $this->requestStack->getCurrentRequest();
  67.         $queryBuilder $this->createSeriesQueryBuilder();
  68.         $queryBuilder $this->searchService->addValidSeriesQueryBuilder($queryBuilder);
  69.         $queryBuilder $this->searchService->addSearchQueryBuilder($queryBuilder$request->getLocale(), $searchFound);
  70.         $queryBuilder $this->searchService->addDateQueryBuilder($queryBuilder$startFound$endFound$yearFound'public_date');
  71.         if ('' === $searchFound || null === $searchFound) {
  72.             $queryBuilder $queryBuilder->sort('public_date''desc');
  73.         } else {
  74.             $queryBuilder $queryBuilder->sortMeta('score''textScore');
  75.         }
  76.         [$pager$totalObjects] = $this->createPager($queryBuilder$request->query->get('page'1));
  77.         return $this->render('@PumukitWebTV/Search/template.html.twig', [
  78.             'type' => 'series',
  79.             'objects' => $pager,
  80.             'search_years' => $searchYears,
  81.             'objectByCol' => $this->columnsObjsSearch,
  82.             'total_objects' => $totalObjects,
  83.             'show_info' => true,
  84.             'with_publicdate' => true,
  85.             'class' => 'searchseries',
  86.         ]);
  87.     }
  88.     /**
  89.      * @Route("/searchmultimediaobjects/{tagCod}/{useTagAsGeneral}", defaults={"tagCod"=null, "useTagAsGeneral"=false}, name="pumukit_webtv_search_multimediaobjects")
  90.      *
  91.      * @ParamConverter("blockedTag", options={"mapping": {"tagCod": "cod"}})
  92.      */
  93.     public function multimediaObjectsAction(Request $requestTag $blockedTag nullbool $useTagAsGeneral false): Response
  94.     {
  95.         $templateTitle $this->menuSearchTitle ?? 'Multimedia objects search';
  96.         $this->breadcrumbsService->addList($blockedTag $blockedTag->getTitle() : $this->translator->trans($templateTitle), 'pumukit_webtv_search_multimediaobjects');
  97.         [$parentTag$parentTagOptional] = $this->searchService->getSearchTags();
  98.         $searchLanguages $this->searchService->getLanguages();
  99.         $searchYears $this->searchService->getYears(SearchService::MULTIMEDIA_OBJECT);
  100.         $searchFound $request->query->get('search');
  101.         $tagsFound $request->query->get('tags');
  102.         $typeFound $request->query->get('type');
  103.         $durationFound $request->query->get('duration');
  104.         $startFound $request->query->get('start');
  105.         $endFound $request->query->get('end');
  106.         $yearFound $request->query->get('year');
  107.         $languageFound $request->query->get('language');
  108.         $license $request->query->get('license');
  109.         $request $this->requestStack->getCurrentRequest();
  110.         $queryBuilder $this->createMultimediaObjectQueryBuilder();
  111.         $queryBuilder $this->searchService->addSearchQueryBuilder($queryBuilder$request->getLocale(), $searchFound);
  112.         $queryBuilder $this->searchService->addTypeQueryBuilder($queryBuilder$typeFound);
  113.         $queryBuilder $this->searchService->addDurationQueryBuilder($queryBuilder$durationFound);
  114.         $queryBuilder $this->searchService->addDateQueryBuilder($queryBuilder$startFound$endFound$yearFound);
  115.         $queryBuilder $this->searchService->addLanguageQueryBuilder($queryBuilder$languageFound);
  116.         $queryBuilder $this->searchService->addTagsQueryBuilder($queryBuilder$tagsFound$blockedTag$useTagAsGeneral);
  117.         $queryBuilder $this->searchService->addLicenseQueryBuilder($queryBuilder$license);
  118.         $templateListGrouped false;
  119.         if ('' === $searchFound || null === $searchFound) {
  120.             $queryBuilder $queryBuilder->sort('record_date''desc');
  121.             $templateListGrouped true;
  122.         } else {
  123.             $queryBuilder $queryBuilder->sortMeta('score''textScore');
  124.         }
  125.         if ($request->attributes->get('only_public')) {
  126.             $queryBuilder->field('embeddedBroadcast.type')->equals(EmbeddedBroadcast::TYPE_PUBLIC);
  127.         }
  128.         [$pager$totalObjects] = $this->createPager($queryBuilder$request->query->get('page'1));
  129.         $template $this->renderedTemplate();
  130.         return $this->render($template, [
  131.             'type' => 'multimediaObject',
  132.             'template_title' => $templateTitle,
  133.             'template_list_grouped' => $templateListGrouped,
  134.             'objects' => $pager,
  135.             'parent_tag' => $parentTag,
  136.             'parent_tag_optional' => $parentTagOptional,
  137.             'tags_found' => $tagsFound,
  138.             'objectByCol' => $this->columnsObjsSearch,
  139.             'licenses' => $this->pumukitNewAdminLicenses,
  140.             'languages' => $searchLanguages,
  141.             'blocked_tag' => $blockedTag,
  142.             'search_years' => $searchYears,
  143.             'total_objects' => $totalObjects,
  144.             'class' => 'searchmultimediaobjects',
  145.             'show_info' => true,
  146.             'with_publicdate' => true,
  147.         ]);
  148.     }
  149.     protected function renderedTemplate(): string
  150.     {
  151.         return '@PumukitWebTV/Search/template.html.twig';
  152.     }
  153.     protected function createPager($objects$page): array
  154.     {
  155.         $pager $this->paginationService->createDoctrineODMMongoDBAdapter($objects, (int) $page$this->limitObjsSearch);
  156.         $pager->getCurrentPageResults();
  157.         $totalObjects $pager->getNbResults();
  158.         return [
  159.             $pager,
  160.             $totalObjects,
  161.         ];
  162.     }
  163.     protected function createSeriesQueryBuilder()
  164.     {
  165.         return $this->documentManager->getRepository(Series::class)->createQueryBuilder();
  166.     }
  167.     protected function createMultimediaObjectQueryBuilder()
  168.     {
  169.         return $this->documentManager->getRepository(MultimediaObject::class)->createStandardQueryBuilder();
  170.     }
  171. }