src/Controller/Blog/PagesController.php line 55

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Blog;
  3. use App\Entity\Articles\Articles;
  4. use App\Entity\Core\Users;
  5. use App\Entity\Pages\Pages;
  6. use App\Entity\Pages\PagesHasBlocks;
  7. use App\Entity\Pages\PagesHasLanguages;
  8. use App\Form\Articles\ContactForm;
  9. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  10. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Session\Session;
  14. use Symfony\Component\Filesystem\Filesystem;
  15. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  16. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  17. use Symfony\Component\HttpFoundation\StreamedResponse;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\Mailer\Mailer;
  21. use Symfony\Component\Mailer\Transport;
  22. use Symfony\Component\Mime\Address;
  23. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  24. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  25. use Symfony\Component\Form\Extension\Core\Type\TextType;
  26. use Doctrine\ORM\EntityManagerInterface;
  27. use Knp\Component\Pager\PaginatorInterface;
  28. /**
  29. * Gestion des pages
  30. */
  31. class PagesController extends AbstractController
  32. {
  33. private $em;
  34. private $paginator;
  35. public function __construct(EntityManagerInterface $em,
  36. PaginatorInterface $paginator
  37. ) {
  38. $this->em = $em;
  39. $this->paginator = $paginator;
  40. }
  41. /**
  42. * 1er niveau
  43. * @param Request $request
  44. * @param $folderslug
  45. * @return mixed
  46. */
  47. public function fiche(Request $request, $folderslug)
  48. {
  49. $session = $request->getSession();
  50. $user = $this->getUser();
  51. if ($request->query->has('aecid')) {
  52. $aecid = $request->query->get('aecid');
  53. $session->set("ae", $aecid);
  54. }
  55. if($request->getLocale() != null) {
  56. $lang = $request->getLocale();
  57. $session->set("lang",$lang);
  58. if($user != null) {
  59. $user->setLanguage($lang);
  60. $this->em->persist($user);
  61. $this->em->flush();
  62. }
  63. }
  64. if(empty($lang)) {
  65. $session->set("lang","en");
  66. $lang = "en";
  67. }
  68. $articlePage = $this->em->getRepository(Articles::class)->getPage($lang,$folderslug);
  69. if($articlePage !== null) {
  70. $user = $this->getUser();
  71. if($user == null) {
  72. if($articlePage->getPublishedAt() === null) {
  73. return $this->redirectToRoute('homepage');
  74. }
  75. } else {
  76. $grant = $this->em->getRepository(Users::class)->userHasRole($user->getId(),"ROLE_SUPER_ADMIN");
  77. if($grant == "0") {
  78. if($articlePage->getPublishedAt() === null) {
  79. return $this->redirectToRoute('homepage');
  80. }
  81. }
  82. }
  83. return $this->render('vitrine/articles/page_article.html.twig',[
  84. 'article' => $articlePage,
  85. 'lang' => $lang
  86. ]);
  87. }
  88. $page = $this->em->getRepository(Pages::class)->getPage($lang,$folderslug);
  89. if(!$page) {
  90. Throw new \Exception("No page registered with the slug ".$folderslug);
  91. }
  92. $user = $this->getUser();
  93. if($user == null) {
  94. if($page->getType() == "brouillon") {
  95. return $this->redirectToRoute('homepage');
  96. }
  97. if(!empty($page->getRedirect())) {
  98. return $this->redirect($page->getRedirect());
  99. }
  100. } else {
  101. $grant = $this->em->getRepository(Users::class)->userHasRole($user->getId(),"ROLE_SUPER_ADMIN");
  102. if($grant == "0") {
  103. if($page->getType() == "brouillon") {
  104. return $this->redirectToRoute('homepage');
  105. }
  106. if(!empty($page->getRedirect())) {
  107. return $this->redirect($page->getRedirect());
  108. }
  109. }
  110. }
  111. $blocks = $this->em->getRepository(PagesHasBlocks::class)->findBy(['page' => $page, 'type' => 'prod', 'startPage' => false],['sequence' => 'ASC']);
  112. $page->setViews((int)$page->getViews() + 1);
  113. $this->em->persist($page);
  114. $this->em->flush();
  115. if($folderslug == "faq") {
  116. $locale = $request->getLocale();
  117. $form = $this->createForm(ContactForm::class);
  118. if($locale == "en") {
  119. $form->add('question', ChoiceType::class, [
  120. 'label' => "",
  121. 'choices' => [
  122. 'I am an individual and I want to become a partner' => '1',
  123. 'I am a professional and I want to be listed' => '2',
  124. 'I want to be a family ambassador' => '3',
  125. 'Other' => '4'
  126. ],
  127. 'required' => false,
  128. 'multiple' => false,
  129. 'expanded' => false,
  130. 'attr' => ['class' => 'form-control']
  131. ]);
  132. } else {
  133. $form ->add('question',ChoiceType::class,[
  134. 'label' => "",
  135. 'choices' => array(
  136. 'Je suis un particulier et je veux être partenaire' => '1',
  137. 'Je suis un pro et je veux être référencé' => '2',
  138. 'Je veux être famille ambassadrice' => '3',
  139. 'Autre' => 4
  140. ),
  141. 'required' => false,
  142. 'multiple' => false,
  143. 'expanded' => false,
  144. 'attr' => ['class' => 'form-control']
  145. ]);
  146. }
  147. $form->handleRequest($request);
  148. if ($form->isSubmitted() && $form->isValid()) {
  149. $data = $request->request->all();
  150. $data = $data['contact_form'];
  151. $emailTo = "hello@letsgomino.com";
  152. $replaceTitle = "Demande de contact - Let's go mino";
  153. $dsn = $_ENV["MAILER_DSN"];
  154. $transport = Transport::fromDsn($dsn);
  155. $mailer = new Mailer($transport);
  156. $message = (new TemplatedEmail())
  157. ->from(new Address("hello@letsgomino.com","Let's go mino"))
  158. ->to($emailTo)
  159. ->subject($replaceTitle)
  160. ->html($this->twig->render("emails/contact.html.twig",[
  161. 'question' => $data['question'],
  162. 'name' => $data['name'],
  163. 'email' => $data['email'],
  164. 'message' => $data['message'],
  165. ]))
  166. ;
  167. $mailer->send($message);
  168. if($locale == "en") {
  169. $session->getFlashBag()->add('success', 'Mail sending');
  170. return $this->redirectToRoute('contact');
  171. }
  172. $session->getFlashBag()->add('success', 'Mail envoyé');
  173. return $this->redirectToRoute('locale_contact',['_locale' => $locale]);
  174. }
  175. return $this->render('vitrine/page_faq.html.twig',[
  176. 'page' => $page,
  177. 'blocks' => $blocks,
  178. 'lang' => $lang,
  179. 'form' => $form->createView()
  180. ]);
  181. }
  182. return $this->render('vitrine/page.html.twig',[
  183. 'page' => $page,
  184. 'blocks' => $blocks,
  185. 'lang' => $lang
  186. ]);
  187. }
  188. /**
  189. * 2ème niveau
  190. * @param Request $request
  191. * @param $folderslug
  192. * @param $folderslug2
  193. * @return mixed
  194. */
  195. public function fiche2(Request $request, $folderslug, $folderslug2)
  196. {
  197. $session = $request->getSession();
  198. $user = $this->getUser();
  199. if ($request->query->has('aecid')) {
  200. $aecid = $request->query->get('aecid');
  201. $session->set("ae", $aecid);
  202. }
  203. if($request->getLocale() != null) {
  204. $lang = $request->getLocale();
  205. $session->set("lang",$lang);
  206. if($user != null) {
  207. $user->setLanguage($lang);
  208. $this->em->persist($user);
  209. $this->em->flush();
  210. }
  211. }
  212. if(empty($lang)) {
  213. $session->set("lang","en");
  214. $lang = "en";
  215. }
  216. $articlePage = $this->em->getRepository(Articles::class)->getPage($lang,$folderslug,$folderslug2);
  217. if($articlePage !== null) {
  218. $user = $this->getUser();
  219. if($user == null) {
  220. if($articlePage->getPublishedAt() === null) {
  221. return $this->redirectToRoute('homepage');
  222. }
  223. } else {
  224. $grant = $this->em->getRepository(Users::class)->userHasRole($user->getId(),"ROLE_SUPER_ADMIN");
  225. if($grant == "0") {
  226. if($articlePage->getPublishedAt() === null) {
  227. return $this->redirectToRoute('homepage');
  228. }
  229. }
  230. }
  231. return $this->render('vitrine/articles/page_article.html.twig',[
  232. 'article' => $articlePage,
  233. 'lang' => $lang
  234. ]);
  235. }
  236. $page = $this->em->getRepository(Pages::class)->getPage($lang,$folderslug,$folderslug2);
  237. if(!$page) {
  238. Throw new \Exception("No page registered with the slug ".$folderslug."/".$folderslug2);
  239. }
  240. $user = $this->getUser();
  241. if($user == null) {
  242. if($page->getType() == "brouillon") {
  243. return $this->redirectToRoute('homepage');
  244. }
  245. if(!empty($page->getRedirect())) {
  246. return $this->redirect($page->getRedirect());
  247. }
  248. } else {
  249. $grant = $this->em->getRepository(Users::class)->userHasRole($user->getId(),"ROLE_SUPER_ADMIN");
  250. if($grant == "0") {
  251. if($page->getType() == "brouillon") {
  252. return $this->redirectToRoute('homepage');
  253. }
  254. if(!empty($page->getRedirect())) {
  255. return $this->redirect($page->getRedirect());
  256. }
  257. }
  258. }
  259. $blocks = $this->em->getRepository(PagesHasBlocks::class)->findBy(['page' => $page, 'type' => 'prod', 'startPage' => false],['sequence' => 'ASC']);
  260. $page->setViews((int)$page->getViews() + 1);
  261. $this->em->persist($page);
  262. $this->em->flush();
  263. return $this->render('vitrine/page.html.twig',[
  264. 'page' => $page,
  265. 'blocks' => $blocks,
  266. 'lang' => $lang
  267. ]);
  268. }
  269. /**
  270. * 3ème niveau
  271. * @param Request $request
  272. * @param $folderslug
  273. * @param $folderslug2
  274. * @param $folderslug3
  275. * @return mixed
  276. */
  277. public function fiche3(Request $request, $folderslug, $folderslug2, $folderslug3)
  278. {
  279. $session = $request->getSession();
  280. $user = $this->getUser();
  281. if ($request->query->has('aecid')) {
  282. $aecid = $request->query->get('aecid');
  283. $session->set("ae", $aecid);
  284. }
  285. if($request->getLocale() != null) {
  286. $lang = $request->getLocale();
  287. $session->set("lang",$lang);
  288. if($user != null) {
  289. $user->setLanguage($lang);
  290. $this->em->persist($user);
  291. $this->em->flush();
  292. }
  293. }
  294. if(empty($lang)) {
  295. $session->set("lang","en");
  296. $lang = "en";
  297. }
  298. $articlePage = $this->em->getRepository(Articles::class)->getPage($lang,$folderslug,$folderslug2,$folderslug3);
  299. if($articlePage !== null) {
  300. $user = $this->getUser();
  301. if($user == null) {
  302. if($articlePage->getPublishedAt() === null) {
  303. return $this->redirectToRoute('homepage');
  304. }
  305. } else {
  306. $grant = $this->em->getRepository(Users::class)->userHasRole($user->getId(),"ROLE_SUPER_ADMIN");
  307. if($grant == "0") {
  308. if($articlePage->getPublishedAt() === null) {
  309. return $this->redirectToRoute('homepage');
  310. }
  311. }
  312. }
  313. return $this->render('vitrine/articles/page_article.html.twig',[
  314. 'article' => $articlePage,
  315. 'lang' => $lang
  316. ]);
  317. }
  318. $page = $this->em->getRepository(Pages::class)->getPage($lang,$folderslug,$folderslug2,$folderslug3);
  319. if(!$page) {
  320. Throw new \Exception("No page registered with the slug ".$folderslug."/".$folderslug2."/".$folderslug3);
  321. }
  322. $user = $this->getUser();
  323. if($user == null) {
  324. if($page->getType() == "brouillon") {
  325. return $this->redirectToRoute('homepage');
  326. }
  327. if(!empty($page->getRedirect())) {
  328. return $this->redirect($page->getRedirect());
  329. }
  330. } else {
  331. $grant = $this->em->getRepository(Users::class)->userHasRole($user->getId(),"ROLE_SUPER_ADMIN");
  332. if($grant == "0") {
  333. if($page->getType() == "brouillon") {
  334. return $this->redirectToRoute('homepage');
  335. }
  336. if(!empty($page->getRedirect())) {
  337. return $this->redirect($page->getRedirect());
  338. }
  339. }
  340. }
  341. $blocks = $this->em->getRepository(PagesHasBlocks::class)->findBy(['page' => $page, 'type' => 'prod', 'startPage' => false],['sequence' => 'ASC']);
  342. $page->setViews((int)$page->getViews() + 1);
  343. $this->em->persist($page);
  344. $this->em->flush();
  345. return $this->render('vitrine/page.html.twig',[
  346. 'page' => $page,
  347. 'blocks' => $blocks,
  348. 'lang' => $lang
  349. ]);
  350. }
  351. }