vendor/teltek/pumukit-paella-player-bundle/Controller/BasePlayerController.php line 56

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Pumukit\PaellaPlayerBundle\Controller;
  4. use Pumukit\BasePlayerBundle\Controller\BasePlayerController as BasePlayerAbstractController;
  5. use Pumukit\BasePlayerBundle\Services\IntroService;
  6. use Pumukit\SchemaBundle\Document\MediaType\Track;
  7. use Pumukit\SchemaBundle\Document\MultimediaObject;
  8. use Pumukit\SchemaBundle\Services\EmbeddedBroadcastService;
  9. use Pumukit\SchemaBundle\Services\MultimediaObjectService;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  11. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  12. use Symfony\Component\HttpFoundation\RedirectResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. class BasePlayerController extends BasePlayerAbstractController
  17. {
  18.     private $pumukitOpencastHost;
  19.     private $paellaCustomCssUrl;
  20.     private $paellaLogo;
  21.     private $pumukitIntro;
  22.     private $paellaAutoPlay;
  23.     private $pumukitPlayerWhenDispatchViewEvent;
  24.     public function __construct(
  25.         EventDispatcherInterface $eventDispatcher,
  26.         EmbeddedBroadcastService $embeddedBroadcastService,
  27.         MultimediaObjectService $multimediaObjectService,
  28.         IntroService $basePlayerIntroService,
  29.         $pumukitOpencastHost,
  30.         $paellaCustomCssUrl,
  31.         $paellaLogo,
  32.         $pumukitIntro,
  33.         $paellaAutoPlay,
  34.         string $pumukitPlayerWhenDispatchViewEvent
  35.     ) {
  36.         parent::__construct($eventDispatcher$embeddedBroadcastService$multimediaObjectService$basePlayerIntroService);
  37.         $this->pumukitOpencastHost $pumukitOpencastHost;
  38.         $this->paellaCustomCssUrl $paellaCustomCssUrl;
  39.         $this->paellaLogo $paellaLogo;
  40.         $this->pumukitIntro $pumukitIntro;
  41.         $this->paellaAutoPlay $paellaAutoPlay;
  42.         $this->pumukitPlayerWhenDispatchViewEvent $pumukitPlayerWhenDispatchViewEvent;
  43.     }
  44.     /**
  45.      * @Route("/videoplayer/{id}", name="pumukit_videoplayer_index")
  46.      * @Route("/videoplayer/opencast/{id}", name="pumukit_videoplayer_opencast")
  47.      *
  48.      * @Template("@PumukitPaellaPlayer/PaellaPlayer/player.html.twig")
  49.      */
  50.     public function indexAction(Request $requestMultimediaObject $multimediaObject)
  51.     {
  52.         return $this->doRender($request$multimediaObject);
  53.     }
  54.     /**
  55.      * @Route("/videoplayer/magic/{secret}", name="pumukit_videoplayer_magicindex")
  56.      *
  57.      * @Template("@PumukitPaellaPlayer/PaellaPlayer/player.html.twig")
  58.      */
  59.     public function magicAction(Request $requestMultimediaObject $multimediaObject)
  60.     {
  61.         if (!$request->query->has('secret')) {
  62.             return $this->redirect(
  63.                 $this->generateUrl(
  64.                     'pumukit_videoplayer_magicindex',
  65.                     [
  66.                         'id' => $multimediaObject->getId(),
  67.                         'secret' => $multimediaObject->getSecret(),
  68.                     ]
  69.                 ).'&secret='.$multimediaObject->getSecret()
  70.             );
  71.         }
  72.         return $this->doRender($request$multimediaObject);
  73.     }
  74.     private function doRender(Request $requestMultimediaObject $multimediaObject)
  75.     {
  76.         if ($response $this->validateAccess($request$multimediaObject)) {
  77.             return $response;
  78.         }
  79.         $track $this->checkMultimediaObjectTracks($request$multimediaObject);
  80.         if ($track instanceof RedirectResponse) {
  81.             return $track;
  82.         }
  83.         $tracks $this->getMultimediaObjectMultiStreamTracks($multimediaObject$track);
  84.         return $this->getParametersForPlayer($request$multimediaObject$tracks);
  85.     }
  86.     private function getAutoStart(Request $request)
  87.     {
  88.         if ('disabled' === $this->paellaAutoPlay) {
  89.             return false;
  90.         }
  91.         $autoStart $request->query->get('autostart''false');
  92.         $userAgent $request->headers->get('user-agent');
  93.         if ((false !== strpos($userAgent'Safari')) && false === strpos($userAgent'Chrome')) {
  94.             $autoStart false;
  95.         }
  96.         return $autoStart;
  97.     }
  98.     private function generateBasePlayerRaw(Request $requestMultimediaObject $multimediaObjectTrack $track): Response
  99.     {
  100.         return $this->render('@PumukitPaellaPlayer/BasePlayer/player.html.twig', [
  101.             'autostart' => $this->getAutoStart($request),
  102.             'autoplay_fallback' => $this->paellaAutoPlay,
  103.             'when_dispatch_view_event' => $this->pumukitPlayerWhenDispatchViewEvent,
  104.             'multimediaObject' => $multimediaObject,
  105.             'track' => $track,
  106.         ]);
  107.     }
  108.     private function getParametersForPlayer(Request $requestMultimediaObject $multimediaObject, array $tracks): array
  109.     {
  110.         return [
  111.             'autostart' => $this->getAutoStart($request),
  112.             'autoplay_fallback' => $this->paellaAutoPlay,
  113.             'intro' => $this->basePlayerIntroService->getVideoIntroduction($multimediaObject$request->query->getBoolean('intro')),
  114.             'tail' => $this->basePlayerIntroService->getVideoTail($multimediaObject),
  115.             'custom_css_url' => $this->paellaCustomCssUrl,
  116.             'logo' => $this->paellaLogo,
  117.             'multimediaObject' => $multimediaObject,
  118.             'object' => $multimediaObject,
  119.             'when_dispatch_view_event' => $this->pumukitPlayerWhenDispatchViewEvent,
  120.             'tracks' => $tracks,
  121.             'opencast_host' => $this->pumukitOpencastHost,
  122.         ];
  123.     }
  124. }