Formidable, le générateur de formulaires

Un générateur de formulaires facilement configurable pour les non-informaticiens et facilement extensible pour les développeur⋅euses.

Introduction

Historiquement, deux plugins avaient déjà été développés précédemment pour gérer des formulaires :

  • Forms &Tables, qui n’a pas été complètement porté pour SPIP 2.
  • et spip-formulaire créé par artego mais qui n’était plus maintenu.

La question s’est donc posée : construire sur la base d’un des deux plugins ou repartir de zéro ?
Form &Table, très complet pour les utilisateurs, présentait l’inconvénient d’avoir un côté “fourre-tout” qui le rendait difficilement modifiable et difficile à personnaliser par les dévs.

Il a finalement été décidé de repartir de zéro pour proposer quelque chose:

  • de plus facile à utiliser pour les utilisateurs d’une part,
  • mais aussi de plus facile à personnaliser pour les développeur⋅euses.
    Avec le parti pris de se baser de préférence sur plusieurs petits plugins spécialisés et de tirer parti de la nouvelle norme CVT.

Interface utilisateur

L’utilisation basique de l’interface est abordée dans ce screencast : Mon premier formulaire pas à pas : c’est Formidable !

Appeler mon formulaire

Vous devez appeler le formulaire ayant le nom “formidable”, en lui passant en paramètre l’identifiant de votre formulaire.

Dans un contenu
Utilisez le modèle <formulaire> classique : <formulaire|formidable|id=34> ou bien <formulaire|formidable|id=contact>

Dans un squelette
#FORMULAIRE_FORMIDABLE{34} ou bien #FORMULAIRE_FORMIDABLE{contact}

Afficher les résultats du formulaire

Dans un contenu
Utilisez le modèle <formulaire_analyse|id_formulaire=34>

Pré-remplir dynamiquement les champs d’un formulaire

À noter, vous avez la possibilité de surcharger dans l’appel, les valeurs par défaut des champs de votre formulaire. Pour cela, vous devez passer un tableau de nom=>valeur en deuxième paramètre. Vous pourrez trouver les noms de vos champs dans l’aide-mémoire situé sur la page de configuration des traitements.

Dans un contenu
Le tableau de valeurs dans un paramètre defaut sous forme d’une suite de chaînes “clé,valeur” séparée par des virgules :
<formulaire|formidable|id=contact|defaut=hidden1,valeur,input_5,autrevaleur>

Dans un squelette
Le tableau en deuxième paramètre :

  1. #FORMULAIRE_FORMIDABLE{contact, #ARRAY{nom_du_champ, Ma valeur}}

C’est particulièrement utile pour remplir un champ caché avec une valeur dynamique venant du squelette :

  1. #FORMULAIRE_FORMIDABLE{contact, #ARRAY{hidden_1, #ID_DOCUMENT}}

Pré remplir les champs depuis une ancienne réponse

Si les réponses sont enregistrées, on peut passer en troisième argument un identifiant de réponse.

  1. #FORMULAIRE_FORMIDABLE{contact,'',23}

pour modifier la réponse 23.

Champs oui-non et case unique

Pour rendre obligatoire la réponse “oui” à un champ de type oui-non ou case unique (pour la validation de conditions d’utilisation par exemple), il faut simplement rendre le champ obligatoire.

Courriels de notification

Une option des traitements proposés permet d’envoyer un mail de notification automatiquement, à chaque saisie d’un formulaire.

Le squelette par défaut employé pour la mise en forme de ces mails est plugins/formidable/notifications/formulaire_email.html. Vous pouvez le copier dans le répertoire ’notifications’ de votre squelette et l’y modifier à votre guise. Cette modification vaudra pour tous les formulaires.

Pour utiliser un squelette spécifique pour les mails de notification de l’un seulement des formulaires définis avec Formidable, il suffit d’ajouter son squelette dans le répertoire ’notifications’ de votre dossier squelettes, mais en ajoutant l’identifiant.

IDENTIFIANT étant l’identifiant du formulaire défini dans Formidable, les squelettes doivent se nommer :
formulaire_IDENTIFIANT_email.html pour le mail aux destinataires
formulaire_IDENTIFIANT_accuse.html pour l’accusé de réception du visiteur

