src/Controller/HomeController.php line 43

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Repository\ReviewFormRepository;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\RequestStack;
  6. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  11. use Symfony\Component\HttpFoundation\StreamedResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use App\Repository\UsersRepository;
  16. use Doctrine\ORM\EntityManagerInterface;
  17. use DateTime;
  18. use App\Repository\QuestionRepository;
  19. use App\Repository\DimensionRepository;
  20. use App\Entity\Users;
  21. use App\Entity\Session;
  22. use App\Entity\Reponse;
  23. use App\Entity\Employee;
  24. class HomeController extends AbstractController
  25. {
  26.     public function __construct(
  27.         QuestionRepository $questionRepository,
  28.         DimensionRepository $dimensionRepository,
  29.         ReviewFormRepository $reviewFormRepository,
  30.         EntityManagerInterface $em
  31.     )
  32.     {
  33.         $this->questionRepository $questionRepository;
  34.         $this->dimensionRepository $dimensionRepository;
  35.         $this->reviewFormRepository $reviewFormRepository;
  36.         $this->em $em;
  37.     }
  38.     // Contrôleur Symfony
  39.     #[Route(path'/'name'index')]
  40.     public function index(Request $request): Response
  41.     {
  42.         $lang $request->query->get('_locale'$request->getSession()->get('_locale''fr'));
  43.         $request->getSession()->set('_locale'$lang);
  44.         $reviewForm $this->reviewFormRepository->findFormWithDimensionsAndQuestionsByLang('8b6cf598-7f27-11ef-9d7f-1d1f43f3f908'$lang);
  45.         return $this->render('index.html.twig', [
  46.             'reviewForm' => $reviewForm
  47.         ]);
  48.     }
  49.     #[Route('/change-langage/{params}'name'change_language')]
  50.     public function changeLangage($paramsRequestStack $requestStackSessionInterface $session): Response
  51.     {
  52.         // Liste des langues valides
  53.         $validLocales = ['en''fr''nl'];
  54.         // Vérifier si la langue est valide, sinon utiliser 'en' comme langue par défaut
  55.         if (!in_array($params$validLocales)) {
  56.             $params 'en';
  57.         }
  58.         // Stocker la langue sélectionnée dans la session
  59.         $session->set('_locale'$params);
  60.         // Récupérer la requête actuelle
  61.         $request $requestStack->getCurrentRequest();
  62.         $previousUrl $request->headers->get('referer'); // URL du référent (page précédente)
  63.         return $this->redirectToRoute('index');
  64.         // Ajouter ou mettre à jour le paramètre de langue dans l'URL de la page précédente
  65.         $urlComponents parse_url($previousUrl);
  66.         parse_str($urlComponents['query'] ?? ''$query);
  67.         $query['_locale'] = $params;
  68.         $urlComponents['query'] = http_build_query($query);
  69.         // Reconstruire l'URL complète avec le paramètre de langue ajouté
  70.         $newUrl $urlComponents['scheme'] . '://' $urlComponents['host'] . ($urlComponents['path'] ?? '') . '?' $urlComponents['query'];
  71.         // Rediriger vers l'URL modifiée avec la nouvelle langue
  72.         return new RedirectResponse($newUrl);
  73.     }
  74.     #[Route(path'/form/{lang}/{formId}'name'form')]
  75.     public function form($lang$formId): Response
  76.     {
  77.         $reviewForm $this->reviewFormRepository->findFormWithDimensionsAndQuestionsByLang($formId$lang);
  78.         return $this->render('home.html.twig', [
  79.             'reviewForm' => $reviewForm
  80.         ]);
  81.     }
  82.     #[Route(path'/send-form'name'send_form')]
  83.     public function sendForm(Request $request): Response
  84.     {
  85.         $responses json_decode($request->get('questionData'),true);
  86.         $review $this->reviewFormRepository->find(trim($request->get('review')));
  87.         $session = new Session();
  88.         $session->setEmployee(null);
  89.         $session->setCreatedAt(new DateTime('now'));
  90.         $session->setEmail($request->get('email'));
  91.         $session->setName($request->get('firstName'));
  92.         $session->setMessage($request->get('message'));
  93.         $session->setReviewForm($review);
  94.         $session->setLang(strtolower($request->get('lang')));
  95.         $birthdate $request->get('birthdate');
  96.         if ($birthdate) { 
  97.             $birthdateObj \DateTime::createFromFormat('Y-m-d'$birthdate); 
  98.             if ($birthdateObj !== false) { 
  99.                 $session->setBirthdate($birthdateObj); 
  100.             } 
  101.         }
  102.         $session->setEmployeeFunction($request->get('function'));
  103.         foreach ($responses as $key => $response) {
  104.             $idQuestion $response['id'];
  105.             $score $response['score'];
  106.             $score_minimal $response['score_minimal']; 
  107.             $comment $response['comment'];
  108.             $question $this->questionRepository->find($idQuestion);
  109.             $reponse = new Reponse();
  110.             $reponse->setQuestion($question);
  111.             $reponse->setSession($session);
  112.             $reponse->setQuantity(intval($score));
  113.             $reponse->setMinimalQuantity(intval($score_minimal));
  114.             $reponse->setDeleted(false);
  115.             $reponse->setComment($comment);
  116.             $this->em->persist($reponse);
  117.             
  118.         }
  119.         $session->setStatus(1);
  120.         $this->em->persist($session);
  121.         $this->em->flush();
  122.         return new JsonResponse(200);
  123.     }
  124. }