Browse Source

rangement formidable 2

svn/root/tags/v0.6.5 v0.6.5
rastapopoulos@spip.org 11 years ago
commit
5bbe37e69a
  1. 91
      .gitattributes
  2. 60
      action/dupliquer_formulaire.php
  3. 98
      action/editer_formulaire.php
  4. 24
      action/exporter_formulaire.php
  5. 85
      action/exporter_formulaires_reponses.php
  6. 34
      action/instituer_formulaires_reponse.php
  7. 61
      action/supprimer_formulaire.php
  8. 50
      action/supprimer_formulaires_reponse.php
  9. 74
      base/formidable_installation.php
  10. 1
      base/formidable_tables.php
  11. 175
      echanger/formulaire/forms.php
  12. 175
      echanger/formulaire/wcs.php
  13. 80
      echanger/formulaire/yaml.php
  14. 30
      exec/puce_statut_formulaires.php
  15. 138
      formidable_options.php
  16. 31
      formidable_pipelines.php
  17. 24
      formulaires/editer_formulaire.html
  18. 75
      formulaires/editer_formulaire.php
  19. 39
      formulaires/editer_formulaire_champs.html
  20. 113
      formulaires/editer_formulaire_champs.php
  21. 41
      formulaires/editer_formulaire_traitements.html
  22. 114
      formulaires/editer_formulaire_traitements.php
  23. 36
      formulaires/formidable.html
  24. 215
      formulaires/formidable.php
  25. 30
      formulaires/importer_formulaire.html
  26. 53
      formulaires/importer_formulaire.php
  27. BIN
      icones_barre/formulaire.png
  28. BIN
      images/formidable-128.png
  29. BIN
      images/formidable-24.png
  30. BIN
      images/formidable-64.png
  31. 1104
      images/formidable.svg
  32. BIN
      images/formulaire-24.png
  33. BIN
      images/formulaire-action-ajouter.png
  34. BIN
      images/formulaire-analyse-24.png
  35. BIN
      images/formulaire-config-champs-24.png
  36. BIN
      images/formulaire-config-traitements-24.png
  37. BIN
      images/formulaire-dupliquer-24.png
  38. BIN
      images/formulaire-editer-24.png
  39. BIN
      images/formulaire-exporter-24.png
  40. BIN
      images/formulaire-nouveau-48.png
  41. BIN
      images/formulaire-reponse-24.png
  42. BIN
      images/formulaire-reponse-supprimer-24.png
  43. BIN
      images/formulaire-reponses-24.png
  44. BIN
      images/formulaire-reponses-exporter-24.png
  45. BIN
      images/formulaire-supprimer-24.png
  46. 183
      inc/formidable.php
  47. 85
      inc/formidable_autoriser.php
  48. 129
      lang/formidable_de.php
  49. 126
      lang/formidable_fr.php
  50. 17
      modeles/formulaire_aide_memoire.html
  51. 22
      modeles/formulaire_analyse.html
  52. 20
      modeles/formulaire_formidable.yaml
  53. 14
      modeles/formulaires_reponse.html
  54. 2
      noisettes/formulaire_formidable.html
  55. 15
      noisettes/formulaire_formidable.yaml
  56. 7
      notifications/formulaire_accuse.html
  57. 18
      notifications/formulaire_email.html
  58. 67
      plugin.xml
  59. 64
      prive/exec/formulaires_analyse.html
  60. 96
      prive/exec/formulaires_editer.html
  61. 93
      prive/exec/formulaires_reponse.html
  62. 70
      prive/exec/formulaires_reponses.html
  63. 29
      prive/exec/formulaires_tous.html
  64. 108
      prive/exec/formulaires_voir.html
  65. 45
      prive/liste/formulaires.html
  66. 46
      prive/liste/formulaires_reponses.html
  67. BIN
      prive/themes/basic/images/formulaire-16.png
  68. BIN
      prive/themes/spip/images/formulaire-16.png
  69. 64
      public/formidable_criteres.php
  70. 32
      saisies-analyses/_base.html
  71. 27
      saisies-analyses/case.html
  72. 25
      saisies-analyses/checkbox.html
  73. 14
      saisies-analyses/destinataires.html
  74. 27
      saisies-analyses/oui_non.html
  75. 25
      saisies-analyses/radio.html
  76. 13
      saisies-analyses/selecteur_article.html
  77. 13
      saisies-analyses/selecteur_rubrique.html
  78. 14
      saisies-analyses/selecteur_rubrique_article.html
  79. 25
      saisies-analyses/selection.html
  80. 25
      saisies-analyses/selection_multiple.html
  81. 5
      saisies-vues/formulaire_formidable.html
  82. 9
      saisies-vues/formulaire_formidable_multiple.html
  83. 28
      saisies/champ.html
  84. 22
      saisies/formulaire_formidable.html
  85. 26
      saisies/formulaire_formidable_multiple.html
  86. 157
      test/formidable.html
  87. 19
      todo.txt
  88. 184
      traiter/email.php
  89. 51
      traiter/email.yaml
  90. 129
      traiter/enregistrement.php
  91. 37
      traiter/enregistrement.yaml

