<?php
/*
* For the full copyright and license information, please view the LICENSE file
* that was distributed with this source code.
*/
namespace App\Controller;
use App\Entity\Marque;
use App\Entity\Recipe;
use FOS\UserBundle\Mailer\Mailer;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use App\Entity\Slider;
use App\Entity\News;
use App\Entity\Contact;
use App\Entity\Mail;
use App\Entity\Farmer;
use App\Entity\Pdv;
use App\Entity\Demarche;
use App\Entity\Img;
use App\Entity\PdvHasDem;
use App\Entity\ElvHasDem;
use App\Entity\DemarcheBo;
use Symfony\Component\HttpFoundation\JsonResponse;
use JMS\Serializer\SerializerInterface;
class FrontController extends AbstractController
{
/**
* @Route(path="/", name="app_homepage")
*
* @param Request $request Request
*
* @return Response
*/
public function homepageAction(Request $request)
{
$images = $this->getDoctrine()->getRepository(Slider::class)->findAllWithoutDelete($page = null);
$news = $this->getDoctrine()->getRepository(News::class)->findLast();
return $this->render('front/pages/index.html.twig', [
'images' => $images,
'news' => $news
]);
}
/**
* @Route(path="/404", name="app_404")
*
* @param Request $request Request
*
* @return Response
*/
public function ErrorAction(Request $request)
{
return $this->render('TwigBundle/views/Exception/error404.html.twig', [
]);
}
/**
* @Route(path="/eleveurs-bouchers", name="app_eleveurs")
*
* @param Request $request Request
*
* @return Response
*/
public function eleveursAction(Request $request)
{
return $this->render('front/pages/eleveurs.html.twig', []);
}
/**
* @Route(path="/carte", name="app_map")
* @param Request $request Request
*
* @return Response
*/
public function newMapAction(Request $request)
{
$boeuf = $this->getDoctrine()
->getRepository(Marque::class)
->findByEspece('B');
$agneau = $this->getDoctrine()
->getRepository(Marque::class)
->findByEspece('O');
$veau = $this->getDoctrine()
->getRepository(Marque::class)
->findByEspece('V');
$root = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/';
if (!isset($_GET['dem1']) || !isset($_GET['dem2']) || !isset($_GET['dem3']) || !isset($_GET['dem4']) || !isset($_GET['cat']) || !isset($_GET['loc'])) {
return $this->redirect($root . 'carte?cat=3&dem1=B&dem2=V&dem3=O&dem4=undefined&loc=null');
} else {
$dems = [$_GET['dem1'], $_GET['dem2'], $_GET['dem3'], $_GET['dem4']];
return $this->render('front/pages/map.html.twig', [
'boeuf' => $boeuf,
'agneau' => $agneau,
'veau' => $veau,
'typeselect' => $dems,
'adresseselect' => $_GET['loc'],
'catselect' => $_GET['cat']
]);
}
}
/**
* @Route(path="/demarche/{type}", name="app_demarche")
*
* @param Request $request Request
*
* @return Response
*/
public function boeufAction(Request $request, $type)
{
$images = $this->getDoctrine()->getRepository(Slider::class)->findAllWithoutDelete($type);
$demarches = $this->getDoctrine()->getRepository(DemarcheBo::class)->findAllWithoutDelete($type);
$marques = $this->getDoctrine()->getRepository(Marque::class)->findAll();
$title = "Les boeufs Label Rouge - Viandes";
return $this->render('front/pages/demarche.html.twig', [
'images' => $images,
'demarches' => $demarches,
'type' => $type,
'marques' => $marques
]);
}
/**
* @Route(path="/demarche/{type}/{demarche}", name="app_demarche_single")
*
* @param Request $request Request
*
* @return Response
*/
public function demarcheSingleAction(Request $request, $type, $demarche)
{
$dem = $this->getDoctrine()->getRepository(DemarcheBo::class)
->findOneBy(array('title' => $demarche));
$imgsdem = $this->getDoctrine()->getRepository(Img::class)
->getLogo('LOGO_' . $dem->getDemacode());
// dd($imgsdem);
return $this->render('front/pages/demarche_single.html.twig', [
'type' => $type,
'demarche' => $dem,
'logo' => $imgsdem
]);
}
/**
* @Route(path="/pageEnConstuction", name="app_pageEnConstruction")
*
* @param Request $request Request
*
* @return Response
*/
public function constructionAction(Request $request)
{
return $this->render('front/pages/construction.html.twig', [
]);
}
/**
* @Route(path="/notre-mission", name="app_mission")
*
* @param Request $request Request
*
* @return Response
*/
public function missionAction(Request $request)
{
return $this->render('front/pages/mission.html.twig', []);
}
/**
* @Route(path="/nos-actualites", name="app_news")
*
* @param Request $request Request
*
* @return Response
*/
public function newsAction(Request $request)
{
$news = $this->getDoctrine()->getRepository(News::class)->findAllWithoutDelete();
return $this->render('front/pages/news.html.twig', [
'news' => $news
]);
}
/**
* @Route(path="/actualite/{slug}", name="app_news_single")
*
* @param Request $request Request
*
* @return Response
*/
public function newsSingleAction(Request $request, $slug)
{
$news = $this->getDoctrine()->getRepository(News::class)->findOneBySlug($slug);
$other = $this->getDoctrine()->getRepository(News::class)->findMoreNews($news->getId());
if ($news->getDeletedAt() != null)
return $this->redirectToRoute('app_homepage');
return $this->render('front/pages/news_single.html.twig', [
'news' => $news,
'other' => $other
]);
}
/**
* @Route(path="/nos-recettes", name="app_recipes")
*
* @param Request $request Request
*
* @return Response
*/
public function recipesAction(Request $request)
{
$recipes = $this->getDoctrine()->getRepository(Recipe::class)->findAll();
return $this->render('front/pages/recipes.html.twig', [
'recipes' => $recipes
]);
}
/**
* @Route(path="/nos-recettes/{slug}", name="app_recipes_single")
*
* @param Request $request Request
*
* @return Response
*/
public function recipesSingleAction(Request $request, $slug)
{
$recipes = $this->getDoctrine()->getRepository(Recipe::class)->findOneBySlug($slug);
$other = $this->getDoctrine()->getRepository(Recipe::class)->findMoreRecipes($recipes->getId());
if ($recipes == null)
return $this->redirectToRoute('app_homepage');
return $this->render('front/pages/recipes_single.html.twig', [
'recipes' => $recipes,
'other' => $other
]);
}
/**
* @Route(path="/recettes/query", name="app_recipes_filter")
*
* @param Request $request Request
*
* @return Response
*/
public function recipesfilterAction(Request $request, SerializerInterface $serializer)
{
if ($_GET['cat'] && $_GET['cat'] == 'all')
$recipes = $this->getDoctrine()->getRepository(Recipe::class)->findAll();
else
$recipes = $this->getDoctrine()->getRepository(Recipe::class)->findByCategorie($_GET['cat']);
return new JsonResponse(['content' =>$this->renderView('front/fiche/recipe.html.twig', [
'recipes' => $recipes
])]);
}
/**
* @Route(path="/nous-contacter", name="app_contact")
* @Route(path="/nous-contacter/{farmer}", name="app_contact")
*
* @param Request $request Request
*
* @return Response
*/
public function contactAction(Request $request, \Swift_Mailer $mailer, $farmer = null)
{
$contact = new Contact();
$form = $this->createFormBuilder($contact)
->add('name', TextType::class, array(
'attr' => array(
'placeholder' => 'Nom *',
)
))
->add('fstname', TextType::class, array(
'attr' => array(
'placeholder' => 'Prénom *',
)
))
->add('city', TextType::class, array(
'attr' => array(
'placeholder' => 'Ville *',
)
))
->add('phone', TextType::class, array(
'attr' => array(
'placeholder' => 'Téléphone *',
)
))
->add('email', EmailType::class, array(
'attr' => array(
'placeholder' => 'Email *',
)
))
->add('subject', TextType::class, array(
'attr' => array(
'placeholder' => 'Objet *',
)
))
->add('content', TextareaType::class, array(
'attr' => array(
'class' => 'tinymce',
'placeholder' => "Votre message *"
)))
->add('checkrgpd', CheckboxType::class, array(
'label' => 'En soumettant ce formulaire, j\'accepte que les informations saisies
dans ce formulaire soient utilisées, exploitées, traitées pour permettre
de me recontacter.',
'required' => true
))
->add('submit', SubmitType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid() && $this->captchaverify($request->get('g-recaptcha-response'))) {
if ((!isset($phone)) || preg_match("^(0|\+33)[1-9]([-. ]?[0-9]{2}){4}$^", $form['phone']->getData())) {
$mails = $this->getDoctrine()->getRepository(Mail::class)->findAllWithoutDelete();
$contact = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($contact);
$em->flush();
foreach ($mails as $mail) {
$message = (new \Swift_Message($form['subject']->getData()))
->setFrom($form['email']->getData())
->setTo($mail->getEmail())
->setBody(
$this->renderView(
'email/contact.html.twig',
array(
'fstname' => $form['fstname']->getData(),
'name' => $form['name']->getData(),
'email' => $form['email']->getData(),
'phone' => $form['phone']->getData(),
'subject' => $form['subject']->getData(),
'content' => $form['content']->getData(),
'ferme' => urldecode($farmer)
)
),
'text/html'
);
$mailer->send($message);
}
$this->addFlash(
'notice',
"Email envoyé, nous vous répondrons dans les plus bref délais."
);
} else {
$this->addFlash(
'error',
"Les champs ne sont pas correct."
);
}
return $this->redirectToRoute('app_homepage');
}
if ($form->isSubmitted() && !$this->captchaverify($request->get('g-recaptcha-response'))) {
$this->addFlash(
'error',
"Veuillez cocher le captcha."
);
}
return $this->render('front/pages/contact.html.twig', [
'form' => $form->createView()
]);
}
/**
* @Route(path="/mentions-legales", name="app_mention")
*
* @param Request $request Request
*
* @return Response
*/
public function mentionAction(Request $request)
{
return $this->render('front/pages/mention.html.twig', []);
}
/**
* @Route(path="/eleveurs/{id}/{slug}", name="app_card_elv")
*
* @param Request $request Request
*
* @return Response
*/
public function singleElvAction($id)
{
$elv =
$this->getDoctrine()
->getRepository(Farmer::class)
->findOneById($id);
$demarches = $this->getDoctrine()
->getRepository(ElvHasDem::class)
->getDem($elv->getId());
$imgs = $this->getDoctrine()
->getRepository(Img::class)
->findByElv($elv);
if (count($imgs) == 0) {
$imgs = array();
foreach ($demarches as $dema) {
$imgs = array_merge($imgs, $this->getDoctrine()->getRepository(Img::class)->getImagedefault('ELEVAGE_' . $dema->getDemacode()));
}
}
$imgsdem = array();
foreach ($demarches as $dema) {
$imgsdem = array_merge(
$imgsdem,
[$dema->getDemacode() => $this->getDoctrine()->getRepository(Img::class)
->getLogo('LOGO_' . $dema->getDemacode())]
);
}
return $this->render('front/pages/cards/eleveurs.html.twig', [
'elv' => $elv,
'imgs' => $imgs,
'demarches' => $demarches,
'imgsdem' => $imgsdem
]);
}
/**
* @Route(path="/boucheries/{id}/{slug}", name="app_card_pdv")
*
* @param Request $request Request
*
* @return Response
*/
public function singlePdvAction($id)
{
$pdv =
$this->getDoctrine()
->getRepository(Pdv::class)
->findOneById($id);
$demarches = $this->getDoctrine()
->getRepository(Demarche::class)
->getDemPdv($pdv->getId());
$imgs = $this->getDoctrine()
->getRepository(Img::class)
->findByPdv($pdv);
$mrqs = $this->getDoctrine()->getRepository(PdvHasDem::class)->getMrqPDV($pdv->getId());
if (count($imgs) == 0) {
$imgs = array();
foreach ($demarches as $dema) {
$imgs = array_merge(
$imgs,
$this->getDoctrine()->getRepository(Img::class)
->getImagedefault('PDV_' . $dema->getDemacode())
);
}
}
$imgsdem = array();
foreach ($demarches as $dema) {
$imgsdem = array_merge(
$imgsdem,
[$dema->getDemacode() => $this->getDoctrine()->getRepository(Img::class)
->getLogo('LOGO_' . $dema->getDemacode())]
);
}
return $this->render('front/pages/cards/pdv.html.twig', [
'pdv' => $pdv,
'imgs' => $imgs,
'demarches' => $demarches,
'imgsdem' => $imgsdem,
"mrqs" => $mrqs
]);
}
function captchaverify($recaptcha)
{
$url = "https://www.google.com/recaptcha/api/siteverify";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
"secret" => "6LdbcXwUAAAAALVuSe4Ij3e9H2Q1DZPSzlk_dZy6", "response" => $recaptcha));
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response);
return $data->success;
}
}