<?phpnamespace App\Controller\Blog;use App\Entity\Articles\Articles;use App\Entity\Core\Users;use App\Entity\Pages\Pages;use App\Entity\Pages\PagesHasBlocks;use App\Entity\Pages\PagesHasLanguages;use App\Form\Articles\ContactForm;use Symfony\Bridge\Twig\Mime\TemplatedEmail;use Symfony\Component\Form\Extension\Core\Type\ChoiceType;use Symfony\Component\HttpFoundation\Request;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Session\Session;use Symfony\Component\Filesystem\Filesystem;use Symfony\Component\HttpFoundation\BinaryFileResponse;use Symfony\Component\HttpFoundation\ResponseHeaderBag;use Symfony\Component\HttpFoundation\StreamedResponse;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\Mailer\Mailer;use Symfony\Component\Mailer\Transport;use Symfony\Component\Mime\Address;use Symfony\Component\Routing\Generator\UrlGeneratorInterface;use Symfony\Component\Form\Extension\Core\Type\TextareaType;use Symfony\Component\Form\Extension\Core\Type\TextType;use Doctrine\ORM\EntityManagerInterface;use Knp\Component\Pager\PaginatorInterface;/** * Gestion des pages */class PagesController extends AbstractController{ private $em; private $paginator; public function __construct(EntityManagerInterface $em, PaginatorInterface $paginator ) { $this->em = $em; $this->paginator = $paginator; } /** * 1er niveau * @param Request $request * @param $folderslug * @return mixed */ public function fiche(Request $request, $folderslug) { $session = $request->getSession(); $user = $this->getUser(); if ($request->query->has('aecid')) { $aecid = $request->query->get('aecid'); $session->set("ae", $aecid); } if($request->getLocale() != null) { $lang = $request->getLocale(); $session->set("lang",$lang); if($user != null) { $user->setLanguage($lang); $this->em->persist($user); $this->em->flush(); } } if(empty($lang)) { $session->set("lang","en"); $lang = "en"; } $articlePage = $this->em->getRepository(Articles::class)->getPage($lang,$folderslug); if($articlePage !== null) { $user = $this->getUser(); if($user == null) { if($articlePage->getPublishedAt() === null) { return $this->redirectToRoute('homepage'); } } else { $grant = $this->em->getRepository(Users::class)->userHasRole($user->getId(),"ROLE_SUPER_ADMIN"); if($grant == "0") { if($articlePage->getPublishedAt() === null) { return $this->redirectToRoute('homepage'); } } } return $this->render('vitrine/articles/page_article.html.twig',[ 'article' => $articlePage, 'lang' => $lang ]); } $page = $this->em->getRepository(Pages::class)->getPage($lang,$folderslug); if(!$page) { Throw new \Exception("No page registered with the slug ".$folderslug); } $user = $this->getUser(); if($user == null) { if($page->getType() == "brouillon") { return $this->redirectToRoute('homepage'); } if(!empty($page->getRedirect())) { return $this->redirect($page->getRedirect()); } } else { $grant = $this->em->getRepository(Users::class)->userHasRole($user->getId(),"ROLE_SUPER_ADMIN"); if($grant == "0") { if($page->getType() == "brouillon") { return $this->redirectToRoute('homepage'); } if(!empty($page->getRedirect())) { return $this->redirect($page->getRedirect()); } } } $blocks = $this->em->getRepository(PagesHasBlocks::class)->findBy(['page' => $page, 'type' => 'prod', 'startPage' => false],['sequence' => 'ASC']); $page->setViews((int)$page->getViews() + 1); $this->em->persist($page); $this->em->flush(); if($folderslug == "faq") { $locale = $request->getLocale(); $form = $this->createForm(ContactForm::class); if($locale == "en") { $form->add('question', ChoiceType::class, [ 'label' => "", 'choices' => [ 'I am an individual and I want to become a partner' => '1', 'I am a professional and I want to be listed' => '2', 'I want to be a family ambassador' => '3', 'Other' => '4' ], 'required' => false, 'multiple' => false, 'expanded' => false, 'attr' => ['class' => 'form-control'] ]); } else { $form ->add('question',ChoiceType::class,[ 'label' => "", 'choices' => array( 'Je suis un particulier et je veux être partenaire' => '1', 'Je suis un pro et je veux être référencé' => '2', 'Je veux être famille ambassadrice' => '3', 'Autre' => 4 ), 'required' => false, 'multiple' => false, 'expanded' => false, 'attr' => ['class' => 'form-control'] ]); } $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $data = $request->request->all(); $data = $data['contact_form']; $emailTo = "hello@letsgomino.com"; $replaceTitle = "Demande de contact - Let's go mino"; $dsn = $_ENV["MAILER_DSN"]; $transport = Transport::fromDsn($dsn); $mailer = new Mailer($transport); $message = (new TemplatedEmail()) ->from(new Address("hello@letsgomino.com","Let's go mino")) ->to($emailTo) ->subject($replaceTitle) ->html($this->twig->render("emails/contact.html.twig",[ 'question' => $data['question'], 'name' => $data['name'], 'email' => $data['email'], 'message' => $data['message'], ])) ; $mailer->send($message); if($locale == "en") { $session->getFlashBag()->add('success', 'Mail sending'); return $this->redirectToRoute('contact'); } $session->getFlashBag()->add('success', 'Mail envoyé'); return $this->redirectToRoute('locale_contact',['_locale' => $locale]); } return $this->render('vitrine/page_faq.html.twig',[ 'page' => $page, 'blocks' => $blocks, 'lang' => $lang, 'form' => $form->createView() ]); } return $this->render('vitrine/page.html.twig',[ 'page' => $page, 'blocks' => $blocks, 'lang' => $lang ]); } /** * 2ème niveau * @param Request $request * @param $folderslug * @param $folderslug2 * @return mixed */ public function fiche2(Request $request, $folderslug, $folderslug2) { $session = $request->getSession(); $user = $this->getUser(); if ($request->query->has('aecid')) { $aecid = $request->query->get('aecid'); $session->set("ae", $aecid); } if($request->getLocale() != null) { $lang = $request->getLocale(); $session->set("lang",$lang); if($user != null) { $user->setLanguage($lang); $this->em->persist($user); $this->em->flush(); } } if(empty($lang)) { $session->set("lang","en"); $lang = "en"; } $articlePage = $this->em->getRepository(Articles::class)->getPage($lang,$folderslug,$folderslug2); if($articlePage !== null) { $user = $this->getUser(); if($user == null) { if($articlePage->getPublishedAt() === null) { return $this->redirectToRoute('homepage'); } } else { $grant = $this->em->getRepository(Users::class)->userHasRole($user->getId(),"ROLE_SUPER_ADMIN"); if($grant == "0") { if($articlePage->getPublishedAt() === null) { return $this->redirectToRoute('homepage'); } } } return $this->render('vitrine/articles/page_article.html.twig',[ 'article' => $articlePage, 'lang' => $lang ]); } $page = $this->em->getRepository(Pages::class)->getPage($lang,$folderslug,$folderslug2); if(!$page) { Throw new \Exception("No page registered with the slug ".$folderslug."/".$folderslug2); } $user = $this->getUser(); if($user == null) { if($page->getType() == "brouillon") { return $this->redirectToRoute('homepage'); } if(!empty($page->getRedirect())) { return $this->redirect($page->getRedirect()); } } else { $grant = $this->em->getRepository(Users::class)->userHasRole($user->getId(),"ROLE_SUPER_ADMIN"); if($grant == "0") { if($page->getType() == "brouillon") { return $this->redirectToRoute('homepage'); } if(!empty($page->getRedirect())) { return $this->redirect($page->getRedirect()); } } } $blocks = $this->em->getRepository(PagesHasBlocks::class)->findBy(['page' => $page, 'type' => 'prod', 'startPage' => false],['sequence' => 'ASC']); $page->setViews((int)$page->getViews() + 1); $this->em->persist($page); $this->em->flush(); return $this->render('vitrine/page.html.twig',[ 'page' => $page, 'blocks' => $blocks, 'lang' => $lang ]); } /** * 3ème niveau * @param Request $request * @param $folderslug * @param $folderslug2 * @param $folderslug3 * @return mixed */ public function fiche3(Request $request, $folderslug, $folderslug2, $folderslug3) { $session = $request->getSession(); $user = $this->getUser(); if ($request->query->has('aecid')) { $aecid = $request->query->get('aecid'); $session->set("ae", $aecid); } if($request->getLocale() != null) { $lang = $request->getLocale(); $session->set("lang",$lang); if($user != null) { $user->setLanguage($lang); $this->em->persist($user); $this->em->flush(); } } if(empty($lang)) { $session->set("lang","en"); $lang = "en"; } $articlePage = $this->em->getRepository(Articles::class)->getPage($lang,$folderslug,$folderslug2,$folderslug3); if($articlePage !== null) { $user = $this->getUser(); if($user == null) { if($articlePage->getPublishedAt() === null) { return $this->redirectToRoute('homepage'); } } else { $grant = $this->em->getRepository(Users::class)->userHasRole($user->getId(),"ROLE_SUPER_ADMIN"); if($grant == "0") { if($articlePage->getPublishedAt() === null) { return $this->redirectToRoute('homepage'); } } } return $this->render('vitrine/articles/page_article.html.twig',[ 'article' => $articlePage, 'lang' => $lang ]); } $page = $this->em->getRepository(Pages::class)->getPage($lang,$folderslug,$folderslug2,$folderslug3); if(!$page) { Throw new \Exception("No page registered with the slug ".$folderslug."/".$folderslug2."/".$folderslug3); } $user = $this->getUser(); if($user == null) { if($page->getType() == "brouillon") { return $this->redirectToRoute('homepage'); } if(!empty($page->getRedirect())) { return $this->redirect($page->getRedirect()); } } else { $grant = $this->em->getRepository(Users::class)->userHasRole($user->getId(),"ROLE_SUPER_ADMIN"); if($grant == "0") { if($page->getType() == "brouillon") { return $this->redirectToRoute('homepage'); } if(!empty($page->getRedirect())) { return $this->redirect($page->getRedirect()); } } } $blocks = $this->em->getRepository(PagesHasBlocks::class)->findBy(['page' => $page, 'type' => 'prod', 'startPage' => false],['sequence' => 'ASC']); $page->setViews((int)$page->getViews() + 1); $this->em->persist($page); $this->em->flush(); return $this->render('vitrine/page.html.twig',[ 'page' => $page, 'blocks' => $blocks, 'lang' => $lang ]); }}