src/Controller/Front/FrontController.php line 72

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use Exception;
  4. use Swift_Mailer;
  5. use Stripe\Stripe;
  6. use Stripe\Checkout\Session;
  7. use App\Repository\ProductRepository;
  8. use App\Repository\ShowcaseRepository;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\Routing\Exception\RouteNotFoundException;
  16. /**
  17.  * Class FrontController
  18.  * @package App\Controller\Front
  19.  */
  20. class FrontController extends AbstractController
  21. {
  22.     /**
  23.      * @Route({
  24.      *             "fr": "/dev/send-email/",
  25.      *             "en": "/dev/send-email/"
  26.      *         }, 
  27.      *         name="dev-send-email",
  28.      *         options={ "expose"=true }, 
  29.      *         condition="request.getHost() matches '/(localhost|127\\.0\\.0\\.1|dev\\.ni\\-koi\\.be)/i'"
  30.      *     )
  31.      * @return Response
  32.      */
  33.     public function sendEmail(Request $requestSwift_Mailer $mailer): Response
  34.     {
  35.         // dd($mailer);
  36.         $email $request->get("email");
  37.         if ($email) {
  38.             $mail = (new \Swift_Message("Email for you $email"))
  39.                 ->setFrom(["info@ni-koi.be" => "info@ni-koi.be"])
  40.                 ->setTo($email// user from as site main contact
  41.                 ->setBody(
  42.                     "<h1>Hello you</h1>",
  43.                     'text/html'
  44.                 );
  45.             try {
  46.                 $res "Response: " $mailer->send($mail) . "<br>Email send to $email";
  47.             } catch (\Exception $e) {
  48.                 $res "Error: " $e->getMessage();
  49.             }
  50.             return new Response($res);
  51.         }
  52.         return new Response("No email send");
  53.     }
  54.     /**
  55.      * @Route({
  56.      *     "fr": "/",
  57.      *     "en": "/"
  58.      * }, name="front_index", options={ "expose"=true })
  59.      * @Route({
  60.      *     "fr": "/accueil",
  61.      *     "en": "/home"
  62.      * }, name="front_home", options={ "expose"=true })
  63.      * @return Response
  64.      */
  65.     public function index(ProductRepository $productRepositoryShowcaseRepository $showcaseRepository)
  66.     {
  67.         $productsHighlight $productRepository->findBestSeller();
  68.         $productsOpportunities $productRepository->findPromoted();
  69.         $blogLastEntries $showcaseRepository->findBy(['isVisible' => true], ['createdAt' => 'desc'], 3);
  70.         return $this->render('front/pages/index.html.twig', [
  71.             '_params' => ['title' => ''],
  72.             'productsHighlight' => $productsHighlight,
  73.             'productsOpportunities' => $productsOpportunities,
  74.             'blogLastEntries' => $blogLastEntries,
  75.         ]);
  76.     }
  77.     /**
  78.      * @Route({
  79.      *     "fr": "/carpes-kois",
  80.      *     "en": "/carpes-kois"
  81.      * }, name="carpes-kois", options={ "expose"=true })
  82.      * @return Response
  83.      */
  84.     public function carpesKois(Request $request)
  85.     {
  86.         $meta_params = [
  87.             'title' => 'Nos carpes Koï',
  88.             'description' => 'Présentation des 13 principales variétés de Koï.',
  89.             'image' => $request->getSchemeAndHttpHost() . $this->getParameter('meta_default_image_path'),
  90.             'url' => $this->generateUrl('carpes-kois', [], UrlGeneratorInterface::ABSOLUTE_URL),
  91.         ];
  92.         return $this->render('front/pages/carpes-kois.html.twig', [
  93.             '_params' => $meta_params,
  94.         ]);
  95.     }
  96.     /**
  97.      * @Route({
  98.      *     "fr": "/services",
  99.      *     "en": "/services"
  100.      * }, name="services", options={ "expose"=true })
  101.      * @return Response
  102.      */
  103.     public function services(Request $request)
  104.     {
  105.         $meta_params = [
  106.             'title' => 'Nos services',
  107.             'description' => 'Entretien et création de bassin, soins et frottis à domicile, matériel d\'occasion',
  108.             'image' => $request->getSchemeAndHttpHost() . $this->getParameter('meta_default_image_path'),
  109.             'url' => $this->generateUrl('services', [], UrlGeneratorInterface::ABSOLUTE_URL),
  110.         ];
  111.         return $this->render('front/pages/services.html.twig', [
  112.             '_params' => $meta_params,
  113.         ]);
  114.     }
  115.     /**
  116.      * @Route({
  117.      *     "fr": "/blogs",
  118.      *     "en": "/blogs"
  119.      * }, name="blogs", options={ "expose"=true })
  120.      * @return Response
  121.      */
  122.     public function blogs(Request $requestShowcaseRepository $showcaseRepository)
  123.     {
  124.         $meta_params = [
  125.             'title' => 'Blog',
  126.             'description' => 'Ni-Koï.be est spécialisé dans la réalisation de bassins pour accueillir vos poissons.',
  127.             'image' => $request->getSchemeAndHttpHost() . $this->getParameter('meta_default_image_path'),
  128.             'url' => $this->generateUrl('blogs', [], UrlGeneratorInterface::ABSOLUTE_URL),
  129.         ];
  130.         return $this->render('front/pages/blogs.html.twig', [
  131.             '_params' => $meta_params,
  132.             'nbBlogs' => $showcaseRepository->countTotal(),
  133.         ]);
  134.     }
  135.     /**
  136.      * @Route({
  137.      *     "fr": "/blog-ajax",
  138.      *     "en": "/blog-ajax"
  139.      * }, name="blog_ajax", options={ "expose"=true })
  140.      * @return Response
  141.      */
  142.     public function blog_ajax(Request $requestShowcaseRepository $showcaseRepository)
  143.     {
  144.         $nbItems $request->get('nbItems') ?? 8;
  145.         $cursor $request->get('cursor') ?? 0;
  146.         $showcaseViews = [];
  147.         $showcases $showcaseRepository->showcasesPaginated($nbItems$cursor);
  148.         foreach ($showcases as $showcase) {
  149.             $showcaseViews[] = $this->renderView('front/includes/blogs/blog-cadre.html.twig', [
  150.                 'blog' => $showcase,
  151.             ]);
  152.         }
  153.         return $this->json([
  154.             'nbItems' => $showcaseRepository->countTotal(),
  155.             'items' => $showcaseViews
  156.         ]);
  157.     }
  158.     /**
  159.      * @Route({
  160.      *     "fr": "/blog/{slug}",
  161.      *     "en": "/blog/{slug}"
  162.      * }, name="blog", options={ "expose"=true })
  163.      * @return Response
  164.      */
  165.     public function blog(string $slugShowcaseRepository $showcaseRepositoryRequest $request)
  166.     {
  167.         $showcase $showcaseRepository->findOneBy(['slug' => $slug]);
  168.         if (!$showcase) {
  169.             throw new RouteNotFoundException();
  170.             // return $this->redirectToRoute('404');
  171.         }
  172.         $meta_params = [
  173.             'title' => $showcase->getTitle(),
  174.             'description' => 'Découvrez une actualité Ni-Koï.be, spécialiste dans la création de bassins.',
  175.             'image' => $request->getSchemeAndHttpHost() . ($showcase->getImage() ? $showcase->getImage() : $this->getParameter('logo_path')),
  176.             'url' => $this->generateUrl('blog', ['slug' => $slug], UrlGeneratorInterface::ABSOLUTE_URL),
  177.         ];
  178.         return $this->render('front/pages/blog.html.twig', [
  179.             '_params' => $meta_params,
  180.             'blog' => $showcase,
  181.         ]);
  182.     }
  183.     /**
  184.      * @Route({
  185.      *     "fr": "/contact",
  186.      *     "en": "/contact"
  187.      * }, name="contact", options={ "expose"=true })
  188.      * @return Response
  189.      */
  190.     public function contact(Request $requestSwift_Mailer $mailer)
  191.     {
  192.         $meta_params = [
  193.             'title' => 'Contactez-nous',
  194.             'description' => 'Vous cherchez un spécialiste capable de vous conseiller et de vous fournir les outils adéquats pour accueillir des carpes Koï ?',
  195.             'image' => $request->getSchemeAndHttpHost() . $this->getParameter('meta_default_image_path'),
  196.             'url' => $this->generateUrl('contact', [], UrlGeneratorInterface::ABSOLUTE_URL),
  197.         ];
  198.         $error "";
  199.         $success false;
  200.         if ($request->isMethod('POST')) {
  201.             $fullname $request->get('fullname');
  202.             $email $request->get('email');
  203.             $phone $request->get('phone');
  204.             $message $request->get('message');
  205.             // RECAPTCHA CHECK
  206.             $gResponse = isset($_POST['grecaptcha']) ? $_POST['grecaptcha'] : '';
  207.             $secret $this->getParameter('google_recaptcha_secret');
  208.             $verifyResponse file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' $secret '&response=' $gResponse);
  209.             $responseData json_decode($verifyResponse);
  210.             if (empty($fullname)) {
  211.                 $error "Veuillez renseigner un nom complet";
  212.             } else if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
  213.                 $error "Votre adresse email est incorrecte";
  214.             } else if (empty($message)) {
  215.                 $error "Votre message est vide !";
  216.             } else if (!$responseData->success || $responseData->score <= 0.5) {
  217.                 $error "Un problème est survenu lors de la sécurisation du formulaire";
  218.             } else {
  219.                 $mailTitle '[' strtoupper($this->getParameter('mail_header_title')) . '] ' "Contact de " $fullname;
  220.                 $mail = (new \Swift_Message($mailTitle))
  221.                     ->setFrom([$email => $email])
  222.                     ->setReplyTo($email)
  223.                     ->setTo($this->getParameter('mailer_user')) // user from as site main contact
  224.                     ->setBcc([$this->getParameter('mailer_bcc'), 'info@ni-koi.be'])
  225.                     ->setCc($email)
  226.                     ->setBody(
  227.                         $this->renderView(
  228.                             'admin/emails/contact.html.twig',
  229.                             [
  230.                                 'title' => $mailTitle,
  231.                                 'fullname' => $fullname,
  232.                                 'email' => $email,
  233.                                 'phone' => $phone,
  234.                                 'message' => $message,
  235.                             ]
  236.                         ),
  237.                         'text/html'
  238.                     );
  239.                 $mailer->send($mail);
  240.                 $success true;
  241.             }
  242.         }
  243.         return $this->render('front/pages/contact.html.twig', [
  244.             '_params' => $meta_params,
  245.             'google_recaptcha_site_key' => $this->getParameter('google_recaptcha_site_key'),
  246.             'error' => $error,
  247.             'success' => $success,
  248.         ]);
  249.     }
  250. }