diff --git a/.gitattributes b/.gitattributes
index f0d0d9ad346d5b718f8d3e0fd98aaa8a567b9096..32c73825a1c41c972f60eeff0cb12eb62106d1a8 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -12,6 +12,369 @@ echanger/formulaire/forms.php -text
 echanger/formulaire/wcs.php -text
 echanger/formulaire/yaml.php -text
 exec/puce_statut_formulaires.php -text
+/formidable.diff -text
+formidable_1_0.orig/action/dupliquer_formulaire.php -text
+formidable_1_0.orig/action/editer_formulaire.php -text
+formidable_1_0.orig/action/exporter_formulaire.php -text
+formidable_1_0.orig/action/exporter_formulaires_reponses.php -text
+formidable_1_0.orig/action/instituer_formulaires_reponse.php -text
+formidable_1_0.orig/action/supprimer_formulaire.php -text
+formidable_1_0.orig/action/supprimer_formulaires_reponse.php -text
+formidable_1_0.orig/base/formidable_tables.php -text
+formidable_1_0.orig/css/formidable_analyse.css.html -text
+formidable_1_0.orig/echanger/formulaire/forms.php -text
+formidable_1_0.orig/echanger/formulaire/wcs.php -text
+formidable_1_0.orig/echanger/formulaire/yaml.php -text
+formidable_1_0.orig/exec/puce_statut_formulaires.php -text
+formidable_1_0.orig/formidable_administrations.php -text
+formidable_1_0.orig/formidable_autorisations.php -text
+formidable_1_0.orig/formidable_fonctions.php -text
+formidable_1_0.orig/formidable_options.php -text
+formidable_1_0.orig/formidable_pipelines.php -text
+formidable_1_0.orig/formulaires/configurer_formidable_analyse.html -text
+formidable_1_0.orig/formulaires/editer_formulaire.html -text
+formidable_1_0.orig/formulaires/editer_formulaire.php -text
+formidable_1_0.orig/formulaires/editer_formulaire_champs.html -text
+formidable_1_0.orig/formulaires/editer_formulaire_champs.php -text
+formidable_1_0.orig/formulaires/editer_formulaire_traitements.html -text
+formidable_1_0.orig/formulaires/editer_formulaire_traitements.php -text
+formidable_1_0.orig/formulaires/formidable.html -text
+formidable_1_0.orig/formulaires/formidable.php -text
+formidable_1_0.orig/formulaires/importer_formulaire.html -text
+formidable_1_0.orig/formulaires/importer_formulaire.php -text
+formidable_1_0.orig/icones_barre/formulaire.png -text
+formidable_1_0.orig/images/formidable-128.png -text
+formidable_1_0.orig/images/formidable-24.png -text
+formidable_1_0.orig/images/formidable-64.png -text
+formidable_1_0.orig/images/formidable.svg -text
+formidable_1_0.orig/images/formulaire-24.png -text
+formidable_1_0.orig/images/formulaire-action-ajouter.png -text
+formidable_1_0.orig/images/formulaire-analyse-24.png -text
+formidable_1_0.orig/images/formulaire-config-champs-24.png -text
+formidable_1_0.orig/images/formulaire-config-traitements-24.png -text
+formidable_1_0.orig/images/formulaire-dupliquer-24.png -text
+formidable_1_0.orig/images/formulaire-editer-24.png -text
+formidable_1_0.orig/images/formulaire-exporter-24.png -text
+formidable_1_0.orig/images/formulaire-nouveau-48.png -text
+formidable_1_0.orig/images/formulaire-reponse-24.png -text
+formidable_1_0.orig/images/formulaire-reponse-supprimer-24.png -text
+formidable_1_0.orig/images/formulaire-reponses-24.png -text
+formidable_1_0.orig/images/formulaire-reponses-exporter-24.png -text
+formidable_1_0.orig/images/formulaire-supprimer-24.png -text
+formidable_1_0.orig/inc/formidable.php -text
+formidable_1_0.orig/lang/formidable.xml -text
+formidable_1_0.orig/lang/formidable_de.php -text
+formidable_1_0.orig/lang/formidable_en.php -text
+formidable_1_0.orig/lang/formidable_fr.php -text
+formidable_1_0.orig/lang/formidable_it.php -text
+formidable_1_0.orig/lang/formidable_sk.php -text
+formidable_1_0.orig/lang/formulaire_fr.php -text
+formidable_1_0.orig/lang/formulaires_reponse_fr.php -text
+formidable_1_0.orig/lang/paquet-formidable_fr.php -text
+formidable_1_0.orig/modeles/formulaire_aide_memoire.html -text
+formidable_1_0.orig/modeles/formulaire_analyse.html -text
+formidable_1_0.orig/modeles/formulaire_formidable.yaml -text
+formidable_1_0.orig/modeles/formulaires_reponse.html -text
+formidable_1_0.orig/noisettes/formulaire_formidable.html -text
+formidable_1_0.orig/noisettes/formulaire_formidable.yaml -text
+formidable_1_0.orig/notifications/formulaire_accuse.html -text
+formidable_1_0.orig/notifications/formulaire_email.html -text
+formidable_1_0.orig/paquet.xml -text
+formidable_1_0.orig/prive/objets/contenu/formulaire.html -text
+formidable_1_0.orig/prive/objets/contenu/formulaires_reponse.html -text
+formidable_1_0.orig/prive/objets/infos/formulaire.html -text
+formidable_1_0.orig/prive/objets/infos/formulaires_reponse.html -text
+formidable_1_0.orig/prive/objets/liste/formulaires.html -text
+formidable_1_0.orig/prive/objets/liste/formulaires_reponses.html -text
+formidable_1_0.orig/prive/squelettes/contenu/configurer_formidable.html -text
+formidable_1_0.orig/prive/squelettes/contenu/formulaire.html -text
+formidable_1_0.orig/prive/squelettes/contenu/formulaire_edit.html -text
+formidable_1_0.orig/prive/squelettes/contenu/formulaires.html -text
+formidable_1_0.orig/prive/squelettes/contenu/formulaires_analyse.html -text
+formidable_1_0.orig/prive/squelettes/contenu/formulaires_reponse.html -text
+formidable_1_0.orig/prive/squelettes/contenu/formulaires_reponses.html -text
+formidable_1_0.orig/prive/squelettes/extra/formulaire.html -text
+formidable_1_0.orig/prive/squelettes/extra/formulaire_edit.html -text
+formidable_1_0.orig/prive/squelettes/extra/formulaires_reponses.html -text
+formidable_1_0.orig/prive/squelettes/hierarchie/formulaire.html -text
+formidable_1_0.orig/prive/squelettes/hierarchie/formulaire_edit.html -text
+formidable_1_0.orig/prive/squelettes/hierarchie/formulaires.html -text
+formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_analyse.html -text
+formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_reponse.html -text
+formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_reponses.html -text
+formidable_1_0.orig/prive/squelettes/navigation/formulaire.html -text
+formidable_1_0.orig/prive/squelettes/navigation/formulaire_edit.html -text
+formidable_1_0.orig/prive/squelettes/navigation/formulaires.html -text
+formidable_1_0.orig/prive/squelettes/navigation/formulaires_analyse.html -text
+formidable_1_0.orig/prive/squelettes/navigation/formulaires_reponse.html -text
+formidable_1_0.orig/prive/squelettes/navigation/formulaires_reponses.html -text
+formidable_1_0.orig/prive/style_prive_plugin_formidable.html -text
+formidable_1_0.orig/prive/themes/basic/images/formulaire-16.png -text
+formidable_1_0.orig/prive/themes/spip/images/formulaire-16.png -text
+formidable_1_0.orig/prive/themes/spip/images/formulaire-24.png -text
+formidable_1_0.orig/prive/themes/spip/images/formulaires_reponse-24.png -text
+formidable_1_0.orig/public/formidable_criteres.php -text
+formidable_1_0.orig/puce_statut/formulaires_reponse.php -text
+formidable_1_0.orig/saisies-analyses/_base.html -text
+formidable_1_0.orig/saisies-analyses/case.html -text
+formidable_1_0.orig/saisies-analyses/checkbox.html -text
+formidable_1_0.orig/saisies-analyses/destinataires.html -text
+formidable_1_0.orig/saisies-analyses/explication.html -text
+formidable_1_0.orig/saisies-analyses/oui_non.html -text
+formidable_1_0.orig/saisies-analyses/radio.html -text
+formidable_1_0.orig/saisies-analyses/selecteur_article.html -text
+formidable_1_0.orig/saisies-analyses/selecteur_rubrique.html -text
+formidable_1_0.orig/saisies-analyses/selecteur_rubrique_article.html -text
+formidable_1_0.orig/saisies-analyses/selection.html -text
+formidable_1_0.orig/saisies-analyses/selection_multiple.html -text
+formidable_1_0.orig/saisies-vues/formulaire_formidable.html -text
+formidable_1_0.orig/saisies-vues/formulaire_formidable_multiple.html -text
+formidable_1_0.orig/saisies/champ.html -text
+formidable_1_0.orig/saisies/formulaire_formidable.html -text
+formidable_1_0.orig/saisies/formulaire_formidable_multiple.html -text
+formidable_1_0.orig/svn.revision -text
+formidable_1_0.orig/todo.txt -text
+formidable_1_0.orig/traiter/email.php -text
+formidable_1_0.orig/traiter/email.yaml -text
+formidable_1_0.orig/traiter/enregistrement.php -text
+formidable_1_0.orig/traiter/enregistrement.yaml -text
+formidable_1_0/CVS/Entries -text
+formidable_1_0/CVS/Repository -text
+formidable_1_0/CVS/Root -text
+formidable_1_0/action/CVS/Entries -text
+formidable_1_0/action/CVS/Repository -text
+formidable_1_0/action/CVS/Root -text
+formidable_1_0/action/dupliquer_formulaire.php -text
+formidable_1_0/action/editer_formulaire.php -text
+formidable_1_0/action/exporter_analyse_reponses.php -text
+formidable_1_0/action/exporter_formulaire.php -text
+formidable_1_0/action/exporter_formulaires_reponses.php -text
+formidable_1_0/action/instituer_formulaires_reponse.php -text
+formidable_1_0/action/supprimer_formulaire.php -text
+formidable_1_0/action/supprimer_formulaires_reponse.php -text
+formidable_1_0/base/CVS/Entries -text
+formidable_1_0/base/CVS/Repository -text
+formidable_1_0/base/CVS/Root -text
+formidable_1_0/base/formidable_tables.php -text
+formidable_1_0/css/CVS/Entries -text
+formidable_1_0/css/CVS/Repository -text
+formidable_1_0/css/CVS/Root -text
+formidable_1_0/css/formidable_analyse.css.html -text
+formidable_1_0/echanger/CVS/Entries -text
+formidable_1_0/echanger/CVS/Repository -text
+formidable_1_0/echanger/CVS/Root -text
+formidable_1_0/echanger/formulaire/CVS/Entries -text
+formidable_1_0/echanger/formulaire/CVS/Repository -text
+formidable_1_0/echanger/formulaire/CVS/Root -text
+formidable_1_0/echanger/formulaire/forms.php -text
+formidable_1_0/echanger/formulaire/wcs.php -text
+formidable_1_0/echanger/formulaire/yaml.php -text
+formidable_1_0/exec/CVS/Entries -text
+formidable_1_0/exec/CVS/Repository -text
+formidable_1_0/exec/CVS/Root -text
+formidable_1_0/exec/puce_statut_formulaires.php -text
+formidable_1_0/formidable_administrations.php -text
+formidable_1_0/formidable_autorisations.php -text
+formidable_1_0/formidable_fonctions.php -text
+formidable_1_0/formidable_options.php -text
+formidable_1_0/formidable_pipelines.php -text
+formidable_1_0/formulaires/CVS/Entries -text
+formidable_1_0/formulaires/CVS/Repository -text
+formidable_1_0/formulaires/CVS/Root -text
+formidable_1_0/formulaires/configurer_formidable_analyse.html -text
+formidable_1_0/formulaires/editer_formulaire.html -text
+formidable_1_0/formulaires/editer_formulaire.php -text
+formidable_1_0/formulaires/editer_formulaire_champs.html -text
+formidable_1_0/formulaires/editer_formulaire_champs.php -text
+formidable_1_0/formulaires/editer_formulaire_traitements.html -text
+formidable_1_0/formulaires/editer_formulaire_traitements.php -text
+formidable_1_0/formulaires/formidable.html -text
+formidable_1_0/formulaires/formidable.php -text
+formidable_1_0/formulaires/importer_formulaire.html -text
+formidable_1_0/formulaires/importer_formulaire.php -text
+formidable_1_0/icones_barre/CVS/Entries -text
+formidable_1_0/icones_barre/CVS/Repository -text
+formidable_1_0/icones_barre/CVS/Root -text
+formidable_1_0/icones_barre/formulaire.png -text
+formidable_1_0/images/CVS/Entries -text
+formidable_1_0/images/CVS/Repository -text
+formidable_1_0/images/CVS/Root -text
+formidable_1_0/images/formidable-128.png -text
+formidable_1_0/images/formidable-24.png -text
+formidable_1_0/images/formidable-64.png -text
+formidable_1_0/images/formidable.svg -text
+formidable_1_0/images/formulaire-24.png -text
+formidable_1_0/images/formulaire-action-ajouter.png -text
+formidable_1_0/images/formulaire-analyse-24.png -text
+formidable_1_0/images/formulaire-config-champs-24.png -text
+formidable_1_0/images/formulaire-config-traitements-24.png -text
+formidable_1_0/images/formulaire-dupliquer-24.png -text
+formidable_1_0/images/formulaire-editer-24.png -text
+formidable_1_0/images/formulaire-exporter-24.png -text
+formidable_1_0/images/formulaire-nouveau-48.png -text
+formidable_1_0/images/formulaire-reponse-24.png -text
+formidable_1_0/images/formulaire-reponse-supprimer-24.png -text
+formidable_1_0/images/formulaire-reponses-24.png -text
+formidable_1_0/images/formulaire-reponses-exporter-24.png -text
+formidable_1_0/images/formulaire-supprimer-24.png -text
+formidable_1_0/inc/CVS/Entries -text
+formidable_1_0/inc/CVS/Repository -text
+formidable_1_0/inc/CVS/Root -text
+formidable_1_0/inc/formidable.php -text
+formidable_1_0/lang/CVS/Entries -text
+formidable_1_0/lang/CVS/Repository -text
+formidable_1_0/lang/CVS/Root -text
+formidable_1_0/lang/formidable.xml -text
+formidable_1_0/lang/formidable_de.php -text
+formidable_1_0/lang/formidable_fr.php -text
+formidable_1_0/lang/formidable_it.php -text
+formidable_1_0/lang/formidable_sk.php -text
+formidable_1_0/lang/formulaire_fr.php -text
+formidable_1_0/lang/formulaires_reponse_fr.php -text
+formidable_1_0/lang/paquet-formidable_fr.php -text
+formidable_1_0/modeles/CVS/Entries -text
+formidable_1_0/modeles/CVS/Repository -text
+formidable_1_0/modeles/CVS/Root -text
+formidable_1_0/modeles/formulaire_aide_memoire.html -text
+formidable_1_0/modeles/formulaire_analyse.html -text
+formidable_1_0/modeles/formulaire_formidable.yaml -text
+formidable_1_0/modeles/formulaires_reponse.html -text
+formidable_1_0/noisettes/CVS/Entries -text
+formidable_1_0/noisettes/CVS/Repository -text
+formidable_1_0/noisettes/CVS/Root -text
+formidable_1_0/noisettes/formulaire_formidable.html -text
+formidable_1_0/noisettes/formulaire_formidable.yaml -text
+formidable_1_0/notifications/CVS/Entries -text
+formidable_1_0/notifications/CVS/Repository -text
+formidable_1_0/notifications/CVS/Root -text
+formidable_1_0/notifications/formulaire_accuse.html -text
+formidable_1_0/notifications/formulaire_email.html -text
+formidable_1_0/paquet.xml -text
+formidable_1_0/prive/CVS/Entries -text
+formidable_1_0/prive/CVS/Repository -text
+formidable_1_0/prive/CVS/Root -text
+formidable_1_0/prive/objets/CVS/Entries -text
+formidable_1_0/prive/objets/CVS/Repository -text
+formidable_1_0/prive/objets/CVS/Root -text
+formidable_1_0/prive/objets/contenu/CVS/Entries -text
+formidable_1_0/prive/objets/contenu/CVS/Repository -text
+formidable_1_0/prive/objets/contenu/CVS/Root -text
+formidable_1_0/prive/objets/contenu/formulaire.html -text
+formidable_1_0/prive/objets/contenu/formulaires_reponse.html -text
+formidable_1_0/prive/objets/infos/CVS/Entries -text
+formidable_1_0/prive/objets/infos/CVS/Repository -text
+formidable_1_0/prive/objets/infos/CVS/Root -text
+formidable_1_0/prive/objets/infos/formulaire.html -text
+formidable_1_0/prive/objets/infos/formulaires_reponse.html -text
+formidable_1_0/prive/objets/liste/CVS/Entries -text
+formidable_1_0/prive/objets/liste/CVS/Repository -text
+formidable_1_0/prive/objets/liste/CVS/Root -text
+formidable_1_0/prive/objets/liste/formulaires.html -text
+formidable_1_0/prive/objets/liste/formulaires_reponses.html -text
+formidable_1_0/prive/squelettes/CVS/Entries -text
+formidable_1_0/prive/squelettes/CVS/Repository -text
+formidable_1_0/prive/squelettes/CVS/Root -text
+formidable_1_0/prive/squelettes/contenu/CVS/Entries -text
+formidable_1_0/prive/squelettes/contenu/CVS/Repository -text
+formidable_1_0/prive/squelettes/contenu/CVS/Root -text
+formidable_1_0/prive/squelettes/contenu/configurer_formidable.html -text
+formidable_1_0/prive/squelettes/contenu/formulaire.html -text
+formidable_1_0/prive/squelettes/contenu/formulaire_edit.html -text
+formidable_1_0/prive/squelettes/contenu/formulaires.html -text
+formidable_1_0/prive/squelettes/contenu/formulaires_analyse.html -text
+formidable_1_0/prive/squelettes/contenu/formulaires_reponse.html -text
+formidable_1_0/prive/squelettes/contenu/formulaires_reponses.html -text
+formidable_1_0/prive/squelettes/extra/CVS/Entries -text
+formidable_1_0/prive/squelettes/extra/CVS/Repository -text
+formidable_1_0/prive/squelettes/extra/CVS/Root -text
+formidable_1_0/prive/squelettes/extra/formulaire.html -text
+formidable_1_0/prive/squelettes/extra/formulaire_edit.html -text
+formidable_1_0/prive/squelettes/extra/formulaires_analyse.html -text
+formidable_1_0/prive/squelettes/extra/formulaires_reponses.html -text
+formidable_1_0/prive/squelettes/hierarchie/CVS/Entries -text
+formidable_1_0/prive/squelettes/hierarchie/CVS/Repository -text
+formidable_1_0/prive/squelettes/hierarchie/CVS/Root -text
+formidable_1_0/prive/squelettes/hierarchie/formulaire.html -text
+formidable_1_0/prive/squelettes/hierarchie/formulaire_edit.html -text
+formidable_1_0/prive/squelettes/hierarchie/formulaires.html -text
+formidable_1_0/prive/squelettes/hierarchie/formulaires_analyse.html -text
+formidable_1_0/prive/squelettes/hierarchie/formulaires_reponse.html -text
+formidable_1_0/prive/squelettes/hierarchie/formulaires_reponses.html -text
+formidable_1_0/prive/squelettes/inclure/CVS/Entries -text
+formidable_1_0/prive/squelettes/inclure/CVS/Repository -text
+formidable_1_0/prive/squelettes/inclure/CVS/Root -text
+formidable_1_0/prive/squelettes/navigation/CVS/Entries -text
+formidable_1_0/prive/squelettes/navigation/CVS/Repository -text
+formidable_1_0/prive/squelettes/navigation/CVS/Root -text
+formidable_1_0/prive/squelettes/navigation/formulaire.html -text
+formidable_1_0/prive/squelettes/navigation/formulaire_edit.html -text
+formidable_1_0/prive/squelettes/navigation/formulaires.html -text
+formidable_1_0/prive/squelettes/navigation/formulaires_analyse.html -text
+formidable_1_0/prive/squelettes/navigation/formulaires_reponse.html -text
+formidable_1_0/prive/squelettes/navigation/formulaires_reponses.html -text
+formidable_1_0/prive/style_prive_plugin_formidable.html -text
+formidable_1_0/prive/themes/CVS/Entries -text
+formidable_1_0/prive/themes/CVS/Repository -text
+formidable_1_0/prive/themes/CVS/Root -text
+formidable_1_0/prive/themes/basic/CVS/Entries -text
+formidable_1_0/prive/themes/basic/CVS/Repository -text
+formidable_1_0/prive/themes/basic/CVS/Root -text
+formidable_1_0/prive/themes/basic/images/CVS/Entries -text
+formidable_1_0/prive/themes/basic/images/CVS/Repository -text
+formidable_1_0/prive/themes/basic/images/CVS/Root -text
+formidable_1_0/prive/themes/basic/images/formulaire-16.png -text
+formidable_1_0/prive/themes/spip/CVS/Entries -text
+formidable_1_0/prive/themes/spip/CVS/Repository -text
+formidable_1_0/prive/themes/spip/CVS/Root -text
+formidable_1_0/prive/themes/spip/images/CVS/Entries -text
+formidable_1_0/prive/themes/spip/images/CVS/Repository -text
+formidable_1_0/prive/themes/spip/images/CVS/Root -text
+formidable_1_0/prive/themes/spip/images/formulaire-16.png -text
+formidable_1_0/prive/themes/spip/images/formulaire-24.png -text
+formidable_1_0/prive/themes/spip/images/formulaires_reponse-24.png -text
+formidable_1_0/public/CVS/Entries -text
+formidable_1_0/public/CVS/Repository -text
+formidable_1_0/public/CVS/Root -text
+formidable_1_0/public/formidable_criteres.php -text
+formidable_1_0/puce_statut/CVS/Entries -text
+formidable_1_0/puce_statut/CVS/Repository -text
+formidable_1_0/puce_statut/CVS/Root -text
+formidable_1_0/puce_statut/formulaires_reponse.php -text
+formidable_1_0/saisies-analyses/CVS/Entries -text
+formidable_1_0/saisies-analyses/CVS/Repository -text
+formidable_1_0/saisies-analyses/CVS/Root -text
+formidable_1_0/saisies-analyses/_base.html -text
+formidable_1_0/saisies-analyses/case.html -text
+formidable_1_0/saisies-analyses/checkbox.html -text
+formidable_1_0/saisies-analyses/destinataires.html -text
+formidable_1_0/saisies-analyses/explication.html -text
+formidable_1_0/saisies-analyses/oui_non.html -text
+formidable_1_0/saisies-analyses/radio.html -text
+formidable_1_0/saisies-analyses/selecteur_article.html -text
+formidable_1_0/saisies-analyses/selecteur_rubrique.html -text
+formidable_1_0/saisies-analyses/selecteur_rubrique_article.html -text
+formidable_1_0/saisies-analyses/selection.html -text
+formidable_1_0/saisies-analyses/selection_multiple.html -text
+formidable_1_0/saisies-vues/CVS/Entries -text
+formidable_1_0/saisies-vues/CVS/Repository -text
+formidable_1_0/saisies-vues/CVS/Root -text
+formidable_1_0/saisies-vues/formulaire_formidable.html -text
+formidable_1_0/saisies-vues/formulaire_formidable_multiple.html -text
+formidable_1_0/saisies/CVS/Entries -text
+formidable_1_0/saisies/CVS/Repository -text
+formidable_1_0/saisies/CVS/Root -text
+formidable_1_0/saisies/champ.html -text
+formidable_1_0/saisies/formulaire_formidable.html -text
+formidable_1_0/saisies/formulaire_formidable_multiple.html -text
+formidable_1_0/svn.revision -text
+formidable_1_0/todo.txt -text
+formidable_1_0/traiter/CVS/Entries -text
+formidable_1_0/traiter/CVS/Repository -text
+formidable_1_0/traiter/CVS/Root -text
+formidable_1_0/traiter/email.php -text
+formidable_1_0/traiter/email.yaml -text
+formidable_1_0/traiter/enregistrement.php -text
+formidable_1_0/traiter/enregistrement.yaml -text
 /formidable_administrations.php -text
 /formidable_autorisations.php -text
 /formidable_fonctions.php -text
diff --git a/formidable.diff b/formidable.diff
new file mode 100644
index 0000000000000000000000000000000000000000..ecdb2fe9c6732c22a333cf51cd33630180f4ec61
--- /dev/null
+++ b/formidable.diff
@@ -0,0 +1,666 @@
+Seulement dans formidable_1_0/action: exporter_analyse_reponses.php
+diff -r -U4 -x CVS formidable_1_0.orig/formidable_autorisations.php formidable_1_0/formidable_autorisations.php
+--- formidable_1_0.orig/formidable_autorisations.php	2012-09-06 14:00:04.000000000 +0200
++++ formidable_1_0/formidable_autorisations.php	2013-03-19 15:47:51.681294328 +0100
+@@ -27,10 +27,12 @@
+  * @param  array  $opt   Options de cette autorisation
+  * @return bool          true s'il a le droit, false sinon
+ **/
+ function autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt){
+-	if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and !$qui['restreint']) return true;
+-	else return false;
++    if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and
++        (!$qui['restreint']) or $GLOBALS['formulaires']['autoriser_admin_restreint'])
++            return true;
++    else return false;
+ }
+ 
+ /**
+  * Autorisation de voir la liste des formulaires formidable
+@@ -92,9 +94,9 @@
+ 				return true;
+ 			else{
+ 				include_spip('inc/formidable');
+ 				// Si la personne n'a jamais répondu, c'est bon
+-				if (!formidable_verifier_reponse_formulaire($id, $options['identification']))
++				if (!formidable_verifier_reponse_formulaire($id))
+ 					return true;
+ 				else
+ 					return false;
+ 			}
+diff -r -U4 -x CVS formidable_1_0.orig/formidable_options.php formidable_1_0/formidable_options.php
+--- formidable_1_0.orig/formidable_options.php	2012-10-12 11:00:03.000000000 +0200
++++ formidable_1_0/formidable_options.php	2013-03-19 15:56:57.877287434 +0100
+@@ -83,8 +83,19 @@
+ 		)
+ 	)
+ );
+ 
++/* déclaration des différentes variables utilisées pour effectuer l'anonymisation */
++$GLOBALS['formulaires']['variables_anonymisation'] = array(
++	'remote_user' => '$_SERVER["REMOTE_USER"]',
++	'php_auth_user' => '$_SERVER["PHP_AUTH_USER"]',
++);
++
++$GLOBALS['formulaires']['passwd'] = array(
++	'interne' => 'palabresecreta',
++);
++
++$GLOBALS['formulaires']['autoriser_admin_restreint'] = false;
+ 
+ if (!function_exists('array_fill_keys')) {
+ 	/**
+ 	 * Remplit un tableau avec des valeurs, en spécifiant les clés
+diff -r -U4 -x CVS formidable_1_0.orig/formulaires/formidable.html formidable_1_0/formulaires/formidable.html
+--- formidable_1_0.orig/formulaires/formidable.html	2012-09-06 15:00:08.000000000 +0200
++++ formidable_1_0/formulaires/formidable.html	2013-03-19 15:58:24.837286337 +0100
+@@ -1,8 +1,13 @@
+ <BOUCLE_remplacer_le_formulaire(CONDITION){si #ENV{_remplacer_formulaire}}>
+ 	[(#REM) Afficher du HTML si prévu par un plugin ou pour les stats ]
+ 	[(#ENV**{_remplacer_formulaire})]
+ </BOUCLE_remplacer_le_formulaire>
++<BOUCLE_formulaire(FORMULAIRES){id_formulaire=#ENV{id}}>
++	[(#SET{enregistrement,[(#TRAITEMENTS**|unserialize|table_valeur{'enregistrement'})]})]
++	[(#SET{anonymiser,[(#GET{enregistrement}|table_valeur{'anonymiser'})]})]
++	[(#GET{anonymiser}|=={on}|oui)<h3><:formidable:formulaire_anonyme_explication:>]</h3>
++</BOUCLE_formulaire>
+ <div class="formulaire_spip formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
+ 	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+ 	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+ 
+diff -r -U4 -x CVS formidable_1_0.orig/formulaires/formidable.php formidable_1_0/formulaires/formidable.php
+--- formidable_1_0.orig/formulaires/formidable.php	2012-10-12 11:00:07.000000000 +0200
++++ formidable_1_0/formulaires/formidable.php	2013-03-19 15:47:51.781294328 +0100
+@@ -94,10 +94,10 @@
+ 				// la dernière réponse si elle existe
+ 				if ($options = $traitements['enregistrement']
+ 					and !$options['multiple']
+ 					and $options['modifiable']
+-					and $reponses = formidable_verifier_reponse_formulaire($formulaire['id_formulaire'], $options['identification'])
+-				){
++					and $reponses = formidable_verifier_reponse_formulaire($formulaire['id_formulaire'], $options)
++				) {
+ 					$id_formulaires_reponse = array_pop($reponses);
+ 					$contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
+ 
+ 					// On ajoute un hidden pour dire que c'est une modif
+diff -r -U4 -x CVS formidable_1_0.orig/inc/formidable.php formidable_1_0/inc/formidable.php
+--- formidable_1_0.orig/inc/formidable.php	2012-09-06 14:00:10.000000000 +0200
++++ formidable_1_0/inc/formidable.php	2013-03-19 15:47:51.945294326 +0100
+@@ -93,36 +93,47 @@
+ /*
+  * Vérifie si le visiteur a déjà répondu à un formulaire
+  *
+  * @param int $id_formulaire L'identifiant du formulaire
+- * @param string $choix_identification Comment verifier une reponse. Priorite sur 'cookie' ou sur 'id_auteur'
++ * @param string $options : options du formulaire definies dans l'espace prive
+  * @return unknown_type Retourne un tableau contenant les id des réponses si elles existent, sinon false
+  */
+-function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identification='cookie'){
++function formidable_verifier_reponse_formulaire($id_formulaire, $options){
+ 	global $auteur_session;
+ 	$id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
+ 	$nom_cookie = formidable_generer_nom_cookie($id_formulaire);
+ 	$cookie = isset($_COOKIE[$nom_cookie]) ? $_COOKIE[$nom_cookie] : false;
+ 
++	$anonymiser = isset($options['anonymiser']) ? $options['anonymiser'] : false;
++	$anonymiser_variable = isset($options['anonymiser_variable']) ? $options['anonymiser_variable'] : '';
++
++	// traitement de l'anonymisation
++	if ($anonymiser != false) {
++	    // mod de l'id_auteur
++	    $variables_anonymisation =
++	            $GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
++	    $id = eval("return $variables_anonymisation;");
++	    $id_auteur = formidable_scramble($id);
++	}
+ 	// ni cookie ni id, on ne peut rien faire
+ 	if (!$cookie and !$id_auteur) {
+ 		return false;
+ 	}
+ 	
+ 	// priorite sur le cookie
+ 	if ($choix_identification == 'cookie' or !$choix_identification) {
+ 		if ($cookie)
+-			$where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.intval($id_auteur).')' : ')');
++			$where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.$id_auteur.')' : ')');
+ 		else
+-			$where = 'id_auteur='.intval($id_auteur);
++			$where = 'id_auteur='.$id_auteur;
+ 	}
+ 	
+ 	// sinon sur l'id_auteur
+ 	else {
+ 		if ($id_auteur)
+-			$where = 'id_auteur='.intval($id_auteur);		
++			$where = 'id_auteur='.$id_auteur;
+ 		else
+-			$where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.intval($id_auteur).')' : ')');
++			$where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.$id_auteur.')' : ')');
+ 	}
+ 	
+ 	$reponses = sql_allfetsel(
+ 		'id_formulaires_reponse',
+@@ -148,9 +159,9 @@
+  * @param array $saisie Un tableau décrivant une saisie
+  * @param array $env L'environnement, contenant normalement la réponse à la saisie
+  * @return string Retour le HTML des vues
+  */
+-function formidable_analyser_saisie($saisie, $valeurs=array(), $reponses_total=0){
++function formidable_analyser_saisie($saisie, $valeurs=array(), $reponses_total=0, $format_brut=false) {
+ 	// Si le paramètre n'est pas bon ou que c'est un conteneur, on génère du vide
+ 	if (!is_array($saisie) or (isset($saisie['saisies']) and $saisie['saisies']))
+ 		return '';
+ 	
+@@ -176,12 +187,106 @@
+ 		$contexte['valeurs'] = array();
+ 	}
+ 	
+ 	// On génère la saisie
+-	return recuperer_fond(
+-		'saisies-analyses/_base',
+-		$contexte
+-	);
++    if ($format_brut) {
++        return analyser_saisie($contexte);
++    } else {
++        return recuperer_fond(
++            'saisies-analyses/_base',
++            $contexte
++        );
++    }
++}
++
++/*
++ * Renvoie une ligne de réponse sous la forme d'un tableau
++ *
++ * @param array $saisie Un tableau décrivant une saisie
++ * @return array Tableau contenant une ligne
++ */
++function analyser_saisie($saisie) {
++    if (!isset($saisie['type_saisie']) or $saisie['type_saisie'] == '')
++        return '';
++
++    $ligne = array();
++
++    switch($saisie['type_saisie']) {
++        case 'selecteur_rubrique' :
++        case 'selecteur_rubrique_article' :
++        case 'selecteur_article' :
++            $ligne['plein'] = count(array_filter($saisie['valeurs']));
++            $ligne['vide'] = count(array_diff_key($saisie['valeurs']
++                , array_filter($saisie['valeurs'])));
++        break;
++        case 'radio' :
++        case 'selection' :
++        case 'selection_multiple' :
++        case 'checkbox' :
++            $stats = array();
++            foreach($saisie['valeurs'] as $valeur) {
++                if (is_array($valeur)) {
++                    foreach($valeur as $choix) {
++                        if (isset($stats["choix-$choix"]))
++                            $stats["choix-$choix"]++;
++                        else $stats["choix-$choix"] = 1;
++                    }
++                } else {
++                    if (isset($stats["choix-$valeur"]))
++                            $stats["choix-$valeur"]++;
++                        else $stats["choix-$valeur"] = 1;
++                }
++            }
++            $datas = is_string($saisie['datas'])
++                ? saisies_chaine2tableau($saisie['datas'])
++                : $saisie['datas'];
++            foreach($datas as $key => $val) {
++                $nb = (isset($stats["choix-$key"]))
++                    ? $stats["choix-$key"]
++                    : 0;
++                $ligne[$val] = $nb;
++            }
++        break;
++        case 'destinataires' :
++            $stats = array();
++            foreach($saisie['valeurs'] as $valeur) {
++                foreach($valeur as $choix) {
++                    if (isset($stats["choix-$choix"]))
++                        $stats["choix-$choix"]++;
++                    else $stats["choix-$choix"] = 1;
++                }
++            }
++            foreach($stats as $key => $val) {
++                $key = str_replace('choix-', '', $key);
++                if ($key == '') $key = '<valeur vide>';
++                $auteur = sql_getfetsel('nom','spip_auteurs',"id_auteur=$key");
++                $ligne[$auteur] = $val;
++            }
++        break;
++    }
++
++    $vide = 0;
++    foreach($saisie['valeurs'] as $valeur) {
++        if ($valeur == '') $vide++;
++        switch($saisie['type_saisie']) {
++            case 'case' :
++            case 'oui_non' :
++                if(isset($ligne['oui']) == false) $ligne['oui'] = 0;
++                if(isset($ligne['non']) == false) $ligne['non'] = 0;
++                if ($valeur) $ligne['oui']++; else $ligne['non']++;
++            break;
++            case 'input' :
++            case 'hidden' :
++            case 'explication' :
++            break;
++        }
++    }
++    $ligne['sans_reponse'] = $vide;
++    $ligne['header'] = $saisie['label'] != ''
++        ? $saisie['label']
++        : $saisie['type_saisie'];
++
++    return $ligne;
+ }
+ 
+ 
+ /**
+@@ -222,5 +327,51 @@
+ 	if ($nb == 1) return _T('formidable:reponse_une');
+ 	return _T('formidable:reponses_nb', array('nb' => $nb));
+ }
+ 
++/**
++ * Transforme le hash MD5 en une valeur numérique unique
++ *
++ * trouvé ici : http://stackoverflow.com/questions/1422725/represent-md5-hash-as-an-integer
++ * @param string $hex_str La valeur alphanumérique à transformer
++ * @return string Valeur numérique
++*/
++function md5_hex_to_dec($hex_str) {
++	$arr = str_split($hex_str, 4);
++	foreach ($arr as $grp) {
++	    $dec[] = str_pad(hexdec($grp), 5, '0', STR_PAD_LEFT);
++	}
++
++	/* on s'assure que $result ne commence pas par un zero */
++	$result = implode('', $dec);
++	for ($cpt = 0 ; $cpt < strlen($result) ; $cpt++) {
++	    if ($result[$cpt] != '0') break;
++	}
++	$result = substr($result, $cpt);
++	return $result;
++}
++
++/**
++ * Transforme un login en une valeur numérique de 19 caractères
++ *
++ * NOTE: il devient impossible de retrouver la valeur d'origine car le HASH
++ * est coupé à 19cars et est donc incomplet. L'unicité n'est pas garantie mais
++ * les chances pour que deux logins tombent sur le même HASH sont de 1 sur
++ * 10 milliards de milliards
++ * A la fin, on recherche et supprime les éventuels zéros de début
++ * @param string $login Login à transformer
++ * @param string $passwd Chaîne 'secrète' ajoutée au login et id_formulaire pour éviter
++ *  les recoupements d'identité entre plusieurs formulaires
++ * @return string Un nombre de 19 chiffres
++*/
++function formidable_scramble($login, $passwd = '') {
++	$id_form = (isset($flux['args']['id_form']) ? $flux['args']['id_form'] : '');
++	if ($passwd == '')
++	    $passwd = $GLOBALS['formulaires']['passwd']['interne'];
++	$login_md5 = md5("$login$passwd$id_form");
++	$login_num = md5_hex_to_dec($login_md5);
++	$login_num = substr($login_num, 0, 19);
++
++	return $login_num;
++}
++
+ ?>
+diff -r -U4 -x CVS formidable_1_0.orig/lang/formidable_de.php formidable_1_0/lang/formidable_de.php
+--- formidable_1_0.orig/lang/formidable_de.php	2012-09-07 04:00:18.000000000 +0200
++++ formidable_1_0/lang/formidable_de.php	2013-03-19 15:47:51.993294324 +0100
+@@ -14,8 +14,9 @@
+ 	'analyse_sans_reponse' => 'Leere Antworten',
+ 	'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.', # NEW
+ 	'analyse_zero_reponse_total' => 'Aucune personne n\'a répondu à ce formulaire.', # NEW
+ 	'aucun_traitement' => 'Aucun traitement', # NEW
++    'analyse_exporter' => 'Analyse exportieren',
+ 
+ 	// B
+ 	'bouton_formulaires' => 'Formulare',
+ 
+@@ -25,8 +26,9 @@
+ 		<code>orange</code>, <code>green</code> ou tout ce qui vous plairait !', # NEW
+ 	'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression', # NEW
+ 	'cfg_titre_page_configurer_formidable' => 'Configurer Formidable', # NEW
+ 	'cfg_titre_parametrages_analyse' => 'Paramétrages de l\'analyse des réponses', # NEW
++    'champ' => 'Feld',
+ 
+ 	// E
+ 	'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
+ 	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+@@ -61,8 +63,9 @@
+ 	'erreur_importer_yaml' => 'Fehler beim Importieren des Formulars aus YAML',
+ 	'erreur_inexistant' => 'Formular nicht vorhanden.',
+ 
+ 	// F
++	'formulaire_anonyme_explication' => "Diese Form ist anonym, dh die Identität des Benutzers nicht registriert ist.",
+ 	'formulaires_aucun' => 'Kein Formular vorhanden.',
+ 	'formulaires_dupliquer' => 'Formular kopieren',
+ 	'formulaires_dupliquer_copie' => '(Kopie)',
+ 	'formulaires_introduction' => 'Erstellen und bearbeiten sie Formulare für ihre Website.',
+@@ -106,8 +109,11 @@
+ 	'reponses_nb' => '@nb@ réponses', # NEW
+ 	'reponses_voir_detail' => 'Antwort anzeigen',
+ 	'retour_aucun_traitement' => 'Ihre Antwort wurde gesendet, jedoch wurde keine Verarbeitungsoption für das Formular festgelegt. Deshalb geschieht mit den Daten aus diesem Formular überhaupt nichts. :)',
+ 
++    // S
++    'sans_reponses' => 'Unbeantwortet',
++
+ 	// T
+ 	'titre_cadre_raccourcis' => 'Raccourcis', # NEW
+ 	'traitements_actives' => 'Traitements activés', # NEW
+ 	'traitements_aide_memoire' => 'Merkzettel:',
+@@ -137,8 +143,13 @@
+ 	'traiter_email_sujet' => '@nom@ hat ihnen geschrieben.',
+ 	'traiter_email_sujet_accuse' => 'Danke für ihre Antwort.',
+ 	'traiter_email_titre' => 'Per Mail senden',
+ 	'traiter_email_url_enregistrement' => 'Sie könen die Antworten <a href="@url@">auf dieser Seite verwalten</a>.',
++	'traiter_enregistrement_option_anonymiser_label' => "Anonymisierter Form",
++	'traiter_enregistrement_option_anonymiser_explication' => "Stellen die Ergebnisse der anonymen Form (nicht halten Trace-Kennung der Befragten).')",
++	'traiter_enregistrement_option_choix_select_label' => "W&auml;hlen eine Variable von denen zur Verf&uuml;gung.",
++	'traiter_enregistrement_option_anonymiser_variable_label' => "Variable aus dem anonymisierter Form.",
++	'traiter_enregistrement_option_anonymiser_variable_explication' => "Welches System Variable verwendet, um einen einzelnen Wert f&uuml;r jeden Autor ohne Offenlegung seiner Identit&auml;t zu berechnen.",
+ 	'traiter_enregistrement_description' => 'Einträge in das Formular in der Datenbank speichern',
+ 	'traiter_enregistrement_erreur_base' => 'Beim Speichern in der Datenbank ist ein Fehler aufgetreten',
+ 	'traiter_enregistrement_erreur_deja_repondu' => 'Sie haben dieses Formular bereits ausgefüllt.',
+ 	'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'La réponse à éditer est introuvable.', # NEW
+Seulement dans formidable_1_0.orig/lang: formidable_en.php
+diff -r -U4 -x CVS formidable_1_0.orig/lang/formidable_fr.php formidable_1_0/lang/formidable_fr.php
+--- formidable_1_0.orig/lang/formidable_fr.php	2012-09-07 04:00:18.000000000 +0200
++++ formidable_1_0/lang/formidable_fr.php	2013-03-19 16:01:12.685284218 +0100
+@@ -12,8 +12,9 @@
+ 	'analyse_sans_reponse' => 'Laissés blanc',
+ 	'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.',
+ 	'analyse_zero_reponse_total' => 'Aucune personne n\'a répondu à ce formulaire.',
+ 	'aucun_traitement' => 'Aucun traitement',
++    'analyse_exporter' => 'Exporter l\'analyse',
+ 
+ 	// B
+ 	'bouton_formulaires' => 'Formulaires',
+ 
+@@ -23,8 +24,9 @@
+ 		<code>orange</code>, <code>green</code> ou tout ce qui vous plairait !',
+ 	'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression',
+ 	'cfg_titre_page_configurer_formidable' => 'Configurer Formidable',
+ 	'cfg_titre_parametrages_analyse' => 'Paramétrages de l\'analyse des réponses',
++    'champ' => 'Champ',
+ 
+ 	// E
+ 	'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
+ 	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+@@ -59,8 +61,9 @@
+ 	'erreur_importer_yaml' => 'Erreur durant l\'importation du fichier YAML',
+ 	'erreur_inexistant' => 'Le formulaire n\'existe pas.',
+ 
+ 	// F
++	'formulaire_anonyme_explication' => 'Ce formulaire est anonyme ; c\'est à dire que l\'identité de l\'utilisateur n\'est pas enregistr&eacute;e.',
+ 	'formulaires_aucun' => 'Il n\'y a pour l\'instant aucun formulaire.',
+ 	'formulaires_dupliquer' => 'Dupliquer le formulaire',
+ 	'formulaires_dupliquer_copie' => '(copie)',
+ 	'formulaires_introduction' => 'Créez et configurez ici les formulaires de votre site.',
+@@ -104,8 +107,11 @@
+ 	'reponses_nb' => '@nb@ réponses',
+ 	'reponses_voir_detail' => 'Voir la réponse',
+ 	'retour_aucun_traitement' => 'Votre réponse a bien été envoyée, mais aucun traitement n\'a été défini pour ce formulaire. Il ne fait donc rien. :)',
+ 
++    // S
++    'sans_reponses' => 'Sans réponse',
++
+ 	// T
+ 	'titre_cadre_raccourcis' => 'Raccourcis',
+ 	'traitements_actives' => 'Traitements activés',
+ 	'traitements_aide_memoire' => 'Aide mémoire :',
+@@ -135,8 +141,13 @@
+ 	'traiter_email_sujet' => '@nom@ vous a écrit.',
+ 	'traiter_email_sujet_accuse' => 'Merci de votre réponse.',
+ 	'traiter_email_titre' => 'Envoyer par courriel',
+ 	'traiter_email_url_enregistrement' => 'Vous pouvez gérer les réponses <a href="@url@">sur cette page</a>.',
++	'traiter_enregistrement_option_anonymiser_label' => "Anonymiser le formulaire",
++	'traiter_enregistrement_option_anonymiser_explication' => "Rendre les r&eacute;sultats du formulaire anonymes (ne pas garder de traces de l'identifiant des personnes ayant r&eacute;pondu.)",
++	'traiter_enregistrement_option_choix_select_label' => "Choisir une variable parmi celles propos&eacute;es",
++	'traiter_enregistrement_option_anonymiser_variable_label' => "Variable &agrave; partir de laquelle anonymiser le formulaire",
++	'traiter_enregistrement_option_anonymiser_variable_explication' => "Quelle variable syst&egrave;me utiliser pour calculer une valeur unique pour chaque auteur sans pour autant r&eacute;v&eacute;ler son identit&eacute;.",
+ 	'traiter_enregistrement_description' => 'Enregistre les résultats du formulaire dans la base de données',
+ 	'traiter_enregistrement_erreur_base' => 'Une erreur technique est survenue durant l\'enregistrement en base de données',
+ 	'traiter_enregistrement_erreur_deja_repondu' => 'Vous avez déjà répondu à ce formulaire.',
+ 	'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'La réponse à éditer est introuvable.',
+diff -r -U4 -x CVS formidable_1_0.orig/lang/formidable_it.php formidable_1_0/lang/formidable_it.php
+--- formidable_1_0.orig/lang/formidable_it.php	2012-09-07 04:00:18.000000000 +0200
++++ formidable_1_0/lang/formidable_it.php	2013-03-19 15:47:52.009294324 +0100
+@@ -14,8 +14,9 @@
+ 	'analyse_sans_reponse' => 'Risposte vuote',
+ 	'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.', # NEW
+ 	'analyse_zero_reponse_total' => 'Aucune personne n\'a répondu à ce formulaire.', # NEW
+ 	'aucun_traitement' => 'Aucun traitement', # NEW
++    'analyse_exporter' => 'Esporta l\'analisi',
+ 
+ 	// B
+ 	'bouton_formulaires' => 'Moduli',
+ 
+@@ -25,8 +26,9 @@
+ 		<code>orange</code>, <code>green</code> ou tout ce qui vous plairait !', # NEW
+ 	'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression', # NEW
+ 	'cfg_titre_page_configurer_formidable' => 'Configurer Formidable', # NEW
+ 	'cfg_titre_parametrages_analyse' => 'Paramétrages de l\'analyse des réponses', # NEW
++    'champ' => 'Campo',
+ 
+ 	// E
+ 	'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
+ 	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+@@ -106,8 +108,11 @@
+ 	'reponses_nb' => '@nb@ réponses', # NEW
+ 	'reponses_voir_detail' => 'Vedi la risposta',
+ 	'retour_aucun_traitement' => 'La risposta è stata correttamente inviata. Grazie :)',
+ 
++    // S
++    'sans_reponses' => 'Senza risposta',
++
+ 	// T
+ 	'titre_cadre_raccourcis' => 'Raccourcis', # NEW
+ 	'traitements_actives' => 'Traitements activés', # NEW
+ 	'traitements_aide_memoire' => 'Promemoria:',
+diff -r -U4 -x CVS formidable_1_0.orig/lang/formidable_sk.php formidable_1_0/lang/formidable_sk.php
+--- formidable_1_0.orig/lang/formidable_sk.php	2012-09-17 04:00:06.000000000 +0200
++++ formidable_1_0/lang/formidable_sk.php	2013-03-19 15:47:52.017294325 +0100
+@@ -14,8 +14,9 @@
+ 	'analyse_sans_reponse' => 'Nevyplnené',
+ 	'analyse_une_reponse_total' => 'Na tento formulár odpovedal jeden človek.',
+ 	'analyse_zero_reponse_total' => 'Na tento formulár neodpovedal žiaden človek.',
+ 	'aucun_traitement' => 'Žiadne spracovanie',
++    'analyse_exporter' => 'Exportovať analýzu',
+ 
+ 	// B
+ 	'bouton_formulaires' => 'Formuláre',
+ 
+@@ -25,8 +26,9 @@
+ 		<code>oranžový,</code> <code>zelený</code> alebo akýkoľvek iný stĺpec!',
+ 	'cfg_analyse_classe_label' => 'Trieda CSS stĺpca dokončenia úkonu',
+ 	'cfg_titre_page_configurer_formidable' => 'Nastaviť Formidable',
+ 	'cfg_titre_parametrages_analyse' => 'Nastavenia analýzy odpovedí',
++    'champ' => 'Pol\'a',
+ 
+ 	// E
+ 	'echanger_formulaire_forms_importer' => 'formuláre Forms & Tables (.xml)',
+ 	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+@@ -106,8 +108,11 @@
+ 	'reponses_nb' => '@nb@ odpovedí',
+ 	'reponses_voir_detail' => 'Zobraziť odpoveď',
+ 	'retour_aucun_traitement' => 'Vaša odpoveď bola odoslaná, ale k tomuto formuláru nebola definovaná žiadna funkcia. Nič neurobí. :-)',
+ 
++    // S
++    'sans_reponses' => 'Neriešiteľný',
++
+ 	// T
+ 	'titre_cadre_raccourcis' => 'Skratky',
+ 	'traitements_actives' => 'Aktívne spracovanie',
+ 	'traitements_aide_memoire' => 'Pomocná pamäť:',
+diff -r -U4 -x CVS formidable_1_0.orig/lang/formidable.xml formidable_1_0/lang/formidable.xml
+--- formidable_1_0.orig/lang/formidable.xml	2013-01-21 04:00:22.000000000 +0100
++++ formidable_1_0/lang/formidable.xml	2013-03-19 15:47:52.001294324 +0100
+@@ -1,10 +1,6 @@
+ <traduction module="formidable" gestionnaire="salvatore" url="http://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/" reference="fr">
+ 	<langue code="de" />
+-	<langue code="en" url="http://trad.spip.net/tradlang_module/formidable?lang_cible=en">
+-		<traducteur nom="Benitron" lien="http://trad.spip.net/auteur/benitron" />
+-		<traducteur nom="Paolo" lien="http://trad.spip.net/auteur/paolo" />
+-	</langue>
+ 	<langue code="fr" />
+ 	<langue code="it" />
+ 	<langue code="sk" url="http://trad.spip.net/tradlang_module/formidable?lang_cible=sk">
+ 		<traducteur nom="jaro" lien="http://trad.spip.net/auteur/jaro" />
+diff -r -U4 -x CVS formidable_1_0.orig/modeles/formulaire_analyse.html formidable_1_0/modeles/formulaire_analyse.html
+--- formidable_1_0.orig/modeles/formulaire_analyse.html	2013-03-12 19:00:08.000000000 +0100
++++ formidable_1_0/modeles/formulaire_analyse.html	2013-03-19 15:47:52.057294325 +0100
+@@ -3,9 +3,9 @@
+ [(#REM) On fait un tableau qui contient toutes les réponses, classées par champ ]
+ #SET{valeurs,#ARRAY}
+ #SET{reponses_total,0}
+ <BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire}>
+-<BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}{nom ?= #ENV{nom}>
++<BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}>
+ #SET_MERGE{liste_valeurs, #GET{valeurs}|table_valeur{#NOM}|sinon{#ARRAY}, #ARRAY{0,#VALEUR|tenter_unserialize}}
+ #SET_MERGE{valeurs, #ARRAY{#NOM,#GET{liste_valeurs}}}
+ </BOUCLE_champs>
+ </BOUCLE_reponses>
+@@ -18,11 +18,9 @@
+ <//B_reponses>
+ 
+ <BOUCLE_saisies(POUR){tableau #SAISIES|unserialize|saisies_lister_par_nom}>
+ [(#VAL{saisie}|array_key_exists{#VALEUR}|oui)
+-  [(#CLE|=={#ENV{nom,#CLE}}|oui)
+ 	[(#VALEUR|formidable_analyser_saisie{#GET{valeurs}, #GET{reponses_total}})]
+-  ]
+ ]
+ </BOUCLE_saisies>
+ 
+ </div><!-- formidable_analyse -->
+@@ -61,5 +59,5 @@
+ </script>
+ <style type='text/css'>
+ <INCLURE{fond=css/formidable_analyse.css} />
+ </style>
+-</BOUCLE_formulaire>
+\ Pas de fin de ligne à la fin du fichier
++</BOUCLE_formulaire>
+diff -r -U4 -x CVS formidable_1_0.orig/paquet.xml formidable_1_0/paquet.xml
+--- formidable_1_0.orig/paquet.xml	2013-03-11 21:00:08.000000000 +0100
++++ formidable_1_0/paquet.xml	2013-03-19 15:47:52.117294324 +0100
+@@ -1,8 +1,8 @@
+ <paquet
+ 	prefix="formidable"
+ 	categorie="communication"
+-	version="1.3.5"
++	version="1.3.4"
+ 	etat="dev"
+ 	compatibilite="[3.0.0-dev;3.0.99]"
+ 	logo="images/formidable-64.png"
+ 	schema="0.5.1"
+Seulement dans formidable_1_0/prive/squelettes/extra: formulaires_analyse.html
+diff -r -U4 -x CVS formidable_1_0.orig/saisies-analyses/checkbox.html formidable_1_0/saisies-analyses/checkbox.html
+--- formidable_1_0.orig/saisies-analyses/checkbox.html	2013-03-12 04:00:06.000000000 +0100
++++ formidable_1_0/saisies-analyses/checkbox.html	2013-03-19 15:47:52.477294318 +0100
+@@ -5,9 +5,9 @@
+ 	</BOUCLE_choix>
+ </BOUCLE_reponses>
+ 
+ [(#REM) datas peut être une chaine qu'on sait décomposer ]
+-#SET{datas, #ENV*{datas}}
++#SET{datas, #ENV{datas}}
+ #SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
+ 
+ <BOUCLE_datas(POUR){tableau #GET{datas}}>
+ [(#SET{nb,[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]})]
+diff -r -U4 -x CVS formidable_1_0.orig/saisies-analyses/radio.html formidable_1_0/saisies-analyses/radio.html
+--- formidable_1_0.orig/saisies-analyses/radio.html	2013-03-12 04:00:06.000000000 +0100
++++ formidable_1_0/saisies-analyses/radio.html	2013-03-19 15:47:52.449294319 +0100
+@@ -5,9 +5,9 @@
+ 	]
+ </BOUCLE_reponses>
+ 
+ [(#REM) datas peut être une chaine qu'on sait décomposer ]
+-#SET{datas, #ENV*{datas}}
++#SET{datas, #ENV{datas}}
+ #SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
+ 
+ <BOUCLE_datas(POUR){tableau #GET{datas}}>
+ [(#SET{nb,[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]})]
+diff -r -U4 -x CVS formidable_1_0.orig/svn.revision formidable_1_0/svn.revision
+--- formidable_1_0.orig/svn.revision	2013-03-12 18:28:10.000000000 +0100
++++ formidable_1_0/svn.revision	2013-03-19 15:47:52.529294319 +0100
+@@ -1,10 +1,10 @@
+ <svn_revision>
+ <text_version>
+ Origine: file:///home/svn/repository/spip-zone/_plugins_/formidable/trunk
+-Revision: 70631
+-Dernier commit: 2013-03-12 18:28:10 +0100 
++Revision: 66722
++Dernier commit: 2012-10-12 11:00:03 +0200 
+ </text_version>
+ <origine>file:///home/svn/repository/spip-zone/_plugins_/formidable/trunk</origine>
+-<revision>70631</revision>
+-<commit>2013-03-12 18:28:10 +0100 </commit>
++<revision>66722</revision>
++<commit>2012-10-12 11:00:03 +0200 </commit>
+ </svn_revision>
+\ Pas de fin de ligne à la fin du fichier
+diff -r -U4 -x CVS formidable_1_0.orig/traiter/enregistrement.php formidable_1_0/traiter/enregistrement.php
+--- formidable_1_0.orig/traiter/enregistrement.php	2012-01-22 11:00:13.000000000 +0100
++++ formidable_1_0/traiter/enregistrement.php	2013-03-19 15:47:52.545294317 +0100
+@@ -15,8 +15,17 @@
+ 	// La personne a-t-elle un compte ?
+ 	global $auteur_session;
+ 	$id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
+ 	
++    // traitement de l'anonymisation
++    if ($options['anonymiser'] == 'on') {
++        // mod de l'id_auteur
++        $variables_anonymisation =
++                $GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
++        $id = eval("return $variables_anonymisation;");
++        $id_auteur = formidable_scramble($id);
++    }
++
+ 	// On cherche le cookie et sinon on le crée
+ 	$nom_cookie = formidable_generer_nom_cookie($id_formulaire);
+ 	if (isset($_COOKIE[$nom_cookie]))
+ 		$cookie = $_COOKIE[$nom_cookie];
+diff -r -U4 -x CVS formidable_1_0.orig/traiter/enregistrement.yaml formidable_1_0/traiter/enregistrement.yaml
+--- formidable_1_0.orig/traiter/enregistrement.yaml	2012-03-18 16:00:30.000000000 +0100
++++ formidable_1_0/traiter/enregistrement.yaml	2013-03-19 15:47:52.557294317 +0100
+@@ -26,8 +26,26 @@
+         cookie: '<:formidable:identification_par_cookie:>'
+         id_auteur: '<:formidable:identification_par_id_auteur:>'
+       defaut: 'cookie'
+   -
++    saisie: 'oui_non'
++    options:
++      nom: 'anonymiser'
++      label: '<:formidable:traiter_enregistrement_option_anonymiser_label:>'
++      explication: '<:formidable:traiter_enregistrement_option_anonymiser_explication:>'
++      defaut: ''
++  -
++    saisie: 'selection'
++    options:
++      option_intro: '<:formidable:traiter_enregistrement_option_choix_select_label:>'
++      nom: 'anonymiser_variable'
++      label: '<:formidable:traiter_enregistrement_option_anonymiser_variable_label:>'
++      explication: '<:formidable:traiter_enregistrement_option_anonymiser_variable_explication:>'
++      datas:
++        remote_user: "Variable serveur : REMOTE_USER"
++        php_auth_user: "Variable serveur : PHP_AUTH_USER"
++      defaut: ''
++  -
+     saisie: 'radio'
+     options:
+       nom: 'moderation'
+       label: '<:formidable:traiter_enregistrement_option_moderation_label:>'
diff --git a/formidable_1_0.orig/action/dupliquer_formulaire.php b/formidable_1_0.orig/action/dupliquer_formulaire.php
new file mode 100644
index 0000000000000000000000000000000000000000..93ef6d8cb7aaa2b94d0bb66ac422435b1e27dd35
--- /dev/null
+++ b/formidable_1_0.orig/action/dupliquer_formulaire.php
@@ -0,0 +1,60 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Dupliquer un formulaire
+ * @param unknown_type $arg
+ * @return unknown_type
+ */
+function action_dupliquer_formulaire_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+	$id_formulaire = intval($arg);
+
+	// Si le formulaire existe bien
+	if ($id_formulaire > 0 and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)){
+		include_spip('action/editer_formulaire');
+		// On enlève les champs inutiles
+		unset($formulaire['id_formulaire']);
+		// On modifie un peu le titre
+		$formulaire['titre'] = $formulaire['titre'].' '._T('formidable:formulaires_dupliquer_copie');
+		// On s'assure que l'identifiant n'existe pas déjà
+		$formulaire['identifiant'] = $formulaire['identifiant'].'_'.time();
+		// On insère un nouveau formulaire
+		$id_formulaire = insert_formulaire();
+		// Si ça a marché on modifie les champs de base
+		if ($id_formulaire > 0 and !($erreur = formulaire_set($id_formulaire, $formulaire))){
+			// Et ensuite les saisies et les traitements
+			$ok = sql_updateq(
+				'spip_formulaires',
+				array(
+					'saisies' => $formulaire['saisies'],
+					'traitements' => $formulaire['traitements']
+				),
+				'id_formulaire = '.$id_formulaire
+			);
+			// Et on redirige vers la vue
+			$redirect = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $id_formulaire, '&');
+		}
+		// Sinon on reste sur la page qui liste tout
+		else{
+			$redirect = generer_url_ecrire('formulaires');
+		}
+	}
+
+	// Si on a précisé une direction on va plutôt là
+	if (_request('redirect')) {
+		$redirect = parametre_url(urldecode(_request('redirect')),
+			'id_formulaire', $id_formulaire, '&') . $erreur;
+	}
+	
+	// On redirige
+	include_spip('inc/headers');
+	redirige_par_entete($redirect);
+}
+
+?>
diff --git a/formidable_1_0.orig/action/editer_formulaire.php b/formidable_1_0.orig/action/editer_formulaire.php
new file mode 100644
index 0000000000000000000000000000000000000000..2254bf8cabab416df9c6e725962bb882c4322803
--- /dev/null
+++ b/formidable_1_0.orig/action/editer_formulaire.php
@@ -0,0 +1,98 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Action de création / Modification d'un formulaire
+ * @param unknown_type $arg
+ * @return unknown_type
+ */
+function action_editer_formulaire_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+
+	// si id_formulaire n'est pas un nombre, c'est une creation
+	if (!$id_formulaire = intval($arg)) {
+		$id_formulaire = insert_formulaire();
+	}
+
+	// Enregistre l'envoi dans la BD
+	if ($id_formulaire > 0) $err = formulaire_set($id_formulaire);
+
+	if (_request('redirect')) {
+		$redirect = parametre_url(urldecode(_request('redirect')),
+			'id_formulaire', $id_formulaire, '&') . $err;
+
+		include_spip('inc/headers');
+		redirige_par_entete($redirect);
+	}
+	else
+		return array($id_formulaire,$err);
+}
+
+/**
+ * Crée un nouveau formulaire et retourne son ID
+ *
+ * @return int id_formulaire
+ */
+function insert_formulaire() {
+	// Envoyer aux plugins
+	$champs = pipeline('pre_insertion',
+		array(
+			'args' => array(
+				'table' => 'spip_formulaires',
+			),
+			'data' => $champs
+		)
+	);
+	$id_formulaire = sql_insertq("spip_formulaires");
+
+	return $id_formulaire;
+}
+
+/**
+ * Appelle la fonction de modification d'un formulaire
+ *
+ * @param int $id_formulaire
+ * @param unknown_type $set
+ * @return $err
+ */
+function formulaire_set($id_formulaire, $set=null) {
+	include_spip('inc/saisies');
+	$err = '';
+
+	$c = array();
+	$champs = saisies_lister_champs($GLOBALS['formulaires']['editer_formulaire']);
+	foreach ($champs as $champ)
+		$c[$champ] = _request($champ,$set);
+	
+	include_spip('inc/modifier');
+	revision_formulaire($id_formulaire, $c);
+
+	return $err;
+}
+
+/**
+ * Enregistre une révision de formulaire
+ *
+ * @param int $id_formulaire
+ * @param array $c
+ * @return
+ */
+function revision_formulaire($id_formulaire, $c=false) {
+	$invalideur = "id='id_formulaire/$id_formulaire'";
+
+	modifier_contenu('formulaire', $id_formulaire,
+		array(
+			'nonvide' => array('titre' => _T('info_sans_titre')),
+			'invalideur' => $invalideur
+		),
+		$c);
+
+	return ''; // pas d'erreur
+}
+
+?>
diff --git a/formidable_1_0.orig/action/exporter_formulaire.php b/formidable_1_0.orig/action/exporter_formulaire.php
new file mode 100644
index 0000000000000000000000000000000000000000..df240834dd3c07c926f300f5f00c562a0d8029aa
--- /dev/null
+++ b/formidable_1_0.orig/action/exporter_formulaire.php
@@ -0,0 +1,24 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function action_exporter_formulaire_dist(){
+	include_spip('inc/formidable');
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+	
+	list($id_formulaire, $type_export) = preg_split('/[\W]/', $arg);
+	
+	if ($id_formulaire > 0
+		and $type_export
+		and $types_echange = echanges_formulaire_lister_disponibles()
+		and $exporter = $types_echange['exporter'][$type_export]
+	){
+		$exporter($id_formulaire);
+	}
+}
+
+?>
diff --git a/formidable_1_0.orig/action/exporter_formulaires_reponses.php b/formidable_1_0.orig/action/exporter_formulaires_reponses.php
new file mode 100644
index 0000000000000000000000000000000000000000..4105d4f0c2321caeefbfb209133e328367989ae9
--- /dev/null
+++ b/formidable_1_0.orig/action/exporter_formulaires_reponses.php
@@ -0,0 +1,85 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/*
+ * Exporter toutes les réponses d'un formulaire
+ * @param unknown_type $arg
+ * @return unknown_type
+ */
+function action_exporter_formulaires_reponses_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+
+	// on ne fait des choses seulements si le formulaire existe et qu'il a des enregistrements
+	$ok = false;
+	if (
+		$id_formulaire = intval($arg)
+		and $formulaire = sql_fetsel('*','spip_formulaires','id_formulaire = '.$id_formulaire)
+		and $reponses = sql_allfetsel('*', 'spip_formulaires_reponses', 'id_formulaire = '.$id_formulaire.' and statut = '.sql_quote('publie'))
+	) {
+		include_spip('inc/saisies');
+		include_spip('classes/facteur');
+		include_spip('inc/filtres');
+		$reponses_completes = array();
+		
+		// La première ligne des titres
+		$titres = array(_T('public:date'), _T('formidable:reponses_auteur'), _T('formidable:reponses_ip'));
+		$saisies = saisies_lister_par_nom(unserialize($formulaire['saisies']), false);
+		foreach ($saisies as $nom=>$saisie){
+			$options = $saisie['options'];
+			$titres[] = sinon($options['label_case'], sinon($options['label'], $nom));
+		}
+		$reponses_completes[] = $titres;
+		
+		// On parcourt chaque réponse
+		foreach ($reponses as $reponse){
+			// Est-ce qu'il y a un auteur avec un nom
+			$nom_auteur = '';
+			if ($id_auteur = intval($reponse['id_auteur'])){
+				$nom_auteur = sql_getfetsel('nom', 'spip_auteurs', 'id_auteur = '.$id_auteur);
+			}
+			if (!$nom_auteur) $nom_auteur = '';
+			
+			// Le début de la réponse avec les infos (date, auteur, etc)
+			$reponse_complete = array($reponse['date'], $nom_auteur, $reponse['ip']);
+			
+			// Ensuite tous les champs
+			foreach ($saisies as $nom=>$saisie){
+				$valeur = sql_getfetsel(
+					'valeur',
+					'spip_formulaires_reponses_champs',
+					'id_formulaires_reponse = '.intval($reponse['id_formulaires_reponse']).' and nom = '.sql_quote($nom)
+				);
+				if (is_array(unserialize($valeur)))
+					$valeur = unserialize($valeur);
+				$reponse_complete[] = Facteur::html2text(
+					recuperer_fond(
+						'saisies-vues/_base',
+						array_merge(
+							array(
+								'valeur_uniquement' => 'oui',
+								'type_saisie' => $saisie['saisie'],
+								'valeur' => $valeur
+							),
+							$saisie['options']
+						)
+					)
+				);
+			}
+			
+			// On ajoute la ligne à l'ensemble des réponses
+			$reponses_completes[] = $reponse_complete;
+		}
+		
+		if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)){
+			echo $exporter_csv('reponses-formulaire-'.$formulaire['identifiant'], $reponses_completes);
+			exit();
+		}
+	}
+}
+
+?>
diff --git a/formidable_1_0.orig/action/instituer_formulaires_reponse.php b/formidable_1_0.orig/action/instituer_formulaires_reponse.php
new file mode 100644
index 0000000000000000000000000000000000000000..211057e06f66bc65c46d623861cf1fa786b852bc
--- /dev/null
+++ b/formidable_1_0.orig/action/instituer_formulaires_reponse.php
@@ -0,0 +1,34 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Action de création / Modification d'un truc
+ * @param unknown_type $arg
+ * @return unknown_type
+ */
+function action_instituer_formulaires_reponse_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+
+	list($id_formulaires_reponse, $statut) = preg_split('/\W/', $arg);
+	if (!$statut) return; // impossible mais sait-on jamais
+	
+	$id_formulaires_reponse = intval($id_formulaires_reponse);
+	
+	$ok = sql_updateq(
+		'spip_formulaires_reponses',
+		array(
+			'statut' => $statut
+		),
+		'id_formulaires_reponse = '.$id_formulaires_reponse
+	);
+	if (!$ok) $err = 'erreur';
+	
+	return array($id_formulaires_reponse, $err);
+}
+
+?>
diff --git a/formidable_1_0.orig/action/supprimer_formulaire.php b/formidable_1_0.orig/action/supprimer_formulaire.php
new file mode 100644
index 0000000000000000000000000000000000000000..372cebe136ad71acdd36d61e66c9e3ef142804a2
--- /dev/null
+++ b/formidable_1_0.orig/action/supprimer_formulaire.php
@@ -0,0 +1,61 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Action de suppression d'un formulaire
+ * @param int $arg
+ * @return unknown_type
+ */
+function action_supprimer_formulaire_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+
+	// si id_formulaire n'est pas un nombre, on ne fait rien
+	if ($id_formulaire = intval($arg)) {
+		// On supprime le formulaire lui-même
+		$ok = sql_delete(
+			'spip_formulaires',
+			'id_formulaire = '.$id_formulaire
+		);
+		
+		if ($ok){
+			// Si c'est bon, on récupère les réponses pour les supprimer
+			$reponses = sql_allfetsel(
+				'id_formulaires_reponse',
+				'spip_formulaires_reponses',
+				'id_formulaire = '.$id_formulaire
+			);
+			$reponses = $reponses ? array_map('reset', $reponses) : false;
+		
+			// On supprime les réponses s'il y en a
+			if ($reponses){
+				$ok = sql_delete(
+					'spip_formulaires_reponses',
+					sql_in('id_formulaires_reponse', $reponses)
+				);
+			
+				// Si c'est bon, on supprime les champs des réponses
+				if ($ok){
+					$ok = sql_delete(
+						'spip_formulaires_reponses_champs',
+						sql_in('id_formulaires_reponse', $reponses)
+					);
+				}
+			}
+		}
+	}
+	
+	if ($ok){
+		if (!$redirect = _request('redirect'))
+			$redirect = generer_url_ecrire('formulaires');
+		
+		include_spip('inc/headers');
+		redirige_par_entete(str_replace("&amp;","&",urldecode($redirect)));
+	}
+}
+
+?>
diff --git a/formidable_1_0.orig/action/supprimer_formulaires_reponse.php b/formidable_1_0.orig/action/supprimer_formulaires_reponse.php
new file mode 100644
index 0000000000000000000000000000000000000000..98f106e4389f50dcac0729c19c920106e6c17842
--- /dev/null
+++ b/formidable_1_0.orig/action/supprimer_formulaires_reponse.php
@@ -0,0 +1,50 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Action de suppression d'une réponse
+ * @param int $arg
+ * @return unknown_type
+ */
+function action_supprimer_formulaires_reponse_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+
+	// si id_formulaires_reponse n'est pas un nombre, on ne fait rien
+	if ($id_formulaires_reponse = intval($arg)) {
+		// On récupère l'id_formulaire pour la redirection
+		$id_formulaire = intval(sql_getfetsel(
+			'id_formulaire',
+			'spip_formulaires_reponses',
+			'id_formulaires_reponse = '.$id_formulaires_reponse
+		));
+		
+		// On supprime la réponse
+		$ok = sql_delete(
+			'spip_formulaires_reponses',
+			'id_formulaires_reponse = '.$id_formulaires_reponse
+		);
+		
+		// Si c'est bon, on supprime les champs des réponses
+		if ($ok){
+			$ok = sql_delete(
+				'spip_formulaires_reponses_champs',
+				'id_formulaires_reponse = '.$id_formulaires_reponse
+			);
+		}
+	}
+	
+	if ($ok){
+		if (!$redirect = _request('redirect'))
+			$redirect = parametre_url(generer_url_ecrire('formulaires_reponses'), 'id_formulaire', $id_formulaire);
+		
+		include_spip('inc/headers');
+		redirige_par_entete(str_replace("&amp;","&",urldecode($redirect)));
+	}
+}
+
+?>
diff --git a/formidable_1_0.orig/base/formidable_tables.php b/formidable_1_0.orig/base/formidable_tables.php
new file mode 100644
index 0000000000000000000000000000000000000000..4d5f43324c5827c16269dcfd27c577f12d96d3fe
--- /dev/null
+++ b/formidable_1_0.orig/base/formidable_tables.php
@@ -0,0 +1,187 @@
+<?php
+
+/**
+ * Déclarations relatives à la base de données
+ * 
+ * @package SPIP\Formidable\Pipelines
+**/
+
+// Sécurité
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+/**
+ * Déclarer les interfaces des tables de formidable pour le compilateur
+ * 
+ * @pipeline declarer_tables_interfaces
+ * 
+ * @param array $interfaces
+ *     Déclarations d'interface pour le compilateur
+ * @return array
+ *     Déclarations d'interface pour le compilateur
+**/
+function formidable_declarer_tables_interfaces($interfaces) {
+	// 'spip_' dans l'index de $tables_principales
+	$interfaces['table_des_tables']['formulaires'] = 'formulaires';
+	$interfaces['table_des_tables']['formulaires_reponses'] = 'formulaires_reponses';
+	$interfaces['table_des_tables']['formulaires_reponses_champs'] = 'formulaires_reponses_champs';
+
+	$interfaces['tables_jointures']['spip_formulaires'][] = 'formulaires_liens';
+	$interfaces['tables_jointures']['spip_articles'][] = 'formulaires_liens';
+	$interfaces['tables_jointures']['spip_rubriques'][] = 'formulaires_liens';
+
+	return $interfaces;
+}
+
+/**
+ * Déclarer les objets éditoriaux des formulaires
+ *
+ * @pipeline declarer_tables_objets_sql
+ * @param array $tables
+ *     Description des tables
+ * @return array
+ *     Description complétée des tables
+ */
+function formidable_declarer_tables_objets_sql($tables) {
+	$tables['spip_formulaires'] = array(
+		'type'=>'formulaire',
+		'titre' => "titre, '' AS lang",
+		'date' => '',
+		'principale' => 'oui',
+		
+		'field' => array(
+			"id_formulaire" => "bigint(21) NOT NULL",
+			"identifiant" => "varchar(200)",
+			"titre" => "text NOT NULL default ''",
+			"descriptif" => "text",
+			"message_retour" => "text NOT NULL default ''",
+			"saisies" => "text NOT NULL default ''",
+			"traitements" => "text NOT NULL default ''",
+			"public" => "enum('non', 'oui') DEFAULT 'non' NOT NULL",
+			"statut" => "varchar(10) NOT NULL default ''",
+			"maj" => "timestamp",
+			"apres" => "varchar(12) NOT NULL default ''",
+			"url_redirect" => "varchar(255)"
+		),
+		'key' => array(
+			"PRIMARY KEY" => "id_formulaire"
+		),
+		'join'=> array(
+			'id_formulaire' => 'id_formulaire'
+		),
+		'rechercher_champs' => array(
+		  'titre' => 5, 'descriptif' => 3
+		),
+	);
+
+	$tables['spip_formulaires_reponses'] = array(
+		'type'=>'formulaires_reponse',
+		'titre' => "'' AS titre, '' AS lang",
+		'date' => 'date',
+		'principale' => 'oui',
+
+		'field' => array(
+			"id_formulaires_reponse" => "bigint(21) NOT NULL",
+			"id_formulaire" => "bigint(21) NOT NULL default 0",
+			"date" => "datetime NOT NULL default '0000-00-00 00:00:00'",
+			"ip" => "varchar(255) NOT NULL default ''",
+			"id_auteur" => "bigint(21) NOT NULL default 0",
+			"cookie" => "varchar(255) NOT NULL default ''",
+			"statut" => "varchar(10) NOT NULL default ''",
+			"maj" => "timestamp"
+		),
+		'key' => array(
+			"PRIMARY KEY" => "id_formulaires_reponse",
+			"KEY id_formulaire" => "id_formulaire",
+			"KEY id_auteur" => "id_auteur",
+			"KEY cookie" => "cookie"
+		),
+		'join' => array(
+			'id_formulaires_reponse' => 'id_formulaires_reponse',
+			'id_formulaire' => 'id_formulaire',
+			'id_auteur' => 'id_auteur'
+		),
+		'statut'=> array(
+			array(
+				'champ' => 'statut',
+				'publie' => 'publie',
+				'previsu' => 'publie,prop',
+				'exception' => array('statut', 'tout'),
+			)
+		),
+		'texte_changer_statut' => 'formulaires_reponse:changer_statut',
+		'statut_titres' => array(
+			'prop'=>'info_article_propose',
+			'publie'=>'info_article_publie',
+			'poubelle'=>'info_article_supprime'
+		),
+		'statut_textes_instituer' => array(
+			'prop' => 'texte_statut_propose_evaluation',
+			'publie' => 'texte_statut_publie',
+			'refuse' => 'texte_statut_poubelle',
+		),
+	);
+	return $tables;
+}
+
+/**
+ * Déclarer les tables principales de formidable
+ *
+ * @pipeline declarer_tables_principales
+ * @param array $tables_principales
+ *     Description des tables
+ * @return array
+ *     Description complétée des tables
+**/
+function formidable_declarer_tables_principales($tables_principales){
+
+	// Table formulaires_reponses_champs 
+	$formulaires_reponses_champs = array(
+		"id_formulaires_reponse" => "bigint(21) NOT NULL default 0",
+		"nom" => "varchar(255) NOT NULL default ''",
+		"valeur" => "text NOT NULL DEFAULT ''",
+		"maj" => "timestamp"
+	);
+	$formulaires_reponses_champs_cles = array(
+		"PRIMARY KEY" => "id_formulaires_reponse, nom",
+		"KEY id_formulaires_reponse" => "id_formulaires_reponse"
+	);
+	$tables_principales['spip_formulaires_reponses_champs'] = array(
+		'field' => &$formulaires_reponses_champs,
+		'key' => &$formulaires_reponses_champs_cles
+	);
+	
+	return $tables_principales;
+}
+
+/**
+ * Déclarer les tables auxiliaires de formidable
+ *
+ * @pipeline declarer_tables_auxiliaires
+ * @param array $tables_auxiliaires
+ *     Description des tables
+ * @return array
+ *     Description complétée des tables
+**/
+function formidable_declarer_tables_auxiliaires($tables_auxiliaires){
+	$formulaires_liens = array(
+		"id_formulaire"	=> "bigint(21) DEFAULT '0' NOT NULL",
+		"id_objet"	=> "bigint(21) DEFAULT '0' NOT NULL",
+		"objet"	=> "VARCHAR (25) DEFAULT '' NOT NULL"
+	);
+
+	$formulaires_liens_cles = array(
+		"PRIMARY KEY" => "id_formulaire,id_objet,objet",
+		"KEY id_formulaire" => "id_formulaire"
+	);
+	
+	$tables_auxiliaires['spip_formulaires_liens'] = array(
+		'field' => &$formulaires_liens,
+		'key' => &$formulaires_liens_cles
+	);
+	
+	return $tables_auxiliaires;
+}
+
+
+
+?>
diff --git a/formidable_1_0.orig/css/formidable_analyse.css.html b/formidable_1_0.orig/css/formidable_analyse.css.html
new file mode 100644
index 0000000000000000000000000000000000000000..3a82a97d873ae277dd8a539f94a53172a4ea21a8
--- /dev/null
+++ b/formidable_1_0.orig/css/formidable_analyse.css.html
@@ -0,0 +1,90 @@
+.formidable_analyse .stat {width:70%;}
+
+.progress-bar {
+	background-color: #f1f1f1;
+	height: 20px;
+	padding: 1px;
+	margin: 2px 0;
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	border-radius: 5px;
+	-moz-box-shadow: 0 1px 4px #eee inset, 0 1px 0 #bbb;
+	-webkit-box-shadow: 0 1px 4px #eee inset, 0 1px 0 #bbb;
+	box-shadow: 0 1px 4px #eee inset, 0 1px 0 #bbb;
+	position:relative; /* pour le strong du texte */
+}
+
+.progress-bar strong {
+	color:#000;
+	padding:0 .5em;
+	-webkit-moz-text-shadow: 0 1px 1px #fff;
+	-moz-text-shadow: 0 1px 1px #fff;
+	text-shadow: 0 1px 1px #fff;
+	position:absolute;
+	top:2px;
+	left:0;
+}
+.progress-bar strong small {font-size:90%; font-weight:normal;}
+
+.progress-bar span {
+	background-color: #bbb;
+	  background-image: -webkit-gradient(linear, left top, left bottom, from(#bbb), to(#777));
+	  background-image: -webkit-linear-gradient(top, #bbb, #777);
+	  background-image: -moz-linear-gradient(top, #bbb, #777);
+	  background-image: -ms-linear-gradient(top, #bbb, #777);
+	  background-image: -o-linear-gradient(top, #bbb, #777);
+	  background-image: linear-gradient(top, #bbb, #777); 
+	display: inline-block;
+	height: 100%;
+	-moz-border-radius: 3px;
+	-webkit-border-radius: 3px;
+	border-radius: 3px;
+	-moz-box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;
+	-webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;
+	box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;
+        -webkit-transition: width 2s ease-in-out;
+        -moz-transition: width 2s ease-in-out;
+        -ms-transition: width 2s ease-in-out;
+        -o-transition: width 2s ease-in-out;
+        transition: width 2s ease-in-out;    
+}
+
+.progress-bar.gray span {
+	background-color: #bbb;
+	  background-image: -webkit-gradient(linear, left top, left bottom, from(#bbb), to(#777));
+	  background-image: -webkit-linear-gradient(top, #bbb, #777);
+	  background-image: -moz-linear-gradient(top, #bbb, #777);
+	  background-image: -ms-linear-gradient(top, #bbb, #777);
+	  background-image: -o-linear-gradient(top, #bbb, #777);
+	  background-image: linear-gradient(top, #bbb, #777); 
+}
+
+.progress-bar.blue span {
+	background-color: #34c2e3;
+	  background-image: -webkit-gradient(linear, left top, left bottom, from(#34c2e3), to(#13ACD1));
+	  background-image: -webkit-linear-gradient(top, #34c2e3, #13ACD1);
+	  background-image: -moz-linear-gradient(top, #34c2e3, #13ACD1);
+	  background-image: -ms-linear-gradient(top, #34c2e3, #13ACD1);
+	  background-image: -o-linear-gradient(top, #34c2e3, #13ACD1);
+	  background-image: linear-gradient(top, #34c2e3, #13ACD1);  
+}
+
+.progress-bar.orange span {
+	  background-color: #fecf23;
+	  background-image: -webkit-gradient(linear, left top, left bottom, from(#fecf23), to(#fd9215));
+	  background-image: -webkit-linear-gradient(top, #fecf23, #fd9215);
+	  background-image: -moz-linear-gradient(top, #fecf23, #fd9215);
+	  background-image: -ms-linear-gradient(top, #fecf23, #fd9215);
+	  background-image: -o-linear-gradient(top, #fecf23, #fd9215);
+	  background-image: linear-gradient(top, #fecf23, #fd9215);  
+}	
+
+.progress-bar.green span {
+	  background-color: #a5df41;
+	  background-image: -webkit-gradient(linear, left top, left bottom, from(#a5df41), to(#4ca916));
+	  background-image: -webkit-linear-gradient(top, #a5df41, #4ca916);
+	  background-image: -moz-linear-gradient(top, #a5df41, #4ca916);
+	  background-image: -ms-linear-gradient(top, #a5df41, #4ca916);
+	  background-image: -o-linear-gradient(top, #a5df41, #4ca916);
+	  background-image: linear-gradient(top, #a5df41, #4ca916);  
+}
diff --git a/formidable_1_0.orig/echanger/formulaire/forms.php b/formidable_1_0.orig/echanger/formulaire/forms.php
new file mode 100644
index 0000000000000000000000000000000000000000..c74aaef0ca49af8be673a4d9766921fd4dfb04d2
--- /dev/null
+++ b/formidable_1_0.orig/echanger/formulaire/forms.php
@@ -0,0 +1,175 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+// Importation d'un formulaire forms&table
+
+function echanger_formulaire_forms_importer_dist($fichier){
+	include_spip('inc/xml');
+	$arbre = spip_xml_load($fichier, false);
+	
+	if ($arbre and is_array($arbre) and isset($arbre['forms'])){
+		foreach($arbre['forms'] as $forms){
+			foreach ($forms['form'] as $form){
+				$formulaire = array();
+				
+				// Le titre
+				$titre = trim(spip_xml_aplatit($form['titre']));
+				$formulaire['titre'] = $titre ? $titre : _T('info_sans_titre');
+				
+				// L'identifiant il faut le générer
+				$formulaire['identifiant'] = 'form_'.time();
+				
+				// Le descriptif
+				$descriptif = trim(spip_xml_aplatit($form['descriptif']));
+				$formulaire['descriptif'] = $descriptif ? $descriptif : '';
+				
+				// Le message de retour si ok
+				$message_retour = trim(spip_xml_aplatit($form['texte']));
+				$formulaire['message_retour'] = $message_retour ? $message_retour : '';
+
+				// Les champs
+				$formulaire['saisies'] = array();
+				foreach($form['fields'] as $fields){
+					foreach($fields['field'] as $field){
+						// Le truc par défaut
+						$saisie = array(
+							'saisie' => 'input',
+							'options' => array('size'=>40)
+						);
+						
+						// On essaye de traduire tous les types de champs
+						$type = trim(spip_xml_aplatit($field['type']));
+						switch ($type){
+							case 'texte':
+								$saisie['saisie'] = 'textarea';
+								unset($saisie['options']['size']);
+								$saisie['options']['rows'] = 5;
+								$saisie['options']['cols'] = 40;
+								break;
+							case 'password':
+								$saisie['options']['type'] = 'password';
+								break;
+							case 'date':
+								$saisie['saisie'] = 'date';
+								$saisie['verifier'] = array(
+									'type' => 'date'
+								);
+								break;
+							case 'num':
+							case 'monnaie':
+								$saisie['verifier'] = array(
+									'type' => 'entier'
+								);
+								if ($taille = trim(spip_xml_aplatit($field['taille'])))
+									$saisie['verifier']['options'] = array('max' => (pow(10, $taille)-1));
+								break;
+							case 'email':
+								$saisie['verifier'] = array(
+									'type' => 'email'
+								);
+								break;
+							case 'telephone':
+								$saisie['verifier'] = array(
+									'type' => 'telephone'
+								);
+								break;
+							case 'select':
+								unset($saisie['options']['size']);
+								$liste = trim(spip_xml_aplatit($field['extra_info']));
+								if ($liste == 'radio')
+									$saisie['saisie'] = 'radio';
+								else
+									$saisie['saisie'] = 'selection';
+								break;
+							case 'multiple':
+								$saisie['saisie'] = 'checkbox';
+								unset($saisie['options']['size']);
+								break;
+							case 'fichier':
+							case 'separateur':
+								$saisie = null;
+						}
+						
+						// On continue seulement si on a toujours une saisie
+						if ($saisie){
+							// Les choix pour les types select et multiple
+							if(isset($field['les_choix']) and is_array($field['les_choix'])){
+								$saisie['options']['datas'] = array();
+								foreach($field['les_choix'] as $les_choix){
+									foreach($les_choix['un_choix'] as $un_choix){
+										$choix = trim(spip_xml_aplatit($un_choix['choix']));
+										$titre = trim(spip_xml_aplatit($un_choix['titre']));
+										$saisie['options']['datas'][$choix] = $titre;
+									}
+								}
+							}
+						
+							// Le nom
+							$saisie['options']['nom'] = trim(spip_xml_aplatit($field['champ']));
+						
+							// Le label
+							$saisie['options']['label'] = trim(spip_xml_aplatit($field['titre']));
+						
+							// Obligatoire
+							if (trim(spip_xml_aplatit($field['obligatoire'])) == 'oui')
+								$saisie['options']['obligatoire'] = 'on';
+						
+							// Explication éventuelle
+							if ($explication = trim(spip_xml_aplatit($field['aide'])))
+								$saisie['options']['explication'] = $explication;
+						
+							// On ajoute enfin la saisie
+							$formulaire['saisies'][] = $saisie;
+						}
+					}
+				}
+				
+				// Les traitements
+				$formulaire['traitements'] = array();
+				
+				// Le traitement email
+				$config_email = unserialize(trim(spip_xml_aplatit($form['email'])));
+				if (is_array($config_email)){
+					if ($email_defaut = $config_email['defaut'])
+						$formulaire['traitements']['email'] = array(
+							'destinataires_plus' => $email_defaut
+						);
+				}
+				
+				// Le traitement enregistrement
+				$formulaire['traitements']['enregistrement'] = array(
+					'moderation' => (trim(spip_xml_aplatit($form['moderation'])) == 'priori') ? 'priori' : 'posteriori',
+					'modifiable' => (trim(spip_xml_aplatit($form['modifiable'])) == 'oui') ? 'on' : '',
+					'multiple' => (trim(spip_xml_aplatit($form['multiple'])) == 'non') ? '' : 'on'
+				);
+				
+				include_spip('action/editer_formulaire');
+				// On insère un nouveau formulaire
+				$id_formulaire = insert_formulaire();
+				// Si ça a marché on modifie les champs de base
+				if ($id_formulaire > 0 and !($erreur = formulaire_set($id_formulaire, $formulaire))){
+					// Et ensuite les saisies et les traitements
+					$ok = sql_updateq(
+						'spip_formulaires',
+						array(
+							'saisies' => serialize($formulaire['saisies']),
+							'traitements' => serialize($formulaire['traitements'])
+						),
+						'id_formulaire = '.$id_formulaire
+					);
+				}
+			}
+		}
+	}
+	
+	if ($id_formulaire and $ok){
+		return $id_formulaire;
+	}
+	else{
+		return _T('formidable:erreur_importer_forms');
+	}
+}
+
+?>
diff --git a/formidable_1_0.orig/echanger/formulaire/wcs.php b/formidable_1_0.orig/echanger/formulaire/wcs.php
new file mode 100644
index 0000000000000000000000000000000000000000..c12100a3c9b94fffd0d0ae1005fac1317e966ccf
--- /dev/null
+++ b/formidable_1_0.orig/echanger/formulaire/wcs.php
@@ -0,0 +1,175 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function echanger_formulaire_wcs_importer_dist($fichier){
+	include_spip('inc/xml');
+	include_spip('inc/filtres');
+	include_spip('inc/saisies');
+	$arbre = spip_xml_load($fichier, false);
+	
+	if ($arbre and is_array($arbre) and isset($arbre['formdef'])){
+		foreach($arbre['formdef'] as $form){
+			$formulaire = array();
+			
+			// Le titre
+			$titre = filtrer_entites(trim(spip_xml_aplatit($form['name'])));
+			$formulaire['titre'] = $titre ? $titre : _T('info_sans_titre');
+			
+			// On vérifie que l'identifiant n'existe pas déjà
+				$formulaire['identifiant'] = str_replace('-', '_', trim(spip_xml_aplatit($form['url_name'])));
+				$deja = sql_getfetsel(
+					'id_formulaire',
+					'spip_formulaires',
+					'identifiant = '.sql_quote($formulaire['identifiant'])
+				);
+				if ($deja)
+					$formulaire['identifiant'] = $formulaire['identifiant'].'_'.time();
+			
+			// Les champs
+			$formulaire['saisies'] = array();
+			// Par défaut le conteneur c'est le formulaire
+			$conteneur =& $formulaire;
+			foreach($form['fields'] as $fields){
+				foreach($fields['field'] as $field){
+					$changer_conteneur = false;
+					
+					// Le truc par défaut
+					$saisie = array(
+						'saisie' => 'input',
+						'options' => array('size'=>40)
+					);
+					
+					// Le label
+					$saisie['options']['label'] = filtrer_entites(trim(spip_xml_aplatit($field['label'])));
+					
+					// On essaye de traduire tous les types de champs
+					$type = trim(spip_xml_aplatit($field['type']));
+					switch ($type){
+						case 'string':
+							if ($size = intval(trim(spip_xml_aplatit($field['size'])))){
+								$saisie['options']['maxlength'] = $size;
+								$saisie['verifier'] = array(
+									'type' => 'taille',
+									'options' => array('max'=>$size)
+								);
+							}
+							break;
+						case 'text':
+							$saisie['saisie'] = 'textarea';
+							unset($saisie['options']['size']);
+							$saisie['options']['rows'] = 5;
+							$saisie['options']['cols'] = 40;
+							if ($rows = intval(trim(spip_xml_aplatit($field['rows'])))){
+								$saisie['options']['rows'] = $rows;
+							}
+							if ($cols = intval(trim(spip_xml_aplatit($field['cols'])))){
+								$saisie['options']['cols'] = $cols;
+							}
+							break;
+						case 'date':
+							$saisie['verifier'] = array(
+								'type' => 'date'
+							);
+							break;
+						case 'email':
+							$saisie['verifier'] = array(
+								'type' => 'email'
+							);
+							break;
+						case 'item':
+							unset($saisie['options']['size']);
+							$saisie['saisie'] = 'selection';
+							$saisie['options']['cacher_option_intro'] = 'on';
+							break;
+						case 'bool':
+							unset($saisie['options']['size']);
+							$saisie['saisie'] = 'case';
+							$saisie['options']['label_case'] = $saisie['options']['label'];
+							unset($saisie['options']['label']);
+							break;
+						case 'multiple':
+							$saisie['saisie'] = 'checkbox';
+							unset($saisie['options']['size']);
+							break;
+						case 'comment':
+							$saisie['saisie'] = 'explication';
+							$saisie['options']['texte'] = $saisie['options']['label'];
+							unset($saisie['options']['label']);
+							break;
+						case 'page':
+							$saisie['saisie'] = 'fieldset';
+							unset($saisie['options']['size']);
+							$saisie['saisies'] = array();
+							$changer_conteneur = true;
+							// On remet le conteneur au niveau du formulaire
+							$conteneur =& $formulaire;
+							break;
+						case 'subtitle':
+						case 'file':
+							$saisie = null;
+					}
+					
+					// On continue seulement si on a toujours une saisie
+					if ($saisie){
+						// Les choix pour les types select
+						if(isset($field['items']) and is_array($field['items'])){
+							$saisie['options']['datas'] = array();
+							foreach($field['items'] as $items){
+								foreach($items['item'] as $cle=>$item){
+									$titre = filtrer_entites(trim($item));
+									$saisie['options']['datas']['choix_'.$cle] = $titre;
+								}
+							}
+						}
+					
+						// Le nom
+						$saisie['options']['nom'] = saisies_generer_nom($formulaire['saisies'], $saisie['saisie']);
+					
+						// Obligatoire
+						if (trim(spip_xml_aplatit($field['required'])) == 'True')
+							$saisie['options']['obligatoire'] = 'on';
+					
+						// Explication éventuelle
+						if ($explication = trim(spip_xml_aplatit($field['hint'])))
+							$saisie['options']['explication'] = $explication;
+					
+						// On ajoute enfin la saisie
+						$conteneur['saisies'][] = $saisie;
+						
+						// Faut-il changer de conteneur ?
+						if ($changer_conteneur){
+							$conteneur =& $conteneur['saisies'][count($conteneur['saisies'])-1];
+						}
+					}
+				}
+			}
+			
+			include_spip('action/editer_formulaire');
+			// On insère un nouveau formulaire
+			$id_formulaire = insert_formulaire();
+			// Si ça a marché on modifie les champs de base
+			if ($id_formulaire > 0 and !($erreur = formulaire_set($id_formulaire, $formulaire))){
+				// Et ensuite les saisies et les traitements
+				$ok = sql_updateq(
+					'spip_formulaires',
+					array(
+						'saisies' => serialize($formulaire['saisies']),
+						'traitements' => serialize($formulaire['traitements'])
+					),
+					'id_formulaire = '.$id_formulaire
+				);
+			}
+		}
+	}
+	
+	if ($id_formulaire and $ok){
+		return $id_formulaire;
+	}
+	else{
+		return _T('formidable:erreur_importer_wcs');
+	}
+}
+
+?>
diff --git a/formidable_1_0.orig/echanger/formulaire/yaml.php b/formidable_1_0.orig/echanger/formulaire/yaml.php
new file mode 100644
index 0000000000000000000000000000000000000000..162331d9eb46c8c93c5aa9890852ec7abd5b719f
--- /dev/null
+++ b/formidable_1_0.orig/echanger/formulaire/yaml.php
@@ -0,0 +1,80 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function echanger_formulaire_yaml_exporter_dist($id_formulaire){
+	include_spip('base/abstract_sql');
+	include_spip('inc/yaml');
+	$id_formulaire = intval($id_formulaire);
+	$export = '';
+	
+	if ($id_formulaire > 0){
+		// On récupère le formulaire
+		$formulaire = sql_fetsel(
+			'*',
+			'spip_formulaires',
+			'id_formulaire = '.$id_formulaire
+		);
+		
+		// On décompresse les trucs sérialisés
+		$formulaire['saisies'] = unserialize($formulaire['saisies']);
+		$formulaire['traitements'] = unserialize($formulaire['traitements']);
+		
+		// On envode en yaml
+		$export = yaml_encode($formulaire);
+	}
+	
+	Header("Content-Type: text/x-yaml;");
+	Header('Content-Disposition: attachment; filename=formulaire-'.$formulaire['identifiant'].'.yaml');
+	Header("Content-Length: ".strlen($export));
+	echo $export;
+	exit();
+}
+
+function echanger_formulaire_yaml_importer_dist($fichier){
+	$yaml = '';
+	lire_fichier($fichier, $yaml);
+	// Si on a bien recupere une chaine on tente de la decoder
+	if ($yaml){
+		include_spip('inc/yaml');
+		$formulaire = yaml_decode($yaml);
+		// Si le decodage marche on importe alors le contenu
+		if (is_array($formulaire)){
+			include_spip('action/editer_formulaire');
+			// On enlève les champs inutiles
+			unset($formulaire['id_formulaire']);
+			// On vérifie que l'identifiant n'existe pas déjà
+			$deja = sql_getfetsel(
+				'id_formulaire',
+				'spip_formulaires',
+				'identifiant = '.sql_quote($formulaire['identifiant'])
+			);
+			if ($deja)
+				$formulaire['identifiant'] = $formulaire['identifiant'].'_'.time();
+			// On insère un nouveau formulaire
+			$id_formulaire = insert_formulaire();
+			// Si ça a marché on modifie les champs de base
+			if ($id_formulaire > 0 and !($erreur = formulaire_set($id_formulaire, $formulaire))){
+				// Et ensuite les saisies et les traitements
+				$ok = sql_updateq(
+					'spip_formulaires',
+					array(
+						'saisies' => serialize($formulaire['saisies']),
+						'traitements' => serialize($formulaire['traitements'])
+					),
+					'id_formulaire = '.$id_formulaire
+				);
+			}
+		}
+	}
+	
+	if ($id_formulaire and $ok){
+		return $id_formulaire;
+	}
+	else{
+		return _T('formidable:erreur_importer_yaml');
+	}
+}
+
+?>
diff --git a/formidable_1_0.orig/exec/puce_statut_formulaires.php b/formidable_1_0.orig/exec/puce_statut_formulaires.php
new file mode 100644
index 0000000000000000000000000000000000000000..6aadef396ee0ca45b16885d067394fe54d3806ce
--- /dev/null
+++ b/formidable_1_0.orig/exec/puce_statut_formulaires.php
@@ -0,0 +1,57 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Gestion des puces d'action rapide de formulaires
+ *
+ * @package SPIP\Formidable\Puce_statut
+**/
+
+include_spip('inc/presentation');
+
+/**
+ * Gestion de l'affichage ajax des puces d'action rapide de formulaires
+ *
+ * Récupère l'identifiant id et le type d'objet dans les données postées
+ * et appelle la fonction de traitement de cet exec.
+ * 
+ * @see exec_puce_statut_formulaires_args()
+ * @return string Code HTML
+**/
+function exec_puce_statut_formulaires_dist()
+{
+	exec_puce_statut_formulaires_args(_request('id'),  _request('type'));
+}
+
+/**
+ * Traitement de l'affichage ajax des puces d'action rapide
+ *
+ * Appelle la fonction de traitement des puces statuts
+ * après avoir retrouvé le statut en cours de l'objet
+ * et son parent s'il en a un
+ * 
+ * @param int $id
+ *     Identifiant de l'objet
+ * @param string $type
+ *     Type d'objet
+ * @return string Code HTML
+**/
+function exec_puce_statut_formulaires_args($id, $type)
+{
+	if (in_array($type,array('formulaires','formulaires_reponse'))) {
+		$table = table_objet_sql($type);
+		$prim = id_table_objet($type);
+		$id = intval($id);
+		$r = sql_fetsel("id_formulaire,statut", "$table", "$prim=$id");
+		$statut = $r['statut'];
+		$id_formulaire = $r['id_formulaire'];
+	} else {
+		$id_formulaire = intval($id);
+		$statut = 'prop'; // arbitraire
+	}
+	$puce_statut = charger_fonction('puce_statut', 'inc');
+	ajax_retour($puce_statut($id,$statut,$id_formulaire,$type, true));
+}
+
+?>
diff --git a/formidable_1_0.orig/formidable_administrations.php b/formidable_1_0.orig/formidable_administrations.php
new file mode 100644
index 0000000000000000000000000000000000000000..d273617d2e516a1e073963cf95c8f2fff7d8ddce
--- /dev/null
+++ b/formidable_1_0.orig/formidable_administrations.php
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * Fichier gérant l'installation et désinstallation du plugin
+ *
+ * @package SPIP\Formidable\Installation
+**/
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Installation/maj des tables de formidable...
+ *
+ * @param string $nom_meta_base_version
+ *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
+ * @param string $version_cible
+ *     Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
+ * @return void
+ */
+function formidable_upgrade($nom_meta_base_version, $version_cible){
+	// Création des tables
+	include_spip('base/create');
+	include_spip('base/abstract_sql');
+
+	$maj = array();
+	$maj['create'] = array(
+		array('maj_tables',array(
+			'spip_formulaires',
+			'spip_formulaires_reponses',
+			'spip_formulaires_reponses_champs',
+			'spip_formulaires_liens')),
+	);
+	// Ajout du choix de ce qu'on affiche à la fin des traitements
+	$maj['0.4.0'] = array(array('maj_tables',array('spip_formulaires')));
+	// Ajout d'une URL de redirection
+	$maj['0.5.0'] = array(array('maj_tables',array('spip_formulaires')));
+	// Modif du type du message de retour pour pouvoir mettre plus de chose
+	$maj['0.5.1'] = array(array('sql_alter','TABLE spip_formulaires CHANGE message_retour message_retour text NOT NULL default ""'));
+
+	include_spip('base/upgrade');
+	maj_plugin($nom_meta_base_version, $version_cible, $maj);
+}
+
+/**
+ * Désinstallation/suppression des tables de formidable
+ *
+ * @param string $nom_meta_base_version
+ *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
+ * @return void
+ */
+function formidable_vider_tables($nom_meta_base_version){
+
+	include_spip('inc/meta');
+	include_spip('base/abstract_sql');
+
+	// On efface les tables du plugin
+	sql_drop_table('spip_formulaires');
+	sql_drop_table('spip_formulaires_reponses');
+	sql_drop_table('spip_formulaires_reponses_champs');
+	sql_drop_table('spip_formulaires_liens');
+
+	// On efface la version entregistrée
+	effacer_meta($nom_meta_base_version);
+}
+
+?>
diff --git a/formidable_1_0.orig/formidable_autorisations.php b/formidable_1_0.orig/formidable_autorisations.php
new file mode 100644
index 0000000000000000000000000000000000000000..76d31b07da4e143aa4585c146d1f635ef645eb62
--- /dev/null
+++ b/formidable_1_0.orig/formidable_autorisations.php
@@ -0,0 +1,160 @@
+<?php
+
+/**
+ * Déclaration des autorisations
+ * 
+ * @package SPIP\Formidable\Autorisations
+**/
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Fonction d'appel pour le pipeline
+ * @pipeline autoriser
+ */
+function formidable_autoriser(){}
+
+/**
+ * Autorisation d'éditer un formulaire formidable
+ *
+ * Seuls les admins peuvent éditer les formulaires
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+**/
+function autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt){
+	if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and !$qui['restreint']) return true;
+	else return false;
+}
+
+/**
+ * Autorisation de voir la liste des formulaires formidable
+ *
+ *  Admins et rédacteurs peuvent voir les formulaires existants
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+**/
+function autoriser_formulaires_menu_dist($faire, $type, $id, $qui, $opt){
+	if (isset($qui['statut']) and $qui['statut'] <= '1comite') return true;
+	else return false;
+}
+
+
+
+/**
+ * Autorisation de répondre à un formidable formidable
+ *
+ * On peut répondre à un formulaire si :
+ * - c'est un formulaire classique
+ * - on enregistre et que multiple = oui
+ * - on enregistre et que multiple = non et que la personne n'a pas répondu encore
+ * - on enregistre et que multiple = non et que modifiable = oui
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+**/
+function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $opt){
+	// On regarde si il y a déjà le formulaire dans les options
+	if (isset($options['formulaire']))
+		$formulaire = $options['formulaire'];
+	// Sinon on va le chercher
+	else{
+		$formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id);
+	}
+	
+	$traitements = unserialize($formulaire['traitements']);
+	
+	// S'il n'y a pas d'enregistrement, c'est forcément bon
+	if (!($options = $traitements['enregistrement']))
+		return true;
+	// Sinon faut voir les options
+	else{
+		// Si multiple = oui c'est bon
+		if ($options['multiple'])
+			return true;
+		else{
+			// Si c'est modifiable, c'est bon
+			if ($options['modifiable'])
+				return true;
+			else{
+				include_spip('inc/formidable');
+				// Si la personne n'a jamais répondu, c'est bon
+				if (!formidable_verifier_reponse_formulaire($id, $options['identification']))
+					return true;
+				else
+					return false;
+			}
+		}
+	}
+}
+
+
+/**
+ * Autorisation d'instituer une réponse
+ *
+ * On peut modérer une réponse si on est admin
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+**/
+function autoriser_formulaires_reponse_instituer_dist($faire, $type, $id, $qui, $opt){
+	if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and !$qui['restreint']) return true;
+	else return false;
+}
+
+/**
+ * Autorisation de voir les réponses d'un formulaire formidable
+ *
+ * Au moins rédacteur pour voir les résultats
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+**/
+function autoriser_formulaires_reponse_voir_dist($faire, $type, $id, $qui, $opt){
+	if (isset($qui['statut']) and $qui['statut'] <= '1comite') return true;
+	else return false;
+}
+
+/**
+ * Autorisation de supprimer une réponse d'un formulaire formidable
+ *
+ * Il faut pouvoir éditer un formulaire pour pouvoir en supprimer des réponses
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+**/
+function autoriser_formulaires_reponse_supprimer_dist($faire, $type, $id, $qui, $opt){
+	// On récupère l'id du formulaire
+	if ($id_formulaire = intval(sql_getfetsel('id_formulaire', 'spip_formulaires_reponses', $id)))
+		return autoriser('editer', 'formulaire', $id_formulaire);
+	else
+		return false;
+}
+
+?>
diff --git a/formidable_1_0.orig/formidable_fonctions.php b/formidable_1_0.orig/formidable_fonctions.php
new file mode 100644
index 0000000000000000000000000000000000000000..c8029993a84c0064c5c76bdbabc094a4b3c81007
--- /dev/null
+++ b/formidable_1_0.orig/formidable_fonctions.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * Chargement des fonctions pour les squelettes 
+ *
+ * @package SPIP\Formidable\Fonctions
+**/
+
+include_spip('inc/formidable');
+include_spip('public/formidable_criteres');
diff --git a/formidable_1_0.orig/formidable_options.php b/formidable_1_0.orig/formidable_options.php
new file mode 100644
index 0000000000000000000000000000000000000000..312d95eedd3bed8b7be87a9aa3c71267994f52c8
--- /dev/null
+++ b/formidable_1_0.orig/formidable_options.php
@@ -0,0 +1,107 @@
+<?php
+
+/**
+ * Options globales chargées à chaque hit
+ *
+ * @package SPIP\Formidable\Options
+**/
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+// On déclare le formulaire pour éditer un formulaire
+$GLOBALS['formulaires']['editer_formulaire'] = array(
+	array(
+		'saisie' => 'input',
+		'options' => array(
+			'nom' => 'titre',
+			'label' => '<:formidable:editer_titre:>',
+			'obligatoire' => 'oui',
+			'class' => 'multilang'
+		)
+	),
+	array(
+		'saisie' => 'input',
+		'options' => array(
+			'nom' => 'identifiant',
+			'label' => '<:formidable:editer_identifiant:>',
+			'explication' => '<:formidable:editer_identifiant_explication:>',
+			'obligatoire' => 'oui'
+		),
+		'verifier' => array(
+			'type' => 'regex',
+			'options' => array(
+				'modele' => '/^[\w]+$/'
+			)
+		)
+	),
+	array(
+		'saisie' => 'textarea',
+		'options' => array(
+			'nom' => 'message_retour',
+			'label' => '<:formidable:editer_message_ok:>',
+			'explication' => '<:formidable:editer_message_ok_explication:>',
+			'rows' => 5,
+			'li_class' => 'editer_texte',
+			'class' => 'multilang'
+		)
+	),
+	array(
+		'saisie' => 'textarea',
+		'options' => array(
+			'nom' => 'descriptif',
+			'label' => '<:formidable:editer_descriptif:>',
+			'explication' => '<:formidable:editer_descriptif_explication:>',
+			'rows' => 5,
+			'class' => 'multilang'
+		)
+	),
+	array(
+		'saisie' => 'selection',
+		'options' => array(
+			'nom' => 'apres',
+			'label' => '<:formidable:editer_apres_label:>',
+			'explication' => '<:formidable:editer_apres_explication:>',
+			'datas' => array(
+				'formulaire' => _T('formidable:editer_apres_choix_formulaire'),
+				'valeurs' => _T('formidable:editer_apres_choix_valeurs'),
+				'stats' => _T('formidable:editer_apres_choix_stats'),
+				'rien' => _T('formidable:editer_apres_choix_rien'),
+				'redirige' => _T('formidable:editer_apres_choix_redirige'),
+			),
+			'defaut' => 'formulaire',
+			'cacher_option_intro' => 'on'
+		)
+	),
+	array(
+		'saisie' => 'input',
+		'options' => array(
+			'nom' => 'url_redirect',
+			'label' => '<:formidable:editer_redirige_url:>', 
+			'explication' => '<:formidable:editer_redirige_url_explication:>',
+			'obligatoire' => 'non'
+		)
+	)
+);
+
+
+if (!function_exists('array_fill_keys')) {
+	/**
+	 * Remplit un tableau avec des valeurs, en spécifiant les clés
+	 *
+	 * Fonction dans PHP 5.2+
+	 * @see http://php.net/manual/fr/function.array-fill-keys.php
+	 * 
+	 * @param array $keys
+	 *     Tableau de valeurs qui sera utilisé comme clés. 
+	 * @param mixed $value
+	 *     Valeur à utiliser pour remplir le tableau.
+	 * @return array
+	 *     Le tableau rempli. 
+	**/
+	function array_fill_keys($keys, $value){
+		array_combine($keys,array_fill(0,count($keys),$value));
+	}
+}
+
+?>
diff --git a/formidable_1_0.orig/formidable_pipelines.php b/formidable_1_0.orig/formidable_pipelines.php
new file mode 100644
index 0000000000000000000000000000000000000000..902224bb5d5b358f1ec7d067af5432f07ab916fc
--- /dev/null
+++ b/formidable_1_0.orig/formidable_pipelines.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * Utilisation de pipelines
+ * 
+ * @package SPIP\Formidable\Pipelines
+**/
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+
+/**
+ * Optimiser la base de donnée en enlevant les liens de formulaires supprimés
+ * 
+ * @pipeline optimiser_base_disparus
+ * @param array $flux
+ *     Données du pipeline
+ * @return array
+ *     Données du pipeline
+ */
+function formidable_optimiser_base_disparus($flux){
+	// Les réponses qui sont à la poubelle
+	$res = sql_select(
+		'id_formulaires_reponse AS id',
+		'spip_formulaires_reponses',
+		'statut = '.sql_quote('poubelle')
+	);
+	
+	// On génère la suppression
+	$flux['data'] += optimiser_sansref('spip_formulaires_reponses', 'id_formulaires_reponse', $res);
+	return $flux;
+}
+
+?>
diff --git a/formidable_1_0.orig/formulaires/configurer_formidable_analyse.html b/formidable_1_0.orig/formulaires/configurer_formidable_analyse.html
new file mode 100644
index 0000000000000000000000000000000000000000..a8caa8bf1b7a176e8d27cb964ece1e8047520008
--- /dev/null
+++ b/formidable_1_0.orig/formulaires/configurer_formidable_analyse.html
@@ -0,0 +1,20 @@
+<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
+
+	<h3 class="titrem"><:formidable:cfg_titre_parametrages_analyse:></h3>
+
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+
+	<form method="post" action="#ENV{action}">
+	<div>
+		#ACTION_FORMULAIRE{#ENV{action}}
+
+		[(#SAISIE{input,classe,
+			label=<:formidable:cfg_analyse_classe_label:>,
+			explication=<:formidable:cfg_analyse_classe_explication:>
+			})]
+		<input type="hidden" name="_meta_casier" value="formidable/analyse" />
+		<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
+	</div>
+	</form>
+</div>
diff --git a/formidable_1_0.orig/formulaires/editer_formulaire.html b/formidable_1_0.orig/formulaires/editer_formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..cd8445eb682b4c6ea97d92fc3478b982d7bdca2b
--- /dev/null
+++ b/formidable_1_0.orig/formulaires/editer_formulaire.html
@@ -0,0 +1,23 @@
+<div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id_formulaire,nouveau})]">
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+	[(#ENV{editable}|oui)
+	<form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+		
+		<ul>
+			#GENERER_SAISIES{#ENV{_contenu}}
+		</ul>
+		
+		[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
+		<!--extra-->
+		
+		<p class='boutons'>
+			<span class='image_loading'></span>
+			<input type='submit' class='submit' value='<:bouton_enregistrer:>' />
+		</p>
+	</div></form>
+	]
+</div>
diff --git a/formidable_1_0.orig/formulaires/editer_formulaire.php b/formidable_1_0.orig/formulaires/editer_formulaire.php
new file mode 100644
index 0000000000000000000000000000000000000000..afa986be4aec418e07e0377de6f5ba2392b5f75b
--- /dev/null
+++ b/formidable_1_0.orig/formulaires/editer_formulaire.php
@@ -0,0 +1,75 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/saisies');
+
+function formulaires_editer_formulaire_charger($id_formulaire, $nouveau){
+	$contexte = array();
+	$editer_formulaire = $GLOBALS['formulaires']['editer_formulaire'];
+	$champs = saisies_lister_champs($editer_formulaire);
+	$id_formulaire = intval($id_formulaire);
+	
+	$contexte['_contenu'] = $editer_formulaire;
+	
+	// Est-ce qu'on a le droit ?
+	if (autoriser('editer', 'formulaire')){
+		// Est-ce que le formulaire existe ?
+		if ($id_formulaire > 0 and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)){
+			// Alors on pré-remplit avec les valeurs
+			foreach($champs as $champ)
+				$contexte[$champ] = $formulaire[$champ];
+			$contexte['_action'] = array('editer_formulaire', $id_formulaire);
+		}
+		// Sinon si c'est une création
+		elseif ($nouveau == 'oui'){
+			// On déclare juste les champs
+			foreach ($champs as $champ)
+				$contexte[$champ] = '';
+			$contexte['_action'] = array('editer_formulaire', $nouveau);
+		}
+		// Sinon c'est n'importe quoi
+		else{
+			$contexte['editable'] = false;
+			$contexte['message_erreur'] = 'Erreur dans les parametres.';
+		}
+	}
+	else{
+		$contexte['editable'] = false;
+		$contexte['message_erreur'] = _T('formidable:erreur_autorisation');
+	}
+	
+	return $contexte;
+}
+
+function formulaires_editer_formulaire_verifier($id_formulaire, $nouveau){
+	$configurer_formulaire = $GLOBALS['formulaires']['editer_formulaire'];
+	$erreurs = saisies_verifier($configurer_formulaire);
+	// On vérifie l'unicité de l'identifiant
+	if (!$erreurs['identifiant'] and sql_getfetsel('id_formulaire', 'spip_formulaires', 'identifiant = '.sql_quote(_request('identifiant').' and id_formulaire != '.$id_formulaire)))
+		$erreurs['identifiant'] = _T('formidable:erreur_identifiant');
+	return $erreurs;
+}
+
+function formulaires_editer_formulaire_traiter($id_formulaire, $nouveau){
+	include_spip('inc/editer');
+	$id_formulaire = $id_formulaire ? $id_formulaire : $nouveau;
+	$retours = formulaires_editer_objet_traiter('formulaire', $id_formulaire);
+	
+	// S'il n'y a pas d'erreur et que le formulaire est bien là
+	if (!$retours['message_erreur'] and $retours['id_formulaire'] > 0){
+		// Si c'était un nouveau on reste sur l'édition
+		if (!intval($id_formulaire) and $nouveau == 'oui'){
+			$retours['redirect'] = parametre_url(generer_url_ecrire('formulaire_edit'), 'id_formulaire', $retours['id_formulaire'], '&');
+		}
+		// Sinon on redirige vers la page de visualisation
+		else{
+			$retours['redirect'] = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $retours['id_formulaire'], '&');
+		}
+	}
+	
+	return $retours;
+}
+
+?>
diff --git a/formidable_1_0.orig/formulaires/editer_formulaire_champs.html b/formidable_1_0.orig/formulaires/editer_formulaire_champs.html
new file mode 100644
index 0000000000000000000000000000000000000000..8e88ff4319c1c998f77a55ea8a5576476f7ad33c
--- /dev/null
+++ b/formidable_1_0.orig/formulaires/editer_formulaire_champs.html
@@ -0,0 +1,39 @@
+
+<div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+	
+	[(#ENV*{message_erreur}|non)
+	<div class="ajax">
+		#FORMULAIRE_CONSTRUIRE_FORMULAIRE{formidable_#ENV{id}, #ENV{_saisies}}
+	</div>
+	]
+
+	[(#ENV{editable}|oui)
+	<form method="post" action="#ENV{action}" enctype="multipart/form-data"><div>
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+		
+		<p class="boutons">
+			<span class="image_loading"></span>
+			[(#ENV*{message_erreur}|non)
+			<em class="attention"><:saisies:construire_attention_enregistrer:></em>
+			<button type="submit" class="submit">
+				<img src="#CHEMIN{images/formulaire-enregistrer-16.png}" alt="" />
+				<:bouton_enregistrer:>
+			</button>
+			]
+			[(#ENV*{message_erreur}|oui)
+			<button type="submit" class="link" name="annulation" value="oui">
+				<:bouton_annuler:>
+			</button>
+			<button type="submit" class="submit" name="confirmation" value="oui">
+				<img src="#CHEMIN{images/formulaire-enregistrer-16.png}" alt="" />
+				<:bouton_enregistrer:>
+			</button>
+			]
+		</p>
+	</div></form>
+	]
+</div>
diff --git a/formidable_1_0.orig/formulaires/editer_formulaire_champs.php b/formidable_1_0.orig/formulaires/editer_formulaire_champs.php
new file mode 100644
index 0000000000000000000000000000000000000000..e999c7b86357dc6550f3ed24ff83b3f09b5ab918
--- /dev/null
+++ b/formidable_1_0.orig/formulaires/editer_formulaire_champs.php
@@ -0,0 +1,113 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+
+function formulaires_editer_formulaire_champs_charger($id_formulaire){
+	$contexte = array();
+	$id_formulaire = intval($id_formulaire);
+	
+	// On teste si le formulaire existe
+	if ($id_formulaire
+		and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
+		and autoriser('editer', 'formulaire', $id_formulaire)
+	){
+		$saisies = unserialize($formulaire['saisies']);
+		if (!is_array($saisies)) $saisies = array();
+		$contexte['_saisies'] = $saisies;
+		$contexte['id'] = $id_formulaire;
+	}
+	
+	return $contexte;
+}
+
+function formulaires_editer_formulaire_champs_verifier($id_formulaire){
+	include_spip('inc/saisies');
+	$erreurs = array();
+	
+	// Si c'est pas une confirmation ni une annulation
+	if (!_request('confirmation') and !($annulation = _request('annulation'))){
+		// On récupère le formulaire dans la session
+		$saisies_nouvelles = session_get("constructeur_formulaire_formidable_$id_formulaire");
+	
+		// On récupère les anciennes saisies
+		$saisies_anciennes = unserialize(sql_getfetsel(
+			'saisies',
+			'spip_formulaires',
+			'id_formulaire = '.$id_formulaire
+		));
+	
+		// On compare
+		$comparaison = saisies_comparer($saisies_anciennes, $saisies_nouvelles);
+	
+		// S'il y a des suppressions, on demande confirmation avec attention
+		if ($comparaison['supprimees'])
+			$erreurs['message_erreur'] = _T('saisies:construire_attention_supprime');
+	}
+	// Si on annule on génère une erreur bidon juste pour réafficher le formulaire
+	elseif ($annulation){
+		$erreurs['pouetpouet'] = true;
+	}
+	
+	return $erreurs;
+}
+
+function formulaires_editer_formulaire_champs_traiter($id_formulaire){
+	include_spip('inc/saisies');
+	$retours = array();
+	$id_formulaire = intval($id_formulaire);
+	
+	// On récupère le formulaire dans la session
+	$saisies_nouvelles = session_get("constructeur_formulaire_formidable_$id_formulaire");
+	
+	// On récupère les anciennes saisies
+	$saisies_anciennes = unserialize(sql_getfetsel(
+		'saisies',
+		'spip_formulaires',
+		'id_formulaire = '.$id_formulaire
+	));
+	
+	// On envoie les nouvelles dans la table dans la table
+	$ok = sql_updateq(
+		'spip_formulaires',
+		array(
+			'saisies' => serialize($saisies_nouvelles)
+		),
+		'id_formulaire = '.$id_formulaire
+	);
+	
+	// Si c'est bon on appelle d'éventuelles fonctions d'update des traitements puis on renvoie vers la config des traitements
+	if ($ok){
+		// On va chercher les traitements
+		$traitements = unserialize(sql_getfetsel(
+			'traitements',
+			'spip_formulaires',
+			'id_formulaire = '.$id_formulaire
+		));
+		
+		// Pour chaque traitements on regarde s'i y a une fonction d'update
+		if (is_array($traitements))
+			foreach ($traitements as $type_traitement => $traitement){
+				if ($update = charger_fonction('update', "traiter/$type_traitement", true)){
+					$update($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles);
+				}
+			}
+		
+		// On redirige vers la config suivante
+		$retours['redirect'] = parametre_url(
+			parametre_url(
+				parametre_url(
+					generer_url_ecrire('formulaire_edit')
+					, 'id_formulaire', $id_formulaire
+				)
+				, 'configurer', 'traitements'
+			)
+			, 'avertissement', 'oui'
+		);
+	}
+	
+	return $retours;
+}
+
+?>
diff --git a/formidable_1_0.orig/formulaires/editer_formulaire_traitements.html b/formidable_1_0.orig/formulaires/editer_formulaire_traitements.html
new file mode 100644
index 0000000000000000000000000000000000000000..31dbc36c8f0d8e4f021ae23d763f2477d9fb82a7
--- /dev/null
+++ b/formidable_1_0.orig/formulaires/editer_formulaire_traitements.html
@@ -0,0 +1,41 @@
+<div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+	
+	[(#ENV{editable}|oui)
+	<form method="post" action="#ENV{action}" enctype="multipart/form-data"><div>
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+		
+		<ul>
+			#GENERER_SAISIES{#ENV{_configurer_traitements}}
+		</ul>
+		
+		[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
+		<!--extra-->
+		
+		<p class="boutons"><span class="image_loading"></span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
+	</div></form>
+	<script type="text/javascript">
+		$(function(){
+			// On commence par cacher toutes les options
+			$('.options_traiter').hide().find('h3').hide();
+			
+			// Ensuite on parcourt les traitements choisis
+			$('.editer_traitements_choisis input')
+				.each(function(){
+					// Si c'est coché on affiche le fieldset d'options
+					if ($(this).is(':checked')){
+						$('.options_traiter.'+$(this).val()).show();
+						$(this).parents('.editer_traitements_choisis').toggleClass('hover');
+					}
+				})
+				.click(function(){
+					$('.options_traiter.'+$(this).val()).slideToggle('fast');
+					$(this).parents('.editer_traitements_choisis').toggleClass('hover');
+				});
+		});
+	</script>
+	]
+</div>
diff --git a/formidable_1_0.orig/formulaires/editer_formulaire_traitements.php b/formidable_1_0.orig/formulaires/editer_formulaire_traitements.php
new file mode 100644
index 0000000000000000000000000000000000000000..2303ec6e4ab2e4297f8a64a050cafa8c8af9b67f
--- /dev/null
+++ b/formidable_1_0.orig/formulaires/editer_formulaire_traitements.php
@@ -0,0 +1,114 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/formidable');
+
+function formulaires_editer_formulaire_traitements_charger($id_formulaire){
+	$contexte = array();
+	$id_formulaire = intval($id_formulaire);
+	
+	// On teste si le formulaire existe
+	if ($id_formulaire
+		and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
+		and autoriser('editer', 'formulaire', $id_formulaire)
+	){
+		$traitements = unserialize($formulaire['traitements']);
+		$saisies = unserialize($formulaire['saisies']);
+		if (!is_array($traitements)) $traitements = array();
+		if (!is_array($saisies)) $saisies = array();
+		$contexte['traitements'] = $traitements;
+		$contexte['traitements_choisis'] = array_keys($traitements);
+		$contexte['formulaire'] = _T_ou_typo($saisies, 'multi');
+		$contexte['id'] = $id_formulaire;
+		
+		$traitements_disponibles = traitements_lister_disponibles();
+		$configurer_traitements = array();
+		foreach ($traitements_disponibles as $type_traitement => $traitement){
+			$configurer_traitements[] = array(
+				'saisie' => 'checkbox',
+				'options' => array(
+					'nom' => 'traitements_choisis',
+					'label' => $traitement['titre'],
+					'datas' => array(
+						$type_traitement => $traitement['description']
+					)
+				)
+			);
+			$configurer_traitements[] = array(
+				'saisie' => 'fieldset',
+				'options' => array(
+					'nom' => 'options',
+					'label' => $traitement['titre'],
+					'li_class' => "$type_traitement options_traiter"
+				),
+				'saisies' => saisies_transformer_noms($traitement['options'], '/^.*$/', "traitements[$type_traitement][\\0]")
+			);
+		}
+		$contexte['_configurer_traitements'] = $configurer_traitements;
+		
+		// Si on demande un avertissement et qu'il y a déjà des traitements de configurés
+		if (_request('avertissement') == 'oui')
+			$contexte['message_ok'] = $traitements ? _T('formidable:traitements_avertissement_modification') : _T('formidable:traitements_avertissement_creation');
+	}
+	else{
+		$contexte['editable'] = false;
+	}
+	
+	// On enlève l'éventuel avertissement pour le prochain envoi
+	$contexte['action'] = parametre_url(self(), 'avertissement', '');
+	
+	return $contexte;
+}
+
+function formulaires_editer_formulaire_traitements_verifier($id_formulaire){
+	include_spip('inc/saisies');
+	$erreurs = array();
+	$traitements_disponibles = traitements_lister_disponibles();
+	
+	// On regarde quels traitements sont demandés
+	$traitements_choisis = _request('traitements_choisis');
+	
+	if (is_array($traitements_choisis))
+		foreach ($traitements_choisis as $type_traitement){
+			$erreurs = array_merge($erreurs, saisies_verifier(saisies_transformer_noms($traitements_disponibles[$type_traitement]['options'], '/^.*$/', "traitements[$type_traitement][\\0]")));
+		}
+	
+	return $erreurs;
+}
+
+function formulaires_editer_formulaire_traitements_traiter($id_formulaire){
+	$retours = array();
+	$id_formulaire = intval($id_formulaire);
+	
+	// On récupère tout le tableau des traitements
+	$traitements = _request('traitements');
+	// On ne garde que les morceaux qui correspondent aux traitements choisis
+	$traitements_choisis = _request('traitements_choisis');
+	if (!$traitements_choisis) $traitements_choisis = array();
+	$traitements_choisis = array_flip($traitements_choisis);
+	$traitements = array_intersect_key($traitements, $traitements_choisis);
+	
+	// Et on l'enregistre tel quel
+	$ok = sql_updateq(
+		'spip_formulaires',
+		array(
+			'traitements' => serialize($traitements)
+		),
+		'id_formulaire = '.$id_formulaire
+	);
+	
+	// On va sur la page de visualisation quand c'est fini
+	if ($ok){
+		$retours['redirect'] = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $id_formulaire);
+	}
+	else{
+		$retours['editable'] = true;
+		$retours['message_erreur'] = _T('formidable:erreur_base');
+	}
+	
+	return $retours;
+}
+
+?>
diff --git a/formidable_1_0.orig/formulaires/formidable.html b/formidable_1_0.orig/formulaires/formidable.html
new file mode 100644
index 0000000000000000000000000000000000000000..80b0648ed4b52228b4623ce3324ceae143f71b85
--- /dev/null
+++ b/formidable_1_0.orig/formulaires/formidable.html
@@ -0,0 +1,41 @@
+<BOUCLE_remplacer_le_formulaire(CONDITION){si #ENV{_remplacer_formulaire}}>
+	[(#REM) Afficher du HTML si prévu par un plugin ou pour les stats ]
+	[(#ENV**{_remplacer_formulaire})]
+</BOUCLE_remplacer_le_formulaire>
+<div class="formulaire_spip formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+
+	[(#ENV{editable}|oui)
+	<form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+		
+		<ul>
+			#GENERER_SAISIES{#ENV{_saisies}}
+			<li style="display:none;">
+				<label for="mechantrobot-#ENV{id}"><:antispam_champ_vide:></label>
+				<input type="text" id="mechantrobot-#ENV{id}" name="mechantrobot" value="#ENV{mechantrobot}" />
+			</li>
+		</ul>
+		
+		[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
+		<!--extra-->
+		
+		<p class='boutons'>
+			<span class='image_loading'></span>
+			<input type='submit' class='submit' value='<:bouton_valider:>' />
+		</p>
+	</div></form>
+	]
+	[(#EDITABLE|non)
+		[(#ENV{formidable_afficher_apres}|=={valeurs}|oui) 
+			#VOIR_SAISIES{#ENV*{_saisies},#ENV}
+		]
+		[(#ENV{formidable_afficher_apres}|=={rien}|oui) 
+		]
+	]
+	<br />
+</div>
+<//B_remplacer_le_formulaire>
diff --git a/formidable_1_0.orig/formulaires/formidable.php b/formidable_1_0.orig/formulaires/formidable.php
new file mode 100644
index 0000000000000000000000000000000000000000..723846f24d6e51e569bcf35bdf386f87c478b37d
--- /dev/null
+++ b/formidable_1_0.orig/formulaires/formidable.php
@@ -0,0 +1,287 @@
+<?php
+
+/**
+ * Gestion de l'affichage et traitement d'un formulaire Formidable
+ *
+ * @package SPIP\Formidable\Formulaires
+**/
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/formidable');
+include_spip('inc/saisies');
+include_spip('base/abstract_sql');
+include_spip('inc/autoriser');
+
+/**
+ * Chargement du formulaire CVT de Formidable.
+ * 
+ * Genere le formulaire dont l'identifiant (numerique ou texte est indique)
+ *
+ * @param int|string $id_formulaire
+ *     Identifiant numerique ou textuel du formulaire formidable
+ * @param array $valeurs
+ *     Valeurs par défauts passées au contexte du formulaire
+ *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
+ * @param int|bool $id_formulaires_reponse
+ *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
+ * 
+ * @return array
+ *     Contexte envoyé au squelette HTML du formulaire.
+**/
+function formulaires_formidable_charger($id_formulaire, $valeurs=array(), $id_formulaires_reponse=false){
+	$contexte = array();
+
+	// On peut donner soit un id soit un identifiant
+	if (intval($id_formulaire) > 0)
+		$where = 'id_formulaire = '.intval($id_formulaire);
+	elseif (is_string($id_formulaire))
+		$where = 'identifiant = '.sql_quote($id_formulaire);
+	else
+		return;
+	
+	// On cherche si le formulaire existe
+	if ($formulaire = sql_fetsel('*', 'spip_formulaires', $where)) {
+		// on ajoute un point d'entrée avec les infos de ce formulaire
+		// pour d'eventuels plugins qui en ont l'utilité
+		$contexte += array('_formidable' => $formulaire);
+		// Est-ce que la personne a le droit de répondre ?
+		if (autoriser('repondre', 'formulaire', $formulaire['id_formulaire'], null, array('formulaire'=>$formulaire))){
+			$saisies = unserialize($formulaire['saisies']);
+			$traitements = unserialize($formulaire['traitements']);
+			// On déclare les champs
+			$contexte += array_fill_keys(saisies_lister_champs($saisies), '');
+			$contexte['mechantrobot'] = '';
+			// On ajoute le formulaire complet
+			$contexte['_saisies'] = $saisies;
+		
+			$contexte['id'] = $formulaire['id_formulaire'];
+			$contexte['_hidden'] = '<input type="hidden" name="id_formulaire" value="'.$contexte['id'].'"/>';
+			
+			// S'il y a des valeurs par défaut dans l'appel, alors on pré-remplit
+			if ($valeurs){
+				// Si c'est une chaine on essaye de la parser
+				if (is_string($valeurs)){
+					$liste = explode(',', $valeurs);
+					$liste = array_map('trim', $liste);
+					$valeurs = array();
+					foreach ($liste as $i=>$cle_ou_valeur){
+						if ($i % 2 == 0)
+							$valeurs[$liste[$i]] = $liste[$i+1];
+					}
+				}
+				
+				// On regarde si maintenant on a un tableau
+				if ($valeurs and is_array($valeurs)){
+					$contexte = array_merge($contexte, $valeurs);
+				}
+			}
+
+			// Si on passe un identifiant de reponse, on edite cette reponse si elle existe
+			if ($id_formulaires_reponse = intval($id_formulaires_reponse)) {
+				$contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
+				if ($ok) {
+					// On ajoute un hidden pour dire que c'est une modif
+					$contexte['_hidden'] .= "\n".'<input type="hidden" name="deja_enregistre_'.$formulaire['id_formulaire'].'" value="'.$id_formulaires_reponse.'"/>';
+				} else {
+					$contexte['editable'] = false;
+					$contexte['message_erreur'] = _T('formidable:traiter_enregistrement_erreur_edition_reponse_inexistante');
+				}
+			} else {
+				
+				// Si multiple = non mais que c'est modifiable, alors on va chercher
+				// la dernière réponse si elle existe
+				if ($options = $traitements['enregistrement']
+					and !$options['multiple']
+					and $options['modifiable']
+					and $reponses = formidable_verifier_reponse_formulaire($formulaire['id_formulaire'], $options['identification'])
+				){
+					$id_formulaires_reponse = array_pop($reponses);
+					$contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
+
+					// On ajoute un hidden pour dire que c'est une modif
+					$contexte['_hidden'] .= "\n".'<input type="hidden" name="deja_enregistre_'.$formulaire['id_formulaire'].'" value="'.$id_formulaires_reponse.'"/>';
+				}
+				
+			}
+		}
+		else{
+			$contexte['editable'] = false;
+			// le formulaire a déjà été répondu.
+			// peut être faut il afficher les statistiques des réponses
+			if ($formulaire['apres'] == 'stats') {
+				// Nous sommes face à un sondage auquel on a déjà répondu !
+				// On remplace complètement l'affichage du formulaire
+				// par un affichage du résultat de sondage !
+				$contexte['_remplacer_formulaire'] = recuperer_fond('modeles/formulaire_analyse', array(
+					'id_formulaire' => $formulaire['id_formulaire'],
+				));
+			} else {
+				$contexte['message_erreur'] = _T('formidable:traiter_enregistrement_erreur_deja_repondu');
+			}
+		}
+	}
+	else{
+		$contexte['editable'] = false;
+		$contexte['message_erreur'] = _T('formidable:erreur_inexistant');
+	}
+	if (!isset($contexte['_hidden'])) {
+		$contexte['_hidden'] = '';
+	}
+	$contexte['_hidden'] .= "\n".'<input type="hidden" name="formidable_afficher_apres'/*.$formulaire['id_formulaire']*/.'" value="'.$formulaire['apres'].'"/>';// marche pas
+	
+	$contexte['formidable_afficher_apres']=$formulaire['apres'];
+	
+	return $contexte;
+}
+
+
+/**
+ * Vérification du formulaire CVT de Formidable.
+ * 
+ * Pour chaque champ posté, effectue les vérifications demandées par
+ * les saisies et retourne éventuellement les erreurs de saisie.
+ *
+ * @param int|string $id_formulaire
+ *     Identifiant numerique ou textuel du formulaire formidable
+ * @param array $valeurs
+ *     Valeurs par défauts passées au contexte du formulaire
+ *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
+ * @param int|bool $id_formulaires_reponse
+ *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
+ * 
+ * @return array
+ *     Tableau des erreurs
+**/
+function formulaires_formidable_verifier($id_formulaire, $valeurs=array(), $id_formulaires_reponse=false){
+	$erreurs = array();
+	
+	// Sale bête !
+	if (_request('mechantrobot') != ''){
+		$erreurs['hahahaha'] = 'hahahaha';
+		return $erreurs;
+	}
+	
+	$id_formulaire = intval(_request('id_formulaire'));
+	$formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire);
+	$saisies = unserialize($formulaire['saisies']);
+	
+	$erreurs = saisies_verifier($saisies);
+	
+	if ($erreurs and !isset($erreurs['message_erreur']))
+		$erreurs['message_erreur'] = _T('formidable:erreur_generique');
+
+	return $erreurs;
+}
+
+
+/**
+ * Traitement du formulaire CVT de Formidable.
+ * 
+ * Exécute les traitements qui sont indiqués dans la configuration des
+ * traitements de ce formulaire formidable.
+ *
+ * Une fois fait, gère le retour après traitements des saisies en fonction
+ * de ce qui a été configuré dans le formulaire, par exemple :
+ * - faire réafficher le formulaire,
+ * - faire afficher les saisies
+ * - rediriger sur une autre page...
+ *
+ * @param int|string $id_formulaire
+ *     Identifiant numerique ou textuel du formulaire formidable
+ * @param array $valeurs
+ *     Valeurs par défauts passées au contexte du formulaire
+ *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
+ * @param int|bool $id_formulaires_reponse
+ *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
+ * 
+ * @return array
+ *     Tableau des erreurs
+**/
+function formulaires_formidable_traiter($id_formulaire, $valeurs=array(), $id_formulaires_reponse=false){
+	$retours = array();
+	
+	$id_formulaire = intval(_request('id_formulaire'));
+	$formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire);
+	$traitements = unserialize($formulaire['traitements']);
+
+	// selon le choix, le formulaire se remet en route à la fin ou non
+	$retours['editable'] = ($formulaire['apres']=='formulaire');
+	$retours['formidable_afficher_apres'] = $formulaire['apres'];
+
+	// Si on a une redirection valide
+	if (($formulaire['apres']== "redirige") AND ($formulaire['url_redirect']!="")) {
+		refuser_traiter_formulaire_ajax();
+		// traiter les raccourcis artX, brX
+		include_spip("inc/lien");
+		$url_redirect = typer_raccourci($formulaire['url_redirect']);
+		if (count($url_redirect)>2) {
+			$url_redirect = $url_redirect[0].$url_redirect[2];
+		} else {
+			$url_redirect = $formulaire['url_redirect'];      // URL classique
+		}
+
+		$retours['redirect'] = $url_redirect; 
+	}
+
+	// Si on a des traitements 
+	if (is_array($traitements) and !empty($traitements)) {
+		foreach($traitements as $type_traitement=>$options){
+			if ($appliquer_traitement = charger_fonction($type_traitement, 'traiter/', true)) {
+				$retours = $appliquer_traitement(
+					array(
+						'formulaire' => $formulaire,
+						'options' => $options
+					),
+					$retours
+				);
+			}
+		}
+
+		// Si on a personnalisé le message de retour, c'est lui qui est affiché uniquement
+		if ($formulaire['message_retour']) {
+			$retours['message_ok'] = _T_ou_typo($formulaire['message_retour']);
+		}
+	}
+	else{
+		$retours['message_ok'] = _T('formidable:retour_aucun_traitement');
+	}
+
+	return $retours;
+}
+
+
+/**
+ * Ajoute dans le contexte les elements
+ * donnés par une reponse de formulaire indiquée 
+ *
+ * @param array $contexte
+ *     Contexte pour le squelette HTML du formulaire
+ * @param int $id_formulaires_reponse
+ *     Identifiant de réponse
+ * @param bool $ok
+ *     La reponse existe bien ?
+ * @return array $contexte
+ *     Contexte complète des nouvelles informations
+ * 
+**/
+function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, &$ok) {
+	// On va chercher tous les champs
+	$champs = sql_allfetsel(
+		'nom, valeur',
+		'spip_formulaires_reponses_champs',
+		'id_formulaires_reponse = '.$id_formulaires_reponse
+	);
+	$ok = count($champs) ? true : false;
+	
+	// On remplit le contexte avec
+	foreach ($champs as $champ){
+		$test_array = unserialize($champ['valeur']);
+		$contexte[$champ['nom']] = is_array($test_array) ? $test_array : $champ['valeur'];
+	}
+
+	return $contexte;
+}
+
+?>
diff --git a/formidable_1_0.orig/formulaires/importer_formulaire.html b/formidable_1_0.orig/formulaires/importer_formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..0d71a5fdce94d24a76a2af999685db403bb81f9b
--- /dev/null
+++ b/formidable_1_0.orig/formulaires/importer_formulaire.html
@@ -0,0 +1,30 @@
+<div class="formulaire_spip formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id})]">
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+	
+	[(#ENV{editable}|oui)
+	<form method="post" action="#ENV{action}" enctype="multipart/form-data"><div>
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+		
+		<ul>
+			[(#SAISIE{selection, type_import,
+				label=<:formidable:importer_formulaire_format_label:>,
+				datas=#ENV{_types_import},
+				defaut=yaml,
+				cacher_option_intro=oui})]
+			
+			[(#SAISIE{input, fichier,
+				label=<:formidable:importer_formulaire_fichier_label:>,
+				type=file,
+				size=6})]
+		</ul>
+		
+		[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
+		<!--extra-->
+		
+		<p class="boutons"><span class="image_loading"></span><input type="submit" class="submit" value="<:bouton_telecharger:>" /></p>
+	</div></form>
+	]
+</div>
diff --git a/formidable_1_0.orig/formulaires/importer_formulaire.php b/formidable_1_0.orig/formulaires/importer_formulaire.php
new file mode 100644
index 0000000000000000000000000000000000000000..edcf2c61f8f944eddb2773a414490d570201a7d5
--- /dev/null
+++ b/formidable_1_0.orig/formulaires/importer_formulaire.php
@@ -0,0 +1,53 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/formidable');
+
+function formulaires_importer_formulaire_charger(){
+	
+	$contexte = array();
+	
+	// On va chercher toutes les fonctions d'importation existantes
+	$types_echange = echanges_formulaire_lister_disponibles();
+	$types_import = array();
+	foreach ($types_echange['importer'] as $type=>$fonction){
+		$types_import[$type] = _T("formidable:echanger_formulaire_${type}_importer");
+	}
+	
+	$contexte['_types_import'] = $types_import;
+	
+	return $contexte;
+}
+
+function formulaires_importer_formulaire_verifier(){
+	$erreurs = array();
+	
+	return $erreurs;
+}
+
+function formulaires_importer_formulaire_traiter(){
+	$retours = array();
+	
+	if (!$_FILES['fichier']['error']){
+		$type_import = _request('type_import');
+		$fichier = $_FILES['fichier']['tmp_name'];
+	
+		$importer = charger_fonction('importer', "echanger/formulaire/$type_import", true);
+		$erreur_ou_id = $importer($fichier);
+		
+		if (!is_numeric($erreur_ou_id)){
+			$retours['message_erreur'] = $erreur;
+			$retours['editable'] = true;
+		}
+		else{
+			$id_formulaire = intval($erreur_ou_id);
+			$retours['redirect'] = generer_url_ecrire('formulaire', "id_formulaire=$id_formulaire");
+		}
+	}
+	
+	return $retours;
+}
+
+?>
diff --git a/formidable_1_0.orig/icones_barre/formulaire.png b/formidable_1_0.orig/icones_barre/formulaire.png
new file mode 100644
index 0000000000000000000000000000000000000000..0cf4900332313261662b761eb344b93da63a3d0e
Binary files /dev/null and b/formidable_1_0.orig/icones_barre/formulaire.png differ
diff --git a/formidable_1_0.orig/images/formidable-128.png b/formidable_1_0.orig/images/formidable-128.png
new file mode 100644
index 0000000000000000000000000000000000000000..8d6b21c66a6738a63c23b05c18d89a4c0d55eab7
Binary files /dev/null and b/formidable_1_0.orig/images/formidable-128.png differ
diff --git a/formidable_1_0.orig/images/formidable-24.png b/formidable_1_0.orig/images/formidable-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8c577f17b2bfe418b95446efb8f117c66f80247
Binary files /dev/null and b/formidable_1_0.orig/images/formidable-24.png differ
diff --git a/formidable_1_0.orig/images/formidable-64.png b/formidable_1_0.orig/images/formidable-64.png
new file mode 100644
index 0000000000000000000000000000000000000000..80d5ab8601b48cc71ecbbd2d555d7158780f81e2
Binary files /dev/null and b/formidable_1_0.orig/images/formidable-64.png differ
diff --git a/formidable_1_0.orig/images/formidable.svg b/formidable_1_0.orig/images/formidable.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5baf77e0a5ac4c12cd2a3282e65ef67984fa1865
--- /dev/null
+++ b/formidable_1_0.orig/images/formidable.svg
@@ -0,0 +1,1104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg:svg
+   xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg9991"
+   sodipodi:version="0.32"
+   inkscape:version="0.47pre4 r22446"
+   sodipodi:docname="formidable.svg"
+   inkscape:export-filename="/home/vincent/public_html/collectivite/plugins/formidable/images/formidable-128.png"
+   inkscape:export-xdpi="180"
+   inkscape:export-ydpi="180"
+   version="1.1">
+  <svg:defs
+     id="defs9993">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective227" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       id="linearGradient9806">
+      <svg:stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop9808" />
+      <svg:stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop9810" />
+    </svg:linearGradient>
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9806"
+       id="radialGradient9812"
+       cx="24.35099"
+       cy="41.591846"
+       fx="24.35099"
+       fy="41.591846"
+       r="19.136078"
+       gradientTransform="matrix(1,0,0,0.242494,0,31.50606)"
+       gradientUnits="userSpaceOnUse" />
+    <svg:linearGradient
+       id="XMLID_3_"
+       gradientUnits="userSpaceOnUse"
+       x1="26.2524"
+       y1="34.8477"
+       x2="26.2524"
+       y2="32.5825">
+      <svg:stop
+         offset="0"
+         style="stop-color:#EF2929"
+         id="stop227" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#A40000"
+         id="stop229" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path2756_1_"
+       gradientUnits="userSpaceOnUse"
+       x1="-4.2974"
+       y1="72.0352"
+       x2="-4.2974"
+       y2="69.3176"
+       gradientTransform="matrix(1.1501,0,0,-1.1501,31.1956,114.7217)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#555753"
+         id="stop215" />
+      <svg:stop
+         offset="0.1275"
+         style="stop-color:#484C4A"
+         id="stop217" />
+      <svg:stop
+         offset="0.3459"
+         style="stop-color:#393E3F"
+         id="stop219" />
+      <svg:stop
+         offset="0.6043"
+         style="stop-color:#313638"
+         id="stop221" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#2E3436"
+         id="stop223" />
+    </svg:linearGradient>
+    <svg:radialGradient
+       id="path2327_1_"
+       cx="169.5005"
+       cy="-40.2339"
+       r="9.5353"
+       gradientTransform="matrix(0.788,0,0,-0.788,-109.0825,-6.0314)"
+       gradientUnits="userSpaceOnUse">
+      <svg:stop
+         offset="0"
+         style="stop-color:#E9B96E"
+         id="stop199" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#C17D11"
+         id="stop201" />
+    </svg:radialGradient>
+    <svg:linearGradient
+       id="XMLID_2_"
+       gradientUnits="userSpaceOnUse"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646"
+       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#C17D11"
+         id="stop186" />
+      <svg:stop
+         offset="0.2735"
+         style="stop-color:#BD7A10"
+         id="stop188" />
+      <svg:stop
+         offset="0.5694"
+         style="stop-color:#B0700C"
+         id="stop190" />
+      <svg:stop
+         offset="0.8747"
+         style="stop-color:#9A6105"
+         id="stop192" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#8F5902"
+         id="stop194" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="XMLID_1_"
+       gradientUnits="userSpaceOnUse"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493"
+       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#C17D11"
+         id="stop173" />
+      <svg:stop
+         offset="0.2735"
+         style="stop-color:#BD7A10"
+         id="stop175" />
+      <svg:stop
+         offset="0.5694"
+         style="stop-color:#B0700C"
+         id="stop177" />
+      <svg:stop
+         offset="0.8747"
+         style="stop-color:#9A6105"
+         id="stop179" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#8F5902"
+         id="stop181" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path4173_1_"
+       gradientUnits="userSpaceOnUse"
+       x1="65.4673"
+       y1="21.7046"
+       x2="65.4673"
+       y2="15.4519"
+       gradientTransform="matrix(1,0,0,-1,-34.4082,61.0186)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#FFFFFF"
+         id="stop163" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#C9C9C9"
+         id="stop165" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path29441_5_"
+       gradientUnits="userSpaceOnUse"
+       x1="-764.8428"
+       y1="70.6904"
+       x2="-768.0942"
+       y2="65.1441"
+       gradientTransform="matrix(-0.9772,0,0,-0.9959,-719.1876,75.5817)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#F5F5F5"
+         id="stop80" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#E9E9E9"
+         id="stop82" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path29441_4_"
+       gradientUnits="userSpaceOnUse"
+       x1="-776.0811"
+       y1="62.5264"
+       x2="-779.3325"
+       y2="56.9801"
+       gradientTransform="matrix(-0.9772,0,0,-0.9959,-719.1876,75.5817)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#F5F5F5"
+         id="stop71" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#E9E9E9"
+         id="stop73" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="rect29408_3_"
+       gradientUnits="userSpaceOnUse"
+       x1="35.4419"
+       y1="63.6533"
+       x2="40.9202"
+       y2="57.2008"
+       gradientTransform="matrix(1.0076,0,0,-0.9876,-21.8209,64.5593)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#F5F5F5"
+         id="stop62" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#E9E9E9"
+         id="stop64" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path29441_3_"
+       gradientUnits="userSpaceOnUse"
+       x1="-777.9102"
+       y1="48.9697"
+       x2="-781.1614"
+       y2="43.4239"
+       gradientTransform="matrix(-0.9772,0,0,-0.9959,-719.1876,75.5817)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#F5F5F5"
+         id="stop53" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#E9E9E9"
+         id="stop55" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="rect29408_2_"
+       gradientUnits="userSpaceOnUse"
+       x1="29.3257"
+       y1="53.0791"
+       x2="34.8039"
+       y2="46.6266"
+       gradientTransform="matrix(1.0076,0,0,-0.9876,-21.8209,64.5593)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#F5F5F5"
+         id="stop44" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#E9E9E9"
+         id="stop46" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path4370_1_"
+       gradientUnits="userSpaceOnUse"
+       x1="-695.4531"
+       y1="-64.7212"
+       x2="-696.7315"
+       y2="-64.0704"
+       gradientTransform="matrix(-0.9777,0.2101,-0.2101,-0.9777,-658.7002,129.0211)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#000000"
+         id="stop36" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#000000"
+         id="stop38" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path4368_1_"
+       gradientUnits="userSpaceOnUse"
+       x1="95.3657"
+       y1="95.0371"
+       x2="97.3309"
+       y2="94.6373"
+       gradientTransform="matrix(0.9834,0.1816,0.1816,-0.9834,-95.5652,121.2474)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#000000"
+         id="stop30" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#000000"
+         id="stop32" />
+    </svg:linearGradient>
+    <svg:radialGradient
+       id="path2329_1_"
+       cx="46.8472"
+       cy="-100.144"
+       r="13.5656"
+       gradientTransform="matrix(1,0,0,-0.6819,-21.9902,-29.6113)"
+       gradientUnits="userSpaceOnUse">
+      <svg:stop
+         offset="0"
+         style="stop-color:#729FCF"
+         id="stop23" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#3465A4"
+         id="stop25" />
+    </svg:radialGradient>
+    <svg:radialGradient
+       id="XMLID_5_"
+       cx="23.436"
+       cy="33.9185"
+       r="19.7892"
+       gradientTransform="matrix(0.5861,1.37e-2,1.37e-2,0.6642,-2.6747,12.0504)"
+       gradientUnits="userSpaceOnUse">
+      <svg:stop
+         offset="0"
+         style="stop-color:#E9B96E"
+         id="stop14" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#C17D11"
+         id="stop16" />
+    </svg:radialGradient>
+    <svg:foreignObject
+       id="foreignObject7"
+       height="1"
+       width="1"
+       y="0"
+       x="0"
+       requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
+      <i:pgfRef
+         xlink:href="#adobe_illustrator_pgf" />
+    </svg:foreignObject>
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_5_"
+       id="radialGradient266885"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5861,1.37e-2,1.37e-2,0.6642,-2.6747,12.0504)"
+       cx="23.436"
+       cy="33.9185"
+       r="19.7892" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2329_1_"
+       id="radialGradient266887"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,-0.6819,-21.9902,-29.6113)"
+       cx="46.8472"
+       cy="-100.144"
+       r="13.5656" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path4368_1_"
+       id="linearGradient266889"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9834,0.1816,0.1816,-0.9834,-95.5652,121.2474)"
+       x1="95.3657"
+       y1="95.0371"
+       x2="97.3309"
+       y2="94.6373" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path4370_1_"
+       id="linearGradient266891"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.9777,0.2101,-0.2101,-0.9777,-658.7002,129.0211)"
+       x1="-695.4531"
+       y1="-64.7212"
+       x2="-696.7315"
+       y2="-64.0704" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path4173_1_"
+       id="linearGradient266903"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,-1,-34.4082,61.0186)"
+       x1="65.4673"
+       y1="21.7046"
+       x2="65.4673"
+       y2="15.4519" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_1_"
+       id="linearGradient266905"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_2_"
+       id="linearGradient266907"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2327_1_"
+       id="radialGradient266909"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.788,0,0,-0.788,-109.0825,-6.0314)"
+       cx="169.5005"
+       cy="-40.2339"
+       r="9.5353" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path2756_1_"
+       id="linearGradient266911"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1501,0,0,-1.1501,31.1956,114.7217)"
+       x1="-4.2974"
+       y1="72.0352"
+       x2="-4.2974"
+       y2="69.3176" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_3_"
+       id="linearGradient266913"
+       gradientUnits="userSpaceOnUse"
+       x1="26.2524"
+       y1="34.8477"
+       x2="26.2524"
+       y2="32.5825" />
+    <svg:radialGradient
+       id="radialGradient2174"
+       cx="46.847198"
+       cy="-100.144"
+       r="13.5656"
+       gradientTransform="matrix(1,0,0,-0.6819,-21.9902,-29.6113)"
+       gradientUnits="userSpaceOnUse">
+      <svg:stop
+         offset="0"
+         style="stop-color:#729FCF"
+         id="stop2176" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#3465A4"
+         id="stop2178" />
+    </svg:radialGradient>
+    <svg:linearGradient
+       id="linearGradient2182"
+       gradientUnits="userSpaceOnUse"
+       x1="95.3657"
+       y1="95.037102"
+       x2="97.330902"
+       y2="94.637299"
+       gradientTransform="matrix(0.9834,0.1816,0.1816,-0.9834,-95.5652,121.2474)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#000000"
+         id="stop2184" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#000000"
+         id="stop2186" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="linearGradient2189"
+       gradientUnits="userSpaceOnUse"
+       x1="-695.45312"
+       y1="-64.721199"
+       x2="-696.73151"
+       y2="-64.070396"
+       gradientTransform="matrix(-0.9777,0.2101,-0.2101,-0.9777,-658.7002,129.0211)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#000000"
+         id="stop2191" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#000000"
+         id="stop2193" />
+    </svg:linearGradient>
+    <namedview
+       zoom="9.8994949"
+       pageopacity="0.0"
+       pageshadow="2"
+       showpageshadow="false"
+       borderopacity="0.17254902"
+       pagecolor="#ffffff"
+       bordercolor="#666666"
+       cy="24.622653"
+       showgrid="false"
+       current-layer="layer1"
+       cx="25.799661"
+       window-y="167"
+       document-units="px"
+       window-width="770"
+       grid-bbox="true"
+       window-height="695"
+       window-x="472" />
+    <svg:linearGradient
+       id="linearGradient2280"
+       gradientUnits="userSpaceOnUse"
+       x1="65.4673"
+       y1="21.704599"
+       x2="65.4673"
+       y2="15.4519"
+       gradientTransform="matrix(1,0,0,-1,-34.4082,61.0186)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#FFFFFF"
+         id="stop2282" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#C9C9C9"
+         id="stop2284" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path4173_1_"
+       id="linearGradient266966"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7587571,0,0,-1.7587571,-73.922013,79.170666)"
+       x1="65.4673"
+       y1="21.7046"
+       x2="65.4673"
+       y2="15.4519" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path4370_1_"
+       id="linearGradient267038"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.7195361,0.36951432,-0.36951432,-1.7195361,-1171.8999,198.77048)"
+       x1="-695.4531"
+       y1="-64.7212"
+       x2="-696.7315"
+       y2="-64.0704" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path4368_1_"
+       id="linearGradient267041"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7295622,0.31939001,0.31939001,-1.7295622,-181.4823,185.09853)"
+       x1="95.3657"
+       y1="95.0371"
+       x2="97.3309"
+       y2="94.6373" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2329_1_"
+       id="radialGradient267045"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.758757,0,0,-1.1992961,-52.081768,-80.225303)"
+       cx="46.8472"
+       cy="-100.144"
+       r="13.5656" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_5_"
+       id="radialGradient267053"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5861,1.37e-2,1.37e-2,0.6642,-2.6747,12.0504)"
+       cx="23.436"
+       cy="33.9185"
+       r="19.7892" />
+    <svg:radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5861,1.37e-2,1.37e-2,0.6642,-2.6747,12.0504)"
+       r="19.7892"
+       cy="33.918499"
+       cx="23.436001"
+       id="radialGradient2166">
+      <svg:stop
+         id="stop2168"
+         style="stop-color:#E9B96E"
+         offset="0" />
+      <svg:stop
+         id="stop2170"
+         style="stop-color:#C17D11"
+         offset="1" />
+    </svg:radialGradient>
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_1_"
+       id="linearGradient267061"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_2_"
+       id="linearGradient267063"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2327_1_"
+       id="radialGradient267065"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.788,0,0,-0.788,-109.0825,-6.0314)"
+       cx="169.5005"
+       cy="-40.2339"
+       r="9.5353" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path2756_1_"
+       id="linearGradient267067"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1501,0,0,-1.1501,31.1956,114.7217)"
+       x1="-4.2974"
+       y1="72.0352"
+       x2="-4.2974"
+       y2="69.3176" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_3_"
+       id="linearGradient267069"
+       gradientUnits="userSpaceOnUse"
+       x1="26.2524"
+       y1="34.8477"
+       x2="26.2524"
+       y2="32.5825" />
+    <svg:radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.788,0,0,-0.788,-109.0825,-6.0314)"
+       r="9.5353003"
+       cy="-40.233898"
+       cx="169.5005"
+       id="radialGradient2315">
+      <svg:stop
+         id="stop2317"
+         style="stop-color:#E9B96E"
+         offset="0" />
+      <svg:stop
+         id="stop2319"
+         style="stop-color:#C17D11"
+         offset="1" />
+    </svg:radialGradient>
+    <svg:linearGradient
+       gradientTransform="matrix(1.1501,0,0,-1.1501,31.1956,114.7217)"
+       y2="69.317596"
+       x2="-4.2974"
+       y1="72.035202"
+       x1="-4.2974"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2329">
+      <svg:stop
+         id="stop2331"
+         style="stop-color:#555753"
+         offset="0" />
+      <svg:stop
+         id="stop2333"
+         style="stop-color:#484C4A"
+         offset="0.1275" />
+      <svg:stop
+         id="stop2335"
+         style="stop-color:#393E3F"
+         offset="0.3459" />
+      <svg:stop
+         id="stop2337"
+         style="stop-color:#313638"
+         offset="0.6043" />
+      <svg:stop
+         id="stop2339"
+         style="stop-color:#2E3436"
+         offset="1" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       y2="32.5825"
+       x2="26.252399"
+       y1="34.847698"
+       x1="26.252399"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2342">
+      <svg:stop
+         id="stop2344"
+         style="stop-color:#EF2929"
+         offset="0" />
+      <svg:stop
+         id="stop2346"
+         style="stop-color:#A40000"
+         offset="1" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_3_"
+       id="linearGradient267084"
+       gradientUnits="userSpaceOnUse"
+       x1="26.2524"
+       y1="34.8477"
+       x2="26.2524"
+       y2="32.5825"
+       gradientTransform="matrix(2.7108449,0,0,2.7108449,-38.9913,-41.797214)" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path2756_1_"
+       id="linearGradient267087"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.1177432,0,0,-3.1177432,45.575138,269.19554)"
+       x1="-4.2974"
+       y1="72.0352"
+       x2="-4.2974"
+       y2="69.3176" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2327_1_"
+       id="radialGradient267097"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.136146,0,0,-2.136146,-334.697,-58.147403)"
+       cx="169.5005"
+       cy="-40.2339"
+       r="9.5353" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_1_"
+       id="linearGradient267114"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_2_"
+       id="linearGradient267116"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646" />
+    <svg:linearGradient
+       id="linearGradient2289"
+       gradientUnits="userSpaceOnUse"
+       x1="-25.431601"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493"
+       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#C17D11"
+         id="stop2291" />
+      <svg:stop
+         offset="0.2735"
+         style="stop-color:#BD7A10"
+         id="stop2293" />
+      <svg:stop
+         offset="0.5694"
+         style="stop-color:#B0700C"
+         id="stop2295" />
+      <svg:stop
+         offset="0.8747"
+         style="stop-color:#9A6105"
+         id="stop2297" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#8F5902"
+         id="stop2299" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="linearGradient2302"
+       gradientUnits="userSpaceOnUse"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646"
+       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#C17D11"
+         id="stop2304" />
+      <svg:stop
+         offset="0.2735"
+         style="stop-color:#BD7A10"
+         id="stop2306" />
+      <svg:stop
+         offset="0.5694"
+         style="stop-color:#B0700C"
+         id="stop2308" />
+      <svg:stop
+         offset="0.8747"
+         style="stop-color:#9A6105"
+         id="stop2310" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#8F5902"
+         id="stop2312" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_2_"
+       id="linearGradient267131"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0935548,-0.51668813,1.15753,2.4511451,55.339053,25.517944)"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_1_"
+       id="linearGradient267134"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0935548,-0.51668813,-1.15753,2.4511451,9.74292,25.517944)"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493" />
+    <inkscape:perspective
+       id="perspective3062"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3076"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3090"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3104"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3118"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_1_"
+       id="linearGradient3017"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0935548,-0.51668813,-1.15753,2.4511451,9.74292,25.517944)"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_2_"
+       id="linearGradient3019"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0935548,-0.51668813,1.15753,2.4511451,55.339053,25.517944)"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2327_1_"
+       id="radialGradient3021"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.136146,0,0,-2.136146,-334.697,-58.147403)"
+       cx="169.5005"
+       cy="-40.2339"
+       r="9.5353" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path2756_1_"
+       id="linearGradient3023"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.1177432,0,0,-3.1177432,45.575138,269.19554)"
+       x1="-4.2974"
+       y1="72.0352"
+       x2="-4.2974"
+       y2="69.3176" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_3_"
+       id="linearGradient3025"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7108449,0,0,2.7108449,-38.9913,-41.797214)"
+       x1="26.2524"
+       y1="34.8477"
+       x2="26.2524"
+       y2="32.5825" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_3_"
+       id="linearGradient3030"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7108449,0,0,2.7108449,-39.169171,-41.746948)"
+       x1="26.2524"
+       y1="34.8477"
+       x2="26.2524"
+       y2="32.5825" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path2756_1_"
+       id="linearGradient3033"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.1177432,0,0,-3.1177432,45.397267,269.24581)"
+       x1="-4.2974"
+       y1="72.0352"
+       x2="-4.2974"
+       y2="69.3176" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2327_1_"
+       id="radialGradient3040"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.136146,0,0,-2.136146,-334.87487,-58.097137)"
+       cx="169.5005"
+       cy="-40.2339"
+       r="9.5353" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_2_"
+       id="linearGradient3043"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0935548,-0.51668813,1.15753,2.4511451,55.161182,25.56821)"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_1_"
+       id="linearGradient3046"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0935548,-0.51668813,-1.15753,2.4511451,9.5650493,25.56821)"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493" />
+  </svg:defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="24.999168"
+     inkscape:cy="36.55781"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="867"
+     inkscape:window-height="669"
+     inkscape:window-x="246"
+     inkscape:window-y="112"
+     inkscape:window-maximized="0" />
+  <svg:metadata
+     id="metadata9996">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </svg:metadata>
+  <svg:g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <svg:image
+       y="0.52496314"
+       x="79.286026"
+       id="image3064"
+       height="13.594464"
+       width="13.594464"
+       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-combobox.png" />
+    <svg:path
+       d="m 41.665519,9.108502 c -1.867773,3.960546 -1.612951,8.007839 0.5747,9.04338 2.187651,1.032832 5.478619,-1.341865 7.349101,-5.302413 1.867773,-3.9605434 1.612955,-8.0051252 -0.574701,-9.0406662 -2.190363,-1.032836 -5.481326,1.3391575 -7.3491,5.2996992 z"
+       id="path183"
+       style="fill:url(#linearGradient3046);stroke:#8f5902;stroke-width:2.36402392;stroke-miterlimit:4;stroke-dasharray:none" />
+    <svg:path
+       d="m 22.33177,9.1057907 c 1.867773,3.9578363 1.612957,8.0078393 -0.574698,9.0406703 -2.187649,1.03283 -5.478616,-1.341867 -7.349099,-5.302413 -1.867773,-3.9605449 -1.612953,-8.005125 0.5747,-9.0379564 2.187648,-1.032836 5.475904,1.3391576 7.349097,5.2996991 z"
+       id="path196"
+       style="fill:url(#linearGradient3043);stroke:#8f5902;stroke-width:2.36402392;stroke-miterlimit:4;stroke-dasharray:none" />
+    <svg:path
+       style="fill:url(#radialGradient3040);stroke:#8f5902;stroke-width:2.36402392;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 55.477275,30.694962 c 0.0055,12.968683 -10.499103,29.735262 -23.465076,29.74068 -12.963262,0.0055 -23.4840487,-16.750309 -23.4894717,-29.716283 0,-0.0081 0,-0.01641 0,-0.02447 C 8.5146273,17.726208 19.021832,7.2081281 31.990516,7.1999959 44.951062,7.1944459 55.471855,17.701807 55.477275,30.667783 c 0,0.01095 0,0.01896 0,0.02705 z"
+       cx="31.112698"
+       type="arc"
+       rx="8.6620579"
+       cy="19.008621"
+       ry="8.6620579"
+       id="path2327" />
+    <svg:path
+       style="opacity:0.12660002;fill:none;stroke:#ffffff;stroke-width:2.36402392;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 52.590227,30.694962 c 0.0055,11.374707 -9.211453,26.850921 -20.580738,26.856344 -11.369282,0.0056 -20.599712,-15.459951 -20.605135,-26.834653 0,-0.0081 0,-0.01356 0,-0.02158 -0.0055,-11.374705 9.211452,-20.602421 20.583451,-20.607842 11.366569,-0.0055 20.596998,9.208739 20.602422,20.586154 0,0.0081 0,0.01356 0,0.02158 z"
+       enable-background="new    "
+       cx="31.112698"
+       type="arc"
+       rx="8.6620579"
+       cy="19.008621"
+       ry="8.6620579"
+       id="path3834" />
+    <svg:g
+       id="g205"
+       transform="matrix(2.7108452,0,0,2.7108452,-39.169172,-41.746951)">
+      <svg:ellipse
+         style="fill:#8f5902"
+         sodipodi:ry="0.54100001"
+         sodipodi:rx="1.041"
+         sodipodi:cy="29.219"
+         sodipodi:cx="24.940001"
+         id="ellipse207"
+         ry="0.54100001"
+         rx="1.041"
+         cy="29.219"
+         cx="24.940001"
+         transform="matrix(0.8505,0.526,-0.526,0.8505,19.0996,-8.7499)"
+         d="m 25.981001,29.219 c 0,0.298786 -0.466072,0.541 -1.041,0.541 -0.574929,0 -1.041,-0.242214 -1.041,-0.541 0,-0.298786 0.466071,-0.541 1.041,-0.541 0.574928,0 1.041,0.242214 1.041,0.541 z" />
+      <svg:ellipse
+         style="fill:#8f5902"
+         sodipodi:ry="0.54100001"
+         sodipodi:rx="1.0420001"
+         sodipodi:cy="29.219"
+         sodipodi:cx="27.565001"
+         id="ellipse209"
+         ry="0.54100001"
+         rx="1.0420001"
+         cy="29.219"
+         cx="27.565001"
+         transform="matrix(-0.8506,0.5258,-0.5258,-0.8506,66.3766,39.5785)"
+         d="m 28.607001,29.219 c 0,0.298786 -0.46652,0.541 -1.042,0.541 -0.575481,0 -1.042001,-0.242214 -1.042001,-0.541 0,-0.298786 0.46652,-0.541 1.042001,-0.541 0.57548,0 1.042,0.242214 1.042,0.541 z" />
+    </svg:g>
+    <svg:path
+       style="fill:url(#linearGradient3033);stroke:#2e3436;stroke-width:0.67771125;stroke-linecap:round;stroke-linejoin:round"
+       d="m 22.70858,43.845272 c 0.09486,5.055726 4.209941,9.463561 9.292779,9.463561 5.07741,0 9.192476,-4.407835 9.287353,-9.463561 l -18.580132,0 0,0 z"
+       nodetypes="cscc"
+       id="path2756" />
+    <svg:path
+       style="fill:url(#linearGradient3030);stroke:#a40000;stroke-width:0.67771125;stroke-linecap:round;stroke-linejoin:round"
+       id="path231"
+       d="m 33.009791,46.447685 -1.434034,1.989758 -0.872894,-1.962651 c -2.4994,0.393071 -4.489161,1.935545 -5.109946,3.922592 1.678014,1.772894 4.003921,2.908737 6.581934,2.908737 2.399098,0 4.578618,-0.99217 6.22681,-2.564457 -0.504216,-2.201206 -2.66476,-3.930725 -5.39187,-4.293979 z" />
+    <svg:image
+       y="12.687449"
+       x="11.29285"
+       id="image3078"
+       height="25.508533"
+       width="25.508533"
+       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-checkbox.png" />
+    <svg:image
+       y="14.403575"
+       x="30.422155"
+       id="image3092"
+       height="22.700869"
+       width="22.700869"
+       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-radio.png" />
+    <svg:image
+       y="-3.2308276"
+       x="-44.282436"
+       id="image3106"
+       height="16.103373"
+       width="16.103373"
+       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-text-box.png" />
+    <svg:image
+       y="43.025379"
+       x="73.367607"
+       id="image3120"
+       height="14.591788"
+       width="14.591788"
+       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-design-mode.png" />
+  </svg:g>
+</svg:svg>
diff --git a/formidable_1_0.orig/images/formulaire-24.png b/formidable_1_0.orig/images/formulaire-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff847d080c2b8c158b3dccdff2d1534d06178ae6
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-24.png differ
diff --git a/formidable_1_0.orig/images/formulaire-action-ajouter.png b/formidable_1_0.orig/images/formulaire-action-ajouter.png
new file mode 100644
index 0000000000000000000000000000000000000000..8aef2957c18a03733564ddd83a6edb5771da56be
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-action-ajouter.png differ
diff --git a/formidable_1_0.orig/images/formulaire-analyse-24.png b/formidable_1_0.orig/images/formulaire-analyse-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..9965646437832a2053804dc55b33b9b190dbe27c
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-analyse-24.png differ
diff --git a/formidable_1_0.orig/images/formulaire-config-champs-24.png b/formidable_1_0.orig/images/formulaire-config-champs-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d77271074487e5ea30bbcd2f7c6eed6bc3bcdea
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-config-champs-24.png differ
diff --git a/formidable_1_0.orig/images/formulaire-config-traitements-24.png b/formidable_1_0.orig/images/formulaire-config-traitements-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..f362e72fbbde43b4aba339ad21a6c052b8069dd9
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-config-traitements-24.png differ
diff --git a/formidable_1_0.orig/images/formulaire-dupliquer-24.png b/formidable_1_0.orig/images/formulaire-dupliquer-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..a4ec44f9213f3586049715553d506c47756a4fee
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-dupliquer-24.png differ
diff --git a/formidable_1_0.orig/images/formulaire-editer-24.png b/formidable_1_0.orig/images/formulaire-editer-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..0bb3e266d5b7a38253cc8cc70e77b48475e5528a
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-editer-24.png differ
diff --git a/formidable_1_0.orig/images/formulaire-exporter-24.png b/formidable_1_0.orig/images/formulaire-exporter-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..33508572ff1186c138da781b1c3c03fa27ef9b85
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-exporter-24.png differ
diff --git a/formidable_1_0.orig/images/formulaire-nouveau-48.png b/formidable_1_0.orig/images/formulaire-nouveau-48.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0c803e3f09a3a23715a2b49c229cd784cabe632
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-nouveau-48.png differ
diff --git a/formidable_1_0.orig/images/formulaire-reponse-24.png b/formidable_1_0.orig/images/formulaire-reponse-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..1bbdb51acdf26fccc0d4b409e0e543b213e279ac
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-reponse-24.png differ
diff --git a/formidable_1_0.orig/images/formulaire-reponse-supprimer-24.png b/formidable_1_0.orig/images/formulaire-reponse-supprimer-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..897c63e1c3b275c13d076fbed552abf50902e79a
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-reponse-supprimer-24.png differ
diff --git a/formidable_1_0.orig/images/formulaire-reponses-24.png b/formidable_1_0.orig/images/formulaire-reponses-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec0a2b05a2d7a392c8a4f464c5069d6af0a684aa
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-reponses-24.png differ
diff --git a/formidable_1_0.orig/images/formulaire-reponses-exporter-24.png b/formidable_1_0.orig/images/formulaire-reponses-exporter-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..94d0cec41e48d9e59450e829c47b2441694e7ceb
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-reponses-exporter-24.png differ
diff --git a/formidable_1_0.orig/images/formulaire-supprimer-24.png b/formidable_1_0.orig/images/formulaire-supprimer-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..1819e5ef1685d9e19518d13047a1988dcba88477
Binary files /dev/null and b/formidable_1_0.orig/images/formulaire-supprimer-24.png differ
diff --git a/formidable_1_0.orig/inc/formidable.php b/formidable_1_0.orig/inc/formidable.php
new file mode 100644
index 0000000000000000000000000000000000000000..172b81d0bb2fbc09a71bc6262db1a99f10691d66
--- /dev/null
+++ b/formidable_1_0.orig/inc/formidable.php
@@ -0,0 +1,226 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/*
+ * Liste tous les traitements configurables (ayant une description)
+ *
+ * @return array Un tableau listant des saisies et leurs options
+ */
+function traitements_lister_disponibles(){
+	static $traitements = null;
+	
+	if (is_null($traitements)){
+		$traitements = array();
+		$liste = find_all_in_path('traiter/', '.+[.]yaml$');
+		
+		if (count($liste)){
+			foreach ($liste as $fichier=>$chemin){
+				$type_traitement = preg_replace(',[.]yaml$,i', '', $fichier);
+				$dossier = str_replace($fichier, '', $chemin);
+				// On ne garde que les traitements qui ont bien la fonction
+				if (charger_fonction($type_traitement, 'traiter', true)
+					and (
+						is_array($traitement = traitements_charger_infos($type_traitement))
+					)
+				){
+					$traitements[$type_traitement] = $traitement;
+				}
+			}
+		}
+	}
+	
+	return $traitements;
+}
+
+/**
+ * Charger les informations contenues dans le yaml d'un traitement
+ *
+ * @param string $type_saisie Le type de la saisie
+ * @return array Un tableau contenant le YAML décodé
+ */
+function traitements_charger_infos($type_traitement){
+	include_spip('inc/yaml');
+	$fichier = find_in_path("traiter/$type_traitement.yaml");
+	$traitement = yaml_decode_file($fichier);
+
+	if (is_array($traitement)) {
+		$traitement += array('titre' => '', 'description' => '', 'icone' => '');
+		$traitement['titre'] = $traitement['titre'] ? _T_ou_typo($traitement['titre']) : $type_traitement;
+		$traitement['description'] = $traitement['description'] ? _T_ou_typo($traitement['description']) : '';
+		$traitement['icone'] = $traitement['icone'] ? find_in_path($traitement['icone']) : '';
+	}
+	return $traitement;
+}
+
+/*
+ * Liste tous les types d'échanges (export et import) existant pour les formulaires
+ *
+ * @return array Retourne un tableau listant les types d'échanges
+ */
+function echanges_formulaire_lister_disponibles(){
+	// On va chercher toutes les fonctions existantes
+	$liste = find_all_in_path('echanger/formulaire/', '.+[.]php$');
+	$types_echange = array('exporter'=>array(), 'importer'=>array());
+	if (count($liste)){
+		foreach ($liste as $fichier=>$chemin){
+			$type_echange = preg_replace(',[.]php$,i', '', $fichier);
+			$dossier = str_replace($fichier, '', $chemin);
+			// On ne garde que les échanges qui ont bien la fonction
+			if ($f = charger_fonction('exporter', "echanger/formulaire/$type_echange", true)){
+				$types_echange['exporter'][$type_echange] = $f;
+			}
+			if ($f = charger_fonction('importer', "echanger/formulaire/$type_echange", true)){
+				$types_echange['importer'][$type_echange] = $f;
+			}
+		}
+	}
+	return $types_echange;
+}
+
+/*
+ * Génère le nom du cookie qui sera utilisé par le plugin lors d'une réponse
+ * par un visiteur non-identifié.
+ *
+ * @param int $id_formulaire L'identifiant du formulaire
+ * @return string Retourne le nom du cookie
+ */
+function formidable_generer_nom_cookie($id_formulaire){
+	return $GLOBALS['cookie_prefix'].'cookie_formidable_'.$id_formulaire;
+}
+
+/*
+ * Vérifie si le visiteur a déjà répondu à un formulaire
+ *
+ * @param int $id_formulaire L'identifiant du formulaire
+ * @param string $choix_identification Comment verifier une reponse. Priorite sur 'cookie' ou sur 'id_auteur'
+ * @return unknown_type Retourne un tableau contenant les id des réponses si elles existent, sinon false
+ */
+function formidable_verifier_reponse_formulaire($id_formulaire, $choix_identification='cookie'){
+	global $auteur_session;
+	$id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
+	$nom_cookie = formidable_generer_nom_cookie($id_formulaire);
+	$cookie = isset($_COOKIE[$nom_cookie]) ? $_COOKIE[$nom_cookie] : false;
+
+	// ni cookie ni id, on ne peut rien faire
+	if (!$cookie and !$id_auteur) {
+		return false;
+	}
+	
+	// priorite sur le cookie
+	if ($choix_identification == 'cookie' or !$choix_identification) {
+		if ($cookie)
+			$where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.intval($id_auteur).')' : ')');
+		else
+			$where = 'id_auteur='.intval($id_auteur);
+	}
+	
+	// sinon sur l'id_auteur
+	else {
+		if ($id_auteur)
+			$where = 'id_auteur='.intval($id_auteur);		
+		else
+			$where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.intval($id_auteur).')' : ')');
+	}
+	
+	$reponses = sql_allfetsel(
+		'id_formulaires_reponse',
+		'spip_formulaires_reponses',
+		array(
+			array('=', 'id_formulaire', intval($id_formulaire)),
+			array('=', 'statut', sql_quote('publie')),
+			$where
+		),
+		'',
+		'date'
+	);
+	
+	if (is_array($reponses))
+		return array_map('reset', $reponses);
+	else
+		return false;
+}
+
+/*
+ * Génère la vue d'analyse de toutes les réponses à une saisie
+ *
+ * @param array $saisie Un tableau décrivant une saisie
+ * @param array $env L'environnement, contenant normalement la réponse à la saisie
+ * @return string Retour le HTML des vues
+ */
+function formidable_analyser_saisie($saisie, $valeurs=array(), $reponses_total=0){
+	// Si le paramètre n'est pas bon ou que c'est un conteneur, on génère du vide
+	if (!is_array($saisie) or (isset($saisie['saisies']) and $saisie['saisies']))
+		return '';
+	
+	$contexte = array('reponses_total'=>$reponses_total);
+	
+	// On sélectionne le type de saisie
+	$contexte['type_saisie'] = $saisie['saisie'];
+	
+	// Peut-être des transformations à faire sur les options textuelles
+	$options = $saisie['options'];
+	foreach ($options as $option => $valeur){
+		$options[$option] = _T_ou_typo($valeur, 'multi');
+	}
+	
+	// On ajoute les options propres à la saisie
+	$contexte = array_merge($contexte, $options);
+	
+	// On récupère toutes les valeurs du champ
+	if (isset($valeurs[$contexte['nom']]) and $valeurs[$contexte['nom']] and is_array($valeurs[$contexte['nom']])){
+		$contexte['valeurs'] = $valeurs[$contexte['nom']];
+	}
+	else{
+		$contexte['valeurs'] = array();
+	}
+	
+	// On génère la saisie
+	return recuperer_fond(
+		'saisies-analyses/_base',
+		$contexte
+	);
+}
+
+
+/**
+ * Tente de déserialiser un texte 
+ *
+ * Si le paramètre est un tableau, retourne le tableau,
+ * Si c'est une chaîne, tente de la désérialiser, sinon
+ * retourne la chaîne.
+ *
+ * @filtre tenter_unserialize
+ * 
+ * @param string|array $texte
+ *     Le texte (possiblement sérializé) ou un tableau
+ * @return array|string
+ *     Tableau, texte désérializé ou texte
+**/
+function filtre_tenter_unserialize_dist($texte) {
+	if (is_array($texte)) {
+		return $texte;
+	}
+	if ($tmp = @unserialize($texte)) {
+		return $tmp;
+	}
+	return $texte;
+}
+
+
+/**
+ * Retourne un texte du nombre de réponses 
+ *
+ * @param int $nb
+ *     Nombre de réponses
+ * @return string
+ *     Texte indiquant le nombre de réponses
+**/
+function titre_nb_reponses($nb) {
+	if (!$nb) return _T('formidable:reponse_aucune');
+	if ($nb == 1) return _T('formidable:reponse_une');
+	return _T('formidable:reponses_nb', array('nb' => $nb));
+}
+
+?>
diff --git a/formidable_1_0.orig/lang/formidable.xml b/formidable_1_0.orig/lang/formidable.xml
new file mode 100644
index 0000000000000000000000000000000000000000..42255c45479807a3369f85b91b982f560a44f83b
--- /dev/null
+++ b/formidable_1_0.orig/lang/formidable.xml
@@ -0,0 +1,12 @@
+<traduction module="formidable" gestionnaire="salvatore" url="http://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/" reference="fr">
+	<langue code="de" />
+	<langue code="en" url="http://trad.spip.net/tradlang_module/formidable?lang_cible=en">
+		<traducteur nom="Benitron" lien="http://trad.spip.net/auteur/benitron" />
+		<traducteur nom="Paolo" lien="http://trad.spip.net/auteur/paolo" />
+	</langue>
+	<langue code="fr" />
+	<langue code="it" />
+	<langue code="sk" url="http://trad.spip.net/tradlang_module/formidable?lang_cible=sk">
+		<traducteur nom="jaro" lien="http://trad.spip.net/auteur/jaro" />
+	</langue>
+</traduction>
diff --git a/formidable_1_0.orig/lang/formidable_de.php b/formidable_1_0.orig/lang/formidable_de.php
new file mode 100644
index 0000000000000000000000000000000000000000..6fd86e07385b329bc3ba4f7a5c85f201e40ed092
--- /dev/null
+++ b/formidable_1_0.orig/lang/formidable_de.php
@@ -0,0 +1,161 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// extrait automatiquement de http://trad.spip.net/tradlang_module/formidable?lang_cible=de
+// ** ne pas modifier le fichier **
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+	// A
+	'analyse_avec_reponse' => 'Ausgefüllte Antworten',
+	'analyse_longueur_moyenne' => 'Durchschnittliche Anzahl Worte',
+	'analyse_nb_reponses_total' => '@nb@ personnes ont répondu à ce formulaire.', # NEW
+	'analyse_sans_reponse' => 'Leere Antworten',
+	'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.', # NEW
+	'analyse_zero_reponse_total' => 'Aucune personne n\'a répondu à ce formulaire.', # NEW
+	'aucun_traitement' => 'Aucun traitement', # NEW
+
+	// B
+	'bouton_formulaires' => 'Formulare',
+
+	// C
+	'cfg_analyse_classe_explication' => 'Vous pouvez indiquer des classes CSS qui seront ajoutées
+		sur le conteneur de chaque graphique, tel que <code>gray</code>,<code>blue</code>,
+		<code>orange</code>, <code>green</code> ou tout ce qui vous plairait !', # NEW
+	'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression', # NEW
+	'cfg_titre_page_configurer_formidable' => 'Configurer Formidable', # NEW
+	'cfg_titre_parametrages_analyse' => 'Paramétrages de l\'analyse des réponses', # NEW
+
+	// E
+	'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
+	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+	'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
+	'editer_apres_choix_formulaire' => 'Le formulaire, à nouveau', # NEW
+	'editer_apres_choix_redirige' => 'Rediriger vers une nouvelle adresse', # NEW
+	'editer_apres_choix_rien' => 'Rien du tout', # NEW
+	'editer_apres_choix_stats' => 'Les statistiques des réponses', # NEW
+	'editer_apres_choix_valeurs' => 'Les valeurs saisies', # NEW
+	'editer_apres_explication' => 'Après validation, afficher à la place du formulaire :', # NEW
+	'editer_apres_label' => 'Afficher ensuite', # NEW
+	'editer_descriptif' => 'Beschreibung',
+	'editer_descriptif_explication' => 'Eine Beschreibung des Formulars für das Backend.',
+	'editer_identifiant' => 'Bezeichnung',
+	'editer_identifiant_explication' => 'Gegen sie eine Bezeichnung an, mit dem sie das Formular ansprechen können.',
+	'editer_menu_champs' => 'Felder konfigurieren',
+	'editer_menu_formulaire' => 'Formular konfigurieren',
+	'editer_menu_traitements' => 'Verarbeitung konfigurieren',
+	'editer_message_ok' => 'Bestätigungstext',
+	'editer_message_ok_explication' => 'Sie können die Nachricht festlegen, die nach dem Absenden des Formulars angezeigt wird.',
+	'editer_modifier_formulaire' => 'Formular ändern',
+	'editer_nouveau' => 'Neues Formular',
+	'editer_redirige_url' => 'Adresse de redirection après validation', # NEW
+	'editer_redirige_url_explication' => 'Laissez vide si vous souhaitez rester sur la même page', # NEW
+	'editer_titre' => 'Titel',
+	'erreur_autorisation' => 'Sie sind nicht berechtigt, die Formulare der Website zu ändern.',
+	'erreur_base' => 'Beim Speichern ist ein technischer Fehler aufgetreten.',
+	'erreur_generique' => 'Die Felder enthalten Fehler. Bitte überprüfen sie ihre Eingaben.',
+	'erreur_identifiant' => 'Diese Bezeichnung wird bereits verwendet.',
+	'erreur_importer_forms' => 'Fehler beim Importieren des Formulars aus Forms&Tables',
+	'erreur_importer_wcs' => 'Fehler beim Importieren des Formulars aus W.C.S',
+	'erreur_importer_yaml' => 'Fehler beim Importieren des Formulars aus YAML',
+	'erreur_inexistant' => 'Formular nicht vorhanden.',
+
+	// F
+	'formulaires_aucun' => 'Kein Formular vorhanden.',
+	'formulaires_dupliquer' => 'Formular kopieren',
+	'formulaires_dupliquer_copie' => '(Kopie)',
+	'formulaires_introduction' => 'Erstellen und bearbeiten sie Formulare für ihre Website.',
+	'formulaires_nouveau' => 'Neues Formular anlegen',
+	'formulaires_supprimer' => 'Formular löschen',
+	'formulaires_supprimer_confirmation' => 'Achtung - alle Daten aus dem Formular werden ebenfalls gelöscht. Sind sie sicher, dass sie das Formular löschen wollen?',
+	'formulaires_tous' => 'Alle Formulare',
+
+	// I
+	'identification_par_cookie' => 'Par cookie', # NEW
+	'identification_par_id_auteur' => 'Par l\'identifiant (id_auteur) de la personne authentifiée', # NEW
+	'importer_formulaire' => 'Formular importieren',
+	'importer_formulaire_fichier_label' => 'Dateien importeieren',
+	'importer_formulaire_format_label' => 'Format der Datei',
+
+	// M
+	'modele_label_formulaire_formidable' => 'Quel formulaire ?', # NEW
+	'modele_nom_formulaire' => 'un formulaire', # NEW
+
+	// N
+	'noisette_label_afficher_titre_formulaire' => 'Afficher le titre du formulaire ?', # NEW
+	'noisette_label_identifiant' => 'Formulaire à afficher :', # NEW
+	'noisette_nom_noisette_formulaire' => 'Formulaire', # NEW
+
+	// R
+	'reponse_aucune' => 'Aucune réponse', # NEW
+	'reponse_intro' => '@auteur@ hat auf das Formular geantwortet @formulaire@',
+	'reponse_numero' => 'Antwort Nummer:',
+	'reponse_statut' => 'Diese Antwort ist:',
+	'reponse_supprimer' => 'Diese Antwort löschen',
+	'reponse_supprimer_confirmation' => 'Wollen sie diese Antwor wirklich löschen?',
+	'reponse_une' => '1 réponse', # NEW
+	'reponses_analyse' => 'Analyse der Antworten',
+	'reponses_anonyme' => 'Anonym',
+	'reponses_auteur' => 'Nutzer',
+	'reponses_exporter' => 'Antworten exportieren',
+	'reponses_ip' => 'IP-Adresse',
+	'reponses_liste' => 'Liste der Antworten',
+	'reponses_liste_prop' => 'Nicht freigegebene Antworten',
+	'reponses_liste_publie' => 'Alle freigegebenen Antworten',
+	'reponses_nb' => '@nb@ réponses', # NEW
+	'reponses_voir_detail' => 'Antwort anzeigen',
+	'retour_aucun_traitement' => 'Ihre Antwort wurde gesendet, jedoch wurde keine Verarbeitungsoption für das Formular festgelegt. Deshalb geschieht mit den Daten aus diesem Formular überhaupt nichts. :)',
+
+	// T
+	'titre_cadre_raccourcis' => 'Raccourcis', # NEW
+	'traitements_actives' => 'Traitements activés', # NEW
+	'traitements_aide_memoire' => 'Merkzettel:',
+	'traitements_avertissement_creation' => 'Die Änderungen der Felder des Formulars wurden erfolgreich gespeichert. Jetzt können sie festlege, welche Verarbeitungsschritte nach dem Senden des Formulars ausgef',
+	'traitements_avertissement_modification' => 'Die Änderungen der Felder des Formulars wurden erfolgreich gespeichert. <strong>Manche Verarbeitungsoptionen müssen entsprechend neu konfiguriert werden.</strong>',
+	'traitements_champ_aucun' => 'Kein',
+	'traiter_email_description' => 'Sendet das Ergebnis des Formulars an eine Empfängerliste.',
+	'traiter_email_horodatage' => 'Formular "@formulaire@" am @date@ um @heure@ gesendet.',
+	'traiter_email_message_erreur' => 'Beim Versenden des Formulars ist ein Fehler aufgetreten.',
+	'traiter_email_message_ok' => 'Ihre Nachricht wurde per Mail gesendet.',
+	'traiter_email_option_activer_accuse_label' => 'Empfangsbestätigung',
+	'traiter_email_option_activer_accuse_label_case' => 'Ebenfalls eine Empfangsbestätigung an Absender senden.',
+	'traiter_email_option_destinataires_explication' => 'Legen sie das Feld fest, das die Empfängeradresse enthält.',
+	'traiter_email_option_destinataires_label' => 'Empfänger',
+	'traiter_email_option_destinataires_plus_explication' => 'Eine kommagetrennte Empfängerliste.',
+	'traiter_email_option_destinataires_plus_label' => 'Weitere Empfänger',
+	'traiter_email_option_envoyeur_courriel_explication' => 'Legen sie das Feld fest, das die Absenderadresse enthält.',
+	'traiter_email_option_envoyeur_courriel_label' => 'Absenderadresse',
+	'traiter_email_option_envoyeur_nom_explication' => 'Definieren sie den Namen mit Hilf der @raccourcis@ (siehe Merkzettel). Wenn sie nichts eintragen, wird der Name der Website verwendet.',
+	'traiter_email_option_envoyeur_nom_label' => 'Name des Absenders',
+	'traiter_email_option_sujet_accuse_label' => 'Betreff der Empfangsbestätigung',
+	'traiter_email_option_sujet_explication' => 'Definieren sie den Betreff mit Hilf der @raccourcis@. Wenn sie das Feld freilassen, wird der Inhalt automatisch erstellt.',
+	'traiter_email_option_sujet_label' => 'Betreff der Nachricht',
+	'traiter_email_option_vrai_envoyeur_explication' => 'Certains serveurs SMTP ne permettent pas d\'utiliser un courriel arbitraire pour le champ "From". Pour cette raison Formidable insère par défaut le courriel de l\'envoyeur dans le champ "Reply-To". Cocher ici pour insèrer le courriel dans le champ "From".', # NEW
+	'traiter_email_option_vrai_envoyeur_label' => 'Insérer le courriel de l\'envoyeur dans le champ "From"', # NEW
+	'traiter_email_page' => '<a href="@url@">Aus der Seite</a>.',
+	'traiter_email_sujet' => '@nom@ hat ihnen geschrieben.',
+	'traiter_email_sujet_accuse' => 'Danke für ihre Antwort.',
+	'traiter_email_titre' => 'Per Mail senden',
+	'traiter_email_url_enregistrement' => 'Sie könen die Antworten <a href="@url@">auf dieser Seite verwalten</a>.',
+	'traiter_enregistrement_description' => 'Einträge in das Formular in der Datenbank speichern',
+	'traiter_enregistrement_erreur_base' => 'Beim Speichern in der Datenbank ist ein Fehler aufgetreten',
+	'traiter_enregistrement_erreur_deja_repondu' => 'Sie haben dieses Formular bereits ausgefüllt.',
+	'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'La réponse à éditer est introuvable.', # NEW
+	'traiter_enregistrement_option_identification_explication' => 'Si les réponses sont modifiables, quel procédé utiliser en priorité pour connaitre la réponse à modifier ?', # NEW
+	'traiter_enregistrement_option_identification_label' => 'Identification', # NEW
+	'traiter_enregistrement_option_moderation_label' => 'Moderation',
+	'traiter_enregistrement_option_modifiable_explication' => 'Sollen die Besucher ihre Antworten nachträglich &aauml;ndern können?',
+	'traiter_enregistrement_option_modifiable_label' => 'Antworten editierbar',
+	'traiter_enregistrement_option_multiple_explication' => 'Darf die gleiche Person das Formular mehrmals ausfüllen und absenden?',
+	'traiter_enregistrement_option_multiple_label' => 'Mehrfache Antworten',
+	'traiter_enregistrement_titre' => 'Ergebnisse speichern',
+
+	// V
+	'voir_exporter' => 'Formular exportieren',
+	'voir_numero' => 'Formular Nummer:',
+	'voir_reponses' => 'Antworten anzeigen',
+	'voir_traitements' => 'Verarbeitungsoptionen'
+);
+
+?>
diff --git a/formidable_1_0.orig/lang/formidable_en.php b/formidable_1_0.orig/lang/formidable_en.php
new file mode 100644
index 0000000000000000000000000000000000000000..b5719f62237faec5a3b26ab36be594d6c5034dec
--- /dev/null
+++ b/formidable_1_0.orig/lang/formidable_en.php
@@ -0,0 +1,161 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// extrait automatiquement de http://trad.spip.net/tradlang_module/formidable?lang_cible=en
+// ** ne pas modifier le fichier **
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+	// A
+	'analyse_avec_reponse' => 'Non-empty answers',
+	'analyse_longueur_moyenne' => 'Average number in words length',
+	'analyse_nb_reponses_total' => '@nb@ people responded to this form.',
+	'analyse_sans_reponse' => 'Stayed unanswered',
+	'analyse_une_reponse_total' => 'One person responded to this form.',
+	'analyse_zero_reponse_total' => 'No one responded to this form.',
+	'aucun_traitement' => 'No treatment',
+
+	// B
+	'bouton_formulaires' => 'Forms',
+
+	// C
+	'cfg_analyse_classe_explication' => 'You can specify CSS classes that will be added on the container of each graph, such as 
+<code>gray</code>,<code>blue</code>,
+		<code>orange</code>, <code>green</code> or whatever you like!',
+	'cfg_analyse_classe_label' => 'CSS class of the progress bar',
+	'cfg_titre_page_configurer_formidable' => 'Configure Formidable',
+	'cfg_titre_parametrages_analyse' => 'Settings in the answers analysis',
+
+	// E
+	'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
+	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+	'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
+	'editer_apres_choix_formulaire' => 'The form, again',
+	'editer_apres_choix_redirige' => 'Redirect to a new address',
+	'editer_apres_choix_rien' => 'Nothing',
+	'editer_apres_choix_stats' => 'Answers statistics',
+	'editer_apres_choix_valeurs' => 'The entered values',
+	'editer_apres_explication' => 'After validation, display instead of the form:',
+	'editer_apres_label' => 'Display then',
+	'editer_descriptif' => 'Description',
+	'editer_descriptif_explication' => 'An explanation of the form for the private area.',
+	'editer_identifiant' => 'Login',
+	'editer_identifiant_explication' => 'Give a single textual identifier that allows you to call the form more easily.',
+	'editer_menu_champs' => 'Configure the fields',
+	'editer_menu_formulaire' => 'Configure the form',
+	'editer_menu_traitements' => 'Configure the treatments',
+	'editer_message_ok' => 'Return message',
+	'editer_message_ok_explication' => 'You can customize the message that will be displayed to the user after submitting a valid form.',
+	'editer_modifier_formulaire' => 'Modify the form',
+	'editer_nouveau' => 'New form',
+	'editer_redirige_url' => 'Forwarding address after validation',
+	'editer_redirige_url_explication' => 'Leave blank if you want to stay on the same page',
+	'editer_titre' => 'Title',
+	'erreur_autorisation' => 'You do not have the right to edit the website forms',
+	'erreur_base' => 'An error occurred as the data was being saved.',
+	'erreur_generique' => 'There are errors in the fields below. Please check.',
+	'erreur_identifiant' => 'This login is already used.',
+	'erreur_importer_forms' => 'Error while importing the Forms&Tables form',
+	'erreur_importer_wcs' => 'Error while importing the W.C.S form',
+	'erreur_importer_yaml' => 'Error while importing the YAML file',
+	'erreur_inexistant' => 'This form doesn\'t exist.',
+
+	// F
+	'formulaires_aucun' => 'There is no form for now',
+	'formulaires_dupliquer' => 'Duplicate the form',
+	'formulaires_dupliquer_copie' => '(copy)',
+	'formulaires_introduction' => 'Create and configure forms on your site here.',
+	'formulaires_nouveau' => 'Create a new form',
+	'formulaires_supprimer' => 'Delete the form',
+	'formulaires_supprimer_confirmation' => 'Beware, it will also remove all the results. Are you sure you want to delete this form?',
+	'formulaires_tous' => 'All forms',
+
+	// I
+	'identification_par_cookie' => 'By cookie',
+	'identification_par_id_auteur' => 'By login (id_auteur) of the authenticated person',
+	'importer_formulaire' => 'Import a form',
+	'importer_formulaire_fichier_label' => 'File to import',
+	'importer_formulaire_format_label' => 'File format',
+
+	// M
+	'modele_label_formulaire_formidable' => 'Which form ?',
+	'modele_nom_formulaire' => 'One form',
+
+	// N
+	'noisette_label_afficher_titre_formulaire' => 'Dispaly the title of the form ?',
+	'noisette_label_identifiant' => 'Form to display :',
+	'noisette_nom_noisette_formulaire' => 'Form',
+
+	// R
+	'reponse_aucune' => 'No answer',
+	'reponse_intro' => '@auteur@ answered to the form @formulaire@',
+	'reponse_numero' => 'Answer number :',
+	'reponse_statut' => 'This answer is :',
+	'reponse_supprimer' => 'Delete this reply',
+	'reponse_supprimer_confirmation' => 'Do you really wish to delete this reply?',
+	'reponse_une' => '1 reply',
+	'reponses_analyse' => 'Answer analysis',
+	'reponses_anonyme' => 'Anonymous',
+	'reponses_auteur' => 'User',
+	'reponses_exporter' => 'Export the answers',
+	'reponses_ip' => 'IP address',
+	'reponses_liste' => 'Answers list',
+	'reponses_liste_prop' => 'Answers pending for validation',
+	'reponses_liste_publie' => 'All validated answers',
+	'reponses_nb' => '@nb@ answers',
+	'reponses_voir_detail' => 'See the answer',
+	'retour_aucun_traitement' => 'Your reply was accepted. But as the function of the form has not yet been configured, nothing was done with your data!',
+
+	// T
+	'titre_cadre_raccourcis' => 'Shortcuts',
+	'traitements_actives' => 'Activated treatments',
+	'traitements_aide_memoire' => 'List of shortcuts:',
+	'traitements_avertissement_creation' => 'Changes to the form fields have been successfully saved. You can now define which treatments will be performed when using the form.',
+	'traitements_avertissement_modification' => 'Changes to the form fields have been successfully saved. <strong>Some treatments may need to be reconfigured accordingly.</ strong>',
+	'traitements_champ_aucun' => 'None',
+	'traiter_email_description' => 'Post the form results by email to a list of recipients.',
+	'traiter_email_horodatage' => 'Form "@formulaire@" sent on @date@ at @heure@.',
+	'traiter_email_message_erreur' => 'An error occurred when sending the email.',
+	'traiter_email_message_ok' => 'Your message has been successfully sent by email.',
+	'traiter_email_option_activer_accuse_label' => 'Acknowledgement of receipt',
+	'traiter_email_option_activer_accuse_label_case' => 'Also send an email to the sender with a confirmation message.',
+	'traiter_email_option_destinataires_explication' => 'Choose the field that corresponds to the message recipients.',
+	'traiter_email_option_destinataires_label' => 'Recipients',
+	'traiter_email_option_destinataires_plus_explication' => 'A list of addresses separated by commas.',
+	'traiter_email_option_destinataires_plus_label' => 'Extra recipients',
+	'traiter_email_option_envoyeur_courriel_explication' => 'Select the field that will contain the email address of the sender.',
+	'traiter_email_option_envoyeur_courriel_label' => 'Sender Email',
+	'traiter_email_option_envoyeur_nom_explication' => 'Build this name using the @raccourcis@ (see the notes). If you enter nothing, it will be the name of the site.',
+	'traiter_email_option_envoyeur_nom_label' => 'Name of sender',
+	'traiter_email_option_sujet_accuse_label' => 'Subject of the acknowledgement of receipt',
+	'traiter_email_option_sujet_explication' => 'Build topic using @raccourcis@. If you enter nothing, the subject will be built automatically.',
+	'traiter_email_option_sujet_label' => 'Message subject',
+	'traiter_email_option_vrai_envoyeur_explication' => 'Some SMTP servers do not allow to use arbitrary email for the "From" field. For this reason Formidable inserts the default email sender in the "Reply-To". Tick here to insert the email in the "From" field.',
+	'traiter_email_option_vrai_envoyeur_label' => 'Insert email of the sender in the "From" field',
+	'traiter_email_page' => '<a href="@url@">From this page</a>.',
+	'traiter_email_sujet' => '@nom@ has written to you.',
+	'traiter_email_sujet_accuse' => 'Thank you for you reply.',
+	'traiter_email_titre' => 'Send by email',
+	'traiter_email_url_enregistrement' => 'You can manage the answers <a href="@url@">on this page</a>.',
+	'traiter_enregistrement_description' => 'Saves the form results in the database',
+	'traiter_enregistrement_erreur_base' => 'An error occurred while writing to the database',
+	'traiter_enregistrement_erreur_deja_repondu' => 'You have already filled in this form.',
+	'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'The answer to edit can not be found.',
+	'traiter_enregistrement_option_identification_explication' => 'If the answers can be changed, which method is used first to know the answer to modify ?',
+	'traiter_enregistrement_option_identification_label' => 'Identification',
+	'traiter_enregistrement_option_moderation_label' => 'Moderation',
+	'traiter_enregistrement_option_modifiable_explication' => 'May visitors change their answers afterwards?',
+	'traiter_enregistrement_option_modifiable_label' => 'Answers can be modified',
+	'traiter_enregistrement_option_multiple_explication' => 'May a single person answer several times to the form?',
+	'traiter_enregistrement_option_multiple_label' => 'Multiple answers',
+	'traiter_enregistrement_titre' => 'Record the results',
+
+	// V
+	'voir_exporter' => 'Export the form',
+	'voir_numero' => 'Form number :',
+	'voir_reponses' => 'See the answers',
+	'voir_traitements' => 'Treatments'
+);
+
+?>
diff --git a/formidable_1_0.orig/lang/formidable_fr.php b/formidable_1_0.orig/lang/formidable_fr.php
new file mode 100644
index 0000000000000000000000000000000000000000..661e14a90e856f50dc841c9e66a6e22b4cfb986e
--- /dev/null
+++ b/formidable_1_0.orig/lang/formidable_fr.php
@@ -0,0 +1,159 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+	// A
+	'analyse_avec_reponse' => 'Réponses non-vide',
+	'analyse_longueur_moyenne' => 'Longueur moyenne en nombre de mots',
+	'analyse_nb_reponses_total' => '@nb@ personnes ont répondu à ce formulaire.',
+	'analyse_sans_reponse' => 'Laissés blanc',
+	'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.',
+	'analyse_zero_reponse_total' => 'Aucune personne n\'a répondu à ce formulaire.',
+	'aucun_traitement' => 'Aucun traitement',
+
+	// B
+	'bouton_formulaires' => 'Formulaires',
+
+	// C
+	'cfg_analyse_classe_explication' => 'Vous pouvez indiquer des classes CSS qui seront ajoutées
+		sur le conteneur de chaque graphique, tel que <code>gray</code>,<code>blue</code>,
+		<code>orange</code>, <code>green</code> ou tout ce qui vous plairait !',
+	'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression',
+	'cfg_titre_page_configurer_formidable' => 'Configurer Formidable',
+	'cfg_titre_parametrages_analyse' => 'Paramétrages de l\'analyse des réponses',
+
+	// E
+	'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
+	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+	'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
+	'editer_apres_choix_formulaire' => 'Le formulaire, à nouveau',
+	'editer_apres_choix_redirige' => 'Rediriger vers une nouvelle adresse',
+	'editer_apres_choix_rien' => 'Rien du tout',
+	'editer_apres_choix_stats' => 'Les statistiques des réponses',
+	'editer_apres_choix_valeurs' => 'Les valeurs saisies',
+	'editer_apres_explication' => 'Après validation, afficher à la place du formulaire :',
+	'editer_apres_label' => 'Afficher ensuite',
+	'editer_descriptif' => 'Descriptif',
+	'editer_descriptif_explication' => 'Une explication du formulaire destinée à l\'espace privé.',
+	'editer_identifiant' => 'Identifiant',
+	'editer_identifiant_explication' => 'Donnez un identifiant textuel unique qui vous permettra d\'appeler plus facilement le formulaire.',
+	'editer_menu_champs' => 'Configurer les champs',
+	'editer_menu_formulaire' => 'Configurer le formulaire',
+	'editer_menu_traitements' => 'Configurer les traitements',
+	'editer_message_ok' => 'Message de retour',
+	'editer_message_ok_explication' => 'Vous pouvez personnaliser le message qui sera affiché à l\'utilisateur après l\'envoi d\'un formulaire valide.',
+	'editer_modifier_formulaire' => 'Modifier le formulaire',
+	'editer_nouveau' => 'Nouveau formulaire',
+	'editer_redirige_url' => 'Adresse de redirection après validation',
+	'editer_redirige_url_explication' => 'Laissez vide si vous souhaitez rester sur la même page',
+	'editer_titre' => 'Titre',
+	'erreur_autorisation' => 'Vous n\'avez pas le droit d\'éditer les formulaires du site.',
+	'erreur_base' => 'Une erreur technique est survenue durant l\'enregistrement.',
+	'erreur_generique' => 'Il y a des erreurs dans les champs ci-dessous, veuillez vérifier votre envoi.',
+	'erreur_identifiant' => 'Cet identifiant est déjà utilisé.',
+	'erreur_importer_forms' => 'Erreur durant l\'importation du formulaire Forms&Tables',
+	'erreur_importer_wcs' => 'Erreur durant l\'importation du formulaire W.C.S',
+	'erreur_importer_yaml' => 'Erreur durant l\'importation du fichier YAML',
+	'erreur_inexistant' => 'Le formulaire n\'existe pas.',
+
+	// F
+	'formulaires_aucun' => 'Il n\'y a pour l\'instant aucun formulaire.',
+	'formulaires_dupliquer' => 'Dupliquer le formulaire',
+	'formulaires_dupliquer_copie' => '(copie)',
+	'formulaires_introduction' => 'Créez et configurez ici les formulaires de votre site.',
+	'formulaires_nouveau' => 'Créer un nouveau formulaire',
+	'formulaires_supprimer' => 'Supprimer le formulaire',
+	'formulaires_supprimer_confirmation' => 'Attention, cela supprimera aussi tous les résultats. Êtes-vous sûr de vouloir supprimer ce formulaire ?',
+	'formulaires_tous' => 'Tous les formulaires',
+
+	// I
+	'identification_par_cookie' => 'Par cookie',
+	'identification_par_id_auteur' => 'Par l\'identifiant (id_auteur) de la personne authentifiée',
+	'importer_formulaire' => 'Importer un formulaire',
+	'importer_formulaire_fichier_label' => 'Fichier à importer',
+	'importer_formulaire_format_label' => 'Format du fichier',
+
+	// M
+	'modele_label_formulaire_formidable' => 'Quel formulaire ?',
+	'modele_nom_formulaire' => 'un formulaire',
+
+	// N
+	'noisette_label_afficher_titre_formulaire' => 'Afficher le titre du formulaire ?',
+	'noisette_label_identifiant' => 'Formulaire à afficher :',
+	'noisette_nom_noisette_formulaire' => 'Formulaire',
+
+	// R
+	'reponse_aucune' => 'Aucune réponse',
+	'reponse_intro' => '@auteur@ a répondu au formulaire @formulaire@',
+	'reponse_numero' => 'Réponse numéro :',
+	'reponse_statut' => 'Cette réponse est :',
+	'reponse_supprimer' => 'Supprimer cette réponse',
+	'reponse_supprimer_confirmation' => 'Êtes-vous sûr de vouloir supprimer cette réponse ?',
+	'reponse_une' => '1 réponse',
+	'reponses_analyse' => 'Analyse des réponses',
+	'reponses_anonyme' => 'Anonyme',
+	'reponses_auteur' => 'Utilisateur',
+	'reponses_exporter' => 'Exporter les réponses',
+	'reponses_ip' => 'Adresse IP',
+	'reponses_liste' => 'Liste des réponses',
+	'reponses_liste_prop' => 'Réponses en attente de validation',
+	'reponses_liste_publie' => 'Toutes les réponses validées',
+	'reponses_nb' => '@nb@ réponses',
+	'reponses_voir_detail' => 'Voir la réponse',
+	'retour_aucun_traitement' => 'Votre réponse a bien été envoyée, mais aucun traitement n\'a été défini pour ce formulaire. Il ne fait donc rien. :)',
+
+	// T
+	'titre_cadre_raccourcis' => 'Raccourcis',
+	'traitements_actives' => 'Traitements activés',
+	'traitements_aide_memoire' => 'Aide mémoire :',
+	'traitements_avertissement_creation' => 'Les modifications sur les champs du formulaire ont été enregistrées avec succès. Vous pouvez maintenant définir quels traitements seront effectués lors de l\'utilisation du formulaire.',
+	'traitements_avertissement_modification' => 'Les modifications sur les champs du formulaire ont été enregistrées avec succès. <strong>Certains traitements doivent peut-être être reconfigurés en conséquence.</strong>',
+	'traitements_champ_aucun' => 'Aucun',
+	'traiter_email_description' => 'Poste le résultat du formulaire par courriel à une liste de destinataires.',
+	'traiter_email_horodatage' => 'Formulaire "@formulaire@" posté le @date@ à @heure@.',
+	'traiter_email_message_erreur' => 'Une erreur est survenue lors de l\'envoi du courriel.',
+	'traiter_email_message_ok' => 'Votre message a bien été envoyé par courriel.',
+	'traiter_email_option_activer_accuse_label' => 'Accusé de réception',
+	'traiter_email_option_activer_accuse_label_case' => 'Envoyer aussi un courriel à l\'adresse de l\'envoyeur avec un message de confirmation.',
+	'traiter_email_option_destinataires_explication' => 'Choisissez le champ qui correspondra aux destinataires du message.',
+	'traiter_email_option_destinataires_label' => 'Destinataires',
+	'traiter_email_option_destinataires_plus_explication' => 'Une liste d\'adresses séparées par des virgules.',
+	'traiter_email_option_destinataires_plus_label' => 'Destinataires supplémentaires',
+	'traiter_email_option_envoyeur_courriel_explication' => 'Choisissez le champ qui contiendra le courriel de l\'envoyeur.',
+	'traiter_email_option_envoyeur_courriel_label' => 'Courriel de l\'envoyeur',
+	'traiter_email_option_envoyeur_nom_explication' => 'Construisez ce nom à l\'aide des @raccourcis@ (cf. l\'aide mémoire). Si vous ne mettez rien, ce sera le nom du site.',
+	'traiter_email_option_envoyeur_nom_label' => 'Nom de l\'envoyeur',
+	'traiter_email_option_sujet_accuse_label' => 'Sujet de l\'accusé de réception',
+	'traiter_email_option_sujet_explication' => 'Construisez le sujet à l\'aide des @raccourcis@. Si vous ne mettez rien, le sujet sera construit automatiquement.',
+	'traiter_email_option_sujet_label' => 'Sujet du message',
+	'traiter_email_option_vrai_envoyeur_explication' => 'Certains serveurs SMTP ne permettent pas d\'utiliser un courriel arbitraire pour le champ "From". Pour cette raison Formidable insère par défaut le courriel de l\'envoyeur dans le champ "Reply-To". Cocher ici pour insèrer le courriel dans le champ "From".',
+	'traiter_email_option_vrai_envoyeur_label' => 'Insérer le courriel de l\'envoyeur dans le champ "From"',
+	'traiter_email_page' => '<a href="@url@">Depuis cette page</a>.',
+	'traiter_email_sujet' => '@nom@ vous a écrit.',
+	'traiter_email_sujet_accuse' => 'Merci de votre réponse.',
+	'traiter_email_titre' => 'Envoyer par courriel',
+	'traiter_email_url_enregistrement' => 'Vous pouvez gérer les réponses <a href="@url@">sur cette page</a>.',
+	'traiter_enregistrement_description' => 'Enregistre les résultats du formulaire dans la base de données',
+	'traiter_enregistrement_erreur_base' => 'Une erreur technique est survenue durant l\'enregistrement en base de données',
+	'traiter_enregistrement_erreur_deja_repondu' => 'Vous avez déjà répondu à ce formulaire.',
+	'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'La réponse à éditer est introuvable.',
+	'traiter_enregistrement_option_identification_explication' => 'Si les réponses sont modifiables, quel procédé utiliser en priorité pour connaitre la réponse à modifier ?',
+	'traiter_enregistrement_option_identification_label' => 'Identification',
+	'traiter_enregistrement_option_moderation_label' => 'Modération',
+	'traiter_enregistrement_option_modifiable_explication' => 'Les visiteurs pourront-ils modifier leurs réponses après coup ?',
+	'traiter_enregistrement_option_modifiable_label' => 'Réponses modifiables',
+	'traiter_enregistrement_option_multiple_explication' => 'Une même personne peut-elle répondre plusieurs fois au formulaire ?',
+	'traiter_enregistrement_option_multiple_label' => 'Réponses multiples',
+	'traiter_enregistrement_titre' => 'Enregistrer les résultats',
+
+	// V
+	'voir_exporter' => 'Exporter le formulaire',
+	'voir_numero' => 'Formulaire numéro :',
+	'voir_reponses' => 'Voir les réponses',
+	'voir_traitements' => 'Traitements'
+);
+
+?>
diff --git a/formidable_1_0.orig/lang/formidable_it.php b/formidable_1_0.orig/lang/formidable_it.php
new file mode 100644
index 0000000000000000000000000000000000000000..ff9a5c2d040b1d5dfd08c054ddcb744edc6ae40c
--- /dev/null
+++ b/formidable_1_0.orig/lang/formidable_it.php
@@ -0,0 +1,161 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// extrait automatiquement de http://trad.spip.net/tradlang_module/formidable?lang_cible=it
+// ** ne pas modifier le fichier **
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+	// A
+	'analyse_avec_reponse' => 'Risposte non vuote',
+	'analyse_longueur_moyenne' => 'Lunghezza media in numero di parole',
+	'analyse_nb_reponses_total' => '@nb@ personnes ont répondu à ce formulaire.', # NEW
+	'analyse_sans_reponse' => 'Risposte vuote',
+	'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.', # NEW
+	'analyse_zero_reponse_total' => 'Aucune personne n\'a répondu à ce formulaire.', # NEW
+	'aucun_traitement' => 'Aucun traitement', # NEW
+
+	// B
+	'bouton_formulaires' => 'Moduli',
+
+	// C
+	'cfg_analyse_classe_explication' => 'Vous pouvez indiquer des classes CSS qui seront ajoutées
+		sur le conteneur de chaque graphique, tel que <code>gray</code>,<code>blue</code>,
+		<code>orange</code>, <code>green</code> ou tout ce qui vous plairait !', # NEW
+	'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression', # NEW
+	'cfg_titre_page_configurer_formidable' => 'Configurer Formidable', # NEW
+	'cfg_titre_parametrages_analyse' => 'Paramétrages de l\'analyse des réponses', # NEW
+
+	// E
+	'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
+	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+	'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
+	'editer_apres_choix_formulaire' => 'Il modulo, nuovamente',
+	'editer_apres_choix_redirige' => 'Redirigi verso un nuovo indirizzo',
+	'editer_apres_choix_rien' => 'Assolutamente niente',
+	'editer_apres_choix_stats' => 'Les statistiques des réponses', # NEW
+	'editer_apres_choix_valeurs' => 'I valori immessi',
+	'editer_apres_explication' => 'Dopo la validazione, mostra al posto del modulo:',
+	'editer_apres_label' => 'Mostra di seguito',
+	'editer_descriptif' => 'Descrizione',
+	'editer_descriptif_explication' => 'Una spiegazione del modulo destinata allo spazio redazionale.',
+	'editer_identifiant' => 'Identificativo',
+	'editer_identifiant_explication' => 'Fornisci un identificativo testuale unico che ti permetterà di richiamare più facilmente il modulo.',
+	'editer_menu_champs' => 'Configura i campi',
+	'editer_menu_formulaire' => 'Configura il modulo',
+	'editer_menu_traitements' => 'Configura i trattamenti',
+	'editer_message_ok' => 'Messaggio di risposta',
+	'editer_message_ok_explication' => 'Puoi personalizzare il messaggio che sarà mostrato all\'utente dopo l\'invio di un modulo valido.',
+	'editer_modifier_formulaire' => 'Modifica il modulo',
+	'editer_nouveau' => 'Nuovo modulo',
+	'editer_redirige_url' => 'Indirizzo di redirezione dopo la validazione',
+	'editer_redirige_url_explication' => 'Lascia vuoto se desideri restare sulla stessa pagina',
+	'editer_titre' => 'Titolo',
+	'erreur_autorisation' => 'Non hai i permessi per la modifica dei moduli del sito.',
+	'erreur_base' => 'Un problema tecnico si è verificato rurante il salvataggio.',
+	'erreur_generique' => 'Ci sono degli errori nei campi di seguito, si prega di verificare i dati.',
+	'erreur_identifiant' => 'Questo identificativo è già utilizzato.',
+	'erreur_importer_forms' => 'Errore durante l\'importazione del modulo Forms&Tables',
+	'erreur_importer_wcs' => 'Errore durante l\'importazione del modulo W.C.S',
+	'erreur_importer_yaml' => 'Errore durante l\'importazione del modulo YAML',
+	'erreur_inexistant' => 'Il modulo non esiste.',
+
+	// F
+	'formulaires_aucun' => 'Al momento non è presente alcun modulo.',
+	'formulaires_dupliquer' => 'Duplica il modulo',
+	'formulaires_dupliquer_copie' => '(copia)',
+	'formulaires_introduction' => 'Crea e configura qui i moduli del tuo sito.',
+	'formulaires_nouveau' => 'Crea un nuovo modulo',
+	'formulaires_supprimer' => 'Elimina il modulo',
+	'formulaires_supprimer_confirmation' => 'Attenzione, si sta per eliminare anche tutte le risposte. Sei sicuro di voler eliminare il modulo?',
+	'formulaires_tous' => 'Tutti i moduli',
+
+	// I
+	'identification_par_cookie' => 'Con i cookie',
+	'identification_par_id_auteur' => 'con l\'identificativo (id_auteur) dell\'utente autentificato',
+	'importer_formulaire' => 'Importa un modulo',
+	'importer_formulaire_fichier_label' => 'File da importare',
+	'importer_formulaire_format_label' => 'Formato del file',
+
+	// M
+	'modele_label_formulaire_formidable' => 'Quale modulo?',
+	'modele_nom_formulaire' => 'un modulo',
+
+	// N
+	'noisette_label_afficher_titre_formulaire' => 'Mostro il titolo del modulo?',
+	'noisette_label_identifiant' => 'Modulo da mostrare:',
+	'noisette_nom_noisette_formulaire' => 'Modulo',
+
+	// R
+	'reponse_aucune' => 'Aucune réponse', # NEW
+	'reponse_intro' => '@auteur@ ha risposto al modulo @formulaire@',
+	'reponse_numero' => 'Risposta numero:',
+	'reponse_statut' => 'Questa risposta è:',
+	'reponse_supprimer' => 'Elimina questa risposta',
+	'reponse_supprimer_confirmation' => 'Sei sicuro di voler eliminare questa risposta?',
+	'reponse_une' => '1 réponse', # NEW
+	'reponses_analyse' => 'Analisi delle risposte',
+	'reponses_anonyme' => 'Anonimo',
+	'reponses_auteur' => 'Utente',
+	'reponses_exporter' => 'Esporta le risposte',
+	'reponses_ip' => 'Indirizzo IP',
+	'reponses_liste' => 'Elenco delle risposte',
+	'reponses_liste_prop' => 'Risposte in attesa di validazione',
+	'reponses_liste_publie' => 'Tutte le risposte valide',
+	'reponses_nb' => '@nb@ réponses', # NEW
+	'reponses_voir_detail' => 'Vedi la risposta',
+	'retour_aucun_traitement' => 'La risposta è stata correttamente inviata. Grazie :)',
+
+	// T
+	'titre_cadre_raccourcis' => 'Raccourcis', # NEW
+	'traitements_actives' => 'Traitements activés', # NEW
+	'traitements_aide_memoire' => 'Promemoria:',
+	'traitements_avertissement_creation' => 'Le modifiche ai campi del modulo sono state registrate con successo. Ora puoi definire quali trattamenti saranno effettuati all\'atto dell\'invio del modulo.',
+	'traitements_avertissement_modification' => 'La modifiche ai campi del modulo sono state registrate con successo. <strong>Alcuni trattamenti devono forse essere riconfigurati di conseguenza.</strong>',
+	'traitements_champ_aucun' => 'Nessuno',
+	'traiter_email_description' => 'Invia il risultato del modulo per posta a un elenco di destinatari.',
+	'traiter_email_horodatage' => 'Modulo "@formulaire@" inviato il @date@ alle @heure@.',
+	'traiter_email_message_erreur' => 'Si è verificato un errore all\'atto dell\'invio dell\'email.',
+	'traiter_email_message_ok' => 'Il tuo messaggio è stato inviato per posta elettronica.',
+	'traiter_email_option_activer_accuse_label' => 'Conferma di ricezione',
+	'traiter_email_option_activer_accuse_label_case' => 'Invia anche una email all\'indirizzo del mittente con un messaggio di conferma.',
+	'traiter_email_option_destinataires_explication' => 'Scegli il campo che corrisponde al destinatario del messaggio.',
+	'traiter_email_option_destinataires_label' => 'Destinatari',
+	'traiter_email_option_destinataires_plus_explication' => 'Un elenco di indirizzi separati da virgole.',
+	'traiter_email_option_destinataires_plus_label' => 'Destinatari supplementari',
+	'traiter_email_option_envoyeur_courriel_explication' => 'Scegli il campo che contiene l\'indirizzo dell\'utente.',
+	'traiter_email_option_envoyeur_courriel_label' => 'Indirizzo del mittente',
+	'traiter_email_option_envoyeur_nom_explication' => 'Costruisci questo nome grazie all\'aiuto dei @segnaposto@ (vedi il promemoria). Se non inserisci nulla, verrà inserito il nome del sito.',
+	'traiter_email_option_envoyeur_nom_label' => 'Nome del mittente',
+	'traiter_email_option_sujet_accuse_label' => 'Oggetto della conferma di ricezione',
+	'traiter_email_option_sujet_explication' => 'Costruisci l\'oggetto grazie all\'aiuto dei @segnaposto@. Se non inserisci nulla, l\'oggetto verrà generato automaticamente.',
+	'traiter_email_option_sujet_label' => 'Oggetto del messaggio',
+	'traiter_email_option_vrai_envoyeur_explication' => 'Certains serveurs SMTP ne permettent pas d\'utiliser un courriel arbitraire pour le champ "From". Pour cette raison Formidable insère par défaut le courriel de l\'envoyeur dans le champ "Reply-To". Cocher ici pour insèrer le courriel dans le champ "From".', # NEW
+	'traiter_email_option_vrai_envoyeur_label' => 'Insérer le courriel de l\'envoyeur dans le champ "From"', # NEW
+	'traiter_email_page' => '<a href="@url@">Da questa pagina</a>.',
+	'traiter_email_sujet' => '@nom@ ti ha scritto.',
+	'traiter_email_sujet_accuse' => 'Grazie per aver risposto.',
+	'traiter_email_titre' => 'Invia per posta',
+	'traiter_email_url_enregistrement' => 'Puoi gestire le risposte <a href="@url@">su questa pagina</a>.',
+	'traiter_enregistrement_description' => 'Salva i risultati del modulo nella base dati',
+	'traiter_enregistrement_erreur_base' => 'Si è verificato un errore tecnico durante il salvataggio in database',
+	'traiter_enregistrement_erreur_deja_repondu' => 'Hai già risposto a questo modulo.',
+	'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'La risposta da modificare non esiste.',
+	'traiter_enregistrement_option_identification_explication' => 'Se le risposte sono modificabili, quale procedura si dovrà utilizzare in priorità per individuare la risposta da modificare?',
+	'traiter_enregistrement_option_identification_label' => 'Identificazione',
+	'traiter_enregistrement_option_moderation_label' => 'Moderazione',
+	'traiter_enregistrement_option_modifiable_explication' => 'Gli utenti possono modificare le loro risposte dopo aver inviato il modulo?',
+	'traiter_enregistrement_option_modifiable_label' => 'Risposte modificabili',
+	'traiter_enregistrement_option_multiple_explication' => 'Un utente può risposndere più al modulo?',
+	'traiter_enregistrement_option_multiple_label' => 'Risposte multiple',
+	'traiter_enregistrement_titre' => 'Registra i risultati',
+
+	// V
+	'voir_exporter' => 'Esporta il modulo',
+	'voir_numero' => 'Modulo numero:',
+	'voir_reponses' => 'Vedi le risposte',
+	'voir_traitements' => 'Trattamenti'
+);
+
+?>
diff --git a/formidable_1_0.orig/lang/formidable_sk.php b/formidable_1_0.orig/lang/formidable_sk.php
new file mode 100644
index 0000000000000000000000000000000000000000..20f873a5162d815cae54c7c77c6b0e3a6368384d
--- /dev/null
+++ b/formidable_1_0.orig/lang/formidable_sk.php
@@ -0,0 +1,161 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// extrait automatiquement de http://trad.spip.net/tradlang_module/formidable?lang_cible=sk
+// ** ne pas modifier le fichier **
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+	// A
+	'analyse_avec_reponse' => 'Neprázdne odpovede',
+	'analyse_longueur_moyenne' => 'Priemerná dĺžka vyjadrená počtom slov',
+	'analyse_nb_reponses_total' => '@nb@ ľudia odpovedali na tento formulár.',
+	'analyse_sans_reponse' => 'Nevyplnené',
+	'analyse_une_reponse_total' => 'Na tento formulár odpovedal jeden človek.',
+	'analyse_zero_reponse_total' => 'Na tento formulár neodpovedal žiaden človek.',
+	'aucun_traitement' => 'Žiadne spracovanie',
+
+	// B
+	'bouton_formulaires' => 'Formuláre',
+
+	// C
+	'cfg_analyse_classe_explication' => 'Môžete zadať triedy CSS, ktoré budú pridané 
+		na každý graf ako <code>sivý,</code> <code>modrý,</code>
+		<code>oranžový,</code> <code>zelený</code> alebo akýkoľvek iný stĺpec!',
+	'cfg_analyse_classe_label' => 'Trieda CSS stĺpca dokončenia úkonu',
+	'cfg_titre_page_configurer_formidable' => 'Nastaviť Formidable',
+	'cfg_titre_parametrages_analyse' => 'Nastavenia analýzy odpovedí',
+
+	// E
+	'echanger_formulaire_forms_importer' => 'formuláre Forms & Tables (.xml)',
+	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+	'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
+	'editer_apres_choix_formulaire' => 'Formulár, znova',
+	'editer_apres_choix_redirige' => 'Presmerovať na novú adresu',
+	'editer_apres_choix_rien' => 'Vôbec nič',
+	'editer_apres_choix_stats' => 'Štatistiky odpovedí',
+	'editer_apres_choix_valeurs' => 'Zadané hodnoty',
+	'editer_apres_explication' => 'Po potvrdení namiesto formulára zobraziť:',
+	'editer_apres_label' => 'Zobraziť potom',
+	'editer_descriptif' => 'Popis',
+	'editer_descriptif_explication' => 'Vysvetlivka formulára pre súkromnú zónu.',
+	'editer_identifiant' => 'Identifikátor',
+	'editer_identifiant_explication' => 'Zadajte jedinečný textový identifikátor, ktorý vám umožní rýchlo vyvolať formulár.',
+	'editer_menu_champs' => 'Nastaviť polia',
+	'editer_menu_formulaire' => 'Nastaviť formulár',
+	'editer_menu_traitements' => 'Nastaviť funkcie',
+	'editer_message_ok' => 'Správa spätnej väzby',
+	'editer_message_ok_explication' => 'Môžete upraviť správu, ktorá sa používateľovi zobrazí po odoslaní platného formulára.',
+	'editer_modifier_formulaire' => 'Upraviť formulár',
+	'editer_nouveau' => 'Nový formulár',
+	'editer_redirige_url' => 'Adresa presmerovania po potvrdení',
+	'editer_redirige_url_explication' => 'Nevypĺňajte, ak chcete zostať na rovnakej stránke',
+	'editer_titre' => 'Názov',
+	'erreur_autorisation' => 'Na úpravu formulárov na tejto stránke nemáte dostatočné práva.',
+	'erreur_base' => 'Počas ukladania sa vyskytla technická chyba.',
+	'erreur_generique' => 'V týchto poliach sú chyby, prosím, skontrolujte ich pred odoslaním.',
+	'erreur_identifiant' => 'Tento identifikátor sa už používa.',
+	'erreur_importer_forms' => 'Chyba počas nahrávania formulára Forms&Tables',
+	'erreur_importer_wcs' => 'Chyba počas nahrávania formulára W.C.S',
+	'erreur_importer_yaml' => 'Chyba počas nahrávania súboru YAML',
+	'erreur_inexistant' => 'Formulár neexistuje.',
+
+	// F
+	'formulaires_aucun' => 'Momentálne tu nie je žiaden formulár.',
+	'formulaires_dupliquer' => 'Skopírovať formulár',
+	'formulaires_dupliquer_copie' => '(kópia)',
+	'formulaires_introduction' => 'Tu vytvoríte a nastavíte formuláre pre svoju stránku.',
+	'formulaires_nouveau' => 'Vytvoriť nový formulár',
+	'formulaires_supprimer' => 'Odstrániť formulár',
+	'formulaires_supprimer_confirmation' => 'Pozor, takto vymažete všetky výsledky. Určite chcete odstrániť tento formulár?',
+	'formulaires_tous' => 'Všetky formuláre',
+
+	// I
+	'identification_par_cookie' => 'Podľa cookie',
+	'identification_par_id_auteur' => 'Podľa identifikátora (id_auteur) prihláseného človeka',
+	'importer_formulaire' => 'Nahrať formulár',
+	'importer_formulaire_fichier_label' => 'Súbor, ktorý sa má nahrať',
+	'importer_formulaire_format_label' => 'Formát súboru',
+
+	// M
+	'modele_label_formulaire_formidable' => 'Aký formulár?',
+	'modele_nom_formulaire' => 'jeden formulár',
+
+	// N
+	'noisette_label_afficher_titre_formulaire' => 'Zobraziť nadpis formulára?',
+	'noisette_label_identifiant' => 'Formulár, ktorý sa má zobraziť:',
+	'noisette_nom_noisette_formulaire' => 'Formulár',
+
+	// R
+	'reponse_aucune' => 'Žiadna odpoveď',
+	'reponse_intro' => '@auteur@ vyplnil(a) formulár @formulaire@',
+	'reponse_numero' => 'Odpoveď číslo:',
+	'reponse_statut' => 'Táto odpoveď je:',
+	'reponse_supprimer' => 'Odstrániť túto odpoveď',
+	'reponse_supprimer_confirmation' => 'Určite chcete vymazať túto odpoveď?',
+	'reponse_une' => '1 odpoveď',
+	'reponses_analyse' => 'Analýza odpovedí',
+	'reponses_anonyme' => 'Anonym',
+	'reponses_auteur' => 'Používateľ',
+	'reponses_exporter' => 'Exportovať odpovede',
+	'reponses_ip' => 'IP adresa',
+	'reponses_liste' => 'Zoznam odpovedí',
+	'reponses_liste_prop' => 'Odpovede čakajúce na potvrdenie',
+	'reponses_liste_publie' => 'Všetky platné odpovede',
+	'reponses_nb' => '@nb@ odpovedí',
+	'reponses_voir_detail' => 'Zobraziť odpoveď',
+	'retour_aucun_traitement' => 'Vaša odpoveď bola odoslaná, ale k tomuto formuláru nebola definovaná žiadna funkcia. Nič neurobí. :-)',
+
+	// T
+	'titre_cadre_raccourcis' => 'Skratky',
+	'traitements_actives' => 'Aktívne spracovanie',
+	'traitements_aide_memoire' => 'Pomocná pamäť:',
+	'traitements_avertissement_creation' => 'Zmeny polí formulára boli úspešne uložené. Teraz môžete určiť, aké funkcie sa použijú pri spracúvaní formulára.',
+	'traitements_avertissement_modification' => 'Zmeny v poliach formulára boli úspešne uložené. <strong>Niektoré funkcie možno budú musieť byť kvôli ním prestavené.</strong>',
+	'traitements_champ_aucun' => 'Žiadne',
+	'traiter_email_description' => 'Výstup z formulára odošle na e-mailové adresy príjemcov.',
+	'traiter_email_horodatage' => 'Formulár "@formulaire@" odoslaný @date@ o @heure@.',
+	'traiter_email_message_erreur' => 'Pri odosielaní e-mailu sa vyskytla chyba.',
+	'traiter_email_message_ok' => 'Vaša správa bola odoslaná.',
+	'traiter_email_option_activer_accuse_label' => 'Potvrdenie o prijatí správy',
+	'traiter_email_option_activer_accuse_label_case' => 'Poslať e-mail aj na adresu odosielateľa so žiadosťou o potvrdenie.',
+	'traiter_email_option_destinataires_explication' => 'Vyberte si pole, v ktorom budú príjemcovia správy.',
+	'traiter_email_option_destinataires_label' => 'Príjemcovia',
+	'traiter_email_option_destinataires_plus_explication' => 'Zoznam adries oddelený čiarkami.',
+	'traiter_email_option_destinataires_plus_label' => 'Ďalší príjemcovia',
+	'traiter_email_option_envoyeur_courriel_explication' => 'Vyberte si pole, ktoré bude obsahovať e-mailovú adresu odosielateľa.',
+	'traiter_email_option_envoyeur_courriel_label' => 'E-mail odosielateľa',
+	'traiter_email_option_envoyeur_nom_explication' => 'Vytvorte názov pomocou @raccourcis@ (prečítajte si pomocníka). Ak neurobíte nič, bude tým názvom názov stránky.',
+	'traiter_email_option_envoyeur_nom_label' => 'Meno odosielateľa',
+	'traiter_email_option_sujet_accuse_label' => 'Predmet potvrdenia o prijatí',
+	'traiter_email_option_sujet_explication' => 'Vytvorte predmet pomocou @raccourcis@. Ak neurobíte nič, predmet bude vytvorený automaticky.',
+	'traiter_email_option_sujet_label' => 'Predmet správy',
+	'traiter_email_option_vrai_envoyeur_explication' => 'Niektoré servery SMTP neumožňujú používať ľubovoľný e-mail pre pole "From" (Od koho). Z tohto dôvodu Formidable podľa predvolených nastavení vkladá e-mail odosielateľa do poľa "Reply-To". Ak chcete, aby bol vložený do poľa "From", zaškrtnite túto možnosť tu.',
+	'traiter_email_option_vrai_envoyeur_label' => 'Vložiť e-mail odosielateľa do poľa "From" (= "Od koho")',
+	'traiter_email_page' => '<a href="@url@">Z tejto stránky.</a>',
+	'traiter_email_sujet' => '@nom@ vám napísal(a).',
+	'traiter_email_sujet_accuse' => 'Ďakujeme vám za odpoveď.',
+	'traiter_email_titre' => 'Poslať e-mailom',
+	'traiter_email_url_enregistrement' => 'Riadiť odpovede môžete <a href="@url@">na tejto stránke.</a>',
+	'traiter_enregistrement_description' => 'Uloží výsledky z formulára do databázy',
+	'traiter_enregistrement_erreur_base' => 'Počas ukladania do databázy sa vyskytla technická chyba',
+	'traiter_enregistrement_erreur_deja_repondu' => 'Tento formulár ste už vyplnili.',
+	'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'Odpoveď, ktorú chcete upraviť, sa nedá nájsť.',
+	'traiter_enregistrement_option_identification_explication' => 'Ak sa odpovede dajú upraviť, aký spôsob sa použije ako prvý, aby sa zistilo, či sa odpoveď menila?',
+	'traiter_enregistrement_option_identification_label' => 'Identifikácia',
+	'traiter_enregistrement_option_moderation_label' => 'Kontrola',
+	'traiter_enregistrement_option_modifiable_explication' => 'Môžu návštevníci potom upraviť svoje odpovede?',
+	'traiter_enregistrement_option_modifiable_label' => 'Odpovede, ktoré sa dajú upraviť',
+	'traiter_enregistrement_option_multiple_explication' => 'Môže ten istý človek odpovedať na formulár viackrát?',
+	'traiter_enregistrement_option_multiple_label' => 'Duplicitné odpovede',
+	'traiter_enregistrement_titre' => 'Uložiť výsledky',
+
+	// V
+	'voir_exporter' => 'Exportovať formulár',
+	'voir_numero' => 'Formulár číslo:',
+	'voir_reponses' => 'Zobraziť odpovede',
+	'voir_traitements' => 'Funkcie'
+);
+
+?>
diff --git a/formidable_1_0.orig/lang/formulaire_fr.php b/formidable_1_0.orig/lang/formulaire_fr.php
new file mode 100644
index 0000000000000000000000000000000000000000..f6663cd9e6c1752f8d4d946922f67047ac4232af
--- /dev/null
+++ b/formidable_1_0.orig/lang/formulaire_fr.php
@@ -0,0 +1,18 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+	// I
+	'icone_creer_formulaire' => 'Créer un nouveau formulaire',
+
+	// M
+	'modifier_formulaire' => 'Modifier ce formulaire',
+
+	// T
+	'titre_formulaires' => 'Formulaires',
+	'titre_logo_formulaire' => 'Logo de ce formulaire',
+	'titre_formulaire' => 'Formulaire',
+
+);
diff --git a/formidable_1_0.orig/lang/formulaires_reponse_fr.php b/formidable_1_0.orig/lang/formulaires_reponse_fr.php
new file mode 100644
index 0000000000000000000000000000000000000000..108f4e2a5c6d26cdab7f2c37c7a17471a34ce1de
--- /dev/null
+++ b/formidable_1_0.orig/lang/formulaires_reponse_fr.php
@@ -0,0 +1,27 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+	// I
+	'icone_creer_formulaire' => 'Créer une nouvelle réponse de formulaire',
+
+	// M
+	'modifier_formulaire' => 'Modifier cette réponse de formulaire',
+
+	'changer_statut' => 'Cette réponse de formulaire est :',
+
+	// F
+	'formulaires_reponse_numero' => 'Réponse de formulaire n°@nb@',
+
+	// R
+	'reponses_donnees' => 'Réponses données :',
+
+	// T
+	'titre_formulaires_reponses' => 'Réponses de formulaire',
+	'titre_logo_formulaires_reponse' => 'Logo de cette réponse de formulaire',
+	'titre_formulaires_reponse' => 'Réponse de formulaire',
+
+
+);
diff --git a/formidable_1_0.orig/lang/paquet-formidable_fr.php b/formidable_1_0.orig/lang/paquet-formidable_fr.php
new file mode 100644
index 0000000000000000000000000000000000000000..972823924062859af7fd4dbf5e6c93d52b3e97a5
--- /dev/null
+++ b/formidable_1_0.orig/lang/paquet-formidable_fr.php
@@ -0,0 +1,19 @@
+<?php
+
+// Ceci est un fichier langue de SPIP -- This is a SPIP language file
+
+///  Fichier produit par PlugOnet
+// Module: paquet-formidable
+// Langue: fr
+// Date: 05-09-2012 18:51:15
+// Items: 2
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+// F
+	'formidable_description' => 'Création de formulaires avec une interface graphique et configuration des traitements associés (envoyer par courriel, enregistrer les réponses, etc).',
+	'formidable_slogan' => 'Générateur de formulaires',
+);
+?>
\ No newline at end of file
diff --git a/formidable_1_0.orig/modeles/formulaire_aide_memoire.html b/formidable_1_0.orig/modeles/formulaire_aide_memoire.html
new file mode 100644
index 0000000000000000000000000000000000000000..c1747f7741badff0c10f274f428dfc7f96fc0198
--- /dev/null
+++ b/formidable_1_0.orig/modeles/formulaire_aide_memoire.html
@@ -0,0 +1,17 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+	<strong><:formidable:traitements_aide_memoire:></strong>
+	<dl>
+		<dt>@nom_site_spip@</dt>
+		<dd><:info_nom_site:></dd>
+	</dl>
+	
+	<BOUCLE_champs(POUR){tableau #SAISIES*|unserialize|saisies_lister_par_nom{0}}>
+	[(#SET{label, [(#VALEUR|table_valeur{options}|table_valeur{label})]})]
+	[(#SET{label_case, [(#VALEUR|table_valeur{options}|table_valeur{label_case})]})]
+	
+	<dl>
+		<dt>@#CLE@</dt>
+		[<dd>(#GET{label}|sinon{#GET{label_case}})</dd>]
+	</dl>
+	</BOUCLE_champs>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/modeles/formulaire_analyse.html b/formidable_1_0.orig/modeles/formulaire_analyse.html
new file mode 100644
index 0000000000000000000000000000000000000000..07a3821795cc52cb2469b1b4a8c5e3f59aa149bb
--- /dev/null
+++ b/formidable_1_0.orig/modeles/formulaire_analyse.html
@@ -0,0 +1,65 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<div class='formidable_analyse'>
+[(#REM) On fait un tableau qui contient toutes les réponses, classées par champ ]
+#SET{valeurs,#ARRAY}
+#SET{reponses_total,0}
+<BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire}>
+<BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}{nom ?= #ENV{nom}>
+#SET_MERGE{liste_valeurs, #GET{valeurs}|table_valeur{#NOM}|sinon{#ARRAY}, #ARRAY{0,#VALEUR|tenter_unserialize}}
+#SET_MERGE{valeurs, #ARRAY{#NOM,#GET{liste_valeurs}}}
+</BOUCLE_champs>
+</BOUCLE_reponses>
+#SET{reponses_total,#TOTAL_BOUCLE}
+<strong class='nombre_reponse'>
+	[(#TOTAL_BOUCLE|singulier_ou_pluriel{formidable:reponse_une,formidable:reponses_nb})]
+</strong>
+</B_reponses>
+	<strong class='nombre_reponse'><:formidable:reponse_aucune:></strong>
+<//B_reponses>
+
+<BOUCLE_saisies(POUR){tableau #SAISIES|unserialize|saisies_lister_par_nom}>
+[(#VAL{saisie}|array_key_exists{#VALEUR}|oui)
+  [(#CLE|=={#ENV{nom,#CLE}}|oui)
+	[(#VALEUR|formidable_analyser_saisie{#GET{valeurs}, #GET{reponses_total}})]
+  ]
+]
+</BOUCLE_saisies>
+
+</div><!-- formidable_analyse -->
+<script type='text/javascript'>
+(function($){
+$(document).ready(function(){
+	/* Récupérer tous les tableaux d'analyse non décorés */
+	$('.formidable_analyse table:not(.stat_done)').each(function() {
+		$(this).addClass('stat_done');
+		/* Le tableau contient le nombre total d'élément. On parcours chaque valeur */
+		$nbtotal = $(this).data('nombre');
+		$(this).find('td.stat').each(function(){
+			$val = $(this).html();
+			/* Certaines valeurs sont a ignorer (les moyennes) */
+			$ignore = $(this).is('.ignore');
+			if (!$ignore) {
+				/* Calcul du pourcentage */
+				$taux = Math.round($val/$nbtotal*100);
+				/* On affiche le nombre de réponses */
+				$reponses = $(this).attr('title');
+				if (!parseInt($val) || ($reponses === undefined)) {
+					$reponses = '';
+				} else {
+					$reponses = "<small> - " + $reponses + "</small>";
+				}
+				$text = "\
+				<div class='[(#CONFIG{formidable/analyse/classe}) ]progress-bar'>\
+					<span></span><strong>" + $taux + "%" + $reponses + "</strong>\
+				</div>";
+				$(this).html($text).find('span').width($taux + '%');
+			}
+		});
+	});
+});
+})(jQuery);
+</script>
+<style type='text/css'>
+<INCLURE{fond=css/formidable_analyse.css} />
+</style>
+</BOUCLE_formulaire>
\ No newline at end of file
diff --git a/formidable_1_0.orig/modeles/formulaire_formidable.yaml b/formidable_1_0.orig/modeles/formulaire_formidable.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..79dc4e9d525690a7eb9c562ffbaa2fa34b199846
--- /dev/null
+++ b/formidable_1_0.orig/modeles/formulaire_formidable.yaml
@@ -0,0 +1,20 @@
+nom: '<:formidable:modele_nom_formulaire:>'
+logo: 'images/formulaire-24.png'
+icone_barre: 'formulaire.png'
+parametres:
+  -
+    saisie: 'hidden'
+    options:
+      nom: 'modele'
+      defaut: 'formulaire'
+  -
+    saisie: 'hidden'
+    options:
+      nom: 'variante'
+      defaut: 'formidable'
+  -
+    saisie: 'formulaire_formidable'
+    options:
+      nom: 'id'
+      label: '<:formidable:modele_label_formulaire_formidable:>'
+      cacher_option_intro: 'oui'
\ No newline at end of file
diff --git a/formidable_1_0.orig/modeles/formulaires_reponse.html b/formidable_1_0.orig/modeles/formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..02d78a07e3d3fd7d6663d062eb5a92aa0b3caa5b
--- /dev/null
+++ b/formidable_1_0.orig/modeles/formulaires_reponse.html
@@ -0,0 +1,12 @@
+<BOUCLE_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
+
+#SET{valeurs,#ARRAY}
+<BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}>
+#SET_MERGE{valeurs,#ARRAY{#NOM,#VALEUR|tenter_unserialize}}
+</BOUCLE_champs>
+
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+#VOIR_SAISIES{(#SAISIES|unserialize), #GET{valeurs}}
+</BOUCLE_formulaire>
+
+</BOUCLE_reponse>
diff --git a/formidable_1_0.orig/noisettes/formulaire_formidable.html b/formidable_1_0.orig/noisettes/formulaire_formidable.html
new file mode 100644
index 0000000000000000000000000000000000000000..95f7a4c6312505c90c310c77e6286f78d91d425f
--- /dev/null
+++ b/formidable_1_0.orig/noisettes/formulaire_formidable.html
@@ -0,0 +1,2 @@
+<BOUCLE_formulaire(FORMULAIRES){identifiant}{0,1}>[(#ENV{afficher_titre_formulaire}|oui)[<h2 class="h2">(#TITRE|typo)</h2>]]</BOUCLE_formulaire>
+<div class="ajax">#FORMULAIRE_FORMIDABLE{#ENV{identifiant}}</div>
\ No newline at end of file
diff --git a/formidable_1_0.orig/noisettes/formulaire_formidable.yaml b/formidable_1_0.orig/noisettes/formulaire_formidable.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..dd6679c0c123ebbf4a044d5335c30317f7dcfeb3
--- /dev/null
+++ b/formidable_1_0.orig/noisettes/formulaire_formidable.yaml
@@ -0,0 +1,15 @@
+nom: '<:formidable:noisette_nom_noisette_formulaire:>'
+icon: 'images/formulaire-24.png'
+parametres:
+  -
+    saisie: 'formulaire_formidable'
+    options:
+      nom: 'identifiant'
+      label: '<:formidable:noisette_label_identifiant:>'
+      cacher_option_intro: 'oui'
+  -
+    saisie: 'oui_non'
+    options:
+      nom: 'afficher_titre_formulaire'
+      label: '<:formidable:noisette_label_afficher_titre_formulaire:>'
+      defaut: ''
\ No newline at end of file
diff --git a/formidable_1_0.orig/notifications/formulaire_accuse.html b/formidable_1_0.orig/notifications/formulaire_accuse.html
new file mode 100644
index 0000000000000000000000000000000000000000..559a130ca7f0d36b2bd06a168306c4b7e3606e6c
--- /dev/null
+++ b/formidable_1_0.orig/notifications/formulaire_accuse.html
@@ -0,0 +1,7 @@
+
+[(#ENV*{message_retour}|propre)]
+
+#VOIR_SAISIES{#ENV*{saisies}, #ENV*{valeurs}}
+
+---
+<p><:envoi_via_le_site:> <a href="#URL_SITE_SPIP">#NOM_SITE_SPIP</a></p>
diff --git a/formidable_1_0.orig/notifications/formulaire_email.html b/formidable_1_0.orig/notifications/formulaire_email.html
new file mode 100644
index 0000000000000000000000000000000000000000..9f3b5e939e7db8e029842442180f1c38dc767b07
--- /dev/null
+++ b/formidable_1_0.orig/notifications/formulaire_email.html
@@ -0,0 +1,18 @@
+
+<p>
+	#SET{date, #VAL{d/m/Y}|date}
+	#SET{heure, #VAL{H:i:s}|date}
+	<:formidable:traiter_email_horodatage{formulaire=#ENV*{titre}, date=#GET{date}, heure=#GET{heure}}:>
+	<br/>
+	#SET{url, #SELF{&,true}|url_absolue}
+	<:formidable:traiter_email_page{url=#GET{url}}:>
+</p>
+
+#VOIR_SAISIES{#ENV*{saisies}, #ENV*{valeurs}}
+
+---
+<p><:envoi_via_le_site:> <a href="#URL_SITE_SPIP">#NOM_SITE_SPIP</a></p>
+[(#ENV*{traitements}|table_valeur{enregistrement}|oui)
+#SET{url, #URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire, #ENV{id_formulaire}}|url_absolue}
+<p><:formidable:traiter_email_url_enregistrement{url=#GET{url}}:></p>
+]
diff --git a/formidable_1_0.orig/paquet.xml b/formidable_1_0.orig/paquet.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0221d330f02b01b4118e6dd3c40df410d65b2ac9
--- /dev/null
+++ b/formidable_1_0.orig/paquet.xml
@@ -0,0 +1,35 @@
+<paquet
+	prefix="formidable"
+	categorie="communication"
+	version="1.3.5"
+	etat="dev"
+	compatibilite="[3.0.0-dev;3.0.99]"
+	logo="images/formidable-64.png"
+	schema="0.5.1"
+	documentation="http://www.spip-contrib.net/Formidable-le-generateur-de"
+>
+
+	<nom>Formidable</nom>
+	<!-- Générateur de formulaires -->
+
+	<auteur>RastaPopoulos</auteur>
+	<auteur lien="http://www.ldd.fr">Les Développements Durables</auteur>
+
+	<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
+
+	<pipeline nom="autoriser" inclure="formidable_autorisations.php" />
+	<pipeline nom="declarer_tables_objets_sql" inclure="base/formidable_tables.php" />
+	<pipeline nom="declarer_tables_principales" inclure="base/formidable_tables.php" />
+	<pipeline nom="declarer_tables_auxiliaires" inclure="base/formidable_tables.php" />
+	<pipeline nom="declarer_tables_interfaces" inclure="base/formidable_tables.php" />
+
+	<pipeline nom="optimiser_base_disparus" inclure="formidable_pipelines.php" />
+
+	<necessite nom="spip_bonux" compatibilite="[1.9.3;[" />
+	<necessite nom="saisies" compatibilite="[1.10.1;[" />
+	<necessite nom="verifier" compatibilite="[0.1;[" />
+	<necessite nom="yaml" compatibilite="[1.1;[" />
+	<necessite nom="facteur" compatibilite="[1.5.3;[" />
+
+	<menu nom="formulaires" titre="formidable:bouton_formulaires" parent="menu_edition" icone="images/formulaire-16.png" />
+</paquet>
diff --git a/formidable_1_0.orig/prive/objets/contenu/formulaire.html b/formidable_1_0.orig/prive/objets/contenu/formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..e22434c69dfac50a1b60cd32d7aa12e32db7dc75
--- /dev/null
+++ b/formidable_1_0.orig/prive/objets/contenu/formulaire.html
@@ -0,0 +1,6 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<div class="champ contenu_descriptif[ (#DESCRIPTIF*|strlen|?{'',vide})]">
+	<div class='label'><:info_descriptif:></div>
+	<div dir='#LANG_DIR' class='#EDIT{descriptif} descriptif'>[(#DESCRIPTIF|image_reduire{500,0})]</div>
+</div>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/objets/contenu/formulaires_reponse.html b/formidable_1_0.orig/prive/objets/contenu/formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..30bccf4ef067e934ee5b7abd4d74fc8f881c9fc5
--- /dev/null
+++ b/formidable_1_0.orig/prive/objets/contenu/formulaires_reponse.html
@@ -0,0 +1,27 @@
+<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
+<div class="champ contenu_auteur[ (#ID_AUTEUR*|strlen|?{'',vide})]">
+	<div class='label'><:auteur:></div>
+	<div dir='#LANG_DIR'>
+		[(#ID_AUTEUR|>{0}|oui)
+			<a href="[(#INFO_URL{auteur,#ID_AUTEUR})]">[(#INFO_TITRE{auteur,#ID_AUTEUR})]</a>
+		]
+		[(#ID_AUTEUR|>{0}|non)
+			<:formidable:reponses_anonyme:>
+		]
+	</div>
+</div>
+<div class="champ contenu_formulaire[ (#ID_FORMULAIRE*|strlen|?{'',vide})]">
+	<div class='label'><:formulaire:titre_formulaire:></div>
+	<div dir='#LANG_DIR'>
+		<a href="[(#URL_ECRIRE{formulaire,id_formulaire=#ID_FORMULAIRE})]">
+			[(#INFO_TITRE{formulaire,#ID_FORMULAIRE})]
+		</a>
+	</div>
+</div>
+<div class="champ contenu_date[ (#DATE*|strlen|?{'',vide})]">
+	<div class='label'><:date:></div>
+	<div dir='#LANG_DIR'>
+		[(#DATE|affdate_jourcourt|concat{#DATE|affdate{", H:i"}})]
+	</div>
+</div>
+</BOUCLE_formulaires_reponse>
diff --git a/formidable_1_0.orig/prive/objets/infos/formulaire.html b/formidable_1_0.orig/prive/objets/infos/formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..59afec02b69564fa14fa62686648e9f3bdf3422b
--- /dev/null
+++ b/formidable_1_0.orig/prive/objets/infos/formulaire.html
@@ -0,0 +1,6 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire=#ENV{id}}{statut?}>
+<div class='infos'>
+<div class='numero'><:formidable:voir_numero:><p>#ID_FORMULAIRE</p></div>
+
+</div>
+</BOUCLE_formulaire>
\ No newline at end of file
diff --git a/formidable_1_0.orig/prive/objets/infos/formulaires_reponse.html b/formidable_1_0.orig/prive/objets/infos/formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..049084278c8822e367faf7aef86b4e2bc6d7c202
--- /dev/null
+++ b/formidable_1_0.orig/prive/objets/infos/formulaires_reponse.html
@@ -0,0 +1,8 @@
+<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){id_formulaires_reponse=#ENV{id}}{statut?}>
+<div class='infos'>
+<div class='numero'><:formidable:reponse_numero:><p>#ID_FORMULAIRES_REPONSE</p></div>
+
+[(#FORMULAIRE_INSTITUER_OBJET{formulaires_reponses,#ID_FORMULAIRES_REPONSE})]
+
+</div>
+</BOUCLE_formulaires_reponse>
\ No newline at end of file
diff --git a/formidable_1_0.orig/prive/objets/liste/formulaires.html b/formidable_1_0.orig/prive/objets/liste/formulaires.html
new file mode 100644
index 0000000000000000000000000000000000000000..f2a809838c5e2149c80f42e986bd726f12fa5cd6
--- /dev/null
+++ b/formidable_1_0.orig/prive/objets/liste/formulaires.html
@@ -0,0 +1,45 @@
+[(#SET{defaut_tri,#ARRAY{
+	date,-1,
+	titre,1,
+	id_formulaire,1
+}})
+]<B_formulaires>
+#ANCRE_PAGINATION
+<div class="liste-objets formulaires">
+<table class="spip liste">
+[<caption><strong class="caption">(#ENV*{titre})</strong></caption>]
+	<thead>
+		<tr class="first_row">
+			<th class="id_formulaire id" scope='col'>[(#TRI{id_formulaire,<span>#</span>,ajax})]</th>
+			<th class="titre" scope='col'>[(#TRI{titre,<:formidable:editer_titre:>,ajax})]</th>
+			<th class="identifiant" scope='col'>[(#TRI{identifiant,<:formidable:editer_identifiant:>,ajax})]</th>
+			<th class="action" scope='col'></th>
+		</tr>
+	</thead>
+	<tbody>
+	<BOUCLE_formulaires(FORMULAIRES){statut?}{tri #ENV{order,titre},#GET{defaut_tri}}{pagination #ENV{nb,10}}>
+		<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})][ (#EXPOSE|unique)]">
+			<td class="id_formulaire"><:info_numero_abbreviation:>#ID_FORMULAIRE</td>
+			<td class="titre"><a href="[(#ID_FORMULAIRE|generer_url_entite{formulaire})]">#TITRE</a></td>
+			<td class="identifiant">#IDENTIFIANT</td>
+			<td class="action">
+				[(#AUTORISER{editer, formulaire}|oui)
+					[(#BOUTON_ACTION{[(#CHEMIN_IMAGE{formulaire-dupliquer-24.png}
+						|balise_img{<:formidable:formulaires_dupliquer:>})],
+						#URL_ACTION_AUTEUR{dupliquer_formulaire, #ID_FORMULAIRE},link})]
+				]
+				[(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui)
+					[(#BOUTON_ACTION{[(#CHEMIN_IMAGE{formulaire-supprimer-24.png}
+						|balise_img{<:formidable:formulaires_supprimer:>})],
+						#URL_ACTION_AUTEUR{supprimer_formulaire, #ID_FORMULAIRE},link,<:formidable:formulaires_supprimer_confirmation:>})]
+				]
+			</td>
+		</tr>
+	</BOUCLE_formulaires>
+	</tbody>
+</table>
+[<p class="pagination">(#PAGINATION{prive})</p>]
+</div>
+</B_formulaires>[
+<div class="liste-objets formulaires"><strong class="caption">(#ENV*{sinon,<:formidable:formulaires_aucun:>})</strong></div>
+]<//B_formulaires>
diff --git a/formidable_1_0.orig/prive/objets/liste/formulaires_reponses.html b/formidable_1_0.orig/prive/objets/liste/formulaires_reponses.html
new file mode 100644
index 0000000000000000000000000000000000000000..9d310c092c53ed7126cb70283b4d2a9cc5fddd2f
--- /dev/null
+++ b/formidable_1_0.orig/prive/objets/liste/formulaires_reponses.html
@@ -0,0 +1,48 @@
+[(#SET{defaut_tri,#ARRAY{
+	date,-1,
+	titre,1,
+	id_formulaires_reponse,1
+}})
+]<B_reponses>
+[(#BOITE_OUVRIR{'','simple'})]
+#ANCRE_PAGINATION
+<div class="liste-objets formulaires_reponses">
+<table class="liste spip">
+[<caption><strong class="caption">(#ENV*{titre})</strong></caption>]
+	<thead>
+		<tr class="first_row">
+			<th class="statut" scope='col'>[(#TRI{statut,<span>#</span>,ajax})]</th>
+			<th class="date" scope='col'>[(#TRI{date,<:date:>,ajax})]</th>
+			<th class="auteur" scope='col'>[(#TRI{id_auteur,<:formidable:reponses_auteur:>,ajax})]</th>
+			<th class="ip" scope='col'>[(#TRI{ip,<:formidable:reponses_ip:>,ajax})]</th>
+			<th class="action" scope='col'></th>
+		</tr>
+	</thead>
+	<tbody>
+	<BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire}{id_auteur?}{statut?}{tri #ENV{order,date},#GET{defaut_tri}}{pagination #ENV{nb,10}}>
+		<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
+			<td class="statut">[(#ID_FORMULAIRES_REPONSE|puce_changement_statut{#STATUT, #ID_FORMULAIRE, formulaires_reponse})]</td>
+			<td class="date">[(#DATE|affdate_jourcourt|concat{#DATE|affdate{", H:i"}})]</td>
+			<td class="auteur">
+				<BOUCLE_auteur(AUTEURS){id_auteur}{tout}>
+				<a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">#NOM</a>
+				</BOUCLE_auteur>
+				<:formidable:reponses_anonyme:>
+				<//B_auteur>
+			</td>
+			<td class="ip">#IP</td>
+			<td class="action">
+				<a href="[(#URL_ECRIRE{formulaires_reponse}|parametre_url{id_formulaires_reponse,#ID_FORMULAIRES_REPONSE})]" title="<:formidable:reponses_voir_detail:>">
+					<img src="#CHEMIN{images/formulaire-reponse-24.png}" alt="<:formidable:reponses_voir_detail:>" />
+				</a>
+			</td>
+		</tr>
+	</BOUCLE_reponses>
+	</tbody>
+</table>
+[<p class="pagination">(#PAGINATION{prive})</p>]
+</div>
+#BOITE_FERMER
+</B_reponses>[
+<div class="liste-objets formulaires_reponses"><strong class="caption">(#ENV*{sinon,''})</strong></div>
+]<//B_reponses>
diff --git a/formidable_1_0.orig/prive/squelettes/contenu/configurer_formidable.html b/formidable_1_0.orig/prive/squelettes/contenu/configurer_formidable.html
new file mode 100644
index 0000000000000000000000000000000000000000..df8aa01100455662cb456bd844f7467ca1667c96
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/contenu/configurer_formidable.html
@@ -0,0 +1,7 @@
+[(#AUTORISER{configurer,_fsondage}|sinon_interdire_acces)]
+
+<h1 class="grostitre"><:formidable:cfg_titre_page_configurer_formidable:></h1>
+
+<div class="ajax">
+	#FORMULAIRE_CONFIGURER_FORMIDABLE_ANALYSE
+</div>
diff --git a/formidable_1_0.orig/prive/squelettes/contenu/formulaire.html b/formidable_1_0.orig/prive/squelettes/contenu/formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..6a19dc7d4fba3800944f255a8533e0bb71170431
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/contenu/formulaire.html
@@ -0,0 +1,35 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+[(#BOITE_OUVRIR{
+	[(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui)
+		[(#URL_ECRIRE{formulaire_edit,id_formulaire=#ID_FORMULAIRE}
+			|icone_verticale{<:formidable:editer_modifier_formulaire:>,formulaire,formulaire-editer-24,right})]
+	]
+	[<h1>(#TITRE|sinon{<:info_sans_titre:>})[(#CHEMIN_IMAGE{formulaire-24.png}|balise_img{formulaire,cadre-icone})]</h1>]
+,simple fiche_objet})]
+
+
+<!--affiche_milieu-->
+
+<div id="wysiwyg">
+<INCLURE{fond=prive/objets/contenu/formulaire,id=#ID_FORMULAIRE,id_formulaire=#ID_FORMULAIRE,virtuel=oui,ajax=wysiwyg,wysiwyg=1}>
+</div>
+
+	#SET{traitements_disponibles, #VAL|traitements_lister_disponibles}
+	[(#BOITE_OUVRIR{#CHEMIN_IMAGE{formulaire-config-traitements-24.png}
+		|balise_img{'',cadre-icone}
+		|concat{<:formidable:traitements_actives:>},'simple traitements'})]
+	<B_traitements>
+		<ul class='spip'>
+			<BOUCLE_traitements(POUR){tableau #TRAITEMENTS|unserialize|sinon{#ARRAY}}>
+				<li>[(#GET{traitements_disponibles}|table_valeur{#CLE}|table_valeur{titre})]</li>
+			</BOUCLE_traitements>
+		</ul>
+	</B_traitements>
+		<p><:formidable:aucun_traitement:></p>
+	<//B_traitements>
+	#BOITE_FERMER
+
+	#FORMULAIRE_FORMIDABLE{#ID_FORMULAIRE}
+
+#BOITE_FERMER
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/contenu/formulaire_edit.html b/formidable_1_0.orig/prive/squelettes/contenu/formulaire_edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..b3eedd0b25b1715249aa62bb40ad4d86e46eb0d0
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/contenu/formulaire_edit.html
@@ -0,0 +1,38 @@
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{editer, formulaire}}>
+[(#BOITE_OUVRIR{'','info'})]
+<script type="text/javascript">/*<![CDATA[*/
+if (window.jQuery){
+function debloquer_prive(){ jQuery('input[required], textarea[required], select[required]').removeAttr('required'); }
+jQuery('document').ready(debloquer_prive);
+onAjaxLoad(debloquer_prive);
+}
+/*]]>*/</script>
+		<BOUCLE_formulaire(FORMULAIRES){id_formulaire=#VAL{id_formulaire}|_request}>
+			[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})]
+
+			<h4><:formidable:editer_modifier_formulaire:></h4>
+			<h1>#TITRE</h1>
+			
+			#SET{configurer,#ENV{configurer}|in_array{#ARRAY{0,formulaire,1,champs,2,traitements}}|?{#ENV{configurer},champs}}
+		</BOUCLE_formulaire>
+		[(#URL_ECRIRE{formulaires}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})]
+			
+			<:formidable:editer_modifier_formulaire:>
+			<h1>
+				[(#ENV{nouveau}|=={oui}|?{<:formidable:editer_nouveau:>,#VAL{id_menu}|_request})]
+			</h1>
+			
+			#SET{configurer,formulaire}
+		<//B_formulaire>
+	
+	[(#GET{configurer}|=={formulaire}|oui)
+		#FORMULAIRE_EDITER_FORMULAIRE{#VAL{id_formulaire}|_request|sinon{0}, #VAL{nouveau}|_request|sinon{''}}
+	]
+	[(#GET{configurer}|=={champs}|oui)
+		#FORMULAIRE_EDITER_FORMULAIRE_CHAMPS{#ENV{id_formulaire}}
+	]
+	[(#GET{configurer}|=={traitements}|oui)
+		#FORMULAIRE_EDITER_FORMULAIRE_TRAITEMENTS{#ENV{id_formulaire}}
+	]
+#BOITE_FERMER
+</BOUCLE_autoriser>
diff --git a/formidable_1_0.orig/prive/squelettes/contenu/formulaires.html b/formidable_1_0.orig/prive/squelettes/contenu/formulaires.html
new file mode 100644
index 0000000000000000000000000000000000000000..f655ed305d33dc0a612ea820b529ccab1c0abac7
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/contenu/formulaires.html
@@ -0,0 +1,13 @@
+[(#BOITE_OUVRIR{
+	<h1><:formidable:bouton_formulaires:></h1>
+	<p><:formidable:formulaires_introduction:></p>
+})]
+#BOITE_FERMER
+
+<INCLURE{fond=prive/objets/liste/formulaires, titre=<:formulaire:titre_formulaires:>, ajax} />
+
+[(#AUTORISER{editer, formulaire}|oui)
+[(#URL_ECRIRE{formulaire_edit}
+	|parametre_url{nouveau,oui}
+	|icone_verticale{<:formulaire:icone_creer_formulaire:>,formulaire,formulaire-nouveau-48,center})]
+]
diff --git a/formidable_1_0.orig/prive/squelettes/contenu/formulaires_analyse.html b/formidable_1_0.orig/prive/squelettes/contenu/formulaires_analyse.html
new file mode 100644
index 0000000000000000000000000000000000000000..452436e5b352b94cca4c973bf04fb138149a7de1
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/contenu/formulaires_analyse.html
@@ -0,0 +1,24 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse}}>
+[(#BOITE_OUVRIR{'','simple'})]
+        [(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})]
+
+	[<h4><:formidable:reponses_analyse:></h4>
+	<h1>(#TITRE|sinon{<:info_sans_titre:>})</h1>]
+
+	[(#BOITE_OUVRIR{'','simple'})]	
+	<BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire}>
+	</BOUCLE_reponses>
+	<strong>[(#_reponses:TOTAL_BOUCLE
+		|singulier_ou_pluriel{formidable:analyse_une_reponse_total,formidable:analyse_nb_reponses_total})]</strong>
+	</B_reponses>
+	<strong><:formidable:analyse_zero_reponse_total:></strong>
+	<//B_reponses>
+	#BOITE_FERMER
+#BOITE_FERMER
+
+[(#BOITE_OUVRIR{'','simple'})]
+#INCLURE{fond=modeles/formulaire_analyse,id_formulaire}
+#BOITE_FERMER
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/contenu/formulaires_reponse.html b/formidable_1_0.orig/prive/squelettes/contenu/formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..40a22f001fd5a7ad08a1585eb098218925f12787
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/contenu/formulaires_reponse.html
@@ -0,0 +1,24 @@
+<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse, #ID_FORMULAIRES_REPONSE}}>
+[(#BOITE_OUVRIR{
+	<h1><:formulaires_reponse:formulaires_reponse_numero{nb=#ID_FORMULAIRES_REPONSE}:></h1>
+,simple fiche_objet})]
+
+
+<!--affiche_milieu-->
+
+<div id="wysiwyg">
+<INCLURE{fond=prive/objets/contenu/formulaires_reponse,
+	id=#ID_FORMULAIRES_REPONSE,
+	id_formulaires_reponse=#ID_FORMULAIRES_REPONSE,
+	virtuel=oui,ajax=wysiwyg,wysiwyg=1} />
+</div>
+
+<div class='nettoyeur'></div>
+[(#BOITE_OUVRIR{<h3><:formulaires_reponse:reponses_donnees:></h3>,reponses})]
+#INCLURE{fond=modeles/formulaires_reponse,id_formulaires_reponse}
+#BOITE_FERMER
+
+#BOITE_FERMER
+</BOUCLE_autoriser>
+</BOUCLE_formulaires_reponse>
diff --git a/formidable_1_0.orig/prive/squelettes/contenu/formulaires_reponses.html b/formidable_1_0.orig/prive/squelettes/contenu/formulaires_reponses.html
new file mode 100644
index 0000000000000000000000000000000000000000..63e9cb599c5251c38572a111cc4e30e50ab52bef
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/contenu/formulaires_reponses.html
@@ -0,0 +1,15 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse}}>
+[(#BOITE_OUVRIR{'','simple'})]
+	[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})]
+	
+	<h4><:formidable:voir_reponses:></h4>
+	<h1>#TITRE</h1>
+#BOITE_FERMER
+
+<INCLURE{fond=prive/objets/liste/formulaires_reponses}{id_formulaire}{statut=prop}{titre=<:formidable:reponses_liste_prop:>}{ajax}>
+
+<INCLURE{fond=prive/objets/liste/formulaires_reponses}{id_formulaire}{statut=publie}{titre=<:formidable:reponses_liste_publie:>}{ajax}>
+
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/extra/formulaire.html b/formidable_1_0.orig/prive/squelettes/extra/formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..4407c024e726aaaef33f331f494e66364475169c
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/extra/formulaire.html
@@ -0,0 +1,19 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<!--#extra-->
+[(#BOITE_OUVRIR{<:formidable:titre_cadre_raccourcis:>,'simple','section'})]
+	[(#AUTORISER{editer, formulaire}|oui)
+	[(#URL_ACTION_AUTEUR{dupliquer_formulaire, #ID_FORMULAIRE}|icone_horizontale{<:formidable:formulaires_dupliquer:>,formulaire,formulaire-dupliquer-24})]
+	]
+	[(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui)
+	[(#URL_ACTION_AUTEUR{supprimer_formulaire, #ID_FORMULAIRE}|inserer_attribut{'onclick','return confirm("<:formidable:formulaires_supprimer_confirmation:>");'}
+	|icone_horizontale{<:formidable:formulaires_supprimer:>,formulaire,formulaire-supprimer-24})]
+	]
+#BOITE_FERMER
+
+[(#BOITE_OUVRIR{<:formidable:voir_exporter:>,'simple','section'})]
+	<BOUCLE_exports(POUR){tableau #VAL|echanges_formulaire_lister_disponibles|table_valeur{exporter}}>
+	[(#URL_ACTION_AUTEUR{exporter_formulaire,#ID_FORMULAIRE-#CLE}|icone_horizontale{#CLE,formulaire,formulaire-exporter-24})]
+	</BOUCLE_exports>
+#BOITE_FERMER
+<!--/#extra-->
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/extra/formulaire_edit.html b/formidable_1_0.orig/prive/squelettes/extra/formulaire_edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..959b0ebe1982eb827c3b7b5f2302d1ff1038ba27
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/extra/formulaire_edit.html
@@ -0,0 +1,9 @@
+<BOUCLE_formulaire(FORMULAIRES) {id_formulaire}>
+<!--#extra-->
+[(#ENV{configurer}|=={traitements}|oui)
+[(#BOITE_OUVRIR{'','info'})]
+	#INCLURE{fond=modeles/formulaire_aide_memoire, id_formulaire=#ID_FORMULAIRE}
+#BOITE_FERMER
+]
+<!--/#extra-->
+</BOUCLE_formulaire>
\ No newline at end of file
diff --git a/formidable_1_0.orig/prive/squelettes/extra/formulaires_reponses.html b/formidable_1_0.orig/prive/squelettes/extra/formulaires_reponses.html
new file mode 100644
index 0000000000000000000000000000000000000000..eece13ca04abe6c13f7f652f20863a94aced9602
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/extra/formulaires_reponses.html
@@ -0,0 +1,8 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse}}>
+[(#BOITE_OUVRIR{<:formidable:titre_cadre_raccourcis:>,'info'})]
+[(#URL_ACTION_AUTEUR{exporter_formulaires_reponses,#ID_FORMULAIRE}
+	|icone_horizontale{<:formidable:reponses_exporter:>,formulaire,formulaire-reponses-exporter-24,center})]
+#BOITE_FERMER
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/hierarchie/formulaire.html b/formidable_1_0.orig/prive/squelettes/hierarchie/formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..2b7798d42f8b2a05ba87bc4bcf970de9344382e4
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/hierarchie/formulaire.html
@@ -0,0 +1,5 @@
+<!-- hierarchie -->
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
+<strong class="on">#TITRE</strong>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/hierarchie/formulaire_edit.html b/formidable_1_0.orig/prive/squelettes/hierarchie/formulaire_edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..a41dfd9dcfa08cfc43f025a36c2179ce594f84ab
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/hierarchie/formulaire_edit.html
@@ -0,0 +1,5 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
+<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#TITRE</a> &gt;
+<strong class="on"><:formulaire:modifier_formulaire:></strong>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/hierarchie/formulaires.html b/formidable_1_0.orig/prive/squelettes/hierarchie/formulaires.html
new file mode 100644
index 0000000000000000000000000000000000000000..7fd040aa0dab686493d9cca0127408ca8f8131fb
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/hierarchie/formulaires.html
@@ -0,0 +1,2 @@
+<!-- hierarchie -->
+<strong class="on"><:formulaire:titre_formulaires:></strong>
diff --git a/formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_analyse.html b/formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_analyse.html
new file mode 100644
index 0000000000000000000000000000000000000000..81cbd20c16eef107d5adaaa24174ae53a9b8b4c9
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_analyse.html
@@ -0,0 +1,7 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse}}>
+<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
+<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#TITRE</a> &gt;
+<strong class="on"><:formidable:reponses_analyse:></strong>
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_reponse.html b/formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..a4ebff6437b829ab18dad4a101cf83b0cd690fd8
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_reponse.html
@@ -0,0 +1,6 @@
+<BOUCLE_formulaire(FORMULAIRES_REPONSES){id_formulaires_reponse}>
+<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
+<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#INFO_TITRE{formulaire,#ID_FORMULAIRE}</a> &gt;
+<a class="on" href="[(#URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire,#ID_FORMULAIRE})]"><:formidable:voir_reponses:></a> &gt;
+<strong class="on"><:formulaires_reponse:titre_formulaires_reponse:></strong>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_reponses.html b/formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_reponses.html
new file mode 100644
index 0000000000000000000000000000000000000000..bfe35597921ba46a8541932290936f838ff61379
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_reponses.html
@@ -0,0 +1,5 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
+<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#INFO_TITRE{formulaire,#ID_FORMULAIRE}</a> &gt;
+<strong class="on"><:formidable:voir_reponses:></strong>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/navigation/formulaire.html b/formidable_1_0.orig/prive/squelettes/navigation/formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..ef1289e75c70ad185b114d78a9f5b93154ca15d7
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/navigation/formulaire.html
@@ -0,0 +1,42 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+#BOITE_OUVRIR{'','info'}
+#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}}
+
+[(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui)
+
+[(#URL_ECRIRE{formulaire_edit}
+	|parametre_url{id_formulaire, #ID_FORMULAIRE}
+	|parametre_url{configurer,formulaire}
+	|parametre_url{avertissement,''}
+	|icone_horizontale{<:formidable:editer_menu_formulaire:>,formulaire,formulaire-editer-24,center})]
+
+[(#URL_ECRIRE{formulaire_edit}
+	|parametre_url{id_formulaire, #ID_FORMULAIRE}
+	|parametre_url{configurer,champs}
+	|parametre_url{avertissement,''}
+	|icone_horizontale{<:formidable:editer_menu_champs:>,formulaire,formulaire-config-champs-24,center})]
+
+[(#URL_ECRIRE{formulaire_edit}
+	|parametre_url{id_formulaire, #ID_FORMULAIRE}
+	|parametre_url{configurer,traitements}
+	|parametre_url{avertissement,''}
+	|icone_horizontale{<:formidable:editer_menu_traitements:>,formulaire,formulaire-config-traitements-24,center})]
+
+]
+
+<BOUCLE_resultats(FORMULAIRES_REPONSES){id_formulaire}>
+</BOUCLE_resultats>
+
+<div class='navigation_resultats'>
+[(#URL_ECRIRE{formulaires_reponses}
+	|parametre_url{id_formulaire, #ID_FORMULAIRE}
+	|icone_horizontale{<:formidable:voir_reponses:> &#40;#TOTAL_BOUCLE&#41;,formulaire,formulaire-reponses-24,center})]
+[(#URL_ECRIRE{formulaires_analyse}
+	|parametre_url{id_formulaire, #ID_FORMULAIRE}
+	|icone_horizontale{<:formidable:reponses_analyse:>,formulaire,formulaire-analyse-24,center})]
+</div>
+
+</B_resultats>
+
+#BOITE_FERMER
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/navigation/formulaire_edit.html b/formidable_1_0.orig/prive/squelettes/navigation/formulaire_edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..ed8628726b946b7c3bdb6327d1ac85cdc8bb3bc3
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/navigation/formulaire_edit.html
@@ -0,0 +1,22 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+#BOITE_OUVRIR{'','info'}
+#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}}
+
+[(#SELF
+	|parametre_url{configurer,formulaire}
+	|parametre_url{avertissement,''}
+	|icone_horizontale{<:formidable:editer_menu_formulaire:>,formulaire,formulaire-editer-24,center})]
+
+[(#SELF
+	|parametre_url{configurer,champs}
+	|parametre_url{avertissement,''}
+	|icone_horizontale{<:formidable:editer_menu_champs:>,formulaire,formulaire-config-champs-24,center})]
+
+[(#SELF
+	|parametre_url{configurer,traitements}
+	|parametre_url{avertissement,''}
+	|icone_horizontale{<:formidable:editer_menu_traitements:>,formulaire,formulaire-config-traitements-24,center})]
+
+#BOITE_FERMER
+
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/navigation/formulaires.html b/formidable_1_0.orig/prive/squelettes/navigation/formulaires.html
new file mode 100644
index 0000000000000000000000000000000000000000..0ee28b014ed0a4cf06ee62ff7015f8c2569999f6
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/navigation/formulaires.html
@@ -0,0 +1,5 @@
+[(#BOITE_OUVRIR{<:formidable:importer_formulaire:>,'info'})]
+[(#AUTORISER{editer, formulaire}|oui)
+	#FORMULAIRE_IMPORTER_FORMULAIRE
+]
+#BOITE_FERMER
diff --git a/formidable_1_0.orig/prive/squelettes/navigation/formulaires_analyse.html b/formidable_1_0.orig/prive/squelettes/navigation/formulaires_analyse.html
new file mode 100644
index 0000000000000000000000000000000000000000..959bad4283f65509a4db6ca4a3e7de967626be14
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/navigation/formulaires_analyse.html
@@ -0,0 +1,12 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse}}>
+#BOITE_OUVRIR{'','info'}
+#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}}
+
+[(#URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_horizontale{<:formidable:reponses_liste:>,formulaire,formulaire-reponses-24,left})]
+
+[(#SELF|icone_horizontale{<:formidable:reponses_analyse:>,formulaire,formulaire-analyse-24,left})]
+
+#BOITE_FERMER
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/squelettes/navigation/formulaires_reponse.html b/formidable_1_0.orig/prive/squelettes/navigation/formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..2b4d4ede51466c3365853848c6d25d307e5c22f9
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/navigation/formulaires_reponse.html
@@ -0,0 +1,15 @@
+<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse, #ID_FORMULAIRES_REPONSE}}>
+[(#BOITE_OUVRIR{'','info'})]
+
+	[(#PIPELINE{boite_infos,#ARRAY{data,'',
+		args,#ARRAY{'type','formulaires_reponse','id',#ENV{id_formulaires_reponse}}}})]
+
+	[(#URL_ECRIRE{formulaires_analyse}
+		|parametre_url{id_formulaire,#ID_FORMULAIRE}
+		|icone_horizontale{<:formidable:reponses_analyse:>,formulaire,formulaire-analyse-24,center})]
+
+#BOITE_FERMER
+
+</BOUCLE_autoriser>
+</BOUCLE_formulaires_reponse>
diff --git a/formidable_1_0.orig/prive/squelettes/navigation/formulaires_reponses.html b/formidable_1_0.orig/prive/squelettes/navigation/formulaires_reponses.html
new file mode 100644
index 0000000000000000000000000000000000000000..e19e1c1aff82458baa4e3f250ef85379fc096d6b
--- /dev/null
+++ b/formidable_1_0.orig/prive/squelettes/navigation/formulaires_reponses.html
@@ -0,0 +1,12 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse}}>
+#BOITE_OUVRIR{'','info'}
+#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}}
+
+[(#SELF|icone_horizontale{<:formidable:reponses_liste:>,formulaire,formulaire-reponses-24,left})]
+
+[(#URL_ECRIRE{formulaires_analyse}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_horizontale{<:formidable:reponses_analyse:>,formulaire,formulaire-analyse-24,left})]
+
+#BOITE_FERMER
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0.orig/prive/style_prive_plugin_formidable.html b/formidable_1_0.orig/prive/style_prive_plugin_formidable.html
new file mode 100644
index 0000000000000000000000000000000000000000..cbd1cf99aeba1d48d71f2235a0a22e17cb5c2b74
--- /dev/null
+++ b/formidable_1_0.orig/prive/style_prive_plugin_formidable.html
@@ -0,0 +1,32 @@
+#SET{claire,#ENV{couleur_claire,edf3fe}}
+#SET{foncee,#ENV{couleur_foncee,3874b0}}
+
+body .formidable_analyse .progress-bar span {
+	background-color: ##GET{claire};
+	  background-image: -webkit-gradient(linear, left top, left bottom, from(##GET{claire}), to(##GET{foncee}));
+	  background-image: -webkit-linear-gradient(top, ##GET{claire}, ##GET{foncee});
+	  background-image: -moz-linear-gradient(top, ##GET{claire}, ##GET{foncee});
+	  background-image: -ms-linear-gradient(top, ##GET{claire}, ##GET{foncee});
+	  background-image: -o-linear-gradient(top, ##GET{claire}, ##GET{foncee});
+	  background-image: linear-gradient(top, ##GET{claire}, ##GET{foncee}); 
+}
+
+#navigation .navigation_resultats {
+	margin-top:1em;
+	padding-top:1em;
+	border-top:1px solid #eee;
+}
+
+#contenu .box.traitements ul.spip {margin-bottom:0;}
+
+#contenu .liste-objets.formulaires_reponses tr > .date {width:auto;}
+#contenu .liste-objets.formulaires_reponses tr > .auteur {width:auto;}
+
+.formulaires_reponse #contenu #wysiwyg {margin-top:1em;}
+.formulaires_reponse #contenu #wysiwyg .label {
+	width:140px; float:left; display:block;
+}
+.formulaires_reponse #contenu .fiche_objet .reponses .inner { border:none; }
+.formulaires_reponse #contenu .fiche_objet .reponses .hd {
+    padding-bottom: 3px; margin-bottom:10px; border-bottom:1px solid #ccc;
+}
diff --git a/formidable_1_0.orig/prive/themes/basic/images/formulaire-16.png b/formidable_1_0.orig/prive/themes/basic/images/formulaire-16.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ca21eaea457d65608d71a6afcd1cb30c8842b3a
Binary files /dev/null and b/formidable_1_0.orig/prive/themes/basic/images/formulaire-16.png differ
diff --git a/formidable_1_0.orig/prive/themes/spip/images/formulaire-16.png b/formidable_1_0.orig/prive/themes/spip/images/formulaire-16.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ca21eaea457d65608d71a6afcd1cb30c8842b3a
Binary files /dev/null and b/formidable_1_0.orig/prive/themes/spip/images/formulaire-16.png differ
diff --git a/formidable_1_0.orig/prive/themes/spip/images/formulaire-24.png b/formidable_1_0.orig/prive/themes/spip/images/formulaire-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff847d080c2b8c158b3dccdff2d1534d06178ae6
Binary files /dev/null and b/formidable_1_0.orig/prive/themes/spip/images/formulaire-24.png differ
diff --git a/formidable_1_0.orig/prive/themes/spip/images/formulaires_reponse-24.png b/formidable_1_0.orig/prive/themes/spip/images/formulaires_reponse-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec0a2b05a2d7a392c8a4f464c5069d6af0a684aa
Binary files /dev/null and b/formidable_1_0.orig/prive/themes/spip/images/formulaires_reponse-24.png differ
diff --git a/formidable_1_0.orig/public/formidable_criteres.php b/formidable_1_0.orig/public/formidable_criteres.php
new file mode 100644
index 0000000000000000000000000000000000000000..ef2147a362cc0edfedb115872c0e39a61e1f60b0
--- /dev/null
+++ b/formidable_1_0.orig/public/formidable_criteres.php
@@ -0,0 +1,64 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+	// {tri_donnee champ}
+/**
+ * Depuis la boucle FORMULAIRES_REPONSES, trier les résulats en fonction d'un champ
+ * de la table FORMULAIRES_REPONSES_CHAMPS
+ * {tri_selon_donnee} 
+ *
+ * @global array $exceptions_des_tables
+ * @param string $idb
+ * @param array $boucles
+ * @param <type> $crit
+ * 
+ * Auteurs :
+ * Antoine Pitrou
+ * Cedric Morin
+ * Renato
+ * @ 2005,2006 - Distribue sous licence GNU/GPL
+ */
+
+function critere_tri_selon_donnee_dist($idb, &$boucles, $crit) { // Garder cette fontion pour compatibilité
+	critere_tri_selon_reponse_dist($idb, $boucles, $crit) ;
+}
+function critere_tri_selon_reponse_dist($idb, &$boucles, $crit) {
+
+	$boucle = &$boucles[$idb];
+	$t = $boucle->id_table;
+	
+	if ($t=='formulaires_reponses'){
+		$not = $crit->not;
+		$_quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
+		$k = count($boucle->join)+1;
+		$boucle->join[$k]= array($t,'id_formulaires_reponse');
+		$boucle->from["L$k"]= 'spip_formulaires_reponses_champs';
+		$op = array("'='", "'L$k.nom'", "_q(".$_quoi.")");
+		$boucle->where[]= array("'?'","!in_array($_quoi,array('date','id_formulaires_reponse'))",$op,"''");
+		$boucle->order[]= "(in_array($_quoi,array('date','id_formulaires_reponse'))?'$t.'.$_quoi:(strncmp($_quoi,'date_',5)==0?'STR_TO_DATE(L$k.valeur,\'%d/%m/%Y\')':'L$k.valeur'))".($not?".' DESC'":"");
+	}
+}
+
+// {recherche_donnee} ou {recherche_donnee susan}
+// Intégralement pompé et adapté de Forms&Tables
+function critere_recherche_reponse_dist($idb, &$boucles, $crit) {
+	global $table_des_tables;
+	$boucle = &$boucles[$idb];
+	$t = $boucle->id_table;
+	if ($t=='formulaires_reponses'){
+		if (isset($crit->param[0]))
+			$_quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
+		else
+			$_quoi = '@$Pile[0]["recherche"]';
+
+		$k = count($boucle->join)+1;
+		$boucle->join[$k]= array($t,'id_formulaires_reponse');
+		$boucle->from["L$k"]= 'spip_formulaires_reponses_champs';
+		$op = array("'LIKE'","'L$k.valeur'","_q(strpos($_quoi,'%')===false?'%'.".$_quoi.".'%':$_quoi)");
+		$boucle->where[]= array("'?'",$_quoi,$op,"''");
+	}
+}
+
+
+?>
diff --git a/formidable_1_0.orig/puce_statut/formulaires_reponse.php b/formidable_1_0.orig/puce_statut/formulaires_reponse.php
new file mode 100644
index 0000000000000000000000000000000000000000..0efc6f9e4e95202c8225e8bd4a8d9ade02d8bab1
--- /dev/null
+++ b/formidable_1_0.orig/puce_statut/formulaires_reponse.php
@@ -0,0 +1,92 @@
+<?php
+
+/**
+ * Gestion des puces d'action rapide de formulaires
+ *
+ * @package SPIP\Formidable\Puce_statut
+**/
+
+/**
+ * Gestion des puces statuts des formulaires
+ * 
+ * Retourne le contenu d'une puce avec changement de statut possible
+ * si on en a l'autorisation, sinon simplement l'image de la puce
+ *
+ * @param int $id
+ *     Identifiant de l'objet
+ * @param string $statut
+ *     Statut actuel de l'objet
+ * @param int $id_parent
+ *     Identifiant du parent, un formulaire
+ * @param string $type
+ *     Type d'objet
+ * @param bool $ajax
+ *     Indique s'il ne faut renvoyer que le coeur du menu car on est
+ *     dans une requete ajax suite à un post de changement rapide
+ * @param bool $menu_rapide
+ *     Indique si l'on peut changer le statut, ou si on l'affiche simplement
+ * @return string
+ *     Code HTML de l'image de puce de statut à insérer (et du menu de changement si présent)
+**/
+function puce_statut_formulaires_reponse_dist($id, $statut, $id_parent, $type='article', $ajax = false, $menu_rapide=_ACTIVER_PUCE_RAPIDE) {
+
+	$src = statut_image($type, $statut);
+	if (!$src)
+		return $src;
+
+	if (!$id
+	  OR !_SPIP_AJAX
+	  OR !$menu_rapide
+	  OR !autoriser('instituer', $type, $id)) {
+	  $ajax_node ='';
+	}
+	else
+		$ajax_node = " class='imgstatut$type$id'";
+
+	$inser_puce = http_img_pack($src,statut_titre($type, $statut),$ajax_node);
+
+	if (!$ajax_node)
+		return $inser_puce;
+
+	$table = table_objet_sql($type);
+	$desc = lister_tables_objets_sql($table);
+	if (!isset($desc['statut_textes_instituer']))
+		return $inser_puce;
+
+	$coord = array_flip(array_keys($desc['statut_textes_instituer']));
+	if (!isset($coord[$statut]))
+		return $inser_puce;
+
+	$unit = 8/*widh de img*/+4/*padding*/;
+	$margin = 4; /* marge a gauche + droite */
+	$zero = 1 /*border*/ + $margin/2 + 2 /*padding*/;
+	$clip = $zero+ ($unit*$coord[$statut]);
+	if ($ajax){
+
+		$width = $unit*count($desc['statut_textes_instituer'])+$margin;
+		$out = "<span class='puce_objet_fixe $type'>"
+		. $inser_puce
+		. "</span>"
+		. "<span class='puce_objet_popup $type statutdecal$type$id' style='width:{$width}px;margin-left:-{$clip}px;'>";
+		$i=0;
+		foreach($desc['statut_textes_instituer'] as $s=>$t){
+			$out .= afficher_script_statut($id, $type, -$zero-$i++*$unit, statut_image($type,$s), $s, _T($t));
+		}
+		$out .= "</span>";
+		return $out;
+	}
+	else {
+
+		$nom = "puce_statut_";
+	  $action = generer_url_ecrire('puce_statut_formulaires',"",true);
+	  $action = "if (!this.puce_loaded) { this.puce_loaded = true; prepare_selec_statut(this, '$nom', '$type', '$id', '$action'); }";
+	  $over = " onmouseover=\"$action\"";
+
+		$lang_dir = lang_dir(isset($GLOBALS['lang_objet']) ? $GLOBALS['lang_objet'] : "");
+		return 	"<span class='puce_objet $type' id='$nom$type$id' dir='$lang_dir'$over>"
+		. $inser_puce
+		. '</span>';
+	}
+}
+
+
diff --git a/formidable_1_0.orig/saisies-analyses/_base.html b/formidable_1_0.orig/saisies-analyses/_base.html
new file mode 100644
index 0000000000000000000000000000000000000000..7c9a8ab3bfc9ad602caae40e4ac7d81af1c00ffc
--- /dev/null
+++ b/formidable_1_0.orig/saisies-analyses/_base.html
@@ -0,0 +1,32 @@
+<div class="cadre cadre-liste analyser analyser_#ENV{nom} saisie_#ENV{type_saisie}">
+<table class="liste" cellspacing="0" cellpadding="2" border="0" style="width:100%;" data-nombre="#ENV{reponses_total}">
+[<caption class="titrem"><strong class="caption">(#ENV{label_case,#ENV{label,#ENV{nom}}})</strong></caption>]
+	<tbody>
+	[(#CHEMIN{saisies-analyses/#ENV{type_saisie}.html}|oui)
+		#INCLURE{fond=saisies-analyses/#ENV{type_saisie},env}
+	]
+	[(#CHEMIN{saisies-analyses/#ENV{type_saisie}.html}|non)
+		#SET{plein,#ENV{valeurs}|array_filter}
+		#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}}
+		[(#GET{plein}|count|>{0}|oui)
+			#SET{moyenne,#VAL{str_word_count}|array_map{#GET{plein}}|array_sum|div{#GET{plein}|count}}
+		]
+		[(#GET{plein}|count|>{0}|non)
+			#SET{moyenne,0}
+		]
+		<tr class="tr_liste row_odd vide">
+			<td class="choix"><:formidable:analyse_sans_reponse:></td>
+			<td class="stat"[ title="(#GET{vide}|count|titre_nb_reponses|attribut_html)"]>[(#GET{vide}|count)]</td>
+		</tr>
+		<tr class="tr_liste row_even plein">
+			<td class="choix"><:formidable:analyse_avec_reponse:></td>
+			<td class="stat"[ title="(#GET{plein}|count|titre_nb_reponses|attribut_html)"]>[(#GET{plein}|count)]</td>
+		</tr>
+		<tr class="tr_liste row_odd moyenne">
+			<td class="choix"><:formidable:analyse_longueur_moyenne:></td>
+			<td class="stat ignore">#GET{moyenne}</td>
+		</tr>
+	]
+	</tbody>
+</table>
+</div>
diff --git a/formidable_1_0.orig/saisies-analyses/case.html b/formidable_1_0.orig/saisies-analyses/case.html
new file mode 100644
index 0000000000000000000000000000000000000000..51a9faf9b9aa41a7cb80a4b77bc063304502920a
--- /dev/null
+++ b/formidable_1_0.orig/saisies-analyses/case.html
@@ -0,0 +1,27 @@
+#SET{oui,0}
+#SET{non,0}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	[(#VALEUR|oui)
+		#SET{oui,#GET{oui}|plus{1}}
+	]
+	[(#VALEUR|non)
+		#SET{non,#GET{non}|plus{1}}
+	]
+</BOUCLE_reponses>
+
+<tr class="tr_liste">
+	<td class="choix"><:item_oui:></td>
+	<td class="stat"[ title="(#GET{oui}|titre_nb_reponses|attribut_html)"]>#GET{oui}</td>
+</tr>
+<tr class="tr_liste">
+	<td class="choix"><:item_non:></td>
+	<td class="stat"[ title="(#GET{non}|titre_nb_reponses|attribut_html)"]>#GET{non}</td>
+</tr>
+
+#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
+[(#GET{diff}|>{0}|oui)
+<tr class="tr_liste">
+	<td class="choix"><:saisies:vue_sans_reponse:></td>
+	<td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
+</tr>
+]
diff --git a/formidable_1_0.orig/saisies-analyses/checkbox.html b/formidable_1_0.orig/saisies-analyses/checkbox.html
new file mode 100644
index 0000000000000000000000000000000000000000..ad682aea66f7efbdba5b7d904969c81e97f84bc0
--- /dev/null
+++ b/formidable_1_0.orig/saisies-analyses/checkbox.html
@@ -0,0 +1,26 @@
+#SET{stats,#ARRAY}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	<BOUCLE_choix(POUR){tableau #VALEUR}>
+	#SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}}
+	</BOUCLE_choix>
+</BOUCLE_reponses>
+
+[(#REM) datas peut être une chaine qu'on sait décomposer ]
+#SET{datas, #ENV*{datas}}
+#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
+
+<BOUCLE_datas(POUR){tableau #GET{datas}}>
+[(#SET{nb,[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]})]
+<tr class="tr_liste">
+	<td class="choix">#VALEUR</td>
+	<td class="stat"[ title="(#GET{nb}|titre_nb_reponses|attribut_html)"]>#GET{nb}</td>
+</tr>
+</BOUCLE_datas>
+
+#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
+[(#GET{diff}|>{0}|oui)
+<tr class="tr_liste">
+	<td class="choix"><:saisies:vue_sans_reponse:></td>
+	<td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
+</tr>
+]
diff --git a/formidable_1_0.orig/saisies-analyses/destinataires.html b/formidable_1_0.orig/saisies-analyses/destinataires.html
new file mode 100644
index 0000000000000000000000000000000000000000..9692d03105e570e3acfb2d70171abd4d024d0a31
--- /dev/null
+++ b/formidable_1_0.orig/saisies-analyses/destinataires.html
@@ -0,0 +1,14 @@
+#SET{stats,#ARRAY}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	<BOUCLE_choix(POUR){tableau #VALEUR}>
+	#SET_MERGE{stats, #ARRAY{auteur-#VALEUR, #GET{stats}|table_valeur{auteur-#VALEUR}|sinon{0}|plus{1}}}
+	</BOUCLE_choix>
+</BOUCLE_reponses>
+
+<BOUCLE_stats(POUR){tableau #GET{stats}}>
+#SET{id_auteur, #CLE|replace{'auteur-', ''}}
+<tr class="tr_liste">
+	<td class="choix"><a href="#INFO_URL{auteur, #GET{id_auteur}}">#INFO_TITRE{auteur, #GET{id_auteur}}</a></td>
+	<td class="stat"[ title="(#VALEUR|titre_nb_reponses|attribut_html)"]>#VALEUR</td>
+</tr>
+</BOUCLE_stats>
diff --git a/formidable_1_0.orig/saisies-analyses/explication.html b/formidable_1_0.orig/saisies-analyses/explication.html
new file mode 100644
index 0000000000000000000000000000000000000000..703e6c027d189905341b17072f12c3232b8e01cc
--- /dev/null
+++ b/formidable_1_0.orig/saisies-analyses/explication.html
@@ -0,0 +1,4 @@
+<tr class="tr_liste">
+	<td class='choix' colspan='2'>[<p class='explication'>(#ENV{texte})</p>]</td>
+</tr>
+
diff --git a/formidable_1_0.orig/saisies-analyses/oui_non.html b/formidable_1_0.orig/saisies-analyses/oui_non.html
new file mode 100644
index 0000000000000000000000000000000000000000..51a9faf9b9aa41a7cb80a4b77bc063304502920a
--- /dev/null
+++ b/formidable_1_0.orig/saisies-analyses/oui_non.html
@@ -0,0 +1,27 @@
+#SET{oui,0}
+#SET{non,0}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	[(#VALEUR|oui)
+		#SET{oui,#GET{oui}|plus{1}}
+	]
+	[(#VALEUR|non)
+		#SET{non,#GET{non}|plus{1}}
+	]
+</BOUCLE_reponses>
+
+<tr class="tr_liste">
+	<td class="choix"><:item_oui:></td>
+	<td class="stat"[ title="(#GET{oui}|titre_nb_reponses|attribut_html)"]>#GET{oui}</td>
+</tr>
+<tr class="tr_liste">
+	<td class="choix"><:item_non:></td>
+	<td class="stat"[ title="(#GET{non}|titre_nb_reponses|attribut_html)"]>#GET{non}</td>
+</tr>
+
+#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
+[(#GET{diff}|>{0}|oui)
+<tr class="tr_liste">
+	<td class="choix"><:saisies:vue_sans_reponse:></td>
+	<td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
+</tr>
+]
diff --git a/formidable_1_0.orig/saisies-analyses/radio.html b/formidable_1_0.orig/saisies-analyses/radio.html
new file mode 100644
index 0000000000000000000000000000000000000000..88627d0a64059de49e5db4fcaabad2b9922af00e
--- /dev/null
+++ b/formidable_1_0.orig/saisies-analyses/radio.html
@@ -0,0 +1,26 @@
+#SET{stats,#ARRAY}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	[(#VALEUR|oui)
+		#SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}}
+	]
+</BOUCLE_reponses>
+
+[(#REM) datas peut être une chaine qu'on sait décomposer ]
+#SET{datas, #ENV*{datas}}
+#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
+
+<BOUCLE_datas(POUR){tableau #GET{datas}}>
+[(#SET{nb,[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]})]
+<tr class="tr_liste">
+	<td class="choix">#VALEUR</td>
+	<td class="stat"[ title="(#GET{nb}|titre_nb_reponses|attribut_html)"]>#GET{nb}</td>
+</tr>
+</BOUCLE_datas>
+
+#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
+[(#GET{diff}|>{0}|oui)
+<tr class="tr_liste">
+	<td class="choix"><:saisies:vue_sans_reponse:></td>
+	<td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
+</tr>
+]
diff --git a/formidable_1_0.orig/saisies-analyses/selecteur_article.html b/formidable_1_0.orig/saisies-analyses/selecteur_article.html
new file mode 100644
index 0000000000000000000000000000000000000000..35f08b42d18159b6852357e2cc751750aacc4136
--- /dev/null
+++ b/formidable_1_0.orig/saisies-analyses/selecteur_article.html
@@ -0,0 +1,13 @@
+[(#REM) Attention, saisie multiple non testee ]
+
+#SET{plein,#ENV{valeurs}|array_filter}
+#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}}
+
+<tr class="tr_liste row_odd vide">
+   <td class="choix"><:formidable:analyse_sans_reponse:></td>
+   <td class="stat">[(#GET{vide}|count)]</td>
+</tr>
+<tr class="tr_liste row_even plein">
+   <td class="choix"><:formidable:analyse_avec_reponse:></td>
+   <td class="stat">[(#GET{plein}|count)]</td>
+</tr>
diff --git a/formidable_1_0.orig/saisies-analyses/selecteur_rubrique.html b/formidable_1_0.orig/saisies-analyses/selecteur_rubrique.html
new file mode 100644
index 0000000000000000000000000000000000000000..35f08b42d18159b6852357e2cc751750aacc4136
--- /dev/null
+++ b/formidable_1_0.orig/saisies-analyses/selecteur_rubrique.html
@@ -0,0 +1,13 @@
+[(#REM) Attention, saisie multiple non testee ]
+
+#SET{plein,#ENV{valeurs}|array_filter}
+#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}}
+
+<tr class="tr_liste row_odd vide">
+   <td class="choix"><:formidable:analyse_sans_reponse:></td>
+   <td class="stat">[(#GET{vide}|count)]</td>
+</tr>
+<tr class="tr_liste row_even plein">
+   <td class="choix"><:formidable:analyse_avec_reponse:></td>
+   <td class="stat">[(#GET{plein}|count)]</td>
+</tr>
diff --git a/formidable_1_0.orig/saisies-analyses/selecteur_rubrique_article.html b/formidable_1_0.orig/saisies-analyses/selecteur_rubrique_article.html
new file mode 100644
index 0000000000000000000000000000000000000000..a8ef6aec9258df4c9785a0df1b6ba12e3539346c
--- /dev/null
+++ b/formidable_1_0.orig/saisies-analyses/selecteur_rubrique_article.html
@@ -0,0 +1,14 @@
+[(#REM) Peut etre ameliore en comptant par exemple le nombre d'article / rubriques 
+Attention, saisie multiple non testee ]
+
+#SET{plein,#ENV{valeurs}|array_filter}
+#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}}
+
+<tr class="tr_liste row_odd vide">
+   <td class="choix"><:formidable:analyse_sans_reponse:></td>
+   <td class="stat">[(#GET{vide}|count)]</td>
+</tr>
+<tr class="tr_liste row_even plein">
+   <td class="choix"><:formidable:analyse_avec_reponse:></td>
+   <td class="stat">[(#GET{plein}|count)]</td>
+</tr>
diff --git a/formidable_1_0.orig/saisies-analyses/selection.html b/formidable_1_0.orig/saisies-analyses/selection.html
new file mode 100644
index 0000000000000000000000000000000000000000..54589d337de4f662c1071fb34912f239c1a60d5c
--- /dev/null
+++ b/formidable_1_0.orig/saisies-analyses/selection.html
@@ -0,0 +1,25 @@
+#SET{stats,#ARRAY}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	[(#VALEUR|oui)
+		#SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}}
+	]
+</BOUCLE_reponses>
+
+[(#REM) datas peut être une chaine qu'on sait décomposer ]
+#SET{datas, #ENV{datas}}
+#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
+
+<BOUCLE_datas(POUR){tableau #GET{datas}}>
+<tr class="tr_liste">
+	<td class="choix">#VALEUR</td>
+	<td class="stat">[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]</td>
+</tr>
+</BOUCLE_datas>
+
+#SET{diff, #ENV{valeurs}|count|moins{#GET{stats}|array_sum}}
+[(#GET{diff}|>{0}|oui)
+<tr class="tr_liste">
+	<td class="choix"><:saisies:vue_sans_reponse:></td>
+	<td class="stat">#GET{diff}</td>
+</tr>
+]
diff --git a/formidable_1_0.orig/saisies-analyses/selection_multiple.html b/formidable_1_0.orig/saisies-analyses/selection_multiple.html
new file mode 100644
index 0000000000000000000000000000000000000000..0f1212a6d7c214dc12e27abef8cc6db47f102d72
--- /dev/null
+++ b/formidable_1_0.orig/saisies-analyses/selection_multiple.html
@@ -0,0 +1,25 @@
+#SET{stats,#ARRAY}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	<BOUCLE_choix(POUR){tableau #VALEUR}>
+	#SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}}
+	</BOUCLE_choix>
+</BOUCLE_reponses>
+
+[(#REM) datas peut être une chaine qu'on sait décomposer ]
+#SET{datas, #ENV{datas}}
+#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
+
+<BOUCLE_datas(POUR){tableau #GET{datas}}>
+<tr class="tr_liste">
+	<td class="choix">#VALEUR</td>
+	<td class="stat">[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]</td>
+</tr>
+</BOUCLE_datas>
+
+#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
+[(#GET{diff}|>{0}|oui)
+<tr class="tr_liste">
+	<td class="choix"><:saisies:vue_sans_reponse:></td>
+	<td class="stat">#GET{diff}</td>
+</tr>
+]
diff --git a/formidable_1_0.orig/saisies-vues/formulaire_formidable.html b/formidable_1_0.orig/saisies-vues/formulaire_formidable.html
new file mode 100644
index 0000000000000000000000000000000000000000..a9692f86d94052546231760a9d78f18829be6caa
--- /dev/null
+++ b/formidable_1_0.orig/saisies-vues/formulaire_formidable.html
@@ -0,0 +1,5 @@
+<BOUCLE_formulaire(FORMULAIRES){identifiant=#ENV{valeur}}>
+<p>[(#TITRE|typo)] (#IDENTIFIANT)</p>
+</BOUCLE_formulaire>
+<p><:saisies:vue_sans_reponse:></p>
+<//B_formulaire>
\ No newline at end of file
diff --git a/formidable_1_0.orig/saisies-vues/formulaire_formidable_multiple.html b/formidable_1_0.orig/saisies-vues/formulaire_formidable_multiple.html
new file mode 100644
index 0000000000000000000000000000000000000000..9b75a57c3654845958e06a949be0c315a46b492f
--- /dev/null
+++ b/formidable_1_0.orig/saisies-vues/formulaire_formidable_multiple.html
@@ -0,0 +1,9 @@
+<B_formulaire>
+<ul>
+	<BOUCLE_formulaire(FORMULAIRES){identifiant IN #ENV**{valeur}}>
+	<li class="choix">[(#TITRE|typo)] (#IDENTIFIANT)</li>
+	</BOUCLE_formulaire>
+</ul>
+</B_formulaire>
+<p><:saisies:vue_sans_reponse:></p>
+<//B_formulaire>
\ No newline at end of file
diff --git a/formidable_1_0.orig/saisies/champ.html b/formidable_1_0.orig/saisies/champ.html
new file mode 100644
index 0000000000000000000000000000000000000000..d2ad8d8a6fbc40212d776f59c183ad338d5ed509
--- /dev/null
+++ b/formidable_1_0.orig/saisies/champ.html
@@ -0,0 +1,28 @@
+
+<select name="#ENV{nom}" id="champ_#ENV{nom}">
+	<option value=""><:formidable:traitements_champ_aucun:></option>
+	[(#ENV{forcer_type}|non)
+		#SET{tab,#ENV{formulaire}}
+	]
+	[(#ENV{forcer_type}|oui)
+		[(#SET{tab,[(#ENV{formulaire}|saisies_lister_par_nom{0})]})]
+	]
+	#SET{padding,0}
+	<BOUCLE_parcours(POUR){tableau #GET{tab}}>
+		#SET{saisie,#VALEUR}
+		<BOUCLE_test_enfants(CONDITION){si #GET{saisie}|table_valeur{saisies}|is_array}>
+		<optgroup style="padding-left:#GET{padding}px" label="[(#GET{saisie}|table_valeur{options}|table_valeur{label}|sinon{#GET{saisie}|table_valeur{options}|table_valeur{nom}})]">
+				#SET{tab,#GET{saisie}|table_valeur{saisies}}
+				#SET{padding,#GET{padding}|plus{20}}
+				<BOUCLE_parcours_recursif(BOUCLE_parcours)/>
+				#SET{padding,#GET{padding}|moins{20}}
+		</optgroup>
+		</BOUCLE_test_enfants>
+			<BOUCLE_test_type(CONDITION){si #ENV{forcer_type}|non|ou{#GET{saisie}|table_valeur{saisie}|in_array{#ENV{forcer_type}}}}>
+			<option value="[(#GET{saisie}|table_valeur{options}|table_valeur{nom})]" style="padding-left:#GET{padding}px" [(#ENV{valeur,#ENV{saisie_a_positionner}}|=={#GET{saisie}|table_valeur{options}|table_valeur{nom}}|oui)selected="selected"]>
+				[(#GET{saisie}|table_valeur{options}|table_valeur{label}|sinon{#GET{saisie}|table_valeur{options}|table_valeur{nom}})]
+			</option>
+			</BOUCLE_test_type>
+		<//B_test_enfants>
+	</BOUCLE_parcours>
+</select>
diff --git a/formidable_1_0.orig/saisies/formulaire_formidable.html b/formidable_1_0.orig/saisies/formulaire_formidable.html
new file mode 100644
index 0000000000000000000000000000000000000000..e8d8bb4c1204991da452287b47e367c7cd5664ca
--- /dev/null
+++ b/formidable_1_0.orig/saisies/formulaire_formidable.html
@@ -0,0 +1,22 @@
+[(#REM) 
+  Saisie permettant de sélectionner un formulaire par son identifiant
+  
+  ### /!\ boucle POUR (spip Bonux) ###
+	
+  Parametres :
+  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
+  - cacher_option_intro : pas de premier option vide  (defaut:"")
+  - class : classe(s) css ajoutes au select
+  
+  Exemple d'appel :
+	[(#SAISIE{formulaire_formidable,nom,
+		label=<:plugin:label:>,
+	})] 
+]
+
+<select name="#ENV{nom}" id="champ_#ENV{nom}"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"]>
+[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
+<BOUCLE_selection(FORMULAIRES){par titre}>
+	<option value="#IDENTIFIANT" [(#IDENTIFIANT|=={#ENV{valeur,#ENV{defaut}}}|oui) selected="selected"]>[(#TITRE|typo)] (#IDENTIFIANT)</option>
+</BOUCLE_selection>
+</select>
diff --git a/formidable_1_0.orig/saisies/formulaire_formidable_multiple.html b/formidable_1_0.orig/saisies/formulaire_formidable_multiple.html
new file mode 100644
index 0000000000000000000000000000000000000000..b8ef7aaac4868b1e36161b4a6e2036612c42271a
--- /dev/null
+++ b/formidable_1_0.orig/saisies/formulaire_formidable_multiple.html
@@ -0,0 +1,26 @@
+[(#REM) 
+  Saisie permettant de sélectionner plusieurs formulaires par leur identifiant
+  
+  ### /!\ boucle POUR (spip Bonux) ###
+	
+  Parametres :
+  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
+  - cacher_option_intro : pas de premier option vide  (defaut:"")
+  - class : classe(s) css ajoutes au select
+  
+  Exemple d'appel :
+	[(#SAISIE{formulaire_formidable_multiple,nom,
+		label=<:plugin:label:>,
+	})] 
+]
+
+[(#REM) defaut peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
+#SET{defaut, #ENV{defaut}}
+#SET{defaut, #GET{defaut}|is_string|?{(#GET{defaut}|saisies_chaine2tableau), (#GET{defaut}|sinon{#ARRAY})}}
+
+<select name="#ENV{nom}[]" id="champ_#ENV{nom}" multiple="multiple"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"]>
+[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
+<BOUCLE_selection(FORMULAIRES){par titre}>
+	<option value="#IDENTIFIANT" [(#IDENTIFIANT|in_array{#ENV{valeur,#GET{defaut}}}|oui) selected="selected"]>[(#TITRE|typo)] (#IDENTIFIANT)</option>
+</BOUCLE_selection>
+</select>
diff --git a/formidable_1_0.orig/svn.revision b/formidable_1_0.orig/svn.revision
new file mode 100644
index 0000000000000000000000000000000000000000..e3105db23414c6cf0e68d890f7109b8d4e291c30
--- /dev/null
+++ b/formidable_1_0.orig/svn.revision
@@ -0,0 +1,10 @@
+<svn_revision>
+<text_version>
+Origine: file:///home/svn/repository/spip-zone/_plugins_/formidable/trunk
+Revision: 70631
+Dernier commit: 2013-03-12 18:28:10 +0100 
+</text_version>
+<origine>file:///home/svn/repository/spip-zone/_plugins_/formidable/trunk</origine>
+<revision>70631</revision>
+<commit>2013-03-12 18:28:10 +0100 </commit>
+</svn_revision>
\ No newline at end of file
diff --git a/formidable_1_0.orig/todo.txt b/formidable_1_0.orig/todo.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c857bbec9c562a8fde1d8be6d5c91a9197b26ca1
--- /dev/null
+++ b/formidable_1_0.orig/todo.txt
@@ -0,0 +1,19 @@
+
+À faire :
+---------
++ Ajouter des liens "réponse précédente/suivante" dans la visualisation d'une réponse
++ Afficher une boite listant les formulaires disponibles dans l'édition d'un article
++ Afficher des saisies en javascript suivant des conditions
++ Utiliser le plugin CVT multi-pages de Cédric
++ Afficher des pages suivant des conditions (scénarios)
++ Pouvoir attacher des fichiers (et donc les envoyer par mail et les enregistrer en base comme document)
++ Déplacer les saisies en drag-n-drop
++ Ajouter une saisie directement au bon endroit en drag-n-drop
++ Améliorer le texte brut généré à partir du HTML
+
+Idées :
+-------
++ Permettre des messages différents lors de la réédition d'un formulaire (avant et après modification)
++ Permettre de prévisualiser avant soumission le formulaire
++ Premettre d'afficher un formulaire en fonction du statut du visiteur
++ Avoir lors de l'édition des champs du formulaire un bouton «Enregistrer et continuer d'éditer»
diff --git a/formidable_1_0.orig/traiter/email.php b/formidable_1_0.orig/traiter/email.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7a60e4728f33da2633c22da0c8ea50bcdda8402
--- /dev/null
+++ b/formidable_1_0.orig/traiter/email.php
@@ -0,0 +1,193 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function traiter_email_dist($args, $retours){
+	$formulaire = $args['formulaire'];
+	$options = $args['options'];
+	$saisies = unserialize($formulaire['saisies']);
+	$traitements = unserialize($formulaire['traitements']);
+	$champs = saisies_lister_champs($saisies);
+	
+	// On récupère les destinataires
+	if ($options['champ_destinataires']){
+		$destinataires = _request($options['champ_destinataires']);
+		if (!is_array($destinataires) and intval($destinataires)){
+			$destinataires = array($destinataires);
+		}
+		if (is_array($destinataires)){
+			// On récupère les mails des destinataires
+			$destinataires = array_map('intval', $destinataires);
+			$destinataires = sql_allfetsel(
+				'email',
+				'spip_auteurs',
+				sql_in('id_auteur', $destinataires)
+			);
+			$destinataires = array_map('reset', $destinataires);
+		}
+	}
+	if (!$destinataires)
+		$destinataires = array();
+	
+	// On ajoute les destinataires en plus
+	if ($options['destinataires_plus']){
+		$destinataires_plus = explode(',', $options['destinataires_plus']);
+		$destinataires_plus = array_map('trim', $destinataires_plus);
+		$destinataires = array_merge($destinataires, $destinataires_plus);
+		$destinataires = array_unique($destinataires);
+	}
+	
+	// On récupère le courriel de l'envoyeur s'il existe
+	if ($options['champ_courriel']){
+		$courriel_envoyeur = _request($options['champ_courriel']);
+	}
+	if (!$courriel_envoyeur) $courriel_envoyeur = '';
+	
+	// Si on a bien des destinataires, on peut continuer
+	if ($destinataires or ($courriel_envoyeur and $options['activer_accuse'])){
+		include_spip('inc/filtres');
+		include_spip('inc/texte');
+		
+		$nom_site_spip = supprimer_tags(typo($GLOBALS['meta']['nom_site']));
+		
+		// On parcourt les champs pour générer le tableau des valeurs
+		$valeurs = array();
+		foreach ($champs as $champ){
+			$valeurs[$champ] = _request($champ);
+		}
+		
+		// On récupère le nom de l'envoyeur
+		if ($options['champ_nom']){
+			$a_remplacer = array();
+			if (preg_match_all('/@[\w]+@/', $options['champ_nom'], $a_remplacer)){
+				$a_remplacer = $a_remplacer[0];
+				foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
+				$a_remplacer = array_flip($a_remplacer);
+				$a_remplacer = array_intersect_key($valeurs, $a_remplacer);
+				$a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
+			}
+			$nom_envoyeur = trim(_L($options['champ_nom'], $a_remplacer));
+		}
+		if (!$nom_envoyeur) $nom_envoyeur = $GLOBALS['meta']['nom_site'];
+		
+		// On récupère le sujet s'il existe sinon on le construit
+		if ($options['champ_sujet']){
+			$a_remplacer = array();
+			if (preg_match_all('/@[\w]+@/', $options['champ_sujet'], $a_remplacer)){
+				$a_remplacer = $a_remplacer[0];
+				foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
+				$a_remplacer = array_flip($a_remplacer);
+				$a_remplacer = array_intersect_key($valeurs, $a_remplacer);
+				$a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
+			}
+			$sujet = trim(_L($options['champ_sujet'], $a_remplacer));
+		}
+		if (!$sujet) $sujet = _T('formidable:traiter_email_sujet', array('nom'=>$nom_envoyeur));
+		$sujet = filtrer_entites($sujet);
+		
+		// Mais quel va donc être le fond ?
+		if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_email.html'))
+			$notification = 'notifications/formulaire_'.$formulaire['identifiant'].'_email';
+		else
+			$notification = 'notifications/formulaire_email';
+		
+		// On génère le mail avec le fond
+		$html = recuperer_fond(
+			$notification,
+			array(
+				'id_formulaire' => $formulaire['id_formulaire'],
+				'titre' => _T_ou_typo($formulaire['titre']),
+				'traitements' => $traitements,
+				'saisies' => $saisies,
+				'valeurs' => $valeurs
+			)
+		);
+		
+		// On génère le texte brut
+		include_spip('classes/facteur');
+		$texte = Facteur::html2text($html);
+		
+		// On utilise la forme avancé de Facteur
+		$corps = array(
+			'html' => $html,
+			'texte' => $texte,
+			'nom_envoyeur' => $nom_envoyeur
+		);
+		// Si l'utilisateur n'a pas indiqué autrement, on met le courriel de l'envoyeur dans
+		// Reply-To et on laisse le from par defaut de Facteur car sinon ca bloque sur les
+		// SMTP un peu restrictifs.
+		$courriel_from = "";
+		if ($courriel_envoyeur && $options['activer_vrai_envoyeur']){
+			$courriel_from = $courriel_envoyeur;
+		} else if ($courriel_envoyeur) {
+			$corps['repondre_a'] = $courriel_envoyeur;
+		}
+		
+		// On envoie enfin le message
+		$envoyer_mail = charger_fonction('envoyer_mail','inc');
+		
+		// On envoie aux destinataires
+		if ($destinataires)
+			$ok = $envoyer_mail($destinataires, $sujet, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']);
+		
+		// Si c'est bon, on envoie l'accusé de réception
+		if ($ok and $courriel_envoyeur and $options['activer_accuse']){
+			// On récupère le sujet s'il existe sinon on le construit
+			if ($options['sujet_accuse']){
+				$a_remplacer = array();
+				if (preg_match_all('/@[\w]+@/', $options['sujet_accuse'], $a_remplacer)){
+					$a_remplacer = $a_remplacer[0];
+					foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
+					$a_remplacer = array_flip($a_remplacer);
+					$a_remplacer = array_intersect_key($valeurs, $a_remplacer);
+					$a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
+				}
+				$sujet_accuse = trim(_L($options['sujet_accuse'], $a_remplacer));
+			}
+			if (!$sujet_accuse) $sujet_accuse = _T('formidable:traiter_email_sujet_accuse');
+			$sujet_accuse = filtrer_entites($sujet_accuse);
+			
+			// Mais quel va donc être le fond ?
+			if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_accuse.html'))
+				$accuse = 'notifications/formulaire_'.$formulaire['identifiant'].'_accuse';
+			else
+				$accuse = 'notifications/formulaire_accuse';
+				
+			// On génère l'accusé de réception
+			$html_accuse = recuperer_fond(
+				$accuse,
+				array(
+					'id_formulaire' => $formulaire['id_formulaire'],
+					'titre' => _T_ou_typo($formulaire['titre']),
+					'message_retour' => $formulaire['message_retour'],
+					'traitements' => $traitements,
+					'saisies' => $saisies,
+					'valeurs' => $valeurs
+				)
+			);
+			
+			// On génère le texte brut
+			$texte = Facteur::html2text($html_accuse);
+			
+			$corps = array(
+				'html' => $html_accuse,
+				'texte' => $texte,
+				'nom_envoyeur' => $nom_site_spip
+			);
+
+			$ok = $envoyer_mail($courriel_envoyeur, $sujet_accuse, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']);
+		}
+		
+		if ($ok){
+			$retours['message_ok'] .= "\n<br/>"._T('formidable:traiter_email_message_ok');
+		}
+		else{
+			$retours['message_erreur'] .= "\n<br/>"._T('formidable:traiter_email_message_erreur');
+		}
+	}
+	
+	return $retours;
+}
+
+?>
diff --git a/formidable_1_0.orig/traiter/email.yaml b/formidable_1_0.orig/traiter/email.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..4f5b4d7f842c83230d3700e1b7a59ce6adbe4552
--- /dev/null
+++ b/formidable_1_0.orig/traiter/email.yaml
@@ -0,0 +1,57 @@
+
+titre: '<:formidable:traiter_email_titre:>'
+description: '<:formidable:traiter_email_description:>'
+options:
+  -
+    saisie: 'champ'
+    options:
+      nom: 'champ_destinataires'
+      label: '<:formidable:traiter_email_option_destinataires_label:>'
+      explication: '<:formidable:traiter_email_option_destinataires_explication:>'
+      forcer_type: [destinataires,hidden]
+      env: true
+  -
+    saisie: 'input'
+    options:
+      nom: 'destinataires_plus'
+      label: '<:formidable:traiter_email_option_destinataires_plus_label:>'
+      explication: '<:formidable:traiter_email_option_destinataires_plus_explication:>'
+    verifier:
+      type: 'email'
+  -
+    saisie: 'champ'
+    options:
+      nom: 'champ_courriel'
+      label: '<:formidable:traiter_email_option_envoyeur_courriel_label:>'
+      explication: '<:formidable:traiter_email_option_envoyeur_courriel_explication:>'
+      env: true
+  -
+    saisie: 'case'
+    options:
+      nom: 'activer_vrai_envoyeur'
+      label: '<:formidable:traiter_email_option_vrai_envoyeur_label:>'
+      explication: '<:formidable:traiter_email_option_vrai_envoyeur_explication:>'
+  -
+    saisie: 'input'
+    options:
+      nom: 'champ_nom'
+      label: '<:formidable:traiter_email_option_envoyeur_nom_label:>'
+      explication: '<:formidable:traiter_email_option_envoyeur_nom_explication:>'
+  -
+    saisie: 'input'
+    options:
+      nom: 'champ_sujet'
+      label: '<:formidable:traiter_email_option_sujet_label:>'
+      explication: '<:formidable:traiter_email_option_sujet_explication:>'
+  -
+    saisie: 'case'
+    options:
+      nom: 'activer_accuse'
+      label: '<:formidable:traiter_email_option_activer_accuse_label:>'
+      label_case: '<:formidable:traiter_email_option_activer_accuse_label_case:>'
+  -
+    saisie: 'input'
+    options:
+      nom: 'sujet_accuse'
+      label: '<:formidable:traiter_email_option_sujet_accuse_label:>'
+      explication: '<:formidable:traiter_email_option_sujet_explication:>'
diff --git a/formidable_1_0.orig/traiter/enregistrement.php b/formidable_1_0.orig/traiter/enregistrement.php
new file mode 100644
index 0000000000000000000000000000000000000000..678b1f9fd7cfe15402a6dfdcfd28b9f5ba646b17
--- /dev/null
+++ b/formidable_1_0.orig/traiter/enregistrement.php
@@ -0,0 +1,129 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function traiter_enregistrement_dist($args, $retours){
+	include_spip('inc/formidable');
+	include_spip('base/abstract_sql');
+	$options = $args['options'];
+	$formulaire = $args['formulaire'];
+	$id_formulaire = intval($formulaire['id_formulaire']);
+	$saisies = unserialize($formulaire['saisies']);
+	$saisies = saisies_lister_par_nom($saisies);
+	
+	// La personne a-t-elle un compte ?
+	global $auteur_session;
+	$id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
+	
+	// On cherche le cookie et sinon on le crée
+	$nom_cookie = formidable_generer_nom_cookie($id_formulaire);
+	if (isset($_COOKIE[$nom_cookie]))
+		$cookie = $_COOKIE[$nom_cookie];
+	else {
+		include_spip("inc/acces");
+		$cookie = creer_uniqid();
+	}
+	
+	// On regarde si c'est une modif d'une réponse existante
+	$id_formulaires_reponse = intval(_request('deja_enregistre_'.$id_formulaire));
+	
+	// Si la moderation est a posteriori ou que la personne est un boss, on publie direct
+	if ($options['moderation'] == 'posteriori' or autoriser('instituer', 'formulaires_reponse', $id_formulaires_reponse, null, array('id_formulaire'=>$id_formulaire, 'nouveau_statut'=>'publie')))
+		$statut='publie';
+	else
+		$statut = 'prop';
+	
+	// Si ce n'est pas une modif d'une réponse existante, on crée d'abord la réponse
+	if (!$id_formulaires_reponse){
+		$id_formulaires_reponse = sql_insertq(
+			'spip_formulaires_reponses',
+			array(
+				'id_formulaire' => $id_formulaire,
+				'id_auteur' => $id_auteur,
+				'cookie' => $cookie,
+				'ip' => $GLOBALS['ip'],
+				'date' => 'NOW()',
+				'statut' => $statut
+			)
+		);
+		// Si on a pas le droit de répondre plusieurs fois ou que les réponses seront modifiables, il faut poser un cookie
+		if (!$options['multiple'] or $options['modifiable']){
+			include_spip("inc/cookie");
+			// Expiration dans 30 jours
+			spip_setcookie($nom_cookie, $_COOKIE[$nom_cookie] = $cookie, time() + 30 * 24 * 3600);
+		}
+	}
+	
+	// Si l'id n'a pas été créé correctement alors erreur
+	if (!($id_formulaires_reponse > 0)){
+		$retours['message_erreur'] .= "\n<br/>"._T('formidable:traiter_enregistrement_erreur_base');
+	}
+	// Sinon on continue à mettre à jour
+	else{
+		$champs = array();
+		$insertions = array();
+		foreach($saisies as $nom => $saisie){
+			// On ne prend que les champs qui ont effectivement été envoyés par le formulaire
+			if (($valeur = _request($nom)) !== null){
+				$champs[] = $nom;
+				$insertions[] = array(
+					'id_formulaires_reponse' => $id_formulaires_reponse,
+					'nom' => $nom,
+					'valeur' => is_array($valeur) ? serialize($valeur) : $valeur
+				);
+			}
+		}
+		
+		// S'il y a bien des choses à modifier
+		if ($champs){
+			// On supprime d'abord les champs
+			sql_delete(
+				'spip_formulaires_reponses_champs',
+				array(
+					'id_formulaires_reponse = '.$id_formulaires_reponse,
+					sql_in('nom', $champs)
+				)
+			);
+			
+			// Puis on insère les nouvelles valeurs
+			sql_insertq_multi(
+				'spip_formulaires_reponses_champs',
+				$insertions
+			);
+		}
+	}
+	
+	return $retours;
+}
+
+function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles){
+	include_spip('inc/saisies');
+	include_spip('base/abstract_sql');
+	$comparaison = saisies_comparer($saisies_anciennes, $saisies_nouvelles);
+	
+	// Si des champs ont été supprimés, il faut supprimer les réponses à ces champs
+	if ($comparaison['supprimees']){
+		// On récupère les réponses du formulaire
+		$reponses = sql_allfetsel(
+			'id_formulaires_reponse',
+			'spip_formulaires_reponses',
+			'id_formulaire = '.$id_formulaire
+		);
+		$reponses = array_map('reset', $reponses);
+		
+		// Tous les noms de champs à supprimer
+		$noms = array_keys($comparaison['supprimees']);
+		
+		// On supprime
+		sql_delete(
+			'spip_formulaires_reponses_champs',
+			array(
+				sql_in('id_formulaires_reponse', $reponses),
+				sql_in('nom', $noms)
+			)
+		);
+	}
+}
+
+?>
diff --git a/formidable_1_0.orig/traiter/enregistrement.yaml b/formidable_1_0.orig/traiter/enregistrement.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3fae3210633292047b494c64795a2cc709d11650
--- /dev/null
+++ b/formidable_1_0.orig/traiter/enregistrement.yaml
@@ -0,0 +1,37 @@
+
+titre: '<:formidable:traiter_enregistrement_titre:>'
+description: '<:formidable:traiter_enregistrement_description:>'
+options:
+  -
+    saisie: 'oui_non'
+    options:
+      nom: 'multiple'
+      label: '<:formidable:traiter_enregistrement_option_multiple_label:>'
+      explication: '<:formidable:traiter_enregistrement_option_multiple_explication:>'
+      defaut: 'on'
+  -
+    saisie: 'oui_non'
+    options:
+      nom: 'modifiable'
+      label: '<:formidable:traiter_enregistrement_option_modifiable_label:>'
+      explication: '<:formidable:traiter_enregistrement_option_modifiable_explication:>'
+      defaut: ''
+  -
+    saisie: 'radio'
+    options:
+      nom: 'identification'
+      label: '<:formidable:traiter_enregistrement_option_identification_label:>'
+      explication: '<:formidable:traiter_enregistrement_option_identification_explication:>'
+      datas:
+        cookie: '<:formidable:identification_par_cookie:>'
+        id_auteur: '<:formidable:identification_par_id_auteur:>'
+      defaut: 'cookie'
+  -
+    saisie: 'radio'
+    options:
+      nom: 'moderation'
+      label: '<:formidable:traiter_enregistrement_option_moderation_label:>'
+      datas:
+        posteriori: '<:forum:bouton_radio_modere_posteriori:>'
+        priori: '<:forum:bouton_radio_modere_priori:>'
+      defaut: 'posteriori'
diff --git a/formidable_1_0/CVS/Entries b/formidable_1_0/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..6c30ae13d6febe0b67448816bcb1c85ffd0ebd62
--- /dev/null
+++ b/formidable_1_0/CVS/Entries
@@ -0,0 +1,28 @@
+/formidable_administrations.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formidable_fonctions.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formidable_options.php/1.3/Tue Dec 11 13:15:05 2012//
+/formidable_pipelines.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/paquet.xml/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/svn.revision/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/todo.txt/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D/action////
+D/base////
+D/css////
+D/echanger////
+D/exec////
+D/formulaires////
+D/icones_barre////
+D/images////
+D/inc////
+D/lang////
+D/modeles////
+D/noisettes////
+D/notifications////
+D/prive////
+D/public////
+D/puce_statut////
+D/saisies////
+D/saisies-analyses////
+D/saisies-vues////
+D/traiter////
+/formidable_autorisations.php/1.4/Tue Mar 19 14:47:51 2013//
diff --git a/formidable_1_0/CVS/Repository b/formidable_1_0/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..ab0fe911830af6ac2fe942aa32b94b5c2ed008a5
--- /dev/null
+++ b/formidable_1_0/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3
diff --git a/formidable_1_0/CVS/Root b/formidable_1_0/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/action/CVS/Entries b/formidable_1_0/action/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..f7d36e1c9a44ab2a5aabed7ab64a6a3b63132831
--- /dev/null
+++ b/formidable_1_0/action/CVS/Entries
@@ -0,0 +1,9 @@
+/dupliquer_formulaire.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/editer_formulaire.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/exporter_formulaire.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/exporter_formulaires_reponses.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/instituer_formulaires_reponse.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/supprimer_formulaire.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/supprimer_formulaires_reponse.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/exporter_analyse_reponses.php/1.1/Tue Mar 19 15:03:17 2013//
+D
diff --git a/formidable_1_0/action/CVS/Repository b/formidable_1_0/action/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..688e5ac02fa42633dcef5eff041be8b41b67220a
--- /dev/null
+++ b/formidable_1_0/action/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/action
diff --git a/formidable_1_0/action/CVS/Root b/formidable_1_0/action/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/action/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/action/dupliquer_formulaire.php b/formidable_1_0/action/dupliquer_formulaire.php
new file mode 100644
index 0000000000000000000000000000000000000000..93ef6d8cb7aaa2b94d0bb66ac422435b1e27dd35
--- /dev/null
+++ b/formidable_1_0/action/dupliquer_formulaire.php
@@ -0,0 +1,60 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Dupliquer un formulaire
+ * @param unknown_type $arg
+ * @return unknown_type
+ */
+function action_dupliquer_formulaire_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+	$id_formulaire = intval($arg);
+
+	// Si le formulaire existe bien
+	if ($id_formulaire > 0 and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)){
+		include_spip('action/editer_formulaire');
+		// On enlève les champs inutiles
+		unset($formulaire['id_formulaire']);
+		// On modifie un peu le titre
+		$formulaire['titre'] = $formulaire['titre'].' '._T('formidable:formulaires_dupliquer_copie');
+		// On s'assure que l'identifiant n'existe pas déjà
+		$formulaire['identifiant'] = $formulaire['identifiant'].'_'.time();
+		// On insère un nouveau formulaire
+		$id_formulaire = insert_formulaire();
+		// Si ça a marché on modifie les champs de base
+		if ($id_formulaire > 0 and !($erreur = formulaire_set($id_formulaire, $formulaire))){
+			// Et ensuite les saisies et les traitements
+			$ok = sql_updateq(
+				'spip_formulaires',
+				array(
+					'saisies' => $formulaire['saisies'],
+					'traitements' => $formulaire['traitements']
+				),
+				'id_formulaire = '.$id_formulaire
+			);
+			// Et on redirige vers la vue
+			$redirect = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $id_formulaire, '&');
+		}
+		// Sinon on reste sur la page qui liste tout
+		else{
+			$redirect = generer_url_ecrire('formulaires');
+		}
+	}
+
+	// Si on a précisé une direction on va plutôt là
+	if (_request('redirect')) {
+		$redirect = parametre_url(urldecode(_request('redirect')),
+			'id_formulaire', $id_formulaire, '&') . $erreur;
+	}
+	
+	// On redirige
+	include_spip('inc/headers');
+	redirige_par_entete($redirect);
+}
+
+?>
diff --git a/formidable_1_0/action/editer_formulaire.php b/formidable_1_0/action/editer_formulaire.php
new file mode 100644
index 0000000000000000000000000000000000000000..2254bf8cabab416df9c6e725962bb882c4322803
--- /dev/null
+++ b/formidable_1_0/action/editer_formulaire.php
@@ -0,0 +1,98 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Action de création / Modification d'un formulaire
+ * @param unknown_type $arg
+ * @return unknown_type
+ */
+function action_editer_formulaire_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+
+	// si id_formulaire n'est pas un nombre, c'est une creation
+	if (!$id_formulaire = intval($arg)) {
+		$id_formulaire = insert_formulaire();
+	}
+
+	// Enregistre l'envoi dans la BD
+	if ($id_formulaire > 0) $err = formulaire_set($id_formulaire);
+
+	if (_request('redirect')) {
+		$redirect = parametre_url(urldecode(_request('redirect')),
+			'id_formulaire', $id_formulaire, '&') . $err;
+
+		include_spip('inc/headers');
+		redirige_par_entete($redirect);
+	}
+	else
+		return array($id_formulaire,$err);
+}
+
+/**
+ * Crée un nouveau formulaire et retourne son ID
+ *
+ * @return int id_formulaire
+ */
+function insert_formulaire() {
+	// Envoyer aux plugins
+	$champs = pipeline('pre_insertion',
+		array(
+			'args' => array(
+				'table' => 'spip_formulaires',
+			),
+			'data' => $champs
+		)
+	);
+	$id_formulaire = sql_insertq("spip_formulaires");
+
+	return $id_formulaire;
+}
+
+/**
+ * Appelle la fonction de modification d'un formulaire
+ *
+ * @param int $id_formulaire
+ * @param unknown_type $set
+ * @return $err
+ */
+function formulaire_set($id_formulaire, $set=null) {
+	include_spip('inc/saisies');
+	$err = '';
+
+	$c = array();
+	$champs = saisies_lister_champs($GLOBALS['formulaires']['editer_formulaire']);
+	foreach ($champs as $champ)
+		$c[$champ] = _request($champ,$set);
+	
+	include_spip('inc/modifier');
+	revision_formulaire($id_formulaire, $c);
+
+	return $err;
+}
+
+/**
+ * Enregistre une révision de formulaire
+ *
+ * @param int $id_formulaire
+ * @param array $c
+ * @return
+ */
+function revision_formulaire($id_formulaire, $c=false) {
+	$invalideur = "id='id_formulaire/$id_formulaire'";
+
+	modifier_contenu('formulaire', $id_formulaire,
+		array(
+			'nonvide' => array('titre' => _T('info_sans_titre')),
+			'invalideur' => $invalideur
+		),
+		$c);
+
+	return ''; // pas d'erreur
+}
+
+?>
diff --git a/formidable_1_0/action/exporter_analyse_reponses.php b/formidable_1_0/action/exporter_analyse_reponses.php
new file mode 100755
index 0000000000000000000000000000000000000000..c00570914c81d2a0b97707da73d073d14da0f4f2
--- /dev/null
+++ b/formidable_1_0/action/exporter_analyse_reponses.php
@@ -0,0 +1,103 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/*
+ * Exporter l'analyse des réponses d'un formulaire
+ * @param unknown_type $arg
+ * @return unknown_type
+ */
+function action_exporter_analyse_reponses_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+
+	// on ne fait des choses seulements si le formulaire existe et qu'il a des enregistrements
+	$ok = false;
+	if (
+		$id_formulaire = intval($arg)
+		and $formulaire = sql_fetsel('*','spip_formulaires','id_formulaire = '.$id_formulaire)
+		and $reponses = sql_allfetsel('*', 'spip_formulaires_reponses', 'id_formulaire = '.$id_formulaire.' and statut = '.sql_quote('publie'))
+	) {
+		include_spip('inc/saisies');
+		include_spip('classes/facteur');
+		include_spip('inc/filtres');
+        $reponses_completes = array();
+
+        $saisies = saisies_lister_par_nom(unserialize($formulaire['saisies']), false);
+
+		$res = sql_select(
+            array('nom, valeur'),
+
+            'intranet_formulaires_reponses_champs AS FRC,
+            intranet_formulaires_reponses AS FR,
+            intranet_formulaires AS F',
+
+            "FRC.id_formulaires_reponse=FR.id_formulaires_reponse
+            AND FR.statut='publie'
+            AND F.id_formulaire=FR.id_formulaire
+            AND F.id_formulaire=$id_formulaire"
+        );
+
+        $valeurs = array();
+        while($r = sql_fetch($res)) {
+            $valeurs[$r['nom']][] = is_array(unserialize($r['valeur']))
+                ? unserialize($r['valeur'])
+                : $r['valeur'];
+        }
+
+        foreach ($saisies as $nom=>$saisie){
+            $valeur = sql_getfetsel(
+                'valeur',
+                'spip_formulaires_reponses_champs',
+                'id_formulaires_reponse = '.intval($reponse['id_formulaires_reponse']).' and nom = '.sql_quote($nom)
+            );
+            if (is_array(unserialize($valeur)))
+                $valeur = unserialize($valeur);
+
+            $reponse_complete[] = formidable_analyser_saisie($saisie, $valeurs, 0, true);
+        }
+
+        $colonnes = array(_T('formidable:champ'), _T('formidable:sans_reponses'));
+        foreach($reponse_complete as $reponses) {
+            foreach($reponses as $key => $reponse) {
+                if ($key == 'header' || $key == 'sans_reponse') continue;
+                if (in_array($key, $colonnes) == false)
+                    array_push($colonnes, $key);
+            }
+        }
+
+        $csv = array();
+        foreach($reponse_complete as $reponses) {
+            foreach($colonnes as $colonne) {
+                $csv[$reponses['header']][$colonne] =
+                    isset($reponses[$colonne])
+                        ? $reponses[$colonne]
+                        : '';
+            }
+            $csv[$reponses['header']][_T('formidable:champ')] = $reponses['header'];
+            $csv[$reponses['header']][_T('formidable:sans_reponses')]
+                = $reponses['formidable:sans_reponse'];
+        }
+
+        $cpt_ligne = 1;
+        $reponses_completes = array();
+        $reponses_completes[0] = $colonnes;
+        foreach($csv as $ligne => $colonnes) {
+            $cpt_colonne = 0;
+            foreach($colonnes as $colonne) {
+                $reponses_completes[$cpt_ligne][$cpt_colonne++] = $colonne;
+            }
+            $cpt_ligne++;
+        }
+
+		if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)){
+			echo $exporter_csv('analyses-formulaire-'.$formulaire['identifiant'], $reponses_completes);
+			exit();
+		}
+	}
+}
+
+?>
diff --git a/formidable_1_0/action/exporter_formulaire.php b/formidable_1_0/action/exporter_formulaire.php
new file mode 100644
index 0000000000000000000000000000000000000000..df240834dd3c07c926f300f5f00c562a0d8029aa
--- /dev/null
+++ b/formidable_1_0/action/exporter_formulaire.php
@@ -0,0 +1,24 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function action_exporter_formulaire_dist(){
+	include_spip('inc/formidable');
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+	
+	list($id_formulaire, $type_export) = preg_split('/[\W]/', $arg);
+	
+	if ($id_formulaire > 0
+		and $type_export
+		and $types_echange = echanges_formulaire_lister_disponibles()
+		and $exporter = $types_echange['exporter'][$type_export]
+	){
+		$exporter($id_formulaire);
+	}
+}
+
+?>
diff --git a/formidable_1_0/action/exporter_formulaires_reponses.php b/formidable_1_0/action/exporter_formulaires_reponses.php
new file mode 100644
index 0000000000000000000000000000000000000000..4105d4f0c2321caeefbfb209133e328367989ae9
--- /dev/null
+++ b/formidable_1_0/action/exporter_formulaires_reponses.php
@@ -0,0 +1,85 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/*
+ * Exporter toutes les réponses d'un formulaire
+ * @param unknown_type $arg
+ * @return unknown_type
+ */
+function action_exporter_formulaires_reponses_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+
+	// on ne fait des choses seulements si le formulaire existe et qu'il a des enregistrements
+	$ok = false;
+	if (
+		$id_formulaire = intval($arg)
+		and $formulaire = sql_fetsel('*','spip_formulaires','id_formulaire = '.$id_formulaire)
+		and $reponses = sql_allfetsel('*', 'spip_formulaires_reponses', 'id_formulaire = '.$id_formulaire.' and statut = '.sql_quote('publie'))
+	) {
+		include_spip('inc/saisies');
+		include_spip('classes/facteur');
+		include_spip('inc/filtres');
+		$reponses_completes = array();
+		
+		// La première ligne des titres
+		$titres = array(_T('public:date'), _T('formidable:reponses_auteur'), _T('formidable:reponses_ip'));
+		$saisies = saisies_lister_par_nom(unserialize($formulaire['saisies']), false);
+		foreach ($saisies as $nom=>$saisie){
+			$options = $saisie['options'];
+			$titres[] = sinon($options['label_case'], sinon($options['label'], $nom));
+		}
+		$reponses_completes[] = $titres;
+		
+		// On parcourt chaque réponse
+		foreach ($reponses as $reponse){
+			// Est-ce qu'il y a un auteur avec un nom
+			$nom_auteur = '';
+			if ($id_auteur = intval($reponse['id_auteur'])){
+				$nom_auteur = sql_getfetsel('nom', 'spip_auteurs', 'id_auteur = '.$id_auteur);
+			}
+			if (!$nom_auteur) $nom_auteur = '';
+			
+			// Le début de la réponse avec les infos (date, auteur, etc)
+			$reponse_complete = array($reponse['date'], $nom_auteur, $reponse['ip']);
+			
+			// Ensuite tous les champs
+			foreach ($saisies as $nom=>$saisie){
+				$valeur = sql_getfetsel(
+					'valeur',
+					'spip_formulaires_reponses_champs',
+					'id_formulaires_reponse = '.intval($reponse['id_formulaires_reponse']).' and nom = '.sql_quote($nom)
+				);
+				if (is_array(unserialize($valeur)))
+					$valeur = unserialize($valeur);
+				$reponse_complete[] = Facteur::html2text(
+					recuperer_fond(
+						'saisies-vues/_base',
+						array_merge(
+							array(
+								'valeur_uniquement' => 'oui',
+								'type_saisie' => $saisie['saisie'],
+								'valeur' => $valeur
+							),
+							$saisie['options']
+						)
+					)
+				);
+			}
+			
+			// On ajoute la ligne à l'ensemble des réponses
+			$reponses_completes[] = $reponse_complete;
+		}
+		
+		if ($reponses_completes and $exporter_csv = charger_fonction('exporter_csv', 'inc/', true)){
+			echo $exporter_csv('reponses-formulaire-'.$formulaire['identifiant'], $reponses_completes);
+			exit();
+		}
+	}
+}
+
+?>
diff --git a/formidable_1_0/action/instituer_formulaires_reponse.php b/formidable_1_0/action/instituer_formulaires_reponse.php
new file mode 100644
index 0000000000000000000000000000000000000000..211057e06f66bc65c46d623861cf1fa786b852bc
--- /dev/null
+++ b/formidable_1_0/action/instituer_formulaires_reponse.php
@@ -0,0 +1,34 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Action de création / Modification d'un truc
+ * @param unknown_type $arg
+ * @return unknown_type
+ */
+function action_instituer_formulaires_reponse_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+
+	list($id_formulaires_reponse, $statut) = preg_split('/\W/', $arg);
+	if (!$statut) return; // impossible mais sait-on jamais
+	
+	$id_formulaires_reponse = intval($id_formulaires_reponse);
+	
+	$ok = sql_updateq(
+		'spip_formulaires_reponses',
+		array(
+			'statut' => $statut
+		),
+		'id_formulaires_reponse = '.$id_formulaires_reponse
+	);
+	if (!$ok) $err = 'erreur';
+	
+	return array($id_formulaires_reponse, $err);
+}
+
+?>
diff --git a/formidable_1_0/action/supprimer_formulaire.php b/formidable_1_0/action/supprimer_formulaire.php
new file mode 100644
index 0000000000000000000000000000000000000000..372cebe136ad71acdd36d61e66c9e3ef142804a2
--- /dev/null
+++ b/formidable_1_0/action/supprimer_formulaire.php
@@ -0,0 +1,61 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Action de suppression d'un formulaire
+ * @param int $arg
+ * @return unknown_type
+ */
+function action_supprimer_formulaire_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+
+	// si id_formulaire n'est pas un nombre, on ne fait rien
+	if ($id_formulaire = intval($arg)) {
+		// On supprime le formulaire lui-même
+		$ok = sql_delete(
+			'spip_formulaires',
+			'id_formulaire = '.$id_formulaire
+		);
+		
+		if ($ok){
+			// Si c'est bon, on récupère les réponses pour les supprimer
+			$reponses = sql_allfetsel(
+				'id_formulaires_reponse',
+				'spip_formulaires_reponses',
+				'id_formulaire = '.$id_formulaire
+			);
+			$reponses = $reponses ? array_map('reset', $reponses) : false;
+		
+			// On supprime les réponses s'il y en a
+			if ($reponses){
+				$ok = sql_delete(
+					'spip_formulaires_reponses',
+					sql_in('id_formulaires_reponse', $reponses)
+				);
+			
+				// Si c'est bon, on supprime les champs des réponses
+				if ($ok){
+					$ok = sql_delete(
+						'spip_formulaires_reponses_champs',
+						sql_in('id_formulaires_reponse', $reponses)
+					);
+				}
+			}
+		}
+	}
+	
+	if ($ok){
+		if (!$redirect = _request('redirect'))
+			$redirect = generer_url_ecrire('formulaires');
+		
+		include_spip('inc/headers');
+		redirige_par_entete(str_replace("&amp;","&",urldecode($redirect)));
+	}
+}
+
+?>
diff --git a/formidable_1_0/action/supprimer_formulaires_reponse.php b/formidable_1_0/action/supprimer_formulaires_reponse.php
new file mode 100644
index 0000000000000000000000000000000000000000..98f106e4389f50dcac0729c19c920106e6c17842
--- /dev/null
+++ b/formidable_1_0/action/supprimer_formulaires_reponse.php
@@ -0,0 +1,50 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Action de suppression d'une réponse
+ * @param int $arg
+ * @return unknown_type
+ */
+function action_supprimer_formulaires_reponse_dist($arg=null) {
+	if (is_null($arg)){
+		$securiser_action = charger_fonction('securiser_action', 'inc');
+		$arg = $securiser_action();
+	}
+
+	// si id_formulaires_reponse n'est pas un nombre, on ne fait rien
+	if ($id_formulaires_reponse = intval($arg)) {
+		// On récupère l'id_formulaire pour la redirection
+		$id_formulaire = intval(sql_getfetsel(
+			'id_formulaire',
+			'spip_formulaires_reponses',
+			'id_formulaires_reponse = '.$id_formulaires_reponse
+		));
+		
+		// On supprime la réponse
+		$ok = sql_delete(
+			'spip_formulaires_reponses',
+			'id_formulaires_reponse = '.$id_formulaires_reponse
+		);
+		
+		// Si c'est bon, on supprime les champs des réponses
+		if ($ok){
+			$ok = sql_delete(
+				'spip_formulaires_reponses_champs',
+				'id_formulaires_reponse = '.$id_formulaires_reponse
+			);
+		}
+	}
+	
+	if ($ok){
+		if (!$redirect = _request('redirect'))
+			$redirect = parametre_url(generer_url_ecrire('formulaires_reponses'), 'id_formulaire', $id_formulaire);
+		
+		include_spip('inc/headers');
+		redirige_par_entete(str_replace("&amp;","&",urldecode($redirect)));
+	}
+}
+
+?>
diff --git a/formidable_1_0/base/CVS/Entries b/formidable_1_0/base/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..d5fe6b11e3856baa1f3dc01f8a9dff14cbaffc86
--- /dev/null
+++ b/formidable_1_0/base/CVS/Entries
@@ -0,0 +1,2 @@
+/formidable_tables.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/base/CVS/Repository b/formidable_1_0/base/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..75c7e5689d0a505153a3a8f564f5ed24792eae10
--- /dev/null
+++ b/formidable_1_0/base/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/base
diff --git a/formidable_1_0/base/CVS/Root b/formidable_1_0/base/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/base/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/base/formidable_tables.php b/formidable_1_0/base/formidable_tables.php
new file mode 100644
index 0000000000000000000000000000000000000000..4d5f43324c5827c16269dcfd27c577f12d96d3fe
--- /dev/null
+++ b/formidable_1_0/base/formidable_tables.php
@@ -0,0 +1,187 @@
+<?php
+
+/**
+ * Déclarations relatives à la base de données
+ * 
+ * @package SPIP\Formidable\Pipelines
+**/
+
+// Sécurité
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+/**
+ * Déclarer les interfaces des tables de formidable pour le compilateur
+ * 
+ * @pipeline declarer_tables_interfaces
+ * 
+ * @param array $interfaces
+ *     Déclarations d'interface pour le compilateur
+ * @return array
+ *     Déclarations d'interface pour le compilateur
+**/
+function formidable_declarer_tables_interfaces($interfaces) {
+	// 'spip_' dans l'index de $tables_principales
+	$interfaces['table_des_tables']['formulaires'] = 'formulaires';
+	$interfaces['table_des_tables']['formulaires_reponses'] = 'formulaires_reponses';
+	$interfaces['table_des_tables']['formulaires_reponses_champs'] = 'formulaires_reponses_champs';
+
+	$interfaces['tables_jointures']['spip_formulaires'][] = 'formulaires_liens';
+	$interfaces['tables_jointures']['spip_articles'][] = 'formulaires_liens';
+	$interfaces['tables_jointures']['spip_rubriques'][] = 'formulaires_liens';
+
+	return $interfaces;
+}
+
+/**
+ * Déclarer les objets éditoriaux des formulaires
+ *
+ * @pipeline declarer_tables_objets_sql
+ * @param array $tables
+ *     Description des tables
+ * @return array
+ *     Description complétée des tables
+ */
+function formidable_declarer_tables_objets_sql($tables) {
+	$tables['spip_formulaires'] = array(
+		'type'=>'formulaire',
+		'titre' => "titre, '' AS lang",
+		'date' => '',
+		'principale' => 'oui',
+		
+		'field' => array(
+			"id_formulaire" => "bigint(21) NOT NULL",
+			"identifiant" => "varchar(200)",
+			"titre" => "text NOT NULL default ''",
+			"descriptif" => "text",
+			"message_retour" => "text NOT NULL default ''",
+			"saisies" => "text NOT NULL default ''",
+			"traitements" => "text NOT NULL default ''",
+			"public" => "enum('non', 'oui') DEFAULT 'non' NOT NULL",
+			"statut" => "varchar(10) NOT NULL default ''",
+			"maj" => "timestamp",
+			"apres" => "varchar(12) NOT NULL default ''",
+			"url_redirect" => "varchar(255)"
+		),
+		'key' => array(
+			"PRIMARY KEY" => "id_formulaire"
+		),
+		'join'=> array(
+			'id_formulaire' => 'id_formulaire'
+		),
+		'rechercher_champs' => array(
+		  'titre' => 5, 'descriptif' => 3
+		),
+	);
+
+	$tables['spip_formulaires_reponses'] = array(
+		'type'=>'formulaires_reponse',
+		'titre' => "'' AS titre, '' AS lang",
+		'date' => 'date',
+		'principale' => 'oui',
+
+		'field' => array(
+			"id_formulaires_reponse" => "bigint(21) NOT NULL",
+			"id_formulaire" => "bigint(21) NOT NULL default 0",
+			"date" => "datetime NOT NULL default '0000-00-00 00:00:00'",
+			"ip" => "varchar(255) NOT NULL default ''",
+			"id_auteur" => "bigint(21) NOT NULL default 0",
+			"cookie" => "varchar(255) NOT NULL default ''",
+			"statut" => "varchar(10) NOT NULL default ''",
+			"maj" => "timestamp"
+		),
+		'key' => array(
+			"PRIMARY KEY" => "id_formulaires_reponse",
+			"KEY id_formulaire" => "id_formulaire",
+			"KEY id_auteur" => "id_auteur",
+			"KEY cookie" => "cookie"
+		),
+		'join' => array(
+			'id_formulaires_reponse' => 'id_formulaires_reponse',
+			'id_formulaire' => 'id_formulaire',
+			'id_auteur' => 'id_auteur'
+		),
+		'statut'=> array(
+			array(
+				'champ' => 'statut',
+				'publie' => 'publie',
+				'previsu' => 'publie,prop',
+				'exception' => array('statut', 'tout'),
+			)
+		),
+		'texte_changer_statut' => 'formulaires_reponse:changer_statut',
+		'statut_titres' => array(
+			'prop'=>'info_article_propose',
+			'publie'=>'info_article_publie',
+			'poubelle'=>'info_article_supprime'
+		),
+		'statut_textes_instituer' => array(
+			'prop' => 'texte_statut_propose_evaluation',
+			'publie' => 'texte_statut_publie',
+			'refuse' => 'texte_statut_poubelle',
+		),
+	);
+	return $tables;
+}
+
+/**
+ * Déclarer les tables principales de formidable
+ *
+ * @pipeline declarer_tables_principales
+ * @param array $tables_principales
+ *     Description des tables
+ * @return array
+ *     Description complétée des tables
+**/
+function formidable_declarer_tables_principales($tables_principales){
+
+	// Table formulaires_reponses_champs 
+	$formulaires_reponses_champs = array(
+		"id_formulaires_reponse" => "bigint(21) NOT NULL default 0",
+		"nom" => "varchar(255) NOT NULL default ''",
+		"valeur" => "text NOT NULL DEFAULT ''",
+		"maj" => "timestamp"
+	);
+	$formulaires_reponses_champs_cles = array(
+		"PRIMARY KEY" => "id_formulaires_reponse, nom",
+		"KEY id_formulaires_reponse" => "id_formulaires_reponse"
+	);
+	$tables_principales['spip_formulaires_reponses_champs'] = array(
+		'field' => &$formulaires_reponses_champs,
+		'key' => &$formulaires_reponses_champs_cles
+	);
+	
+	return $tables_principales;
+}
+
+/**
+ * Déclarer les tables auxiliaires de formidable
+ *
+ * @pipeline declarer_tables_auxiliaires
+ * @param array $tables_auxiliaires
+ *     Description des tables
+ * @return array
+ *     Description complétée des tables
+**/
+function formidable_declarer_tables_auxiliaires($tables_auxiliaires){
+	$formulaires_liens = array(
+		"id_formulaire"	=> "bigint(21) DEFAULT '0' NOT NULL",
+		"id_objet"	=> "bigint(21) DEFAULT '0' NOT NULL",
+		"objet"	=> "VARCHAR (25) DEFAULT '' NOT NULL"
+	);
+
+	$formulaires_liens_cles = array(
+		"PRIMARY KEY" => "id_formulaire,id_objet,objet",
+		"KEY id_formulaire" => "id_formulaire"
+	);
+	
+	$tables_auxiliaires['spip_formulaires_liens'] = array(
+		'field' => &$formulaires_liens,
+		'key' => &$formulaires_liens_cles
+	);
+	
+	return $tables_auxiliaires;
+}
+
+
+
+?>
diff --git a/formidable_1_0/css/CVS/Entries b/formidable_1_0/css/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..6d0b5f0b4200d368539d5ced7d00fe6d46fb9e6c
--- /dev/null
+++ b/formidable_1_0/css/CVS/Entries
@@ -0,0 +1,2 @@
+/formidable_analyse.css.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/css/CVS/Repository b/formidable_1_0/css/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..1a8fc2fe30564b8268a7b33c19dc70ae996a26d4
--- /dev/null
+++ b/formidable_1_0/css/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/css
diff --git a/formidable_1_0/css/CVS/Root b/formidable_1_0/css/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/css/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/css/formidable_analyse.css.html b/formidable_1_0/css/formidable_analyse.css.html
new file mode 100644
index 0000000000000000000000000000000000000000..3a82a97d873ae277dd8a539f94a53172a4ea21a8
--- /dev/null
+++ b/formidable_1_0/css/formidable_analyse.css.html
@@ -0,0 +1,90 @@
+.formidable_analyse .stat {width:70%;}
+
+.progress-bar {
+	background-color: #f1f1f1;
+	height: 20px;
+	padding: 1px;
+	margin: 2px 0;
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	border-radius: 5px;
+	-moz-box-shadow: 0 1px 4px #eee inset, 0 1px 0 #bbb;
+	-webkit-box-shadow: 0 1px 4px #eee inset, 0 1px 0 #bbb;
+	box-shadow: 0 1px 4px #eee inset, 0 1px 0 #bbb;
+	position:relative; /* pour le strong du texte */
+}
+
+.progress-bar strong {
+	color:#000;
+	padding:0 .5em;
+	-webkit-moz-text-shadow: 0 1px 1px #fff;
+	-moz-text-shadow: 0 1px 1px #fff;
+	text-shadow: 0 1px 1px #fff;
+	position:absolute;
+	top:2px;
+	left:0;
+}
+.progress-bar strong small {font-size:90%; font-weight:normal;}
+
+.progress-bar span {
+	background-color: #bbb;
+	  background-image: -webkit-gradient(linear, left top, left bottom, from(#bbb), to(#777));
+	  background-image: -webkit-linear-gradient(top, #bbb, #777);
+	  background-image: -moz-linear-gradient(top, #bbb, #777);
+	  background-image: -ms-linear-gradient(top, #bbb, #777);
+	  background-image: -o-linear-gradient(top, #bbb, #777);
+	  background-image: linear-gradient(top, #bbb, #777); 
+	display: inline-block;
+	height: 100%;
+	-moz-border-radius: 3px;
+	-webkit-border-radius: 3px;
+	border-radius: 3px;
+	-moz-box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;
+	-webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;
+	box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;
+        -webkit-transition: width 2s ease-in-out;
+        -moz-transition: width 2s ease-in-out;
+        -ms-transition: width 2s ease-in-out;
+        -o-transition: width 2s ease-in-out;
+        transition: width 2s ease-in-out;    
+}
+
+.progress-bar.gray span {
+	background-color: #bbb;
+	  background-image: -webkit-gradient(linear, left top, left bottom, from(#bbb), to(#777));
+	  background-image: -webkit-linear-gradient(top, #bbb, #777);
+	  background-image: -moz-linear-gradient(top, #bbb, #777);
+	  background-image: -ms-linear-gradient(top, #bbb, #777);
+	  background-image: -o-linear-gradient(top, #bbb, #777);
+	  background-image: linear-gradient(top, #bbb, #777); 
+}
+
+.progress-bar.blue span {
+	background-color: #34c2e3;
+	  background-image: -webkit-gradient(linear, left top, left bottom, from(#34c2e3), to(#13ACD1));
+	  background-image: -webkit-linear-gradient(top, #34c2e3, #13ACD1);
+	  background-image: -moz-linear-gradient(top, #34c2e3, #13ACD1);
+	  background-image: -ms-linear-gradient(top, #34c2e3, #13ACD1);
+	  background-image: -o-linear-gradient(top, #34c2e3, #13ACD1);
+	  background-image: linear-gradient(top, #34c2e3, #13ACD1);  
+}
+
+.progress-bar.orange span {
+	  background-color: #fecf23;
+	  background-image: -webkit-gradient(linear, left top, left bottom, from(#fecf23), to(#fd9215));
+	  background-image: -webkit-linear-gradient(top, #fecf23, #fd9215);
+	  background-image: -moz-linear-gradient(top, #fecf23, #fd9215);
+	  background-image: -ms-linear-gradient(top, #fecf23, #fd9215);
+	  background-image: -o-linear-gradient(top, #fecf23, #fd9215);
+	  background-image: linear-gradient(top, #fecf23, #fd9215);  
+}	
+
+.progress-bar.green span {
+	  background-color: #a5df41;
+	  background-image: -webkit-gradient(linear, left top, left bottom, from(#a5df41), to(#4ca916));
+	  background-image: -webkit-linear-gradient(top, #a5df41, #4ca916);
+	  background-image: -moz-linear-gradient(top, #a5df41, #4ca916);
+	  background-image: -ms-linear-gradient(top, #a5df41, #4ca916);
+	  background-image: -o-linear-gradient(top, #a5df41, #4ca916);
+	  background-image: linear-gradient(top, #a5df41, #4ca916);  
+}
diff --git a/formidable_1_0/echanger/CVS/Entries b/formidable_1_0/echanger/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..506cc5b6b9a2970ce8889f07c70c06ac5d70a8f6
--- /dev/null
+++ b/formidable_1_0/echanger/CVS/Entries
@@ -0,0 +1 @@
+D/formulaire////
diff --git a/formidable_1_0/echanger/CVS/Repository b/formidable_1_0/echanger/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..92aac845960d2597f63b5fcf5b4fd65b7847509b
--- /dev/null
+++ b/formidable_1_0/echanger/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/echanger
diff --git a/formidable_1_0/echanger/CVS/Root b/formidable_1_0/echanger/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/echanger/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/echanger/formulaire/CVS/Entries b/formidable_1_0/echanger/formulaire/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..8d162397ff75358f006585c562eaf1cd7a4612b4
--- /dev/null
+++ b/formidable_1_0/echanger/formulaire/CVS/Entries
@@ -0,0 +1,4 @@
+/forms.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/wcs.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/yaml.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/echanger/formulaire/CVS/Repository b/formidable_1_0/echanger/formulaire/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..09c660f180995f101fdb565a5b9ffeca96082657
--- /dev/null
+++ b/formidable_1_0/echanger/formulaire/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/echanger/formulaire
diff --git a/formidable_1_0/echanger/formulaire/CVS/Root b/formidable_1_0/echanger/formulaire/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/echanger/formulaire/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/echanger/formulaire/forms.php b/formidable_1_0/echanger/formulaire/forms.php
new file mode 100644
index 0000000000000000000000000000000000000000..c74aaef0ca49af8be673a4d9766921fd4dfb04d2
--- /dev/null
+++ b/formidable_1_0/echanger/formulaire/forms.php
@@ -0,0 +1,175 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+// Importation d'un formulaire forms&table
+
+function echanger_formulaire_forms_importer_dist($fichier){
+	include_spip('inc/xml');
+	$arbre = spip_xml_load($fichier, false);
+	
+	if ($arbre and is_array($arbre) and isset($arbre['forms'])){
+		foreach($arbre['forms'] as $forms){
+			foreach ($forms['form'] as $form){
+				$formulaire = array();
+				
+				// Le titre
+				$titre = trim(spip_xml_aplatit($form['titre']));
+				$formulaire['titre'] = $titre ? $titre : _T('info_sans_titre');
+				
+				// L'identifiant il faut le générer
+				$formulaire['identifiant'] = 'form_'.time();
+				
+				// Le descriptif
+				$descriptif = trim(spip_xml_aplatit($form['descriptif']));
+				$formulaire['descriptif'] = $descriptif ? $descriptif : '';
+				
+				// Le message de retour si ok
+				$message_retour = trim(spip_xml_aplatit($form['texte']));
+				$formulaire['message_retour'] = $message_retour ? $message_retour : '';
+
+				// Les champs
+				$formulaire['saisies'] = array();
+				foreach($form['fields'] as $fields){
+					foreach($fields['field'] as $field){
+						// Le truc par défaut
+						$saisie = array(
+							'saisie' => 'input',
+							'options' => array('size'=>40)
+						);
+						
+						// On essaye de traduire tous les types de champs
+						$type = trim(spip_xml_aplatit($field['type']));
+						switch ($type){
+							case 'texte':
+								$saisie['saisie'] = 'textarea';
+								unset($saisie['options']['size']);
+								$saisie['options']['rows'] = 5;
+								$saisie['options']['cols'] = 40;
+								break;
+							case 'password':
+								$saisie['options']['type'] = 'password';
+								break;
+							case 'date':
+								$saisie['saisie'] = 'date';
+								$saisie['verifier'] = array(
+									'type' => 'date'
+								);
+								break;
+							case 'num':
+							case 'monnaie':
+								$saisie['verifier'] = array(
+									'type' => 'entier'
+								);
+								if ($taille = trim(spip_xml_aplatit($field['taille'])))
+									$saisie['verifier']['options'] = array('max' => (pow(10, $taille)-1));
+								break;
+							case 'email':
+								$saisie['verifier'] = array(
+									'type' => 'email'
+								);
+								break;
+							case 'telephone':
+								$saisie['verifier'] = array(
+									'type' => 'telephone'
+								);
+								break;
+							case 'select':
+								unset($saisie['options']['size']);
+								$liste = trim(spip_xml_aplatit($field['extra_info']));
+								if ($liste == 'radio')
+									$saisie['saisie'] = 'radio';
+								else
+									$saisie['saisie'] = 'selection';
+								break;
+							case 'multiple':
+								$saisie['saisie'] = 'checkbox';
+								unset($saisie['options']['size']);
+								break;
+							case 'fichier':
+							case 'separateur':
+								$saisie = null;
+						}
+						
+						// On continue seulement si on a toujours une saisie
+						if ($saisie){
+							// Les choix pour les types select et multiple
+							if(isset($field['les_choix']) and is_array($field['les_choix'])){
+								$saisie['options']['datas'] = array();
+								foreach($field['les_choix'] as $les_choix){
+									foreach($les_choix['un_choix'] as $un_choix){
+										$choix = trim(spip_xml_aplatit($un_choix['choix']));
+										$titre = trim(spip_xml_aplatit($un_choix['titre']));
+										$saisie['options']['datas'][$choix] = $titre;
+									}
+								}
+							}
+						
+							// Le nom
+							$saisie['options']['nom'] = trim(spip_xml_aplatit($field['champ']));
+						
+							// Le label
+							$saisie['options']['label'] = trim(spip_xml_aplatit($field['titre']));
+						
+							// Obligatoire
+							if (trim(spip_xml_aplatit($field['obligatoire'])) == 'oui')
+								$saisie['options']['obligatoire'] = 'on';
+						
+							// Explication éventuelle
+							if ($explication = trim(spip_xml_aplatit($field['aide'])))
+								$saisie['options']['explication'] = $explication;
+						
+							// On ajoute enfin la saisie
+							$formulaire['saisies'][] = $saisie;
+						}
+					}
+				}
+				
+				// Les traitements
+				$formulaire['traitements'] = array();
+				
+				// Le traitement email
+				$config_email = unserialize(trim(spip_xml_aplatit($form['email'])));
+				if (is_array($config_email)){
+					if ($email_defaut = $config_email['defaut'])
+						$formulaire['traitements']['email'] = array(
+							'destinataires_plus' => $email_defaut
+						);
+				}
+				
+				// Le traitement enregistrement
+				$formulaire['traitements']['enregistrement'] = array(
+					'moderation' => (trim(spip_xml_aplatit($form['moderation'])) == 'priori') ? 'priori' : 'posteriori',
+					'modifiable' => (trim(spip_xml_aplatit($form['modifiable'])) == 'oui') ? 'on' : '',
+					'multiple' => (trim(spip_xml_aplatit($form['multiple'])) == 'non') ? '' : 'on'
+				);
+				
+				include_spip('action/editer_formulaire');
+				// On insère un nouveau formulaire
+				$id_formulaire = insert_formulaire();
+				// Si ça a marché on modifie les champs de base
+				if ($id_formulaire > 0 and !($erreur = formulaire_set($id_formulaire, $formulaire))){
+					// Et ensuite les saisies et les traitements
+					$ok = sql_updateq(
+						'spip_formulaires',
+						array(
+							'saisies' => serialize($formulaire['saisies']),
+							'traitements' => serialize($formulaire['traitements'])
+						),
+						'id_formulaire = '.$id_formulaire
+					);
+				}
+			}
+		}
+	}
+	
+	if ($id_formulaire and $ok){
+		return $id_formulaire;
+	}
+	else{
+		return _T('formidable:erreur_importer_forms');
+	}
+}
+
+?>
diff --git a/formidable_1_0/echanger/formulaire/wcs.php b/formidable_1_0/echanger/formulaire/wcs.php
new file mode 100644
index 0000000000000000000000000000000000000000..c12100a3c9b94fffd0d0ae1005fac1317e966ccf
--- /dev/null
+++ b/formidable_1_0/echanger/formulaire/wcs.php
@@ -0,0 +1,175 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function echanger_formulaire_wcs_importer_dist($fichier){
+	include_spip('inc/xml');
+	include_spip('inc/filtres');
+	include_spip('inc/saisies');
+	$arbre = spip_xml_load($fichier, false);
+	
+	if ($arbre and is_array($arbre) and isset($arbre['formdef'])){
+		foreach($arbre['formdef'] as $form){
+			$formulaire = array();
+			
+			// Le titre
+			$titre = filtrer_entites(trim(spip_xml_aplatit($form['name'])));
+			$formulaire['titre'] = $titre ? $titre : _T('info_sans_titre');
+			
+			// On vérifie que l'identifiant n'existe pas déjà
+				$formulaire['identifiant'] = str_replace('-', '_', trim(spip_xml_aplatit($form['url_name'])));
+				$deja = sql_getfetsel(
+					'id_formulaire',
+					'spip_formulaires',
+					'identifiant = '.sql_quote($formulaire['identifiant'])
+				);
+				if ($deja)
+					$formulaire['identifiant'] = $formulaire['identifiant'].'_'.time();
+			
+			// Les champs
+			$formulaire['saisies'] = array();
+			// Par défaut le conteneur c'est le formulaire
+			$conteneur =& $formulaire;
+			foreach($form['fields'] as $fields){
+				foreach($fields['field'] as $field){
+					$changer_conteneur = false;
+					
+					// Le truc par défaut
+					$saisie = array(
+						'saisie' => 'input',
+						'options' => array('size'=>40)
+					);
+					
+					// Le label
+					$saisie['options']['label'] = filtrer_entites(trim(spip_xml_aplatit($field['label'])));
+					
+					// On essaye de traduire tous les types de champs
+					$type = trim(spip_xml_aplatit($field['type']));
+					switch ($type){
+						case 'string':
+							if ($size = intval(trim(spip_xml_aplatit($field['size'])))){
+								$saisie['options']['maxlength'] = $size;
+								$saisie['verifier'] = array(
+									'type' => 'taille',
+									'options' => array('max'=>$size)
+								);
+							}
+							break;
+						case 'text':
+							$saisie['saisie'] = 'textarea';
+							unset($saisie['options']['size']);
+							$saisie['options']['rows'] = 5;
+							$saisie['options']['cols'] = 40;
+							if ($rows = intval(trim(spip_xml_aplatit($field['rows'])))){
+								$saisie['options']['rows'] = $rows;
+							}
+							if ($cols = intval(trim(spip_xml_aplatit($field['cols'])))){
+								$saisie['options']['cols'] = $cols;
+							}
+							break;
+						case 'date':
+							$saisie['verifier'] = array(
+								'type' => 'date'
+							);
+							break;
+						case 'email':
+							$saisie['verifier'] = array(
+								'type' => 'email'
+							);
+							break;
+						case 'item':
+							unset($saisie['options']['size']);
+							$saisie['saisie'] = 'selection';
+							$saisie['options']['cacher_option_intro'] = 'on';
+							break;
+						case 'bool':
+							unset($saisie['options']['size']);
+							$saisie['saisie'] = 'case';
+							$saisie['options']['label_case'] = $saisie['options']['label'];
+							unset($saisie['options']['label']);
+							break;
+						case 'multiple':
+							$saisie['saisie'] = 'checkbox';
+							unset($saisie['options']['size']);
+							break;
+						case 'comment':
+							$saisie['saisie'] = 'explication';
+							$saisie['options']['texte'] = $saisie['options']['label'];
+							unset($saisie['options']['label']);
+							break;
+						case 'page':
+							$saisie['saisie'] = 'fieldset';
+							unset($saisie['options']['size']);
+							$saisie['saisies'] = array();
+							$changer_conteneur = true;
+							// On remet le conteneur au niveau du formulaire
+							$conteneur =& $formulaire;
+							break;
+						case 'subtitle':
+						case 'file':
+							$saisie = null;
+					}
+					
+					// On continue seulement si on a toujours une saisie
+					if ($saisie){
+						// Les choix pour les types select
+						if(isset($field['items']) and is_array($field['items'])){
+							$saisie['options']['datas'] = array();
+							foreach($field['items'] as $items){
+								foreach($items['item'] as $cle=>$item){
+									$titre = filtrer_entites(trim($item));
+									$saisie['options']['datas']['choix_'.$cle] = $titre;
+								}
+							}
+						}
+					
+						// Le nom
+						$saisie['options']['nom'] = saisies_generer_nom($formulaire['saisies'], $saisie['saisie']);
+					
+						// Obligatoire
+						if (trim(spip_xml_aplatit($field['required'])) == 'True')
+							$saisie['options']['obligatoire'] = 'on';
+					
+						// Explication éventuelle
+						if ($explication = trim(spip_xml_aplatit($field['hint'])))
+							$saisie['options']['explication'] = $explication;
+					
+						// On ajoute enfin la saisie
+						$conteneur['saisies'][] = $saisie;
+						
+						// Faut-il changer de conteneur ?
+						if ($changer_conteneur){
+							$conteneur =& $conteneur['saisies'][count($conteneur['saisies'])-1];
+						}
+					}
+				}
+			}
+			
+			include_spip('action/editer_formulaire');
+			// On insère un nouveau formulaire
+			$id_formulaire = insert_formulaire();
+			// Si ça a marché on modifie les champs de base
+			if ($id_formulaire > 0 and !($erreur = formulaire_set($id_formulaire, $formulaire))){
+				// Et ensuite les saisies et les traitements
+				$ok = sql_updateq(
+					'spip_formulaires',
+					array(
+						'saisies' => serialize($formulaire['saisies']),
+						'traitements' => serialize($formulaire['traitements'])
+					),
+					'id_formulaire = '.$id_formulaire
+				);
+			}
+		}
+	}
+	
+	if ($id_formulaire and $ok){
+		return $id_formulaire;
+	}
+	else{
+		return _T('formidable:erreur_importer_wcs');
+	}
+}
+
+?>
diff --git a/formidable_1_0/echanger/formulaire/yaml.php b/formidable_1_0/echanger/formulaire/yaml.php
new file mode 100644
index 0000000000000000000000000000000000000000..162331d9eb46c8c93c5aa9890852ec7abd5b719f
--- /dev/null
+++ b/formidable_1_0/echanger/formulaire/yaml.php
@@ -0,0 +1,80 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function echanger_formulaire_yaml_exporter_dist($id_formulaire){
+	include_spip('base/abstract_sql');
+	include_spip('inc/yaml');
+	$id_formulaire = intval($id_formulaire);
+	$export = '';
+	
+	if ($id_formulaire > 0){
+		// On récupère le formulaire
+		$formulaire = sql_fetsel(
+			'*',
+			'spip_formulaires',
+			'id_formulaire = '.$id_formulaire
+		);
+		
+		// On décompresse les trucs sérialisés
+		$formulaire['saisies'] = unserialize($formulaire['saisies']);
+		$formulaire['traitements'] = unserialize($formulaire['traitements']);
+		
+		// On envode en yaml
+		$export = yaml_encode($formulaire);
+	}
+	
+	Header("Content-Type: text/x-yaml;");
+	Header('Content-Disposition: attachment; filename=formulaire-'.$formulaire['identifiant'].'.yaml');
+	Header("Content-Length: ".strlen($export));
+	echo $export;
+	exit();
+}
+
+function echanger_formulaire_yaml_importer_dist($fichier){
+	$yaml = '';
+	lire_fichier($fichier, $yaml);
+	// Si on a bien recupere une chaine on tente de la decoder
+	if ($yaml){
+		include_spip('inc/yaml');
+		$formulaire = yaml_decode($yaml);
+		// Si le decodage marche on importe alors le contenu
+		if (is_array($formulaire)){
+			include_spip('action/editer_formulaire');
+			// On enlève les champs inutiles
+			unset($formulaire['id_formulaire']);
+			// On vérifie que l'identifiant n'existe pas déjà
+			$deja = sql_getfetsel(
+				'id_formulaire',
+				'spip_formulaires',
+				'identifiant = '.sql_quote($formulaire['identifiant'])
+			);
+			if ($deja)
+				$formulaire['identifiant'] = $formulaire['identifiant'].'_'.time();
+			// On insère un nouveau formulaire
+			$id_formulaire = insert_formulaire();
+			// Si ça a marché on modifie les champs de base
+			if ($id_formulaire > 0 and !($erreur = formulaire_set($id_formulaire, $formulaire))){
+				// Et ensuite les saisies et les traitements
+				$ok = sql_updateq(
+					'spip_formulaires',
+					array(
+						'saisies' => serialize($formulaire['saisies']),
+						'traitements' => serialize($formulaire['traitements'])
+					),
+					'id_formulaire = '.$id_formulaire
+				);
+			}
+		}
+	}
+	
+	if ($id_formulaire and $ok){
+		return $id_formulaire;
+	}
+	else{
+		return _T('formidable:erreur_importer_yaml');
+	}
+}
+
+?>
diff --git a/formidable_1_0/exec/CVS/Entries b/formidable_1_0/exec/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..50a446b3435ff84dd5710fb51468470d3e96c0f2
--- /dev/null
+++ b/formidable_1_0/exec/CVS/Entries
@@ -0,0 +1,2 @@
+/puce_statut_formulaires.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/exec/CVS/Repository b/formidable_1_0/exec/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..899fb873015d3afe025732e372b5b3fad0567fff
--- /dev/null
+++ b/formidable_1_0/exec/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/exec
diff --git a/formidable_1_0/exec/CVS/Root b/formidable_1_0/exec/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/exec/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/exec/puce_statut_formulaires.php b/formidable_1_0/exec/puce_statut_formulaires.php
new file mode 100644
index 0000000000000000000000000000000000000000..6aadef396ee0ca45b16885d067394fe54d3806ce
--- /dev/null
+++ b/formidable_1_0/exec/puce_statut_formulaires.php
@@ -0,0 +1,57 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Gestion des puces d'action rapide de formulaires
+ *
+ * @package SPIP\Formidable\Puce_statut
+**/
+
+include_spip('inc/presentation');
+
+/**
+ * Gestion de l'affichage ajax des puces d'action rapide de formulaires
+ *
+ * Récupère l'identifiant id et le type d'objet dans les données postées
+ * et appelle la fonction de traitement de cet exec.
+ * 
+ * @see exec_puce_statut_formulaires_args()
+ * @return string Code HTML
+**/
+function exec_puce_statut_formulaires_dist()
+{
+	exec_puce_statut_formulaires_args(_request('id'),  _request('type'));
+}
+
+/**
+ * Traitement de l'affichage ajax des puces d'action rapide
+ *
+ * Appelle la fonction de traitement des puces statuts
+ * après avoir retrouvé le statut en cours de l'objet
+ * et son parent s'il en a un
+ * 
+ * @param int $id
+ *     Identifiant de l'objet
+ * @param string $type
+ *     Type d'objet
+ * @return string Code HTML
+**/
+function exec_puce_statut_formulaires_args($id, $type)
+{
+	if (in_array($type,array('formulaires','formulaires_reponse'))) {
+		$table = table_objet_sql($type);
+		$prim = id_table_objet($type);
+		$id = intval($id);
+		$r = sql_fetsel("id_formulaire,statut", "$table", "$prim=$id");
+		$statut = $r['statut'];
+		$id_formulaire = $r['id_formulaire'];
+	} else {
+		$id_formulaire = intval($id);
+		$statut = 'prop'; // arbitraire
+	}
+	$puce_statut = charger_fonction('puce_statut', 'inc');
+	ajax_retour($puce_statut($id,$statut,$id_formulaire,$type, true));
+}
+
+?>
diff --git a/formidable_1_0/formidable_administrations.php b/formidable_1_0/formidable_administrations.php
new file mode 100644
index 0000000000000000000000000000000000000000..d273617d2e516a1e073963cf95c8f2fff7d8ddce
--- /dev/null
+++ b/formidable_1_0/formidable_administrations.php
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * Fichier gérant l'installation et désinstallation du plugin
+ *
+ * @package SPIP\Formidable\Installation
+**/
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Installation/maj des tables de formidable...
+ *
+ * @param string $nom_meta_base_version
+ *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
+ * @param string $version_cible
+ *     Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
+ * @return void
+ */
+function formidable_upgrade($nom_meta_base_version, $version_cible){
+	// Création des tables
+	include_spip('base/create');
+	include_spip('base/abstract_sql');
+
+	$maj = array();
+	$maj['create'] = array(
+		array('maj_tables',array(
+			'spip_formulaires',
+			'spip_formulaires_reponses',
+			'spip_formulaires_reponses_champs',
+			'spip_formulaires_liens')),
+	);
+	// Ajout du choix de ce qu'on affiche à la fin des traitements
+	$maj['0.4.0'] = array(array('maj_tables',array('spip_formulaires')));
+	// Ajout d'une URL de redirection
+	$maj['0.5.0'] = array(array('maj_tables',array('spip_formulaires')));
+	// Modif du type du message de retour pour pouvoir mettre plus de chose
+	$maj['0.5.1'] = array(array('sql_alter','TABLE spip_formulaires CHANGE message_retour message_retour text NOT NULL default ""'));
+
+	include_spip('base/upgrade');
+	maj_plugin($nom_meta_base_version, $version_cible, $maj);
+}
+
+/**
+ * Désinstallation/suppression des tables de formidable
+ *
+ * @param string $nom_meta_base_version
+ *     Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
+ * @return void
+ */
+function formidable_vider_tables($nom_meta_base_version){
+
+	include_spip('inc/meta');
+	include_spip('base/abstract_sql');
+
+	// On efface les tables du plugin
+	sql_drop_table('spip_formulaires');
+	sql_drop_table('spip_formulaires_reponses');
+	sql_drop_table('spip_formulaires_reponses_champs');
+	sql_drop_table('spip_formulaires_liens');
+
+	// On efface la version entregistrée
+	effacer_meta($nom_meta_base_version);
+}
+
+?>
diff --git a/formidable_1_0/formidable_autorisations.php b/formidable_1_0/formidable_autorisations.php
new file mode 100644
index 0000000000000000000000000000000000000000..3df4f4a933245e1af48245caab3ad41e21f3d869
--- /dev/null
+++ b/formidable_1_0/formidable_autorisations.php
@@ -0,0 +1,162 @@
+<?php
+
+/**
+ * Déclaration des autorisations
+ * 
+ * @package SPIP\Formidable\Autorisations
+**/
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Fonction d'appel pour le pipeline
+ * @pipeline autoriser
+ */
+function formidable_autoriser(){}
+
+/**
+ * Autorisation d'éditer un formulaire formidable
+ *
+ * Seuls les admins peuvent éditer les formulaires
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+**/
+function autoriser_formulaire_editer_dist($faire, $type, $id, $qui, $opt){
+    if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and
+        (!$qui['restreint']) or $GLOBALS['formulaires']['autoriser_admin_restreint'])
+            return true;
+    else return false;
+}
+
+/**
+ * Autorisation de voir la liste des formulaires formidable
+ *
+ *  Admins et rédacteurs peuvent voir les formulaires existants
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+**/
+function autoriser_formulaires_menu_dist($faire, $type, $id, $qui, $opt){
+	if (isset($qui['statut']) and $qui['statut'] <= '1comite') return true;
+	else return false;
+}
+
+
+
+/**
+ * Autorisation de répondre à un formidable formidable
+ *
+ * On peut répondre à un formulaire si :
+ * - c'est un formulaire classique
+ * - on enregistre et que multiple = oui
+ * - on enregistre et que multiple = non et que la personne n'a pas répondu encore
+ * - on enregistre et que multiple = non et que modifiable = oui
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+**/
+function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $opt){
+	// On regarde si il y a déjà le formulaire dans les options
+	if (isset($options['formulaire']))
+		$formulaire = $options['formulaire'];
+	// Sinon on va le chercher
+	else{
+		$formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id);
+	}
+	
+	$traitements = unserialize($formulaire['traitements']);
+	
+	// S'il n'y a pas d'enregistrement, c'est forcément bon
+	if (!($options = $traitements['enregistrement']))
+		return true;
+	// Sinon faut voir les options
+	else{
+		// Si multiple = oui c'est bon
+		if ($options['multiple'])
+			return true;
+		else{
+			// Si c'est modifiable, c'est bon
+			if ($options['modifiable'])
+				return true;
+			else{
+				include_spip('inc/formidable');
+				// Si la personne n'a jamais répondu, c'est bon
+				if (!formidable_verifier_reponse_formulaire($id))
+					return true;
+				else
+					return false;
+			}
+		}
+	}
+}
+
+
+/**
+ * Autorisation d'instituer une réponse
+ *
+ * On peut modérer une réponse si on est admin
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+**/
+function autoriser_formulaires_reponse_instituer_dist($faire, $type, $id, $qui, $opt){
+	if (isset($qui['statut']) and $qui['statut'] <= '0minirezo' and !$qui['restreint']) return true;
+	else return false;
+}
+
+/**
+ * Autorisation de voir les réponses d'un formulaire formidable
+ *
+ * Au moins rédacteur pour voir les résultats
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+**/
+function autoriser_formulaires_reponse_voir_dist($faire, $type, $id, $qui, $opt){
+	if (isset($qui['statut']) and $qui['statut'] <= '1comite') return true;
+	else return false;
+}
+
+/**
+ * Autorisation de supprimer une réponse d'un formulaire formidable
+ *
+ * Il faut pouvoir éditer un formulaire pour pouvoir en supprimer des réponses
+ *
+ * @param  string $faire Action demandée
+ * @param  string $type  Type d'objet sur lequel appliquer l'action
+ * @param  int    $id    Identifiant de l'objet
+ * @param  array  $qui   Description de l'auteur demandant l'autorisation
+ * @param  array  $opt   Options de cette autorisation
+ * @return bool          true s'il a le droit, false sinon
+**/
+function autoriser_formulaires_reponse_supprimer_dist($faire, $type, $id, $qui, $opt){
+	// On récupère l'id du formulaire
+	if ($id_formulaire = intval(sql_getfetsel('id_formulaire', 'spip_formulaires_reponses', $id)))
+		return autoriser('editer', 'formulaire', $id_formulaire);
+	else
+		return false;
+}
+
+?>
diff --git a/formidable_1_0/formidable_fonctions.php b/formidable_1_0/formidable_fonctions.php
new file mode 100644
index 0000000000000000000000000000000000000000..c8029993a84c0064c5c76bdbabc094a4b3c81007
--- /dev/null
+++ b/formidable_1_0/formidable_fonctions.php
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * Chargement des fonctions pour les squelettes 
+ *
+ * @package SPIP\Formidable\Fonctions
+**/
+
+include_spip('inc/formidable');
+include_spip('public/formidable_criteres');
diff --git a/formidable_1_0/formidable_options.php b/formidable_1_0/formidable_options.php
new file mode 100644
index 0000000000000000000000000000000000000000..c36bf521548eb305ff91693c458cb92221f5d3a9
--- /dev/null
+++ b/formidable_1_0/formidable_options.php
@@ -0,0 +1,118 @@
+<?php
+
+/**
+ * Options globales chargées à chaque hit
+ *
+ * @package SPIP\Formidable\Options
+**/
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+// On déclare le formulaire pour éditer un formulaire
+$GLOBALS['formulaires']['editer_formulaire'] = array(
+	array(
+		'saisie' => 'input',
+		'options' => array(
+			'nom' => 'titre',
+			'label' => '<:formidable:editer_titre:>',
+			'obligatoire' => 'oui',
+			'class' => 'multilang'
+		)
+	),
+	array(
+		'saisie' => 'input',
+		'options' => array(
+			'nom' => 'identifiant',
+			'label' => '<:formidable:editer_identifiant:>',
+			'explication' => '<:formidable:editer_identifiant_explication:>',
+			'obligatoire' => 'oui'
+		),
+		'verifier' => array(
+			'type' => 'regex',
+			'options' => array(
+				'modele' => '/^[\w]+$/'
+			)
+		)
+	),
+	array(
+		'saisie' => 'textarea',
+		'options' => array(
+			'nom' => 'message_retour',
+			'label' => '<:formidable:editer_message_ok:>',
+			'explication' => '<:formidable:editer_message_ok_explication:>',
+			'rows' => 5,
+			'li_class' => 'editer_texte',
+			'class' => 'multilang'
+		)
+	),
+	array(
+		'saisie' => 'textarea',
+		'options' => array(
+			'nom' => 'descriptif',
+			'label' => '<:formidable:editer_descriptif:>',
+			'explication' => '<:formidable:editer_descriptif_explication:>',
+			'rows' => 5,
+			'class' => 'multilang'
+		)
+	),
+	array(
+		'saisie' => 'selection',
+		'options' => array(
+			'nom' => 'apres',
+			'label' => '<:formidable:editer_apres_label:>',
+			'explication' => '<:formidable:editer_apres_explication:>',
+			'datas' => array(
+				'formulaire' => _T('formidable:editer_apres_choix_formulaire'),
+				'valeurs' => _T('formidable:editer_apres_choix_valeurs'),
+				'stats' => _T('formidable:editer_apres_choix_stats'),
+				'rien' => _T('formidable:editer_apres_choix_rien'),
+				'redirige' => _T('formidable:editer_apres_choix_redirige'),
+			),
+			'defaut' => 'formulaire',
+			'cacher_option_intro' => 'on'
+		)
+	),
+	array(
+		'saisie' => 'input',
+		'options' => array(
+			'nom' => 'url_redirect',
+			'label' => '<:formidable:editer_redirige_url:>', 
+			'explication' => '<:formidable:editer_redirige_url_explication:>',
+			'obligatoire' => 'non'
+		)
+	)
+);
+
+/* déclaration des différentes variables utilisées pour effectuer l'anonymisation */
+$GLOBALS['formulaires']['variables_anonymisation'] = array(
+	'remote_user' => '$_SERVER["REMOTE_USER"]',
+	'php_auth_user' => '$_SERVER["PHP_AUTH_USER"]',
+);
+
+$GLOBALS['formulaires']['passwd'] = array(
+	'interne' => 'palabresecreta',
+);
+
+$GLOBALS['formulaires']['autoriser_admin_restreint'] = false;
+
+if (!function_exists('array_fill_keys')) {
+	/**
+	 * Remplit un tableau avec des valeurs, en spécifiant les clés
+	 *
+	 * Fonction dans PHP 5.2+
+	 * @see http://php.net/manual/fr/function.array-fill-keys.php
+	 * 
+	 * @param array $keys
+	 *     Tableau de valeurs qui sera utilisé comme clés. 
+	 * @param mixed $value
+	 *     Valeur à utiliser pour remplir le tableau.
+	 * @return array
+	 *     Le tableau rempli. 
+	**/
+	function array_fill_keys($keys, $value){
+		array_combine($keys,array_fill(0,count($keys),$value));
+	}
+}
+
+?>
diff --git a/formidable_1_0/formidable_pipelines.php b/formidable_1_0/formidable_pipelines.php
new file mode 100644
index 0000000000000000000000000000000000000000..902224bb5d5b358f1ec7d067af5432f07ab916fc
--- /dev/null
+++ b/formidable_1_0/formidable_pipelines.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * Utilisation de pipelines
+ * 
+ * @package SPIP\Formidable\Pipelines
+**/
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+
+/**
+ * Optimiser la base de donnée en enlevant les liens de formulaires supprimés
+ * 
+ * @pipeline optimiser_base_disparus
+ * @param array $flux
+ *     Données du pipeline
+ * @return array
+ *     Données du pipeline
+ */
+function formidable_optimiser_base_disparus($flux){
+	// Les réponses qui sont à la poubelle
+	$res = sql_select(
+		'id_formulaires_reponse AS id',
+		'spip_formulaires_reponses',
+		'statut = '.sql_quote('poubelle')
+	);
+	
+	// On génère la suppression
+	$flux['data'] += optimiser_sansref('spip_formulaires_reponses', 'id_formulaires_reponse', $res);
+	return $flux;
+}
+
+?>
diff --git a/formidable_1_0/formulaires/CVS/Entries b/formidable_1_0/formulaires/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..c5dd9a1b94652339559ef460c3dab0755af3034f
--- /dev/null
+++ b/formidable_1_0/formulaires/CVS/Entries
@@ -0,0 +1,12 @@
+/configurer_formidable_analyse.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/editer_formulaire.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/editer_formulaire.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/editer_formulaire_champs.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/editer_formulaire_champs.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/editer_formulaire_traitements.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/editer_formulaire_traitements.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formidable.php/1.2/Mon Dec  3 14:10:46 2012//
+/importer_formulaire.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/importer_formulaire.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formidable.html/1.3/Tue Mar 19 14:58:24 2013//
+D
diff --git a/formidable_1_0/formulaires/CVS/Repository b/formidable_1_0/formulaires/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..055d61df7f89b3e97a04c10651b6fc3fbdbe66d8
--- /dev/null
+++ b/formidable_1_0/formulaires/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/formulaires
diff --git a/formidable_1_0/formulaires/CVS/Root b/formidable_1_0/formulaires/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/formulaires/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/formulaires/configurer_formidable_analyse.html b/formidable_1_0/formulaires/configurer_formidable_analyse.html
new file mode 100644
index 0000000000000000000000000000000000000000..a8caa8bf1b7a176e8d27cb964ece1e8047520008
--- /dev/null
+++ b/formidable_1_0/formulaires/configurer_formidable_analyse.html
@@ -0,0 +1,20 @@
+<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
+
+	<h3 class="titrem"><:formidable:cfg_titre_parametrages_analyse:></h3>
+
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+
+	<form method="post" action="#ENV{action}">
+	<div>
+		#ACTION_FORMULAIRE{#ENV{action}}
+
+		[(#SAISIE{input,classe,
+			label=<:formidable:cfg_analyse_classe_label:>,
+			explication=<:formidable:cfg_analyse_classe_explication:>
+			})]
+		<input type="hidden" name="_meta_casier" value="formidable/analyse" />
+		<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
+	</div>
+	</form>
+</div>
diff --git a/formidable_1_0/formulaires/editer_formulaire.html b/formidable_1_0/formulaires/editer_formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..cd8445eb682b4c6ea97d92fc3478b982d7bdca2b
--- /dev/null
+++ b/formidable_1_0/formulaires/editer_formulaire.html
@@ -0,0 +1,23 @@
+<div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id_formulaire,nouveau})]">
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+	[(#ENV{editable}|oui)
+	<form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+		
+		<ul>
+			#GENERER_SAISIES{#ENV{_contenu}}
+		</ul>
+		
+		[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
+		<!--extra-->
+		
+		<p class='boutons'>
+			<span class='image_loading'></span>
+			<input type='submit' class='submit' value='<:bouton_enregistrer:>' />
+		</p>
+	</div></form>
+	]
+</div>
diff --git a/formidable_1_0/formulaires/editer_formulaire.php b/formidable_1_0/formulaires/editer_formulaire.php
new file mode 100644
index 0000000000000000000000000000000000000000..afa986be4aec418e07e0377de6f5ba2392b5f75b
--- /dev/null
+++ b/formidable_1_0/formulaires/editer_formulaire.php
@@ -0,0 +1,75 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/saisies');
+
+function formulaires_editer_formulaire_charger($id_formulaire, $nouveau){
+	$contexte = array();
+	$editer_formulaire = $GLOBALS['formulaires']['editer_formulaire'];
+	$champs = saisies_lister_champs($editer_formulaire);
+	$id_formulaire = intval($id_formulaire);
+	
+	$contexte['_contenu'] = $editer_formulaire;
+	
+	// Est-ce qu'on a le droit ?
+	if (autoriser('editer', 'formulaire')){
+		// Est-ce que le formulaire existe ?
+		if ($id_formulaire > 0 and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)){
+			// Alors on pré-remplit avec les valeurs
+			foreach($champs as $champ)
+				$contexte[$champ] = $formulaire[$champ];
+			$contexte['_action'] = array('editer_formulaire', $id_formulaire);
+		}
+		// Sinon si c'est une création
+		elseif ($nouveau == 'oui'){
+			// On déclare juste les champs
+			foreach ($champs as $champ)
+				$contexte[$champ] = '';
+			$contexte['_action'] = array('editer_formulaire', $nouveau);
+		}
+		// Sinon c'est n'importe quoi
+		else{
+			$contexte['editable'] = false;
+			$contexte['message_erreur'] = 'Erreur dans les parametres.';
+		}
+	}
+	else{
+		$contexte['editable'] = false;
+		$contexte['message_erreur'] = _T('formidable:erreur_autorisation');
+	}
+	
+	return $contexte;
+}
+
+function formulaires_editer_formulaire_verifier($id_formulaire, $nouveau){
+	$configurer_formulaire = $GLOBALS['formulaires']['editer_formulaire'];
+	$erreurs = saisies_verifier($configurer_formulaire);
+	// On vérifie l'unicité de l'identifiant
+	if (!$erreurs['identifiant'] and sql_getfetsel('id_formulaire', 'spip_formulaires', 'identifiant = '.sql_quote(_request('identifiant').' and id_formulaire != '.$id_formulaire)))
+		$erreurs['identifiant'] = _T('formidable:erreur_identifiant');
+	return $erreurs;
+}
+
+function formulaires_editer_formulaire_traiter($id_formulaire, $nouveau){
+	include_spip('inc/editer');
+	$id_formulaire = $id_formulaire ? $id_formulaire : $nouveau;
+	$retours = formulaires_editer_objet_traiter('formulaire', $id_formulaire);
+	
+	// S'il n'y a pas d'erreur et que le formulaire est bien là
+	if (!$retours['message_erreur'] and $retours['id_formulaire'] > 0){
+		// Si c'était un nouveau on reste sur l'édition
+		if (!intval($id_formulaire) and $nouveau == 'oui'){
+			$retours['redirect'] = parametre_url(generer_url_ecrire('formulaire_edit'), 'id_formulaire', $retours['id_formulaire'], '&');
+		}
+		// Sinon on redirige vers la page de visualisation
+		else{
+			$retours['redirect'] = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $retours['id_formulaire'], '&');
+		}
+	}
+	
+	return $retours;
+}
+
+?>
diff --git a/formidable_1_0/formulaires/editer_formulaire_champs.html b/formidable_1_0/formulaires/editer_formulaire_champs.html
new file mode 100644
index 0000000000000000000000000000000000000000..8e88ff4319c1c998f77a55ea8a5576476f7ad33c
--- /dev/null
+++ b/formidable_1_0/formulaires/editer_formulaire_champs.html
@@ -0,0 +1,39 @@
+
+<div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+	
+	[(#ENV*{message_erreur}|non)
+	<div class="ajax">
+		#FORMULAIRE_CONSTRUIRE_FORMULAIRE{formidable_#ENV{id}, #ENV{_saisies}}
+	</div>
+	]
+
+	[(#ENV{editable}|oui)
+	<form method="post" action="#ENV{action}" enctype="multipart/form-data"><div>
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+		
+		<p class="boutons">
+			<span class="image_loading"></span>
+			[(#ENV*{message_erreur}|non)
+			<em class="attention"><:saisies:construire_attention_enregistrer:></em>
+			<button type="submit" class="submit">
+				<img src="#CHEMIN{images/formulaire-enregistrer-16.png}" alt="" />
+				<:bouton_enregistrer:>
+			</button>
+			]
+			[(#ENV*{message_erreur}|oui)
+			<button type="submit" class="link" name="annulation" value="oui">
+				<:bouton_annuler:>
+			</button>
+			<button type="submit" class="submit" name="confirmation" value="oui">
+				<img src="#CHEMIN{images/formulaire-enregistrer-16.png}" alt="" />
+				<:bouton_enregistrer:>
+			</button>
+			]
+		</p>
+	</div></form>
+	]
+</div>
diff --git a/formidable_1_0/formulaires/editer_formulaire_champs.php b/formidable_1_0/formulaires/editer_formulaire_champs.php
new file mode 100644
index 0000000000000000000000000000000000000000..e999c7b86357dc6550f3ed24ff83b3f09b5ab918
--- /dev/null
+++ b/formidable_1_0/formulaires/editer_formulaire_champs.php
@@ -0,0 +1,113 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+
+function formulaires_editer_formulaire_champs_charger($id_formulaire){
+	$contexte = array();
+	$id_formulaire = intval($id_formulaire);
+	
+	// On teste si le formulaire existe
+	if ($id_formulaire
+		and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
+		and autoriser('editer', 'formulaire', $id_formulaire)
+	){
+		$saisies = unserialize($formulaire['saisies']);
+		if (!is_array($saisies)) $saisies = array();
+		$contexte['_saisies'] = $saisies;
+		$contexte['id'] = $id_formulaire;
+	}
+	
+	return $contexte;
+}
+
+function formulaires_editer_formulaire_champs_verifier($id_formulaire){
+	include_spip('inc/saisies');
+	$erreurs = array();
+	
+	// Si c'est pas une confirmation ni une annulation
+	if (!_request('confirmation') and !($annulation = _request('annulation'))){
+		// On récupère le formulaire dans la session
+		$saisies_nouvelles = session_get("constructeur_formulaire_formidable_$id_formulaire");
+	
+		// On récupère les anciennes saisies
+		$saisies_anciennes = unserialize(sql_getfetsel(
+			'saisies',
+			'spip_formulaires',
+			'id_formulaire = '.$id_formulaire
+		));
+	
+		// On compare
+		$comparaison = saisies_comparer($saisies_anciennes, $saisies_nouvelles);
+	
+		// S'il y a des suppressions, on demande confirmation avec attention
+		if ($comparaison['supprimees'])
+			$erreurs['message_erreur'] = _T('saisies:construire_attention_supprime');
+	}
+	// Si on annule on génère une erreur bidon juste pour réafficher le formulaire
+	elseif ($annulation){
+		$erreurs['pouetpouet'] = true;
+	}
+	
+	return $erreurs;
+}
+
+function formulaires_editer_formulaire_champs_traiter($id_formulaire){
+	include_spip('inc/saisies');
+	$retours = array();
+	$id_formulaire = intval($id_formulaire);
+	
+	// On récupère le formulaire dans la session
+	$saisies_nouvelles = session_get("constructeur_formulaire_formidable_$id_formulaire");
+	
+	// On récupère les anciennes saisies
+	$saisies_anciennes = unserialize(sql_getfetsel(
+		'saisies',
+		'spip_formulaires',
+		'id_formulaire = '.$id_formulaire
+	));
+	
+	// On envoie les nouvelles dans la table dans la table
+	$ok = sql_updateq(
+		'spip_formulaires',
+		array(
+			'saisies' => serialize($saisies_nouvelles)
+		),
+		'id_formulaire = '.$id_formulaire
+	);
+	
+	// Si c'est bon on appelle d'éventuelles fonctions d'update des traitements puis on renvoie vers la config des traitements
+	if ($ok){
+		// On va chercher les traitements
+		$traitements = unserialize(sql_getfetsel(
+			'traitements',
+			'spip_formulaires',
+			'id_formulaire = '.$id_formulaire
+		));
+		
+		// Pour chaque traitements on regarde s'i y a une fonction d'update
+		if (is_array($traitements))
+			foreach ($traitements as $type_traitement => $traitement){
+				if ($update = charger_fonction('update', "traiter/$type_traitement", true)){
+					$update($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles);
+				}
+			}
+		
+		// On redirige vers la config suivante
+		$retours['redirect'] = parametre_url(
+			parametre_url(
+				parametre_url(
+					generer_url_ecrire('formulaire_edit')
+					, 'id_formulaire', $id_formulaire
+				)
+				, 'configurer', 'traitements'
+			)
+			, 'avertissement', 'oui'
+		);
+	}
+	
+	return $retours;
+}
+
+?>
diff --git a/formidable_1_0/formulaires/editer_formulaire_traitements.html b/formidable_1_0/formulaires/editer_formulaire_traitements.html
new file mode 100644
index 0000000000000000000000000000000000000000..31dbc36c8f0d8e4f021ae23d763f2477d9fb82a7
--- /dev/null
+++ b/formidable_1_0/formulaires/editer_formulaire_traitements.html
@@ -0,0 +1,41 @@
+<div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+	
+	[(#ENV{editable}|oui)
+	<form method="post" action="#ENV{action}" enctype="multipart/form-data"><div>
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+		
+		<ul>
+			#GENERER_SAISIES{#ENV{_configurer_traitements}}
+		</ul>
+		
+		[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
+		<!--extra-->
+		
+		<p class="boutons"><span class="image_loading"></span><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
+	</div></form>
+	<script type="text/javascript">
+		$(function(){
+			// On commence par cacher toutes les options
+			$('.options_traiter').hide().find('h3').hide();
+			
+			// Ensuite on parcourt les traitements choisis
+			$('.editer_traitements_choisis input')
+				.each(function(){
+					// Si c'est coché on affiche le fieldset d'options
+					if ($(this).is(':checked')){
+						$('.options_traiter.'+$(this).val()).show();
+						$(this).parents('.editer_traitements_choisis').toggleClass('hover');
+					}
+				})
+				.click(function(){
+					$('.options_traiter.'+$(this).val()).slideToggle('fast');
+					$(this).parents('.editer_traitements_choisis').toggleClass('hover');
+				});
+		});
+	</script>
+	]
+</div>
diff --git a/formidable_1_0/formulaires/editer_formulaire_traitements.php b/formidable_1_0/formulaires/editer_formulaire_traitements.php
new file mode 100644
index 0000000000000000000000000000000000000000..2303ec6e4ab2e4297f8a64a050cafa8c8af9b67f
--- /dev/null
+++ b/formidable_1_0/formulaires/editer_formulaire_traitements.php
@@ -0,0 +1,114 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/formidable');
+
+function formulaires_editer_formulaire_traitements_charger($id_formulaire){
+	$contexte = array();
+	$id_formulaire = intval($id_formulaire);
+	
+	// On teste si le formulaire existe
+	if ($id_formulaire
+		and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
+		and autoriser('editer', 'formulaire', $id_formulaire)
+	){
+		$traitements = unserialize($formulaire['traitements']);
+		$saisies = unserialize($formulaire['saisies']);
+		if (!is_array($traitements)) $traitements = array();
+		if (!is_array($saisies)) $saisies = array();
+		$contexte['traitements'] = $traitements;
+		$contexte['traitements_choisis'] = array_keys($traitements);
+		$contexte['formulaire'] = _T_ou_typo($saisies, 'multi');
+		$contexte['id'] = $id_formulaire;
+		
+		$traitements_disponibles = traitements_lister_disponibles();
+		$configurer_traitements = array();
+		foreach ($traitements_disponibles as $type_traitement => $traitement){
+			$configurer_traitements[] = array(
+				'saisie' => 'checkbox',
+				'options' => array(
+					'nom' => 'traitements_choisis',
+					'label' => $traitement['titre'],
+					'datas' => array(
+						$type_traitement => $traitement['description']
+					)
+				)
+			);
+			$configurer_traitements[] = array(
+				'saisie' => 'fieldset',
+				'options' => array(
+					'nom' => 'options',
+					'label' => $traitement['titre'],
+					'li_class' => "$type_traitement options_traiter"
+				),
+				'saisies' => saisies_transformer_noms($traitement['options'], '/^.*$/', "traitements[$type_traitement][\\0]")
+			);
+		}
+		$contexte['_configurer_traitements'] = $configurer_traitements;
+		
+		// Si on demande un avertissement et qu'il y a déjà des traitements de configurés
+		if (_request('avertissement') == 'oui')
+			$contexte['message_ok'] = $traitements ? _T('formidable:traitements_avertissement_modification') : _T('formidable:traitements_avertissement_creation');
+	}
+	else{
+		$contexte['editable'] = false;
+	}
+	
+	// On enlève l'éventuel avertissement pour le prochain envoi
+	$contexte['action'] = parametre_url(self(), 'avertissement', '');
+	
+	return $contexte;
+}
+
+function formulaires_editer_formulaire_traitements_verifier($id_formulaire){
+	include_spip('inc/saisies');
+	$erreurs = array();
+	$traitements_disponibles = traitements_lister_disponibles();
+	
+	// On regarde quels traitements sont demandés
+	$traitements_choisis = _request('traitements_choisis');
+	
+	if (is_array($traitements_choisis))
+		foreach ($traitements_choisis as $type_traitement){
+			$erreurs = array_merge($erreurs, saisies_verifier(saisies_transformer_noms($traitements_disponibles[$type_traitement]['options'], '/^.*$/', "traitements[$type_traitement][\\0]")));
+		}
+	
+	return $erreurs;
+}
+
+function formulaires_editer_formulaire_traitements_traiter($id_formulaire){
+	$retours = array();
+	$id_formulaire = intval($id_formulaire);
+	
+	// On récupère tout le tableau des traitements
+	$traitements = _request('traitements');
+	// On ne garde que les morceaux qui correspondent aux traitements choisis
+	$traitements_choisis = _request('traitements_choisis');
+	if (!$traitements_choisis) $traitements_choisis = array();
+	$traitements_choisis = array_flip($traitements_choisis);
+	$traitements = array_intersect_key($traitements, $traitements_choisis);
+	
+	// Et on l'enregistre tel quel
+	$ok = sql_updateq(
+		'spip_formulaires',
+		array(
+			'traitements' => serialize($traitements)
+		),
+		'id_formulaire = '.$id_formulaire
+	);
+	
+	// On va sur la page de visualisation quand c'est fini
+	if ($ok){
+		$retours['redirect'] = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $id_formulaire);
+	}
+	else{
+		$retours['editable'] = true;
+		$retours['message_erreur'] = _T('formidable:erreur_base');
+	}
+	
+	return $retours;
+}
+
+?>
diff --git a/formidable_1_0/formulaires/formidable.html b/formidable_1_0/formulaires/formidable.html
new file mode 100644
index 0000000000000000000000000000000000000000..0a9305eec773feb15fb7fcb619e0f5ef29a29115
--- /dev/null
+++ b/formidable_1_0/formulaires/formidable.html
@@ -0,0 +1,46 @@
+<BOUCLE_remplacer_le_formulaire(CONDITION){si #ENV{_remplacer_formulaire}}>
+	[(#REM) Afficher du HTML si prévu par un plugin ou pour les stats ]
+	[(#ENV**{_remplacer_formulaire})]
+</BOUCLE_remplacer_le_formulaire>
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire=#ENV{id}}>
+	[(#SET{enregistrement,[(#TRAITEMENTS**|unserialize|table_valeur{'enregistrement'})]})]
+	[(#SET{anonymiser,[(#GET{enregistrement}|table_valeur{'anonymiser'})]})]
+	[(#GET{anonymiser}|=={on}|oui)<h3><:formidable:formulaire_anonyme_explication:>]</h3>
+</BOUCLE_formulaire>
+<div class="formulaire_spip formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id,nouveau})]">
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+
+	[(#ENV{editable}|oui)
+	<form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+		
+		<ul>
+			#GENERER_SAISIES{#ENV{_saisies}}
+			<li style="display:none;">
+				<label for="mechantrobot-#ENV{id}"><:antispam_champ_vide:></label>
+				<input type="text" id="mechantrobot-#ENV{id}" name="mechantrobot" value="#ENV{mechantrobot}" />
+			</li>
+		</ul>
+		
+		[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
+		<!--extra-->
+		
+		<p class='boutons'>
+			<span class='image_loading'></span>
+			<input type='submit' class='submit' value='<:bouton_valider:>' />
+		</p>
+	</div></form>
+	]
+	[(#EDITABLE|non)
+		[(#ENV{formidable_afficher_apres}|=={valeurs}|oui) 
+			#VOIR_SAISIES{#ENV*{_saisies},#ENV}
+		]
+		[(#ENV{formidable_afficher_apres}|=={rien}|oui) 
+		]
+	]
+	<br />
+</div>
+<//B_remplacer_le_formulaire>
diff --git a/formidable_1_0/formulaires/formidable.php b/formidable_1_0/formulaires/formidable.php
new file mode 100644
index 0000000000000000000000000000000000000000..96529d96de2b7dd71f78882bc0c54e1f0abbb509
--- /dev/null
+++ b/formidable_1_0/formulaires/formidable.php
@@ -0,0 +1,287 @@
+<?php
+
+/**
+ * Gestion de l'affichage et traitement d'un formulaire Formidable
+ *
+ * @package SPIP\Formidable\Formulaires
+**/
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/formidable');
+include_spip('inc/saisies');
+include_spip('base/abstract_sql');
+include_spip('inc/autoriser');
+
+/**
+ * Chargement du formulaire CVT de Formidable.
+ * 
+ * Genere le formulaire dont l'identifiant (numerique ou texte est indique)
+ *
+ * @param int|string $id_formulaire
+ *     Identifiant numerique ou textuel du formulaire formidable
+ * @param array $valeurs
+ *     Valeurs par défauts passées au contexte du formulaire
+ *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
+ * @param int|bool $id_formulaires_reponse
+ *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
+ * 
+ * @return array
+ *     Contexte envoyé au squelette HTML du formulaire.
+**/
+function formulaires_formidable_charger($id_formulaire, $valeurs=array(), $id_formulaires_reponse=false){
+	$contexte = array();
+
+	// On peut donner soit un id soit un identifiant
+	if (intval($id_formulaire) > 0)
+		$where = 'id_formulaire = '.intval($id_formulaire);
+	elseif (is_string($id_formulaire))
+		$where = 'identifiant = '.sql_quote($id_formulaire);
+	else
+		return;
+	
+	// On cherche si le formulaire existe
+	if ($formulaire = sql_fetsel('*', 'spip_formulaires', $where)) {
+		// on ajoute un point d'entrée avec les infos de ce formulaire
+		// pour d'eventuels plugins qui en ont l'utilité
+		$contexte += array('_formidable' => $formulaire);
+		// Est-ce que la personne a le droit de répondre ?
+		if (autoriser('repondre', 'formulaire', $formulaire['id_formulaire'], null, array('formulaire'=>$formulaire))){
+			$saisies = unserialize($formulaire['saisies']);
+			$traitements = unserialize($formulaire['traitements']);
+			// On déclare les champs
+			$contexte += array_fill_keys(saisies_lister_champs($saisies), '');
+			$contexte['mechantrobot'] = '';
+			// On ajoute le formulaire complet
+			$contexte['_saisies'] = $saisies;
+		
+			$contexte['id'] = $formulaire['id_formulaire'];
+			$contexte['_hidden'] = '<input type="hidden" name="id_formulaire" value="'.$contexte['id'].'"/>';
+			
+			// S'il y a des valeurs par défaut dans l'appel, alors on pré-remplit
+			if ($valeurs){
+				// Si c'est une chaine on essaye de la parser
+				if (is_string($valeurs)){
+					$liste = explode(',', $valeurs);
+					$liste = array_map('trim', $liste);
+					$valeurs = array();
+					foreach ($liste as $i=>$cle_ou_valeur){
+						if ($i % 2 == 0)
+							$valeurs[$liste[$i]] = $liste[$i+1];
+					}
+				}
+				
+				// On regarde si maintenant on a un tableau
+				if ($valeurs and is_array($valeurs)){
+					$contexte = array_merge($contexte, $valeurs);
+				}
+			}
+
+			// Si on passe un identifiant de reponse, on edite cette reponse si elle existe
+			if ($id_formulaires_reponse = intval($id_formulaires_reponse)) {
+				$contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
+				if ($ok) {
+					// On ajoute un hidden pour dire que c'est une modif
+					$contexte['_hidden'] .= "\n".'<input type="hidden" name="deja_enregistre_'.$formulaire['id_formulaire'].'" value="'.$id_formulaires_reponse.'"/>';
+				} else {
+					$contexte['editable'] = false;
+					$contexte['message_erreur'] = _T('formidable:traiter_enregistrement_erreur_edition_reponse_inexistante');
+				}
+			} else {
+				
+				// Si multiple = non mais que c'est modifiable, alors on va chercher
+				// la dernière réponse si elle existe
+				if ($options = $traitements['enregistrement']
+					and !$options['multiple']
+					and $options['modifiable']
+					and $reponses = formidable_verifier_reponse_formulaire($formulaire['id_formulaire'], $options)
+				) {
+					$id_formulaires_reponse = array_pop($reponses);
+					$contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
+
+					// On ajoute un hidden pour dire que c'est une modif
+					$contexte['_hidden'] .= "\n".'<input type="hidden" name="deja_enregistre_'.$formulaire['id_formulaire'].'" value="'.$id_formulaires_reponse.'"/>';
+				}
+				
+			}
+		}
+		else{
+			$contexte['editable'] = false;
+			// le formulaire a déjà été répondu.
+			// peut être faut il afficher les statistiques des réponses
+			if ($formulaire['apres'] == 'stats') {
+				// Nous sommes face à un sondage auquel on a déjà répondu !
+				// On remplace complètement l'affichage du formulaire
+				// par un affichage du résultat de sondage !
+				$contexte['_remplacer_formulaire'] = recuperer_fond('modeles/formulaire_analyse', array(
+					'id_formulaire' => $formulaire['id_formulaire'],
+				));
+			} else {
+				$contexte['message_erreur'] = _T('formidable:traiter_enregistrement_erreur_deja_repondu');
+			}
+		}
+	}
+	else{
+		$contexte['editable'] = false;
+		$contexte['message_erreur'] = _T('formidable:erreur_inexistant');
+	}
+	if (!isset($contexte['_hidden'])) {
+		$contexte['_hidden'] = '';
+	}
+	$contexte['_hidden'] .= "\n".'<input type="hidden" name="formidable_afficher_apres'/*.$formulaire['id_formulaire']*/.'" value="'.$formulaire['apres'].'"/>';// marche pas
+	
+	$contexte['formidable_afficher_apres']=$formulaire['apres'];
+	
+	return $contexte;
+}
+
+
+/**
+ * Vérification du formulaire CVT de Formidable.
+ * 
+ * Pour chaque champ posté, effectue les vérifications demandées par
+ * les saisies et retourne éventuellement les erreurs de saisie.
+ *
+ * @param int|string $id_formulaire
+ *     Identifiant numerique ou textuel du formulaire formidable
+ * @param array $valeurs
+ *     Valeurs par défauts passées au contexte du formulaire
+ *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
+ * @param int|bool $id_formulaires_reponse
+ *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
+ * 
+ * @return array
+ *     Tableau des erreurs
+**/
+function formulaires_formidable_verifier($id_formulaire, $valeurs=array(), $id_formulaires_reponse=false){
+	$erreurs = array();
+	
+	// Sale bête !
+	if (_request('mechantrobot') != ''){
+		$erreurs['hahahaha'] = 'hahahaha';
+		return $erreurs;
+	}
+	
+	$id_formulaire = intval(_request('id_formulaire'));
+	$formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire);
+	$saisies = unserialize($formulaire['saisies']);
+	
+	$erreurs = saisies_verifier($saisies);
+	
+	if ($erreurs and !isset($erreurs['message_erreur']))
+		$erreurs['message_erreur'] = _T('formidable:erreur_generique');
+
+	return $erreurs;
+}
+
+
+/**
+ * Traitement du formulaire CVT de Formidable.
+ * 
+ * Exécute les traitements qui sont indiqués dans la configuration des
+ * traitements de ce formulaire formidable.
+ *
+ * Une fois fait, gère le retour après traitements des saisies en fonction
+ * de ce qui a été configuré dans le formulaire, par exemple :
+ * - faire réafficher le formulaire,
+ * - faire afficher les saisies
+ * - rediriger sur une autre page...
+ *
+ * @param int|string $id_formulaire
+ *     Identifiant numerique ou textuel du formulaire formidable
+ * @param array $valeurs
+ *     Valeurs par défauts passées au contexte du formulaire
+ *     Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
+ * @param int|bool $id_formulaires_reponse
+ *     Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
+ * 
+ * @return array
+ *     Tableau des erreurs
+**/
+function formulaires_formidable_traiter($id_formulaire, $valeurs=array(), $id_formulaires_reponse=false){
+	$retours = array();
+	
+	$id_formulaire = intval(_request('id_formulaire'));
+	$formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire);
+	$traitements = unserialize($formulaire['traitements']);
+
+	// selon le choix, le formulaire se remet en route à la fin ou non
+	$retours['editable'] = ($formulaire['apres']=='formulaire');
+	$retours['formidable_afficher_apres'] = $formulaire['apres'];
+
+	// Si on a une redirection valide
+	if (($formulaire['apres']== "redirige") AND ($formulaire['url_redirect']!="")) {
+		refuser_traiter_formulaire_ajax();
+		// traiter les raccourcis artX, brX
+		include_spip("inc/lien");
+		$url_redirect = typer_raccourci($formulaire['url_redirect']);
+		if (count($url_redirect)>2) {
+			$url_redirect = $url_redirect[0].$url_redirect[2];
+		} else {
+			$url_redirect = $formulaire['url_redirect'];      // URL classique
+		}
+
+		$retours['redirect'] = $url_redirect; 
+	}
+
+	// Si on a des traitements 
+	if (is_array($traitements) and !empty($traitements)) {
+		foreach($traitements as $type_traitement=>$options){
+			if ($appliquer_traitement = charger_fonction($type_traitement, 'traiter/', true)) {
+				$retours = $appliquer_traitement(
+					array(
+						'formulaire' => $formulaire,
+						'options' => $options
+					),
+					$retours
+				);
+			}
+		}
+
+		// Si on a personnalisé le message de retour, c'est lui qui est affiché uniquement
+		if ($formulaire['message_retour']) {
+			$retours['message_ok'] = _T_ou_typo($formulaire['message_retour']);
+		}
+	}
+	else{
+		$retours['message_ok'] = _T('formidable:retour_aucun_traitement');
+	}
+
+	return $retours;
+}
+
+
+/**
+ * Ajoute dans le contexte les elements
+ * donnés par une reponse de formulaire indiquée 
+ *
+ * @param array $contexte
+ *     Contexte pour le squelette HTML du formulaire
+ * @param int $id_formulaires_reponse
+ *     Identifiant de réponse
+ * @param bool $ok
+ *     La reponse existe bien ?
+ * @return array $contexte
+ *     Contexte complète des nouvelles informations
+ * 
+**/
+function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, &$ok) {
+	// On va chercher tous les champs
+	$champs = sql_allfetsel(
+		'nom, valeur',
+		'spip_formulaires_reponses_champs',
+		'id_formulaires_reponse = '.$id_formulaires_reponse
+	);
+	$ok = count($champs) ? true : false;
+	
+	// On remplit le contexte avec
+	foreach ($champs as $champ){
+		$test_array = unserialize($champ['valeur']);
+		$contexte[$champ['nom']] = is_array($test_array) ? $test_array : $champ['valeur'];
+	}
+
+	return $contexte;
+}
+
+?>
diff --git a/formidable_1_0/formulaires/importer_formulaire.html b/formidable_1_0/formulaires/importer_formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..0d71a5fdce94d24a76a2af999685db403bb81f9b
--- /dev/null
+++ b/formidable_1_0/formulaires/importer_formulaire.html
@@ -0,0 +1,30 @@
+<div class="formulaire_spip formulaire_#ENV{form}[ formulaire_#ENV{form}-(#ENV{id})]">
+	[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
+	[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
+	
+	[(#ENV{editable}|oui)
+	<form method="post" action="#ENV{action}" enctype="multipart/form-data"><div>
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+		
+		<ul>
+			[(#SAISIE{selection, type_import,
+				label=<:formidable:importer_formulaire_format_label:>,
+				datas=#ENV{_types_import},
+				defaut=yaml,
+				cacher_option_intro=oui})]
+			
+			[(#SAISIE{input, fichier,
+				label=<:formidable:importer_formulaire_fichier_label:>,
+				type=file,
+				size=6})]
+		</ul>
+		
+		[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
+		<!--extra-->
+		
+		<p class="boutons"><span class="image_loading"></span><input type="submit" class="submit" value="<:bouton_telecharger:>" /></p>
+	</div></form>
+	]
+</div>
diff --git a/formidable_1_0/formulaires/importer_formulaire.php b/formidable_1_0/formulaires/importer_formulaire.php
new file mode 100644
index 0000000000000000000000000000000000000000..edcf2c61f8f944eddb2773a414490d570201a7d5
--- /dev/null
+++ b/formidable_1_0/formulaires/importer_formulaire.php
@@ -0,0 +1,53 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/formidable');
+
+function formulaires_importer_formulaire_charger(){
+	
+	$contexte = array();
+	
+	// On va chercher toutes les fonctions d'importation existantes
+	$types_echange = echanges_formulaire_lister_disponibles();
+	$types_import = array();
+	foreach ($types_echange['importer'] as $type=>$fonction){
+		$types_import[$type] = _T("formidable:echanger_formulaire_${type}_importer");
+	}
+	
+	$contexte['_types_import'] = $types_import;
+	
+	return $contexte;
+}
+
+function formulaires_importer_formulaire_verifier(){
+	$erreurs = array();
+	
+	return $erreurs;
+}
+
+function formulaires_importer_formulaire_traiter(){
+	$retours = array();
+	
+	if (!$_FILES['fichier']['error']){
+		$type_import = _request('type_import');
+		$fichier = $_FILES['fichier']['tmp_name'];
+	
+		$importer = charger_fonction('importer', "echanger/formulaire/$type_import", true);
+		$erreur_ou_id = $importer($fichier);
+		
+		if (!is_numeric($erreur_ou_id)){
+			$retours['message_erreur'] = $erreur;
+			$retours['editable'] = true;
+		}
+		else{
+			$id_formulaire = intval($erreur_ou_id);
+			$retours['redirect'] = generer_url_ecrire('formulaire', "id_formulaire=$id_formulaire");
+		}
+	}
+	
+	return $retours;
+}
+
+?>
diff --git a/formidable_1_0/icones_barre/CVS/Entries b/formidable_1_0/icones_barre/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..07f8522566880f13af317f35c6f00d3c454549e8
--- /dev/null
+++ b/formidable_1_0/icones_barre/CVS/Entries
@@ -0,0 +1,2 @@
+/formulaire.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/icones_barre/CVS/Repository b/formidable_1_0/icones_barre/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..f99c3ca8f563da741889962d118f8665df663ebd
--- /dev/null
+++ b/formidable_1_0/icones_barre/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/icones_barre
diff --git a/formidable_1_0/icones_barre/CVS/Root b/formidable_1_0/icones_barre/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/icones_barre/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/icones_barre/formulaire.png b/formidable_1_0/icones_barre/formulaire.png
new file mode 100644
index 0000000000000000000000000000000000000000..0cf4900332313261662b761eb344b93da63a3d0e
Binary files /dev/null and b/formidable_1_0/icones_barre/formulaire.png differ
diff --git a/formidable_1_0/images/CVS/Entries b/formidable_1_0/images/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..2aeea60563c54d5fa54f18ca49538bc11fcdc1cb
--- /dev/null
+++ b/formidable_1_0/images/CVS/Entries
@@ -0,0 +1,19 @@
+/formidable-128.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formidable-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formidable-64.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formidable.svg/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-action-ajouter.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-analyse-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-config-champs-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-config-traitements-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-dupliquer-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-editer-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-exporter-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-nouveau-48.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-reponse-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-reponse-supprimer-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-reponses-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-reponses-exporter-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-supprimer-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/images/CVS/Repository b/formidable_1_0/images/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..c011695002dc8fa8e2830c307219fdff43a6c11f
--- /dev/null
+++ b/formidable_1_0/images/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/images
diff --git a/formidable_1_0/images/CVS/Root b/formidable_1_0/images/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/images/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/images/formidable-128.png b/formidable_1_0/images/formidable-128.png
new file mode 100644
index 0000000000000000000000000000000000000000..8d6b21c66a6738a63c23b05c18d89a4c0d55eab7
Binary files /dev/null and b/formidable_1_0/images/formidable-128.png differ
diff --git a/formidable_1_0/images/formidable-24.png b/formidable_1_0/images/formidable-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8c577f17b2bfe418b95446efb8f117c66f80247
Binary files /dev/null and b/formidable_1_0/images/formidable-24.png differ
diff --git a/formidable_1_0/images/formidable-64.png b/formidable_1_0/images/formidable-64.png
new file mode 100644
index 0000000000000000000000000000000000000000..80d5ab8601b48cc71ecbbd2d555d7158780f81e2
Binary files /dev/null and b/formidable_1_0/images/formidable-64.png differ
diff --git a/formidable_1_0/images/formidable.svg b/formidable_1_0/images/formidable.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5baf77e0a5ac4c12cd2a3282e65ef67984fa1865
--- /dev/null
+++ b/formidable_1_0/images/formidable.svg
@@ -0,0 +1,1104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg:svg
+   xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg9991"
+   sodipodi:version="0.32"
+   inkscape:version="0.47pre4 r22446"
+   sodipodi:docname="formidable.svg"
+   inkscape:export-filename="/home/vincent/public_html/collectivite/plugins/formidable/images/formidable-128.png"
+   inkscape:export-xdpi="180"
+   inkscape:export-ydpi="180"
+   version="1.1">
+  <svg:defs
+     id="defs9993">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective227" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       id="linearGradient9806">
+      <svg:stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop9808" />
+      <svg:stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop9810" />
+    </svg:linearGradient>
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9806"
+       id="radialGradient9812"
+       cx="24.35099"
+       cy="41.591846"
+       fx="24.35099"
+       fy="41.591846"
+       r="19.136078"
+       gradientTransform="matrix(1,0,0,0.242494,0,31.50606)"
+       gradientUnits="userSpaceOnUse" />
+    <svg:linearGradient
+       id="XMLID_3_"
+       gradientUnits="userSpaceOnUse"
+       x1="26.2524"
+       y1="34.8477"
+       x2="26.2524"
+       y2="32.5825">
+      <svg:stop
+         offset="0"
+         style="stop-color:#EF2929"
+         id="stop227" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#A40000"
+         id="stop229" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path2756_1_"
+       gradientUnits="userSpaceOnUse"
+       x1="-4.2974"
+       y1="72.0352"
+       x2="-4.2974"
+       y2="69.3176"
+       gradientTransform="matrix(1.1501,0,0,-1.1501,31.1956,114.7217)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#555753"
+         id="stop215" />
+      <svg:stop
+         offset="0.1275"
+         style="stop-color:#484C4A"
+         id="stop217" />
+      <svg:stop
+         offset="0.3459"
+         style="stop-color:#393E3F"
+         id="stop219" />
+      <svg:stop
+         offset="0.6043"
+         style="stop-color:#313638"
+         id="stop221" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#2E3436"
+         id="stop223" />
+    </svg:linearGradient>
+    <svg:radialGradient
+       id="path2327_1_"
+       cx="169.5005"
+       cy="-40.2339"
+       r="9.5353"
+       gradientTransform="matrix(0.788,0,0,-0.788,-109.0825,-6.0314)"
+       gradientUnits="userSpaceOnUse">
+      <svg:stop
+         offset="0"
+         style="stop-color:#E9B96E"
+         id="stop199" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#C17D11"
+         id="stop201" />
+    </svg:radialGradient>
+    <svg:linearGradient
+       id="XMLID_2_"
+       gradientUnits="userSpaceOnUse"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646"
+       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#C17D11"
+         id="stop186" />
+      <svg:stop
+         offset="0.2735"
+         style="stop-color:#BD7A10"
+         id="stop188" />
+      <svg:stop
+         offset="0.5694"
+         style="stop-color:#B0700C"
+         id="stop190" />
+      <svg:stop
+         offset="0.8747"
+         style="stop-color:#9A6105"
+         id="stop192" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#8F5902"
+         id="stop194" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="XMLID_1_"
+       gradientUnits="userSpaceOnUse"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493"
+       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#C17D11"
+         id="stop173" />
+      <svg:stop
+         offset="0.2735"
+         style="stop-color:#BD7A10"
+         id="stop175" />
+      <svg:stop
+         offset="0.5694"
+         style="stop-color:#B0700C"
+         id="stop177" />
+      <svg:stop
+         offset="0.8747"
+         style="stop-color:#9A6105"
+         id="stop179" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#8F5902"
+         id="stop181" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path4173_1_"
+       gradientUnits="userSpaceOnUse"
+       x1="65.4673"
+       y1="21.7046"
+       x2="65.4673"
+       y2="15.4519"
+       gradientTransform="matrix(1,0,0,-1,-34.4082,61.0186)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#FFFFFF"
+         id="stop163" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#C9C9C9"
+         id="stop165" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path29441_5_"
+       gradientUnits="userSpaceOnUse"
+       x1="-764.8428"
+       y1="70.6904"
+       x2="-768.0942"
+       y2="65.1441"
+       gradientTransform="matrix(-0.9772,0,0,-0.9959,-719.1876,75.5817)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#F5F5F5"
+         id="stop80" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#E9E9E9"
+         id="stop82" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path29441_4_"
+       gradientUnits="userSpaceOnUse"
+       x1="-776.0811"
+       y1="62.5264"
+       x2="-779.3325"
+       y2="56.9801"
+       gradientTransform="matrix(-0.9772,0,0,-0.9959,-719.1876,75.5817)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#F5F5F5"
+         id="stop71" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#E9E9E9"
+         id="stop73" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="rect29408_3_"
+       gradientUnits="userSpaceOnUse"
+       x1="35.4419"
+       y1="63.6533"
+       x2="40.9202"
+       y2="57.2008"
+       gradientTransform="matrix(1.0076,0,0,-0.9876,-21.8209,64.5593)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#F5F5F5"
+         id="stop62" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#E9E9E9"
+         id="stop64" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path29441_3_"
+       gradientUnits="userSpaceOnUse"
+       x1="-777.9102"
+       y1="48.9697"
+       x2="-781.1614"
+       y2="43.4239"
+       gradientTransform="matrix(-0.9772,0,0,-0.9959,-719.1876,75.5817)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#F5F5F5"
+         id="stop53" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#E9E9E9"
+         id="stop55" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="rect29408_2_"
+       gradientUnits="userSpaceOnUse"
+       x1="29.3257"
+       y1="53.0791"
+       x2="34.8039"
+       y2="46.6266"
+       gradientTransform="matrix(1.0076,0,0,-0.9876,-21.8209,64.5593)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#F5F5F5"
+         id="stop44" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#E9E9E9"
+         id="stop46" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path4370_1_"
+       gradientUnits="userSpaceOnUse"
+       x1="-695.4531"
+       y1="-64.7212"
+       x2="-696.7315"
+       y2="-64.0704"
+       gradientTransform="matrix(-0.9777,0.2101,-0.2101,-0.9777,-658.7002,129.0211)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#000000"
+         id="stop36" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#000000"
+         id="stop38" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="path4368_1_"
+       gradientUnits="userSpaceOnUse"
+       x1="95.3657"
+       y1="95.0371"
+       x2="97.3309"
+       y2="94.6373"
+       gradientTransform="matrix(0.9834,0.1816,0.1816,-0.9834,-95.5652,121.2474)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#000000"
+         id="stop30" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#000000"
+         id="stop32" />
+    </svg:linearGradient>
+    <svg:radialGradient
+       id="path2329_1_"
+       cx="46.8472"
+       cy="-100.144"
+       r="13.5656"
+       gradientTransform="matrix(1,0,0,-0.6819,-21.9902,-29.6113)"
+       gradientUnits="userSpaceOnUse">
+      <svg:stop
+         offset="0"
+         style="stop-color:#729FCF"
+         id="stop23" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#3465A4"
+         id="stop25" />
+    </svg:radialGradient>
+    <svg:radialGradient
+       id="XMLID_5_"
+       cx="23.436"
+       cy="33.9185"
+       r="19.7892"
+       gradientTransform="matrix(0.5861,1.37e-2,1.37e-2,0.6642,-2.6747,12.0504)"
+       gradientUnits="userSpaceOnUse">
+      <svg:stop
+         offset="0"
+         style="stop-color:#E9B96E"
+         id="stop14" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#C17D11"
+         id="stop16" />
+    </svg:radialGradient>
+    <svg:foreignObject
+       id="foreignObject7"
+       height="1"
+       width="1"
+       y="0"
+       x="0"
+       requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
+      <i:pgfRef
+         xlink:href="#adobe_illustrator_pgf" />
+    </svg:foreignObject>
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_5_"
+       id="radialGradient266885"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5861,1.37e-2,1.37e-2,0.6642,-2.6747,12.0504)"
+       cx="23.436"
+       cy="33.9185"
+       r="19.7892" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2329_1_"
+       id="radialGradient266887"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,-0.6819,-21.9902,-29.6113)"
+       cx="46.8472"
+       cy="-100.144"
+       r="13.5656" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path4368_1_"
+       id="linearGradient266889"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9834,0.1816,0.1816,-0.9834,-95.5652,121.2474)"
+       x1="95.3657"
+       y1="95.0371"
+       x2="97.3309"
+       y2="94.6373" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path4370_1_"
+       id="linearGradient266891"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.9777,0.2101,-0.2101,-0.9777,-658.7002,129.0211)"
+       x1="-695.4531"
+       y1="-64.7212"
+       x2="-696.7315"
+       y2="-64.0704" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path4173_1_"
+       id="linearGradient266903"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,-1,-34.4082,61.0186)"
+       x1="65.4673"
+       y1="21.7046"
+       x2="65.4673"
+       y2="15.4519" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_1_"
+       id="linearGradient266905"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_2_"
+       id="linearGradient266907"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2327_1_"
+       id="radialGradient266909"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.788,0,0,-0.788,-109.0825,-6.0314)"
+       cx="169.5005"
+       cy="-40.2339"
+       r="9.5353" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path2756_1_"
+       id="linearGradient266911"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1501,0,0,-1.1501,31.1956,114.7217)"
+       x1="-4.2974"
+       y1="72.0352"
+       x2="-4.2974"
+       y2="69.3176" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_3_"
+       id="linearGradient266913"
+       gradientUnits="userSpaceOnUse"
+       x1="26.2524"
+       y1="34.8477"
+       x2="26.2524"
+       y2="32.5825" />
+    <svg:radialGradient
+       id="radialGradient2174"
+       cx="46.847198"
+       cy="-100.144"
+       r="13.5656"
+       gradientTransform="matrix(1,0,0,-0.6819,-21.9902,-29.6113)"
+       gradientUnits="userSpaceOnUse">
+      <svg:stop
+         offset="0"
+         style="stop-color:#729FCF"
+         id="stop2176" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#3465A4"
+         id="stop2178" />
+    </svg:radialGradient>
+    <svg:linearGradient
+       id="linearGradient2182"
+       gradientUnits="userSpaceOnUse"
+       x1="95.3657"
+       y1="95.037102"
+       x2="97.330902"
+       y2="94.637299"
+       gradientTransform="matrix(0.9834,0.1816,0.1816,-0.9834,-95.5652,121.2474)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#000000"
+         id="stop2184" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#000000"
+         id="stop2186" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="linearGradient2189"
+       gradientUnits="userSpaceOnUse"
+       x1="-695.45312"
+       y1="-64.721199"
+       x2="-696.73151"
+       y2="-64.070396"
+       gradientTransform="matrix(-0.9777,0.2101,-0.2101,-0.9777,-658.7002,129.0211)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#000000"
+         id="stop2191" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#000000"
+         id="stop2193" />
+    </svg:linearGradient>
+    <namedview
+       zoom="9.8994949"
+       pageopacity="0.0"
+       pageshadow="2"
+       showpageshadow="false"
+       borderopacity="0.17254902"
+       pagecolor="#ffffff"
+       bordercolor="#666666"
+       cy="24.622653"
+       showgrid="false"
+       current-layer="layer1"
+       cx="25.799661"
+       window-y="167"
+       document-units="px"
+       window-width="770"
+       grid-bbox="true"
+       window-height="695"
+       window-x="472" />
+    <svg:linearGradient
+       id="linearGradient2280"
+       gradientUnits="userSpaceOnUse"
+       x1="65.4673"
+       y1="21.704599"
+       x2="65.4673"
+       y2="15.4519"
+       gradientTransform="matrix(1,0,0,-1,-34.4082,61.0186)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#FFFFFF"
+         id="stop2282" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#C9C9C9"
+         id="stop2284" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path4173_1_"
+       id="linearGradient266966"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7587571,0,0,-1.7587571,-73.922013,79.170666)"
+       x1="65.4673"
+       y1="21.7046"
+       x2="65.4673"
+       y2="15.4519" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path4370_1_"
+       id="linearGradient267038"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.7195361,0.36951432,-0.36951432,-1.7195361,-1171.8999,198.77048)"
+       x1="-695.4531"
+       y1="-64.7212"
+       x2="-696.7315"
+       y2="-64.0704" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path4368_1_"
+       id="linearGradient267041"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7295622,0.31939001,0.31939001,-1.7295622,-181.4823,185.09853)"
+       x1="95.3657"
+       y1="95.0371"
+       x2="97.3309"
+       y2="94.6373" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2329_1_"
+       id="radialGradient267045"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.758757,0,0,-1.1992961,-52.081768,-80.225303)"
+       cx="46.8472"
+       cy="-100.144"
+       r="13.5656" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_5_"
+       id="radialGradient267053"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5861,1.37e-2,1.37e-2,0.6642,-2.6747,12.0504)"
+       cx="23.436"
+       cy="33.9185"
+       r="19.7892" />
+    <svg:radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5861,1.37e-2,1.37e-2,0.6642,-2.6747,12.0504)"
+       r="19.7892"
+       cy="33.918499"
+       cx="23.436001"
+       id="radialGradient2166">
+      <svg:stop
+         id="stop2168"
+         style="stop-color:#E9B96E"
+         offset="0" />
+      <svg:stop
+         id="stop2170"
+         style="stop-color:#C17D11"
+         offset="1" />
+    </svg:radialGradient>
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_1_"
+       id="linearGradient267061"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_2_"
+       id="linearGradient267063"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2327_1_"
+       id="radialGradient267065"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.788,0,0,-0.788,-109.0825,-6.0314)"
+       cx="169.5005"
+       cy="-40.2339"
+       r="9.5353" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path2756_1_"
+       id="linearGradient267067"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1501,0,0,-1.1501,31.1956,114.7217)"
+       x1="-4.2974"
+       y1="72.0352"
+       x2="-4.2974"
+       y2="69.3176" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_3_"
+       id="linearGradient267069"
+       gradientUnits="userSpaceOnUse"
+       x1="26.2524"
+       y1="34.8477"
+       x2="26.2524"
+       y2="32.5825" />
+    <svg:radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.788,0,0,-0.788,-109.0825,-6.0314)"
+       r="9.5353003"
+       cy="-40.233898"
+       cx="169.5005"
+       id="radialGradient2315">
+      <svg:stop
+         id="stop2317"
+         style="stop-color:#E9B96E"
+         offset="0" />
+      <svg:stop
+         id="stop2319"
+         style="stop-color:#C17D11"
+         offset="1" />
+    </svg:radialGradient>
+    <svg:linearGradient
+       gradientTransform="matrix(1.1501,0,0,-1.1501,31.1956,114.7217)"
+       y2="69.317596"
+       x2="-4.2974"
+       y1="72.035202"
+       x1="-4.2974"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2329">
+      <svg:stop
+         id="stop2331"
+         style="stop-color:#555753"
+         offset="0" />
+      <svg:stop
+         id="stop2333"
+         style="stop-color:#484C4A"
+         offset="0.1275" />
+      <svg:stop
+         id="stop2335"
+         style="stop-color:#393E3F"
+         offset="0.3459" />
+      <svg:stop
+         id="stop2337"
+         style="stop-color:#313638"
+         offset="0.6043" />
+      <svg:stop
+         id="stop2339"
+         style="stop-color:#2E3436"
+         offset="1" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       y2="32.5825"
+       x2="26.252399"
+       y1="34.847698"
+       x1="26.252399"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2342">
+      <svg:stop
+         id="stop2344"
+         style="stop-color:#EF2929"
+         offset="0" />
+      <svg:stop
+         id="stop2346"
+         style="stop-color:#A40000"
+         offset="1" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_3_"
+       id="linearGradient267084"
+       gradientUnits="userSpaceOnUse"
+       x1="26.2524"
+       y1="34.8477"
+       x2="26.2524"
+       y2="32.5825"
+       gradientTransform="matrix(2.7108449,0,0,2.7108449,-38.9913,-41.797214)" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path2756_1_"
+       id="linearGradient267087"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.1177432,0,0,-3.1177432,45.575138,269.19554)"
+       x1="-4.2974"
+       y1="72.0352"
+       x2="-4.2974"
+       y2="69.3176" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2327_1_"
+       id="radialGradient267097"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.136146,0,0,-2.136146,-334.697,-58.147403)"
+       cx="169.5005"
+       cy="-40.2339"
+       r="9.5353" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_1_"
+       id="linearGradient267114"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_2_"
+       id="linearGradient267116"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646" />
+    <svg:linearGradient
+       id="linearGradient2289"
+       gradientUnits="userSpaceOnUse"
+       x1="-25.431601"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493"
+       gradientTransform="matrix(-0.4034,-0.1906,-0.427,0.9042,17.9775,24.8318)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#C17D11"
+         id="stop2291" />
+      <svg:stop
+         offset="0.2735"
+         style="stop-color:#BD7A10"
+         id="stop2293" />
+      <svg:stop
+         offset="0.5694"
+         style="stop-color:#B0700C"
+         id="stop2295" />
+      <svg:stop
+         offset="0.8747"
+         style="stop-color:#9A6105"
+         id="stop2297" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#8F5902"
+         id="stop2299" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       id="linearGradient2302"
+       gradientUnits="userSpaceOnUse"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646"
+       gradientTransform="matrix(0.4034,-0.1906,0.427,0.9042,34.7974,24.8318)">
+      <svg:stop
+         offset="0"
+         style="stop-color:#C17D11"
+         id="stop2304" />
+      <svg:stop
+         offset="0.2735"
+         style="stop-color:#BD7A10"
+         id="stop2306" />
+      <svg:stop
+         offset="0.5694"
+         style="stop-color:#B0700C"
+         id="stop2308" />
+      <svg:stop
+         offset="0.8747"
+         style="stop-color:#9A6105"
+         id="stop2310" />
+      <svg:stop
+         offset="1"
+         style="stop-color:#8F5902"
+         id="stop2312" />
+    </svg:linearGradient>
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_2_"
+       id="linearGradient267131"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0935548,-0.51668813,1.15753,2.4511451,55.339053,25.517944)"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_1_"
+       id="linearGradient267134"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0935548,-0.51668813,-1.15753,2.4511451,9.74292,25.517944)"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493" />
+    <inkscape:perspective
+       id="perspective3062"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3076"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3090"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3104"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3118"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_1_"
+       id="linearGradient3017"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0935548,-0.51668813,-1.15753,2.4511451,9.74292,25.517944)"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_2_"
+       id="linearGradient3019"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0935548,-0.51668813,1.15753,2.4511451,55.339053,25.517944)"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2327_1_"
+       id="radialGradient3021"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.136146,0,0,-2.136146,-334.697,-58.147403)"
+       cx="169.5005"
+       cy="-40.2339"
+       r="9.5353" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path2756_1_"
+       id="linearGradient3023"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.1177432,0,0,-3.1177432,45.575138,269.19554)"
+       x1="-4.2974"
+       y1="72.0352"
+       x2="-4.2974"
+       y2="69.3176" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_3_"
+       id="linearGradient3025"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7108449,0,0,2.7108449,-38.9913,-41.797214)"
+       x1="26.2524"
+       y1="34.8477"
+       x2="26.2524"
+       y2="32.5825" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_3_"
+       id="linearGradient3030"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7108449,0,0,2.7108449,-39.169171,-41.746948)"
+       x1="26.2524"
+       y1="34.8477"
+       x2="26.2524"
+       y2="32.5825" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#path2756_1_"
+       id="linearGradient3033"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.1177432,0,0,-3.1177432,45.397267,269.24581)"
+       x1="-4.2974"
+       y1="72.0352"
+       x2="-4.2974"
+       y2="69.3176" />
+    <svg:radialGradient
+       inkscape:collect="always"
+       xlink:href="#path2327_1_"
+       id="radialGradient3040"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.136146,0,0,-2.136146,-334.87487,-58.097137)"
+       cx="169.5005"
+       cy="-40.2339"
+       r="9.5353" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_2_"
+       id="linearGradient3043"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0935548,-0.51668813,1.15753,2.4511451,55.161182,25.56821)"
+       x1="-25.979"
+       y1="-10.6646"
+       x2="-18.7339"
+       y2="-10.6646" />
+    <svg:linearGradient
+       inkscape:collect="always"
+       xlink:href="#XMLID_1_"
+       id="linearGradient3046"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.0935548,-0.51668813,-1.15753,2.4511451,9.5650493,25.56821)"
+       x1="-25.4316"
+       y1="-10.5493"
+       x2="-18.1875"
+       y2="-10.5493" />
+  </svg:defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="24.999168"
+     inkscape:cy="36.55781"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="867"
+     inkscape:window-height="669"
+     inkscape:window-x="246"
+     inkscape:window-y="112"
+     inkscape:window-maximized="0" />
+  <svg:metadata
+     id="metadata9996">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </svg:metadata>
+  <svg:g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <svg:image
+       y="0.52496314"
+       x="79.286026"
+       id="image3064"
+       height="13.594464"
+       width="13.594464"
+       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-combobox.png" />
+    <svg:path
+       d="m 41.665519,9.108502 c -1.867773,3.960546 -1.612951,8.007839 0.5747,9.04338 2.187651,1.032832 5.478619,-1.341865 7.349101,-5.302413 1.867773,-3.9605434 1.612955,-8.0051252 -0.574701,-9.0406662 -2.190363,-1.032836 -5.481326,1.3391575 -7.3491,5.2996992 z"
+       id="path183"
+       style="fill:url(#linearGradient3046);stroke:#8f5902;stroke-width:2.36402392;stroke-miterlimit:4;stroke-dasharray:none" />
+    <svg:path
+       d="m 22.33177,9.1057907 c 1.867773,3.9578363 1.612957,8.0078393 -0.574698,9.0406703 -2.187649,1.03283 -5.478616,-1.341867 -7.349099,-5.302413 -1.867773,-3.9605449 -1.612953,-8.005125 0.5747,-9.0379564 2.187648,-1.032836 5.475904,1.3391576 7.349097,5.2996991 z"
+       id="path196"
+       style="fill:url(#linearGradient3043);stroke:#8f5902;stroke-width:2.36402392;stroke-miterlimit:4;stroke-dasharray:none" />
+    <svg:path
+       style="fill:url(#radialGradient3040);stroke:#8f5902;stroke-width:2.36402392;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 55.477275,30.694962 c 0.0055,12.968683 -10.499103,29.735262 -23.465076,29.74068 -12.963262,0.0055 -23.4840487,-16.750309 -23.4894717,-29.716283 0,-0.0081 0,-0.01641 0,-0.02447 C 8.5146273,17.726208 19.021832,7.2081281 31.990516,7.1999959 44.951062,7.1944459 55.471855,17.701807 55.477275,30.667783 c 0,0.01095 0,0.01896 0,0.02705 z"
+       cx="31.112698"
+       type="arc"
+       rx="8.6620579"
+       cy="19.008621"
+       ry="8.6620579"
+       id="path2327" />
+    <svg:path
+       style="opacity:0.12660002;fill:none;stroke:#ffffff;stroke-width:2.36402392;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none"
+       d="m 52.590227,30.694962 c 0.0055,11.374707 -9.211453,26.850921 -20.580738,26.856344 -11.369282,0.0056 -20.599712,-15.459951 -20.605135,-26.834653 0,-0.0081 0,-0.01356 0,-0.02158 -0.0055,-11.374705 9.211452,-20.602421 20.583451,-20.607842 11.366569,-0.0055 20.596998,9.208739 20.602422,20.586154 0,0.0081 0,0.01356 0,0.02158 z"
+       enable-background="new    "
+       cx="31.112698"
+       type="arc"
+       rx="8.6620579"
+       cy="19.008621"
+       ry="8.6620579"
+       id="path3834" />
+    <svg:g
+       id="g205"
+       transform="matrix(2.7108452,0,0,2.7108452,-39.169172,-41.746951)">
+      <svg:ellipse
+         style="fill:#8f5902"
+         sodipodi:ry="0.54100001"
+         sodipodi:rx="1.041"
+         sodipodi:cy="29.219"
+         sodipodi:cx="24.940001"
+         id="ellipse207"
+         ry="0.54100001"
+         rx="1.041"
+         cy="29.219"
+         cx="24.940001"
+         transform="matrix(0.8505,0.526,-0.526,0.8505,19.0996,-8.7499)"
+         d="m 25.981001,29.219 c 0,0.298786 -0.466072,0.541 -1.041,0.541 -0.574929,0 -1.041,-0.242214 -1.041,-0.541 0,-0.298786 0.466071,-0.541 1.041,-0.541 0.574928,0 1.041,0.242214 1.041,0.541 z" />
+      <svg:ellipse
+         style="fill:#8f5902"
+         sodipodi:ry="0.54100001"
+         sodipodi:rx="1.0420001"
+         sodipodi:cy="29.219"
+         sodipodi:cx="27.565001"
+         id="ellipse209"
+         ry="0.54100001"
+         rx="1.0420001"
+         cy="29.219"
+         cx="27.565001"
+         transform="matrix(-0.8506,0.5258,-0.5258,-0.8506,66.3766,39.5785)"
+         d="m 28.607001,29.219 c 0,0.298786 -0.46652,0.541 -1.042,0.541 -0.575481,0 -1.042001,-0.242214 -1.042001,-0.541 0,-0.298786 0.46652,-0.541 1.042001,-0.541 0.57548,0 1.042,0.242214 1.042,0.541 z" />
+    </svg:g>
+    <svg:path
+       style="fill:url(#linearGradient3033);stroke:#2e3436;stroke-width:0.67771125;stroke-linecap:round;stroke-linejoin:round"
+       d="m 22.70858,43.845272 c 0.09486,5.055726 4.209941,9.463561 9.292779,9.463561 5.07741,0 9.192476,-4.407835 9.287353,-9.463561 l -18.580132,0 0,0 z"
+       nodetypes="cscc"
+       id="path2756" />
+    <svg:path
+       style="fill:url(#linearGradient3030);stroke:#a40000;stroke-width:0.67771125;stroke-linecap:round;stroke-linejoin:round"
+       id="path231"
+       d="m 33.009791,46.447685 -1.434034,1.989758 -0.872894,-1.962651 c -2.4994,0.393071 -4.489161,1.935545 -5.109946,3.922592 1.678014,1.772894 4.003921,2.908737 6.581934,2.908737 2.399098,0 4.578618,-0.99217 6.22681,-2.564457 -0.504216,-2.201206 -2.66476,-3.930725 -5.39187,-4.293979 z" />
+    <svg:image
+       y="12.687449"
+       x="11.29285"
+       id="image3078"
+       height="25.508533"
+       width="25.508533"
+       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-checkbox.png" />
+    <svg:image
+       y="14.403575"
+       x="30.422155"
+       id="image3092"
+       height="22.700869"
+       width="22.700869"
+       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-radio.png" />
+    <svg:image
+       y="-3.2308276"
+       x="-44.282436"
+       id="image3106"
+       height="16.103373"
+       width="16.103373"
+       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-text-box.png" />
+    <svg:image
+       y="43.025379"
+       x="73.367607"
+       id="image3120"
+       height="14.591788"
+       width="14.591788"
+       xlink:href="file:///usr/share/icons/gnome/24x24/stock/form/stock_form-design-mode.png" />
+  </svg:g>
+</svg:svg>
diff --git a/formidable_1_0/images/formulaire-24.png b/formidable_1_0/images/formulaire-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff847d080c2b8c158b3dccdff2d1534d06178ae6
Binary files /dev/null and b/formidable_1_0/images/formulaire-24.png differ
diff --git a/formidable_1_0/images/formulaire-action-ajouter.png b/formidable_1_0/images/formulaire-action-ajouter.png
new file mode 100644
index 0000000000000000000000000000000000000000..8aef2957c18a03733564ddd83a6edb5771da56be
Binary files /dev/null and b/formidable_1_0/images/formulaire-action-ajouter.png differ
diff --git a/formidable_1_0/images/formulaire-analyse-24.png b/formidable_1_0/images/formulaire-analyse-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..9965646437832a2053804dc55b33b9b190dbe27c
Binary files /dev/null and b/formidable_1_0/images/formulaire-analyse-24.png differ
diff --git a/formidable_1_0/images/formulaire-config-champs-24.png b/formidable_1_0/images/formulaire-config-champs-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d77271074487e5ea30bbcd2f7c6eed6bc3bcdea
Binary files /dev/null and b/formidable_1_0/images/formulaire-config-champs-24.png differ
diff --git a/formidable_1_0/images/formulaire-config-traitements-24.png b/formidable_1_0/images/formulaire-config-traitements-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..f362e72fbbde43b4aba339ad21a6c052b8069dd9
Binary files /dev/null and b/formidable_1_0/images/formulaire-config-traitements-24.png differ
diff --git a/formidable_1_0/images/formulaire-dupliquer-24.png b/formidable_1_0/images/formulaire-dupliquer-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..a4ec44f9213f3586049715553d506c47756a4fee
Binary files /dev/null and b/formidable_1_0/images/formulaire-dupliquer-24.png differ
diff --git a/formidable_1_0/images/formulaire-editer-24.png b/formidable_1_0/images/formulaire-editer-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..0bb3e266d5b7a38253cc8cc70e77b48475e5528a
Binary files /dev/null and b/formidable_1_0/images/formulaire-editer-24.png differ
diff --git a/formidable_1_0/images/formulaire-exporter-24.png b/formidable_1_0/images/formulaire-exporter-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..33508572ff1186c138da781b1c3c03fa27ef9b85
Binary files /dev/null and b/formidable_1_0/images/formulaire-exporter-24.png differ
diff --git a/formidable_1_0/images/formulaire-nouveau-48.png b/formidable_1_0/images/formulaire-nouveau-48.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0c803e3f09a3a23715a2b49c229cd784cabe632
Binary files /dev/null and b/formidable_1_0/images/formulaire-nouveau-48.png differ
diff --git a/formidable_1_0/images/formulaire-reponse-24.png b/formidable_1_0/images/formulaire-reponse-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..1bbdb51acdf26fccc0d4b409e0e543b213e279ac
Binary files /dev/null and b/formidable_1_0/images/formulaire-reponse-24.png differ
diff --git a/formidable_1_0/images/formulaire-reponse-supprimer-24.png b/formidable_1_0/images/formulaire-reponse-supprimer-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..897c63e1c3b275c13d076fbed552abf50902e79a
Binary files /dev/null and b/formidable_1_0/images/formulaire-reponse-supprimer-24.png differ
diff --git a/formidable_1_0/images/formulaire-reponses-24.png b/formidable_1_0/images/formulaire-reponses-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec0a2b05a2d7a392c8a4f464c5069d6af0a684aa
Binary files /dev/null and b/formidable_1_0/images/formulaire-reponses-24.png differ
diff --git a/formidable_1_0/images/formulaire-reponses-exporter-24.png b/formidable_1_0/images/formulaire-reponses-exporter-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..94d0cec41e48d9e59450e829c47b2441694e7ceb
Binary files /dev/null and b/formidable_1_0/images/formulaire-reponses-exporter-24.png differ
diff --git a/formidable_1_0/images/formulaire-supprimer-24.png b/formidable_1_0/images/formulaire-supprimer-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..1819e5ef1685d9e19518d13047a1988dcba88477
Binary files /dev/null and b/formidable_1_0/images/formulaire-supprimer-24.png differ
diff --git a/formidable_1_0/inc/CVS/Entries b/formidable_1_0/inc/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..2b8699dbe67f0825ee1a8d1a2d52e9e45db6dc9f
--- /dev/null
+++ b/formidable_1_0/inc/CVS/Entries
@@ -0,0 +1,2 @@
+/formidable.php/1.3/Tue Mar 19 14:47:51 2013//
+D
diff --git a/formidable_1_0/inc/CVS/Repository b/formidable_1_0/inc/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..ce8493efcd749f10a34c3beea060d17fcc7d7637
--- /dev/null
+++ b/formidable_1_0/inc/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/inc
diff --git a/formidable_1_0/inc/CVS/Root b/formidable_1_0/inc/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/inc/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/inc/formidable.php b/formidable_1_0/inc/formidable.php
new file mode 100644
index 0000000000000000000000000000000000000000..03fc160f43051474fcf7c99519d716732fc2ff1b
--- /dev/null
+++ b/formidable_1_0/inc/formidable.php
@@ -0,0 +1,377 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/*
+ * Liste tous les traitements configurables (ayant une description)
+ *
+ * @return array Un tableau listant des saisies et leurs options
+ */
+function traitements_lister_disponibles(){
+	static $traitements = null;
+	
+	if (is_null($traitements)){
+		$traitements = array();
+		$liste = find_all_in_path('traiter/', '.+[.]yaml$');
+		
+		if (count($liste)){
+			foreach ($liste as $fichier=>$chemin){
+				$type_traitement = preg_replace(',[.]yaml$,i', '', $fichier);
+				$dossier = str_replace($fichier, '', $chemin);
+				// On ne garde que les traitements qui ont bien la fonction
+				if (charger_fonction($type_traitement, 'traiter', true)
+					and (
+						is_array($traitement = traitements_charger_infos($type_traitement))
+					)
+				){
+					$traitements[$type_traitement] = $traitement;
+				}
+			}
+		}
+	}
+	
+	return $traitements;
+}
+
+/**
+ * Charger les informations contenues dans le yaml d'un traitement
+ *
+ * @param string $type_saisie Le type de la saisie
+ * @return array Un tableau contenant le YAML décodé
+ */
+function traitements_charger_infos($type_traitement){
+	include_spip('inc/yaml');
+	$fichier = find_in_path("traiter/$type_traitement.yaml");
+	$traitement = yaml_decode_file($fichier);
+
+	if (is_array($traitement)) {
+		$traitement += array('titre' => '', 'description' => '', 'icone' => '');
+		$traitement['titre'] = $traitement['titre'] ? _T_ou_typo($traitement['titre']) : $type_traitement;
+		$traitement['description'] = $traitement['description'] ? _T_ou_typo($traitement['description']) : '';
+		$traitement['icone'] = $traitement['icone'] ? find_in_path($traitement['icone']) : '';
+	}
+	return $traitement;
+}
+
+/*
+ * Liste tous les types d'échanges (export et import) existant pour les formulaires
+ *
+ * @return array Retourne un tableau listant les types d'échanges
+ */
+function echanges_formulaire_lister_disponibles(){
+	// On va chercher toutes les fonctions existantes
+	$liste = find_all_in_path('echanger/formulaire/', '.+[.]php$');
+	$types_echange = array('exporter'=>array(), 'importer'=>array());
+	if (count($liste)){
+		foreach ($liste as $fichier=>$chemin){
+			$type_echange = preg_replace(',[.]php$,i', '', $fichier);
+			$dossier = str_replace($fichier, '', $chemin);
+			// On ne garde que les échanges qui ont bien la fonction
+			if ($f = charger_fonction('exporter', "echanger/formulaire/$type_echange", true)){
+				$types_echange['exporter'][$type_echange] = $f;
+			}
+			if ($f = charger_fonction('importer', "echanger/formulaire/$type_echange", true)){
+				$types_echange['importer'][$type_echange] = $f;
+			}
+		}
+	}
+	return $types_echange;
+}
+
+/*
+ * Génère le nom du cookie qui sera utilisé par le plugin lors d'une réponse
+ * par un visiteur non-identifié.
+ *
+ * @param int $id_formulaire L'identifiant du formulaire
+ * @return string Retourne le nom du cookie
+ */
+function formidable_generer_nom_cookie($id_formulaire){
+	return $GLOBALS['cookie_prefix'].'cookie_formidable_'.$id_formulaire;
+}
+
+/*
+ * Vérifie si le visiteur a déjà répondu à un formulaire
+ *
+ * @param int $id_formulaire L'identifiant du formulaire
+ * @param string $options : options du formulaire definies dans l'espace prive
+ * @return unknown_type Retourne un tableau contenant les id des réponses si elles existent, sinon false
+ */
+function formidable_verifier_reponse_formulaire($id_formulaire, $options){
+	global $auteur_session;
+	$id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
+	$nom_cookie = formidable_generer_nom_cookie($id_formulaire);
+	$cookie = isset($_COOKIE[$nom_cookie]) ? $_COOKIE[$nom_cookie] : false;
+
+	$anonymiser = isset($options['anonymiser']) ? $options['anonymiser'] : false;
+	$anonymiser_variable = isset($options['anonymiser_variable']) ? $options['anonymiser_variable'] : '';
+
+	// traitement de l'anonymisation
+	if ($anonymiser != false) {
+	    // mod de l'id_auteur
+	    $variables_anonymisation =
+	            $GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
+	    $id = eval("return $variables_anonymisation;");
+	    $id_auteur = formidable_scramble($id);
+	}
+	// ni cookie ni id, on ne peut rien faire
+	if (!$cookie and !$id_auteur) {
+		return false;
+	}
+	
+	// priorite sur le cookie
+	if ($choix_identification == 'cookie' or !$choix_identification) {
+		if ($cookie)
+			$where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.$id_auteur.')' : ')');
+		else
+			$where = 'id_auteur='.$id_auteur;
+	}
+	
+	// sinon sur l'id_auteur
+	else {
+		if ($id_auteur)
+			$where = 'id_auteur='.$id_auteur;
+		else
+			$where = '(cookie='.sql_quote($cookie).($id_auteur ? ' OR id_auteur='.$id_auteur.')' : ')');
+	}
+	
+	$reponses = sql_allfetsel(
+		'id_formulaires_reponse',
+		'spip_formulaires_reponses',
+		array(
+			array('=', 'id_formulaire', intval($id_formulaire)),
+			array('=', 'statut', sql_quote('publie')),
+			$where
+		),
+		'',
+		'date'
+	);
+	
+	if (is_array($reponses))
+		return array_map('reset', $reponses);
+	else
+		return false;
+}
+
+/*
+ * Génère la vue d'analyse de toutes les réponses à une saisie
+ *
+ * @param array $saisie Un tableau décrivant une saisie
+ * @param array $env L'environnement, contenant normalement la réponse à la saisie
+ * @return string Retour le HTML des vues
+ */
+function formidable_analyser_saisie($saisie, $valeurs=array(), $reponses_total=0, $format_brut=false) {
+	// Si le paramètre n'est pas bon ou que c'est un conteneur, on génère du vide
+	if (!is_array($saisie) or (isset($saisie['saisies']) and $saisie['saisies']))
+		return '';
+	
+	$contexte = array('reponses_total'=>$reponses_total);
+	
+	// On sélectionne le type de saisie
+	$contexte['type_saisie'] = $saisie['saisie'];
+	
+	// Peut-être des transformations à faire sur les options textuelles
+	$options = $saisie['options'];
+	foreach ($options as $option => $valeur){
+		$options[$option] = _T_ou_typo($valeur, 'multi');
+	}
+	
+	// On ajoute les options propres à la saisie
+	$contexte = array_merge($contexte, $options);
+	
+	// On récupère toutes les valeurs du champ
+	if (isset($valeurs[$contexte['nom']]) and $valeurs[$contexte['nom']] and is_array($valeurs[$contexte['nom']])){
+		$contexte['valeurs'] = $valeurs[$contexte['nom']];
+	}
+	else{
+		$contexte['valeurs'] = array();
+	}
+	
+	// On génère la saisie
+    if ($format_brut) {
+        return analyser_saisie($contexte);
+    } else {
+        return recuperer_fond(
+            'saisies-analyses/_base',
+            $contexte
+        );
+    }
+}
+
+/*
+ * Renvoie une ligne de réponse sous la forme d'un tableau
+ *
+ * @param array $saisie Un tableau décrivant une saisie
+ * @return array Tableau contenant une ligne
+ */
+function analyser_saisie($saisie) {
+    if (!isset($saisie['type_saisie']) or $saisie['type_saisie'] == '')
+        return '';
+
+    $ligne = array();
+
+    switch($saisie['type_saisie']) {
+        case 'selecteur_rubrique' :
+        case 'selecteur_rubrique_article' :
+        case 'selecteur_article' :
+            $ligne['plein'] = count(array_filter($saisie['valeurs']));
+            $ligne['vide'] = count(array_diff_key($saisie['valeurs']
+                , array_filter($saisie['valeurs'])));
+        break;
+        case 'radio' :
+        case 'selection' :
+        case 'selection_multiple' :
+        case 'checkbox' :
+            $stats = array();
+            foreach($saisie['valeurs'] as $valeur) {
+                if (is_array($valeur)) {
+                    foreach($valeur as $choix) {
+                        if (isset($stats["choix-$choix"]))
+                            $stats["choix-$choix"]++;
+                        else $stats["choix-$choix"] = 1;
+                    }
+                } else {
+                    if (isset($stats["choix-$valeur"]))
+                            $stats["choix-$valeur"]++;
+                        else $stats["choix-$valeur"] = 1;
+                }
+            }
+            $datas = is_string($saisie['datas'])
+                ? saisies_chaine2tableau($saisie['datas'])
+                : $saisie['datas'];
+            foreach($datas as $key => $val) {
+                $nb = (isset($stats["choix-$key"]))
+                    ? $stats["choix-$key"]
+                    : 0;
+                $ligne[$val] = $nb;
+            }
+        break;
+        case 'destinataires' :
+            $stats = array();
+            foreach($saisie['valeurs'] as $valeur) {
+                foreach($valeur as $choix) {
+                    if (isset($stats["choix-$choix"]))
+                        $stats["choix-$choix"]++;
+                    else $stats["choix-$choix"] = 1;
+                }
+            }
+            foreach($stats as $key => $val) {
+                $key = str_replace('choix-', '', $key);
+                if ($key == '') $key = '<valeur vide>';
+                $auteur = sql_getfetsel('nom','spip_auteurs',"id_auteur=$key");
+                $ligne[$auteur] = $val;
+            }
+        break;
+    }
+
+    $vide = 0;
+    foreach($saisie['valeurs'] as $valeur) {
+        if ($valeur == '') $vide++;
+        switch($saisie['type_saisie']) {
+            case 'case' :
+            case 'oui_non' :
+                if(isset($ligne['oui']) == false) $ligne['oui'] = 0;
+                if(isset($ligne['non']) == false) $ligne['non'] = 0;
+                if ($valeur) $ligne['oui']++; else $ligne['non']++;
+            break;
+            case 'input' :
+            case 'hidden' :
+            case 'explication' :
+            break;
+        }
+    }
+    $ligne['sans_reponse'] = $vide;
+    $ligne['header'] = $saisie['label'] != ''
+        ? $saisie['label']
+        : $saisie['type_saisie'];
+
+    return $ligne;
+}
+
+
+/**
+ * Tente de déserialiser un texte 
+ *
+ * Si le paramètre est un tableau, retourne le tableau,
+ * Si c'est une chaîne, tente de la désérialiser, sinon
+ * retourne la chaîne.
+ *
+ * @filtre tenter_unserialize
+ * 
+ * @param string|array $texte
+ *     Le texte (possiblement sérializé) ou un tableau
+ * @return array|string
+ *     Tableau, texte désérializé ou texte
+**/
+function filtre_tenter_unserialize_dist($texte) {
+	if (is_array($texte)) {
+		return $texte;
+	}
+	if ($tmp = @unserialize($texte)) {
+		return $tmp;
+	}
+	return $texte;
+}
+
+
+/**
+ * Retourne un texte du nombre de réponses 
+ *
+ * @param int $nb
+ *     Nombre de réponses
+ * @return string
+ *     Texte indiquant le nombre de réponses
+**/
+function titre_nb_reponses($nb) {
+	if (!$nb) return _T('formidable:reponse_aucune');
+	if ($nb == 1) return _T('formidable:reponse_une');
+	return _T('formidable:reponses_nb', array('nb' => $nb));
+}
+
+/**
+ * Transforme le hash MD5 en une valeur numérique unique
+ *
+ * trouvé ici : http://stackoverflow.com/questions/1422725/represent-md5-hash-as-an-integer
+ * @param string $hex_str La valeur alphanumérique à transformer
+ * @return string Valeur numérique
+*/
+function md5_hex_to_dec($hex_str) {
+	$arr = str_split($hex_str, 4);
+	foreach ($arr as $grp) {
+	    $dec[] = str_pad(hexdec($grp), 5, '0', STR_PAD_LEFT);
+	}
+
+	/* on s'assure que $result ne commence pas par un zero */
+	$result = implode('', $dec);
+	for ($cpt = 0 ; $cpt < strlen($result) ; $cpt++) {
+	    if ($result[$cpt] != '0') break;
+	}
+	$result = substr($result, $cpt);
+	return $result;
+}
+
+/**
+ * Transforme un login en une valeur numérique de 19 caractères
+ *
+ * NOTE: il devient impossible de retrouver la valeur d'origine car le HASH
+ * est coupé à 19cars et est donc incomplet. L'unicité n'est pas garantie mais
+ * les chances pour que deux logins tombent sur le même HASH sont de 1 sur
+ * 10 milliards de milliards
+ * A la fin, on recherche et supprime les éventuels zéros de début
+ * @param string $login Login à transformer
+ * @param string $passwd Chaîne 'secrète' ajoutée au login et id_formulaire pour éviter
+ *  les recoupements d'identité entre plusieurs formulaires
+ * @return string Un nombre de 19 chiffres
+*/
+function formidable_scramble($login, $passwd = '') {
+	$id_form = (isset($flux['args']['id_form']) ? $flux['args']['id_form'] : '');
+	if ($passwd == '')
+	    $passwd = $GLOBALS['formulaires']['passwd']['interne'];
+	$login_md5 = md5("$login$passwd$id_form");
+	$login_num = md5_hex_to_dec($login_md5);
+	$login_num = substr($login_num, 0, 19);
+
+	return $login_num;
+}
+
+?>
diff --git a/formidable_1_0/lang/CVS/Entries b/formidable_1_0/lang/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..1c6dbe6eea3190ef1878b4af0ea615dc4aa61db7
--- /dev/null
+++ b/formidable_1_0/lang/CVS/Entries
@@ -0,0 +1,9 @@
+/formidable.xml/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire_fr.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponse_fr.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/paquet-formidable_fr.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formidable_de.php/1.3/Tue Mar 19 14:47:51 2013//
+/formidable_fr.php/1.3/Tue Mar 19 15:01:12 2013//
+/formidable_it.php/1.2/Tue Mar 19 14:47:52 2013//
+/formidable_sk.php/1.2/Tue Mar 19 14:47:52 2013//
+D
diff --git a/formidable_1_0/lang/CVS/Repository b/formidable_1_0/lang/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..e4d96194489d02023f197351c4a72da56e53b692
--- /dev/null
+++ b/formidable_1_0/lang/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/lang
diff --git a/formidable_1_0/lang/CVS/Root b/formidable_1_0/lang/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/lang/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/lang/formidable.xml b/formidable_1_0/lang/formidable.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8c9f50807adfd163d7a392f3cb41d42c0373a723
--- /dev/null
+++ b/formidable_1_0/lang/formidable.xml
@@ -0,0 +1,8 @@
+<traduction module="formidable" gestionnaire="salvatore" url="http://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/" reference="fr">
+	<langue code="de" />
+	<langue code="fr" />
+	<langue code="it" />
+	<langue code="sk" url="http://trad.spip.net/tradlang_module/formidable?lang_cible=sk">
+		<traducteur nom="jaro" lien="http://trad.spip.net/auteur/jaro" />
+	</langue>
+</traduction>
diff --git a/formidable_1_0/lang/formidable_de.php b/formidable_1_0/lang/formidable_de.php
new file mode 100644
index 0000000000000000000000000000000000000000..9265bf7ce4cbfd589a8d54e9398e9a2f74314ae8
--- /dev/null
+++ b/formidable_1_0/lang/formidable_de.php
@@ -0,0 +1,172 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// extrait automatiquement de http://trad.spip.net/tradlang_module/formidable?lang_cible=de
+// ** ne pas modifier le fichier **
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+	// A
+	'analyse_avec_reponse' => 'Ausgefüllte Antworten',
+	'analyse_longueur_moyenne' => 'Durchschnittliche Anzahl Worte',
+	'analyse_nb_reponses_total' => '@nb@ personnes ont répondu à ce formulaire.', # NEW
+	'analyse_sans_reponse' => 'Leere Antworten',
+	'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.', # NEW
+	'analyse_zero_reponse_total' => 'Aucune personne n\'a répondu à ce formulaire.', # NEW
+	'aucun_traitement' => 'Aucun traitement', # NEW
+    'analyse_exporter' => 'Analyse exportieren',
+
+	// B
+	'bouton_formulaires' => 'Formulare',
+
+	// C
+	'cfg_analyse_classe_explication' => 'Vous pouvez indiquer des classes CSS qui seront ajoutées
+		sur le conteneur de chaque graphique, tel que <code>gray</code>,<code>blue</code>,
+		<code>orange</code>, <code>green</code> ou tout ce qui vous plairait !', # NEW
+	'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression', # NEW
+	'cfg_titre_page_configurer_formidable' => 'Configurer Formidable', # NEW
+	'cfg_titre_parametrages_analyse' => 'Paramétrages de l\'analyse des réponses', # NEW
+    'champ' => 'Feld',
+
+	// E
+	'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
+	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+	'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
+	'editer_apres_choix_formulaire' => 'Le formulaire, à nouveau', # NEW
+	'editer_apres_choix_redirige' => 'Rediriger vers une nouvelle adresse', # NEW
+	'editer_apres_choix_rien' => 'Rien du tout', # NEW
+	'editer_apres_choix_stats' => 'Les statistiques des réponses', # NEW
+	'editer_apres_choix_valeurs' => 'Les valeurs saisies', # NEW
+	'editer_apres_explication' => 'Après validation, afficher à la place du formulaire :', # NEW
+	'editer_apres_label' => 'Afficher ensuite', # NEW
+	'editer_descriptif' => 'Beschreibung',
+	'editer_descriptif_explication' => 'Eine Beschreibung des Formulars für das Backend.',
+	'editer_identifiant' => 'Bezeichnung',
+	'editer_identifiant_explication' => 'Gegen sie eine Bezeichnung an, mit dem sie das Formular ansprechen können.',
+	'editer_menu_champs' => 'Felder konfigurieren',
+	'editer_menu_formulaire' => 'Formular konfigurieren',
+	'editer_menu_traitements' => 'Verarbeitung konfigurieren',
+	'editer_message_ok' => 'Bestätigungstext',
+	'editer_message_ok_explication' => 'Sie können die Nachricht festlegen, die nach dem Absenden des Formulars angezeigt wird.',
+	'editer_modifier_formulaire' => 'Formular ändern',
+	'editer_nouveau' => 'Neues Formular',
+	'editer_redirige_url' => 'Adresse de redirection après validation', # NEW
+	'editer_redirige_url_explication' => 'Laissez vide si vous souhaitez rester sur la même page', # NEW
+	'editer_titre' => 'Titel',
+	'erreur_autorisation' => 'Sie sind nicht berechtigt, die Formulare der Website zu ändern.',
+	'erreur_base' => 'Beim Speichern ist ein technischer Fehler aufgetreten.',
+	'erreur_generique' => 'Die Felder enthalten Fehler. Bitte überprüfen sie ihre Eingaben.',
+	'erreur_identifiant' => 'Diese Bezeichnung wird bereits verwendet.',
+	'erreur_importer_forms' => 'Fehler beim Importieren des Formulars aus Forms&Tables',
+	'erreur_importer_wcs' => 'Fehler beim Importieren des Formulars aus W.C.S',
+	'erreur_importer_yaml' => 'Fehler beim Importieren des Formulars aus YAML',
+	'erreur_inexistant' => 'Formular nicht vorhanden.',
+
+	// F
+	'formulaire_anonyme_explication' => "Diese Form ist anonym, dh die Identität des Benutzers nicht registriert ist.",
+	'formulaires_aucun' => 'Kein Formular vorhanden.',
+	'formulaires_dupliquer' => 'Formular kopieren',
+	'formulaires_dupliquer_copie' => '(Kopie)',
+	'formulaires_introduction' => 'Erstellen und bearbeiten sie Formulare für ihre Website.',
+	'formulaires_nouveau' => 'Neues Formular anlegen',
+	'formulaires_supprimer' => 'Formular löschen',
+	'formulaires_supprimer_confirmation' => 'Achtung - alle Daten aus dem Formular werden ebenfalls gelöscht. Sind sie sicher, dass sie das Formular löschen wollen?',
+	'formulaires_tous' => 'Alle Formulare',
+
+	// I
+	'identification_par_cookie' => 'Par cookie', # NEW
+	'identification_par_id_auteur' => 'Par l\'identifiant (id_auteur) de la personne authentifiée', # NEW
+	'importer_formulaire' => 'Formular importieren',
+	'importer_formulaire_fichier_label' => 'Dateien importeieren',
+	'importer_formulaire_format_label' => 'Format der Datei',
+
+	// M
+	'modele_label_formulaire_formidable' => 'Quel formulaire ?', # NEW
+	'modele_nom_formulaire' => 'un formulaire', # NEW
+
+	// N
+	'noisette_label_afficher_titre_formulaire' => 'Afficher le titre du formulaire ?', # NEW
+	'noisette_label_identifiant' => 'Formulaire à afficher :', # NEW
+	'noisette_nom_noisette_formulaire' => 'Formulaire', # NEW
+
+	// R
+	'reponse_aucune' => 'Aucune réponse', # NEW
+	'reponse_intro' => '@auteur@ hat auf das Formular geantwortet @formulaire@',
+	'reponse_numero' => 'Antwort Nummer:',
+	'reponse_statut' => 'Diese Antwort ist:',
+	'reponse_supprimer' => 'Diese Antwort löschen',
+	'reponse_supprimer_confirmation' => 'Wollen sie diese Antwor wirklich löschen?',
+	'reponse_une' => '1 réponse', # NEW
+	'reponses_analyse' => 'Analyse der Antworten',
+	'reponses_anonyme' => 'Anonym',
+	'reponses_auteur' => 'Nutzer',
+	'reponses_exporter' => 'Antworten exportieren',
+	'reponses_ip' => 'IP-Adresse',
+	'reponses_liste' => 'Liste der Antworten',
+	'reponses_liste_prop' => 'Nicht freigegebene Antworten',
+	'reponses_liste_publie' => 'Alle freigegebenen Antworten',
+	'reponses_nb' => '@nb@ réponses', # NEW
+	'reponses_voir_detail' => 'Antwort anzeigen',
+	'retour_aucun_traitement' => 'Ihre Antwort wurde gesendet, jedoch wurde keine Verarbeitungsoption für das Formular festgelegt. Deshalb geschieht mit den Daten aus diesem Formular überhaupt nichts. :)',
+
+    // S
+    'sans_reponses' => 'Unbeantwortet',
+
+	// T
+	'titre_cadre_raccourcis' => 'Raccourcis', # NEW
+	'traitements_actives' => 'Traitements activés', # NEW
+	'traitements_aide_memoire' => 'Merkzettel:',
+	'traitements_avertissement_creation' => 'Die Änderungen der Felder des Formulars wurden erfolgreich gespeichert. Jetzt können sie festlege, welche Verarbeitungsschritte nach dem Senden des Formulars ausgef',
+	'traitements_avertissement_modification' => 'Die Änderungen der Felder des Formulars wurden erfolgreich gespeichert. <strong>Manche Verarbeitungsoptionen müssen entsprechend neu konfiguriert werden.</strong>',
+	'traitements_champ_aucun' => 'Kein',
+	'traiter_email_description' => 'Sendet das Ergebnis des Formulars an eine Empfängerliste.',
+	'traiter_email_horodatage' => 'Formular "@formulaire@" am @date@ um @heure@ gesendet.',
+	'traiter_email_message_erreur' => 'Beim Versenden des Formulars ist ein Fehler aufgetreten.',
+	'traiter_email_message_ok' => 'Ihre Nachricht wurde per Mail gesendet.',
+	'traiter_email_option_activer_accuse_label' => 'Empfangsbestätigung',
+	'traiter_email_option_activer_accuse_label_case' => 'Ebenfalls eine Empfangsbestätigung an Absender senden.',
+	'traiter_email_option_destinataires_explication' => 'Legen sie das Feld fest, das die Empfängeradresse enthält.',
+	'traiter_email_option_destinataires_label' => 'Empfänger',
+	'traiter_email_option_destinataires_plus_explication' => 'Eine kommagetrennte Empfängerliste.',
+	'traiter_email_option_destinataires_plus_label' => 'Weitere Empfänger',
+	'traiter_email_option_envoyeur_courriel_explication' => 'Legen sie das Feld fest, das die Absenderadresse enthält.',
+	'traiter_email_option_envoyeur_courriel_label' => 'Absenderadresse',
+	'traiter_email_option_envoyeur_nom_explication' => 'Definieren sie den Namen mit Hilf der @raccourcis@ (siehe Merkzettel). Wenn sie nichts eintragen, wird der Name der Website verwendet.',
+	'traiter_email_option_envoyeur_nom_label' => 'Name des Absenders',
+	'traiter_email_option_sujet_accuse_label' => 'Betreff der Empfangsbestätigung',
+	'traiter_email_option_sujet_explication' => 'Definieren sie den Betreff mit Hilf der @raccourcis@. Wenn sie das Feld freilassen, wird der Inhalt automatisch erstellt.',
+	'traiter_email_option_sujet_label' => 'Betreff der Nachricht',
+	'traiter_email_option_vrai_envoyeur_explication' => 'Certains serveurs SMTP ne permettent pas d\'utiliser un courriel arbitraire pour le champ "From". Pour cette raison Formidable insère par défaut le courriel de l\'envoyeur dans le champ "Reply-To". Cocher ici pour insèrer le courriel dans le champ "From".', # NEW
+	'traiter_email_option_vrai_envoyeur_label' => 'Insérer le courriel de l\'envoyeur dans le champ "From"', # NEW
+	'traiter_email_page' => '<a href="@url@">Aus der Seite</a>.',
+	'traiter_email_sujet' => '@nom@ hat ihnen geschrieben.',
+	'traiter_email_sujet_accuse' => 'Danke für ihre Antwort.',
+	'traiter_email_titre' => 'Per Mail senden',
+	'traiter_email_url_enregistrement' => 'Sie könen die Antworten <a href="@url@">auf dieser Seite verwalten</a>.',
+	'traiter_enregistrement_option_anonymiser_label' => "Anonymisierter Form",
+	'traiter_enregistrement_option_anonymiser_explication' => "Stellen die Ergebnisse der anonymen Form (nicht halten Trace-Kennung der Befragten).')",
+	'traiter_enregistrement_option_choix_select_label' => "W&auml;hlen eine Variable von denen zur Verf&uuml;gung.",
+	'traiter_enregistrement_option_anonymiser_variable_label' => "Variable aus dem anonymisierter Form.",
+	'traiter_enregistrement_option_anonymiser_variable_explication' => "Welches System Variable verwendet, um einen einzelnen Wert f&uuml;r jeden Autor ohne Offenlegung seiner Identit&auml;t zu berechnen.",
+	'traiter_enregistrement_description' => 'Einträge in das Formular in der Datenbank speichern',
+	'traiter_enregistrement_erreur_base' => 'Beim Speichern in der Datenbank ist ein Fehler aufgetreten',
+	'traiter_enregistrement_erreur_deja_repondu' => 'Sie haben dieses Formular bereits ausgefüllt.',
+	'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'La réponse à éditer est introuvable.', # NEW
+	'traiter_enregistrement_option_identification_explication' => 'Si les réponses sont modifiables, quel procédé utiliser en priorité pour connaitre la réponse à modifier ?', # NEW
+	'traiter_enregistrement_option_identification_label' => 'Identification', # NEW
+	'traiter_enregistrement_option_moderation_label' => 'Moderation',
+	'traiter_enregistrement_option_modifiable_explication' => 'Sollen die Besucher ihre Antworten nachträglich &aauml;ndern können?',
+	'traiter_enregistrement_option_modifiable_label' => 'Antworten editierbar',
+	'traiter_enregistrement_option_multiple_explication' => 'Darf die gleiche Person das Formular mehrmals ausfüllen und absenden?',
+	'traiter_enregistrement_option_multiple_label' => 'Mehrfache Antworten',
+	'traiter_enregistrement_titre' => 'Ergebnisse speichern',
+
+	// V
+	'voir_exporter' => 'Formular exportieren',
+	'voir_numero' => 'Formular Nummer:',
+	'voir_reponses' => 'Antworten anzeigen',
+	'voir_traitements' => 'Verarbeitungsoptionen'
+);
+
+?>
diff --git a/formidable_1_0/lang/formidable_fr.php b/formidable_1_0/lang/formidable_fr.php
new file mode 100644
index 0000000000000000000000000000000000000000..5c91352a1ab6935282dfd198fa9c1448d7911fb7
--- /dev/null
+++ b/formidable_1_0/lang/formidable_fr.php
@@ -0,0 +1,170 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+	// A
+	'analyse_avec_reponse' => 'Réponses non-vide',
+	'analyse_longueur_moyenne' => 'Longueur moyenne en nombre de mots',
+	'analyse_nb_reponses_total' => '@nb@ personnes ont répondu à ce formulaire.',
+	'analyse_sans_reponse' => 'Laissés blanc',
+	'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.',
+	'analyse_zero_reponse_total' => 'Aucune personne n\'a répondu à ce formulaire.',
+	'aucun_traitement' => 'Aucun traitement',
+    'analyse_exporter' => 'Exporter l\'analyse',
+
+	// B
+	'bouton_formulaires' => 'Formulaires',
+
+	// C
+	'cfg_analyse_classe_explication' => 'Vous pouvez indiquer des classes CSS qui seront ajoutées
+		sur le conteneur de chaque graphique, tel que <code>gray</code>,<code>blue</code>,
+		<code>orange</code>, <code>green</code> ou tout ce qui vous plairait !',
+	'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression',
+	'cfg_titre_page_configurer_formidable' => 'Configurer Formidable',
+	'cfg_titre_parametrages_analyse' => 'Paramétrages de l\'analyse des réponses',
+    'champ' => 'Champ',
+
+	// E
+	'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
+	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+	'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
+	'editer_apres_choix_formulaire' => 'Le formulaire, à nouveau',
+	'editer_apres_choix_redirige' => 'Rediriger vers une nouvelle adresse',
+	'editer_apres_choix_rien' => 'Rien du tout',
+	'editer_apres_choix_stats' => 'Les statistiques des réponses',
+	'editer_apres_choix_valeurs' => 'Les valeurs saisies',
+	'editer_apres_explication' => 'Après validation, afficher à la place du formulaire :',
+	'editer_apres_label' => 'Afficher ensuite',
+	'editer_descriptif' => 'Descriptif',
+	'editer_descriptif_explication' => 'Une explication du formulaire destinée à l\'espace privé.',
+	'editer_identifiant' => 'Identifiant',
+	'editer_identifiant_explication' => 'Donnez un identifiant textuel unique qui vous permettra d\'appeler plus facilement le formulaire.',
+	'editer_menu_champs' => 'Configurer les champs',
+	'editer_menu_formulaire' => 'Configurer le formulaire',
+	'editer_menu_traitements' => 'Configurer les traitements',
+	'editer_message_ok' => 'Message de retour',
+	'editer_message_ok_explication' => 'Vous pouvez personnaliser le message qui sera affiché à l\'utilisateur après l\'envoi d\'un formulaire valide.',
+	'editer_modifier_formulaire' => 'Modifier le formulaire',
+	'editer_nouveau' => 'Nouveau formulaire',
+	'editer_redirige_url' => 'Adresse de redirection après validation',
+	'editer_redirige_url_explication' => 'Laissez vide si vous souhaitez rester sur la même page',
+	'editer_titre' => 'Titre',
+	'erreur_autorisation' => 'Vous n\'avez pas le droit d\'éditer les formulaires du site.',
+	'erreur_base' => 'Une erreur technique est survenue durant l\'enregistrement.',
+	'erreur_generique' => 'Il y a des erreurs dans les champs ci-dessous, veuillez vérifier votre envoi.',
+	'erreur_identifiant' => 'Cet identifiant est déjà utilisé.',
+	'erreur_importer_forms' => 'Erreur durant l\'importation du formulaire Forms&Tables',
+	'erreur_importer_wcs' => 'Erreur durant l\'importation du formulaire W.C.S',
+	'erreur_importer_yaml' => 'Erreur durant l\'importation du fichier YAML',
+	'erreur_inexistant' => 'Le formulaire n\'existe pas.',
+
+	// F
+	'formulaire_anonyme_explication' => 'Ce formulaire est anonyme ; c\'est à dire que l\'identité de l\'utilisateur n\'est pas enregistr&eacute;e.',
+	'formulaires_aucun' => 'Il n\'y a pour l\'instant aucun formulaire.',
+	'formulaires_dupliquer' => 'Dupliquer le formulaire',
+	'formulaires_dupliquer_copie' => '(copie)',
+	'formulaires_introduction' => 'Créez et configurez ici les formulaires de votre site.',
+	'formulaires_nouveau' => 'Créer un nouveau formulaire',
+	'formulaires_supprimer' => 'Supprimer le formulaire',
+	'formulaires_supprimer_confirmation' => 'Attention, cela supprimera aussi tous les résultats. Êtes-vous sûr de vouloir supprimer ce formulaire ?',
+	'formulaires_tous' => 'Tous les formulaires',
+
+	// I
+	'identification_par_cookie' => 'Par cookie',
+	'identification_par_id_auteur' => 'Par l\'identifiant (id_auteur) de la personne authentifiée',
+	'importer_formulaire' => 'Importer un formulaire',
+	'importer_formulaire_fichier_label' => 'Fichier à importer',
+	'importer_formulaire_format_label' => 'Format du fichier',
+
+	// M
+	'modele_label_formulaire_formidable' => 'Quel formulaire ?',
+	'modele_nom_formulaire' => 'un formulaire',
+
+	// N
+	'noisette_label_afficher_titre_formulaire' => 'Afficher le titre du formulaire ?',
+	'noisette_label_identifiant' => 'Formulaire à afficher :',
+	'noisette_nom_noisette_formulaire' => 'Formulaire',
+
+	// R
+	'reponse_aucune' => 'Aucune réponse',
+	'reponse_intro' => '@auteur@ a répondu au formulaire @formulaire@',
+	'reponse_numero' => 'Réponse numéro :',
+	'reponse_statut' => 'Cette réponse est :',
+	'reponse_supprimer' => 'Supprimer cette réponse',
+	'reponse_supprimer_confirmation' => 'Êtes-vous sûr de vouloir supprimer cette réponse ?',
+	'reponse_une' => '1 réponse',
+	'reponses_analyse' => 'Analyse des réponses',
+	'reponses_anonyme' => 'Anonyme',
+	'reponses_auteur' => 'Utilisateur',
+	'reponses_exporter' => 'Exporter les réponses',
+	'reponses_ip' => 'Adresse IP',
+	'reponses_liste' => 'Liste des réponses',
+	'reponses_liste_prop' => 'Réponses en attente de validation',
+	'reponses_liste_publie' => 'Toutes les réponses validées',
+	'reponses_nb' => '@nb@ réponses',
+	'reponses_voir_detail' => 'Voir la réponse',
+	'retour_aucun_traitement' => 'Votre réponse a bien été envoyée, mais aucun traitement n\'a été défini pour ce formulaire. Il ne fait donc rien. :)',
+
+    // S
+    'sans_reponses' => 'Sans réponse',
+
+	// T
+	'titre_cadre_raccourcis' => 'Raccourcis',
+	'traitements_actives' => 'Traitements activés',
+	'traitements_aide_memoire' => 'Aide mémoire :',
+	'traitements_avertissement_creation' => 'Les modifications sur les champs du formulaire ont été enregistrées avec succès. Vous pouvez maintenant définir quels traitements seront effectués lors de l\'utilisation du formulaire.',
+	'traitements_avertissement_modification' => 'Les modifications sur les champs du formulaire ont été enregistrées avec succès. <strong>Certains traitements doivent peut-être être reconfigurés en conséquence.</strong>',
+	'traitements_champ_aucun' => 'Aucun',
+	'traiter_email_description' => 'Poste le résultat du formulaire par courriel à une liste de destinataires.',
+	'traiter_email_horodatage' => 'Formulaire "@formulaire@" posté le @date@ à @heure@.',
+	'traiter_email_message_erreur' => 'Une erreur est survenue lors de l\'envoi du courriel.',
+	'traiter_email_message_ok' => 'Votre message a bien été envoyé par courriel.',
+	'traiter_email_option_activer_accuse_label' => 'Accusé de réception',
+	'traiter_email_option_activer_accuse_label_case' => 'Envoyer aussi un courriel à l\'adresse de l\'envoyeur avec un message de confirmation.',
+	'traiter_email_option_destinataires_explication' => 'Choisissez le champ qui correspondra aux destinataires du message.',
+	'traiter_email_option_destinataires_label' => 'Destinataires',
+	'traiter_email_option_destinataires_plus_explication' => 'Une liste d\'adresses séparées par des virgules.',
+	'traiter_email_option_destinataires_plus_label' => 'Destinataires supplémentaires',
+	'traiter_email_option_envoyeur_courriel_explication' => 'Choisissez le champ qui contiendra le courriel de l\'envoyeur.',
+	'traiter_email_option_envoyeur_courriel_label' => 'Courriel de l\'envoyeur',
+	'traiter_email_option_envoyeur_nom_explication' => 'Construisez ce nom à l\'aide des @raccourcis@ (cf. l\'aide mémoire). Si vous ne mettez rien, ce sera le nom du site.',
+	'traiter_email_option_envoyeur_nom_label' => 'Nom de l\'envoyeur',
+	'traiter_email_option_sujet_accuse_label' => 'Sujet de l\'accusé de réception',
+	'traiter_email_option_sujet_explication' => 'Construisez le sujet à l\'aide des @raccourcis@. Si vous ne mettez rien, le sujet sera construit automatiquement.',
+	'traiter_email_option_sujet_label' => 'Sujet du message',
+	'traiter_email_option_vrai_envoyeur_explication' => 'Certains serveurs SMTP ne permettent pas d\'utiliser un courriel arbitraire pour le champ "From". Pour cette raison Formidable insère par défaut le courriel de l\'envoyeur dans le champ "Reply-To". Cocher ici pour insèrer le courriel dans le champ "From".',
+	'traiter_email_option_vrai_envoyeur_label' => 'Insérer le courriel de l\'envoyeur dans le champ "From"',
+	'traiter_email_page' => '<a href="@url@">Depuis cette page</a>.',
+	'traiter_email_sujet' => '@nom@ vous a écrit.',
+	'traiter_email_sujet_accuse' => 'Merci de votre réponse.',
+	'traiter_email_titre' => 'Envoyer par courriel',
+	'traiter_email_url_enregistrement' => 'Vous pouvez gérer les réponses <a href="@url@">sur cette page</a>.',
+	'traiter_enregistrement_option_anonymiser_label' => "Anonymiser le formulaire",
+	'traiter_enregistrement_option_anonymiser_explication' => "Rendre les r&eacute;sultats du formulaire anonymes (ne pas garder de traces de l'identifiant des personnes ayant r&eacute;pondu.)",
+	'traiter_enregistrement_option_choix_select_label' => "Choisir une variable parmi celles propos&eacute;es",
+	'traiter_enregistrement_option_anonymiser_variable_label' => "Variable &agrave; partir de laquelle anonymiser le formulaire",
+	'traiter_enregistrement_option_anonymiser_variable_explication' => "Quelle variable syst&egrave;me utiliser pour calculer une valeur unique pour chaque auteur sans pour autant r&eacute;v&eacute;ler son identit&eacute;.",
+	'traiter_enregistrement_description' => 'Enregistre les résultats du formulaire dans la base de données',
+	'traiter_enregistrement_erreur_base' => 'Une erreur technique est survenue durant l\'enregistrement en base de données',
+	'traiter_enregistrement_erreur_deja_repondu' => 'Vous avez déjà répondu à ce formulaire.',
+	'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'La réponse à éditer est introuvable.',
+	'traiter_enregistrement_option_identification_explication' => 'Si les réponses sont modifiables, quel procédé utiliser en priorité pour connaitre la réponse à modifier ?',
+	'traiter_enregistrement_option_identification_label' => 'Identification',
+	'traiter_enregistrement_option_moderation_label' => 'Modération',
+	'traiter_enregistrement_option_modifiable_explication' => 'Les visiteurs pourront-ils modifier leurs réponses après coup ?',
+	'traiter_enregistrement_option_modifiable_label' => 'Réponses modifiables',
+	'traiter_enregistrement_option_multiple_explication' => 'Une même personne peut-elle répondre plusieurs fois au formulaire ?',
+	'traiter_enregistrement_option_multiple_label' => 'Réponses multiples',
+	'traiter_enregistrement_titre' => 'Enregistrer les résultats',
+
+	// V
+	'voir_exporter' => 'Exporter le formulaire',
+	'voir_numero' => 'Formulaire numéro :',
+	'voir_reponses' => 'Voir les réponses',
+	'voir_traitements' => 'Traitements'
+);
+
+?>
diff --git a/formidable_1_0/lang/formidable_it.php b/formidable_1_0/lang/formidable_it.php
new file mode 100644
index 0000000000000000000000000000000000000000..e2b4c1c0d8b07922617769f1d458c6e885d00a7e
--- /dev/null
+++ b/formidable_1_0/lang/formidable_it.php
@@ -0,0 +1,166 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// extrait automatiquement de http://trad.spip.net/tradlang_module/formidable?lang_cible=it
+// ** ne pas modifier le fichier **
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+	// A
+	'analyse_avec_reponse' => 'Risposte non vuote',
+	'analyse_longueur_moyenne' => 'Lunghezza media in numero di parole',
+	'analyse_nb_reponses_total' => '@nb@ personnes ont répondu à ce formulaire.', # NEW
+	'analyse_sans_reponse' => 'Risposte vuote',
+	'analyse_une_reponse_total' => 'Une personne a répondu à ce formulaire.', # NEW
+	'analyse_zero_reponse_total' => 'Aucune personne n\'a répondu à ce formulaire.', # NEW
+	'aucun_traitement' => 'Aucun traitement', # NEW
+    'analyse_exporter' => 'Esporta l\'analisi',
+
+	// B
+	'bouton_formulaires' => 'Moduli',
+
+	// C
+	'cfg_analyse_classe_explication' => 'Vous pouvez indiquer des classes CSS qui seront ajoutées
+		sur le conteneur de chaque graphique, tel que <code>gray</code>,<code>blue</code>,
+		<code>orange</code>, <code>green</code> ou tout ce qui vous plairait !', # NEW
+	'cfg_analyse_classe_label' => 'Classe CSS de la barre de progression', # NEW
+	'cfg_titre_page_configurer_formidable' => 'Configurer Formidable', # NEW
+	'cfg_titre_parametrages_analyse' => 'Paramétrages de l\'analyse des réponses', # NEW
+    'champ' => 'Campo',
+
+	// E
+	'echanger_formulaire_forms_importer' => 'Forms & Tables (.xml)',
+	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+	'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
+	'editer_apres_choix_formulaire' => 'Il modulo, nuovamente',
+	'editer_apres_choix_redirige' => 'Redirigi verso un nuovo indirizzo',
+	'editer_apres_choix_rien' => 'Assolutamente niente',
+	'editer_apres_choix_stats' => 'Les statistiques des réponses', # NEW
+	'editer_apres_choix_valeurs' => 'I valori immessi',
+	'editer_apres_explication' => 'Dopo la validazione, mostra al posto del modulo:',
+	'editer_apres_label' => 'Mostra di seguito',
+	'editer_descriptif' => 'Descrizione',
+	'editer_descriptif_explication' => 'Una spiegazione del modulo destinata allo spazio redazionale.',
+	'editer_identifiant' => 'Identificativo',
+	'editer_identifiant_explication' => 'Fornisci un identificativo testuale unico che ti permetterà di richiamare più facilmente il modulo.',
+	'editer_menu_champs' => 'Configura i campi',
+	'editer_menu_formulaire' => 'Configura il modulo',
+	'editer_menu_traitements' => 'Configura i trattamenti',
+	'editer_message_ok' => 'Messaggio di risposta',
+	'editer_message_ok_explication' => 'Puoi personalizzare il messaggio che sarà mostrato all\'utente dopo l\'invio di un modulo valido.',
+	'editer_modifier_formulaire' => 'Modifica il modulo',
+	'editer_nouveau' => 'Nuovo modulo',
+	'editer_redirige_url' => 'Indirizzo di redirezione dopo la validazione',
+	'editer_redirige_url_explication' => 'Lascia vuoto se desideri restare sulla stessa pagina',
+	'editer_titre' => 'Titolo',
+	'erreur_autorisation' => 'Non hai i permessi per la modifica dei moduli del sito.',
+	'erreur_base' => 'Un problema tecnico si è verificato rurante il salvataggio.',
+	'erreur_generique' => 'Ci sono degli errori nei campi di seguito, si prega di verificare i dati.',
+	'erreur_identifiant' => 'Questo identificativo è già utilizzato.',
+	'erreur_importer_forms' => 'Errore durante l\'importazione del modulo Forms&Tables',
+	'erreur_importer_wcs' => 'Errore durante l\'importazione del modulo W.C.S',
+	'erreur_importer_yaml' => 'Errore durante l\'importazione del modulo YAML',
+	'erreur_inexistant' => 'Il modulo non esiste.',
+
+	// F
+	'formulaires_aucun' => 'Al momento non è presente alcun modulo.',
+	'formulaires_dupliquer' => 'Duplica il modulo',
+	'formulaires_dupliquer_copie' => '(copia)',
+	'formulaires_introduction' => 'Crea e configura qui i moduli del tuo sito.',
+	'formulaires_nouveau' => 'Crea un nuovo modulo',
+	'formulaires_supprimer' => 'Elimina il modulo',
+	'formulaires_supprimer_confirmation' => 'Attenzione, si sta per eliminare anche tutte le risposte. Sei sicuro di voler eliminare il modulo?',
+	'formulaires_tous' => 'Tutti i moduli',
+
+	// I
+	'identification_par_cookie' => 'Con i cookie',
+	'identification_par_id_auteur' => 'con l\'identificativo (id_auteur) dell\'utente autentificato',
+	'importer_formulaire' => 'Importa un modulo',
+	'importer_formulaire_fichier_label' => 'File da importare',
+	'importer_formulaire_format_label' => 'Formato del file',
+
+	// M
+	'modele_label_formulaire_formidable' => 'Quale modulo?',
+	'modele_nom_formulaire' => 'un modulo',
+
+	// N
+	'noisette_label_afficher_titre_formulaire' => 'Mostro il titolo del modulo?',
+	'noisette_label_identifiant' => 'Modulo da mostrare:',
+	'noisette_nom_noisette_formulaire' => 'Modulo',
+
+	// R
+	'reponse_aucune' => 'Aucune réponse', # NEW
+	'reponse_intro' => '@auteur@ ha risposto al modulo @formulaire@',
+	'reponse_numero' => 'Risposta numero:',
+	'reponse_statut' => 'Questa risposta è:',
+	'reponse_supprimer' => 'Elimina questa risposta',
+	'reponse_supprimer_confirmation' => 'Sei sicuro di voler eliminare questa risposta?',
+	'reponse_une' => '1 réponse', # NEW
+	'reponses_analyse' => 'Analisi delle risposte',
+	'reponses_anonyme' => 'Anonimo',
+	'reponses_auteur' => 'Utente',
+	'reponses_exporter' => 'Esporta le risposte',
+	'reponses_ip' => 'Indirizzo IP',
+	'reponses_liste' => 'Elenco delle risposte',
+	'reponses_liste_prop' => 'Risposte in attesa di validazione',
+	'reponses_liste_publie' => 'Tutte le risposte valide',
+	'reponses_nb' => '@nb@ réponses', # NEW
+	'reponses_voir_detail' => 'Vedi la risposta',
+	'retour_aucun_traitement' => 'La risposta è stata correttamente inviata. Grazie :)',
+
+    // S
+    'sans_reponses' => 'Senza risposta',
+
+	// T
+	'titre_cadre_raccourcis' => 'Raccourcis', # NEW
+	'traitements_actives' => 'Traitements activés', # NEW
+	'traitements_aide_memoire' => 'Promemoria:',
+	'traitements_avertissement_creation' => 'Le modifiche ai campi del modulo sono state registrate con successo. Ora puoi definire quali trattamenti saranno effettuati all\'atto dell\'invio del modulo.',
+	'traitements_avertissement_modification' => 'La modifiche ai campi del modulo sono state registrate con successo. <strong>Alcuni trattamenti devono forse essere riconfigurati di conseguenza.</strong>',
+	'traitements_champ_aucun' => 'Nessuno',
+	'traiter_email_description' => 'Invia il risultato del modulo per posta a un elenco di destinatari.',
+	'traiter_email_horodatage' => 'Modulo "@formulaire@" inviato il @date@ alle @heure@.',
+	'traiter_email_message_erreur' => 'Si è verificato un errore all\'atto dell\'invio dell\'email.',
+	'traiter_email_message_ok' => 'Il tuo messaggio è stato inviato per posta elettronica.',
+	'traiter_email_option_activer_accuse_label' => 'Conferma di ricezione',
+	'traiter_email_option_activer_accuse_label_case' => 'Invia anche una email all\'indirizzo del mittente con un messaggio di conferma.',
+	'traiter_email_option_destinataires_explication' => 'Scegli il campo che corrisponde al destinatario del messaggio.',
+	'traiter_email_option_destinataires_label' => 'Destinatari',
+	'traiter_email_option_destinataires_plus_explication' => 'Un elenco di indirizzi separati da virgole.',
+	'traiter_email_option_destinataires_plus_label' => 'Destinatari supplementari',
+	'traiter_email_option_envoyeur_courriel_explication' => 'Scegli il campo che contiene l\'indirizzo dell\'utente.',
+	'traiter_email_option_envoyeur_courriel_label' => 'Indirizzo del mittente',
+	'traiter_email_option_envoyeur_nom_explication' => 'Costruisci questo nome grazie all\'aiuto dei @segnaposto@ (vedi il promemoria). Se non inserisci nulla, verrà inserito il nome del sito.',
+	'traiter_email_option_envoyeur_nom_label' => 'Nome del mittente',
+	'traiter_email_option_sujet_accuse_label' => 'Oggetto della conferma di ricezione',
+	'traiter_email_option_sujet_explication' => 'Costruisci l\'oggetto grazie all\'aiuto dei @segnaposto@. Se non inserisci nulla, l\'oggetto verrà generato automaticamente.',
+	'traiter_email_option_sujet_label' => 'Oggetto del messaggio',
+	'traiter_email_option_vrai_envoyeur_explication' => 'Certains serveurs SMTP ne permettent pas d\'utiliser un courriel arbitraire pour le champ "From". Pour cette raison Formidable insère par défaut le courriel de l\'envoyeur dans le champ "Reply-To". Cocher ici pour insèrer le courriel dans le champ "From".', # NEW
+	'traiter_email_option_vrai_envoyeur_label' => 'Insérer le courriel de l\'envoyeur dans le champ "From"', # NEW
+	'traiter_email_page' => '<a href="@url@">Da questa pagina</a>.',
+	'traiter_email_sujet' => '@nom@ ti ha scritto.',
+	'traiter_email_sujet_accuse' => 'Grazie per aver risposto.',
+	'traiter_email_titre' => 'Invia per posta',
+	'traiter_email_url_enregistrement' => 'Puoi gestire le risposte <a href="@url@">su questa pagina</a>.',
+	'traiter_enregistrement_description' => 'Salva i risultati del modulo nella base dati',
+	'traiter_enregistrement_erreur_base' => 'Si è verificato un errore tecnico durante il salvataggio in database',
+	'traiter_enregistrement_erreur_deja_repondu' => 'Hai già risposto a questo modulo.',
+	'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'La risposta da modificare non esiste.',
+	'traiter_enregistrement_option_identification_explication' => 'Se le risposte sono modificabili, quale procedura si dovrà utilizzare in priorità per individuare la risposta da modificare?',
+	'traiter_enregistrement_option_identification_label' => 'Identificazione',
+	'traiter_enregistrement_option_moderation_label' => 'Moderazione',
+	'traiter_enregistrement_option_modifiable_explication' => 'Gli utenti possono modificare le loro risposte dopo aver inviato il modulo?',
+	'traiter_enregistrement_option_modifiable_label' => 'Risposte modificabili',
+	'traiter_enregistrement_option_multiple_explication' => 'Un utente può risposndere più al modulo?',
+	'traiter_enregistrement_option_multiple_label' => 'Risposte multiple',
+	'traiter_enregistrement_titre' => 'Registra i risultati',
+
+	// V
+	'voir_exporter' => 'Esporta il modulo',
+	'voir_numero' => 'Modulo numero:',
+	'voir_reponses' => 'Vedi le risposte',
+	'voir_traitements' => 'Trattamenti'
+);
+
+?>
diff --git a/formidable_1_0/lang/formidable_sk.php b/formidable_1_0/lang/formidable_sk.php
new file mode 100644
index 0000000000000000000000000000000000000000..a4bee579c0548726f648f4974d5b549c43f1b953
--- /dev/null
+++ b/formidable_1_0/lang/formidable_sk.php
@@ -0,0 +1,166 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// extrait automatiquement de http://trad.spip.net/tradlang_module/formidable?lang_cible=sk
+// ** ne pas modifier le fichier **
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+	// A
+	'analyse_avec_reponse' => 'Neprázdne odpovede',
+	'analyse_longueur_moyenne' => 'Priemerná dĺžka vyjadrená počtom slov',
+	'analyse_nb_reponses_total' => '@nb@ ľudia odpovedali na tento formulár.',
+	'analyse_sans_reponse' => 'Nevyplnené',
+	'analyse_une_reponse_total' => 'Na tento formulár odpovedal jeden človek.',
+	'analyse_zero_reponse_total' => 'Na tento formulár neodpovedal žiaden človek.',
+	'aucun_traitement' => 'Žiadne spracovanie',
+    'analyse_exporter' => 'Exportovať analýzu',
+
+	// B
+	'bouton_formulaires' => 'Formuláre',
+
+	// C
+	'cfg_analyse_classe_explication' => 'Môžete zadať triedy CSS, ktoré budú pridané 
+		na každý graf ako <code>sivý,</code> <code>modrý,</code>
+		<code>oranžový,</code> <code>zelený</code> alebo akýkoľvek iný stĺpec!',
+	'cfg_analyse_classe_label' => 'Trieda CSS stĺpca dokončenia úkonu',
+	'cfg_titre_page_configurer_formidable' => 'Nastaviť Formidable',
+	'cfg_titre_parametrages_analyse' => 'Nastavenia analýzy odpovedí',
+    'champ' => 'Pol\'a',
+
+	// E
+	'echanger_formulaire_forms_importer' => 'formuláre Forms & Tables (.xml)',
+	'echanger_formulaire_wcs_importer' => 'W.C.S. (.wcs)',
+	'echanger_formulaire_yaml_importer' => 'Formidable (.yaml)',
+	'editer_apres_choix_formulaire' => 'Formulár, znova',
+	'editer_apres_choix_redirige' => 'Presmerovať na novú adresu',
+	'editer_apres_choix_rien' => 'Vôbec nič',
+	'editer_apres_choix_stats' => 'Štatistiky odpovedí',
+	'editer_apres_choix_valeurs' => 'Zadané hodnoty',
+	'editer_apres_explication' => 'Po potvrdení namiesto formulára zobraziť:',
+	'editer_apres_label' => 'Zobraziť potom',
+	'editer_descriptif' => 'Popis',
+	'editer_descriptif_explication' => 'Vysvetlivka formulára pre súkromnú zónu.',
+	'editer_identifiant' => 'Identifikátor',
+	'editer_identifiant_explication' => 'Zadajte jedinečný textový identifikátor, ktorý vám umožní rýchlo vyvolať formulár.',
+	'editer_menu_champs' => 'Nastaviť polia',
+	'editer_menu_formulaire' => 'Nastaviť formulár',
+	'editer_menu_traitements' => 'Nastaviť funkcie',
+	'editer_message_ok' => 'Správa spätnej väzby',
+	'editer_message_ok_explication' => 'Môžete upraviť správu, ktorá sa používateľovi zobrazí po odoslaní platného formulára.',
+	'editer_modifier_formulaire' => 'Upraviť formulár',
+	'editer_nouveau' => 'Nový formulár',
+	'editer_redirige_url' => 'Adresa presmerovania po potvrdení',
+	'editer_redirige_url_explication' => 'Nevypĺňajte, ak chcete zostať na rovnakej stránke',
+	'editer_titre' => 'Názov',
+	'erreur_autorisation' => 'Na úpravu formulárov na tejto stránke nemáte dostatočné práva.',
+	'erreur_base' => 'Počas ukladania sa vyskytla technická chyba.',
+	'erreur_generique' => 'V týchto poliach sú chyby, prosím, skontrolujte ich pred odoslaním.',
+	'erreur_identifiant' => 'Tento identifikátor sa už používa.',
+	'erreur_importer_forms' => 'Chyba počas nahrávania formulára Forms&Tables',
+	'erreur_importer_wcs' => 'Chyba počas nahrávania formulára W.C.S',
+	'erreur_importer_yaml' => 'Chyba počas nahrávania súboru YAML',
+	'erreur_inexistant' => 'Formulár neexistuje.',
+
+	// F
+	'formulaires_aucun' => 'Momentálne tu nie je žiaden formulár.',
+	'formulaires_dupliquer' => 'Skopírovať formulár',
+	'formulaires_dupliquer_copie' => '(kópia)',
+	'formulaires_introduction' => 'Tu vytvoríte a nastavíte formuláre pre svoju stránku.',
+	'formulaires_nouveau' => 'Vytvoriť nový formulár',
+	'formulaires_supprimer' => 'Odstrániť formulár',
+	'formulaires_supprimer_confirmation' => 'Pozor, takto vymažete všetky výsledky. Určite chcete odstrániť tento formulár?',
+	'formulaires_tous' => 'Všetky formuláre',
+
+	// I
+	'identification_par_cookie' => 'Podľa cookie',
+	'identification_par_id_auteur' => 'Podľa identifikátora (id_auteur) prihláseného človeka',
+	'importer_formulaire' => 'Nahrať formulár',
+	'importer_formulaire_fichier_label' => 'Súbor, ktorý sa má nahrať',
+	'importer_formulaire_format_label' => 'Formát súboru',
+
+	// M
+	'modele_label_formulaire_formidable' => 'Aký formulár?',
+	'modele_nom_formulaire' => 'jeden formulár',
+
+	// N
+	'noisette_label_afficher_titre_formulaire' => 'Zobraziť nadpis formulára?',
+	'noisette_label_identifiant' => 'Formulár, ktorý sa má zobraziť:',
+	'noisette_nom_noisette_formulaire' => 'Formulár',
+
+	// R
+	'reponse_aucune' => 'Žiadna odpoveď',
+	'reponse_intro' => '@auteur@ vyplnil(a) formulár @formulaire@',
+	'reponse_numero' => 'Odpoveď číslo:',
+	'reponse_statut' => 'Táto odpoveď je:',
+	'reponse_supprimer' => 'Odstrániť túto odpoveď',
+	'reponse_supprimer_confirmation' => 'Určite chcete vymazať túto odpoveď?',
+	'reponse_une' => '1 odpoveď',
+	'reponses_analyse' => 'Analýza odpovedí',
+	'reponses_anonyme' => 'Anonym',
+	'reponses_auteur' => 'Používateľ',
+	'reponses_exporter' => 'Exportovať odpovede',
+	'reponses_ip' => 'IP adresa',
+	'reponses_liste' => 'Zoznam odpovedí',
+	'reponses_liste_prop' => 'Odpovede čakajúce na potvrdenie',
+	'reponses_liste_publie' => 'Všetky platné odpovede',
+	'reponses_nb' => '@nb@ odpovedí',
+	'reponses_voir_detail' => 'Zobraziť odpoveď',
+	'retour_aucun_traitement' => 'Vaša odpoveď bola odoslaná, ale k tomuto formuláru nebola definovaná žiadna funkcia. Nič neurobí. :-)',
+
+    // S
+    'sans_reponses' => 'Neriešiteľný',
+
+	// T
+	'titre_cadre_raccourcis' => 'Skratky',
+	'traitements_actives' => 'Aktívne spracovanie',
+	'traitements_aide_memoire' => 'Pomocná pamäť:',
+	'traitements_avertissement_creation' => 'Zmeny polí formulára boli úspešne uložené. Teraz môžete určiť, aké funkcie sa použijú pri spracúvaní formulára.',
+	'traitements_avertissement_modification' => 'Zmeny v poliach formulára boli úspešne uložené. <strong>Niektoré funkcie možno budú musieť byť kvôli ním prestavené.</strong>',
+	'traitements_champ_aucun' => 'Žiadne',
+	'traiter_email_description' => 'Výstup z formulára odošle na e-mailové adresy príjemcov.',
+	'traiter_email_horodatage' => 'Formulár "@formulaire@" odoslaný @date@ o @heure@.',
+	'traiter_email_message_erreur' => 'Pri odosielaní e-mailu sa vyskytla chyba.',
+	'traiter_email_message_ok' => 'Vaša správa bola odoslaná.',
+	'traiter_email_option_activer_accuse_label' => 'Potvrdenie o prijatí správy',
+	'traiter_email_option_activer_accuse_label_case' => 'Poslať e-mail aj na adresu odosielateľa so žiadosťou o potvrdenie.',
+	'traiter_email_option_destinataires_explication' => 'Vyberte si pole, v ktorom budú príjemcovia správy.',
+	'traiter_email_option_destinataires_label' => 'Príjemcovia',
+	'traiter_email_option_destinataires_plus_explication' => 'Zoznam adries oddelený čiarkami.',
+	'traiter_email_option_destinataires_plus_label' => 'Ďalší príjemcovia',
+	'traiter_email_option_envoyeur_courriel_explication' => 'Vyberte si pole, ktoré bude obsahovať e-mailovú adresu odosielateľa.',
+	'traiter_email_option_envoyeur_courriel_label' => 'E-mail odosielateľa',
+	'traiter_email_option_envoyeur_nom_explication' => 'Vytvorte názov pomocou @raccourcis@ (prečítajte si pomocníka). Ak neurobíte nič, bude tým názvom názov stránky.',
+	'traiter_email_option_envoyeur_nom_label' => 'Meno odosielateľa',
+	'traiter_email_option_sujet_accuse_label' => 'Predmet potvrdenia o prijatí',
+	'traiter_email_option_sujet_explication' => 'Vytvorte predmet pomocou @raccourcis@. Ak neurobíte nič, predmet bude vytvorený automaticky.',
+	'traiter_email_option_sujet_label' => 'Predmet správy',
+	'traiter_email_option_vrai_envoyeur_explication' => 'Niektoré servery SMTP neumožňujú používať ľubovoľný e-mail pre pole "From" (Od koho). Z tohto dôvodu Formidable podľa predvolených nastavení vkladá e-mail odosielateľa do poľa "Reply-To". Ak chcete, aby bol vložený do poľa "From", zaškrtnite túto možnosť tu.',
+	'traiter_email_option_vrai_envoyeur_label' => 'Vložiť e-mail odosielateľa do poľa "From" (= "Od koho")',
+	'traiter_email_page' => '<a href="@url@">Z tejto stránky.</a>',
+	'traiter_email_sujet' => '@nom@ vám napísal(a).',
+	'traiter_email_sujet_accuse' => 'Ďakujeme vám za odpoveď.',
+	'traiter_email_titre' => 'Poslať e-mailom',
+	'traiter_email_url_enregistrement' => 'Riadiť odpovede môžete <a href="@url@">na tejto stránke.</a>',
+	'traiter_enregistrement_description' => 'Uloží výsledky z formulára do databázy',
+	'traiter_enregistrement_erreur_base' => 'Počas ukladania do databázy sa vyskytla technická chyba',
+	'traiter_enregistrement_erreur_deja_repondu' => 'Tento formulár ste už vyplnili.',
+	'traiter_enregistrement_erreur_edition_reponse_inexistante' => 'Odpoveď, ktorú chcete upraviť, sa nedá nájsť.',
+	'traiter_enregistrement_option_identification_explication' => 'Ak sa odpovede dajú upraviť, aký spôsob sa použije ako prvý, aby sa zistilo, či sa odpoveď menila?',
+	'traiter_enregistrement_option_identification_label' => 'Identifikácia',
+	'traiter_enregistrement_option_moderation_label' => 'Kontrola',
+	'traiter_enregistrement_option_modifiable_explication' => 'Môžu návštevníci potom upraviť svoje odpovede?',
+	'traiter_enregistrement_option_modifiable_label' => 'Odpovede, ktoré sa dajú upraviť',
+	'traiter_enregistrement_option_multiple_explication' => 'Môže ten istý človek odpovedať na formulár viackrát?',
+	'traiter_enregistrement_option_multiple_label' => 'Duplicitné odpovede',
+	'traiter_enregistrement_titre' => 'Uložiť výsledky',
+
+	// V
+	'voir_exporter' => 'Exportovať formulár',
+	'voir_numero' => 'Formulár číslo:',
+	'voir_reponses' => 'Zobraziť odpovede',
+	'voir_traitements' => 'Funkcie'
+);
+
+?>
diff --git a/formidable_1_0/lang/formulaire_fr.php b/formidable_1_0/lang/formulaire_fr.php
new file mode 100644
index 0000000000000000000000000000000000000000..f6663cd9e6c1752f8d4d946922f67047ac4232af
--- /dev/null
+++ b/formidable_1_0/lang/formulaire_fr.php
@@ -0,0 +1,18 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+	// I
+	'icone_creer_formulaire' => 'Créer un nouveau formulaire',
+
+	// M
+	'modifier_formulaire' => 'Modifier ce formulaire',
+
+	// T
+	'titre_formulaires' => 'Formulaires',
+	'titre_logo_formulaire' => 'Logo de ce formulaire',
+	'titre_formulaire' => 'Formulaire',
+
+);
diff --git a/formidable_1_0/lang/formulaires_reponse_fr.php b/formidable_1_0/lang/formulaires_reponse_fr.php
new file mode 100644
index 0000000000000000000000000000000000000000..108f4e2a5c6d26cdab7f2c37c7a17471a34ce1de
--- /dev/null
+++ b/formidable_1_0/lang/formulaires_reponse_fr.php
@@ -0,0 +1,27 @@
+<?php
+// This is a SPIP language file  --  Ceci est un fichier langue de SPIP
+// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_plugins_/formidable/trunk/lang/
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+	// I
+	'icone_creer_formulaire' => 'Créer une nouvelle réponse de formulaire',
+
+	// M
+	'modifier_formulaire' => 'Modifier cette réponse de formulaire',
+
+	'changer_statut' => 'Cette réponse de formulaire est :',
+
+	// F
+	'formulaires_reponse_numero' => 'Réponse de formulaire n°@nb@',
+
+	// R
+	'reponses_donnees' => 'Réponses données :',
+
+	// T
+	'titre_formulaires_reponses' => 'Réponses de formulaire',
+	'titre_logo_formulaires_reponse' => 'Logo de cette réponse de formulaire',
+	'titre_formulaires_reponse' => 'Réponse de formulaire',
+
+
+);
diff --git a/formidable_1_0/lang/paquet-formidable_fr.php b/formidable_1_0/lang/paquet-formidable_fr.php
new file mode 100644
index 0000000000000000000000000000000000000000..972823924062859af7fd4dbf5e6c93d52b3e97a5
--- /dev/null
+++ b/formidable_1_0/lang/paquet-formidable_fr.php
@@ -0,0 +1,19 @@
+<?php
+
+// Ceci est un fichier langue de SPIP -- This is a SPIP language file
+
+///  Fichier produit par PlugOnet
+// Module: paquet-formidable
+// Langue: fr
+// Date: 05-09-2012 18:51:15
+// Items: 2
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+$GLOBALS[$GLOBALS['idx_lang']] = array(
+
+// F
+	'formidable_description' => 'Création de formulaires avec une interface graphique et configuration des traitements associés (envoyer par courriel, enregistrer les réponses, etc).',
+	'formidable_slogan' => 'Générateur de formulaires',
+);
+?>
\ No newline at end of file
diff --git a/formidable_1_0/modeles/CVS/Entries b/formidable_1_0/modeles/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..c04bb2d5c7f6d380871c6fc9bd979d0049530802
--- /dev/null
+++ b/formidable_1_0/modeles/CVS/Entries
@@ -0,0 +1,5 @@
+/formulaire_aide_memoire.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire_analyse.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire_formidable.yaml/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponse.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/modeles/CVS/Repository b/formidable_1_0/modeles/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..2c5e5531e84b28ef52a0a491da3afe919b439b38
--- /dev/null
+++ b/formidable_1_0/modeles/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/modeles
diff --git a/formidable_1_0/modeles/CVS/Root b/formidable_1_0/modeles/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/modeles/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/modeles/formulaire_aide_memoire.html b/formidable_1_0/modeles/formulaire_aide_memoire.html
new file mode 100644
index 0000000000000000000000000000000000000000..c1747f7741badff0c10f274f428dfc7f96fc0198
--- /dev/null
+++ b/formidable_1_0/modeles/formulaire_aide_memoire.html
@@ -0,0 +1,17 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+	<strong><:formidable:traitements_aide_memoire:></strong>
+	<dl>
+		<dt>@nom_site_spip@</dt>
+		<dd><:info_nom_site:></dd>
+	</dl>
+	
+	<BOUCLE_champs(POUR){tableau #SAISIES*|unserialize|saisies_lister_par_nom{0}}>
+	[(#SET{label, [(#VALEUR|table_valeur{options}|table_valeur{label})]})]
+	[(#SET{label_case, [(#VALEUR|table_valeur{options}|table_valeur{label_case})]})]
+	
+	<dl>
+		<dt>@#CLE@</dt>
+		[<dd>(#GET{label}|sinon{#GET{label_case}})</dd>]
+	</dl>
+	</BOUCLE_champs>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/modeles/formulaire_analyse.html b/formidable_1_0/modeles/formulaire_analyse.html
new file mode 100644
index 0000000000000000000000000000000000000000..4c39c70c448890bc082c6eeac82f04b45ba63062
--- /dev/null
+++ b/formidable_1_0/modeles/formulaire_analyse.html
@@ -0,0 +1,63 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<div class='formidable_analyse'>
+[(#REM) On fait un tableau qui contient toutes les réponses, classées par champ ]
+#SET{valeurs,#ARRAY}
+#SET{reponses_total,0}
+<BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire}>
+<BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}>
+#SET_MERGE{liste_valeurs, #GET{valeurs}|table_valeur{#NOM}|sinon{#ARRAY}, #ARRAY{0,#VALEUR|tenter_unserialize}}
+#SET_MERGE{valeurs, #ARRAY{#NOM,#GET{liste_valeurs}}}
+</BOUCLE_champs>
+</BOUCLE_reponses>
+#SET{reponses_total,#TOTAL_BOUCLE}
+<strong class='nombre_reponse'>
+	[(#TOTAL_BOUCLE|singulier_ou_pluriel{formidable:reponse_une,formidable:reponses_nb})]
+</strong>
+</B_reponses>
+	<strong class='nombre_reponse'><:formidable:reponse_aucune:></strong>
+<//B_reponses>
+
+<BOUCLE_saisies(POUR){tableau #SAISIES|unserialize|saisies_lister_par_nom}>
+[(#VAL{saisie}|array_key_exists{#VALEUR}|oui)
+	[(#VALEUR|formidable_analyser_saisie{#GET{valeurs}, #GET{reponses_total}})]
+]
+</BOUCLE_saisies>
+
+</div><!-- formidable_analyse -->
+<script type='text/javascript'>
+(function($){
+$(document).ready(function(){
+	/* Récupérer tous les tableaux d'analyse non décorés */
+	$('.formidable_analyse table:not(.stat_done)').each(function() {
+		$(this).addClass('stat_done');
+		/* Le tableau contient le nombre total d'élément. On parcours chaque valeur */
+		$nbtotal = $(this).data('nombre');
+		$(this).find('td.stat').each(function(){
+			$val = $(this).html();
+			/* Certaines valeurs sont a ignorer (les moyennes) */
+			$ignore = $(this).is('.ignore');
+			if (!$ignore) {
+				/* Calcul du pourcentage */
+				$taux = Math.round($val/$nbtotal*100);
+				/* On affiche le nombre de réponses */
+				$reponses = $(this).attr('title');
+				if (!parseInt($val) || ($reponses === undefined)) {
+					$reponses = '';
+				} else {
+					$reponses = "<small> - " + $reponses + "</small>";
+				}
+				$text = "\
+				<div class='[(#CONFIG{formidable/analyse/classe}) ]progress-bar'>\
+					<span></span><strong>" + $taux + "%" + $reponses + "</strong>\
+				</div>";
+				$(this).html($text).find('span').width($taux + '%');
+			}
+		});
+	});
+});
+})(jQuery);
+</script>
+<style type='text/css'>
+<INCLURE{fond=css/formidable_analyse.css} />
+</style>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/modeles/formulaire_formidable.yaml b/formidable_1_0/modeles/formulaire_formidable.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..79dc4e9d525690a7eb9c562ffbaa2fa34b199846
--- /dev/null
+++ b/formidable_1_0/modeles/formulaire_formidable.yaml
@@ -0,0 +1,20 @@
+nom: '<:formidable:modele_nom_formulaire:>'
+logo: 'images/formulaire-24.png'
+icone_barre: 'formulaire.png'
+parametres:
+  -
+    saisie: 'hidden'
+    options:
+      nom: 'modele'
+      defaut: 'formulaire'
+  -
+    saisie: 'hidden'
+    options:
+      nom: 'variante'
+      defaut: 'formidable'
+  -
+    saisie: 'formulaire_formidable'
+    options:
+      nom: 'id'
+      label: '<:formidable:modele_label_formulaire_formidable:>'
+      cacher_option_intro: 'oui'
\ No newline at end of file
diff --git a/formidable_1_0/modeles/formulaires_reponse.html b/formidable_1_0/modeles/formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..02d78a07e3d3fd7d6663d062eb5a92aa0b3caa5b
--- /dev/null
+++ b/formidable_1_0/modeles/formulaires_reponse.html
@@ -0,0 +1,12 @@
+<BOUCLE_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
+
+#SET{valeurs,#ARRAY}
+<BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}>
+#SET_MERGE{valeurs,#ARRAY{#NOM,#VALEUR|tenter_unserialize}}
+</BOUCLE_champs>
+
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+#VOIR_SAISIES{(#SAISIES|unserialize), #GET{valeurs}}
+</BOUCLE_formulaire>
+
+</BOUCLE_reponse>
diff --git a/formidable_1_0/noisettes/CVS/Entries b/formidable_1_0/noisettes/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..4d95000f0fde9679fd1d2725688577f2cfa7b324
--- /dev/null
+++ b/formidable_1_0/noisettes/CVS/Entries
@@ -0,0 +1,3 @@
+/formulaire_formidable.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire_formidable.yaml/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/noisettes/CVS/Repository b/formidable_1_0/noisettes/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..3274270535d3da967c4a8defcf8f2834d5cc2190
--- /dev/null
+++ b/formidable_1_0/noisettes/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/noisettes
diff --git a/formidable_1_0/noisettes/CVS/Root b/formidable_1_0/noisettes/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/noisettes/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/noisettes/formulaire_formidable.html b/formidable_1_0/noisettes/formulaire_formidable.html
new file mode 100644
index 0000000000000000000000000000000000000000..95f7a4c6312505c90c310c77e6286f78d91d425f
--- /dev/null
+++ b/formidable_1_0/noisettes/formulaire_formidable.html
@@ -0,0 +1,2 @@
+<BOUCLE_formulaire(FORMULAIRES){identifiant}{0,1}>[(#ENV{afficher_titre_formulaire}|oui)[<h2 class="h2">(#TITRE|typo)</h2>]]</BOUCLE_formulaire>
+<div class="ajax">#FORMULAIRE_FORMIDABLE{#ENV{identifiant}}</div>
\ No newline at end of file
diff --git a/formidable_1_0/noisettes/formulaire_formidable.yaml b/formidable_1_0/noisettes/formulaire_formidable.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..dd6679c0c123ebbf4a044d5335c30317f7dcfeb3
--- /dev/null
+++ b/formidable_1_0/noisettes/formulaire_formidable.yaml
@@ -0,0 +1,15 @@
+nom: '<:formidable:noisette_nom_noisette_formulaire:>'
+icon: 'images/formulaire-24.png'
+parametres:
+  -
+    saisie: 'formulaire_formidable'
+    options:
+      nom: 'identifiant'
+      label: '<:formidable:noisette_label_identifiant:>'
+      cacher_option_intro: 'oui'
+  -
+    saisie: 'oui_non'
+    options:
+      nom: 'afficher_titre_formulaire'
+      label: '<:formidable:noisette_label_afficher_titre_formulaire:>'
+      defaut: ''
\ No newline at end of file
diff --git a/formidable_1_0/notifications/CVS/Entries b/formidable_1_0/notifications/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..8682d6d0e257e1db78b15d6c8786c6e691c85aca
--- /dev/null
+++ b/formidable_1_0/notifications/CVS/Entries
@@ -0,0 +1,3 @@
+/formulaire_accuse.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire_email.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/notifications/CVS/Repository b/formidable_1_0/notifications/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..ca025eb7faf19934a0cd3f30018bf994b0e67ba9
--- /dev/null
+++ b/formidable_1_0/notifications/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/notifications
diff --git a/formidable_1_0/notifications/CVS/Root b/formidable_1_0/notifications/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/notifications/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/notifications/formulaire_accuse.html b/formidable_1_0/notifications/formulaire_accuse.html
new file mode 100644
index 0000000000000000000000000000000000000000..559a130ca7f0d36b2bd06a168306c4b7e3606e6c
--- /dev/null
+++ b/formidable_1_0/notifications/formulaire_accuse.html
@@ -0,0 +1,7 @@
+
+[(#ENV*{message_retour}|propre)]
+
+#VOIR_SAISIES{#ENV*{saisies}, #ENV*{valeurs}}
+
+---
+<p><:envoi_via_le_site:> <a href="#URL_SITE_SPIP">#NOM_SITE_SPIP</a></p>
diff --git a/formidable_1_0/notifications/formulaire_email.html b/formidable_1_0/notifications/formulaire_email.html
new file mode 100644
index 0000000000000000000000000000000000000000..9f3b5e939e7db8e029842442180f1c38dc767b07
--- /dev/null
+++ b/formidable_1_0/notifications/formulaire_email.html
@@ -0,0 +1,18 @@
+
+<p>
+	#SET{date, #VAL{d/m/Y}|date}
+	#SET{heure, #VAL{H:i:s}|date}
+	<:formidable:traiter_email_horodatage{formulaire=#ENV*{titre}, date=#GET{date}, heure=#GET{heure}}:>
+	<br/>
+	#SET{url, #SELF{&,true}|url_absolue}
+	<:formidable:traiter_email_page{url=#GET{url}}:>
+</p>
+
+#VOIR_SAISIES{#ENV*{saisies}, #ENV*{valeurs}}
+
+---
+<p><:envoi_via_le_site:> <a href="#URL_SITE_SPIP">#NOM_SITE_SPIP</a></p>
+[(#ENV*{traitements}|table_valeur{enregistrement}|oui)
+#SET{url, #URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire, #ENV{id_formulaire}}|url_absolue}
+<p><:formidable:traiter_email_url_enregistrement{url=#GET{url}}:></p>
+]
diff --git a/formidable_1_0/paquet.xml b/formidable_1_0/paquet.xml
new file mode 100644
index 0000000000000000000000000000000000000000..64edb67ddd3f5538f04c0de1bda679891de4f651
--- /dev/null
+++ b/formidable_1_0/paquet.xml
@@ -0,0 +1,35 @@
+<paquet
+	prefix="formidable"
+	categorie="communication"
+	version="1.3.4"
+	etat="dev"
+	compatibilite="[3.0.0-dev;3.0.99]"
+	logo="images/formidable-64.png"
+	schema="0.5.1"
+	documentation="http://www.spip-contrib.net/Formidable-le-generateur-de"
+>
+
+	<nom>Formidable</nom>
+	<!-- Générateur de formulaires -->
+
+	<auteur>RastaPopoulos</auteur>
+	<auteur lien="http://www.ldd.fr">Les Développements Durables</auteur>
+
+	<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
+
+	<pipeline nom="autoriser" inclure="formidable_autorisations.php" />
+	<pipeline nom="declarer_tables_objets_sql" inclure="base/formidable_tables.php" />
+	<pipeline nom="declarer_tables_principales" inclure="base/formidable_tables.php" />
+	<pipeline nom="declarer_tables_auxiliaires" inclure="base/formidable_tables.php" />
+	<pipeline nom="declarer_tables_interfaces" inclure="base/formidable_tables.php" />
+
+	<pipeline nom="optimiser_base_disparus" inclure="formidable_pipelines.php" />
+
+	<necessite nom="spip_bonux" compatibilite="[1.9.3;[" />
+	<necessite nom="saisies" compatibilite="[1.10.1;[" />
+	<necessite nom="verifier" compatibilite="[0.1;[" />
+	<necessite nom="yaml" compatibilite="[1.1;[" />
+	<necessite nom="facteur" compatibilite="[1.5.3;[" />
+
+	<menu nom="formulaires" titre="formidable:bouton_formulaires" parent="menu_edition" icone="images/formulaire-16.png" />
+</paquet>
diff --git a/formidable_1_0/prive/CVS/Entries b/formidable_1_0/prive/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..7abecfefbe63751433fc814d1ef7ff11137a940a
--- /dev/null
+++ b/formidable_1_0/prive/CVS/Entries
@@ -0,0 +1,4 @@
+/style_prive_plugin_formidable.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D/objets////
+D/squelettes////
+D/themes////
diff --git a/formidable_1_0/prive/CVS/Repository b/formidable_1_0/prive/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..aba067f26124dd354b6d50d8fc1a64cef9b51fcf
--- /dev/null
+++ b/formidable_1_0/prive/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive
diff --git a/formidable_1_0/prive/CVS/Root b/formidable_1_0/prive/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/objets/CVS/Entries b/formidable_1_0/prive/objets/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..48cdfbe4027807d26d6492161c8387b3c37dcaf8
--- /dev/null
+++ b/formidable_1_0/prive/objets/CVS/Entries
@@ -0,0 +1,3 @@
+D/contenu////
+D/infos////
+D/liste////
diff --git a/formidable_1_0/prive/objets/CVS/Repository b/formidable_1_0/prive/objets/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..7ddfd1794c3aecb2ec725e14efe606eccaacb2f0
--- /dev/null
+++ b/formidable_1_0/prive/objets/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/objets
diff --git a/formidable_1_0/prive/objets/CVS/Root b/formidable_1_0/prive/objets/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/objets/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/objets/contenu/CVS/Entries b/formidable_1_0/prive/objets/contenu/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..b87a78df2dc56f477d03e7421bf499d7a938e930
--- /dev/null
+++ b/formidable_1_0/prive/objets/contenu/CVS/Entries
@@ -0,0 +1,3 @@
+/formulaire.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponse.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/prive/objets/contenu/CVS/Repository b/formidable_1_0/prive/objets/contenu/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..e2311d80cb21f2b0ddd572ffa36f91af26012e32
--- /dev/null
+++ b/formidable_1_0/prive/objets/contenu/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/objets/contenu
diff --git a/formidable_1_0/prive/objets/contenu/CVS/Root b/formidable_1_0/prive/objets/contenu/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/objets/contenu/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/objets/contenu/formulaire.html b/formidable_1_0/prive/objets/contenu/formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..e22434c69dfac50a1b60cd32d7aa12e32db7dc75
--- /dev/null
+++ b/formidable_1_0/prive/objets/contenu/formulaire.html
@@ -0,0 +1,6 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<div class="champ contenu_descriptif[ (#DESCRIPTIF*|strlen|?{'',vide})]">
+	<div class='label'><:info_descriptif:></div>
+	<div dir='#LANG_DIR' class='#EDIT{descriptif} descriptif'>[(#DESCRIPTIF|image_reduire{500,0})]</div>
+</div>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/objets/contenu/formulaires_reponse.html b/formidable_1_0/prive/objets/contenu/formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..30bccf4ef067e934ee5b7abd4d74fc8f881c9fc5
--- /dev/null
+++ b/formidable_1_0/prive/objets/contenu/formulaires_reponse.html
@@ -0,0 +1,27 @@
+<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
+<div class="champ contenu_auteur[ (#ID_AUTEUR*|strlen|?{'',vide})]">
+	<div class='label'><:auteur:></div>
+	<div dir='#LANG_DIR'>
+		[(#ID_AUTEUR|>{0}|oui)
+			<a href="[(#INFO_URL{auteur,#ID_AUTEUR})]">[(#INFO_TITRE{auteur,#ID_AUTEUR})]</a>
+		]
+		[(#ID_AUTEUR|>{0}|non)
+			<:formidable:reponses_anonyme:>
+		]
+	</div>
+</div>
+<div class="champ contenu_formulaire[ (#ID_FORMULAIRE*|strlen|?{'',vide})]">
+	<div class='label'><:formulaire:titre_formulaire:></div>
+	<div dir='#LANG_DIR'>
+		<a href="[(#URL_ECRIRE{formulaire,id_formulaire=#ID_FORMULAIRE})]">
+			[(#INFO_TITRE{formulaire,#ID_FORMULAIRE})]
+		</a>
+	</div>
+</div>
+<div class="champ contenu_date[ (#DATE*|strlen|?{'',vide})]">
+	<div class='label'><:date:></div>
+	<div dir='#LANG_DIR'>
+		[(#DATE|affdate_jourcourt|concat{#DATE|affdate{", H:i"}})]
+	</div>
+</div>
+</BOUCLE_formulaires_reponse>
diff --git a/formidable_1_0/prive/objets/infos/CVS/Entries b/formidable_1_0/prive/objets/infos/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..b87a78df2dc56f477d03e7421bf499d7a938e930
--- /dev/null
+++ b/formidable_1_0/prive/objets/infos/CVS/Entries
@@ -0,0 +1,3 @@
+/formulaire.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponse.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/prive/objets/infos/CVS/Repository b/formidable_1_0/prive/objets/infos/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..12bc51ca357a099d6208df9c2722bb53221d37fd
--- /dev/null
+++ b/formidable_1_0/prive/objets/infos/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/objets/infos
diff --git a/formidable_1_0/prive/objets/infos/CVS/Root b/formidable_1_0/prive/objets/infos/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/objets/infos/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/objets/infos/formulaire.html b/formidable_1_0/prive/objets/infos/formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..59afec02b69564fa14fa62686648e9f3bdf3422b
--- /dev/null
+++ b/formidable_1_0/prive/objets/infos/formulaire.html
@@ -0,0 +1,6 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire=#ENV{id}}{statut?}>
+<div class='infos'>
+<div class='numero'><:formidable:voir_numero:><p>#ID_FORMULAIRE</p></div>
+
+</div>
+</BOUCLE_formulaire>
\ No newline at end of file
diff --git a/formidable_1_0/prive/objets/infos/formulaires_reponse.html b/formidable_1_0/prive/objets/infos/formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..049084278c8822e367faf7aef86b4e2bc6d7c202
--- /dev/null
+++ b/formidable_1_0/prive/objets/infos/formulaires_reponse.html
@@ -0,0 +1,8 @@
+<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){id_formulaires_reponse=#ENV{id}}{statut?}>
+<div class='infos'>
+<div class='numero'><:formidable:reponse_numero:><p>#ID_FORMULAIRES_REPONSE</p></div>
+
+[(#FORMULAIRE_INSTITUER_OBJET{formulaires_reponses,#ID_FORMULAIRES_REPONSE})]
+
+</div>
+</BOUCLE_formulaires_reponse>
\ No newline at end of file
diff --git a/formidable_1_0/prive/objets/liste/CVS/Entries b/formidable_1_0/prive/objets/liste/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..91be90a6eb74764d8dfe507e6118efd68136667e
--- /dev/null
+++ b/formidable_1_0/prive/objets/liste/CVS/Entries
@@ -0,0 +1,3 @@
+/formulaires.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponses.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/prive/objets/liste/CVS/Repository b/formidable_1_0/prive/objets/liste/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..5e27e718e35aab92fd6fc5e8edf8dce5d910c061
--- /dev/null
+++ b/formidable_1_0/prive/objets/liste/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/objets/liste
diff --git a/formidable_1_0/prive/objets/liste/CVS/Root b/formidable_1_0/prive/objets/liste/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/objets/liste/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/objets/liste/formulaires.html b/formidable_1_0/prive/objets/liste/formulaires.html
new file mode 100644
index 0000000000000000000000000000000000000000..f2a809838c5e2149c80f42e986bd726f12fa5cd6
--- /dev/null
+++ b/formidable_1_0/prive/objets/liste/formulaires.html
@@ -0,0 +1,45 @@
+[(#SET{defaut_tri,#ARRAY{
+	date,-1,
+	titre,1,
+	id_formulaire,1
+}})
+]<B_formulaires>
+#ANCRE_PAGINATION
+<div class="liste-objets formulaires">
+<table class="spip liste">
+[<caption><strong class="caption">(#ENV*{titre})</strong></caption>]
+	<thead>
+		<tr class="first_row">
+			<th class="id_formulaire id" scope='col'>[(#TRI{id_formulaire,<span>#</span>,ajax})]</th>
+			<th class="titre" scope='col'>[(#TRI{titre,<:formidable:editer_titre:>,ajax})]</th>
+			<th class="identifiant" scope='col'>[(#TRI{identifiant,<:formidable:editer_identifiant:>,ajax})]</th>
+			<th class="action" scope='col'></th>
+		</tr>
+	</thead>
+	<tbody>
+	<BOUCLE_formulaires(FORMULAIRES){statut?}{tri #ENV{order,titre},#GET{defaut_tri}}{pagination #ENV{nb,10}}>
+		<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})][ (#EXPOSE|unique)]">
+			<td class="id_formulaire"><:info_numero_abbreviation:>#ID_FORMULAIRE</td>
+			<td class="titre"><a href="[(#ID_FORMULAIRE|generer_url_entite{formulaire})]">#TITRE</a></td>
+			<td class="identifiant">#IDENTIFIANT</td>
+			<td class="action">
+				[(#AUTORISER{editer, formulaire}|oui)
+					[(#BOUTON_ACTION{[(#CHEMIN_IMAGE{formulaire-dupliquer-24.png}
+						|balise_img{<:formidable:formulaires_dupliquer:>})],
+						#URL_ACTION_AUTEUR{dupliquer_formulaire, #ID_FORMULAIRE},link})]
+				]
+				[(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui)
+					[(#BOUTON_ACTION{[(#CHEMIN_IMAGE{formulaire-supprimer-24.png}
+						|balise_img{<:formidable:formulaires_supprimer:>})],
+						#URL_ACTION_AUTEUR{supprimer_formulaire, #ID_FORMULAIRE},link,<:formidable:formulaires_supprimer_confirmation:>})]
+				]
+			</td>
+		</tr>
+	</BOUCLE_formulaires>
+	</tbody>
+</table>
+[<p class="pagination">(#PAGINATION{prive})</p>]
+</div>
+</B_formulaires>[
+<div class="liste-objets formulaires"><strong class="caption">(#ENV*{sinon,<:formidable:formulaires_aucun:>})</strong></div>
+]<//B_formulaires>
diff --git a/formidable_1_0/prive/objets/liste/formulaires_reponses.html b/formidable_1_0/prive/objets/liste/formulaires_reponses.html
new file mode 100644
index 0000000000000000000000000000000000000000..9d310c092c53ed7126cb70283b4d2a9cc5fddd2f
--- /dev/null
+++ b/formidable_1_0/prive/objets/liste/formulaires_reponses.html
@@ -0,0 +1,48 @@
+[(#SET{defaut_tri,#ARRAY{
+	date,-1,
+	titre,1,
+	id_formulaires_reponse,1
+}})
+]<B_reponses>
+[(#BOITE_OUVRIR{'','simple'})]
+#ANCRE_PAGINATION
+<div class="liste-objets formulaires_reponses">
+<table class="liste spip">
+[<caption><strong class="caption">(#ENV*{titre})</strong></caption>]
+	<thead>
+		<tr class="first_row">
+			<th class="statut" scope='col'>[(#TRI{statut,<span>#</span>,ajax})]</th>
+			<th class="date" scope='col'>[(#TRI{date,<:date:>,ajax})]</th>
+			<th class="auteur" scope='col'>[(#TRI{id_auteur,<:formidable:reponses_auteur:>,ajax})]</th>
+			<th class="ip" scope='col'>[(#TRI{ip,<:formidable:reponses_ip:>,ajax})]</th>
+			<th class="action" scope='col'></th>
+		</tr>
+	</thead>
+	<tbody>
+	<BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire}{id_auteur?}{statut?}{tri #ENV{order,date},#GET{defaut_tri}}{pagination #ENV{nb,10}}>
+		<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
+			<td class="statut">[(#ID_FORMULAIRES_REPONSE|puce_changement_statut{#STATUT, #ID_FORMULAIRE, formulaires_reponse})]</td>
+			<td class="date">[(#DATE|affdate_jourcourt|concat{#DATE|affdate{", H:i"}})]</td>
+			<td class="auteur">
+				<BOUCLE_auteur(AUTEURS){id_auteur}{tout}>
+				<a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">#NOM</a>
+				</BOUCLE_auteur>
+				<:formidable:reponses_anonyme:>
+				<//B_auteur>
+			</td>
+			<td class="ip">#IP</td>
+			<td class="action">
+				<a href="[(#URL_ECRIRE{formulaires_reponse}|parametre_url{id_formulaires_reponse,#ID_FORMULAIRES_REPONSE})]" title="<:formidable:reponses_voir_detail:>">
+					<img src="#CHEMIN{images/formulaire-reponse-24.png}" alt="<:formidable:reponses_voir_detail:>" />
+				</a>
+			</td>
+		</tr>
+	</BOUCLE_reponses>
+	</tbody>
+</table>
+[<p class="pagination">(#PAGINATION{prive})</p>]
+</div>
+#BOITE_FERMER
+</B_reponses>[
+<div class="liste-objets formulaires_reponses"><strong class="caption">(#ENV*{sinon,''})</strong></div>
+]<//B_reponses>
diff --git a/formidable_1_0/prive/squelettes/CVS/Entries b/formidable_1_0/prive/squelettes/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..ad1a70578aba6a124f2fa71fc75c72b19f818aae
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/CVS/Entries
@@ -0,0 +1,5 @@
+D/contenu////
+D/extra////
+D/hierarchie////
+D/inclure////
+D/navigation////
diff --git a/formidable_1_0/prive/squelettes/CVS/Repository b/formidable_1_0/prive/squelettes/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..d5b69651154d8b6dc1a900d102897607fbafbc7c
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/squelettes
diff --git a/formidable_1_0/prive/squelettes/CVS/Root b/formidable_1_0/prive/squelettes/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/squelettes/contenu/CVS/Entries b/formidable_1_0/prive/squelettes/contenu/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..3e712a6b27ab410b0ea8c86106edb4bb3c5f103c
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/contenu/CVS/Entries
@@ -0,0 +1,8 @@
+/configurer_formidable.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire_edit.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_analyse.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponse.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponses.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/prive/squelettes/contenu/CVS/Repository b/formidable_1_0/prive/squelettes/contenu/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..3dd4d5d8bccbe000a971be857a5118111ded56eb
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/contenu/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/squelettes/contenu
diff --git a/formidable_1_0/prive/squelettes/contenu/CVS/Root b/formidable_1_0/prive/squelettes/contenu/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/contenu/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/squelettes/contenu/configurer_formidable.html b/formidable_1_0/prive/squelettes/contenu/configurer_formidable.html
new file mode 100644
index 0000000000000000000000000000000000000000..df8aa01100455662cb456bd844f7467ca1667c96
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/contenu/configurer_formidable.html
@@ -0,0 +1,7 @@
+[(#AUTORISER{configurer,_fsondage}|sinon_interdire_acces)]
+
+<h1 class="grostitre"><:formidable:cfg_titre_page_configurer_formidable:></h1>
+
+<div class="ajax">
+	#FORMULAIRE_CONFIGURER_FORMIDABLE_ANALYSE
+</div>
diff --git a/formidable_1_0/prive/squelettes/contenu/formulaire.html b/formidable_1_0/prive/squelettes/contenu/formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..6a19dc7d4fba3800944f255a8533e0bb71170431
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/contenu/formulaire.html
@@ -0,0 +1,35 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+[(#BOITE_OUVRIR{
+	[(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui)
+		[(#URL_ECRIRE{formulaire_edit,id_formulaire=#ID_FORMULAIRE}
+			|icone_verticale{<:formidable:editer_modifier_formulaire:>,formulaire,formulaire-editer-24,right})]
+	]
+	[<h1>(#TITRE|sinon{<:info_sans_titre:>})[(#CHEMIN_IMAGE{formulaire-24.png}|balise_img{formulaire,cadre-icone})]</h1>]
+,simple fiche_objet})]
+
+
+<!--affiche_milieu-->
+
+<div id="wysiwyg">
+<INCLURE{fond=prive/objets/contenu/formulaire,id=#ID_FORMULAIRE,id_formulaire=#ID_FORMULAIRE,virtuel=oui,ajax=wysiwyg,wysiwyg=1}>
+</div>
+
+	#SET{traitements_disponibles, #VAL|traitements_lister_disponibles}
+	[(#BOITE_OUVRIR{#CHEMIN_IMAGE{formulaire-config-traitements-24.png}
+		|balise_img{'',cadre-icone}
+		|concat{<:formidable:traitements_actives:>},'simple traitements'})]
+	<B_traitements>
+		<ul class='spip'>
+			<BOUCLE_traitements(POUR){tableau #TRAITEMENTS|unserialize|sinon{#ARRAY}}>
+				<li>[(#GET{traitements_disponibles}|table_valeur{#CLE}|table_valeur{titre})]</li>
+			</BOUCLE_traitements>
+		</ul>
+	</B_traitements>
+		<p><:formidable:aucun_traitement:></p>
+	<//B_traitements>
+	#BOITE_FERMER
+
+	#FORMULAIRE_FORMIDABLE{#ID_FORMULAIRE}
+
+#BOITE_FERMER
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/contenu/formulaire_edit.html b/formidable_1_0/prive/squelettes/contenu/formulaire_edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..b3eedd0b25b1715249aa62bb40ad4d86e46eb0d0
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/contenu/formulaire_edit.html
@@ -0,0 +1,38 @@
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{editer, formulaire}}>
+[(#BOITE_OUVRIR{'','info'})]
+<script type="text/javascript">/*<![CDATA[*/
+if (window.jQuery){
+function debloquer_prive(){ jQuery('input[required], textarea[required], select[required]').removeAttr('required'); }
+jQuery('document').ready(debloquer_prive);
+onAjaxLoad(debloquer_prive);
+}
+/*]]>*/</script>
+		<BOUCLE_formulaire(FORMULAIRES){id_formulaire=#VAL{id_formulaire}|_request}>
+			[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})]
+
+			<h4><:formidable:editer_modifier_formulaire:></h4>
+			<h1>#TITRE</h1>
+			
+			#SET{configurer,#ENV{configurer}|in_array{#ARRAY{0,formulaire,1,champs,2,traitements}}|?{#ENV{configurer},champs}}
+		</BOUCLE_formulaire>
+		[(#URL_ECRIRE{formulaires}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})]
+			
+			<:formidable:editer_modifier_formulaire:>
+			<h1>
+				[(#ENV{nouveau}|=={oui}|?{<:formidable:editer_nouveau:>,#VAL{id_menu}|_request})]
+			</h1>
+			
+			#SET{configurer,formulaire}
+		<//B_formulaire>
+	
+	[(#GET{configurer}|=={formulaire}|oui)
+		#FORMULAIRE_EDITER_FORMULAIRE{#VAL{id_formulaire}|_request|sinon{0}, #VAL{nouveau}|_request|sinon{''}}
+	]
+	[(#GET{configurer}|=={champs}|oui)
+		#FORMULAIRE_EDITER_FORMULAIRE_CHAMPS{#ENV{id_formulaire}}
+	]
+	[(#GET{configurer}|=={traitements}|oui)
+		#FORMULAIRE_EDITER_FORMULAIRE_TRAITEMENTS{#ENV{id_formulaire}}
+	]
+#BOITE_FERMER
+</BOUCLE_autoriser>
diff --git a/formidable_1_0/prive/squelettes/contenu/formulaires.html b/formidable_1_0/prive/squelettes/contenu/formulaires.html
new file mode 100644
index 0000000000000000000000000000000000000000..f655ed305d33dc0a612ea820b529ccab1c0abac7
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/contenu/formulaires.html
@@ -0,0 +1,13 @@
+[(#BOITE_OUVRIR{
+	<h1><:formidable:bouton_formulaires:></h1>
+	<p><:formidable:formulaires_introduction:></p>
+})]
+#BOITE_FERMER
+
+<INCLURE{fond=prive/objets/liste/formulaires, titre=<:formulaire:titre_formulaires:>, ajax} />
+
+[(#AUTORISER{editer, formulaire}|oui)
+[(#URL_ECRIRE{formulaire_edit}
+	|parametre_url{nouveau,oui}
+	|icone_verticale{<:formulaire:icone_creer_formulaire:>,formulaire,formulaire-nouveau-48,center})]
+]
diff --git a/formidable_1_0/prive/squelettes/contenu/formulaires_analyse.html b/formidable_1_0/prive/squelettes/contenu/formulaires_analyse.html
new file mode 100644
index 0000000000000000000000000000000000000000..452436e5b352b94cca4c973bf04fb138149a7de1
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/contenu/formulaires_analyse.html
@@ -0,0 +1,24 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse}}>
+[(#BOITE_OUVRIR{'','simple'})]
+        [(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})]
+
+	[<h4><:formidable:reponses_analyse:></h4>
+	<h1>(#TITRE|sinon{<:info_sans_titre:>})</h1>]
+
+	[(#BOITE_OUVRIR{'','simple'})]	
+	<BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire}>
+	</BOUCLE_reponses>
+	<strong>[(#_reponses:TOTAL_BOUCLE
+		|singulier_ou_pluriel{formidable:analyse_une_reponse_total,formidable:analyse_nb_reponses_total})]</strong>
+	</B_reponses>
+	<strong><:formidable:analyse_zero_reponse_total:></strong>
+	<//B_reponses>
+	#BOITE_FERMER
+#BOITE_FERMER
+
+[(#BOITE_OUVRIR{'','simple'})]
+#INCLURE{fond=modeles/formulaire_analyse,id_formulaire}
+#BOITE_FERMER
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/contenu/formulaires_reponse.html b/formidable_1_0/prive/squelettes/contenu/formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..40a22f001fd5a7ad08a1585eb098218925f12787
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/contenu/formulaires_reponse.html
@@ -0,0 +1,24 @@
+<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse, #ID_FORMULAIRES_REPONSE}}>
+[(#BOITE_OUVRIR{
+	<h1><:formulaires_reponse:formulaires_reponse_numero{nb=#ID_FORMULAIRES_REPONSE}:></h1>
+,simple fiche_objet})]
+
+
+<!--affiche_milieu-->
+
+<div id="wysiwyg">
+<INCLURE{fond=prive/objets/contenu/formulaires_reponse,
+	id=#ID_FORMULAIRES_REPONSE,
+	id_formulaires_reponse=#ID_FORMULAIRES_REPONSE,
+	virtuel=oui,ajax=wysiwyg,wysiwyg=1} />
+</div>
+
+<div class='nettoyeur'></div>
+[(#BOITE_OUVRIR{<h3><:formulaires_reponse:reponses_donnees:></h3>,reponses})]
+#INCLURE{fond=modeles/formulaires_reponse,id_formulaires_reponse}
+#BOITE_FERMER
+
+#BOITE_FERMER
+</BOUCLE_autoriser>
+</BOUCLE_formulaires_reponse>
diff --git a/formidable_1_0/prive/squelettes/contenu/formulaires_reponses.html b/formidable_1_0/prive/squelettes/contenu/formulaires_reponses.html
new file mode 100644
index 0000000000000000000000000000000000000000..63e9cb599c5251c38572a111cc4e30e50ab52bef
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/contenu/formulaires_reponses.html
@@ -0,0 +1,15 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse}}>
+[(#BOITE_OUVRIR{'','simple'})]
+	[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})]
+	
+	<h4><:formidable:voir_reponses:></h4>
+	<h1>#TITRE</h1>
+#BOITE_FERMER
+
+<INCLURE{fond=prive/objets/liste/formulaires_reponses}{id_formulaire}{statut=prop}{titre=<:formidable:reponses_liste_prop:>}{ajax}>
+
+<INCLURE{fond=prive/objets/liste/formulaires_reponses}{id_formulaire}{statut=publie}{titre=<:formidable:reponses_liste_publie:>}{ajax}>
+
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/extra/CVS/Entries b/formidable_1_0/prive/squelettes/extra/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..f839ab46799532388f1e6c327542892c48ebd375
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/extra/CVS/Entries
@@ -0,0 +1,4 @@
+/formulaire.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire_edit.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponses.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/prive/squelettes/extra/CVS/Repository b/formidable_1_0/prive/squelettes/extra/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..c0d528b897268a1714327638e7cfa2d1110af410
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/extra/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/squelettes/extra
diff --git a/formidable_1_0/prive/squelettes/extra/CVS/Root b/formidable_1_0/prive/squelettes/extra/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/extra/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/squelettes/extra/formulaire.html b/formidable_1_0/prive/squelettes/extra/formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..4407c024e726aaaef33f331f494e66364475169c
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/extra/formulaire.html
@@ -0,0 +1,19 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<!--#extra-->
+[(#BOITE_OUVRIR{<:formidable:titre_cadre_raccourcis:>,'simple','section'})]
+	[(#AUTORISER{editer, formulaire}|oui)
+	[(#URL_ACTION_AUTEUR{dupliquer_formulaire, #ID_FORMULAIRE}|icone_horizontale{<:formidable:formulaires_dupliquer:>,formulaire,formulaire-dupliquer-24})]
+	]
+	[(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui)
+	[(#URL_ACTION_AUTEUR{supprimer_formulaire, #ID_FORMULAIRE}|inserer_attribut{'onclick','return confirm("<:formidable:formulaires_supprimer_confirmation:>");'}
+	|icone_horizontale{<:formidable:formulaires_supprimer:>,formulaire,formulaire-supprimer-24})]
+	]
+#BOITE_FERMER
+
+[(#BOITE_OUVRIR{<:formidable:voir_exporter:>,'simple','section'})]
+	<BOUCLE_exports(POUR){tableau #VAL|echanges_formulaire_lister_disponibles|table_valeur{exporter}}>
+	[(#URL_ACTION_AUTEUR{exporter_formulaire,#ID_FORMULAIRE-#CLE}|icone_horizontale{#CLE,formulaire,formulaire-exporter-24})]
+	</BOUCLE_exports>
+#BOITE_FERMER
+<!--/#extra-->
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/extra/formulaire_edit.html b/formidable_1_0/prive/squelettes/extra/formulaire_edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..959b0ebe1982eb827c3b7b5f2302d1ff1038ba27
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/extra/formulaire_edit.html
@@ -0,0 +1,9 @@
+<BOUCLE_formulaire(FORMULAIRES) {id_formulaire}>
+<!--#extra-->
+[(#ENV{configurer}|=={traitements}|oui)
+[(#BOITE_OUVRIR{'','info'})]
+	#INCLURE{fond=modeles/formulaire_aide_memoire, id_formulaire=#ID_FORMULAIRE}
+#BOITE_FERMER
+]
+<!--/#extra-->
+</BOUCLE_formulaire>
\ No newline at end of file
diff --git a/formidable_1_0/prive/squelettes/extra/formulaires_analyse.html b/formidable_1_0/prive/squelettes/extra/formulaires_analyse.html
new file mode 100755
index 0000000000000000000000000000000000000000..9810f7574dca1ea3243dd4158bced28830301f1a
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/extra/formulaires_analyse.html
@@ -0,0 +1,8 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_analyse}}>
+[(#BOITE_OUVRIR{<:formidable:titre_cadre_raccourcis:>,'info'})]
+[(#URL_ACTION_AUTEUR{exporter_analyse_reponses,#ID_FORMULAIRE}
+    |icone_horizontale{<:formidable:analyse_exporter:>,formulaire,formulaire-analyse-exporter-24,center})]
+#BOITE_FERMER
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/extra/formulaires_reponses.html b/formidable_1_0/prive/squelettes/extra/formulaires_reponses.html
new file mode 100644
index 0000000000000000000000000000000000000000..eece13ca04abe6c13f7f652f20863a94aced9602
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/extra/formulaires_reponses.html
@@ -0,0 +1,8 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse}}>
+[(#BOITE_OUVRIR{<:formidable:titre_cadre_raccourcis:>,'info'})]
+[(#URL_ACTION_AUTEUR{exporter_formulaires_reponses,#ID_FORMULAIRE}
+	|icone_horizontale{<:formidable:reponses_exporter:>,formulaire,formulaire-reponses-exporter-24,center})]
+#BOITE_FERMER
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/hierarchie/CVS/Entries b/formidable_1_0/prive/squelettes/hierarchie/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..2e48e662b52a6ed2433c09ffeb14b692d3620b6e
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/hierarchie/CVS/Entries
@@ -0,0 +1,7 @@
+/formulaire.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire_edit.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_analyse.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponse.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponses.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/prive/squelettes/hierarchie/CVS/Repository b/formidable_1_0/prive/squelettes/hierarchie/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..3af88e4123aeaaeffdb12ac2ff75d958d9319c03
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/hierarchie/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/squelettes/hierarchie
diff --git a/formidable_1_0/prive/squelettes/hierarchie/CVS/Root b/formidable_1_0/prive/squelettes/hierarchie/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/hierarchie/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/squelettes/hierarchie/formulaire.html b/formidable_1_0/prive/squelettes/hierarchie/formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..2b7798d42f8b2a05ba87bc4bcf970de9344382e4
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/hierarchie/formulaire.html
@@ -0,0 +1,5 @@
+<!-- hierarchie -->
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
+<strong class="on">#TITRE</strong>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/hierarchie/formulaire_edit.html b/formidable_1_0/prive/squelettes/hierarchie/formulaire_edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..a41dfd9dcfa08cfc43f025a36c2179ce594f84ab
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/hierarchie/formulaire_edit.html
@@ -0,0 +1,5 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
+<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#TITRE</a> &gt;
+<strong class="on"><:formulaire:modifier_formulaire:></strong>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/hierarchie/formulaires.html b/formidable_1_0/prive/squelettes/hierarchie/formulaires.html
new file mode 100644
index 0000000000000000000000000000000000000000..7fd040aa0dab686493d9cca0127408ca8f8131fb
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/hierarchie/formulaires.html
@@ -0,0 +1,2 @@
+<!-- hierarchie -->
+<strong class="on"><:formulaire:titre_formulaires:></strong>
diff --git a/formidable_1_0/prive/squelettes/hierarchie/formulaires_analyse.html b/formidable_1_0/prive/squelettes/hierarchie/formulaires_analyse.html
new file mode 100644
index 0000000000000000000000000000000000000000..81cbd20c16eef107d5adaaa24174ae53a9b8b4c9
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/hierarchie/formulaires_analyse.html
@@ -0,0 +1,7 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse}}>
+<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
+<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#TITRE</a> &gt;
+<strong class="on"><:formidable:reponses_analyse:></strong>
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/hierarchie/formulaires_reponse.html b/formidable_1_0/prive/squelettes/hierarchie/formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..a4ebff6437b829ab18dad4a101cf83b0cd690fd8
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/hierarchie/formulaires_reponse.html
@@ -0,0 +1,6 @@
+<BOUCLE_formulaire(FORMULAIRES_REPONSES){id_formulaires_reponse}>
+<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
+<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#INFO_TITRE{formulaire,#ID_FORMULAIRE}</a> &gt;
+<a class="on" href="[(#URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire,#ID_FORMULAIRE})]"><:formidable:voir_reponses:></a> &gt;
+<strong class="on"><:formulaires_reponse:titre_formulaires_reponse:></strong>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/hierarchie/formulaires_reponses.html b/formidable_1_0/prive/squelettes/hierarchie/formulaires_reponses.html
new file mode 100644
index 0000000000000000000000000000000000000000..bfe35597921ba46a8541932290936f838ff61379
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/hierarchie/formulaires_reponses.html
@@ -0,0 +1,5 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<a href="#URL_ECRIRE{formulaires}"><:formulaire:titre_formulaires:></a> &gt;
+<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#INFO_TITRE{formulaire,#ID_FORMULAIRE}</a> &gt;
+<strong class="on"><:formidable:voir_reponses:></strong>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/inclure/CVS/Entries b/formidable_1_0/prive/squelettes/inclure/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..178481050188cf00d7d9cd5a11e43ab8fab9294f
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/inclure/CVS/Entries
@@ -0,0 +1 @@
+D
diff --git a/formidable_1_0/prive/squelettes/inclure/CVS/Repository b/formidable_1_0/prive/squelettes/inclure/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..1c9444e67b39f52ba7ad045e28562112a743df96
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/inclure/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/squelettes/inclure
diff --git a/formidable_1_0/prive/squelettes/inclure/CVS/Root b/formidable_1_0/prive/squelettes/inclure/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/inclure/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/squelettes/navigation/CVS/Entries b/formidable_1_0/prive/squelettes/navigation/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..2e48e662b52a6ed2433c09ffeb14b692d3620b6e
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/navigation/CVS/Entries
@@ -0,0 +1,7 @@
+/formulaire.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire_edit.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_analyse.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponse.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponses.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/prive/squelettes/navigation/CVS/Repository b/formidable_1_0/prive/squelettes/navigation/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..66d14d400cc183f4b1be70a8dbe28a09f118f5e6
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/navigation/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/squelettes/navigation
diff --git a/formidable_1_0/prive/squelettes/navigation/CVS/Root b/formidable_1_0/prive/squelettes/navigation/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/navigation/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/squelettes/navigation/formulaire.html b/formidable_1_0/prive/squelettes/navigation/formulaire.html
new file mode 100644
index 0000000000000000000000000000000000000000..ef1289e75c70ad185b114d78a9f5b93154ca15d7
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/navigation/formulaire.html
@@ -0,0 +1,42 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+#BOITE_OUVRIR{'','info'}
+#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}}
+
+[(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui)
+
+[(#URL_ECRIRE{formulaire_edit}
+	|parametre_url{id_formulaire, #ID_FORMULAIRE}
+	|parametre_url{configurer,formulaire}
+	|parametre_url{avertissement,''}
+	|icone_horizontale{<:formidable:editer_menu_formulaire:>,formulaire,formulaire-editer-24,center})]
+
+[(#URL_ECRIRE{formulaire_edit}
+	|parametre_url{id_formulaire, #ID_FORMULAIRE}
+	|parametre_url{configurer,champs}
+	|parametre_url{avertissement,''}
+	|icone_horizontale{<:formidable:editer_menu_champs:>,formulaire,formulaire-config-champs-24,center})]
+
+[(#URL_ECRIRE{formulaire_edit}
+	|parametre_url{id_formulaire, #ID_FORMULAIRE}
+	|parametre_url{configurer,traitements}
+	|parametre_url{avertissement,''}
+	|icone_horizontale{<:formidable:editer_menu_traitements:>,formulaire,formulaire-config-traitements-24,center})]
+
+]
+
+<BOUCLE_resultats(FORMULAIRES_REPONSES){id_formulaire}>
+</BOUCLE_resultats>
+
+<div class='navigation_resultats'>
+[(#URL_ECRIRE{formulaires_reponses}
+	|parametre_url{id_formulaire, #ID_FORMULAIRE}
+	|icone_horizontale{<:formidable:voir_reponses:> &#40;#TOTAL_BOUCLE&#41;,formulaire,formulaire-reponses-24,center})]
+[(#URL_ECRIRE{formulaires_analyse}
+	|parametre_url{id_formulaire, #ID_FORMULAIRE}
+	|icone_horizontale{<:formidable:reponses_analyse:>,formulaire,formulaire-analyse-24,center})]
+</div>
+
+</B_resultats>
+
+#BOITE_FERMER
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/navigation/formulaire_edit.html b/formidable_1_0/prive/squelettes/navigation/formulaire_edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..ed8628726b946b7c3bdb6327d1ac85cdc8bb3bc3
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/navigation/formulaire_edit.html
@@ -0,0 +1,22 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+#BOITE_OUVRIR{'','info'}
+#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}}
+
+[(#SELF
+	|parametre_url{configurer,formulaire}
+	|parametre_url{avertissement,''}
+	|icone_horizontale{<:formidable:editer_menu_formulaire:>,formulaire,formulaire-editer-24,center})]
+
+[(#SELF
+	|parametre_url{configurer,champs}
+	|parametre_url{avertissement,''}
+	|icone_horizontale{<:formidable:editer_menu_champs:>,formulaire,formulaire-config-champs-24,center})]
+
+[(#SELF
+	|parametre_url{configurer,traitements}
+	|parametre_url{avertissement,''}
+	|icone_horizontale{<:formidable:editer_menu_traitements:>,formulaire,formulaire-config-traitements-24,center})]
+
+#BOITE_FERMER
+
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/navigation/formulaires.html b/formidable_1_0/prive/squelettes/navigation/formulaires.html
new file mode 100644
index 0000000000000000000000000000000000000000..0ee28b014ed0a4cf06ee62ff7015f8c2569999f6
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/navigation/formulaires.html
@@ -0,0 +1,5 @@
+[(#BOITE_OUVRIR{<:formidable:importer_formulaire:>,'info'})]
+[(#AUTORISER{editer, formulaire}|oui)
+	#FORMULAIRE_IMPORTER_FORMULAIRE
+]
+#BOITE_FERMER
diff --git a/formidable_1_0/prive/squelettes/navigation/formulaires_analyse.html b/formidable_1_0/prive/squelettes/navigation/formulaires_analyse.html
new file mode 100644
index 0000000000000000000000000000000000000000..959bad4283f65509a4db6ca4a3e7de967626be14
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/navigation/formulaires_analyse.html
@@ -0,0 +1,12 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse}}>
+#BOITE_OUVRIR{'','info'}
+#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}}
+
+[(#URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_horizontale{<:formidable:reponses_liste:>,formulaire,formulaire-reponses-24,left})]
+
+[(#SELF|icone_horizontale{<:formidable:reponses_analyse:>,formulaire,formulaire-analyse-24,left})]
+
+#BOITE_FERMER
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/squelettes/navigation/formulaires_reponse.html b/formidable_1_0/prive/squelettes/navigation/formulaires_reponse.html
new file mode 100644
index 0000000000000000000000000000000000000000..2b4d4ede51466c3365853848c6d25d307e5c22f9
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/navigation/formulaires_reponse.html
@@ -0,0 +1,15 @@
+<BOUCLE_formulaires_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse, #ID_FORMULAIRES_REPONSE}}>
+[(#BOITE_OUVRIR{'','info'})]
+
+	[(#PIPELINE{boite_infos,#ARRAY{data,'',
+		args,#ARRAY{'type','formulaires_reponse','id',#ENV{id_formulaires_reponse}}}})]
+
+	[(#URL_ECRIRE{formulaires_analyse}
+		|parametre_url{id_formulaire,#ID_FORMULAIRE}
+		|icone_horizontale{<:formidable:reponses_analyse:>,formulaire,formulaire-analyse-24,center})]
+
+#BOITE_FERMER
+
+</BOUCLE_autoriser>
+</BOUCLE_formulaires_reponse>
diff --git a/formidable_1_0/prive/squelettes/navigation/formulaires_reponses.html b/formidable_1_0/prive/squelettes/navigation/formulaires_reponses.html
new file mode 100644
index 0000000000000000000000000000000000000000..e19e1c1aff82458baa4e3f250ef85379fc096d6b
--- /dev/null
+++ b/formidable_1_0/prive/squelettes/navigation/formulaires_reponses.html
@@ -0,0 +1,12 @@
+<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
+<BOUCLE_autoriser(CONDITION){si #AUTORISER{voir, formulaires_reponse}}>
+#BOITE_OUVRIR{'','info'}
+#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}}
+
+[(#SELF|icone_horizontale{<:formidable:reponses_liste:>,formulaire,formulaire-reponses-24,left})]
+
+[(#URL_ECRIRE{formulaires_analyse}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_horizontale{<:formidable:reponses_analyse:>,formulaire,formulaire-analyse-24,left})]
+
+#BOITE_FERMER
+</BOUCLE_autoriser>
+</BOUCLE_formulaire>
diff --git a/formidable_1_0/prive/style_prive_plugin_formidable.html b/formidable_1_0/prive/style_prive_plugin_formidable.html
new file mode 100644
index 0000000000000000000000000000000000000000..cbd1cf99aeba1d48d71f2235a0a22e17cb5c2b74
--- /dev/null
+++ b/formidable_1_0/prive/style_prive_plugin_formidable.html
@@ -0,0 +1,32 @@
+#SET{claire,#ENV{couleur_claire,edf3fe}}
+#SET{foncee,#ENV{couleur_foncee,3874b0}}
+
+body .formidable_analyse .progress-bar span {
+	background-color: ##GET{claire};
+	  background-image: -webkit-gradient(linear, left top, left bottom, from(##GET{claire}), to(##GET{foncee}));
+	  background-image: -webkit-linear-gradient(top, ##GET{claire}, ##GET{foncee});
+	  background-image: -moz-linear-gradient(top, ##GET{claire}, ##GET{foncee});
+	  background-image: -ms-linear-gradient(top, ##GET{claire}, ##GET{foncee});
+	  background-image: -o-linear-gradient(top, ##GET{claire}, ##GET{foncee});
+	  background-image: linear-gradient(top, ##GET{claire}, ##GET{foncee}); 
+}
+
+#navigation .navigation_resultats {
+	margin-top:1em;
+	padding-top:1em;
+	border-top:1px solid #eee;
+}
+
+#contenu .box.traitements ul.spip {margin-bottom:0;}
+
+#contenu .liste-objets.formulaires_reponses tr > .date {width:auto;}
+#contenu .liste-objets.formulaires_reponses tr > .auteur {width:auto;}
+
+.formulaires_reponse #contenu #wysiwyg {margin-top:1em;}
+.formulaires_reponse #contenu #wysiwyg .label {
+	width:140px; float:left; display:block;
+}
+.formulaires_reponse #contenu .fiche_objet .reponses .inner { border:none; }
+.formulaires_reponse #contenu .fiche_objet .reponses .hd {
+    padding-bottom: 3px; margin-bottom:10px; border-bottom:1px solid #ccc;
+}
diff --git a/formidable_1_0/prive/themes/CVS/Entries b/formidable_1_0/prive/themes/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..f979dcfdb2ced04a5ca87422c2e56ef6364f4398
--- /dev/null
+++ b/formidable_1_0/prive/themes/CVS/Entries
@@ -0,0 +1,2 @@
+D/basic////
+D/spip////
diff --git a/formidable_1_0/prive/themes/CVS/Repository b/formidable_1_0/prive/themes/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..d7b45fcd66dbf42626d34dc51487a7cc18f87644
--- /dev/null
+++ b/formidable_1_0/prive/themes/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/themes
diff --git a/formidable_1_0/prive/themes/CVS/Root b/formidable_1_0/prive/themes/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/themes/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/themes/basic/CVS/Entries b/formidable_1_0/prive/themes/basic/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..d906c23b06aa89a02081a0531c9bc8f39f6f83bc
--- /dev/null
+++ b/formidable_1_0/prive/themes/basic/CVS/Entries
@@ -0,0 +1 @@
+D/images////
diff --git a/formidable_1_0/prive/themes/basic/CVS/Repository b/formidable_1_0/prive/themes/basic/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..22a27c9e6d524779d5846c79e5ff0120ca3de258
--- /dev/null
+++ b/formidable_1_0/prive/themes/basic/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/themes/basic
diff --git a/formidable_1_0/prive/themes/basic/CVS/Root b/formidable_1_0/prive/themes/basic/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/themes/basic/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/themes/basic/images/CVS/Entries b/formidable_1_0/prive/themes/basic/images/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..72cbdc1001abdc3a8c35f06115dd77bc605777e0
--- /dev/null
+++ b/formidable_1_0/prive/themes/basic/images/CVS/Entries
@@ -0,0 +1,2 @@
+/formulaire-16.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/prive/themes/basic/images/CVS/Repository b/formidable_1_0/prive/themes/basic/images/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..48c1039972600476fd3aae92d2e63ba80434ffa6
--- /dev/null
+++ b/formidable_1_0/prive/themes/basic/images/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/themes/basic/images
diff --git a/formidable_1_0/prive/themes/basic/images/CVS/Root b/formidable_1_0/prive/themes/basic/images/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/themes/basic/images/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/themes/basic/images/formulaire-16.png b/formidable_1_0/prive/themes/basic/images/formulaire-16.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ca21eaea457d65608d71a6afcd1cb30c8842b3a
Binary files /dev/null and b/formidable_1_0/prive/themes/basic/images/formulaire-16.png differ
diff --git a/formidable_1_0/prive/themes/spip/CVS/Entries b/formidable_1_0/prive/themes/spip/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..d906c23b06aa89a02081a0531c9bc8f39f6f83bc
--- /dev/null
+++ b/formidable_1_0/prive/themes/spip/CVS/Entries
@@ -0,0 +1 @@
+D/images////
diff --git a/formidable_1_0/prive/themes/spip/CVS/Repository b/formidable_1_0/prive/themes/spip/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..1704f76948a877291ac8a63fdcab4d8e831cf76a
--- /dev/null
+++ b/formidable_1_0/prive/themes/spip/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/themes/spip
diff --git a/formidable_1_0/prive/themes/spip/CVS/Root b/formidable_1_0/prive/themes/spip/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/themes/spip/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/themes/spip/images/CVS/Entries b/formidable_1_0/prive/themes/spip/images/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..efcc96498ecadd12cc65885c5aae51f83ab18b8e
--- /dev/null
+++ b/formidable_1_0/prive/themes/spip/images/CVS/Entries
@@ -0,0 +1,4 @@
+/formulaire-16.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaires_reponse-24.png/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/prive/themes/spip/images/CVS/Repository b/formidable_1_0/prive/themes/spip/images/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..8c1b5af1607ef26a988db73dce7ba2d46acc3d93
--- /dev/null
+++ b/formidable_1_0/prive/themes/spip/images/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/prive/themes/spip/images
diff --git a/formidable_1_0/prive/themes/spip/images/CVS/Root b/formidable_1_0/prive/themes/spip/images/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/prive/themes/spip/images/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/prive/themes/spip/images/formulaire-16.png b/formidable_1_0/prive/themes/spip/images/formulaire-16.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ca21eaea457d65608d71a6afcd1cb30c8842b3a
Binary files /dev/null and b/formidable_1_0/prive/themes/spip/images/formulaire-16.png differ
diff --git a/formidable_1_0/prive/themes/spip/images/formulaire-24.png b/formidable_1_0/prive/themes/spip/images/formulaire-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff847d080c2b8c158b3dccdff2d1534d06178ae6
Binary files /dev/null and b/formidable_1_0/prive/themes/spip/images/formulaire-24.png differ
diff --git a/formidable_1_0/prive/themes/spip/images/formulaires_reponse-24.png b/formidable_1_0/prive/themes/spip/images/formulaires_reponse-24.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec0a2b05a2d7a392c8a4f464c5069d6af0a684aa
Binary files /dev/null and b/formidable_1_0/prive/themes/spip/images/formulaires_reponse-24.png differ
diff --git a/formidable_1_0/public/CVS/Entries b/formidable_1_0/public/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..c3c9883ef82b9189af3bf176de2f21044b1d9870
--- /dev/null
+++ b/formidable_1_0/public/CVS/Entries
@@ -0,0 +1,2 @@
+/formidable_criteres.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/public/CVS/Repository b/formidable_1_0/public/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..d554eac695f061ac3ab9f1e5264343fb024b06fa
--- /dev/null
+++ b/formidable_1_0/public/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/public
diff --git a/formidable_1_0/public/CVS/Root b/formidable_1_0/public/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/public/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/public/formidable_criteres.php b/formidable_1_0/public/formidable_criteres.php
new file mode 100644
index 0000000000000000000000000000000000000000..ef2147a362cc0edfedb115872c0e39a61e1f60b0
--- /dev/null
+++ b/formidable_1_0/public/formidable_criteres.php
@@ -0,0 +1,64 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+	// {tri_donnee champ}
+/**
+ * Depuis la boucle FORMULAIRES_REPONSES, trier les résulats en fonction d'un champ
+ * de la table FORMULAIRES_REPONSES_CHAMPS
+ * {tri_selon_donnee} 
+ *
+ * @global array $exceptions_des_tables
+ * @param string $idb
+ * @param array $boucles
+ * @param <type> $crit
+ * 
+ * Auteurs :
+ * Antoine Pitrou
+ * Cedric Morin
+ * Renato
+ * @ 2005,2006 - Distribue sous licence GNU/GPL
+ */
+
+function critere_tri_selon_donnee_dist($idb, &$boucles, $crit) { // Garder cette fontion pour compatibilité
+	critere_tri_selon_reponse_dist($idb, $boucles, $crit) ;
+}
+function critere_tri_selon_reponse_dist($idb, &$boucles, $crit) {
+
+	$boucle = &$boucles[$idb];
+	$t = $boucle->id_table;
+	
+	if ($t=='formulaires_reponses'){
+		$not = $crit->not;
+		$_quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
+		$k = count($boucle->join)+1;
+		$boucle->join[$k]= array($t,'id_formulaires_reponse');
+		$boucle->from["L$k"]= 'spip_formulaires_reponses_champs';
+		$op = array("'='", "'L$k.nom'", "_q(".$_quoi.")");
+		$boucle->where[]= array("'?'","!in_array($_quoi,array('date','id_formulaires_reponse'))",$op,"''");
+		$boucle->order[]= "(in_array($_quoi,array('date','id_formulaires_reponse'))?'$t.'.$_quoi:(strncmp($_quoi,'date_',5)==0?'STR_TO_DATE(L$k.valeur,\'%d/%m/%Y\')':'L$k.valeur'))".($not?".' DESC'":"");
+	}
+}
+
+// {recherche_donnee} ou {recherche_donnee susan}
+// Intégralement pompé et adapté de Forms&Tables
+function critere_recherche_reponse_dist($idb, &$boucles, $crit) {
+	global $table_des_tables;
+	$boucle = &$boucles[$idb];
+	$t = $boucle->id_table;
+	if ($t=='formulaires_reponses'){
+		if (isset($crit->param[0]))
+			$_quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
+		else
+			$_quoi = '@$Pile[0]["recherche"]';
+
+		$k = count($boucle->join)+1;
+		$boucle->join[$k]= array($t,'id_formulaires_reponse');
+		$boucle->from["L$k"]= 'spip_formulaires_reponses_champs';
+		$op = array("'LIKE'","'L$k.valeur'","_q(strpos($_quoi,'%')===false?'%'.".$_quoi.".'%':$_quoi)");
+		$boucle->where[]= array("'?'",$_quoi,$op,"''");
+	}
+}
+
+
+?>
diff --git a/formidable_1_0/puce_statut/CVS/Entries b/formidable_1_0/puce_statut/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..0c46c94329023742b1e1b52baded5a1b635c9d1e
--- /dev/null
+++ b/formidable_1_0/puce_statut/CVS/Entries
@@ -0,0 +1,2 @@
+/formulaires_reponse.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/puce_statut/CVS/Repository b/formidable_1_0/puce_statut/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..1fdae6271d272e28e06e972b4484ffa716df2ec7
--- /dev/null
+++ b/formidable_1_0/puce_statut/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/puce_statut
diff --git a/formidable_1_0/puce_statut/CVS/Root b/formidable_1_0/puce_statut/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/puce_statut/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/puce_statut/formulaires_reponse.php b/formidable_1_0/puce_statut/formulaires_reponse.php
new file mode 100644
index 0000000000000000000000000000000000000000..0efc6f9e4e95202c8225e8bd4a8d9ade02d8bab1
--- /dev/null
+++ b/formidable_1_0/puce_statut/formulaires_reponse.php
@@ -0,0 +1,92 @@
+<?php
+
+/**
+ * Gestion des puces d'action rapide de formulaires
+ *
+ * @package SPIP\Formidable\Puce_statut
+**/
+
+/**
+ * Gestion des puces statuts des formulaires
+ * 
+ * Retourne le contenu d'une puce avec changement de statut possible
+ * si on en a l'autorisation, sinon simplement l'image de la puce
+ *
+ * @param int $id
+ *     Identifiant de l'objet
+ * @param string $statut
+ *     Statut actuel de l'objet
+ * @param int $id_parent
+ *     Identifiant du parent, un formulaire
+ * @param string $type
+ *     Type d'objet
+ * @param bool $ajax
+ *     Indique s'il ne faut renvoyer que le coeur du menu car on est
+ *     dans une requete ajax suite à un post de changement rapide
+ * @param bool $menu_rapide
+ *     Indique si l'on peut changer le statut, ou si on l'affiche simplement
+ * @return string
+ *     Code HTML de l'image de puce de statut à insérer (et du menu de changement si présent)
+**/
+function puce_statut_formulaires_reponse_dist($id, $statut, $id_parent, $type='article', $ajax = false, $menu_rapide=_ACTIVER_PUCE_RAPIDE) {
+
+	$src = statut_image($type, $statut);
+	if (!$src)
+		return $src;
+
+	if (!$id
+	  OR !_SPIP_AJAX
+	  OR !$menu_rapide
+	  OR !autoriser('instituer', $type, $id)) {
+	  $ajax_node ='';
+	}
+	else
+		$ajax_node = " class='imgstatut$type$id'";
+
+	$inser_puce = http_img_pack($src,statut_titre($type, $statut),$ajax_node);
+
+	if (!$ajax_node)
+		return $inser_puce;
+
+	$table = table_objet_sql($type);
+	$desc = lister_tables_objets_sql($table);
+	if (!isset($desc['statut_textes_instituer']))
+		return $inser_puce;
+
+	$coord = array_flip(array_keys($desc['statut_textes_instituer']));
+	if (!isset($coord[$statut]))
+		return $inser_puce;
+
+	$unit = 8/*widh de img*/+4/*padding*/;
+	$margin = 4; /* marge a gauche + droite */
+	$zero = 1 /*border*/ + $margin/2 + 2 /*padding*/;
+	$clip = $zero+ ($unit*$coord[$statut]);
+	if ($ajax){
+
+		$width = $unit*count($desc['statut_textes_instituer'])+$margin;
+		$out = "<span class='puce_objet_fixe $type'>"
+		. $inser_puce
+		. "</span>"
+		. "<span class='puce_objet_popup $type statutdecal$type$id' style='width:{$width}px;margin-left:-{$clip}px;'>";
+		$i=0;
+		foreach($desc['statut_textes_instituer'] as $s=>$t){
+			$out .= afficher_script_statut($id, $type, -$zero-$i++*$unit, statut_image($type,$s), $s, _T($t));
+		}
+		$out .= "</span>";
+		return $out;
+	}
+	else {
+
+		$nom = "puce_statut_";
+	  $action = generer_url_ecrire('puce_statut_formulaires',"",true);
+	  $action = "if (!this.puce_loaded) { this.puce_loaded = true; prepare_selec_statut(this, '$nom', '$type', '$id', '$action'); }";
+	  $over = " onmouseover=\"$action\"";
+
+		$lang_dir = lang_dir(isset($GLOBALS['lang_objet']) ? $GLOBALS['lang_objet'] : "");
+		return 	"<span class='puce_objet $type' id='$nom$type$id' dir='$lang_dir'$over>"
+		. $inser_puce
+		. '</span>';
+	}
+}
+
+
diff --git a/formidable_1_0/saisies-analyses/CVS/Entries b/formidable_1_0/saisies-analyses/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..fbad8607ee12128d8de9afdae49f1a010e3decd7
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/CVS/Entries
@@ -0,0 +1,13 @@
+/_base.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/case.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/checkbox.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/destinataires.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/explication.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/oui_non.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/radio.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/selecteur_article.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/selecteur_rubrique.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/selecteur_rubrique_article.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/selection.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/selection_multiple.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/saisies-analyses/CVS/Repository b/formidable_1_0/saisies-analyses/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..6a75736da945de69f2e68a9651fd1a4bc0e6374a
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/saisies-analyses
diff --git a/formidable_1_0/saisies-analyses/CVS/Root b/formidable_1_0/saisies-analyses/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/saisies-analyses/_base.html b/formidable_1_0/saisies-analyses/_base.html
new file mode 100644
index 0000000000000000000000000000000000000000..7c9a8ab3bfc9ad602caae40e4ac7d81af1c00ffc
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/_base.html
@@ -0,0 +1,32 @@
+<div class="cadre cadre-liste analyser analyser_#ENV{nom} saisie_#ENV{type_saisie}">
+<table class="liste" cellspacing="0" cellpadding="2" border="0" style="width:100%;" data-nombre="#ENV{reponses_total}">
+[<caption class="titrem"><strong class="caption">(#ENV{label_case,#ENV{label,#ENV{nom}}})</strong></caption>]
+	<tbody>
+	[(#CHEMIN{saisies-analyses/#ENV{type_saisie}.html}|oui)
+		#INCLURE{fond=saisies-analyses/#ENV{type_saisie},env}
+	]
+	[(#CHEMIN{saisies-analyses/#ENV{type_saisie}.html}|non)
+		#SET{plein,#ENV{valeurs}|array_filter}
+		#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}}
+		[(#GET{plein}|count|>{0}|oui)
+			#SET{moyenne,#VAL{str_word_count}|array_map{#GET{plein}}|array_sum|div{#GET{plein}|count}}
+		]
+		[(#GET{plein}|count|>{0}|non)
+			#SET{moyenne,0}
+		]
+		<tr class="tr_liste row_odd vide">
+			<td class="choix"><:formidable:analyse_sans_reponse:></td>
+			<td class="stat"[ title="(#GET{vide}|count|titre_nb_reponses|attribut_html)"]>[(#GET{vide}|count)]</td>
+		</tr>
+		<tr class="tr_liste row_even plein">
+			<td class="choix"><:formidable:analyse_avec_reponse:></td>
+			<td class="stat"[ title="(#GET{plein}|count|titre_nb_reponses|attribut_html)"]>[(#GET{plein}|count)]</td>
+		</tr>
+		<tr class="tr_liste row_odd moyenne">
+			<td class="choix"><:formidable:analyse_longueur_moyenne:></td>
+			<td class="stat ignore">#GET{moyenne}</td>
+		</tr>
+	]
+	</tbody>
+</table>
+</div>
diff --git a/formidable_1_0/saisies-analyses/case.html b/formidable_1_0/saisies-analyses/case.html
new file mode 100644
index 0000000000000000000000000000000000000000..51a9faf9b9aa41a7cb80a4b77bc063304502920a
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/case.html
@@ -0,0 +1,27 @@
+#SET{oui,0}
+#SET{non,0}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	[(#VALEUR|oui)
+		#SET{oui,#GET{oui}|plus{1}}
+	]
+	[(#VALEUR|non)
+		#SET{non,#GET{non}|plus{1}}
+	]
+</BOUCLE_reponses>
+
+<tr class="tr_liste">
+	<td class="choix"><:item_oui:></td>
+	<td class="stat"[ title="(#GET{oui}|titre_nb_reponses|attribut_html)"]>#GET{oui}</td>
+</tr>
+<tr class="tr_liste">
+	<td class="choix"><:item_non:></td>
+	<td class="stat"[ title="(#GET{non}|titre_nb_reponses|attribut_html)"]>#GET{non}</td>
+</tr>
+
+#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
+[(#GET{diff}|>{0}|oui)
+<tr class="tr_liste">
+	<td class="choix"><:saisies:vue_sans_reponse:></td>
+	<td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
+</tr>
+]
diff --git a/formidable_1_0/saisies-analyses/checkbox.html b/formidable_1_0/saisies-analyses/checkbox.html
new file mode 100644
index 0000000000000000000000000000000000000000..c60875ba08bb31a073c88ae766ce410c2ce6952c
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/checkbox.html
@@ -0,0 +1,26 @@
+#SET{stats,#ARRAY}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	<BOUCLE_choix(POUR){tableau #VALEUR}>
+	#SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}}
+	</BOUCLE_choix>
+</BOUCLE_reponses>
+
+[(#REM) datas peut être une chaine qu'on sait décomposer ]
+#SET{datas, #ENV{datas}}
+#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
+
+<BOUCLE_datas(POUR){tableau #GET{datas}}>
+[(#SET{nb,[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]})]
+<tr class="tr_liste">
+	<td class="choix">#VALEUR</td>
+	<td class="stat"[ title="(#GET{nb}|titre_nb_reponses|attribut_html)"]>#GET{nb}</td>
+</tr>
+</BOUCLE_datas>
+
+#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
+[(#GET{diff}|>{0}|oui)
+<tr class="tr_liste">
+	<td class="choix"><:saisies:vue_sans_reponse:></td>
+	<td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
+</tr>
+]
diff --git a/formidable_1_0/saisies-analyses/destinataires.html b/formidable_1_0/saisies-analyses/destinataires.html
new file mode 100644
index 0000000000000000000000000000000000000000..9692d03105e570e3acfb2d70171abd4d024d0a31
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/destinataires.html
@@ -0,0 +1,14 @@
+#SET{stats,#ARRAY}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	<BOUCLE_choix(POUR){tableau #VALEUR}>
+	#SET_MERGE{stats, #ARRAY{auteur-#VALEUR, #GET{stats}|table_valeur{auteur-#VALEUR}|sinon{0}|plus{1}}}
+	</BOUCLE_choix>
+</BOUCLE_reponses>
+
+<BOUCLE_stats(POUR){tableau #GET{stats}}>
+#SET{id_auteur, #CLE|replace{'auteur-', ''}}
+<tr class="tr_liste">
+	<td class="choix"><a href="#INFO_URL{auteur, #GET{id_auteur}}">#INFO_TITRE{auteur, #GET{id_auteur}}</a></td>
+	<td class="stat"[ title="(#VALEUR|titre_nb_reponses|attribut_html)"]>#VALEUR</td>
+</tr>
+</BOUCLE_stats>
diff --git a/formidable_1_0/saisies-analyses/explication.html b/formidable_1_0/saisies-analyses/explication.html
new file mode 100644
index 0000000000000000000000000000000000000000..703e6c027d189905341b17072f12c3232b8e01cc
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/explication.html
@@ -0,0 +1,4 @@
+<tr class="tr_liste">
+	<td class='choix' colspan='2'>[<p class='explication'>(#ENV{texte})</p>]</td>
+</tr>
+
diff --git a/formidable_1_0/saisies-analyses/oui_non.html b/formidable_1_0/saisies-analyses/oui_non.html
new file mode 100644
index 0000000000000000000000000000000000000000..51a9faf9b9aa41a7cb80a4b77bc063304502920a
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/oui_non.html
@@ -0,0 +1,27 @@
+#SET{oui,0}
+#SET{non,0}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	[(#VALEUR|oui)
+		#SET{oui,#GET{oui}|plus{1}}
+	]
+	[(#VALEUR|non)
+		#SET{non,#GET{non}|plus{1}}
+	]
+</BOUCLE_reponses>
+
+<tr class="tr_liste">
+	<td class="choix"><:item_oui:></td>
+	<td class="stat"[ title="(#GET{oui}|titre_nb_reponses|attribut_html)"]>#GET{oui}</td>
+</tr>
+<tr class="tr_liste">
+	<td class="choix"><:item_non:></td>
+	<td class="stat"[ title="(#GET{non}|titre_nb_reponses|attribut_html)"]>#GET{non}</td>
+</tr>
+
+#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
+[(#GET{diff}|>{0}|oui)
+<tr class="tr_liste">
+	<td class="choix"><:saisies:vue_sans_reponse:></td>
+	<td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
+</tr>
+]
diff --git a/formidable_1_0/saisies-analyses/radio.html b/formidable_1_0/saisies-analyses/radio.html
new file mode 100644
index 0000000000000000000000000000000000000000..e7e5dba9e25d4b153b755381dfa1578aa904e099
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/radio.html
@@ -0,0 +1,26 @@
+#SET{stats,#ARRAY}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	[(#VALEUR|oui)
+		#SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}}
+	]
+</BOUCLE_reponses>
+
+[(#REM) datas peut être une chaine qu'on sait décomposer ]
+#SET{datas, #ENV{datas}}
+#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
+
+<BOUCLE_datas(POUR){tableau #GET{datas}}>
+[(#SET{nb,[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]})]
+<tr class="tr_liste">
+	<td class="choix">#VALEUR</td>
+	<td class="stat"[ title="(#GET{nb}|titre_nb_reponses|attribut_html)"]>#GET{nb}</td>
+</tr>
+</BOUCLE_datas>
+
+#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
+[(#GET{diff}|>{0}|oui)
+<tr class="tr_liste">
+	<td class="choix"><:saisies:vue_sans_reponse:></td>
+	<td class="stat"[ title="(#GET{diff}|titre_nb_reponses|attribut_html)"]>#GET{diff}</td>
+</tr>
+]
diff --git a/formidable_1_0/saisies-analyses/selecteur_article.html b/formidable_1_0/saisies-analyses/selecteur_article.html
new file mode 100644
index 0000000000000000000000000000000000000000..35f08b42d18159b6852357e2cc751750aacc4136
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/selecteur_article.html
@@ -0,0 +1,13 @@
+[(#REM) Attention, saisie multiple non testee ]
+
+#SET{plein,#ENV{valeurs}|array_filter}
+#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}}
+
+<tr class="tr_liste row_odd vide">
+   <td class="choix"><:formidable:analyse_sans_reponse:></td>
+   <td class="stat">[(#GET{vide}|count)]</td>
+</tr>
+<tr class="tr_liste row_even plein">
+   <td class="choix"><:formidable:analyse_avec_reponse:></td>
+   <td class="stat">[(#GET{plein}|count)]</td>
+</tr>
diff --git a/formidable_1_0/saisies-analyses/selecteur_rubrique.html b/formidable_1_0/saisies-analyses/selecteur_rubrique.html
new file mode 100644
index 0000000000000000000000000000000000000000..35f08b42d18159b6852357e2cc751750aacc4136
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/selecteur_rubrique.html
@@ -0,0 +1,13 @@
+[(#REM) Attention, saisie multiple non testee ]
+
+#SET{plein,#ENV{valeurs}|array_filter}
+#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}}
+
+<tr class="tr_liste row_odd vide">
+   <td class="choix"><:formidable:analyse_sans_reponse:></td>
+   <td class="stat">[(#GET{vide}|count)]</td>
+</tr>
+<tr class="tr_liste row_even plein">
+   <td class="choix"><:formidable:analyse_avec_reponse:></td>
+   <td class="stat">[(#GET{plein}|count)]</td>
+</tr>
diff --git a/formidable_1_0/saisies-analyses/selecteur_rubrique_article.html b/formidable_1_0/saisies-analyses/selecteur_rubrique_article.html
new file mode 100644
index 0000000000000000000000000000000000000000..a8ef6aec9258df4c9785a0df1b6ba12e3539346c
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/selecteur_rubrique_article.html
@@ -0,0 +1,14 @@
+[(#REM) Peut etre ameliore en comptant par exemple le nombre d'article / rubriques 
+Attention, saisie multiple non testee ]
+
+#SET{plein,#ENV{valeurs}|array_filter}
+#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}}
+
+<tr class="tr_liste row_odd vide">
+   <td class="choix"><:formidable:analyse_sans_reponse:></td>
+   <td class="stat">[(#GET{vide}|count)]</td>
+</tr>
+<tr class="tr_liste row_even plein">
+   <td class="choix"><:formidable:analyse_avec_reponse:></td>
+   <td class="stat">[(#GET{plein}|count)]</td>
+</tr>
diff --git a/formidable_1_0/saisies-analyses/selection.html b/formidable_1_0/saisies-analyses/selection.html
new file mode 100644
index 0000000000000000000000000000000000000000..54589d337de4f662c1071fb34912f239c1a60d5c
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/selection.html
@@ -0,0 +1,25 @@
+#SET{stats,#ARRAY}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	[(#VALEUR|oui)
+		#SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}}
+	]
+</BOUCLE_reponses>
+
+[(#REM) datas peut être une chaine qu'on sait décomposer ]
+#SET{datas, #ENV{datas}}
+#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
+
+<BOUCLE_datas(POUR){tableau #GET{datas}}>
+<tr class="tr_liste">
+	<td class="choix">#VALEUR</td>
+	<td class="stat">[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]</td>
+</tr>
+</BOUCLE_datas>
+
+#SET{diff, #ENV{valeurs}|count|moins{#GET{stats}|array_sum}}
+[(#GET{diff}|>{0}|oui)
+<tr class="tr_liste">
+	<td class="choix"><:saisies:vue_sans_reponse:></td>
+	<td class="stat">#GET{diff}</td>
+</tr>
+]
diff --git a/formidable_1_0/saisies-analyses/selection_multiple.html b/formidable_1_0/saisies-analyses/selection_multiple.html
new file mode 100644
index 0000000000000000000000000000000000000000..0f1212a6d7c214dc12e27abef8cc6db47f102d72
--- /dev/null
+++ b/formidable_1_0/saisies-analyses/selection_multiple.html
@@ -0,0 +1,25 @@
+#SET{stats,#ARRAY}
+<BOUCLE_reponses(POUR){tableau #ENV{valeurs}}>
+	<BOUCLE_choix(POUR){tableau #VALEUR}>
+	#SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}}
+	</BOUCLE_choix>
+</BOUCLE_reponses>
+
+[(#REM) datas peut être une chaine qu'on sait décomposer ]
+#SET{datas, #ENV{datas}}
+#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}}
+
+<BOUCLE_datas(POUR){tableau #GET{datas}}>
+<tr class="tr_liste">
+	<td class="choix">#VALEUR</td>
+	<td class="stat">[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]</td>
+</tr>
+</BOUCLE_datas>
+
+#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}}
+[(#GET{diff}|>{0}|oui)
+<tr class="tr_liste">
+	<td class="choix"><:saisies:vue_sans_reponse:></td>
+	<td class="stat">#GET{diff}</td>
+</tr>
+]
diff --git a/formidable_1_0/saisies-vues/CVS/Entries b/formidable_1_0/saisies-vues/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..27d5c507a6d617a8cb11458492f595b42e5ed862
--- /dev/null
+++ b/formidable_1_0/saisies-vues/CVS/Entries
@@ -0,0 +1,3 @@
+/formulaire_formidable.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire_formidable_multiple.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/saisies-vues/CVS/Repository b/formidable_1_0/saisies-vues/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..e2e1915a0eaff7a2d37add2f0eee45f56dd0091b
--- /dev/null
+++ b/formidable_1_0/saisies-vues/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/saisies-vues
diff --git a/formidable_1_0/saisies-vues/CVS/Root b/formidable_1_0/saisies-vues/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/saisies-vues/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/saisies-vues/formulaire_formidable.html b/formidable_1_0/saisies-vues/formulaire_formidable.html
new file mode 100644
index 0000000000000000000000000000000000000000..a9692f86d94052546231760a9d78f18829be6caa
--- /dev/null
+++ b/formidable_1_0/saisies-vues/formulaire_formidable.html
@@ -0,0 +1,5 @@
+<BOUCLE_formulaire(FORMULAIRES){identifiant=#ENV{valeur}}>
+<p>[(#TITRE|typo)] (#IDENTIFIANT)</p>
+</BOUCLE_formulaire>
+<p><:saisies:vue_sans_reponse:></p>
+<//B_formulaire>
\ No newline at end of file
diff --git a/formidable_1_0/saisies-vues/formulaire_formidable_multiple.html b/formidable_1_0/saisies-vues/formulaire_formidable_multiple.html
new file mode 100644
index 0000000000000000000000000000000000000000..9b75a57c3654845958e06a949be0c315a46b492f
--- /dev/null
+++ b/formidable_1_0/saisies-vues/formulaire_formidable_multiple.html
@@ -0,0 +1,9 @@
+<B_formulaire>
+<ul>
+	<BOUCLE_formulaire(FORMULAIRES){identifiant IN #ENV**{valeur}}>
+	<li class="choix">[(#TITRE|typo)] (#IDENTIFIANT)</li>
+	</BOUCLE_formulaire>
+</ul>
+</B_formulaire>
+<p><:saisies:vue_sans_reponse:></p>
+<//B_formulaire>
\ No newline at end of file
diff --git a/formidable_1_0/saisies/CVS/Entries b/formidable_1_0/saisies/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..8d06e2d04c65b89c0418224b7e89d5b2d8e7d6d0
--- /dev/null
+++ b/formidable_1_0/saisies/CVS/Entries
@@ -0,0 +1,4 @@
+/champ.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire_formidable.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/formulaire_formidable_multiple.html/1.1.1.1/Mon Dec  3 09:03:16 2012//
+D
diff --git a/formidable_1_0/saisies/CVS/Repository b/formidable_1_0/saisies/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..1ad5aeb311aa7efcf59049f0d59a7ff59bde8506
--- /dev/null
+++ b/formidable_1_0/saisies/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/saisies
diff --git a/formidable_1_0/saisies/CVS/Root b/formidable_1_0/saisies/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/saisies/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/saisies/champ.html b/formidable_1_0/saisies/champ.html
new file mode 100644
index 0000000000000000000000000000000000000000..d2ad8d8a6fbc40212d776f59c183ad338d5ed509
--- /dev/null
+++ b/formidable_1_0/saisies/champ.html
@@ -0,0 +1,28 @@
+
+<select name="#ENV{nom}" id="champ_#ENV{nom}">
+	<option value=""><:formidable:traitements_champ_aucun:></option>
+	[(#ENV{forcer_type}|non)
+		#SET{tab,#ENV{formulaire}}
+	]
+	[(#ENV{forcer_type}|oui)
+		[(#SET{tab,[(#ENV{formulaire}|saisies_lister_par_nom{0})]})]
+	]
+	#SET{padding,0}
+	<BOUCLE_parcours(POUR){tableau #GET{tab}}>
+		#SET{saisie,#VALEUR}
+		<BOUCLE_test_enfants(CONDITION){si #GET{saisie}|table_valeur{saisies}|is_array}>
+		<optgroup style="padding-left:#GET{padding}px" label="[(#GET{saisie}|table_valeur{options}|table_valeur{label}|sinon{#GET{saisie}|table_valeur{options}|table_valeur{nom}})]">
+				#SET{tab,#GET{saisie}|table_valeur{saisies}}
+				#SET{padding,#GET{padding}|plus{20}}
+				<BOUCLE_parcours_recursif(BOUCLE_parcours)/>
+				#SET{padding,#GET{padding}|moins{20}}
+		</optgroup>
+		</BOUCLE_test_enfants>
+			<BOUCLE_test_type(CONDITION){si #ENV{forcer_type}|non|ou{#GET{saisie}|table_valeur{saisie}|in_array{#ENV{forcer_type}}}}>
+			<option value="[(#GET{saisie}|table_valeur{options}|table_valeur{nom})]" style="padding-left:#GET{padding}px" [(#ENV{valeur,#ENV{saisie_a_positionner}}|=={#GET{saisie}|table_valeur{options}|table_valeur{nom}}|oui)selected="selected"]>
+				[(#GET{saisie}|table_valeur{options}|table_valeur{label}|sinon{#GET{saisie}|table_valeur{options}|table_valeur{nom}})]
+			</option>
+			</BOUCLE_test_type>
+		<//B_test_enfants>
+	</BOUCLE_parcours>
+</select>
diff --git a/formidable_1_0/saisies/formulaire_formidable.html b/formidable_1_0/saisies/formulaire_formidable.html
new file mode 100644
index 0000000000000000000000000000000000000000..e8d8bb4c1204991da452287b47e367c7cd5664ca
--- /dev/null
+++ b/formidable_1_0/saisies/formulaire_formidable.html
@@ -0,0 +1,22 @@
+[(#REM) 
+  Saisie permettant de sélectionner un formulaire par son identifiant
+  
+  ### /!\ boucle POUR (spip Bonux) ###
+	
+  Parametres :
+  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
+  - cacher_option_intro : pas de premier option vide  (defaut:"")
+  - class : classe(s) css ajoutes au select
+  
+  Exemple d'appel :
+	[(#SAISIE{formulaire_formidable,nom,
+		label=<:plugin:label:>,
+	})] 
+]
+
+<select name="#ENV{nom}" id="champ_#ENV{nom}"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"]>
+[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
+<BOUCLE_selection(FORMULAIRES){par titre}>
+	<option value="#IDENTIFIANT" [(#IDENTIFIANT|=={#ENV{valeur,#ENV{defaut}}}|oui) selected="selected"]>[(#TITRE|typo)] (#IDENTIFIANT)</option>
+</BOUCLE_selection>
+</select>
diff --git a/formidable_1_0/saisies/formulaire_formidable_multiple.html b/formidable_1_0/saisies/formulaire_formidable_multiple.html
new file mode 100644
index 0000000000000000000000000000000000000000..b8ef7aaac4868b1e36161b4a6e2036612c42271a
--- /dev/null
+++ b/formidable_1_0/saisies/formulaire_formidable_multiple.html
@@ -0,0 +1,26 @@
+[(#REM) 
+  Saisie permettant de sélectionner plusieurs formulaires par leur identifiant
+  
+  ### /!\ boucle POUR (spip Bonux) ###
+	
+  Parametres :
+  - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"")
+  - cacher_option_intro : pas de premier option vide  (defaut:"")
+  - class : classe(s) css ajoutes au select
+  
+  Exemple d'appel :
+	[(#SAISIE{formulaire_formidable_multiple,nom,
+		label=<:plugin:label:>,
+	})] 
+]
+
+[(#REM) defaut peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ]
+#SET{defaut, #ENV{defaut}}
+#SET{defaut, #GET{defaut}|is_string|?{(#GET{defaut}|saisies_chaine2tableau), (#GET{defaut}|sinon{#ARRAY})}}
+
+<select name="#ENV{nom}[]" id="champ_#ENV{nom}" multiple="multiple"[ class="(#ENV{class})"][ disabled="(#ENV{disable})"][ readonly="(#ENV{readonly})"]>
+[(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
+<BOUCLE_selection(FORMULAIRES){par titre}>
+	<option value="#IDENTIFIANT" [(#IDENTIFIANT|in_array{#ENV{valeur,#GET{defaut}}}|oui) selected="selected"]>[(#TITRE|typo)] (#IDENTIFIANT)</option>
+</BOUCLE_selection>
+</select>
diff --git a/formidable_1_0/svn.revision b/formidable_1_0/svn.revision
new file mode 100644
index 0000000000000000000000000000000000000000..0a9ded3a459787587522281efff7c57a0bffc864
--- /dev/null
+++ b/formidable_1_0/svn.revision
@@ -0,0 +1,10 @@
+<svn_revision>
+<text_version>
+Origine: file:///home/svn/repository/spip-zone/_plugins_/formidable/trunk
+Revision: 66722
+Dernier commit: 2012-10-12 11:00:03 +0200 
+</text_version>
+<origine>file:///home/svn/repository/spip-zone/_plugins_/formidable/trunk</origine>
+<revision>66722</revision>
+<commit>2012-10-12 11:00:03 +0200 </commit>
+</svn_revision>
\ No newline at end of file
diff --git a/formidable_1_0/todo.txt b/formidable_1_0/todo.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c857bbec9c562a8fde1d8be6d5c91a9197b26ca1
--- /dev/null
+++ b/formidable_1_0/todo.txt
@@ -0,0 +1,19 @@
+
+À faire :
+---------
++ Ajouter des liens "réponse précédente/suivante" dans la visualisation d'une réponse
++ Afficher une boite listant les formulaires disponibles dans l'édition d'un article
++ Afficher des saisies en javascript suivant des conditions
++ Utiliser le plugin CVT multi-pages de Cédric
++ Afficher des pages suivant des conditions (scénarios)
++ Pouvoir attacher des fichiers (et donc les envoyer par mail et les enregistrer en base comme document)
++ Déplacer les saisies en drag-n-drop
++ Ajouter une saisie directement au bon endroit en drag-n-drop
++ Améliorer le texte brut généré à partir du HTML
+
+Idées :
+-------
++ Permettre des messages différents lors de la réédition d'un formulaire (avant et après modification)
++ Permettre de prévisualiser avant soumission le formulaire
++ Premettre d'afficher un formulaire en fonction du statut du visiteur
++ Avoir lors de l'édition des champs du formulaire un bouton «Enregistrer et continuer d'éditer»
diff --git a/formidable_1_0/traiter/CVS/Entries b/formidable_1_0/traiter/CVS/Entries
new file mode 100644
index 0000000000000000000000000000000000000000..a6a08c95277471c66c92896d4436b2c0a41e1957
--- /dev/null
+++ b/formidable_1_0/traiter/CVS/Entries
@@ -0,0 +1,5 @@
+/email.php/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/email.yaml/1.1.1.1/Mon Dec  3 09:03:16 2012//
+/enregistrement.php/1.2/Mon Dec  3 14:11:06 2012//
+/enregistrement.yaml/1.2/Mon Dec  3 14:11:06 2012//
+D
diff --git a/formidable_1_0/traiter/CVS/Repository b/formidable_1_0/traiter/CVS/Repository
new file mode 100644
index 0000000000000000000000000000000000000000..939e16ee94b3c8efe27bec7671943d8629065353
--- /dev/null
+++ b/formidable_1_0/traiter/CVS/Repository
@@ -0,0 +1 @@
+formidable-spip-3/traiter
diff --git a/formidable_1_0/traiter/CVS/Root b/formidable_1_0/traiter/CVS/Root
new file mode 100644
index 0000000000000000000000000000000000000000..71e2ccb961f2980d662b53843d78e93737942b97
--- /dev/null
+++ b/formidable_1_0/traiter/CVS/Root
@@ -0,0 +1 @@
+/cvsroot
diff --git a/formidable_1_0/traiter/email.php b/formidable_1_0/traiter/email.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7a60e4728f33da2633c22da0c8ea50bcdda8402
--- /dev/null
+++ b/formidable_1_0/traiter/email.php
@@ -0,0 +1,193 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function traiter_email_dist($args, $retours){
+	$formulaire = $args['formulaire'];
+	$options = $args['options'];
+	$saisies = unserialize($formulaire['saisies']);
+	$traitements = unserialize($formulaire['traitements']);
+	$champs = saisies_lister_champs($saisies);
+	
+	// On récupère les destinataires
+	if ($options['champ_destinataires']){
+		$destinataires = _request($options['champ_destinataires']);
+		if (!is_array($destinataires) and intval($destinataires)){
+			$destinataires = array($destinataires);
+		}
+		if (is_array($destinataires)){
+			// On récupère les mails des destinataires
+			$destinataires = array_map('intval', $destinataires);
+			$destinataires = sql_allfetsel(
+				'email',
+				'spip_auteurs',
+				sql_in('id_auteur', $destinataires)
+			);
+			$destinataires = array_map('reset', $destinataires);
+		}
+	}
+	if (!$destinataires)
+		$destinataires = array();
+	
+	// On ajoute les destinataires en plus
+	if ($options['destinataires_plus']){
+		$destinataires_plus = explode(',', $options['destinataires_plus']);
+		$destinataires_plus = array_map('trim', $destinataires_plus);
+		$destinataires = array_merge($destinataires, $destinataires_plus);
+		$destinataires = array_unique($destinataires);
+	}
+	
+	// On récupère le courriel de l'envoyeur s'il existe
+	if ($options['champ_courriel']){
+		$courriel_envoyeur = _request($options['champ_courriel']);
+	}
+	if (!$courriel_envoyeur) $courriel_envoyeur = '';
+	
+	// Si on a bien des destinataires, on peut continuer
+	if ($destinataires or ($courriel_envoyeur and $options['activer_accuse'])){
+		include_spip('inc/filtres');
+		include_spip('inc/texte');
+		
+		$nom_site_spip = supprimer_tags(typo($GLOBALS['meta']['nom_site']));
+		
+		// On parcourt les champs pour générer le tableau des valeurs
+		$valeurs = array();
+		foreach ($champs as $champ){
+			$valeurs[$champ] = _request($champ);
+		}
+		
+		// On récupère le nom de l'envoyeur
+		if ($options['champ_nom']){
+			$a_remplacer = array();
+			if (preg_match_all('/@[\w]+@/', $options['champ_nom'], $a_remplacer)){
+				$a_remplacer = $a_remplacer[0];
+				foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
+				$a_remplacer = array_flip($a_remplacer);
+				$a_remplacer = array_intersect_key($valeurs, $a_remplacer);
+				$a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
+			}
+			$nom_envoyeur = trim(_L($options['champ_nom'], $a_remplacer));
+		}
+		if (!$nom_envoyeur) $nom_envoyeur = $GLOBALS['meta']['nom_site'];
+		
+		// On récupère le sujet s'il existe sinon on le construit
+		if ($options['champ_sujet']){
+			$a_remplacer = array();
+			if (preg_match_all('/@[\w]+@/', $options['champ_sujet'], $a_remplacer)){
+				$a_remplacer = $a_remplacer[0];
+				foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
+				$a_remplacer = array_flip($a_remplacer);
+				$a_remplacer = array_intersect_key($valeurs, $a_remplacer);
+				$a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
+			}
+			$sujet = trim(_L($options['champ_sujet'], $a_remplacer));
+		}
+		if (!$sujet) $sujet = _T('formidable:traiter_email_sujet', array('nom'=>$nom_envoyeur));
+		$sujet = filtrer_entites($sujet);
+		
+		// Mais quel va donc être le fond ?
+		if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_email.html'))
+			$notification = 'notifications/formulaire_'.$formulaire['identifiant'].'_email';
+		else
+			$notification = 'notifications/formulaire_email';
+		
+		// On génère le mail avec le fond
+		$html = recuperer_fond(
+			$notification,
+			array(
+				'id_formulaire' => $formulaire['id_formulaire'],
+				'titre' => _T_ou_typo($formulaire['titre']),
+				'traitements' => $traitements,
+				'saisies' => $saisies,
+				'valeurs' => $valeurs
+			)
+		);
+		
+		// On génère le texte brut
+		include_spip('classes/facteur');
+		$texte = Facteur::html2text($html);
+		
+		// On utilise la forme avancé de Facteur
+		$corps = array(
+			'html' => $html,
+			'texte' => $texte,
+			'nom_envoyeur' => $nom_envoyeur
+		);
+		// Si l'utilisateur n'a pas indiqué autrement, on met le courriel de l'envoyeur dans
+		// Reply-To et on laisse le from par defaut de Facteur car sinon ca bloque sur les
+		// SMTP un peu restrictifs.
+		$courriel_from = "";
+		if ($courriel_envoyeur && $options['activer_vrai_envoyeur']){
+			$courriel_from = $courriel_envoyeur;
+		} else if ($courriel_envoyeur) {
+			$corps['repondre_a'] = $courriel_envoyeur;
+		}
+		
+		// On envoie enfin le message
+		$envoyer_mail = charger_fonction('envoyer_mail','inc');
+		
+		// On envoie aux destinataires
+		if ($destinataires)
+			$ok = $envoyer_mail($destinataires, $sujet, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']);
+		
+		// Si c'est bon, on envoie l'accusé de réception
+		if ($ok and $courriel_envoyeur and $options['activer_accuse']){
+			// On récupère le sujet s'il existe sinon on le construit
+			if ($options['sujet_accuse']){
+				$a_remplacer = array();
+				if (preg_match_all('/@[\w]+@/', $options['sujet_accuse'], $a_remplacer)){
+					$a_remplacer = $a_remplacer[0];
+					foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@');
+					$a_remplacer = array_flip($a_remplacer);
+					$a_remplacer = array_intersect_key($valeurs, $a_remplacer);
+					$a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip));
+				}
+				$sujet_accuse = trim(_L($options['sujet_accuse'], $a_remplacer));
+			}
+			if (!$sujet_accuse) $sujet_accuse = _T('formidable:traiter_email_sujet_accuse');
+			$sujet_accuse = filtrer_entites($sujet_accuse);
+			
+			// Mais quel va donc être le fond ?
+			if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_accuse.html'))
+				$accuse = 'notifications/formulaire_'.$formulaire['identifiant'].'_accuse';
+			else
+				$accuse = 'notifications/formulaire_accuse';
+				
+			// On génère l'accusé de réception
+			$html_accuse = recuperer_fond(
+				$accuse,
+				array(
+					'id_formulaire' => $formulaire['id_formulaire'],
+					'titre' => _T_ou_typo($formulaire['titre']),
+					'message_retour' => $formulaire['message_retour'],
+					'traitements' => $traitements,
+					'saisies' => $saisies,
+					'valeurs' => $valeurs
+				)
+			);
+			
+			// On génère le texte brut
+			$texte = Facteur::html2text($html_accuse);
+			
+			$corps = array(
+				'html' => $html_accuse,
+				'texte' => $texte,
+				'nom_envoyeur' => $nom_site_spip
+			);
+
+			$ok = $envoyer_mail($courriel_envoyeur, $sujet_accuse, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']);
+		}
+		
+		if ($ok){
+			$retours['message_ok'] .= "\n<br/>"._T('formidable:traiter_email_message_ok');
+		}
+		else{
+			$retours['message_erreur'] .= "\n<br/>"._T('formidable:traiter_email_message_erreur');
+		}
+	}
+	
+	return $retours;
+}
+
+?>
diff --git a/formidable_1_0/traiter/email.yaml b/formidable_1_0/traiter/email.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..4f5b4d7f842c83230d3700e1b7a59ce6adbe4552
--- /dev/null
+++ b/formidable_1_0/traiter/email.yaml
@@ -0,0 +1,57 @@
+
+titre: '<:formidable:traiter_email_titre:>'
+description: '<:formidable:traiter_email_description:>'
+options:
+  -
+    saisie: 'champ'
+    options:
+      nom: 'champ_destinataires'
+      label: '<:formidable:traiter_email_option_destinataires_label:>'
+      explication: '<:formidable:traiter_email_option_destinataires_explication:>'
+      forcer_type: [destinataires,hidden]
+      env: true
+  -
+    saisie: 'input'
+    options:
+      nom: 'destinataires_plus'
+      label: '<:formidable:traiter_email_option_destinataires_plus_label:>'
+      explication: '<:formidable:traiter_email_option_destinataires_plus_explication:>'
+    verifier:
+      type: 'email'
+  -
+    saisie: 'champ'
+    options:
+      nom: 'champ_courriel'
+      label: '<:formidable:traiter_email_option_envoyeur_courriel_label:>'
+      explication: '<:formidable:traiter_email_option_envoyeur_courriel_explication:>'
+      env: true
+  -
+    saisie: 'case'
+    options:
+      nom: 'activer_vrai_envoyeur'
+      label: '<:formidable:traiter_email_option_vrai_envoyeur_label:>'
+      explication: '<:formidable:traiter_email_option_vrai_envoyeur_explication:>'
+  -
+    saisie: 'input'
+    options:
+      nom: 'champ_nom'
+      label: '<:formidable:traiter_email_option_envoyeur_nom_label:>'
+      explication: '<:formidable:traiter_email_option_envoyeur_nom_explication:>'
+  -
+    saisie: 'input'
+    options:
+      nom: 'champ_sujet'
+      label: '<:formidable:traiter_email_option_sujet_label:>'
+      explication: '<:formidable:traiter_email_option_sujet_explication:>'
+  -
+    saisie: 'case'
+    options:
+      nom: 'activer_accuse'
+      label: '<:formidable:traiter_email_option_activer_accuse_label:>'
+      label_case: '<:formidable:traiter_email_option_activer_accuse_label_case:>'
+  -
+    saisie: 'input'
+    options:
+      nom: 'sujet_accuse'
+      label: '<:formidable:traiter_email_option_sujet_accuse_label:>'
+      explication: '<:formidable:traiter_email_option_sujet_explication:>'
diff --git a/formidable_1_0/traiter/enregistrement.php b/formidable_1_0/traiter/enregistrement.php
new file mode 100644
index 0000000000000000000000000000000000000000..b89e8e1585a14be31bd961d10af562eeee704740
--- /dev/null
+++ b/formidable_1_0/traiter/enregistrement.php
@@ -0,0 +1,138 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function traiter_enregistrement_dist($args, $retours){
+	include_spip('inc/formidable');
+	include_spip('base/abstract_sql');
+	$options = $args['options'];
+	$formulaire = $args['formulaire'];
+	$id_formulaire = intval($formulaire['id_formulaire']);
+	$saisies = unserialize($formulaire['saisies']);
+	$saisies = saisies_lister_par_nom($saisies);
+	
+	// La personne a-t-elle un compte ?
+	global $auteur_session;
+	$id_auteur = $auteur_session ? intval($auteur_session['id_auteur']) : 0;
+	
+    // traitement de l'anonymisation
+    if ($options['anonymiser'] == 'on') {
+        // mod de l'id_auteur
+        $variables_anonymisation =
+                $GLOBALS['formulaires']['variables_anonymisation'][$options['anonymiser_variable']];
+        $id = eval("return $variables_anonymisation;");
+        $id_auteur = formidable_scramble($id);
+    }
+
+	// On cherche le cookie et sinon on le crée
+	$nom_cookie = formidable_generer_nom_cookie($id_formulaire);
+	if (isset($_COOKIE[$nom_cookie]))
+		$cookie = $_COOKIE[$nom_cookie];
+	else {
+		include_spip("inc/acces");
+		$cookie = creer_uniqid();
+	}
+	
+	// On regarde si c'est une modif d'une réponse existante
+	$id_formulaires_reponse = intval(_request('deja_enregistre_'.$id_formulaire));
+	
+	// Si la moderation est a posteriori ou que la personne est un boss, on publie direct
+	if ($options['moderation'] == 'posteriori' or autoriser('instituer', 'formulaires_reponse', $id_formulaires_reponse, null, array('id_formulaire'=>$id_formulaire, 'nouveau_statut'=>'publie')))
+		$statut='publie';
+	else
+		$statut = 'prop';
+	
+	// Si ce n'est pas une modif d'une réponse existante, on crée d'abord la réponse
+	if (!$id_formulaires_reponse){
+		$id_formulaires_reponse = sql_insertq(
+			'spip_formulaires_reponses',
+			array(
+				'id_formulaire' => $id_formulaire,
+				'id_auteur' => $id_auteur,
+				'cookie' => $cookie,
+				'ip' => $GLOBALS['ip'],
+				'date' => 'NOW()',
+				'statut' => $statut
+			)
+		);
+		// Si on a pas le droit de répondre plusieurs fois ou que les réponses seront modifiables, il faut poser un cookie
+		if (!$options['multiple'] or $options['modifiable']){
+			include_spip("inc/cookie");
+			// Expiration dans 30 jours
+			spip_setcookie($nom_cookie, $_COOKIE[$nom_cookie] = $cookie, time() + 30 * 24 * 3600);
+		}
+	}
+	
+	// Si l'id n'a pas été créé correctement alors erreur
+	if (!($id_formulaires_reponse > 0)){
+		$retours['message_erreur'] .= "\n<br/>"._T('formidable:traiter_enregistrement_erreur_base');
+	}
+	// Sinon on continue à mettre à jour
+	else{
+		$champs = array();
+		$insertions = array();
+		foreach($saisies as $nom => $saisie){
+			// On ne prend que les champs qui ont effectivement été envoyés par le formulaire
+			if (($valeur = _request($nom)) !== null){
+				$champs[] = $nom;
+				$insertions[] = array(
+					'id_formulaires_reponse' => $id_formulaires_reponse,
+					'nom' => $nom,
+					'valeur' => is_array($valeur) ? serialize($valeur) : $valeur
+				);
+			}
+		}
+		
+		// S'il y a bien des choses à modifier
+		if ($champs){
+			// On supprime d'abord les champs
+			sql_delete(
+				'spip_formulaires_reponses_champs',
+				array(
+					'id_formulaires_reponse = '.$id_formulaires_reponse,
+					sql_in('nom', $champs)
+				)
+			);
+			
+			// Puis on insère les nouvelles valeurs
+			sql_insertq_multi(
+				'spip_formulaires_reponses_champs',
+				$insertions
+			);
+		}
+	}
+	
+	return $retours;
+}
+
+function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles){
+	include_spip('inc/saisies');
+	include_spip('base/abstract_sql');
+	$comparaison = saisies_comparer($saisies_anciennes, $saisies_nouvelles);
+	
+	// Si des champs ont été supprimés, il faut supprimer les réponses à ces champs
+	if ($comparaison['supprimees']){
+		// On récupère les réponses du formulaire
+		$reponses = sql_allfetsel(
+			'id_formulaires_reponse',
+			'spip_formulaires_reponses',
+			'id_formulaire = '.$id_formulaire
+		);
+		$reponses = array_map('reset', $reponses);
+		
+		// Tous les noms de champs à supprimer
+		$noms = array_keys($comparaison['supprimees']);
+		
+		// On supprime
+		sql_delete(
+			'spip_formulaires_reponses_champs',
+			array(
+				sql_in('id_formulaires_reponse', $reponses),
+				sql_in('nom', $noms)
+			)
+		);
+	}
+}
+
+?>
diff --git a/formidable_1_0/traiter/enregistrement.yaml b/formidable_1_0/traiter/enregistrement.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..41c9ced81d11b7ff95abf4ff9452d69633417214
--- /dev/null
+++ b/formidable_1_0/traiter/enregistrement.yaml
@@ -0,0 +1,55 @@
+
+titre: '<:formidable:traiter_enregistrement_titre:>'
+description: '<:formidable:traiter_enregistrement_description:>'
+options:
+  -
+    saisie: 'oui_non'
+    options:
+      nom: 'multiple'
+      label: '<:formidable:traiter_enregistrement_option_multiple_label:>'
+      explication: '<:formidable:traiter_enregistrement_option_multiple_explication:>'
+      defaut: 'on'
+  -
+    saisie: 'oui_non'
+    options:
+      nom: 'modifiable'
+      label: '<:formidable:traiter_enregistrement_option_modifiable_label:>'
+      explication: '<:formidable:traiter_enregistrement_option_modifiable_explication:>'
+      defaut: ''
+  -
+    saisie: 'radio'
+    options:
+      nom: 'identification'
+      label: '<:formidable:traiter_enregistrement_option_identification_label:>'
+      explication: '<:formidable:traiter_enregistrement_option_identification_explication:>'
+      datas:
+        cookie: '<:formidable:identification_par_cookie:>'
+        id_auteur: '<:formidable:identification_par_id_auteur:>'
+      defaut: 'cookie'
+  -
+    saisie: 'oui_non'
+    options:
+      nom: 'anonymiser'
+      label: '<:formidable:traiter_enregistrement_option_anonymiser_label:>'
+      explication: '<:formidable:traiter_enregistrement_option_anonymiser_explication:>'
+      defaut: ''
+  -
+    saisie: 'selection'
+    options:
+      option_intro: '<:formidable:traiter_enregistrement_option_choix_select_label:>'
+      nom: 'anonymiser_variable'
+      label: '<:formidable:traiter_enregistrement_option_anonymiser_variable_label:>'
+      explication: '<:formidable:traiter_enregistrement_option_anonymiser_variable_explication:>'
+      datas:
+        remote_user: "Variable serveur : REMOTE_USER"
+        php_auth_user: "Variable serveur : PHP_AUTH_USER"
+      defaut: ''
+  -
+    saisie: 'radio'
+    options:
+      nom: 'moderation'
+      label: '<:formidable:traiter_enregistrement_option_moderation_label:>'
+      datas:
+        posteriori: '<:forum:bouton_radio_modere_posteriori:>'
+        priori: '<:forum:bouton_radio_modere_priori:>'
+      defaut: 'posteriori'