src/Controller/PageController.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\FlipCard;
  4. use App\Entity\Page;
  5. use App\Entity\Paragraph;
  6. use App\Entity\Quote;
  7. use App\Entity\QuoteItem;
  8. use App\Entity\Review;
  9. use App\Entity\SonataMediaGalleryItem;
  10. use App\Entity\SonataMediaMedia;
  11. use App\Entity\Testimonial;
  12. use App\Entity\TestimonialItem;
  13. use App\Manager\PageManager;
  14. use App\Manager\SettingManager;
  15. use JMS\Serializer\Serializer;
  16. use Sonata\MediaBundle\DependencyInjection\SonataMediaExtension;
  17. use Sonata\MediaBundle\Provider\ImageProviderInterface;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Component\Security\Core\Security;
  25. use Symfony\Component\Serializer\SerializerInterface;
  26. use Symfony\Component\VarDumper\VarDumper;
  27. class PageController extends AbstractController
  28. {
  29.     /**
  30.      * @Route("/", name="home")
  31.      */
  32.     public function homePage(Security $security)
  33.     {
  34.         if ($security->getUser()) {
  35.             return $this->redirectToRoute('sonata_admin_redirect');
  36.         } else {
  37.             return $this->redirectToRoute('nucleos_user_security_login');
  38.         }
  39.     }
  40.     /**
  41.      * @Route("/api/page/get/all", name="page_get_all")
  42.      */
  43.     public function getAllVisitPages(PageManager $pageManagerSerializerInterface $serializerImageProviderInterface $imageProvider): Response
  44.     {
  45.         $pages $pageManager->findBy([
  46.             'published' => true,
  47.             'isVirtualVisit' => true,
  48.         ], [
  49.             'displayOrder' => 'ASC',
  50.         ]);
  51.         foreach ($pages as $page) {
  52.             $tmp = [];
  53.             $tmp['miniature'] = $this->generateMediaData($page->getMiniature(), $imageProvider);
  54.             if ($page->getBadge()) {
  55.                 $tmp['badge'] = $this->generateMediaData($page->getBadge(), $imageProvider);
  56.             }
  57.             /**
  58.              * @var Page $page
  59.              */
  60.             if ($page->getOldQuizz() || $page->getYoungQuizz()) {
  61.                 $page->setHasQuizz(true);
  62.             }
  63.             $page->setMedias($tmp);
  64.         }
  65.         return new JsonResponse([
  66.             'code' => 200,
  67.             'response' => 'ok',
  68.             'data' => $serializer->serialize($pages'json', [
  69.                 'groups' => ['related_infos''translations']
  70.             ]),
  71.         ]);
  72.     }
  73.     /**
  74.      * @Route("/api/page/get/primary", name="page_menu_primary")
  75.      */
  76.     public function getPageForPrimaryMenu(PageManager $pageManagerSerializerInterface $serializerImageProviderInterface $imageProvider): Response
  77.     {
  78.         $pages $pageManager->findBy([
  79.             'published' => true,
  80.             'isVirtualVisit' => false,
  81.             'inPrimaryMenu' => true,
  82.         ], [
  83.             'displayOrder' => 'ASC',
  84.         ]);
  85.         return new JsonResponse([
  86.             'code' => 200,
  87.             'response' => 'ok',
  88.             'data' => $serializer->serialize($pages'json', [
  89.                 'groups' => ['related_infos''translations']
  90.             ]),
  91.         ]);
  92.     }
  93.     /**
  94.      * @Route("/api/page/get/secondary", name="page_menu_secondary")
  95.      */
  96.     public function getPageForSecondaryMenu(PageManager $pageManagerSerializerInterface $serializerImageProviderInterface $imageProvider): Response
  97.     {
  98.         $pages $pageManager->findBy([
  99.             'published' => true,
  100.             'isVirtualVisit' => false,
  101.             'inSecondaryMenu' => true,
  102.         ], [
  103.             'displayOrder' => 'ASC',
  104.         ]);
  105.         return new JsonResponse([
  106.             'code' => 200,
  107.             'response' => 'ok',
  108.             'data' => $serializer->serialize($pages'json', [
  109.                 'groups' => ['related_infos''translations']
  110.             ]),
  111.         ]);
  112.     }
  113.     
  114.     /**
  115.      * @Route("/api/settings/get/all", name="api_settings")
  116.      */
  117.     public function getSettings(SettingManager $settingManagerSerializerInterface $serializer): Response
  118.     {
  119.         $settings $settingManager->findAll();
  120.         $tmpcell = [];
  121.         $lang = ['fr''de''en'];
  122.         foreach ($settings as $value) {
  123.             $keynameExploded explode('.'$value->getKeyname());
  124.             if($keynameExploded[0] && $keynameExploded[1] && in_array($keynameExploded[1] , $lang)){
  125.                 $tmpcell[$keynameExploded[0]][$keynameExploded[1]][$keynameExploded[2]] = $value->getValue();
  126.             } else if($keynameExploded[0] && $keynameExploded[1] && !in_array($keynameExploded[1] , $lang)){
  127.                 $tmpcell[$keynameExploded[0]][$keynameExploded[1]] = $value->getValue();
  128.             } else {
  129.                 return 'Merci de contacter dev@intrepide.lu';
  130.             }
  131.         }
  132.         return new JsonResponse([
  133.             'code' => 200,
  134.             'response' => 'ok',
  135.             'data' => [
  136.                 $serializer->serialize($tmpcell'json', [
  137.                     'groups' => ['settings'],
  138.                 ])
  139.             ]
  140.         ]);
  141.     }
  142.     private function generateMediaData(SonataMediaMedia $mediaImageProviderInterface $imageProvider) {
  143.         $tmpArray = [];
  144.         $langArray = ["fr""en""de"];
  145.         $styles = [
  146.             'default_miniature''default_small''default_full''default_full_4k'
  147.         ];
  148.         foreach ($styles as $style) {
  149.             $tmpArray[$style] = $imageProvider->generatePublicUrl($media$style);
  150.         }
  151.         $tmpArray['alt'] = [];
  152.         foreach ($langArray as $lang) {
  153.             $tmpArray['alt'][$lang] = $media->translate($lang)->getAlt();
  154.         }
  155.         return $tmpArray;
  156.     }
  157.     /**
  158.      * @Route("/api/page/get/{slug}/{lang}", name="page_get_by_id")
  159.      */
  160.     public function getPageById($slug$lang 'en'PageManager $pageManagerSerializerInterface $serializer ImageProviderInterface $imageProvider): Response
  161.     {
  162.         /**
  163.          * @var Page $page
  164.          */
  165.         $page $pageManager->findBySlug($slug$lang);
  166.         if (!$page) {
  167.             return new JsonResponse([
  168.                 'code' => 500,
  169.                 'response' => 'page not found',
  170.                 'data' => [
  171.                 ]
  172.             ]);
  173.         }
  174.         $medias = [];
  175.         if ($page->getMiniature()) {
  176.             $medias['picture'] = $this->generateMediaData($page->getMiniature(), $imageProvider);
  177.         }
  178.         if ($page->getMiniaturebis()) {
  179.             $medias['pictureBis'] = $this->generateMediaData($page->getMiniaturebis(), $imageProvider);
  180.         }
  181.         if ($page->getParagraphs()) {
  182.             $medias['paragraphs'] = [];
  183.             /** @var Paragraph $paragraph */
  184.             foreach ($page->getParagraphs() as $paragraph) {
  185.                 $tmpCell = [];
  186.                 if ($paragraph->getPicture()) {
  187.                     $tmpCell['picture'] = $this->generateMediaData($paragraph->getPicture(), $imageProvider);
  188.                 } else {
  189.                     $tmpCell['picture'] = false;
  190.                 }
  191.                 $medias['paragraphs'][] = $tmpCell;
  192.             }
  193.         }
  194.         if ($page->getTestimonials()) {
  195.             $medias['testimonials'] = [];
  196.             /** @var TestimonialItem $testimonial */
  197.             foreach ($page->getTestimonials() as $testimonial) {
  198.                 $tmpCell = [];
  199.                 if ($testimonial->getTestimonial()->getPicture()) {
  200.                     $tmpCell['picture'] = $this->generateMediaData($testimonial->getTestimonial()->getPicture(), $imageProvider);
  201.                 } else {
  202.                     $tmpCell['picture'] = false;
  203.                 }
  204.                 $medias['testimonials'][] = $tmpCell;
  205.             }
  206.         }
  207.         if ($page->getQuotes()) {
  208.             $medias['quotes'] = [];
  209.             /** @var QuoteItem $quote */
  210.             foreach ($page->getQuotes() as $quote) {
  211.                 $tmpCell = [];
  212.                 if ($quote->getQuote()->getPicture()) {
  213.                     $tmpCell['picture'] = $this->generateMediaData($quote->getQuote()->getPicture(), $imageProvider);
  214.                 } else {
  215.                     $tmpCell['picture'] = false;
  216.                 }
  217.                 if ($quote->getQuote()->getPicturebis()) {
  218.                     $tmpCell['pictureBis'] = $this->generateMediaData($quote->getQuote()->getPicturebis(), $imageProvider);
  219.                 } else {
  220.                     $tmpCell['pictureBis'] = false;
  221.                 }
  222.                 $medias['quotes'][] = $tmpCell;
  223.             }
  224.         }
  225.         if ($page->getObstacle()) {
  226.             $tmpCell = [];
  227.             $obstacle $page->getObstacle();
  228.             if ($obstacle->getPicture()) {
  229.                 $tmpCell['picture'] = $this->generateMediaData($obstacle->getPicture(), $imageProvider);
  230.             } else {
  231.                 $tmpCell['picture'] = false;
  232.             }
  233.             $medias['obstacle'] = $tmpCell;
  234.         }
  235.         if ($page->getReviews()) {
  236.             $medias['reviews'] = [];
  237.             /** @var Review $review */
  238.             foreach ($page->getReviews() as $review) {
  239.                 $tmpCell = [];
  240.                 if ($review->getPicture()) {
  241.                     $tmpCell['picture'] = $this->generateMediaData($review->getPicture(), $imageProvider);
  242.                 } else {
  243.                     $tmpCell['picture'] = false;
  244.                 }
  245.                 $medias['reviews'][] = $tmpCell;
  246.             }
  247.         }
  248.         if ($page->getGallery()) {
  249.             $medias['gallery'] = [];
  250.             /** @var SonataMediaGalleryItem $mediaItem */
  251.             foreach ($page->getGallery()->getGalleryItems() as $mediaItem) {
  252.                 $tmpCell = [];
  253.                 if ($mediaItem->getMedia()) {
  254.                     $tmpCell['picture'] = $this->generateMediaData($mediaItem->getMedia(), $imageProvider);
  255.                 } else {
  256.                     $tmpCell['picture'] = false;
  257.                 }
  258.                 $medias['gallery'][] = $tmpCell;
  259.             }
  260.         }
  261.         $infos = [
  262.             'object' => $page,
  263.             'medias' => $medias,
  264.         ];
  265.         return new JsonResponse([
  266.             'code' => 200,
  267.             'response' => 'ok',
  268.             'data' => [
  269.                 => $serializer->serialize($infos'json', [
  270.                     'groups' => ['page''translations']
  271.                 ])
  272.             ]
  273.         ]);
  274.     }
  275. }