/**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     $states = array("Not Live", "Live", "Show Over");
     foreach ($states as $b => $a) {
         LiveStreamStateDefinition::firstOrCreate(array("id" => $b + 1, "name" => $a));
     }
     $this->command->info('Live stream state definitions created/updated!');
 }
示例#2
0
 public function postAdminStreamControlStreamState($id)
 {
     Auth::getUser()->hasPermissionOr401(Config::get("permissions.mediaItems"), 1);
     $mediaItem = MediaItem::with("liveStreamItem", "liveStreamItem.stateDefinition")->find($id);
     if (is_null($mediaItem)) {
         App::abort(404);
     }
     $liveStreamItem = $mediaItem->liveStreamItem;
     if (is_null($liveStreamItem)) {
         App::abort(404);
     }
     // should receive stream_state which is the value that the stream_state should be set to.
     $requestedState = null;
     if (isset($_POST['stream_state'])) {
         $requestedState = intval($_POST['stream_state']);
     }
     $stateDefinition = !is_null($requestedState) ? LiveStreamStateDefinition::find($requestedState) : null;
     if (is_null($stateDefinition)) {
         throw new Exception("Invalid stream state.");
     }
     $liveStreamItem->stateDefinition()->associate($stateDefinition);
     $liveStreamItem->save();
     $resp = array("streamState" => intval($liveStreamItem->stateDefinition->id));
     return Response::json($resp);
 }
 public function hasJustLeftNotLive()
 {
     return !$this->isNotLive() && $this->exists && $this->isNotLive(LiveStreamStateDefinition::find($this->getOriginal("state_id", 1)));
 }
示例#4
0
 public function getIndex($playlistId = null, $mediaItemId = null)
 {
     if (is_null($playlistId) || is_null($mediaItemId)) {
         App::abort(404);
     }
     // true if a user is logged into the cms and has permission to view media items.
     $userHasMediaItemsPermission = false;
     // true if a user is logged into the cms and has permission to edit media items.
     $userHasMediaItemsEditPermission = false;
     // true if a user is logged into the cms and has permission to view playlists.
     $userHasPlaylistsPermission = false;
     // true if a user is logged into the cms and has permission to manage comments and post as station.
     $userHasCommentsPermission = false;
     if (Auth::isLoggedIn()) {
         $userHasMediaItemsPermission = Auth::getUser()->hasPermission(Config::get("permissions.mediaItems"), 0);
         $userHasMediaItemsEditPermission = Auth::getUser()->hasPermission(Config::get("permissions.mediaItems"), 1);
         $userHasPlaylistsPermission = Auth::getUser()->hasPermission(Config::get("permissions.playlists"), 0);
         $userHasCommentsPermission = Auth::getUser()->hasPermission(Config::get("permissions.siteComments"), 0);
     }
     $playlist = Playlist::with("show", "mediaItems", "relatedItems", "relatedItems.playlists")->accessible();
     if (!$userHasPlaylistsPermission) {
         // current cms user (if logged in) does not have permission to view playlists, so only search playlists accessible to the public.
         $playlist = $playlist->accessibleToPublic();
     }
     $playlist = $playlist->find(intval($playlistId));
     if (is_null($playlist)) {
         App::abort(404);
     }
     $currentMediaItem = $playlist->mediaItems()->accessible()->find($mediaItemId);
     if (is_null($currentMediaItem)) {
         App::abort(404);
     }
     $coverArtResolutions = Config::get("imageResolutions.coverArt");
     // retrieving inaccessible items as well and then skipping them in the loop. This is so that we get the correct episode number.
     $playlistMediaItems = $playlist->mediaItems()->orderBy("media_item_to_playlist.position")->get();
     $playlistTableData = array();
     $activeItemIndex = null;
     $newIndex = 0;
     foreach ($playlistMediaItems as $i => $item) {
         if (!$item->getIsAccessible()) {
             // this shouldn't be accessible
             continue;
         }
         $thumbnailUri = Config::get("custom.default_cover_uri");
         if (!Config::get("degradedService.enabled")) {
             $thumbnailUri = $playlist->getMediaItemCoverArtUri($item, $coverArtResolutions['thumbnail']['w'], $coverArtResolutions['thumbnail']['h']);
         }
         $active = intval($item->id) === intval($currentMediaItem->id);
         if ($active) {
             $activeItemIndex = $newIndex;
         }
         $playlistName = null;
         if (is_null($playlist->show)) {
             // this is a playlist not a series.
             // show the series/playlist that each video in the playlist is from
             $defaultPlaylist = $item->getDefaultPlaylist();
             if (!is_null($defaultPlaylist->show)) {
                 // the current item in the playlist is part of a show.
                 $playlistName = $defaultPlaylist->generateName();
             }
         }
         $playlistTableData[] = array("uri" => $playlist->getMediaItemUri($item), "active" => $active, "title" => $item->name, "escapedDescription" => null, "playlistName" => $playlistName, "episodeNo" => $i + 1, "thumbnailUri" => $thumbnailUri, "thumbnailFooter" => PlaylistTableHelpers::getFooterObj($item), "duration" => PlaylistTableHelpers::getDuration($item));
         $newIndex++;
     }
     $playlistPreviousItemUri = null;
     $playlistNextItemUri = null;
     if ($activeItemIndex > 0) {
         $playlistPreviousItemUri = $playlistTableData[$activeItemIndex - 1]['uri'];
     }
     if ($activeItemIndex < count($playlistTableData) - 1) {
         $playlistNextItemUri = $playlistTableData[$activeItemIndex + 1]['uri'];
     }
     $relatedItems = $playlist->generateRelatedItems($currentMediaItem);
     $relatedItemsTableData = array();
     foreach ($relatedItems as $i => $item) {
         // a mediaitem can be part of several playlists. Always use the first one that has a show if there is one, or just the first one otherwise
         $relatedItemPlaylist = $item->getDefaultPlaylist();
         $thumbnailUri = Config::get("custom.default_cover_uri");
         if (!Config::get("degradedService.enabled")) {
             $thumbnailUri = $relatedItemPlaylist->getMediaItemCoverArtUri($item, $coverArtResolutions['thumbnail']['w'], $coverArtResolutions['thumbnail']['h']);
         }
         $relatedItemsTableData[] = array("uri" => $relatedItemPlaylist->getMediaItemUri($item), "active" => false, "title" => $item->name, "escapedDescription" => null, "playlistName" => $relatedItemPlaylist->generateName(), "episodeNo" => $i + 1, "thumbnailUri" => $thumbnailUri, "thumbnailFooter" => PlaylistTableHelpers::getFooterObj($item), "duration" => PlaylistTableHelpers::getDuration($item));
     }
     $streamControlData = null;
     $currentMediaItem->load("liveStreamItem", "liveStreamItem.stateDefinition");
     $liveStreamItem = $currentMediaItem->liveStreamItem;
     if ($userHasMediaItemsEditPermission && !is_null($liveStreamItem)) {
         $infoMsg = $liveStreamItem->information_msg;
         $liveStreamStateDefinitions = LiveStreamStateDefinition::orderBy("id", "asc")->get();
         $streamStateButtonsData = array();
         foreach ($liveStreamStateDefinitions as $a) {
             $streamStateButtonsData[] = array("id" => intval($a->id), "text" => $a->name);
         }
         $liveStream = $liveStreamItem->liveStream;
         $streamControlData = array("showInaccessibleWarning" => !$liveStreamItem->getIsAccessible(), "showNoLiveStreamWarning" => is_null($liveStream), "showLiveStreamNotAccessibleWarning" => !is_null($liveStream) && !$liveStream->getIsAccessible(), "showStreamReadyForLiveMsg" => !is_null($liveStream) && $liveStream->getIsAccessible(), "showExternalStreamLocationMsg" => !is_null($liveStreamItem->external_stream_url), "streamStateButtonsData" => $streamStateButtonsData, "streamStateChosenId" => $liveStreamItem->stateDefinition->id, "streamInfoMsg" => !is_null($infoMsg) ? $infoMsg : "");
     }
     $seriesAd = null;
     if (is_null($playlist->show)) {
         // user is currently browsing playlist not series
         $defaultPlaylist = $currentMediaItem->getDefaultPlaylist();
         if (!is_null($defaultPlaylist->show)) {
             // show the button to link the user to the series containing the video they are watching.
             $seriesAd = array("name" => $defaultPlaylist->generateName(), "uri" => $defaultPlaylist->getMediaItemUri($currentMediaItem));
         }
     }
     $episodeTitle = $playlist->generateEpisodeTitle($currentMediaItem);
     $openGraphCoverArtUri = $playlist->getMediaItemCoverArtUri($currentMediaItem, $coverArtResolutions['fbOpenGraph']['w'], $coverArtResolutions['fbOpenGraph']['h']);
     $twitterCardCoverArtUri = $playlist->getMediaItemCoverArtUri($currentMediaItem, $coverArtResolutions['twitterCard']['w'], $coverArtResolutions['twitterCard']['h']);
     $twitterProperties = array();
     $twitterProperties[] = array("name" => "card", "content" => "player");
     $openGraphProperties = array();
     if (is_null($playlist->show)) {
         $openGraphProperties[] = array("name" => "og:type", "content" => "video.other");
     } else {
         $openGraphProperties[] = array("name" => "og:type", "content" => "video.episode");
         $openGraphProperties[] = array("name" => "video:series", "content" => $playlist->getUri());
     }
     $twitterProperties[] = array("name" => "player", "content" => $playlist->getMediaItemEmbedUri($currentMediaItem) . "?autoPlayVod=0&autoPlayStream=0&flush=1&disableFullScreen=1&disableRedirect=1");
     $twitterProperties[] = array("name" => "player:width", "content" => "1280");
     $twitterProperties[] = array("name" => "player:height", "content" => "720");
     if (!is_null($currentMediaItem->description)) {
         $openGraphProperties[] = array("name" => "og:description", "content" => $currentMediaItem->description);
         $twitterProperties[] = array("name" => "description", "content" => str_limit($currentMediaItem->description, 197, "..."));
     }
     $openGraphProperties[] = array("name" => "video:release_date", "content" => $currentMediaItem->scheduled_publish_time->toISO8601String());
     $openGraphProperties[] = array("name" => "og:title", "content" => $episodeTitle);
     $twitterProperties[] = array("name" => "title", "content" => $episodeTitle);
     $openGraphProperties[] = array("name" => "og:image", "content" => $openGraphCoverArtUri);
     $twitterProperties[] = array("name" => "image", "content" => $twitterCardCoverArtUri);
     if (!is_null($playlist->show)) {
         if (!is_null($playlistNextItemUri)) {
             $openGraphProperties[] = array("name" => "og:see_also", "content" => $playlistNextItemUri);
         }
         if (!is_null($playlistPreviousItemUri)) {
             $openGraphProperties[] = array("name" => "og:see_also", "content" => $playlistPreviousItemUri);
         }
     }
     foreach ($relatedItemsTableData as $a) {
         if (!in_array($a['uri'], array($playlistNextItemUri, $playlistPreviousItemUri))) {
             $openGraphProperties[] = array("name" => "og:see_also", "content" => $a['uri']);
         }
     }
     $view = View::make("home.player.index");
     $view->episodeTitle = $episodeTitle;
     $view->episodeDescriptionEscaped = !is_null($currentMediaItem->description) ? nl2br(URLHelpers::escapeAndReplaceUrls($currentMediaItem->description)) : null;
     $view->playlistTableFragment = View::make("fragments.home.playlist", array("stripedTable" => true, "headerRowData" => array("title" => $playlist->generateName(), "seriesUri" => !is_null($playlist->show) ? $playlist->show->getUri() : null, "navButtons" => array("previousItemUri" => $playlistPreviousItemUri, "nextItemUri" => $playlistNextItemUri, "showAutoPlayButton" => true)), "tableData" => $playlistTableData));
     $view->relatedItemsTableFragment = count($relatedItemsTableData) > 0 ? View::make("fragments.home.playlist", array("stripedTable" => true, "headerRowData" => array("title" => "Related Items", "seriesUri" => null, "navButtons" => null), "tableData" => $relatedItemsTableData)) : null;
     $currentMediaItem->load("videoItem", "videoItem.chapters");
     $videoItem = $currentMediaItem->videoItem;
     $hasAccessibleVod = false;
     if (!Config::get("degradedService.enabled")) {
         $hasAccessibleVod = !is_null($videoItem) && $videoItem->getIsLive();
     }
     $commentsEnabled = $currentMediaItem->comments_enabled;
     $vodPlayStartTime = $this->getVodStartTimeFromUrl();
     $vodChapters = array();
     if ($hasAccessibleVod) {
         foreach ($videoItem->chapters()->orderBy("time", "asc")->orderBy("title", "asc")->get() as $b => $a) {
             $vodChapters[] = array("num" => $b + 1, "title" => $a->title, "timeStr" => $a->time_str, "time" => intval($a->time));
         }
     }
     $vodControlData = null;
     if ($userHasMediaItemsEditPermission) {
         $vodFileId = null;
         if (!is_null($videoItem)) {
             $vodFile = $videoItem->sourceFile;
             $vodFileId = !is_null($vodFile) ? intval($vodFile->id) : null;
         }
         $vodControlData = array("uploadPointId" => Config::get("uploadPoints.vodVideo"), "fileId" => $vodFileId, "info" => FormHelpers::getFileInfo($vodFileId));
     }
     $coverImageUri = null;
     $sideBannerUri = null;
     $sideBannerFillUri = null;
     if (!Config::get("degradedService.enabled")) {
         $coverImageResolutions = Config::get("imageResolutions.coverImage");
         $coverImageUri = $playlist->getMediaItemCoverUri($currentMediaItem, $coverImageResolutions['full']['w'], $coverImageResolutions['full']['h']);
         $sideBannerImageResolutions = Config::get("imageResolutions.sideBannerImage");
         $sideBannerUri = $playlist->getMediaItemSideBannerUri($currentMediaItem, $sideBannerImageResolutions['full']['w'], $sideBannerImageResolutions['full']['h']);
         $sideBannerFillImageResolutions = Config::get("imageResolutions.sideBannerImage");
         $sideBannerFillUri = $playlist->getMediaItemSideBannerFillUri($currentMediaItem, $sideBannerFillImageResolutions['full']['w'], $sideBannerFillImageResolutions['full']['h']);
     }
     // only autoplay if the user has come from an external site, or specified a start time
     $autoPlay = !is_null($vodPlayStartTime) || !URLHelpers::hasInternalReferrer();
     $view->playerInfoUri = PlayerHelpers::getInfoUri($playlist->id, $currentMediaItem->id);
     $view->playlistInfoUri = $this->getPlaylistInfoUri($playlist->id);
     $view->autoContinueMode = $this->getAutoContinueMode();
     $view->registerWatchingUri = PlayerHelpers::getRegisterWatchingUri($playlist->id, $currentMediaItem->id);
     $view->registerLikeUri = PlayerHelpers::getRegisterLikeUri($playlist->id, $currentMediaItem->id);
     $view->adminOverrideEnabled = $userHasMediaItemsPermission;
     $view->loginRequiredMsg = "Please log in to use this feature.";
     $view->beingRecordedForVod = !is_null($liveStreamItem) ? (bool) $liveStreamItem->being_recorded : null;
     $view->autoPlay = $autoPlay;
     $view->vodPlayStartTime = is_null($vodPlayStartTime) ? "" : $vodPlayStartTime;
     $view->vodChapters = $vodChapters;
     $view->commentsEnabled = $commentsEnabled;
     if ($commentsEnabled) {
         $view->getCommentsUri = $this->getGetCommentsUri($currentMediaItem->id);
         $view->postCommentUri = $this->getPostCommentUri($currentMediaItem->id);
         $view->deleteCommentUri = $this->getDeleteCommentUri($currentMediaItem->id);
         $view->canCommentAsFacebookUser = Facebook::isLoggedIn() && Facebook::getUserState() === 0;
         $view->canCommentAsStation = $userHasCommentsPermission;
     }
     $view->vodControlData = $vodControlData;
     $view->streamControlData = $streamControlData;
     $view->mediaItemId = $currentMediaItem->id;
     $view->seriesAd = $seriesAd;
     $view->coverImageUri = $coverImageUri;
     $this->setContent($view, "player", "player", $openGraphProperties, $currentMediaItem->name, 200, $twitterProperties, $sideBannerUri, $sideBannerFillUri);
 }