/** * 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!'); }
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))); }
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); }