<?php
namespace App\Controller\FrontendShop;
use App\Entity\Gos\Category;
use App\Entity\Gos\PortalSettings;
use App\Entity\Gos\ProductAssociation;
use App\Entity\Gos\Tmpl\Template as TemplateEntity;
use App\Entity\Gos\Tmpl\TemplateType;
use App\Utils\Eforum\ProductFeed;
use App\Utils\Encryption;
use App\Utils\MailerUtils;
use App\Utils\TemplateView;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class StaticPageController extends AbstractController
{
private EntityManagerInterface $em;
private TemplateView $templateView;
public function __construct(EntityManagerInterface $em, TemplateView $templateView)
{
$this->em = $em;
$this->templateView = $templateView;
}
/**
* @Route("/send-contact-email", name="efSendContactEmail", methods={"POST"})
*/
public function contactEmailAction(Request $request, Encryption $encryption, MailerUtils $mailerUtils): Response
{
$data = $request->request->all();
if (isset($data['encryptedEmail']) && isset($data['publicToken']))
{
$topic = 'kontakt z wydawcÄ…';
$from = $encryption->decrypt($data['encryptedEmail'], $data['publicToken']);
}
else
{
$topic = 'pytanie od klienta';
$from = $_ENV['EFORUM_CONTACT_EMAIL_FROM'];
}
$html = $this->render('frontend-eforum/email/contact.html.twig', [
'data' => $data
]);
$isSent = $mailerUtils->sendSimpleMail(
'e-forum.pl ' . $topic,
$from,
$_ENV['EFORUM_CONTACT_EMAIL_TO'],
$html
);
return new Response($isSent);
}
/**
* @Route("/sitemap.xml", defaults={"_format"="xml"}, name="efSitemap")
*/
public function sitemapAction(): Response
{
$urls = [];
$efPortalHash = $this->getParameter('ef_portal_settings');
$efPortalSettings = $this->em->getRepository(PortalSettings::class)->findOneByHash($efPortalHash);
$staticPages = $this->em->getRepository(TemplateType::class)->findBy(['enabledToLink' => true]);
foreach ($staticPages as $staticPage)
{
/** @var TemplateType $staticPage */
if (in_array($staticPage->getName(), ['rejestracja-sukces']))
{
continue;
}
$urls[] = $this->generateUrl('efShowDynamicTemplate', ['dynamicType' => $staticPage->getName()], false);
}
$categories = $this->em->getRepository(Category::class)->findByPortalSettings($efPortalSettings);
foreach ($categories as $category)
{
/** @var Category $category */
$urls[] = $this->generateUrl('category_show', ['category' => $category->getCategorySlug()], false);
foreach ($category->getProductAssociations() as $productAssociation)
{
/** @var ProductAssociation $productAssociation */
if ($productAssociation->getProductMainType() !== null)
{
$urls[] = $this->generateUrl('category_show', [
'category' => $category->getCategorySlug(),
'productType' => $productAssociation->getProductMainType()->getSlug()
], false);
if ($category->getParent() !== null)
{
$urls[] = $this->generateUrl('category_show', [
'category' => $category->getParent()->getCategorySlug(),
'productType' => $productAssociation->getProductMainType()->getSlug()
], false);
}
}
}
}
$products = $this->em->getRepository(ProductAssociation::class)->findAll();
foreach ($products as $product)
{
if ($product->getIsHidden() === false)
{
/** @var ProductAssociation $product */
$urls[] = $this->generateUrl('efShowProduct', [
'categorySlug' => $product->getParentCategorySlug(),
'categoryChildSlug' => $product->getCategorySlug(),
'productAssociationSlug' => $product->getSlug()
], false);
}
}
foreach ($urls as $url)
{
$httpsUrls[] = str_replace('http://', 'https://', $url);
}
return $this->render('/frontend-eforum/sitemap.xml.twig', ['urls' => $httpsUrls]);
}
/**
* @Route("/feed.xml", defaults={"_format"="xml"}, name="efProductFeed")
* @Route("/feed-eforum.xml", defaults={"_format"="xml"}, name="efProductEforumFeed")
*/
public function productFeedAction(ProductFeed $productFeedUtil,Request $request): Response
{
$isEforumFeed = $request->get('_route') === 'efProductEforumFeed';
return new Response($productFeedUtil->generateXMLProductFeed($isEforumFeed)->asXML());
}
/**
* @Route("/rejestracja-sukces", name="efRegisterSuccess")
*/
public function registerSuccessAction(Request $request): Response
{
$userEmail = $request->getSession()->get('email');
$eventRegisterEF = $request->getSession()->get('eventRegisterEF');
if (!is_null($eventRegisterEF)) $request->getSession()->set('eventRegisterEF', null);
$request->getSession()->getFlashBag()->clear();
return $this->render('frontend-eforum/security/registerSuccess.html.twig', [
'userEmail' => $userEmail,
'sentAgain' => $request->query->get('sentAgain'),
'eventRegisterEF' => $eventRegisterEF
]);
}
/**
* @Route("/{dynamicType}", name="efShowDynamicTemplate",
* requirements={"dynamicType"="^(?!(logowanie|login_check|logout|rejestracja|reset|wydarzenia|voucher)\/?(\/.+)?$).+$"})
*/
public function dynamicTypeAction($dynamicType = 'strona-glowna'): Response
{
$parameters = $this->templateData($dynamicType);
if ($dynamicType !== 'strona-glowna')
{
$parameters['breadcrumbs'][] = array(
'name' => ucwords(str_replace('-', ' ', $dynamicType))
);
}
return $this->render('/frontend-eforum/template-base.html.twig', $parameters);
}
private function templateData(string $templateType)
{
$template = $this->em->getRepository(TemplateEntity::class)->findForStaticPage($templateType);
if ($template === null)
{
throw $this->createNotFoundException();
}
$modules = $this->templateView->getView($template);
if ($modules === null)
{
return new Response('Template for ' . $templateType . ' is empty');
}
$parameters = $this->templateView->getExtraParameters($template);
$parameters['modules'] = $modules['all'];
$parameters['footerModules'] = $modules['footerInjected'];
$parameters['templateEntity'] = $template;
return $parameters;
}
}