source: spip-zone/_plugins_/noizetier/branches/v0/formulaires/configurer_bloc.php @ 60108

Last change on this file since 60108 was 60108, checked in by yffic@…, 8 years ago

Normaliser la saisie si c'est demandé dans ses options

File size: 12.0 KB
Line 
1<?php
2
3// Sécurité
4if (!defined("_ECRIRE_INC_VERSION")) return;
5
6include_spip('noizetier_fonctions');
7
8function 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
107function 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                                        $normaliser = null;
132                                        if (($erreur = $verifier(_request($nom),$parametre['verifier']['type'],$parametre['verifier']['options'],$normaliser)) != '') {
133                                                $erreurs[$nom] = $erreur;
134                                        } elseif (!is_null($normaliser)) {
135                                                set_request($nom, $normaliser);
136                                        }
137                                }
138                        }
139                }
140                // On teste que chaque paramètre obligatoire est bien renseigné
141                foreach ($infos_param as $nom=>$parametre){
142                        if ($parametre['obligatoire']=='oui'){
143                                if (_request($nom)=='')
144                                        $erreurs[$nom] = _T('info_obligatoire');
145                        }
146                }
147        }
148        return $erreurs;
149}
150
151function formulaires_configurer_bloc_traiter($bloc,$page){
152        $retours = array();
153       
154        // Si on valide une noisette pour un bloc ------------------------------------
155       
156        if (($bloc_page = _request('bloc_page_nouvelle_noisette') or $id_noisette_modifiee = intval(_request('id_noisette_modifiee',$_POST))) and _request('enregistrer')!=''){
157                $rang = intval(_request('rang'));
158                $noisette = _request('noisette');
159                $css = _request('noizetier_css');
160                $infos_param = noizetier_charger_parametres_noisette($noisette);
161                $parametres_envoyes = array();
162                foreach ($infos_param as $nom=>$parametre)
163                        $parametres_envoyes[$nom] = _request($nom);
164                spip_desinfecte($parametres_envoyes);
165               
166                // Enregistrement de la noisette
167                if ($bloc_page) {
168                        $t_bloc_page = explode ('-',$bloc_page,3);
169                        $bloc = $t_bloc_page[0];
170                        $type = $t_bloc_page[1];
171                        $composition = $t_bloc_page[2];
172                        $id_noisette = sql_insertq(
173                                'spip_noisettes',
174                                array(
175                                        'bloc' => $bloc,
176                                        'type' => $type,
177                                        'composition' => $composition,
178                                        'rang' => $rang,
179                                        'noisette' => $noisette,
180                                        'parametres' => serialize($parametres_envoyes),
181                                        'css' => $css
182                                )
183                        );
184                        // On invalide le cache
185                        include_spip('inc/invalideur');
186                        $cle_invalidation = $bloc.'/'.$type;
187                        if ($composition != '')
188                                $cle_invalidation .= '-'.composition;
189                        suivre_invalideur($cle_invalidation);
190                }
191                // Mise à jour de la noisette
192                if ($id_noisette_modifiee) {
193                        $id_noisette = sql_updateq(
194                                'spip_noisettes',
195                                array(
196                                        'parametres' => serialize($parametres_envoyes),
197                                        'css' => $css
198                                ),
199                                'id_noisette='.$id_noisette_modifiee
200                        );
201                        // On invalide le cache
202                        include_spip('inc/invalideur');
203                        $cle_invalidation = _request('bloc').'/'._request('type');
204                        if (_request('composition') != '')
205                                $cle_invalidation .= '-'._request('composition');
206                        suivre_invalideur($cle_invalidation);
207                }
208               
209                if (!$id_noisette)
210                        $retours['message_erreur'] = _T('noizetier:erreur_mise_a_jour');
211        }
212       
213        // Si on demande la supression d'une noisette --------------------------------
214       
215        if ($id_noisette = intval(_request('supprimer_noisette'))){
216                $ok = sql_delete(
217                        'spip_noisettes',
218                        'id_noisette = '.$id_noisette
219                );
220                // On invalide le cache
221                include_spip('inc/invalideur');
222                $cle_invalidation = _request('bloc').'/'._request('type');
223                if (_request('composition') != '')
224                        $cle_invalidation .= '-'._request('composition');
225                suivre_invalideur($cle_invalidation);
226               
227                if (!$ok) $retours['message_erreur'] = _T('noizetier:erreur_mise_a_jour');
228        }
229       
230        // Si on demande à déplacer une noisette avec dragndrop -------------------------------------
231
232        if ($params = _request('dragndrop_noisette')){
233                $rang_noisettes = _request('rang_noisettes');
234               
235                foreach ($rang_noisettes as $rang=>$id_noisette){
236                        $rang = $rang + 1;
237                        $ok = sql_updateq('spip_noisettes',array('rang' => intval($rang)),"id_noisette = $id_noisette");
238                }
239               
240                // On invalide le cache
241                include_spip('inc/invalideur');
242                // necessaire tout ça ?
243                $cle_invalidation = _request('bloc').'/'._request('type');
244                if (_request('composition') != '')
245                        $cle_invalidation .= '-'._request('composition');
246                // doit suffire '1'
247                suivre_invalideur($cle_invalidation);
248               
249                if (!$ok) $retours['message_erreur'] = _T('noizetier:erreur_mise_a_jour');
250        }
251
252        // Si on demande à déplacer une noisette sans dragndrop -------------------------------------
253       
254        if ($params = _request('deplacer_noisette')){
255                preg_match('/^([\d]+)-(bas|haut)$/', $params, $params);
256                array_shift($params);
257                list($id_noisette, $sens) = $params;
258                $id_noisette = intval($id_noisette);
259               
260                // On récupère des infos sur le placement actuel
261                $noisette = sql_fetsel(
262                        'bloc, type, composition, rang',
263                        'spip_noisettes',
264                        'id_noisette = '.$id_noisette
265                );
266                $bloc = $noisette['bloc'];
267                $type = $noisette['type'];
268                $composition = $noisette['composition'];
269                $rang_actuel = intval($noisette['rang']);
270               
271                // On teste si ya une noisette suivante
272                $dernier_rang = intval(sql_getfetsel(
273                        'rang',
274                        'spip_noisettes',
275                        'bloc = '.sql_quote($bloc).' and type='.sql_quote($type).'and composition='.sql_quote($composition),
276                        '',
277                        'rang desc',
278                        '0,1'
279                ));
280               
281                // Tant qu'on ne veut pas faire de tour complet
282                if (!($sens == 'bas' and $rang_actuel == $dernier_rang) and !($sens == 'haut' and $rang_actuel == 1)){
283                        // Alors on ne fait qu'échanger deux noisettes
284                        $rang_echange = ($sens == 'bas') ? ($rang_actuel + 1) : ($rang_actuel - 1);
285                        $ok = sql_updateq(
286                                'spip_noisettes',
287                                array(
288                                        'rang' => $rang_actuel
289                                ),
290                                'bloc = '.sql_quote($bloc).' and type='.sql_quote($type).'and composition='.sql_quote($composition).' and rang = '.$rang_echange
291                        );
292                        if ($ok)
293                                $ok = sql_updateq(
294                                        'spip_noisettes',
295                                        array(
296                                                'rang' => $rang_echange
297                                        ),
298                                        'id_noisette = '.$id_noisette
299                                );
300                }
301                // Sinon on fait un tour complet en déplaçant tout
302                else{
303                        if ($sens == 'bas'){
304                                // Tout le monde descend d'un rang
305                                $ok = sql_update(
306                                        'spip_noisettes',
307                                        array(
308                                                'rang' => 'rang + 1'
309                                        ),
310                                        'bloc = '.sql_quote($bloc).' and type='.sql_quote($type).'and composition='.sql_quote($composition)
311                                );
312                                // La noisette passe tout en haut
313                                if ($ok)
314                                        $ok = sql_updateq(
315                                                'spip_noisettes',
316                                                array(
317                                                        'rang' => 1
318                                                ),
319                                                'id_noisette = '.$id_noisette
320                                        );
321                        }
322                        else{
323                                // Tout le monde monte d'un rang
324                                $ok = sql_update(
325                                        'spip_noisettes',
326                                        array(
327                                                'rang' => 'rang - 1'
328                                        ),
329                                        'bloc = '.sql_quote($bloc).' and type='.sql_quote($type).'and composition='.sql_quote($composition)
330                                );
331                                // La noisette passe tout en bas
332                                if ($ok)
333                                        $ok = sql_updateq(
334                                                'spip_noisettes',
335                                                array(
336                                                        'rang' => $dernier_rang
337                                                ),
338                                                'id_noisette = '.$id_noisette
339                                        );
340                        }
341                }
342                // On invalide le cache
343                include_spip('inc/invalideur');
344                $cle_invalidation = _request('bloc').'/'._request('type');
345                if (_request('composition') != '')
346                        $cle_invalidation .= '-'._request('composition');
347                suivre_invalideur($cle_invalidation);
348               
349                if (!$ok) $retours['message_erreur'] = _T('noizetier:erreur_mise_a_jour');
350        }
351       
352        $retours['editable'] = true;
353       
354        return $retours;
355}
356
357?>
Note: See TracBrowser for help on using the repository browser.