From 5b1c5c6545553b266517a49d713f604117b506ea Mon Sep 17 00:00:00 2001 From: "camille.sauvage@espci.fr" <> Date: Tue, 19 Mar 2013 15:52:52 +0000 Subject: [PATCH] --- .gitattributes | 363 ++++++ formidable.diff | 666 ++++++++++ .../action/dupliquer_formulaire.php | 60 + .../action/editer_formulaire.php | 98 ++ .../action/exporter_formulaire.php | 24 + .../action/exporter_formulaires_reponses.php | 85 ++ .../action/instituer_formulaires_reponse.php | 34 + .../action/supprimer_formulaire.php | 61 + .../action/supprimer_formulaires_reponse.php | 50 + .../base/formidable_tables.php | 187 +++ .../css/formidable_analyse.css.html | 90 ++ .../echanger/formulaire/forms.php | 175 +++ .../echanger/formulaire/wcs.php | 175 +++ .../echanger/formulaire/yaml.php | 80 ++ .../exec/puce_statut_formulaires.php | 57 + .../formidable_administrations.php | 67 + .../formidable_autorisations.php | 160 +++ formidable_1_0.orig/formidable_fonctions.php | 10 + formidable_1_0.orig/formidable_options.php | 107 ++ formidable_1_0.orig/formidable_pipelines.php | 35 + .../configurer_formidable_analyse.html | 20 + .../formulaires/editer_formulaire.html | 23 + .../formulaires/editer_formulaire.php | 75 ++ .../formulaires/editer_formulaire_champs.html | 39 + .../formulaires/editer_formulaire_champs.php | 113 ++ .../editer_formulaire_traitements.html | 41 + .../editer_formulaire_traitements.php | 114 ++ .../formulaires/formidable.html | 41 + .../formulaires/formidable.php | 287 +++++ .../formulaires/importer_formulaire.html | 30 + .../formulaires/importer_formulaire.php | 53 + .../icones_barre/formulaire.png | Bin 0 -> 688 bytes formidable_1_0.orig/images/formidable-128.png | Bin 0 -> 12158 bytes formidable_1_0.orig/images/formidable-24.png | Bin 0 -> 1357 bytes formidable_1_0.orig/images/formidable-64.png | Bin 0 -> 5234 bytes formidable_1_0.orig/images/formidable.svg | 1104 +++++++++++++++++ formidable_1_0.orig/images/formulaire-24.png | Bin 0 -> 843 bytes .../images/formulaire-action-ajouter.png | Bin 0 -> 629 bytes .../images/formulaire-analyse-24.png | Bin 0 -> 1176 bytes .../images/formulaire-config-champs-24.png | Bin 0 -> 979 bytes .../formulaire-config-traitements-24.png | Bin 0 -> 1393 bytes .../images/formulaire-dupliquer-24.png | Bin 0 -> 1300 bytes .../images/formulaire-editer-24.png | Bin 0 -> 1097 bytes .../images/formulaire-exporter-24.png | Bin 0 -> 1127 bytes .../images/formulaire-nouveau-48.png | Bin 0 -> 2443 bytes .../images/formulaire-reponse-24.png | Bin 0 -> 667 bytes .../formulaire-reponse-supprimer-24.png | Bin 0 -> 1190 bytes .../images/formulaire-reponses-24.png | Bin 0 -> 1108 bytes .../formulaire-reponses-exporter-24.png | Bin 0 -> 1213 bytes .../images/formulaire-supprimer-24.png | Bin 0 -> 1387 bytes formidable_1_0.orig/inc/formidable.php | 226 ++++ formidable_1_0.orig/lang/formidable.xml | 12 + formidable_1_0.orig/lang/formidable_de.php | 161 +++ formidable_1_0.orig/lang/formidable_en.php | 161 +++ formidable_1_0.orig/lang/formidable_fr.php | 159 +++ formidable_1_0.orig/lang/formidable_it.php | 161 +++ formidable_1_0.orig/lang/formidable_sk.php | 161 +++ formidable_1_0.orig/lang/formulaire_fr.php | 18 + .../lang/formulaires_reponse_fr.php | 27 + .../lang/paquet-formidable_fr.php | 19 + .../modeles/formulaire_aide_memoire.html | 17 + .../modeles/formulaire_analyse.html | 65 + .../modeles/formulaire_formidable.yaml | 20 + .../modeles/formulaires_reponse.html | 12 + .../noisettes/formulaire_formidable.html | 2 + .../noisettes/formulaire_formidable.yaml | 15 + .../notifications/formulaire_accuse.html | 7 + .../notifications/formulaire_email.html | 18 + formidable_1_0.orig/paquet.xml | 35 + .../prive/objets/contenu/formulaire.html | 6 + .../objets/contenu/formulaires_reponse.html | 27 + .../prive/objets/infos/formulaire.html | 6 + .../objets/infos/formulaires_reponse.html | 8 + .../prive/objets/liste/formulaires.html | 45 + .../objets/liste/formulaires_reponses.html | 48 + .../contenu/configurer_formidable.html | 7 + .../prive/squelettes/contenu/formulaire.html | 35 + .../squelettes/contenu/formulaire_edit.html | 38 + .../prive/squelettes/contenu/formulaires.html | 13 + .../contenu/formulaires_analyse.html | 24 + .../contenu/formulaires_reponse.html | 24 + .../contenu/formulaires_reponses.html | 15 + .../prive/squelettes/extra/formulaire.html | 19 + .../squelettes/extra/formulaire_edit.html | 9 + .../extra/formulaires_reponses.html | 8 + .../squelettes/hierarchie/formulaire.html | 5 + .../hierarchie/formulaire_edit.html | 5 + .../squelettes/hierarchie/formulaires.html | 2 + .../hierarchie/formulaires_analyse.html | 7 + .../hierarchie/formulaires_reponse.html | 6 + .../hierarchie/formulaires_reponses.html | 5 + .../squelettes/navigation/formulaire.html | 42 + .../navigation/formulaire_edit.html | 22 + .../squelettes/navigation/formulaires.html | 5 + .../navigation/formulaires_analyse.html | 12 + .../navigation/formulaires_reponse.html | 15 + .../navigation/formulaires_reponses.html | 12 + .../prive/style_prive_plugin_formidable.html | 32 + .../themes/basic/images/formulaire-16.png | Bin 0 -> 742 bytes .../themes/spip/images/formulaire-16.png | Bin 0 -> 742 bytes .../themes/spip/images/formulaire-24.png | Bin 0 -> 843 bytes .../spip/images/formulaires_reponse-24.png | Bin 0 -> 1108 bytes .../public/formidable_criteres.php | 64 + .../puce_statut/formulaires_reponse.php | 92 ++ .../saisies-analyses/_base.html | 32 + .../saisies-analyses/case.html | 27 + .../saisies-analyses/checkbox.html | 26 + .../saisies-analyses/destinataires.html | 14 + .../saisies-analyses/explication.html | 4 + .../saisies-analyses/oui_non.html | 27 + .../saisies-analyses/radio.html | 26 + .../saisies-analyses/selecteur_article.html | 13 + .../saisies-analyses/selecteur_rubrique.html | 13 + .../selecteur_rubrique_article.html | 14 + .../saisies-analyses/selection.html | 25 + .../saisies-analyses/selection_multiple.html | 25 + .../saisies-vues/formulaire_formidable.html | 5 + .../formulaire_formidable_multiple.html | 9 + formidable_1_0.orig/saisies/champ.html | 28 + .../saisies/formulaire_formidable.html | 22 + .../formulaire_formidable_multiple.html | 26 + formidable_1_0.orig/svn.revision | 10 + formidable_1_0.orig/todo.txt | 19 + formidable_1_0.orig/traiter/email.php | 193 +++ formidable_1_0.orig/traiter/email.yaml | 57 + .../traiter/enregistrement.php | 129 ++ .../traiter/enregistrement.yaml | 37 + formidable_1_0/CVS/Entries | 28 + formidable_1_0/CVS/Repository | 1 + formidable_1_0/CVS/Root | 1 + formidable_1_0/action/CVS/Entries | 9 + formidable_1_0/action/CVS/Repository | 1 + formidable_1_0/action/CVS/Root | 1 + .../action/dupliquer_formulaire.php | 60 + formidable_1_0/action/editer_formulaire.php | 98 ++ .../action/exporter_analyse_reponses.php | 103 ++ formidable_1_0/action/exporter_formulaire.php | 24 + .../action/exporter_formulaires_reponses.php | 85 ++ .../action/instituer_formulaires_reponse.php | 34 + .../action/supprimer_formulaire.php | 61 + .../action/supprimer_formulaires_reponse.php | 50 + formidable_1_0/base/CVS/Entries | 2 + formidable_1_0/base/CVS/Repository | 1 + formidable_1_0/base/CVS/Root | 1 + formidable_1_0/base/formidable_tables.php | 187 +++ formidable_1_0/css/CVS/Entries | 2 + formidable_1_0/css/CVS/Repository | 1 + formidable_1_0/css/CVS/Root | 1 + .../css/formidable_analyse.css.html | 90 ++ formidable_1_0/echanger/CVS/Entries | 1 + formidable_1_0/echanger/CVS/Repository | 1 + formidable_1_0/echanger/CVS/Root | 1 + .../echanger/formulaire/CVS/Entries | 4 + .../echanger/formulaire/CVS/Repository | 1 + formidable_1_0/echanger/formulaire/CVS/Root | 1 + formidable_1_0/echanger/formulaire/forms.php | 175 +++ formidable_1_0/echanger/formulaire/wcs.php | 175 +++ formidable_1_0/echanger/formulaire/yaml.php | 80 ++ formidable_1_0/exec/CVS/Entries | 2 + formidable_1_0/exec/CVS/Repository | 1 + formidable_1_0/exec/CVS/Root | 1 + .../exec/puce_statut_formulaires.php | 57 + formidable_1_0/formidable_administrations.php | 67 + formidable_1_0/formidable_autorisations.php | 162 +++ formidable_1_0/formidable_fonctions.php | 10 + formidable_1_0/formidable_options.php | 118 ++ formidable_1_0/formidable_pipelines.php | 35 + formidable_1_0/formulaires/CVS/Entries | 12 + formidable_1_0/formulaires/CVS/Repository | 1 + formidable_1_0/formulaires/CVS/Root | 1 + .../configurer_formidable_analyse.html | 20 + .../formulaires/editer_formulaire.html | 23 + .../formulaires/editer_formulaire.php | 75 ++ .../formulaires/editer_formulaire_champs.html | 39 + .../formulaires/editer_formulaire_champs.php | 113 ++ .../editer_formulaire_traitements.html | 41 + .../editer_formulaire_traitements.php | 114 ++ formidable_1_0/formulaires/formidable.html | 46 + formidable_1_0/formulaires/formidable.php | 287 +++++ .../formulaires/importer_formulaire.html | 30 + .../formulaires/importer_formulaire.php | 53 + formidable_1_0/icones_barre/CVS/Entries | 2 + formidable_1_0/icones_barre/CVS/Repository | 1 + formidable_1_0/icones_barre/CVS/Root | 1 + formidable_1_0/icones_barre/formulaire.png | Bin 0 -> 688 bytes formidable_1_0/images/CVS/Entries | 19 + formidable_1_0/images/CVS/Repository | 1 + formidable_1_0/images/CVS/Root | 1 + formidable_1_0/images/formidable-128.png | Bin 0 -> 12158 bytes formidable_1_0/images/formidable-24.png | Bin 0 -> 1357 bytes formidable_1_0/images/formidable-64.png | Bin 0 -> 5234 bytes formidable_1_0/images/formidable.svg | 1104 +++++++++++++++++ formidable_1_0/images/formulaire-24.png | Bin 0 -> 843 bytes .../images/formulaire-action-ajouter.png | Bin 0 -> 629 bytes .../images/formulaire-analyse-24.png | Bin 0 -> 1176 bytes .../images/formulaire-config-champs-24.png | Bin 0 -> 979 bytes .../formulaire-config-traitements-24.png | Bin 0 -> 1393 bytes .../images/formulaire-dupliquer-24.png | Bin 0 -> 1300 bytes .../images/formulaire-editer-24.png | Bin 0 -> 1097 bytes .../images/formulaire-exporter-24.png | Bin 0 -> 1127 bytes .../images/formulaire-nouveau-48.png | Bin 0 -> 2443 bytes .../images/formulaire-reponse-24.png | Bin 0 -> 667 bytes .../formulaire-reponse-supprimer-24.png | Bin 0 -> 1190 bytes .../images/formulaire-reponses-24.png | Bin 0 -> 1108 bytes .../formulaire-reponses-exporter-24.png | Bin 0 -> 1213 bytes .../images/formulaire-supprimer-24.png | Bin 0 -> 1387 bytes formidable_1_0/inc/CVS/Entries | 2 + formidable_1_0/inc/CVS/Repository | 1 + formidable_1_0/inc/CVS/Root | 1 + formidable_1_0/inc/formidable.php | 377 ++++++ formidable_1_0/lang/CVS/Entries | 9 + formidable_1_0/lang/CVS/Repository | 1 + formidable_1_0/lang/CVS/Root | 1 + formidable_1_0/lang/formidable.xml | 8 + formidable_1_0/lang/formidable_de.php | 172 +++ formidable_1_0/lang/formidable_fr.php | 170 +++ formidable_1_0/lang/formidable_it.php | 166 +++ formidable_1_0/lang/formidable_sk.php | 166 +++ formidable_1_0/lang/formulaire_fr.php | 18 + .../lang/formulaires_reponse_fr.php | 27 + formidable_1_0/lang/paquet-formidable_fr.php | 19 + formidable_1_0/modeles/CVS/Entries | 5 + formidable_1_0/modeles/CVS/Repository | 1 + formidable_1_0/modeles/CVS/Root | 1 + .../modeles/formulaire_aide_memoire.html | 17 + .../modeles/formulaire_analyse.html | 63 + .../modeles/formulaire_formidable.yaml | 20 + .../modeles/formulaires_reponse.html | 12 + formidable_1_0/noisettes/CVS/Entries | 3 + formidable_1_0/noisettes/CVS/Repository | 1 + formidable_1_0/noisettes/CVS/Root | 1 + .../noisettes/formulaire_formidable.html | 2 + .../noisettes/formulaire_formidable.yaml | 15 + formidable_1_0/notifications/CVS/Entries | 3 + formidable_1_0/notifications/CVS/Repository | 1 + formidable_1_0/notifications/CVS/Root | 1 + .../notifications/formulaire_accuse.html | 7 + .../notifications/formulaire_email.html | 18 + formidable_1_0/paquet.xml | 35 + formidable_1_0/prive/CVS/Entries | 4 + formidable_1_0/prive/CVS/Repository | 1 + formidable_1_0/prive/CVS/Root | 1 + formidable_1_0/prive/objets/CVS/Entries | 3 + formidable_1_0/prive/objets/CVS/Repository | 1 + formidable_1_0/prive/objets/CVS/Root | 1 + .../prive/objets/contenu/CVS/Entries | 3 + .../prive/objets/contenu/CVS/Repository | 1 + formidable_1_0/prive/objets/contenu/CVS/Root | 1 + .../prive/objets/contenu/formulaire.html | 6 + .../objets/contenu/formulaires_reponse.html | 27 + formidable_1_0/prive/objets/infos/CVS/Entries | 3 + .../prive/objets/infos/CVS/Repository | 1 + formidable_1_0/prive/objets/infos/CVS/Root | 1 + .../prive/objets/infos/formulaire.html | 6 + .../objets/infos/formulaires_reponse.html | 8 + formidable_1_0/prive/objets/liste/CVS/Entries | 3 + .../prive/objets/liste/CVS/Repository | 1 + formidable_1_0/prive/objets/liste/CVS/Root | 1 + .../prive/objets/liste/formulaires.html | 45 + .../objets/liste/formulaires_reponses.html | 48 + formidable_1_0/prive/squelettes/CVS/Entries | 5 + .../prive/squelettes/CVS/Repository | 1 + formidable_1_0/prive/squelettes/CVS/Root | 1 + .../prive/squelettes/contenu/CVS/Entries | 8 + .../prive/squelettes/contenu/CVS/Repository | 1 + .../prive/squelettes/contenu/CVS/Root | 1 + .../contenu/configurer_formidable.html | 7 + .../prive/squelettes/contenu/formulaire.html | 35 + .../squelettes/contenu/formulaire_edit.html | 38 + .../prive/squelettes/contenu/formulaires.html | 13 + .../contenu/formulaires_analyse.html | 24 + .../contenu/formulaires_reponse.html | 24 + .../contenu/formulaires_reponses.html | 15 + .../prive/squelettes/extra/CVS/Entries | 4 + .../prive/squelettes/extra/CVS/Repository | 1 + .../prive/squelettes/extra/CVS/Root | 1 + .../prive/squelettes/extra/formulaire.html | 19 + .../squelettes/extra/formulaire_edit.html | 9 + .../squelettes/extra/formulaires_analyse.html | 8 + .../extra/formulaires_reponses.html | 8 + .../prive/squelettes/hierarchie/CVS/Entries | 7 + .../squelettes/hierarchie/CVS/Repository | 1 + .../prive/squelettes/hierarchie/CVS/Root | 1 + .../squelettes/hierarchie/formulaire.html | 5 + .../hierarchie/formulaire_edit.html | 5 + .../squelettes/hierarchie/formulaires.html | 2 + .../hierarchie/formulaires_analyse.html | 7 + .../hierarchie/formulaires_reponse.html | 6 + .../hierarchie/formulaires_reponses.html | 5 + .../prive/squelettes/inclure/CVS/Entries | 1 + .../prive/squelettes/inclure/CVS/Repository | 1 + .../prive/squelettes/inclure/CVS/Root | 1 + .../prive/squelettes/navigation/CVS/Entries | 7 + .../squelettes/navigation/CVS/Repository | 1 + .../prive/squelettes/navigation/CVS/Root | 1 + .../squelettes/navigation/formulaire.html | 42 + .../navigation/formulaire_edit.html | 22 + .../squelettes/navigation/formulaires.html | 5 + .../navigation/formulaires_analyse.html | 12 + .../navigation/formulaires_reponse.html | 15 + .../navigation/formulaires_reponses.html | 12 + .../prive/style_prive_plugin_formidable.html | 32 + formidable_1_0/prive/themes/CVS/Entries | 2 + formidable_1_0/prive/themes/CVS/Repository | 1 + formidable_1_0/prive/themes/CVS/Root | 1 + formidable_1_0/prive/themes/basic/CVS/Entries | 1 + .../prive/themes/basic/CVS/Repository | 1 + formidable_1_0/prive/themes/basic/CVS/Root | 1 + .../prive/themes/basic/images/CVS/Entries | 2 + .../prive/themes/basic/images/CVS/Repository | 1 + .../prive/themes/basic/images/CVS/Root | 1 + .../themes/basic/images/formulaire-16.png | Bin 0 -> 742 bytes formidable_1_0/prive/themes/spip/CVS/Entries | 1 + .../prive/themes/spip/CVS/Repository | 1 + formidable_1_0/prive/themes/spip/CVS/Root | 1 + .../prive/themes/spip/images/CVS/Entries | 4 + .../prive/themes/spip/images/CVS/Repository | 1 + .../prive/themes/spip/images/CVS/Root | 1 + .../themes/spip/images/formulaire-16.png | Bin 0 -> 742 bytes .../themes/spip/images/formulaire-24.png | Bin 0 -> 843 bytes .../spip/images/formulaires_reponse-24.png | Bin 0 -> 1108 bytes formidable_1_0/public/CVS/Entries | 2 + formidable_1_0/public/CVS/Repository | 1 + formidable_1_0/public/CVS/Root | 1 + formidable_1_0/public/formidable_criteres.php | 64 + formidable_1_0/puce_statut/CVS/Entries | 2 + formidable_1_0/puce_statut/CVS/Repository | 1 + formidable_1_0/puce_statut/CVS/Root | 1 + .../puce_statut/formulaires_reponse.php | 92 ++ formidable_1_0/saisies-analyses/CVS/Entries | 13 + .../saisies-analyses/CVS/Repository | 1 + formidable_1_0/saisies-analyses/CVS/Root | 1 + formidable_1_0/saisies-analyses/_base.html | 32 + formidable_1_0/saisies-analyses/case.html | 27 + formidable_1_0/saisies-analyses/checkbox.html | 26 + .../saisies-analyses/destinataires.html | 14 + .../saisies-analyses/explication.html | 4 + formidable_1_0/saisies-analyses/oui_non.html | 27 + formidable_1_0/saisies-analyses/radio.html | 26 + .../saisies-analyses/selecteur_article.html | 13 + .../saisies-analyses/selecteur_rubrique.html | 13 + .../selecteur_rubrique_article.html | 14 + .../saisies-analyses/selection.html | 25 + .../saisies-analyses/selection_multiple.html | 25 + formidable_1_0/saisies-vues/CVS/Entries | 3 + formidable_1_0/saisies-vues/CVS/Repository | 1 + formidable_1_0/saisies-vues/CVS/Root | 1 + .../saisies-vues/formulaire_formidable.html | 5 + .../formulaire_formidable_multiple.html | 9 + formidable_1_0/saisies/CVS/Entries | 4 + formidable_1_0/saisies/CVS/Repository | 1 + formidable_1_0/saisies/CVS/Root | 1 + formidable_1_0/saisies/champ.html | 28 + .../saisies/formulaire_formidable.html | 22 + .../formulaire_formidable_multiple.html | 26 + formidable_1_0/svn.revision | 10 + formidable_1_0/todo.txt | 19 + formidable_1_0/traiter/CVS/Entries | 5 + formidable_1_0/traiter/CVS/Repository | 1 + formidable_1_0/traiter/CVS/Root | 1 + formidable_1_0/traiter/email.php | 193 +++ formidable_1_0/traiter/email.yaml | 57 + formidable_1_0/traiter/enregistrement.php | 138 +++ formidable_1_0/traiter/enregistrement.yaml | 55 + 364 files changed, 13925 insertions(+) create mode 100644 formidable.diff create mode 100644 formidable_1_0.orig/action/dupliquer_formulaire.php create mode 100644 formidable_1_0.orig/action/editer_formulaire.php create mode 100644 formidable_1_0.orig/action/exporter_formulaire.php create mode 100644 formidable_1_0.orig/action/exporter_formulaires_reponses.php create mode 100644 formidable_1_0.orig/action/instituer_formulaires_reponse.php create mode 100644 formidable_1_0.orig/action/supprimer_formulaire.php create mode 100644 formidable_1_0.orig/action/supprimer_formulaires_reponse.php create mode 100644 formidable_1_0.orig/base/formidable_tables.php create mode 100644 formidable_1_0.orig/css/formidable_analyse.css.html create mode 100644 formidable_1_0.orig/echanger/formulaire/forms.php create mode 100644 formidable_1_0.orig/echanger/formulaire/wcs.php create mode 100644 formidable_1_0.orig/echanger/formulaire/yaml.php create mode 100644 formidable_1_0.orig/exec/puce_statut_formulaires.php create mode 100644 formidable_1_0.orig/formidable_administrations.php create mode 100644 formidable_1_0.orig/formidable_autorisations.php create mode 100644 formidable_1_0.orig/formidable_fonctions.php create mode 100644 formidable_1_0.orig/formidable_options.php create mode 100644 formidable_1_0.orig/formidable_pipelines.php create mode 100644 formidable_1_0.orig/formulaires/configurer_formidable_analyse.html create mode 100644 formidable_1_0.orig/formulaires/editer_formulaire.html create mode 100644 formidable_1_0.orig/formulaires/editer_formulaire.php create mode 100644 formidable_1_0.orig/formulaires/editer_formulaire_champs.html create mode 100644 formidable_1_0.orig/formulaires/editer_formulaire_champs.php create mode 100644 formidable_1_0.orig/formulaires/editer_formulaire_traitements.html create mode 100644 formidable_1_0.orig/formulaires/editer_formulaire_traitements.php create mode 100644 formidable_1_0.orig/formulaires/formidable.html create mode 100644 formidable_1_0.orig/formulaires/formidable.php create mode 100644 formidable_1_0.orig/formulaires/importer_formulaire.html create mode 100644 formidable_1_0.orig/formulaires/importer_formulaire.php create mode 100644 formidable_1_0.orig/icones_barre/formulaire.png create mode 100644 formidable_1_0.orig/images/formidable-128.png create mode 100644 formidable_1_0.orig/images/formidable-24.png create mode 100644 formidable_1_0.orig/images/formidable-64.png create mode 100644 formidable_1_0.orig/images/formidable.svg create mode 100644 formidable_1_0.orig/images/formulaire-24.png create mode 100644 formidable_1_0.orig/images/formulaire-action-ajouter.png create mode 100644 formidable_1_0.orig/images/formulaire-analyse-24.png create mode 100644 formidable_1_0.orig/images/formulaire-config-champs-24.png create mode 100644 formidable_1_0.orig/images/formulaire-config-traitements-24.png create mode 100644 formidable_1_0.orig/images/formulaire-dupliquer-24.png create mode 100644 formidable_1_0.orig/images/formulaire-editer-24.png create mode 100644 formidable_1_0.orig/images/formulaire-exporter-24.png create mode 100644 formidable_1_0.orig/images/formulaire-nouveau-48.png create mode 100644 formidable_1_0.orig/images/formulaire-reponse-24.png create mode 100644 formidable_1_0.orig/images/formulaire-reponse-supprimer-24.png create mode 100644 formidable_1_0.orig/images/formulaire-reponses-24.png create mode 100644 formidable_1_0.orig/images/formulaire-reponses-exporter-24.png create mode 100644 formidable_1_0.orig/images/formulaire-supprimer-24.png create mode 100644 formidable_1_0.orig/inc/formidable.php create mode 100644 formidable_1_0.orig/lang/formidable.xml create mode 100644 formidable_1_0.orig/lang/formidable_de.php create mode 100644 formidable_1_0.orig/lang/formidable_en.php create mode 100644 formidable_1_0.orig/lang/formidable_fr.php create mode 100644 formidable_1_0.orig/lang/formidable_it.php create mode 100644 formidable_1_0.orig/lang/formidable_sk.php create mode 100644 formidable_1_0.orig/lang/formulaire_fr.php create mode 100644 formidable_1_0.orig/lang/formulaires_reponse_fr.php create mode 100644 formidable_1_0.orig/lang/paquet-formidable_fr.php create mode 100644 formidable_1_0.orig/modeles/formulaire_aide_memoire.html create mode 100644 formidable_1_0.orig/modeles/formulaire_analyse.html create mode 100644 formidable_1_0.orig/modeles/formulaire_formidable.yaml create mode 100644 formidable_1_0.orig/modeles/formulaires_reponse.html create mode 100644 formidable_1_0.orig/noisettes/formulaire_formidable.html create mode 100644 formidable_1_0.orig/noisettes/formulaire_formidable.yaml create mode 100644 formidable_1_0.orig/notifications/formulaire_accuse.html create mode 100644 formidable_1_0.orig/notifications/formulaire_email.html create mode 100644 formidable_1_0.orig/paquet.xml create mode 100644 formidable_1_0.orig/prive/objets/contenu/formulaire.html create mode 100644 formidable_1_0.orig/prive/objets/contenu/formulaires_reponse.html create mode 100644 formidable_1_0.orig/prive/objets/infos/formulaire.html create mode 100644 formidable_1_0.orig/prive/objets/infos/formulaires_reponse.html create mode 100644 formidable_1_0.orig/prive/objets/liste/formulaires.html create mode 100644 formidable_1_0.orig/prive/objets/liste/formulaires_reponses.html create mode 100644 formidable_1_0.orig/prive/squelettes/contenu/configurer_formidable.html create mode 100644 formidable_1_0.orig/prive/squelettes/contenu/formulaire.html create mode 100644 formidable_1_0.orig/prive/squelettes/contenu/formulaire_edit.html create mode 100644 formidable_1_0.orig/prive/squelettes/contenu/formulaires.html create mode 100644 formidable_1_0.orig/prive/squelettes/contenu/formulaires_analyse.html create mode 100644 formidable_1_0.orig/prive/squelettes/contenu/formulaires_reponse.html create mode 100644 formidable_1_0.orig/prive/squelettes/contenu/formulaires_reponses.html create mode 100644 formidable_1_0.orig/prive/squelettes/extra/formulaire.html create mode 100644 formidable_1_0.orig/prive/squelettes/extra/formulaire_edit.html create mode 100644 formidable_1_0.orig/prive/squelettes/extra/formulaires_reponses.html create mode 100644 formidable_1_0.orig/prive/squelettes/hierarchie/formulaire.html create mode 100644 formidable_1_0.orig/prive/squelettes/hierarchie/formulaire_edit.html create mode 100644 formidable_1_0.orig/prive/squelettes/hierarchie/formulaires.html create mode 100644 formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_analyse.html create mode 100644 formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_reponse.html create mode 100644 formidable_1_0.orig/prive/squelettes/hierarchie/formulaires_reponses.html create mode 100644 formidable_1_0.orig/prive/squelettes/navigation/formulaire.html create mode 100644 formidable_1_0.orig/prive/squelettes/navigation/formulaire_edit.html create mode 100644 formidable_1_0.orig/prive/squelettes/navigation/formulaires.html create mode 100644 formidable_1_0.orig/prive/squelettes/navigation/formulaires_analyse.html create mode 100644 formidable_1_0.orig/prive/squelettes/navigation/formulaires_reponse.html create mode 100644 formidable_1_0.orig/prive/squelettes/navigation/formulaires_reponses.html create mode 100644 formidable_1_0.orig/prive/style_prive_plugin_formidable.html create mode 100644 formidable_1_0.orig/prive/themes/basic/images/formulaire-16.png create mode 100644 formidable_1_0.orig/prive/themes/spip/images/formulaire-16.png create mode 100644 formidable_1_0.orig/prive/themes/spip/images/formulaire-24.png create mode 100644 formidable_1_0.orig/prive/themes/spip/images/formulaires_reponse-24.png create mode 100644 formidable_1_0.orig/public/formidable_criteres.php create mode 100644 formidable_1_0.orig/puce_statut/formulaires_reponse.php create mode 100644 formidable_1_0.orig/saisies-analyses/_base.html create mode 100644 formidable_1_0.orig/saisies-analyses/case.html create mode 100644 formidable_1_0.orig/saisies-analyses/checkbox.html create mode 100644 formidable_1_0.orig/saisies-analyses/destinataires.html create mode 100644 formidable_1_0.orig/saisies-analyses/explication.html create mode 100644 formidable_1_0.orig/saisies-analyses/oui_non.html create mode 100644 formidable_1_0.orig/saisies-analyses/radio.html create mode 100644 formidable_1_0.orig/saisies-analyses/selecteur_article.html create mode 100644 formidable_1_0.orig/saisies-analyses/selecteur_rubrique.html create mode 100644 formidable_1_0.orig/saisies-analyses/selecteur_rubrique_article.html create mode 100644 formidable_1_0.orig/saisies-analyses/selection.html create mode 100644 formidable_1_0.orig/saisies-analyses/selection_multiple.html create mode 100644 formidable_1_0.orig/saisies-vues/formulaire_formidable.html create mode 100644 formidable_1_0.orig/saisies-vues/formulaire_formidable_multiple.html create mode 100644 formidable_1_0.orig/saisies/champ.html create mode 100644 formidable_1_0.orig/saisies/formulaire_formidable.html create mode 100644 formidable_1_0.orig/saisies/formulaire_formidable_multiple.html create mode 100644 formidable_1_0.orig/svn.revision create mode 100644 formidable_1_0.orig/todo.txt create mode 100644 formidable_1_0.orig/traiter/email.php create mode 100644 formidable_1_0.orig/traiter/email.yaml create mode 100644 formidable_1_0.orig/traiter/enregistrement.php create mode 100644 formidable_1_0.orig/traiter/enregistrement.yaml create mode 100644 formidable_1_0/CVS/Entries create mode 100644 formidable_1_0/CVS/Repository create mode 100644 formidable_1_0/CVS/Root create mode 100644 formidable_1_0/action/CVS/Entries create mode 100644 formidable_1_0/action/CVS/Repository create mode 100644 formidable_1_0/action/CVS/Root create mode 100644 formidable_1_0/action/dupliquer_formulaire.php create mode 100644 formidable_1_0/action/editer_formulaire.php create mode 100755 formidable_1_0/action/exporter_analyse_reponses.php create mode 100644 formidable_1_0/action/exporter_formulaire.php create mode 100644 formidable_1_0/action/exporter_formulaires_reponses.php create mode 100644 formidable_1_0/action/instituer_formulaires_reponse.php create mode 100644 formidable_1_0/action/supprimer_formulaire.php create mode 100644 formidable_1_0/action/supprimer_formulaires_reponse.php create mode 100644 formidable_1_0/base/CVS/Entries create mode 100644 formidable_1_0/base/CVS/Repository create mode 100644 formidable_1_0/base/CVS/Root create mode 100644 formidable_1_0/base/formidable_tables.php create mode 100644 formidable_1_0/css/CVS/Entries create mode 100644 formidable_1_0/css/CVS/Repository create mode 100644 formidable_1_0/css/CVS/Root create mode 100644 formidable_1_0/css/formidable_analyse.css.html create mode 100644 formidable_1_0/echanger/CVS/Entries create mode 100644 formidable_1_0/echanger/CVS/Repository create mode 100644 formidable_1_0/echanger/CVS/Root create mode 100644 formidable_1_0/echanger/formulaire/CVS/Entries create mode 100644 formidable_1_0/echanger/formulaire/CVS/Repository create mode 100644 formidable_1_0/echanger/formulaire/CVS/Root create mode 100644 formidable_1_0/echanger/formulaire/forms.php create mode 100644 formidable_1_0/echanger/formulaire/wcs.php create mode 100644 formidable_1_0/echanger/formulaire/yaml.php create mode 100644 formidable_1_0/exec/CVS/Entries create mode 100644 formidable_1_0/exec/CVS/Repository create mode 100644 formidable_1_0/exec/CVS/Root create mode 100644 formidable_1_0/exec/puce_statut_formulaires.php create mode 100644 formidable_1_0/formidable_administrations.php create mode 100644 formidable_1_0/formidable_autorisations.php create mode 100644 formidable_1_0/formidable_fonctions.php create mode 100644 formidable_1_0/formidable_options.php create mode 100644 formidable_1_0/formidable_pipelines.php create mode 100644 formidable_1_0/formulaires/CVS/Entries create mode 100644 formidable_1_0/formulaires/CVS/Repository create mode 100644 formidable_1_0/formulaires/CVS/Root create mode 100644 formidable_1_0/formulaires/configurer_formidable_analyse.html create mode 100644 formidable_1_0/formulaires/editer_formulaire.html create mode 100644 formidable_1_0/formulaires/editer_formulaire.php create mode 100644 formidable_1_0/formulaires/editer_formulaire_champs.html create mode 100644 formidable_1_0/formulaires/editer_formulaire_champs.php create mode 100644 formidable_1_0/formulaires/editer_formulaire_traitements.html create mode 100644 formidable_1_0/formulaires/editer_formulaire_traitements.php create mode 100644 formidable_1_0/formulaires/formidable.html create mode 100644 formidable_1_0/formulaires/formidable.php create mode 100644 formidable_1_0/formulaires/importer_formulaire.html create mode 100644 formidable_1_0/formulaires/importer_formulaire.php create mode 100644 formidable_1_0/icones_barre/CVS/Entries create mode 100644 formidable_1_0/icones_barre/CVS/Repository create mode 100644 formidable_1_0/icones_barre/CVS/Root create mode 100644 formidable_1_0/icones_barre/formulaire.png create mode 100644 formidable_1_0/images/CVS/Entries create mode 100644 formidable_1_0/images/CVS/Repository create mode 100644 formidable_1_0/images/CVS/Root create mode 100644 formidable_1_0/images/formidable-128.png create mode 100644 formidable_1_0/images/formidable-24.png create mode 100644 formidable_1_0/images/formidable-64.png create mode 100644 formidable_1_0/images/formidable.svg create mode 100644 formidable_1_0/images/formulaire-24.png create mode 100644 formidable_1_0/images/formulaire-action-ajouter.png create mode 100644 formidable_1_0/images/formulaire-analyse-24.png create mode 100644 formidable_1_0/images/formulaire-config-champs-24.png create mode 100644 formidable_1_0/images/formulaire-config-traitements-24.png create mode 100644 formidable_1_0/images/formulaire-dupliquer-24.png create mode 100644 formidable_1_0/images/formulaire-editer-24.png create mode 100644 formidable_1_0/images/formulaire-exporter-24.png create mode 100644 formidable_1_0/images/formulaire-nouveau-48.png create mode 100644 formidable_1_0/images/formulaire-reponse-24.png create mode 100644 formidable_1_0/images/formulaire-reponse-supprimer-24.png create mode 100644 formidable_1_0/images/formulaire-reponses-24.png create mode 100644 formidable_1_0/images/formulaire-reponses-exporter-24.png create mode 100644 formidable_1_0/images/formulaire-supprimer-24.png create mode 100644 formidable_1_0/inc/CVS/Entries create mode 100644 formidable_1_0/inc/CVS/Repository create mode 100644 formidable_1_0/inc/CVS/Root create mode 100644 formidable_1_0/inc/formidable.php create mode 100644 formidable_1_0/lang/CVS/Entries create mode 100644 formidable_1_0/lang/CVS/Repository create mode 100644 formidable_1_0/lang/CVS/Root create mode 100644 formidable_1_0/lang/formidable.xml create mode 100644 formidable_1_0/lang/formidable_de.php create mode 100644 formidable_1_0/lang/formidable_fr.php create mode 100644 formidable_1_0/lang/formidable_it.php create mode 100644 formidable_1_0/lang/formidable_sk.php create mode 100644 formidable_1_0/lang/formulaire_fr.php create mode 100644 formidable_1_0/lang/formulaires_reponse_fr.php create mode 100644 formidable_1_0/lang/paquet-formidable_fr.php create mode 100644 formidable_1_0/modeles/CVS/Entries create mode 100644 formidable_1_0/modeles/CVS/Repository create mode 100644 formidable_1_0/modeles/CVS/Root create mode 100644 formidable_1_0/modeles/formulaire_aide_memoire.html create mode 100644 formidable_1_0/modeles/formulaire_analyse.html create mode 100644 formidable_1_0/modeles/formulaire_formidable.yaml create mode 100644 formidable_1_0/modeles/formulaires_reponse.html create mode 100644 formidable_1_0/noisettes/CVS/Entries create mode 100644 formidable_1_0/noisettes/CVS/Repository create mode 100644 formidable_1_0/noisettes/CVS/Root create mode 100644 formidable_1_0/noisettes/formulaire_formidable.html create mode 100644 formidable_1_0/noisettes/formulaire_formidable.yaml create mode 100644 formidable_1_0/notifications/CVS/Entries create mode 100644 formidable_1_0/notifications/CVS/Repository create mode 100644 formidable_1_0/notifications/CVS/Root create mode 100644 formidable_1_0/notifications/formulaire_accuse.html create mode 100644 formidable_1_0/notifications/formulaire_email.html create mode 100644 formidable_1_0/paquet.xml create mode 100644 formidable_1_0/prive/CVS/Entries create mode 100644 formidable_1_0/prive/CVS/Repository create mode 100644 formidable_1_0/prive/CVS/Root create mode 100644 formidable_1_0/prive/objets/CVS/Entries create mode 100644 formidable_1_0/prive/objets/CVS/Repository create mode 100644 formidable_1_0/prive/objets/CVS/Root create mode 100644 formidable_1_0/prive/objets/contenu/CVS/Entries create mode 100644 formidable_1_0/prive/objets/contenu/CVS/Repository create mode 100644 formidable_1_0/prive/objets/contenu/CVS/Root create mode 100644 formidable_1_0/prive/objets/contenu/formulaire.html create mode 100644 formidable_1_0/prive/objets/contenu/formulaires_reponse.html create mode 100644 formidable_1_0/prive/objets/infos/CVS/Entries create mode 100644 formidable_1_0/prive/objets/infos/CVS/Repository create mode 100644 formidable_1_0/prive/objets/infos/CVS/Root create mode 100644 formidable_1_0/prive/objets/infos/formulaire.html create mode 100644 formidable_1_0/prive/objets/infos/formulaires_reponse.html create mode 100644 formidable_1_0/prive/objets/liste/CVS/Entries create mode 100644 formidable_1_0/prive/objets/liste/CVS/Repository create mode 100644 formidable_1_0/prive/objets/liste/CVS/Root create mode 100644 formidable_1_0/prive/objets/liste/formulaires.html create mode 100644 formidable_1_0/prive/objets/liste/formulaires_reponses.html create mode 100644 formidable_1_0/prive/squelettes/CVS/Entries create mode 100644 formidable_1_0/prive/squelettes/CVS/Repository create mode 100644 formidable_1_0/prive/squelettes/CVS/Root create mode 100644 formidable_1_0/prive/squelettes/contenu/CVS/Entries create mode 100644 formidable_1_0/prive/squelettes/contenu/CVS/Repository create mode 100644 formidable_1_0/prive/squelettes/contenu/CVS/Root create mode 100644 formidable_1_0/prive/squelettes/contenu/configurer_formidable.html create mode 100644 formidable_1_0/prive/squelettes/contenu/formulaire.html create mode 100644 formidable_1_0/prive/squelettes/contenu/formulaire_edit.html create mode 100644 formidable_1_0/prive/squelettes/contenu/formulaires.html create mode 100644 formidable_1_0/prive/squelettes/contenu/formulaires_analyse.html create mode 100644 formidable_1_0/prive/squelettes/contenu/formulaires_reponse.html create mode 100644 formidable_1_0/prive/squelettes/contenu/formulaires_reponses.html create mode 100644 formidable_1_0/prive/squelettes/extra/CVS/Entries create mode 100644 formidable_1_0/prive/squelettes/extra/CVS/Repository create mode 100644 formidable_1_0/prive/squelettes/extra/CVS/Root create mode 100644 formidable_1_0/prive/squelettes/extra/formulaire.html create mode 100644 formidable_1_0/prive/squelettes/extra/formulaire_edit.html create mode 100755 formidable_1_0/prive/squelettes/extra/formulaires_analyse.html create mode 100644 formidable_1_0/prive/squelettes/extra/formulaires_reponses.html create mode 100644 formidable_1_0/prive/squelettes/hierarchie/CVS/Entries create mode 100644 formidable_1_0/prive/squelettes/hierarchie/CVS/Repository create mode 100644 formidable_1_0/prive/squelettes/hierarchie/CVS/Root create mode 100644 formidable_1_0/prive/squelettes/hierarchie/formulaire.html create mode 100644 formidable_1_0/prive/squelettes/hierarchie/formulaire_edit.html create mode 100644 formidable_1_0/prive/squelettes/hierarchie/formulaires.html create mode 100644 formidable_1_0/prive/squelettes/hierarchie/formulaires_analyse.html create mode 100644 formidable_1_0/prive/squelettes/hierarchie/formulaires_reponse.html create mode 100644 formidable_1_0/prive/squelettes/hierarchie/formulaires_reponses.html create mode 100644 formidable_1_0/prive/squelettes/inclure/CVS/Entries create mode 100644 formidable_1_0/prive/squelettes/inclure/CVS/Repository create mode 100644 formidable_1_0/prive/squelettes/inclure/CVS/Root create mode 100644 formidable_1_0/prive/squelettes/navigation/CVS/Entries create mode 100644 formidable_1_0/prive/squelettes/navigation/CVS/Repository create mode 100644 formidable_1_0/prive/squelettes/navigation/CVS/Root create mode 100644 formidable_1_0/prive/squelettes/navigation/formulaire.html create mode 100644 formidable_1_0/prive/squelettes/navigation/formulaire_edit.html create mode 100644 formidable_1_0/prive/squelettes/navigation/formulaires.html create mode 100644 formidable_1_0/prive/squelettes/navigation/formulaires_analyse.html create mode 100644 formidable_1_0/prive/squelettes/navigation/formulaires_reponse.html create mode 100644 formidable_1_0/prive/squelettes/navigation/formulaires_reponses.html create mode 100644 formidable_1_0/prive/style_prive_plugin_formidable.html create mode 100644 formidable_1_0/prive/themes/CVS/Entries create mode 100644 formidable_1_0/prive/themes/CVS/Repository create mode 100644 formidable_1_0/prive/themes/CVS/Root create mode 100644 formidable_1_0/prive/themes/basic/CVS/Entries create mode 100644 formidable_1_0/prive/themes/basic/CVS/Repository create mode 100644 formidable_1_0/prive/themes/basic/CVS/Root create mode 100644 formidable_1_0/prive/themes/basic/images/CVS/Entries create mode 100644 formidable_1_0/prive/themes/basic/images/CVS/Repository create mode 100644 formidable_1_0/prive/themes/basic/images/CVS/Root create mode 100644 formidable_1_0/prive/themes/basic/images/formulaire-16.png create mode 100644 formidable_1_0/prive/themes/spip/CVS/Entries create mode 100644 formidable_1_0/prive/themes/spip/CVS/Repository create mode 100644 formidable_1_0/prive/themes/spip/CVS/Root create mode 100644 formidable_1_0/prive/themes/spip/images/CVS/Entries create mode 100644 formidable_1_0/prive/themes/spip/images/CVS/Repository create mode 100644 formidable_1_0/prive/themes/spip/images/CVS/Root create mode 100644 formidable_1_0/prive/themes/spip/images/formulaire-16.png create mode 100644 formidable_1_0/prive/themes/spip/images/formulaire-24.png create mode 100644 formidable_1_0/prive/themes/spip/images/formulaires_reponse-24.png create mode 100644 formidable_1_0/public/CVS/Entries create mode 100644 formidable_1_0/public/CVS/Repository create mode 100644 formidable_1_0/public/CVS/Root create mode 100644 formidable_1_0/public/formidable_criteres.php create mode 100644 formidable_1_0/puce_statut/CVS/Entries create mode 100644 formidable_1_0/puce_statut/CVS/Repository create mode 100644 formidable_1_0/puce_statut/CVS/Root create mode 100644 formidable_1_0/puce_statut/formulaires_reponse.php create mode 100644 formidable_1_0/saisies-analyses/CVS/Entries create mode 100644 formidable_1_0/saisies-analyses/CVS/Repository create mode 100644 formidable_1_0/saisies-analyses/CVS/Root create mode 100644 formidable_1_0/saisies-analyses/_base.html create mode 100644 formidable_1_0/saisies-analyses/case.html create mode 100644 formidable_1_0/saisies-analyses/checkbox.html create mode 100644 formidable_1_0/saisies-analyses/destinataires.html create mode 100644 formidable_1_0/saisies-analyses/explication.html create mode 100644 formidable_1_0/saisies-analyses/oui_non.html create mode 100644 formidable_1_0/saisies-analyses/radio.html create mode 100644 formidable_1_0/saisies-analyses/selecteur_article.html create mode 100644 formidable_1_0/saisies-analyses/selecteur_rubrique.html create mode 100644 formidable_1_0/saisies-analyses/selecteur_rubrique_article.html create mode 100644 formidable_1_0/saisies-analyses/selection.html create mode 100644 formidable_1_0/saisies-analyses/selection_multiple.html create mode 100644 formidable_1_0/saisies-vues/CVS/Entries create mode 100644 formidable_1_0/saisies-vues/CVS/Repository create mode 100644 formidable_1_0/saisies-vues/CVS/Root create mode 100644 formidable_1_0/saisies-vues/formulaire_formidable.html create mode 100644 formidable_1_0/saisies-vues/formulaire_formidable_multiple.html create mode 100644 formidable_1_0/saisies/CVS/Entries create mode 100644 formidable_1_0/saisies/CVS/Repository create mode 100644 formidable_1_0/saisies/CVS/Root create mode 100644 formidable_1_0/saisies/champ.html create mode 100644 formidable_1_0/saisies/formulaire_formidable.html create mode 100644 formidable_1_0/saisies/formulaire_formidable_multiple.html create mode 100644 formidable_1_0/svn.revision create mode 100644 formidable_1_0/todo.txt create mode 100644 formidable_1_0/traiter/CVS/Entries create mode 100644 formidable_1_0/traiter/CVS/Repository create mode 100644 formidable_1_0/traiter/CVS/Root create mode 100644 formidable_1_0/traiter/email.php create mode 100644 formidable_1_0/traiter/email.yaml create mode 100644 formidable_1_0/traiter/enregistrement.php create mode 100644 formidable_1_0/traiter/enregistrement.yaml diff --git a/.gitattributes b/.gitattributes index f0d0d9ad..32c73825 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 00000000..ecdb2fe9 --- /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ählen eine Variable von denen zur Verfü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ür jeden Autor ohne Offenlegung seiner Identitä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é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ésultats du formulaire anonymes (ne pas garder de traces de l'identifiant des personnes ayant répondu.)", ++ 'traiter_enregistrement_option_choix_select_label' => "Choisir une variable parmi celles proposées", ++ 'traiter_enregistrement_option_anonymiser_variable_label' => "Variable à partir de laquelle anonymiser le formulaire", ++ 'traiter_enregistrement_option_anonymiser_variable_explication' => "Quelle variable système utiliser pour calculer une valeur unique pour chaque auteur sans pour autant révéler son identité.", + '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 00000000..93ef6d8c --- /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 00000000..2254bf8c --- /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 00000000..df240834 --- /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 00000000..4105d4f0 --- /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 00000000..211057e0 --- /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 00000000..372cebe1 --- /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("&","&",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 00000000..98f106e4 --- /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("&","&",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 00000000..4d5f4332 --- /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 00000000..3a82a97d --- /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 00000000..c74aaef0 --- /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 00000000..c12100a3 --- /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 00000000..162331d9 --- /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 00000000..6aadef39 --- /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 00000000..d273617d --- /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 00000000..76d31b07 --- /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 00000000..c8029993 --- /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 00000000..312d95ee --- /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 00000000..902224bb --- /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 00000000..a8caa8bf --- /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"> </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 00000000..cd8445eb --- /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 00000000..afa986be --- /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 00000000..8e88ff43 --- /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 00000000..e999c7b8 --- /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 00000000..31dbc36c --- /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 00000000..2303ec6e --- /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 00000000..80b0648e --- /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 00000000..723846f2 --- /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 00000000..0d71a5fd --- /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 00000000..edcf2c61 --- /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 GIT binary patch literal 688 zcmV;h0#E&kP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!Qb|NXRCwBaQ`>G*K@?qcE>NIIDHW+n z8)AHE)HE?w6CZu@rTE|<)E_YZ2|wW%_-bOpAJ8|ST0>&BQf>#%;mplFdniN`9kQ7@ zGnuv5T6>R}Os3-O-Pzll(dcCm1QLG?i+>D}BnjS}c0NW?7?!uIci!JjlVb#dr9t;B z42ApAf?=#Res<q<mMMc$rIJU64x0Cx)mpv2U5G=U)2uG@eZv<R*d5WC(i-E*6qRzN z6s2iuUYwjPI-L$KzmJe+iU@8b*tHS|0tRX}swfDFUaz-^+y?1D9LM<5ze28kR--A5 zfi{M-8s*j&=`zQ&qkX)7egGi^B2UY3zN^U+6BR>Cg<L5}siEAQQxHHdC6f6P?fo4} zpqWubAZvZ?y%N6tOdyH`8dF9$n}8zrY;;6GF&^Bn5wK=i%z#ZIdWY#4yLtu$!tV(J z4v4->5?T%|6dHK~Wp_B~3IOcv?8g{eVa#jI;dE=tN>XUnG^dLUwY_T`K04qek+a;F zj0~DB@#}gBvW-DDKz{9LXBm0$xXpWO25chHe0q9}EL}PUuzxq9^+k1AckebJsTyqJ z?V;8=hWRJN71C^c=ehD(<2`ao9A+*v$k`EE^;a7c9h9arrSdC+$`F#f%`j!AuZ$1v zB+L<-Dgk(-=_!P(=Mf-83v=oPUpmXp<Qs`-IF$qtp@#BSi-47Hq`_bysPoE&LJ?0M zeqiUhlUMC5ZvWTc0$~(jIvr!NNQ+Uo+og}m=YIcutljO+L-@}iiAv();^O?b00RIn WL9^_MGf;Z~0000<MNUMnLSTaK%`Vsg literal 0 HcmV?d00001 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 GIT binary patch literal 12158 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 literal 0 HcmV?d00001 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 GIT binary patch literal 1357 zcmV-T1+w~yP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11j<Q7K~zYIjh5eQ990y@Klk35-JRX-ZniO|X*K?+wo+p$Vt;_( zgXpV>2*sdM9|Rv-x)fhTd{6`h6(fT954eI46)Z^AD&kKBQL%^?ZEPzsO|r@ErkUOO zb?@;ZQQOTAJ#b!T?)iSs_skh)5E1(G)rYiM>-t8yUX2nFE{}<EQ&5WYfD_@_dc(fS z1~D;i4lBjefEMApdc#JS-}m|pl;TjW?3ar<Q=D3eUYr;=zXF+39PqTd7ll~M$4=xc zAg2`1Z`)j`b`#reEv1KmH#Y=`&{j&hAa4lrrW&X2!%C^xsaDICa;az#$I?=G_u{2) zXEE$m^S;(W-q1^(6QSL&w+aA!y%=ULP94Rd#O-@_YR}U(u_-o-5of8C13fZKEwh%% zb5l$&M8v5$;OqYbXgcsmuN`H})@zU?L~MdWVT{2cxGceC5y}ZWwvRHu(BkZcSs!Tj zi|JKFqhBArW<-r_TNXE-k6$P+XTF4=FXH6`j31zsA_?c%JWyfl(17xcdZS<OiY=NL zH+L0_h4&8Z-Ctc`3$o+!D-M@hpHpsqicNZCNso46j4VwlUiuE>=lJobvz=a?K5(>Q zKUvd(@9AfD+;n3VNr?3zV`F3N+qaLQp&?G3IKj<3cH;R3jGyPyt<RBM{|NS`#~8lv zEd<RC*Ir%qJpJUlBNAbErBVf#p|oala+2xkX-=Lz$+2U{(AvXzd9?AlW%mJ2ojS#l zBS-l1+n;HAW0XooL}bsJfQfN4ptbTn&qu@oia3rrc<>;tR*PD#23n)EMk!5_Bt%if z_U+pl9UY}4vl!!{l`2e(o9aK$^fK7aQnBE~W*`m_cJ125@#DvtpP$F~eNyKTXAyB+ z{Ng2!KJh5272NOdGT-_h*)&WL<ZN;&x&`>AA8@uC#YzBimaW;hG*67<<pOG6j;Y@i zZslEYS&BdZ744HBk;Y4;QMkM@$`Hk=1}0aHsNS&6EVE+M1ZOjBnqbo&SsW6D9e(}g zC*tlBaTN0V`ST=kgtIBmW`KawIOoVRN4;U^)*2C7so%nIaWKd!vb2XFIGdr2hqDQ- z)(nzalw{zN6*tLpt?`NC7_I*8e$^H^Cm+nt&c$e-ELrY8jYHCCiQ&OAMPCu*;HrTF zS<=HM(aJ)A$yb<P=)_KV|8mVM99So>UTn6HjBL3oud)<pQ@)w1aUtBad_V*cL>%IT zZNUQjN9Ir_heL6(*$%CfSJrh<Z`igIUYnYp>uNtBjYFb1;)g#AEPmg?`+SPhC+BIM z?(yU7CNjI+y&qJWnx5;5Fi~&V#dRI5jOpc>X6Nvhq0L1vU*V47CKtcUxbKe^zET*V zd*K4d{gAzT7w`&IlGHKN>~#CPU*%xMMQEKII(_C`Cl#M!slr|Rmzch~gjX(+E0<Xu z47hi!O|e`h6`#{*&b6JBhwBa7?bloN$^1Je#?3vRr{B44=MA;Iudqp%sM|v<1e*d( zu1K6ZPM<l~&NBC4y<tCIOJ`lc3gk}DsQ0!GRm#JI1351r0FcH#X68HTpR=7M>*W4= z!+y4&#)g0u$gt7sDc~Wk$N@MZ0p7MwUZ^+h%trP93Fw0r0Q&zNHj2Lh-aWZ8{VP=h P00000NkvXXu0mjfh$oY* literal 0 HcmV?d00001 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 GIT binary patch literal 5234 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 literal 0 HcmV?d00001 diff --git a/formidable_1_0.orig/images/formidable.svg b/formidable_1_0.orig/images/formidable.svg new file mode 100644 index 00000000..5baf77e0 --- /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 GIT binary patch literal 843 zcmV-R1GM~!P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10?0{3K~zYItyE2G6HydB^U*SCf=WWtNGlfXLZO=?R20!JbR#aM zJHfwE?6U6s7w-HE(o(^d3qj~c5T%0svPnZ4oqXMUT)a0kFHK4yIuP#M``(<J^UitK zBZ-HrtM{W^^cer~X~*q%?{{`SgaA-1mEP2wtp$((0Ft12N#AML;O5D`<QozIK>~Bt z@(TdhLjWig3L51LDTw(t0pL*G1#-dNdOklR01yH|5Cl>xmYmJVfX{=Eshc&R*NHW4 zP_2}ko13rxrv%v8c-crB06-X;*SA}{IIR5v92N;95KtS_BV@*Uu2R7BC(8qk(gw*n zA2r%2mM%j{s1m9QRf1HAn1-SRZC#aiuVU}82~|xHvj(&q0H783Q0v6#i>dWRphAcU zL=__Dr=sYqjW)klnjSF3NCtgT)Z;$-qL99rD5jD0ZM2}-x{1|GVP<Fdh%$=-_ik13 zZT}R255iAfk&qs`4|ahh7Uzo&1Lug`!pvz6#e)OTL3Qs!MxO)V0Flot$c0fNX8_0F zk5DZaQ;|tcMPwp;TC-x)2)_5_2UZ^49wl<dpx5i6b<#2)i9)ExNum%Yu2P7NSx$se zI9}xL?+zMgF+{C^D%LrPi^Pbk=WB}D8?)nWT3)E2eo%)`Vj9^cO2k%ZstX9HGk+@c z<?#&eKD~o~dB)oG<LB21rn~7s2MDS&GMtI(j&c(4n8SmW^?^o148kd3_G%SWK$$s* zb|knlbCt;(r_Ip}T$^^fCphbVGULD*4QZ~lIfvG#WXWl8flWKz7`0l{{8J04VwfaN z(z_tAb~Q|9{7!0?ks_1C^38R`?ZzbfA{Sk`h(Tu4TvS9ZDo)fO!7|b0q33zg+S)UJ zdwZ*`N^fFh=ka}y`};qA&+{UWBr28iVi5RCBAO!^0GPB9J<pRM@M96(JwE>R^)DV^ VNz7bru4w=O002ovPDHLkV1k>jcMt#o literal 0 HcmV?d00001 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 GIT binary patch literal 629 zcmV-*0*d{KP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXS! z1`-DmWX13R00H$$L_t(Y$JLd+i_~Bcho3hah=}MR<~Tv{qq1161i{8u5Cv^Tu-Jd# zDhokSE350(O0W^M5w#HxEDi)4kE<+%1K}1I4z%#{e$7}UyY6nn8YCb$VaNx0^JISW zn*{cIm=^aO0Wu(&yDoqQek@v?wg6;zo}SxMB%gh=Wb|mT+5g+(Hh?5Z$ZubH2xz&f z@a*mVyrHUp0uV)r>e=4i01PLV&J#si^`JE%h$D)x&RzEa=>TvTIMAePS%D>r1E`KC zfR#n=ng(QpwKH3w`8=SPq}B(Ug;-YLqotRmcCdDOr|x?*db0Yp-&8>_O3ZIvUInAT zI0Z$s5Io*j0PnbV>1HMx5s8%hfQaz=!^;_Wr8Oy{<I8ZJ#3UGFFp0rnFvd(qb9?j& z0M*L2qNplI51p*_rUvlA5_~8hY^D-3JNH^mh5kwBTnm7AoH}*^Ev2a>5>%CMyPwOh zE}cb1N@-L|nIz)9T?mLGI(q*8ajnT|n%b)uuV>>PIA?kH@r?~3WKB)3oKyqY7k7vK zCY#=Pu)O2Eoiy3`0&9Kt>fZO`4b~sqv<CQD<$SC}5u7XV-eWLWS4>MW>|~OyD+oS- z0q<=0p9<#-d?+QdzUUsXXDtV_WkiKvcCS-_i0Ej2b0c5mmjCw4-2d?#oC90SP3HsI P00000NkvXXu0mjfqfr!a literal 0 HcmV?d00001 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 GIT binary patch literal 1176 zcmV;J1ZVq+P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11Qkg{K~zYIt(0GE6jc<)f3rK?>~>3QcWo`SNYR2~2!G^X&?b<G z!4MxX7#>Va^i7FRz8QJML=qE2e8a>S6G?o)_+Vn9kRoV;Q6dK9PXTG6rBt>o+wRWH z&fIf+nAzDW+eRO_$>iL7?!Dic?|$FCma4L2=g#45F8eZ%u(^)=!>N&xGd4h>Sp0IP zGB=1S0IG_How%>j9LaHGU1N_bpr}HBU(Z{>3LBuKqeHU!ju<4|+W^p(d=e-Lp3LX- z?FPUGNT<`LSSThI(*%AP{6F&H9Qd9iae=<xp30#^A3aJ5IC${Ga$Eqww!`k%CoV8m zszHK9gAoc6#rO!d$-2L{gE#kVoL49=&^YJ2WtT#+3sFTx5fMZbRl%6Bpb<r*yog3? zg|Vp$BGN!?7SLz`z?|b#@*Dya<^p37qZnf_A{Y~XVuV1V7>$<~GxH3wAcMdNGfqHY z1QVDrny`=wq8NcT=fl|7X*cbhJffz>;Dt4P+?c!%q)<|^D;lI*?n5-8stgSj5)2YY zluWeWFHyL22Th<R??RKl&I1P}pBGdI7ZSM%F#Y#k`g#hn$f^>Hs14!cTqL%Jf{$Gp zXX~y_3yIuh;QKyv_vXS)MldR&lZ;@r;VPkY^*q7NOXU3;Z4&T6ZQRao%6qrcwQSkq zBG;=P<yi+Kk$_?%=Y%e*-W{X=*3Z1Q`YHO?tt9X~O!T?68o%w^M|s^kD0W*5+O%h| zmzg^=q*Te!yhN%>bz+R+V3h4IZo_yU^|`qi+;|@9d2HzJrgHf*7fbh6z4PgjbPI#+ zuWn<pcIv<Zwyhe%uT(Iu8v`d<7|$c)dAww$mV5=nEjIo2{3oO{_4v<0Q3>ZCpRM3$ zvzTgi9`O06*K*72qVBqQu1no@v26?M`i)mw7}#y_#L_-gK(y%`6=i(#6hWbgU#-Rr zyd^1|Hw@pM-i6~hIF3WDR^u6&A(KjHTWspp?=f3H7d{7xry&T0i?i2RU0Fd<gdi$1 zKHSC4fvc>sj&s)Eh40r{nF}aipP*p;krtbJb%#=^f<_OW5k*YM#NPWDKOQ~FrlD2z z7K_;FG}pGcOgrN&*)qYCzw97ezRl=Vje&E=JsZBCcSNen#%Djkamx#e{M_5Z+1$5` z968F;(NT)+?TpUk;SZZBr%L70H~7~cur;{F{oUKIeD?WYUW-k0*#fz2VNoaTdG~#8 z@7c%i$ByymnKS4Y6Qrs>?YT~#FHE!kz5Q(1y_>^_KlTA^%d)cj_rIPxdGdrSqSm6w z54HT}%`9KPo_f8Gs#<MrZJNnsc#ukQ`t(maIXRKCEGuiND!siuL+NyCtuc~Q)im(G q3q91-vMiHMryOJC!u0e%*Zu{eVTtl8dm|120000<MNUMnLSTa0t~PZ5 literal 0 HcmV?d00001 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 GIT binary patch literal 979 zcmV;^11$WBP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H115imsK~zYIwUte1TvZgufA?k5X(k<KnlUqZniy@xg~c|7qLeIZ z5xY=aSiuhpet<4?qZUz7L@21V8#f~2MiHylg;3o3u_#iiR3f&-RVqm)olcTTCw4wE z@7{A<yf>3+kj#we<=ywc=iGPC|J<+tGpfq}S-k%;*qMomr++zc;G>hq#GAetz=KCm zp4c&Z;~}RCDu`1A1yP(+L<Lb$Cx|M){W1UE?_a-oY9qm*??2MNZQK38>%dxzz|W>` zxqHv8dqgA*D1vhmqO{v#dwS-|czfWV_U?UhYc6-smUMcDQSG~Za`K(C`}Q?v&YyoX z22if71;ug$>m1HWt6C?xrq8;_7HlBWP7s5~v{-zge)%%4UdQX}d%?5T0>@(j%YOxH zmlo>;)?uv+F|ZqK*Rt!*UPrJnHT4Q`B9+Y^rBXSxQmH&@pbRX<0C2XyTCHNOU|p1{ zb?dfuI2YQ^IyRn-hgGM6>F+a{XE3H#hcic1ueSE!&)L~mFU`!p-_1#}^>Tko64U?G zS16U91!6~3>rJ2O<sRg29y=ba1?AFG;oWY>#Jc&&7_-G69se{pGV(+rpMS#`vo-1p zRMi1IfAHnQo-zBwbd_e_9cPeCCbQ{b|BIo__WJ;8)#|E>Sb%bQ^_$|t+;aeLJ$~%R zgAYyKiz=#$M7Ze;GQPiS*dO~mnMzJHeFKTa4b677T5DzJ^?3{o#IFn9k-$?k86Sw> zw&@h3a_wq0$X}R8G`x&q)y=hNv9R#*;+5i4wQ6my6M>4T1cEdi(hwvNBygQKd8v>; zolXzW4P`T*BvYx~3v=^dft~{h0(Y_bU106h&%a)XD@yc$Dy_BZR1=AWKRUkihvAW% zUh8&@_CgSyw)o)o++DqlF{;W3pY1+2m`M8~0tyZV0YSh4gsO^y2$ahCQ*XbN|E|;W zLUhsY*t!4k*w~%BL<AMZiK3BIt2AXgIvuK<J@;h^=$^p3syJC)57Msxsz}s!Q39&c zwZ6mvR#vC34F$ze>#d7W))lmcVSlZ*+~}4dx(5c&GZ<s=JTF4iLeKLejQl<P$zuTX z`IQgz`Q_6hfY5v);@Zs+oS^;sZMOtH$@RY}e*=!<!#}20AT|I1002ovPDHLkV1iGg B*MI;3 literal 0 HcmV?d00001 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 GIT binary patch literal 1393 zcmV-%1&;cOP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00006VoOIv00000 z008+zyMF)x010qNS#tmY4b}hv4b}mWZ+V;m000Sga6xAP000;O000;Ocub|H000F1 zNkl<ZNXNBRYfKbZ7(I9H9bgv<3J8l}G(un6_+UW+wIXXD5N(=>f>ueaG5%^|f7I4j zD~+u`nlw#)g;r5ne4<HX6-pJ_rZn-vqGGEcDvu&8TOGt*c6N8}%<YdZW+iBA8oxhx za%R4qd(JoaT;LfO83|lcTquMPpp2c;IbTH?+pBZFfDnRXM~;)HAz;IS#YKz6`VTiC zE-n_1CdZo=OHz;1*(<E+R@}R%KnNkKj-L3>By0ps#Ky*wgaiu~E_jP+8i$;b3C?v0 z@z49GQ6LQmD5JFw$3=}&3VUURx_ZqjpS`j|rIf<qxTsM^YyTI4&h?dviAgf&9Mv_| zCcmn^R$WtV;+!KsK0$72>#CTYXRDu*F+;az=d=xLC;v)78Qs^{*Q+tcP>^4shMVLw z1^ERkV+_|@u5-gM4wY`&IIp~HmjsY;X=!QU05Cl}``u|Xvj?VSWleaZq{T&xjLyyu z;q&<f=bBJeRdB8epU)@S+i#1^oY|uFMvG9CyJGJA*8}NUIo@eAvRXH9DfJ(yv>TbT zW-HUD=Zt^SkcpxwAOvtUIe22Ch1|S#Q_P+7D!b6w2*WVo@pup)7mu?wr)9U>EjRyu z^#uZ8Y?1|mKw#9)vTvIJ#EnQ$b@T)wgbba7A8y?4Jj^xY;P%~nKnTIn$^+0e4d0(W z375--gfR(7Pq!i}G74?C+R)L_r3r|&j~&YJnw6VZziIutd80<fKxQ%+V>olR7NbXx zM)Y&hpp3%pcEg&UfsU>&d|bNq+NJa7CO>w_!)ws%ox?Q^(NR%IPEN+<D@{mANr7R2 zf3>4b8yxiUi4#-N(bbN$)QKQO8kd`!`_P$3EE*{y{_J+LPquDDSXdbUuIe!J2mBa6 zegbxV^SSoG>xta6-#)mvYzG@~_ah=A0<z3Z175$!nl<Z7$GP7&JhW(W(IT<oqm4rm z!7Y{~5{wAua{Yxh@2!Qs{2N?r`2%B<#^O$olYhN^w^;YV`_kk|FVXIvZX_jG(A<0# zgh=>w+ZX)ug>!PKf+t1<r35Xltw>8vLr-rHrcQZ<9Y1ymfq)-fcRDd9E*_oT-Eg{G zFq<P09>#us#G+tC*cL8)TeeqLsCD&q#Fl3h%ik$6l^@uz6G*s!U!jteisa;E^tqgH zx_V(Un-L!y53kpY^_xn;HSW=MJxajX^$0;QB6^1+Lf6FH>YD0bii?)v$NHb?(xO6P zGMUiO(13(Q3nsn%A|lKY2m}IXzuk__TRy|pOHKJcRqdga_Q%A;3=CH=6cKVket}w7 zUsr3(v#E?R)9R8HeCM8WtXR5)9z0SNP`zqDWh^ctJWN`?w2-<z9%vf(`&88gAX?XT zuc9a<lz`}5f5U3cB)YC+#qttUanUl!G6Uy2Y&IJ^dHSR%uQ=p&Ke)f6y|uLgfO%@h z%*tM;i}ox1FoXz~B&pvpi~#^D03J#pg+@f9qfsCFi!!VkR8bVjjFIMx=br~40|*Bo zgNWW!HD^+&L>dR(9=j~doqoUH9VGCFo@5z7^pfJjyFv(fRrN~!*`N01&7Zf@Y%)zH zgup%EE~%-hJpsT7Zb%C07eQPPSp@(w^Z^AB31AF>L;$hDUHSni0Qvyj1uz(F9w}zT zNY5l>l>wLlL;)}d?c)Hv06an28lLjXeCG8xI|gS+>Mry}00000NkvXXu0mjf=6HJ^ literal 0 HcmV?d00001 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 GIT binary patch literal 1300 zcmV+v1?&2WP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11d&NZK~zYIg_T=uR8<s)zkO!Ulu~GEJG8YIi(CXzBbP#gu>uhg zG%+ZNnh4>=#0MW5V|?|IkeHZYG(M<Lm<S<3jYf<yCaCyesvuCXQ1Aih)wWP(I_Jze zdo3T%nduc=$z;wsd$0fh*It)xcI@2o7W0^@a_i=eW0x=Y4$QY+vhCZq+mVrx#k0TX z^LeSNs*3CjdtZ9L3>qU-`unr{_r1W@`w=|5=lQoUT<SR#J5M3SFp9O-&QLwYp=2sD z_rnIDrMa>4=0Lxe2oyy%Ay75ertH)L8i%1I&no{%VAE+=S6izkjMyy}tEk$82VT3U zbI<v+Ie<ltrm>}^=CSE(w{G3Jm>bfeWe>LB*|l?5@ty)sp6)G$gD5<*EX#&9%>YDE zqyX!;w7&Ajo3FlSGX_Noea9yspLhrO!1pJ;`noy=xY#%3oxeVuisM!Uuz>>=MO1Mj zoVzl>x`&$p2!f&jc#5g6OJ~UB0g#{)PcbExnk4V+)uB|)lB%>woCgubp6MCJIY;OO z7dbjs)RvQ-)D?mwlmO%W_+1QwV;TVfp$OMTeAEffDI$WsIa(l!9L@=mb8J|?WEw$i zPK3w>m{brGxD-w#ArmBdcA=yHwj$0ENi5jzc_N$Wj4NPua|Or0{uEFKCwiA}-rdl( zpvv16h5?v_AWUI1Y}&lLp=<r4Pd(i~)|&>y1NEEbZlM^Jst6Qw{KJzoORTm)zx|%- zIuDFu@W4Q((ou}!9AxZ53VB6U5Eax3V<Q1;tM&)kiWbUvfL&ObK~xZl&+Ov)Yb;#v zGZ{@_JcBXuFUT88X$^v)+&7A%M!|UW{neLh+R&U5kvPe!*s+0eL>wZDQvnf*VTcw3 zJmZxKFkljfsfJ3bMTKH$Nvk0$gt1tSb7Kek28djoWG4=qm8cMr%2XjHhBF3ig`*f1 z;;>T{6blAXhbo9bJ{Pb+gpt1CGL~}=yL4q!tVv>JjVtOIG4*Jqd~xjPh5p-DKg(3o zvG3r<{hCyf9~!<qdhYXLf$omSJGXXjdFHw1tf79%L&hH};6y<^P_Qp|y*N*UZv)`x zAO5)h<2T($);zhW%lCu**isc4{G99l`?uVYQ>VT)ot@iu&I1xh`%Cw`B$EOarDoA8 z)~!7-W0MFJ0v}vFa-<lKf!U4L`_ET4KiQYo(l-TLm(7+(g^H5DJ2t12LlN?Rz*GcE z7|9%hf<NT7w6%MsF`=s1fwAx6q$I6flioe2lcPvvWN<R@(sB7kL6Inm+t)cM?{_X_ zqIen=NiYSQyE}msK_wn`i>t$O>z8=OuLLK48oSX$X}}pY`Zu}+;CWW3E-Hubk0w== z%%Y7eKboPorn+^`5#@3^2n^1b#M;{Gu(W?w`@V2^Y_%jJzysTmT|38V_7UCB;-hc| zpdynsZB5%|+=BMZnKRLRj;g}=_-%|ap5Ei?G{$&`4<E|5wY8^2#7jEc%-GY=u=Mp= zeqxM~R4SG8egD_d(Xn}trexLC6{}iXS9FA7*kX)&&bi9z>;C};rVCcCC~OM=0000< KMNUMnLSTYpb7m<3 literal 0 HcmV?d00001 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 GIT binary patch literal 1097 zcmV-P1h)H$P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11I9^2K~zYIt(DDdTvZsxe|Kh*OeV2uW}NBN5F5o34JlagBh^Zy zjVMt;L<)j}_#e1z%|fJZio4>*ofJgGjYtbBEiH+$?V=@^5-rW7ZOo)eGm~U8?VXQ% z-q*$bm>VZnDLpWpbKZ0A^W5h?&pBhMDhGy#_s84gukrv}#jgBv?(Er#7(g<WI#Dc@ z`%ncyRZ({kjMZBsJooqc&!_^5D)eO29|F5#0G*wk67T2?K-_120Bx#=fx_V7dPhgX z0K@>I(Wpr!Q=!c?fd2{pA9Z&P>Q!3;f@~&TI(qc;2WbIgW1p-A1OTy^JN)kSG`9+O zA*8}rgo1c|@Cmh{x+l}g2cvs85d{SPcV1enkW6(Us)#5ef{3Cj7~>KeQPiu8sJB<R zajS%gu)31RsjRjI1nO-7DBE=kRU5~+HOCmlD8?9!2*$WSF@hsr@6CHtty~)ao^5|j z@!tG}fsfzrey2%+V}zpZ;26O;#_f$uWE`*eKpX3BpNSRFg=HQ&pXblXd?flDLxBRH z;Dx8M<npUP1SJxr0@(UIcnij<62E$!gmr+)p&`!aPSut+oMTN25~~H0i;HLoHGCF4 zZ18t@CNIo>&B*Xh?8UFRKGVng;KAI9FTYud`6xcX^4t>HbTTkmRRR;$H$JGjX3x)^ zWdE~ioZ=OxayGk1Ugz4cxjP|~8w%?6I^~tJ3t|ML;wH%mM*UO?#_LO^Ssu+6*k;}3 z%IsgX_KdRcwU0P8F}8I~Yj>)wZP*y`3>4!f$4`-QO%<V5FVmfwq<>eMn====d_BdH zBgec%Dj@}pn5O$O6c>v`RB5Ggh<vjJ@q7_(=YQsv7keqrjWa%z;F;mWh$xoTxTl&F z?0fTh{!bhK@i<TSKTdh^H!kF2y!`&BWO@f!Utg!YyF1v|6w`}SUl47r1#b?DO6bb) z)T}ODW$@rzOio{>*w)7HH-8{wPx8jdXPfYv6vSF!$IdJ&AlgWddRKyqQdln1*0P;* zC%+|c9%9e%9(H8A*eI1Z#W_UKV64_w*r;7{uY=Il;Lod7Vd|%OmTpuS7|qg`X+^CG z7K%cP84M9@GMNy8O`%Y7-&h1AiWpakF+#m=c(^~oV=r|fMzL)>xbzZ{Y7mw!O;%O* zK6x0svUYEWcW+&8k8l4s1&x@t$CI?jllLaLM+^VG0>muKiXS@kZsg3F(-jf5?i)GO zA`wgT`GtsOS#e8M$z;+`M5B>GW29YGqrm+VsbyIv8jaY-$n^5^?Q4GnU$azZR`ga& P00000NkvXXu0mjfnv?&W literal 0 HcmV?d00001 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 GIT binary patch literal 1127 zcmV-t1ep7YP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11LR3WK~zYIwUk|K6lD~KpP8N6-R>;iE^P%`YintNQhpSJErgmV zsF)}kiBW?Qq#9!ILh+U+Cfs=8jfueoQ|W~l#-v7+MEnVA2#S&*m>`CbVoOU!VCnvE zcjh~v7qi`9=&!*ynauY$=biJO_k70ErLCd%6|3G3Sb-pOL@t~C;P4lRPfvHoYHeN8 z6$pl3&*pMytr0DtL2F%}YYmj<8jXkst!Zs;ss^5$mcTSk7B@HJDbEi?DX{4BSZhke z{@7m=P@X$emKMNkukND0zMhf4lO>YrQC$_GB4pFkv-ifV2(;EDGkHG#?mUqS8>KX& z1SJ}!ROu~<2%?1Mx=OZfUOn@l_ypSjP=rf~ajcMm>ndE&^WUz*Q>C$|@LWaX!b(I0 zJ&SZLUsJ&jm^4(`SV03V0Ypqh3nG3!wCM7@xh{r?0J9*NkjT(NYvwA!pp6J6_e?lR z|I1bLa<OvpXM#z|cEv&w)6-aDU@DF23Q?zmrq%}Hm7ohL3Yi@FRE}$-*Jm#gP_Dt? z*&%Gx!cz**^R;ier-5~kcQAVPXTJR86sc^Gn!1{@M19@SB~?-D#i!mK+dEASG+`&q z6K`y}<$$4GBB2~@>(;QSHciT2M!aEZDFa`Hw$3ekzU^sQxM|;omnX@<Z<@k*nt^Nk z356ZBh_Ac&Iu}!M7A?Au$^{D;J^mh73L99t;)SwA@n|qm*R^T;(YKaW4_zAGx}!HE zH`M?{G@j=Y2wx%Sj9^8E3516+LPO-$1x80tBI9W!GfMl4^_XYB=loBfqLga_phY|5 z16F5e$CjqX#&7z%qoG?QG7OXCSc+mXh?E;kqdbpdIs^IZ*lrTDn51L%a&C;BVduSx zmrUd7CnJtylgtv%oi;mGH$P+s%wv7s(TzKLGwE`pS%C`HuRJiR6TBr!3IqK(p)7bg zaI?hCEb;1WL>Ds=QWyR8{8d8P%XGG{S!;)!6Cb@2eb7oIZln(#`fNBBi&=m%mE9WC zM`Mp{d?0MA1gJcCIkcPe1DAp${@rIKPO)~?=H;18`Uk_8$FPBU6SkcUcg;8L_jldB zzwQ1<yY9TBDjskXP`C=|LCB1hg99*s6@QFX4gP-e>t~JGG|SEC>yFmc#zJq#7q+xl zIMEtA?96YfuWgB3{yYF63pViEQ2yMxUynbw?Ld04d<Fd1=ip9f*<bz77u1Kfx^QH> z9Dis1j|X=;v5EaDC7BBhJ3_wU8TaIgV@LkHIIwj`Z>Fr*Z6Qb%L+Z>gU-dq`@51g| tHgAJOi~Dy+_e`}v=OWJ)=KmTU_y-OCx6IPCLCF9B002ovPDHLkV1g<P5Z3?z literal 0 HcmV?d00001 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 GIT binary patch literal 2443 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 JPDHLkV1h=rv$FsI literal 0 HcmV?d00001 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 GIT binary patch literal 667 zcmV;M0%ZM(P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10vJg|K~zYI-Brzs+E5h!P7-f5iAkUcr91Hje1mTL0t5O;u3WqA zVx)E<h4ulu8j2e?{c|A*6=^|moT-zT<eV;M67u6H1D(b6z=3=3x#xV}`N<852p&_k zM~(hp02s+)I2^uKN}UlAJtP1#7xxm!@tbb9`w0LbBIxyc_1SFpTaL(`qr`D6Q4~oO zMG}Ug?Du;Kf<S^G5a0L3_kEd8r#}aSK}AGvGf+xBcU{+HW~|q1WG72RQnhUx%#7`J zn>$Yw06fow>$=u%x3d6j3>1WjplMp_L`0=B=(?T@oV6FnJ_kTVP)e1UC4j!~gPGHP z(gPwwrBZ=m7$q_}fG`ZP*=!D`f2bVHoUUuN8Z65yWt0LWOdE{`m^pR6PmA`Xlt)Vx z1OXO{MXr{ovd9jA<2X56DFa>C(QGzL?6Uh)wtIUZA_#&2^ZEQB^Ws_3gXG+CoYNU- znub=Z^<d^%_D6e=Tu449(=<UuC&8}&T%%&#j%iWS$1cm_$Lu@azB|X)Z(qR7h~qf5 z6?MD4#D|aX@p*EQ2F*Ta8UTz&qnp)gwNpw#DV1IzB2=qYn5GHSG+|j5EX#sz+pujL z^?DtaZ36&wO^55c@H`L8<#N~W_Xz;#ZiZ`}PUls--97_g#2i1<2rroN3&6gVcR@(U zOE9j8v`Y~QCzHwfcs#xkksB&D<zLIw|D!#9fWN$$We+w^AX@+c002ovPDHLkV1oGx B9M1p% literal 0 HcmV?d00001 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 GIT binary patch literal 1190 zcmV;X1X=ruP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11S3gAK~zYI?UhYTlt&oHfAhXC?|!lD3IdkGt|d~kMuV-|KtkKJ z7kj7&6N%U!OgxzMW;`ie^dgA~?y*sCJ(R?Ym!3>a@Pt|u5-=8xRKcL`!hW&4@7L}- z(*t2E8jY8>mrgRLdFKCn{_{LDBa~A7lSBJQ)&C8E@u7h~3(*^l$G-<~ipAf4QtHnS z*(Ww@Ff}#xooSjQLI|<Bs2oREQ&U5o9UWcKXfzmZYtsR&eBLjYN={~V^@SQ8oe_b6 zzqv<BseIr6<@oXAw;O;<mo7z*967Ss*Vos+8JL-w;mOsjL`@T+Y1p2JuW5)4Fk#a~ z=sN43$Ig={=@=YjGuefOg_XN^?|yRX)Tx>QV47xIEEWq(Daqw>IN2;u(`jOn2#%Dv z@i<*0BXsolBc)_*d6}ha*N}5_M0}selao}&$1%5WCmxRzi^U?AWkrDETSXQ^@MvO! zW+AW)gV@ode0t^#k?!tBOfVitRVsvlTD3}WZH=YNm(g{dH``u&Q#^a~CgHU;>V`pR z|9;vJ9>g#V48y>29PDb9#}_UTEfnzUbqbxGSd|LF<z-5@ZzH9AH=tIlk-c+=rlzKi z><=BHSS&VXA(vx*Y>Y@Qhm+4^rBd`wPU0n#7*bN2okdEy1=46!r4*W`A&Ny%3bVD9 zwzf8uQYfX6^*Zz8<FuB`c;zze+s9{PV<@Fq?d?UqdWDzCyyalaJ#bx@Y9>QS2+C6O z{Q2_@fba7%ou;E&#VMC5_V&_w;sh%zD=4L?)@p1Eg{T(_NGZ3}VT%J@*NN=df%ftx zQC%mINFeKV=ElbO$hL9HW$JtOaNyjzznw{mZ5U`$qQ&F*zW;j8TLG@?Vg-Xlq@=L0 zz@vu`$zQobmu2A=i>!5b(|YU}i;If@jpOjERg78<qrLqt2iofZP1D$Q_%OEX(r#H~ z&Y!18)9~_n>{N=+FJ2^>Op;6{>FMbqkw_q>r)hOvY^7)!9DIKlNhxU`9!B=}(`1?? zYBk(!7JK(@cAY)j=n&ucky4Vqb&JUQI_}aEUSA*E1_ya_Y;mwDp#S&-i<L4$*KtZE zyi$p^*;(q2gIB4Lou20D#02KOdx+Uto_Q{rZ@+4YzV@7L)ZqH{>-O;Qu$4-sB1$QY zaENE$d`V#b50XtyG(UNQJuyKc62UM7L=Bw|rEn~Z)s_~X9T=c16ebpnA%x(;g9lbR zoffB0pWb-vgb<<8(b2C51_nl?l!4-UDdu_J$Lpnvy>osp*&hnF#&x}^GZZoaGPYeW z*8SQe$H_n4yLYiA-W(2^!9q)OG%JK~?%%)v>x~;XW|UI4c;A;PgwTeDh61*22fAE0 z_Qi|LL4bQ*oxi^b1WKV$$eo#)ag|c?of`lD$^SXvFGP?qQ3H*BhyVZp07*qoM6N<$ Eg1X2x>i_@% literal 0 HcmV?d00001 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 GIT binary patch literal 1108 zcmV-a1grarP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11JOxDK~zYIt(47gRaF$le|w*M@B5;Cj{=pp2!6DbNK!`v8pT8s zNgKz^Oq?0{j~vNgK#T)POdM#OK%!9tCTNtDs7SH2<$d3C@7WISd#|s&CN#t|I%n^d zv-VnhpCe|*>e}i`k|gi*Kdv-Qzq;||jh`ccix=Phyn1NrWvoaVR&32i=iS^`+!!Lq zu*LqtgTFrpmLh;kwQAGT)7Su1V1|2RY+I0z;l{C}xWSX{Z3Bn~i7bwz-9m;Jja5Do zd#Yj^5fph<$wmanXJ@ysT)A>Ea}T(#UHk0uh#=3i;G6^C>s!C`&5wT~0;sY$Kh1}$ zuXFv=FX*&7V377bAAGdRy^ZT^HSeM#fN*O5J(gcx1t5g5Yf+YEVd&q+R-5(B9!?ci zVYcBhGkUEatw&Ar5J*!`x80?eJ|@%qI2A;NW^02G0s#GfKOYfz@53+=LSSiO3Xy`~ zSfhmZDTiOEQ?4XfFjDVvkx(tqBJoRwS`6>Iqekyh;JqIy@L5j1mJ|dcRANV-2jWsh zUWo~Lz|;sBstK{w5D`QKpJo#iHDOV!>-qMVO+*!^%F2s1E?-#W-tGHzHroUXbh~|4 z-dW+_tvmGPCNi+|5SJ%LI2zhA&fMw;oPs*&`5b_>o09d?q6eKGd6tu9Z8F!yiGm5i z!u|@z1LZ`yaON1Qf~s(GCc%5p$ulR&+MW;s{WPUqEpfzNBah;NozQPa`ztWpeVqbK zS7THK5vU}JS)f#ji4cMr(icP_ipscn3K2m?NM-U>Pbld0Grs$E2j>*$l;xw2wKo^} z<EM2(t5DEvcQ}1+nT_TTNbP%c&;ysPjmC5jftigGPK3r(2`7R&rCL_Zj8d(H5D_ep ztD!2yaSazYP$#G=c~75hQ4}lZmJTB-s3=D(MxJM!I&%W?1+LdmsT?YEBsoh|sgK6= zaVvSYMHY<hwl8FhkPLpi_LC0IgM~o5+r#^e)Nf<S#;6zzbI(?g`kcEDyErX+(5-qv zczADvQmW)3u+wa@{C1D6-fz^B+k=TyvM_T11wiDAN2X3;@c)Yl&M62ul_CbHDsIpN zjDwA-a}MVOr;5n#WzIPeK?grC1Ja>_@nP9lfthjs>>T0FKOlktugo<FA#nWk96Os$ z1fy}Z#LR4iy!{s2j}8L`_T>D<{Vf`2UR-FfxX{=m)66)(_6AR{TKy8tUz)(~u}DP9 zSFe6zw{G3+nVC%7@*GP<Y<+#*M5HWcM!jBNh~sEE&+{6fX6W->OaOv&uI+txcV}nk aum1oj;A6L59%c*x0000<MNUMnLSTZB&i+mS literal 0 HcmV?d00001 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 GIT binary patch literal 1213 zcmV;u1Va0XP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11UgAXK~zYIt&~q}6lEC3f8WeEJKbG&w=8RE3)Ph379z9)B?>7N zBh^B<0KphE@nV9Kh)3d)g9i_uy@`6@PzXUo2ugYZQK-<6D2Afp|DW0}-9LrS{+an+ z4_ivn(i-r|OlBtUH_!7u@AKwUt*tLQo$EJzuC;b}3Y3c8(Ecy??|V{Rr_<^6U0oYK zDpx8XAV{?$6K^7zi6>0ds~3n+C=|-TlLeHrl-3#nL}Ze9l1K!5ir~~WAZXh*Gda`% zZ+36QbzRDpfMVGPAQE;^Mkp7{061<4l#d@2tKUup%W@bP81QBlaNQ7*NQAEspXax$ zqbOU^)A2mXLY9kXf5#YM(eh>zt(O?iok3ZOg{f}Zm%f8-S+hA1j4_A^N-1J77t6A7 zwZaM6M5AF01~=^B=m?QW4OoI7j3Xj=-gq#pgCH;%W6+k+I4_E2DZ;LW<A;c+Vgx}z zs79mh2w}G#%TffUx-ny9CVsRClMZfW#_9hvkG2)DksG8+MJ^9qr;J6VVwe~Im2B}i zwr%lT<gIGp%p&lxMaCFvqao5w2{eYfo2N*(En&?EuW|W!ANgR6XiYshOR+44t#tK2 zf5r}BL3Q**gm8^bLo&?#R1Cdk2g7O(2F0tp-zOb2sF8p<;YOl0jUYD082tXT;UjC; z?wwKKp@WfpiGeG5E?g^cd*lH*&!X>}AE<amnpdqPdj1~wZv9BkJB@EVL<ARQt=P3| z-;u7a&!!a+dE_7&cUhfI(y@3h4XG%p#w78!mnqyGLU|rb*1bX9$#&+3*5KHYYIcCm z<=ocp?vIab+_--l2ahrcj8F-n96;b3f{Kp>hTP3th*H>@3~jIUVD*ksyl@>alfn4D z3dY7Lo;cw)tz7x;;hvsv4|I0g(`N9%^SLry<XWc4Us;db$QaohS?*lCf>;)m%Q&}h z)84d#_R;y24jyDtJRX*Oo?vW@OmDBQt*_tWCK7!IIy-9~8&hKpC~zDbZQB#$CunVR zCnMZ1m57&0P%L5(4^uldgqzFZ6bdR|DBzEdQpsi+IdsUHvuV?Mt@Wt`ot>{+Ac#~2 zmNms`t5dv`5|+J?q+xMAiFAti>g8NI`4h#uIwT0d^T6{E&qKz?39?!ILZR9d5pEtm zsv<2dt18BPp^cHrpw}*I_(wzunpzhEVEh&Q(c4R`ww7c#Oie6?xq20o&ttqt=bh4; z=55>j`-6kuJC^mHN+y$u?c29~Dk5=XjLj_2#^~l;ZefFvO1Pm&G~|YxMCN6V9i!m7 z)NI{a93C9}>g~S151AV9)85~8bbNAg=T14@(juq!?8*18Teo*=UC*}T{{m~l0@UWs znY(At?%r|c%)!ST{~rRG@$uoi{ry{Z^!NYrFY#w3FKPYropa|_Pe%@*L}os2pB2yS bU^e^>_QqQ2#+tO%00000NkvXXu0mjfin%z- literal 0 HcmV?d00001 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 GIT binary patch literal 1387 zcmV-x1(f=UP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11n5abK~zYIt(9G9990y@e|Kg!JDc5PySw>ro2D_9G)9Ujh^SPs zepjmCM}6?~p}vSOzKGT*6$GC|@S#2xK}Ap>R8-WWjZ&JbQR+uy8?n|6n`E<@-N|NW zcK6=n!zSAei3s9>fjf8ZIsbdk{hd2XMA&=74cECb_a^>F3o5~9Uw!%I*A75BlX;_1 zS{_0K01-hNgXUOPztQ@>wr<Tw1Q0}EYhU*xzzzo>kw_Rfo@fSX_^t(LIL4NJdgd1Z z$Yr`%NyNFRDH{ah@pcX10NA#zGwDprVh{w!_Zk0vhV6rcq<eemy!vVY{KZ8I#Ukhb z_=6t?hp4u<H#gGQ7}UawX$ti9beCRu;l*_|Jagm-#mPyMV`C`57|qhTb6^Y++omrX zrGI>!-K7%A@i9gZ9a`sq`0%q{Qvkqm8pC(K_zCazSGk-LiS`)fAmr>^5kEaZaM{gh z$DwWdG+QqG%63&HVS)GYCmcEU9UYH7!GpJ7u}-KduvY*1@242`XNh&CnG5RtHL?eD z_l-DWi0MWN^w2I!g*>^VFR`_>h*FB3=?XudJcYS+&sxNb0wRJj22-z-{NN2zJ)L+p z;l$`Il(+4|WXou+(Z-;)!SWWl?%TK6nTQhTIJw0l17)Ay&)!Bq^Dvg<Gy$+$Gnk#2 zV9=_8Z8KSJV>Ug^qF*ELS6T3@EEKDF*&NqQzQwQvg#I$$)H?V!GfF)O7_63<otU_Y zbZZ78Lhkr++TAFHN=WM7LtNPrX;J|oUV;Aa-eW)oRDGYBSc=XkpQfV{u=v_x`q1Q# zA7^0i-loX9GYGR;ToI~OO={VPWgk|NHKipICqJfNYSdO%_*1#KcRq-ln?*!W@eWKe zPd%I6m;tK{*F2A?F{o&S-mWyp2qK1>SHPV5ls=`Yg;g#%aXRmR93vpcV8o!@7!;xA zdCi7vDN!SXw(f3Jse~*qvz+%a+E6PMa8G^2Hrr6G1k6+v=9Ys5Ij;f6>eH_Tr4()5 z-OXm*P@>r2AZB_RyAqN=J&jflJ%3HGJtEY~EBxZsS=zH7{rensW13`%H_wP;p_FRG zFlKX1d-v_*xA)$sH`z&H>O(R;DTY%W1i2h%sy6DbN7<sJc`gVT5#rxWl8i@~3qyAA z+xO2Iq{hZDmkc9IOYF4DbXtZmpU3O(=Z;riL0L_zn>KUwD3RU6luw*MjgFEU8~bNW z0py__%)LCr*4P%LT;@zMOX{ghIeGf|)w5d7III!A`7<MZS5TXpVot3f2M1bi<V`RI zh<3$r9@xXuyJzWg66~^*EWC6AhEkXg2PF_$v5Ao&Z4VKinj$X&&Vk+NWMtj$H(&}7 zhIy=Ob1Wr<{Lu@HWOlHv62Na2l<Q)-E)s^AdYMYZ=8Vo#IuIdx$u#k>twmrHOzZVJ zi%ULXp@d%-O8YxG|M^+cBuGXRB$bA+jHd&N+GoM>DcsaaJBH|Nl}yJ9)oK-|<t|!R zBFnP4{;KDw1YUDaZWHQtjn;;6ArC-TcNey8;W#!*DU?zG#M~{|w!K-S$tt@LbJN7! z^aff0=-+(0)mneM0FF}1z3;wztYgQ%2#gW+?;-x(EKAAkY}Qgrxk^On>FFM^ZEIX> t6B7{|_^(2ul+w0sRkSug&Cf5K`x`*e{!124+DiZc002ovPDHLkV1n)GkbnRH literal 0 HcmV?d00001 diff --git a/formidable_1_0.orig/inc/formidable.php b/formidable_1_0.orig/inc/formidable.php new file mode 100644 index 00000000..172b81d0 --- /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 00000000..42255c45 --- /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 00000000..6fd86e07 --- /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 00000000..b5719f62 --- /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 00000000..661e14a9 --- /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 00000000..ff9a5c2d --- /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 00000000..20f873a5 --- /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 00000000..f6663cd9 --- /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 00000000..108f4e2a --- /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 00000000..97282392 --- /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 00000000..c1747f77 --- /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 00000000..07a38217 --- /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 00000000..79dc4e9d --- /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 00000000..02d78a07 --- /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 00000000..95f7a4c6 --- /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 00000000..dd6679c0 --- /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 00000000..559a130c --- /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 00000000..9f3b5e93 --- /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 00000000..0221d330 --- /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 00000000..e22434c6 --- /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 00000000..30bccf4e --- /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 00000000..59afec02 --- /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 00000000..04908427 --- /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 00000000..f2a80983 --- /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 00000000..9d310c09 --- /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 00000000..df8aa011 --- /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 00000000..6a19dc7d --- /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 00000000..b3eedd0b --- /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 00000000..f655ed30 --- /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 00000000..452436e5 --- /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 00000000..40a22f00 --- /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 00000000..63e9cb59 --- /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 00000000..4407c024 --- /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 00000000..959b0ebe --- /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 00000000..eece13ca --- /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 00000000..2b7798d4 --- /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> > +<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 00000000..a41dfd9d --- /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> > +<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#TITRE</a> > +<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 00000000..7fd040aa --- /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 00000000..81cbd20c --- /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> > +<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#TITRE</a> > +<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 00000000..a4ebff64 --- /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> > +<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#INFO_TITRE{formulaire,#ID_FORMULAIRE}</a> > +<a class="on" href="[(#URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire,#ID_FORMULAIRE})]"><:formidable:voir_reponses:></a> > +<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 00000000..bfe35597 --- /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> > +<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#INFO_TITRE{formulaire,#ID_FORMULAIRE}</a> > +<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 00000000..ef1289e7 --- /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:> (#TOTAL_BOUCLE),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 00000000..ed862872 --- /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 00000000..0ee28b01 --- /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 00000000..959bad42 --- /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 00000000..2b4d4ede --- /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 00000000..e19e1c1a --- /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 00000000..cbd1cf99 --- /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 GIT binary patch literal 742 zcmV<C0vY{@P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00l7s00l7tx9uoW00007bV*G`2igJ| z3o0mnD^;%m00L%7L_t(I%YBo*Z(T(Y#eeheeV_72VuK@OWFjhrD3i`YLZWjALZU;W zq=24+j=zHl(IWl^BqSPy(nLxJu^mF5jAOrxecydMGl$~Zk<&26*;#4#?3pvOc5ra8 zd(m~@X5<WT0Z0ho8g&KMFH+WZRkgP^*1oQ{wzuBpy!mXoS^<VqNQtgUlu7otUfI{9 zF<aZ)Kh#arwD0flbLY+u!^$LNk_4E9B=xMANs^GYU2t-8!o%NxYwM@SN9EH`K4$N& zyZrp{FRnv3<s&4>?3H|Ye~;tCCw%nNkEO1v%DQFC;rw5Id34PB+7x#uJn;x3l8D4T ziA>HHm%P2ZNiHv`>dNZ=l_WDcJacF|yc9|aiaV>~eO{clbL6WlWde*^f|Uom8x!_- z#B$kSgTakX)SwD6A|e@&hwN-l`190}L~SN8qkXa9wX+wDr(+aJD0|0KghZxL2ABV| zT%5iGg8^oumJ9*ia>e3V!))f1C=_?x6L+VC;~o?*TwE;amfcHZYk-JgI35wzkftpN z5n*Hw2vx`ot7-<SSl^s7o=k`~t_uY3oVD#C`=8&%%y>C+(C0ViQWER8MjSnl-b4^K z7;$#~gg>5s&un&^$RMMyKSN~pT}naIoO18IFB#YnP){I1gwy7)AY)a8m%t+^9=#VO zD8AzIB8m6{X>?t}K;Ud{yvZBQS7rp7nrQ-(OcDr_L@Etc+}_;d<oOY1sCF;Y`TQ9> zJFl}o{Gk7I#w%erzzojMI_C4gDaEJtVzGGq;K6s_RMl`JB6NN9e?nDNSwvYZ7K_LK Y0UY?hEnK!Ow*UYD07*qoM6N<$f;qKQ(f|Me literal 0 HcmV?d00001 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 GIT binary patch literal 742 zcmV<C0vY{@P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00l7s00l7tx9uoW00007bV*G`2igJ| z3o0mnD^;%m00L%7L_t(I%YBo*Z(T(Y#eeheeV_72VuK@OWFjhrD3i`YLZWjALZU;W zq=24+j=zHl(IWl^BqSPy(nLxJu^mF5jAOrxecydMGl$~Zk<&26*;#4#?3pvOc5ra8 zd(m~@X5<WT0Z0ho8g&KMFH+WZRkgP^*1oQ{wzuBpy!mXoS^<VqNQtgUlu7otUfI{9 zF<aZ)Kh#arwD0flbLY+u!^$LNk_4E9B=xMANs^GYU2t-8!o%NxYwM@SN9EH`K4$N& zyZrp{FRnv3<s&4>?3H|Ye~;tCCw%nNkEO1v%DQFC;rw5Id34PB+7x#uJn;x3l8D4T ziA>HHm%P2ZNiHv`>dNZ=l_WDcJacF|yc9|aiaV>~eO{clbL6WlWde*^f|Uom8x!_- z#B$kSgTakX)SwD6A|e@&hwN-l`190}L~SN8qkXa9wX+wDr(+aJD0|0KghZxL2ABV| zT%5iGg8^oumJ9*ia>e3V!))f1C=_?x6L+VC;~o?*TwE;amfcHZYk-JgI35wzkftpN z5n*Hw2vx`ot7-<SSl^s7o=k`~t_uY3oVD#C`=8&%%y>C+(C0ViQWER8MjSnl-b4^K z7;$#~gg>5s&un&^$RMMyKSN~pT}naIoO18IFB#YnP){I1gwy7)AY)a8m%t+^9=#VO zD8AzIB8m6{X>?t}K;Ud{yvZBQS7rp7nrQ-(OcDr_L@Etc+}_;d<oOY1sCF;Y`TQ9> zJFl}o{Gk7I#w%erzzojMI_C4gDaEJtVzGGq;K6s_RMl`JB6NN9e?nDNSwvYZ7K_LK Y0UY?hEnK!Ow*UYD07*qoM6N<$f;qKQ(f|Me literal 0 HcmV?d00001 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 GIT binary patch literal 843 zcmV-R1GM~!P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10?0{3K~zYItyE2G6HydB^U*SCf=WWtNGlfXLZO=?R20!JbR#aM zJHfwE?6U6s7w-HE(o(^d3qj~c5T%0svPnZ4oqXMUT)a0kFHK4yIuP#M``(<J^UitK zBZ-HrtM{W^^cer~X~*q%?{{`SgaA-1mEP2wtp$((0Ft12N#AML;O5D`<QozIK>~Bt z@(TdhLjWig3L51LDTw(t0pL*G1#-dNdOklR01yH|5Cl>xmYmJVfX{=Eshc&R*NHW4 zP_2}ko13rxrv%v8c-crB06-X;*SA}{IIR5v92N;95KtS_BV@*Uu2R7BC(8qk(gw*n zA2r%2mM%j{s1m9QRf1HAn1-SRZC#aiuVU}82~|xHvj(&q0H783Q0v6#i>dWRphAcU zL=__Dr=sYqjW)klnjSF3NCtgT)Z;$-qL99rD5jD0ZM2}-x{1|GVP<Fdh%$=-_ik13 zZT}R255iAfk&qs`4|ahh7Uzo&1Lug`!pvz6#e)OTL3Qs!MxO)V0Flot$c0fNX8_0F zk5DZaQ;|tcMPwp;TC-x)2)_5_2UZ^49wl<dpx5i6b<#2)i9)ExNum%Yu2P7NSx$se zI9}xL?+zMgF+{C^D%LrPi^Pbk=WB}D8?)nWT3)E2eo%)`Vj9^cO2k%ZstX9HGk+@c z<?#&eKD~o~dB)oG<LB21rn~7s2MDS&GMtI(j&c(4n8SmW^?^o148kd3_G%SWK$$s* zb|knlbCt;(r_Ip}T$^^fCphbVGULD*4QZ~lIfvG#WXWl8flWKz7`0l{{8J04VwfaN z(z_tAb~Q|9{7!0?ks_1C^38R`?ZzbfA{Sk`h(Tu4TvS9ZDo)fO!7|b0q33zg+S)UJ zdwZ*`N^fFh=ka}y`};qA&+{UWBr28iVi5RCBAO!^0GPB9J<pRM@M96(JwE>R^)DV^ VNz7bru4w=O002ovPDHLkV1k>jcMt#o literal 0 HcmV?d00001 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 GIT binary patch literal 1108 zcmV-a1grarP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11JOxDK~zYIt(47gRaF$le|w*M@B5;Cj{=pp2!6DbNK!`v8pT8s zNgKz^Oq?0{j~vNgK#T)POdM#OK%!9tCTNtDs7SH2<$d3C@7WISd#|s&CN#t|I%n^d zv-VnhpCe|*>e}i`k|gi*Kdv-Qzq;||jh`ccix=Phyn1NrWvoaVR&32i=iS^`+!!Lq zu*LqtgTFrpmLh;kwQAGT)7Su1V1|2RY+I0z;l{C}xWSX{Z3Bn~i7bwz-9m;Jja5Do zd#Yj^5fph<$wmanXJ@ysT)A>Ea}T(#UHk0uh#=3i;G6^C>s!C`&5wT~0;sY$Kh1}$ zuXFv=FX*&7V377bAAGdRy^ZT^HSeM#fN*O5J(gcx1t5g5Yf+YEVd&q+R-5(B9!?ci zVYcBhGkUEatw&Ar5J*!`x80?eJ|@%qI2A;NW^02G0s#GfKOYfz@53+=LSSiO3Xy`~ zSfhmZDTiOEQ?4XfFjDVvkx(tqBJoRwS`6>Iqekyh;JqIy@L5j1mJ|dcRANV-2jWsh zUWo~Lz|;sBstK{w5D`QKpJo#iHDOV!>-qMVO+*!^%F2s1E?-#W-tGHzHroUXbh~|4 z-dW+_tvmGPCNi+|5SJ%LI2zhA&fMw;oPs*&`5b_>o09d?q6eKGd6tu9Z8F!yiGm5i z!u|@z1LZ`yaON1Qf~s(GCc%5p$ulR&+MW;s{WPUqEpfzNBah;NozQPa`ztWpeVqbK zS7THK5vU}JS)f#ji4cMr(icP_ipscn3K2m?NM-U>Pbld0Grs$E2j>*$l;xw2wKo^} z<EM2(t5DEvcQ}1+nT_TTNbP%c&;ysPjmC5jftigGPK3r(2`7R&rCL_Zj8d(H5D_ep ztD!2yaSazYP$#G=c~75hQ4}lZmJTB-s3=D(MxJM!I&%W?1+LdmsT?YEBsoh|sgK6= zaVvSYMHY<hwl8FhkPLpi_LC0IgM~o5+r#^e)Nf<S#;6zzbI(?g`kcEDyErX+(5-qv zczADvQmW)3u+wa@{C1D6-fz^B+k=TyvM_T11wiDAN2X3;@c)Yl&M62ul_CbHDsIpN zjDwA-a}MVOr;5n#WzIPeK?grC1Ja>_@nP9lfthjs>>T0FKOlktugo<FA#nWk96Os$ z1fy}Z#LR4iy!{s2j}8L`_T>D<{Vf`2UR-FfxX{=m)66)(_6AR{TKy8tUz)(~u}DP9 zSFe6zw{G3+nVC%7@*GP<Y<+#*M5HWcM!jBNh~sEE&+{6fX6W->OaOv&uI+txcV}nk aum1oj;A6L59%c*x0000<MNUMnLSTZB&i+mS literal 0 HcmV?d00001 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 00000000..ef2147a3 --- /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 00000000..0efc6f9e --- /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 00000000..7c9a8ab3 --- /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 00000000..51a9faf9 --- /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 00000000..ad682aea --- /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 00000000..9692d031 --- /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 00000000..703e6c02 --- /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 00000000..51a9faf9 --- /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 00000000..88627d0a --- /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 00000000..35f08b42 --- /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 00000000..35f08b42 --- /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 00000000..a8ef6aec --- /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 00000000..54589d33 --- /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 00000000..0f1212a6 --- /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 00000000..a9692f86 --- /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 00000000..9b75a57c --- /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 00000000..d2ad8d8a --- /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 00000000..e8d8bb4c --- /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 00000000..b8ef7aaa --- /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 00000000..e3105db2 --- /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 00000000..c857bbec --- /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 00000000..c7a60e47 --- /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 00000000..4f5b4d7f --- /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 00000000..678b1f9f --- /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 00000000..3fae3210 --- /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 00000000..6c30ae13 --- /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 00000000..ab0fe911 --- /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 00000000..71e2ccb9 --- /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 00000000..f7d36e1c --- /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 00000000..688e5ac0 --- /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 00000000..71e2ccb9 --- /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 00000000..93ef6d8c --- /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 00000000..2254bf8c --- /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 00000000..c0057091 --- /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 00000000..df240834 --- /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 00000000..4105d4f0 --- /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 00000000..211057e0 --- /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 00000000..372cebe1 --- /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("&","&",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 00000000..98f106e4 --- /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("&","&",urldecode($redirect))); + } +} + +?> diff --git a/formidable_1_0/base/CVS/Entries b/formidable_1_0/base/CVS/Entries new file mode 100644 index 00000000..d5fe6b11 --- /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 00000000..75c7e568 --- /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 00000000..71e2ccb9 --- /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 00000000..4d5f4332 --- /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 00000000..6d0b5f0b --- /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 00000000..1a8fc2fe --- /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 00000000..71e2ccb9 --- /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 00000000..3a82a97d --- /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 00000000..506cc5b6 --- /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 00000000..92aac845 --- /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 00000000..71e2ccb9 --- /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 00000000..8d162397 --- /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 00000000..09c660f1 --- /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 00000000..71e2ccb9 --- /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 00000000..c74aaef0 --- /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 00000000..c12100a3 --- /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 00000000..162331d9 --- /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 00000000..50a446b3 --- /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 00000000..899fb873 --- /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 00000000..71e2ccb9 --- /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 00000000..6aadef39 --- /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 00000000..d273617d --- /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 00000000..3df4f4a9 --- /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 00000000..c8029993 --- /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 00000000..c36bf521 --- /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 00000000..902224bb --- /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 00000000..c5dd9a1b --- /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 00000000..055d61df --- /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 00000000..71e2ccb9 --- /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 00000000..a8caa8bf --- /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"> </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 00000000..cd8445eb --- /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 00000000..afa986be --- /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 00000000..8e88ff43 --- /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 00000000..e999c7b8 --- /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 00000000..31dbc36c --- /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 00000000..2303ec6e --- /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 00000000..0a9305ee --- /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 00000000..96529d96 --- /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 00000000..0d71a5fd --- /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 00000000..edcf2c61 --- /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 00000000..07f85225 --- /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 00000000..f99c3ca8 --- /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 00000000..71e2ccb9 --- /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 GIT binary patch literal 688 zcmV;h0#E&kP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!Qb|NXRCwBaQ`>G*K@?qcE>NIIDHW+n z8)AHE)HE?w6CZu@rTE|<)E_YZ2|wW%_-bOpAJ8|ST0>&BQf>#%;mplFdniN`9kQ7@ zGnuv5T6>R}Os3-O-Pzll(dcCm1QLG?i+>D}BnjS}c0NW?7?!uIci!JjlVb#dr9t;B z42ApAf?=#Res<q<mMMc$rIJU64x0Cx)mpv2U5G=U)2uG@eZv<R*d5WC(i-E*6qRzN z6s2iuUYwjPI-L$KzmJe+iU@8b*tHS|0tRX}swfDFUaz-^+y?1D9LM<5ze28kR--A5 zfi{M-8s*j&=`zQ&qkX)7egGi^B2UY3zN^U+6BR>Cg<L5}siEAQQxHHdC6f6P?fo4} zpqWubAZvZ?y%N6tOdyH`8dF9$n}8zrY;;6GF&^Bn5wK=i%z#ZIdWY#4yLtu$!tV(J z4v4->5?T%|6dHK~Wp_B~3IOcv?8g{eVa#jI;dE=tN>XUnG^dLUwY_T`K04qek+a;F zj0~DB@#}gBvW-DDKz{9LXBm0$xXpWO25chHe0q9}EL}PUuzxq9^+k1AckebJsTyqJ z?V;8=hWRJN71C^c=ehD(<2`ao9A+*v$k`EE^;a7c9h9arrSdC+$`F#f%`j!AuZ$1v zB+L<-Dgk(-=_!P(=Mf-83v=oPUpmXp<Qs`-IF$qtp@#BSi-47Hq`_bysPoE&LJ?0M zeqiUhlUMC5ZvWTc0$~(jIvr!NNQ+Uo+og}m=YIcutljO+L-@}iiAv();^O?b00RIn WL9^_MGf;Z~0000<MNUMnLSTaK%`Vsg literal 0 HcmV?d00001 diff --git a/formidable_1_0/images/CVS/Entries b/formidable_1_0/images/CVS/Entries new file mode 100644 index 00000000..2aeea605 --- /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 00000000..c0116950 --- /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 00000000..71e2ccb9 --- /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 GIT binary patch literal 12158 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 literal 0 HcmV?d00001 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 GIT binary patch literal 1357 zcmV-T1+w~yP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11j<Q7K~zYIjh5eQ990y@Klk35-JRX-ZniO|X*K?+wo+p$Vt;_( zgXpV>2*sdM9|Rv-x)fhTd{6`h6(fT954eI46)Z^AD&kKBQL%^?ZEPzsO|r@ErkUOO zb?@;ZQQOTAJ#b!T?)iSs_skh)5E1(G)rYiM>-t8yUX2nFE{}<EQ&5WYfD_@_dc(fS z1~D;i4lBjefEMApdc#JS-}m|pl;TjW?3ar<Q=D3eUYr;=zXF+39PqTd7ll~M$4=xc zAg2`1Z`)j`b`#reEv1KmH#Y=`&{j&hAa4lrrW&X2!%C^xsaDICa;az#$I?=G_u{2) zXEE$m^S;(W-q1^(6QSL&w+aA!y%=ULP94Rd#O-@_YR}U(u_-o-5of8C13fZKEwh%% zb5l$&M8v5$;OqYbXgcsmuN`H})@zU?L~MdWVT{2cxGceC5y}ZWwvRHu(BkZcSs!Tj zi|JKFqhBArW<-r_TNXE-k6$P+XTF4=FXH6`j31zsA_?c%JWyfl(17xcdZS<OiY=NL zH+L0_h4&8Z-Ctc`3$o+!D-M@hpHpsqicNZCNso46j4VwlUiuE>=lJobvz=a?K5(>Q zKUvd(@9AfD+;n3VNr?3zV`F3N+qaLQp&?G3IKj<3cH;R3jGyPyt<RBM{|NS`#~8lv zEd<RC*Ir%qJpJUlBNAbErBVf#p|oala+2xkX-=Lz$+2U{(AvXzd9?AlW%mJ2ojS#l zBS-l1+n;HAW0XooL}bsJfQfN4ptbTn&qu@oia3rrc<>;tR*PD#23n)EMk!5_Bt%if z_U+pl9UY}4vl!!{l`2e(o9aK$^fK7aQnBE~W*`m_cJ125@#DvtpP$F~eNyKTXAyB+ z{Ng2!KJh5272NOdGT-_h*)&WL<ZN;&x&`>AA8@uC#YzBimaW;hG*67<<pOG6j;Y@i zZslEYS&BdZ744HBk;Y4;QMkM@$`Hk=1}0aHsNS&6EVE+M1ZOjBnqbo&SsW6D9e(}g zC*tlBaTN0V`ST=kgtIBmW`KawIOoVRN4;U^)*2C7so%nIaWKd!vb2XFIGdr2hqDQ- z)(nzalw{zN6*tLpt?`NC7_I*8e$^H^Cm+nt&c$e-ELrY8jYHCCiQ&OAMPCu*;HrTF zS<=HM(aJ)A$yb<P=)_KV|8mVM99So>UTn6HjBL3oud)<pQ@)w1aUtBad_V*cL>%IT zZNUQjN9Ir_heL6(*$%CfSJrh<Z`igIUYnYp>uNtBjYFb1;)g#AEPmg?`+SPhC+BIM z?(yU7CNjI+y&qJWnx5;5Fi~&V#dRI5jOpc>X6Nvhq0L1vU*V47CKtcUxbKe^zET*V zd*K4d{gAzT7w`&IlGHKN>~#CPU*%xMMQEKII(_C`Cl#M!slr|Rmzch~gjX(+E0<Xu z47hi!O|e`h6`#{*&b6JBhwBa7?bloN$^1Je#?3vRr{B44=MA;Iudqp%sM|v<1e*d( zu1K6ZPM<l~&NBC4y<tCIOJ`lc3gk}DsQ0!GRm#JI1351r0FcH#X68HTpR=7M>*W4= z!+y4&#)g0u$gt7sDc~Wk$N@MZ0p7MwUZ^+h%trP93Fw0r0Q&zNHj2Lh-aWZ8{VP=h P00000NkvXXu0mjfh$oY* literal 0 HcmV?d00001 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 GIT binary patch literal 5234 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 literal 0 HcmV?d00001 diff --git a/formidable_1_0/images/formidable.svg b/formidable_1_0/images/formidable.svg new file mode 100644 index 00000000..5baf77e0 --- /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 GIT binary patch literal 843 zcmV-R1GM~!P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10?0{3K~zYItyE2G6HydB^U*SCf=WWtNGlfXLZO=?R20!JbR#aM zJHfwE?6U6s7w-HE(o(^d3qj~c5T%0svPnZ4oqXMUT)a0kFHK4yIuP#M``(<J^UitK zBZ-HrtM{W^^cer~X~*q%?{{`SgaA-1mEP2wtp$((0Ft12N#AML;O5D`<QozIK>~Bt z@(TdhLjWig3L51LDTw(t0pL*G1#-dNdOklR01yH|5Cl>xmYmJVfX{=Eshc&R*NHW4 zP_2}ko13rxrv%v8c-crB06-X;*SA}{IIR5v92N;95KtS_BV@*Uu2R7BC(8qk(gw*n zA2r%2mM%j{s1m9QRf1HAn1-SRZC#aiuVU}82~|xHvj(&q0H783Q0v6#i>dWRphAcU zL=__Dr=sYqjW)klnjSF3NCtgT)Z;$-qL99rD5jD0ZM2}-x{1|GVP<Fdh%$=-_ik13 zZT}R255iAfk&qs`4|ahh7Uzo&1Lug`!pvz6#e)OTL3Qs!MxO)V0Flot$c0fNX8_0F zk5DZaQ;|tcMPwp;TC-x)2)_5_2UZ^49wl<dpx5i6b<#2)i9)ExNum%Yu2P7NSx$se zI9}xL?+zMgF+{C^D%LrPi^Pbk=WB}D8?)nWT3)E2eo%)`Vj9^cO2k%ZstX9HGk+@c z<?#&eKD~o~dB)oG<LB21rn~7s2MDS&GMtI(j&c(4n8SmW^?^o148kd3_G%SWK$$s* zb|knlbCt;(r_Ip}T$^^fCphbVGULD*4QZ~lIfvG#WXWl8flWKz7`0l{{8J04VwfaN z(z_tAb~Q|9{7!0?ks_1C^38R`?ZzbfA{Sk`h(Tu4TvS9ZDo)fO!7|b0q33zg+S)UJ zdwZ*`N^fFh=ka}y`};qA&+{UWBr28iVi5RCBAO!^0GPB9J<pRM@M96(JwE>R^)DV^ VNz7bru4w=O002ovPDHLkV1k>jcMt#o literal 0 HcmV?d00001 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 GIT binary patch literal 629 zcmV-*0*d{KP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXS! z1`-DmWX13R00H$$L_t(Y$JLd+i_~Bcho3hah=}MR<~Tv{qq1161i{8u5Cv^Tu-Jd# zDhokSE350(O0W^M5w#HxEDi)4kE<+%1K}1I4z%#{e$7}UyY6nn8YCb$VaNx0^JISW zn*{cIm=^aO0Wu(&yDoqQek@v?wg6;zo}SxMB%gh=Wb|mT+5g+(Hh?5Z$ZubH2xz&f z@a*mVyrHUp0uV)r>e=4i01PLV&J#si^`JE%h$D)x&RzEa=>TvTIMAePS%D>r1E`KC zfR#n=ng(QpwKH3w`8=SPq}B(Ug;-YLqotRmcCdDOr|x?*db0Yp-&8>_O3ZIvUInAT zI0Z$s5Io*j0PnbV>1HMx5s8%hfQaz=!^;_Wr8Oy{<I8ZJ#3UGFFp0rnFvd(qb9?j& z0M*L2qNplI51p*_rUvlA5_~8hY^D-3JNH^mh5kwBTnm7AoH}*^Ev2a>5>%CMyPwOh zE}cb1N@-L|nIz)9T?mLGI(q*8ajnT|n%b)uuV>>PIA?kH@r?~3WKB)3oKyqY7k7vK zCY#=Pu)O2Eoiy3`0&9Kt>fZO`4b~sqv<CQD<$SC}5u7XV-eWLWS4>MW>|~OyD+oS- z0q<=0p9<#-d?+QdzUUsXXDtV_WkiKvcCS-_i0Ej2b0c5mmjCw4-2d?#oC90SP3HsI P00000NkvXXu0mjfqfr!a literal 0 HcmV?d00001 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 GIT binary patch literal 1176 zcmV;J1ZVq+P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11Qkg{K~zYIt(0GE6jc<)f3rK?>~>3QcWo`SNYR2~2!G^X&?b<G z!4MxX7#>Va^i7FRz8QJML=qE2e8a>S6G?o)_+Vn9kRoV;Q6dK9PXTG6rBt>o+wRWH z&fIf+nAzDW+eRO_$>iL7?!Dic?|$FCma4L2=g#45F8eZ%u(^)=!>N&xGd4h>Sp0IP zGB=1S0IG_How%>j9LaHGU1N_bpr}HBU(Z{>3LBuKqeHU!ju<4|+W^p(d=e-Lp3LX- z?FPUGNT<`LSSThI(*%AP{6F&H9Qd9iae=<xp30#^A3aJ5IC${Ga$Eqww!`k%CoV8m zszHK9gAoc6#rO!d$-2L{gE#kVoL49=&^YJ2WtT#+3sFTx5fMZbRl%6Bpb<r*yog3? zg|Vp$BGN!?7SLz`z?|b#@*Dya<^p37qZnf_A{Y~XVuV1V7>$<~GxH3wAcMdNGfqHY z1QVDrny`=wq8NcT=fl|7X*cbhJffz>;Dt4P+?c!%q)<|^D;lI*?n5-8stgSj5)2YY zluWeWFHyL22Th<R??RKl&I1P}pBGdI7ZSM%F#Y#k`g#hn$f^>Hs14!cTqL%Jf{$Gp zXX~y_3yIuh;QKyv_vXS)MldR&lZ;@r;VPkY^*q7NOXU3;Z4&T6ZQRao%6qrcwQSkq zBG;=P<yi+Kk$_?%=Y%e*-W{X=*3Z1Q`YHO?tt9X~O!T?68o%w^M|s^kD0W*5+O%h| zmzg^=q*Te!yhN%>bz+R+V3h4IZo_yU^|`qi+;|@9d2HzJrgHf*7fbh6z4PgjbPI#+ zuWn<pcIv<Zwyhe%uT(Iu8v`d<7|$c)dAww$mV5=nEjIo2{3oO{_4v<0Q3>ZCpRM3$ zvzTgi9`O06*K*72qVBqQu1no@v26?M`i)mw7}#y_#L_-gK(y%`6=i(#6hWbgU#-Rr zyd^1|Hw@pM-i6~hIF3WDR^u6&A(KjHTWspp?=f3H7d{7xry&T0i?i2RU0Fd<gdi$1 zKHSC4fvc>sj&s)Eh40r{nF}aipP*p;krtbJb%#=^f<_OW5k*YM#NPWDKOQ~FrlD2z z7K_;FG}pGcOgrN&*)qYCzw97ezRl=Vje&E=JsZBCcSNen#%Djkamx#e{M_5Z+1$5` z968F;(NT)+?TpUk;SZZBr%L70H~7~cur;{F{oUKIeD?WYUW-k0*#fz2VNoaTdG~#8 z@7c%i$ByymnKS4Y6Qrs>?YT~#FHE!kz5Q(1y_>^_KlTA^%d)cj_rIPxdGdrSqSm6w z54HT}%`9KPo_f8Gs#<MrZJNnsc#ukQ`t(maIXRKCEGuiND!siuL+NyCtuc~Q)im(G q3q91-vMiHMryOJC!u0e%*Zu{eVTtl8dm|120000<MNUMnLSTa0t~PZ5 literal 0 HcmV?d00001 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 GIT binary patch literal 979 zcmV;^11$WBP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H115imsK~zYIwUte1TvZgufA?k5X(k<KnlUqZniy@xg~c|7qLeIZ z5xY=aSiuhpet<4?qZUz7L@21V8#f~2MiHylg;3o3u_#iiR3f&-RVqm)olcTTCw4wE z@7{A<yf>3+kj#we<=ywc=iGPC|J<+tGpfq}S-k%;*qMomr++zc;G>hq#GAetz=KCm zp4c&Z;~}RCDu`1A1yP(+L<Lb$Cx|M){W1UE?_a-oY9qm*??2MNZQK38>%dxzz|W>` zxqHv8dqgA*D1vhmqO{v#dwS-|czfWV_U?UhYc6-smUMcDQSG~Za`K(C`}Q?v&YyoX z22if71;ug$>m1HWt6C?xrq8;_7HlBWP7s5~v{-zge)%%4UdQX}d%?5T0>@(j%YOxH zmlo>;)?uv+F|ZqK*Rt!*UPrJnHT4Q`B9+Y^rBXSxQmH&@pbRX<0C2XyTCHNOU|p1{ zb?dfuI2YQ^IyRn-hgGM6>F+a{XE3H#hcic1ueSE!&)L~mFU`!p-_1#}^>Tko64U?G zS16U91!6~3>rJ2O<sRg29y=ba1?AFG;oWY>#Jc&&7_-G69se{pGV(+rpMS#`vo-1p zRMi1IfAHnQo-zBwbd_e_9cPeCCbQ{b|BIo__WJ;8)#|E>Sb%bQ^_$|t+;aeLJ$~%R zgAYyKiz=#$M7Ze;GQPiS*dO~mnMzJHeFKTa4b677T5DzJ^?3{o#IFn9k-$?k86Sw> zw&@h3a_wq0$X}R8G`x&q)y=hNv9R#*;+5i4wQ6my6M>4T1cEdi(hwvNBygQKd8v>; zolXzW4P`T*BvYx~3v=^dft~{h0(Y_bU106h&%a)XD@yc$Dy_BZR1=AWKRUkihvAW% zUh8&@_CgSyw)o)o++DqlF{;W3pY1+2m`M8~0tyZV0YSh4gsO^y2$ahCQ*XbN|E|;W zLUhsY*t!4k*w~%BL<AMZiK3BIt2AXgIvuK<J@;h^=$^p3syJC)57Msxsz}s!Q39&c zwZ6mvR#vC34F$ze>#d7W))lmcVSlZ*+~}4dx(5c&GZ<s=JTF4iLeKLejQl<P$zuTX z`IQgz`Q_6hfY5v);@Zs+oS^;sZMOtH$@RY}e*=!<!#}20AT|I1002ovPDHLkV1iGg B*MI;3 literal 0 HcmV?d00001 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 GIT binary patch literal 1393 zcmV-%1&;cOP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00006VoOIv00000 z008+zyMF)x010qNS#tmY4b}hv4b}mWZ+V;m000Sga6xAP000;O000;Ocub|H000F1 zNkl<ZNXNBRYfKbZ7(I9H9bgv<3J8l}G(un6_+UW+wIXXD5N(=>f>ueaG5%^|f7I4j zD~+u`nlw#)g;r5ne4<HX6-pJ_rZn-vqGGEcDvu&8TOGt*c6N8}%<YdZW+iBA8oxhx za%R4qd(JoaT;LfO83|lcTquMPpp2c;IbTH?+pBZFfDnRXM~;)HAz;IS#YKz6`VTiC zE-n_1CdZo=OHz;1*(<E+R@}R%KnNkKj-L3>By0ps#Ky*wgaiu~E_jP+8i$;b3C?v0 z@z49GQ6LQmD5JFw$3=}&3VUURx_ZqjpS`j|rIf<qxTsM^YyTI4&h?dviAgf&9Mv_| zCcmn^R$WtV;+!KsK0$72>#CTYXRDu*F+;az=d=xLC;v)78Qs^{*Q+tcP>^4shMVLw z1^ERkV+_|@u5-gM4wY`&IIp~HmjsY;X=!QU05Cl}``u|Xvj?VSWleaZq{T&xjLyyu z;q&<f=bBJeRdB8epU)@S+i#1^oY|uFMvG9CyJGJA*8}NUIo@eAvRXH9DfJ(yv>TbT zW-HUD=Zt^SkcpxwAOvtUIe22Ch1|S#Q_P+7D!b6w2*WVo@pup)7mu?wr)9U>EjRyu z^#uZ8Y?1|mKw#9)vTvIJ#EnQ$b@T)wgbba7A8y?4Jj^xY;P%~nKnTIn$^+0e4d0(W z375--gfR(7Pq!i}G74?C+R)L_r3r|&j~&YJnw6VZziIutd80<fKxQ%+V>olR7NbXx zM)Y&hpp3%pcEg&UfsU>&d|bNq+NJa7CO>w_!)ws%ox?Q^(NR%IPEN+<D@{mANr7R2 zf3>4b8yxiUi4#-N(bbN$)QKQO8kd`!`_P$3EE*{y{_J+LPquDDSXdbUuIe!J2mBa6 zegbxV^SSoG>xta6-#)mvYzG@~_ah=A0<z3Z175$!nl<Z7$GP7&JhW(W(IT<oqm4rm z!7Y{~5{wAua{Yxh@2!Qs{2N?r`2%B<#^O$olYhN^w^;YV`_kk|FVXIvZX_jG(A<0# zgh=>w+ZX)ug>!PKf+t1<r35Xltw>8vLr-rHrcQZ<9Y1ymfq)-fcRDd9E*_oT-Eg{G zFq<P09>#us#G+tC*cL8)TeeqLsCD&q#Fl3h%ik$6l^@uz6G*s!U!jteisa;E^tqgH zx_V(Un-L!y53kpY^_xn;HSW=MJxajX^$0;QB6^1+Lf6FH>YD0bii?)v$NHb?(xO6P zGMUiO(13(Q3nsn%A|lKY2m}IXzuk__TRy|pOHKJcRqdga_Q%A;3=CH=6cKVket}w7 zUsr3(v#E?R)9R8HeCM8WtXR5)9z0SNP`zqDWh^ctJWN`?w2-<z9%vf(`&88gAX?XT zuc9a<lz`}5f5U3cB)YC+#qttUanUl!G6Uy2Y&IJ^dHSR%uQ=p&Ke)f6y|uLgfO%@h z%*tM;i}ox1FoXz~B&pvpi~#^D03J#pg+@f9qfsCFi!!VkR8bVjjFIMx=br~40|*Bo zgNWW!HD^+&L>dR(9=j~doqoUH9VGCFo@5z7^pfJjyFv(fRrN~!*`N01&7Zf@Y%)zH zgup%EE~%-hJpsT7Zb%C07eQPPSp@(w^Z^AB31AF>L;$hDUHSni0Qvyj1uz(F9w}zT zNY5l>l>wLlL;)}d?c)Hv06an28lLjXeCG8xI|gS+>Mry}00000NkvXXu0mjf=6HJ^ literal 0 HcmV?d00001 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 GIT binary patch literal 1300 zcmV+v1?&2WP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11d&NZK~zYIg_T=uR8<s)zkO!Ulu~GEJG8YIi(CXzBbP#gu>uhg zG%+ZNnh4>=#0MW5V|?|IkeHZYG(M<Lm<S<3jYf<yCaCyesvuCXQ1Aih)wWP(I_Jze zdo3T%nduc=$z;wsd$0fh*It)xcI@2o7W0^@a_i=eW0x=Y4$QY+vhCZq+mVrx#k0TX z^LeSNs*3CjdtZ9L3>qU-`unr{_r1W@`w=|5=lQoUT<SR#J5M3SFp9O-&QLwYp=2sD z_rnIDrMa>4=0Lxe2oyy%Ay75ertH)L8i%1I&no{%VAE+=S6izkjMyy}tEk$82VT3U zbI<v+Ie<ltrm>}^=CSE(w{G3Jm>bfeWe>LB*|l?5@ty)sp6)G$gD5<*EX#&9%>YDE zqyX!;w7&Ajo3FlSGX_Noea9yspLhrO!1pJ;`noy=xY#%3oxeVuisM!Uuz>>=MO1Mj zoVzl>x`&$p2!f&jc#5g6OJ~UB0g#{)PcbExnk4V+)uB|)lB%>woCgubp6MCJIY;OO z7dbjs)RvQ-)D?mwlmO%W_+1QwV;TVfp$OMTeAEffDI$WsIa(l!9L@=mb8J|?WEw$i zPK3w>m{brGxD-w#ArmBdcA=yHwj$0ENi5jzc_N$Wj4NPua|Or0{uEFKCwiA}-rdl( zpvv16h5?v_AWUI1Y}&lLp=<r4Pd(i~)|&>y1NEEbZlM^Jst6Qw{KJzoORTm)zx|%- zIuDFu@W4Q((ou}!9AxZ53VB6U5Eax3V<Q1;tM&)kiWbUvfL&ObK~xZl&+Ov)Yb;#v zGZ{@_JcBXuFUT88X$^v)+&7A%M!|UW{neLh+R&U5kvPe!*s+0eL>wZDQvnf*VTcw3 zJmZxKFkljfsfJ3bMTKH$Nvk0$gt1tSb7Kek28djoWG4=qm8cMr%2XjHhBF3ig`*f1 z;;>T{6blAXhbo9bJ{Pb+gpt1CGL~}=yL4q!tVv>JjVtOIG4*Jqd~xjPh5p-DKg(3o zvG3r<{hCyf9~!<qdhYXLf$omSJGXXjdFHw1tf79%L&hH};6y<^P_Qp|y*N*UZv)`x zAO5)h<2T($);zhW%lCu**isc4{G99l`?uVYQ>VT)ot@iu&I1xh`%Cw`B$EOarDoA8 z)~!7-W0MFJ0v}vFa-<lKf!U4L`_ET4KiQYo(l-TLm(7+(g^H5DJ2t12LlN?Rz*GcE z7|9%hf<NT7w6%MsF`=s1fwAx6q$I6flioe2lcPvvWN<R@(sB7kL6Inm+t)cM?{_X_ zqIen=NiYSQyE}msK_wn`i>t$O>z8=OuLLK48oSX$X}}pY`Zu}+;CWW3E-Hubk0w== z%%Y7eKboPorn+^`5#@3^2n^1b#M;{Gu(W?w`@V2^Y_%jJzysTmT|38V_7UCB;-hc| zpdynsZB5%|+=BMZnKRLRj;g}=_-%|ap5Ei?G{$&`4<E|5wY8^2#7jEc%-GY=u=Mp= zeqxM~R4SG8egD_d(Xn}trexLC6{}iXS9FA7*kX)&&bi9z>;C};rVCcCC~OM=0000< KMNUMnLSTYpb7m<3 literal 0 HcmV?d00001 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 GIT binary patch literal 1097 zcmV-P1h)H$P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11I9^2K~zYIt(DDdTvZsxe|Kh*OeV2uW}NBN5F5o34JlagBh^Zy zjVMt;L<)j}_#e1z%|fJZio4>*ofJgGjYtbBEiH+$?V=@^5-rW7ZOo)eGm~U8?VXQ% z-q*$bm>VZnDLpWpbKZ0A^W5h?&pBhMDhGy#_s84gukrv}#jgBv?(Er#7(g<WI#Dc@ z`%ncyRZ({kjMZBsJooqc&!_^5D)eO29|F5#0G*wk67T2?K-_120Bx#=fx_V7dPhgX z0K@>I(Wpr!Q=!c?fd2{pA9Z&P>Q!3;f@~&TI(qc;2WbIgW1p-A1OTy^JN)kSG`9+O zA*8}rgo1c|@Cmh{x+l}g2cvs85d{SPcV1enkW6(Us)#5ef{3Cj7~>KeQPiu8sJB<R zajS%gu)31RsjRjI1nO-7DBE=kRU5~+HOCmlD8?9!2*$WSF@hsr@6CHtty~)ao^5|j z@!tG}fsfzrey2%+V}zpZ;26O;#_f$uWE`*eKpX3BpNSRFg=HQ&pXblXd?flDLxBRH z;Dx8M<npUP1SJxr0@(UIcnij<62E$!gmr+)p&`!aPSut+oMTN25~~H0i;HLoHGCF4 zZ18t@CNIo>&B*Xh?8UFRKGVng;KAI9FTYud`6xcX^4t>HbTTkmRRR;$H$JGjX3x)^ zWdE~ioZ=OxayGk1Ugz4cxjP|~8w%?6I^~tJ3t|ML;wH%mM*UO?#_LO^Ssu+6*k;}3 z%IsgX_KdRcwU0P8F}8I~Yj>)wZP*y`3>4!f$4`-QO%<V5FVmfwq<>eMn====d_BdH zBgec%Dj@}pn5O$O6c>v`RB5Ggh<vjJ@q7_(=YQsv7keqrjWa%z;F;mWh$xoTxTl&F z?0fTh{!bhK@i<TSKTdh^H!kF2y!`&BWO@f!Utg!YyF1v|6w`}SUl47r1#b?DO6bb) z)T}ODW$@rzOio{>*w)7HH-8{wPx8jdXPfYv6vSF!$IdJ&AlgWddRKyqQdln1*0P;* zC%+|c9%9e%9(H8A*eI1Z#W_UKV64_w*r;7{uY=Il;Lod7Vd|%OmTpuS7|qg`X+^CG z7K%cP84M9@GMNy8O`%Y7-&h1AiWpakF+#m=c(^~oV=r|fMzL)>xbzZ{Y7mw!O;%O* zK6x0svUYEWcW+&8k8l4s1&x@t$CI?jllLaLM+^VG0>muKiXS@kZsg3F(-jf5?i)GO zA`wgT`GtsOS#e8M$z;+`M5B>GW29YGqrm+VsbyIv8jaY-$n^5^?Q4GnU$azZR`ga& P00000NkvXXu0mjfnv?&W literal 0 HcmV?d00001 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 GIT binary patch literal 1127 zcmV-t1ep7YP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11LR3WK~zYIwUk|K6lD~KpP8N6-R>;iE^P%`YintNQhpSJErgmV zsF)}kiBW?Qq#9!ILh+U+Cfs=8jfueoQ|W~l#-v7+MEnVA2#S&*m>`CbVoOU!VCnvE zcjh~v7qi`9=&!*ynauY$=biJO_k70ErLCd%6|3G3Sb-pOL@t~C;P4lRPfvHoYHeN8 z6$pl3&*pMytr0DtL2F%}YYmj<8jXkst!Zs;ss^5$mcTSk7B@HJDbEi?DX{4BSZhke z{@7m=P@X$emKMNkukND0zMhf4lO>YrQC$_GB4pFkv-ifV2(;EDGkHG#?mUqS8>KX& z1SJ}!ROu~<2%?1Mx=OZfUOn@l_ypSjP=rf~ajcMm>ndE&^WUz*Q>C$|@LWaX!b(I0 zJ&SZLUsJ&jm^4(`SV03V0Ypqh3nG3!wCM7@xh{r?0J9*NkjT(NYvwA!pp6J6_e?lR z|I1bLa<OvpXM#z|cEv&w)6-aDU@DF23Q?zmrq%}Hm7ohL3Yi@FRE}$-*Jm#gP_Dt? z*&%Gx!cz**^R;ier-5~kcQAVPXTJR86sc^Gn!1{@M19@SB~?-D#i!mK+dEASG+`&q z6K`y}<$$4GBB2~@>(;QSHciT2M!aEZDFa`Hw$3ekzU^sQxM|;omnX@<Z<@k*nt^Nk z356ZBh_Ac&Iu}!M7A?Au$^{D;J^mh73L99t;)SwA@n|qm*R^T;(YKaW4_zAGx}!HE zH`M?{G@j=Y2wx%Sj9^8E3516+LPO-$1x80tBI9W!GfMl4^_XYB=loBfqLga_phY|5 z16F5e$CjqX#&7z%qoG?QG7OXCSc+mXh?E;kqdbpdIs^IZ*lrTDn51L%a&C;BVduSx zmrUd7CnJtylgtv%oi;mGH$P+s%wv7s(TzKLGwE`pS%C`HuRJiR6TBr!3IqK(p)7bg zaI?hCEb;1WL>Ds=QWyR8{8d8P%XGG{S!;)!6Cb@2eb7oIZln(#`fNBBi&=m%mE9WC zM`Mp{d?0MA1gJcCIkcPe1DAp${@rIKPO)~?=H;18`Uk_8$FPBU6SkcUcg;8L_jldB zzwQ1<yY9TBDjskXP`C=|LCB1hg99*s6@QFX4gP-e>t~JGG|SEC>yFmc#zJq#7q+xl zIMEtA?96YfuWgB3{yYF63pViEQ2yMxUynbw?Ld04d<Fd1=ip9f*<bz77u1Kfx^QH> z9Dis1j|X=;v5EaDC7BBhJ3_wU8TaIgV@LkHIIwj`Z>Fr*Z6Qb%L+Z>gU-dq`@51g| tHgAJOi~Dy+_e`}v=OWJ)=KmTU_y-OCx6IPCLCF9B002ovPDHLkV1g<P5Z3?z literal 0 HcmV?d00001 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 GIT binary patch literal 2443 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 JPDHLkV1h=rv$FsI literal 0 HcmV?d00001 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 GIT binary patch literal 667 zcmV;M0%ZM(P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10vJg|K~zYI-Brzs+E5h!P7-f5iAkUcr91Hje1mTL0t5O;u3WqA zVx)E<h4ulu8j2e?{c|A*6=^|moT-zT<eV;M67u6H1D(b6z=3=3x#xV}`N<852p&_k zM~(hp02s+)I2^uKN}UlAJtP1#7xxm!@tbb9`w0LbBIxyc_1SFpTaL(`qr`D6Q4~oO zMG}Ug?Du;Kf<S^G5a0L3_kEd8r#}aSK}AGvGf+xBcU{+HW~|q1WG72RQnhUx%#7`J zn>$Yw06fow>$=u%x3d6j3>1WjplMp_L`0=B=(?T@oV6FnJ_kTVP)e1UC4j!~gPGHP z(gPwwrBZ=m7$q_}fG`ZP*=!D`f2bVHoUUuN8Z65yWt0LWOdE{`m^pR6PmA`Xlt)Vx z1OXO{MXr{ovd9jA<2X56DFa>C(QGzL?6Uh)wtIUZA_#&2^ZEQB^Ws_3gXG+CoYNU- znub=Z^<d^%_D6e=Tu449(=<UuC&8}&T%%&#j%iWS$1cm_$Lu@azB|X)Z(qR7h~qf5 z6?MD4#D|aX@p*EQ2F*Ta8UTz&qnp)gwNpw#DV1IzB2=qYn5GHSG+|j5EX#sz+pujL z^?DtaZ36&wO^55c@H`L8<#N~W_Xz;#ZiZ`}PUls--97_g#2i1<2rroN3&6gVcR@(U zOE9j8v`Y~QCzHwfcs#xkksB&D<zLIw|D!#9fWN$$We+w^AX@+c002ovPDHLkV1oGx B9M1p% literal 0 HcmV?d00001 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 GIT binary patch literal 1190 zcmV;X1X=ruP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11S3gAK~zYI?UhYTlt&oHfAhXC?|!lD3IdkGt|d~kMuV-|KtkKJ z7kj7&6N%U!OgxzMW;`ie^dgA~?y*sCJ(R?Ym!3>a@Pt|u5-=8xRKcL`!hW&4@7L}- z(*t2E8jY8>mrgRLdFKCn{_{LDBa~A7lSBJQ)&C8E@u7h~3(*^l$G-<~ipAf4QtHnS z*(Ww@Ff}#xooSjQLI|<Bs2oREQ&U5o9UWcKXfzmZYtsR&eBLjYN={~V^@SQ8oe_b6 zzqv<BseIr6<@oXAw;O;<mo7z*967Ss*Vos+8JL-w;mOsjL`@T+Y1p2JuW5)4Fk#a~ z=sN43$Ig={=@=YjGuefOg_XN^?|yRX)Tx>QV47xIEEWq(Daqw>IN2;u(`jOn2#%Dv z@i<*0BXsolBc)_*d6}ha*N}5_M0}selao}&$1%5WCmxRzi^U?AWkrDETSXQ^@MvO! zW+AW)gV@ode0t^#k?!tBOfVitRVsvlTD3}WZH=YNm(g{dH``u&Q#^a~CgHU;>V`pR z|9;vJ9>g#V48y>29PDb9#}_UTEfnzUbqbxGSd|LF<z-5@ZzH9AH=tIlk-c+=rlzKi z><=BHSS&VXA(vx*Y>Y@Qhm+4^rBd`wPU0n#7*bN2okdEy1=46!r4*W`A&Ny%3bVD9 zwzf8uQYfX6^*Zz8<FuB`c;zze+s9{PV<@Fq?d?UqdWDzCyyalaJ#bx@Y9>QS2+C6O z{Q2_@fba7%ou;E&#VMC5_V&_w;sh%zD=4L?)@p1Eg{T(_NGZ3}VT%J@*NN=df%ftx zQC%mINFeKV=ElbO$hL9HW$JtOaNyjzznw{mZ5U`$qQ&F*zW;j8TLG@?Vg-Xlq@=L0 zz@vu`$zQobmu2A=i>!5b(|YU}i;If@jpOjERg78<qrLqt2iofZP1D$Q_%OEX(r#H~ z&Y!18)9~_n>{N=+FJ2^>Op;6{>FMbqkw_q>r)hOvY^7)!9DIKlNhxU`9!B=}(`1?? zYBk(!7JK(@cAY)j=n&ucky4Vqb&JUQI_}aEUSA*E1_ya_Y;mwDp#S&-i<L4$*KtZE zyi$p^*;(q2gIB4Lou20D#02KOdx+Uto_Q{rZ@+4YzV@7L)ZqH{>-O;Qu$4-sB1$QY zaENE$d`V#b50XtyG(UNQJuyKc62UM7L=Bw|rEn~Z)s_~X9T=c16ebpnA%x(;g9lbR zoffB0pWb-vgb<<8(b2C51_nl?l!4-UDdu_J$Lpnvy>osp*&hnF#&x}^GZZoaGPYeW z*8SQe$H_n4yLYiA-W(2^!9q)OG%JK~?%%)v>x~;XW|UI4c;A;PgwTeDh61*22fAE0 z_Qi|LL4bQ*oxi^b1WKV$$eo#)ag|c?of`lD$^SXvFGP?qQ3H*BhyVZp07*qoM6N<$ Eg1X2x>i_@% literal 0 HcmV?d00001 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 GIT binary patch literal 1108 zcmV-a1grarP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11JOxDK~zYIt(47gRaF$le|w*M@B5;Cj{=pp2!6DbNK!`v8pT8s zNgKz^Oq?0{j~vNgK#T)POdM#OK%!9tCTNtDs7SH2<$d3C@7WISd#|s&CN#t|I%n^d zv-VnhpCe|*>e}i`k|gi*Kdv-Qzq;||jh`ccix=Phyn1NrWvoaVR&32i=iS^`+!!Lq zu*LqtgTFrpmLh;kwQAGT)7Su1V1|2RY+I0z;l{C}xWSX{Z3Bn~i7bwz-9m;Jja5Do zd#Yj^5fph<$wmanXJ@ysT)A>Ea}T(#UHk0uh#=3i;G6^C>s!C`&5wT~0;sY$Kh1}$ zuXFv=FX*&7V377bAAGdRy^ZT^HSeM#fN*O5J(gcx1t5g5Yf+YEVd&q+R-5(B9!?ci zVYcBhGkUEatw&Ar5J*!`x80?eJ|@%qI2A;NW^02G0s#GfKOYfz@53+=LSSiO3Xy`~ zSfhmZDTiOEQ?4XfFjDVvkx(tqBJoRwS`6>Iqekyh;JqIy@L5j1mJ|dcRANV-2jWsh zUWo~Lz|;sBstK{w5D`QKpJo#iHDOV!>-qMVO+*!^%F2s1E?-#W-tGHzHroUXbh~|4 z-dW+_tvmGPCNi+|5SJ%LI2zhA&fMw;oPs*&`5b_>o09d?q6eKGd6tu9Z8F!yiGm5i z!u|@z1LZ`yaON1Qf~s(GCc%5p$ulR&+MW;s{WPUqEpfzNBah;NozQPa`ztWpeVqbK zS7THK5vU}JS)f#ji4cMr(icP_ipscn3K2m?NM-U>Pbld0Grs$E2j>*$l;xw2wKo^} z<EM2(t5DEvcQ}1+nT_TTNbP%c&;ysPjmC5jftigGPK3r(2`7R&rCL_Zj8d(H5D_ep ztD!2yaSazYP$#G=c~75hQ4}lZmJTB-s3=D(MxJM!I&%W?1+LdmsT?YEBsoh|sgK6= zaVvSYMHY<hwl8FhkPLpi_LC0IgM~o5+r#^e)Nf<S#;6zzbI(?g`kcEDyErX+(5-qv zczADvQmW)3u+wa@{C1D6-fz^B+k=TyvM_T11wiDAN2X3;@c)Yl&M62ul_CbHDsIpN zjDwA-a}MVOr;5n#WzIPeK?grC1Ja>_@nP9lfthjs>>T0FKOlktugo<FA#nWk96Os$ z1fy}Z#LR4iy!{s2j}8L`_T>D<{Vf`2UR-FfxX{=m)66)(_6AR{TKy8tUz)(~u}DP9 zSFe6zw{G3+nVC%7@*GP<Y<+#*M5HWcM!jBNh~sEE&+{6fX6W->OaOv&uI+txcV}nk aum1oj;A6L59%c*x0000<MNUMnLSTZB&i+mS literal 0 HcmV?d00001 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 GIT binary patch literal 1213 zcmV;u1Va0XP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11UgAXK~zYIt&~q}6lEC3f8WeEJKbG&w=8RE3)Ph379z9)B?>7N zBh^B<0KphE@nV9Kh)3d)g9i_uy@`6@PzXUo2ugYZQK-<6D2Afp|DW0}-9LrS{+an+ z4_ivn(i-r|OlBtUH_!7u@AKwUt*tLQo$EJzuC;b}3Y3c8(Ecy??|V{Rr_<^6U0oYK zDpx8XAV{?$6K^7zi6>0ds~3n+C=|-TlLeHrl-3#nL}Ze9l1K!5ir~~WAZXh*Gda`% zZ+36QbzRDpfMVGPAQE;^Mkp7{061<4l#d@2tKUup%W@bP81QBlaNQ7*NQAEspXax$ zqbOU^)A2mXLY9kXf5#YM(eh>zt(O?iok3ZOg{f}Zm%f8-S+hA1j4_A^N-1J77t6A7 zwZaM6M5AF01~=^B=m?QW4OoI7j3Xj=-gq#pgCH;%W6+k+I4_E2DZ;LW<A;c+Vgx}z zs79mh2w}G#%TffUx-ny9CVsRClMZfW#_9hvkG2)DksG8+MJ^9qr;J6VVwe~Im2B}i zwr%lT<gIGp%p&lxMaCFvqao5w2{eYfo2N*(En&?EuW|W!ANgR6XiYshOR+44t#tK2 zf5r}BL3Q**gm8^bLo&?#R1Cdk2g7O(2F0tp-zOb2sF8p<;YOl0jUYD082tXT;UjC; z?wwKKp@WfpiGeG5E?g^cd*lH*&!X>}AE<amnpdqPdj1~wZv9BkJB@EVL<ARQt=P3| z-;u7a&!!a+dE_7&cUhfI(y@3h4XG%p#w78!mnqyGLU|rb*1bX9$#&+3*5KHYYIcCm z<=ocp?vIab+_--l2ahrcj8F-n96;b3f{Kp>hTP3th*H>@3~jIUVD*ksyl@>alfn4D z3dY7Lo;cw)tz7x;;hvsv4|I0g(`N9%^SLry<XWc4Us;db$QaohS?*lCf>;)m%Q&}h z)84d#_R;y24jyDtJRX*Oo?vW@OmDBQt*_tWCK7!IIy-9~8&hKpC~zDbZQB#$CunVR zCnMZ1m57&0P%L5(4^uldgqzFZ6bdR|DBzEdQpsi+IdsUHvuV?Mt@Wt`ot>{+Ac#~2 zmNms`t5dv`5|+J?q+xMAiFAti>g8NI`4h#uIwT0d^T6{E&qKz?39?!ILZR9d5pEtm zsv<2dt18BPp^cHrpw}*I_(wzunpzhEVEh&Q(c4R`ww7c#Oie6?xq20o&ttqt=bh4; z=55>j`-6kuJC^mHN+y$u?c29~Dk5=XjLj_2#^~l;ZefFvO1Pm&G~|YxMCN6V9i!m7 z)NI{a93C9}>g~S151AV9)85~8bbNAg=T14@(juq!?8*18Teo*=UC*}T{{m~l0@UWs znY(At?%r|c%)!ST{~rRG@$uoi{ry{Z^!NYrFY#w3FKPYropa|_Pe%@*L}os2pB2yS bU^e^>_QqQ2#+tO%00000NkvXXu0mjfin%z- literal 0 HcmV?d00001 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 GIT binary patch literal 1387 zcmV-x1(f=UP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11n5abK~zYIt(9G9990y@e|Kg!JDc5PySw>ro2D_9G)9Ujh^SPs zepjmCM}6?~p}vSOzKGT*6$GC|@S#2xK}Ap>R8-WWjZ&JbQR+uy8?n|6n`E<@-N|NW zcK6=n!zSAei3s9>fjf8ZIsbdk{hd2XMA&=74cECb_a^>F3o5~9Uw!%I*A75BlX;_1 zS{_0K01-hNgXUOPztQ@>wr<Tw1Q0}EYhU*xzzzo>kw_Rfo@fSX_^t(LIL4NJdgd1Z z$Yr`%NyNFRDH{ah@pcX10NA#zGwDprVh{w!_Zk0vhV6rcq<eemy!vVY{KZ8I#Ukhb z_=6t?hp4u<H#gGQ7}UawX$ti9beCRu;l*_|Jagm-#mPyMV`C`57|qhTb6^Y++omrX zrGI>!-K7%A@i9gZ9a`sq`0%q{Qvkqm8pC(K_zCazSGk-LiS`)fAmr>^5kEaZaM{gh z$DwWdG+QqG%63&HVS)GYCmcEU9UYH7!GpJ7u}-KduvY*1@242`XNh&CnG5RtHL?eD z_l-DWi0MWN^w2I!g*>^VFR`_>h*FB3=?XudJcYS+&sxNb0wRJj22-z-{NN2zJ)L+p z;l$`Il(+4|WXou+(Z-;)!SWWl?%TK6nTQhTIJw0l17)Ay&)!Bq^Dvg<Gy$+$Gnk#2 zV9=_8Z8KSJV>Ug^qF*ELS6T3@EEKDF*&NqQzQwQvg#I$$)H?V!GfF)O7_63<otU_Y zbZZ78Lhkr++TAFHN=WM7LtNPrX;J|oUV;Aa-eW)oRDGYBSc=XkpQfV{u=v_x`q1Q# zA7^0i-loX9GYGR;ToI~OO={VPWgk|NHKipICqJfNYSdO%_*1#KcRq-ln?*!W@eWKe zPd%I6m;tK{*F2A?F{o&S-mWyp2qK1>SHPV5ls=`Yg;g#%aXRmR93vpcV8o!@7!;xA zdCi7vDN!SXw(f3Jse~*qvz+%a+E6PMa8G^2Hrr6G1k6+v=9Ys5Ij;f6>eH_Tr4()5 z-OXm*P@>r2AZB_RyAqN=J&jflJ%3HGJtEY~EBxZsS=zH7{rensW13`%H_wP;p_FRG zFlKX1d-v_*xA)$sH`z&H>O(R;DTY%W1i2h%sy6DbN7<sJc`gVT5#rxWl8i@~3qyAA z+xO2Iq{hZDmkc9IOYF4DbXtZmpU3O(=Z;riL0L_zn>KUwD3RU6luw*MjgFEU8~bNW z0py__%)LCr*4P%LT;@zMOX{ghIeGf|)w5d7III!A`7<MZS5TXpVot3f2M1bi<V`RI zh<3$r9@xXuyJzWg66~^*EWC6AhEkXg2PF_$v5Ao&Z4VKinj$X&&Vk+NWMtj$H(&}7 zhIy=Ob1Wr<{Lu@HWOlHv62Na2l<Q)-E)s^AdYMYZ=8Vo#IuIdx$u#k>twmrHOzZVJ zi%ULXp@d%-O8YxG|M^+cBuGXRB$bA+jHd&N+GoM>DcsaaJBH|Nl}yJ9)oK-|<t|!R zBFnP4{;KDw1YUDaZWHQtjn;;6ArC-TcNey8;W#!*DU?zG#M~{|w!K-S$tt@LbJN7! z^aff0=-+(0)mneM0FF}1z3;wztYgQ%2#gW+?;-x(EKAAkY}Qgrxk^On>FFM^ZEIX> t6B7{|_^(2ul+w0sRkSug&Cf5K`x`*e{!124+DiZc002ovPDHLkV1n)GkbnRH literal 0 HcmV?d00001 diff --git a/formidable_1_0/inc/CVS/Entries b/formidable_1_0/inc/CVS/Entries new file mode 100644 index 00000000..2b8699db --- /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 00000000..ce8493ef --- /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 00000000..71e2ccb9 --- /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 00000000..03fc160f --- /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 00000000..1c6dbe6e --- /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 00000000..e4d96194 --- /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 00000000..71e2ccb9 --- /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 00000000..8c9f5080 --- /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 00000000..9265bf7c --- /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ählen eine Variable von denen zur Verfü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ür jeden Autor ohne Offenlegung seiner Identitä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 00000000..5c91352a --- /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é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ésultats du formulaire anonymes (ne pas garder de traces de l'identifiant des personnes ayant répondu.)", + 'traiter_enregistrement_option_choix_select_label' => "Choisir une variable parmi celles proposées", + 'traiter_enregistrement_option_anonymiser_variable_label' => "Variable à partir de laquelle anonymiser le formulaire", + 'traiter_enregistrement_option_anonymiser_variable_explication' => "Quelle variable système utiliser pour calculer une valeur unique pour chaque auteur sans pour autant révéler son identité.", + '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 00000000..e2b4c1c0 --- /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 00000000..a4bee579 --- /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 00000000..f6663cd9 --- /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 00000000..108f4e2a --- /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 00000000..97282392 --- /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 00000000..c04bb2d5 --- /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 00000000..2c5e5531 --- /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 00000000..71e2ccb9 --- /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 00000000..c1747f77 --- /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 00000000..4c39c70c --- /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 00000000..79dc4e9d --- /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 00000000..02d78a07 --- /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 00000000..4d95000f --- /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 00000000..32742705 --- /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 00000000..71e2ccb9 --- /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 00000000..95f7a4c6 --- /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 00000000..dd6679c0 --- /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 00000000..8682d6d0 --- /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 00000000..ca025eb7 --- /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 00000000..71e2ccb9 --- /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 00000000..559a130c --- /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 00000000..9f3b5e93 --- /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 00000000..64edb67d --- /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 00000000..7abecfef --- /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 00000000..aba067f2 --- /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 00000000..71e2ccb9 --- /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 00000000..48cdfbe4 --- /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 00000000..7ddfd179 --- /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 00000000..71e2ccb9 --- /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 00000000..b87a78df --- /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 00000000..e2311d80 --- /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 00000000..71e2ccb9 --- /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 00000000..e22434c6 --- /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 00000000..30bccf4e --- /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 00000000..b87a78df --- /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 00000000..12bc51ca --- /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 00000000..71e2ccb9 --- /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 00000000..59afec02 --- /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 00000000..04908427 --- /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 00000000..91be90a6 --- /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 00000000..5e27e718 --- /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 00000000..71e2ccb9 --- /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 00000000..f2a80983 --- /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 00000000..9d310c09 --- /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 00000000..ad1a7057 --- /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 00000000..d5b69651 --- /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 00000000..71e2ccb9 --- /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 00000000..3e712a6b --- /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 00000000..3dd4d5d8 --- /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 00000000..71e2ccb9 --- /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 00000000..df8aa011 --- /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 00000000..6a19dc7d --- /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 00000000..b3eedd0b --- /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 00000000..f655ed30 --- /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 00000000..452436e5 --- /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 00000000..40a22f00 --- /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 00000000..63e9cb59 --- /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 00000000..f839ab46 --- /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 00000000..c0d528b8 --- /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 00000000..71e2ccb9 --- /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 00000000..4407c024 --- /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 00000000..959b0ebe --- /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 00000000..9810f757 --- /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 00000000..eece13ca --- /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 00000000..2e48e662 --- /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 00000000..3af88e41 --- /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 00000000..71e2ccb9 --- /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 00000000..2b7798d4 --- /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> > +<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 00000000..a41dfd9d --- /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> > +<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#TITRE</a> > +<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 00000000..7fd040aa --- /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 00000000..81cbd20c --- /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> > +<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#TITRE</a> > +<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 00000000..a4ebff64 --- /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> > +<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#INFO_TITRE{formulaire,#ID_FORMULAIRE}</a> > +<a class="on" href="[(#URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire,#ID_FORMULAIRE})]"><:formidable:voir_reponses:></a> > +<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 00000000..bfe35597 --- /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> > +<a href="[(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE})]">#INFO_TITRE{formulaire,#ID_FORMULAIRE}</a> > +<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 00000000..17848105 --- /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 00000000..1c9444e6 --- /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 00000000..71e2ccb9 --- /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 00000000..2e48e662 --- /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 00000000..66d14d40 --- /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 00000000..71e2ccb9 --- /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 00000000..ef1289e7 --- /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:> (#TOTAL_BOUCLE),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 00000000..ed862872 --- /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 00000000..0ee28b01 --- /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 00000000..959bad42 --- /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 00000000..2b4d4ede --- /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 00000000..e19e1c1a --- /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 00000000..cbd1cf99 --- /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 00000000..f979dcfd --- /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 00000000..d7b45fcd --- /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 00000000..71e2ccb9 --- /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 00000000..d906c23b --- /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 00000000..22a27c9e --- /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 00000000..71e2ccb9 --- /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 00000000..72cbdc10 --- /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 00000000..48c10399 --- /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 00000000..71e2ccb9 --- /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 GIT binary patch literal 742 zcmV<C0vY{@P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00l7s00l7tx9uoW00007bV*G`2igJ| z3o0mnD^;%m00L%7L_t(I%YBo*Z(T(Y#eeheeV_72VuK@OWFjhrD3i`YLZWjALZU;W zq=24+j=zHl(IWl^BqSPy(nLxJu^mF5jAOrxecydMGl$~Zk<&26*;#4#?3pvOc5ra8 zd(m~@X5<WT0Z0ho8g&KMFH+WZRkgP^*1oQ{wzuBpy!mXoS^<VqNQtgUlu7otUfI{9 zF<aZ)Kh#arwD0flbLY+u!^$LNk_4E9B=xMANs^GYU2t-8!o%NxYwM@SN9EH`K4$N& zyZrp{FRnv3<s&4>?3H|Ye~;tCCw%nNkEO1v%DQFC;rw5Id34PB+7x#uJn;x3l8D4T ziA>HHm%P2ZNiHv`>dNZ=l_WDcJacF|yc9|aiaV>~eO{clbL6WlWde*^f|Uom8x!_- z#B$kSgTakX)SwD6A|e@&hwN-l`190}L~SN8qkXa9wX+wDr(+aJD0|0KghZxL2ABV| zT%5iGg8^oumJ9*ia>e3V!))f1C=_?x6L+VC;~o?*TwE;amfcHZYk-JgI35wzkftpN z5n*Hw2vx`ot7-<SSl^s7o=k`~t_uY3oVD#C`=8&%%y>C+(C0ViQWER8MjSnl-b4^K z7;$#~gg>5s&un&^$RMMyKSN~pT}naIoO18IFB#YnP){I1gwy7)AY)a8m%t+^9=#VO zD8AzIB8m6{X>?t}K;Ud{yvZBQS7rp7nrQ-(OcDr_L@Etc+}_;d<oOY1sCF;Y`TQ9> zJFl}o{Gk7I#w%erzzojMI_C4gDaEJtVzGGq;K6s_RMl`JB6NN9e?nDNSwvYZ7K_LK Y0UY?hEnK!Ow*UYD07*qoM6N<$f;qKQ(f|Me literal 0 HcmV?d00001 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 00000000..d906c23b --- /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 00000000..1704f769 --- /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 00000000..71e2ccb9 --- /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 00000000..efcc9649 --- /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 00000000..8c1b5af1 --- /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 00000000..71e2ccb9 --- /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 GIT binary patch literal 742 zcmV<C0vY{@P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp) z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00l7s00l7tx9uoW00007bV*G`2igJ| z3o0mnD^;%m00L%7L_t(I%YBo*Z(T(Y#eeheeV_72VuK@OWFjhrD3i`YLZWjALZU;W zq=24+j=zHl(IWl^BqSPy(nLxJu^mF5jAOrxecydMGl$~Zk<&26*;#4#?3pvOc5ra8 zd(m~@X5<WT0Z0ho8g&KMFH+WZRkgP^*1oQ{wzuBpy!mXoS^<VqNQtgUlu7otUfI{9 zF<aZ)Kh#arwD0flbLY+u!^$LNk_4E9B=xMANs^GYU2t-8!o%NxYwM@SN9EH`K4$N& zyZrp{FRnv3<s&4>?3H|Ye~;tCCw%nNkEO1v%DQFC;rw5Id34PB+7x#uJn;x3l8D4T ziA>HHm%P2ZNiHv`>dNZ=l_WDcJacF|yc9|aiaV>~eO{clbL6WlWde*^f|Uom8x!_- z#B$kSgTakX)SwD6A|e@&hwN-l`190}L~SN8qkXa9wX+wDr(+aJD0|0KghZxL2ABV| zT%5iGg8^oumJ9*ia>e3V!))f1C=_?x6L+VC;~o?*TwE;amfcHZYk-JgI35wzkftpN z5n*Hw2vx`ot7-<SSl^s7o=k`~t_uY3oVD#C`=8&%%y>C+(C0ViQWER8MjSnl-b4^K z7;$#~gg>5s&un&^$RMMyKSN~pT}naIoO18IFB#YnP){I1gwy7)AY)a8m%t+^9=#VO zD8AzIB8m6{X>?t}K;Ud{yvZBQS7rp7nrQ-(OcDr_L@Etc+}_;d<oOY1sCF;Y`TQ9> zJFl}o{Gk7I#w%erzzojMI_C4gDaEJtVzGGq;K6s_RMl`JB6NN9e?nDNSwvYZ7K_LK Y0UY?hEnK!Ow*UYD07*qoM6N<$f;qKQ(f|Me literal 0 HcmV?d00001 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 GIT binary patch literal 843 zcmV-R1GM~!P)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10?0{3K~zYItyE2G6HydB^U*SCf=WWtNGlfXLZO=?R20!JbR#aM zJHfwE?6U6s7w-HE(o(^d3qj~c5T%0svPnZ4oqXMUT)a0kFHK4yIuP#M``(<J^UitK zBZ-HrtM{W^^cer~X~*q%?{{`SgaA-1mEP2wtp$((0Ft12N#AML;O5D`<QozIK>~Bt z@(TdhLjWig3L51LDTw(t0pL*G1#-dNdOklR01yH|5Cl>xmYmJVfX{=Eshc&R*NHW4 zP_2}ko13rxrv%v8c-crB06-X;*SA}{IIR5v92N;95KtS_BV@*Uu2R7BC(8qk(gw*n zA2r%2mM%j{s1m9QRf1HAn1-SRZC#aiuVU}82~|xHvj(&q0H783Q0v6#i>dWRphAcU zL=__Dr=sYqjW)klnjSF3NCtgT)Z;$-qL99rD5jD0ZM2}-x{1|GVP<Fdh%$=-_ik13 zZT}R255iAfk&qs`4|ahh7Uzo&1Lug`!pvz6#e)OTL3Qs!MxO)V0Flot$c0fNX8_0F zk5DZaQ;|tcMPwp;TC-x)2)_5_2UZ^49wl<dpx5i6b<#2)i9)ExNum%Yu2P7NSx$se zI9}xL?+zMgF+{C^D%LrPi^Pbk=WB}D8?)nWT3)E2eo%)`Vj9^cO2k%ZstX9HGk+@c z<?#&eKD~o~dB)oG<LB21rn~7s2MDS&GMtI(j&c(4n8SmW^?^o148kd3_G%SWK$$s* zb|knlbCt;(r_Ip}T$^^fCphbVGULD*4QZ~lIfvG#WXWl8flWKz7`0l{{8J04VwfaN z(z_tAb~Q|9{7!0?ks_1C^38R`?ZzbfA{Sk`h(Tu4TvS9ZDo)fO!7|b0q33zg+S)UJ zdwZ*`N^fFh=ka}y`};qA&+{UWBr28iVi5RCBAO!^0GPB9J<pRM@M96(JwE>R^)DV^ VNz7bru4w=O002ovPDHLkV1k>jcMt#o literal 0 HcmV?d00001 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 GIT binary patch literal 1108 zcmV-a1grarP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000Fs000Fs0k`caQUCw|8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11JOxDK~zYIt(47gRaF$le|w*M@B5;Cj{=pp2!6DbNK!`v8pT8s zNgKz^Oq?0{j~vNgK#T)POdM#OK%!9tCTNtDs7SH2<$d3C@7WISd#|s&CN#t|I%n^d zv-VnhpCe|*>e}i`k|gi*Kdv-Qzq;||jh`ccix=Phyn1NrWvoaVR&32i=iS^`+!!Lq zu*LqtgTFrpmLh;kwQAGT)7Su1V1|2RY+I0z;l{C}xWSX{Z3Bn~i7bwz-9m;Jja5Do zd#Yj^5fph<$wmanXJ@ysT)A>Ea}T(#UHk0uh#=3i;G6^C>s!C`&5wT~0;sY$Kh1}$ zuXFv=FX*&7V377bAAGdRy^ZT^HSeM#fN*O5J(gcx1t5g5Yf+YEVd&q+R-5(B9!?ci zVYcBhGkUEatw&Ar5J*!`x80?eJ|@%qI2A;NW^02G0s#GfKOYfz@53+=LSSiO3Xy`~ zSfhmZDTiOEQ?4XfFjDVvkx(tqBJoRwS`6>Iqekyh;JqIy@L5j1mJ|dcRANV-2jWsh zUWo~Lz|;sBstK{w5D`QKpJo#iHDOV!>-qMVO+*!^%F2s1E?-#W-tGHzHroUXbh~|4 z-dW+_tvmGPCNi+|5SJ%LI2zhA&fMw;oPs*&`5b_>o09d?q6eKGd6tu9Z8F!yiGm5i z!u|@z1LZ`yaON1Qf~s(GCc%5p$ulR&+MW;s{WPUqEpfzNBah;NozQPa`ztWpeVqbK zS7THK5vU}JS)f#ji4cMr(icP_ipscn3K2m?NM-U>Pbld0Grs$E2j>*$l;xw2wKo^} z<EM2(t5DEvcQ}1+nT_TTNbP%c&;ysPjmC5jftigGPK3r(2`7R&rCL_Zj8d(H5D_ep ztD!2yaSazYP$#G=c~75hQ4}lZmJTB-s3=D(MxJM!I&%W?1+LdmsT?YEBsoh|sgK6= zaVvSYMHY<hwl8FhkPLpi_LC0IgM~o5+r#^e)Nf<S#;6zzbI(?g`kcEDyErX+(5-qv zczADvQmW)3u+wa@{C1D6-fz^B+k=TyvM_T11wiDAN2X3;@c)Yl&M62ul_CbHDsIpN zjDwA-a}MVOr;5n#WzIPeK?grC1Ja>_@nP9lfthjs>>T0FKOlktugo<FA#nWk96Os$ z1fy}Z#LR4iy!{s2j}8L`_T>D<{Vf`2UR-FfxX{=m)66)(_6AR{TKy8tUz)(~u}DP9 zSFe6zw{G3+nVC%7@*GP<Y<+#*M5HWcM!jBNh~sEE&+{6fX6W->OaOv&uI+txcV}nk aum1oj;A6L59%c*x0000<MNUMnLSTZB&i+mS literal 0 HcmV?d00001 diff --git a/formidable_1_0/public/CVS/Entries b/formidable_1_0/public/CVS/Entries new file mode 100644 index 00000000..c3c9883e --- /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 00000000..d554eac6 --- /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 00000000..71e2ccb9 --- /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 00000000..ef2147a3 --- /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 00000000..0c46c943 --- /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 00000000..1fdae627 --- /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 00000000..71e2ccb9 --- /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 00000000..0efc6f9e --- /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 00000000..fbad8607 --- /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 00000000..6a75736d --- /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 00000000..71e2ccb9 --- /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 00000000..7c9a8ab3 --- /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 00000000..51a9faf9 --- /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 00000000..c60875ba --- /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 00000000..9692d031 --- /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 00000000..703e6c02 --- /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 00000000..51a9faf9 --- /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 00000000..e7e5dba9 --- /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 00000000..35f08b42 --- /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 00000000..35f08b42 --- /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 00000000..a8ef6aec --- /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 00000000..54589d33 --- /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 00000000..0f1212a6 --- /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 00000000..27d5c507 --- /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 00000000..e2e1915a --- /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 00000000..71e2ccb9 --- /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 00000000..a9692f86 --- /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 00000000..9b75a57c --- /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 00000000..8d06e2d0 --- /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 00000000..1ad5aeb3 --- /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 00000000..71e2ccb9 --- /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 00000000..d2ad8d8a --- /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 00000000..e8d8bb4c --- /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 00000000..b8ef7aaa --- /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 00000000..0a9ded3a --- /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 00000000..c857bbec --- /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 00000000..a6a08c95 --- /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 00000000..939e16ee --- /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 00000000..71e2ccb9 --- /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 00000000..c7a60e47 --- /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 00000000..4f5b4d7f --- /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 00000000..b89e8e15 --- /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 00000000..41c9ced8 --- /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' -- GitLab