Conservation des IP

Les adresse IP des personnes répondant aux formulaires sont stockées en base de donnée. Depuis la version 1.5 (SPIP 3) / 0.7 (SPIP < 3), elle sont automatiquement hashé, de manière à ce que l’IP ne soit plus reconnaissable, au bout de 124 jours (environ 4 mois).

Pour changer ce délai, vous pouvez redéfinir la constante _CNIL_PERIODE dans votre fichier mes_options.php.

Par exemple :

  1. define('_CNIL_PERIODE', 24*3600);

permet de hasher les IP toutes les 24 heures.

Si vous voulez désactiver le hashage, mettez la valeur à 0.

Envoi de fichiers

Lire l’article complémentaire : Envoyer des fichiers avec un formulaire Formidable.

Mise en forme des saisies

Le plugin ne prévoit aucun réglage de mise en forme des saisies : c’est à chaque squelette d’avoir ses styles. Il respecte cependant la convention d’écriture des formulaire SPIP. Il permet d’ajouter des classes spécifiques sur les saisies.

Voir aussi sur le wiki


-  Complément de doc et exemples sur les boucles et balises de formidable
-  Exemples de stylage CSS d’un formulaire Formidable
-  todoFormidable
-  Formidable, présentation aux Grottes (2010)

updated on 2 October 2019

Discussion

