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