src/Controller/DefaultController.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Event;
  4. use App\Entity\Formulaire;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\HttpFoundation\Request;
  10. class DefaultController extends AbstractController
  11. {
  12.     /**
  13.      * @Route("/", name="app_default")
  14.      */
  15.     public function index(): Response
  16.     {
  17.         return $this->render('default/index.html.twig');
  18.     }
  19.     /**
  20.      * @Route("/formulaire", name="formulaire")
  21.      */
  22.     public function step1(): Response
  23.     {
  24.         return $this->render('default/formulaire.html.twig');
  25.     }
  26.     /**
  27.      * @Route("/formulaire/submit", name="form.submit", methods={"POST"})
  28.      */
  29.     public function submit(Request $requestEntityManagerInterface $em): Response
  30.     {
  31.         $email $request->get('email');
  32.         // Vérification de l'email déjà utilisé
  33.         $existing $em->getRepository(Formulaire::class)->findOneBy(['email' => $email]);
  34.         if ($existing) {
  35.             $this->addFlash('email_error''Cette adresse email est déjà utilisée.');
  36.             return $this->redirectToRoute('formulaire'); // Adapte le nom de la route si nécessaire
  37.         }
  38.         $form = new Formulaire();
  39.         $event $em->getRepository(Event::class)->findOneBy(['id' =>1]);
  40.         $form->setEvent($event);
  41.         // Infos générales
  42.         $form->setLastEvent($request->get('last_event'));
  43.         $form->setCivility($request->get('civility'));
  44.         $form->setName($request->get('name'));
  45.         $form->setLastName($request->get('firstname'));
  46.         $form->setAdress($request->get('adress'));
  47.         $form->setCity($request->get('city'));
  48.         $form->setZip($request->get('zip'));
  49.         $form->setCountry($request->get('country'));
  50.         $form->setPhone($request->get('phone'));
  51.         $form->setMobile($request->get('mobile'));
  52.         $form->setEmail($request->get('email'));
  53.         $form->setConfirmationEmail($request->get('confirm_email'));
  54.         $form->setAge($request->get('age'));
  55.         $form->setBirthday($request->get('birthday'));
  56.         $form->setFamilySituation($request->get('family'));
  57.         $form->setNumberChildren($request->get('children'));
  58.         $form->setNationality($request->get('nationality'));
  59.         $form->setWeight($request->get('weight'));
  60.         $form->setSize($request->get('size'));
  61.         $form->setJob($request->get('job'));
  62.         // Personnalité
  63.         $form->setSport($request->get('sport'));
  64.         $form->setQuality($request->get('quality'));
  65.         $form->setFault($request->get('fault'));
  66.         $form->setYourselfInOneWord($request->get('oneword'));
  67.         $form->setPersonality($request->get('personality'));
  68.         $form->setExplainPersonality($request->get('why_personality'));
  69.         $form->setSwing($request->get('swing'));
  70.         // Réseaux sociaux
  71.         $form->setInstagram($request->get('instagram'));
  72.         $form->setInstagramFollows($request->get('instagram_followers'));
  73.         $form->setTiktok($request->get('tiktok'));
  74.         $form->setTiktokFollowers($request->get('tiktok_followers'));
  75.         $form->setFacebook($request->get('facebook'));
  76.         $form->setOtherSocial($request->get('othersocial'));
  77.         // Contact
  78.         $form->setBestTimeCall($request->get('best_time'));
  79.         
  80.         // Motivations
  81.         //$form->setMotivation($request->get('motivation'));
  82.         $form->setAboutIt($request->get('about'));
  83.         $form->setCreatedAt(new \DateTime());
  84.         $form->setStatutCandidat(0); // 0 = en attente
  85.  
  86.         // ==========================
  87.         // GESTION UPLOAD PHOTO / VIDÉO
  88.         // ==========================
  89.         $uploadDir $this->getParameter('kernel.project_dir') . '/public/uploads';
  90.         $maxImageSize 1024 1024// 8 Mo
  91.         $maxVideoSize 100 1024 1024// 100 Mo
  92.         $allowedImageExtensions = ['jpg''jpeg''png'];
  93.         $allowedVideoExtensions = ['mp4''mov''avi''mkv'];
  94.         // Traitement photo 1
  95.         $photo $request->files->get('photo_portrait');
  96.         if ($photo) {
  97.         if ($photo->getSize() > $maxImageSize) {
  98.         throw new \Exception('Image trop volumineuse. Max : 8 Mo');
  99.         }
  100.         $ext $photo->guessExtension();
  101.         if (!in_array($ext$allowedImageExtensions)) {
  102.         throw new \Exception('Format image non autorisé.');
  103.         }
  104.         $photoFilename uniqid('photo_') . '.' $ext;
  105.         $photo->move($this->getParameter('upload_directory'), $photoFilename);
  106.         $form->setPhoto($photoFilename);
  107.         }   
  108.         // Traitement photo 2
  109.         $photo2 $request->files->get('photo_silhouette');
  110.         if ($photo2) {
  111.         if ($photo2->getSize() > $maxImageSize) {
  112.         throw new \Exception('Image 2 trop volumineuse. Max : 8 Mo');
  113.         }
  114.         $ext $photo2->guessExtension();
  115.         if (!in_array($ext$allowedImageExtensions)) {
  116.         throw new \Exception('Format image non autorisé.');
  117.          }
  118.         $photo2Filename uniqid('photo2_') . '.' $ext;
  119.         $photo2->move($this->getParameter('upload_directory'), $photo2Filename);
  120.         $form->setPhoto2($photo2Filename);
  121.         }
  122.         // Traitement photo 3
  123.         $photo3 $request->files->get('photo_personality');
  124.         if ($photo3) {
  125.         if ($photo3->getSize() > $maxImageSize) {
  126.         throw new \Exception('Image 3 trop volumineuse. Max : 8 Mo');
  127.         }
  128.         $ext $photo3->guessExtension();
  129.         if (!in_array($ext$allowedImageExtensions)) {
  130.         throw new \Exception('Format image non autorisé.');
  131.         }
  132.         $photo3Filename uniqid('photo3_') . '.' $ext;
  133.         $photo3->move($this->getParameter('upload_directory'), $photo3Filename);
  134.         $form->setPhoto3($photo3Filename);
  135.         }
  136.         // Traitement vidéo
  137.        /// dd($request->files->get('video_motivation'));
  138.         $video $request->files->get('video_motivation');
  139.        // dd($video);
  140.         if ($video && $video->isValid()) {
  141.             if ($video->getSize() > $maxVideoSize) {
  142.                 throw new \Exception('Vidéo trop volumineuse. Max : 100 Mo');
  143.             }
  144.         
  145.             $ext $video->guessExtension();
  146.             if (!in_array($ext$allowedVideoExtensions)) {
  147.                 throw new \Exception('Format vidéo non autorisé.');
  148.             }
  149.         
  150.             $videoFilename uniqid('video_') . '.' $ext;
  151.             $video->move($this->getParameter('upload_directory'), $videoFilename);
  152.             $form->setMotivation($videoFilename);
  153.         }
  154.      $em->persist($form);
  155.      $em->flush();
  156.         
  157.      return $this->redirectToRoute('kalina_success');
  158.     }
  159.     /**
  160.     * @Route("/formulaire/merci", name="kalina_success")
  161.     */
  162.     public function success(): Response
  163.     {
  164.         return $this->render('default/success.html.twig');
  165.     }
  166.       /**
  167.     * @Route("/manager/formulaire/inscription", name="kalina.inscription")
  168.     */
  169.     public function inscription(EntityManagerInterface $em)
  170.     {
  171.         $inscription $em->getRepository(Formulaire::class)->findBy(['event'=>1],['id'=>'ASC']);
  172.         return $this->render('default/inscription.html.twig',
  173.         ['inscription'=>$inscription]);
  174.     }
  175.     /**
  176.     * @Route("/manager/formulaire/inscription/{id}", name="kalina.inscription.view")
  177.     */
  178.     public function show(EntityManagerInterface $em,$id)
  179.     {
  180.         $formulaireRepo $em->getRepository(Formulaire::class);
  181.         $formulaire $em->getRepository(Formulaire::class)->findOneBy(['id'=>$id]);
  182.         if (!$formulaire) {
  183.             throw $this->createNotFoundException('Formulaire non trouvé');
  184.         }
  185.     
  186.         // Chercher l’inscription précédente (ID plus petit)
  187.         $prev $formulaireRepo->createQueryBuilder('f')
  188.             ->where('f.id < :currentId')
  189.             ->setParameter('currentId'$id)
  190.             ->orderBy('f.id''DESC')
  191.             ->setMaxResults(1)
  192.             ->getQuery()
  193.             ->getOneOrNullResult();
  194.     
  195.         // Chercher l’inscription suivante (ID plus grand)
  196.         $next $formulaireRepo->createQueryBuilder('f')
  197.             ->where('f.id > :currentId')
  198.             ->setParameter('currentId'$id)
  199.             ->orderBy('f.id''ASC')
  200.             ->setMaxResults(1)
  201.             ->getQuery()
  202.             ->getOneOrNullResult();
  203.     
  204.         return $this->render('default/inscription_show.html.twig', [
  205.             'formulaire' => $formulaire,
  206.             'prev' => $prev,
  207.             'next' => $next,
  208.         ]);
  209.     }
  210.     /**
  211.     * @Route("/manager/formulaire/inscription/{id}/status/{status}", name="kalina.inscription.update_status", methods={"POST"})
  212.     */
  213.     public function updateStatus(int $statusEntityManagerInterface $em,$id): Response
  214.     {
  215.         $formulaire $em->getRepository(Formulaire::class)->findOneBy(['id'=>$id]);
  216.         $formulaire->setStatutCandidat($status);
  217.         $em->flush();
  218.         $this->addFlash('success''Statut mis à jour !');
  219.     return $this->redirectToRoute('kalina.inscription.view', ['id' => $formulaire->getId()]);
  220.     }
  221. }