<?php
namespace App\Controller;
use App\Form\ContactType;
use App\Entity\Stats;
use App\Form\StatsType;
use App\Repository\AdminStatsRepository;
use App\Entity\Upartistik;
use App\Repository\UpartistikRepository;
use App\Entity\MobilierCategories;
use App\Repository\MobilierCategoriesRepository;
use App\Entity\Mobilier;
use App\Repository\MobilierRepository;
use App\Entity\MobilierTechniques;
use App\Repository\MobilierTechniquesRepository;
use App\Entity\MobilierImages;
use App\Repository\MobilierImagesRepository;
use App\Entity\Contact;
use App\Repository\ContactRepository;
use App\Entity\Couv;
use App\Repository\CouvRepository;
use App\Entity\Apropos;
use App\Repository\AproposRepository;
use App\Entity\Accmobilier;
use App\Repository\AccmobilierRepository;
use App\Entity\AccEspPro;
use App\Repository\AccEspProRepository;
use App\Entity\AccContact;
use App\Repository\AccContactRepository;
use App\Entity\ProImages;
use App\Repository\ProImagesRepository;
use App\Entity\ProTexte;
use App\Repository\ProTexteRepository;
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\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mime\Address;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Webgiciel\RecaptchaBundle\Type\RecaptchaSubmitType;
use Webgiciel\RecaptchaBundle\RecaptchaBundle;
use Webgiciel\RecaptchaBundle\RecaptchaCompilerPass;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\String\Slugger\SluggerInterface;
use Doctrine\Common\Collections\ArrayCollection;
class FrontController extends AbstractController
{
//
public $mailAdmin = "admin@webgiciel.com";
public $mailExpe = "contact@up-paris.com";
public $mailContact = "contact@up-paris.com";
private $repUser;
private $passwordEncoder;
public function __construct(MobilierImagesRepository $mobImgrepo,ProTexteRepository $protexterepo, ProImagesRepository $proimagerepo, AccContactRepository $acccontactrepo, AccEspProRepository $accespaceprorepo, AccmobilierRepository $accmobilierrepo, AproposRepository $aproposrepo, CouvRepository $couvrepo, MobilierTechniquesRepository $mobTech, ContactRepository $contactRepo, MobilierRepository $mob, AdminStatsRepository $stats, EntityManagerInterface $em, UserPasswordEncoderInterface $passwordEncoder, UpartistikRepository $upartRepo, MobilierCategoriesRepository $mobCat)
{
$this->stats = $stats;
$this->em = $em;
$this->passwordEncoder = $passwordEncoder;
$this->upartRepo = $upartRepo;
$this->mobCat = $mobCat;
$this->mob = $mob;
$this->contactRepo = $contactRepo;
$this->mobTech = $mobTech;
$this->mobImgrepo = $mobImgrepo;
$this->couvrepo = $couvrepo;
$this->aproposrepo = $aproposrepo;
$this->accmobilierrepo = $accmobilierrepo;
$this->accespaceprorepo = $accespaceprorepo;
$this->acccontactrepo = $acccontactrepo;
$this->proimagerepo = $proimagerepo;
$this->protexterepo = $protexterepo;
}
/**
* @Route("/", name="front_index")
*/
public function index(Request $request, MailerInterface $mailer, SessionInterface $session): Response
{
$maintenant = new \DateTime("now");
$time = new \DateTime("2022-06-21 00:00:00");
// dump($maintenant);
// dump($time);
if ($maintenant < $time )
{
// dump("construction");
// enregistre un log
$this->moucheUser("visite", "construction_index");
// dump($this->upartRepo->find(1));
// recupère les categories
$allMobCat = $this->mobCat->findAllParOrdre();
return $this->render('front/construction.html.twig', [
'controller_name' => 'construction_index',
'upartRepo' => $this->upartRepo->find(1),
'allMobCat' => $allMobCat,
]);
}
else{
// dump("site");
// enregistre un log
$this->moucheUser("visite", "front_index");
// dump($this->upartRepo->find(1));
// recupère les categories
$allMobCat = $this->mobCat->findAllParOrdre();
// form
$form = $this->createForm(ContactType::class);
$form->handleRequest($request);
// captcha
$name = date('Y_m_d_h_i_s');
if ($form->isSubmitted() && $form->isValid())
{
if ( $form['captcha']->getData() == $session->get('captcha') )
{
// envoi un mail du contact
$email = (new TemplatedEmail())
->from($this->mailExpe)
->to($this->mailAdmin)
->subject('Envoi depuis page Contact')
->text('Envoi depuis page Contact.')
->htmlTemplate('mails/_Mail_Contact.html.twig')
->context([
'nom' => $form['nom']->getData(),
'emailx' => $form['email']->getData(),
'message' => $form['message']->getData(),
])
;
$errorM1 = 0;
try {
$mailer->send($email);
} catch (TransportExceptionInterface $e) {
// some error prevented the email sending; display an
// error message or try to resend the message
$this->addFlash('warning', 'Erreur Message !');
$errorM1 = 1;
}
if ($errorM1 == 0)
{
// dump("ok");
$this->addFlash('success', 'Message envoyé !');
}
else
{
// dump("false");
}
//return $this->redirectToRoute('paul_contact');
}
else
{
$this->addFlash('warning', 'Erreur de captcha!');
}
}
return $this->render('front/index.html.twig', [
'controller_name' => 'front_index',
'upartRepo' => $this->upartRepo->find(1),
'allMobCat' => $allMobCat,
'form' => $form->createView(),
'img' => $this->captcha($name, $session),
'name' => $name,
'couvs' => $this->couvrepo->findAll(),
'apropos' => $this->aproposrepo->find(1),
'accmobiliers' => $this->accmobilierrepo->findByOrdre(),
'accespacepros' => $this->accespaceprorepo->findByOrdre(),
'acccontact' => $this->acccontactrepo->findAll(),
]);
}
}
/**
* @Route("/site", name="construction_index")
*/
public function index2(Request $request, MailerInterface $mailer, SessionInterface $session): Response
{
// enregistre un log
$this->moucheUser("visite", "front_index");
// dump($this->upartRepo->find(1));
// recupère les categories
$allMobCat = $this->mobCat->findAllParOrdre();
// form
$form = $this->createForm(ContactType::class);
$form->handleRequest($request);
// captcha
$name = date('Y_m_d_h_i_s');
if ($form->isSubmitted() && $form->isValid())
{
if ( $form['captcha']->getData() == $session->get('captcha') )
{
// envoi un mail du contact
$email = (new TemplatedEmail())
->from($this->mailExpe)
->to($this->mailAdmin)
->subject('Envoi depuis page Contact')
->text('Envoi depuis page Contact.')
->htmlTemplate('mails/_Mail_Contact.html.twig')
->context([
'nom' => $form['nom']->getData(),
'emailx' => $form['email']->getData(),
'message' => $form['message']->getData(),
])
;
$errorM1 = 0;
try {
$mailer->send($email);
} catch (TransportExceptionInterface $e) {
// some error prevented the email sending; display an
// error message or try to resend the message
$this->addFlash('warning', 'Erreur Message !');
$errorM1 = 1;
}
if ($errorM1 == 0)
{
// dump("ok");
$this->addFlash('success', 'Message envoyé !');
}
else
{
// dump("false");
}
//return $this->redirectToRoute('paul_contact');
}
else
{
$this->addFlash('warning', 'Erreur de captcha!');
}
}
return $this->render('front/index.html.twig', [
'controller_name' => 'front_index',
'upartRepo' => $this->upartRepo->find(1),
'allMobCat' => $allMobCat,
'form' => $form->createView(),
'img' => $this->captcha($name, $session),
'name' => $name,
'couvs' => $this->couvrepo->findAll(),
'apropos' => $this->aproposrepo->find(1),
'accmobiliers' => $this->accmobilierrepo->findByOrdre(),
'accespacepros' => $this->accespaceprorepo->findByOrdre(),
'acccontact' => $this->acccontactrepo->findAll(),
]);
}
/**
* @Route("/qui_sommes_nous", name="paul_quisommesnous")
*/
public function quisommesnous(): Response
{
// enregistre un log
$this->moucheUser("visite", "paul_quisommesnous");
return $this->render('front/quisommesnous.html.twig', [
'controller_name' => 'paul_quisommesnous',
'upartRepo' => $this->upartRepo->find(1),
]);
}
/**
* @Route("/espacePro", name="paul_espacePro")
*/
public function espacePro(): Response
{
// enregistre un log
$this->moucheUser("visite", "paul_espacePro");
return $this->render('front/espacePro.html.twig', [
'controller_name' => 'paul_espacePro',
'upartRepo' => $this->upartRepo->find(1),
'accespacepros' => $this->accespaceprorepo->findByOrdre(),
'proimages' => $this->proimagerepo->findByOrdre(),
'protexte' => $this->protexterepo->find(1),
]);
}
/**
* @Route("/mobilier", name="paul_mobilier")
*/
public function mobilier(): Response
{
// enregistre un log
$this->moucheUser("visite", "paul_mobilier");
// recupère les categories
//$allMobCat = $this->mobCat->findAllParOrdre();
// recupere les mobiliers
$allMob = $this->mob->findAllParOrdre();
// dump($allMob);
return $this->render('front/mobilier.html.twig', [
'controller_name' => 'paul_mobilier',
'upartRepo' => $this->upartRepo->find(1),
/* 'allMobCat' => $allMobCat, */
'allMob' => $allMob,
]);
}
/**
* @Route("/mobilier2", name="paul_mobilier2")
*/
public function mobilier2(): Response
{
// enregistre un log
$this->moucheUser("visite", "paul_mobilier2");
// recupère les categories
$allMobCat = $this->mobCat->findAllParOrdre();
// recupere les mobiliers
$allMob = $this->mob->findAllParOrdre();
return $this->render('front/mobilier2.html.twig', [
'controller_name' => 'paul_mobilier2',
'upartRepo' => $this->upartRepo->find(1),
'allMobCat' => $allMobCat,
'allMob' => $allMob,
]);
}
/**
* @Route("/mobilier/{categorie}", name="paul_mobilier_cat")
*/
public function mobilierListe($categorie): Response
{
// enregistre un log
$this->moucheUser("visite", "paul_mobilier_cat ".$categorie);
// recupère les objets
$allMob = $this->mob->findCatParOrdre($cat[0]->getId());
// dump($allMob);
return $this->render('front/mobilierListe.html.twig', [
'controller_name' => 'paul_mobilier_cat',
'upartRepo' => $this->upartRepo->find(1),
'categorie' => $categorie,
'allMob' => $allMob,
]);
}
/**
* @Route("/mobilier/detail/{slug}", name="paul_mobilier_detail")
*/
public function paul_mobilier_detail($slug): Response
{
// recupère la categorie
// dump($categorie);
//$cat0 = $this->mobCat->findCat($categorie);
//$cat = $cat0[0]->getId();
// // dump($cat);
// dump($slug);
// recupère les objets
$allMob = $this->mob->findMobParSlug($slug);
// dump($allMob[0]);
// recupere la fiche technique
$allTech = $this->mobTech->findOrderByMob($allMob[0]->getId());
// dump($allTech);
// enregistre un log
$this->moucheUser("visite", "paul_mobilier_detail");
/*
*/
// affiche
return $this->render('front/mobilierDetail.html.twig', [
'controller_name' => 'paul_mobilier_detail',
'upartRepo' => $this->upartRepo->find(1),
//'categorie' => $categorie,
'allMob' => $allMob[0],
'allTech' => $allTech,
]);
}
/**
* @Route("/mobilierC/{categorie}/{slug}", name="paul_mobilier_cat_detail")
*/
public function mobilierDetail($categorie, $slug): Response
{
// recupère la categorie
// // dump($categorie);
//$cat0 = $this->mobCat->findCat($categorie);
//$cat = $cat0[0]->getId();
// // dump($cat);
// dump($slug);
// recupère les objets
$allMob = $this->mob->findMobParSlug($slug);
// dump($allMob);
// recupere la fiche technique
$allTech = $this->mobTech->findOrderByMob($allMob[0]->getId());
// dump($allTech);
// recupere les images
$allImgs = $this->mobImgrepo->findAllImgDuMob($allMob[0]->getId());
// dump($allImgs);
// enregistre un log
$this->moucheUser("visite", "paul_mobilier_cat_detail ".$allMob[0]->getTitre());
// affiche
return $this->render('front/mobilierDetail.html.twig', [
'controller_name' => 'paul_mobilier_cat_detail',
'upartRepo' => $this->upartRepo->find(1),
//'categorie' => $categorie,
'allMob' => $allMob[0],
'allTech' => $allTech,
'allImgs' => $allImgs,
]);
}
/**
* @Route("/up-artistic", name="paul_upArtistic")
*/
public function upArtistic(): Response
{
// enregistre un log
$this->moucheUser("visite", "paul_upArtistic");
return $this->render('front/upArtistic.html.twig', [
'controller_name' => 'paul_upArtistic',
'upartRepo' => $this->upartRepo->find(1),
]);
}
/**
* @Route("/contact", name="paul_contact")
*/
public function contact(Request $request, MailerInterface $mailer, SessionInterface $session): Response
{
// enregistre un log
$this->moucheUser("visite", "paul_contact");
$form = $this->createForm(ContactType::class);
$form->handleRequest($request);
// captcha
$name = date('Y_m_d_h_i_s');
if ($form->isSubmitted() && $form->isValid())
{
if ( $form['captcha']->getData() == $session->get('captcha') )
{
// inscrit dans la base de données
$contactLog = new Contact();
$contactLog->setIp($_SERVER['REMOTE_ADDR']);
$contactLog->setNom($form['nom']->getData());
$contactLog->setEmail($form['email']->getData());
$contactLog->setMessage($form['message']->getData());
$contactLog->setDateCrea(new \DateTime());
$this->em->persist($contactLog);
$this->em->flush();
// envoi un mail du contact
$email = (new TemplatedEmail())
->from($this->mailExpe)
->to($this->mailContact)
->subject('Envoi depuis page Contact')
->text('Envoi depuis page Contact.')
->htmlTemplate('mails/_Mail_Contact.html.twig')
->context([
'nom' => $form['nom']->getData(),
'emailx' => $form['email']->getData(),
'message' => $form['message']->getData(),
])
;
$emailTech = (new TemplatedEmail())
->from($this->mailExpe)
->to($this->mailAdmin)
->subject('Envoi depuis page Contact')
->text('Envoi depuis page Contact.')
->htmlTemplate('mails/_Mail_Contact.html.twig')
->context([
'nom' => $form['nom']->getData(),
'emailx' => $form['email']->getData(),
'message' => $form['message']->getData(),
])
;
$errorM1 = 0;
try
{
$mailer->send($email);
$mailer->send($emailTech);
}
catch (TransportExceptionInterface $e)
{
// some error prevented the email sending; display an
// error message or try to resend the message
$this->addFlash('warning', 'Erreur Message !');
$errorM1 = 1;
}
if ($errorM1 == 0)
{
// dump("ok");
$this->addFlash('success', 'Message envoyé !');
}
else
{
$this->addFlash('danger', 'Le message n\'a pas été envoyé !');
// dump("false");
}
//return $this->redirectToRoute('paul_contact');
}
else
{
$this->addFlash('warning', 'Erreur de captcha!');
}
}
return $this->render('front/contact.html.twig', [
'controller_name' => 'paul_contact',
'upartRepo' => $this->upartRepo->find(1),
'form' => $form->createView(),
'img' => $this->captcha($name, $session),
'name' => $name,
]);
}
/**
* @Route("/captcha/{name}", name="paul_captcha")
*/
public function captcha($name, SessionInterface $session): Response
{
// Création d'une image vide et ajout d'un texte
$session->set('captcha', mt_rand(10000, 99999));
$im = imagecreate(110, 40);
$font = realpath('fonts/ASMAN.TTF');
$bg = imagecolorallocate($im, 205, 215, 212);
$textcolor = imagecolorallocate($im, 75, 60, 80);
$code = $session->get('captcha');
imagettftext($im, 23, 5, 15, 35, $textcolor, $font, $code);
// Définir le chemin de sauvegarde de l'image
$save = "captcha/".$name.".jpg";
// Enregistrer l'image dans un fichier
imagejpeg($im, $save);
// Libération de la mémoire
imagedestroy($im);
// Lire le contenu du fichier image généré
$imageContent = file_get_contents($save);
// Définir les en-têtes HTTP
$headers = array(
'Content-Type' => 'image/jpeg',
'Content-Disposition' => 'inline; filename="'.$name.'.jpg"'
);
// Retourner l'image en réponse HTTP
return new Response($imageContent, 200, $headers);
// // Définit le contenu de l'en-tête - dans ce cas, image/jpeg
// header('Content-Type: image/jpeg');
// $save = "captcha/".$name.".jpg";
// // Affichage de l'image
// imagejpeg($im, $save);
// // Libération de la mémoire
// imagedestroy($im);
// $headers = array(
// 'Content-Type' => 'image/jpeg',
// 'Content-Disposition' => 'inline; filename="'.$im.'"'
// );
// return new Response($save, 200, $headers);
}
/**
* @Route("/captcha2/{name}", name="paul_captcha2")
*/
public function captcha2($name, SessionInterface $session): Response
{
// Création d'une image vide et ajout d'un texte
$session->set('captcha', mt_rand(10000, 99999));
$im = imagecreate(110, 40);
$font = realpath('fonts/ASMAN.TTF');
$bg = imagecolorallocate($im, 205, 215, 212);
$textcolor = imagecolorallocate($im, 75, 60, 80);
$code = $session->get('captcha');
imagettftext($im, 23, 5, 15, 35, $textcolor, $font, $code);
// Définit le contenu de l'en-tête - dans ce cas, image/jpeg
header('Content-Type: image/jpeg');
$save = "captcha/".$name.".jpg";
// Affichage de l'image
imagejpeg($im, $save);
// Libération de la mémoire
imagedestroy($im);
$headers = array(
'Content-Type' => 'image/jpeg',
'Content-Disposition' => 'inline; filename="'.$im.'"'
);
return new Response($save, 200, $headers);
}
public function moucheUser($action, $page){
// $stat = new Stats();
// // Get IP address
// $ip_address = getenv('HTTP_CLIENT_IP') ?: getenv('HTTP_X_FORWARDED_FOR') ?: getenv('HTTP_X_FORWARDED') ?: getenv('HTTP_FORWARDED_FOR') ?: getenv('HTTP_FORWARDED') ?: getenv('REMOTE_ADDR');
// $stat->setIp($ip_address);
// // Get action
// $stat->setAction($action);
// $stat->setPage($page);
// $stat->setDateCrea(new \DateTime());
// // Get JSON object
// $ip_data = unserialize(file_get_contents('http://ip-api.com/php/'.$_SERVER['REMOTE_ADDR'].'?fields=status,message,country,countryCode,region,regionName,city,zip,lat,lon,timezone,isp,org,as,query'));
// $stat->setPays($ip_data['country']);
// $stat->setRegion($ip_data['region']);
// $stat->setVille($ip_data['city']);
// //$jsondata = file_get_contents("http://timezoneapi.io/api/ip/?" . $ip_address . '&token=aYJMQZkEKzSLtQwhCmzD');
// // Decode
// //$data = json_decode($jsondata, true);
// // Request OK?
// // if(isset($data['meta']) && $data['meta']['code'] == '200'){
// // $stat->setPays($data['data']['country']);
// // $stat->setRegion($data['data']['state']);
// // $stat->setVille($data['data']['city']);
// // }
// $this->em->persist($stat);
// $this->em->flush();
}
public function dessineCourbe(){
$donnees = array(12,23,9,58,23,26,57,48,12);
$largeur = 250;
$hauteur = 200;
// Initialisation du graphique
$graphe = new \Graph($largeur, $hauteur);
// Echelle lineaire ('lin') en ordonnee et pas de valeur en abscisse ('text')
// Valeurs min et max seront determinees automatiquement
$graphe->setScale("textlin");
// Creation de l'histogramme
$histo = new \BarPlot($donnees);
// Ajout de l'histogramme au graphique
$graphe->add($histo);
// Ajout du titre du graphique
$graphe->title->set("Histogramme");
// Affichage du graphique
$graphe->stroke();
}
}