src/Controller/PageController.php line 161

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. // use Doctrine\Persistence\ObjectManager;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\HttpFoundation\Session\Session;
  10. use App\Entity\Article;
  11. // use App\Entity\ArticleType;
  12. // use App\Entity\Event;
  13. use App\Entity\Donation;
  14. use App\Entity\Page;
  15. use App\Entity\Theme;
  16. use App\Entity\Subscriber;
  17. use App\Entity\SubscriberList;
  18. use App\Form\DonationType;
  19. use App\Form\RechercheType;
  20. use App\Form\SubscriberType;
  21. class PageController extends AbstractController
  22. {
  23.     private $entityManager;
  24.     public function __construct(EntityManagerInterface $entityManager)
  25.     {
  26.         $this->entityManager $entityManager;
  27.     }
  28.     /**
  29.      * @Route("/test-from-controller", name="testFromController")
  30.      */
  31.     public function testFromController(Request $request)
  32.     {
  33.         $entitiesClasses = [
  34.             "Article",
  35.             "Event",
  36.             "Newsletter",
  37.             "Page",
  38.             "QuestionAnswer",
  39.             "Structure"
  40.         ];
  41.         $key 0
  42.         $entity null;
  43.         while(!$entity && $key count($entitiesClasses)) {
  44.             $repo $this->getDoctrine()->getRepository('App\\Entity\\' $entitiesClasses[$key]);
  45.             $entity $repo->findOneByTmpOldId(10293);
  46.             if(!$entity$key ++; // si pas d'entité trouvée, on change de classe d'entité  
  47.         }    
  48.         if(!$entity) {
  49.             print " pas d'entité trouvée pour l'oldTmpId : " "10293" ")\n";
  50.         }
  51.         dump($entity); 
  52.         exit;
  53.         return new Response("ok");
  54.     }
  55.     /**
  56.      * @Route("/page/{id}", name="showPage", requirements={"id"="\d+"})
  57.      */
  58.     public function showPage(Request $request$id)
  59.     {
  60.         $page $this->getDoctrine()->getRepository(Page::class)->find($id);
  61.         if (!$page) {
  62.             throw $this->createNotFoundException('Pas d\'article avec l\'id ' $id '.');
  63.         }
  64.         if(!$page->getPublished()) {
  65.             $redirectUrl $this->_notPublished($request);
  66.             if($redirectUrl) return $this->redirect($redirectUrl);
  67.         }
  68.         switch ($page->getName()) {
  69.             case 'home':
  70.                 $url $this->generateUrl('home', []);
  71.                 break;
  72.             case 'participer':
  73.                 $url $this->generateUrl('participer', []);
  74.                 break;
  75.             case 'pourquoi Ici Grenoble':
  76.                 $url $this->generateUrl('pourquoiIciGrenoble', []);
  77.                 break;
  78.             case 'newsletter':
  79.                 $url $this->generateUrl('newsletter', []);
  80.                 break;
  81.             case 'contact':
  82.                 $url $this->generateUrl('contact', []);
  83.                 break;
  84.             default:
  85.                 $url null;
  86.                 break;
  87.         }
  88.         if($url) {
  89.             return $this->redirect($url);
  90.         } else {
  91.             return $this->render('page/show.html.twig', [
  92.                 'page' => $page
  93.             ]);
  94.         }
  95.     }
  96.     /**
  97.      * action if entity not published
  98.      * @return string $redirectUrl
  99.      */
  100.     private function _notPublished($request) {
  101.         if(!$this->isGranted('ROLE_ADMIN')) {
  102.             $requestUri $request->getRequestUri();
  103.             $baseUrl $request->getSchemeAndHttpHost();
  104.             $this->addFlash(
  105.                 'error-popup',
  106.                 'L\'url demandée : "' $baseUrl $requestUri '" n\'existe pas.'
  107.             );
  108.             $referer $request->headers->get('referer');
  109.             if(null != $referer && substr($referer0strlen($baseUrl)) === $baseUrl) {
  110.                 // on retourne de là oú l'on vient, si l'on vient de ce site
  111.                 $redirectUrl substr($refererstrlen($baseUrl));
  112.             } else {
  113.                 // pas de referer trouvé ou appel depuis site extérieur, on va donc à la home
  114.                 $redirectUrl $this->generateUrl('home');
  115.             }
  116.             
  117.         } else { 
  118.             // rôle admin, on laisse consulter
  119.             $this->addFlash(
  120.                 'notice',
  121.                 'Cette question-réponse n\'est pas publiée. En tant qu\'admin vous pouvez toutefois la voir.'
  122.             );
  123.             $redirectUrl null;
  124.         }
  125.         return $redirectUrl;
  126.     }
  127.     /**
  128.     * @Route("/", name="home")
  129.     */
  130.     public function showHome(Request $request) {
  131.         $articleRepository $this->getDoctrine()->getRepository(Article::class);
  132.         $articlesUne $articleRepository->getArticlesByTypeName("a-la-une"9);
  133.         $articlesFond $articleRepository->getArticlesByTypeName("article-fond"8);
  134.         $publications $articleRepository->getArticlesByTypeName("publication"4);
  135.         $pageRepository $this->getDoctrine()->getRepository(Page::class);
  136.         $page $pageRepository->findOneByName("home");
  137.         /* // -> rendered in template
  138.         $searchForm = $this->createForm(RechercheType::class); // cf. https://symfony.com/doc/current/form/without_class.html
  139.         $searchForm->handleRequest($request);
  140.         if ($searchForm->isSubmitted() && $searchForm->isValid()) {
  141.             $term = $searchForm->getData()["term"];
  142.             // $term = $request->request->get('recherche')["term"]; // fonctionne aussi
  143.             // dump($searchForm->getData()); dump($request->request->get('recherche')["term"]); exit;
  144.             return $this->redirect($this->generateUrl('showTagBySlug', ['slug' => $term]));
  145.         }
  146.         */
  147.         return $this->render('page/home.html.twig', [
  148.             'page' => $page,
  149.             'articlesUne' => $articlesUne,
  150.             'articlesFond' => $articlesFond,
  151.             'publications' => $publications,
  152.             // 'searchForm' => $searchForm->createView(),
  153.         ]);
  154.     }
  155.     /**
  156.      * @Route("/carte", name="carte")
  157.      */
  158.     public function showCarte(Request $request)
  159.     {
  160.         $themesRepository $this->getDoctrine()->getRepository(Theme::class);
  161.         $themes $themesRepository->findAllOrdered();
  162.         $searchForm $this->createForm(RechercheType::class); // cf. https://symfony.com/doc/current/form/without_class.html
  163.         $searchForm->handleRequest($request);
  164.         if ($searchForm->isSubmitted() && $searchForm->isValid()) {
  165.             $term $searchForm->getData()["term"];
  166.             // $term = $request->request->get('recherche')["term"]; // fonctionne aussi
  167.             // dump($searchForm->getData()); dump($request->request->get('recherche')["term"]); exit;
  168.             return $this->redirect($this->generateUrl('showTagBySlug', ['slug' => $term]));
  169.         }
  170.         return $this->render('page/carte.html.twig', [
  171.             'themes' => $themes,
  172.             'searchForm' => $searchForm->createView(),
  173.         ]);
  174.     }
  175.     /**
  176.      * @Route("/newsletter", name="newsletter")
  177.      */
  178.     public function showNewsletter(Request $request)
  179.     {
  180.         $subscriber = new Subscriber();
  181.         $form $this->createForm(SubscriberType::class, $subscriber);
  182.         $form->handleRequest($request);
  183.         if ($form->isSubmitted() && $form->isValid()) {
  184.             $subscriberRepository $this->getDoctrine()->getRepository(Subscriber::class);
  185.             $subscriberListRepository $this->getDoctrine()->getRepository(SubscriberList::class);
  186.             $subscriberListIciG $subscriberListRepository->findOneByName('ici-grenoble');
  187.             $email strtolower($form->getData()->getEmail());
  188.             $existentSubscriber $subscriberRepository->findOneByEmail($email);
  189.             if (!$existentSubscriber) {
  190.                 $subscriber $form->getData();
  191.                 $subscriber->setEmail($email); // pour s'assurer que l'email soit tout en minuscule
  192.                 $subscriber->addSubscriberList($subscriberListIciG);
  193.                 $entityManager $this->getDoctrine()->getManager();
  194.                 $entityManager->persist($subscriber);
  195.                 $entityManager->flush();
  196.                 $this->addFlash(
  197.                     'notice-popup',
  198.                     'Votre email <em>' $email '</em> a été ajouté à notre liste de diffusion. Merci.'
  199.                 );
  200.             } else { // normalement, cela ne devrait pas arriver puisque la validation du formulaire empêche d'introduire un mail existant dans la liste
  201.                 $this->addFlash(
  202.                     'notice-popup',
  203.                     'Votre email <em>' $email '</em> fait déjà partie de notre liste de diffusion. Merci.'
  204.                 );
  205.             }
  206.             return $this->redirectToRoute('home');
  207.         }
  208.         $slug "newsletter";
  209.         $page $this->getDoctrine()->getRepository(Page::class)->findOneBySlug($slug);
  210.         if (!$page) {
  211.             throw $this->createNotFoundException('Pas de page avec le slug "' $slug '".');
  212.         }
  213.         return $this->render('page/newsletter.html.twig', [
  214.             'page' => $page,
  215.             'form' => $form->createView(),
  216.         ]);
  217.     }
  218.     /**
  219.      * @Route("/info/realisation", name="realisation")
  220.      */
  221.     public function showRealisation()
  222.     {
  223.         return $this->render('page/realisation.html.twig');
  224.     }
  225.     /**
  226.      * @Route("/info/participer", name="participer")
  227.      */
  228.     public function showParticiper()
  229.     {
  230.         $page $this->getDoctrine()->getRepository(Page::class)->findOneBySlug("participer");
  231.         if (!$page) {
  232.             return $this->render('page/participer.html.twig');
  233.         } else {
  234.             return $this->render('page/show.html.twig', [
  235.                 'page' => $page
  236.             ]);
  237.         }
  238.     }
  239.     /**
  240.      * @Route("/info/pourquoi-ici-grenoble", name="pourquoiIciGrenoble")
  241.      */
  242.     public function showPourquoi()
  243.     {
  244.         $page $this->getDoctrine()->getRepository(Page::class)->findOneBySlug("pourquoi-ici-grenoble");
  245.         if (!$page) {
  246.             return $this->render('page/pourquoiIciGrenoble.html.twig');
  247.         } else {
  248.             return $this->render('page/show.html.twig', [
  249.                 'page' => $page
  250.             ]);
  251.         }
  252.     }
  253.     /**
  254.      * creates donation page if it doesn't exist
  255.      * @return $page, the new created donation page
  256.      */
  257.     private function _createMakeDonationPage() {
  258.         $page = new Page;
  259.         $page->setName("Faire un don");
  260.         $page->setSlug("faire-un-don");
  261.         $page->setTitle("Faire un don");
  262.         $page->setContent("Il est possible de faire un don et nous vous en remercions");
  263.         $this->entityManager->persist($page);
  264.         $this->entityManager->flush();
  265.         return $page;
  266.     }
  267.     /**
  268.      * @Route("/faire-un-don", name="makeDonation")
  269.      */
  270.     public function makeDonation(Request $request)
  271.     {
  272.         $donation = new Donation();
  273.         $form $this->createForm(DonationType::class, $donation);
  274.         $form->handleRequest($request);
  275.         if ($form->isSubmitted() && $form->isValid()) {
  276.             $donation $form->getData();
  277.             $entityManager $this->getDoctrine()->getManager();
  278.             $entityManager->persist($donation);
  279.             $entityManager->flush();
  280.             $session $request->getSession();
  281.             if(!$session) {
  282.                 $session = new Session();
  283.                 $session->start();
  284.             }
  285.             $session->set('donation_id'$donation->getId());
  286.             $this->addFlash(
  287.                 'notice-popup',
  288.                 'Merci pour votre souhait de donation.<br/>
  289.                 Pour que celle-ci soit effective, vous devez s\'il vous plait procéder au paiement en ligne.'
  290.             );
  291.             return $this->redirectToRoute('payment_url');
  292.         }
  293.         
  294.         $page $this->getDoctrine()->getRepository(Page::class)->findOneBySlug("faire-un-don");
  295.         if (!$page) {
  296.             $page $this->_createMakeDonationPage();
  297.         }
  298.         return $this->render('page/makeDonation.html.twig', [
  299.             'page' => $page,
  300.             'form' => $form->createView(),
  301.         ]);
  302.     }
  303. }