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