FormiTable (developpement arrêté)

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.

Pourquoi formitable a t il été développé ?

Formidable permet à tout un chacun de créer un formulaire et c’est puissant pour cela !

Mais la sauvegarde des données se fait dans des tables génériques mal adaptées aux BOUCLES et autres outils de SPIP. C’est possible de les utiliser dans SPIP, mais en dehors du cadre basique proposé par formidable, c’est pénible à personnaliser.

En raison de ces limitations, formidable semble limité à des formulaires utilisés ponctuellement, mais pas pour la saisie de données constituant les fondations d’un site.

Formitable lève cette limitation en permettant de stocker les données dans des tables comme n’importe quelle donnée importante de spip (articles, rubriques, motclés etc).
Formitable permet donc de combiner la facilité à créer des formulaires de formidable, avec la facilité à utiliser les données « normalement » dans SPIP.

Pourquoi formitable n’est il plus développé ?

Simplement, l’auteur du plugin n’en a plus eu besoin, et a arrêté le développement et la maintenance.

On peut aussi imaginer des raisons pour lesquelles ça n’a pas été repris.

Les formulaires formidable sont utiles pour des personnes qui ne savent pas coder. Lorsqu’on sait coder PHP, on peut faire des formulaires CVT et faire sans formidable mais en PHP ce que formitable permet de faire avec formidable.

formitable est donc utile
-  lorsqu’un simple formulaire formidable ne suffit pas pour l’utilisation voulue des données
-  lorsqu’un formulaire CVT ne se justifie pas ou que le dev n’a pas les capacité de coder php

Il semble que cette cible soit trop restreinte.

Mise en oeuvre de formitable

Configuration de formitable

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 :

input_1|titre
input_2|nom
selection_1|pays

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 :

function traitement_champ ($valeur, $table, $champ, $id) {
	// ICI appels des fonctions de conversions
	if (strpos($id,'date')===0) {
		$valeur = traitement_date_fr_vers_sql($valeur);
	};
	return $valeurs;
};

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

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom