Formidable/formitable, générateurs de formulaires

FormiTable (no more developped)

SPIP-Contrib :: Carnet Wiki :: Formidable/formitable, générateurs de formulaires :: Recherche :

FormiTable (no more developped)

FormiTable est un plugin de Formidable et lui fournit un traitement pour enregistrer les saisies de ’formidable’ dans une table utilisateur, avec une correspondance de chaque champ d’un formulaire vers un champ de la table.

Dans la configuration de ce traitement, il faut spécifier :

-  le nom de la table, dans un format compréhensible par l’API sql de SPIP (donc : toujours avec le préfixe spip_ ).

-  la liste des correspondances entre champ du formulaire et champ de la table. On utilise pour cela les noms internes des champs, qui sont affichés entre @ dans la colonne de gauche des pages de l’interface privée de formidable (mais on utilise leur nom sans le @). C’est le même format que celui utilisé pour définir les valeurs d’une saisie de type SELECT.

Par exemple :

permettra d’alimenter une table ayant les champs ’titre’, ’nom’ et ’pays’ à partir des 2 premiers champs de saisie de type ’input’ et du premier champ de saisie de type ’select’.

-  les options de gestion de l’identification et des autorisations (réponses modifiables autorisées ou interdites ? modération a priori ou a postériori ? ...)

Contraintes

-  la table DOIT avoir une clé primaire, du moins pour bénéficier de certaines options. Le nom de ce champ clé primaire est demandé dans la configuration du traitement de ce champ.

Option : Réponses multiples autorisées ou interdites

Si la table destinataire dispose d’un champ réservé pour l’enregistrement de l’id_auteur de la personne ayant répondu (champ INT), alors il est possible d’indiquer celui ci dans le paramétrage du formulaire (nom recommandé : ’id_auteur’).

Dans ce cas, une autre option devient possible : autoriser ou interdire les réponses multiples par le même internaute.

Il sera possible à un internaute d’accéder au formulaire et d’y répondre, mais sa réponse sera refusée par formitable. Le mieux serait, dans vos squelettes, d’inclure le formulaire dans une boucle qui teste si l’internaute a déjà répondu, et qui, dans ce dernier cas, ne présente pas le formulaire.

Option : Modération a priori / a posteriori

Si la table destinataire dispose d’un champ réservé pour l’enregistrement du statut d’une réponse (champ VARCHAR(10) alors il est possible d’indiquer celui-ci dans le paramétrage du formulaire (nom recommandé : ’statut’).

Dans les boucles qui utilisent ce champ, il est ensuite possible d’ajouter un critère testant les valeurs de ce champ, pour afficher ou non une réponse. Les valeurs prises sont : ’prop’ (proposé) ou ’publie’ (publié).

Dans le cas d’une validation a priori, formitable enregistre les réponses avec le statut ’prop’, sauf celles des administrateurs du site, qui ont toujours le statut ’publie’. Il vous appartient de mettre en place un mécanisme de validation de ces annonces.

Dans le cas d’une validation a posteriori, formitable enregistre dés leur saisie les réponses avec le statut ’publie’.

Traitements

Il est possible de spécifier les traitements appliqués aux valeurs saisies avant leur enregistrement dans la base de donnée, pour chaque champ.

Cela permet :
-  d’adapter le format issu des SAISIES au format de données de la base de donnée
-  de faire des traitements personnalisés, selon le champ
-  de faire des enregistrements dans des tables multiples

Pour cela il faut définir en php au choix
-  des fonctions traitement_champ_<table>_<champ> ou traitement_champ_<champ> ou traitement_champ_<table> dont le nom intègre le nom de la table et/ou le nom du champ concernés (compris ? remplacez <table> par le nom de la table),
-  et/ou une fonction généraliste traitement_champ

Ces fonctions reçoivent en paramètre :
-  la valeur saisie,
-  le nom de la table,
-  le nom du champ de la table,
-  l’identifiant de la saisie dans formulaire.

function traitement_champ_bateau_couleur() //  traitera le champ couleur de la table bateau
function traitement_champ_date_debut() // traitera le champ date_debut pour toutes les tables
function traitement_champ_evenement_date_debut() //  traitera le champ date_debut_de la table évènement seulement (prioritaire)

La fonction traitement_champ, si elle est définie, traite tous les champs n’ayant pas de fonction de traitement plus spécialisée.

Exemple de traitement :
La fonction traitement_date_fr_vers_sql($date) est mise à disposition pour être appelée dans ces fonctions, au besoin, afin de convertir le format français renvoyé par les saisies de type date vers un format SQL DATE. Par exemple transformer « 21/12/2012 » en « 2012-12-21 ».

Exemple issu de la vraie vie des sites :

  1. function traitement_champ ($valeur, $table, $champ, $id) {
  2. // ICI appels des fonctions de conversions
  3. if (strpos($id,'date')===0) {
  4. $valeur = traitement_date_fr_vers_sql($valeur);
  5. };
  6. return $valeurs;
  7. };

Télécharger

todo

-  interface pour visualiser les réponses et valider ou refuser les réponses ayant le statut ’prop’.

-  identification par cookies aussi (et non par id_auteur) comme dans le traitement par défaut de formidable

-  option pour permettre de modifier une entrée déjà saisie

-  permettre de spécifier la base de données contenant la table destinataire.

Licence

-  GPL
-  Icone de Newmoon issue du Gnome Desktop, distribuée en licence GPL