src/Pumukit/WebTVBundle/Controller/EventController.php line 54

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Pumukit\WebTVBundle\Controller;
  4. use Doctrine\ODM\MongoDB\DocumentManager;
  5. use MongoDB\BSON\ObjectId;
  6. use Pumukit\CoreBundle\Controller\WebTVControllerInterface;
  7. use Pumukit\CoreBundle\Services\PaginationService;
  8. use Pumukit\SchemaBundle\Document\MultimediaObject;
  9. use Pumukit\SchemaBundle\Services\EmbeddedEventSessionService;
  10. use Pumukit\WebTVBundle\Services\BreadcrumbsService;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. class EventController extends AbstractController implements WebTVControllerInterface
  17. {
  18.     protected $documentManager;
  19.     protected $breadcrumbsService;
  20.     protected $translator;
  21.     protected $pumukitNewAdminAdvanceLiveEventCreateDefaultPic;
  22.     protected $eventSessionService;
  23.     protected $paginationService;
  24.     protected $columnsObjsEvent;
  25.     protected $pumukitLiveTwitterEnable;
  26.     protected $pumukitNewAdminAdvanceLiveEvent;
  27.     public function __construct(
  28.         DocumentManager $documentManager,
  29.         BreadcrumbsService $breadcrumbsService,
  30.         TranslatorInterface $translator,
  31.         PaginationService $paginationService,
  32.         EmbeddedEventSessionService $eventSessionService,
  33.         string $pumukitNewAdminAdvanceLiveEventCreateDefaultPic,
  34.         int $columnsObjsEvent,
  35.         bool $pumukitLiveTwitterEnable,
  36.         bool $pumukitNewAdminAdvanceLiveEvent
  37.     ) {
  38.         $this->documentManager $documentManager;
  39.         $this->breadcrumbsService $breadcrumbsService;
  40.         $this->translator $translator;
  41.         $this->pumukitNewAdminAdvanceLiveEventCreateDefaultPic $pumukitNewAdminAdvanceLiveEventCreateDefaultPic;
  42.         $this->eventSessionService $eventSessionService;
  43.         $this->columnsObjsEvent $columnsObjsEvent;
  44.         $this->paginationService $paginationService;
  45.         $this->pumukitLiveTwitterEnable $pumukitLiveTwitterEnable;
  46.         $this->pumukitNewAdminAdvanceLiveEvent $pumukitNewAdminAdvanceLiveEvent;
  47.     }
  48.     public function advanceLiveEventMenuAction(): Response
  49.     {
  50.         if ($this->pumukitNewAdminAdvanceLiveEvent) {
  51.             return new Response($this->renderView('@PumukitWebTV/Menu/advance_event_link.html.twig'));
  52.         }
  53.         return new Response();
  54.     }
  55.     /**
  56.      * @Route ("/events/", defaults={"filter"=false}, name="pumukit_webtv_events")
  57.      */
  58.     public function indexAction(Request $request): Response
  59.     {
  60.         $advanceEvents $this->checkAdvanceEvents();
  61.         if (!$advanceEvents) {
  62.             return $this->render('@PumukitWebTV/Index/404notfound.html.twig');
  63.         }
  64.         $this->updateBreadcrumbs($this->translator->trans('Live events'), 'pumukit_webtv_events');
  65.         $eventsNow $this->eventSessionService->findEventsNow();
  66.         $eventsToday $this->eventSessionService->findEventsToday();
  67.         $eventsToday $this->getEventsTodayNextSession($eventsNow$eventsToday);
  68.         $eventsFuture $this->eventSessionService->findNextEvents();
  69.         $page $request->query->get('page'1);
  70.         $maxPerPage $this->columnsObjsEvent 3;
  71.         $pager $this->paginationService->createArrayAdapter($eventsFuture, (int) $page$maxPerPage);
  72.         return $this->render('@PumukitWebTV/Live/template.html.twig', [
  73.             'eventsToday' => $eventsToday,
  74.             'eventsNow' => $eventsNow,
  75.             'eventsFuture' => $pager,
  76.             'defaultPic' => $this->pumukitNewAdminAdvanceLiveEventCreateDefaultPic,
  77.             'objectByCol' => $this->columnsObjsEvent,
  78.             'show_info' => true,
  79.             'show_description' => false,
  80.         ]);
  81.     }
  82.     public function liveListAction(): Response
  83.     {
  84.         $events $this->eventSessionService->findEventsNow();
  85.         return $this->render('@PumukitWebTV/Live/Advance/livelist.html.twig', [
  86.             'events' => $events,
  87.             'defaultPic' => $this->pumukitNewAdminAdvanceLiveEventCreateDefaultPic,
  88.         ]);
  89.     }
  90.     /**
  91.      * @Route("/event/next/session/{id}", name="pumukit_webtv_next_session_event")
  92.      *
  93.      * @param mixed $id
  94.      */
  95.     public function nextSessionListAction($id): Response
  96.     {
  97.         $embeddedEventSessionService $this->eventSessionService;
  98.         $criteria = [
  99.             '_id' => new ObjectId($id),
  100.         ];
  101.         $events $embeddedEventSessionService->findNextSessions($criteria0true);
  102.         return $this->render('@PumukitWebTV/Live/Advance/nextsessionlist.html.twig', [
  103.             'events' => $events,
  104.             'sessionlist' => true,
  105.             'defaultPic' => $this->pumukitNewAdminAdvanceLiveEventCreateDefaultPic,
  106.         ]);
  107.     }
  108.     /**
  109.      * @Route("/event/twitter/{id}", name="pumukit_webtv_event_twitter")
  110.      */
  111.     public function twitterAction(string $id)
  112.     {
  113.         $multimediaObject $this->documentManager->getRepository(MultimediaObject::class)->find($id);
  114.         return $this->render('@PumukitWebTV/Live/Advance/twitter.html.twig', [
  115.             'multimediaObject' => $multimediaObject,
  116.             'enable_twitter' => $this->pumukitLiveTwitterEnable,
  117.         ]);
  118.     }
  119.     private function updateBreadcrumbs(string $titlestring $routeName, array $routeParameters = []): void
  120.     {
  121.         $this->breadcrumbsService->addList($title$routeName$routeParameters);
  122.     }
  123.     private function getEventsTodayNextSession(array $eventsNow, array $eventsToday): array
  124.     {
  125.         $now array_map(
  126.             static function ($e) {
  127.                 return $e['_id'];
  128.             },
  129.             $eventsNow
  130.         );
  131.         $result = [];
  132.         foreach ($eventsToday as $event) {
  133.             if (in_array($event['_id'], $now)) {
  134.                 continue;
  135.             }
  136.             $result[] = $event;
  137.         }
  138.         return $result;
  139.     }
  140.     private function checkAdvanceEvents(): bool
  141.     {
  142.         return $this->pumukitNewAdminAdvanceLiveEvent;
  143.     }
  144. }