src/Pumukit/WebTVBundle/Controller/MultimediaObjectController.php line 221

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\BasePlayerBundle\Event\BasePlayerEvents;
  6. use Pumukit\BasePlayerBundle\Event\ViewedEvent;
  7. use Pumukit\BasePlayerBundle\Services\IntroService;
  8. use Pumukit\BasePlayerBundle\Services\PlayerService;
  9. use Pumukit\CoreBundle\Controller\WebTVControllerInterface;
  10. use Pumukit\SchemaBundle\Document\MultimediaObject;
  11. use Pumukit\SchemaBundle\Services\EmbeddedBroadcastService;
  12. use Pumukit\SchemaBundle\Services\MultimediaObjectService;
  13. use Pumukit\WebTVBundle\PumukitWebTVBundle;
  14. use Pumukit\WebTVBundle\Services\BreadcrumbsService;
  15. use Pumukit\WebTVBundle\Services\ChapterMarkService;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\RequestStack;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  23. class MultimediaObjectController extends AbstractController implements WebTVControllerInterface
  24. {
  25.     protected $chapterMarksService;
  26.     protected $introService;
  27.     protected $playerService;
  28.     protected $multimediaObjectService;
  29.     protected $documentManager;
  30.     protected $requestStack;
  31.     protected $embeddedBroadcastService;
  32.     protected $breadcrumbsService;
  33.     protected $eventDispatcher;
  34.     protected $limitObjsPlayerSeries;
  35.     protected $pumukitFullMagicUrl;
  36.     protected $cinemaMode;
  37.     public function __construct(
  38.         ChapterMarkService $chapterMarksService,
  39.         IntroService $introService,
  40.         PlayerService $playerService,
  41.         MultimediaObjectService $multimediaObjectService,
  42.         DocumentManager $documentManager,
  43.         RequestStack $requestStack,
  44.         EmbeddedBroadcastService $embeddedBroadcastService,
  45.         BreadcrumbsService $breadcrumbsService,
  46.         EventDispatcherInterface $dispatcher,
  47.         $limitObjsPlayerSeries,
  48.         $pumukitFullMagicUrl,
  49.         $cinemaMode
  50.     ) {
  51.         $this->chapterMarksService $chapterMarksService;
  52.         $this->introService $introService;
  53.         $this->playerService $playerService;
  54.         $this->multimediaObjectService $multimediaObjectService;
  55.         $this->documentManager $documentManager;
  56.         $this->requestStack $requestStack;
  57.         $this->embeddedBroadcastService $embeddedBroadcastService;
  58.         $this->breadcrumbsService $breadcrumbsService;
  59.         $this->limitObjsPlayerSeries $limitObjsPlayerSeries;
  60.         $this->pumukitFullMagicUrl $pumukitFullMagicUrl;
  61.         $this->cinemaMode $cinemaMode;
  62.         $this->eventDispatcher $dispatcher;
  63.     }
  64.     /**
  65.      * @Route("/video/{id}", name="pumukit_webtv_multimediaobject_index")
  66.      */
  67.     public function indexAction(Request $requestMultimediaObject $multimediaObject)
  68.     {
  69.         $track null;
  70.         if ($request->query->has('track_id')) {
  71.             $track $multimediaObject->getTrackById($request->query->get('track_id'));
  72.             if (!$track) {
  73.                 throw $this->createNotFoundException();
  74.             }
  75.             if ($track->tags()->containsTag('download')) {
  76.                 $url $track->getUrl();
  77.                 $url .= (parse_url($urlPHP_URL_QUERY) ? '&' '?').'forcedl=1';
  78.                 return $this->redirect($url);
  79.             }
  80.         }
  81.         if (!$track && !$multimediaObject->isExternalType()) {
  82.             $event = new ViewedEvent($multimediaObject);
  83.             $this->eventDispatcher->dispatch($eventBasePlayerEvents::MULTIMEDIAOBJECT_VIEW);
  84.         }
  85.         $this->updateBreadcrumbs($multimediaObject);
  86.         $editorChapters $this->chapterMarksService->getChapterMarks($multimediaObject);
  87.         return $this->render('@PumukitWebTV/MultimediaObject/template.html.twig', [
  88.             'autostart' => $request->query->get('autostart''true'),
  89.             'intro' => $this->introService->getVideoIntroduction($multimediaObject$request->query->getBoolean('intro')),
  90.             'multimediaObject' => $multimediaObject,
  91.             'track' => $track,
  92.             'editor_chapters' => $editorChapters,
  93.             'cinema_mode' => $this->cinemaMode,
  94.         ]);
  95.     }
  96.     /**
  97.      * @Route("/iframe/{id}", name="pumukit_webtv_multimediaobject_iframe" )
  98.      */
  99.     public function iframeAction(Request $requestMultimediaObject $multimediaObject): Response
  100.     {
  101.         $playerController $this->playerService->getPublicControllerPlayer($multimediaObject);
  102.         return $this->forward($playerController, ['request' => $request'multimediaObject' => $multimediaObject]);
  103.     }
  104.     /**
  105.      * @Route("/video/magic/{secret}", name="pumukit_webtv_multimediaobject_magicindex", defaults={"show_hide"=true})
  106.      */
  107.     public function magicIndexAction(Request $requestMultimediaObject $multimediaObject)
  108.     {
  109.         if ($this->multimediaObjectService->isPublished($multimediaObjectPumukitWebTVBundle::WEB_TV_TAG)) {
  110.             if ($this->multimediaObjectService->hasPlayableResource($multimediaObject) && $multimediaObject->isPublicEmbeddedBroadcast()) {
  111.                 return $this->redirectToRoute('pumukit_webtv_multimediaobject_index', ['id' => $multimediaObject->getId()]);
  112.             }
  113.         } elseif ((MultimediaObject::STATUS_PUBLISHED != $multimediaObject->getStatus() && MultimediaObject::STATUS_HIDDEN != $multimediaObject->getStatus()) || !$multimediaObject->containsTagWithCod(PumukitWebTVBundle::WEB_TV_TAG)) {
  114.             return $this->render('@PumukitWebTV/Index/404notfound.html.twig');
  115.         }
  116.         $request->attributes->set('noindex'true);
  117.         $track null;
  118.         if ($request->query->has('track_id')) {
  119.             $track $multimediaObject->getTrackById($request->query->get('track_id'));
  120.             if (!$track) {
  121.                 throw $this->createNotFoundException();
  122.             }
  123.             if ($track->tags()->containsTag('download')) {
  124.                 $url $track->getUrl();
  125.                 $url .= (parse_url($urlPHP_URL_QUERY) ? '&' '?').'forcedl=1';
  126.                 return $this->redirect($url);
  127.             }
  128.         }
  129.         $this->updateBreadcrumbs($multimediaObject);
  130.         $editorChapters $this->chapterMarksService->getChapterMarks($multimediaObject);
  131.         return $this->render('@PumukitWebTV/MultimediaObject/template.html.twig', [
  132.             'autostart' => $request->query->get('autostart''true'),
  133.             'intro' => $this->introService->getVideoIntroduction($multimediaObject$request->query->getBoolean('intro')),
  134.             'multimediaObject' => $multimediaObject,
  135.             'track' => $track,
  136.             'magic_url' => true,
  137.             'editor_chapters' => $editorChapters,
  138.             'cinema_mode' => $this->cinemaMode,
  139.             'fullMagicUrl' => $this->getMagicUrlConfiguration(),
  140.         ]);
  141.     }
  142.     /**
  143.      * @Route("/iframe/magic/{secret}", name="pumukit_webtv_multimediaobject_magiciframe", defaults={"show_hide"=true})
  144.      */
  145.     public function magicIframeAction(Request $requestMultimediaObject $multimediaObject): Response
  146.     {
  147.         $playerController $this->playerService->getMagicControllerPlayer($multimediaObject);
  148.         return $this->forward($playerController, ['request' => $request'multimediaObject' => $multimediaObject]);
  149.     }
  150.     public function seriesAction(Request $requestMultimediaObject $multimediaObject): Response
  151.     {
  152.         $series $multimediaObject->getSeries();
  153.         $referer $request->headers->get('referer');
  154.         $fromSecret false;
  155.         if (!$series->isHide() && $series->getSecret()) {
  156.             $secretSeriesUrl $this->generateUrl(
  157.                 'pumukit_webtv_series_magicindex',
  158.                 ['secret' => $series->getSecret()],
  159.                 UrlGeneratorInterface::ABSOLUTE_URL
  160.             );
  161.             if ($referer) {
  162.                 $fromSecret === strpos($referer$secretSeriesUrl);
  163.             }
  164.         }
  165.         $relatedLink false;
  166.         if ($referer) {
  167.             $relatedLink strpos($referer'magic');
  168.         }
  169.         $multimediaObjectMagicUrl $request->get('magicUrl'false);
  170.         $showMagicUrl = ($fromSecret || $relatedLink || $multimediaObjectMagicUrl);
  171.         $fullMagicUrl $this->getMagicUrlConfiguration();
  172.         $status = ($showMagicUrl && $fullMagicUrl) ? [MultimediaObject::STATUS_PUBLISHEDMultimediaObject::STATUS_HIDDEN] : [MultimediaObject::STATUS_PUBLISHED];
  173.         $multimediaObjects $this->documentManager->getRepository(MultimediaObject::class)->findBySeriesByTagCodAndStatusWithLimit(
  174.             $series,
  175.             PumukitWebTVBundle::WEB_TV_TAG,
  176.             $status,
  177.             $this->limitObjsPlayerSeries
  178.         );
  179.         return $this->render('@PumukitWebTV/MultimediaObject/template_series.html.twig', [
  180.             'series' => $series,
  181.             'multimediaObjects' => $multimediaObjects,
  182.             'showMagicUrl' => $showMagicUrl,
  183.             'fullMagicUrl' => $fullMagicUrl,
  184.         ]);
  185.     }
  186.     public function relatedAction(MultimediaObject $multimediaObject): Response
  187.     {
  188.         $relatedMms $this->documentManager->getRepository(MultimediaObject::class)->findRelatedMultimediaObjects($multimediaObject);
  189.         return $this->render('@PumukitWebTV/MultimediaObject/template_related.html.twig', ['multimediaObjects' => $relatedMms]);
  190.     }
  191.     /**
  192.      * @Route("/video/{id}/info", name="pumukit_webtv_multimediaobject_info" )
  193.      */
  194.     public function multimediaInfoAction(Request $requestMultimediaObject $multimediaObject): Response
  195.     {
  196.         $requestRoute $this->requestStack->getMainRequest()->get('_route');
  197.         $isMagicRoute false;
  198.         if (false !== strpos($requestRoute'magic')) {
  199.             $isMagicRoute true;
  200.         }
  201.         $password $request->get('broadcast_password');
  202.         $showDownloads true;
  203.         $response $this->embeddedBroadcastService->canUserPlayMultimediaObject($multimediaObject$this->getUser(), $password);
  204.         if ($response instanceof Response) {
  205.             $showDownloads false;
  206.         }
  207.         $editorChapters $this->chapterMarksService->getChapterMarks($multimediaObject);
  208.         $fullMagicUrl $this->getMagicUrlConfiguration();
  209.         return $this->render(
  210.             '@PumukitWebTV/MultimediaObject/template_info.html.twig',
  211.             [
  212.                 'multimediaObject' => $multimediaObject,
  213.                 'editor_chapters' => $editorChapters,
  214.                 'showDownloads' => $showDownloads,
  215.                 'isMagicRoute' => $isMagicRoute,
  216.                 'fullMagicUrl' => $fullMagicUrl,
  217.                 'route' => $requestRoute,
  218.                 'url' => $request->attributes->get('url') ?: null,
  219.                 'urlIframe' => $request->attributes->get('urlIframe') ?: null,
  220.             ]
  221.         );
  222.     }
  223.     private function getMagicUrlConfiguration()
  224.     {
  225.         return $this->pumukitFullMagicUrl;
  226.     }
  227.     private function updateBreadcrumbs(MultimediaObject $multimediaObject): void
  228.     {
  229.         $this->breadcrumbsService->addMultimediaObject($multimediaObject);
  230.     }
  231. }