src/Controller/IndexController.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Step;
  4. use App\Entity\User;
  5. use App\Entity\Serie;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Component\Validator\Constraints\Length;
  11. use Symfony\Component\Validator\Constraints\NotBlank;
  12. use Symfony\Component\Form\Extension\Core\Type\TextType;
  13. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  14. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  15. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. class IndexController extends AbstractController
  18. {
  19.     #[Route('/'name'index')]
  20.     public function index()
  21.     {
  22.         
  23.         $session = [];
  24.         if (isset($_SESSION)) {
  25.             $session $_SESSION;
  26.         }
  27.         return $this->redirectToRoute('app_login', [
  28.             "session" => $session,
  29.         ]);
  30.     }
  31.     #[Route('/introduction'name'introduction')]
  32.     public function updateUserInfos(Request $requestManagerRegistry $manager): Response
  33.     {
  34.         // Cette méthode de controller permet de créer plusieurs users en un seul formulaire développé au sein de la méthode
  35.         // Pour envoyer les users vers la base de données, nous avons besoin de l'Entity Manager
  36.         $entityManager $manager->getManager();
  37.         $userRepository $entityManager->getRepository(User::class);
  38.         $stepRepository $entityManager->getRepository(Step::class);
  39.         
  40.         $arrayAge = [];
  41.         $arrayAgeEn = [];
  42.         // Nous checkons la langue dans le cookie, s'il n'existe pas, nous le créons en langue française
  43.         if (!isset($_COOKIE['lang'])) {
  44.             setcookie("lang",'fra',time()+60*60*24*7"/");
  45.         }
  46.         $lang $_COOKIE['lang'];
  47.         // Initialisation des choix des menus déroulants en FR
  48.         for ($i=16$i 65$i++) { 
  49.             $arrayAge["$i ans"] = $i ;
  50.         }
  51.         $arrayAge["65+ ans"] = 65;
  52.         
  53.         // et en ENG
  54.         for ($i=16$i 65$i++) { 
  55.             $arrayAgeEn["$i years old"] = $i ;
  56.         }
  57.         $arrayAgeEn["65+ years old"] = 65;
  58.         // Version formaulaire en Francçais
  59.         if ($lang == "fra") {
  60.             
  61.             // Nous créons notre propre formulaire champ par champ
  62.             $usersForm $this->createFormBuilder()
  63.             ->add('infos'TextType::class, [
  64.                 'label' => "Veuillez saisir un texte qui vous permettra d'identifier vos résultats. Merci d'éviter d'inscrire votre nom. (26 caractères maximum)",
  65.                 'required' => true,
  66.                 'constraints' => [
  67.                     new NotBlank([
  68.                         'message' => 'Merci de définir un texte',
  69.                     ]),
  70.                     new Length([
  71.                         'max' => 26,
  72.                         'maxMessage' => 'Merci de ne pas dépasser les 26 caractères'
  73.                     ])
  74.                 ],
  75.                 'attr' => [
  76.                     'class' => 'col-12 col-lg-6 form-control mb-3'
  77.                 ],
  78.                 "help" => 'Veuillez ne pas dépasser les 26 caractères',
  79.                 "help_attr" => [
  80.                     'class' => 'd-none'
  81.                 ],
  82.             ])
  83.             ->add('sexe'ChoiceType::class, [
  84.                 'label' => 'Je suis :',
  85.                 'required' => true,
  86.                 'expanded' => false,
  87.                 'multiple' => false,
  88.                 'placeholder' => '---',
  89.                 "choices" => [
  90.                     'Une femme' => 'F',
  91.                     'Un homme' => 'H',
  92.                 ],
  93.                 'attr' => [
  94.                     'class' => 'col-12 col-lg-6 form-control mb-3'
  95.                 ]
  96.             ])
  97.             ->add('age'ChoiceType::class, [
  98.                 'label' => 'J\'ai :',
  99.                 'required' => true,
  100.                 'expanded' => false,
  101.                 'multiple' => false,
  102.                 'placeholder' => '---',
  103.                 "choices" => $arrayAge,
  104.                 'attr' => [
  105.                     'class' => 'col-12 col-lg-6 form-control mb-2'
  106.                 ]
  107.             ])
  108.             ->add('valider'SubmitType::class, [
  109.                 'label' => 'Valider',
  110.                 'attr' => [
  111.                     'class' => 'btn btn-sm btn-success btn-valid-qcm col-6 col-lg-2 mb-3',
  112.                     'style' => 'margin-top:10px;'
  113.                 ]
  114.             ])
  115.             ->getForm();
  116.             
  117.         // Version formulaire en Anglais
  118.         } else {
  119.             // Nous créons notre propre formulaire champ par champ
  120.             $usersForm $this->createFormBuilder()
  121.             ->add('infos'TextType::class, [
  122.                 'label' => "Please enter a text to be displayed on all pages, which will help you identify your entries (max 26 characters)",
  123.                 'required' => true,
  124.                 'constraints' => [
  125.                     new NotBlank([
  126.                         'message' => 'Please enter a text',
  127.                     ]),
  128.                     new Length([
  129.                         'max' => 26,
  130.                         'maxMessage' => 'Please no more than 26 characters'
  131.                     ])
  132.                 ],
  133.                 'attr' => [
  134.                     'class' => 'col-12 col-lg-6 form-control mb-3'
  135.                 ],
  136.                 "help" => 'Please no more than 26 characters',
  137.                 "help_attr" => [
  138.                     'class' => 'd-none'
  139.                 ],
  140.             ])
  141.             ->add('sexe'ChoiceType::class, [
  142.                 'label' => 'I am :',
  143.                 'required' => true,
  144.                 'expanded' => false,
  145.                 'multiple' => false,
  146.                 'placeholder' => '---',
  147.                 "choices" => [
  148.                     'A woman' => 'F',
  149.                     'A man' => 'H',
  150.                 ],
  151.                 'attr' => [
  152.                     'class' => 'col-12 col-lg-6 form-control mb-3'
  153.                 ]
  154.             ])
  155.             ->add('age'ChoiceType::class, [
  156.                 'label' => 'I am :',
  157.                 'required' => true,
  158.                 'expanded' => false,
  159.                 'multiple' => false,
  160.                 'placeholder' => '---',
  161.                 "choices" => $arrayAgeEn,
  162.                 'attr' => [
  163.                     'class' => 'col-12 col-lg-6 form-control mb-2'
  164.                 ]
  165.             ])
  166.             ->add('valider'SubmitType::class, [
  167.                 'label' => 'Validate',
  168.                 'attr' => [
  169.                     'class' => 'btn btn-sm btn-success btn-valid-qcm col-6 col-lg-2 mb-3',
  170.                     'style' => 'margin-top:10px;'
  171.                 ]
  172.             ])
  173.             ->getForm();
  174.         }
  175.         // Nous appliquons l'objet Request sur notre formulaire
  176.         $usersForm->handleRequest($request);
  177.         
  178.         if ($request->isMethod('post') && $usersForm->isValid()) {
  179.             $user $userRepository->find($this->getUser()->getId());
  180.             // On récupère les informations de notre formulaire
  181.             // La méthode getData() rend un tableau associatif qui possède les valeurs de chaque champ du formulaire, et donc nos cinq users
  182.             $data $usersForm->getData();
  183.             $user->setInfos($data['infos']);
  184.             $user->setSexe($data['sexe']);
  185.             $user->setAge($data['age']);
  186.             $entityManager->persist($user);
  187.             //Pour l'instant, nous faisons un flush() pour chaque itération de notre tableau, ce qui permet de mettre notre table à jour pour chaque champ
  188.             $entityManager->flush();
  189.             
  190.             return $this->redirectToRoute('user_connect');
  191.         }
  192.         // Si le formulaire n'est pas validé, nous le présentons à l'utilisateur
  193.         return $this->render('questionnaire/introduction.html.twig', [
  194.             'formName' => 'Création de users',
  195.             'dataForm' => $usersForm->createView(),
  196.             "lang" => $lang,
  197.         ]);
  198.     }
  199.     #[Route('/question'name'user_connect')]
  200.     public function userConnect(ManagerRegistry $manager)
  201.     {
  202.         $this->denyAccessUnlessGranted("IS_AUTHENTICATED_FULLY"null"Access DENIED");
  203.         if (!isset($_SESSION)) {
  204.             session_start();
  205.         }
  206.         return $this->redirectToRoute('questionnaire');
  207.     }
  208. }