Erreur dans saisies suite à mise à jour du plugin

Bonjour,
Sur un Spip 4.1.12 avec tous les plugins à jour, un formulaire me retourne l’erreur suivante quand je veux regarder la réponse dans le BO:

Erreur d’exécution ../plugins/auto/saisies/v5.0.2/saisies-vues/_base.html | File […]/plugins/auto/saisies/v5.0.2/saisies_fonctions.php Line 80 : Argument 1 passed to saisie_traitement_vue() must be of the type string or null, array given, called in […]/tmp/cache/skel/html_ba2f77aba26a56ce00d0fb18124a3929.php on line 47

Le formulaire semble bien enregistrer les résultats mais on a cette erreur et en FO:

Erreur d’exécution plugins/auto/saisies/v5.0.2/saisies-vues/_base.html

Je dois rechercher dans mon formulaire ou c’est juste un petit bug dans Saisies ? c’est je pense suite à la mise à jour de Formidable et de Saisies que j’ai faite ce matin, me souvient plus d’ou je venais par contre le Sasies actuel est à la 5.0.2.

PS: je suis en PHP 7.4.33

Pierre

Comme toujours lorsqu’il s’agit d’un debug lié à formidable, peux tu envoyer un export yaml. Ca sera plus simple à voir ce qu’il en est.

On peut envoyer ça ou ? je peux faire un MP ici ?

si tu pense vraiment que c’est privé, oui. Sinon tu peux simplement copier-coller ici le contenu du yaml, en le mettant entre backsticks.

Ok ici donc … par contre je me rends compte que ça me semble très court, j’ai une saisie qui affiche des produits qui fait qu’en réalité le formulaire est bcp plus long.

id_formulaire: '4'
identifiant: resa
titre: Réservation
descriptif: ''
css: ''
message_retour: "Nous vous remercions pour votre réservation ! Nous vous contacterons dès la réception de vos produits, le règlement s'effectuera lors du retrait à l'épicerie.\r\n\r\n[Retour au formulaire->433]."
saisies:
  -
    options: { label: Nom, placeholder: Nom, type: text, size: '40', autocomplete: defaut, obligatoire: 'on', nom: input_1 }
    identifiant: '@6214b5985c65a'
    verifier: {  }
    saisie: input
  -
    options: { label: Prénom, placeholder: Prénom, type: text, size: '40', autocomplete: defaut, obligatoire: 'on', nom: input_2 }
    identifiant: '@6214b599a39bc'
    verifier: {  }
    saisie: input
  -
    options: { label: 'Adresse email', placeholder: 'Adresse email', type: text, size: '40', autocomplete: defaut, obligatoire: 'on', nom: email_1 }
    verifier: { type: email, options: { mode: normal } }
    identifiant: '@6214b59ad8f1e'
    saisie: email
  -
    options: { label: Téléphone, placeholder: Téléphone, type: text, size: '40', autocomplete: defaut, obligatoire: 'on', nom: input_3 }
    verifier: { type: telephone, options: '' }
    identifiant: '@6214b59ef1e4c'
    saisie: input
  -
    options: { label: Produits, multiple: 'on', nom: produits_2 }
    identifiant: '@61f7b1f0924c7'
    verifier: {  }
    saisie: produits
  -
    options: { label: Remarques, placeholder: Remarques, rows: '3', cols: '40', nom: textarea_1 }
    identifiant: '@62266892b5eaf'
    verifier: {  }
    saisie: textarea
  -
    options: { label: 'Cases à cocher', datas: 'okcgv|j''accepte les <a href="https://epicerie.locavore.fr/technique/conditions-generales-de-vente.html" class="mediabox boxIframe boxWidth-500px boxHeight-600px">conditions de ventes</a> et le traitement de mes données personnelles pour enregistrer cette prise de commande', choix_alternatif_label: 'Autre choix', obligatoire: 'on', nom: checkboxstock_1 }
    verifier: {  }
    identifiant: '@6214fc1599f5a'
    saisie: checkboxstock
traitements:
  enregistrement:
    moderation: posteriori
    moderer_admins: ''
    multiple: 'on'
    modifiable: ''
    effacement: ''
    effacement_delai: ''
    identification: ''
    variable_php: ''
    unicite: ''
    message_erreur_unicite: ''
    anonymiser: ''
    ip: 'on'
    invalider: ''
    resume_reponse: ''
    analyse_exclure_champs: ''
    identification_reponses: ''
  email:
    modification_reponse: ''
    champ_sujet: 'Votre réservation locavore'
    champ_sujet_modif_reponse: ''
    champ_sujet_valeurs_brutes: ''
    exclure_champs_email: checkboxstock_1
    pj: ''
    masquer_liens: ''
    activer_ip: ''
    masquer_champs_vides: ''
    destinataires_plus: epicerie@locavore.fr
    destinataires_selon_champ: ''
    champ_courriel: email_1
    activer_vrai_envoyeur: ''
    champ_nom: ''
    activer_accuse: 'on'
    sujet_accuse: 'Merci pour votre commande à l''épicerie Locavore'
    texte_accuse: ''
    masquer_valeurs_accuse: ''
    courriel_envoyeur_accuse: epicerie@locavore.fr
    nom_envoyeur_accuse: 'L''épicerie Locavore'
    champ_courriel_destinataire_form: ''
    accuse_explication: ''
  stock:
    message: ''
