custom/plugins/MojeBambinoKatalogForm/src/Controller/Storefront/KatalogFormController.php line 191

Open in your IDE?
  1. <?php
  2. namespace MojeBambino\KatalogForm\Controller\Storefront;
  3. use Shopware\Core\Content\Mail\Service\MailService;
  4. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  6. use Shopware\Core\Framework\Routing\Annotation\RouteScope;
  7. use Shopware\Core\Framework\Struct\ArrayEntity;
  8. use Shopware\Core\Framework\Uuid\Uuid;
  9. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  10. use Shopware\Storefront\Controller\StorefrontController;
  11. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  12. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  13. use Symfony\Component\Form\Extension\Core\Type\TextType;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  19. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  20. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  21. use Symfony\Component\HttpFoundation\ParameterBag;
  22. use Shopware\Core\Content\MailTemplate\MailTemplateEntity;
  23. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  24. use Shopware\Storefront\Page\GenericPageLoader;
  25. use Symfony\Component\HttpFoundation\RedirectResponse;
  26. /**
  27.  * @RouteScope(scopes={"storefront"})
  28.  */
  29. class KatalogFormController extends StorefrontController
  30. {
  31.     private EntityRepositoryInterface $katalogFormRepository;
  32.     private EntityRepositoryInterface $mailTemplateRepository;
  33.     private MailService $mailService;
  34.     private GenericPageLoader $genericLoader;
  35.     public function __construct(EntityRepositoryInterface $katalogFormRepositoryEntityRepositoryInterface $mailTemplateRepositoryMailService $mailService
  36.             GenericPageLoader $genericLoader)
  37.     {
  38.         $this->katalogFormRepository $katalogFormRepository;
  39.         $this->mailTemplateRepository $mailTemplateRepository;
  40.         $this->mailService $mailService;
  41.         $this->genericLoader $genericLoader;
  42.      }
  43.      
  44.      /**
  45.       * @Route("/content/137-zamow-bezplatny-katalog", name="frontend.przekierujKat", options={"seo"="false"}, methods={"GET", "POST"}, defaults={"XmlHttpRequest"=true, "csrf_protected"=false})
  46.       */
  47.      public function przekierujKat():RedirectResponse{
  48.          return $this->redirectToRoute("frontend.katalog");
  49.      }
  50.     /**
  51.      * @Route("/zamow-bezplatny-katalog", name="frontend.katalog", options={"seo"="false"}, defaults={"csrf_protected"=true}, methods={"GET", "POST"})
  52.      */
  53.     public function addKatalog(SalesChannelContext $contextRequest $request): Response
  54.     {
  55.         $defaultData = ['email' => ''];
  56.         $form $this->createFormBuilder($defaultData)
  57.             ->add('katalogi'ChoiceType::class, array(
  58.                     'choices' => array(
  59.                             'Żłobek i Przedszkole 2022' => 'Żłobek i Przedszkole 2022',
  60.                             'Szkoła podstawowa 2022 - meble' => 'Szkoła podstawowa 2022 - meble',
  61.                             'Szkoła podstawowa 2022 - pomoce edukacyjne' => 'Szkoła podstawowa 2022 - pomoce edukacyjne',
  62.                             'Przedszkole 2022 - bestsellery, nowości, wyprzedaże' => 'Przedszkole 2022 - bestsellery, nowości, wyprzedaże',
  63.                             'Aktywność Artystyczna 2022' => 'Aktywność artystyczna 2022',
  64.                             'Laboratoria Przyszłości 2022' => 'Laboratoria przyszłości 2022',
  65.                             'Aktywna Tablica 2022 - sprzęt i oprogramowanie' => 'Aktywna Tablica 2022 - sprzęt i oprogramowanie',
  66.                             'Specjalne potrzeby edukacyjne 2022' => 'Spe 2022'
  67.                     ),
  68.                     //'mapped'    => false,
  69.                     'label'=>'Katalog',
  70.                     'expanded' => true,
  71.                     'multiple' => true
  72.             ))
  73.             ->add('email'EmailType::class)
  74.             ->add('telefon'TextType::class)
  75.             ->add('placowka'TextType::class)
  76.             ->add('adres'TextType::class)
  77.             ->add('kod'TextType::class)
  78.             ->add('miasto'TextType::class)
  79.             ->add('woj'ChoiceType::class, array(
  80.                     'choices' => array(
  81.                             '--wybierz--' => '',
  82.                             'dolnośląskie' => 'dolnośląskie',
  83.                             'kujawsko-pomorskie' => 'kujawsko-pomorskie',
  84.                             'lubelskie' => 'lubelskie',
  85.                             'lubuskie' => 'lubuskie',
  86.                             'łódzkie' => 'łódzkie',
  87.                             'małopolskie' => 'małopolskie',
  88.                             'mazowieckie' => 'mazowieckie',
  89.                             'opolskie' => 'opolskie',
  90.                             'podkarpackie' => 'podkarpackie',
  91.                             'podlaskie' => 'podlaskie',
  92.                             'pomorskie' => 'pomorskie',
  93.                             'śląskie' => 'śląskie',
  94.                             'świętokrzyskie' => 'świętokrzyskie',
  95.                             'warmińsko-mazurskie' => 'warmińsko-mazurskie',
  96.                             'wielkopolskie' => 'wielkopolskie',
  97.                             'zachodniopomorskie' => 'zachodniopomorskie'
  98.                     ),
  99.                     //'mapped'    => false,
  100.                     'label'=>'Województwo',
  101.                     'expanded' => false,
  102.                     'multiple' => false
  103.             ))
  104.             ->add('uwagi'TextareaType::class, ['required'=>false])
  105.             ->add('zgoda1'CheckboxType::class, ['label'=>'Wyrażam zgodę na przetwarzanie moich danych osobowych przez spółkę Moje Bambino 
  106.                 Sp. z o.o. w celu realizacji zapytania/zgłoszenia. Wyrażenie tej zgody jest dobrowolne, lecz niezbędne do realizacji 
  107.                 wysyłki katalogu.'])
  108.             ->add('zgoda2'CheckboxType::class, ['label'=>'Wyrażam zgodę na otrzymywanie drogą elektroniczną na podany powyżej adres e-mail informacji 
  109.                 handlowej/newslettera od spółki Moje Bambino Sp. z o.o.'])
  110.             ->add('zgoda3'CheckboxType::class, ['label'=>'Wyrażam zgodę na używanie telekomunikacyjnych urządzeń końcowych i automatycznych 
  111.                 systemów wywołujących dla celów marketingu bezpośredniego.'])
  112.             /*->add('zgoda4', CheckboxType::class, ['label'=>'Wyrażam zgodę na używanie telekomunikacyjnych urządzeń końcowych i automatycznych 
  113.                 systemów wywołujących dla celów marketingu bezpośredniego.'])*/
  114.             ->add('send'SubmitType::class, ['label'=>'Zamów'])
  115.             ->getForm();
  116.         $form->handleRequest($request);
  117.         if ($form->isSubmitted() && $form->isValid()) {
  118.             $data $form->getData();
  119.             $tok $request->request->get('_csrf_token');
  120.             $data['id'] = Uuid::randomHex();
  121.             $data['IdK'] = null;
  122.             $data['ip'] = null;
  123.             $data['data'] = date("Y-m-d H:i:s");
  124.             if($data['zgoda1']===true){
  125.                 $data['zgoda1'] = 1;
  126.             }
  127.             if($data['zgoda2']===true){
  128.                 $data['zgoda2'] = 1;
  129.             }
  130.             if($data['zgoda3']===true){
  131.                 $data['zgoda3'] = 1;
  132.             }
  133.             /* if($data['zgoda4']===true){
  134.                 $data['zgoda4'] = 1;
  135.             } */
  136.             $data['zgoda4'] = 0;
  137.             $data['katalogi'] = implode("; "$data['katalogi']);
  138.             $data['ip'] = $request->getClientIp();
  139.             //kapcia
  140.             $secretKey "6Ld5XRUUAAAAAApxfGdthHaH3VzvZBkYZ8hc4efp";
  141.             $ip $_SERVER['REMOTE_ADDR'];
  142.             $captcha $request->request->get('g-recaptcha-response');
  143.             $response file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$captcha."&remoteip=".$ip);
  144.             $responseKeys json_decode($response,true);
  145.             
  146.             if($this->isCsrfTokenValid('frontend.katalog'$tok) && intval($responseKeys["success"]) === 1){
  147.                 $this->katalogFormRepository->upsert([$data], $context->getContext());
  148.     
  149.                 $criteria = new Criteria();
  150.                 $criteria->addFilter(new EqualsFilter('mailTemplateType.technicalName'\MojeBambino\KatalogForm\MojeBambinoKatalogForm::TEMPLATE_TYPE_TECHNICAL_NAME));
  151.                 $criteria->setLimit(1);
  152.                 /** @var MailTemplateEntity|null $mailTemplate */
  153.                 $mailTemplate $this->mailTemplateRepository->search($criteria$context->getContext())->first();
  154.     
  155.                 $mailData = [
  156.                         'katalogForm' => $data
  157.                 ]; 
  158.                 $recipients = ['biuro@mbpl2.mojebambino.dev' => 'MB'$data['email'] => $data['placowka']];
  159.                 $datamail = new ParameterBag();
  160.                 $datamail->set(
  161.                         'recipients',
  162.                         $recipients
  163.                         );
  164.                 $datamail->set('senderName'$mailTemplate->getSenderName());
  165.                 $datamail->set('salesChannelId'$context->getSalesChannel()->getId());
  166.                 $datamail->set('contentHtml'$mailTemplate->getContentHtml());
  167.                 $datamail->set('contentPlain'$mailTemplate->getContentPlain());
  168.                 $datamail->set('subject'$mailTemplate->getSubject());
  169.                 $this->mailService->send(
  170.                         $datamail->all(),
  171.                         $context->getContext(),
  172.                         $mailData
  173.                         );
  174.     
  175.                 return $this->forwardToRoute('frontend.katalog.thank', [], ['uuid' => $data['id']]);
  176.             }
  177.         }
  178.         
  179.         $page $this->genericLoader->load($request$context);
  180.         return $this->renderStorefront('@Storefront/storefront/page/katalog-form/katalog-add.html.twig', ['page'=>$page'form' => $form->createView()]);
  181.     }
  182.     /**
  183.      * @Route("/zamow-bezplatny-katalog/{uuid}", name="frontend.katalog.thank", options={"seo"="false"}, methods={"GET"})
  184.      */
  185.     public function thankYou(string $uuidSalesChannelContext $contextRequest $request): Response
  186.     {
  187.         if(!Uuid::isValid($uuid)){
  188.             throw new NotFoundHttpException();
  189.         }
  190.         /** @var ArrayEntity|null $data */
  191.         $data $this->katalogFormRepository->search(new Criteria([$uuid]), $context->getContext())->first();
  192.         if($data === null) {
  193.             throw new NotFoundHttpException();
  194.         }
  195.         
  196.         $page $this->genericLoader->load($request$context);
  197.         return $this->renderStorefront('@Storefront/storefront/page/katalog-form/katalog-thank.html.twig', ['page'=>$page'data' => $data->jsonSerialize()]);
  198.     }
  199. }