src/Controller/AcademyController.php line 50

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Services\GeneralService;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Pimcore\Model\DataObject;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  9. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. /**
  12.  * @Route("/api", name="academy-api")
  13.  */
  14. class AcademyController extends AbstractController
  15. {
  16.     public function renderHomeAction()
  17.     {
  18.         $listing = new \Pimcore\Model\Document\Listing();
  19.         $listing->setCondition("path LIKE ?""%/academy/%")
  20.             ->setOrderKey(['key''published'])
  21.             ->setOrder('desc')
  22.             ->setLimit(3);
  23.         $latest = [];
  24.         foreach ($listing->load() as $document) {
  25.             $latest[] = $this->getArticleData($document);
  26.         }
  27.         $paramsBag = ['latest' => $latest];
  28.         return $this->render('academy/academy.html.twig'$paramsBag);
  29.     }
  30.     protected function getArticleData($document)
  31.     {
  32.         $data =
  33.             [
  34.                 'title' => $document->getEditable('article-title'),
  35.                 'author' => $document->getEditable('author-name'),
  36.                 'reading' => $document->getEditable('reading-time'),
  37.                 'date' => $document->getEditable('date'),
  38.                 'image' => $document->getEditable('article-main-img'),
  39.                 'path' => $document->getFullPath(),
  40.                 'description' => $document->getEditable('short-description'),
  41.             ];
  42.         return $data;
  43.     }
  44.     public function renderAuthorAction(Request $request)
  45.     {
  46.         $paramsBag = [];
  47.         if ($request->get('type') == 'object') {
  48.             $author DataObject\Author::getById($request->get('id'));
  49.             $paramsBag['author'] = $author;
  50.             return $this->render('academy/author-card.html.twig'$paramsBag);
  51.         }
  52.         throw new NotFoundHttpException('Author not found.');
  53.     }
  54.     public function renderRelatedArticleAction(Request $request)
  55.     {
  56.         $paramsBag = [];
  57.         if ($request->get('type') == 'document') {
  58.             $document \Pimcore\Model\Document::getById($request->get('id'));
  59.             $paramsBag['article'] = $this->getArticleData($document);
  60.             return $this->render('academy/mini-card.html.twig'$paramsBag);
  61.         }
  62.         throw new NotFoundHttpException('Article not found.');
  63.     }
  64.     public function renderHeroArticleAction(Request $request)
  65.     {
  66.         $paramsBag = [];
  67.         if ($request->get('type') == 'document') {
  68.             $document \Pimcore\Model\Document::getById($request->get('id'));
  69.             $paramsBag['article'] = $this->getArticleData($document);
  70.             return $this->render('academy/academy-hero.html.twig'$paramsBag);
  71.         }
  72.         throw new NotFoundHttpException('Article not found.');
  73.     }
  74.     public function renderMainCardAction(Request $request)
  75.     {
  76.         $paramsBag = [];
  77.         if ($request->get('type') == 'document') {
  78.             $document \Pimcore\Model\Document::getById($request->get('id'));
  79.             $paramsBag['article'] = $this->getArticleData($document);
  80.             return $this->render('academy/main-card.html.twig'$paramsBag);
  81.         }
  82.         throw new NotFoundHttpException('Article not found.');
  83.     }
  84.     /**
  85.      * @Route("/academy/downloads", name="academy-downloads", methods="POST")
  86.      */
  87.     public function downloadAction(Request $requestGeneralService $generalProvider)
  88.     {
  89.         $payload json_decode($request->getContent(), true);
  90.         if (empty($payload['email']) || !filter_var($payload['email'], FILTER_VALIDATE_EMAIL)) {
  91.             throw new BadRequestHttpException('Invalid email');
  92.         }
  93.         $template \Pimcore\Model\Document\Email::getById($payload['template']);
  94.         $file \Pimcore\Model\Asset::getById($payload['file']);
  95.         if (!$template || !$file) {
  96.             throw new BadRequestHttpException('Invalid template or file.');
  97.         }
  98.         $success $generalProvider->sendEmail(
  99.             $payload['email'],
  100.             $template->getFullPath(),
  101.             [
  102.                 'firstname' => $payload['firstname'],
  103.                 'link' => $file->getFrontendFullPath(),
  104.             ],
  105.             'enquiries@oscare.co.uk',
  106.         );
  107.         $response = new Response();
  108.         $response->headers->set('Content-Type''application/json');
  109.         $response->setContent(json_encode(['success' => $success]));
  110.         return $response;
  111.     }
  112.     /**
  113.      * @Route("/academy/freetrial", name="academy-freetrial", methods="POST")
  114.      */
  115.     public function freetrialAction(Request $requestGeneralService $generalProvider)
  116.     {
  117.         $payload json_decode($request->getContent(), true);
  118.         if (empty($payload['email']) || !filter_var($payload['email'], FILTER_VALIDATE_EMAIL)) {
  119.             throw new BadRequestHttpException('Invalid email');
  120.         }
  121.         $success $generalProvider->sendEmail(
  122.             'enquiries@oscare.co.uk',
  123.             '/en/mails/freetrial-request',
  124.             [
  125.                 'firstname' => $payload['firstname'],
  126.                 'email' => $payload['email'],
  127.                 'profession' => $payload['profession'],
  128.                 'source' => $payload['source'],
  129.             ]
  130.         );
  131.         $response = new Response();
  132.         $response->headers->set('Content-Type''application/json');
  133.         $response->setContent(json_encode(['success' => $success]));
  134.         return $response;
  135.     }
  136. }