[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / noiZetier / formulaires / configurer_bloc.php
1 <?php
2
3 // Sécurité
4 if (!defined("_ECRIRE_INC_VERSION")) return;
5
6 include_spip('inc/noizetier');
7
8 function formulaires_configurer_bloc_charger($bloc,$page,$infos_bloc){
9 $contexte = array();
10
11 $contexte['bloc'] = $bloc;
12 $contexte['page'] = $page;
13 $type_compo = explode ('-',$page,2);
14 $contexte['type'] = $type_compo[0];
15 $contexte['composition'] = $type_compo[1];
16 $contexte['bloc_page'] = $bloc.'-'.$page;
17 $contexte['_infos_bloc'] = $infos_bloc;
18
19 // On sait toujours où va la noisette
20 $contexte['_hidden'] .= '<input type="hidden" name="type" value="'.$contexte['type'].'" />';
21 $contexte['_hidden'] .= '<input type="hidden" name="composition" value="'.$contexte['composition'].'" />';
22 $contexte['_hidden'] .= '<input type="hidden" name="bloc" value="'.$contexte['bloc'].'" />';
23
24 // Si on demande une nouvelle noisette pour un bloc --------------------------
25 if ($bloc_page = _request('demander_nouvelle_noisette')){
26 // S'il n'y a pas encore de noisette de choisie
27 if (!($noisette = _request('noisette'))){
28 $contexte['bloc_page_nouvelle_noisette'] = $bloc_page;
29 // On charge les différentes noisettes du type, celles de la composition et celles pour toutes les pages
30 $contexte['_noisettes_type'] = noizetier_lister_noisettes($contexte['type']);
31 if ($contexte['composition']!='')
32 $contexte['_noisettes_composition'] = noizetier_lister_noisettes($contexte['type'].'-'.$contexte['composition']);
33 $contexte['_noisettes_toutes_pages'] = noizetier_lister_noisettes('');
34 }
35 // Si on a choisi une noisette
36 else{
37 $contexte['bloc_page_nouvelle_noisette'] = $bloc_page;
38 $contexte['noisette'] = $noisette;
39 // On charge les infos de la noisette choisie
40 $noisettes = noizetier_lister_noisettes();
41 $contexte['_infos_'.$noisette] = $noisettes[$noisette];
42 $contexte['_infos_'.$noisette]['parametres'][] = array(
43 'saisie' => 'input',
44 'options' => array(
45 'nom' => 'noizetier_css',
46 'label' => _T('noizetier:label_noizetier_css'),
47 'explication' => _T('noizetier:explication_noizetier_css')
48 )
49 );
50 }
51 }
52
53 // Si on veut modifier une noisette ------------------------------------------
54 if ($id_noisette = intval(_request('modifier_noisette'))){
55 // On va chercher l'existant de cette noisette
56 $entree = sql_fetsel(
57 'noisette, parametres, css',
58 'spip_noisettes',
59 'id_noisette = '.$id_noisette
60 );
61 $noisette = $entree['noisette'];
62 $parametres = unserialize($entree['parametres']);
63 $css = $entree['css'];
64
65 if (is_array($parametres))
66 $contexte = array_merge($contexte, $parametres);
67 $contexte['id_noisette'] = $id_noisette;
68 $contexte['noisette'] = $noisette;
69 // On charge les infos de la noisette choisie
70 $noisettes = noizetier_lister_noisettes();
71 $contexte['_infos_'.$noisette] = $noisettes[$noisette];
72 $contexte['_infos_'.$noisette]['parametres'][] = array(
73 'saisie' => 'input',
74 'options' => array(
75 'nom' => 'noizetier_css',
76 'label' => _T('noizetier:label_noizetier_css'),
77 'explication' => _T('noizetier:explication_noizetier_css'),
78 'defaut' => $css
79 )
80 );
81 }
82
83 // Si on a validé une noisette et qu'il y a une erreur -------------------------------
84 if (($bloc_page = _request('bloc_page_nouvelle_noisette') or $id_noisette = intval(_request('id_noisette_modifiee'))) and _request('enregistrer')!=''){
85 $erreurs = formulaires_configurer_bloc_verifier($bloc,$page);
86 // S'il y a des erreurs
87 if(count($erreurs)>0){
88 $noisette = _request('noisette');
89 $infos_param = noizetier_charger_parametres_noisette($noisette);
90 // On récupère les paramètres transmis
91 foreach ($infos_param as $nom=>$parametre)
92 $contexte[$nom] = _request($nom);
93 // On transmets les autres éléments du contexte
94 $noisettes = noizetier_lister_noisettes();
95 $contexte['_infos_'.$noisette] = $noisettes[$noisette];
96 $contexte['noisette'] = $noisette;
97 if ($id_noisette>0)
98 $contexte['id_noisette'] = $id_noisette;
99 if ($bloc_page)
100 $contexte['bloc_page_nouvelle_noisette'] = $bloc_page;
101 }
102 }
103
104 return $contexte;
105 }
106
107 function formulaires_configurer_bloc_verifier($bloc,$page){
108 $erreurs = array();
109
110 // Si on demande une nouvelle noisette pour un bloc --------------------------
111
112 if ($bloc_page = _request('demander_nouvelle_noisette')){
113 // S'il n'y a pas encore de noisette de choisie alors qu'on a demandé la suite
114 if (!($noisette = _request('noisette')))
115 if (_request('suivant'))
116 $erreurs['erreur_noisette'] = _T('noizetier:erreur_doit_choisir_noisette');
117 }
118
119 // Si on valide une noisette pour un bloc ------------------------------------
120
121 if (($bloc_page = _request('bloc_page_nouvelle_noisette') or $id_noisette = intval(_request('id_noisette_modifiee',$_POST))) and _request('enregistrer')){
122 $noisette = _request('noisette');
123 $infos_param = noizetier_charger_parametres_noisette($noisette);
124 // Si le plugin verifier est actif
125 if (defined('_DIR_PLUGIN_VERIFIER')){
126 $verifier = charger_fonction('verifier','inc',true);
127 foreach ($infos_param as $nom=>$parametre){
128 if (isset($parametre['verifier'])){
129 if (!isset($parametre['verifier']['options']))
130 $parametre['verifier']['options']=array();
131 if (($erreur = $verifier(_request($nom),$parametre['verifier']['type'],$parametre['verifier']['options'])) != '')
132 $erreurs[$nom] = $erreur;
133 }
134 }
135 }
136 // On teste que chaque paramètre obligatoire est bien renseigné
137 foreach ($infos_param as $nom=>$parametre){
138 if ($parametre['obligatoire']=='oui'){
139 if (_request($nom)=='')
140 $erreurs[$nom] = _T('info_obligatoire');
141 }
142 }
143 }
144 return $erreurs;
145 }
146
147 function formulaires_configurer_bloc_traiter($bloc,$page){
148 $retours = array();
149
150 // Si on valide une noisette pour un bloc ------------------------------------
151
152 if (($bloc_page = _request('bloc_page_nouvelle_noisette') or $id_noisette_modifiee = intval(_request('id_noisette_modifiee',$_POST))) and _request('enregistrer')!=''){
153 $rang = intval(_request('rang'));
154 $noisette = _request('noisette');
155 $css = _request('noizetier_css');
156 $infos_param = noizetier_charger_parametres_noisette($noisette);
157 $parametres_envoyes = array();
158 foreach ($infos_param as $nom=>$parametre)
159 $parametres_envoyes[$nom] = _request($nom);
160 spip_desinfecte($parametres_envoyes);
161
162 // Enregistrement de la noisette
163 if ($bloc_page) {
164 $t_bloc_page = explode ('-',$bloc_page,3);
165 $bloc = $t_bloc_page[0];
166 $type = $t_bloc_page[1];
167 $composition = $t_bloc_page[2];
168 $id_noisette = sql_insertq(
169 'spip_noisettes',
170 array(
171 'bloc' => $bloc,
172 'type' => $type,
173 'composition' => $composition,
174 'rang' => $rang,
175 'noisette' => $noisette,
176 'parametres' => serialize($parametres_envoyes),
177 'css' => $css
178 )
179 );
180 // On invalide le cache
181 include_spip('inc/invalideur');
182 $cle_invalidation = $bloc.'/'.$type;
183 if ($composition != '')
184 $cle_invalidation .= '-'.composition;
185 suivre_invalideur($cle_invalidation);
186 }
187 // Mise à jour de la noisette
188 if ($id_noisette_modifiee) {
189 $id_noisette = sql_updateq(
190 'spip_noisettes',
191 array(
192 'parametres' => serialize($parametres_envoyes),
193 'css' => $css
194 ),
195 'id_noisette='.$id_noisette_modifiee
196 );
197 // On invalide le cache
198 include_spip('inc/invalideur');
199 $cle_invalidation = _request('bloc').'/'._request('type');
200 if (_request('composition') != '')
201 $cle_invalidation .= '-'._request('composition');
202 suivre_invalideur($cle_invalidation);
203 }
204
205 if (!$id_noisette)
206 $retours['message_erreur'] = _T('noizetier:erreur_mise_a_jour');
207 }
208
209 // Si on demande la supression d'une noisette --------------------------------
210
211 if ($id_noisette = intval(_request('supprimer_noisette'))){
212 $ok = sql_delete(
213 'spip_noisettes',
214 'id_noisette = '.$id_noisette
215 );
216 // On invalide le cache
217 include_spip('inc/invalideur');
218 $cle_invalidation = _request('bloc').'/'._request('type');
219 if (_request('composition') != '')
220 $cle_invalidation .= '-'._request('composition');
221 suivre_invalideur($cle_invalidation);
222
223 if (!$ok) $retours['message_erreur'] = _T('noizetier:erreur_mise_a_jour');
224 }
225
226 // Si on demande à déplacer une noisette avec dragndrop -------------------------------------
227
228 if ($params = _request('dragndrop_noisette')){
229 $rang_noisettes = _request('rang_noisettes');
230
231 foreach ($rang_noisettes as $rang=>$id_noisette){
232 $rang = $rang + 1;
233 $ok = sql_updateq('spip_noisettes',array('rang' => intval($rang)),"id_noisette = $id_noisette");
234 }
235
236 // On invalide le cache
237 include_spip('inc/invalideur');
238 // necessaire tout ça ?
239 $cle_invalidation = _request('bloc').'/'._request('type');
240 if (_request('composition') != '')
241 $cle_invalidation .= '-'._request('composition');
242 // doit suffire '1'
243 suivre_invalideur($cle_invalidation);
244
245 if (!$ok) $retours['message_erreur'] = _T('noizetier:erreur_mise_a_jour');
246 }
247
248 // Si on demande à déplacer une noisette sans dragndrop -------------------------------------
249
250 if ($params = _request('deplacer_noisette')){
251 preg_match('/^([\d]+)-(bas|haut)$/', $params, $params);
252 array_shift($params);
253 list($id_noisette, $sens) = $params;
254 $id_noisette = intval($id_noisette);
255
256 // On récupère des infos sur le placement actuel
257 $noisette = sql_fetsel(
258 'bloc, type, composition, rang',
259 'spip_noisettes',
260 'id_noisette = '.$id_noisette
261 );
262 $bloc = $noisette['bloc'];
263 $type = $noisette['type'];
264 $composition = $noisette['composition'];
265 $rang_actuel = intval($noisette['rang']);
266
267 // On teste si ya une noisette suivante
268 $dernier_rang = intval(sql_getfetsel(
269 'rang',
270 'spip_noisettes',
271 'bloc = '.sql_quote($bloc).' and type='.sql_quote($type).'and composition='.sql_quote($composition),
272 '',
273 'rang desc',
274 '0,1'
275 ));
276
277 // Tant qu'on ne veut pas faire de tour complet
278 if (!($sens == 'bas' and $rang_actuel == $dernier_rang) and !($sens == 'haut' and $rang_actuel == 1)){
279 // Alors on ne fait qu'échanger deux noisettes
280 $rang_echange = ($sens == 'bas') ? ($rang_actuel + 1) : ($rang_actuel - 1);
281 $ok = sql_updateq(
282 'spip_noisettes',
283 array(
284 'rang' => $rang_actuel
285 ),
286 'bloc = '.sql_quote($bloc).' and type='.sql_quote($type).'and composition='.sql_quote($composition).' and rang = '.$rang_echange
287 );
288 if ($ok)
289 $ok = sql_updateq(
290 'spip_noisettes',
291 array(
292 'rang' => $rang_echange
293 ),
294 'id_noisette = '.$id_noisette
295 );
296 }
297 // Sinon on fait un tour complet en déplaçant tout
298 else{
299 if ($sens == 'bas'){
300 // Tout le monde descend d'un rang
301 $ok = sql_update(
302 'spip_noisettes',
303 array(
304 'rang' => 'rang + 1'
305 ),
306 'bloc = '.sql_quote($bloc).' and type='.sql_quote($type).'and composition='.sql_quote($composition)
307 );
308 // La noisette passe tout en haut
309 if ($ok)
310 $ok = sql_updateq(
311 'spip_noisettes',
312 array(
313 'rang' => 1
314 ),
315 'id_noisette = '.$id_noisette
316 );
317 }
318 else{
319 // Tout le monde monte d'un rang
320 $ok = sql_update(
321 'spip_noisettes',
322 array(
323 'rang' => 'rang - 1'
324 ),
325 'bloc = '.sql_quote($bloc).' and type='.sql_quote($type).'and composition='.sql_quote($composition)
326 );
327 // La noisette passe tout en bas
328 if ($ok)
329 $ok = sql_updateq(
330 'spip_noisettes',
331 array(
332 'rang' => $dernier_rang
333 ),
334 'id_noisette = '.$id_noisette
335 );
336 }
337 }
338 // On invalide le cache
339 include_spip('inc/invalideur');
340 $cle_invalidation = _request('bloc').'/'._request('type');
341 if (_request('composition') != '')
342 $cle_invalidation .= '-'._request('composition');
343 suivre_invalideur($cle_invalidation);
344
345 if (!$ok) $retours['message_erreur'] = _T('noizetier:erreur_mise_a_jour');
346 }
347
348 $retours['editable'] = true;
349
350 return $retours;
351 }
352
353 ?>