Changeset 74593 in spip-zone


Ignore:
Timestamp:
Aug 6, 2013, 8:25:06 AM (6 years ago)
Author:
cedric@…
Message:

Il ne faut jamais essayer d'acceder directement à $_FILESieconfig_import_fichier?tmp_name? car ce n'est pas possible en cas d'open_basedir.
Il faut d'abord le deplacer avec move_uploaded_file, puis le lire

Location:
_plugins_/ieconfig/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/ieconfig/trunk/formulaires/ieconfig_import.php

    r72976 r74593  
    33if (!defined("_ECRIRE_INC_VERSION")) return;
    44
    5 function ieconfig_saisies_import() {
     5function ieconfig_saisies_import(){
    66        // Etape de selection du fichier
    7         if (!_request('_code_yaml') or _request('annuler') or _request('importer')) {
    8                 $saisies = array (
     7        if (!_request('_code_yaml') or _request('annuler') or _request('importer')){
     8                $saisies = array(
    99                        array(
    1010                                'saisie' => 'fieldset',
     
    3737                        )
    3838                );
    39         // Options d'importations
     39                // Options d'importations
    4040        } else {
    4141                include_spip('inc/yaml');
    4242                $config = yaml_decode(_request('_code_yaml'));
    43                 $texte_explication = '<b>'._T('ieconfig:texte_nom').'</b> '._T_ou_typo($config['nom']);
    44                 if ($config['description']!= '')
    45                         $texte_explication .= '<br /><b>'._T('ieconfig:texte_description').'</b> '._T_ou_typo($config['description']);
     43                $texte_explication = '<b>' . _T('ieconfig:texte_nom') . '</b> ' . _T_ou_typo($config['nom']);
     44                if ($config['description']!='')
     45                        $texte_explication .= '<br /><b>' . _T('ieconfig:texte_description') . '</b> ' . _T_ou_typo($config['description']);
    4646                // On identifie les entrées ne correspondant pas à un plugin
    4747                // Ou bien non déclarées dans ieconfig_metas
     
    5151                unset($entrees['description']);
    5252                unset($entrees['necessite']);
    53                 $entrees = array_map('strtolower',array_keys($entrees));
    54                 $plugins = array_map('strtolower',array_keys(unserialize($GLOBALS['meta']['plugin'])));
    55                 $entrees_prises_en_charge = array_merge(array_keys(pipeline('ieconfig_metas',array())),$plugins);
    56                 $plugins_manquants = array_diff($entrees,$entrees_prises_en_charge);
     53                $entrees = array_map('strtolower', array_keys($entrees));
     54                $plugins = array_map('strtolower', array_keys(unserialize($GLOBALS['meta']['plugin'])));
     55                $entrees_prises_en_charge = array_merge(array_keys(pipeline('ieconfig_metas', array())), $plugins);
     56                $plugins_manquants = array_diff($entrees, $entrees_prises_en_charge);
    5757                if (count($plugins_manquants)>0)
    58                         $texte_explication .= '<p class="reponse_formulaire reponse_formulaire_erreur">'._T('ieconfig:texte_plugins_manquants',array('plugins' => implode(', ',$plugins_manquants))).'</p>';
    59                
     58                        $texte_explication .= '<p class="reponse_formulaire reponse_formulaire_erreur">' . _T('ieconfig:texte_plugins_manquants', array('plugins' => implode(', ', $plugins_manquants))) . '</p>';
     59
    6060                $saisies = array(
    6161                        array(
     
    6767                        )
    6868                );
    69                
     69
    7070                // Gestion des plugins utilisant le pipeline ieconfig_metas
    7171                $ieconfig_metas = array();
    72                 foreach(pipeline('ieconfig_metas',array()) as $prefixe => $data){
    73                         if(isset($config[$prefixe])) {
    74                                 if (isset($data['icone'])) {
     72                foreach (pipeline('ieconfig_metas', array()) as $prefixe => $data){
     73                        if (isset($config[$prefixe])){
     74                                if (isset($data['icone'])){
    7575                                        $icone = chemin_image($data['icone']);
    7676                                        if (!$icone) $icone = find_in_path($data['icone']);
    77                                         if ($icone) $icone = '<img src="'.$icone.'" alt="" style="margin-left:-50px; margin-right:34px;" />';
    78                                 } else $icone= '';
     77                                        if ($icone) $icone = '<img src="' . $icone . '" alt="" style="margin-left:-50px; margin-right:34px;" />';
     78                                } else $icone = '';
    7979                                $ieconfig_metas[$prefixe] = $icone . (isset($data['titre']) ? $data['titre'] : $prefixe);
    8080                        }
     
    100100                                )
    101101                        );
    102                
     102
    103103                // On passe via le pipeline ieconfig
    104                 $saisies = pipeline('ieconfig',array(
     104                $saisies = pipeline('ieconfig', array(
    105105                        'args' => array(
    106106                                'action' => 'form_import',
     
    110110                ));
    111111        }
    112        
     112
    113113        return $saisies;
    114114}
    115115
    116 function formulaires_ieconfig_import_charger_dist() {
     116function formulaires_ieconfig_import_charger_dist(){
    117117        include_spip('inc/saisies');
    118118        $saisies = ieconfig_saisies_import();
     
    122122        if (_request('_code_yaml') and !_request('annuler') and !_request('importer'))
    123123                $contexte['_code_yaml'] = _request('_code_yaml');
    124         return array_merge(saisies_charger_champs($saisies),$contexte);
    125 }
    126 
    127 function formulaires_ieconfig_import_verifier_dist() {
     124        return array_merge(saisies_charger_champs($saisies), $contexte);
     125}
     126
     127function formulaires_ieconfig_import_verifier_dist(){
    128128        $erreurs = array();
    129129        // Etape de selection du fichier
    130         if (!_request('_code_yaml')) {
     130        if (!_request('_code_yaml')){
    131131                // On a rien transmis et pas de fichier local
    132132                if (!_request('ieconfig_import_local') AND $_FILES['ieconfig_import_fichier']['name']=='')
    133133                        $erreurs['message_erreur'] = _T('ieconfig:message_erreur_fichier_import_manquant');
    134         }
    135         // Options d'import
     134        } // Options d'import
    136135        else {
    137136                include_spip('inc/saisies');
     
    141140}
    142141
    143 function formulaires_ieconfig_import_traiter_dist() {
    144    
    145         include_spip('inc/config');
    146        
     142function formulaires_ieconfig_import_traiter_dist(){
     143
     144        include_spip('inc/config');
     145
    147146        // Si on est à l'étape de sélection d'un fichier de configuration
    148147        // On place le code YAML dans le contexte
    149         if (!_request('_code_yaml')) {
    150                 if ($_FILES['ieconfig_import_fichier']['name']!='')
    151                         $fichier = $_FILES['ieconfig_import_fichier']['tmp_name'];
    152                 else
     148        if (!_request('_code_yaml')){
     149                if ($_FILES['ieconfig_import_fichier']['name']!=''){
     150                        $dir = sous_repertoire(_DIR_TMP, 'ieconfig');
     151                        $hash = md5("ieimport-".$GLOBALS['visiteur_session']['id_auteur'].time());
     152                        $fichier = $dir . $hash . "-" . $_FILES['ieconfig_import_fichier']['name'];
     153                        move_uploaded_file($_FILES['ieconfig_import_fichier']['tmp_name'],$fichier);
     154                        lire_fichier($fichier, $code_yaml);
     155                        @unlink($fichier);
     156                }
     157                else {
    153158                        $fichier = _request('ieconfig_import_local');
    154                 lire_fichier($fichier, $code_yaml);
    155                 set_request('_code_yaml',$code_yaml);
    156         }
    157         // Si on valide l'import
     159                        lire_fichier($fichier, $code_yaml);
     160                }
     161                set_request('_code_yaml', $code_yaml);
     162        } // Si on valide l'import
    158163        elseif (_request('importer') && _request('_code_yaml')) {
    159164                include_spip('inc/yaml');
    160165                $config = yaml_decode(_request('_code_yaml'));
    161                
    162                 // On passe via le pipeline ieconfig
    163                 $message_erreur = pipeline('ieconfig',array(
     166
     167                // On passe via le pipeline ieconfig
     168                $message_erreur = pipeline('ieconfig', array(
    164169                        'args' => array(
    165170                                'action' => 'import',
     
    168173                        'data' => ''
    169174                ));
    170                
     175
    171176                // Gestion des plugins utilisant le pipeline ieconfig_metas
    172177                $import_metas = _request('import_metas');
    173178                if (!is_array($import_metas)) $import_metas = array();
    174                
    175                
    176                 foreach(pipeline('ieconfig_metas',array()) as $prefixe => $data){
    177                         if(in_array($prefixe,$import_metas) && isset($config[$prefixe])) {
    178                                 if(isset($data['metas_brutes']))
    179                                         foreach(explode(',',$data['metas_brutes']) as $meta)
     179
     180
     181                foreach (pipeline('ieconfig_metas', array()) as $prefixe => $data){
     182                        if (in_array($prefixe, $import_metas) && isset($config[$prefixe])){
     183                                if (isset($data['metas_brutes']))
     184                                        foreach (explode(',', $data['metas_brutes']) as $meta)
    180185                                                if (isset($config[$prefixe][$meta]))
    181                                                         ecrire_config($meta.'/',$config[$prefixe][$meta]);
    182                                 if(isset($data['metas_serialize']))
    183                                         foreach(explode(',',$data['metas_serialize']) as $meta)
     186                                                        ecrire_config($meta . '/', $config[$prefixe][$meta]);
     187                                if (isset($data['metas_serialize']))
     188                                        foreach (explode(',', $data['metas_serialize']) as $meta)
    184189                                                if (isset($config[$prefixe][$meta]))
    185                                                         ecrire_config($meta.'/',serialize($config[$prefixe][$meta]));
    186                         }
    187                 }
    188 
    189                
     190                                                        ecrire_config($meta . '/', serialize($config[$prefixe][$meta]));
     191                        }
     192                }
     193
     194
    190195                if ($message_erreur!='')
    191196                        return array('message_erreur' => $message_erreur);
     
    196201
    197202// Renvoie la liste des fichiers de configurations présents dans un sous-répertoires ieconfig/
    198 function ieconfig_config_locales() {
     203function ieconfig_config_locales(){
    199204        static $liste_config = null;
    200        
     205
    201206        if (is_null($liste_config)){
    202207                include_spip('inc/yaml');
    203208                $liste_config = array();
    204209                $match = ".+[.]yaml$";
    205                 foreach (array_merge(find_all_in_path('ieconfig/', $match),find_all_in_path(_DIR_TMP.'ieconfig/', $match)) as $fichier => $chemin) {
     210                foreach (array_merge(find_all_in_path('ieconfig/', $match), find_all_in_path(_DIR_TMP . 'ieconfig/', $match)) as $fichier => $chemin){
    206211                        $config = yaml_decode_file($chemin);
    207212                        // On regarde s'il y a un necessite
    208213                        $ok = true;
    209                         if (isset($config['necessite'])) {
     214                        if (isset($config['necessite'])){
    210215                                if (!is_array($config['necessite']))
    211216                                        $config['necessite'] = array($config['necessite']);
    212                                 foreach($config['necessite'] as $plugin)
    213                                         if (!defined('_DIR_PLUGIN_'.strtoupper($plugin)))
     217                                foreach ($config['necessite'] as $plugin)
     218                                        if (!defined('_DIR_PLUGIN_' . strtoupper($plugin)))
    214219                                                $ok = false;
    215220                        }
    216221                        //on vérifie s'il y a un champs nom
    217                         if ($ok) {
     222                        if ($ok){
    218223                                if (isset($config['nom']))
    219224                                        $liste_config[$chemin] = _T_ou_typo($config['nom']);
  • _plugins_/ieconfig/trunk/paquet.xml

    r72977 r74593  
    22        prefix="ieconfig"
    33        categorie="maintenance"
    4         version="1.2.1"
     4        version="1.2.2"
    55        etat="test"
    66        compatibilite="[3.0.0;3.0.99]"
Note: See TracChangeset for help on using the changeset viewer.