src/Controller/IndexController.php line 117

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ContactRequest;
  4. use App\Entity\ContestRequest;
  5. use App\Entity\Destination;
  6. use App\Entity\Product;
  7. use App\Entity\ProductRequest;
  8. use App\Entity\SubscribedEmail;
  9. use App\Form\ContactRequestType;
  10. use App\Form\ContestRequestType;
  11. use App\Form\ProductRequestType;
  12. use App\Form\SubscribedEmailType;
  13. use App\Services\EmailService;
  14. use App\Services\PagesService;
  15. use App\Services\ProductService;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Symfony\Contracts\Translation\TranslatorInterface;
  21. class IndexController extends AbstractController
  22. {
  23.     /**
  24.      * @Route(name="index", path="/")
  25.      * @param PagesService $pagesService
  26.      * @return Response
  27.      */
  28.     public function index(PagesService $pagesService): Response
  29.     {
  30.         return $this->render('index/index.html.twig', [
  31.             'home' => $pagesService->getHome(),
  32.             'sliders' => $pagesService->getSliders(),
  33.             'services' => $pagesService->getServiceDescriptions()
  34.         ]);
  35.     }
  36.     public function header(PagesService $pagesService): Response
  37.     {
  38.         return $this->render('structure/_header.html.twig', [
  39.             'header' => $pagesService->getHeader()
  40.         ]);
  41.     }
  42.     public function footer(PagesService $pagesService): Response
  43.     {
  44.         $contestRequest = new ContestRequest();
  45.         $form $this->createForm(ContestRequestType::class, $contestRequest);
  46.         $subscribedEmail = new SubscribedEmail();
  47.         $formEmail $this->createForm(SubscribedEmailType::class, $subscribedEmail);
  48.         return $this->render('structure/_footer.html.twig', [
  49.             'footer' => $pagesService->getFooter(),
  50.             'contest' => $pagesService->getContest(),
  51.             'formContest' => $form->createView(),
  52.             'formSubscribed' => $formEmail->createView(),
  53.             'header' => $pagesService->getHeader()
  54.         ]);
  55.     }
  56.     /**
  57.      * @Route(path="/contest/register", name="contestRegister", methods={"POST"})
  58.      * @param Request $request
  59.      * @param PagesService $pagesService
  60.      * @param TranslatorInterface $translator
  61.      * @return Response
  62.      */
  63.     public function registerContest(Request $requestPagesService $pagesServiceTranslatorInterface $translator): Response
  64.     {
  65.         $contestRequest = new ContestRequest();
  66.         $form $this->createForm(ContestRequestType::class, $contestRequest);
  67.         $form->handleRequest($request);
  68.         if ($form->isSubmitted() && $form->isValid()) {
  69.             $pagesService->registerContest($form->getData());
  70.             $session $request->getSession();
  71.             $session->set('contest_send'true);
  72.             $session->save();
  73.             $this->addFlash('success'$translator->trans('app.footer.contest.success'));
  74.         }
  75.         return $this->redirectToRoute('index');
  76.     }
  77.     /**
  78.      * @Route(path="/subscribed/register", name="registerSubscribedEmail", methods={"POST"})
  79.      * @param Request $request
  80.      * @param PagesService $pagesService
  81.      * @param TranslatorInterface $translator
  82.      * @param EmailService $emailService
  83.      * @return Response
  84.      */
  85.     public function registerSubscribedEmail(Request             $requestPagesService $pagesService,
  86.                                             TranslatorInterface $translatorEmailService $emailService): Response
  87.     {
  88.         $email = new SubscribedEmail();
  89.         $form $this->createForm(SubscribedEmailType::class, $email);
  90.         $form->handleRequest($request);
  91.         if ($form->isSubmitted() && $form->isValid()) {
  92.             if ($emailId $pagesService->registerSubscribedEmail($form->getData())) {
  93.                 $emailService->sendSubscriptionNotification($emailId);
  94.                 $this->addFlash('success'$translator->trans('app.footer.info.subscribe.success'));
  95.             } else {
  96.                 $this->addFlash('error'$translator->trans('app.footer.info.subscribe.error'));
  97.             }
  98.         }
  99.         return $this->redirectToRoute('index');
  100.     }
  101.     /**
  102.      * @Route(path={"es": "/productos", "en": "/products"}, name="products")
  103.      * @param Request $request
  104.      * @param ProductService $productService
  105.      * @param PagesService $pagesService
  106.      * @return Response
  107.      */
  108.     public function products(Request $requestProductService $productServicePagesService $pagesService): Response
  109.     {
  110.         $page $request->query->get('page'1);
  111.         return $this->render('product/index.html.twig', [
  112.             'products' => $productService->products($page),
  113.             'pageContent' => $pagesService->getProducts()
  114.         ]);
  115.     }
  116.     /**
  117.      * @Route(path={"es":"/producto/{id}/{name}", "en": "/product/{id}/{name}"},  name="product_details")
  118.      * @param Request $request
  119.      * @param Product $product
  120.      * @param ProductService $productService
  121.      * @param TranslatorInterface $translator
  122.      * @param EmailService $emailService
  123.      * @return Response
  124.      */
  125.     public function productDetails(Request             $requestProduct $productProductService $productService,
  126.                                    TranslatorInterface $translatorEmailService $emailService): Response
  127.     {
  128.         $prodRequest = new ProductRequest();
  129.         $prodRequest->setProduct($product);
  130.         $form $this->createForm(ProductRequestType::class, $prodRequest);
  131.         $form->handleRequest($request);
  132.         if ($form->isSubmitted() && $form->isValid()) {
  133.             if ($requestId $productService->registerRequest($form->getData())) {
  134.                 $emailService->sendProductNotification($requestId);
  135.                 $this->addFlash('success'$translator->trans('app.product.details.form.success'));
  136.                 $productName $product->getNameEs();
  137.                 if ($request->getLocale() == 'en') {
  138.                     $productName $product->getNameEn();
  139.                 }
  140.                 $productName strtolower($productName);
  141.                 $productName str_replace(' ''-'$productName);
  142.                 return $this->redirectToRoute('product_details', [
  143.                     'id' => $product->getId(),
  144.                     'name' => $productName
  145.                 ]);
  146.             } else {
  147.                 $this->addFlash('error'$translator->trans('app.product.details.form.error'));
  148.             }
  149.         }
  150.         return $this->render('product/details.html.twig', [
  151.             'product' => $product,
  152.             'relatedProducts' => $productService->getRelated($product),
  153.             'form' => $form->createView()
  154.         ]);
  155.     }
  156.     /**
  157.      * @Route(path={"es":"/destinos", "en":"/destinations"}, name="destinations")
  158.      * @param ProductService $productService
  159.      * @param PagesService $pagesService
  160.      * @return Response
  161.      */
  162.     public function destinations(ProductService $productServicePagesService $pagesService): Response
  163.     {
  164.         return $this->render('destination/index.html.twig', [
  165.             'destinations' => $productService->getDestinations(),
  166.             'pageContent' => $pagesService->getDestinations()
  167.         ]);
  168.     }
  169.     /**
  170.      * @Route(path={"es": "/detalles-destino/{id}/{name}", "en": "/destination-details/{id}/{name}"}, name="destinationDetails")
  171.      * @param Destination $destination
  172.      * @return Response
  173.      */
  174.     public function destinationDetails(Destination $destination): Response
  175.     {
  176.         return $this->render('destination/details.html.twig', [
  177.             'destination' => $destination
  178.         ]);
  179.     }
  180.     /**
  181.      * @Route(path={"es": "/sobre-nosotros", "en": "/about-us"}, name="aboutUs")
  182.      * @param PagesService $pagesService
  183.      * @return Response
  184.      */
  185.     public function aboutUs(PagesService $pagesService): Response
  186.     {
  187.         return $this->render('about_us/index.html.twig', [
  188.             'pageContent' => $pagesService->getAboutUs(),
  189.             'testimonials' => $pagesService->getTestimonials(),
  190.             'services' => $pagesService->getServiceDescriptions(),
  191.             'homePage' => $pagesService->getHome(),
  192.         ]);
  193.     }
  194.     /**
  195.      * @Route(path={"es": "/contacto", "en": "/contact"}, name="contactUs")
  196.      * @param Request $request
  197.      * @param PagesService $pagesService
  198.      * @param TranslatorInterface $translator
  199.      * @param EmailService $emailService
  200.      * @return Response
  201.      */
  202.     public function contactUs(Request $requestPagesService $pagesServiceTranslatorInterface $translatorEmailService $emailService): Response
  203.     {
  204.         $formRequest = new ContactRequest();
  205.         $form $this->createForm(ContactRequestType::class, $formRequest);
  206.         $form->handleRequest($request);
  207.         if ($form->isSubmitted() && $form->isValid()) {
  208.             if ($requestId $pagesService->registerContactRequest($form->getData())) {
  209.                 $emailService->sendContactNotification($requestId);
  210.                 $this->addFlash('success'$translator->trans('app.contact.success'));
  211.                 return $this->redirectToRoute('contactUs');
  212.             } else {
  213.                 $this->addFlash('error''app.contact.error');
  214.             }
  215.         }
  216.         return $this->render('contact/index.html.twig', [
  217.             'pageContent' => $pagesService->getContact(),
  218.             'headerContent' => $pagesService->getHeader(),
  219.             'form' => $form->createView()
  220.         ]);
  221.     }
  222.     /**
  223.      * @Route(path={"es":"/terminos-condiciones", "en": "/terms-conditions"}, name="terms")
  224.      * @param PagesService $pagesService
  225.      * @return Response
  226.      */
  227.     public function terms(PagesService $pagesService): Response
  228.     {
  229.         return $this->render('info/terms.html.twig', [
  230.             'pageContent' => $pagesService->getTerms()
  231.         ]);
  232.     }
  233.     /**
  234.      * @Route(path={"es": "/politica-privacidad", "en": "/privacy-policy"}, name="privacy")
  235.      * @param PagesService $pagesService
  236.      * @return Response
  237.      */
  238.     public function privacy(PagesService $pagesService): Response
  239.     {
  240.         return $this->render('info/privacy.html.twig', [
  241.             'pageContent' => $pagesService->getPrivacy()
  242.         ]);
  243.     }
  244.     /**
  245.      * @Route(path={"es": "/politica-cancelacion", "en": "/cancellation-policy"}, name="cancellations")
  246.      * @param PagesService $pagesService
  247.      * @return Response
  248.      */
  249.     public function cancellation(PagesService $pagesService): Response
  250.     {
  251.         return $this->render('info/cancellation.html.twig', [
  252.             'pageContent' => $pagesService->getCancellation()
  253.         ]);
  254.     }
  255. }