/** * 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); }
/** * 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; }
/** * 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; }
/** * 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; }
/** * 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)); }
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); }