Ejemplo n.º 1
0
/**
 * Action appelee en direct
 * pour envoyer des donnees au site distant
 * la clé partagée migration_key permet de proteger l'envoi un minimum
 * La clé s'invalide automatiquement apres un delai d'inactivité
 *
 * @return void
 */
function action_migration_envoi_dist($action, $data=''){

	if (!$s = lire_migration_vers_status()){
		return migration_envoi_fail('pas de migration initialisee');
	}

	if (!isset($s['target']) OR !isset($s['key'])){
		return migration_envoi_fail('migration mal definie (pas de target ou de key)');
	}

	$data = array('action'=>$action,'data'=>$data);
	if (!$data = migration_encoder_data($data,$s['key'])){
		return migration_envoi_fail('echec de l\'encodage');
	}

	include_spip('inc/migration_distant');
	// eviter une detection de boundary en la passant directement
	$boundary = substr(md5(rand().'spip'), 0, 8);
	$result = migration_recuperer_page($s['target'],false,false,null,array('action'=>'migration_reception','data'=>$data),$boundary, true);

	$result = trim($result);
	spip_log("envoi : action $action resultat =|".$result.'|=','migration');

	$GLOBALS['debug_migration'] = $result;
	if ($result==='FAIL')
		return false;
	else
		return unserialize($result);
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
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;
}
Ejemplo n.º 5
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));
}
Ejemplo n.º 6
0
function formulaires_assistant_migration_traiter_dist(){

	$s = lire_migration_vers_status();
	include_spip('base/dump');
	$status_file = base_dump_meta_name(substr(md5($s['target']),0,8));

	// ici on prend toutes les tables sauf celles exclues par defaut
	// (tables de cache en pratique)
	$exclude = lister_tables_noexport();
	list($tables,) = base_liste_table_for_dump($exclude);
	$tables = base_lister_toutes_tables('',$tables,$exclude);

	include_spip('inc/migrer_vers');
	$res = migrer_vers_init($status_file, $tables);

	if ($res===true) {
		// on lance l'action sauvegarder qui va realiser la sauvegarde
		// et finira par une redirection vers la page sauvegarde_fin
		include_spip('inc/actions');
		$redirect = generer_action_auteur('migrer_vers', $status_file);
		return array('message_ok'=>_T('migration:message_connexion_ok'),'redirect'=>$redirect);
	}
	else
		return array('message_erreur'=>$res);
}