THELIA Forum

Welcome to the THELIA support and discusssion forum

Offline

#26 Re: Plugin ReCaptcha

(20-11-2018 17:59:51)


Bonjour,

Ok grand merci de continuer à me répondre. Bon finalement j'en étais à peu près là, je constate juste que mon controler est un peu différent du votre (qu'un seul catch par ex.).
En fait je m'attendais à un comportement différent, il me semble que souvent cela cache le bouton "envoyer" quand on n'a pas le captcha valide, là c'est un peu bizarre on se retrouve sur l'écran générique d'erreur de Thelia (Oooops) avec retour à l'admin possible ce que l'internaute moyen ne vas pas forcément comprendre.

Serait-il possible d'avoir une page d'erreur de la même façon que l'on a une template contact-success.html, genre une template contact-error.html ... Il faudrait modifier le

if ($checkCaptchaEvent->isHuman() == false) { throw new \Exception('Invalid reCAPTCHA'); }

ou autre chose dans le controler pour avoir ce comportement ?

Pierre.

Offline

#27 Re: Plugin ReCaptcha

(21-11-2018 08:26:35)


Bonjour,

Le retour au formulaire avec le message d'erreur me semble assez explicite
goug.jpg

Offline

#28 Re: Plugin ReCaptcha

(21-11-2018 09:54:59)


Slt,
Oui ça c'est nickel mais ça n'est pas du tout ce qui se passe chez moi ... moi ça revient sur l'écran d'erreur standard de Thelia avec le oops ... ok ce que je vais faire c'est copier-coller tout le controller que vous avez fourni ci-dessus car comme je le disais je n'ai pas exactement la même chose et je vais voir.
(pour mémoire je suis pourtant en 2.3.4 avec tout à jour, bizarre que j'ai un controller différent non ?)
Pierre.

Offline

#29 Re: Plugin ReCaptcha

(21-11-2018 21:37:57)


Bonsoir,

Bon j'ai copié exactement le code proposé par Zzuutt (encore merci pour sa patience), cela a changé le comportement dans le sens ou si je ne valide pas le captcha, je ne quitte plus la page contact (pour aller vers le ooops), je reste sur la même page contact, le message ne part pas, mais je n'ai pas le message "invalid cpatcha"....
Si je valide le captcha ça marche.

J'ai aussi essayé de remplacer ma template contact.html par celle de la distribution (car moi j'ai supprimé la map), rajouté ce qui est conseillé par Zzuutt, même comportement pas de message.

Bref j'en suis à un moindre mal pour l'internaute, on reste sur la page, et la case du captcha vide est suffisamment visible pour que l'on comprenne ce qu'il manque, mais je n'ai pas de message. Mais j'ai bien les alertes si je ne remplis pas les champs obligatoires. C'est un hook spécifique qui affiche ce message d'erreur ? A priori je n'ai rien de dévalidé, c'est un site très standard ...

Pierre.

Offline

#30 Re: Plugin ReCaptcha

(22-11-2018 16:08:36)


Bonjour,

Rajoutes dans contact.html

...
        {block name="contact-form"}
            {form name="thelia.front.contact"}
            {if $form_error}
                <div class="alert alert-danger">{$form_error_message}</div>
            {/if}
...

Offline

#31 Re: Plugin ReCaptcha

(22-11-2018 20:14:09)


Bonjour,

Oui ça le fait parfaitement, j'ai mis en français dans le controller ...

Je ne peux m'empêcher de revenir sur tout ce processus pour arriver à faire marcher un plugin au fond simple... pour moi cela défie carrément la notion de plugin, dans tous les CMS que je connais, installer un plugin nécessite 2 clics et 3 paramètres ce qui fait que je n'ai jamais vraiment cherché dans les bonnes directions, pensant toujours que la doc qui disait, je cite "This module allow you to add easily a reCAPTCHA to your form" avait raison et que ça devrait être simple, je n'imaginais simplement pas que je devrais modifier un controller du core ...
La il faut faire des modifications aux templates (logique) mais aussi au controller dans quelque chose qui sera écrasé à la prochaine mise à jour sauf à créer un nouveau module ... pour faire marcher ce plugin et le rendre pérenne il faut quasiment faire un second plugin ... (ok c'est une simple duplication mais largement hors de portée d'un utilisateur de base) ...

Bref que faire d'autre sinon remercier avec effusion ceux qui acceptent d'aider, acheter un bouquin sur Symfony et tenter d'apprendre une techno de plus .... :-( J'ai dû installer des reCaptacha plusieurs 10aines de fois dans des Wordpress, Spip, Drupal ou même sites HTML sans jamais que ça me prenne plus de 10mn, là ça a plutôt été 10 jours ... Oh well ...

Pierre

PS: Zzuutt si tu passes par Grenoble, une bière t'attends :-)

Last edited by pierrot (22-11-2018 20:15:36)

Offline

#32 Re: Plugin ReCaptcha

