<?php
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Pimcore\Twig\Extension\Templating\Placeholder;
use App\LinkGenerator\ProjectLinkGenerator;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use \Pimcore\Model\DataObject;
use \Pimcore\Model\DataObject\Project;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
class ProjectController extends FrontendController
{
const PROJECT_DEFAULT_DOCUMENT_PROPERTY_NAME = 'project_default_document';
public function projectIndexAction(Request $request)
{
$projects = new DataObject\Project\Listing();
$projects->setOrderKey('o_id');
$projects->setOrder('desc');
$categories = new DataObject\ProjectCategory\Listing();
// Only get main categories
$categories->setCondition('o_parentId = 7');
$active_category_id = $request->query->get('category', -1);
return $this->render('projects.html.twig', [
'projects' => $projects,
'categories' => $categories,
'quotes' => $this->getKeyQuotes(),
'active_category_id' => $active_category_id
]);
}
/**
* @Route("{path}/{projecttitle}~p{project}", name="projects-detail", defaults={"path"=""}, requirements={"path"=".*?", "projecttitle"="[\w-]+", "project"="\d+"})
*
*/
public function projectShowAction(Request $request, ProjectLinkGenerator $projectLinkGenerator, Placeholder $placeholderHelper)
{
$id = (int) $request->get('project');
$project = Project::getById($id);
if (!$project) {
throw new NotFoundHttpException('Not found');
}
$placeholderHelper('canonical')->set($projectLinkGenerator->generate($project, ['document' => $this->document->getProperty(self::PROJECT_DEFAULT_DOCUMENT_PROPERTY_NAME)]));
return $this->render('projects-detail.html.twig', ['project' => $project]);
}
/**
* @Template
*/
public function projectRenderletAction(Request $request)
{
$params = [];
$params['editmode'] = $request->get('editmode');
if ($request->get('id') && $request->get('type') === 'object') {
$id = (int) $request->get('id');
$params['project'] = Project::getById($id) ?? null;
}
return $this->render('content/projectRenderlet.html.twig', $params);
}
public function slugAction(Request $request)
{
return $request->get('id');
}
/*
* PRIVATE
*/
private function getKeyQuotes()
{
// Get quotes
$quotes = new DataObject\Quote\Listing();
$quotes->setOrderKey('position');
$quotes->setOrder('asc');
$key_quotes = [];
foreach ($quotes as $quote) {
$key_quotes[$quote->getPosition()] = $quote;
}
return $key_quotes;
}
}