Skip to content
Extraits de code Groupes Projets
Valider 5b1c5c65 rédigé par camille.sauvage@espci.fr's avatar camille.sauvage@espci.fr
Parcourir les fichiers

No commit message

No commit message
parent 78015d93
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Affichage de
avec 2584 ajouts et 0 suppression
......@@ -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
......
Ce diff est replié.
<?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);
}
?>
<?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
}
?>
<?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);
}
}
?>
<?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();
}
}
}
?>
<?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);
}
?>
<?php
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Action de suppression d'un formulaire
* @param int $arg
* @return unknown_type
*/
function action_supprimer_formulaire_dist($arg=null) {
if (is_null($arg)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
// si id_formulaire n'est pas un nombre, on ne fait rien
if ($id_formulaire = intval($arg)) {
// On supprime le formulaire lui-même
$ok = sql_delete(
'spip_formulaires',
'id_formulaire = '.$id_formulaire
);
if ($ok){
// Si c'est bon, on récupère les réponses pour les supprimer
$reponses = sql_allfetsel(
'id_formulaires_reponse',
'spip_formulaires_reponses',
'id_formulaire = '.$id_formulaire
);
$reponses = $reponses ? array_map('reset', $reponses) : false;
// On supprime les réponses s'il y en a
if ($reponses){
$ok = sql_delete(
'spip_formulaires_reponses',
sql_in('id_formulaires_reponse', $reponses)
);
// Si c'est bon, on supprime les champs des réponses
if ($ok){
$ok = sql_delete(
'spip_formulaires_reponses_champs',
sql_in('id_formulaires_reponse', $reponses)
);
}
}
}
}
if ($ok){
if (!$redirect = _request('redirect'))
$redirect = generer_url_ecrire('formulaires');
include_spip('inc/headers');
redirige_par_entete(str_replace("&amp;","&",urldecode($redirect)));
}
}
?>
<?php
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Action de suppression d'une réponse
* @param int $arg
* @return unknown_type
*/
function action_supprimer_formulaires_reponse_dist($arg=null) {
if (is_null($arg)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
// si id_formulaires_reponse n'est pas un nombre, on ne fait rien
if ($id_formulaires_reponse = intval($arg)) {
// On récupère l'id_formulaire pour la redirection
$id_formulaire = intval(sql_getfetsel(
'id_formulaire',
'spip_formulaires_reponses',
'id_formulaires_reponse = '.$id_formulaires_reponse
));
// On supprime la réponse
$ok = sql_delete(
'spip_formulaires_reponses',
'id_formulaires_reponse = '.$id_formulaires_reponse
);
// Si c'est bon, on supprime les champs des réponses
if ($ok){
$ok = sql_delete(
'spip_formulaires_reponses_champs',
'id_formulaires_reponse = '.$id_formulaires_reponse
);
}
}
if ($ok){
if (!$redirect = _request('redirect'))
$redirect = parametre_url(generer_url_ecrire('formulaires_reponses'), 'id_formulaire', $id_formulaire);
include_spip('inc/headers');
redirige_par_entete(str_replace("&amp;","&",urldecode($redirect)));
}
}
?>
<?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;
}
?>
.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);
}
<?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');
}
}
?>
<?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');
}
}
?>
<?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');
}
}
?>
<?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));
}
?>
<?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);
}
?>
<?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;
}
?>
<?php
/**
* Chargement des fonctions pour les squelettes
*
* @package SPIP\Formidable\Fonctions
**/
include_spip('inc/formidable');
include_spip('public/formidable_criteres');
<?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));
}
}
?>
<?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;
}
?>
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter