X-Git-Url: http://git.cyclocoop.org/?p=ptitvelo%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Fbase%2Fdump.php;fp=www%2Fecrire%2Fbase%2Fdump.php;h=8b2709d3aa12c55b2dc0a09421221d2d67387f4e;hp=1ef8d30bb573aa32f306c5be26466bc50c8246be;hb=d18fcb8f27a4016e3fa7b50a9b2255d529dca543;hpb=e847eea4a82a7396dd0abf860f9b30d654f38629 diff --git a/www/ecrire/base/dump.php b/www/ecrire/base/dump.php index 1ef8d30..8b2709d 100644 --- a/www/ecrire/base/dump.php +++ b/www/ecrire/base/dump.php @@ -78,6 +78,18 @@ function base_lister_toutes_tables($serveur='', $tables=array(), $exclude = arra return $res; } +/** + * Retrouver le prefixe des tables + * @param string $serveur + * @return string + */ +function base_prefixe_tables($serveur=''){ + spip_connect($serveur); + $connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0]; + $prefixe = $connexion['prefixe']; + return $prefixe; +} + /** * Fabrique la liste a cocher des tables a traiter (copie, delete, sauvegarde) @@ -510,9 +522,13 @@ function base_copier_tables($status_file, $tables, $serveur_source, $serveur_des $trouver_table = charger_fonction('trouver_table','base'); foreach ($tables as $table){ - // en principe, pas de spip_ dans le nom de table passe a trouver_table - $desc_source = $trouver_table(preg_replace(",^spip_,","",$table), $serveur_source, false); - if (!$desc_source) + // si table commence par spip_ c'est une table SPIP, renommer le prefixe si besoin + // sinon chercher la vraie table + $desc_source = false; + if (strncmp($table,"spip_",5)==0){ + $desc_source = $trouver_table(preg_replace(",^spip_,","",$table), $serveur_source, true); + } + if (!$desc_source OR !isset($desc_source['exist']) OR !$desc_source['exist']) $desc_source = $trouver_table($table, $serveur_source, false); // verifier que la table est presente dans la base source @@ -550,6 +566,9 @@ function base_copier_tables($status_file, $tables, $serveur_source, $serveur_des // mais si ca renvoie false c'est une erreur fatale => abandon if ($inserer_copie($table,$rows,$desc_dest,$serveur_dest)===false) { // forcer la sortie, charge a l'appelant de gerer l'echec + spip_log("Erreur fatale dans $inserer_copie table $table","dump"._LOG_ERREUR); + $status['errors'][] = "Erreur fatale lors de la copie de la table $table"; + ecrire_fichier($status_file,serialize($status)); // copie finie return true; } @@ -621,15 +640,23 @@ function base_copier_tables($status_file, $tables, $serveur_source, $serveur_des function base_inserer_copie($table,$rows,$desc_dest,$serveur_dest){ // verifier le nombre d'insertion - $nb1 = sql_countsel($table); + $nb1 = sql_countsel($table,'','','',$serveur_dest); // si l'enregistrement est deja en base, ca fera un echec ou un doublon $r = sql_insertq_multi($table,$rows,$desc_dest,$serveur_dest); - $nb = sql_countsel($table); + $nb = sql_countsel($table,'','','',$serveur_dest); if ($nb-$nb1