Пример #1
0
/**
 * fonction d'insertion en base lors de la copie de base a base
 *
 * @param string $table
 * @param array $rows
 * @param array $desc_dest
 * @param string $serveur_dest
 * @return int/bool
 */
function migration_envoi_inserer_copie_dist($table,$rows,$desc_dest,$serveur_dest){
	$data = array('table'=>$table,'rows'=>$rows,'desc_dest'=>$desc_dest,'serveur'=>$serveur_dest);

	$migration_envoi = charger_fonction('migration_envoi','action');
	$res = $migration_envoi('inserer_copie',$data);
	if ($res===false OR (!is_bool($res) AND !is_numeric($res))){
		// echec : stoppons la copie
		$s = lire_migration_vers_status();
		$s['status'] = 'abort';
		$s['debug'] = $GLOBALS['debug_migration'];
		ecrire_migration_status('vers',$s);
		return false;
	}
	return $res;
}
Пример #2
0
/**
 * Verifier si le fichier de destination est deja la et OK
 * @param string $file
 * @param string $size
 * @param string $md5
 * @param string $dir_dest
 * @param bool $init
 * @return bool
 */
function migration_envoi_stat_file_dest_dist($file,$size,$md5,$dir_dest,$init) {
	if ($dir_dest==_DIR_IMG) $dir_dest='_DIR_IMG';
	if ($dir_dest==_DIR_RACINE."squelettes/") $dir_dest='_DIR_SQUELETTES';
	$data = array('file'=>$file,'size'=>$size,'md5'=>$md5,'dir_dest'=>$dir_dest, 'init'=>$init);

	$migration_envoi = charger_fonction('migration_envoi','action');
	$res = $migration_envoi('stat_file_dest',$data);
	if (is_string($res) AND !is_numeric($res)){
		// echec : stoppons la copie
		$s = lire_migration_vers_status();
		$s['status'] = 'abort';
		$s['debug'] = $GLOBALS['debug_migration'];
		ecrire_migration_status('vers',$s);
		return false;
	}
	return $res;
}
Пример #3
0
/**
 * Ecrire un morceau du fichier de destination
 * @param string $file
 * @param string $d
 * @param string $dir_dest
 * @return bool
 */
function migration_envoi_fichier_ecrire_dist($file,$d,$dir_dest) {
	if ($dir_dest==_DIR_IMG) $dir_dest='_DIR_IMG';
	if ($dir_dest==_DIR_RACINE."squelettes/") $dir_dest='_DIR_SQUELETTES';

	$data = array('file'=>$file,'d'=>$d,'dir_dest'=>$dir_dest);

	$migration_envoi = charger_fonction('migration_envoi','action');
	$res = $migration_envoi('fichier_ecrire',$data);
	if ($res===false OR (!is_bool($res) AND !is_numeric($res))){
		// echec : stoppons la copie
		$s = lire_migration_vers_status();
		$s['status'] = 'abort';
		$s['debug'] = $GLOBALS['debug_migration'];
		ecrire_migration_status('vers',$s);
		return false;
	}
	return $res;
}
Пример #4
0
/**
 * Marquer la procedure de dump comme finie
 * @param string $status_file
 * @param string $action
 * @return void
 */
function migrer_vers_end($status_file, $action=''){
	if (!$status = migrer_vers_lire_status($status_file))
		return;

	$s = lire_migration_vers_status();
	if ($s['status']!=='end'){
		// signifier la fin au site distant
		$end = charger_fonction('end','migration/envoi');
		// passer l'id_auteur qui a fait la migration,
		// il faut s'assurer qu'il est bien webmestre a la fin de la migration !
		$s['distant'] = $end($s['status'],$GLOBALS['visiteur_session']['id_auteur'],isset($status['errors'])?$status['errors']:array());
		$s['status'] = 'end';
		ecrire_migration_status('vers',$s);
	}

	$status['etape'] = 'fini';
	ecrire_fichier(_DIR_TMP.basename($status_file).".txt", serialize($status));
}
Пример #5
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;
}