[SPIP Zone] Mailsubscribers et Champs Extras

Salut,

j’essaie de suivre la méthode de Marcimat pour ajouter des champs extras au formulaire d’inscription à la newsletter :

Je passe donc via un plugin indépendant mais, avec NoSpam activé, j’ai une erreur lorsque je valide le formulaire avec champ extra : « Impossible de prendre en compte votre message. Merci de le soumettre à nouveau ! »
Si je supprime le champ extra, ça refonctionne.

Est-ce qu’il faut redéclarer qqch à NoSpam quand il y a un champ extra ?

jean marie

Je tente un petit up, des fois que…

Suite de mes galères…

En creusant, le log de nospam indique un problème de jeton avec le formulaire newsletter_subscribe : Log activé une fois décommenté L265 de

J’ai donc tenté de redéclarer le formulaire via pipelines de mon plugin avec

function cform_nospam_lister_formulaires($formulaires) {
$formulaires[] = ‹ newsletter_subscribe ›;
$formulaires[] = ‹ newsletter_unsubscribe ›;
return $formulaires;
}

(comme le fait mailsubscribers ) + plugin.xml, mais c’est pas mieux.

Bref, je suis coincé ! Alors, si qq1 a une piste, je prends…

Le 04/09/2019 à 10:59, Jean Marie Grall a écrit :

Suite de mes galères...

En creusant, le log de nospam indique un problème de jeton avec le formulaire newsletter_subscribe : http://spip.pastebin.fr/58131
Log activé une fois décommenté L265 de https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/nospam/nospam_pipelines.php#L265

J'ai donc tenté de redéclarer le formulaire via pipelines de mon plugin avec

functioncform_nospam_lister_formulaires($formulaires) {
$formulaires = 'newsletter_subscribe';
$formulaires = 'newsletter_unsubscribe';
return$formulaires;
}

