--- /dev/null
+<?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 />» '.$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 />» '.$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