91
.gitattributes vendored

@ -0,0 +1,91 @@
* text=auto !eol
action/dupliquer_formulaire.php -text
action/editer_formulaire.php -text
action/exporter_formulaire.php -text
action/exporter_formulaires_reponses.php -text
action/instituer_formulaires_reponse.php -text
action/supprimer_formulaire.php -text
action/supprimer_formulaires_reponse.php -text
base/formidable_installation.php -text
base/formidable_tables.php -text
echanger/formulaire/forms.php -text
echanger/formulaire/wcs.php -text
echanger/formulaire/yaml.php -text
exec/puce_statut_formulaires.php -text
/formidable_options.php -text
/formidable_pipelines.php -text
formulaires/editer_formulaire.html -text
formulaires/editer_formulaire.php -text
formulaires/editer_formulaire_champs.html -text
formulaires/editer_formulaire_champs.php -text
formulaires/editer_formulaire_traitements.html -text
formulaires/editer_formulaire_traitements.php -text
formulaires/formidable.html -text
formulaires/formidable.php -text
formulaires/importer_formulaire.html -text
formulaires/importer_formulaire.php -text
icones_barre/formulaire.png -text
images/formidable-128.png -text
images/formidable-24.png -text
images/formidable-64.png -text
images/formidable.svg -text
images/formulaire-24.png -text
images/formulaire-action-ajouter.png -text
images/formulaire-analyse-24.png -text
images/formulaire-config-champs-24.png -text
images/formulaire-config-traitements-24.png -text
images/formulaire-dupliquer-24.png -text
images/formulaire-editer-24.png -text
images/formulaire-exporter-24.png -text
images/formulaire-nouveau-48.png -text
images/formulaire-reponse-24.png -text
images/formulaire-reponse-supprimer-24.png -text
images/formulaire-reponses-24.png -text
images/formulaire-reponses-exporter-24.png -text
images/formulaire-supprimer-24.png -text
inc/formidable.php -text
inc/formidable_autoriser.php -text
lang/formidable_de.php -text
lang/formidable_fr.php -text
modeles/formulaire_aide_memoire.html -text
modeles/formulaire_analyse.html -text
modeles/formulaire_formidable.yaml -text
modeles/formulaires_reponse.html -text
noisettes/formulaire_formidable.html -text
noisettes/formulaire_formidable.yaml -text
notifications/formulaire_accuse.html -text
notifications/formulaire_email.html -text
/plugin.xml -text
prive/exec/formulaires_analyse.html -text
prive/exec/formulaires_editer.html -text
prive/exec/formulaires_reponse.html -text
prive/exec/formulaires_reponses.html -text
prive/exec/formulaires_tous.html -text
prive/exec/formulaires_voir.html -text
prive/liste/formulaires.html -text
prive/liste/formulaires_reponses.html -text
prive/themes/basic/images/formulaire-16.png -text
prive/themes/spip/images/formulaire-16.png -text
public/formidable_criteres.php -text
saisies-analyses/_base.html -text
saisies-analyses/case.html -text
saisies-analyses/checkbox.html -text
saisies-analyses/destinataires.html -text
saisies-analyses/oui_non.html -text
saisies-analyses/radio.html -text
saisies-analyses/selecteur_article.html -text
saisies-analyses/selecteur_rubrique.html -text
saisies-analyses/selecteur_rubrique_article.html -text
saisies-analyses/selection.html -text
saisies-analyses/selection_multiple.html -text
saisies-vues/formulaire_formidable.html -text
saisies-vues/formulaire_formidable_multiple.html -text
saisies/champ.html -text
saisies/formulaire_formidable.html -text
saisies/formulaire_formidable_multiple.html -text
test/formidable.html -text
/todo.txt -text
traiter/email.php -text
traiter/email.yaml -text
traiter/enregistrement.php -text
traiter/enregistrement.yaml -text

