src/Controller/FrontendController.php line 16

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Exception\ValidationException;
  4. use App\Service\ActionAttemptManager;
  5. use App\Service\Emailer;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Contracts\Translation\TranslatorInterface;
  11. class FrontendController extends AbstractController
  12. {
  13.     function contactForm(Request $request) {
  14.         $session $request->getSession();
  15.         $keys $session->get('captcha_whitelist_key', []);
  16.         if (!in_array('contact'$keys)) {
  17.             $keys[] = 'contact';
  18.         }
  19.         $session->set('captcha_whitelist_key'$keys);
  20.         return $this->render('incs/contact.html.twig');
  21.     }
  22.     /**
  23.      * @Route("/contact", methods={"POST"})
  24.      */
  25.     function contact(Request $requestEmailer $emailerTranslatorInterface $translatorActionAttemptManager $attemptManager) {
  26.         $body $request->getContent();
  27.         $json json_decode($bodytrue);
  28.         $ipGood $attemptManager->checkIpCategory($request->getClientIp());
  29.         if (!$ipGood) {
  30.             throw new ValidationException(''$translator->trans('err.ip_blocked'));
  31.         }
  32.         // check captcha
  33.         $captchaReq $json['captcha'];
  34.         $captchaSession $request->getSession()->get('contact');
  35.         $captchaSession $captchaSession['phrase'] ?? null;
  36.         if ($captchaSession !== $captchaReq) {
  37.             throw new ValidationException('captcha'$translator->trans('err.captcha_invalid'));
  38.         }
  39.         $emailer->sendContactMessage($json);
  40.         return $this->json([
  41.             'success' => true,
  42.             'data' => $json
  43.         ]);
  44.     }
  45.     function localeRedirect(Request $request) {
  46.         return $this->redirectToRoute('home', ['_locale' => $request->getLocale()]);
  47.     }
  48.     function languageBar(Request $request) {
  49.         $availableLocales explode('|'$this->getParameter('available_locales'));
  50.         return $this->render('incs/languageBar.html.twig', [
  51.             'locale' => $request->getLocale(),
  52.             'available_locales' => $availableLocales,
  53.         ]);
  54.     }
  55.     /**
  56.      * @Route("/translations", name="json_translations")
  57.      */
  58.     function jsTranslations(Request $requestTranslatorInterface $translator) {
  59.         $locale $request->getLocale();
  60.         $catalog $translator->getCatalogue($locale);
  61.         $catalogs $catalog->all();
  62.         $messages $catalogs['messages'];
  63.         if (isset($catalogs['menu'])) {
  64.             $messages array_merge($messages$catalogs['menu']);
  65.         }
  66.         $messagesOut '';
  67.         foreach ($messages as $key => $trans) {
  68.             $trans str_replace(['@''"'], ['{\'@\'}''\"'], $trans);
  69.             $messagesOut .= '"' $key '": "' $trans '",';
  70.         }
  71.         $out 'const APP_TRANSLATIONS = {"' $locale '": {' $messagesOut '}}';
  72.         $response = new Response($out200, [
  73.             'Content-Type' => 'application/javascript; charset=UTF-8',
  74.         ]);
  75.         $response->setCharset('utf-8');
  76.         return $response;
  77.     }
  78.     /**
  79.      * @Route("/translations.json")
  80.      */
  81.     function jsonTranslations(Request $requestTranslatorInterface $translator) {
  82.         $locale $request->getLocale();
  83.         $catalog $translator->getCatalogue($locale);
  84.         $catalogs $catalog->all();
  85.         $messages $catalogs['messages'];
  86.         if (isset($catalogs['menu'])) {
  87.             $messages array_merge($messages$catalogs['menu']);
  88.         }
  89.         $messagesOut = [];
  90.         foreach ($messages as $key => $trans) {
  91.             $trans str_replace('@''{\'@\'}'$trans);
  92.             $messagesOut[$key] = $trans;
  93.         }
  94.         return $this->json($messagesOut);
  95.     }
  96. }