THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Donc suite à un nombre incalculable de spam via la page de contact

ajout et activation du plugin recaptcha sur la page du formulaire

Erreur : Since Thelia 2.5 this->dispatch() function is not allowed in controllers, use autowiring instead

donc suite au post suivant https://forum.thelia.net/viewtopic.php?id=13714

que roadster cite de remplacer cette

$this->dispatch(ReCaptchaEvents::CHECK_CAPTCHA_EVENT, $checkCaptchaEvent);

par celle-ci

$eventDispatcher->dispatch($checkCaptchaEvent, ReCaptchaEvents::CHECK_CAPTCHA_EVENT);

un autre fil https://forum.thelia.net/viewtopic.php?id=12758 qui explique l'insertion pour du thelia 2.4.3

en ayant pris soin

d'ajouter dans le fichier ContactController.php dans le répertoire /local/modules/Front/Controller

       

	$checkModule = ModuleQuery::create()
                 ->findOneByCode('ReCaptcha');
                
            if($checkModule && $checkModule->getActivate()){    
                $checkCaptchaEvent = new ReCaptchaCheckEvent(); 
                $this->dispatch(ReCaptchaEvents::CHECK_CAPTCHA_EVENT, $checkCaptchaEvent);
                if ($checkCaptchaEvent->isHuman() == false) { throw new \Exception('Invalid reCAPTCHA'); }
            }   

$name = $translator?->trans('Sender name: %name%', ['%name%' => $event->getName()]);

pour l'activation de module recaptcha au travers du controller du formulaire on ajoute

use Thelia\Model\ModuleQuery;
use ReCaptcha\Event\ReCaptchaCheckEvent;
use ReCaptcha\Event\ReCaptchaEvents;

Cela ne suffit pas à faire l'appel, il faut provoquer la demande de contrôle à partir du fichier appelant

Donc le formulaire du fichier contact.html

on insère juste après exttends layout

{hook name="recaptcha.js"}

et dans la partie basse avant la fermeture de fieldset le check en partie du formulaire

                        {hook name="recaptcha.check"}   
                    </div>
                </fieldset>

Votre plugin devrait être actif avec l'insertion des clés publique et secrète dans la config du tableau de bord du module recaptcha et leur récupération via le controller

et ainsi ce la devrait contribuer à diminuer le nombre de spams,

Si cela ne suffit pas vous pouvez ajouter un champ caché + pot de miel + filtre sur les noms, titre du message constitué de letttres alambiquées qui n'ont ni queue ni tête

Last edited by stephst84 (14-03-2024 14:12:20)

Offline


Dans la partie du controller du formulaire insérer l'erreur ce qui permet de rester sur la même page et afin de ne pas faire atterrir votre visiteur sur la page de thelia " Oops il y un problème houston !! ""
fichier dans le répertoire /local/modules/Front/Controller > Contactcontroller.php

 catch (FormValidationException $e) {
            $error_message = $e->getMessage();
        } 

à la suite de

catch (\Exception $ex) {
            // Any other error
            $error_message = $ex->getMessage();
        }

Last edited by stephst84 (14-03-2024 14:08:02)