<?php
namespace App\Controller;
use App\Entity\{Contact, BlogArticleTranslation, BlogCategorieTranslation, HomeBloc};
use App\Form\ContactType;
use App\Security\EmailVerifier;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mime\Address;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
use Symfony\Component\Translation\LocaleSwitcher;
class FrontController extends AbstractController
{
#[Route('/', name: 'home')]
#[Route('/{_locale}', name: 'home.es', requirements: ['_locale' => 'es'] )]
#[Route('/{_locale}', name: 'home.de', requirements: ['_locale' => 'de'] )]
public function register(Request $request, EntityManagerInterface $entityManager, TranslatorInterface $translator): Response
{
$contact = new Contact();
$contactForm = $this->createForm(ContactType::class, $contact);
$session = $request->getSession();
/* affichage du popup toutes les 24h) */
if($session->has('popup')){
$infos = $session->get('popup');
$time = $infos['time'];
$new_time = clone($time);
$new_time = $new_time->modify('+24 hours');
$now = new \Datetime();
if($now > $time and $now < $new_time){
$showPopup = 0;
}else{
$showPopup = 1;
$session->set('popup', ['time' => new \DateTime()]);
}
}else{
$showPopup = 1;
$session->set('popup', ['time' => new \DateTime()]);
}
$homePage = $entityManager->getRepository(HomeBloc::class)->findOneById(1);
return $this->render('home.html.twig', [
'form' => $contactForm->createView(),
'showPopup' => $showPopup,
'homePage' => $homePage
]);
}
#[Route('{_locale}/switcher/{route}', name: 'switcher')]
public function switcher($_locale, $route, Request $request, EntityManagerInterface $em): Response
{
$params = $request->query->all();
$slug = null;
if(!empty($params) and array_key_exists('params', $params)){
if(array_key_exists('slug', $params['params'])){
$slug = $params['params']['slug'];
}
}
$route_locale = ($route.'.'.$_locale);
$last_three = substr($route, -3);
if($last_three == '.de' OR $last_three == '.es'){
$route = substr($route, 0, strlen($route) - 3);
$route_locale = ($route.'.'.$_locale);
}
if($_locale == 'fr'){
if($route == 'blog.show'){
$article = $em->getRepository(BlogArticleTranslation::class)->findOneBySlug($slug);
return $this->redirectToRoute($route, ['slug' => $article->getSlug() ]);
}else if($route == 'blog.category'){
$article = $em->getRepository(BlogCategorieTranslation::class)->findOneBySlug($slug);
return $this->redirectToRoute($route, ['slug' => $article->getSlug() ]);
}
return $this->redirectToRoute($route, $params);
}
if($route_locale == 'blog.show.es' OR $route_locale == 'blog.show.de' and !empty($slug)){
$article = $em->getRepository(BlogArticleTranslation::class)->findOneBySlug($slug);
if(!empty($article)){
return $this->redirectToRoute($route_locale, ['slug' => $article->getSlug() ]);
}
}else if($route == 'blog.category'){
$article = $em->getRepository(BlogCategorieTranslation::class)->findOneBySlug($slug);
return $this->redirectToRoute($route_locale, ['slug' => $article->getSlug() ]);
}
return $this->redirectToRoute($route_locale, $params);
}
}