src/Controller/ProjectController.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Pimcore\Controller\FrontendController;
  4. use Pimcore\Twig\Extension\Templating\Placeholder;
  5. use App\LinkGenerator\ProjectLinkGenerator;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use \Pimcore\Model\DataObject;
  11. use \Pimcore\Model\DataObject\Project;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  13. class ProjectController extends FrontendController
  14. {
  15.     const PROJECT_DEFAULT_DOCUMENT_PROPERTY_NAME 'project_default_document';
  16.     public function projectIndexAction(Request $request)
  17.     {
  18.         $projects = new DataObject\Project\Listing();
  19.         $projects->setOrderKey('o_id');
  20.         $projects->setOrder('desc');
  21.         $categories = new DataObject\ProjectCategory\Listing();
  22.         // Only get main categories
  23.         $categories->setCondition('o_parentId = 7');
  24.         $active_category_id $request->query->get('category', -1);
  25.         return $this->render('projects.html.twig', [
  26.             'projects' => $projects,
  27.             'categories' => $categories,
  28.             'quotes' => $this->getKeyQuotes(),
  29.             'active_category_id' => $active_category_id
  30.         ]);
  31.     }
  32.     /**
  33.      * @Route("{path}/{projecttitle}~p{project}", name="projects-detail", defaults={"path"=""}, requirements={"path"=".*?", "projecttitle"="[\w-]+", "project"="\d+"})
  34.      *
  35.      */
  36.     public function projectShowAction(Request $requestProjectLinkGenerator $projectLinkGeneratorPlaceholder $placeholderHelper)
  37.     {
  38.         $id = (int) $request->get('project');
  39.         $project Project::getById($id);
  40.         if (!$project) {
  41.             throw new NotFoundHttpException('Not found');
  42.         }
  43.         $placeholderHelper('canonical')->set($projectLinkGenerator->generate($project, ['document' => $this->document->getProperty(self::PROJECT_DEFAULT_DOCUMENT_PROPERTY_NAME)]));
  44.         return $this->render('projects-detail.html.twig', ['project' => $project]);
  45.     }
  46.     /**
  47.      * @Template
  48.      */
  49.     public function projectRenderletAction(Request $request)
  50.     {
  51.         $params = [];
  52.         $params['editmode'] = $request->get('editmode');
  53.         if ($request->get('id') && $request->get('type') === 'object') {
  54.             $id = (int) $request->get('id');
  55.             $params['project'] =  Project::getById($id) ?? null;
  56.         }
  57.         return $this->render('content/projectRenderlet.html.twig'$params);
  58.     }
  59.     public function slugAction(Request $request)
  60.     {
  61.         return $request->get('id');
  62.     }
  63.     /*
  64.      *  PRIVATE
  65.      */
  66.     private function getKeyQuotes()
  67.     {
  68.         // Get quotes
  69.         $quotes = new DataObject\Quote\Listing();
  70.         $quotes->setOrderKey('position');
  71.         $quotes->setOrder('asc');
  72.         $key_quotes = [];
  73.         foreach ($quotes as $quote) {
  74.             $key_quotes[$quote->getPosition()] = $quote;
  75.         }
  76.         return $key_quotes;
  77.     }
  78. }