<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
use App\Form\ContactType;
use App\Form\ContactFranchiseType;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mime\Address;
use Doctrine\Persistence\ManagerRegistry;
use App\Entity\Restaurant;
use App\Entity\Contact;
use App\Entity\DerniereOuverture;
use App\Entity\Base;
use App\Entity\BaseViande;
use App\Entity\BaseSauce;
use App\Entity\Boisson;
use App\Entity\EnCeMoment;
use App\Entity\Fingerfood;
use App\Entity\PageFingerFood;
use App\Entity\ContactFranchise;
use App\Entity\Insta;
use App\Entity\SliderHome;
use App\Entity\ImgNews;
use App\Entity\Promo;
/**
* @Route({
* "fr": "/",
* "be": "/be",
* "nl": "/nl",
* "it": "/it",
* "es": "/es",
* "en": "/en"
* }, name="")
*/
class FrontOtacosController extends AbstractController
{
private $doctrine;
private $locale;
public function __construct(ManagerRegistry $doctrine, RequestStack $request) {
$this->doctrine = $doctrine;
$this->em = $doctrine->getManager();
$this->locale = $request->getCurrentRequest()->getLocale();
}
/**
* @Route({
* "fr": "/",
* "be": "/",
* "nl": "/",
* "it": "/",
* "es": "/",
* "en": "/"
* }, name="home")
*/
public function home(): Response
{
$insta = $this->doctrine->getRepository(Insta::class)->findOneByLangue($this->locale);
$sliders = $this->doctrine->getRepository(SliderHome::class)->findByLangue(
['langue' => $this->locale],
['ordre' => 'ASC']
);
$imgnews = $this->doctrine->getRepository(ImgNews::class)->findOneByLangue($this->locale);
$alterLocale = ($this->locale == "be") ? "fr" : $this->locale;
$ouverture = $this->doctrine->getRepository(DerniereOuverture::class)->findOneByLangue($alterLocale);
return $this->render('front_otacos/home.html.twig', [
'insta' => $insta,
'imgnews' => $imgnews,
'ouverture' => $ouverture,
'sliders' => $sliders
]);
}
/**
* @Route({
* "fr": "/nos-restos",
* "be": "/nos-restos",
* "nl": "/onze-restaurants",
* "it": "/i-nostri-ristoranti",
* "es": "/nuestros-restaurantes",
* "en": "/our-restaurants"
* }, name="nos-restos")
*/
public function restos(): Response
{
$langues = [];
switch ($this->locale) {
case 'fr':
case 'en':
$langues = ['FR'];
break;
case 'be':
case 'nl':
$langues = ['BE', 'NL', 'LU'];
break;
case 'it':
$langues = ['IT'];
break;
case 'de':
$langues = ['DE'];
break;
case 'es':
$langues = ['ES'];
break;
default:
$langues = ['FR'];
break;
}
$restos = $this->doctrine->getRepository(Restaurant::class)->getListForMap(0, $langues);
return $this->render('front_otacos/map-index.html.twig', [
'controller_name' => 'FrontOtacosController',
'restos' => $restos
]);
}
/**
* @Route({
* "fr": "/grosse-faim/la-base",
* "be": "/grosse-faim/la-base",
* "nl": "/grote-honger/de-must",
* "it": "/per-i-piu-golosi/il-must",
* "es": "/hambre-feroz/lo-esencial",
* "en": "/for-the-starving/must-have"
* }, name="la-base")
*/
public function laBase(Request $request): Response
{
$alterLocale = $this->locale == "be" ? "fr" : $this->locale;
$base = $this->doctrine->getRepository(Base::class)->findOneByLangue($this->locale);
$encemoment = $this->doctrine->getRepository(EnCeMoment::class)->findOneByLangue($this->locale);
$basesauces = $this->doctrine->getRepository(BaseSauce::class)->findForLocale($this->locale);
$baseviandes = $this->doctrine->getRepository(BaseViande::class)->findForLocale($alterLocale);
return $this->render('front_otacos/la-base.html.twig', [
'base' => $base,
'baseviandes' => $baseviandes,
'basesauces' => $basesauces,
'encemoment' => $encemoment,
]);
}
/**
* @Route({
* "fr": "/la-famille",
* "be": "/la-famille",
* "nl": "/de-familie",
* "it": "/in-famiglia",
* "es": "/la-familia",
* "en": "/la-famille"
* }, name="la-famille")
*/
public function laFamille(): Response
{
return $this->render('front_otacos/la-famille.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/la-famille/qui-sommes-nous",
* "be": "/la-famille/qui-sommes-nous",
* "nl": "/de-familie/wie-zijn-wij",
* "it": "/in-famiglia/chi-siamo",
* "es": "/la-familia/quienes-somos",
* "en": "/la-famille/who-are-we"
* }, name="qui-sommes-nous")
*/
public function quiSommesNous(): Response
{
return $this->render('front_otacos/qui-sommes-nous.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/la-famille/devenir-franchise",
* "be": "/la-famille/devenir-franchise",
* "nl": "/de-familie/word-franchisenemer",
* "it": "/in-famiglia/diventare-affiliato",
* "es": "/la-familia/obtener-la-franquicia",
* "en": "/la-famille/become-a-franchisee"
* }, name="devenir-franchise")
*/
public function devenirFranchise(): Response
{
return $this->render('front_otacos/devenir-franchise.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/la-famille/qualite-engagement",
* "be": "/la-famille/qualite-engagement",
* "nl": "/de-familie/kwaliteit-verbintenissen",
* "it": "/in-famiglia/qualita-e-impegni",
* "es": "/la-familia/calidad-y-compromisos",
* "en": "/la-famille/quality-commitments"
* }, name="qualite-engagement")
*/
public function qualiteEngagement(): Response
{
return $this->render('front_otacos/qualite-engagement.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/otacos-et-moi",
* "be": "/otacos-et-moi",
* "nl": "/otacos-en-ik",
* "it": "/otacos-e-io",
* "es": "/otacos-y-yo",
* "en": "/otacos-and-me"
* }, name="otacos-et-moi")
*/
public function otacosEtMoi(): Response
{
return $this->render('front_otacos/otacos-et-moi.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/nous-contacter",
* "be": "/nous-contacter",
* "nl": "/contact-opnemen",
* "it": "/contatti",
* "es": "/contato",
* "en": "/contact"
* }, name="nous-contacter")
*/
public function nousContacter(Request $request, MailerInterface $mailer): Response
{
$contact = null;
$form = $this->createForm(ContactType::class, new Contact);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$contact = $form->getData();
$this->em->persist($contact);
$this->em->flush();
// Email pour les commerciaux
$message = "
<p>Bonjour,</p>
<p>Un nouveau message a été envoyé depuis le site O'Tacos le ".$contact->getDate()->format('d/m/Y')." à ".$contact->getDate()->format('h:i')."</p>
<p>Nom : <b>".$contact->getNom()."</b></p>
<p>Prénom : <b>".$contact->getPrenom()."</b></p>
<p>Email : <b>".$contact->getEmail()."</b></p>
<p>Message :</p>
<p><b>".nl2br($contact->getMessage())."</b></p>
";
$email = (new Email())
->to('infos@o-tacos.com')
->subject('Nouveau message depuis le formulaire de contact')
// ...
// simple contents defined as a string
->html($message)
->text(strip_tags(preg_replace('#<br\s*?/?>#i', "\n", $message)))
;
$mailer->send($email);
}
return $this->render('front_otacos/nous-contacter.html.twig', [
'form' => $form->createView(),
'contact' => $contact
]);
}
/**
* @Route({
* "fr": "/franchise-form",
* "be": "/franchise-form",
* "nl": "/franchise-form",
* "it": "/franchise-form",
* "es": "/franchise-form",
* "en": "/franchise-form"
* }, name="franchise-form")
*/
public function franchiseForm(Request $request, MailerInterface $mailer): Response
{
$contact = null;
$form = $this->createForm(ContactFranchiseType::class, new ContactFranchise);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$contact = $form->getData();
$this->em->persist($contact);
$this->em->flush();
// Email pour les commerciaux
$message = "
<p>Bonjour,</p>
<p>Un nouveau message a été envoyé depuis le site O'Tacos le ".$contact->getDate()->format('d/m/Y')." à ".$contact->getDate()->format('h:i')."</p>
<p>Nom : <b>".$contact->getNom()."</b></p>
<p>Prénom : <b>".$contact->getPrenom()."</b></p>
<p>Email : <b>".$contact->getEmail()."</b></p>
<p>Téléphone : <b>".$contact->getTelephone()."</b></p>
<p>Adresse : <b>".$contact->getAdresse()."</b></p>
<p>Code postal : <b>".$contact->getPostal()."</b></p>
<p>Ville : <b>".$contact->getVille()."</b></p>
<p>Situation : <b>".$contact->getSituation()."</b></p>
<p>Zone : <b>".$contact->getZone()."</b></p>
<p>Apport : <b>".$contact->getApport()."</b></p>
";
$email = (new Email())
->from(new Address('noreply@agence-achille.fr', 'Franchisé OTacos'))
->to('extranet+otacos.appreq.5638723faea1355b1e8b457f@email.franchiseoncloud.fr')
->cc('j.tisserand@agence-achille.fr')
->subject('Nouveau message depuis le formulaire Devenir Franchisé')
// ...
// simple contents defined as a string
->html($message)
->text(strip_tags(preg_replace('#<br\s*?/?>#i', "\n", $message)))
;
$mailer->send($email);
}
return $this->render('front_otacos/devenir-franchise-form.html.twig', [
'form' => $form->createView(),
'contact' => $contact
]);
}
/**
* @Route({
* "fr": "/grosse-faim",
* "be": "/grosse-faim",
* "nl": "/grote-honger",
* "it": "/per-i-piu-golosi",
* "es": "/hambre-feroz",
* "en": "/for-the-starving",
* }, name="grosse-faim")
*/
public function grosseFaim(Request $request): Response
{
$encemoment = $this->doctrine->getRepository(EnCeMoment::class)->findOneByLangue($this->locale);
return $this->render('front_otacos/grosse-faim.html.twig', [
'encemoment' => $encemoment,
]);
}
/**
* @Route({
* "fr": "/grosse-faim/osucre",
* "be": "/grosse-faim/osucre",
* "nl": "/grote-honger/osucre",
* "it": "/per-i-piu-golosi/osucre",
* "es": "/hambre-feroz/osucre",
* "en": "/for-the-starving/osucre"
* }, name="osucre")
*/
public function oSucre(): Response
{
return $this->render('front_otacos/osucre.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/grosse-faim/fingerfood",
* "be": "/grosse-faim/fingerfood",
* "nl": "/grote-honger/fingerfood",
* "it": "/per-i-piu-golosi/fingerfood",
* "es": "/hambre-feroz/fingerfood",
* "en": "/for-the-starving/fingerfood"
* }, name="fingerfood")
*/
public function fingerfood(Request $request): Response
{
$alterLocale = $this->locale == "be" ? "fr" : $this->locale;
$page = $this->doctrine->getRepository(PageFingerFood::class)->findOneByLangue($alterLocale);
$fingerfood = $this->doctrine->getRepository(Fingerfood::class)->findForLocale($alterLocale);
return $this->render('front_otacos/fingerfood.html.twig', [
'page' => $page,
'fingerfood' => $fingerfood,
]);
}
/**
* @Route({
* "fr": "/grosse-faim/omignon",
* "be": "/grosse-faim/omignon",
* "nl": "/grote-honger/omignon",
* "it": "/per-i-piu-golosi/omignon",
* "es": "/hambre-feroz/omignon",
* "en": "/for-the-starving/omignon"
* }, name="omignon")
*/
public function oMignon(): Response
{
return $this->render('front_otacos/omignon.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/grosse-faim/ofondue",
* "be": "/grosse-faim/ofondue",
* "nl": "/grote-honger/ofondue",
* "it": "/per-i-piu-golosi/ofondue",
* "es": "/hambre-feroz/ofondue",
* "en": "/for-the-starving/ofondue"
* }, name="ofondue")
*/
public function oFondue(): Response
{
return $this->render('front_otacos/ofondue.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/grosse-faim/boissons",
* "be": "/grosse-faim/boissons",
* "nl": "/grote-honger/dranken",
* "it": "/per-i-piu-golosi/bevande",
* "es": "/hambre-feroz/bebidas",
* "en": "/for-the-starving/drinks"
* }, name="boissons")
*/
public function boissons(Request $request): Response
{
$alterLocale = $this->locale == "be" ? "nl" : $this->locale;
$boissons = $this->doctrine->getRepository(Boisson::class)->findForLocale($alterLocale);
return $this->render('front_otacos/boissons.html.twig', [
'boissons' => $boissons,
]);
}
/**
* @Route({
* "fr": "/promo-du-moment",
* "be": "/promo-du-moment",
* "nl": "/huidige-aanbiedingen",
* "it": "/promo-in-corso",
* "es": "/promocion-actual",
* "en": "/promo-du-moment"
* }, name="promo")
*/
public function promo(): Response
{
$restos = $this->doctrine->getRepository(Restaurant::class)->getListForMap(1);
$promo = $this->doctrine->getRepository(Promo::class)->findOneByLangue($this->locale);
return $this->render('front_otacos/promo.html.twig', [
'controller_name' => 'FrontOtacosController',
'restos' => $restos,
'promo' => $promo,
]);
}
/**
* @Route("/derniere-ouverture", name="derniere-ouverture")
*/
public function derniereOuverture(Request $request): Response
{
$ouverture = $this->doctrine->getRepository(DerniereOuverture::class)->findOneByLangue($this->locale);
return $this->render('front_otacos/derniere-ouverture.html.twig', [
'ouverture' => $ouverture,
]);
}
/**
* @Route({
* "fr": "/en-ce-moment",
* "be": "/en-ce-moment",
* "nl": "/op-dit-moment",
* "it": "/attualmente",
* "es": "/actualmente",
* "en": "/currently"
* }, name="encemoment")
*/
public function encemoment(Request $request): Response
{
$encemoment = $this->doctrine->getRepository(EnCeMoment::class)->findOneByLangue($this->locale);
if(!$encemoment) {
return $this->redirectToRoute('home');
}
return $this->render('front_otacos/en-ce-moment.html.twig', [
'encemoment' => $encemoment,
]);
}
/**
* @Route({
* "fr": "/politique-donnees-personnelles",
* "be": "/politique-donnees-personnelles",
* "nl": "/privacybeleid",
* "it": "/informativa-sulla-protezione-dei-dati-personali",
* "es": "/polĂtica-de-proteccion-de-datos-personales",
* "en": "/privacy-policy"
* }, name="donneesperso")
*/
public function donneesperso(): Response
{
return $this->render('front_otacos/donneesperso.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/mentions-legales",
* "be": "/mentions-legales",
* "nl": "/juridische-informatie",
* "it": "/informazioni-legali",
* "es": "/informacion-legal",
* "en": "/legal-information "
* }, name="mentionslegales")
*/
public function mentionslegales(): Response
{
return $this->render('front_otacos/mentionslegales.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/cookies",
* "be": "/cookies",
* "nl": "/cookies",
* "it": "/cookies",
* "es": "/cookies",
* "en": "/cookies"
* }, name="cookies")
*/
public function cookies(): Response
{
return $this->render('front_otacos/cookies.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/privacy-statement",
* "be": "/privacy-statement",
* "nl": "/privacy-statement",
* "it": "/privacy-statement",
* "es": "/privacy-statement",
* "en": "/privacy-statement"
* }, name="privacy-statement")
*/
public function privacyStatement(Request $request): Response
{
//return $this->redirectToRoute('donneesperso', ['_locale' => $this->locale]);
if($request->query->get('remove') !== null) {
$response = new Response();
$response->headers->clearCookie('Cookie_Consent', '/', null);
$response->headers->clearCookie('Cookie_Consent_Key', '/', null);
$response->headers->clearCookie('Cookie_Category_analytics', '/', null);
return $this->render('front_otacos/cookies.html.twig', [], $response);
}
return $this->render('front_otacos/cookies.html.twig', []);
}
/**
* @Route({
* "fr": "/cgv",
* "be": "/cgv",
* "nl": "/algemene-verkoopvoorwaarden",
* "it": "/cgv",
* "es": "/cgv",
* "en": "/general-sales-terms-conditions"
* }, name="cgv")
*/
public function cgv(): Response
{
return $this->render('front_otacos/cgv.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/cgu-fid",
* "be": "/cgu-fid",
* "nl": "/cgu-fid",
* "it": "/cgu-fid",
* "es": "/cgu-fid",
* "en": "/cgu-fid"
* }, name="cgufid")
*/
public function cgufid(): Response
{
return $this->render('front_otacos/cgufid.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route({
* "fr": "/cgu-clickandcollect",
* "be": "/cgu-clickandcollect",
* "nl": "/cgu-clickandcollect",
* "it": "/cgu-clickandcollect",
* "es": "/cgu-clickandcollect",
* "en": "/cgu-clickandcollect"
* }, name="cgucc")
*/
public function cguclickandcollect(): Response
{
return $this->render('front_otacos/cguclickandcollect.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
/**
* @Route("/informations-legales", name="infos-legales")
*/
public function infoslegales(): Response
{
return $this->render('front_otacos/infos-legales.html.twig', [
'controller_name' => 'FrontOtacosController',
]);
}
}