src/Controller/Front/HomeController.php line 60

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