Changeset 7405 in spip-zone


Ignore:
Timestamp:
Nov 17, 2006, 12:43:46 PM (13 years ago)
Author:
cedric@…
Message:

le plugin permet d'importer des csv dans les tables virtuelles de forms2, en gerant les conflit sur id_donnee (donc ajout&remplace).
Manque le cas particulier des champs multiples, et de belles icones d'izo parce que la c'est moche a cote de forms

Location:
_plugins_/_stable_/csv_import
Files:
2 edited

Legend:

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

    r7374 r7405  
    1414include_spip("inc/presentation");
    1515include_spip('public/assembler');
     16
     17function csvimport_visu_extrait($nombre,$import_mode,$table,$id_form){
     18        // Extrait de la table en commençant par les dernieres maj
     19        if ($import_mode!='form')
     20                csvimport_table_visu_extrait($table,$nombre);
     21        else {
     22                $contexte = array('id_form'=>$id_form,'total'=>$nombre);
     23                $out = recuperer_fond("exec/template/tables_visu_extrait",$contexte);
     24                echo $out;
     25        }
     26}
     27
     28function csvimport_table_fields($mode,$table,$id_form){
     29        $table_fields = array();
     30        if ($mode=='table'){
     31                $csvimport_tables_auth = csvimport_tables_auth();
     32                if (isset($csvimport_tables_auth[$table]['field']))
     33                        $table_fields=$csvimport_tables_auth[$table]['field'];
     34                else
     35                        $table_fields=array_keys($GLOBALS['tables_principales'][$table]['field']);
     36                $table_fields=array_flip($table_fields);
     37                foreach ($table_fields as $key=>$value) {
     38                        $table_fields[$key] = $key;
     39                }
     40                return $table_fields;
     41        }
     42        if ($mode=='form' && $id_form){
     43                $table_fields['id_donnee'] = 'id_donnee';
     44                $res = spip_query("SELECT * FROM spip_forms_champs WHERE type NOT IN ('separateur','textestatique') AND id_form="._q($id_form)." ORDER BY rang");
     45                while ($row = spip_fetch_array($res)){
     46                        $table_fields[$row['champ']] = $row['titre'];
     47                }
     48                return $table_fields;
     49        }
     50        return $table_fields;
     51}
    1652
    1753function csvimport_import_step3(&$step, &$erreur, $import_link, $import_form_link, $csvimport_replace_actif, $csvimport_add_actif){
     
    66102                  $erreur[$step][] = _L("Fichier vide");
    67103                }
    68                 $new_assoc=csvimport_field_associate($data, $table, $assoc_field);
     104                $table_fields = csvimport_table_fields($import_mode,$table,$id_form);
     105                $new_assoc=csvimport_field_associate($data, $table_fields, $assoc_field);
    69106                $test=array_diff($new_assoc,$assoc_field);
    70107                if (count($test)>0){
     
    98135                        gros_titre($titre);
    99136                        // Extrait de la table en commençant par les dernieres maj
    100                         csvimport_table_visu_extrait($table,5);
     137                        csvimport_visu_extrait(5,$import_mode,$table,$id_form);
    101138                        fin_cadre_relief();
    102139
    103140                        debut_cadre_enfonce();
    104                         echo csvimport_array_visu_assoc($data, $table, $assoc_field, 5);
     141                        echo csvimport_array_visu_assoc($data, $table_fields, $assoc_field, 5);
    105142                        fin_cadre_enfonce();
    106143                        echo "<div style='padding: 2px; color: black;'>&nbsp;";
     
    121158                        gros_titre($titre);
    122159                        // Extrait de la table en commençant par les dernieres maj
    123                         csvimport_table_visu_extrait($table,5);
     160                        csvimport_visu_extrait(5,$import_mode,$table,$id_form);
    124161                        fin_cadre_relief();
    125162
    126163                        debut_cadre_enfonce();
    127                         echo csvimport_array_visu_assoc($data, $table, $assoc_field, 5);
     164                        echo csvimport_array_visu_assoc($data, $table_fields, $assoc_field, 5);
    128165                        fin_cadre_enfonce();
    129166                        echo "<div style='padding: 2px; color: black;'>&nbsp;";
     
    139176                        // vidange de la table
    140177                        if (($remplacer)&&(_request('confirme_remplace'))){
    141                                 csvimport_vidange_table($table);
     178                                if ($import_mode=='table')
     179                                        csvimport_vidange_table($table);
     180                                elseif ($import_mode=='form')
     181                                        if (include_spip('inc/forms'))
     182                                                Forms_donnees_vide($id_form);
    142183                        }
    143184                        // le reste est identique que ce soit un ajout ou un remplace
    144185                        if (($remplacer)||($ajouter)){
    145186                                $err = array();
    146                                 $out = csvimport_ajoute_table_csv($data, $table, $assoc_field,$err);
     187                                if ($import_mode=='table')
     188                                        $out = csvimport_ajoute_table_csv($data, $table, $assoc_field,$err);
     189                                elseif ($import_mode=='form')
     190                                        if (include_spip('inc/forms'))
     191                                                Forms_csvimport_ajoute_table_csv($data, $id_form, $assoc_field, $err);
    147192
    148193                                debut_cadre_relief($icone);
    149194                                gros_titre($titre);
    150195                                // Extrait de la table en commençant par les dernieres maj
    151                                 csvimport_table_visu_extrait($table,10);
     196                                csvimport_visu_extrait(10,$import_mode,$table,$id_form);
    152197                                fin_cadre_relief();
    153198
     
    161206                                else
    162207                                        echo csvimport_show_erreurs($err);
    163 
    164                                 //debut_cadre_enfonce();
    165                                 // Extrait de la table en commençant par les dernieres maj
    166                                 //csvimport_table_visu_extrait($table,10);
    167                                 //fin_cadre_enfonce();
    168208                }
    169209                }
     
    238278                  $step--;
    239279                }
    240                 if ($data && ($step==2))
    241                         $assoc_field=csvimport_field_associate($data, $table, $assoc_field);
    242         }
     280        }
     281        $table_fields = csvimport_table_fields($import_mode,$table,$id_form);
     282        if ($data && ($step==2))
     283                $assoc_field=csvimport_field_associate($data, $table_fields, $assoc_field);
    243284        if ($step==2){
    244285                $hidden['file_name'] = $file_name;
     
    274315
    275316
    276                 echo csvimport_field_configure($data, $table, $assoc_field);
     317                echo csvimport_field_configure($data, $table_fields, $assoc_field);
    277318
    278319                echo "</div><hr />\n";
     
    280321                echo "<div align='$spip_lang_left'>";
    281322
    282                 echo csvimport_array_visu_assoc($data, $table, $assoc_field, 5);
     323                echo csvimport_array_visu_assoc($data, $table_fields, $assoc_field, 5);
    283324                echo "</div><hr />\n";
    284325
     
    410451                        gros_titre($titre);
    411452                        // Extrait de la table en commençant par les dernieres maj
    412                         if ($import_mode!='form')
    413                                 csvimport_table_visu_extrait($table,5);
    414                         else {
    415                                 $contexte = array('id_form'=>$id_form,'total'=>5);
    416                                 $out = recuperer_fond("exec/template/tables_visu_extrait",$contexte);
    417                                 echo $out;
    418                         }
     453                        csvimport_visu_extrait(5,$import_mode,$table,$id_form);
    419454                        fin_cadre_relief();
    420455                }       
  • _plugins_/_stable_/csv_import/inc/csvimport.php

    r7374 r7405  
    200200}
    201201
    202 function csvimport_importcsv($file, $head = false, $delim = ",", $enclos = '"', $len = 10000) {
     202function csvimport_importcsv($file, $head = 0, $delim = ",", $enclos = '"', $len = 10000) {
    203203        $return = false;
    204204        $handle = fopen($file, "r");
     
    318318}
    319319
    320 function csvimport_array_visu_assoc($data, $table, $assoc_field, $nombre_lignes = 0){
    321         global $tables_principales;
    322         $csvimport_tables_auth = csvimport_tables_auth();
    323         if (isset($csvimport_tables_auth[$table]['field']))
    324                 $tablefield=$csvimport_tables_auth[$table]['field'];
    325         else
    326                 $tablefield=array_keys($tables_principales[$table]['field']);
     320function csvimport_array_visu_assoc($data, $table_fields, $assoc_field, $nombre_lignes = 0){
    327321        $assoc=array_flip($assoc_field);
    328322
     
    331325        $output .= "<table>";
    332326        $output .= "<tr>";
    333         foreach($tablefield as $value){
     327        foreach($table_fields as $key=>$value){
    334328          $output .= "<th>" . $value . "</th>";
    335329        }
     
    339333                foreach($data as $key=>$ligne) {
    340334                        $output .= "<tr>";
    341                         foreach($tablefield as $value){
     335                        foreach($table_fields as $key=>$value){
    342336                          $output .= "<td>";
    343                           if ((isset($assoc[$value]))&&(isset($ligne[$assoc[$value]])))
    344                             $output .= $ligne[$assoc[$value]];
     337                          if ((isset($assoc[$key]))&&(isset($ligne[$assoc[$key]])))
     338                            $output .= $ligne[$assoc[$key]];
    345339                                else
    346340                                        $output .= "&nbsp;";
     
    359353}
    360354
    361 function csvimport_field_associate($data, $table, $assoc_field){
     355function csvimport_field_associate($data, $table_fields, $assoc_field){
    362356        global $tables_principales;
    363         $csvimport_tables_auth = csvimport_tables_auth();
    364357        $assoc=$assoc_field;
    365358        if (!is_array($assoc)) $assoc = array();
    366359        $csvfield=array_keys($data{1});
    367360        $csvfield=array_flip($csvfield);
    368 
    369         if (isset($csvimport_tables_auth[$table]['field']))
    370                 $tablefield=$csvimport_tables_auth[$table]['field'];
    371         else
    372                 $tablefield=array_keys($tables_principales[$table]['field']);
    373         $tablefield=array_flip($tablefield);
    374361
    375362        // on enleve toutes les associations dont
     
    380367                $good_key = false;
    381368                $good_value = false;
    382                 if (array_key_exists($key,$csvfield)){
     369                if (isset($csvfield[$key])){
    383370                  $good_key = true;
    384371                }
    385                 if ((array_key_exists($value,$tablefield))||($value==-1)){
     372                if ((isset($table_fields[$value]))||($value==-1)){
    386373                  $good_value = true;
    387374                }
     
    390377                else{
    391378                        unset($csvfield[$key]);
    392                         if ($value!=-1) unset($tablefield[$value]);
     379                        if ($value!=-1) unset($table_fields[$value]);
    393380                }
    394381        }
     
    398385        $accents_rep=array('e','e','e','a','u',"o","c","_");
    399386        foreach(array_keys($csvfield) as $csvkey){
    400                 foreach(array_keys($tablefield) as $tablekey)
     387                foreach(array_keys($table_fields) as $tablekey)
    401388                  if (strcasecmp(str_replace($accents,$accents_rep,$csvkey),$tablekey)==0){
    402389                                $assoc[$csvkey]=$tablekey;
    403390                                unset($csvfield[$csvkey]);
    404                                 unset($tablefield[$tablekey]);
     391                                unset($table_fields[$tablekey]);
    405392                        }
    406393        }
    407394        //assoc des autres dans l'ordre qui vient
    408         $tablefield=array_keys($tablefield);
     395        $table_fields=array_keys($table_fields);
    409396        foreach(array_keys($csvfield) as $csvkey){
    410                 $assoc[$csvkey]=array_shift($tablefield);
     397                $assoc[$csvkey]=array_shift($table_fields);
    411398                if ($assoc[$csvkey]==NULL) $assoc[$csvkey]="-1";
    412399                unset($csvfield[$csvkey]);
     
    415402}
    416403
    417 function csvimport_field_configure($data, $table, $assoc){
     404function csvimport_field_configure($data, $table_fields, $assoc){
    418405        $output = "";
    419         global $tables_principales;
    420         $csvimport_tables_auth = csvimport_tables_auth();
    421 
    422406        $csvfield=array_keys($data{1});
    423         if (isset($csvimport_tables_auth[$table]['field']))
    424                 $tablefield=$csvimport_tables_auth[$table]['field'];
    425         else
    426                 $tablefield=array_keys($tables_principales[$table]['field']);
    427407
    428408        $output .= "<table><tr><td>"._L("Champ CSV")."</td><td>"._L("Champ Table")."</td></tr>";
     
    432412                $output .= "<td><select name='assoc_field[".str_replace("'","_",$csvkey)."]'>\n";
    433413                $output .= "<option value='-1'>"._L("Ne pas importer")."</option>\n";
    434                 foreach($tablefield as $tablekey){
     414                foreach($table_fields as $tablekey => $libelle){
    435415                        $output .= "<option value='$tablekey'";
    436416                        if ($assoc[$csvkey]==$tablekey)
    437417                          $output .= " selected='selected'";
    438                         $output .= ">$tablekey</option>\n";
     418                        $output .= ">$libelle</option>\n";
    439419                }
    440420                $output .= "</select></td></tr>";
     
    446426// vidange de la table
    447427function csvimport_vidange_table($table){
    448         $query = "DELETE FROM $table";
    449         $res = spip_query($query); // et voila ...
     428        $res = spip_query("DELETE FROM $table"); // et voila ...
    450429}
    451430
Note: See TracChangeset for help on using the changeset viewer.