<?php
namespace App\Controller;
use App\Services\GeneralService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Pimcore\Model\DataObject;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/api", name="academy-api")
*/
class AcademyController extends AbstractController
{
public function renderHomeAction()
{
$listing = new \Pimcore\Model\Document\Listing();
$listing->setCondition("path LIKE ?", "%/academy/%")
->setOrderKey(['key', 'published'])
->setOrder('desc')
->setLimit(3);
$latest = [];
foreach ($listing->load() as $document) {
$latest[] = $this->getArticleData($document);
}
$paramsBag = ['latest' => $latest];
return $this->render('academy/academy.html.twig', $paramsBag);
}
protected function getArticleData($document)
{
$data =
[
'title' => $document->getEditable('article-title'),
'author' => $document->getEditable('author-name'),
'reading' => $document->getEditable('reading-time'),
'date' => $document->getEditable('date'),
'image' => $document->getEditable('article-main-img'),
'path' => $document->getFullPath(),
'description' => $document->getEditable('short-description'),
];
return $data;
}
public function renderAuthorAction(Request $request)
{
$paramsBag = [];
if ($request->get('type') == 'object') {
$author = DataObject\Author::getById($request->get('id'));
$paramsBag['author'] = $author;
return $this->render('academy/author-card.html.twig', $paramsBag);
}
throw new NotFoundHttpException('Author not found.');
}
public function renderRelatedArticleAction(Request $request)
{
$paramsBag = [];
if ($request->get('type') == 'document') {
$document = \Pimcore\Model\Document::getById($request->get('id'));
$paramsBag['article'] = $this->getArticleData($document);
return $this->render('academy/mini-card.html.twig', $paramsBag);
}
throw new NotFoundHttpException('Article not found.');
}
public function renderHeroArticleAction(Request $request)
{
$paramsBag = [];
if ($request->get('type') == 'document') {
$document = \Pimcore\Model\Document::getById($request->get('id'));
$paramsBag['article'] = $this->getArticleData($document);
return $this->render('academy/academy-hero.html.twig', $paramsBag);
}
throw new NotFoundHttpException('Article not found.');
}
public function renderMainCardAction(Request $request)
{
$paramsBag = [];
if ($request->get('type') == 'document') {
$document = \Pimcore\Model\Document::getById($request->get('id'));
$paramsBag['article'] = $this->getArticleData($document);
return $this->render('academy/main-card.html.twig', $paramsBag);
}
throw new NotFoundHttpException('Article not found.');
}
/**
* @Route("/academy/downloads", name="academy-downloads", methods="POST")
*/
public function downloadAction(Request $request, GeneralService $generalProvider)
{
$payload = json_decode($request->getContent(), true);
if (empty($payload['email']) || !filter_var($payload['email'], FILTER_VALIDATE_EMAIL)) {
throw new BadRequestHttpException('Invalid email');
}
$template = \Pimcore\Model\Document\Email::getById($payload['template']);
$file = \Pimcore\Model\Asset::getById($payload['file']);
if (!$template || !$file) {
throw new BadRequestHttpException('Invalid template or file.');
}
$success = $generalProvider->sendEmail(
$payload['email'],
$template->getFullPath(),
[
'firstname' => $payload['firstname'],
'link' => $file->getFrontendFullPath(),
],
'enquiries@oscare.co.uk',
);
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->setContent(json_encode(['success' => $success]));
return $response;
}
/**
* @Route("/academy/freetrial", name="academy-freetrial", methods="POST")
*/
public function freetrialAction(Request $request, GeneralService $generalProvider)
{
$payload = json_decode($request->getContent(), true);
if (empty($payload['email']) || !filter_var($payload['email'], FILTER_VALIDATE_EMAIL)) {
throw new BadRequestHttpException('Invalid email');
}
$success = $generalProvider->sendEmail(
'enquiries@oscare.co.uk',
'/en/mails/freetrial-request',
[
'firstname' => $payload['firstname'],
'email' => $payload['email'],
'profession' => $payload['profession'],
'source' => $payload['source'],
]
);
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->setContent(json_encode(['success' => $success]));
return $response;
}
}