1 | <?php |
---|
2 | |
---|
3 | // Sécurité |
---|
4 | if (!defined('_ECRIRE_INC_VERSION')) { |
---|
5 | return; |
---|
6 | } |
---|
7 | |
---|
8 | include_spip('inc/formidable'); |
---|
9 | include_spip('inc/formidable_fichiers'); |
---|
10 | |
---|
11 | function formulaires_editer_formulaire_traitements_charger($id_formulaire) { |
---|
12 | $contexte = array(); |
---|
13 | $id_formulaire = intval($id_formulaire); |
---|
14 | |
---|
15 | // On teste si le formulaire existe |
---|
16 | if ($id_formulaire |
---|
17 | and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire) |
---|
18 | and autoriser('editer', 'formulaire', $id_formulaire) |
---|
19 | ) { |
---|
20 | $traitements = unserialize($formulaire['traitements']); |
---|
21 | $saisies = unserialize($formulaire['saisies']); |
---|
22 | if (!is_array($traitements)) { |
---|
23 | $traitements = array(); |
---|
24 | } |
---|
25 | if (!is_array($saisies)) { |
---|
26 | $saisies = array(); |
---|
27 | } |
---|
28 | $contexte['traitements'] = $traitements; |
---|
29 | $contexte['traitements_choisis'] = array_keys($traitements); |
---|
30 | $contexte['formulaire'] = _T_ou_typo($saisies, 'multi'); |
---|
31 | $contexte['id_formulaire'] = $id_formulaire; |
---|
32 | |
---|
33 | $traitements_disponibles = traitements_lister_disponibles(); |
---|
34 | $configurer_traitements = array(); |
---|
35 | foreach ($traitements_disponibles as $type_traitement => $traitement) { |
---|
36 | $configurer_traitements[] = array( |
---|
37 | 'saisie' => 'checkbox', |
---|
38 | 'options' => array( |
---|
39 | 'nom' => 'traitements_choisis', |
---|
40 | 'label' => $traitement['titre'], |
---|
41 | 'datas' => array( |
---|
42 | $type_traitement => $traitement['description'] |
---|
43 | ) |
---|
44 | ) |
---|
45 | ); |
---|
46 | $configurer_traitements[] = array( |
---|
47 | 'saisie' => 'fieldset', |
---|
48 | 'options' => array( |
---|
49 | 'nom' => 'options', |
---|
50 | 'label' => $traitement['titre'], |
---|
51 | 'li_class' => "$type_traitement options_traiter" |
---|
52 | ), |
---|
53 | 'saisies' => saisies_transformer_noms($traitement['options'], '/^.*$/', "traitements[$type_traitement][\\0]") |
---|
54 | ); |
---|
55 | } |
---|
56 | $contexte['_configurer_traitements'] = $configurer_traitements; |
---|
57 | |
---|
58 | // Si on demande un avertissement et qu'il y a déjà des traitements de configurés |
---|
59 | if (_request('avertissement') == 'oui') { |
---|
60 | $contexte['message_ok'] = $traitements ? _T('formidable:traitements_avertissement_modification') : _T('formidable:traitements_avertissement_creation'); |
---|
61 | } |
---|
62 | } else { |
---|
63 | $contexte['editable'] = false; |
---|
64 | } |
---|
65 | |
---|
66 | // On enlève l'éventuel avertissement pour le prochain envoi |
---|
67 | $contexte['action'] = parametre_url(self(), 'avertissement', ''); |
---|
68 | |
---|
69 | return $contexte; |
---|
70 | } |
---|
71 | |
---|
72 | function formulaires_editer_formulaire_traitements_verifier($id_formulaire) { |
---|
73 | include_spip('inc/saisies'); |
---|
74 | $erreurs = array(); |
---|
75 | $traitements_disponibles = traitements_lister_disponibles(); |
---|
76 | |
---|
77 | // On regarde quels traitements sont demandés |
---|
78 | $traitements_choisis = _request('traitements_choisis'); |
---|
79 | |
---|
80 | if (is_array($traitements_choisis)) { |
---|
81 | foreach ($traitements_choisis as $type_traitement) { |
---|
82 | $erreurs_traitement_brut = saisies_verifier( |
---|
83 | saisies_transformer_noms( |
---|
84 | $traitements_disponibles[$type_traitement]['options'], |
---|
85 | '/^.*$/', |
---|
86 | "traitements[$type_traitement][\\0]"), |
---|
87 | false |
---|
88 | ); |
---|
89 | if (!empty($erreurs_traitement_brut)) { |
---|
90 | $erreurs_traitement = array($type_traitement => array()); |
---|
91 | foreach ($erreurs_traitement_brut as $champ => $erreur) { |
---|
92 | $champ_brut = preg_replace("#traitements\[$type_traitement\]\[(.*)\]#",'\1',$champ); |
---|
93 | $erreurs_traitement[$type_traitement][$champ_brut] = $erreur; |
---|
94 | } |
---|
95 | $erreurs = array_merge($erreurs, $erreurs_traitement); |
---|
96 | } |
---|
97 | } |
---|
98 | } |
---|
99 | if (!empty($erreurs)) { |
---|
100 | $erreurs = array('traitements' => $erreurs); |
---|
101 | } |
---|
102 | return $erreurs; |
---|
103 | } |
---|
104 | |
---|
105 | function formulaires_editer_formulaire_traitements_traiter($id_formulaire) { |
---|
106 | $retours = array(); |
---|
107 | $id_formulaire = intval($id_formulaire); |
---|
108 | |
---|
109 | // On récupère tout le tableau des traitements |
---|
110 | $traitements = _request('traitements'); |
---|
111 | // On ne garde que les morceaux qui correspondent aux traitements choisis |
---|
112 | $traitements_choisis = _request('traitements_choisis'); |
---|
113 | if (!$traitements_choisis) { |
---|
114 | $traitements_choisis = array(); |
---|
115 | } |
---|
116 | $traitements_choisis = array_flip($traitements_choisis); |
---|
117 | $traitements = array_intersect_key($traitements, $traitements_choisis); |
---|
118 | |
---|
119 | // Si besoin, on créeun dossier pour stocker les fichiers |
---|
120 | |
---|
121 | $erreur_creation_dossier = formidable_creer_dossier_formulaire($id_formulaire); |
---|
122 | if ($erreur_creation_dossier) { |
---|
123 | $retours['message_erreur'] = $erreur_creation_dossier; |
---|
124 | } |
---|
125 | // Et on l'enregistre tel quel |
---|
126 | $ok = sql_updateq( |
---|
127 | 'spip_formulaires', |
---|
128 | array( |
---|
129 | 'traitements' => serialize($traitements) |
---|
130 | ), |
---|
131 | 'id_formulaire = '.$id_formulaire |
---|
132 | ); |
---|
133 | |
---|
134 | // On va sur la page de visualisation quand c'est fini |
---|
135 | if ($ok) { |
---|
136 | $retours['redirect'] = parametre_url(generer_url_ecrire('formulaire'), 'id_formulaire', $id_formulaire); |
---|
137 | } else { |
---|
138 | $retours['editable'] = true; |
---|
139 | $retours['message_erreur'] = _T('formidable:erreur_base'); |
---|
140 | } |
---|
141 | |
---|
142 | return $retours; |
---|
143 | } |
---|