<?php
namespace App\Controller;
use App\Entity\AdapterContent;
use App\Entity\Category;
use App\Entity\Company;
use App\Entity\GaeaUser;
use App\Entity\GetUser;
use App\Entity\Langue;
use App\Entity\Product;
use App\Repository\CompanyRepository;
use JMS\Serializer\SerializerBuilder;
use JMS\Serializer\SerializerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle;
use Symfony\Bundle\FrameworkBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\User;
use App\Form\UserType;
use Cocur\Slugify\Slugify;
use Symfony\Component\HttpFoundation\JsonResponse;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Doctrine\Common\Collections\ArrayCollection ;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use App\Entity\NewsLetterUser;
use App\Entity\WebContent;
use App\Form\NewsletterType;
use App\Repository\CategoryRepository;
use App\Repository\NewsLetterUserRepository;
use App\Service\TraduireContenu;
use Doctrine\ORM\EntityManagerInterface as EntityManager;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Contracts\Translation\TranslatorInterface;
class DefaultController extends AbstractController
{
private $client;
private $traduireContenu;
private $categoryRepository;
public function __construct(HttpClientInterface $client,TraduireContenu $traduireContenu, ManagerRegistry $manager, CategoryRepository $categoryRepository)
{
$this->manager=$manager;
$this->client = $client;
$this->traduireContenu=$traduireContenu;
$this->categoryRepository=$categoryRepository;
}
/**
* @Route("/{_locale<en|fr|de|it|es>}/", name="homepage")
*/
public function indexAction(Request $request)
{
$session=$request->getSession();
$langue=$session->get("_locale");
return $this->redirectToRoute('homepageAll', ['_locale'=>$langue] );
/*return $this->render('default/home_entreprise.html.twig', [
'role'=>$role,
'categories' => $this->getAllCategories($langue)
]);*/
}
/**
* @Route("/{_locale<en|fr|de|it|es>}/COMPANY", name="homepageAll")
*/
public function indexCompany(Request $request)
{
$session=$request->getSession();
$langue=$session->get("_locale");
return $this->render('default/home_entreprise.html.twig', [
'categories' => $this->getAllCategories($langue)
]);
}
public function getAllCategories($langue){
$categories = $this->categoryRepository->findBy([
"unicity"=>1
]);
$tabtraduit = [];
foreach($categories as $category){
$trad = $category;
if($langue !="fr"){
$trad = $this->traduireContenu->retourTrad($category,$langue);
}
array_push($tabtraduit,$trad);
}
return $tabtraduit;
}
/**
* @Route("/getAllCategoriees", name="getCategoriesall",methods={"GET"})
*/
public function getAllCatego(Request $request): Response
{
error_reporting(E_ERROR | E_PARSE);
$encoders = [new XmlEncoder(), new JsonEncoder()];
$normalizers = [new ObjectNormalizer()];
$serializer = new Serializer($normalizers, $encoders);
$session=$request->getSession();
$langue=$session->get("_locale");
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->headers->set('Access-Control-Allow-Origin', '*');
$categories = $this->categoryRepository->findBy([
"unicity"=>1
]);
$tabtcategories = [];
foreach($categories as $category){
$cat = $category;
if($langue !="fr"){
$cat = $this->traduireContenu->retourTrad($category,$langue);
}
$cat=$serializer->normalize($cat,null,['groups' => ['champ_categories']]);
array_push($tabtcategories,$cat);
}
$json=json_encode($tabtcategories);
$response->setContent($json);
return $response;
}
/**
* @Route("/{_locale<en|fr|de|it|es>}/", name="home_inscriptionNewsletter", methods={"POST"})
*
*/
public function inscription( Request $request, EntityManager $em, SerializerInterface $serializer)
{
$contenu = $request->getContent();
$contenuDecode = json_decode($contenu,true);
$nom = $contenuDecode['nom'];
$prenom = $contenuDecode['prenom'];
$ville = $contenuDecode['ville'];
$mail = $contenuDecode['mail'];
$code_postal = $contenuDecode['code_postal'];
$newsletter = new NewsLetterUser();
$newsletter->setNom($nom);
$newsletter->setPrenom($prenom);
$newsletter->setVille($ville);
$newsletter->setMail($mail);
$newsletter->setCodePostal($code_postal);
$em = $this->getDoctrine()->getManager();
$em->persist($newsletter);
$em->flush();
return $this->json(['status'=> 200,'message' => "Ok"]);
}
/**
* @Route("/{_locale<en|fr|de|it|es>}/mentions-legales/", name="mentions-legales")
*/
public function mentionsLegales(Request $request): Response
{
return $this->render('default/mentions_legales.html.twig');
}
/**
* @Route("/{_locale<en|fr|de|it|es>}/404/", name="404")
*/
public function page404(): Response
{
return $this->render('default/page_404.html.twig');
}
/**
* @Route("/{_locale<en|fr|de|it|es>}/404/town", name="404town")
*/
public function page404town(): Response
{
return $this->render('default/commune_404.html.twig');
}
/**
* @Route("/{_locale<en|fr|de|it|es>}/404/individu", name="404individu")
*/
public function page404individu(): Response
{
return $this->render('default/individu_404.html.twig');
}
/**
* @Route("/recuperer_langue",name="recuperation_langue",methods={"GET"})
*/
function recuperation_langue(Request $request){
$session = $request->getSession();
$locale_actuel=$session->get("_locale");
// dump($locale_actuel);
return new JsonResponse(array('langue' => $locale_actuel));
}
/**
* @Route("/{path}",priority=-1, defaults={"path": null}, requirements={"path"=".+"})
*/
function session_langue_navigateur(Request $request, $path){
//Signification des langues préférées
// "fr": Français "en":Anglais "de": Allemand "it": Italien "es":Espagnol
$langues=["fr","en","de","it","es"];
return $this->redirect($this->traduireContenu->nouveau_chemin($request, $path,$langues));
}
/**
* @Route("/{_locale<en|fr|de|it|es>}/tarifs/{role}", name="tarifsEtNouveautés")
*/
public function tarfisEtNouveautes(): Response
{
return $this->render('default/nouveautes.html.twig');
}
}