src/Controller/Front/HomeController.php line 65

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use App\Repository\LocaleRepository;
  9. use App\Repository\Currency\CurrencyRepository;
  10. use App\Repository\Category\CategoryRepository;
  11. use App\Repository\Testimonial\TestimonialRepository;
  12. use App\Repository\Slide\SlideRepository;
  13. use App\Repository\Newsletter\NewsletterRepository;
  14. use App\Entity\Newsletter\Newsletter;
  15. use App\Form\Newsletter\NewsletterType;
  16. use Symfony\Component\HttpFoundation\Session\Session;
  17. use App\Repository\Course\PlanRepository;
  18. use App\Repository\Article\ServiceRepository;
  19. use Knp\Component\Pager\PaginatorInterface;
  20. use App\Entity\Booking\Booking;
  21. use App\Form\Booking\BookingType;
  22. class HomeController extends AbstractController
  23. {
  24.     private SessionInterface $session;
  25.     private string $theme;
  26.     /**
  27.      * @param BannerRepository $bannerRepository
  28.      * @param Session $session
  29.      */
  30.     public function __construct(SessionInterface $session)
  31.     {
  32.         $this->session $session;
  33.         $this->theme $this->session->get('theme''horse');
  34.     }
  35.     public function index(Request $requestPlanRepository $planRepositoryServiceRepository $serviceRepositoryPaginatorInterface $paginator): Response
  36.     {
  37.         $localeCode $request->getLocale();
  38.         $theme $this->theme;
  39.         $booking = new Booking();
  40.         $form $this->createForm(BookingType::class, $booking);
  41.         $plans $planRepository->findPlans($localeCode$theme);
  42.         $query $serviceRepository->findServicesQuery($localeCode);
  43.         $services $paginator->paginate($query14);
  44.         $bookingForm $form->createView();
  45.         return $this->render('front/home/index.html.twig'compact('plans''theme''services''bookingForm'));
  46.     }
  47.     public function changeTheme(Request $request): Response
  48.     {
  49.         /** @var Session $session */
  50.         $session $request->getSession();
  51.         $session->set('theme'$request->query->get('theme'));
  52.         return new RedirectResponse($request->headers->get('referer'));
  53.     }
  54.     public function languages(Request $requestLocaleRepository $repository): Response
  55.     {
  56.         $languages $repository->findAll();
  57.         $route $request->get('route_name') ?? 'front_homepage';
  58.         $parameters = !empty($request->get('route_parameters')) ? json_decode($request->get('route_parameters'), true) : [];
  59.         return $this->render('front/home/languages.html.twig'compact('languages''route''parameters'));
  60.     }
  61.     public function currencies(Request $requestSessionInterface $sessionCurrencyRepository $repository$currency null): Response
  62.     {
  63.         if (null !== $currency) {
  64.             $currency $repository->findOneByCode($currency);
  65.             if ($currency && $ratio $this->getCurrencyRatio($currency)) {
  66.                 $session->set('currency.code'$currency->getCode());
  67.                 $session->set('currency.ratio'$ratio);
  68.             }
  69.             $referer $request->headers->get('referer');
  70.             return new RedirectResponse($referer);
  71.         }
  72.         if (!$session->has('currency.code') || empty($session->get('currency.code')) ) {
  73.             $defaultCurrencyCode $this->getParameter('default_currency');
  74.             $currency $repository->findOneByCode($defaultCurrencyCode);
  75.             if ($currency && $ratio $this->getCurrencyRatio($currency)) {
  76.                 $session->set('currency.code'$currency->getCode());
  77.                 $session->set('currency.ratio'$ratio);
  78.             }
  79.         }
  80.         $selectedCurrency $session->get('currency.code');
  81.         $currencies $repository->findAll();
  82.         return $this->render('front/home/currencies.html.twig'compact('currencies''selectedCurrency'));
  83.     }
  84.     private function getCurrencyRatio($currency)
  85.     {
  86.         $exchangeRate $currency->getExchangeRate();
  87.         return $exchangeRate && $exchangeRate->isEnabled() ? $exchangeRate->getRatio() : false;
  88.     }
  89.     public function menu(Request $requestCategoryRepository $repository$type): Response
  90.     {
  91.         $localeCode $request->getLocale();
  92.         $categories $repository->getCategories($localeCode);
  93.         return $this->render("front/includes/menu-$type-categories.html.twig"compact('categories'));
  94.     }
  95.     public function slides(Request $requestSlideRepository $repository$page 'home'): Response
  96.     {
  97.         $localeCode $request->getLocale();
  98.         $theme $request->getSession()->get('theme''horse');
  99.         $slides $repository->findSlides($localeCode$page$theme);
  100.         return $this->render('front/home/slides.html.twig'compact('slides'));
  101.     }
  102.     public function newsletter(Request $requestNewsletterRepository $repository): Response
  103.     {
  104.         $newsletter = new Newsletter();
  105.         $form $this->createForm(NewsletterType::class, $newsletter);
  106.         $form->handleRequest($request);
  107.         if ($form->isSubmitted() && $form->isValid()) {
  108.             $exist $repository->findOneByEmail($newsletter->getEmail());
  109.             if (!$exist) {
  110.                 $entityManager $this->getDoctrine()->getManager();
  111.                 $entityManager->persist($newsletter);
  112.                 $entityManager->flush();
  113.             }
  114.             $referer $request->headers->get('referer');
  115.             return $this->redirect($referer);
  116.         }
  117.         $newsletterForm $form->createView();
  118.         $sidebar $request->query->has('type') ? '_' $request->query->get('type') : '';
  119.         return $this->render('front/includes/newsletter' $sidebar '.html.twig'compact('newsletterForm'));
  120.     }
  121.     public function testimonials(Request $requestTestimonialRepository $testimonialRepository$mode 'dark'): Response
  122.     {
  123.         $localeCode $request->getLocale();
  124.         $testimonials $testimonialRepository->recentTestimonials($localeCode);
  125.         return $this->render('front/includes/testimonial.html.twig'compact('testimonials''mode'));
  126.     }
  127. }