<?php
namespace App\Controller;
use App\Entity\FlipCard;
use App\Entity\Page;
use App\Entity\Paragraph;
use App\Entity\Quote;
use App\Entity\QuoteItem;
use App\Entity\Review;
use App\Entity\SonataMediaGalleryItem;
use App\Entity\SonataMediaMedia;
use App\Entity\Testimonial;
use App\Entity\TestimonialItem;
use App\Manager\PageManager;
use App\Manager\SettingManager;
use JMS\Serializer\Serializer;
use Sonata\MediaBundle\DependencyInjection\SonataMediaExtension;
use Sonata\MediaBundle\Provider\ImageProviderInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\VarDumper\VarDumper;
class PageController extends AbstractController
{
/**
* @Route("/", name="home")
*/
public function homePage(Security $security)
{
if ($security->getUser()) {
return $this->redirectToRoute('sonata_admin_redirect');
} else {
return $this->redirectToRoute('nucleos_user_security_login');
}
}
/**
* @Route("/api/page/get/all", name="page_get_all")
*/
public function getAllVisitPages(PageManager $pageManager, SerializerInterface $serializer, ImageProviderInterface $imageProvider): Response
{
$pages = $pageManager->findBy([
'published' => true,
'isVirtualVisit' => true,
], [
'displayOrder' => 'ASC',
]);
foreach ($pages as $page) {
$tmp = [];
$tmp['miniature'] = $this->generateMediaData($page->getMiniature(), $imageProvider);
if ($page->getBadge()) {
$tmp['badge'] = $this->generateMediaData($page->getBadge(), $imageProvider);
}
/**
* @var Page $page
*/
if ($page->getOldQuizz() || $page->getYoungQuizz()) {
$page->setHasQuizz(true);
}
$page->setMedias($tmp);
}
return new JsonResponse([
'code' => 200,
'response' => 'ok',
'data' => $serializer->serialize($pages, 'json', [
'groups' => ['related_infos', 'translations']
]),
]);
}
/**
* @Route("/api/page/get/primary", name="page_menu_primary")
*/
public function getPageForPrimaryMenu(PageManager $pageManager, SerializerInterface $serializer, ImageProviderInterface $imageProvider): Response
{
$pages = $pageManager->findBy([
'published' => true,
'isVirtualVisit' => false,
'inPrimaryMenu' => true,
], [
'displayOrder' => 'ASC',
]);
return new JsonResponse([
'code' => 200,
'response' => 'ok',
'data' => $serializer->serialize($pages, 'json', [
'groups' => ['related_infos', 'translations']
]),
]);
}
/**
* @Route("/api/page/get/secondary", name="page_menu_secondary")
*/
public function getPageForSecondaryMenu(PageManager $pageManager, SerializerInterface $serializer, ImageProviderInterface $imageProvider): Response
{
$pages = $pageManager->findBy([
'published' => true,
'isVirtualVisit' => false,
'inSecondaryMenu' => true,
], [
'displayOrder' => 'ASC',
]);
return new JsonResponse([
'code' => 200,
'response' => 'ok',
'data' => $serializer->serialize($pages, 'json', [
'groups' => ['related_infos', 'translations']
]),
]);
}
/**
* @Route("/api/settings/get/all", name="api_settings")
*/
public function getSettings(SettingManager $settingManager, SerializerInterface $serializer): Response
{
$settings = $settingManager->findAll();
$tmpcell = [];
$lang = ['fr', 'de', 'en'];
foreach ($settings as $value) {
$keynameExploded = explode('.', $value->getKeyname());
if($keynameExploded[0] && $keynameExploded[1] && in_array($keynameExploded[1] , $lang)){
$tmpcell[$keynameExploded[0]][$keynameExploded[1]][$keynameExploded[2]] = $value->getValue();
} else if($keynameExploded[0] && $keynameExploded[1] && !in_array($keynameExploded[1] , $lang)){
$tmpcell[$keynameExploded[0]][$keynameExploded[1]] = $value->getValue();
} else {
return 'Merci de contacter dev@intrepide.lu';
}
}
return new JsonResponse([
'code' => 200,
'response' => 'ok',
'data' => [
$serializer->serialize($tmpcell, 'json', [
'groups' => ['settings'],
])
]
]);
}
private function generateMediaData(SonataMediaMedia $media, ImageProviderInterface $imageProvider) {
$tmpArray = [];
$langArray = ["fr", "en", "de"];
$styles = [
'default_miniature', 'default_small', 'default_full', 'default_full_4k'
];
foreach ($styles as $style) {
$tmpArray[$style] = $imageProvider->generatePublicUrl($media, $style);
}
$tmpArray['alt'] = [];
foreach ($langArray as $lang) {
$tmpArray['alt'][$lang] = $media->translate($lang)->getAlt();
}
return $tmpArray;
}
/**
* @Route("/api/page/get/{slug}/{lang}", name="page_get_by_id")
*/
public function getPageById($slug, $lang = 'en', PageManager $pageManager, SerializerInterface $serializer , ImageProviderInterface $imageProvider): Response
{
/**
* @var Page $page
*/
$page = $pageManager->findBySlug($slug, $lang);
if (!$page) {
return new JsonResponse([
'code' => 500,
'response' => 'page not found',
'data' => [
]
]);
}
$medias = [];
if ($page->getMiniature()) {
$medias['picture'] = $this->generateMediaData($page->getMiniature(), $imageProvider);
}
if ($page->getMiniaturebis()) {
$medias['pictureBis'] = $this->generateMediaData($page->getMiniaturebis(), $imageProvider);
}
if ($page->getParagraphs()) {
$medias['paragraphs'] = [];
/** @var Paragraph $paragraph */
foreach ($page->getParagraphs() as $paragraph) {
$tmpCell = [];
if ($paragraph->getPicture()) {
$tmpCell['picture'] = $this->generateMediaData($paragraph->getPicture(), $imageProvider);
} else {
$tmpCell['picture'] = false;
}
$medias['paragraphs'][] = $tmpCell;
}
}
if ($page->getTestimonials()) {
$medias['testimonials'] = [];
/** @var TestimonialItem $testimonial */
foreach ($page->getTestimonials() as $testimonial) {
$tmpCell = [];
if ($testimonial->getTestimonial()->getPicture()) {
$tmpCell['picture'] = $this->generateMediaData($testimonial->getTestimonial()->getPicture(), $imageProvider);
} else {
$tmpCell['picture'] = false;
}
$medias['testimonials'][] = $tmpCell;
}
}
if ($page->getQuotes()) {
$medias['quotes'] = [];
/** @var QuoteItem $quote */
foreach ($page->getQuotes() as $quote) {
$tmpCell = [];
if ($quote->getQuote()->getPicture()) {
$tmpCell['picture'] = $this->generateMediaData($quote->getQuote()->getPicture(), $imageProvider);
} else {
$tmpCell['picture'] = false;
}
if ($quote->getQuote()->getPicturebis()) {
$tmpCell['pictureBis'] = $this->generateMediaData($quote->getQuote()->getPicturebis(), $imageProvider);
} else {
$tmpCell['pictureBis'] = false;
}
$medias['quotes'][] = $tmpCell;
}
}
if ($page->getObstacle()) {
$tmpCell = [];
$obstacle = $page->getObstacle();
if ($obstacle->getPicture()) {
$tmpCell['picture'] = $this->generateMediaData($obstacle->getPicture(), $imageProvider);
} else {
$tmpCell['picture'] = false;
}
$medias['obstacle'] = $tmpCell;
}
if ($page->getReviews()) {
$medias['reviews'] = [];
/** @var Review $review */
foreach ($page->getReviews() as $review) {
$tmpCell = [];
if ($review->getPicture()) {
$tmpCell['picture'] = $this->generateMediaData($review->getPicture(), $imageProvider);
} else {
$tmpCell['picture'] = false;
}
$medias['reviews'][] = $tmpCell;
}
}
if ($page->getGallery()) {
$medias['gallery'] = [];
/** @var SonataMediaGalleryItem $mediaItem */
foreach ($page->getGallery()->getGalleryItems() as $mediaItem) {
$tmpCell = [];
if ($mediaItem->getMedia()) {
$tmpCell['picture'] = $this->generateMediaData($mediaItem->getMedia(), $imageProvider);
} else {
$tmpCell['picture'] = false;
}
$medias['gallery'][] = $tmpCell;
}
}
$infos = [
'object' => $page,
'medias' => $medias,
];
return new JsonResponse([
'code' => 200,
'response' => 'ok',
'data' => [
0 => $serializer->serialize($infos, 'json', [
'groups' => ['page', 'translations']
])
]
]);
}
}