podcast = (new PodcastModel())->getPodcastByName($params[0],)) !== null ) { unset($params[0]); return $this->{$method}(...$params); } throw PageNotFoundException::forPageNotFound(); } public function activity(): string { // Prevent analytics hit when authenticated if (! can_user_interact()) { $this->registerPodcastWebpageHit($this->podcast->id); } $cacheName = implode( '_', array_filter([ 'page', "podcast#{$this->podcast->id}", 'activity', service('request') ->getLocale(), can_user_interact() ? '_authenticated' : null, ]), ); if (! ($cachedView = cache($cacheName))) { $data = [ 'podcast' => $this->podcast, 'notes' => (new NoteModel())->getActorPublishedNotes($this->podcast->actor_id,), ]; // if user is logged in then send to the authenticated activity view if (can_user_interact()) { helper('form'); return view('podcast/activity_authenticated', $data); } return view('podcast/activity', $data, [ 'cache' => DECADE, 'cache_name' => $cacheName, ]); } return $cachedView; } public function episodes(): string { // Prevent analytics hit when authenticated if (! can_user_interact()) { $this->registerPodcastWebpageHit($this->podcast->id); } $yearQuery = $this->request->getGet('year'); $seasonQuery = $this->request->getGet('season'); if (! $yearQuery && ! $seasonQuery) { $defaultQuery = (new PodcastModel())->getDefaultQuery($this->podcast->id,); if ($defaultQuery) { if ($defaultQuery['type'] === 'season') { $seasonQuery = $defaultQuery['data']['season_number']; } elseif ($defaultQuery['type'] === 'year') { $yearQuery = $defaultQuery['data']['year']; } } } $cacheName = implode( '_', array_filter([ 'page', "podcast#{$this->podcast->id}", 'episodes', $yearQuery ? 'year' . $yearQuery : null, $seasonQuery ? 'season' . $seasonQuery : null, service('request') ->getLocale(), can_user_interact() ? '_authenticated' : null, ]), ); if (! ($cachedView = cache($cacheName))) { // Build navigation array $podcastModel = new PodcastModel(); $years = $podcastModel->getYears($this->podcast->id); $seasons = $podcastModel->getSeasons($this->podcast->id); $episodesNavigation = []; $activeQuery = null; foreach ($years as $year) { $isActive = $yearQuery === $year['year']; if ($isActive) { $activeQuery = [ 'type' => 'year', 'value' => $year['year'], 'label' => $year['year'], 'number_of_episodes' => $year['number_of_episodes'], ]; } $episodesNavigation[] = [ 'label' => $year['year'], 'number_of_episodes' => $year['number_of_episodes'], 'route' => route_to('podcast-episodes', $this->podcast->name) . '?year=' . $year['year'], 'is_active' => $isActive, ]; } foreach ($seasons as $season) { $isActive = $seasonQuery === $season['season_number']; if ($isActive) { $activeQuery = [ 'type' => 'season', 'value' => $season['season_number'], 'label' => lang('Podcast.season', [ 'seasonNumber' => $season['season_number'], ]), 'number_of_episodes' => $season['number_of_episodes'], ]; } $episodesNavigation[] = [ 'label' => lang('Podcast.season', [ 'seasonNumber' => $season['season_number'], ]), 'number_of_episodes' => $season['number_of_episodes'], 'route' => route_to('podcast-episodes', $this->podcast->name) . '?season=' . $season['season_number'], 'is_active' => $isActive, ]; } $data = [ 'podcast' => $this->podcast, 'episodesNav' => $episodesNavigation, 'activeQuery' => $activeQuery, 'episodes' => (new EpisodeModel())->getPodcastEpisodes( $this->podcast->id, $this->podcast->type, $yearQuery, $seasonQuery, ), ]; $secondsToNextUnpublishedEpisode = (new EpisodeModel())->getSecondsToNextUnpublishedEpisode( $this->podcast->id, ); // if user is logged in then send to the authenticated episodes view if (can_user_interact()) { return view('podcast/episodes_authenticated', $data); } return view('podcast/episodes', $data, [ 'cache' => $secondsToNextUnpublishedEpisode ? $secondsToNextUnpublishedEpisode : DECADE, 'cache_name' => $cacheName, ]); } return $cachedView; } }