<?php
namespace App\Controller;
use App\Entity\CronLog;
use App\Entity\SubscriptionPlanPrice;
use App\Repository\CartDomainRepository;
use App\Repository\CartRepository;
use App\Repository\CartWebhostingRepository;
use App\Repository\CronLogRepository;
use App\Repository\PaymentRepository;
use App\Repository\ProductRepository;
use App\Repository\SubscriptionPlanPriceRepository;
use App\Service\DomainService;
use App\Service\InvoiceService;
use DateTime;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\Session;
class SiteController extends AbstractController
{
private string $sessionId;
public function __construct(private RequestStack $request)
{
if (!$this->request->getSession()) {
$session = new Session();
$session->start();
$this->sessionId = $session->getId();
} else {
$this->sessionId = $this->request->getSession()->getId();
}
}
#[Route('/', name: 'app_home', methods: ['GET'])]
public function index(): Response
{
return $this->redirectToRoute('home', ['_locale' => 'de'], Response::HTTP_SEE_OTHER);
}
#[Route(path: [
'de' => '/de/unsere-produkte',
'en' => '/en/our-products',
'es' => '/es/nuestros-productos'
], name: 'home', methods: ['GET'])]
#[Route(['de' => '/de/unsere-produkte'], name: 'app_home', methods: ['GET'])]
public function products(ProductRepository $productRepository, CartWebhostingRepository $cartWebhostingRepository, CartDomainRepository $cartDomainRepository): Response
{
$itemsInWebhostingCart = $cartWebhostingRepository->findOneBy(['session_id' => $this->sessionId]);
if ($itemsInWebhostingCart) {
$domains = $itemsInWebhostingCart->getCartDomains();
foreach ($domains as $domain) {
$cartDomainRepository->remove($domain, true);
}
$cartWebhostingRepository->remove($itemsInWebhostingCart, true);
}
return $this->render('site/index.html.twig', [
'session_id' => $this->sessionId,
'products' => $productRepository->findBy(['is_active' => true, 'is_public' => true], ['id' => 'ASC']),
'amount' => $productRepository->getAmount(),
]);
}
#[Route(path: [
'de' => '/de/domains',
'en' => '/en/domains',
'es' => '/es/dominios'
], name: 'home_domains', methods: ['GET', 'POST'])]
public function domains(Request $request, DomainService $domainService, CartWebhostingRepository $cartWebhostingRepository, CartDomainRepository $cartDomainRepository): Response
{
if ($request->isMethod('POST')) {
$submittedToken = $request->request->get('_csrf_token');
if ($this->isCsrfTokenValid('checkDomain', $submittedToken)) {
$domainName = $request->request->get('domain');
$response = $domainService->checkDomain($domainName);
return $this->redirectToRoute('home_domains_check', ['check' => $response, 'domain' => $domainName], Response::HTTP_SEE_OTHER);
}
}
/*
$itemsInWebhostingCart = $cartWebhostingRepository->findOneBy(['session_id' => $this->sessionId]);
if ($itemsInWebhostingCart) {
$domains = $itemsInWebhostingCart->getCartDomains();
foreach ($domains as $domain) {
$cartDomainRepository->remove($domain, true);
}
$cartWebhostingRepository->remove($itemsInWebhostingCart, true);
}
*/
$domainsInCart = $cartDomainRepository->findBy(['session_id' => $this->sessionId]);
return $this->render('site/domain.html.twig', [
'session_id' => $this->sessionId,
'is_result' => false,
'domains_in_cart' => $domainsInCart,
]);
}
#[Route(path: [
'de' => '/de/domain-check',
'en' => '/en/domain-check',
'es' => '/es/comprobacion-de-dominio'
], name: 'home_domains_check', methods: ['GET', 'POST'])]
public function domainCheck(Request $request, DomainService $domainService, CartDomainRepository $cartDomainRepository): Response
{
$checkResult = $request->get('check');
$domain = $request->get('domain');
$additionalDomainsAvailable = [];
$domainsInCart = $cartDomainRepository->findBy(['session_id' => $this->sessionId]);
if (!$checkResult) {
$additionalDomains = $domainService->checkAdditionalTld($domain);
foreach ($additionalDomains as $domainName => $value) {
$additionalDomainsAvailable[] = $domainName;
}
}
return $this->render('site/domain.html.twig', [
'session_id' => $this->sessionId,
'result' => $checkResult,
'is_result' => true,
'domain_name' => $domain,
'additional_domains' => $additionalDomainsAvailable,
'domains_in_cart' => $domainsInCart,
]);
}
#[Route('/calc-price', name: 'app_calc_price', methods: ['GET', 'POST'])]
public function calcBasePriceUser(Request $request, SubscriptionPlanPriceRepository $subscriptionPlanPriceRepository): Response
{
$product = $request->query->get('product');
$plan = $request->query->get('plan');
$subscriptionPlanPrices = $subscriptionPlanPriceRepository->findBy(['product' => $product], []);
$amountSubscriptionPlanPrices = count($subscriptionPlanPrices);
/**
* @var SubscriptionPlanPrice $subscriptionPlanPrice
*/
$subscriptionPlanPrice = $subscriptionPlanPriceRepository->findOneBy(['product' => $product, 'subscription_plan' => $plan]);
return $this->render('site/partials/base-price.html.twig', [
'basePrice' => $subscriptionPlanPrice->getSinglePriceMonthUser(),
'amount' => $amountSubscriptionPlanPrices,
]);
}
#[Route('/init', name: 'app_init_invoice', methods: ['GET', 'POST'])]
public function initInvoice(InvoiceService $invoiceService)
{
$actions = $invoiceService->findOpenSubscriptions();
//dd($actions);
$invoiceService->logData($actions);
return $this->render('site/init.html.twig', [
'message' => json_encode($actions),
]);
}
#[Route(path: [
'de' => '/de/user-check',
'en' => '/en/user-check',
'es' => '/es/comprobacion-de-usuario'
], name: 'home_user_check', methods: ['GET', 'POST'])]
public function checkUser(DomainService $domainService)
{
$response = $domainService->checkUserExist(13);
$contactId = $response['PROPERTY']['CONTACT'][0];
return $response;
}
}