Changeset 7638 in spip-zone


Ignore:
Timestamp:
Nov 28, 2006, 10:34:40 AM (12 years ago)
Author:
cedric@…
Message:

import csv plus robuste, et qui detecte les erreurs de champs avant l'import

Location:
_plugins_/_stable_/csv_import
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/csv_import/exec/csvimport_import.php

    r7407 r7638  
    170170                        echo csvimport_array_visu_assoc($data, $table_fields, $assoc_field, 5);
    171171                        fin_cadre_enfonce();
     172                        if ($import_mode=='form')
     173                                if (include_spip('inc/forms')){
     174                                        Forms_csvimport_ajoute_table_csv($data, $id_form, $assoc_field, $err, true);
     175                                        echo csvimport_show_erreurs($err);
     176                                }
     177                       
    172178                        echo "<div style='padding: 2px; color: black;'>&nbsp;";
    173179                        echo _L("Les donn&eacute;es du fichier CSV vont &ecirc;tre ajout&eacute;es &agrave; la table comme illustr&eacute; ci-dessus.");
  • _plugins_/_stable_/csv_import/inc/csvimport.php

    r7407 r7638  
    1212
    1313if (!defined('_DIR_PLUGIN_CSVIMPORT')){
    14         $p=explode(basename(_DIR_PLUGINS)."/",str_replace('\\','/',realpath(dirname(__FILE__))));
     14        $p=explode(basename(_DIR_PLUGINS)."/",str_replace('\\','/',realpath(dirname(dirname(__FILE__)))));
    1515        define('_DIR_PLUGIN_CSVIMPORT',(_DIR_PLUGINS.end($p))."/");
    1616}
     
    206206                if ($head) {
    207207                        $header = fgetcsv($handle, $len, $delim);
    208                         if ($header)
     208                        if ($header){
    209209                                $header = array_map('csvimport_importcharset',$header);
     210                                $header = array_map('csvimport_nettoie_key',$header);
     211                        }
    210212                }
    211213                while (($data = fgetcsv($handle, $len, $delim)) !== FALSE) {
     
    334336                        $output .= "<tr>";
    335337                        foreach($table_fields as $key=>$value){
     338                                $kc = csvimport_nettoie_key($key);
    336339                          $output .= "<td>";
    337                           if ((isset($assoc[$key]))&&(isset($ligne[$assoc[$key]])))
    338                             $output .= $ligne[$assoc[$key]];
     340                          if ((isset($assoc[$kc]))&&(isset($ligne[$assoc[$kc]])))
     341                            $output .= $ligne[$assoc[$kc]];
    339342                                else
    340343                                        $output .= "&nbsp;";
     
    351354          $output .= count($data) . _L(" lignes au total");
    352355        return $output;
     356}
     357
     358function csvimport_nettoie_key($key){
     359        $accents=array('é','è','ê','à','ù',"ô","ç","'");
     360        $accents_rep=array('e','e','e','a','u',"o","c","_");
     361        return str_replace($accents,$accents_rep,$key);
    353362}
    354363
     
    358367        if (!is_array($assoc)) $assoc = array();
    359368        $csvfield=array_keys($data{1});
     369        foreach($csvfield as $k=>$v){
     370                $csvfield[$k] = csvimport_nettoie_key($v);
     371        }
    360372        $csvfield=array_flip($csvfield);
    361373
     
    382394
    383395        //assoc auto des cles qui portent le meme nom
    384         $accents=array('é','è','ê','à','ù',"ô","ç","'");
    385         $accents_rep=array('e','e','e','a','u',"o","c","_");
    386396        foreach(array_keys($csvfield) as $csvkey){
    387397                foreach(array_keys($table_fields) as $tablekey)
    388                   if (strcasecmp(str_replace($accents,$accents_rep,$csvkey),$tablekey)==0){
     398                  if (strcasecmp($csvkey,$tablekey)==0){
    389399                                $assoc[$csvkey]=$tablekey;
    390400                                unset($csvfield[$csvkey]);
     
    408418        $output .= "<table><tr><td>"._L("Champ CSV")."</td><td>"._L("Champ Table")."</td></tr>";
    409419        foreach($csvfield as $csvkey){
     420                $csvkey = csvimport_nettoie_key($csvkey);
    410421                $output .=  "<tr>";
    411422                $output .=  "<td>$csvkey</td>";
    412                 $output .= "<td><select name='assoc_field[".str_replace("'","_",$csvkey)."]'>\n";
     423                $output .= "<td><select name='assoc_field[$csvkey]'>\n";
    413424                $output .= "<option value='-1'>"._L("Ne pas importer")."</option>\n";
    414425                foreach($table_fields as $tablekey => $libelle){
     
    466477                                $check = array_flip($tablefield);
    467478                                foreach($check as $key=>$value){
    468                                   if ((isset($assoc[$key]))&&(isset($ligne[$assoc[$key]]))){
     479                                        $kc = csvimport_nettoie_key($key);
     480                                  if ((isset($assoc[$kc]))&&(isset($ligne[$assoc[$kc]]))){
    469481                                                $what .= "$key,";
    470                                                 $with .= "'" . addslashes($ligne[$assoc[$key]]) . "',";
     482                                                $with .= "'" . addslashes($ligne[$assoc[$kc]]) . "',";
    471483                                                unset($check[$key]);
    472484                                        }
Note: See TracChangeset for help on using the changeset viewer.