diff --git a/ecrire/base/abstract_sql.php b/ecrire/base/abstract_sql.php index 217b20a4ca361ac2d605ed047115f7c86a4b4527..8b5cec0c0151d9232343e1d2c57f0c76a4613b1d 100644 --- a/ecrire/base/abstract_sql.php +++ b/ecrire/base/abstract_sql.php @@ -103,10 +103,10 @@ function sql_free($res, $serveur='') } // http://doc.spip.org/@sql_insert -function sql_insert($table, $noms, $valeurs, $serveur='') +function sql_insert($table, $noms, $valeurs, $desc=array(), $serveur='') { $f = sql_serveur('insert', $serveur); - return $f($table, $noms, $valeurs); + return $f($table, $noms, $valeurs, $desc); } // http://doc.spip.org/@sql_update @@ -157,7 +157,7 @@ function sql_multi($sel, $lang, $serveur='') } // http://doc.spip.org/@sql_error -function sql_error($query, $serveur='') { +function sql_error($query='requete inconnue', $serveur='') { $f = sql_serveur('error', $serveur); return $f($query); } diff --git a/ecrire/base/db_mysql.php b/ecrire/base/db_mysql.php index cc35bf38700378b20516c514a49cbf6a06438d73..5efc983c76f2a243b085cfe5a7aa644da7f64839 100644 --- a/ecrire/base/db_mysql.php +++ b/ecrire/base/db_mysql.php @@ -352,8 +352,8 @@ function spip_mysql_free($r) { } // http://doc.spip.org/@spip_mysql_insert -function spip_mysql_insert($table, $champs, $valeurs, $ignore='') { - if (!spip_mysql_query("INSERT $ignore INTO $table $champs VALUES $valeurs")) +function spip_mysql_insert($table, $champs, $valeurs, $desc='') { + if (!spip_mysql_query("INSERT INTO $table $champs VALUES $valeurs")) return 0; $r = mysql_insert_id(); return $r ? $r : (($r===0) ? -1 : 0); diff --git a/ecrire/base/db_pg.php b/ecrire/base/db_pg.php index d8e51cfe864dbdf354df7f90403674038efe2301..6bfbbb74e6a3c82c5d09a7fa0a6a4ce7dab1f2cd 100644 --- a/ecrire/base/db_pg.php +++ b/ecrire/base/db_pg.php @@ -297,25 +297,31 @@ function spip_pg_free($res, $serveur='') { } // http://doc.spip.org/@spip_pg_insert -function spip_pg_insert($table, $champs, $valeurs, $ignore='') { - global $tables_principales; +function spip_pg_insert($table, $champs, $valeurs, $desc=array()) { + global $spip_pg_link, $table_prefix; - include_spip('base/serial'); - if (isset($tables_principales[$table]['key']["PRIMARY KEY"])) - $ret = " RETURNING " - . $tables_principales[$table]['key']["PRIMARY KEY"]; + if (!$desc) { + global $tables_principales; + include_spip('base/serial'); + $desc = @$tables_principales[$table]; + } + if (isset($desc['key']["PRIMARY KEY"])) + $ret = " RETURNING " . $desc['key']["PRIMARY KEY"]; else $ret = ''; if ($GLOBALS['table_prefix']) $table = preg_replace('/^spip/', $GLOBALS['table_prefix'], $table); - $r = pg_query("INSERT INTO $table $champs VALUES $valeurs $ret"); - if (!$r) return 0; - if (!$ret) return -1; - $r = pg_fetch_array($r, NULL, PGSQL_NUM); + $r = pg_query($q="INSERT INTO $table $champs VALUES $valeurs $ret"); + if ($r) { + if (!$ret) return 0; + if ($r = pg_fetch_array($r, NULL, PGSQL_NUM)) + return $r[0]; + } + spip_log("Erreur $q", 'pg'); // trace a minima + return -1; - return $r[0]; } // http://doc.spip.org/@spip_pg_update diff --git a/ecrire/inc/import_insere.php b/ecrire/inc/import_insere.php index a562d26b6070a251c3bae0ccf12bfb97bfcd55c4..be0a4bf24500832fa07ea545e508e41627451874 100644 --- a/ecrire/inc/import_insere.php +++ b/ecrire/inc/import_insere.php @@ -12,22 +12,30 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -// http://doc.spip.org/@insere_1_init -function insere_1_init($request) { +// table des translations - // preparation de la table des translations - $spip_translate = array( +$spip_translate = array( "type" => "VARCHAR(16) NOT NULL", "ajout" => "ENUM('0', '1')", "titre" => "text NOT NULL", "id_old" => "BIGINT (21) DEFAULT '0' NOT NULL", "id_new" => "BIGINT (21) DEFAULT '0' NOT NULL"); - $spip_translate_key = array( +$spip_translate_key = array( "PRIMARY KEY" => "id_old, id_new, type", "KEY id_old" => "id_old"); - spip_mysql_create('spip_translate', $spip_translate, $spip_translate_key, true); +// La rajouter ici car sql_insert en a besoin +global $tables_principales;; +$tables_principales['spip_translate'] = + array('field' => &$spip_translate, 'key' => &$spip_translate_key, 'join' => &$spip_signatures_join); + +// http://doc.spip.org/@insere_1_init +function insere_1_init($request) { + global $tables_principales; + $v = $tables_principales['spip_translate']; + sql_create('spip_translate', $v['field'], $v['key'], true); + // au cas ou la derniere fois ce serait terminee anormalement spip_query("DELETE FROM spip_translate"); return insere_1bis_init($request); @@ -40,6 +48,12 @@ function insere_1bis_init($request) { $t = array_keys($GLOBALS['tables_principales']); // ... mais pas cette table a cause de la duplication des login unset($t[array_search('spip_auteurs', $t)]); + // ni celle-ci, les qui est liee implicitement a la precedente + unset($t[array_search('spip_messages', $t)]); + // et pour celles-ci restent à programmer les regles + unset($t[array_search('spip_forum', $t)]); + unset($t[array_search('spip_syndic', $t)]); + unset($t[array_search('spip_signatures', $t)]); return $t; } @@ -87,19 +101,18 @@ function translate_init($request) { // http://doc.spip.org/@import_insere function import_insere($values, $table, $desc, $request, $atts) { + static $jesais = array(); + $type_id = $desc['key']["PRIMARY KEY"]; // reserver une place dans les tables principales si nouveau $ajout = 0; + if ((!function_exists($f = 'import_identifie_' . $type_id)) OR (!($n = $f($values, $table, $desc, $request)))) { - // pas d'importation de types_doc (a revoir) + // pas d'importation de types_doc (a revoir) if ($table == 'spip_types_documents') return; - $n = sql_insert($table, '', '()'); - if (!$n) { - $GLOBALS['erreur_restauration'] = sql_error(); - return; - } - $ajout = 1; + $n = sql_insert($table, '()', '()'); + $ajout=1; } if (is_array($n)) @@ -107,7 +120,7 @@ function import_insere($values, $table, $desc, $request, $atts) { else {$id = $n; $titre = "";} sql_insert('spip_translate', "(id_old, id_new, titre, type, ajout)", - "(". $values[$type_id] .",$id, " . _q($titre) . ", '$type_id', '$ajout')"); + "(". $values[$type_id] .",$id, " . _q($titre) . ", '$type_id', $ajout)"); } // Renumerotation des entites collectees @@ -131,14 +144,13 @@ function import_translate($values, $table, $desc, $request, $atts) { // Une synchronisation plus fine serait preferable, cf [8004] // http://doc.spip.org/@import_inserer_translate -function import_inserer_translate($values, $table, $desc, $request, $vals, $atts) { +function import_inserer_translate($values, $table, $desc, $request, $atts) { global $trans; $p = $desc['key']["PRIMARY KEY"]; $v = $values[$p]; if (!isset($trans[$p]) OR !isset($trans[$p][$v]) OR $trans[$p][$v][2]){ - spip_query("REPLACE $table (" . join(',',array_keys($values)) . ') VALUES (' .substr($vals,1) . ')'); - + sql_replace($table, $values, $desc); $on = isset($atts['on']) ? ($atts['on']) : ''; $off = isset($atts['off']) ? ($atts['off']) : ''; if ($on OR $off) { @@ -164,19 +176,15 @@ function import_inserer_translate($values, $table, $desc, $request, $vals, $atts // http://doc.spip.org/@import_translate_std function import_translate_std($values, $table, $desc, $request, $atts) { - $vals = ''; - foreach ($values as $k => $v) { if ($k=='id_parent' OR $k=='id_secteur') $k = 'id_rubrique'; else if (($k=='chapo') AND ($v[0]=='=') AND preg_match(_RACCOURCI_CHAPO, substr($v,1), $m)) $v = '=[->' . substr($v,1) . ']'; - $v = importe_raccourci($k,importe_translate_maj($k, $v)); - - $vals .= "," . _q($v); + $values[$k]= importe_raccourci($k,importe_translate_maj($k, $v)); } - import_inserer_translate($values, $table, $desc, $request, $vals, $atts); + import_inserer_translate($values, $table, $desc, $request, $atts); } // http://doc.spip.org/@import_translate_spip_documents @@ -188,14 +196,13 @@ function import_translate_spip_documents($values, $table, $desc, $request, $atts # $url .= $atts['dir_img']; // deja dans la BD importee $values['distant']= 'oui'; - $vals = ''; foreach ($values as $k => $v) { if ($k=='fichier') $v = $url .$v; else $v = importe_raccourci($k,importe_translate_maj($k, $v)); - $vals .= "," . _q($v); + $values[]= $v; } - import_inserer_translate($values, $table, $desc, $request, $vals, $atts); + import_inserer_translate($values, $table, $desc, $request, $atts); } // Fonction de renumerotation, par delegation aux fonction specialisees @@ -308,7 +315,7 @@ function import_identifie_parent_id_mot($id_groupe, $titre, $v) $r = sql_fetch(spip_query("SELECT id_mot FROM spip_mots WHERE titre=$titre AND id_groupe=$new" )); if ($r) return (0 - $r['id_mot']); } - $r = sql_insert('spip_mots', '', '()'); + $r = sql_insert('spip_mots', '()', '()'); spip_query("REPLACE spip_translate (id_old, id_new, titre, type, ajout) VALUES ($v,$r,$titre,'id_mot',1)"); return $r; } @@ -330,7 +337,7 @@ function import_identifie_parent_id_article($id_parent, $titre, $v) $r = sql_fetch(spip_query("SELECT id_article FROM spip_articles WHERE titre=$titre AND id_rubrique=$id_parent AND statut<>'poubelle'" )); if ($r) return (0 - $r['id_article']); - $r = sql_insert('spip_articles', '', '()'); + $r = sql_insert('spip_articles', '()', '()'); spip_query("REPLACE spip_translate (id_old, id_new, titre, type, ajout) VALUES ($v,$r,$titre,'id_article',1)"); return $r; } @@ -352,7 +359,7 @@ function import_identifie_parent_id_breve($id_parent, $titre, $v) $r = sql_fetch(spip_query("SELECT id_breve FROM spip_breves WHERE titre=$titre AND id_rubrique=$id_parent AND statut<>'refuse'" )); if ($r) return (0 - $r['id_breve']); - $r = sql_insert('spip_breves', '', '()'); + $r = sql_insert('spip_breves', '()', '()'); spip_query("REPLACE spip_translate (id_old, id_new, titre, type, ajout) VALUES ($v,$r,$titre,'id_breve',1)"); return $r; }