(23-11-2018 07:35:12)


Ce module ne s'intègre pas tout seul à la form de contact, il est fourni comme un outil pour les développeurs.

Il faudrait que quelqu'un prenne un moment pour faire cette intégration.


OpenStudio Toulouse

Offline

#33 Re: Plugin ReCaptcha

(23-11-2018 09:44:22)


Bonjour,
Attention, mon idée n'était pas de critiquer le plugin mais peut-être plutot de critiquer la doc qui oublie complètement de mentionner tout ça, voire qui au contraire donne l'impression que c'est très simple. Si j'avais su avant j'aurai probablement pris direct la voie d'une intégration simple à la mano (no hook, direct dans le code du template, un peu de jquery, ...), mais une fois qu'on a démarré dans une voie c'est souvent difficile de revenir en arrière on pense que la solution est toujours juste à portée de main ... :-) (sur ce précepte l'autre jour j'ai attendu 1h20 le support OVH au téléphone, une fois qu'on a attendu X minutes il semble débile de perdre cet acquis et de recommencer plus tard :-)
Bref en tous cas maintenant je sais !
Pierre.

PS: et l'offre bière tient aussi bien sûr pour roadster31 qui m'a moultes fois dépanné ici !!

Offline

#34 Re: Plugin ReCaptcha

(28-08-2019 10:51:06)


Bonjour

J'essaie d'intégrer un bouton caPTCHA invisible dans le formulaire d'inscription à la newsletter... mais c'est dur !
Voilà où j'en suis. Cela pourra peut-être aider ou me débloquer.

J'ai créé un compte sur Google Captcha "bouton invisible v2"

Dans le fichier /templates/frontOffice/monsite/newsletter.html j'ai ajouté  {hook name="recaptcha.check"} comme ceci :

            {form name="thelia.front.newsletter"}
                <form id="form-newsletter" action="{url path="/newsletter"}" method="post">
                {hook name="recaptcha.check"}

et aussi {hook name="recaptcha.invisible.button"} là :

 <div class="form-group group-btn">
                            <div class="control-btn">
                                <button type="submit" class="btn btn-primary" {hook name="recaptcha.invisible.button"}><i class="fa fa-chevron-right"></i> {intl l="Subscribe"}</button>
                            </div>
                        </div><!--/.form-group-->

Dans le fichier /local/modules/Front/Controller/NewsletterController.php j'ai ajouté : :

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

et puis :

        try {
            $form = $this->validateForm($newsletterForm);
            
$checkCaptchaEvent = new ReCaptchaCheckEvent();
$this->dispatch(ReCaptchaEvents::CHECK_CAPTCHA_EVENT, $checkCaptchaEvent);

if ($checkCaptchaEvent->isHuman() == false) {
    throw new \Exception('Invalid captcha');
}

et enfin j'ai vérifié que j'ai bien {hook name="main.head-top"} dans /templates/frontOffice/monsite/layout.tpl

Bon et alors quand je veux inscrire un email à la newsletter j'ai un message en lightbox "Invalid captcha".

Est-ce que j'ai tout faux ou qu'est-ce que j'ai loupé ?

Merci
Gildart

Offline

#35 Re: Plugin ReCaptcha

(18-11-2020 23:20:35)


Bonsoir,

je déterre le sujet ... Visiblement j'ai le même genre de galère que GILDART. À l'exeption que je récupère la page d'erreur "Ooops"

Voici comment j'ai intégré le plugin :

ContactControler.php :

<?php
/*************************************************************************************/
/*                                                                                   */
/*      Thelia	                                                                     */
/*                                                                                   */
/*      Copyright (c) OpenStudio                                                     */
/*      email : info@thelia.net                                                      */
/*      web : http://www.thelia.net                                                  */
/*                                                                                   */
/*      This program is free software; you can redistribute it and/or modify         */
/*      it under the terms of the GNU General Public License as published by         */
/*      the Free Software Foundation; either version 3 of the License                */
/*                                                                                   */
/*      This program is distributed in the hope that it will be useful,              */
/*      but WITHOUT ANY WARRANTY; without even the implied warranty of               */
/*      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
/*      GNU General Public License for more details.                                 */
/*                                                                                   */
/*      You should have received a copy of the GNU General Public License            */
/*	    along with this program. If not, see <http://www.gnu.org/licenses/>.         */
/*                                                                                   */
/*************************************************************************************/

namespace Front\Controller;

use Thelia\Controller\Front\BaseFrontController;
use Thelia\Core\Event\Contact\ContactEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Form\Definition\FrontForm;
use Thelia\Form\Exception\FormValidationException;
use Thelia\Log\Tlog;
use Thelia\Model\ConfigQuery;
use ReCaptcha\Event\ReCaptchaCheckEvent;
use ReCaptcha\Event\ReCaptchaEvents;

/**
 * Class ContactController
 * @package Thelia\Controller\Front
 * @author Manuel Raynaud <manu@raynaud.io>
 */
class ContactController extends BaseFrontController
{
    /**
     * send contact message
     */
    public function sendAction()
    {
        $contactForm = $this->createForm(FrontForm::CONTACT);
        
        try {
            $form = $this->validateForm($contactForm);
            $checkCaptchaEvent = new ReCaptchaCheckEvent(); 
                $this->dispatch(ReCaptchaEvents::CHECK_CAPTCHA_EVENT, $checkCaptchaEvent);
                if ($checkCaptchaEvent->isHuman() == false) { throw new \Exception('Invalid reCAPTCHA'); }

            $event = new ContactEvent($form);

            $this->dispatch(TheliaEvents::CONTACT_SUBMIT, $event);

            $this->getMailer()->sendSimpleEmailMessage(
                [ ConfigQuery::getStoreEmail() => $event->getName() ],
                [ ConfigQuery::getStoreEmail() => ConfigQuery::getStoreName() ],
                $event->getSubject(),
                '',
                $event->getMessage(),
                [],
                [],
                [ $event->getEmail() => $event->getName() ]
            );

            if ($contactForm->hasSuccessUrl()) {
                return $this->generateSuccessRedirect($contactForm);
            }
            
            return $this->generateRedirectFromRoute('contact.success');
            
        } catch (FormValidationException $e) {
            $error_message = $e->getMessage();
        }
        
        Tlog::getInstance()->error(sprintf('Error during sending contact mail : %s', $error_message));
        
        $contactForm->setErrorMessage($error_message);
        
        $this->getParserContext()
            ->addForm($contactForm)
            ->setGeneralError($error_message)
        ;
        
        // Redirect to error URL if defined
        if ($contactForm->hasErrorUrl()) {
            return $this->generateErrorRedirect($contactForm);
        }
    }
}

J'ai tenté une copie bête et méchante du fichier ContactControler de Zzuutt et là j'obtiens le message "invalidCaptcha" que je coche ou non ...

Je suis un peu coincé.

Offline

#36 Re: Plugin ReCaptcha

(20-11-2020 23:59:25)


Bon j'avance un peu, visiblement je n'arrive pas à récupérer

$checkCaptchaEvent

, J'obtiens toujours Invalid captcha .....

Ah et je suis en 2.4.2

ContactControler

namespace Front\Controller;

use Thelia\Controller\Front\BaseFrontController;
use Thelia\Core\Event\Contact\ContactEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Form\Definition\FrontForm;
use Thelia\Form\Exception\FormValidationException;
use Thelia\Log\Tlog;
use Thelia\Model\ConfigQuery;
use ReCaptcha\Event\ReCaptchaCheckEvent;   
use ReCaptcha\Event\ReCaptchaEvents;

/**
 * Class ContactController
 * @package Thelia\Controller\Front
 * @author Manuel Raynaud <manu@raynaud.io>
 */
class ContactController extends BaseFrontController
{
    /**
     * send contact message
     */
    public function sendAction()
    {
        $contactForm = $this->createForm(FrontForm::CONTACT);
        
        try {
            $form = $this->validateForm($contactForm);
            
            $checkCaptchaEvent = new ReCaptchaCheckEvent();
        

            $event = new ContactEvent($form);

            $this->dispatch(TheliaEvents::CONTACT_SUBMIT, $event);
            
            $this->dispatch(ReCaptchaEvents::CHECK_CAPTCHA_EVENT, $checkCaptchaEvent);
            if ($checkCaptchaEvent->isHuman() == false) {
    				throw new \Exception('Invalid captcha');
				}
            
            					
            $this->getMailer()->sendSimpleEmailMessage(
                [ ConfigQuery::getStoreEmail() => $event->getName() ],
                [ ConfigQuery::getStoreEmail() => ConfigQuery::getStoreName() ],
                $event->getSubject(),
                '',
                $event->getMessage(),
                [],
                [],
                [ $event->getEmail() => $event->getName() ]
            );
            
            

            if ($contactForm->hasSuccessUrl()) {
            	
                return $this->generateSuccessRedirect($contactForm);
            }
         return $this->generateRedirectFromRoute('contact.success');
            
        } catch (FormValidationException $e) {
            $error_message = $e->getMessage();
        } catch (\Exception $ex) {
            // Any other error
            $error_message = $ex->getMessage();
        }
        
        Tlog::getInstance()->error(sprintf('Error during sending contact mail : %s', $error_message));
        
        $contactForm->setErrorMessage($error_message);
        
        $this->getParserContext()
            ->addForm($contactForm)
            ->setGeneralError($error_message)
        ;
        
        // Redirect to error URL if defined
        if ($contactForm->hasErrorUrl()) {
            return $this->generateErrorRedirect($contactForm);
        }
    }
}

Ah et chose étrange depuis quelques temps je n'ai plus la carte googlemaps sur ma page de contact ?! Est ce lié ?

Merci