[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / menus / 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 $erreurs['id_menu_nouvelle_entree'] = $id_menu;
48 // On charge les différents types d'entrées disponibles
49 $erreurs['entrees'] = menus_lister_disponibles();
50 if (_request('suivant'))
51 $erreurs['type'] = _T('menus:erreur_type_menu');
52 }
53 // Si on a choisi un type d'entree
54 else{
55 $erreurs['id_menu_nouvelle_entree'] = $id_menu;
56 $erreurs['type_entree'] = $type_entree;
57 // On charge les infos du type choisi
58 $entrees = menus_lister_disponibles();
59 $erreurs['infos_'.$type_entree] = $entrees[$type_entree];
60 }
61 }
62
63 // Si on veut modifier une entrée ------------------------------------------
64
65 if ($id_menus_entree = intval(_request('modifier_entree'))){
66 // On va chercher l'existant de cette entrée
67 $entree = sql_fetsel(
68 'type_entree, parametres',
69 'spip_menus_entrees',
70 'id_menus_entree = '.$id_menus_entree
71 );
72 $type_entree = $entree['type_entree'];
73 $parametres = unserialize($entree['parametres']);
74
75 $erreurs = array_merge($erreurs, $parametres);
76 $erreurs['id_menus_entree'] = $id_menus_entree;
77 $erreurs['type_entree'] = $type_entree;
78 // On charge les infos du type choisi
79 $entrees = menus_lister_disponibles();
80 $erreurs['infos_'.$type_entree] = $entrees[$type_entree];
81 }
82
83 // Si on valide une entree pour un menu ------------------------------------
84
85 if (($id_menu = intval(_request('id_menu_nouvelle_entree')) or $id_menus_entree = intval(_request('id_menus_entree'))) and _request('enregistrer')){
86 $type_entree = _request('type_entree');
87 $parametres_envoyes = _request('parametres');
88 $entrees = menus_lister_disponibles();
89 $infos = $entrees[$type_entree];
90 // On teste que chaque paramètre obligatoire est bien renseigné
91 foreach ($infos['parametres'] as $nom=>$parametre){
92 if ($parametre['obligatoire']){
93 if (!$parametres_envoyes[$nom]){
94 if ($id_menu)
95 $erreurs['id_menu_nouvelle_entree'] = $id_menu;
96 if ($id_menus_entree)
97 $erreurs['id_menus_entree'] = $id_menus_entree;
98 $erreurs['type_entree'] = $type_entree;
99 $erreurs['infos_'.$type_entree] = $infos;
100 $erreurs['parametres'][$nom] = _T('info_obligatoire');
101 }
102 }
103 }
104 }
105
106 return $erreurs;
107 }
108
109 function formulaires_editer_menus_entree_traiter($id_menu,$id_menus_entree='new'){
110 $retours = array();
111
112 // Si on valide une entree pour un menu ------------------------------------
113
114 if (($id_menu = intval(_request('id_menu_nouvelle_entree')) or $id_menus_entree = intval(_request('id_menus_entree'))) and _request('enregistrer')){
115 $res = formulaires_editer_objet_traiter('menus_entree', $id_menus_entree, 0, 0, '', '', '', '');
116 if (!$res['id_menus_entree'])
117 $retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
118 }
119
120 // Si on demande la supression d'une entrée --------------------------------
121
122 if ($id_menus_entree = intval(_request('supprimer_entree'))){
123 $ok = menus_supprimer_entree($id_menus_entree);
124 if (!$ok)
125 $retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
126 }
127
128 // Si on demande à déplacer une entrée -------------------------------------
129
130 if ($params = _request('deplacer_entree')){
131 preg_match('/^([\d]+)-(bas|haut)$/', $params, $params);
132 array_shift($params);
133 list($id_menus_entree, $sens) = $params;
134 $id_menus_entree = intval($id_menus_entree);
135
136 // On récupère des infos sur le placement actuel
137 $entree = sql_fetsel(
138 'id_menu, rang',
139 'spip_menus_entrees',
140 'id_menus_entree = '.$id_menus_entree
141 );
142 $id_menu = intval($entree['id_menu']);
143 $rang_actuel = intval($entree['rang']);
144
145 // On teste si ya une entrée suivante
146 $dernier_rang = intval(sql_getfetsel(
147 'rang',
148 'spip_menus_entrees',
149 'id_menu = '.$id_menu,
150 '',
151 'rang desc',
152 '0,1'
153 ));
154
155 // Tant qu'on ne veut pas faire de tour complet
156 if (!($sens == 'bas' and $rang_actuel == $dernier_rang) and !($sens == 'haut' and $rang_actuel == 1)){
157 // Alors on ne fait qu'échanger deux entrées
158 $rang_echange = ($sens == 'bas') ? ($rang_actuel + 1) : ($rang_actuel - 1);
159 $ok = sql_updateq(
160 'spip_menus_entrees',
161 array(
162 'rang' => $rang_actuel
163 ),
164 'id_menu = '.$id_menu.' and rang = '.$rang_echange
165 );
166 if ($ok)
167 $ok = sql_updateq(
168 'spip_menus_entrees',
169 array(
170 'rang' => $rang_echange
171 ),
172 'id_menus_entree = '.$id_menus_entree
173 );
174 }
175 // Sinon on fait un tour complet en déplaçant tout
176 else{
177 if ($sens == 'bas'){
178 // Tout le monde descend d'un rang
179 $ok = sql_update(
180 'spip_menus_entrees',
181 array(
182 'rang' => 'rang + 1'
183 ),
184 'id_menu = '.$id_menu
185 );
186 // L'entrée passe tout en haut
187 if ($ok)
188 $ok = sql_updateq(
189 'spip_menus_entrees',
190 array(
191 'rang' => 1
192 ),
193 'id_menus_entree = '.$id_menus_entree
194 );
195 }
196 else{
197 // Tout le monde monte d'un rang
198 $ok = sql_update(
199 'spip_menus_entrees',
200 array(
201 'rang' => 'rang - 1'
202 ),
203 'id_menu = '.$id_menu
204 );
205 // L'entrée passe tout en bas
206 if ($ok)
207 $ok = sql_updateq(
208 'spip_menus_entrees',
209 array(
210 'rang' => $dernier_rang
211 ),
212 'id_menus_entree = '.$id_menus_entree
213 );
214 }
215 }
216 if (!$ok) $retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
217 }
218
219 // Si on veut faire un sous-menu -------------------------------------------
220
221 if ($id_menus_entree = intval(_request('demander_sous_menu'))){
222 $id_menu = sql_insertq(
223 'spip_menus',
224 array(
225 'id_menus_entree' => $id_menus_entree
226 )
227 );
228 if (!$id_menu) $retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
229 }
230
231 // Si on veut supprimer un menu --------------------------------------------
232
233 if ($id_menu = intval(_request('supprimer_menu'))){
234 // Est-ce un menu ou un sous-menu ?
235 $sous_menu = intval(sql_getfetsel(
236 'id_menus_entree',
237 'spip_menus',
238 'id_menu = '.$id_menu
239 ));
240 $ok = menus_supprimer_menu($id_menu);
241 if (!$ok) $retours['message_erreur'] = _T('menus:erreur_mise_a_jour');
242 if ($ok and !$sous_menu) $retours['redirect'] = generer_url_ecrire('menus_tous');
243 }
244
245 $retours['editable'] = true;
246
247 return $retours;
248 }
249
250 ?>