'fieldset', 'options' => array( 'nom' => 'ieconfig_import_choix_fichier', 'label' => '<:ieconfig:label_ieconfig_import_choix_fichier:>', 'icone' => 'img/ieconfig-import.png' ), 'saisies' => array( array( 'saisie' => 'input', 'options' => array( 'type' => 'file', 'nom' => 'ieconfig_import_fichier', 'label' => '<:ieconfig:label_ieconfig_import_fichier:>', 'explication' => '<:ieconfig:explication_ieconfig_import_fichier:>' ) ), array( 'saisie' => 'selection', 'options' => array( 'type' => 'selection', 'nom' => 'ieconfig_import_local', 'label' => '<:ieconfig:label_ieconfig_import_local:>', 'explication' => '<:ieconfig:explication_ieconfig_import_local:>', 'cacher_option_intro' => 'oui', 'datas' => ieconfig_config_locales() ) ) ) ) ); // Options d'importations } else { include_spip('inc/yaml'); $config = yaml_decode(_request('_code_yaml')); $texte_explication = ''._T('ieconfig:texte_nom').' '._T_ou_typo($config['nom']); if ($config['description']!= '') $texte_explication .= '
'._T('ieconfig:texte_description').' '._T_ou_typo($config['description']); // On identifie les entrées ne correspondant pas à un plugin // Convention : les clés du tableau de config correspondent aux préfixes des plugins $entrees = $config; unset($entrees['nom']); unset($entrees['description']); unset($entrees['necessite']); unset($entrees['spip_contenu']); unset($entrees['spip_interactivite']); $entrees = array_map('strtolower',array_keys($entrees)); $plugins = array_map('strtolower',array_keys(unserialize($GLOBALS['meta']['plugin']))); $plugins_manquants = array_diff($entrees,$plugins); if (count($plugins_manquants)>0) $texte_explication .= '

'._T('ieconfig:texte_plugins_manquants',array('plugins' => implode(', ',$plugins_manquants))).'

