<?php
/*
*
* (c) Loïc Haas <loic.haas@outlook.com>
* http://www.haas-info.com/
*
*/
namespace App\Framework\FrontBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\String\Slugger\AsciiSlugger;
use App\Framework\AppBundle\Entity\Page;
use App\Framework\AppBundle\Entity\Newsletter;
use Symfony\Component\HttpKernel\Profiler\Profiler;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
class PageController extends AbstractController
{
public function __construct(ContainerBagInterface $params)
{
$this->params = $params;
if( !in_array($_SERVER['REMOTE_ADDR'], ['92.188.126.134', '92.188.134.117']) ){
//exit;
}
}
/**
* @Route("/", name="framework_front_page_index")
*/
public function indexAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$locale = $request->getLocale();
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['isHome' => 1]);
$products_tmp = $em->getRepository('FrameworkShopBundle:Product')->findBy(['published' => 1], ['createdAt' => 'DESC'], 50);
if( sizeof($products_tmp) < 20 ){
$size = sizeof($products_tmp);
} else {
$size = 20;
}
shuffle($products_tmp);
$products_line1 = array_slice($products_tmp, 0, 10);
$products_line2 = array_slice($products_tmp, 10, 10);
return $this->render('FrontBundle/Page/index.html.twig', [
'page' => $page,
'products_line1' => $products_line1,
'products_line2' => $products_line2,
]);
}
/**
* @Route("/404", name="framework_front_page_404")
*/
public function error404Action(Request $request)
{
return $this->render('FrontBundle/Page/404.html.twig', [
]);
}
/**
* @Route("/page/{slug}", name="framework_front_page_slug", requirements={"slug" = "([a-z\-0-9]+)", "locale" = "([a-z\-0-9]+)"})
*/
public function slugAction(Request $request, $slug = NULL, $locale = NULL)
{
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$locales = explode('|', $globals["app_locales"]);
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => $slug, 'locale' => $locale]);
if(is_null($page)){
return $this->redirectToRoute('framework_front_page_404');
}
return $this->redirectToRoute('framework_front_page_url', ['locale' => $locale, 'url' => $page->getUrl()]);
}
/**
* @Route("/{locale}/{url}", name="framework_front_page_url", requirements={"locale" = "([a-z][a-z])", "url" = "([a-z\-0-9]+)"})
*/
public function urlAction(Request $request, $locale = NULL, $url = NULL)
{
$em = $this->getDoctrine()->getManager();
$request->setLocale($locale);
if(is_null($url)){
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['isHome' => 1, 'locale' => $locale]);
} else {
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['url' => $url, 'locale' => $locale]);
}
if(is_null($page)){
return $this->redirectToRoute('framework_front_page_404');
}
$content = $page->getContent();
$body = explode('<body>', $content);
if(isset($body[1])){
$body = explode('</body>', $body[1])[0];
} else {
$body = '';
}
$head = '<head>
<title>'.$page->getMetaTitle().'</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="'.$page->getMetaDescription().'">
<link href="/editor/css/editor.css" rel="stylesheet">
</head>';
if($page->getIsHome()){
return $this->render('FrontBundle/Page/index.html.twig', [
// return $this->render('FrontBundle/Page/'.$request->getLocale().'/index.html.twig', [
'page' => $page,
]);
} elseif($page->getIsCms()){
return $this->render('FrontBundle/Page/page.html.twig', [
'page' => $page,
'body' => $body,
]);
// CUSTOM PAGES
} else {
switch ($page->getSlug()) {
case 'about-us':
return $this->render('FrontBundle/Page/about.html.twig', [
'page' => $page,
]);
break;
case 'roadmap':
return $this->render('FrontBundle/Page/roadmap.html.twig', [
'page' => $page,
]);
break;
case 'winemakers':
return $this->render('FrontBundle/Page/winemakers.html.twig', [
'page' => $page,
]);
break;
case 'news':
$currentPage = intval( $request->get('page') );
if($currentPage == null){
$currentPage = 1;
}
$limit = 5;
$posts = $em->getRepository('FrameworkAppBundle:Post')->findBy(['locale' => $locale, 'published' => 1], ['createdAt' => 'DESC'], $limit);
$posts = $em->getRepository('FrameworkAppBundle:Post')->findBy(['locale' => $locale, 'published' => 1], ['createdAt' => 'DESC'], $limit);
$postsNbr = $em->getRepository('FrameworkAppBundle:Post')->count(['locale' => $locale, 'published' => 1]);
$pagesNbr = ceil($postsNbr / $limit);
$posts_arr = [];
foreach ($posts as $key => $post) {
$post_en = $em->getRepository('FrameworkAppBundle:Post')->findOneBy(['slug' => $post->getSlug(), 'locale' => 'en']);
$post->setDataform( $post_en->getDataform() );
$post->setId( $post_en->getId() );
$posts_arr[] = $post;
}
return $this->render('FrontBundle/Page/news.html.twig', [
'posts' => $posts_arr,
'page' => $page,
'pagesNbr' => $pagesNbr,
'currentPage' => $currentPage,
]);
break;
default:
return $this->redirectToRoute('framework_front_page_404');
// return $this->render('FrontBundle/Page/page.html.twig', [
// 'page' => $page,
// 'body' => $body,
// ]);
break;
}
// END CUSTOM PAGES
}
// return new Response(
// '<!DOCTYPE html><html lang="'.$page->getLocale().'">'.$head.$body.'</html>'
// );
}
/**
* @Route("/{locale}/news/{slug}", name="framework_front_news_slug", requirements={"slug" = "([a-z\-0-9]+)", "locale" = "([a-z\-0-9]+)"})
*/
public function newsAction(Request $request, $slug = NULL, $locale = NULL)
{
$em = $this->getDoctrine()->getManager();
$globals = $this->get("twig")->getGlobals();
$locales = explode('|', $globals["app_locales"]);
$post = $em->getRepository('FrameworkAppBundle:Post')->findOneBy(['slug' => $slug, 'locale' => $locale]);
$previous = $em->getRepository('FrameworkAppBundle:Post')->findPrevious($post->getId());
$next = $em->getRepository('FrameworkAppBundle:Post')->findNext($post->getId());
$post_en = $em->getRepository('FrameworkAppBundle:Post')->findOneBy(['slug' => $slug, 'locale' => 'en']);
$post->setDataform( $post_en->getDataform() );
$post->setId( $post_en->getId() );
$post->setTags( $post_en->getTags() );
$posts = $em->getRepository('FrameworkAppBundle:Post')->sameTags($post_en->getTags());
if(is_null($post)){
return $this->redirectToRoute('framework_front_page_index');
}
$page = $em->getRepository('FrameworkAppBundle:Page')->findOneBy(['slug' => 'news', 'locale' => $locale]);
return $this->render('FrontBundle/Page/article.html.twig', [
'posts' => $posts,
'post' => $post,
'page' => $page,
'next' => $next,
'previous' => $previous,
'body' => '',
]);
}
/**
* @Route("/contact/send", name="framework_front_page_contact_send")
*/
public function contactSendAction(Request $request, MailerInterface $mailer)
{
$error = '';
$success = true;
// $isValid = $this->reCaptcha($request->get('token'));
// if(!$isValid){
// $error = 'La vérification anti-robot a échouée.';
// $success = false;
// }
// if($request->get('phone') == ''
// || $request->get('name') == ''
// || $request->get('email') == ''
// || $request->get('message') == ''){
// $error = 'Veuillez remplir tous les champs.';
// $success = false;
// }
if($success){
$from = 'noreply@knuckle-head.com';
$to = 'contact@bellevue-restaurant.fr';
// $to = $request->get('contact');
$email = (new Email())
->from($from)
->to($to)
//->cc('cc@example.com')
//->bcc('bcc@example.com')
->replyTo($request->get('email'))
//->priority(Email::PRIORITY_HIGH)
->subject('Nouveau message : '.$request->get('contact'))
->text(nl2br('Email : '.$request->get('email')).nl2br('Nom : '.$request->get('name')).nl2br('Téléphone : '.$request->get('phone')).nl2br('Message : '.$request->get('message')))
->html('<p>Email : '.$request->get('email').'</p>'.'<p>Nom : '.$request->get('name').'</p>'.'<p>Téléphone : '.$request->get('phone').'</p>'.'<p>Message : '.$request->get('message').'</p>');
$mailer->send($email);
}
// //ENVOI EMAIL
// $transport = \Swift_SmtpTransport::newInstance('mail.gandi.net', 465,'ssl')->setUsername('noreply@knuckle.rocks')->setPassword('Dmc3040307!');
// $privateKey = "-----BEGIN RSA PRIVATE KEY-----
// MIICXQIBAAKBgQCv+ihogW8ElGFuncKjtj/g9kPgvj+3jDf1wJPrsUQiOijy66WF
// FEdAkgkvZCdaI+pBoDx6yhujYYZeQq7+VLaV6E7Vd8xHW+zX4hdJNx7V5Zq9rGTc
// dOyLbKXwGOLLD71nSaRVv12OUFFFsqbnYE7kc+TMK565P3QO0fLSHjzGxwIDAQAB
// AoGATgqasP31xgony26bSw8f9RxBrgGxMC03A/2LnBLZLHSuhEyM8x+zGaep+yJn
// cUpMMR5ms+29pA80D8ly4cef0M45DVD8eDQK/RPi90Y1NiVhhNA6q38tNjyWqdwH
// ZzDoB7r3g6MSlMuYvv/CEJM0X/IOrTyrAdl8navK3jqwNAECQQDp1tHxvxcsklVT
// UxC7skk2v0G9EUB0RSAfA0b+YxpXt8YSIJk/r/EnnMu18AEGaBjMbg1z6PRrNyg2
// Ma6lV0CHAkEAwKeL7SBYIlwe7gj3gL1nvIfSl3YItszb5AkPZS5GUE3Z2C6OZEht
// VEYs9ttBxMDtj8y3/nR18F301rqjUU8XwQJBAMjWmLrpRR4jEOXgEh8joX5EBlI8
// 3v793/jC99bFh3qPfK9VEEqC8rzzDoPU/wxhm+r5GtTS4Bq15POm+DlKF0ECQHkN
// DbvaVeaJEZopojKPUE5C3Yzzynfp8sSu+LBvyhiNQjM21ZuncqLAUWJu1D1nqB1x
// 2a6VyMFWmBAQR6xAUUECQQCtWt1SyZ3esJhR3rHwEVT0ehe7BXdOgDlW6ewQQRHS
// TfLH084vLTXedozbsldqjTsFweJ4Fn/PRKw+w49Pdyll
// -----END RSA PRIVATE KEY-----";
// $signer = new \Swift_Signers_DKIMSigner($privateKey, 'knuckle.rocks', '1586365472.knuckle');
// $signer->ignoreHeader('Return-path');
// $mailer = \Swift_Mailer::newInstance($transport);
// $content = \Swift_Message::newInstance('Confirmation de votre email')
// ->setFrom(array('noreply@knuckle.rocks' => 'KNUCKLE ROCKS PROD - Noreply'))
// ->setTo(array($email => $email))
// ->setBody(
// $this->renderView(
// 'FrontBundle:Email:generic.html.twig', array(
// 'title' => 'Nouveau message : Contact',
// 'content' => 'Code de confirmation : <strong>test</strong>'
// )
// ),
// 'text/html'
// );
// $content->attachSigner($signer);
// $result = $mailer->send($content);
// //FIN ENVOI EMAIL
$data = [
'error' => $error,
'success' => $success
];
$response = new Response(json_encode($data));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
function reCaptcha($token = NULL){
try {
$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = ['secret' => $this->params->get('app_recaptcha_secret'),
'response' => $token,
'remoteip' => $_SERVER['REMOTE_ADDR']];
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
]
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
$result = json_decode($result);
// dump($result->score);exit;
// return true;
if($result->success && $result->score >= 0.5){
return true;
} else {
return false;
}
}
catch (Exception $e) {
return null;
}
}
}