<?php
namespace App\Controller\Uniqskills;
use App\Entity\Gos\PortalSettings;
use App\Entity\Gos\Uniqskills\ContactMessage;
use App\Entity\Gos\Uniqskills\FmCompanySettings;
use App\Form\Frontend\Uniqskills\ContactMessageType;
use App\Utils\ContactFormService;
use App\Utils\RecaptchaService;
use App\Utils\Uniqskills\ContactFormUtils;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* @Route("/{_locale}")
*/
class ContactFormController extends AbstractController
{
private EntityManagerInterface $em;
private ContactFormUtils $contactUtils;
private ContactFormService $contactFormService;
public function __construct(
EntityManagerInterface $em,
ContactFormUtils $cfUtil,
ContactFormService $contactFormService
) {
$this->em = $em;
$this->contactUtils = $cfUtil;
$this->contactFormService = $contactFormService;
}
/**
* @Route("/contact", name="fmUniqskillsContactForm")
*/
public function indexAction(Request $request)
{
if ($_ENV['DEFAULT_LOCALE'] === 'en')
{
$contactMessage = new ContactMessage();
$options = [
'topics' => $this->contactUtils->getTopics(),
'locale' => $request->getLocale(),
'fmCompanySettings' => $this->em->getRepository(FmCompanySettings::class)
->findOneByPortalSettings($request->getSession()->get('domain'))
];
$form = $this->createForm(ContactMessageType::class, $contactMessage, $options)
->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
$this->contactUtils->sendAndSaveQuestion($contactMessage);
return $this->redirectToRoute('fmUniqskillsContactMessageSent');
}
return $this->render('/uniqskills/contact/index.html.twig', [
'form' => $form->createView()
]);
}
$portal = $this->em->getRepository(PortalSettings::class)->findOneByHash($_ENV['US_PORTAL_SETTINGS']);
$contactForm = $this->contactFormService->getForm($portal);
return $this->render('/uniqskills/contact-new/index.html.twig', [
'dataForm' => $contactForm,
'recaptchaPublicKey' => $_ENV['GOOGLE_RECAPTCHA_US_SITE_KEY'],
'regulation' => $portal->getFmCompanySettings()->getTextAcceptanceRegulations()[$_ENV['DEFAULT_LOCALE']]
]);
}
/**
* @Route("/ajaxExecuteContactForm", name="ajaxExecuteContactForm", methods={"POST"})
*/
public function ajaxExecuteContactFormAction(Request $request): JsonResponse
{
$data = $request->request->all();
$data['privateKeyRecaptcha'] = $_ENV['GOOGLE_RECAPTCHA_US_SECRET'];
/** @var PortalSettings $portal */
$portal = $this->em->getRepository(PortalSettings::class)->findOneByHash($_ENV['US_PORTAL_SETTINGS']);
$message = $this->contactFormService->checkValidFormAndSendData($data, $portal);
return $this->json($message);
}
/**
* @Route("/contact/thank-you", name="fmUniqskillsContactMessageSent")
*/
public function messageSentAction(Request $request): Response
{
$domain = $request->getSession()->get('domain');
$locale = $request->getLocale();
$fmCompanysettings = $this->em->getRepository(FmCompanySettings::class)->findOneByPortalSettings($domain);
$thankYouMessage = $fmCompanysettings->getTextContactThankYou()[$locale] ?? '';
$catalogueRoute = $locale === 'pl' ? 'fmUniqskillsFrontendPlCourseCataloguePage' : 'fmUniqskillsFrontendCourseCataloguePage';
return $this->render('/uniqskills/contact/thanks.html.twig', [
'thankYouMessage' => $thankYouMessage,
'courseCatalogueUrl' => $this->generateUrl($catalogueRoute)
]);
}
/**
* @Route("/ajaxContactLanding", name="fmUniqskillsAjaxLandingContactForm", methods={"POST"})
*/
public function ajaxContactLanding(Request $request, RecaptchaService $recaptchaService, TranslatorInterface $translator): JsonResponse
{
$recaptcha = $request->request->get('g-recaptcha-response');
$message = $translator->trans('uniqskills.form.contact.errors.recaptcha');
$status = 'error';
if (is_null($recaptcha))
return $this->json(['message' => $message, 'status' => $status]);
$recaptchaPricateKey = $this->getParameter('ewz_recaptcha.private_key');
$ip = $_SERVER['REMOTE_ADDR'];
$verifyReCaptcha = $recaptchaService->verifyReCaptcha($recaptcha, $recaptchaPricateKey, $ip);
if ($verifyReCaptcha['success'] === false)
return $this->json(['message' => $message, 'status' => $status]);
$name = $request->request->get('landing-contact-name');
$email = $request->request->get('landing-contact-email');
$message = $request->request->get('landing-contact-message');
$landingUrl = $request->request->get('url');
$contactMessage = new ContactMessage();
$contactMessage->setName($name);
$contactMessage->setSender($email);
$contactMessage->setBody($message);
$contactMessage->setCourseName($landingUrl);
$contactMessage->setTopic(4);
$this->contactUtils->sendAndSaveQuestion($contactMessage);
$message = $translator->trans('uniqskills.form.contact.messageSent');
$status = 'success';
return $this->json(['message' => $message, 'status' => $status]);
}
}