Skip to content
Extraits de code Groupes Projets
Valider c405f293 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

"gerer le champ 'imp' a l'import

"
parent 22bd9f97
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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();
}
}
}
}
}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter