<?php
namespace AppBundle\Controller;
use AppBundle\Entity\BuildingPortal;
use AppBundle\Entity\Page;
use AppBundle\Entity\ProjectPortal;
use AppBundle\Util\ChromeItemsHelperTrait;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Translation\Translator;
/**
* Pages controller.
*
* @Route("pages")
*/
class PageController extends Controller
{
use ChromeItemsHelperTrait;
/**
* Page details.
*
* @Route("/{slug}", name="page_details")
* @param Page $page
* @return \Symfony\Component\HttpFoundation\Response
*/
public function showAction(Request $request, Page $page, Translator $translator)
{
if (!$page->getPublished()) {
throw new NotFoundHttpException('Page not found or not published yet!');
}
$ctx = ['page' => $page];
$em = $this->getDoctrine()->getManager();
$this->prepareItemsInController($request, $page, $em, $translator, $ctx);
if ($page->getType() === Page::PROJECT_PAGE) {
// preload project, building and floor plans with coordinates
$projectRepo = $em
->getRepository(ProjectPortal::class);
$portalProject = $page->getProjectPortal();
if ($portalProject) {
$projectRepo->assignChildren(
$portalProject,
BuildingPortal::class,
$em
);
}
$template = 'AppBundle:Page:project.html.twig';
} else {
$template = 'AppBundle:Page:index.html.twig';
}
$response = $this->render($template, $ctx);
if ($page->getSlug() === '404') {
$response->setStatusCode(Response::HTTP_NOT_FOUND);
}
return $response;
}
}