/** * Vider les tables de la base de destination * pour la copie dans une base * * peut etre utilise pour l'import depuis xml, * ou la copie de base a base (mysql<->sqlite par exemple) * * @param array $tables * @param array $exclure_tables * @param string $serveur */ function base_vider_tables_destination_copie($tables, $exclure_tables = array(), $serveur = '') { $trouver_table = charger_fonction('trouver_table', 'base'); spip_log('Vider ' . count($tables) . " tables sur serveur '{$serveur}' : " . join(', ', $tables), 'base.' . _LOG_INFO_IMPORTANTE); foreach ($tables as $table) { if (!in_array($table, $exclure_tables)) { // sur le serveur principal, il ne faut pas supprimer l'auteur loge ! if ($table != 'spip_auteurs' or $serveur != '') { // regarder si il y a au moins un champ impt='non' $desc = $trouver_table($table, $serveur); if (isset($desc['field']['impt'])) { sql_delete($table, "impt='oui'", $serveur); } else { sql_delete($table, "", $serveur); } } } } // sur le serveur principal, il ne faut pas supprimer l'auteur loge ! // Bidouille pour garder l'acces admin actuel pendant toute la restauration if ($serveur == '' and in_array('spip_auteurs', $tables) and !in_array('spip_auteurs', $exclure_tables)) { base_conserver_copieur(true, $serveur); sql_delete("spip_auteurs", "id_auteur>0", $serveur); } }
/** * Si le site local est sqlite, faisons une copie de la base * avant la migration, ca peut toujours servir * ainsi qu'une copie de l'auteur connecte, et on lui change sa session a la volee * pour qu'il ne perde pas la connexion * * @return bool */ function migration_backup_base_si_possible(){ $res = false; // si jamais la base est sqlite, faire une copie de backup // au cas ou le transfert foire include_spip('base/abstract_sql'); sql_version(); if (strncmp($GLOBALS['connexions'][0]['type'],'sqlite',6)==0){ if ($db =$GLOBALS['connexions'][0]['db'] AND is_file($f = _DIR_DB . $db . '.sqlite')) { $s = lire_migration_depuis_status(); @copy($f,_DIR_DB. ($g=$db.".sqlite.migration.backup")); if (@file_exists(_DIR_DB.$g)){ $s['backup'] = $g; ecrire_migration_status('depuis',$s); spip_log("base $f copiee dans $g avant migration",'migration'); $res = true; } } } // conserveur le copieur tant qu'il est encore temps // car apres les hits sont anonymes et ne permettent plus de le faire include_spip('base/dump'); if ($GLOBALS['visiteur_session']['id_auteur']>0){ $id_old = $GLOBALS['visiteur_session']['id_auteur']; base_conserver_copieur(); $auteur = sql_fetsel('*','spip_auteurs','id_auteur='.intval(-$id_old)); $session = charger_fonction('session','inc'); $session($auteur); // creer la nouvelle session avec -id_auteur $session(); // la charger dans $GLOBALS['visiteur_session'] $session($id_old); // supprimer l'ancinne session } return $res; }