src/Controller/FrontController.php line 100

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Review;
  4. use App\Entity\SiteSetting;
  5. use App\Form\ContactType;
  6. use App\Repository\AbonnementItemRepository;
  7. use App\Repository\AbonnementRepository;
  8. use App\Repository\CategorieRepository;
  9. use App\Repository\CoursRepository;
  10. use App\Repository\EleveRepository;
  11. use App\Repository\FormationRepository;
  12. use App\Repository\ReviewRepository;
  13. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  18. use Symfony\Component\Mailer\MailerInterface;
  19. use Symfony\Component\Mime\Address;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. /**
  22.  * Ce controller contient toutes les methodes utiles pour le fonctionnement du site web
  23.  */
  24. class FrontController extends AbstractController
  25. {
  26.     #[Route('/'name'app_front')]
  27.     public function index(Request $requestEleveRepository $eleveRepositoryCategorieRepository $categorieRepositoryCoursRepository $coursRepositoryReviewRepository $reviewRepository): Response
  28.     {
  29.         $categories = [];
  30.         foreach ($categorieRepository->findBy(['isSubCategory'=>false,], [], 6) as $category) {
  31.             $categories[] = [
  32.                 'category' => $category,
  33.                 'courses' => $coursRepository->findBy(['categorie' => $category'isValidated' => true], ['vues' => 'DESC'], 8)
  34.             ];
  35.         }
  36.         return $this->render('front/home/index.html.twig', [
  37.             'controller_name' => 'FrontController',
  38.             'categories' => $categories,
  39.             'trendingCourses' => $coursRepository->findBy(['isValidated' => true], ['isFree' => 'ASC''review' => 'DESC''createdAt' => 'DESC'], 6),
  40.             'topReviews' => $reviewRepository->findBy([], ['rating' => 'DESC''createdAt' => 'DESC'], 2),
  41.             'dailyStudents' => $eleveRepository->findBy([], ['joinAt' => 'DESC'], 4),
  42.             'isHomePage' => true,
  43.         ]);
  44.     }
  45.     #[Route('/about-us'name'app_front_about')]
  46.     public function about(): Response 
  47.     {
  48.         return $this->render('front/about/index.html.twig', [
  49.             'isAboutPage' => true,
  50.         ]);
  51.     }
  52.     #[Route('/contact-us'name'app_front_contact')]
  53.     public function contact(Request $requestMailerInterface $mailerSessionInterface $session): Response
  54.     {
  55.         $contactForm $this->createForm(ContactType::class);
  56.         $contactForm->handleRequest($request);
  57.         if ($contactForm->isSubmitted() && $contactForm->isValid()) {
  58.             $siteSettings $session->get('siteSettings');
  59.             $supportEmail 'no-reply@kulmapeck.com';
  60.             if ($siteSettings instanceof SiteSetting) {
  61.                 $supportEmail $siteSettings->getSupportEmail();
  62.             }
  63.             $email = (new TemplatedEmail())
  64.                 ->from(new Address($contactForm->get('email')->getData(), $contactForm->get('name')->getData()))
  65.                 ->to($supportEmail)
  66.                 ->subject("Kulmapeck contact message")
  67.                 ->htmlTemplate('front/contact/email.html.twig')
  68.                 ->context([
  69.                     'message' => $contactForm->get('message')->getData()
  70.                 ])
  71.             ;
  72.             $mailer->send($email);
  73.             $this->addFlash("messageSend""Your message has been send");
  74.             return $this->redirectToRoute('app_front_contact');
  75.         }
  76.         return $this->render('front/contact/index.html.twig', [
  77.             'isContactPage' => true,
  78.             'contactForm' => $contactForm->createView()
  79.         ]);
  80.     }
  81.     #[Route('/header-categories'name'app_front_header_categories')]
  82.     public function showHeaderCategories(CategorieRepository $categorieRepository): Response 
  83.     {
  84.         return $this->render('front/home/header/categories.html.twig', [
  85.             'categories' => $categorieRepository->findBy(['isSubCategory' => false], ['name' => 'ASC'], 11)
  86.         ]);
  87.     }
  88.     #[Route('/header-courses'name'app_front_header_courses_and_formations')]
  89.     public function showHeaderCourses(CategorieRepository $categorieRepositoryCoursRepository $coursRepositoryFormationRepository $formationRepository): Response
  90.     {
  91.         return $this->render('front/home/header/courses.html.twig', [
  92.             'categories' => $categorieRepository->findBy(['isSubCategory' => false], ['name' => 'ASC'], 12),
  93.             'lastCourses' => $coursRepository->findBy(['isValidated' => true], ['createdAt' => 'DESC''vues' => 'DESC'], 8)
  94.         ]);
  95.     }
  96.     #[Route('/subscriptions-plans'name'app_plan')]
  97.     public function plan(Request $requestAbonnementItemRepository $abonnementItemRepositoryEleveRepository $eleveRepositoryAbonnementRepository $abonnementRepository): Response
  98.     {
  99.         if ($request->query->get('message') === 'chat') {
  100.             $this->addFlash('warning''You need a premium account to access chat features.');
  101.         }
  102.         $eleve $eleveRepository->findOneBy(['utilisateur' => $this->getUser()]);
  103.         if ($eleve && $eleve->isIsPremium()) {
  104.             $this->addFlash('success'"Vous êtes déjà premium !");
  105.             return $this->redirectToRoute('app_student_subscriptions');
  106.         }
  107.         return $this->render('front/plan/index.html.twig', [
  108.             'plans' => $abonnementRepository->findBy([], ['montant' => 'ASC']),
  109.             'abonnementItems' => $abonnementItemRepository->findAll(),
  110.         ]);
  111.     }
  112.     #[Route('/become-teacher'name'app_become_teacher')]
  113.     public function becomeTeacher(Request $requestMailerInterface $mailer): Response
  114.     {
  115.         $contactForm $this->createForm(ContactType::class);
  116.         $contactForm->handleRequest($request);
  117.         if ($contactForm->isSubmitted() && $contactForm->isValid()) {
  118.             $session $request->getSession();
  119.             $siteSettings $session->get('siteSettings');
  120.             $supportEmail 'no-reply@kulmapeck.com';
  121.             if ($siteSettings instanceof SiteSetting) {
  122.                 $supportEmail $siteSettings->getSupportEmail();
  123.             }
  124.             $email = (new TemplatedEmail())
  125.                 ->from(new Address($contactForm->get('email')->getData(), $contactForm->get('name')->getData()))
  126.                 ->to($supportEmail)
  127.                 ->subject("Kulmapeck contact message")
  128.                 ->htmlTemplate('front/contact/email.html.twig')
  129.                 ->context([
  130.                     'message' => $contactForm->get('message')->getData()
  131.                 ])
  132.             ;
  133.             $mailer->send($email);
  134.             $this->addFlash("messageSend""Your message has been send");
  135.             return $this->redirectToRoute('app_front_contact');
  136.         }
  137.         return $this->render('front/about/become_teacher.html.twig', [
  138.             'isAboutPage' => true,
  139.             'contactForm' => $contactForm->createView(),
  140.         ]);
  141.     }
  142. }