From c405f293c93bcdfe7f5d44e8fcd8f694a1a6c65f Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Sun, 17 Dec 2006 18:47:30 +0000 Subject: [PATCH] "gerer le champ 'imp' a l'import " --- ecrire/inc/import_1_3.php | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/ecrire/inc/import_1_3.php b/ecrire/inc/import_1_3.php index 15fae536f1..31bb18dc20 100644 --- a/ecrire/inc/import_1_3.php +++ b/ecrire/inc/import_1_3.php @@ -114,6 +114,7 @@ function inc_import_1_3_dist($lecteur, $request, $gz='fread') { // http://doc.spip.org/@import_replace function import_replace($values, $table, $desc, $request) { + static $where=array(); if (!isset($desc['field']['impt'])) // pas de champ de gestion d'import if (!spip_query("REPLACE $table (" . join(',',array_keys($values)) . ') VALUES (' .join(',',array_map('_q', $values)) . ')')) { $GLOBALS['erreur_restauration'] = spip_sql_error(); @@ -122,7 +123,37 @@ function import_replace($values, $table, $desc, $request) { // la table contient un champ 'impt' qui permet de gerer des interdiction d'overwrite par import // impt=oui : la ligne est surchargeable par import // impt=non : la ligne ne doit pas etre ecrasee par un import - + // on essaye un insert si jamais la primary existe pas + if (!spip_query("INSERT $table (" . join(',',array_keys($values)) . ') VALUES (' .join(',',array_map('_q', $values)) . ')')) { + // il faut gerer l'existence de la primary, et l'autorisation ou non de mettre a jour + if (!isset($where[$table])){ + if (!isset($desc["PRIMARY KEY"])) + $GLOBALS['erreur_restauration'] = "champ 'impt' sans cle primaire sur la table $table"; + else { + $keys = $desc["PRIMARY KEY"]; + $keys = explode(",",$keys); + if (!is_array($keys)) $keys = array($keys); + $w = ""; + foreach($keys as $key){ + if (!isset($values[$key])){ + $GLOBALS['erreur_restauration'] = "champ $key manquant a l'import sur la table $table"; + $w .= " AND 0=1"; + continue; + } + $w .= " AND $key="._q($values[$key]); + } + $where[$table] = strlen($w)?substr($w,6):"0=1"; + } + } + if (isset($where[$table])) { + $set = ""; + foreach($values as $key=>$value) $set .= ",$key="._q($value); + $set = substr($set,1); + if (!spip_query("UPDATE $table SET $set WHERE ".$where[$table]." AND impt='oui'")) { + $GLOBALS['erreur_restauration'] = spip_sql_error(); + } + } + } } } -- GitLab