src/Controller/DefaultController.php line 65

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\AboutPage;
  4. use App\Entity\BigWorkPage;
  5. use App\Entity\BigWorks;
  6. use App\Entity\Configuration;
  7. use App\Entity\Contact;
  8. use App\Entity\ContactQueryType;
  9. use App\Entity\GeneralCategory;
  10. use App\Entity\HomePage;
  11. use App\Entity\HomeSlider;
  12. use App\Entity\ManualsAndCatalogs;
  13. use App\Entity\ManualsAndCatalogsPage;
  14. use App\Entity\News;
  15. use App\Entity\NewsPage;
  16. use App\Entity\Product;
  17. use App\Entity\ProductCategory;
  18. use App\Entity\ProductColor;
  19. use App\Entity\ProductFilter;
  20. use App\Entity\ProductsPage;
  21. use App\Entity\Regiones;
  22. use App\Entity\UsPage;
  23. use App\Repository\AboutPageRepository;
  24. use App\Repository\BigWorkPageRepository;
  25. use App\Repository\BigWorksRepository;
  26. use App\Repository\ComunasRepository;
  27. use App\Repository\ConfigurationRepository;
  28. use App\Repository\ContactQueryTypeRepository;
  29. use App\Repository\ContactRepository;
  30. use App\Repository\GeneralCategoryRepository;
  31. use App\Repository\HomePageRepository;
  32. use App\Repository\ManualsAndCatalogsPageRepository;
  33. use App\Repository\ManualsAndCatalogsRepository;
  34. use App\Repository\NewsPageRepository;
  35. use App\Repository\NewsRepository;
  36. use App\Repository\ProductCategoryRepository;
  37. use App\Repository\ProductRepository;
  38. use App\Repository\ProductsPageRepository;
  39. use App\Repository\RegionRepository;
  40. use App\Repository\SearchPageRepository;
  41. use App\Repository\UsPageRepository;
  42. use App\Twig\Extension\MediaExtension;
  43. use App\Utils\SeoUtils;
  44. use Doctrine\ORM\EntityManagerInterface;
  45. use Psr\Log\LoggerInterface;
  46. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  47. use Symfony\Component\HttpFoundation\Request;
  48. use Symfony\Component\HttpFoundation\Response;
  49. use Symfony\Component\Mailer\MailerInterface;
  50. use Symfony\Component\Routing\Annotation\Route;
  51. use Symfony\Component\Validator\Validator\ValidatorInterface;
  52. use Symfony\Component\Mime\Email;
  53. class DefaultController extends AbstractController
  54. {
  55.     public function __construct(private readonly SeoUtils $seoUtils)
  56.     {
  57.     }
  58.     /**
  59.      * @Route("/{reactRouting}", name="homepage", requirements={"reactRouting"=".+"}, defaults={"reactRouting": null}, priority=-10)
  60.      */
  61.     public function indexAction(): Response
  62.     {
  63.         return $this->render('default/index.html.twig');
  64.     }
  65.     /**
  66.      * @Route("/test_mail", name="test_mail")
  67.      */
  68.     public function testAction(MailerInterface $mailer): Response
  69.     {
  70.         $email = (new Email());
  71.         $email->from('chilcorrofin@digitalmarketing.cl');
  72.         $email->to('mfigueroa@digitalmarketing.cl');
  73.         $email->addTo('mario.figueroa@edu.udla.cl');
  74. //        $email->addBcc('izenteno@digitalmarketing.cl');
  75.         $email->subject('Mensaje de Contacto')
  76.             ->html($this->renderView('emails/test.html.twig', [
  77.             ]));
  78.         $result $mailer->send($email);
  79.         
  80.         return $this->json(['result' => $result]);
  81.     }
  82.     /**
  83.      * @Route("/data/homeData.json", name="data_home")
  84.      */
  85.     public function dataHomeAction(HomePageRepository $homePageMediaExtension $media): Response
  86.     {
  87.         /** @var HomePage $page */
  88.         $page $homePage->findOneBy([]);
  89.         $data[] = [
  90.             "id"                    => $page->getId(),
  91.             "aboutTxt"              => $page->getAboutUsDescription(),
  92.             "aboutImg"              => $media->media($page->getAboutUsImage()),
  93.             "linkWsp"               => $page->getWspUrl(),
  94.             "bannerWspDesk"         => $media->media($page->getWspImage()),
  95.             "bannerWspMobile"       => $media->media($page->getWspImageMobile()),
  96.             'linkCommunity'         => $page->getCommunityLink(),
  97.             'bannerCommunity'       => $media->media($page->getCommunityBanner()),
  98.             'bannerCommunityMobile' => $media->media($page->getCommunityBannerMobile()),
  99.             "bigWorksDesk"          => $media->media($page->getBigWorkImage()),
  100.             "bigWorksMobile"        => $media->media($page->getBigWorkImageMobile()),
  101.             "ceapDesk"              => $media->media($page->getCeapImage()),
  102.             "ceapMobile"            => $media->media($page->getCeapImageMobile()),
  103.             "seoTitle"              => $page->getSeo()->getTitle(),
  104.             "seoDescription"        => $page->getSeo()->getDescription(),
  105.             "seoKeyword"            => $page->getSeo()->getKeywords(),
  106.             "videoUrl"              => $page->getVideo() ? $media->getMediaUrl($page->getVideo()) : '',
  107.             "videoPoster"           => $media->media($page->getVideoImage()),
  108.         ];
  109.         return $this->json($data);
  110.     }
  111.     /**
  112.      * @Route("/data/About.json", name="data_about")
  113.      */
  114.     public function dataAboutAction(AboutPageRepository $pageRepositoryMediaExtension $media): Response
  115.     {
  116.         /** @var AboutPage $page */
  117.         $page $pageRepository->findOneBy([]);
  118.         $data[] = [
  119.             'seo'     => [
  120.                 'title'       => $page->getSeo()->getTitle(),
  121.                 'description' => $page->getSeo()->getDescription(),
  122.                 'keywords'    => $page->getSeo()->getKeywords(),
  123.             ],
  124.             'banner'  => [
  125.                 'imgDesktop' => $media->media($page->getBannerDesk()),
  126.                 'imgMobile'  => $media->media($page->getBannerMobile()),
  127.             ],
  128.             'hero'    => [
  129.                 'image' => $media->media($page->getHeroImage()),
  130.                 'text'  => $page->getHeroText(),
  131.             ],
  132.             'bloque1' => [
  133.                 'image' => $media->media($page->getBlock1Image()),
  134.                 'text'  => $page->getBlock1(),
  135.             ],
  136.             'bloque2' => [
  137.                 'image' => $media->media($page->getBlock2Image()),
  138.                 'text'  => $page->getBlock2(),
  139.             ],
  140.             'bloque3' => [
  141.                 'image' => $media->media($page->getBlock3Image()),
  142.                 'text'  => $page->getBlock3(),
  143.             ],
  144.         ];
  145.         return $this->json($data);
  146.     }
  147.     /**
  148.      * @Route("/data/homeSlide.json", name="data_home_slider")
  149.      */
  150.     public function dataHomeSliderAction(HomePageRepository $homePageMediaExtension $media): Response
  151.     {
  152.         /** @var HomePage $page */
  153.         $page $homePage->findOneBy([]);
  154.         $data = [];
  155.         /** @var HomeSlider[] $slider */
  156.         foreach ($page->getSliders() as $slider) {
  157.             if ($slider->isIsPublic()) {
  158.                 $data[] = [
  159.                     "id"           => $slider->getId(),
  160.                     "bannerDesckt" => $media->media($slider->getImage()),
  161.                     "bannerMobile" => $media->media($slider->getImageMobile()),
  162.                     "name"         => $slider->getName(),
  163.                     "url"          => $slider->getUrl(),
  164.                 ];
  165.             }
  166.         }
  167.         return $this->json($data);
  168.     }
  169.     /**
  170.      * @Route("/data/news.json", name="data_news")
  171.      */
  172.     public function dataNewsAction(NewsRepository $newsRepositoryMediaExtension $media): Response
  173.     {
  174.         $news $newsRepository->findBy(['public' => true]);
  175.         $data = [];
  176.         /** @var News[] $news */
  177.         foreach ($news as $item) {
  178.             $data[] = [
  179.                 "id"             => $item->getid(),
  180.                 "path"           => $item->getSlug(),
  181.                 "time"           => $item->getPublicDate()->format('F Y'),
  182.                 "title"          => $item->getName(),
  183.                 "description"    => $item->getDescription(),
  184.                 "news"           => $item->getBody(),
  185.                 "img"            => $media->media($item->getImage()),
  186.                 "img_cover"      => $media->media($item->getImageCover()),
  187.                 "seoTitle"       => $item->getSeo()->getTitle(),
  188.                 "seoDescription" => $item->getSeo()->getDescription(),
  189.                 "seoKeyword"     => $item->getSeo()->getKeywords()
  190.             ];
  191.         }
  192.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  193.     }
  194.     /**
  195.      * @Route("/data/category.json", name="data_category")
  196.      */
  197.     public function dataCategoryAction(ProductCategoryRepository $categoryRepositoryMediaExtension $media): Response
  198.     {
  199.         $categories $categoryRepository->findBy([], ['position' => 'ASC']);
  200.         $data       = [];
  201.         /** @var ProductCategory[] $categories */
  202.         foreach ($categories as $item) {
  203.             $data[] = [
  204.                 "id"             => $item->getId(),
  205.                 'public'         => $item->isPublic(),
  206.                 "lineId"         => $item->getGeneralCategory()->getId(),
  207.                 "name"           => $item->getName(),
  208.                 "path"           => $item->getSlug(),
  209.                 'image'          => $item->getImage() ? $media->media($item->getImage()) : '',
  210.                 "seoTitle"       => $item->getSeo()->getTitle(),
  211.                 "seoDescription" => $item->getSeo()->getDescription(),
  212.                 "seoKeyword"     => $item->getSeo()->getKeywords()
  213.             ];
  214.         }
  215.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  216.     }
  217.     /**
  218.      * @Route("/data/product.json", name="data_product")
  219.      */
  220.     public function dataProductAction(ProductRepository $productRepositoryMediaExtension $media): Response
  221.     {
  222.         $products $productRepository->findBy(['public' => true]);
  223.         foreach ($products as $product) {
  224.             $data[$product->getId()] = [
  225.                 "id"             => $product->getId(),
  226.                 "catId"          => array_values(array_map(
  227.                                                      fn(ProductCategory $item) => $item->getId(),
  228.                                                      array_filter(iterator_to_array($product->getCategories()))
  229.                                                  )),
  230.                 "name"           => $product->getName(),
  231.                 "path"           => $product->getSlug(),
  232.                 "space"          => "INTERIOR, EXTERIOR",
  233.                 "productType"    => "BARNIZ, TEXTURAS",
  234.                 "ambienceType"   => "",
  235.                 "surface"        => "",
  236.                 "description"    => $product->getDescription(),
  237.                 "use"            => $product->getUses(),
  238.                 "conditions"     => $product->getConditions(),
  239.                 "tools"          => $product->getTools(),
  240.                 "dilution"       => $product->getDilution(),
  241.                 "layers"         => $product->getLayers(),
  242.                 "dryingTime"     => $product->getDryingTime(),
  243.                 "touchDrying"    => $product->getTouchDrying(),
  244.                 "repaintDrying"  => $product->getRepaintDrying(),
  245.                 "finalDrying"    => $product->getFinalDrying(),
  246.                 "video"          => $product->getVideo() ? $media->getMediaUrl($product->getVideo()) : null,
  247.                 "videoImg"       => $media->media($product->getVideoImage()),
  248.                 "img"            => $media->media($product->getImage()),
  249.                 "imgCover"       => $media->media($product->getImageCover()),
  250.                 "dataSheet"      => $product->getDataSheet(),
  251.                 "safetySheet"    => $product->getSafetySheet(),
  252.                 "safetySheetCB"  => $product->getSafetySheetCb(),
  253.                 "transportSheet" => $product->getTransportSheet(),
  254.                 "packedColors"   => $product->getPackedColorsImage()? $media->media($product->getPackedColorsImage()) :  $product->getPackedColors(),
  255.                 "linkMP"         => $product->getLinkMp(),
  256.                 "colors"         => array_values(array_map(
  257.                                                      fn(ProductColor $item) => [
  258.                                                          'id'    => $item->getId(),
  259.                                                          'name'  => $item->getName(),
  260.                                                          'hexa'  => $item->getColorHexa(),
  261.                                                          'image' => $media->media($item->getImage())
  262.                                                      ],
  263.                                                      array_filter(iterator_to_array($product->getColors()), fn($item) => $item->isPublic())
  264.                                                  )),
  265.                 "filtros"        => array_values(array_map(
  266.                                                      fn(ProductFilter $item) => [
  267. //                                                         'id'    => $item->getId(),
  268.                                                          'superficie'  => $item->getFilter1() ? $item->getFilter1()->getName() : null,
  269.                                                          'ambiente'  => $item->getFilter2() ? $item->getFilter2()->getName() : null,
  270.                                                      ],
  271.                                                      array_filter(iterator_to_array($product->getFilters()))
  272.                                                  ))
  273.             ];
  274.         }
  275.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  276.     }
  277.     /**
  278.      * @Route("/data/newfilter.json", name="data_new_filter")
  279.      */
  280.     public function dataNewFilterAction(Request $requestProductCategoryRepository $categoryRepositoryMediaExtension $media): Response
  281.     {
  282.         $cat $request->query->get('cat');
  283.         $filters   = [];
  284.         $filters1  = [];
  285.         $filters2  = [];
  286.         $filters3  = [];
  287.         $tmp_prods = [];
  288.         if ($cat == 'h') {
  289.             $categories $categoryRepository->findBy(['general_category' => 2]);
  290.         } elseif ($cat == 'c') {
  291.             $categories $categoryRepository->findBy(['general_category' => 1]);
  292.         } else {
  293.             $categories $categoryRepository->findBy(['id' => $cat]);
  294.         }
  295.         /** @var ProductCategory[] $categories */
  296.         foreach ($categories as $category) {
  297.             foreach ($category->getProducts() as $product) {
  298.                 foreach ($product->getFilters() as $filter) {
  299.                     if (!$filter->getFilter1() || !$filter->getFilter2()) {
  300.                         continue;
  301.                     }
  302.                     $filters1[$filter->getFilter1()->getId()] = [
  303.                         'id'   => $filter->getFilter1()->getId(),
  304.                         'name' => $filter->getFilter1()->getName(),
  305.                     ];
  306.                     $filters2[$filter->getFilter1()->getId()][$filter->getFilter2()->getId()] = [
  307.                         'id'   => $filter->getFilter2()->getId(),
  308.                         'name' => $filter->getFilter2()->getName(),
  309.                     ];
  310.                     if ($filter->getFilter3()) {
  311.                         $tmp_prods[$filter->getFilter1()->getId()][$filter->getFilter2()->getId()][$filter->getFilter3()->getId()][$filter->getProduct()->getId()] = $filter->getProduct()->getId();
  312.                         $filters3[$filter->getFilter1()->getId()][$filter->getFilter2()->getId()][$filter->getFilter3()->getId()] = [
  313.                             'id'   => $filter->getFilter3()->getId(),
  314.                             'name' => $filter->getFilter3()->getName(),
  315.                         ];
  316.                     } else {
  317.                         $tmp_prods[$filter->getFilter1()->getId()][$filter->getFilter2()->getId()][$filter->getProduct()->getId()] = $filter->getProduct()->getId();
  318.                         $filters3                                                                                                  = [];
  319.                     }
  320.                 }
  321.             }
  322.         }
  323.         foreach ($filters1 as $key => $item) {
  324.             foreach ($filters2[$key] as $key2 => $item2) {
  325.                 if ($filter->getFilter3()) {
  326.                     foreach ($filters3[$key][$key2] as $key3 => $item3) {
  327.                         $fil3[$key][$key2][] = array_merge($filters3[$key][$key2][$key3], ['products' => array_values($tmp_prods[$key][$key2][$key3])]);
  328.                     }
  329.                     $fil2[$key][] = array_merge($filters2[$key][$key2], ['AmbienceType' => $fil3[$key][$key2]]);
  330.                 } else {
  331.                     $fil2[$key][] = $filters2[$key][$key2];
  332.                 }
  333.             }
  334.             $filters[] = array_merge($filters1[$key], ['productType' => $fil2[$key]]);
  335.         }
  336.         return $this->json($filters200, [], ['json_encode_options' => JSON_PRETTY_PRINT]);
  337.     }
  338.     /**
  339.      * @Route("/data/cataloge.json", name="data_cataloge")
  340.      */
  341.     public function ManualsAndCatalogsAction(Request $requestManualsAndCatalogsRepository $manualsAndCatalogsRepositoryMediaExtension $media): Response
  342.     {
  343.         /** @var ManualsAndCatalogs[] $entities */
  344.         $entities $manualsAndCatalogsRepository->findBy(['public' => true]);
  345.         $data = [];
  346.         foreach ($entities as $entity) {
  347.             $data[] = [
  348.                 "id"             => $entity->getId(),
  349.                 "name"           => $entity->getName(),
  350.                 "path"           => $entity->getSlug(),
  351.                 "img"            => $media->media($entity->getImage()),
  352.                 "description"    => $entity->getDescription(),
  353.                 "file"           => $media->media($entity->getFile()),
  354.                 "seoTitle"       => $entity->getSeo()->getTitle(),
  355.                 "seoDescription" => $entity->getSeo()->getDescription(),
  356.                 "seoKeyword"     => $entity->getSeo()->getKeywords()
  357.             ];
  358.         }
  359.         return $this->json($data200, [], ['json_encode_options' => JSON_PRETTY_PRINT]);
  360.     }
  361.     /**
  362.      * @Route("/data/bigWorks.json", name="data_big_works")
  363.      */
  364.     public function bigWorksAction(BigWorksRepository $repositoryMediaExtension $media): Response
  365.     {
  366.         $big_works $repository->findBy(['public' => true]);
  367.         $data      = [];
  368.         /** @var BigWorks[] $big_works */
  369.         foreach ($big_works as $item) {
  370.             $data[] = [
  371.                 "id"             => $item->getid(),
  372.                 "path"           => $item->getSlug(),
  373.                 "time"           => $item->getPublicDate()->format('F Y'),
  374.                 "title"          => $item->getName(),
  375.                 "description"    => $item->getDescription(),
  376.                 "news"           => $item->getBody(),
  377.                 "img"            => $media->media($item->getImage()),
  378.                 "img_cover"      => $media->media($item->getImageCover()),
  379.                 "seoTitle"       => $item->getSeo()->getTitle(),
  380.                 "seoDescription" => $item->getSeo()->getDescription(),
  381.                 "seoKeyword"     => $item->getSeo()->getKeywords()
  382.             ];
  383.         }
  384.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  385.     }
  386.     /**
  387.      * @Route("/data/bannerBigWorks.json", name="data_banner_big_works")
  388.      */
  389.     public function bannerBigWorksAction(BigWorkPageRepository $repositoryMediaExtension $media): Response
  390.     {
  391.         /** @var BigWorkPage $big_works */
  392.         $big_works $repository->findOneBy([]);
  393.         $data[]    = [
  394.             "id"             => $big_works->getId(),
  395.             "bannerDeskt"    => $media->media($big_works->getImage()),
  396.             "bannerMobile"   => $media->media($big_works->getImageMobile()),
  397.             "seoTitle"       => $big_works->getSeo()->getTitle(),
  398.             "seoDescription" => $big_works->getSeo()->getDescription(),
  399.             "seoKeyword"     => $big_works->getSeo()->getKeywords()
  400.         ];
  401.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  402.     }
  403.     /**
  404.      * @Route("/data/bannerCataloge.json", name="data_banner_cataloge")
  405.      */
  406.     public function bannerCatalogeAction(ManualsAndCatalogsPageRepository $repositoryMediaExtension $media): Response
  407.     {
  408.         /** @var ManualsAndCatalogsPage $entity */
  409.         $entity $repository->findOneBy([]);
  410.         $data[] = [
  411.             "id"             => $entity->getId(),
  412.             "bannerDeskt"    => $media->media($entity->getImage()),
  413.             "bannerMobile"   => $media->media($entity->getImageMobile()),
  414.             "seoTitle"       => $entity->getSeo()->getTitle(),
  415.             "seoDescription" => $entity->getSeo()->getDescription(),
  416.             "seoKeyword"     => $entity->getSeo()->getKeywords()
  417.         ];
  418.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  419.     }
  420.     /**
  421.      * @Route("/data/bannerNews.json", name="data_banner_news")
  422.      */
  423.     public function bannerNewsAction(NewsPageRepository $repositoryMediaExtension $media): Response
  424.     {
  425.         /** @var NewsPage $entity */
  426.         $entity $repository->findOneBy([]);
  427.         $data[] = [
  428.             "id"             => $entity->getId(),
  429.             "bannerDeskt"    => $media->media($entity->getImage()),
  430.             "bannerMobile"   => $media->media($entity->getImageMobile()),
  431.             "seoTitle"       => $entity->getSeo()->getTitle(),
  432.             "seoDescription" => $entity->getSeo()->getDescription(),
  433.             "seoKeyword"     => $entity->getSeo()->getKeywords()
  434.         ];
  435.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  436.     }
  437.     /**
  438.      * @Route("/data/bannerProduct.json", name="data_banner_product")
  439.      */
  440.     public function bannerProductAction(ProductsPageRepository $repositoryMediaExtension $media): Response
  441.     {
  442.         /** @var ProductsPage $entity */
  443.         $entity $repository->findOneBy([]);
  444.         $data[] = [
  445.             "id"             => $entity->getId(),
  446.             "bannerDeskt"    => $media->media($entity->getImage()),
  447.             "bannerMobile"   => $media->media($entity->getImageMobile()),
  448.             "seoTitle"       => $entity->getSeo()->getTitle(),
  449.             "seoDescription" => $entity->getSeo()->getDescription(),
  450.             "seoKeyword"     => $entity->getSeo()->getKeywords()
  451.         ];
  452.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  453.     }
  454.     /**
  455.      * @Route("/data/lines.json", name="data_lines")
  456.      */
  457.     public function linesAction(GeneralCategoryRepository $repositoryMediaExtension $media): Response
  458.     {
  459.         /** @var GeneralCategory $entity */
  460.         $entities $repository->findBy([], ['position' => 'ASC']);
  461.         $data     = [];
  462.         foreach ($entities as $entity) {
  463.             $data[] = [
  464.                 "id"             => $entity->getId(),
  465.                 "name"           => $entity->getName(),
  466.                 "path"           => $entity->getSlug(),
  467.                 "image"          => $media->media($entity->getImage()),
  468.                 "bannerDesk"     => $media->media($entity->getImageDesk()),
  469.                 "bannerMobile"   => $media->media($entity->getImageMobile()),
  470.                 "seoTitle"       => $entity->getSeo()->getTitle(),
  471.                 "seoDescription" => $entity->getSeo()->getDescription(),
  472.                 "seoKeyword"     => $entity->getSeo()->getKeywords(),
  473.             ];
  474.         }
  475.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  476.     }
  477.     /**
  478.      * @Route("/data/search.json", name="data_search")
  479.      */
  480.     public function searchAction(SearchPageRepository $repositoryMediaExtension $media): Response
  481.     {
  482.         /** @var ProductsPage $entity */
  483.         $entity $repository->findOneBy([]);
  484.         $data[] = [
  485.             "id"             => $entity->getId(),
  486.             "name"           => $entity->getName(),
  487.             "path"           => $entity->getSlug(),
  488.             "bannerDeskt"    => $media->media($entity->getImage()),
  489.             "bannerMobile"   => $media->media($entity->getImageMobile()),
  490.             "seoTitle"       => $entity->getSeo()->getTitle(),
  491.             "seoDescription" => $entity->getSeo()->getDescription(),
  492.             "seoKeyword"     => $entity->getSeo()->getKeywords(),
  493.         ];
  494.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  495.     }
  496.     /**
  497.      * @Route("/data/us.json", name="data_us")
  498.      */
  499.     public function usAction(UsPageRepository $repositoryMediaExtension $media): Response
  500.     {
  501.         /** @var UsPage $entity */
  502.         $entity $repository->findOneBy([]);
  503.         $data[] = [
  504.             "id"             => $entity->getId(),
  505.             "bannerDeskt"    => $media->media($entity->getImage()),
  506.             "bannerMobile"   => $media->media($entity->getImageMobile()),
  507.             "seoTitle"       => $entity->getSeo()->getTitle(),
  508.             "seoDescription" => $entity->getSeo()->getDescription(),
  509.             "seoKeyword"     => $entity->getSeo()->getKeywords(),
  510.         ];
  511.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  512.     }
  513.     /**
  514.      * @Route("/data/region.json", name="data_region")
  515.      */
  516.     public function regionAction(RegionRepository $repository): Response
  517.     {
  518.         /** @var Regiones[] $entity */
  519.         $entities $repository->findBy([]);
  520.         $data     = [];
  521.         foreach ($entities as $item) {
  522.             $comm = [];
  523.             foreach ($item->getComunas() as $comuna) {
  524.                 $comm[] = [
  525.                     'id'   => $comuna->getId(),
  526.                     'name' => $comuna->getEtiqueta(),
  527.                 ];
  528.             }
  529.             $data[] = [
  530.                 "id"     => $item->getId(),
  531.                 "name"   => $item->getEtiqueta(),
  532.                 "comuna" => $comm,
  533.             ];
  534.         }
  535.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  536.     }
  537.     /**
  538.      * @Route("/data/typeForm.json", name="data_type_form")
  539.      */
  540.     public function typeFormAction(ContactQueryTypeRepository $contactQueryTypeRepository): Response
  541.     {
  542.         /** @var ContactQueryType[] $entity */
  543.         $entities $contactQueryTypeRepository->findBy([]);
  544.         $data array_values(array_map(
  545.                                  fn($item) => [
  546.                                      'id'   => $item->getId(),
  547.                                      'name' => $item->getName(),
  548.                                  ],
  549.                                  array_filter($entities, fn($item) => $item->isPublic())
  550.                              ));
  551.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  552.     }
  553.     /**
  554.      * @Route("/data/contact", name="contact")
  555.      */
  556.     public function contactAction(ValidatorInterface $validatorRequest $requestMailerInterface $mailerComunasRepository $comunasRepositoryRegionRepository $regionRepositoryContactQueryTypeRepository $contactQueryTypeRepositoryConfigurationRepository $configurationRepositoryEntityManagerInterface $entityManagerLoggerInterface $logger)
  557.     {
  558.         $entity = new Contact();
  559.         $post   $request;
  560.         $config $configurationRepository->findOneBy([]);
  561.         $entity->setName($post->get('name'));
  562.         $query_type $contactQueryTypeRepository->findOneBy(['id' => $post->get('type')]);
  563.         $entity->setQueryType($query_type);
  564.         $entity->setEmail($post->get('email'));
  565.         $entity->setPhone($post->get('phone'));
  566.         $region $regionRepository->findOneBy(['id' => $post->get('region')]);
  567.         $entity->setRegion($region);
  568.         $commune $comunasRepository->findOneBy(['id' => $post->get('commune')]);
  569.         $entity->setCommune($commune);
  570.         $entity->setActivity($post->get('activity'));
  571.         $entity->setMessage($post->get('inquiry'));
  572.         $entity->setTerms($post->get('condition'));
  573.         $validate $validator->validate($entity);
  574.         $errors = [];
  575.         if (count($validate) > 0) {
  576.             foreach ($validate as $error) {
  577.                 $errors[$error->getPropertyPath()] = $error->getMessage();
  578.             }
  579.             $result[] = [
  580.                 'result' => 'error',
  581.                 'errors' => $errors
  582.             ];
  583.         } else {
  584.             $result[] = [
  585.                 'result' => 'success',
  586.                 'errors' => []
  587.             ];
  588.             $entityManager->persist($entity);
  589.             $entityManager->flush();
  590.             $email = (new Email());
  591.             $email->from('chilcorrofin@digitalmarketing.cl');
  592.             foreach (explode(','$config->getReceibers()) as $key => $item) {
  593.                 if ($key === 0) {
  594.                     $email->to($item);
  595.                 } else {
  596.                     $email->addTo($item);
  597.                 }
  598.             }
  599.             $email->addBcc('mfigueroa@digitalmarketing.cl');
  600.             $email->addBcc('izenteno@digitalmarketing.cl');
  601.             $email->subject('Mensaje de Contacto')
  602.                 ->html($this->renderView('emails/contact.html.twig', [
  603.                     'entity' => $entity
  604.                 ]));
  605.             
  606.             $mailer->send($email);
  607.             $logger->info('Formulario de contacto enviado', [
  608.                 'name' => $entity->getName(),
  609.                 'email' => $entity->getEmail(),
  610.                 'query_type' => $entity->getQueryType() ? $entity->getQueryType()?->getName() : null,
  611.             ]);
  612.             $this->sendMailInfoAPi($entity->getName(), $entity->getEmail(), $entity->getPhone(), $entity->getQueryType()?->getName(), $entity->getActivity(), $entity->getRegion()?->getEtiqueta(), $entity->getCommune()?->getEtiqueta(), $entity->getMessage(), 'Chilcorrofin');
  613.         }
  614.         return $this->json($result200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  615.     }
  616.     /**
  617.      * @Route("/data/footer.json", name="data_footer")
  618.      */
  619.     public function footerAction(ConfigurationRepository $configurationRepository): Response
  620.     {
  621.         /** @var Configuration $entity */
  622.         $entities $configurationRepository->findOneBy([]);
  623.         $data[] = [
  624.             "id"          => $entities->getId(),
  625.             "address"     => $entities->getAddress(),
  626.             "linkAdrres"  => $entities->getAddresslink(),
  627.             "phome"       => $entities->getPhone(),
  628.             "techContact" => $entities->getTechContact(),
  629.             "mobile"      => $entities->getMobile(),
  630.             "whatsapp"    => $entities->getWhatsapp(),
  631.         ];
  632.         return $this->json($data200, [], ['json_encode_options' => JSON_UNESCAPED_SLASHES]);
  633.     }
  634.     public function sendMailInfoAPi($name$email$phone$type$activity$region$commune$message$site)
  635.     {
  636.         $data_ex = [
  637.             'name'     => $name,
  638.             'email'    => $email,
  639.             'phone'    => $phone,
  640.             'type'     => $type,
  641.             'activity' => $activity,
  642.             'region'   => $region,
  643.             'commune'  => $commune,
  644.             'message'  => $message,
  645.             'site'     => $site
  646.         ];
  647.         $data_ex json_encode($data_ex);
  648.         $data_ex base64_encode($data_ex);
  649.         $ch curl_init();
  650.         curl_setopt($chCURLOPT_URL"https://www.codelpa.cl/api/");
  651.         curl_setopt($chCURLOPT_POST1);
  652.         curl_setopt($chCURLOPT_POSTFIELDS,
  653.                     "token=3654bc5e9ddw32f83cee5c37403e7477&data=$data_ex");
  654.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  655.         $server_output curl_exec($ch);
  656.         curl_close($ch);
  657.     }
  658. }