[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins / menus_1 / formulaires / editer_menu.php
1 <?php
2
3 // Sécurité
4 if (!defined('_ECRIRE_INC_VERSION')) {
5 return;
6 }
7
8 include_spip('inc/editer');
9
10 function formulaires_editer_menu_charger($id_menu, $nouveau) {
11 include_spip('base/abstract_sql');
12 include_spip('inc/autoriser');
13 $contexte = array();
14 $contexte['editable'] = true;
15
16 // Seulement si on a le droit de modifier les menus
17 if (autoriser('modifier', 'menu')) {
18 $nouveau = ($nouveau == 'oui') ? true : false;
19 $id_menu = intval($id_menu) ? intval($id_menu) : false;
20
21 // Si on demande un id_menu
22 if ($id_menu) {
23 // On désactive de toute façon le nouveau
24 $nouveau = false;
25
26 // On teste si le menu existe bien dans les menus principaux
27 $id_menu_ok = intval(sql_getfetsel(
28 'id_menu',
29 'spip_menus',
30 array(
31 array('=', 'id_menu', $id_menu),
32 array('=', 'id_menus_entree', 0)
33 )
34 ));
35
36 // S'il n'existe pas
37 if (!$id_menu_ok) {
38 $contexte['editable'] = false;
39 $contexte['message_erreur'] = _T('menus:erreur_menu_inexistant', array('id'=>$id_menu));
40 }
41 } elseif (!$nouveau) {
42 $contexte['editable'] = false;
43 $contexte['message_erreur'] = _T('menus:erreur_parametres');
44 }
45
46 // Si on peut bien éditer le menu, on déclare ce qu'il faut
47 if ($contexte['editable']) {
48 $contexte['id_menu'] = $id_menu;
49 $contexte['nouveau'] = $nouveau;
50
51 // Les champs du menu principal
52 $contexte['titre'] = '';
53 $contexte['identifiant'] = '';
54 $contexte['css'] = '';
55 $contexte['import'] = '';
56
57 $valeurs = formulaires_editer_objet_charger('menu', $id_menu, 0, 0, '', '', array(), '');
58
59 $contexte = array_merge($contexte, $valeurs);
60
61 // Déclarer l'action pour SPIP 2.0
62 $contexte['_action'] = array('editer_menu', $id_menu);
63 // On sait toujours si on est sur un menu déjà créé ou pas
64 $contexte['_hidden'] .= '<input type="hidden" name="id_menu" value="'.$id_menu.'" />';
65 // reinjecter nouveau si besoin, sinon la page de l'espace prive ne reaffiche pas le form
66 $contexte['_hidden'] .= "<input type='hidden' name='nouveau' value='".($nouveau?'oui':'')."' />";
67 }
68 } else {
69 $contexte['editable'] = false;
70 $contexte['message_erreur'] = _T('menus:erreur_autorisation');
71 }
72
73 return $contexte;
74 }
75
76 function formulaires_editer_menu_verifier($id_menu, $nouveau) {
77 include_spip('base/abstract_sql');
78 $erreurs = array();
79
80 $oblis = array('titre','identifiant');
81 $erreurs = formulaires_editer_objet_verifier('menu', $id_menu, $oblis);
82
83 $identifiant = _request('identifiant');
84
85 // On vérifie que l'identifiant est bon
86 if (empty($erreurs['identifiant']) and !preg_match('/^[\w-]+$/', $identifiant)) {
87 $erreurs['identifiant'] = _T('menus:erreur_identifiant_forme');
88 }
89 // On vérifie que l'identifiant n'est pas déjà utilisé
90 if (empty($erreurs['identifiant'])) {
91 $deja = sql_getfetsel(
92 'id_menu',
93 'spip_menus',
94 array(
95 'identifiant = '.sql_quote($identifiant),
96 'id_menu > 0',
97 'id_menu !='.intval(_request('id_menu'))
98 )
99 );
100 if ($deja) {
101 $erreurs['identifiant'] = _T('menus:erreur_identifiant_deja');
102 }
103 }
104
105 return $erreurs;
106 }
107
108 function formulaires_editer_menu_traiter($id_menu, $nouveau) {
109 $res = formulaires_editer_objet_traiter('menu', $id_menu, 0, 0, '', '', array(), '');
110
111 // Si ça va pas on errorise
112 if (!$res['id_menu']) {
113 $res['message_erreur'] = _T('menus:erreur_mise_a_jour');
114 } else {
115 // Si on est dans l'espace privé on force la redirection
116 if (_request('exec') == 'menus_editer') {
117 $res['redirect'] = generer_url_ecrire('menus_editer', 'id_menu='.$res['id_menu']);
118 }
119 }
120 // Dans tous les cas le formulaire est toujours éditable
121 $res['editable'] = true;
122
123 return $res;
124 }