60
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('formulaires_voir'), 'id_formulaire', $id_formulaire, '&');
}
// Sinon on reste sur la page qui liste tout
else{
$redirect = generer_url_ecrire('formulaires_tous');
}
}
// 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);
}
?>

98
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
}
?>

24
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);
}
}
?>

85
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();
}
}
}
?>

34
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);
}
?>

61
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_tous');
include_spip('inc/headers');
redirige_par_entete(str_replace("&amp;","&",urldecode($redirect)));
}
}
?>

50
action/supprimer_formulaires_reponse.php

@ -0,0 +1,50 @@
<?php
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Action de suppression d'une réponse
* @param int $arg
* @return unknown_type
*/
function action_supprimer_formulaires_reponse_dist($arg=null) {
if (is_null($arg)){
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
// si id_formulaires_reponse n'est pas un nombre, on ne fait rien
if ($id_formulaires_reponse = intval($arg)) {
// On récupère l'id_formulaire pour la redirection
$id_formulaire = intval(sql_getfetsel(
'id_formulaire',
'spip_formulaires_reponses',
'id_formulaires_reponse = '.$id_formulaires_reponse
));
// On supprime la réponse
$ok = sql_delete(
'spip_formulaires_reponses',
'id_formulaires_reponse = '.$id_formulaires_reponse
);
// Si c'est bon, on supprime les champs des réponses
if ($ok){
$ok = sql_delete(
'spip_formulaires_reponses_champs',
'id_formulaires_reponse = '.$id_formulaires_reponse
);
}
}
if ($ok){
if (!$redirect = _request('redirect'))
$redirect = parametre_url(generer_url_ecrire('formulaires_reponses'), 'id_formulaire', $id_formulaire);
include_spip('inc/headers');
redirige_par_entete(str_replace("&amp;","&",urldecode($redirect)));
}
}
?>

74
base/formidable_installation.php

@ -0,0 +1,74 @@
<?php
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/meta');
// Installation et mise à jour
function formidable_upgrade($nom_meta_version_base, $version_cible){
$version_actuelle = '0.0';
if (
(!isset($GLOBALS['meta'][$nom_meta_version_base]))
|| (($version_actuelle = $GLOBALS['meta'][$nom_meta_version_base]) != $version_cible)
){
if (version_compare($version_actuelle,'0.0','=')){
// Création des tables
include_spip('base/create');
include_spip('base/abstract_sql');
creer_base();
echo "Installation du plugin formidable<br/>";
ecrire_meta($nom_meta_version_base, $version_actuelle=$version_cible, 'non');
}
/*if (version_compare($version_actuelle,'0.5','<')){
include_spip('base/create');
include_spip('base/abstract_sql');
// Modification de formidable
sql_alter('');
// On change la version
echo "Mise à jour du plugin formidable en version 0.5<br/>";
ecrire_meta($nom_meta_version_base, $version_actuelle=$version_cible, 'non');
}*/
if (version_compare($version_actuelle,'0.5.7','<')){
include_spip('base/create');
maj_tables('spip_formulaires');
echo "Mise à jour du plugin formidable en version 0.5.7<br/>";
ecrire_meta($nom_meta_version_base, $version_actuelle=$version_cible, 'non');
}
if (version_compare($version_actuelle,'0.6.5','<')){
include_spip('base/create');
maj_tables('spip_formulaires');
echo "Mise à jour du plugin formidable en version 0.6.5<br/>";
ecrire_meta($nom_meta_version_base, $version_actuelle=$version_cible, 'non');
}
}
}
// Désinstallation
function formidable_vider_tables($nom_meta_version_base){
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_version_base);
}
?>

