Ejemplo n.º 1
0
/**
 * 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);
    }
}
Ejemplo n.º 2
0
/**
 * 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;
}