[SPIP] +2.1.12
[velocampus/web/www.git] / www / plugins / auto / ieconfig / formulaires / ieconfig_import.php
diff --git a/www/plugins/auto/ieconfig/formulaires/ieconfig_import.php b/www/plugins/auto/ieconfig/formulaires/ieconfig_import.php
new file mode 100644 (file)
index 0000000..1d9d579
--- /dev/null
@@ -0,0 +1,343 @@
+<?php\r
+\r
+if (!defined("_ECRIRE_INC_VERSION")) return;\r
+\r
+function ieconfig_saisies_import() {\r
+       // Etape de selection du fichier\r
+       if (!_request('_code_yaml') or _request('annuler') or _request('importer')) {\r
+               $saisies = array (\r
+                       array(\r
+                               'saisie' => 'fieldset',\r
+                               'options' => array(\r
+                                       'nom' => 'ieconfig_import_choix_fichier',\r
+                                       'label' => '<:ieconfig:label_ieconfig_import_choix_fichier:>',\r
+                                       'icone' => 'img/ieconfig-import.png'\r
+                               ),\r
+                               'saisies' => array(\r
+                                       array(\r
+                                               'saisie' => 'input',\r
+                                               'options' => array(\r
+                                                       'type' => 'file',\r
+                                                       'nom' => 'ieconfig_import_fichier',\r
+                                                       'label' => '<:ieconfig:label_ieconfig_import_fichier:>',\r
+                                                       'explication' => '<:ieconfig:explication_ieconfig_import_fichier:>'\r
+                                               )\r
+                                       ),\r
+                                       array(\r
+                                               'saisie' => 'selection',\r
+                                               'options' => array(\r
+                                                       'type' => 'selection',\r
+                                                       'nom' => 'ieconfig_import_local',\r
+                                                       'label' => '<:ieconfig:label_ieconfig_import_local:>',\r
+                                                       'explication' => '<:ieconfig:explication_ieconfig_import_local:>',\r
+                                                       'cacher_option_intro' => 'oui',\r
+                                                       'datas' => ieconfig_config_locales()\r
+                                               )\r
+                                       )\r
+                               )\r
+                       )\r
+               );\r
+       // Options d'importations\r
+       } else {\r
+               include_spip('inc/yaml');\r
+               $config = yaml_decode(_request('_code_yaml'));\r
+               $texte_explication = '<b>'._T('ieconfig:texte_nom').'</b> '._T_ou_typo($config['nom']);\r
+               if ($config['description']!= '')\r
+                       $texte_explication .= '<br /><b>'._T('ieconfig:texte_description').'</b> '._T_ou_typo($config['description']);\r
+               // On identifie les entrées ne correspondant pas à un plugin\r
+               // Convention : les clés du tableau de config correspondent aux préfixes des plugins\r
+               $entrees = $config;\r
+               unset($entrees['nom']);\r
+               unset($entrees['description']);\r
+               unset($entrees['necessite']);\r
+               unset($entrees['spip_contenu']);\r
+               unset($entrees['spip_interactivite']);\r
+               $entrees = array_map('strtolower',array_keys($entrees));\r
+               $plugins = array_map('strtolower',array_keys(unserialize($GLOBALS['meta']['plugin'])));\r
+               $plugins_manquants = array_diff($entrees,$plugins);\r
+               if (count($plugins_manquants)>0)\r
+                       $texte_explication .= '<p class="reponse_formulaire reponse_formulaire_erreur">'._T('ieconfig:texte_plugins_manquants',array('plugins' => implode(', ',$plugins_manquants))).'</p>';\r
+               \r
+               $saisies = array(\r
+                       array(\r
+                               'saisie' => 'explication',\r
+                               'options' => array(\r
+                                       'nom' => 'import_details',\r
+                                       'texte' => $texte_explication\r
+                               )\r
+                       )\r
+               );\r
+               // Le fichier contient-il une configuration des contenus du site\r
+               if (isset($config['spip_contenu'])) {\r
+                       $texte_explication = _T('ieconfig:texte_spip_contenu_import_explication');\r
+                       $i = 0;\r
+                       foreach($config['spip_contenu'] as $meta => $valeur)\r
+                               if ($GLOBALS['meta'][$meta] != $valeur) {\r
+                                       $texte_explication .= '<br />&raquo; '.$meta.' : '.$GLOBALS['meta'][$meta].' -> '.$valeur;\r
+                                       $i++;\r
+                               }\r
+                       if ($i>0)\r
+                               $saisies_spip_contenu = array(\r
+                                       array(\r
+                                               'saisie' => 'fieldset',\r
+                                               'options' => array(\r
+                                                       'nom' => 'spip_contenu',\r
+                                                       'label' => '<:spip:onglet_contenu_site:>',\r
+                                                       'icone' => 'images/racine-site-24.gif'\r
+                                               ),\r
+                                               'saisies' => array(\r
+                                                       array(\r
+                                                               'saisie' => 'explication',\r
+                                                               'options' => array(\r
+                                                                       'nom' => 'spip_contenu_explication',\r
+                                                                       'texte' => $texte_explication\r
+                                                               )\r
+                                                       ),\r
+                                                       array(\r
+                                                               'saisie' => 'oui_non',\r
+                                                               'options' => array(\r
+                                                                       'nom' => 'spip_contenu_importer',\r
+                                                                       'label' => '<:ieconfig:label_importer:>',\r
+                                                                       'defaut' => '',\r
+                                                               )\r
+                                                       )\r
+                                               )\r
+                                       )\r
+                               );\r
+                       else\r
+                               $saisies_spip_contenu = array(\r
+                                       array(\r
+                                               'saisie' => 'fieldset',\r
+                                               'options' => array(\r
+                                                       'nom' => 'spip_contenu',\r
+                                                       'label' => '<:spip:onglet_contenu_site:>',\r
+                                                       'icone' => 'images/racine-site-24.gif'\r
+                                               ),\r
+                                               'saisies' => array(\r
+                                                       array(\r
+                                                               'saisie' => 'explication',\r
+                                                               'options' => array(\r
+                                                                       'nom' => 'spip_contenu_explication',\r
+                                                                       'texte' => '<:ieconfig:texte_configuration_identique:>'\r
+                                                               )\r
+                                                       )\r
+                                               )\r
+                                       )\r
+                               );\r
+                       $saisies = array_merge($saisies,$saisies_spip_contenu);\r
+               }\r
+               // Le fichier contient-il une configuration pour l'onglet interactivité\r
+               if (isset($config['spip_interactivite'])) {\r
+                       $texte_explication = _T('ieconfig:texte_spip_interactivite_import_explication');\r
+                       $i = 0;\r
+                       foreach($config['spip_interactivite'] as $meta => $valeur)\r
+                               if ($GLOBALS['meta'][$meta] != $valeur) {\r
+                                       $texte_explication .= '<br />&raquo; '.$meta.' : '.$GLOBALS['meta'][$meta].' -> '.$valeur;\r
+                                       $i++;\r
+                               }\r
+                       if ($i>0)\r
+                               $saisies_spip_interactivite = array(\r
+                                       array(\r
+                                               'saisie' => 'fieldset',\r
+                                               'options' => array(\r
+                                                       'nom' => 'spip_interactivite',\r
+                                                       'label' => '<:spip:onglet_interactivite:>',\r
+                                                       'icone' => 'images/forum-interne-24.gif'\r
+                                               ),\r
+                                               'saisies' => array(\r
+                                                       array(\r
+                                                               'saisie' => 'explication',\r
+                                                               'options' => array(\r
+                                                                       'nom' => 'spip_interactivite_explication',\r
+                                                                       'texte' => $texte_explication\r
+                                                               )\r
+                                                       ),\r
+                                                       array(\r
+                                                               'saisie' => 'oui_non',\r
+                                                               'options' => array(\r
+                                                                       'nom' => 'spip_interactivite_importer',\r
+                                                                       'label' => '<:ieconfig:label_importer:>',\r
+                                                                       'defaut' => '',\r
+                                                               )\r
+                                                       )\r
+                                               )\r
+                                       )\r
+                               );\r
+                       else\r
+                               $saisies_spip_interactivite = array(\r
+                                       array(\r
+                                               'saisie' => 'fieldset',\r
+                                               'options' => array(\r
+                                                       'nom' => 'spip_interactivite',\r
+                                                       'label' => '<:spip:onglet_interactivite:>',\r
+                                                       'icone' => 'images/forum-interne-24.gif'\r
+                                               ),\r
+                                               'saisies' => array(\r
+                                                       array(\r
+                                                               'saisie' => 'explication',\r
+                                                               'options' => array(\r
+                                                                       'nom' => 'spip_interactivite_explication',\r
+                                                                       'texte' => '<:ieconfig:texte_configuration_identique:>'\r
+                                                               )\r
+                                                       )\r
+                                               )\r
+                                       )\r
+                               );\r
+                       $saisies = array_merge($saisies,$saisies_spip_interactivite);\r
+               }\r
+               \r
+               // On passe via le pipeline ieconfig\r
+               $saisies = pipeline('ieconfig',array(\r
+                       'args' => array(\r
+                               'action' => 'form_import',\r
+                               'config' => $config\r
+                       ),\r
+                       'data' => $saisies\r
+               ));\r
+               \r
+               // Gestion des plugins utilisant le pipeline ieconfig_metas\r
+               foreach(pipeline('ieconfig_metas',array()) as $prefixe => $data){\r
+                       if(isset($config[$prefixe]))\r
+                               $saisies[] = array(\r
+                                       'saisie' => 'fieldset',\r
+                                       'options' => array(\r
+                                               'nom' => $prefixe,\r
+                                               'label' => isset($data['titre']) ? $data['titre'] : $prefixe,\r
+                                               'icone' => isset($data['icone']) ? $data['icone'] : ''\r
+                                       ),\r
+                                       'saisies' => array(\r
+                                               array(\r
+                                                       'saisie' => 'oui_non',\r
+                                                       'options' => array(\r
+                                                               'nom' => 'import_'.$prefixe,\r
+                                                               'label' => _T('ieconfig:label_importer'),\r
+                                                               'defaut' => ''\r
+                                                       )\r
+                                               )\r
+                                       )\r
+                               );\r
+               }\r
+       }\r
+       return $saisies;\r
+}\r
+\r
+function formulaires_ieconfig_import_charger_dist() {\r
+       include_spip('inc/saisies');\r
+       $saisies = ieconfig_saisies_import();\r
+       $contexte = array(\r
+               '_saisies' => $saisies,\r
+       );\r
+       if (_request('_code_yaml') and !_request('annuler') and !_request('importer'))\r
+               $contexte['_code_yaml'] = _request('_code_yaml');\r
+       return array_merge(saisies_charger_champs($saisies),$contexte);\r
+}\r
+\r
+function formulaires_ieconfig_import_verifier_dist() {\r
+       $erreurs = array();\r
+       // Etape de selection du fichier\r
+       if (!_request('_code_yaml')) {\r
+               // On a rien transmis et pas de fichier local\r
+               if (!_request('ieconfig_import_local') AND $_FILES['ieconfig_import_fichier']['name']=='')\r
+                       $erreurs['message_erreur'] = _T('ieconfig:message_erreur_fichier_import_manquant');\r
+       }\r
+       // Options d'import\r
+       else {\r
+               include_spip('inc/saisies');\r
+               $erreurs = saisies_verifier(ieconfig_saisies_import());\r
+       }\r
+       return $erreurs;\r
+}\r
+\r
+function formulaires_ieconfig_import_traiter_dist() {\r
+       // Si on est à l'étape de sélection d'un fichier de configuration\r
+       // On place le code YAML dans le contexte\r
+       if (!_request('_code_yaml')) {\r
+               if ($_FILES['ieconfig_import_fichier']['name']!='')\r
+                       $fichier = $_FILES['ieconfig_import_fichier']['tmp_name'];\r
+               else\r
+                       $fichier = _request('ieconfig_import_local');\r
+               lire_fichier($fichier, $code_yaml);\r
+               set_request('_code_yaml',$code_yaml);\r
+       }\r
+       // Si on valide l'import\r
+       elseif (_request('importer') && _request('_code_yaml')) {\r
+               include_spip('inc/yaml');\r
+               $config = yaml_decode(_request('_code_yaml'));\r
+               \r
+               // Le fichier contient-il une configuration des contenus du site à importer\r
+               if (isset($config['spip_contenu']) && _request('spip_contenu_importer')=='on') {\r
+                       foreach($config['spip_contenu'] as $nom => $valeur)\r
+                               ecrire_meta($nom,$valeur);\r
+               }\r
+               \r
+               // Le fichier contient-il une configuration pour l'ongler interactivité\r
+               if (isset($config['spip_interactivite']) && _request('spip_interactivite_importer')=='on') {\r
+                       foreach($config['spip_interactivite'] as $nom => $valeur)\r
+                               ecrire_meta($nom,$valeur);\r
+               }\r
+               \r
+               // On passe via le pipeline ieconfig\r
+               $message_erreur = pipeline('ieconfig',array(\r
+                       'args' => array(\r
+                               'action' => 'import',\r
+                               'config' => $config\r
+                       ),\r
+                       'data' => ''\r
+               ));\r
+               \r
+               // Gestion des plugins utilisant le pipeline ieconfig_metas\r
+               foreach(pipeline('ieconfig_metas',array()) as $prefixe => $data){\r
+                       if(_request('import_'.$prefixe)=='on' && isset($config[$prefixe])) {\r
+                               if(isset($data['metas_brutes']))\r
+                                       foreach(explode(',',$data['metas_brutes']) as $meta)\r
+                                               if (isset($config[$prefixe][$meta]))\r
+                                                       ecrire_meta($meta,$config[$prefixe][$meta]);\r
+                               if(isset($data['metas_serialize']))\r
+                                       foreach(explode(',',$data['metas_serialize']) as $meta)\r
+                                               if (isset($config[$prefixe][$meta]))\r
+                                                       ecrire_meta($meta,serialize($config[$prefixe][$meta]));\r
+                       }\r
+               }\r
+               \r
+               ecrire_metas();\r
+               \r
+               if ($message_erreur!='')\r
+                       return array('message_erreur' => $message_erreur);\r
+               else\r
+                       return array('message_ok' => _T('ieconfig:message_ok_import'));\r
+       }\r
+}\r
+\r
+// Renvoie la liste des fichiers de configurations présents dans un sous-répertoires ieconfig/\r
+function ieconfig_config_locales() {\r
+       static $liste_config = null;\r
+       \r
+       if (is_null($liste_config)){\r
+               include_spip('inc/yaml');\r
+               $liste_config = array();\r
+               $match = ".+[.]yaml$";\r
+               foreach (array_merge(find_all_in_path('ieconfig/', $match),find_all_in_path('tmp/ieconfig/', $match)) as $fichier => $chemin) {\r
+                       $config = yaml_decode_file($chemin);\r
+                       // On regarde s'il y a un necessite\r
+                       $ok = true;\r
+                       if (isset($config['necessite'])) {\r
+                               if (!is_array($config['necessite']))\r
+                                       $config['necessite'] = array($config['necessite']);\r
+                               foreach($config['necessite'] as $plugin)\r
+                                       if (!defined('_DIR_PLUGIN_'.strtoupper($plugin)))\r
+                                               $ok = false;\r
+                       }\r
+                       //on vérifie s'il y a un champs nom\r
+                       if ($ok) {\r
+                               if (isset($config['nom']))\r
+                                       $liste_config[$chemin] = _T_ou_typo($config['nom']);\r
+                               else\r
+                                       $liste_config[$chemin] = $fichier;\r
+                       }\r
+               }\r
+       }\r
+       return $liste_config;\r
+}\r
+\r
+\r
+?>
\ No newline at end of file