1
base/formidable_tables.php

@ -0,0 +1 @@
<?php // Sécurité if (!defined("_ECRIRE_INC_VERSION")) return; function formidable_declarer_tables_interfaces($interface){ // 'spip_' dans l'index de $tables_principales $interface['table_des_tables']['formulaires'] = 'formulaires'; $interface['table_des_tables']['formulaires_reponses'] = 'formulaires_reponses'; $interface['table_des_tables']['formulaires_reponses_champs'] = 'formulaires_reponses_champs'; $interface['table_titre']['formulaires'] = 'titre'; $interface['tables_jointures']['spip_formulaires'][] = 'formulaires_liens'; $interface['tables_jointures']['spip_articles'][] = 'formulaires_liens'; $interface['tables_jointures']['spip_rubriques'][] = 'formulaires_liens'; return $interface; } function formidable_declarer_tables_principales($tables_principales){ //-- Table formulaires ----------------------------------------------------- $formulaires = array( "id_formulaire" => "bigint(21) NOT NULL", "identifiant" => "varchar(200)", "titre" => "text NOT NULL", "descriptif" => "text", "message_retour" => "varchar(255) NOT NULL", "saisies" => "text NOT NULL", "traitements" => "text NOT NULL", "public" => "enum('non', 'oui') DEFAULT 'non' NOT NULL", "statut" => "varchar(10) NOT NULL", "maj" => "timestamp", "apres" => "varchar(12) NOT NULL", "url_redirect" => "varchar(255)" ); $formulaires_cles = array( "PRIMARY KEY" => "id_formulaire" ); $tables_principales['spip_formulaires'] = array( 'field' => &$formulaires, 'key' => &$formulaires_cles, 'join'=> array( 'id_formulaire' => 'id_formulaire' ) ); //-- Table formulaires_reponses -------------------------------------------- $formulaires_reponses = array( "id_formulaires_reponse" => "bigint(21) NOT NULL", "id_formulaire" => "bigint(21) NOT NULL", "date" => "datetime NOT NULL", "ip" => "varchar(255) NOT NULL", "id_auteur" => "bigint(21) NOT NULL", "cookie" => "varchar(255) NOT NULL", "statut" => "varchar(10) NOT NULL", "maj" => "timestamp" ); $formulaires_reponses_cles = array( "PRIMARY KEY" => "id_formulaires_reponse", "KEY id_formulaire" => "id_formulaire", "KEY id_auteur" => "id_auteur", "KEY cookie" => "cookie" ); $tables_principales['spip_formulaires_reponses'] = array( 'field' => &$formulaires_reponses, 'key' => &$formulaires_reponses_cles, 'join'=> array( 'id_formulaires_reponse' => 'id_formulaires_reponse', 'id_formulaire' => 'id_formulaire', 'id_auteur' => 'id_auteur' ) ); //-- Table formulaires_reponses_champs ------------------------------------- $formulaires_reponses_champs = array( "id_formulaires_reponse" => "bigint(21) NOT NULL", "nom" => "varchar(255) NOT NULL", "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; } 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; } function formidable_rechercher_liste_des_champs($tables){ $tables['formulaire']['titre'] = 5; $tables['formulaire']['descriptif'] = 3; return $tables; } ?>

175
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');
}
}
?>

175
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');
}
}
?>

