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