<?php
namespace AppBundle\Controller;
use AppBundle\Model\Podcast as PodcastModel;
use AppBundle\Service\PodcastProcessService;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class PodcastController extends BaseController
{
/** @var PodcastModel */
private $podcastModel;
/** @var PodcastProcessService */
private $podcastProcessService;
/**
* List all podcasts with their latest episodes.
*
* @return Response
*/
public function indexAction(): Response
{
$this->podcastModel = $this->get('eemce.appbundle.podcast');
$this->podcastProcessService = $this->get('eemce.appbundle.podcast_process_service');
$viewData = $this->getMainPageData();
$viewData['podcasts'] = $this->podcastModel->getAllPodcasts();
$viewData['episodes'] = $this->podcastModel->getLatestEpisodes(6);
if (empty($viewData['podcasts'])) {
throw new NotFoundHttpException();
}
if (!empty($viewData['episodes'])) {
$this->podcastProcessService->processLatestEpisodes($viewData['episodes']);
}
$response = $this->render('podcast/index.html.twig', $viewData);
return $this->setResponseCacheHeadersFromConfig($response, false, 'cache_ttl_seconds_other');
}
/**
* Display a specific podcast.
*
* @param int $id The podcast ID.
*
* @return Response
*/
public function showAction(int $id): Response
{
$this->podcastModel = $this->get('eemce.appbundle.podcast');
$this->podcastProcessService = $this->get('eemce.appbundle.podcast_process_service');
$viewData = $this->getMainPageData();
// Retrieve a single podcast by its ID. Additional attributes can be added if needed.
$viewData['podcast'] = $this->podcastModel->getPodcastById($id);
$viewData['episodes'] = $this->podcastModel->getLatestPodcastEpisodes($id, 6);
if (empty($viewData['podcast'])) {
throw new NotFoundHttpException();
}
if (!empty($viewData['episodes'])) {
$this->podcastProcessService->processLatestEpisodes($viewData['episodes'], $viewData['podcast']);
}
$viewData['podcast'] = $viewData['podcast'][0];
$response = $this->render('podcast/show.html.twig', $viewData);
return $this->setResponseCacheHeadersFromConfig($response, false, 'cache_ttl_seconds_other');
}
/**
* Display a specific episode of a podcast
*
* @param int $podcastId The podcast ID.
* @param int $episodeId The episode ID.
*
* @return Response
*/
public function showEpisodeAction(int $podcastId, int $episodeId): Response {
$this->podcastModel = $this->get('eemce.appbundle.podcast');
$this->podcastProcessService = $this->get('eemce.appbundle.podcast_process_service');
$viewData = $this->getMainPageData();
$viewData['episode'] = $this->podcastModel->getPodcastEpisode($episodeId);
$viewData['episodes'] = $this->podcastModel->getLatestPodcastEpisodes($podcastId, 6, 0, $episodeId);
if (empty($viewData['episode'])) {
throw new NotFoundHttpException();
}
if (!empty($viewData['episodes'])) {
$this->podcastProcessService->processLatestEpisodes($viewData['episodes'], $viewData['episode']);
}
$viewData['episode'] = $viewData['episode'][0];
$viewData['episode']['podcastSlug'] = dirname($viewData['episode']['link']); // only for show_episode needs
$response = $this->render('podcast/show_episode.html.twig', $viewData);
return $this->setResponseCacheHeadersFromConfig($response, false, 'cache_ttl_seconds_other');
}
}