src/Controller/SiteController.php line 77

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\CronLog;
  4. use App\Entity\SubscriptionPlanPrice;
  5. use App\Repository\CartDomainRepository;
  6. use App\Repository\CartRepository;
  7. use App\Repository\CartWebhostingRepository;
  8. use App\Repository\CronLogRepository;
  9. use App\Repository\PaymentRepository;
  10. use App\Repository\ProductRepository;
  11. use App\Repository\SubscriptionPlanPriceRepository;
  12. use App\Service\DomainService;
  13. use App\Service\InvoiceService;
  14. use DateTime;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\RequestStack;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Symfony\Component\HttpFoundation\Session\Session;
  21. class SiteController extends AbstractController
  22. {
  23.     private string $sessionId;
  24.     public function __construct(private RequestStack $request)
  25.     {
  26.         if (!$this->request->getSession()) {
  27.             $session = new Session();
  28.             $session->start();
  29.             $this->sessionId $session->getId();
  30.         } else {
  31.             $this->sessionId $this->request->getSession()->getId();
  32.         }
  33.     }
  34.     #[Route('/'name'app_home'methods: ['GET'])]
  35.     public function index(): Response
  36.     {
  37.         return $this->redirectToRoute('home', ['_locale' => 'de'], Response::HTTP_SEE_OTHER);
  38.     }
  39.     #[Route(path: [
  40.         'de' => '/de/unsere-produkte',
  41.         'en' => '/en/our-products',
  42.         'es' => '/es/nuestros-productos'
  43.     ], name'home'methods: ['GET'])]
  44.     #[Route(['de' => '/de/unsere-produkte'], name'app_home'methods: ['GET'])]
  45.     public function products(ProductRepository $productRepositoryCartWebhostingRepository $cartWebhostingRepositoryCartDomainRepository $cartDomainRepository): Response
  46.     {
  47.         $itemsInWebhostingCart $cartWebhostingRepository->findOneBy(['session_id' => $this->sessionId]);
  48.         if ($itemsInWebhostingCart) {
  49.             $domains $itemsInWebhostingCart->getCartDomains();
  50.             foreach ($domains as $domain) {
  51.                 $cartDomainRepository->remove($domaintrue);
  52.             }
  53.             $cartWebhostingRepository->remove($itemsInWebhostingCarttrue);
  54.         }
  55.         return $this->render('site/index.html.twig', [
  56.             'session_id' => $this->sessionId,
  57.             'products'   => $productRepository->findBy(['is_active' => true'is_public' => true], ['id' => 'ASC']),
  58.             'amount'     => $productRepository->getAmount(),
  59.         ]);
  60.     }
  61.     #[Route(path: [
  62.         'de' => '/de/domains',
  63.         'en' => '/en/domains',
  64.         'es' => '/es/dominios'
  65.     ], name'home_domains'methods: ['GET''POST'])]
  66.     public function domains(Request $requestDomainService $domainServiceCartWebhostingRepository $cartWebhostingRepositoryCartDomainRepository $cartDomainRepository): Response
  67.     {
  68.         if ($request->isMethod('POST')) {
  69.             $submittedToken $request->request->get('_csrf_token');
  70.             if ($this->isCsrfTokenValid('checkDomain'$submittedToken)) {
  71.                 $domainName $request->request->get('domain');
  72.                 $response   $domainService->checkDomain($domainName);
  73.                 return $this->redirectToRoute('home_domains_check', ['check' => $response'domain' => $domainName], Response::HTTP_SEE_OTHER);
  74.             }
  75.         }
  76.         /*
  77.         $itemsInWebhostingCart = $cartWebhostingRepository->findOneBy(['session_id' => $this->sessionId]);
  78.         if ($itemsInWebhostingCart) {
  79.             $domains = $itemsInWebhostingCart->getCartDomains();
  80.             foreach ($domains as $domain) {
  81.                 $cartDomainRepository->remove($domain, true);
  82.             }
  83.             $cartWebhostingRepository->remove($itemsInWebhostingCart, true);
  84.         }
  85.         */
  86.         $domainsInCart $cartDomainRepository->findBy(['session_id' => $this->sessionId]);
  87.         return $this->render('site/domain.html.twig', [
  88.             'session_id'      => $this->sessionId,
  89.             'is_result'       => false,
  90.             'domains_in_cart' => $domainsInCart,
  91.         ]);
  92.     }
  93.     #[Route(path: [
  94.         'de' => '/de/domain-check',
  95.         'en' => '/en/domain-check',
  96.         'es' => '/es/comprobacion-de-dominio'
  97.     ], name'home_domains_check'methods: ['GET''POST'])]
  98.     public function domainCheck(Request $requestDomainService $domainServiceCartDomainRepository $cartDomainRepository): Response
  99.     {
  100.         $checkResult                $request->get('check');
  101.         $domain                     $request->get('domain');
  102.         $additionalDomainsAvailable = [];
  103.         $domainsInCart $cartDomainRepository->findBy(['session_id' => $this->sessionId]);
  104.         if (!$checkResult) {
  105.             $additionalDomains $domainService->checkAdditionalTld($domain);
  106.             foreach ($additionalDomains as $domainName => $value) {
  107.                 $additionalDomainsAvailable[] = $domainName;
  108.             }
  109.         }
  110.         return $this->render('site/domain.html.twig', [
  111.             'session_id'         => $this->sessionId,
  112.             'result'             => $checkResult,
  113.             'is_result'          => true,
  114.             'domain_name'        => $domain,
  115.             'additional_domains' => $additionalDomainsAvailable,
  116.             'domains_in_cart'    => $domainsInCart,
  117.         ]);
  118.     }
  119.     #[Route('/calc-price'name'app_calc_price'methods: ['GET''POST'])]
  120.     public function calcBasePriceUser(Request $requestSubscriptionPlanPriceRepository $subscriptionPlanPriceRepository): Response
  121.     {
  122.         $product $request->query->get('product');
  123.         $plan    $request->query->get('plan');
  124.         $subscriptionPlanPrices       $subscriptionPlanPriceRepository->findBy(['product' => $product], []);
  125.         $amountSubscriptionPlanPrices count($subscriptionPlanPrices);
  126.         /**
  127.          * @var SubscriptionPlanPrice $subscriptionPlanPrice
  128.          */
  129.         $subscriptionPlanPrice $subscriptionPlanPriceRepository->findOneBy(['product' => $product'subscription_plan' => $plan]);
  130.         return $this->render('site/partials/base-price.html.twig', [
  131.             'basePrice' => $subscriptionPlanPrice->getSinglePriceMonthUser(),
  132.             'amount'    => $amountSubscriptionPlanPrices,
  133.         ]);
  134.     }
  135.     #[Route('/init'name'app_init_invoice'methods: ['GET''POST'])]
  136.     public function initInvoice(InvoiceService $invoiceService)
  137.     {
  138.         $actions $invoiceService->findOpenSubscriptions();
  139.         //dd($actions);
  140.         $invoiceService->logData($actions);
  141.         return $this->render('site/init.html.twig', [
  142.             'message' => json_encode($actions),
  143.         ]);
  144.     }
  145.     #[Route(path: [
  146.         'de' => '/de/user-check',
  147.         'en' => '/en/user-check',
  148.         'es' => '/es/comprobacion-de-usuario'
  149.     ], name'home_user_check'methods: ['GET''POST'])]
  150.     public function checkUser(DomainService $domainService)
  151.     {
  152.         $response  $domainService->checkUserExist(13);
  153.         $contactId $response['PROPERTY']['CONTACT'][0];
  154.         return $response;
  155.     }
  156. }