settermjd/podcast-site

View on GitHub
public/routes.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

use \PodcastSite\Feed\FeedCreatorFactory;

/**
 * The default route
 */
$app->get('/', function () use ($app) {
    $app->render(
        'home.twig', [
            'show' => $app->show,
            'latestEpisode' => $app->episodeLister->getLatestEpisode(),
            'pastEpisodes' => $app->episodeLister->getPastEpisodes(false),
            'upcomingEpisodes' => $app->episodeLister->getUpcomingEpisodes(),
        ]
    );
})->name('home');

/**
 * The about page
 */
$app->get('/about', function () use ($app) {
    $app->render(
        'about.twig', [
            'show' => $app->show,
            'activePage' => 'about'
        ]
    );
})->name('about');

/**
 * The for guests page, with information about being aguest
 */
$app->get('/for-guests', function () use ($app) {
    $app->render(
        'for-guests.twig', [
            'show' => $app->show,
            'activePage' => 'for-guests'
        ]
    );
});

/**
 * The contact page
 */
$app->get('/contact', function () use ($app) {
    $app->render(
        'contact.twig', [
            'show' => $app->show,
            'activePage' => 'contact'
        ]
    );
})->name('contact');

/**
 * Get an episode
 */
$app->get('/episode/:episodeSlug', function ($episodeSlug) use ($app) {
    $episode = $app->episodeLister->getEpisode($episodeSlug);
    if (is_null($episode)) {
        $app->notFound();
    } else {
        $app->render(
            'episode.twig', [
                'show' => $app->show,
                'episode' => $episode,
                'route' => sprintf(
                    'http://%s',
                    $_SERVER['HTTP_HOST'] . $app->request()->getResourceUri()
                )
            ]
        );
    }
})->name('episode');

/**
 * Convenience redirect to the iTunes show page, when /itunes is requested
 */
$app->get('/itunes', function() use ($app) {
    $app->redirect('https://itunes.apple.com/podcast/free-geek.fm-matthew-setter/id1018923368?l=en&mt=2');
})->name('redirect/itunes');

/**
 * Auto-generate the RSS feed, using RSS2 format, which has support for iTunes
 * Currently supports both /rss and /rss.xml whilst a migration from the older (.xml)
 * route is underway.
 */
$app->get('/rss(\.xml)', function() use ($app) {
    $feedCreator = FeedCreatorFactory::factory('itunes');
    $feed = $feedCreator->generateFeed(
        $app->show,
        $app->episodeLister->getPastEpisodes()
    );
    $app->contentType($feed->getContentType());
    print $feed->generate('rss2');
})->name('rss/itunes');