src/AppBundle/Controller/FranchiseController.php line 29

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace AppBundle\Controller;
  4. use AppBundle\Form\FranchiseFormType;
  5. use AppBundle\Service\ReCaptchaService;
  6. use Exception;
  7. use Pimcore\Logger;
  8. use Pimcore\Mail;
  9. use Pimcore\Model\Document\Email;
  10. use Pimcore\Translation\Translator;
  11. use function Sentry\captureException;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. class FranchiseController extends BaseController
  15. {
  16.     private ReCaptchaService $reCaptchaService;
  17.     public function __construct(ReCaptchaService $reCaptchaService)
  18.     {
  19.         $this->reCaptchaService $reCaptchaService;
  20.     }
  21.     public function defaultAction(Request $requestTranslator $translator): Response
  22.     {
  23.         $form $this->createForm(FranchiseFormType::class);
  24.         $form->handleRequest($request);
  25.         if ($form->isSubmitted() && $form->isValid()) {
  26.             $data $form->getData();
  27.             try {
  28.                 $this->sendFranchiseMail($request$data$translator);
  29.                 $this->addFlash('success'$translator->trans('app.general.gemini.franchiseform.success'));
  30.                 $form $this->createForm(FranchiseFormType::class);
  31.             } catch (Exception $ex) {
  32.                 captureException($ex);
  33.                 Logger::error('Franchise form mail error: ' $ex->getMessage(), ['exception' => $ex]);
  34.                 $this->addFlash('error'$ex->getMessage());
  35.             }
  36.         } elseif ($form->isSubmitted() && !$form->isValid()) {
  37.             $errors = [];
  38.             foreach ($form->getErrors(true) as $error) {
  39.                 $errors[] = sprintf(
  40.                     '%s: %s',
  41.                     $error->getOrigin() ? $error->getOrigin()->getName() : 'form',
  42.                     $error->getMessage(),
  43.                 );
  44.             }
  45.             $validationMessage 'Franchise form validation failed: ' implode(' | '$errors);
  46.             captureException(new Exception($validationMessage));
  47.             Logger::warning($validationMessage);
  48.             $this->addFlash('error'$translator->trans('app.general.gemini.franchiseform.error'));
  49.         }
  50.         return $this->render('Franchise/default.html.twig', [
  51.             'form' => $form->createView(),
  52.             'errors' => $form->getErrors(),
  53.             'googleRecaptchaSiteKey' => $this->getParameter('kernel.project_dir') ? getenv('GOOGLE_RECAPTCHA_SITE_KEY') : '',
  54.         ]);
  55.     }
  56.     public function mailAction(Request $request): Response
  57.     {
  58.         $params = [];
  59.         foreach ($request->attributes->all() as $key => $value) {
  60.             if (str_starts_with((string) $key'_')) {
  61.                 continue;
  62.             }
  63.             $params[$key] = $value;
  64.         }
  65.         return $this->render('Franchise/franchise_mail.html.twig'$params);
  66.     }
  67.     /**
  68.      * @throws Exception
  69.      */
  70.     private function sendFranchiseMail(Request $request, array $dataTranslator $translator): void
  71.     {
  72.         $mailTemplate $this->document->getProperty('geminiFranchiseMailTemplate');
  73.         $mailTarget $this->document->getProperty('geminiFranchiseMailTarget');
  74.         $recaptchaVerified $this->reCaptchaService->verify((string) $request->get('g-recaptcha-response'));
  75.         if ('' === $mailTemplate || '' === $mailTarget) {
  76.             throw new Exception($translator->trans('app.general.gemini.franchiseform.formconfigurationerror'));
  77.         }
  78.         if (!$recaptchaVerified) {
  79.             throw new Exception($translator->trans('app.general.gemini.recaptcha.error'));
  80.         }
  81.         $mail = new Mail();
  82.         $mail->setDocument(Email::getByPath($mailTemplate));
  83.         $mail->setParams($data);
  84.         $mail->subject($translator->trans('app.general.gemini.franchiseform.franchisemailsubject'));
  85.         $mail->from('stronakorporacyjna@gemini.pl');
  86.         $mail->addTo($mailTarget);
  87.         try {
  88.             Logger::info('Franchise mail sending to: ' $mailTarget ', params: ' json_encode($data));
  89.             $mail->send();
  90.         } catch (Exception $ex) {
  91.             captureException($ex);
  92.             Logger::error('Franchise mail send failed: ' $ex->getMessage(), ['exception' => $ex]);
  93.             throw new Exception($translator->trans('app.general.gemini.franchiseform.mailnotsenterror'), $ex->getCode(), $ex);
  94.         }
  95.     }
  96. }