<?php
namespace App\Controller\Front;
use Exception;
use Swift_Mailer;
use Stripe\Stripe;
use Stripe\Checkout\Session;
use App\Repository\ProductRepository;
use App\Repository\ShowcaseRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Exception\RouteNotFoundException;
/**
* Class FrontController
* @package App\Controller\Front
*/
class FrontController extends AbstractController
{
/**
* @Route({
* "fr": "/dev/send-email/",
* "en": "/dev/send-email/"
* },
* name="dev-send-email",
* options={ "expose"=true },
* condition="request.getHost() matches '/(localhost|127\\.0\\.0\\.1|dev\\.ni\\-koi\\.be)/i'"
* )
* @return Response
*/
public function sendEmail(Request $request, Swift_Mailer $mailer): Response
{
// dd($mailer);
$email = $request->get("email");
if ($email) {
$mail = (new \Swift_Message("Email for you $email"))
->setFrom(["info@ni-koi.be" => "info@ni-koi.be"])
->setTo($email) // user from as site main contact
->setBody(
"<h1>Hello you</h1>",
'text/html'
);
try {
$res = "Response: " . $mailer->send($mail) . "<br>Email send to $email";
} catch (\Exception $e) {
$res = "Error: " . $e->getMessage();
}
return new Response($res);
}
return new Response("No email send");
}
/**
* @Route({
* "fr": "/",
* "en": "/"
* }, name="front_index", options={ "expose"=true })
* @Route({
* "fr": "/accueil",
* "en": "/home"
* }, name="front_home", options={ "expose"=true })
* @return Response
*/
public function index(ProductRepository $productRepository, ShowcaseRepository $showcaseRepository)
{
$productsHighlight = $productRepository->findBestSeller();
$productsOpportunities = $productRepository->findPromoted();
$blogLastEntries = $showcaseRepository->findBy(['isVisible' => true], ['createdAt' => 'desc'], 3);
return $this->render('front/pages/index.html.twig', [
'_params' => ['title' => ''],
'productsHighlight' => $productsHighlight,
'productsOpportunities' => $productsOpportunities,
'blogLastEntries' => $blogLastEntries,
]);
}
/**
* @Route({
* "fr": "/carpes-kois",
* "en": "/carpes-kois"
* }, name="carpes-kois", options={ "expose"=true })
* @return Response
*/
public function carpesKois(Request $request)
{
$meta_params = [
'title' => 'Nos carpes Koï',
'description' => 'Présentation des 13 principales variétés de Koï.',
'image' => $request->getSchemeAndHttpHost() . $this->getParameter('meta_default_image_path'),
'url' => $this->generateUrl('carpes-kois', [], UrlGeneratorInterface::ABSOLUTE_URL),
];
return $this->render('front/pages/carpes-kois.html.twig', [
'_params' => $meta_params,
]);
}
/**
* @Route({
* "fr": "/services",
* "en": "/services"
* }, name="services", options={ "expose"=true })
* @return Response
*/
public function services(Request $request)
{
$meta_params = [
'title' => 'Nos services',
'description' => 'Entretien et création de bassin, soins et frottis à domicile, matériel d\'occasion',
'image' => $request->getSchemeAndHttpHost() . $this->getParameter('meta_default_image_path'),
'url' => $this->generateUrl('services', [], UrlGeneratorInterface::ABSOLUTE_URL),
];
return $this->render('front/pages/services.html.twig', [
'_params' => $meta_params,
]);
}
/**
* @Route({
* "fr": "/blogs",
* "en": "/blogs"
* }, name="blogs", options={ "expose"=true })
* @return Response
*/
public function blogs(Request $request, ShowcaseRepository $showcaseRepository)
{
$meta_params = [
'title' => 'Blog',
'description' => 'Ni-Koï.be est spécialisé dans la réalisation de bassins pour accueillir vos poissons.',
'image' => $request->getSchemeAndHttpHost() . $this->getParameter('meta_default_image_path'),
'url' => $this->generateUrl('blogs', [], UrlGeneratorInterface::ABSOLUTE_URL),
];
return $this->render('front/pages/blogs.html.twig', [
'_params' => $meta_params,
'nbBlogs' => $showcaseRepository->countTotal(),
]);
}
/**
* @Route({
* "fr": "/blog-ajax",
* "en": "/blog-ajax"
* }, name="blog_ajax", options={ "expose"=true })
* @return Response
*/
public function blog_ajax(Request $request, ShowcaseRepository $showcaseRepository)
{
$nbItems = $request->get('nbItems') ?? 8;
$cursor = $request->get('cursor') ?? 0;
$showcaseViews = [];
$showcases = $showcaseRepository->showcasesPaginated($nbItems, $cursor);
foreach ($showcases as $showcase) {
$showcaseViews[] = $this->renderView('front/includes/blogs/blog-cadre.html.twig', [
'blog' => $showcase,
]);
}
return $this->json([
'nbItems' => $showcaseRepository->countTotal(),
'items' => $showcaseViews
]);
}
/**
* @Route({
* "fr": "/blog/{slug}",
* "en": "/blog/{slug}"
* }, name="blog", options={ "expose"=true })
* @return Response
*/
public function blog(string $slug, ShowcaseRepository $showcaseRepository, Request $request)
{
$showcase = $showcaseRepository->findOneBy(['slug' => $slug]);
if (!$showcase) {
throw new RouteNotFoundException();
// return $this->redirectToRoute('404');
}
$meta_params = [
'title' => $showcase->getTitle(),
'description' => 'Découvrez une actualité Ni-Koï.be, spécialiste dans la création de bassins.',
'image' => $request->getSchemeAndHttpHost() . ($showcase->getImage() ? $showcase->getImage() : $this->getParameter('logo_path')),
'url' => $this->generateUrl('blog', ['slug' => $slug], UrlGeneratorInterface::ABSOLUTE_URL),
];
return $this->render('front/pages/blog.html.twig', [
'_params' => $meta_params,
'blog' => $showcase,
]);
}
/**
* @Route({
* "fr": "/contact",
* "en": "/contact"
* }, name="contact", options={ "expose"=true })
* @return Response
*/
public function contact(Request $request, Swift_Mailer $mailer)
{
$meta_params = [
'title' => 'Contactez-nous',
'description' => 'Vous cherchez un spécialiste capable de vous conseiller et de vous fournir les outils adéquats pour accueillir des carpes Koï ?',
'image' => $request->getSchemeAndHttpHost() . $this->getParameter('meta_default_image_path'),
'url' => $this->generateUrl('contact', [], UrlGeneratorInterface::ABSOLUTE_URL),
];
$error = "";
$success = false;
if ($request->isMethod('POST')) {
$fullname = $request->get('fullname');
$email = $request->get('email');
$phone = $request->get('phone');
$message = $request->get('message');
// RECAPTCHA CHECK
$gResponse = isset($_POST['grecaptcha']) ? $_POST['grecaptcha'] : '';
$secret = $this->getParameter('google_recaptcha_secret');
$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . $secret . '&response=' . $gResponse);
$responseData = json_decode($verifyResponse);
if (empty($fullname)) {
$error = "Veuillez renseigner un nom complet";
} else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$error = "Votre adresse email est incorrecte";
} else if (empty($message)) {
$error = "Votre message est vide !";
} else if (!$responseData->success || $responseData->score <= 0.5) {
$error = "Un problème est survenu lors de la sécurisation du formulaire";
} else {
$mailTitle = '[' . strtoupper($this->getParameter('mail_header_title')) . '] ' . "Contact de " . $fullname;
$mail = (new \Swift_Message($mailTitle))
->setFrom([$email => $email])
->setReplyTo($email)
->setTo($this->getParameter('mailer_user')) // user from as site main contact
->setBcc([$this->getParameter('mailer_bcc'), 'info@ni-koi.be'])
->setCc($email)
->setBody(
$this->renderView(
'admin/emails/contact.html.twig',
[
'title' => $mailTitle,
'fullname' => $fullname,
'email' => $email,
'phone' => $phone,
'message' => $message,
]
),
'text/html'
);
$mailer->send($mail);
$success = true;
}
}
return $this->render('front/pages/contact.html.twig', [
'_params' => $meta_params,
'google_recaptcha_site_key' => $this->getParameter('google_recaptcha_site_key'),
'error' => $error,
'success' => $success,
]);
}
}