src/Controller/Front/HomeController.php line 59

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\ApiUser;
  4. use App\Entity\User;
  5. use App\Entity\Visitor;
  6. use App\Form\UserType;
  7. use App\Form\VisitorDetailType;
  8. use App\Form\VisitorEmailType;
  9. use App\Form\VisitorRegistrationType;
  10. use App\Form\VisitorType;
  11. use App\Repository\ApiUserRepository;
  12. use App\Repository\DirectorRepository;
  13. use App\Repository\ModuleNoticeRepository;
  14. use App\Repository\ModuleRepository;
  15. use App\Repository\QuoteRepository;
  16. use App\Repository\UserRepository;
  17. use App\Utils\Constants;
  18. use Doctrine\Persistence\ManagerRegistry;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\HttpFoundation\JsonResponse;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\HttpFoundation\Session\Session;
  24. use Symfony\Component\Notifier\NotifierInterface;
  25. use Symfony\Component\Notifier\Recipient\Recipient;
  26. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  27. use Symfony\Component\Routing\Annotation\Route;
  28. use Symfony\Component\Security\Http\LoginLink\LoginLinkHandlerInterface;
  29. use Symfony\Component\Security\Http\LoginLink\LoginLinkNotification;
  30. use App\Controller\API\V1\Game\WordSearchController;
  31. use App\Repository\Game\WordSearch\GridRepository;
  32. use JMS\Serializer\SerializerInterface;
  33. use App\Entity\Game\WordSearch\Grid;
  34. use App\Entity\Game\WordSearch\Word;
  35. use App\Helper\ControllerHelper;
  36. use App\Repository\CourseRepository;
  37. use App\Repository\Game\WordSearch\WordRepository;
  38. use App\Repository\LiveRepository;
  39. use Symfony\Component\HttpFoundation\RequestStack;
  40. class HomeController extends AbstractController
  41. {
  42.     use ControllerHelper;
  43.     private WordSearchController $wordSearchController;
  44.     public function __construct(
  45.         WordSearchController $wordSearchController,
  46.         private RequestStack $requestStack,
  47.     ) { 
  48.         $this->wordSearchController $wordSearchController;
  49.     }
  50.     /**
  51.      * @Route("/", name="app_front_homepage")
  52.      */
  53.     public function index(QuoteRepository $quoteRepositoryDirectorRepository $directorRepositoryModuleRepository $moduleRepositoryModuleNoticeRepository $moduleNoticeRepositoryCourseRepository $courseRepositoryUserRepository $userRepositoryLiveRepository $liveRepository): Response
  54.     {
  55.         $session $this->requestStack->getSession();
  56.         // return $this->redirectToRoute("app_front_library_page");
  57.         //$session = new Session();
  58.         if (!$session->has('visitor-email') && $this->getUser() === null) {
  59.             return $this->redirectToRoute("app_login");
  60.         }
  61.         $quote $quoteRepository->findActiveQuote();
  62.         $director $directorRepository->findActiveDirector();
  63.         $modules $moduleRepository->findPublishedModules();
  64.         $notices $moduleNoticeRepository->findBy(['module' => null'isPublished' => true]);
  65.         $courseCount $courseRepository->getTotalCourse();
  66.         $learnerCount $userRepository->getLearnersCount(nullnull);
  67.         $topLive $liveRepository->getTopActiveLive("live");
  68.         $topLiveHasModule = ($topLive != null) ? $this->getActiveModule($topLive) : null;
  69.         return $this->render('front/index.html.twig', [
  70.             'quote' => $quote,
  71.             'director' => $director,
  72.             'modules' => $modules,
  73.             'notices' => $notices,
  74.             'courseCount' => $courseCount,
  75.             'learnerCount' => $learnerCount,
  76.             'topLive' => ($topLiveHasModule != null) ? $topLive null
  77.         ]);
  78.     }
  79.     /**
  80.      * @Route("/visiteur", name="app_front_visitor_registration_page")
  81.      */
  82.     public function visitorRegistrationPage(NotifierInterface $notifierLoginLinkHandlerInterface $loginLinkHandlerUserRepository $userRepositoryRequest $requestManagerRegistry $doctrineUserPasswordHasherInterface $passwordHasher): Response
  83.     {
  84.         $entityManager $doctrine->getManager();
  85.         $visitor = new User();
  86.         $form $this->createForm(VisitorRegistrationType::class, $visitor);
  87.         $form->handleRequest($request);
  88.         // if ($form->isSubmitted() && $form->isValid()) {
  89.         if ($request->isXmlHttpRequest()) {
  90.             // $session = new Session();
  91.             // $session->set('visitor-email', $form->get('email')->getData());
  92.             // $email = $form->get('email')->getData();
  93.             // $user = $userRepository->findOneBy(['email' => $email]);
  94.             $email $request->request->get('email');
  95.             $user $userRepository->findOneBy(['email' => $email]);
  96.             if ($user === null) {
  97.                 // $session = new Session();
  98.                 // $session->set('visitor-email', $form->get('email')->getData());
  99.                 $visitor->setRoles(['ROLE_VISITOR']);
  100.                 $hashedPassword $passwordHasher->hashPassword(
  101.                     $visitor,
  102.                     Constants::VISITOR_DEFAULT_PASSWORD_PREFIX."_".$email
  103.                 );
  104.                 $visitor->setPassword($hashedPassword);
  105.                 $userRepository->add($visitortrue);
  106.                 // $entityManager->persist($visitor);
  107.                 // $entityManager->flush();
  108.                 // create a login link for $user this returns an instance
  109.                 // of LoginLinkDetails
  110.                 $loginLinkDetails $loginLinkHandler->createLoginLink($visitor);
  111.                 //$loginLink = $loginLinkDetails->getUrl();
  112.                 // create a notification based on the login link details
  113.                 $notification = new LoginLinkNotification(
  114.                     $loginLinkDetails,
  115.                     'Bienvenue sur le site de Cofina Academy !' // email subject
  116.                 );
  117.                 // create a recipient for this user
  118.                 $recipient = new Recipient($visitor->getEmail());
  119.                 try {
  120.                     // send the notification to the user
  121.                     $notifier->send($notification$recipient);
  122.                 } catch (\Throwable $th) {
  123.                     //throw $th;
  124.                 }
  125.                 // $this->addFlash(
  126.                 //     'visitor_login_notice',
  127.                 //     'Un lien de connexion vous a été envoyé à votre adresse'
  128.                 // );
  129.                 // return $this->redirectToRoute("app_login");
  130.                 return new JsonResponse([
  131.                     'response' => 'Un lien de connexion vous a été envoyé à votre adresse'
  132.                 ], Response::HTTP_OK);
  133.             }
  134.             // create a login link for $user this returns an instance
  135.             // of LoginLinkDetails
  136.             $loginLinkDetails $loginLinkHandler->createLoginLink($user);
  137.             $loginLink $loginLinkDetails->getUrl();
  138.             // return $this->redirect($loginLink);
  139.             return new JsonResponse([
  140.                 'login_url' => $loginLink
  141.             ], Response::HTTP_OK);
  142.         }
  143.         return $this->render('front/pages/authentication/visitor_registration_page.html.twig', [
  144.             'form' => $form->createView(),
  145.         ]);
  146.     }
  147.     /**
  148.      * @Route("/check-visitor", name="app_front_check_visitor")
  149.      */
  150.     public function checkEmailVisitor(LoginLinkHandlerInterface $loginLinkHandlerUserRepository $userRepositoryRequest $request): Response
  151.     {
  152.         if ($request->isXmlHttpRequest()) {
  153.             $email $request->request->get('email');
  154.             $user $userRepository->findOneBy(['email' => $email]);
  155.             if ($user !== null) {
  156.                 if(in_array('ROLE_VISITOR'$user->getRoles())) {
  157.                     $loginLinkDetails $loginLinkHandler->createLoginLink($user);
  158.                     $loginLink $loginLinkDetails->getUrl();
  159.                     if($user->isIsFirstConnexion()) {
  160.                         return new JsonResponse([
  161.                             'login_url' => null
  162.                         ], Response::HTTP_NO_CONTENT);
  163.                     }
  164.     
  165.                     return new JsonResponse([
  166.                         'login_url' => $loginLink
  167.                     ], Response::HTTP_OK);
  168.                 } else {
  169.                     return new JsonResponse([
  170.                         'message' => "Ce compte n'est pas un compte visiteur."
  171.                     ], Response::HTTP_OK);
  172.                 }
  173.                 
  174.             } 
  175.         }
  176.         return new JsonResponse([
  177.             'login_url' => null
  178.         ], Response::HTTP_NO_CONTENT);
  179.     }
  180.     /**
  181.      * @Route("/sso-login", name="app_front_sso_login")
  182.      */
  183.     public function ssoLogin(LoginLinkHandlerInterface $loginLinkHandlerUserRepository $userRepositoryRequest $request): Response
  184.     {
  185.         if ($request->isXmlHttpRequest()) {
  186.             $email $request->request->get('email');
  187.             $user $userRepository->findOneBy(['email' => $email]);
  188.             if ($user !== null) {
  189.                 $loginLinkDetails $loginLinkHandler->createLoginLink($user);
  190.                     $loginLink $loginLinkDetails->getUrl();
  191.     
  192.                     return new JsonResponse([
  193.                         'login_url' => $loginLink
  194.                     ], Response::HTTP_OK);
  195.             } 
  196.         }
  197.         return new JsonResponse([
  198.             'login_url' => null
  199.         ], Response::HTTP_NO_CONTENT);
  200.     }
  201.     /**
  202.      * @Route("/visiteur/details", name="app_front_visitor_details_page")
  203.      */
  204.     public function visitorDetailsPage(Request $requestManagerRegistry $doctrine): Response
  205.     {
  206.         $entityManager $doctrine->getManager();
  207.         $visitor = new User();
  208.         $form $this->createForm(VisitorDetailType::class, $visitor);
  209.         $form->handleRequest($request);
  210.         if ($form->isSubmitted() && $form->isValid()) {
  211.             $session = new Session();
  212.             if ($session->has('visitor-email')) {
  213.                 $visitor->setEmail($session->get('visitor-email'));
  214.                 $visitor->setRoles(['ROLE_VISITOR']);
  215.             } else {
  216.                 return $this->redirectToRoute("app_front_visitor_registration_page");
  217.             }
  218.             $entityManager->persist($visitor);
  219.             $entityManager->flush();
  220.             return $this->redirectToRoute("app_front_homepage");
  221.         }
  222.         return $this->render('front/pages/authentication/visitor_registration_details_page.html.twig', [
  223.             'form' => $form->createView(),
  224.         ]);
  225.     }
  226.     /**
  227.      * @Route("/message", name="app_front_message_page")
  228.      */
  229.     public function messagePage(Request $request): Response
  230.     {
  231.         return $this->render('front/pages/random_page/message.html.twig');
  232.     }
  233.     /**
  234.      * @Route("/bienvenue", name="app_front_welcome_page")
  235.      */
  236.     public function welcomePage(Request $request): Response
  237.     {
  238.         $user = new User();
  239.         $form $this->createForm(UserType::class, $user);
  240.         $form->handleRequest($request);
  241.         if ($form->isSubmitted() && $form->isValid()) {
  242.             return $this->redirectToRoute("app_front_homepage");
  243.         }
  244.         return $this->render('front/pages/authentication/welcome_page.html.twig', [
  245.             'form' => $form->createView(),
  246.         ]);
  247.     }
  248.     /**
  249.      * @Route("/quiz", name="app_front_dashboard_quiz_page")
  250.      */
  251.     public function quiz(): Response
  252.     {
  253.         $user $this->getUser();
  254.         return $this->render('dashboard/quiz.html.twig', [
  255.             'controller_name' => 'DashboardController',
  256.             'user'=>$user
  257.         ]);
  258.     }
  259.     /**
  260.      * @Route("/jeux", name="app_front_game_page")
  261.      */
  262.     public function game(): Response
  263.     {
  264.         return $this->render('front/game/index.html.twig', [
  265.             'user' => $this->getUser()
  266.         ]);
  267.     }
  268.     /**
  269.       * @Route("/jeux/quiz", name="app_front_game_quiz_time_page",  methods={"GET"})
  270.       */
  271.     public function playQuizTime(Request $request): Response
  272.     {
  273.         $user $this->getUser();
  274.         $game = [
  275.              "question" => "Quand et par qui a été fondé COFINA ?",
  276.              "response_1" => "Jean Luc GASSE, 1999",
  277.              "response_2" => "Jean PIQUET, 2005",
  278.              "response_3" => "Carlos GOSHN, 2001",
  279.              "response_4" => "Jean-Luc KONAN, 2003",
  280.              "number_of_response" => 1,
  281.              "correct_response" => "Carlos GOSHN, 2001"
  282.          ];
  283.         return $this->render('front/game/quiz-time.html.twig', [
  284.             'controller_name' => 'QuizTimeController',
  285.             'user'=>$user,
  286.             'game' => $game,
  287.             'score' => 0
  288.         ]);
  289.     }
  290. }