[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / menus / action / editer_menu.php
diff --git a/www/plugins/menus/action/editer_menu.php b/www/plugins/menus/action/editer_menu.php
new file mode 100644 (file)
index 0000000..b93b43e
--- /dev/null
@@ -0,0 +1,144 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Action de création / Modification d'un menu
+ * @param unknown_type $arg
+ * @return unknown_type
+ */
+function action_editer_menu_dist($arg=null) {
+
+       if (is_null($arg)){
+               $securiser_action = charger_fonction('securiser_action', 'inc');
+               $arg = $securiser_action();
+       }
+
+       // si id_menu n'est pas un nombre, c'est une creation
+       if (!$id_menu = intval($arg)) {
+               $id_menu = insert_menu();
+       }
+
+       // Enregistre l'envoi dans la BD
+       if ($id_menu > 0) $err = menu_set($id_menu);
+
+       // S'il y a un fichier on tente d'importer son contenu
+       if ($_FILES['import']){
+               $fichier = $_FILES['import']['tmp_name'];
+               $yaml = '';
+               lire_fichier($fichier, $yaml);
+               // Si on a bien recupere une chaine on tente de la decoder
+               if ($yaml){
+                       include_spip('inc/yaml');
+                       $entrees = yaml_decode($yaml);
+                       // Si le decodage marche on importe alors le contenu
+                       if (is_array($entrees)){
+                               menus_importer($entrees, $id_menu);
+                       }
+               }
+       }
+
+       if (_request('redirect')) {
+               $redirect = parametre_url(urldecode(_request('redirect')),
+                       'id_menu', $id_menu, '&') . $err;
+
+               include_spip('inc/headers');
+               redirige_par_entete($redirect);
+       }
+       else
+               return array($id_menu,$err);
+}
+
+/**
+ * Appelle la fonction de modification d'un menu
+ *
+ * @param int $id_menu
+ * @param unknown_type $set
+ * @return $err
+ */
+function menu_set($id_menu, $set=null) {
+       $err = '';
+
+       $c = array();
+       foreach (array(
+               'titre',
+               'identifiant',
+               'css'
+       ) as $champ)
+               $c[$champ] = _request($champ,$set);
+
+       include_spip('inc/modifier');
+       revision_menu($id_menu, $c);
+
+       return $err;
+}
+
+/**
+ * Crée un nouveau menu et retourne son ID
+ *
+ * @return int id_menu
+ */
+function insert_menu() {
+       $champs = array('titre'=>''); // eviter le bug de req/sqlite < 2.1.3
+       // Envoyer aux plugins
+       $champs = pipeline('pre_insertion',
+               array(
+                       'args' => array(
+                               'table' => 'spip_menus',
+                       ),
+                       'data' => $champs
+               )
+       );
+       $id_menu = sql_insertq("spip_menus");
+
+       return $id_menu;
+}
+
+/**
+ * Enregistre une révision de menu
+ *
+ * @param int $id_menu
+ * @param array $c
+ * @return
+ */
+function revision_menu ($id_menu, $c=false) {
+       $invalideur = "id='id_menu/$id_menu'";
+
+       modifier_contenu('menu', $id_menu,
+               array(
+                       'nonvide' => array('titre' => _T('info_sans_titre')),
+                       'invalideur' => $invalideur
+               ),
+               $c);
+
+       return ''; // pas d'erreur
+}
+
+function menus_importer($entrees, $id_menu){
+       // On lit chaque entree de premier niveau
+       foreach ($entrees as $cle => $entree){
+               // On ajoute cette entree
+               $id_menus_entree = sql_insertq(
+                       'spip_menus_entrees',
+                       array(
+                               'id_menu' => $id_menu,
+                               'rang' => ($cle+1),     // les entrees sont dans l'ordre des rangs
+                               'type_entree' => $entree['type_entree'],
+                               'parametres' => serialize($entree['parametres'])
+                       )
+               );
+
+               // S'il existe un sous-menu pour cette entree on le cree
+               if (is_array($entree['sous_menu'])){
+                       $id_sous_menu = sql_insertq(
+                               'spip_menus',
+                               array(
+                                       'id_menus_entree' => $id_menus_entree
+                               )
+                       );
+                       // Puis dedans on importe les entrees correspondantes
+                       menus_importer($entree['sous_menu'], $id_sous_menu);
+               }
+       }
+}
+?>
\ No newline at end of file