src/Controller/ConfiguratorController.php line 42

  1. <?php
  2. namespace App\Controller;
  3. use App\Controller\Traits\HreflangsControllerTrait;
  4. use App\Controller\Traits\MetatagsControllerTrait;
  5. use App\Controller\Traits\StaticPageHelperTrait;
  6. use App\Controller\Traits\ValidateCatpchaControllerTrait;
  7. use App\Entity\Product;
  8. use App\Entity\ProductConfigurator;
  9. use App\Entity\ProductConfiguratorEngagement;
  10. use App\Form\SendRecipeType;
  11. use App\Service\EmailService;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Exception;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\RequestStack;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\Validator\Constraints\Valid;
  20. use Symfony\Contracts\Translation\TranslatorInterface;
  21. class ConfiguratorController extends AbstractController
  22. {
  23.     use MetatagsControllerTraitHreflangsControllerTraitStaticPageHelperTraitValidateCatpchaControllerTrait;
  24.     private $em;
  25.     private $transalor;
  26.     private $request;
  27.     private $emailService;
  28.     public function __construct(EntityManagerInterface $emTranslatorInterface $translatorRequestStack $requestStackEmailService $emailService){
  29.         $this->em $em;
  30.         $this->transalor $translator;
  31.         $this->request $requestStack->getCurrentRequest();
  32.         $this->emailService $emailService;
  33.     }
  34.     #[Route(path: [ 'it' => '/cosa-ti-va-di-mangiare',
  35. //                    'en' => '/en/cosa-ti-va-di-mangiare',
  36. //                    'es' => '/es/cosa-ti-va-di-mangiare'
  37.                 ], name'app_configurator')]
  38.     public function configuratorIndex(Request $request){
  39.         // return $this->redirectToRoute('homepage');
  40.         list ($metatags$hreflangs) = $this->getStaticPageMetatagsAndHreflangs($request$this->em, ['it']);
  41.         // return true;
  42.         $em $this->em;
  43.         // $products = $em->getRepository(Product::class)->findAll();
  44.         $products $em->getRepository(Product::class)->findWithConfiguratore($request->getLocale());
  45.         return $this->render('configuratore/index.html.twig', [
  46.             'products' => $products,
  47.             'metatags' => $metatags,
  48.             'hreflangs' => $hreflangs
  49.         ]);
  50.     }
  51.     #[Route('/configuratore/api/v1'name'app_configurator_api'methods: ['POST'])]
  52.     // #[Route('/configuratore/api/v1', name: 'app_configurator_api')]
  53.     public function configuratorApi(Request $request){
  54.         $em $this->em;
  55.         $form $this->createForm(SendRecipeType::class);
  56.         if($request->get('send_email')){
  57.             $form->handleRequest($request);
  58.             /** VALIDATING CAPTCHA */
  59.             $validCaptcha false;
  60.             if ($recaptcha $request->get('input')['recaptcha']) {
  61.                 if (
  62.                 $this->validateCaptcha(
  63.                     $recaptcha,
  64.                     $this->getParameter('app_recaptcha_secret_v3')
  65.                 )
  66.                 ) {
  67.                     $validCaptcha true;
  68.                 }
  69.             }
  70.             if ($form->isSubmitted() && $form->isValid() && $validCaptcha) {
  71.                 $data $form->getData();
  72.                 $recipe $em->getRepository(ProductConfigurator::class)->findOneBy(['id' => $request->get('input')['configurator']]);
  73.                 if(!$recipe instanceof ProductConfigurator){
  74.                     return throw new Exception("Error Processing Request"404); 
  75.                 }
  76.                 $data['title'] = $recipe->getTitle();
  77.                 $data['emailText'] = $recipe->getEmailText();
  78.                 $data['image'] = $recipe->getRecipeImageName();
  79.                 $data['productName'] = $recipe->getProduct()->getName();
  80.                 $data['productImage'] = $recipe->getProduct()->getImagePackName();
  81.                 $data['productSlug'] = $recipe->getProduct()->getSlug() ;
  82.                 $data['categorySlug'] = $recipe->getProduct()->getType()->getSlug();
  83.                 $agreeType 0;
  84.                 if($data['data'] && $data['data2']){
  85.                     $agreeType 3;
  86.                 } elseif($data['data'] && !$data['data2']){
  87.                     $agreeType 1;
  88.                 } elseif(!$data['data'] && $data['data2']){
  89.                     $agreeType 2;
  90.                 } else {
  91.                     $agreeType 0;
  92.                 }
  93.                 $engagement = new ProductConfiguratorEngagement;
  94.                 $engagement->setEmail($form->get('email')->getData());
  95.                 $engagement->setRecipe($recipe);
  96.                 $engagement->setProduct($recipe->getProduct());
  97.                 $engagement->setLocale($request->getLocale());
  98.                 $engagement->setAgree($agreeType);
  99.                 $em->persist($engagement);
  100.                 $em->flush();
  101.                 //  TODO DA ATTIVARE
  102.                 $this->emailService->sendRecipeEmail($data);
  103.                 
  104.                 return new JsonResponse('success'200);
  105.             } else if(!$validCaptcha){
  106.                 return new JsonResponse('captcha not valid'403);
  107.             } else {
  108.                 $erros $form->getErrors(true);
  109.                 return new JsonResponse((string)$erros404);
  110.             }
  111.         }
  112.         $product $em->getRepository(Product::class)->findOneBy([
  113.             'id' => $request->get('product_id'),
  114.             'locale' => $request->getLocale(),
  115.         ]);
  116.         // check se il prodotto esiste
  117.         if(!$product instanceof Product){
  118.            return throw new Exception("Error Processing Request"404); 
  119.         }
  120.         if($request->get('prev_recipe')){
  121.             $productConfigurator $em->getRepository(ProductConfigurator::class)->findRandomRecipe($request->get('product_id'), $request->get('prev_recipe'), $request->getLocale());
  122.         } else {
  123.             $productConfigurator $em->getRepository(ProductConfigurator::class)->findRandomRecipe($request->get('product_id'), null$request->getLocale());
  124.         }
  125.         // check se non รจ nullo
  126.         if(!$productConfigurator){
  127.             return throw new Exception("Error Processing Request"404); 
  128.         }
  129.         
  130.     
  131.         return new JsonResponse([
  132.             'html' => $this->renderView('configuratore/_response.html.twig', [
  133.                 'product' => $product,
  134.                 'configurator' => $productConfigurator,
  135.                 'form' => $form->createView()
  136.             ])
  137.         ], 200);
  138.     }
  139. }