(comme le fait mailsubscribers https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/mailsubscribers/trunk/mailsubscribers_pipelines.php#L385 ) + plugin.xml, mais c'est pas mieux.

sans doute le "bug" connu de la trop grande sucession d'#INCLURE. Il faut préferer des <INCLURE>
cf la remarque ici

https://www.spip.net/fr_article1828.html

Le 04/09/2019 à 12:08, Maïeul a écrit :

Le 04/09/2019 à 10:59, Jean Marie Grall a écrit :

En creusant, le log de nospam indique un problème de jeton avec le formulaire newsletter_subscribe : http://spip.pastebin.fr/58131
Log activé une fois décommenté L265 de https://zone.spip.net/trac/spip-zone/browser/spip-zone/_plugins_/nospam/nospam_pipelines.php#L265

sans doute le "bug" connu de la trop grande sucession d'#INCLURE. Il faut préferer des <INCLURE>

Ça serait pas un oubli de déclaration de <necessite> ou <utilise> sur ton plugin pour que l’un passe avant l’autre ? (je dis ça au pif)

MM.

Merci à tous les 2 pour vos pistes.

Le 04/09/2019 à 14:32, Jean Marie Grall a écrit :

L'environnement avec CForm : http://spip.pastebin.fr/58134
L'environnement sans CForm : http://spip.pastebin.fr/58135

De *quel* environnement tu parles ? à quel endroit ?

MM.

De ce que vois sur les var_dump, le pipeline est tout pourri, au lieu d’avoir uniquement un args et un data il a plein d’autres choses, résultat en sortie tout reste au lieu que le champs data soit extrait du pipeline.
Je suspecte donc que tu y mets des choses qui ne vont pas au mauvais endroit dans ton plugin cform.

Mais si tu ne postes pas ton code quelque part on pourra pas t’aider beaucoup plus…

--
Cédric
Le 4 sept. 2019 à 2:32 PM +0200, Jean Marie Grall <jeanmarie.listes@cousumain.info>, a écrit :

Merci à tous les 2 pour vos pistes.

Le 04/09/2019 à 12:08, Maïeul a écrit :
> sans doute le "bug" connu de la trop grande sucession d'#INCLURE. Il faut préferer des <INCLURE>
Je fais mes tests avec la dist et le minimum de plugins activés : Newsletter / Champs extras / NoSpam et leurs dépendances + le plugin CForm (Mailsubscribers - SPIP-Contrib)
Donc à priori pas d'inclures surnuméraires...

Le 04/09/2019 à 13:23, Matthieu Marcillaud a écrit :
> Ça serait pas un oubli de déclaration de <necessite> ou <utilise> sur ton plugin pour que l’un passe avant l’autre ? (je dis ça au pif)
J'ai essayé :
<necessite nom="nospam" compatibilite="[1.6.0;]" />
c'est pas mieux... Comment savoir qui passe en 1er ?
A partir du moment où j’active CForm, il y a 2 choses qui changent (en plus de l'apparition des champs extras) :
- NoSpam ne laisse plus passer le formulaire car il n'y a pas inséré le jeton
- le champ adresse n'affiche plus mon adresse comme si session_email n'était plus dispo dans l'environnement
L'environnement avec CForm : http://spip.pastebin.fr/58134
L'environnement sans CForm : http://spip.pastebin.fr/58135
jean marie
----
spip-zone@rezo.net - https://listes.rezo.net/mailman/listinfo/spip-zone

Entre temps, je pense avoir compris une partie du problème.

La fonction "pipeline()" qui est utilisée par SPIP a un retour différent en fonction du nombre d’éléments dans le tableau qu’elle reçoit. S’il y a 2 éléments et la clé 'data' (args + data le plus souvent), elle ne retourne que le contenu de 'data'.

Dans le pipeline charger de l’exemple indiqué de cform, on insère les saisies à la racine directement, ce qui me semble faux (on obtient args + data + _champs_extras_saisies), ce qui modifie le retour de 'pipeline', tout en insérant la clé pour les saisies a priori au mauvais endroit.

Tentes avec cette correction ( ['data'] en plus sur l’affectation des saisies) :

function cform_formulaire_charger($flux) {
  if ($flux['args']['form'] == 'newsletter_subscribe') {
    include_spip('inc/cextras');
    if ($saisies = cextras_obtenir_saisies_champs_extras('mailsubscribers')) {
      $flux['data']['_champs_extras_saisies'] = $saisies;
    }
  }
  return $flux;
}

MM.

Le 04/09/2019 à 14:58, Matthieu Marcillaud a écrit :

Le 04/09/2019 à 14:32, Jean Marie Grall a écrit :

L'environnement avec CForm : http://spip.pastebin.fr/58134
L'environnement sans CForm : http://spip.pastebin.fr/58135

De *quel* environnement tu parles ? à quel endroit ?

MM.
----
spip-zone@rezo.net - https://listes.rezo.net/mailman/listinfo/spip-zone

Le 04/09/2019 à 15:28, Matthieu Marcillaud a écrit :

Entre temps, je pense avoir compris une partie du problème.

La fonction "pipeline()" qui est utilisée par SPIP a un retour différent en fonction du nombre d’éléments dans le tableau qu’elle reçoit. S’il y a 2 éléments et la clé 'data' (args + data le plus souvent), elle ne retourne que le contenu de 'data'.

Dans le pipeline charger de l’exemple indiqué de cform, on insère les saisies à la racine directement, ce qui me semble faux (on obtient args + data + _champs_extras_saisies), ce qui modifie le retour de 'pipeline', tout en insérant la clé pour les saisies a priori au mauvais endroit.

Tentes avec cette correction ( ['data'] en plus sur l’affectation des saisies)

Bien vu, c'est ça !

Avec cette correction, le formulaire affiche bien mon adresse (car je suis connecté) et NoSpam lui ajoute bien le jeton, donc les inscriptions fonctionnent.

Merci pour le SAD :slight_smile: Je vais corriger sur le forum histoire de faire propre... ou même un petit tuto ?

                 jean marie

Hop le mini-tuto : SPIP-Contrib
Si vous voyez des modifs avant publication.

Et c'est mis à jour dans le forum...

Le 04/09/2019 à 15:38, Jean Marie Grall a écrit :

[...]

Je vais corriger sur le forum histoire de faire propre... ou même un petit tuto ?

                jean marie