src/Controller/SiteController.php line 60

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Repository\EvenementRepository;
  4. use App\Repository\FactureCandidatRepository;
  5. use App\Repository\FactureFormateurRepository;
  6. use App\Repository\ModuleRepository;
  7. use App\Repository\InscriptionRepository;
  8. use App\Repository\SeanceRepository;
  9. use App\Repository\UserRepository;
  10. use App\Repository\CycleRepository;
  11. use App\Repository\SessionRepository;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  18. use Symfony\Component\HttpFoundation\RedirectResponse;
  19. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  20. use App\Entity\Inscription;
  21. use App\Entity\InscriptionModule;
  22. use App\Form\DemandeInscriptionType;
  23. use App\Entity\FactureCandidat;
  24. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  25. use Symfony\Component\HttpFoundation\File\UploadedFile;
  26. use Symfony\Component\String\Slugger\SluggerInterface;
  27. use DateTime;
  28. use Dompdf\Dompdf;
  29. use Dompdf\Options;
  30. use Symfony\Component\Mailer\MailerInterface;
  31. use App\Factory\Email;
  32. use App\Entity\User;
  33. use App\Entity\Cycle;
  34. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  35. class SiteController extends AbstractController
  36. {
  37.     public function __construct(private UrlGeneratorInterface $urlGenerator, private MailerInterface $mailer, private Email $email)
  38.     {
  39.     }
  40.     #[Route('/'name'accueil_site')]
  41.     public function accueil(): Response
  42.     {
  43.         return $this->render('site/accueil.html.twig', [
  44.         ]);
  45.     }
  46.     #[Route('/contact'name'contact_site')]
  47.     public function contact(): Response
  48.     {
  49.         return $this->render('site/contact.html.twig', []);
  50.     }
  51.     #[Route('/espace-etudiant'name'profil_site')]
  52.     public function profil(SeanceRepository $seanceRepository): Response
  53.     {
  54.         $user $this->getUser();
  55.         $currentInscription null;
  56.         $insciptionSession 0;
  57.         foreach ($user->getInscriptions() as $inscription) {
  58.             if ($inscription->getSession()->getId() > $insciptionSession) {
  59.                 $insciptionSession $inscription->getSession()->getId();
  60.                 $currentInscription $inscription;
  61.             }
  62.         }
  63.         $seances $seanceRepository->findByInscription($currentInscription);
  64.         $facture null;
  65.         $factures $currentInscription->getFactureCandidats();
  66.         if (count($factures) > 0) {
  67.             $facture $factures[0];
  68.         }
  69.         if ($user && in_array('ROLE_CANDIDATE'$user->getRoles(), true)) {
  70.             return $this->render('site/profil.html.twig', [
  71.                 'user' => $user,
  72.                 'seances' => $seances,
  73.                 'facture' => $facture
  74.             ]);
  75.         } else {
  76.             return new RedirectResponse($this->urlGenerator->generate('accueil_site'));
  77.         }
  78.     }
  79.     #[Route('/nos-formations'name'formation_site')]
  80.     public function formations(): Response
  81.     {
  82.         return $this->render('site/formation.html.twig', []);
  83.     }
  84.     #[Route('/qui-sommes-nous'name'qui-sommes-nous_site')]
  85.     public function presentation(): Response
  86.     {
  87.         return $this->render('site/presentation.html.twig', []);
  88.     }
  89.     #[Route('/nos-evenements/{id}'name'details_evenement_site')]
  90.     public function evenement(Request $requestEvenementrepository $evenementrepository): Response
  91.     {
  92.         return $this->render('site/details-evenement.html.twig', [
  93.             'evenement' => $evenementrepository->find($request->attributes->get('id'))
  94.         ]);
  95.     }
  96.     #[Route('/nos-evenements'name'evenements_site')]
  97.     public function evenements(Evenementrepository $evenementrepository): Response
  98.     {
  99.         return $this->render('site/evenements.html.twig', [
  100.             'evenements' => $evenementrepository->findBy([], ['id' => 'DESC'])
  101.         ]);
  102.     }
  103.     #[Route('/releve'name'releve_note_site')]
  104.     public function bulletin(UserRepository $userRepository): Response
  105.     {
  106.         $user $this->getUser();
  107.         $currentInscription null;
  108.         $insciptionSession 0;
  109.         foreach ($user->getInscriptions() as $inscription) {
  110.             if ($inscription->getSession()->getId() > $insciptionSession) {
  111.                 $insciptionSession $inscription->getSession()->getId();
  112.                 $currentInscription $inscription;
  113.             }
  114.         }
  115.         $inscriptionModules $currentInscription->getInscriptionModules();
  116.         $moduleNotes null;
  117.         $nbNotes 0;
  118.         $somme 0;
  119.         foreach ($inscriptionModules as $inscriptionModule) {
  120.             $formateur $userRepository->findFormateurByModuleAndInscription($inscriptionModule->getModule()->getId(), $currentInscription);
  121.             $note[0] = $inscriptionModule->getModule()->getLibele();
  122.             $note[1] = $inscriptionModule->getNote();
  123.             $note[2] = "";
  124.             if ($formateur) {
  125.                 $note[2] = $formateur->getNom() . " " $formateur->getPrenom();
  126.             }
  127.             $moduleNotes[] = $note;
  128.             $somme += $note[1];
  129.             if ($note[1] != null && $note[1] != "")
  130.                 $nbNotes++;
  131.         }
  132.         $moyenne "--";
  133.         //if (count($inscriptionModules) == $nbNotes)
  134.         if ($nbNotes 0)
  135.             $moyenne $somme $nbNotes;
  136.         $pdfOptions = new Options();
  137.         // Police par défaut
  138.         $pdfOptions->set('defaultFont''Arial');
  139.         $pdfOptions->setIsRemoteEnabled(true);
  140.         // On instancie Dompdf
  141.         $dompdf = new Dompdf($pdfOptions);
  142.         $context stream_context_create([
  143.             'ssl' => [
  144.                 'verify_peer' => false,
  145.                 'verify_peer_name' => false,
  146.                 'allow_self_signed' => true,
  147.             ],
  148.         ]);
  149.         $dompdf->setHttpContext($context);
  150.         $html $this->renderView(
  151.             'inscription/releve-notes.html.twig',
  152.             [
  153.                 'moduleNotes' => $moduleNotes,
  154.                 'moyenne' => $moyenne,
  155.                 'currentInscription' => $currentInscription
  156.             ]
  157.         );
  158.         $dompdf->loadHtml($html);
  159.         $dompdf->setPaper('A3''portrait');
  160.         $dompdf->render();
  161.         // On génère un nom de fichier
  162.         $fichier 'releve-des-notes-' $currentInscription->getCandidat()->getNom() . '.pdf';
  163.         // On envoie le PDF au navigateur
  164.         return new Response($dompdf->output(), 200, [
  165.             'Content-Type' => 'application/pdf',
  166.             'Content-Disposition' => 'attachment; filename="' $fichier '"',
  167.         ]);
  168.     }
  169.     #[Route('/attestation'name'app_attestation_inscription'methods: ['GET''POST'])]
  170.     public function indexmail(
  171.         Request $request,
  172.         InscriptionRepository $inscriptionRepository
  173.     ): Response {
  174.         $candidat $this->getUser();
  175.         $id $candidat->getId();
  176.         $email $candidat->getEmail();
  177.         $adresse $candidat->getAdresse();
  178.         $zip $candidat->getCodePostal();
  179.         $ville $candidat->getVille();
  180.         $nom $candidat->getNom();
  181.         $tel $candidat->getTel();
  182.         $prenom $candidat->getPrenom();
  183.         $dateNaissance $candidat->getDateNaissance();
  184.         $currentInscription null;
  185.         $insciptionSession 0;
  186.         foreach ($candidat->getInscriptions() as $inscription) {
  187.             if ($inscription->getSession()->getId() > $insciptionSession) {
  188.                 $insciptionSession $inscription->getSession()->getId();
  189.                 $currentInscription $inscription;
  190.             }
  191.         }
  192.         $cycle $currentInscription->getCycle()->getLibele();
  193.         $pdfOptions = new Options();
  194.         // Police par défaut
  195.         $pdfOptions->set('defaultFont''Arial');
  196.         $pdfOptions->setIsRemoteEnabled(true);
  197.         // On instancie Dompdf
  198.         $dompdf = new Dompdf($pdfOptions);
  199.         $context stream_context_create([
  200.             'ssl' => [
  201.                 'verify_peer' => false,
  202.                 'verify_peer_name' => false,
  203.                 'allow_self_signed' => true,
  204.             ],
  205.         ]);
  206.         $dompdf->setHttpContext($context);
  207.         $html $this->renderView(
  208.             'inscription/attestationinscription.html.twig',
  209.             [
  210.                 'email' => $email,
  211.                 'adresse' => $adresse,
  212.                 'zip' => $zip,
  213.                 'ville' => $ville,
  214.                 'nom' => $nom,
  215.                 'prenom' => $prenom,
  216.                 'tel' => $tel,
  217.                 'id' => $id,
  218.                 'session' => $insciptionSession,
  219.                 'cycle' => $cycle,
  220.                 'dateNaissance' => $dateNaissance
  221.             ]
  222.         );
  223.         $dompdf->loadHtml($html);
  224.         $dompdf->setPaper('A3''portrait');
  225.         $dompdf->render();
  226.         // On génère un nom de fichier
  227.         $fichier 'attestation-inscription-' $prenom '.pdf';
  228.         // On envoie le PDF au navigateur
  229.         return new Response($dompdf->output(), 200, [
  230.             'Content-Type' => 'application/pdf',
  231.             'Content-Disposition' => 'attachment; filename="' $fichier '"',
  232.         ]);
  233.     }
  234.     #[Route('/telechargerfacture/{id}'name'app_facture_candidat_telecharger'methods: ['GET''POST'])]
  235.     public function telechargerFactureCandidat(
  236.         Request $request,
  237.         FactureCandidatRepository $factureCandidatRepository
  238.     ): Response {
  239.         $id $request->attributes->get('id');
  240.         $facture $factureCandidatRepository->find($id);
  241.         $factureId $facture->getId();
  242.         $candidat $facture->getInscription()->getCandidat();
  243.         $cycle $facture
  244.             ->getInscription()
  245.             ->getCycle()
  246.             ->getLibele();
  247.         $session $facture
  248.             ->getInscription()
  249.             ->getSession()
  250.             ->getLibele();
  251.         $inscriptions $facture->getInscription()->getInscriptionModules();
  252.         $email $candidat->getEmail();
  253.         $adresse $candidat->getAdresse();
  254.         $zip $candidat->getCodePostal();
  255.         $ville $candidat->getVille();
  256.         $nom $candidat->getNom();
  257.         $tel $candidat->getTel();
  258.         $prenom $candidat->getPrenom();
  259.         $pdfOptions = new Options();
  260.         // Police par défaut
  261.         $pdfOptions->set('defaultFont''Arial');
  262.         $pdfOptions->setIsRemoteEnabled(true);
  263.         // On instancie Dompdf
  264.         $dompdf = new Dompdf($pdfOptions);
  265.         $context stream_context_create([
  266.             'ssl' => [
  267.                 'verify_peer' => false,
  268.                 'verify_peer_name' => false,
  269.                 'allow_self_signed' => true,
  270.             ],
  271.         ]);
  272.         $dompdf->setHttpContext($context);
  273.         $html $this->renderView('facturemail/facturcandidatmail.html.twig', [
  274.             'factureId' => $factureId,
  275.             'facture' => $facture,
  276.             'email' => $email,
  277.             'adresse' => $adresse,
  278.             'zip' => $zip,
  279.             'ville' => $ville,
  280.             'nom' => $nom,
  281.             'prenom' => $prenom,
  282.             'tel' => $tel,
  283.             'cycle' => $cycle,
  284.             'session' => $session,
  285.             'inscriptions' => $inscriptions,
  286.         ]);
  287.         // $html = $this->renderView(
  288.         //     'facturemail/facturcandidatretenu.html.twig',
  289.         //     [
  290.         //         'factureId' => $factureId,
  291.         //         'email' => $email,
  292.         //         'adresse' => $adresse,
  293.         //         'zip' => $zip,
  294.         //         'ville' => $ville,
  295.         //         'nom' => $nom,
  296.         //         'prenom' => $prenom,
  297.         //         'tel' => $tel,
  298.         //         'cycle' => $cycle,
  299.         //         'session' => $session,
  300.         //         'inscriptions' => $inscriptions,
  301.         //     ]
  302.         // );
  303.         $dompdf->loadHtml($html);
  304.         $dompdf->setPaper('letter''portrait');
  305.         $dompdf->render();
  306.         // On génère un nom de fichier
  307.         $fichier 'facture-' $prenom '.pdf';
  308.         // On envoie le PDF au navigateur
  309.         return new Response($dompdf->output(), 200, [
  310.             'Content-Type' => 'application/pdf',
  311.             'Content-Disposition' => 'attachment; filename="' $fichier '"',
  312.         ]);
  313.     }
  314.     #[Route('/sendContactMail'name'envoi_mail_contact_site'methods: ['GET''POST'])]
  315.     public function new(
  316.         Request $request,
  317.     ): JsonResponse {
  318.         $TEMPLATE_CONTACT 'site/email-contact.html.twig';
  319.         $parameters = [
  320.             'nom' => $request->request->get('nom'),
  321.             'sujet' => $request->request->get('sujet'),
  322.             'email' => $request->request->get('email'),
  323.             'telephone' => $request->request->get('telephone'),
  324.             'message' => $request->request->get('message'),
  325.         ];
  326.         $email $this->email->create(
  327.             'contact@iaa-tunisie.tn',
  328.             ['helmi.mattoussi@gmail.com'],
  329.             'IAA - Contact',
  330.             $TEMPLATE_CONTACT,
  331.             $parameters
  332.         );
  333.         $res $this->mailer->send($email);
  334.         return new JsonResponse(['response' => $res]);
  335.     }
  336.     #[Route('/demande-inscrption'name'demande_inscription_site'methods: ['GET''POST'])]
  337.     public function demande(
  338.         Request $request,
  339.         InscriptionRepository $inscriptionRepository,
  340.         ModuleRepository $moduleRepository,
  341.         FactureCandidatRepository $factureCandidatRepository,
  342.         UserPasswordHasherInterface $userPasswordHasher,
  343.         UserRepository $userRepository,
  344.         CycleRepository $cycleRepository,
  345.         SessionRepository $sessionRepository
  346.     ): Response {
  347.         $factureCandidat = new FactureCandidat();
  348.         $candidat = new User();
  349.         $inscription = new Inscription();
  350.         $form $this->createForm(DemandeInscriptionType::class, $inscription);
  351.         $form->handleRequest($request);
  352.         #dd($request->request->all());
  353.         if (1) {
  354.             $dateCreation = new DateTime();
  355.             $candidat->setNom($request->request->get('firstName'));
  356.             $candidat->setPrenom($request->request->get('lastName'));
  357.             $candidat->setEmail($request->request->get('username'));
  358.             $candidat->setUsername($request->request->get('username'));
  359.             $comb =
  360.                 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  361.             $shfl str_shuffle($comb);
  362.             $password substr($shfl08);
  363.             $candidat->setRoles(["ROLE_CANDIDATE"]);
  364.             $candidat->setPassword(
  365.                 $userPasswordHasher->hashPassword($candidat$password)
  366.             );
  367.             $cycle $cycleRepository->find($request->request->get('cycle'));
  368.             $session $sessionRepository->getSessionActive();
  369.             $inscription->setDateCreation($dateCreation);
  370.             $inscription->setCandidat($candidat);
  371.             $inscription->setCycle($cycle);
  372.             $inscription->setSession($session);
  373.             $factureCandidat->setEtatPaiement(0);
  374.             $factureCandidat->setInscription($inscription);
  375.             $factureCandidat->setDate($dateCreation);
  376.             $modules $moduleRepository->findAll();
  377.             foreach ($modules as $module) {
  378.                 $inscription->addInscriptionModule(
  379.                     new InscriptionModule($module)
  380.                 );
  381.             }
  382.             $userRepository->save($candidattrue);
  383.             $cycleRepository->save($cycletrue);
  384.             $inscriptionRepository->save($inscriptiontrue);
  385.             $factureCandidatRepository->save($factureCandidattrue);
  386.             $candidate_template 'site/email-demande-inscription-candidat.html.twig';
  387.             $parameters = [
  388.                 'nom' => $request->request->get('firstName'),
  389.                 'email' => $request->request->get('username'),
  390.                 'prenom' => $request->request->get('lastName'),
  391.                 'cycle' => $cycle->getLibele()
  392.             ];
  393.             $email $this->email->create(
  394.                 'contact@iaa-tunisie.tn',
  395.                 [$request->request->get('username')],
  396.                 'IAA - Demande de pré-inscription',
  397.                 $candidate_template,
  398.                 $parameters
  399.             );
  400.             $res $this->mailer->send($email);
  401.             $admin_template 'site/email-demande-inscription-admin.html.twig';
  402.             $email $this->email->create(
  403.                 'contact@iaa-tunisie.tn',
  404.                 ['helmi.mattoussi@gmail.com'],
  405.                 'IAA - Demande de pré-inscription',
  406.                 $admin_template,
  407.                 $parameters
  408.             );
  409.             $res $this->mailer->send($email);
  410.             return $this->redirectToRoute(
  411.                 'accueil_site',
  412.                 [],
  413.                 Response::HTTP_SEE_OTHER
  414.             );
  415.         }
  416.     }
  417. }