<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use App\Sanity\Query;
use App\DOT\DreamCaster;
class ContentController extends AbstractSanityController
{
/**
* @Route("/", name="index")
* @Template
*/
public function indexAction()
{
return [];
}
/**
* @Route("/articles", name="articles_landing")
* @Template
*/
public function ArticlesLandingAction()
{
return $this->getControllerResult(
'document',
Query::getDocumentBySlug('page', 'articles')
);
}
/**
* @Route("/articles/{slug}", name="single_article")
* @Template
*/
public function SingleArticleAction( $slug )
{
return $this->getControllerResult(
'document',
Query::getArticleBySlug($slug)
);
}
/**
* @Route("/docs/{slug?}", name="docs")
* @Template
*/
public function DocsAction( $slug=null )
{
return $this->getControllerResult(
'document',
Query::getDocumentBySlug('page', 'docs'.($slug ? "/$slug" : ''))
);
}
/**
* @Route("/{slug}", name="page", requirements={"slug"=".+"}, priority=-100)
* @Template("content/page.html.twig")
*/
public function PageAction( $slug )
{
return $this->getControllerResult(
'document',
Query::getDocumentBySlug('page', $slug)
);
}
/**
* @Route(name="esi_menu")
* @Template("elements/esi-menu.html.twig")
*/
public function esiMenuAction( $slug )
{
return $this->getControllerResult(
'menu',
Query::getDocumentBySlug('menu', $slug)
);
}
/**
* @Route(name="esi_latest_artciles_menu")
* @Template("elements/esi-latest-articles-menu.html.twig")
*/
public function esiLatestArticlesMenuAction( $num=6 )
{
return $this->getControllerResult(
'articles',
Query::getLatestArticleTeasers($num)
);
}
/**
* @Route(name="esi_latest_articles_home")
* @Template("elements/esi-latest-articles-home.html.twig")
*/
public function esiLatestArticlesHomeAction( $num=3 )
{
return $this->getControllerResult(
'articles',
Query::getLatestArticleTeasers($num)
);
}
/**
* @Route(name="esi_articles_listing")
* @Template
*/
public function esiArticlesListingAction( $num=10, $offset=0 )
{
return $this->getControllerResult(
'articles',
Query::getArticles($num, $offset)
);
}
/**
* @Route(name="esi_references")
* @Template("elements/esi-references.html.twig")
*/
public function esiReferencesAction( $references )
{
if(!$ids = array_filter(explode(',', $references)))
return ['sorted' => []];
return $this->getControllerResult(
'result',
new Query('*[_id in $refs]',
[
'refs' => $ids
])
)->addAuxiliaryData('sorted', function( $result ) use ($ids) {
$sorted = [];
foreach($ids as $id)
foreach($result as $object)
if($object->get('_id') == $id)
$sorted[] = $object;
return $sorted;
});
}
/**
* @Route("/graphic/{size}/{slug}.{xtn}", name="graphic")
*/
public function graphicAction( $size, $slug, $xtn )
{
// die($size);
if( !$graphic = $this->sanity->query(Query::getGraphic($slug)) )
return $this->createNotFoundException("No such graphic")
;
$options = [];
if( $size != 'original' ){
@list($x, $y) = @explode('x', $size);
if(!is_numeric($x) && !is_numeric($y))
throw new \Exception("Bad size instruction: $size");
$options += [
'w' => $x,
'h' => $y ?: $x,
'fit' => 'fill'
];
}
// die($size);
if( !$url = $this->sanity->getImageUrl($graphic['image'], ['imageOptions' => $options]) )
throw new \Exception("That didn't work")
;
//$_xtn = @array_pop(explode('.', basename($url))); all sorts of query crap in there
$data = file_get_contents($url);
$response = new Response;
$disposition = $response->headers
->makeDisposition(ResponseHeaderBag::DISPOSITION_INLINE, "$slug.$xtn");
$response->headers->set('Content-Disposition', $disposition);
$response->headers->set('Content-Type', "image/$xtn");
$response->setContent($data);
return $response;
}
/**
* @Route(name="esi_route")
* @Template
*/
public function esiRouteAction($aircraft, $from, $dest, $airline=null)
{
return $this->getControllerResult(
'route',
Query::getFlightObjects([
'aircraft' => $aircraft,
'from' => $from,
'dest' => $dest
] + ($airline ? ['airline' => $airline] : []))
);
}
}