src/Controller/Home/IndexController.php line 440

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: yazidneghiche
  5.  * Date: 23/03/2021
  6.  * Time: 20:26.
  7.  */
  8. namespace App\Controller\Home;
  9. use App\Entity\Block;
  10. use App\Entity\Newsletter;
  11. use App\Entity\Page;
  12. use App\Entity\PageBlock;
  13. use App\Form\NewsLetterType;
  14. use App\Form\DayroomType;
  15. use App\Helper as hlp;
  16. use App\Repository\ContentRepository;
  17. use App\Repository\MenuRepository;
  18. use App\Repository\PageBlockRepository;
  19. use App\Service\LangService;
  20. use App\Service\Mail;
  21. use App\Service\SaferpayService;
  22. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. class IndexController extends AbstractController
  28. {
  29.     /**
  30.      * @var array
  31.      */
  32.     public $valid_route = [
  33.         'accueil',
  34.         'about',
  35.         'apartments',
  36.         'brochure',
  37.         'birthday',
  38.         'home',
  39.         'test',
  40.         'baptism-communion',
  41.         'bed-bike',
  42.         'contact',
  43.         'class-reunion',
  44.         'event',
  45.         'conference',
  46.         'discovery-news',
  47.         'events',
  48.         'gifts',
  49.         'meeting-room'//meeting rooms
  50.         'medium-size',
  51.         'small-size',
  52.         'big-size',
  53.         'bowling-room',
  54.         'packages',
  55.         'rooms'//rooms
  56.         'leisure-sport',
  57.         'medium-size',
  58.         'meetings',
  59.         'packages',
  60.         'rallye',
  61.         'restaurant',
  62.         'la-veranda',
  63.         'lounge-bar',
  64.         'small-size',
  65.         'leisure-sports',
  66.         'swimming-pools',
  67.         'spa-leisure',
  68.         'special-offers',
  69.         'wedding',
  70.         'wellness-area',
  71.         'test',
  72.     ];
  73.     /**
  74.      * @var string
  75.      */
  76.     public $slug 'accueil';
  77.     /**
  78.      * @var array
  79.      */
  80.     private $classe = [
  81.         'contact' => \App\Form\ContactType::class,
  82.         'gifts' => \App\Form\GiftType::class,
  83.         'gift-vouchers' => \App\Form\GiftType::class,
  84.         'wedding' => \App\Form\GiftType::class,
  85.         'meeting-room' => \App\Form\ContactType::class,
  86.         'bowling-room' => \App\Form\ContactType::class,
  87.         'conferences' => \App\Form\GiftType::class,
  88.         'class-reunion' => \App\Form\GiftType::class,
  89.         'baptism-and-communion' => \App\Form\GiftType::class,
  90.         'birthday' => \App\Form\GiftType::class,
  91.         'our-reception-rooms' => \App\Form\ContactType::class,
  92.         'small-rooms' => \App\Form\ContactType::class,
  93.         'medium-rooms' => \App\Form\ContactType::class,
  94.         'big-room' => \App\Form\ContactType::class,
  95.         'special-offers' => \App\Form\DayroomType::class,
  96.     ];
  97.     /**
  98.      * page -> entity form.
  99.      *
  100.      * @var array
  101.      */
  102.     public $page_form = [
  103.         'contact' => ['contact'],
  104.         'gifts' => ['gift'],
  105.         'gift-vouchers' => ['gift'],
  106.         'wedding' => ['gift'],
  107.         'meeting-room' => ['contact'],
  108.         'bowling-room' => ['contact'],
  109.         'conferences' => ['gift'],
  110.         'class-reunion' => ['gift'],
  111.         'baptism-and-communion' => ['gift'],
  112.         'birthday' => ['gift'],
  113.         'our-reception-rooms' => ['contact'],
  114.         'small-rooms' => ['contact'],
  115.         'medium-rooms' => ['contact'],
  116.         'big-room' => ['contact'],
  117.         'special-offers' => ['special-offers'],
  118.     ];
  119.     /**
  120.      * @var LangService
  121.      */
  122.     private $langService;
  123.     /**
  124.      * @var ContentRepository
  125.      */
  126.     private $contentRepository;
  127.     public function __construct(LangService $langServiceContentRepository $contentRepository)
  128.     {
  129.         $this->langService $langService;
  130.         $this->contentRepository $contentRepository;
  131.     }
  132.     public function index()
  133.     {
  134.         $datas $this->_page('accueil');
  135.         $datas['slug'] = $this->slug;
  136.         return $this->redirectToRoute('app_page', ['slug' => 'home']);
  137.     }
  138.     /**
  139.      * @param $slug
  140.      * @param string $id
  141.      *
  142.      * @return Response
  143.      */
  144.     public function page($slug$id ''Request $requestMenuRepository $menuRepositoryPageBlockRepository $pageBlockRepositoryLangService $langServiceSessionInterface $session)
  145.     {
  146.         $page $this->getDoctrine()->getRepository(Page::class)->findBy(['slug' => $slug]);
  147.         $imgPreloads $this->imgPreload();
  148.         if (!empty($page)) {
  149.             $lang $this->langService->getCodeLanguage($request->getLocale());
  150.             $array = [];
  151.             $datas['slug'] = $slug;
  152.             $datas['locale'] = $request->getLocale();
  153.             $site $this->_getDataSite($langService->getCodeLanguage($lang));
  154.            /* if(!empty($site)){
  155.                 $datas['header'] = $site[0]->datas;
  156.                 if(isset( $site[1]))
  157.                    // $datas['newsletter_block'] = $site[1]->datas;
  158.             }*/
  159.             // Footer components
  160.             // TODO Footer
  161.           /*  if (2 === $lang) {
  162.                 $site = $pageBlockRepository->find(646);
  163.                 $datas['footer']['links'] = $site->getPageBlock()[0]->json;
  164.                 $datas['footer']['logos'] = $site->getPageBlock()[1]->json;
  165.                 $datas['footer']['privacy_links'] = $site->getPageBlock()[2]->json;
  166.                 $datas['footer']['location'] = $site->getPageBlock()[3]->json;
  167.                 $datas['footer']['social'] = $site->getPageBlock()[4]->json ?? [];
  168.             } elseif (3 === $lang) {
  169.                 $site = $pageBlockRepository->find(648);
  170.                 $datas['footer']['links'] = $site->getPageBlock()[0]->json;
  171.                 $datas['footer']['logos'] = $site->getPageBlock()[1]->json;
  172.                 $datas['footer']['privacy_links'] = $site->getPageBlock()[2]->json;
  173.                 $datas['footer']['location'] = $site->getPageBlock()[3]->json;
  174.                 $datas['footer']['social'] = $site->getPageBlock()[4]->json ?? [];
  175.             } else {
  176.                 $datas['footer']['links'] = $site[5]->getPageBlock()[0]->json;
  177.                 $datas['footer']['logos'] = $site[5]->getPageBlock()[1]->json;
  178.                 $datas['footer']['privacy_links'] = $site[5]->getPageBlock()[2]->json;
  179.                 $datas['footer']['location'] = $site[5]->getPageBlock()[3]->json;
  180.                 $datas['footer']['social'] = $site[5]->getPageBlock()[4]->json ?? [];
  181.             }*/
  182.             $datas['blocks'] = $this->_getDataPage($slug$request->getLocale(), $page[0]->getId());
  183.             if (empty($datas['blocks'])) {
  184.                 return new Response(
  185.                     $this->render('bundles/TwigBundle/Exception/error404.html.twig'),
  186.                     404
  187.                 );
  188.             }
  189.             //get Header
  190.             if(!empty( $this->_getDataHeader($slug)))
  191.                 $datas['header'] = $this->_getDataHeader($slug)[0]->datas;
  192.             $menu $menuRepository->findOneBy(['name' => 'main_menu']);
  193.             $datas['menus'] = json_decode($menu->getJsonData());
  194.             $datas['metas'] = [];
  195.             
  196.             foreach ($datas['blocks'] as $key => $dt) {
  197.                 if (isset($dt->datas) && array_key_exists('meta_title'$dt->datas)) {
  198.                     $datas['metas'] = $dt->datas;
  199.                 } else {
  200.                     $sub = [];
  201.                     if (true == $dt->getBlock()->getSubBlock()) {
  202.                         foreach ($dt->getPageBlock() as $children) {
  203.                             $sub[] = $children->json;
  204.                         }
  205.                         $dt->datas['slider'] = $sub;
  206.                     }
  207.                     $template $dt->getBlock()->getPath();
  208.                     $array['blocks'][] = ['data' => $dt->datas'template' => $template];
  209.                 }
  210.             }
  211.             unset($datas['blocks']);
  212.             $datas array_merge($datas$array);
  213.         } else {
  214.             if (!in_array($slug$this->valid_route)) {
  215.                 $slug '404';
  216.             }
  217.             $form '';
  218.             $is_numeric true;
  219.             if ('' != $id) {
  220.                 if (!is_numeric($id)) {
  221.                     $id str_replace('-''_'$id);
  222.                     $is_numeric false;
  223.                 }
  224.             }
  225.             $datas $this->_page($slug$id);
  226.             if (!$is_numeric) {
  227.                 $id '';
  228.             }
  229.             $datas['slug'] = $slug;
  230.             if (!is_null($id)) {
  231.                 $datas['id'] = $id;
  232.             }
  233.         }
  234.         if (array_key_exists($slug$this->page_form)) {
  235.             $classe $this->page_form[$slug][0];
  236.             if ($classe === 'special-offers') {
  237.                 $classe 'dayroom';
  238.             }
  239.             $model 'App\\Entity\\'.ucfirst($classe);
  240.             $model = new $model();
  241.             $form $this->createForm($this->classe[$slug], $model,
  242.                 [
  243.                     'action' => $this->generateUrl('ajax_form'),
  244.                     'method' => 'POST',
  245.                     'slug' => $slug ?? null,
  246.                 ]
  247.             );
  248.             $datas['form'] = $form->createView();
  249.         }
  250.         //newsletter
  251.        /* $newsLetter = new NewsLetter();
  252.         $newsletter_form = $this->createForm(NewsletterType::class, $newsLetter,
  253.             [
  254.                 'action' => $this->generateUrl('ajax_form'),
  255.                 'method' => 'POST',
  256.             ]
  257.         );
  258.         $datas['newsletter_form'] = $newsletter_form->createView();
  259.         if (!empty($page)) {
  260.             $hasNewsletter = $page[0]->getHasNewsletter();
  261.             $datas['has_newsletter'] = $hasNewsletter;
  262.         }*/
  263.         $datas['img_preload'] = $imgPreloads;
  264.         return $this->render('home/page/_generic-page.html.twig'$datas);
  265.     }
  266.     /**
  267.      * search  datas.
  268.      *
  269.      * @return array
  270.      */
  271.     protected function _page($page$id '')
  272.     {
  273.         return ['blocks' => hlp\Datas::getStructure($page$id)];
  274.     }
  275.     /**
  276.      * @param $page
  277.      */
  278.     protected function _getDataPage(string $slugstring $localeint $pageId)
  279.     {
  280.         $lang $this->langService->getCodeLanguage($locale);
  281.         $contents $this->contentRepository->getLangExist($lang$pageId);
  282.         //$page_blocks = $this->getDoctrine()->getRepository(PageBlock::class)->getbyNameByBlockType($slug, 2);
  283.         $arrayPageBlocks = [];
  284.         foreach ($contents as $content) {
  285.             $json $content->getJson();
  286.             $lg $content->getLanguage();
  287.             if($lg == (int)$lang) {
  288.                 if ($content->getPageBlock()) {
  289.                     $content->getPageBlock()->setJsonData($json);
  290.                     $arrayPageBlocks[$content->getPageBlock()->getItemOrder()] = $content->getPageBlock();
  291.                 } else {
  292.                     $content->getBlockChildren()->setJsonData($json);
  293.                     $arrayPageBlocks[$content->getBlockChildren()->getPageBlock()->getItemOrder()] = $content->getBlockChildren()->getPageBlock();
  294.                 }
  295.             }
  296.         }
  297.         ksort($arrayPageBlocks);
  298.         return $this->_getData($arrayPageBlocks);
  299.     }
  300.     protected function _getDataSite(int $locale null)
  301.     {
  302.         $page_blocks $this->getDoctrine()->getRepository(PageBlock::class)->getByPageNameBy('site'$locale);
  303.         return $this->_getData($page_blocks);
  304.     }
  305.     protected function _getDataHeader($slug)
  306.     {
  307.         $page_blocks $this->getDoctrine()->getRepository(PageBlock::class)->getbyNameByBlockType($slug1);
  308.         return $this->_getData($page_blocks);
  309.     }
  310.     protected function _getDataFooter($slug)
  311.     {
  312.         $page_blocks $this->getDoctrine()->getRepository(PageBlock::class)->getbyNameByBlockType($slug5);
  313.         return $this->_getData($page_blocks);
  314.     }
  315.     protected function _getDayliMessage()
  316.     {
  317.         return $this->getDoctrine()->getRepository(Block::class)->findByType(6);
  318.     }
  319.     /*
  320.      * 03/11/2021 update Manage Preview for draft
  321.      */
  322.     protected function _getData($page_blocks)
  323.     {
  324.         $request Request::createFromGlobals();
  325.         foreach ($page_blocks as $key => $pb) {
  326.             $jsonDatas $request->get('preview') ? $pb->getJsonDataPreview() : $pb->getJsonData();
  327.             $pb->datas json_decode($jsonDatas ?? $pb->getJsonData(), true);
  328.             if (true === $pb->getBlock()->getSubBlock()) {
  329.                 foreach ($pb->getPageBlock() as $p_b) {
  330.                     $p_b->json json_decode($p_b->getjsonData(), true);
  331.                 }
  332.             }
  333.         }
  334.         return $page_blocks;
  335.     }
  336.     /**
  337.      * @Route("/offer/send-form", name="front_ajax_valid_offer", methods={"POST"})
  338.      */
  339.     public function validOfferForm(Request $requestSaferpayService $saferpayServiceMail $mail)
  340.     {
  341.         $datas $request->request->all();
  342.         if (isset($datas['gift']) && $datas['gift'] && $datas['gift']['amount']) {
  343.             $link $saferpayService->getLink($datas['gift']['amount']);
  344.             $mail->sendOffer($datas['gift']);
  345.             return $this->json([
  346.                 'status' => 'ok',
  347.                 'message' => $link,
  348.             ], Response::HTTP_OK);
  349.         } elseif (isset($datas['dayroom'])) {
  350.             $mail->sendDayroom($datas['dayroom']);
  351.             return $this->json( [
  352.                 'slug' => 'special-offers',
  353.                 'type' => 2
  354.             ]);
  355.         }
  356.     }
  357.     /**
  358.      * @Route("/send/newsletter", name="index_home_send_newsletter")
  359.      */
  360.     public function sendNewsletter(Request $requestMail $mail)
  361.     {
  362.         dd($request->request->all());
  363.     }
  364.     public function redirectOldUrl(string $slug null)
  365.     {
  366.         $currentSlug 'home';
  367.         switch ($slug) {
  368.             case 'st_sylvestre_2021':
  369.                 $currentSlug 'saint-sylvestre';
  370.                 break;
  371.             case 'offres-sejours':
  372.                 $currentSlug 'offre-promotionnelle-en-chambre';
  373.                 break;
  374.             case 'noel-2021':
  375.                 $currentSlug 'noel';
  376.                 break;
  377.             case 'anniversaires':
  378.                 $currentSlug 'birthday';
  379.                 break;
  380.             case 'appartements_villa':
  381.                 $currentSlug 'la-villa';
  382.                 break;
  383.             case 'bar-lounge':
  384.                 $currentSlug 'lounge-bar';
  385.                 break;
  386.             case 'beaute_spa_fr':
  387.                 $currentSlug 'wellness-area';
  388.                 break;
  389.             case 'biketours-2':
  390.                 $currentSlug 'bed-bike';
  391.                 break;
  392.             case 'bons-cadeaux':
  393.                 $currentSlug 'gift-vouchers';
  394.                 break;
  395.             case 'brochures':
  396.                 $currentSlug 'brochures';
  397.                 break;
  398.             case 'carte_restaurant':
  399.                 $currentSlug 'la-veranda-restaurant';
  400.                 break;
  401.             case 'chambre-comfort':
  402.                 $currentSlug 'the-comfort-room';
  403.                 break;
  404.             case 'chambres':
  405.                 $currentSlug 'rooms';
  406.                 break;
  407.             case 'cocktail-happy-hours':
  408.                 $currentSlug 'lounge-bar';
  409.                 break;
  410.             case 'conferences':
  411.                 $currentSlug 'conferences';
  412.                 break;
  413.             case 'contactez-nous':
  414.                 $currentSlug 'contact';
  415.                 break;
  416.             case 'detente-loisirs-fr':
  417.                 $currentSlug 'spa-and-leisure';
  418.                 break;
  419.             case 'evenements':
  420.                 $currentSlug 'events';
  421.                 break;
  422.             case 'fitness_fr':
  423.                 $currentSlug 'leisure-and-sports';
  424.                 break;
  425.             case 'grandes-salles':
  426.                 $currentSlug 'big-room';
  427.                 break;
  428.             case 'hotel_fr':
  429.                 $currentSlug 'about-us';
  430.                 break;
  431.             case 'jeu-de-quilles':
  432.                 $currentSlug 'bowling-room';
  433.                 break;
  434.             case 'les-salles':
  435.                 $currentSlug 'wedding';
  436.                 break;
  437.             case 'location-de-salles':
  438.                 $currentSlug 'our-reception-rooms';
  439.                 break;
  440.             case 'mariages':
  441.                 $currentSlug 'wedding';
  442.                 break;
  443.             case 'package-decouverte':
  444.                 $currentSlug 'package-decouverte';
  445.                 break;
  446.             case 'package-romantique':
  447.                 $currentSlug 'package-romantique';
  448.                 break;
  449.             case 'package-sportif':
  450.                 $currentSlug 'package-sportif';
  451.                 break;
  452.             case 'package_gastronomique':
  453.                 $currentSlug 'package-gastronomique';
  454.                 break;
  455.             case 'package_wellness':
  456.                 $currentSlug 'wellness-area';
  457.                 break;
  458.             case 'petites-salles':
  459.                 $currentSlug 'small-rooms';
  460.                 break;
  461.             case 'quilles':
  462.                 $currentSlug 'bowling-room';
  463.                 break;
  464.             case 'pour-vous-faire-une-idee':
  465.                 $currentSlug 'wedding';
  466.                 break;
  467.             case 'rallye':
  468.                 $currentSlug 'rallye';
  469.                 break;
  470.             case 'randonnee':
  471.                 $currentSlug 'leisure-and-sports';
  472.                 break;
  473.             case 'relaxation-leisure':
  474.                 $currentSlug 'spa-and-leisure';
  475.                 break;
  476.             case 'relaxation-fitness':
  477.                 $currentSlug 'wellness-area';
  478.                 break;
  479.             case 'restaurant-la-veranda':
  480.                 $currentSlug 'la-veranda-restaurant';
  481.                 break;
  482.             case 'restaurant-la-veranda-2':
  483.                 $currentSlug 'la-veranda-restaurant';
  484.                 break;
  485.             case 'restaurant_bar':
  486.                 $currentSlug 'restaurant-and-bar';
  487.                 break;
  488.             case 'salles-de-taille-moyenne':
  489.                 $currentSlug 'medium-rooms';
  490.                 break;
  491.             case 'st-valentin':
  492.                 $currentSlug 'st-valentin';
  493.                 break;
  494.             case 'appartements':
  495.                 $currentSlug 'apartements';
  496.                 break;
  497.             case 'tres-grande-salle':
  498.                 $currentSlug 'big-room';
  499.                 break;
  500.             case 'very-large-room':
  501.                 $currentSlug 'events';
  502.                 break;
  503.             case 'environnement':
  504.                 $currentSlug 'environnement';
  505.                 break;
  506.             case 'suggestions-du-chef':
  507.                 $currentSlug 'suggestions-du-mois';
  508.                 break;
  509.             case 'guide-client':
  510.                 $currentSlug 'guide-client';
  511.                 break;
  512. //yaz adds
  513.             case 'nuit-romantique-parc-hotel-alvisse':
  514.                 $currentSlug 'package-romantique';
  515.                 break;
  516.             case 'offre-promotionnelle-en-chambre':
  517.                 $currentSlug 'special-offers';
  518.                 break;
  519.             case 'menu-de-mariage':
  520.                 $currentSlug 'wedding';
  521.                 break;
  522.             case 'gdpr_fr':
  523.                 $currentSlug 'gdpr';
  524.                 break;
  525.             case 'menu-du-dimanche':
  526.                 return $this->redirect('/uploads/TV-Channels-61d31b37718dc.pdf');
  527.                 break;
  528.             case 'TV-Channels.pdf':
  529.                 return $this->redirect('/uploads/TV-Channels-61d31b37718dc.pdf');
  530.                 break;
  531.             case 'carte_menu_veranda_current.pdf':
  532.                 return $this->redirect('/uploads/carte-menu-veranda-current-2-61bb781fea955.pdf');
  533.                 break;
  534.             case 'charte-de-qualite-environnementale':
  535.                 return $this->redirect('/uploads/Charte-Ecolo-2021-pour-site-61951bde89894.pdf');
  536.                 break;
  537.         }
  538.         return $this->redirectToRoute('app_page', ['slug' => $currentSlug]);
  539.     }
  540.     protected function imgPreload(){
  541.         $path =  __DIR__ .'/../../../public/build/images';
  542.         $files scandir($path);
  543.         array_shift($files);
  544.         array_shift($files);
  545.         $array= array();
  546.         foreach( $files as $file){
  547.           if((int)substr($file,0,1) == || (int)substr($file,0,1) == 7){
  548.               $array[] = $file;
  549.           }
  550.        }
  551.        return $array;
  552.     }
  553. }