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