src/Controller/ConfiguratorController.php line 42
<?phpnamespace App\Controller;use App\Controller\Traits\HreflangsControllerTrait;use App\Controller\Traits\MetatagsControllerTrait;use App\Controller\Traits\StaticPageHelperTrait;use App\Controller\Traits\ValidateCatpchaControllerTrait;use App\Entity\Product;use App\Entity\ProductConfigurator;use App\Entity\ProductConfiguratorEngagement;use App\Form\SendRecipeType;use App\Service\EmailService;use Doctrine\ORM\EntityManagerInterface;use Exception;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\RequestStack;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Validator\Constraints\Valid;use Symfony\Contracts\Translation\TranslatorInterface;class ConfiguratorController extends AbstractController{use MetatagsControllerTrait, HreflangsControllerTrait, StaticPageHelperTrait, ValidateCatpchaControllerTrait;private $em;private $transalor;private $request;private $emailService;public function __construct(EntityManagerInterface $em, TranslatorInterface $translator, RequestStack $requestStack, EmailService $emailService){$this->em = $em;$this->transalor = $translator;$this->request = $requestStack->getCurrentRequest();$this->emailService = $emailService;}#[Route(path: [ 'it' => '/cosa-ti-va-di-mangiare',// 'en' => '/en/cosa-ti-va-di-mangiare',// 'es' => '/es/cosa-ti-va-di-mangiare'], name: 'app_configurator')]public function configuratorIndex(Request $request){// return $this->redirectToRoute('homepage');list ($metatags, $hreflangs) = $this->getStaticPageMetatagsAndHreflangs($request, $this->em, ['it']);// return true;$em = $this->em;// $products = $em->getRepository(Product::class)->findAll();$products = $em->getRepository(Product::class)->findWithConfiguratore($request->getLocale());return $this->render('configuratore/index.html.twig', ['products' => $products,'metatags' => $metatags,'hreflangs' => $hreflangs]);}#[Route('/configuratore/api/v1', name: 'app_configurator_api', methods: ['POST'])]// #[Route('/configuratore/api/v1', name: 'app_configurator_api')]public function configuratorApi(Request $request){$em = $this->em;$form = $this->createForm(SendRecipeType::class);if($request->get('send_email')){$form->handleRequest($request);/** VALIDATING CAPTCHA */$validCaptcha = false;if ($recaptcha = $request->get('input')['recaptcha']) {if ($this->validateCaptcha($recaptcha,$this->getParameter('app_recaptcha_secret_v3'))) {$validCaptcha = true;}}if ($form->isSubmitted() && $form->isValid() && $validCaptcha) {$data = $form->getData();$recipe = $em->getRepository(ProductConfigurator::class)->findOneBy(['id' => $request->get('input')['configurator']]);if(!$recipe instanceof ProductConfigurator){return throw new Exception("Error Processing Request", 404);}$data['title'] = $recipe->getTitle();$data['emailText'] = $recipe->getEmailText();$data['image'] = $recipe->getRecipeImageName();$data['productName'] = $recipe->getProduct()->getName();$data['productImage'] = $recipe->getProduct()->getImagePackName();$data['productSlug'] = $recipe->getProduct()->getSlug() ;$data['categorySlug'] = $recipe->getProduct()->getType()->getSlug();$agreeType = 0;if($data['data'] && $data['data2']){$agreeType = 3;} elseif($data['data'] && !$data['data2']){$agreeType = 1;} elseif(!$data['data'] && $data['data2']){$agreeType = 2;} else {$agreeType = 0;}$engagement = new ProductConfiguratorEngagement;$engagement->setEmail($form->get('email')->getData());$engagement->setRecipe($recipe);$engagement->setProduct($recipe->getProduct());$engagement->setLocale($request->getLocale());$engagement->setAgree($agreeType);$em->persist($engagement);$em->flush();// TODO DA ATTIVARE$this->emailService->sendRecipeEmail($data);return new JsonResponse('success', 200);} else if(!$validCaptcha){return new JsonResponse('captcha not valid', 403);} else {$erros = $form->getErrors(true);return new JsonResponse((string)$erros, 404);}}$product = $em->getRepository(Product::class)->findOneBy(['id' => $request->get('product_id'),'locale' => $request->getLocale(),]);// check se il prodotto esisteif(!$product instanceof Product){return throw new Exception("Error Processing Request", 404);}if($request->get('prev_recipe')){$productConfigurator = $em->getRepository(ProductConfigurator::class)->findRandomRecipe($request->get('product_id'), $request->get('prev_recipe'), $request->getLocale());} else {$productConfigurator = $em->getRepository(ProductConfigurator::class)->findRandomRecipe($request->get('product_id'), null, $request->getLocale());}// check se non รจ nulloif(!$productConfigurator){return throw new Exception("Error Processing Request", 404);}return new JsonResponse(['html' => $this->renderView('configuratore/_response.html.twig', ['product' => $product,'configurator' => $productConfigurator,'form' => $form->createView()])], 200);}}