nenes25/eicaptcha

Catpcha not showing but asks for it

Closed this issue · 6 comments

Check if your issue exists

  • I confirm that i've search that my issue does not already exists

Your prestashop version

1.7.8.x

Eicaptcha version

2.3.x

Do you use a specific theme ?

jms_yanka

Describe the bug

The captcha doesn't show but afeter send the form gives captcha error

Screenshots

FireShot Capture 081 - Iniciar sesión - tierradeabalorios com

Additional context

No response

Hello,
Please check this issue : https://github.com/nenes25/eicaptcha/issues/225 and if the hook exists. this seems to be related.

Regards,

Bonjour,

J'ai le même soucis depuis quelques jours/semaines je ne sais pas trop sur mes formulaires :
https://www.librairie-du-collectionneur.fr/contactez-nous-9

Le site était en mode maintenance et je viens de le lancer en début d'année.
Cela fonctionnait très bien en mode maintenance il y a quelques semaines quand j'avais testé, mais là le captcha n'apparait plus et bloque la validation des formulaires.
Je n'ai pas changé la configuration de ce module ou de reCAPTCHA depuis.
J'ai ajouté quelques modules depuis mais que j'ai désactivé pour voir si cela pouvait venir d'un conflit. Je n'ai rien trouvé.
J'ai essayé en Captcha v3 pour changer mais ça ne fonctionne pas plus.
J'ai aussi essayé de modifier la position du module pour le placer en haut des points d'accroche.
J'ai vérifié la présence du hook_create_account_form, pas de soucis.

Là, je ne vois pas d'ou le problème peut venir.
Le système de log est-il sensé fonctionner? Je l'ai activé mais n'ai ni de dossier logs dans /modules/eicaptcha/src/ et uniquement un index.php dans modules/eicaptcha/logs/.

Voici mon paramétrage :
Les 2 erreurs en seconde capture étaient déjà présentes lors de mes premiers essais et n'empêchaient pas le bon fonctionnement mais peut être faut-il que je les règle ?

Capture d’écran 2023-01-05 à 13 36 32

Capture d’écran 2023-01-05 à 13 36 52

Merci d'avance.

Ok à force de me creuser la tête j'ai pu pour résoudre mon problème, mais je ne suis pas contre une remarque sur ma solution en fin de post.
La dernière mise à jour du module Formulaire de Contact en 4.4.0 a écrasé une modification que j'avais faite dans le fichier contactform.php.

Mon theme étant basé sur un fork d'elementor et utilisant des widgets pour l'affichage des formulaires, j'y avais ajouté en fin de la méthode getWidgetVariables les lignes suivantes:
if ($eicaptcha = Module::getInstanceByName('eicaptcha')) {
$this->contact['renderCaptcha'] = $eicaptcha->hookDisplayEicaptchaVerification(['module' => $this->name]);
}

J'ai rendu cela indépendant des mises à jour futures en déplaçant plutôt le code dans /override/modules/contactform/contactform.php

Mais pour cela j'ai dû y recopier l'intégralité de la fonction getWidgetVariables dont le code ne sera donc plus maintenu à jour. Y'a t'il une manière de faire permettant de "laisser" le code d'une fonction native et d'overrider juste un bout du code de la fonction ? J'imagine que les hook sont justement là pour palier à ce problème mais il y a peut être un truc que j'ai loupé.

En tout cas merci pour ce module qui m'a fait gagner un temps fou. J'ai également téléchargé votre module permettant de filtrer les emails de produits hors stock, une très belle découverte !!

Bonjour,

Effectivement vous pouvez faire un override du module pour être tranquille sur les prochaines mises à jour si vous souhaitez reprendre votre développement.
Dans le cas d'un override il faut essayer de mettre le moins de code possible, au lieu de surcharger la totalité de la fonction parente vous pouvez faire un code du genre

public function getWidgetVariables($hookName = null, array $configuration = []) { $variables = parent::getWidgetVariables($hookName,$configuration); if ($eicaptcha = Module::getInstanceByName('eicaptcha')) { $variables ['renderCaptcha'] = $eicaptcha->hookDisplayEicaptchaVerification(['module' => $this->name]); } return $variables; }

Ah super, je me disais bien qu'il devait y avoir un moyen mais étant une buse en php je ne voyais pas comment faire.

Le code ne fonctionne pas tel quel.

Il faut faire en sorte d'attribuer a la classe la variable et pas uniquement la retourner.

J'ai donc d'abord essayé un truc de ce style que je n'ai pas réussi à coder correctement :

public function getWidgetVariables($hookName = null, array $configuration = []) { $variables = parent::getWidgetVariables($hookName,$configuration); if ($eicaptcha = Module::getInstanceByName('eicaptcha')) { $this->contact['renderCaptcha'] = $eicaptcha->hookDisplayEicaptchaVerification(['module' => $this->name]); $variables->contact['renderCaptcha'] = $this->contact['renderCaptcha']; } return $variables; }

Puis pour que ça fonctionne j'ai du reprendre le retour de la fonction parente, je ne sais pas trop pourquoi mais de la sorte cela fonctionne même si c'est moins propre:
public function getWidgetVariables($hookName = null, array $configuration = []) { parent::getWidgetVariables($hookName,$configuration); if ($eicaptcha = Module::getInstanceByName('eicaptcha')) { $this->contact['renderCaptcha'] = $eicaptcha->hookDisplayEicaptchaVerification(['module' => $this->name]); } return [ 'contact' => $this->contact, 'notifications' => $notifications, 'token' => $this->context->cookie->contactFormToken, 'id_module' => $this->id, ]; }

stale commented

This issue has been automatically marked as stale because it has not had author feedback. It will be closed if no further activity occurs.