'; $saisies = array( array( 'saisie' => 'explication', 'options' => array( 'nom' => 'import_details', 'texte' => $texte_explication ) ) ); // Le fichier contient-il une configuration des contenus du site if (isset($config['spip_contenu'])) { $texte_explication = _T('ieconfig:texte_spip_contenu_import_explication'); $i = 0; foreach($config['spip_contenu'] as $meta => $valeur) if ($GLOBALS['meta'][$meta] != $valeur) { $texte_explication .= '
» '.$meta.' : '.$GLOBALS['meta'][$meta].' -> '.$valeur; $i++; } if ($i>0) $saisies_spip_contenu = array( array( 'saisie' => 'fieldset', 'options' => array( 'nom' => 'spip_contenu', 'label' => '<:spip:onglet_contenu_site:>', 'icone' => 'images/racine-site-24.gif' ), 'saisies' => array( array( 'saisie' => 'explication', 'options' => array( 'nom' => 'spip_contenu_explication', 'texte' => $texte_explication ) ), array( 'saisie' => 'oui_non', 'options' => array( 'nom' => 'spip_contenu_importer', 'label' => '<:ieconfig:label_importer:>', 'defaut' => '', ) ) ) ) ); else $saisies_spip_contenu = array( array( 'saisie' => 'fieldset', 'options' => array( 'nom' => 'spip_contenu', 'label' => '<:spip:onglet_contenu_site:>', 'icone' => 'images/racine-site-24.gif' ), 'saisies' => array( array( 'saisie' => 'explication', 'options' => array( 'nom' => 'spip_contenu_explication', 'texte' => '<:ieconfig:texte_configuration_identique:>' ) ) ) ) ); $saisies = array_merge($saisies,$saisies_spip_contenu); } // Le fichier contient-il une configuration pour l'onglet interactivité if (isset($config['spip_interactivite'])) { $texte_explication = _T('ieconfig:texte_spip_interactivite_import_explication'); $i = 0; foreach($config['spip_interactivite'] as $meta => $valeur) if ($GLOBALS['meta'][$meta] != $valeur) { $texte_explication .= '
» '.$meta.' : '.$GLOBALS['meta'][$meta].' -> '.$valeur; $i++; } if ($i>0) $saisies_spip_interactivite = array( array( 'saisie' => 'fieldset', 'options' => array( 'nom' => 'spip_interactivite', 'label' => '<:spip:onglet_interactivite:>', 'icone' => 'images/forum-interne-24.gif' ), 'saisies' => array( array( 'saisie' => 'explication', 'options' => array( 'nom' => 'spip_interactivite_explication', 'texte' => $texte_explication ) ), array( 'saisie' => 'oui_non', 'options' => array( 'nom' => 'spip_interactivite_importer', 'label' => '<:ieconfig:label_importer:>', 'defaut' => '', ) ) ) ) ); else $saisies_spip_interactivite = array( array( 'saisie' => 'fieldset', 'options' => array( 'nom' => 'spip_interactivite', 'label' => '<:spip:onglet_interactivite:>', 'icone' => 'images/forum-interne-24.gif' ), 'saisies' => array( array( 'saisie' => 'explication', 'options' => array( 'nom' => 'spip_interactivite_explication', 'texte' => '<:ieconfig:texte_configuration_identique:>' ) ) ) ) ); $saisies = array_merge($saisies,$saisies_spip_interactivite); } // On passe via le pipeline ieconfig $saisies = pipeline('ieconfig',array( 'args' => array( 'action' => 'form_import', 'config' => $config ), 'data' => $saisies )); // Gestion des plugins utilisant le pipeline ieconfig_metas foreach(pipeline('ieconfig_metas',array()) as $prefixe => $data){ if(isset($config[$prefixe])) $saisies[] = array( 'saisie' => 'fieldset', 'options' => array( 'nom' => $prefixe, 'label' => isset($data['titre']) ? $data['titre'] : $prefixe, 'icone' => isset($data['icone']) ? $data['icone'] : '' ), 'saisies' => array( array( 'saisie' => 'oui_non', 'options' => array( 'nom' => 'import_'.$prefixe, 'label' => _T('ieconfig:label_importer'), 'defaut' => '' ) ) ) ); } } return $saisies; } function formulaires_ieconfig_import_charger_dist() { include_spip('inc/saisies'); $saisies = ieconfig_saisies_import(); $contexte = array( '_saisies' => $saisies, ); if (_request('_code_yaml') and !_request('annuler') and !_request('importer')) $contexte['_code_yaml'] = _request('_code_yaml'); return array_merge(saisies_charger_champs($saisies),$contexte); } function formulaires_ieconfig_import_verifier_dist() { $erreurs = array(); // Etape de selection du fichier if (!_request('_code_yaml')) { // On a rien transmis et pas de fichier local if (!_request('ieconfig_import_local') AND $_FILES['ieconfig_import_fichier']['name']=='') $erreurs['message_erreur'] = _T('ieconfig:message_erreur_fichier_import_manquant'); } // Options d'import else { include_spip('inc/saisies'); $erreurs = saisies_verifier(ieconfig_saisies_import()); } return $erreurs; } function formulaires_ieconfig_import_traiter_dist() { // Si on est à l'étape de sélection d'un fichier de configuration // On place le code YAML dans le contexte if (!_request('_code_yaml')) { if ($_FILES['ieconfig_import_fichier']['name']!='') $fichier = $_FILES['ieconfig_import_fichier']['tmp_name']; else $fichier = _request('ieconfig_import_local'); lire_fichier($fichier, $code_yaml); set_request('_code_yaml',$code_yaml); } // Si on valide l'import elseif (_request('importer') && _request('_code_yaml')) { include_spip('inc/yaml'); $config = yaml_decode(_request('_code_yaml')); // Le fichier contient-il une configuration des contenus du site à importer if (isset($config['spip_contenu']) && _request('spip_contenu_importer')=='on') { foreach($config['spip_contenu'] as $nom => $valeur) ecrire_meta($nom,$valeur); } // Le fichier contient-il une configuration pour l'ongler interactivité if (isset($config['spip_interactivite']) && _request('spip_interactivite_importer')=='on') { foreach($config['spip_interactivite'] as $nom => $valeur) ecrire_meta($nom,$valeur); } // On passe via le pipeline ieconfig $message_erreur = pipeline('ieconfig',array( 'args' => array( 'action' => 'import', 'config' => $config ), 'data' => '' )); // Gestion des plugins utilisant le pipeline ieconfig_metas foreach(pipeline('ieconfig_metas',array()) as $prefixe => $data){ if(_request('import_'.$prefixe)=='on' && isset($config[$prefixe])) { if(isset($data['metas_brutes'])) foreach(explode(',',$data['metas_brutes']) as $meta) if (isset($config[$prefixe][$meta])) ecrire_meta($meta,$config[$prefixe][$meta]); if(isset($data['metas_serialize'])) foreach(explode(',',$data['metas_serialize']) as $meta) if (isset($config[$prefixe][$meta])) ecrire_meta($meta,serialize($config[$prefixe][$meta])); } } ecrire_metas(); if ($message_erreur!='') return array('message_erreur' => $message_erreur); else return array('message_ok' => _T('ieconfig:message_ok_import')); } } // Renvoie la liste des fichiers de configurations présents dans un sous-répertoires ieconfig/ function ieconfig_config_locales() { static $liste_config = null; if (is_null($liste_config)){ include_spip('inc/yaml'); $liste_config = array(); $match = ".+[.]yaml$"; foreach (array_merge(find_all_in_path('ieconfig/', $match),find_all_in_path('tmp/ieconfig/', $match)) as $fichier => $chemin) { $config = yaml_decode_file($chemin); // On regarde s'il y a un necessite $ok = true; if (isset($config['necessite'])) { if (!is_array($config['necessite'])) $config['necessite'] = array($config['necessite']); foreach($config['necessite'] as $plugin) if (!defined('_DIR_PLUGIN_'.strtoupper($plugin))) $ok = false; } //on vérifie s'il y a un champs nom if ($ok) { if (isset($config['nom'])) $liste_config[$chemin] = _T_ou_typo($config['nom']); else $liste_config[$chemin] = $fichier; } } } return $liste_config; } ?>