<?php
namespace App\Controller;
use App\Controller\SecurityController;
use App\Controller\FonctionsController;
use App\Controller\StatsController;
use App\Controller\CookieController;
use App\Entity\ModUser;
use App\Repository\ModUserRepository;
use App\Entity\ModPage;
use App\Repository\ModPageRepository;
use App\Entity\ModNewsletter;
use App\Repository\ModNewsletterRepository;
use App\Entity\Devis;
use App\Repository\DevisRepository;
use App\Form\ModUserType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mime\Address;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use phpDocumentor\Reflection\Project;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\RadioType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
class FrontController extends AbstractController
{
public function __construct(ModNewsletterRepository $newsletterRepo, ModPageRepository $pagesRepo, ModUserRepository $userRepo, UserPasswordHasherInterface $passwordEncoder, StatsController $stats, FonctionsController $fonc, EntityManagerInterface $em)
{
$this->newsletterRepo = $newsletterRepo;
$this->pagesRepo = $pagesRepo;
$this->userRepo = $userRepo;
$this->passwordEncoder = $passwordEncoder;
$this->stats = $stats;
$this->fonc = $fonc;
$this->em = $em;
}
/*** Fonctions formulaires *******************************************************/
// formulaire devis
public function formDevis(){
$form = $this->createFormBuilder()
->add('prenom', TextType::class, [
'label' => 'Prénom',
'required' => false,
'attr' => [
"placeholder" => "Prénom",
],
])
->add('nom', TextType::class, [
'label' => 'Nom *',
'required' => true,
'constraints' => new NotBlank(),
'attr' => [
"placeholder" => "Nom",
],
])
->add('societe', TextType::class, [
'label' => 'Société',
'required' => false,
'attr' => [
"placeholder" => "Société",
],
])
->add('tel', TextType::class, [
'label' => 'Téléphone *',
'required' => true,
'constraints' => new NotBlank(),
'attr' => [
"placeholder" => "Téléphone",
],
])
->add('mailx', EmailType::class, [
'label' => 'E-mail *',
'required' => true,
'constraints' => new NotBlank(),
'attr' => [
"placeholder" => "E-mail",
],
])
->add('texte', TextareaType::class, [
'required' => false,
'label' => 'Présentez votre projet',
'attr' => ['class' => '', 'style' => ""]
])
->getForm();
return $form;
}
// formulaire newsletter
public function formNewsletter(){
$form = $this->createFormBuilder()
->add('mailx', EmailType::class, [
'label' => 'E-mail *',
'required' => true,
'constraints' => new NotBlank(),
'attr' => [
"placeholder" => "E-mail",
],
])
->getForm();
return $form;
}
public function formTestApi(){
$form = $this->createFormBuilder()
->add('tel', TextType::class, [
'label' => 'Téléphone *',
'required' => true,
'constraints' => new NotBlank(),
'attr' => [
"placeholder" => "Téléphone",
],
])
->add('save', SubmitType::class, [
'label' => 'Enregistrer',
'attr' => [
"class" => "btn btn-block btn-primary font-weight-medium auth-form-btn",
],
])
->getForm();
return $form;
}
/*** Fonctions pages *******************************************************/
/**
* @Route("/", name="front_index")
*/
public function front_index(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
// A. statistiques et securité
$this->stats->enregistreStat("front_index");
// 3. affichage de la page
return $this->render('front/index.html.twig', [
'controller_name' => 'front_index',
]);
}
/**
* @Route("/testAPIChrono", name="front_testAPIChrono")
*/
public function front_testAPIChrono(Request $request, MailerInterface $mailer): Response
{
// A. statistiques et securité
$this->stats->enregistreStat("front_testAPIChrono");
// 2. recupération du formulaire
$form = $this->formTestApi();
$form->handleRequest($request);
// 3. affichage de la page
return $this->render('front/testApi/index.html.twig', [
'controller_name' => 'front_testAPIChrono',
'form' => $form->createView(),
]);
}
/**
* @Route("/erreur404", name="front_404")
*/
public function front_404(SecurityController $secur, MailerInterface $mailer): Response
{
// 1. affichage de la page
return $this->render('front/index.html.twig', [
'controller_name' => 'front_404',
]);
}
/*** Fonctions test *******************************************************/
/**
* @Route("/test/q1", name="front_test")
*/
public function front_test(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
// A. statistiques et securité
$this->stats->enregistreStat("front_test");
// 3. affichage de la page
return $this->render('front/test/question1.html.twig', [
'controller_name' => 'front_test',
]);
}
/**
* @Route("/test/q2", name="front_test2")
*/
public function front_test2(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
// A. statistiques et securité
$this->stats->enregistreStat("front_test2");
// 3. affichage de la page
return $this->render('front/test/question2.html.twig', [
'controller_name' => 'front_test2',
]);
}
/**
* @Route("/test/q3", name="front_test3")
*/
public function front_test3(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
// A. statistiques et securité
$this->stats->enregistreStat("front_test3");
// 3. affichage de la page
return $this->render('front/test/question3.html.twig', [
'controller_name' => 'front_test3',
]);
}
/**
* @Route("/test/q4", name="front_test4")
*/
public function front_test4(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
// A. statistiques et securité
$this->stats->enregistreStat("front_test4");
// 3. affichage de la page
return $this->render('front/test/question4.html.twig', [
'controller_name' => 'front_test4',
]);
}
/**
* @Route("/test/q5", name="front_test5")
*/
public function front_test5(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
// A. statistiques et securité
$this->stats->enregistreStat("front_test5");
// 3. affichage de la page
return $this->render('front/test/question5.html.twig', [
'controller_name' => 'front_test5',
]);
}
/**
* @Route("/test/q6", name="front_test6")
*/
public function front_test6(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
// A. statistiques et securité
$this->stats->enregistreStat("front_test6");
// 3. affichage de la page
return $this->render('front/test/question6.html.twig', [
'controller_name' => 'front_test6',
]);
}
/*** Fonctions test produits *******************************************************/
/**
* @Route("/produit/application", name="front_produit_application")
*/
public function front_produit_application(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
if (isset($_GET['test'])){
$test = $_GET['test'];
}
else {
$test = '';
}
// A. statistiques et securité
$this->stats->enregistreStat("front_produit_application");
// 3. affichage de la page
return $this->render('front/produit/application.html.twig', [
'controller_name' => 'front_produit_application',
'test' => $test,
]);
}
/**
* @Route("/produit/boutique", name="front_produit_boutique")
*/
public function front_produit_boutique(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
if (isset($_GET['test'])){
$test = $_GET['test'];
}
else {
$test = '';
}
// A. statistiques et securité
$this->stats->enregistreStat("front_produit_application");
// 3. affichage de la page
return $this->render('front/produit/boutique.html.twig', [
'controller_name' => 'front_produit_boutique',
'test' => $test,
]);
}
/**
* @Route("/produit/landingpage", name="front_produit_landingpage")
*/
public function front_produit_landingpage(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
if (isset($_GET['test'])){
$test = $_GET['test'];
}
else {
$test = '';
}
// A. statistiques et securité
$this->stats->enregistreStat("front_produit_landingpage");
// 3. affichage de la page
return $this->render('front/produit/landingpage.html.twig', [
'controller_name' => 'front_produit_landingpage',
'test' => $test,
]);
}
/**
* @Route("/produit/microsite", name="front_produit_microsite")
*/
public function front_produit_microsite(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
if (isset($_GET['test'])){
$test = $_GET['test'];
}
else {
$test = '';
}
// A. statistiques et securité
$this->stats->enregistreStat("front_produit_microsite");
// 3. affichage de la page
return $this->render('front/produit/microsite.html.twig', [
'controller_name' => 'front_produit_microsite',
'test' => $test,
]);
}
/**
* @Route("/produit/blog", name="front_produit_blog")
*/
public function front_produit_blog(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
if (isset($_GET['test'])){
$test = $_GET['test'];
}
else {
$test = '';
}
// A. statistiques et securité
$this->stats->enregistreStat("front_produit_blog");
// 3. affichage de la page
return $this->render('front/produit/blog.html.twig', [
'controller_name' => 'front_produit_blog',
'test' => $test,
]);
}
/**
* @Route("/produit/website", name="front_produit_website")
*/
public function front_produit_website(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
if (isset($_GET['test'])){
$test = $_GET['test'];
}
else {
$test = '';
}
// A. statistiques et securité
$this->stats->enregistreStat("front_pfront_produit_websiteroduit_blog");
// 3. affichage de la page
return $this->render('front/produit/website.html.twig', [
'controller_name' => 'front_produit_website',
'test' => $test,
]);
}
/**
* @Route("/produit/portfolio", name="front_produit_portfolio")
*/
public function front_produit_portfolio(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
if (isset($_GET['test'])){
$test = $_GET['test'];
}
else {
$test = '';
}
// A. statistiques et securité
$this->stats->enregistreStat("front_produit_portfolio");
// 3. affichage de la page
return $this->render('front/produit/portfolio.html.twig', [
'controller_name' => 'front_produit_portfolio',
'test' => $test,
]);
}
/**
* @Route("/demande_de_devis", name="front_devis")
*/
public function front_devis(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
if (isset($_GET['produit'])){
$produit = $_GET['produit'];
}
else {
$produit = '';
}
// A. statistiques et securité
$this->stats->enregistreStat("front_devis");
// on instancie l'objet Devis
$newDevis = new Devis();
// on place le formulaire
$formDevis = $this->formDevis($newDevis);
// 3. affichage de la page
return $this->render('front/produit/devis.html.twig', [
'controller_name' => 'front_devis',
'produit' => $produit,
'formDevis' => $formDevis->createView(),
]);
}
/**
* @Route("/demande_de_devis/traitement", name="devis_traitement")
*/
public function devis_traitement(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
// A. statistiques et securité
$this->stats->enregistreStat("devis_traitement");
// recupere datas de l'ajax
$form = "peugeot_demandeDevis024_02";
$prenom = $_POST["prenom"];
$nom = $_POST["nom"];
$societe = $_POST["societe"];
$numero = $_POST["numero"];
$emailx = $_POST["emailx"];
$texte = $_POST["texte"];
// on instancie l'objet Devis
$newDevis = new Devis();
// rempli l'objet
$newDevis->setNom($nom);
$newDevis->setPrenom($prenom);
$newDevis->setSociete($societe);
$newDevis->setTel($numero);
$newDevis->setMailx($emailx);
$newDevis->setTexte($texte);
// prise en compte de l'objet
$this->em->persist($newDevis);
// inscription dans la base
$this->em->flush();
// preparation à l envoi un email à l inscrit
$messageClient = "Bonjour, votre message est en cours de traitement. Un conseiller commercial va prendre contact avec vous dans les plus brefs délais afin d'afiner au mieux le devis demandé.";
$contextClient = [
'titreDansLeMail' => "Demande de devis Webgiciel",
];
// envoi mail client
$emailClient = (new TemplatedEmail())
->from($this->from)
->to(new Address($emailx))
->subject("Demande de devis Webgiciel")
->text($messageClient)
->htmlTemplate($this->templateMail_Client)
->context($contextClient)
;
$mailer->send($emailClient);
// preparation à l envoi un email à l admin
$messageAdmin = "Bonjour, ".$nom." vient de faire une demande de devis. ";
$contextAdmin = [
'titreDansLeMail' => "Une demande de devis vient d'arrivée",
'prenom' => $prenom,
'nom' => $nom,
'societe' => $societe,
'numero' => $numero,
'emailx' => $emailx,
'texte' => $texte,
];
// envoi mail admin
$emailAdmin = (new TemplatedEmail())
->from($this->from)
->to(new Address($this->mailStef))
->subject("Une demande de devis vient d'arrivée")
->text($messageAdmin)
->htmlTemplate($this->templateMail_Devis)
->context($contextAdmin)
;
$mailer->send($emailAdmin);
//
return $this->json([
'msg' => "ok",
]);
}
/**
* @Route("/demande_de_devis/ok", name="devis_ok")
*/
public function devis_ok(TokenStorageInterface $tokenStorage, SecurityController $secur, MailerInterface $mailer): Response
{
// A. statistiques et securité
$this->stats->enregistreStat("devis_ok");
// enregistre la visite de la page
$this->fonc->visiteCompteur($this->pathStats, "front_devis");
// 3. affichage de la page
return $this->render('front/produit/devis_ok.html.twig', [
'controller_name' => 'front_devis',
'user' => $user,
]);
}
/*** Fonctions end *******************************************************/
}