80
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');
}
}
?>

30
exec/puce_statut_formulaires.php

@ -0,0 +1,30 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/presentation');
// http://doc.spip.org/@exec_puce_statut_dist
function exec_puce_statut_formulaires_dist()
{
exec_puce_statut_formulaires_args(_request('id'), _request('type'));
}
// http://doc.spip.org/@exec_puce_statut_args
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));
}
?>

138
formidable_options.php

@ -0,0 +1,138 @@
<?php
// 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'),
'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'
)
)
);
function puce_statut_formulaires_reponse_dist($id, $statut, $id_rubrique, $type='formulaires_reponse', $ajax=false){
global $lang_objet;
static $coord = array(
'publie' => 1,
'prop' => 0,
'poubelle' => 2
);
$lang_dir = lang_dir($lang_objet);
$ajax_node = " id='imgstatut$type$id'";
$inser_puce = puce_statut($statut, " width='9' height='9' style='margin: 1px;'$ajax_node");
if (!autoriser('instituer', 'formulaires_reponse', $id)
or !_ACTIVER_PUCE_RAPIDE
)
return $inser_puce;
$titles = array(
"orange" => _T('texte_statut_propose_evaluation'),
"verte" => _T('texte_statut_publie'),
"poubelle" => _T('texte_statut_poubelle')
);
$clip = 1 + (11 * $coord[$statut]);
if ($ajax){
return "<span class='puce_article_fixe'>"
. $inser_puce
. "</span>"
. "<span class='puce_article_popup' id='statutdecal$type$id' style='width:33px; margin-left: -$clip"."px;'>"
. afficher_script_statut($id, $type, -1, 'puce-orange.gif', 'prop', $titles['orange'])
. afficher_script_statut($id, $type, -12, 'puce-verte.gif', 'publie', $titles['verte'])
. afficher_script_statut($id, $type, -23, 'puce-poubelle.gif', 'poubelle', $titles['poubelle'])
. "</span>";
}
$nom = "puce_statut_";
if ((! _SPIP_AJAX) AND $type != 'formulaires_reponse')
$over ='';
else {
$action = generer_url_ecrire('puce_statut_formulaires',"",true);
$action = "if (!this.puce_loaded) { this.puce_loaded = true; prepare_selec_statut('$nom', '$type', '$id', '$action'); }";
$over = "\nonmouseover=\"$action\"";
}
return "<span class='puce_article' id='$nom$type$id' dir='$lang_dir'$over>"
. $inser_puce
. '</span>';
}
if (!function_exists('array_fill_keys')){
function array_fill_keys($keys, $value){
array_combine($keys,array_fill(0,count($keys),$value));
}
}
?>

31
formidable_pipelines.php

@ -0,0 +1,31 @@
<?php
// Sécurité
if (!defined("_ECRIRE_INC_VERSION")) return;
// Si pas de critère "statut", on affiche que les réponses publiées
function formidable_pre_boucle($boucle){
if ($boucle->type_requete == 'formulaires_reponses') {
$id_table = $boucle->id_table;
$statut = "$id_table.statut";
if (!isset($boucle->modificateur['criteres']['statut']) and !isset($boucle->modificateur['tout'])){
$boucle->where[] = array("'='", "'$statut'", "sql_quote('publie')");
}
}
return $boucle;
}
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;
}
?>

24
formulaires/editer_formulaire.html

@ -0,0 +1,24 @@
<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>

75
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('formulaires_editer'), 'id_formulaire', $retours['id_formulaire'], '&');
}
// Sinon on redirige vers la page de visualisation
else{
$retours['redirect'] = parametre_url(generer_url_ecrire('formulaires_voir'), 'id_formulaire', $retours['id_formulaire'], '&');
}
}
return $retours;
}
?>

39
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>

113
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('formulaires_editer')
, 'id_formulaire', $id_formulaire
)
, 'configurer', 'traitements'
)
, 'avertissement', 'oui'
);
}
return $retours;
}
?>

41
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>

114
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']);