<?php
namespace App\Controller;
use App\Maileon\MaileonService;
use App\Website\LinkGenerator\ProspexEventLinkGenerator;
use Doctrine\Common\Collections\Criteria;
use Exception;
use Carbon\Carbon;
use App\Traits\SiteAware;
use Karser\Recaptcha3Bundle\Validator\Constraints\Recaptcha3Validator;
use Pimcore\Model\DataObject;
use App\Form\Type\ContactType;
use App\Service\MailerService;
use Pimcore\Model\Document\Snippet;
use Pimcore\Model\Element\Tag;
use App\Helpers\HelperFunctions;
use App\Service\WishListService;
use Pimcore\Model\Document\Page;
use Pimcore\Model\DataObject\News;
use App\Traits\VerifyPreviewRequest;
use App\Traits\BreadcrumbForDocument;
use Doctrine\DBAL\Query\QueryBuilder;
use Pimcore\Model\DataObject\Contact;
use Pimcore\Controller\FrontendController;
use Pimcore\Model\DataObject\CoreShopUser;
use Pimcore\Model\DataObject\NewsCategory;
use Knp\Component\Pager\PaginatorInterface;
use Pimcore\Model\DataObject\CoreShopProduct;
use Psr\Container\NotFoundExceptionInterface;
use Symfony\Component\HttpFoundation\Request;
use Pimcore\Model\Search;
use Pimcore\Model\Search\Backend\Data\Listing;
use Psr\Container\ContainerExceptionInterface;
use Symfony\Component\HttpFoundation\Response;
use Pimcore\Twig\Extension\Templating\HeadMeta;
use Symfony\Component\Routing\Annotation\Route;
use Pimcore\Twig\Extension\Templating\Placeholder;
use Pimcore\Http\Request\Resolver\DocumentResolver;
use Symfony\Contracts\Translation\TranslatorInterface;
use App\Website\LinkGenerator\NewsCategoryLinkGenerator;
use Pimcore\Bundle\AdminBundle\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class DefaultController extends FrontendController
{
use VerifyPreviewRequest;
use BreadcrumbForDocument;
use SiteAware;
protected $specifications;
protected $properties;
protected $maxNumberOfComparedProducts;
private string $googleApiKey;
/**
* @param Request $request
* @return Response
* @Route("/coreshop_index", name="coreshop_index")
* coreshop defautl route overwrite
*/
public function coreshopIndexAction(Request $request): Response
{
return $this->redirectToRoute('profil');
}
/**
* @param Request $request
* @return void
* @Route("/t", name="teszt_action")
*/
public function tesztAction(Request $request)
{
$list = new \Pimcore\Model\DataObject\News\Listing();
$list->onCreateQueryBuilder(
function (\Doctrine\DBAL\Query\QueryBuilder $queryBuilder) use ($list) {
// $queryBuilder->andWhere('title IN (\':val\')');
// $queryBuilder->setParameter('1', ['asdas', 'asdas', 'asdasd'], \Doctrine\DBAL\Connection::PARAM_STR_ARRAY );
$queryBuilder->andWhere('title IN (\':val\')');
$queryBuilder->setParameter('val', ['asdas', 'asdas', 'asdasd']);
}
);
$list->load();
return new Response();
$folder = DataObject::getById(1);
$folder->getDao();
$qb = new QueryBuilder($folder->getDao()->db);
$qb->select('p')
->from('object_cs_product', 'p');
// $qb->andWhere('typeofwatch = ?1');
$qb->andWhere(
$qb->expr()->in('typeofwatch', array(':asd'))
);
$qb->setParameter(':asd', ['asd', 'asdasd', 'asddas', 'asasd'], \Doctrine\DBAL\Types\Types::STRING);
$sql = $qb->getSQL();
// $a = $qb->
return new Response();
}
/**
* checks the site requires login
* function call: if($this->needLoginCheck()) return $this->needLoginCheck();
*/
function needLoginCheck()
{
if (!$this->editmode && $this->document->getProperty("needLogin")) {
if (!$this->getUser()) {
$this->addFlash('warning', $this->document->getProperty("needLoginMessage"));
return $this->forward('CoreShop\Bundle\FrontendBundle\Controller\RegisterController::registerAction');
}
}
}
/**
* @param Request $request
* @return Response
*/
public function defaultAction(Request $request, Placeholder $placeholder): Response
{
if (!$this->document instanceof Snippet && $this->needLoginCheck()) {
return $this->needLoginCheck();
}
if ($this->document instanceof Page && $this->document->getFullPath() != '/') {
$bc[] = [
'title' => 'Főoldal',
'path' => '/'
];
$bc[] = [
'title' => $this->document->getTitle(),
'path' => null
];
$placeholder('breadcrumbNews')->set($bc);
}
$response = $this->render($this->document->getTemplate() ?? 'default/home.html.twig', [
'site' => $this->site,
'mainpage' => true,
'sclub' => $request->get('sclub'),
'clubsite' => $this->isSite('club'),
'boutiqueHost' => $this->getBoutiqueHost()
]);
return $response->getStatusCode() !== 200 && $request->get('ignore_errors') === true ? new Response() : $response;
}
/**
* @return Response
* @Route("/compare_table", name="compare_table", methods={"GET"})
*/
public function compareTableAction(Request $request, TranslatorInterface $translator): Response
{
if (!$request->isXMLHttpRequest()) {
return $this->redirect("/");
}
$session = $request->getSession();
if ($session->has('compareProduct')) {
$compareProductItems = $session->get('compareProduct');
} else {
$compareProductItems = [];
}
if (empty($compareProductItems) || count($compareProductItems) === 0) {
$compareProductItems = [];
}
$entries = new DataObject\CoreShopProduct\Listing();
$entries->setCondition("oo_id IN (?)", [array_keys($compareProductItems)]);
$compareProductItems = [];
foreach ($entries as $entry) { //session data refresh
$compareProductItems[$entry->getId()] = $entry;
}
$returnData = [];
foreach ($compareProductItems as $key => $item) {
$properties = [];
foreach ($this->properties as $key => $value) {
if ($key == 'caliberNumber') {
$caliber = $item->getCalibernumber();
$properties[$translator->trans('coreshop.details.' . $key)] = $caliber->getName();
} else if ($key == 'accuracy') {
$interval = $item->getAccuracyinterval();
switch ($interval) {
case 'nap':
$intervalName = 'naponta';
break;
case 'hónap':
$intervalName = 'havonta';
break;
case 'év':
$intervalName = 'évente';
break;
}
$properties[$translator->trans('coreshop.details.' . $key)] = '- ' . $item->get('accuracy2') . ' / +' . $item->get('accuracy') . ' másodperc ' . $intervalName;
} else {
$properties[$translator->trans('coreshop.details.' . $key)] = $item->get($key);
}
}
foreach ($this->specifications as $key => $value) {
$_value = $item->get($key);
if ($_value) {
$properties[$translator->trans('coreshop.details.' . $key)] = $_value;
if (is_array($value)) {
if (isset($value['append'])) {
$properties[$translator->trans('coreshop.details.' . $key)] .= " " . $value['append'];
}
}
} else {
$properties[$translator->trans('coreshop.details.' . $key)] = null;
}
}
$returnData[] = $properties;
}
$session->set('compareProduct', $compareProductItems);
return $this->render('seikoboutique/templates/bundles/CoreShopFrontendBundle/Product/_compare_window.html.twig', [
'returnData' => $returnData
]);
}
/**
* @Route("/update_compare_bar", name="update_compare_bar", methods={"POST"})
*/
public function updateCompareBar(Request $request): Response
{
if ($request->isXMLHttpRequest()) { // only ajax request allow
$session = $request->getSession();
if ($session->has('compareProduct')) {
$compareProductItems = $session->get('compareProduct');
} else {
$compareProductItems = [];
}
$newProductId = $request->get('newProductId');
$clearCompareItems = $request->get('clearCompareItems');
if (json_decode($clearCompareItems, true)) {
$compareProductItems = [];
$session->set('compareProduct', $compareProductItems);
return $this->render('seikoboutique/templates/bundles/CoreShopFrontendBundle/Product/_compare_window.html.twig');
}
if (!empty($newProductId)) {
if (isset($compareProductItems[$newProductId])) {
unset($compareProductItems[$newProductId]);
} else {
$product = CoreShopProduct::getById($newProductId);
if ($product instanceof CoreShopProduct) {
$compareProductItems[$newProductId] = $product;
}
}
}
if (isset($compareProductItems[$newProductId]) && count($compareProductItems) > $this->maxNumberOfComparedProducts) {
$n = count($compareProductItems) - $this->maxNumberOfComparedProducts;
array_splice($compareProductItems, -$n);
return new JsonResponse(['error' => "errorTooManyProducts"]);
}
$session->set('compareProduct', $compareProductItems);
return $this->render('seikoboutique/templates/bundles/CoreShopFrontendBundle/Product/_compare_window.html.twig');
}
return $this->redirect("/");
}
// /**
// * @return void
// * @Route("/oauthanswer", name="get_oauth_answer")
// */
// public function dumpOauthAnswerAction(Request $request): Response
// {
// // FB és Google esetén
// echo sprintf("<a href='http://localhost/api/user/login/social?code=%s&resourceOwner=google'>API LOGIN</a>",
// $request->get('code')
// );
//
// return new Response();
// }
protected function sanitizeUrlParams(Request $request, array $necessary): \Symfony\Component\HttpFoundation\RedirectResponse
{
$params = $request->query->all();
foreach ($params as $key => $param) {
if (!in_array($key, $necessary)) {
unset($params[$key]);
}
}
$newQuery = http_build_query($params);
$newUrl = $request->getSchemeAndHttpHost() . $request->getPathInfo() . '?' . $newQuery;
return $this->redirect($newUrl);
}
protected function urlParamsCheck(Request $request, array $necessary): bool
{
$params = $request->query->all();
foreach ($params as $key => $param) {
if (!in_array($key, $necessary)) {
return false;
}
}
return true;
}
/**
* @param Request $request
* @param PaginatorInterface $paginator
* @param Placeholder $placeholder
* @param WishListService $wishListService
* @return Response
* @Route("/kereso/{term}", name="news_search", requirements={"term"=".*"}, methods={"GET"})
*/
public function searchAction(Request $request, PaginatorInterface $paginator, Placeholder $placeholder, WishListService $wishListService): Response
{
if (!$this->urlParamsCheck($request, ['q', 'page'])) {
return $this->sanitizeUrlParams($request, ['q', 'page']);
}
$data = [];
$s = htmlspecialchars($request->get('q'));
$max_iterations = 10;
$iteration_count = 0;
while ((str_contains($s, '"') || str_contains($s, '&')) && $iteration_count < $max_iterations) {
$s = html_entity_decode($s, ENT_QUOTES | ENT_HTML5, 'UTF-8');
$iteration_count++;
}
if ($s && strlen($s) > 2) {
$backend = HelperFunctions::searchBackendCondition($s, ['News', 'CoreShopProduct']);
}
if (isset($backend['condition']) && isset($backend['order'])) {
$perPageAllowed = [15, 25, 35];
$defaultPerPage = $perPageAllowed[0];
$page = (int)$request->get('page', 1);
$session = $request->getSession();
if (!$session->has('searchPerPage')) {
$session->set('searchPerPage', $defaultPerPage);
}
try {
$maxResults = $this->getParameter('app.search.max_results');
} catch (Exception $e) {
$maxResults = 1000;
}
$list = new DataObject\Listing();
$list->onCreateQueryBuilder(function (QueryBuilder $queryBuilder) use ($backend, $maxResults) {
$queryBuilder
->select('objects.o_id')
->innerJoin(
"objects",
"search_backend_data",
"search_backend_data",
"`objects`.`o_id` = `search_backend_data`.`id`"
)
->leftJoin(
"objects",
"object_3",
"news",
"`objects`.`o_id` = `news`.`oo_id`"
)
->andWhere($backend['condition'])
->andWhere($queryBuilder->expr()->or("`subtype` != 'News'", sprintf("news.category__id IN (%s)", implode(',', HelperFunctions::getCategoryIds()))));
});
$list->setOrder(['ASC', 'DESC']);
$list->setOrderKey(['search_backend_data.subtype', 'search_backend_data.modificationDate']);
$paginatedList = $paginator->paginate(
$list,
max($page, 1),
$session->get('searchPerPage'),
);
$wishlist = [];
foreach ($paginatedList->getItems() as $item) {
if ($item instanceof CoreShopProduct) {
$wishlist[$item->getId()] = $wishListService->hasItem($item);
}
}
$returnData = [
'list' => $paginatedList->getItems(),
'paginator' => $paginatedList,
'wishlist' => $wishlist
];
}
$bc = [];
$bc[] = [
'title' => 'Főoldal',
'path' => '/'
];
$bc[] = [
'title' => sprintf('Találatok a következőre: "%s" ', $s),
'path' => null
];
$placeholder('breadcrumbNews')->set($bc);
$returnData['qs'] = $s;
return $this->renderTemplate('default/search.html.twig', $returnData);
}
/**
* @param Request $request
* @return Response
* @Route("{path}/{slug}", name="news_details", priority="-100", requirements={"path"="^(aktualitasok|hirek|videok|galeria).*$"})
*/
public function newsdetailsAction(Request $request, Placeholder $placeholder, DocumentResolver $documentResolver, NewsCategoryLinkGenerator $linkGenerator, HeadMeta $headMeta): Response
{
$news = News::getBySlug($request->get('slug'), ['limit' => 1, 'unpublished' => true]);
if (!($news instanceof News && ($news->isPublished() || $this->verifyPreviewRequest($request, $news)))) {
throw new NotFoundHttpException('news not found');
}
$isProspex = $this->isSite('prospex');
$isProspexNews = str_contains(strtolower($news->getCategory()?->getName()), 'prospex');
if (($isProspexNews && !$isProspex) || (!$isProspexNews && $isProspex)) {
throw new NotFoundHttpException('news not found');
}
$headMeta->setProperty('og:type', 'article');
$headMeta->setProperty('og:title', $news->getTitle() . ($isProspex ? ' - Prospex Team' : ' - Seiko Boutique'));
$headMeta->setProperty('og:description', $news->getDescription());
$ogImage = $news->getImage() ?? null;
if ($ogImage instanceof DataObject\Data\Hotspotimage) {
if ($ogImage->getImage() instanceof \Pimcore\Model\Asset\Image) {
$headMeta->setProperty('og:image', $request->getSchemeAndHttpHost() . $ogImage->getImage()->getFullPath());
$headMeta->setProperty('og:image:width', $ogImage->getImage()->getWidth());
$headMeta->setProperty('og:image:height', $ogImage->getImage()->getHeight());
}
}
$bc = [];
$bc[] = [
'title' => $news->getTitle(),
'path' => null
];
if ($news->getCategory()) {
$bc[] = [
'title' => $news->getCategory()->getName(),
'path' => $linkGenerator->generate($news->getCategory())
];
}
$bc = array_merge($bc, $this->getNewsBreadcrumb($documentResolver->getDocument($request)));
$bc = array_reverse($bc);
$placeholder('breadcrumbNews')->set($bc);
$_template = $this->isSite('prospex') ? 'prospexteam/newsdetails.html.twig' : 'default/newsdetails.html.twig';
return $this->renderTemplate($_template, [
'news' => $news,
'moreNews' => $this->getSimilarNews($news)
]);
}
/**
* @param Request $request
* @param NewsCategoryLinkGenerator $generator
* @return Response
* @Route("{path}~n{category}", name="newscategory_list_redirect", requirements={"category"="\d+", "path"=".*?"})
*/
public function newslistRedirectAction(Request $request, NewsCategoryLinkGenerator $generator): Response
{
$category = NewsCategory::getById($request->get('category'));
if ($category) {
return $this->redirect($generator->generate($category), 301);
}
return $this->redirect("/");
}
/**
* @param Request $request
* @param PaginatorInterface $paginator
* @param Placeholder $placeholder
* @param DocumentResolver $documentResolver
* @return Response
* @Route("{path}-n{category}", name="newscategory_list", requirements={"category"="\d+", "path"=".*?"})
*/
public function newslistAction(Request $request, PaginatorInterface $paginator, Placeholder $placeholder, DocumentResolver $documentResolver): Response
{
$perPageAllowed = [15, 25, 35];
$defaultPerPage = $perPageAllowed[0];
$defaultOrder = 'desc';
$forceProspex = false;
if ($this->editmode && str_contains($this->document->getTemplate(), 'prospexteam')) {
$forceProspex = true;
}
$session = $request->getSession();
if (!$session->has('newsPerPage')) {
$session->set('newsPerPage', $defaultPerPage);
}
if (!$session->has('newsOrder')) {
$session->set('newsOrder', $defaultOrder);
}
if (!$session->has('newsTag')) {
$session->set('newsTag', null);
}
if (!$this->isSite('prospex')) {
$tagList = new Tag\Listing();
$tagList->setCondition("ISNULL(parentId) OR parentId = 0");
$tagList->setOrderKey("name");
$tag = $request->get('tag-filter');
if ($tag) {
foreach ($tagList->load() as $item) {
if ($item->getName() == $tag) {
$session->set('newsTag', $item);
$request->attributes->set('page', 1);
break;
}
}
} else if ($tag === '') {
$session->set('newsTag', null);
}
} else {
$session->set('newsTag', null);
}
$perPage = (int)$request->get('perPage');
if ($perPage) {
if (in_array($perPage, $perPageAllowed)) {
$session->set('newsPerPage', $perPage);
$request->attributes->set('page', 1);
}
}
$order = $request->get('order');
if ($order) {
if (in_array($order, array('asc', 'desc'))) {
$session->set('newsOrder', $order);
}
}
$page = (int)$request->get('page', 1);
$newslist = new News\Listing();
$newslist->setCondition("hiddenFromList IS NOT TRUE");
$newslist->setOrderKey(['highlighted', 'date']);
$newslist->setOrder(['desc', $session->get('newsOrder')]);
if ($session->get('newsTag')) {
$newslist->addConditionParam(sprintf("o_id IN (SELECT cId FROM tags_assignment WHERE ctype = 'object' AND tagid = %s)", $session->get('newsTag')->getId()));
}
$bc = [];
if (!$this->isSite('prospex')) {
$category = NewsCategory::getById($request->get('category'));
if ($category) {
if ($category->getHidden() === true) {
return $this->redirect($documentResolver->getDocument()->getFullPath(), 301);
}
$newslist->filterByCategory($category);
$bc[] = [
'title' => $category->getName(),
'path' => null
];
}
}
$bc = array_merge($bc, $this->getNewsBreadcrumb($documentResolver->getDocument($request)));
$bc = array_reverse($bc);
$placeholder('breadcrumbNews')->set($bc);
$categoryList = new NewsCategory\Listing();
$categoryList->setOrder('asc');
$categoryList->setOrderKey('name');
if ($this->isSite('prospex') || $forceProspex) {
$_prospexFilter = $this->document->getProperty('prospexListType') ?? 'prospex_news';
$_category = NewsCategory::getByApiIdentifier($_prospexFilter, ['limit' => 1]);
if ($_category) {
$newslist->filterByCategory($_category);
} else {
$newslist = [];
}
} else {
$_category = NewsCategory::getBySite('boutique');
$_filter = [0];
foreach ($_category as $cat) {
$_filter[] = $cat->getId();
}
$newslist->addConditionParam(sprintf('category__id IN (%s)', implode(',', $_filter)));
$categoryList->filterBySite('boutique');
}
$list = $paginator->paginate(
$newslist,
max($page, 1),
$session->get('newsPerPage')
);
$_template = $this->document->getTemplate() ?? 'default/newslist.html.twig';
return $this->renderTemplate($_template, [
'order' => $session->get('newsOrder'),
'news' => $list->getItems(),
'paginator' => $list,
'perPageAllowed' => $perPageAllowed,
'perPage' => $session->get('newsPerPage'),
'categoryList' => $categoryList,
'selectedCategory' => $category ?? null,
'tagList' => isset($tagList) ? $tagList->load() : null,
'selectedTag' => $session->get('newsTag'),
'clubsite' => $this->isSite('club')
]);
}
/**
* @param Request $request
* @param ProspexEventLinkGenerator $generator
* @return Response
* @Route("{path}/{slug}~pe{id}", name="prospex_event_details_redirect", requirements={"path"=".*", "slug"=".*", "id"="\d+"})
*/
public function prospexEventRedirectAction(Request $request, ProspexEventLinkGenerator $generator): Response
{
$event = DataObject\ProspexEvent::getById($request->get('id'));
if ($event instanceof DataObject\ProspexEvent && ($event->isPublished() || $this->verifyPreviewRequest($request, $event))) {
return $this->redirect($generator->generate($event), 301);
}
throw new NotFoundHttpException('Event not found');
}
/**
* @param Request $request
* @param HeadMeta $headMeta
* @return Response
* @Route("{path}/{slug}-pe{id}", name="prospex_event_details", requirements={"path"=".*", "slug"=".*", "id"="\d+"})
*/
public function prospexEventAction(Request $request, HeadMeta $headMeta): Response
{
if (!$this->isSite('prospex')) {
throw new NotFoundHttpException();
}
$event = DataObject\ProspexEvent::getById($request->get('id'));
if (!($event instanceof DataObject\ProspexEvent && ($event->isPublished() || $this->verifyPreviewRequest($request, $event)))) {
throw new NotFoundHttpException('Event not found');
}
$headMeta->setProperty('og:type', 'article');
$headMeta->setProperty('og:title', $event->getTitle() . ' - Seiko Boutique');
$headMeta->setProperty('og:description', $event->getText());
$ogImage = $event->getImage() ?? null;
if ($ogImage instanceof DataObject\Data\Hotspotimage) { // TODO
if ($ogImage->getImage() instanceof \Pimcore\Model\Asset\Image) {
$headMeta->setProperty('og:image', $request->getSchemeAndHttpHost() . $ogImage->getImage()->getFullPath());
$headMeta->setProperty('og:image:width', $ogImage->getImage()->getWidth());
$headMeta->setProperty('og:image:height', $ogImage->getImage()->getHeight());
}
}
return $this->renderTemplate('prospexteam/eventdetails.html.twig', [
'event' => $event
]);
}
/**
* @Route("/esemenyek", name="prospex_event_list")
*/
public function prospexEventlistAction(Request $request, PaginatorInterface $paginator, HeadMeta $headMeta): Response
{
if (!$this->isSite('prospex')) {
throw new NotFoundHttpException();
}
$eventList = new DataObject\ProspexEvent\Listing();
$eventList->setOrder(Criteria::ASC);
$eventList->setOrderKey('dateFrom');
$list = $paginator->paginate(
$eventList,
max($request->get('page', 1), 1),
10
);
$nextProspexEvent = null;
$nextListing = new DataObject\ProspexEvent\Listing();
$nextListing->setOrder(Criteria::ASC);
$nextListing->setOrderKey('dateFrom');
$nextListing->setCondition(sprintf('dateFrom > %s', Carbon::now()->getTimestamp()));
$nextListing->setLimit(1);
if ($nextListing->count()) {
$nextProspexEvent = $nextListing->getData()[0]->getId();
}
return $this->renderTemplate('prospexteam/eventlist.html.twig', [
'events' => $list->getItems(),
'paginator' => $list,
'nextProspexEvent' => $nextProspexEvent
]);
}
protected function getNewsBreadcrumb($document)
{
$bc = [];
if ($document instanceof Page) {
$bc[] = [
'title' => $document->getTitle(),
'path' => $document->getFullPath()
];
$doc = $document;
while ($parent = $doc->getParent()) {
if ($parent instanceof Page && !empty($parent->getTitle())) {
$bc[] = [
'title' => $parent->getTitle(),
'path' => $parent->getPath()
];
}
$doc = $parent;
}
}
return $bc;
}
protected function getSimilarNews(News $news, $limit = 5)
{
$newsList = new News\Listing();
$newsList->setOrderKey(['highlighted', 'date']);
$newsList->setOrder(['desc', 'desc']);
if ($news->getCategory()) {
$newsList->filterByCategory($news->getCategory());
}
$newsList->addConditionParam('o_id != ?', $news->getId(), 'AND');
$newsList->setLimit($limit);
return $newsList->load();
}
public function articleAction(Request $request, Placeholder $placeholder, DocumentResolver $documentResolver): Response
{
$placeholder('breadcrumbNews')->set($this->getBreadCrumbForDucument($documentResolver->getDocument()));
return $this->render('default/article.html.twig', [
'clubsite' => $this->isSite('club')
]);
}
public function watchLandingAction(Request $request, Placeholder $placeholder, DocumentResolver $documentResolver): Response
{
$placeholder('breadcrumbNews')->set($this->getBreadCrumbForDucument($documentResolver->getDocument()));
return $this->render('default/watch-landing.html.twig', [
'clubsite' => $this->isSite('club'),
]);
}
public function setGoogleApiKey(string $googleApiKey)
{
$this->googleApiKey = $googleApiKey;
}
public function setSpecifications(array $specifications): void
{
$this->specifications = $specifications;
}
public function setProperties(array $properties): void
{
$this->properties = $properties;
}
public function setMaxNumberOfComparedProducts(int $maxNumberOfComparedProducts): void
{
$this->maxNumberOfComparedProducts = $maxNumberOfComparedProducts;
}
public function kapcsolatAction(Request $request, Recaptcha3Validator $recaptcha3Validator, Placeholder $placeholder, DocumentResolver $documentResolver, MailerService $mailerService): Response
{
$user = $this->getUser();
$contact = new Contact();
$document = $documentResolver->getDocument();
if ($user instanceof CoreShopUser) {
$customer = $user->getCustomer();
$contact->setLastname($customer->getLastname() ?: '');
$contact->setFirstname($customer->getFirstname() ?: '');
$contact->setEmail($customer->getEmail() ?: '');
$contact->setMobile($customer->getPhoneNumber() ?: '');
}
$form = $this->container->get('form.factory')->createNamed(
'contact', ContactType::class, $contact, ['document' => $document]
);
$form->handleRequest($request);
//$score = $recaptcha3Validator->getLastResponse();
if ($form->isSubmitted() && $form->isValid()) {
$contact = $form->getData();
if ($contact instanceof Contact) {
try {
$contact->setPlatform('web');
$contact->save();
$this->addFlash('success', 'Sikeresen elküldve!');
// $mailerService->sendContactMail($contact);
$mailerService->sendMailWithMaileon('contact_success', $this->isSite('club') ? 'Contactform' : 'Contactform_boutique', $contact->getMaileonData(), [$contact->getEmail()]);
} catch (NotFoundExceptionInterface|ContainerExceptionInterface|Exception $e) {
$this->addFlash('danger', 'Hiba történt!');
}
}
return $this->redirect($request->getUri());
}
$placeholder('breadcrumbNews')->set($this->getBreadCrumbForDucument($document));
return $this->renderTemplate('default/kapcsolat.html.twig', [
'form' => $form->createView(),
'apiKey' => $this->googleApiKey
]);
}
public function boutiqueAction(Request $request, Placeholder $placeholder, DocumentResolver $documentResolver): Response
{
$placeholder('breadcrumbNews')->set($this->getBreadCrumbForDucument($documentResolver->getDocument()));
return $this->renderTemplate('default/boutique.html.twig', [
'apiKey' => $this->googleApiKey
]);
}
}