diff --git a/ecrire/inc/import_1_2.php b/ecrire/inc/import_1_2.php index 378c4cae31e45cf9a082c09717f3e4fbe72b1e59..f7514f99fe72b590f773fa6d870d1679121cbd40 100644 --- a/ecrire/inc/import_1_2.php +++ b/ecrire/inc/import_1_2.php @@ -12,10 +12,33 @@ if (!defined("_ECRIRE_INC_VERSION")) return; +function description_table($nom){ + global $tables_principales, $tables_auxiliaires, $table_des_tables, $tables_des_serveurs_sql; + + $nom_table = $nom; + if (in_array($nom, $table_des_tables)) + $nom_table = 'spip_' . $nom; + + include_spip('base/serial'); + if (isset($tables_principales[$nom_table])) + return array($nom_table, $tables_principales[$nom_table]); + + include_spip('base/auxiliaires'); + $nom_table = 'spip_' . $nom; + if (isset($tables_auxiliaires[$nom_table])) + return array($nom_table, $tables_auxiliaires[$nom_table]); + + if ($desc = spip_abstract_showtable($nom, '', true)) + if (isset($desc['field'])) { + return array($nom, $desc); + } + return array($nom,array()); +} // pour le support des vieux dump function inc_import_1_2_dist($f, $gz=false) { global $import_ok, $pos, $abs_pos; + static $field_desc = array (); // detruire les tables a restaurer if (!$abs_pos) import_init_tables(); @@ -46,6 +69,17 @@ function inc_import_1_2_dist($f, $gz=false) { $id = "id_$type"; $id_objet = 0; + $table = isset($tables[$type]) ? $tables[$type] : $type; + if (!isset($field_desc[$table])){ + // recuperer la description de la table pour connaitre ses champs valides + list($nom,$desc) = description_table($table); + if (isset($desc['field'])) + $field_desc[$table] = $desc['field']; + else + $field_desc[$table] = NULL; + } + $fields = $field_desc[$table]; + // Lire les champs de l'objet for (;;) { $b = ''; @@ -69,17 +103,14 @@ function inc_import_1_2_dist($f, $gz=false) { $GLOBALS['erreur_restauration'] = true; } } - else { - $cols[] = $col; - $values[] = spip_abstract_quote($value); + else if ($fields==NULL or isset($fields[$col])) { + $values[$col] = spip_abstract_quote($value); if ($col == $id) $id_objet = $value; } } } - $table = isset($tables[$type]) ? $tables[$type] : $type; - - if (!spip_query("REPLACE $table (" . join(',', $cols) . ') VALUES (' . join(',', $values) . ')')) { + if (!spip_query("REPLACE $table (" . join(',', array_keys($values)) . ') VALUES (' . join(',', $values) . ')')) { echo "--><br><font color='red'><b>"._T('avis_erreur_mysql')."</b></font>\n<font color='black'><tt>".spip_sql_error()."</tt></font>\n<!--"; $GLOBALS['erreur_restauration'] = true; }