[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins / menus_1 / action / editer_menu.php
1 <?php
2
3 if (!defined('_ECRIRE_INC_VERSION')) {
4 return;
5 }
6
7 /**
8 * Action de création / Modification d'un menu
9 * @param unknown_type $arg
10 * @return unknown_type
11 */
12 function action_editer_menu_dist($arg = null) {
13
14 if (is_null($arg)) {
15 $securiser_action = charger_fonction('securiser_action', 'inc');
16 $arg = $securiser_action();
17 }
18
19 // si id_menu n'est pas un nombre, c'est une creation
20 if (!$id_menu = intval($arg)) {
21 $id_menu = insert_menu();
22 }
23
24 // Enregistre l'envoi dans la BD
25 if ($id_menu > 0) {
26 $err = menu_set($id_menu);
27 }
28
29 // S'il y a un fichier on tente d'importer son contenu
30 if (isset($_FILES['import']) and $_FILES['import']) {
31 $fichier = $_FILES['import']['tmp_name'];
32 $yaml = '';
33 lire_fichier($fichier, $yaml);
34 // Si on a bien recupere une chaine on tente de la decoder
35 if ($yaml) {
36 include_spip('inc/yaml');
37 $entrees = yaml_decode($yaml);
38 // Si le decodage marche on importe alors le contenu
39 if (is_array($entrees)) {
40 menus_importer($entrees, $id_menu);
41 }
42 }
43 }
44
45 if (_request('redirect')) {
46 $redirect = parametre_url(urldecode(_request('redirect')), 'id_menu', $id_menu, '&') . $err;
47
48 include_spip('inc/headers');
49 redirige_par_entete($redirect);
50 } else {
51 return array($id_menu,$err);
52 }
53 }
54
55 /**
56 * Appelle la fonction de modification d'un menu
57 *
58 * @param int $id_menu
59 * @param unknown_type $set
60 * @return $err
61 */
62 function menu_set($id_menu, $set = null) {
63 $err = '';
64
65 $c = array();
66 foreach (array('titre','identifiant','css') as $champ) {
67 $c[$champ] = _request($champ, $set);
68 }
69
70 include_spip('inc/modifier');
71 revision_menu($id_menu, $c);
72
73 return $err;
74 }
75
76 /**
77 * Crée un nouveau menu et retourne son ID
78 *
79 * @return int id_menu
80 */
81 function insert_menu() {
82 $champs = array('titre'=>''); // eviter le bug de req/sqlite < 2.1.3
83 // Envoyer aux plugins
84 $champs = pipeline(
85 'pre_insertion',
86 array(
87 'args' => array(
88 'table' => 'spip_menus',
89 ),
90 'data' => $champs
91 )
92 );
93 $id_menu = sql_insertq('spip_menus');
94
95 return $id_menu;
96 }
97
98 /**
99 * Enregistre une révision de menu
100 *
101 * @param int $id_menu
102 * @param array $c
103 * @return
104 */
105 function revision_menu($id_menu, $c = false) {
106 $invalideur = "id='id_menu/$id_menu'";
107
108 modifier_contenu(
109 'menu',
110 $id_menu,
111 array(
112 'nonvide' => array('titre' => _T('info_sans_titre')),
113 'invalideur' => $invalideur
114 ),
115 $c
116 );
117
118 return ''; // pas d'erreur
119 }
120
121 function menus_importer($entrees, $id_menu) {
122 // On lit chaque entree de premier niveau
123 foreach ($entrees as $cle => $entree) {
124 // On ajoute cette entree
125 $id_menus_entree = sql_insertq(
126 'spip_menus_entrees',
127 array(
128 'id_menu' => $id_menu,
129 'rang' => ($cle+1), // les entrees sont dans l'ordre des rangs
130 'type_entree' => $entree['type_entree'],
131 'parametres' => serialize($entree['parametres'])
132 )
133 );
134
135 // S'il existe un sous-menu pour cette entree on le cree
136 if (is_array($entree['sous_menu'])) {
137 $id_sous_menu = sql_insertq(
138 'spip_menus',
139 array(
140 'id_menus_entree' => $id_menus_entree
141 )
142 );
143 // Puis dedans on importe les entrees correspondantes
144 menus_importer($entree['sous_menu'], $id_sous_menu);
145 }
146 }
147 }