674 discussions

  • 12

    Bonjour,

    J’aimerai savoir si avec Formidable on peut créer un formulaire comme ce qui suit.

    À vrai dire, j’ai déjà créé le formulaire que je souhaite avec l’aide d’un intervenant du forum spip. Mais celui-ci ne fonctionne pas comme attendu.
    Il est visible ici : https://www.the-ghost-bassist.com/bootsy-collins-i-m-leavin-u
    Vous pouvez le tester avec toto@free.fr

    Il s’agit pour les visiteurs de remplir quelques champs pour voir apparaître une ligne lui permettant de télécharger un fichier (zip ou RAR).
    L’admin lui, devrait recevoir une alerte mail lui indiquant le nom du fichier télécharger, le nom et email du visiteur.

    Est ce possible !?

    Merci

    Chrys

    • Mince !
      Pas de piste pour ce type de formulaire ?

      Merci

    • bah ... je sais pas. Il s’agit d’un bete formulaire formidable. Je vois pas où tu éprouve une difficulté.

    • ah ! tu veux que les gens recoivent un fichier, et pas qu’ils l’envoie.

      formidable n’est pas fait pour cela. Tu pourrais créer ton propre formulaire cvt. Ou bien “tricher” : dans la la réponse envoyé au moment où une personne poste un formulaire, tu pourrais mettre un lien vers le fichier à telecharger.

    • Merci pour ta réponse,

      Oui c’est ce que j’ai tenté avec le binôme de fichier HTML et PHP en CVT.
      Visible à l’adresse sur mon ancien post.

      Mais cela ne fonctionne pas comme attendu.

    • Bah du coup
      1) ca concerne pas spécifiquement formidable, donc tu devrais plutot poser ta question sur la liste des utilisateur de spip
      2) sans code impossible de savoir pourquoi ca marche pas.

    • Oui ! je peux mettre les codes ici ?
      Bien que ça ne concerne pas Formidable ?

    • le mieux serait vraiment de demander sur la liste https://listes.rezo.net/mailman/listinfo/spip/
      ou bien passer sur l’irc irc.spip.net

    • Biensur, d’accord et merci :-)

    • Changelog.

      Bonjour,

      Quand une nouvelle version est publiée, je cherche souvent ce qui a été modifié. Serait-il possible d’avoir un fichier ou un paragraphe de changelog quelque part avec un minimum d’explication des changements ?

      Par exemple : je vois que la mise à jour recenté crée une dépendance avec NoSpam. En l’indiquant dans le changelog, on ne serait pas surpris et on ne suspecterait pas une faille.

      Merci en tout cas de cette extension très utile.

    • Bonjour,

      A droite de cette page, comme tout les plugins, tu as un lien vers le “Code source” ce qui te donne les informations de commit.

      C’est ce que tu cherches ?

    • Oui et non. Je recherche un résumé, si possible commenté, des changements comme on le voit dans les fichiers changelog des logiciels libres. Si c’est possible bien sûr.

    • C’est une politique qui n’a jamais été prise dans les plugins spip, mais c’est vrai qu’idéalement il faudrait.

      La dépendance à NoSPam a été mise pour éviter que des gens passent leurs temps à nous demander de mettre un anti spam. Rien à voir avec la sécurité.

    Reply to this message

  • Suggestion de fonctionnalité : autoriser plus largement la duplication

    Bonjour !

    Pour faciliter la création de formulaires par les rédacteurices du site que je gère, j’aimerais créer des modèles que ces personnes – admin restreintes – peuvent dupliquer et retoucher. Or elles ne peuvent pas le faire si elles ne sont pas (co)autrices.

    Serait-il possible de permettre ça soit globalement (via une option dans exec=configurer_formidable) soit au cas par cas ?

    Je sais que je pourrais mettre chaque personne comme coautrice du modèle mais ça me gêne :

    1. Je ne devrais pas oublier d’y ajouter chaque nouvelle personne.
    2. Je ne veux pas que, par erreur, elles puissent modifier le modèle.

    Merci d’avance.


    Question annexe : comment surcharger un squelette privé de plugin ?

    J’ai testé en modifiant la ligne 4 de ./prive/squelettes/extra/formulaire.html du plugin :

    1. [(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui)

    en

    1. [(#AUTORISER{voir, formulaire, #ID_FORMULAIRE}|oui)

    Ça fonctionne mais ce n’est bien sûr pas une solution : je devrais remodifier à chaque mise à jour.

    J’ai donc tenté (ce n’est pas une riche idée non plus mais ça peut faire l’affaire en attendant) de surcharger ce fichier dans mes squelettes, par exemple dans ./squelettes/prive/formidable/extra/, mais ça ne fonctionne pas.

    Pour des plugins, j’ai déjà surchargé des modèles, des feuilles de styles, des fichiers de langue… mais jamais de squelette privé et je n’arrive pas à voir si c’est possible. L’est-ce ? Si oui, quel est le chemin à utiliser ?

    Remerci d’avance.

    1138.

    Reply to this message

  • 7

    Bonjour à tous
    J’ai un petit soucis de calcul en utilisant des données d’un formulaire.
    Je souhaite faire une moyenne.
    Les info du formulaire sont par exemple :
    Nombre d’objets : ..... Poids moyen de l’objet : ....
    Je souhaite calculer le poids moyen de l’ensemble des objets avec la formule :
    (Nb objets A x Poids moyen A + Nb objets B x Poids moyen B + .....) / (Nb objets A + Nb objets B + ...)

    Pour l’instant, j’ai ce code (qui ne prend pas en compte le nombre d’objets). (Input 1 = poids moyen des objets ; textarea_3 = nombre d’objets)

    #SET{total,0}
    <BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire=7}>
    #SET{total,#GET{total}|plus{#VOIR_REPONSE{input_1,brut}}}
    </BOUCLE_reponses>
    [(#GET{total}|div{#TOTAL_BOUCLE}|round{1})]
    </B_reponses>

    Quelqu’un peut-il m’aider s’il plait ?

    • on suppose que input_1 est le poid moyen de l’objet, et input_2 le nombre d’objets.

      Tu dois
      a) calculer le poid total
      b) calculer le nombre total d’objet
      c) calculer poidtotal/nombre_total

      #SET{poids,0}
      #SET{objets,0}
      <BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire=7}>
      #SET{poids,#GET{poids}|plus{#VOIR_REPONSE{input_1,brut}|mult{#VOIR_REPONSE{input_2,brut}}}}
      #SET{objets,#GET{objets}|plus{#VOIR_REPONSE{input_2,brut}}}
      </BOUCLE_reponses>
      [(#GET{poifs}|div{#GET{objets}}|round{1})]
      </B_reponses>

      non testé

    • Bonjour
      Je tiens dans un premier temps à vous remercier pour la solution ci dessus qui fonctionne parfaitement.
      Je me trouve dans l’obligation de modifier le code proposé.
      A présent, je dois intégrer une condition dans mon calcul de moyenne.
      Dans le formulaire, l’une des saisies est le type d’objet (ex : fruit, légume, ...) : nom de la variable dans le questionnaire : textarea_1

      Je dois calculer le poids moyens de chaque type d’objet. et l’intégrer dans un tableau du genre première colonne : type d’objet ; seconde colonne : moyenne.
      Comment faire en sachant qu’il y a une 60aine d’objets possible ?

    • Si tu as un textarea, tu laisse libre aux gens de choisir le type d’objet > tu risque d’avoir des doublons du type “fruit” vs “fruits”.

      En tout cas, l’idée est d’utiliser une structure de #ARRAY pour faire les calculs (une entrée de tableau par type d’objet) et une boucle POUR pour afficher le résultat (sous forme de tableau)

    • L’histoire des doublons n’est pas possible car le textarea sera pré rempli.
      Ce qui me pose problème, c’est comment calculer la moyenne de l’ensemble des saisies pour un même produit.
      J’imagine qu’il faut mettre un “si”, mais je ne vois pas comment faire.
      Voici le bout de code que j’utilise mais ça ne fonctionne pas :

      <BOUCLE_formidable_id_form2(FORMULAIRES_REPONSES){id_formulaire=13} {si textarea_1|=={fruit}}>
      
      
      
                      <td>#VOIR_REPONSE{textarea_1, valeur_uniquement, '' }</td>
                      <td>#VOIR_REPONSE{input_7, valeur_uniquement, '' }</td>
                      <td>#VOIR_REPONSE{input_1, valeur_uniquement, '' }</td>
      
      
      </BOUCLE_formidable_id_form2>        
    • même prempli, tu n’es pas sur qu’une personne ne modifiera pas la valeur. Il vaudrait mieux proposer une liste déroulante (aussi en terme d’ergonomie).

      Comme expliqué, il faut que tu utiliser un #ARRAY. Tu pourra stocker dans un même tableau (#ARRAY) le poid pour chaque type d’objet, et dans un autre tableau le nombre total d’objet, pour chaque objet.

    • Ok, merci. Je vais tenter ma chance. Pour l’instant, c’est du chinois pour moi.

    • En gros, dans ma réponse sur le cas simple, tu avais deux variables :
      -  une pour stocker le poids total
      -  une pour stocker le nombre total d’objet

      Là le problème est que tu a plusieurs types d’objet. Pour ce faire tu va devoir utiliser des “tableaux” (au sens informatique). Un tableau c’est un type de variable permettant d’associer des clés (ici le type) avec des valeurs (ici le poid total pour l’objet dans une première variable, ou le nombre total d’objet pour la seconde variable).

      En gros tu aura quelque chose du type :

      • poid :
        • Fruit -> 3
        • Legume -> 5
      • objets :
        • Fruit -> 2
        • Legume > 1

      Si tu as 3 fruit pesant 2 kg en tout (!) et 1 légume posant 5 kg en tout (!!!).

      Et concrètement, pour faire cela en SPIP, tu utilise la balise #ARRAY (doc sur programmer.spip.net / spip.net).

      Et à la fin pour l’affichage en tableau (HTML) tu utilisera une boucle POUR permettant de parcours les tableau.

    Reply to this message

  • 6

    Bonjour

    J’ai configuré le formulaire pour que le résultat me soit envoyé en y intégrant les fichiers téléversés. Si la taille max est dépassée, un lien est inséré à la place. OK.
    J’ai programmé dans connect.php pour que le lien soit valide 10j.

    J’ai reçu une réponse, il y a 3 jours, Quand je clique, cela ouvre une page de mon site avec le message : formidable_recuperer_fichier_par_email : Accès interdit
    Je suis pourtant bien connecté et webmaster.

    • dans connect.php? normalement c’est mes_options.php

      une possibilité est que le lien soit coupé par le lecteur de mail.

      Il faudrait me transférer le mail en privé pour que je vois ce qu’il en est.
      En tout cas comme cela je n’ai pas d’outil explicatif.

    • Message privé envoyé.

    • Pour mémoire : on suspecte une interaction avec le plugin spip_thelia et son authentification unique.

    • J’ai le même problème.
      Le doc joint est récupérable dans l’admin du site dans la réponse au formulaire mais pas par le lien du mail qui est :

      Formulaire “Fête 2019” posté le 18/06/2019 à 15:45:58.

      Fichier(s) : [Lien expirant dans 15j 0h 0min 0s] received_345391132790639.jpg (JPG - 24 ko) 
      https://www.site.fr/spip.php?action=formidable_recuperer_fichier_par_email&arg=a:4:%7bs:10:%22formulaire%22;s:1:%227%22;s:7:%22reponse%22;s:3:%22792%22;s:7:%22fichier%22;s:28:%22received_345391132790639.jpg%22;s:6:%22saisie%22;s:10:%22fichiers_1%22;%7d&hash=6b836b1cbfd35667a93c01b52bcc3eae924a9291

      message erreur sur le lien : “formidable_recuperer_fichier_par_email : Accès interdit” (je suis webmestre mais pour les autres admins c’est pareil)

      Il n’y a pas de Thélia sur le site

      Merci

    • difficile de dire comme cela. il faudrait voir les logs et autres...

    • Alors dans formidable_post.log j’ai ça qui correspond à la saisie par l’utilisateur :
      2019-06-18 15:45:57 92.167.184.55 (pid 6423) :Pub:!INFO: {"post":{"page":"evenement","id_evenement":2996,"formulaire_action":"formidable","formulaire_action_args":"QWb1uO1UbmAjZ6nluD2Y3fbJM0V2l0mXAs9\/ovHs6WtMAzuQyHyP26v\/mUlPWjTNm+Cg3GRRkwyyAtKrogE36JYK","id_formulaire":7,"formidable_afficher_apres":"rien","_jeton":"0e703f7a51fc46906d31ae7ef302ba068c9e9c07","input_1":"LC ","input_2":"G'h ","email_nobot":"","textarea_1":"56 rue","email_1":"ndy@hotmil.fr","mechantrobot":""},"files":{"fichiers_1":{"name":["received_345391132790639.jpg"],"type":["image\/jpeg"],"tmp_name":["\/home\/site\/www\/tmp\/cvtupload\/formidable_NmIrJ9.jpg"],"error":[0],"size":[24526]}}}

      S’il y a d’autres fichiers log sur le serveur pour l’erreur de lien dans l’email je n’y ai peut-être pas accès.

      Merci

    Reply to this message

  • 12

    Bonjour,

    Désolé de cette question de débutant, mais je n’ai pas trouvé moi-même la réponse :
    Le retour de formulaire que je reçois est visiblement en HTML, peu facile à lire (beacoup de lignes vides, pas d’alignement etc) et à exploiter (automatiquement), donc je pense que tout le monde a du modifier ce comportement par défaut ;-)

    J’utilisais avant (pas sous SPIP) un php qui faisait les traitements & verifs puis le POST et j’envoyais simplement en PLAINTEXT la liste des champs remplis (non vides) sous la forme :

    [nom_du_champ] [hor_tab] [Valeur_entrée] [NewLine]
    par exemple :
    Name Franck TOTO
    Email moi@truc.com
    Expert On
    CallMe On

    (et terminé par l’@ IP, mais grâce à RealET, c’est bon maintenant sous formidable)

    Ce qui me permettait facilement d’exploiter manuellement ou d’extraire automatiquement les infos (c’est déjà du CSV tab separated).
    Je suis sûr que c’est possible avec formidable mais j’ai du rater qq chose...

    Merci d’avance !

    • Je ne comprends pas vraiment ce que tu veux faire, et je ne vois pas de quel “retour de formulaire” tu parles. À mon avis, avant Formidable, tu devrais d’abord comprendre, l’API “CVT” des formulaires de SPIP.

    • Je veux juste recevoir un email résultant du remplissage du formulaire qui a la forme (en plain text) décrite ci-dessus. Par exemple :

      Name Franck TOTO
      Email moi@truc.com
      Expert On
      CallMe On

      Ce que je reçois pour l’instant n’a PAS cette forme
      mais (en html) :

      Form “Contact form” sent on 09/09/2016 at 11:24:05.
      From this page.

      Your Name
      Bert75

      Job Function
      CTO

      Company
      My Company

      Address
      (no data entered)
      City
      PARIS

      Zip code
      75000

      Country
      France

      Email address
      moi@hotmail.com

      Telephone
      0123456789

      Interested by:
      Intellectual Property blocks
      Training Coursess
      Design Services
      Your message
      (no data entered)
      — -

    • Bah tu surcharges le squelette d’email pour faire autre chose. Il y a un chapitre juste au-dessus qui parle des squelettes d’email en donnant le chemin…

    • Génial !
      Pile ce qu’il me fallait.
      J’en profiterai pour supprimer les champs vides (totalement inutiles).

    • Sauf que :
      D’une part, le notifications/formulaire_email.html contient un élément totalement obscur (une boite noire qui donne un résultat :

      1. #VOIR_SAISIES{#ENV*{saisies}, #ENV*{valeurs}}

      Et que d’autre part, le moyen de passer en plain-text le résultat est documenté où ?

    • “pile ce qu’il me fallait” était de l’humour, désolé !

      Et dans les features que j’aurais trouvé intéressantes :
      -  hook d’appel à script à la validation du formulaire
      -  captcha (oui, oui, je sais la religion de spip NOSPAM etc)
      -  insertions de textes custom dans l’email qui en facilite l’exploitation
      -  envoi à destinataire variable en fonction d’un champ
      -  champs conditionnels
      ...mais j’ai peut-être raté d’autres choses dans la doc.

    • Dans traiter/email.php j’ai vu qu’il y avait :

      		$corps = array(
      			'html' => $html,
      			'texte' => $texte,
      			'nom_envoyeur' => filtrer_entites($nom_envoyeur),
      		);

      En tentant de remplacer par :

      1.         $corps = $texte;

      À ce moment-là, SPIP 3.1 prend le pas et transforme quand même le message en multipart HTML/Txt

      Bref, comment forcer Formidable + SPIP 3.1 à envoyer en text/plain ?

    • Et dans les features que j’aurais trouvé intéressantes :
      -  hook d’appel à script à la validation du formulaire
      -  captcha (oui, oui, je sais la religion de spip NOSPAM etc)
      -  insertions de textes custom dans l’email qui en facilite l’exploitation
      -  envoi à destinataire variable en fonction d’un champ
      -  champs conditionnels
      ...mais j’ai peut-être raté d’autres choses dans la doc.

      Il y a déjà des champs conditionnels. Le captcha tu le codes si ça t’amuse, mais personne n’a envie de ça, la religion du respect des utilisateurices oui on peut dire ça, c’est plutôt une fierté.

      Il n’y a pas de système de choix de destinataires suivant des tests sur d’autres champs arbitraires, par contre il y a déjà une saisie Destinataires qui permet de choisir un ou plusieurs parmi les comptes utilisateurs (s’il s’agit d’autres gens qui ne sont pas déjà dedans, il suffit de créer des comptes sans login, même en statut visiteur peu importe).

      Pour le reste oui tu as oublié des choses dans la doc : tu as oublié la doc générale de l’API CVT de SPIP. Comme déjà dit précédemment. Si tu ne connais pas ça, je vois mal comment tu pourrais espérer modifier des choses complexes dans Formidable spécifiquement ou n’importe quel autre formulaire de SPIP. Il y a déjà tous les points d’entrées qu’il faut, et il y a déjà des sous-plugins qui modifient ou augmentent de manière conséquente Formidable, donc il n’y a à priori aucun problème majeur.

      @RealET, avec Facteur TOUS les emails sont envoyés avec une variante HTML par défaut, et avec une variante texte ensuite, qui dérive de la variante HTML. On pourrait imaginer que la variante texte vienne d’un squelette si il existe et sinon le générer à partir du HTML. Mais dans tous les cas il y aura la variante HTML (et ça vaut pour absolument tous les emails dès qu’on a Facteur). Mais quel est le but final d’absolument vouloir avoir des emails text/plain uniquement ?

    • Pour faire court : SPIP est visiblement complexe, c’est pour ça que je n’ai décidé de l’adopter qu’en m’appuyant entièrement sur RealET pour tout ce qui l’est pas le contenu et l’exploitation du site. Donc ce n’est pas à moi d’apprendre la doc SPIP ni de programmer dans son langage, mais j’essaie quand même d’en comprendre le fonctionnement et de voir si j’ai vraiment besoin pour quelque chose d’apparemment simple (que je faisais moi-même avant) de faire appel à un ou plusieurs spécialistes.
      Il me semblait aussi que la présentation par défaut des emails de soumission (les forms remplis) n’était franchement pas conviviale, ni optimisée (champs vides, interlignes inutiles...), ni facile à exploiter (je ne parle pas de les regarder sur un smartphone !).
      D’où ma question sur ce forum. Ca me semble une amélioration nécessaire. En tous cas SPIP+Formidable -je ne sais pas qui est le coupable original- représente de ce fait une régression pour moi.
      J’espère que RealET va trouver une solution.

    • Bééé, si c’est apparemment si simple d’avoir un système de téléformulaire où on peut construire un form à la souris et pouvoir le modifier quand on veut sans rien coder… c’est super ! :D Go go

      Pour ce qui est de réellement exploiter les résultats, de manière carrée et pérenne, on préférera quand même clairement enregistrer en base et pouvoir exploiter les tables (qui ont même déjà un export CSV dans l’admin…), que des emails qui sont là juste pour notifier, pour des humains.

    • L’affichage compact du mail est intégré : http://zone.spip.org/trac/spip-zone/changeset/99576

      C’est donc désactivé par défaut, et activable via mes_options.php :
      Ajout d’une option pour avoir un affichage compacte et sans les réponses vides (admin & mails de confirmation).
      Dans mes_options.php, rajouter :

      if (!defined('_SAISIES_AFFICHAGE_COMPACT'))
      	define('_SAISIES_AFFICHAGE_COMPACT', 'oui');
    • Merci realET
      Ce code pour compacter le contenu des emails est bien utile et m’évite d’avoir à coder une page formulaire_email.html (le client avait la demande pertinente de réduire le nombre de pages d’impression des réponses).

    Reply to this message

  • 1

    Bonjour et bravo pour tout ce boulot,
    J’ai fais un formulaire où il est important (mais ce n’est pas possible de le mettre en obligatoire) d’ajouter une photo de la plaque d’identité du matériel, pour une demande de pièces détachées.

    Pour la présentation du formulaire, je souhaiterais insérer une photo d’exemple avant le champ “Fichier”
    Ne dit-on pas :un petit schéma vaut mieux qu’un long discours !

    Merci de votre intérêt pour ma question, je pense que ça peut servir à d’autres
    Alain

    • En attendant, j’ai simplement inclus dans mon champ explication, de la même façon que dans un article, un doc déjà présents dans ma médiathèque.

      Comme quoi il faut rédiger la question pour y répondre soi-même...

      Mais si il y a une autre solution !!!

    Reply to this message

  • 2

    Bonjour,

    Je voudrais rendre permanent le fichier csv des réponses et le générer automatiquement, le rendre accessible de l’extérieur afin de géolocaliser les réponses.

    De même je voudrais déplacer les fichiers téléversés vers IMG par exemple.

    J’avoue patauger sur la méthode malgré mes recherches surtout que je suis un débutant en programmation SPIP.

    Auriez-vous une piste ?
    Cordialement.

    • Concernant le CSV, vous pourriez créer votre squelette qui le générerait.

      Concernant le déplacement vers IMG : c’est une fonction demandée plusieurs fois. Il est clair que pour des raisons de confidentialité, cela restera une option. Il faudrait trouver un peu de temps pour coder cela. Peut être en juin j’en aurait.

    • Merci beaucoup. Je vais suivre cette piste.

      Oui une option avec un avertissement sur le risque est la meilleure solution.
      Merci pour la proposition.

    Reply to this message

  • 3

    Bonjour

    Sans que je ne touche à quoi ce soit sur le site ou dans la définition du formulaire, soudainement mon formulaire ne veut plus prendre de réponse : Impossible de prendre en compte votre message. Merci de le soumettre à nouveau !

    Reply to this message

  • 2

    Bonjour

    Sur un site, une collègue a conçu un formulaire.
    Elle a configuré ce formulaire pour recevoir une notification à chaque réponse et ça fonctionne.
    Elle voudrait aussi que le visiteur qui répond reçoive un message de confirmation par mail (en plus du message de retour qui s’affiche). Il y a bien un champ “adresse mail” obligatoire dans ce formulaire.
    Est-ce possible ? Et si oui, comment ?

    Reply to this message

  • 2

    J’ai pu reproduire le problème du non respect de l’unicité quand un auteur tente de modifier une réponse qui n’est pas la sienne (et que l’identification est id_auteur).

    Voilà le formulaire problématique :

    id_formulaire: ’13’
    identifiant: test_multi
    titre: ’test multi auteurs’
    descriptif: ’’
    css: ’’
    message_retour: ’’
    saisies:
      -
        saisie: input
        options:  nom: input_1, label: ’Ligne de texte’, size: 40, sql: ’text DEFAULT ’’’’ NOT NULL’ 
        identifiant: ’@5ce2bc8d3d2c9’
    traitements:
      enregistrement:
        moderation: posteriori
        multiple: on
        modifiable: on
        effacement: ’’
        effacement_delai: ’’
        identification: id_auteur
        variable_php: ’’
        unicite: input_1
        message_erreur_unicite: ’’
        anonymiser: ’’
        ip: ’’
        invalider: on
        resume_reponse: ’’
        analyse_exclure_champs: ’’
    public: non
    statut: publie
    maj: ’2019-05-20 17:31:31’
    apres: formulaire
    url_redirect: ’’
    date_creation: ’2019-05-20 16:42:04’
    

    Voilà comment reproduire le bug :
    -  L’auteur 1 enregistre une réponse “toto” (id 123)
    -  L’auteur 2 affiche le formulaire rempli avec la réponse 123
    -  L’auteur 2 valide le formulaire sans changer la réponse “toto”
    -  Une nouvelle réponse est créée avec “toto” comme réponse, et l’unicité n’est pas respectée

    Alors que si l’auteur 2 affiche un formulaire vierge et indique “toto”, le test d’unicité est appliqué et la réponse est bien refusée.

    Voilà aussi le squelette utilisé modeles/testmulti.html:

    [(#REM) on recupere l'identifiant]
    #SET{id_form,0}
    <BOUCLE_form(FORMULAIRES){identifiant=test_multi}>
    #SET{id_form,#ID_FORMULAIRE}
    </BOUCLE_form>
     
    [(#ENV{id_reponse}|oui)
       #FORMULAIRE_FORMIDABLE{#GET{id_form}, #ARRAY, #ENV{id_reponse}}
    ]
     
    [(#ENV{id_reponse}|non)
       #FORMULAIRE_FORMIDABLE{#GET{id_form}}
    ]
     
    <hr>
     
    <B_rep>
    <ul>
    <BOUCLE_rep(FORMULAIRES_REPONSES){id_formulaire=#GET{id_form}}>
       <li><a href="[(#SELF|parametre_url{id_reponse, #ID_FORMULAIRES_REPONSE})]">#VOIR_REPONSE{input_1, brut}</a></li>
    </BOUCLE_rep>
    </ul>
    </B_rep>
    • Sans regarder le code, je pense comprendre ce qui se passe :
      comme on édite une réponse existante, le test d’unicité est valide.

      C’est seulement ensuite que l’autorisation de modifier la réponse est examinée, et que la décision est prise d’enregistrer une nouvelle réponse au lieu de modifier l’existante.

      On enregistre alors une nouvelle réponse avec un doublon.

    • bon j’essaie de voir tout cela se week-end

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom