<?php
namespace App\Controller;
use App\Entity\Page;
use App\Entity\TPage;
use App\Entity\TPageTranslation;
use App\Form\ContactType;
use App\Form\ContactTypeData;
use App\Repository\TPageRepository;
use App\Services\PageBuilder;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\Annotation\Route;
class FrontController extends AbstractController
{
/**
* @Route("/", name="homepage", options={"i18n"=false})
*/
public function index()
{
return $this->render('front/index.html.twig', [
'controller_name' => 'FrontController',
]);
}
/**
* @Route("/search/{term}", name="search")
*/
public function search($term=null)
{
return $this->render('front/index.html.twig', [
'controller_name' => 'FrontController',
]);
}
/**
* @Route("/multilingue", name="multilingue")
*/
public function multilingue(Request $request)
{
return $this->render('front/'.$request->getLocale().'/multilingue.html.twig', [
'controller_name' => 'FrontController',
]);
}
/**
* @Route("/{slug}", name="tpage", priority=-2)
*/
public function tpage(Request $request, KernelInterface $kernel, SessionInterface $session, EntityManagerInterface $em, PageBuilder $pb, string $slug)
{
$locale = $request->attributes->get('_locale') ? $request->attributes->get('_locale') : $request->getSession()->get('_locale');
/** @var TPageRepository $repo */
$repo = $em->getRepository(TPage::class);
/** @var TPage $page */
$page = $repo->findBySlug($slug, $locale);
if(!$page)
throw $this->createNotFoundException();
/** @var TPageTranslation $pageTrans */
$pageTrans = $page->translate();
/* exceptions */
if($pageTrans->getSlug() == "contact")
return $this->contact($kernel, $session, $request, $em, $page);
if($pageTrans->getSlug() != $slug && $pageTrans->getSlug() != "")
return $this->redirectToRoute("tpage", ["slug" => $pageTrans->getSlug()], 301);
/* pagebuilder editmode */
$isEditMode = (($this->isGranted('ROLE_ADMIN')|| true) && $request->get('editor'));
$pbtest = $pb->compile($pageTrans->getPbcontent());
return $this->render('front/pages/templates/'.$page->getTemplate().'.html.twig', [
'isEditMode' => $isEditMode,
'page' => $page,
'pbtest' => $pbtest
]);
}
/**
* @Route("/{slug}", name="page", options={"i18n"=false}, priority=-2)
*/
/**
* @Route("/{slug}", name="page", options={"i18n"=false}, priority=-2)
*/
public function page(EntityManagerInterface $em, Page $page)
{
return $this->render('front/pages/templates/'.$page->getTemplate().'.html.twig', [
'page' => $page
]);
}
private function contact(KernelInterface $kernel, SessionInterface $session, Request $request, EntityManagerInterface $em, TPage $page)
{
$contactData = new ContactTypeData();
$contactForm = $this->createForm(ContactType::class, $contactData);
$contactForm->handleRequest($request);
$captcha = $session->get('bt-cptch');
if ($contactForm->isSubmitted()) {
if($contactData->getCptcha() != $session->get('bt-cptch'))
$contactForm->get('cptcha')->addError(new FormError("Captcha incorrect"));
if($contactForm->isValid()) {
if($contactData->getAdresse() == "") {
$dest = $contactData->getDestinataire() != "" ? $contactData->getDestinataire() : 'autre';
$destMail = "info@medipremagroup.com";
$message = (new \Swift('Contact Site Mediprema - ' . $dest))
->setFrom($contactData->getEmail())
->setTo($kernel->isDebug() ? "nicolas@factory02.com" : $destMail)
->setBcc("nicolas@factory02.com")
->setBody($this->renderView('email/contact.html.twig', ["data" => $contactData, "destMail" => $destMail, "isDebug" => $kernel->isDebug()]), 'text/html');
$mailer->send($message);
$this->addFlash('success', $translator->trans('message.sent', [], 'contact'));
}
$data = ["form" => isset($contactForm) ? $contactForm->createView() : null, "preset" => $preset ? $preset : false];
return $this->render("front/page/contact.html.twig", array(
"page" => $page,
"data" => $data
));
//return $this->redirectToRoute('page', ['slug' => $page->translate()->getSlug()]);
}
}
else {
$captcha = "";
for($i = 0; $i < 5; $i++)
$captcha .= rand(1, 9);
$session->set("bt-cptch", $captcha);
}
return $this->render('front/pages/templates/'.$page->getTemplate().'.html.twig', [
'page' => $page,
"data" => ["form" => $contactForm->createView()],
"captcha" => $captcha
]);
}
}