src/Controller/Home/IndexController.php line 83

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Home;
  3. use App\Entity\Block;
  4. use App\Entity\Content;
  5. use App\Entity\Newsletter;
  6. use App\Entity\Page;
  7. use App\Entity\PageBlock;
  8. use App\Form\NewsLetterType;
  9. use App\Repository\ContentRepository;
  10. use App\Repository\MenuRepository;
  11. use App\Repository\PageRepository;
  12. use App\Repository\ProductRepository;
  13. use App\Repository\GoodDealRepository;
  14. use App\Repository\MemberGiftRepository;
  15. use App\Service\LangService;
  16. use App\Service\Mail;
  17. use App\Service\Payment;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  22. use Symfony\Component\Routing\Annotation\Route;
  23. class IndexController extends AbstractController
  24. {
  25.     /** @var array */
  26.     private $classe = [
  27.         //'contact' => \App\Form\ContactType::class,
  28.     ];
  29.     /**
  30.      * page -> entity form.
  31.      *
  32.      * @var array
  33.      */
  34.     public $page_form = [
  35.         //'contact' => ['contact'],
  36.     ];
  37.     /** @var LangService */
  38.     private $langService;
  39.     /** @var ContentRepository */
  40.     private $contentRepository;
  41.     /** @var PageRepository */
  42.     private $pageRepository;
  43.     /** @var ProductRepository */
  44.     private $productRepository;
  45.     private $session;
  46.     private $payment;
  47.     public function __construct(
  48.         LangService $langService,
  49.         ContentRepository $contentRepository,
  50.         PageRepository $pageRepository,
  51.         ProductRepository $productRepository,
  52.         GoodDealRepository $goodDealRepository,
  53.         SessionInterface $session,
  54.         Payment $payment)
  55.     {
  56.         $this->langService $langService;
  57.         $this->contentRepository $contentRepository;
  58.         $this->pageRepository $pageRepository;
  59.         $this->productRepository $productRepository;
  60.         $this->goodDealRepository $goodDealRepository;
  61.         $this->session $session;
  62.         $this->payment $payment;
  63.     }
  64.     /**
  65.      * @param $slug
  66.      * @param Request $request
  67.      * @param MenuRepository $menuRepository
  68.      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  69.      *
  70.      * @Route("/{slug}", name="front_index_page", defaults={"slug": "home"})
  71.      */
  72.     public function page($slugRequest $requestMenuRepository $menuRepository)
  73.     {
  74.         if ($request->get('confirm') && $request->get('confirm') === 'cadeau') {
  75.             $datas['isModal'] = true;
  76.         }
  77.         $locale $request->getLocale();
  78.         // TODO A CHANGER LORSQUE L'ON PASSERA EN MULTILINGUE
  79.         $locale 'fr';
  80.         /** @var Page|null $page */
  81.         $page $this->getDoctrine()->getRepository(Page::class)->getPageBySlug($slug);
  82.         if ($slug === 'recherche') {
  83.             $results $this->searchResult($request);
  84.             $menu $menuRepository->findOneBy(['name' => 'main_menu']);
  85.             if (empty($menu)) {
  86.                 $datas['menus'] = [];
  87.             } else {
  88.                 $datas['menus'] = json_decode($menu->getJsonData());
  89.             }
  90.             return $this->render('home/search/result.html.twig', [
  91.                 'results' => $results['results'],
  92.                 'search' => $results['search'],
  93.                 'menus' => $datas['menus'],
  94.             ]);
  95.         }
  96.         if ($locale === 'en') {
  97.             $locale 'us';
  98.         }
  99.         if ($page && isset($page->getSlugs()[$locale]) && $page->getSlugs()[$locale] === $slug) {
  100.             $array = [];
  101.             $datas['slug'] = $slug;
  102.             $datas['page'] = $page;
  103.             $datas['locale'] = $locale;
  104.             $datas['blocks'] = $this->_getDataPage($locale$page->getId());
  105.             if (empty($datas['blocks'])) {
  106.                 $datas['blocks'] = [];
  107.                 /*
  108.                 return new Response(
  109.                     $this->render('bundles/TwigBundle/Exception/error404.html.twig'),
  110.                     404
  111.                 );
  112.                 */
  113.             }
  114.             //get Header & Footer
  115.             $datas['header'] = $this->_getDataHeader($locale);
  116.             $datas['footer'] = $this->_getDataFooter($locale);
  117.             $menu $menuRepository->findOneBy(['name' => 'main_menu']);
  118.             if (empty($menu)) {
  119.                 $datas['menus'] = [];
  120.             } else {
  121.                 $datas['menus'] = json_decode($menu->getJsonData());
  122.             }
  123.             // Metas
  124.             $datas['metas'] = [];
  125.             if ($page->getMetas() && isset($page->getMetas()[$locale])) {
  126.                 $datas['metas'] = $page->getMetas()[$locale];
  127.             }
  128.             foreach ($datas['blocks'] as $key => $dt) {
  129.                 if (isset($dt->datas) && array_key_exists('meta_title'$dt->datas)) {
  130.                     //$datas['metas'] = $dt->datas;
  131.                 } else {
  132.                     $sub = [];
  133.                     if (true == $dt->getBlock()->getSubBlock()) {
  134.                         foreach ($dt->getBlockChildrens() as $children) {
  135.                             $templateChildren $children->getBlock()->getPath();
  136.                             $children->json['template'] = $templateChildren;
  137.                             $sub[] = $children->json;
  138.                         }
  139.                         $dt->datas['sub_blocks'] = $sub;
  140.                     }
  141.                     $template $dt->getBlock()->getPath();
  142.                     $module null;
  143.                     if ($dt->getBlock()->getModule()) {
  144.                         if ($dt->getBlock()->getModule()->getIsActivated()) {
  145.                             $module $dt->getBlock()->getModule();
  146.                         } else {
  147.                             $template false;
  148.                         }
  149.                     }
  150.                     if (isset($dt->datas['lang_block']) && $dt->datas['lang_block'] === $locale) {
  151.                         $array['blocks'][] = [
  152.                             'data' => $dt->datas,
  153.                             'template' => $template,
  154.                             'module' => $module
  155.                         ];
  156.                     }
  157.                 }
  158.             }
  159.             //unset($datas['blocks']);
  160.             $datas array_merge($datas$array);
  161.         } else {
  162.             // If !$page redirect to welcome_page
  163.             $pages $this->getDoctrine()->getRepository(Page::class)->findAll();
  164.             if (!empty($pages)) {
  165.                 throw $this->createNotFoundException('Page Not exist');
  166.             }
  167.             return $this->render('home/welcome_page.html.twig', [
  168.                 'header' => 'header_default',
  169.                 'footer' => 'footer_default',
  170.                 'blocks' => []
  171.             ]);
  172.         }
  173.         if (array_key_exists($slug$this->page_form)) {
  174.             $classe $this->page_form[$slug][0];
  175.             $model 'App\\Entity\\'.ucfirst($classe);
  176.             $model = new $model();
  177.             $form $this->createForm($this->classe[$slug], $model, [
  178.                     'action' => $this->generateUrl('ajax_form'),
  179.                     'slug' => $slug ?? null,
  180.                 ]
  181.             );
  182.             $datas['form'] = $form->createView();
  183.         }
  184.         //newsletter
  185.         if ($page) {
  186.             $newsLetter = new NewsLetter();
  187.             $newsletter_form $this->createForm(NewsletterType::class, $newsLetter, [
  188.                     'action' => $this->generateUrl('ajax_form'),
  189.                 ]
  190.             );
  191.             $datas['newsletter_form'] = $newsletter_form->createView();
  192.             $datas['has_newsletter'] = $page->getHasNewsletter();
  193.         }
  194.         $datas['page'] = $page;
  195.         return $this->render('home/page/_generic-page.html.twig'$datas);
  196.     }
  197.     /**
  198.      * @param Request $request
  199.      * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
  200.      *
  201.      * Search in multiple entities
  202.      */
  203.     private function searchResult(Request $request)
  204.     {
  205.         if (!$request->get('search')) {
  206.             return $this->redirectToRoute('front_index_page', ['slug' => '/']);
  207.         }
  208.         $search $request->get('search');
  209.         $results = [];
  210.         $pagesResult $this->pageRepository->search($search);
  211.         foreach ($pagesResult as $page) {
  212.             // Retrieve one content of page for results
  213.             $descriptionPage null;
  214.             foreach ($page->getPageblocks() as $pageBlock) {
  215.                 if ($pageBlock->getJsonData()) {
  216.                     $jsonDecoded json_decode($pageBlock->getJsonData());
  217.                     if (isset($jsonDecoded->description_espace)) {
  218.                         $descriptionPage $jsonDecoded->description_espace;
  219.                         break;
  220.                     }
  221.                     if (isset($jsonDecoded->description)) {
  222.                         $descriptionPage $jsonDecoded->description;
  223.                         break;
  224.                     }
  225.                 }
  226.             }
  227.             if (is_array($descriptionPage)) {
  228.                 $descriptionPage $descriptionPage[0];
  229.             }
  230.             $results[] = [
  231.                 'title' => $page->getName(),
  232.                 'description' => $descriptionPage ?? '',
  233.                 'type' => 'Page',
  234.                 'slug' => '/'.$request->getLocale().'/'.$page->getSlugs()[$request->getLocale()]
  235.             ];
  236.         }
  237.         /*
  238.         $productsResult = $this->productRepository->search($search);
  239.         foreach ($productsResult as $product) {
  240.             $results[] = [
  241.                 'title' => $product->getName(),
  242.                 'description' => $product->getDescription(),
  243.                 'type' => 'Produit'
  244.             ];
  245.         }
  246.         */
  247.         $dealsResult $this->goodDealRepository->search($search);
  248.         foreach ($dealsResult as $deal) {
  249.             $results[] = [
  250.                 'title' => $deal->getName(),
  251.                 'description' => $deal->getDescription(),
  252.                 'type' => 'Bonne affaire',
  253.                 'slug' => '/'.$request->getLocale().'/bonne-affaire/'.$deal->getslug()
  254.             ];
  255.         }
  256.    
  257.         return [
  258.             'results' => $results,
  259.             'search' => $search
  260.         ];
  261.     }
  262.     /**
  263.      * @param string $locale
  264.      * @param int $pageId
  265.      * @return array
  266.      */
  267.     private function _getDataPage(string $localeint $pageId)
  268.     {
  269.         $lang $this->langService->getCodeLanguage($locale);
  270.      
  271.         $contents $this->contentRepository->getLangExist($lang$pageId);
  272.       
  273.         $arrayPageBlocks = [];
  274.         /** @var Content $content */
  275.         foreach ($contents as $content) {
  276.             $json $content->getJson();
  277.             if ($content->getPageBlock()) {
  278.                 $content->getPageBlock()->setJsonData($json);
  279.                 $arrayPageBlocks[$content->getPageBlock()->getItemOrder()] = $content->getPageBlock();
  280.             } else {
  281.                 $content->getBlockChildren()->setJsonData($json);
  282.                 $arrayPageBlocks[$content->getBlockChildren()->getPageBlock()->getItemOrder()] = $content->getBlockChildren()->getPageBlock();
  283.             }
  284.         }
  285.         ksort($arrayPageBlocks);
  286.         return $this->_getData($arrayPageBlocks);
  287.     }
  288.     protected function _getDataSite(int $locale)
  289.     {
  290.         $page_blocks $this->getDoctrine()->getRepository(PageBlock::class)->getByPageNameBy('site'$locale);
  291.         return $this->_getData($page_blocks);
  292.     }
  293.     protected function _getDataHeader(string $locale)
  294.     {
  295.         $page_blocks $this->getDoctrine()->getRepository(PageBlock::class)->getbyNameByBlockType('header'$locale);
  296.         return $this->_getData($page_blocks);
  297.     }
  298.     protected function _getDataFooter(string $locale)
  299.     {
  300.         $page_blocks $this->getDoctrine()->getRepository(PageBlock::class)->getbyNameByBlockType('footer'$locale);
  301.         return $this->_getData($page_blocks);
  302.     }
  303.     protected function _getDayliMessage()
  304.     {
  305.         return $this->getDoctrine()->getRepository(Block::class)->findByType(6);
  306.     }
  307.     /*
  308.      * 03/11/2021 update Manage Preview for draft
  309.      */
  310.     protected function _getData(array $page_blocks)
  311.     {
  312.         $request Request::createFromGlobals();
  313.         foreach ($page_blocks as $key => $pb) {
  314.             $jsonDatas $request->get('preview') ? $pb->getJsonDataPreview() : $pb->getJsonData();
  315.             $pb->datas json_decode($jsonDatas ?? $pb->getJsonData(), true);
  316.             if ($pb->getBlock() && true === $pb->getBlock()->getSubBlock()) {
  317.                 foreach ($pb->getBlockChildrens() as $p_b) {
  318.                     $p_b->json json_decode($p_b->getjsonData(), true);
  319.                 }
  320.             }
  321.         }
  322.         return $page_blocks;
  323.     }
  324.     /**
  325.      * @Route("/send/newsletter", name="index_home_send_newsletter")
  326.      */
  327.     public function sendNewsletter(Request $requestMail $mail)
  328.     {
  329.         dd($request->request->all());
  330.     }
  331. }