<?php
namespace MojeBambino\KatalogForm\Controller\Storefront;
use Shopware\Core\Content\Mail\Service\MailService;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\Routing\Annotation\RouteScope;
use Shopware\Core\Framework\Struct\ArrayEntity;
use Shopware\Core\Framework\Uuid\Uuid;
use Shopware\Core\System\SalesChannel\SalesChannelContext;
use Shopware\Storefront\Controller\StorefrontController;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Symfony\Component\HttpFoundation\ParameterBag;
use Shopware\Core\Content\MailTemplate\MailTemplateEntity;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Shopware\Storefront\Page\GenericPageLoader;
use Symfony\Component\HttpFoundation\RedirectResponse;
/**
* @RouteScope(scopes={"storefront"})
*/
class KatalogFormController extends StorefrontController
{
private EntityRepositoryInterface $katalogFormRepository;
private EntityRepositoryInterface $mailTemplateRepository;
private MailService $mailService;
private GenericPageLoader $genericLoader;
public function __construct(EntityRepositoryInterface $katalogFormRepository, EntityRepositoryInterface $mailTemplateRepository, MailService $mailService,
GenericPageLoader $genericLoader)
{
$this->katalogFormRepository = $katalogFormRepository;
$this->mailTemplateRepository = $mailTemplateRepository;
$this->mailService = $mailService;
$this->genericLoader = $genericLoader;
}
/**
* @Route("/content/137-zamow-bezplatny-katalog", name="frontend.przekierujKat", options={"seo"="false"}, methods={"GET", "POST"}, defaults={"XmlHttpRequest"=true, "csrf_protected"=false})
*/
public function przekierujKat():RedirectResponse{
return $this->redirectToRoute("frontend.katalog");
}
/**
* @Route("/zamow-bezplatny-katalog", name="frontend.katalog", options={"seo"="false"}, defaults={"csrf_protected"=true}, methods={"GET", "POST"})
*/
public function addKatalog(SalesChannelContext $context, Request $request): Response
{
$defaultData = ['email' => ''];
$form = $this->createFormBuilder($defaultData)
->add('katalogi', ChoiceType::class, array(
'choices' => array(
'Żłobek i Przedszkole 2022' => 'Żłobek i Przedszkole 2022',
'Szkoła podstawowa 2022 - meble' => 'Szkoła podstawowa 2022 - meble',
'Szkoła podstawowa 2022 - pomoce edukacyjne' => 'Szkoła podstawowa 2022 - pomoce edukacyjne',
'Przedszkole 2022 - bestsellery, nowości, wyprzedaże' => 'Przedszkole 2022 - bestsellery, nowości, wyprzedaże',
'Aktywność Artystyczna 2022' => 'Aktywność artystyczna 2022',
'Laboratoria Przyszłości 2022' => 'Laboratoria przyszłości 2022',
'Aktywna Tablica 2022 - sprzęt i oprogramowanie' => 'Aktywna Tablica 2022 - sprzęt i oprogramowanie',
'Specjalne potrzeby edukacyjne 2022' => 'Spe 2022'
),
//'mapped' => false,
'label'=>'Katalog',
'expanded' => true,
'multiple' => true
))
->add('email', EmailType::class)
->add('telefon', TextType::class)
->add('placowka', TextType::class)
->add('adres', TextType::class)
->add('kod', TextType::class)
->add('miasto', TextType::class)
->add('woj', ChoiceType::class, array(
'choices' => array(
'--wybierz--' => '',
'dolnośląskie' => 'dolnośląskie',
'kujawsko-pomorskie' => 'kujawsko-pomorskie',
'lubelskie' => 'lubelskie',
'lubuskie' => 'lubuskie',
'łódzkie' => 'łódzkie',
'małopolskie' => 'małopolskie',
'mazowieckie' => 'mazowieckie',
'opolskie' => 'opolskie',
'podkarpackie' => 'podkarpackie',
'podlaskie' => 'podlaskie',
'pomorskie' => 'pomorskie',
'śląskie' => 'śląskie',
'świętokrzyskie' => 'świętokrzyskie',
'warmińsko-mazurskie' => 'warmińsko-mazurskie',
'wielkopolskie' => 'wielkopolskie',
'zachodniopomorskie' => 'zachodniopomorskie'
),
//'mapped' => false,
'label'=>'Województwo',
'expanded' => false,
'multiple' => false
))
->add('uwagi', TextareaType::class, ['required'=>false])
->add('zgoda1', CheckboxType::class, ['label'=>'Wyrażam zgodę na przetwarzanie moich danych osobowych przez spółkę Moje Bambino
Sp. z o.o. w celu realizacji zapytania/zgłoszenia. Wyrażenie tej zgody jest dobrowolne, lecz niezbędne do realizacji
wysyłki katalogu.'])
->add('zgoda2', CheckboxType::class, ['label'=>'Wyrażam zgodę na otrzymywanie drogą elektroniczną na podany powyżej adres e-mail informacji
handlowej/newslettera od spółki Moje Bambino Sp. z o.o.'])
->add('zgoda3', CheckboxType::class, ['label'=>'Wyrażam zgodę na używanie telekomunikacyjnych urządzeń końcowych i automatycznych
systemów wywołujących dla celów marketingu bezpośredniego.'])
/*->add('zgoda4', CheckboxType::class, ['label'=>'Wyrażam zgodę na używanie telekomunikacyjnych urządzeń końcowych i automatycznych
systemów wywołujących dla celów marketingu bezpośredniego.'])*/
->add('send', SubmitType::class, ['label'=>'Zamów'])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$tok = $request->request->get('_csrf_token');
$data['id'] = Uuid::randomHex();
$data['IdK'] = null;
$data['ip'] = null;
$data['data'] = date("Y-m-d H:i:s");
if($data['zgoda1']===true){
$data['zgoda1'] = 1;
}
if($data['zgoda2']===true){
$data['zgoda2'] = 1;
}
if($data['zgoda3']===true){
$data['zgoda3'] = 1;
}
/* if($data['zgoda4']===true){
$data['zgoda4'] = 1;
} */
$data['zgoda4'] = 0;
$data['katalogi'] = implode("; ", $data['katalogi']);
$data['ip'] = $request->getClientIp();
//kapcia
$secretKey = "6Ld5XRUUAAAAAApxfGdthHaH3VzvZBkYZ8hc4efp";
$ip = $_SERVER['REMOTE_ADDR'];
$captcha = $request->request->get('g-recaptcha-response');
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$captcha."&remoteip=".$ip);
$responseKeys = json_decode($response,true);
if($this->isCsrfTokenValid('frontend.katalog', $tok) && intval($responseKeys["success"]) === 1){
$this->katalogFormRepository->upsert([$data], $context->getContext());
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('mailTemplateType.technicalName', \MojeBambino\KatalogForm\MojeBambinoKatalogForm::TEMPLATE_TYPE_TECHNICAL_NAME));
$criteria->setLimit(1);
/** @var MailTemplateEntity|null $mailTemplate */
$mailTemplate = $this->mailTemplateRepository->search($criteria, $context->getContext())->first();
$mailData = [
'katalogForm' => $data
];
$recipients = ['biuro@mbpl2.mojebambino.dev' => 'MB', $data['email'] => $data['placowka']];
$datamail = new ParameterBag();
$datamail->set(
'recipients',
$recipients
);
$datamail->set('senderName', $mailTemplate->getSenderName());
$datamail->set('salesChannelId', $context->getSalesChannel()->getId());
$datamail->set('contentHtml', $mailTemplate->getContentHtml());
$datamail->set('contentPlain', $mailTemplate->getContentPlain());
$datamail->set('subject', $mailTemplate->getSubject());
$this->mailService->send(
$datamail->all(),
$context->getContext(),
$mailData
);
return $this->forwardToRoute('frontend.katalog.thank', [], ['uuid' => $data['id']]);
}
}
$page = $this->genericLoader->load($request, $context);
return $this->renderStorefront('@Storefront/storefront/page/katalog-form/katalog-add.html.twig', ['page'=>$page, 'form' => $form->createView()]);
}
/**
* @Route("/zamow-bezplatny-katalog/{uuid}", name="frontend.katalog.thank", options={"seo"="false"}, methods={"GET"})
*/
public function thankYou(string $uuid, SalesChannelContext $context, Request $request): Response
{
if(!Uuid::isValid($uuid)){
throw new NotFoundHttpException();
}
/** @var ArrayEntity|null $data */
$data = $this->katalogFormRepository->search(new Criteria([$uuid]), $context->getContext())->first();
if($data === null) {
throw new NotFoundHttpException();
}
$page = $this->genericLoader->load($request, $context);
return $this->renderStorefront('@Storefront/storefront/page/katalog-form/katalog-thank.html.twig', ['page'=>$page, 'data' => $data->jsonSerialize()]);
}
}