src/Controller/GroupeController.php line 148

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Groupe;
  4. use App\Entity\SearchData;
  5. use App\Entity\User;
  6. use App\Form\GroupeFormType;
  7. use App\Form\SearchFormType;
  8. use DateTime as DateTimeAlias;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Doctrine\ORM\Exception\ORMException;
  11. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  16. use Symfony\Component\Mailer\MailerInterface;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted as IsGranted;
  19. #[Route ('/groupe',  name'groupe_')]
  20. class GroupeController extends AbstractController
  21. {
  22.     // -----------------  Enregristrement d'un groupe -----------------
  23.     #[IsGranted('ROLE_USER')]
  24.     #[Route('/register'name'register')]
  25.     public function registerGroup(Request $request,
  26.                                   EntityManagerInterface $entityManager,
  27.                                   MailerInterface $mailer): Response
  28.     {
  29.         // Creation du groupe pour le formulaire
  30.         $groupe = new Groupe();
  31.         $form $this->createForm(GroupeFormType::class, $groupe);
  32.         $form->handleRequest($request);
  33.         if ($form->isSubmitted() && $form->isValid()) {
  34.             //recupération des données et ajout des champs cachés
  35.             // association avec l'utilisateur
  36.             $user $this->getUser();
  37.             $groupe->setUser($user);
  38.             // Valeur par default de l'annulation
  39.             $groupe->setAnnule(false);
  40.             // Intilitalisation de la date de parution
  41.             $groupe->setDateParution(new DateTimeAlias());
  42.             $entityManager->persist($groupe);
  43.             // Insertion en base
  44.             $entityManager->flush();
  45.             // Email de confirmation si checkbox
  46.             if ($form->get('emailConfirmation')->getData()){
  47.                 $this->sendEmail($mailer$user);
  48.             }
  49.             $this->addFlash('success''Le groupe à bien été enregistré ! ');
  50.             return $this->redirectToRoute('home');
  51.         }
  52.         return $this->render('groupe/registerGroupForm.html.twig', [
  53.             'groupeForm' => $form->createView(),
  54.         ]);
  55.     }
  56.     //-----------------------détail d'un groupe-----------------------
  57.     /**
  58.      * @param Request $request
  59.      * @param EntityManagerInterface $entityManager
  60.      * @return Response
  61.      */
  62.     #[IsGranted('ROLE_USER')]
  63.     #[Route(path'/{id}'name'details'requirements: ['id' => '\d+'], methods: ['GET'])]
  64.     public function details(Request $requestEntityManagerInterface $entityManager): Response
  65.     {
  66.         $id = (int)$request->get('id');
  67.         // Récupération du groupe
  68.         try {
  69.             $groupe $entityManager->getRepository(Groupe::class)->getGroupById($id);
  70.         } catch (ORMException) {
  71.             throw $this->createNotFoundException('Vous ne pouvez pas accéder à ce groupe ou vous n\'y avez pas accés,
  72.              si cela vous semble incorrect merci de vous rapprocher d\'un des responsables');
  73.         }
  74.         // Appel de la vue
  75.         return $this->render('groupe/details.html.twig', [
  76.             'groupe' => $groupe
  77.         ]);
  78.     }
  79.     /**
  80.      * @param Request $request
  81.      * @param EntityManagerInterface $entityManager
  82.      * @return Response
  83.      */
  84.     #[IsGranted('ROLE_USER')]
  85.     #[Route(path'/modification/{id}'name'update'requirements: ['id' => '\d+'], methods: ['GET''POST'])]
  86.     public function update(Request $requestEntityManagerInterface $entityManager): Response
  87.     {
  88.         // Récupération user log
  89.         $user $this->getUser();
  90.         $id = (int)$request->get('id');
  91.         // Récupération du groupe
  92.         try {
  93.             $groupe $entityManager->getRepository(Groupe::class)->getGroupById($id);
  94.         } catch (ORMException) {
  95.             throw $this->createNotFoundException('Aucun élément corresponds');
  96.         }
  97.         $form $this->createForm(GroupeFormType::class, $groupe);
  98.         $form->handleRequest($request);
  99.         // Utilisateur correspond ou est Admin
  100.         if ( ($user == $groupe->getUser()) OR ($user->getTypeAdherent()->getNiveau() ==1) ) {
  101.             // formulaire valide
  102.             if ($form->isSubmitted() && $form->isValid()) {
  103.                 //récupération des données et modification des champs cachés
  104.                 $groupe->setDateParution(new DateTimeAlias());
  105.                 // TODO Gerer l'annulation de groupe checkbox
  106.                 $entityManager->persist($groupe);
  107.                 // Insertion en base
  108.                 $entityManager->flush();
  109.                 // Appel de la vue
  110.                 return $this->redirectToRoute('groupe_details', ['id' => $groupe->getId()]);
  111.             }
  112.             return $this->render('groupe/update.html.twig', [
  113.                 'groupeForm' => $form->createView()
  114.             ]);
  115.         } else {
  116.             $this->addFlash('warning''Vous n\'avez pas le droit de modifier ce groupe!');
  117.             return $this->redirectToRoute('home');
  118.         }
  119.     }
  120.     //----------------------- Liste de tout les groupes (max 25 resultats)-----------------------
  121.     #[Route(path'/resultats'name'list'methods: ['GET''POST'])]
  122.     public function list(Request $requestEntityManagerInterface $entityManager): Response
  123.     {
  124.         $userLog $this->getUser();
  125.         // Création du formulaire de recherche
  126.         // datas form
  127.         $data = new SearchData();
  128.         $searchForm $this->createForm(SearchFormType::class, $data);
  129.         $searchForm->handleRequest($request);
  130.         // Recupération des groupes de la recherche
  131.         $groupesSearch $entityManager->getRepository(Groupe::class)->search($data);
  132.         if (empty($groupesSearch)) {
  133.             // Message notification si pas de résultats
  134.             $this->addFlash('warning''Aucun résultat !');
  135.         }
  136.         // Affichage des groupes
  137.         return $this->render('groupe/list.html.twig', [
  138.             'groupes' => $groupesSearch,
  139.             'searchForm' => $searchForm->createView(),
  140.             'app_user'=>$userLog
  141.         ]);
  142.     }
  143.     // Mail function
  144.     public function sendEmail(MailerInterface $mailerUser $user): Response
  145.     {
  146.         $email = (new TemplatedEmail())
  147.             ->from('audrey@enjin.fr')
  148.             ->to($user->getEmail())
  149.             ->subject('Enregistrement d\'un nouveau groupe')
  150.             ->htmlTemplate('groupe/email_register_confirm.html.twig');
  151.         try {
  152.             $mailer->send($email);
  153.         } catch (TransportExceptionInterface $e) {
  154.             $this->addFlash('secondary'$e);
  155.             return $this->redirectToRoute('home');
  156.         }
  157.         // message confirmation mail envoyé
  158.         $this->addFlash('success''Le groupe à bien été enregistré ! ');
  159.         return $this->redirectToRoute('home');
  160.     }
  161. }