/**
 * Vider les tables de la base de destination
 * pour la copie dans une base
 *
 * @param array $tables
 * @param string $serveur
 */
function migration_reception_vider_tables_destination_copie($status, $data){
	include_spip('base/dump');

	$status['status'] = 'vider';

	$status['progress']['vider'] = "X Suppression des tables";
	base_vider_tables_destination_copie($data['tables'],$data['exlure_tables'],'');
	update_migration_depuis($status);
	return true;
}
Exemplo n.º 2
0
/**
 * Preparer la table dans la base de destination :
 * la droper si elle existe (sauf si auteurs ou meta sur le serveur principal)
 * la creer si necessaire, ou ajouter simplement les champs manquants
 *
 * @param string $table
 * @param array $desc
 * @param string $serveur_dest
 * @param bool $init
 * @return array
 */
function base_preparer_table_dest($table, $desc, $serveur_dest, $init = false)
{
    $upgrade = false;
    // si la table existe et qu'on est a l'init, la dropper
    if ($desc_dest = sql_showtable($table, true, $serveur_dest) and $init) {
        if ($serveur_dest == '' and in_array($table, array('spip_meta', 'spip_auteurs'))) {
            // ne pas dropper auteurs et meta sur le serveur principal
            // faire un simple upgrade a la place
            // pour ajouter les champs manquants
            $upgrade = true;
            // coherence avec le drop sur les autres tables
            base_vider_tables_destination_copie(array($table), array(), $serveur_dest);
            if ($table == 'spip_meta') {
                // virer les version base qui vont venir avec l'import
                sql_delete($table, "nom like '%_base_version'", $serveur_dest);
                // hum casse la base si pas version_installee a l'import ...
                sql_delete($table, "nom='version_installee'", $serveur_dest);
            }
        } else {
            sql_drop_table($table, '', $serveur_dest);
            spip_log("drop table '{$table}' sur serveur '{$serveur_dest}'", 'dump.' . _LOG_INFO_IMPORTANTE);
        }
        $desc_dest = false;
    }
    // si la table n'existe pas dans la destination, la creer a l'identique !
    if (!$desc_dest) {
        spip_log("creation '{$table}' sur serveur '{$serveur_dest}'", 'dump.' . _LOG_INFO_IMPORTANTE);
        include_spip('base/create');
        creer_ou_upgrader_table($table, $desc, 'auto', $upgrade, $serveur_dest);
        $desc_dest = sql_showtable($table, true, $serveur_dest);
    }
    if (!$desc_dest) {
        spip_log("Erreur creation '{$table}' sur serveur '{$serveur_dest}'" . var_export($desc, 1), 'dump.' . _LOG_ERREUR);
    }
    return $desc_dest;
}
Exemplo n.º 3
0
/**
 * Preparer la table dans la base de destination :
 * la droper si elle existe (sauf si auteurs ou meta sur le serveur principal)
 * la creer si necessaire, ou ajouter simplement les champs manquants
 *
 * @param string $table
 * @param array $desc
 * @param string $serveur_dest
 * @param bool $init
 * @return array
 */
function base_preparer_table_dest($table, $desc, $serveur_dest, $init=false) {
	$upgrade = false;
	// si la table existe et qu'on est a l'init, la dropper
	if ($desc_dest=sql_showtable($table,true,$serveur_dest) AND $init) {
		if ($serveur_dest=='' AND in_array($table,array('spip_meta','spip_auteurs'))) {
			// ne pas dropper auteurs et meta sur le serveur principal
			// faire un simple upgrade a la place
			// pour ajouter les champs manquants
			$upgrade = true;
			// coherence avec le drop sur les autres tables
			base_vider_tables_destination_copie(array($table),array(),$serveur_dest);
			if ($table=='spip_meta'){
				// virer les version base qui vont venir avec l'import
				sql_delete($table, "nom like '%_base_version'",$serveur_dest);
				// hum casse la base si pas version_installee a l'import ...
				sql_delete($table, "nom='version_installee'",$serveur_dest);
			}
		}
		else {
			sql_drop_table($table, '', $serveur_dest);
			spip_log( "drop table '$table' sur serveur '$serveur_dest'",'dump.'._LOG_INFO_IMPORTANTE);
		}
		$desc_dest = false;
	}
	// si la table n'existe pas dans la destination, la creer a l'identique !
	if (!$desc_dest) {
		spip_log( "creation '$table' sur serveur '$serveur_dest'",'dump.'._LOG_INFO_IMPORTANTE);
		include_spip('base/create');
		// on fait la detection d'autoinc ici car creer_ou_upgrader_table ne sait pas forcement le faire
		// (depend de la version de SPIP)
		if (isset($GLOBALS['tables_principales'][$table]))
			$autoinc = true;
		elseif (isset($GLOBALS['tables_auxiliaires'][$table]))
			$autoinc = false;
		else {
			// essayer de faire au mieux !
			$autoinc = (isset($desc['key']['PRIMARY KEY'])
							AND strpos($desc['key']['PRIMARY KEY'],',')===false
							AND strpos($desc['field'][$desc['key']['PRIMARY KEY']],'default')===false);
		}
		creer_ou_upgrader_table($table, $desc, $autoinc, $upgrade,$serveur_dest);
		$desc_dest = sql_showtable($table,false,$serveur_dest);

		// si c'est une table de liens ancienne mode il faut aussi vider xx_liens si elle existe
		// (migration d'un SPIP 2 vers un SPIP 3 peuple)
		if (preg_match(",^spip_(auteurs|documents|mots)_(\w+)$,",$table,$m)
		  AND $m[2]!="liens"){
			base_vider_tables_destination_copie(array("spip_".$m[1]."_liens"),array(),$serveur_dest);
		}
	}
	if (!$desc_dest){
		spip_log( "Erreur creation '$table' sur serveur '$serveur_dest'".var_export($desc,1),'dump.'._LOG_ERREUR);
	}

	return $desc_dest;
}