public: non
apres: valeurs
url_redirect: ''
statut: publie
date_creation: '2022-01-28 13:59:20'
maj: '2022-09-22 21:33:33'
composition: ''
composition_lock: '0'

Le vrai formulaire est là: Réservation en ligne - L’épicerie locavore

Pierre

C’est parce que j’aurais du préciser triplbackstik, pas backstick simple. Merci à @marcimat. Je regarde tantot.

tu utilise 2 saisies non livrés en standards avec SPIP : produits et checkbockstocks.

Peux tu me dire où les trouver ?

Ben ce sont des dev à nous, donc je les ai … je peux éventuellement les envoyer, je ne sais pas comment ici, et oui il vaudrait peut-être mieux que ça reste un peu privé :slight_smile:

tu peux m’envoyer un mp si tu veux…

Bon,

je viens de regarder. Ton problème est arrivé en passant de la v4.0.11 à la v5.0.2

Le commit problématique est le suivant fix: `saisie_traitement_vue()` peut recevoir un argument `null` sans provoquer de warning sur `trim()` · 638a512dc0 - saisies - SPIP on GIT, il a plus fortement typer la fonction saisie_traitement_vue(), qui est l’affichage par défaut du résultat d’un saisie.

Cela étant, avant tu avais quelque chose comme cela.

Comme tu peux voir Produits/Case à cocher sont affichés sous forme « Array ». Donc t’avais pas tellement plus d’information.

La raison pour laquelle tu as cela ? parce que tu n’a pas de vue pour tes saisies spécifiques (je me demande comment tu t’en sortais d’ailleurs). Je t’invite à lire la doc sur « créer ses propres saisies » qui explique ce que sont les vues.

Par ailleurs, 2 remarques sur les saisies que tu m’a envoyé en privé :

  • tu ferais mieux de faire des héritages de saisies (voir la doc à ce sujet)
  • le yaml de ta sa saisie checkboxstock.yaml est bugué, si bien que les dernières versions du plugin yaml ne peut pas le lire, sans doute des pb d’indentations.

Bonjour,

Merci pour ces investigations poussées, j’essaye de faire le tour (c’est un ancien collègue qui avait fait ça donc j’ai un peu de mal à comprendre tous le process, j’ai vaguement l’impression qu’il avait utilisé La Fabrique mais je peux me tromper).
A priori on a bien une vue pour les produits dans un dossier saisies-vues je ne te l’ai peut-être pas fait suivre … car je n’ai jamais vu l’affichage que tu joins, tout fonctionne ici à l’affichage, la cliente aurait bien évidemment remonté le souci si elle avait cet affichage, le souci se passe vraiment quand on valide le formulaire (j’ai renvoyé en MP un lien avec saisies-vues)

Pour le yaml buggé, je l’ai passé dans un « checker », il me retourne le souci suivant:

'unknown escape sequence (44:43)

41 | … m: ‹ vue_masquer_sous_groupe ›
42 | … bel_case: ‹ <:saisies:option_vue_masquer_sous_groupe:> ›
43 | … nteneur_class: ‹ pleine_largeur ›
44 | … ficher_si: « @datas@ MATCH ‹ /^*/m › »
-----------------------------------------^
45 | …
46 | … ie: ‹ textarea ›’

En fait la petite flèche pointe sous l’étoile dans le MATCH. Je doute que mon collègue ait pondu ce YAML par lui-même.
Merci encore !

Pierre

Pour le YAML, il a sans doute fait un copier-coller de ce qui existe de base (comme il a fait pour le html du reste). Encore une fois le problème ne serait pas arrivé si on avait eu un héritage de saisies. Je pense vraiment que tu aurais intérêt à passer par ce mecanisme,

Bon cela étant, merci pour le pointage du checker. C’est le meme problème qu’on a eu dans le corps de saisies. Et donc la solution à appliquer est celle là du commit 93419e645.

Voir

Ok corrigé dans mon yaml, le checker est content :slight_smile:
Merci !

yep, j’ai regardé ton saisie-vues. Il n’y pas de vue pour ta saisie checkboxstock.

Et donc forcément la vue par défaut se rabat sur la fonction saisie_traitement_vue(), la même qui a été durcie en passant en 5.0.3 pour ne plus prendre en entrée que des chaines de caractères.

Or ta saisie checkboxstock stocke des données tabulaires. Donc je pense que tu a toujours eu un array affiché pour cette saisie là.

Ce qui soit dit en passant a pas trop de sens parce que en pratique c’est une case unique, mais bon j’imagine que la personne qui a codé n’avait pas compris la différence entre case unique et cases à cocher.

Quoi qu’il en soit, une valeur tabulaire n’est pas une chaine → ca plante.

Donc fait un squelette saisie-vues/checkboxstock.html, qui hérite de la saisie-vue/checkbox et ca ira mieux.