[PLUGINS] +les plugins de bases
[ptitvelo/web/www.git] / www / plugins / menus_1 / formulaires / editer_menus_entree.php
1 <?php
2
3 // Sécurité
4 if (!defined("_ECRIRE_INC_VERSION")) return;
5
6 include_spip('inc/menus');
7 include_spip('inc/editer');
8 include_spip('inc/actions');
9
10 function formulaires_editer_menus_entree_charger($id_menu,$id_menus_entree='new'){
11 /**
12 * On vérifie si nous ne sommes pas dans une modification
13 * Sinon c'est une création
14 */
15 $id_menus_entree = intval(_request('modifier_entree')) ? _request('modifier_entree') : $id_menus_entree;
16
17 $valeurs = formulaires_editer_objet_charger('menus_entree',$id_menus_entree,0,0,'', '', '', '');
18
19 $valeurs['id_menu'] = $id_menu;
20
21 // Les champs pour les entrées
22
23 $valeurs['parametres'] = array();
24
25 // Des champs pour controler le formulaire
26 $valeurs['demander_nouvelle_entree'] = '';
27 $valeurs['id_menu_nouvelle_entree'] = '';
28 $valeurs['enregistrer'] = '';
29
30 // On a en permanence accès aux infos des types
31 $valeurs['types_entrees'] = menus_lister_disponibles();
32
33 // On sait toujours si on est sur un menu déjà créé ou pas
34 $valeurs['_hidden'] .= '<input type="hidden" name="id_menu" value="'.$id_menu.'" />';
35
36 return $valeurs;
37 }
38
39 function formulaires_editer_menus_entree_verifier($id_menu,$id_menus_entree='new'){
40 $erreurs = formulaires_editer_objet_verifier('menus_entree',$id_menus_entree,array());
41
42 // Si on demande une nouvelle entree pour un menu --------------------------
43
44 if ($id_menu = intval(_request('demander_nouvelle_entree'))){
45 // S'il n'y a pas encore de type d'entree de choisi
46 if (!($type_entree = _request('type_entree'))){
47 include_spip('inc/config');
48 $erreurs['id_menu_nouvelle_entree'] = $id_menu;
49 // On charge les différents types d'entrées disponibles
50 $masque = array_flip(lire_config('menus/entrees_masquees', array()));
51 $erreurs['entrees'] = array_diff_key(menus_lister_disponibles(), $masque);
52 if (_request('suivant'))
53 $erreurs['type'] = _T('menus:erreur_type_menu');
54 }
55 // Si on a choisi un type d'entree
56 else{
57 $erreurs['id_menu_nouvelle_entree'] = $id_menu;
58 $erreurs['type_entree'] = $type_entree;
59 // On charge les infos du type choisi
60 $entrees = menus_lister_disponibles();
61 $erreurs['infos_'.$type_entree] = $entrees[$type_entree];
62 }
63 }
64
65 // Si on veut modifier une entrée ------------------------------------------
66
67 if ($id_menus_entree = intval(_request('modifier_entree'))){
68 // On va chercher l'existant de cette entrée
69 $entree = sql_fetsel(
70 'type_entree, parametres',
71 'spip_menus_entrees',
72 'id_menus_entree = '.$id_menus_entree
73 );
74 $type_entree = $entree['type_entree'];
75 $parametres = unserialize($entree['parametres']);
76
77 $erreurs = array_merge($erreurs, $parametres);
78 $erreurs['id_menus_entree'] = $id_menus_entree;
79 $erreurs['type_entree'] = $type_entree;
80 // On charge les infos du type choisi
81 $entrees = menus_lister_disponibles();
82 $erreurs['infos_'.$type_entree] = $entrees[$type_entree];
83 }
84
85 // Si on valide une entree pour un menu ------------------------------------
86
87 if (($id_menu = intval(_request('id_menu_nouvelle_entree')) or $id_menus_entree = intval(_request('id_menus_entree'))) and _request('enregistrer')){
88 $type_entree = _request('type_entree');
89 $parametres_envoyes = _request('parametres');
90 $entrees = menus_lister_disponibles();
91 $infos = $entrees[$type_entree];
92 // On teste que chaque paramètre obligatoire est bien renseigné
93 foreach ($infos['parametres'] as $nom=>$parametre){
94 if ($parametre['obligatoire']){
95 if (!$parametres_envoyes[$nom]){
96 if ($id_menu)
97 $erreurs['id_menu_nouvelle_entree'] = $id_menu;
98 if ($id_menus_entree)
99 $erreurs['id_menus_entree'] = $id_menus_entree;
100 $erreurs['type_entree'] = $type_entree;
101 $erreurs['infos_'.$type_entree] = $infos;
102 $erreurs['parametres'][$nom] = _T('info_obligatoire');
103 }
104 }
105 }
106 }
107
108 return $erreurs;
109 }
110
111 function formulaires_editer_menus_entree_traiter($id_menu,$id_menus_entree='new'){
112 $retours = array();
113
114 // Si on valide une entree pour un menu ------------------------------------
115
116 if (($id_menu = intval(_request('id_menu_nouvelle_entree')) or $id_menus_entree = intval(_request('id_menus_entree'))) and _request('enregistrer')){
117 $res = formulaires_editer_objet_traiter('menus_entree', $id_menus_entree, 0, 0, '', '', '', '');
118 if (!$res['id_menus_entree'])
119 $retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
120 }
121
122 // Si on demande la supression d'une entrée --------------------------------
123
124 if ($id_menus_entree = intval(_request('supprimer_entree'))){
125 $ok = menus_supprimer_entree($id_menus_entree);
126 if (!$ok)
127 $retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
128 }
129
130 // Si on demande à déplacer une entrée -------------------------------------
131
132 if ($params = _request('deplacer_entree')){
133 preg_match('/^([\d]+)-(bas|haut)$/', $params, $params);
134 array_shift($params);
135 list($id_menus_entree, $sens) = $params;
136 $id_menus_entree = intval($id_menus_entree);
137
138 // On récupère des infos sur le placement actuel
139 $entree = sql_fetsel(
140 'id_menu, rang',
141 'spip_menus_entrees',
142 'id_menus_entree = '.$id_menus_entree
143 );
144 $id_menu = intval($entree['id_menu']);
145 $rang_actuel = intval($entree['rang']);
146
147 // On teste si ya une entrée suivante
148 $dernier_rang = intval(sql_getfetsel(
149 'rang',
150 'spip_menus_entrees',
151 'id_menu = '.$id_menu,
152 '',
153 'rang desc',
154 '0,1'
155 ));
156
157 // Tant qu'on ne veut pas faire de tour complet
158 if (!($sens == 'bas' and $rang_actuel == $dernier_rang) and !($sens == 'haut' and $rang_actuel == 1)){
159 // Alors on ne fait qu'échanger deux entrées
160 $rang_echange = ($sens == 'bas') ? ($rang_actuel + 1) : ($rang_actuel - 1);
161 $ok = sql_updateq(
162 'spip_menus_entrees',
163 array(
164 'rang' => $rang_actuel
165 ),
166 'id_menu = '.$id_menu.' and rang = '.$rang_echange
167 );
168 if ($ok)
169 $ok = sql_updateq(
170 'spip_menus_entrees',
171 array(
172 'rang' => $rang_echange
173 ),
174 'id_menus_entree = '.$id_menus_entree
175 );
176 }
177 // Sinon on fait un tour complet en déplaçant tout
178 else{
179 if ($sens == 'bas'){
180 // Tout le monde descend d'un rang
181 $ok = sql_update(
182 'spip_menus_entrees',
183 array(
184 'rang' => 'rang + 1'
185 ),
186 'id_menu = '.$id_menu
187 );
188 // L'entrée passe tout en haut
189 if ($ok)
190 $ok = sql_updateq(
191 'spip_menus_entrees',
192 array(
193 'rang' => 1
194 ),
195 'id_menus_entree = '.$id_menus_entree
196 );
197 }
198 else{
199 // Tout le monde monte d'un rang
200 $ok = sql_update(
201 'spip_menus_entrees',
202 array(
203 'rang' => 'rang - 1'
204 ),
205 'id_menu = '.$id_menu
206 );
207 // L'entrée passe tout en bas
208 if ($ok)
209 $ok = sql_updateq(
210 'spip_menus_entrees',
211 array(
212 'rang' => $dernier_rang
213 ),
214 'id_menus_entree = '.$id_menus_entree
215 );
216 }
217 }
218 if (!$ok) $retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
219 }
220
221 // Si on veut faire un sous-menu -------------------------------------------
222
223 if ($id_menus_entree = intval(_request('demander_sous_menu'))){
224 $id_menu = sql_insertq(
225 'spip_menus',
226 array(
227 'id_menus_entree' => $id_menus_entree
228 )
229 );
230 if (!$id_menu) $retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
231 }
232
233 // Si on veut supprimer un menu --------------------------------------------
234
235 if ($id_menu = intval(_request('supprimer_menu'))){
236 // Est-ce un menu ou un sous-menu ?
237 $sous_menu = intval(sql_getfetsel(
238 'id_menus_entree',
239 'spip_menus',
240 'id_menu = '.$id_menu
241 ));
242 $ok = menus_supprimer_menu($id_menu);
243 if (!$ok) $retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
244 if ($ok and !$sous_menu) $retours['redirect'] = generer_url_ecrire('menus_tous');
245 }
246
247 $retours['editable'] = true;
248
249 return $retours;
250 }
251
252 ?>