From 17f00975486d28e12a4773ebb0a2b12b1d211da4 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Mon, 30 Jan 2006 17:29:30 +0000 Subject: [PATCH] Le script de restauration n'etait pas vraiment surchargeable car la fonction import_all_dist se contentait de faire l'authentification ftp, et declenchait une redirection provoquant l'appel d'une fonction import_init non surchargeable dans ce seul contexte. A present, c'est a nouveau import_all qui est appelee et elle s'apercoit qu'elle a deja authentifie, donc passe a la suite. Cette strategie fait migrer dans le script central le test (auparavant dans le script d'accueil), d'une restauration interrompue, mais c'est plus logique. --- ecrire/exec_accueil.php | 11 ---- ecrire/exec_import_all.php | 54 ++++++++++++++----- ecrire/inc_import.php | 105 +++++++++++++++++-------------------- ecrire/index.php | 6 +++ 4 files changed, 95 insertions(+), 81 deletions(-) diff --git a/ecrire/exec_accueil.php b/ecrire/exec_accueil.php index 7af4911635..802270c48e 100644 --- a/ecrire/exec_accueil.php +++ b/ecrire/exec_accueil.php @@ -435,17 +435,6 @@ function accueil_dist() etat_base_accueil(); debut_droite(); -// -// Restauration d'une archive -// - -if ($meta["debut_restauration"]) { - @ignore_user_abort(1); - include_ecrire("inc_import"); - import_init(); - exit; - } - // // Articles post-dates en attente de publication // diff --git a/ecrire/exec_import_all.php b/ecrire/exec_import_all.php index b317608016..740a848b85 100644 --- a/ecrire/exec_import_all.php +++ b/ecrire/exec_import_all.php @@ -37,24 +37,50 @@ function verifier_version_sauvegarde ($archive) { return _T('avis_probleme_archive', array('archive' => $archive)); } -function import_all_dist() -{ +function import_all_check() { + global $archive; + + // cas de l'appel apres demande de confirmation if ($archive) { - $action = _T('info_restauration_sauvegarde', array('archive' => $archive)); - $commentaire = verifier_version_sauvegarde ($archive); - } + $action = _T('info_restauration_sauvegarde', array('archive' => $archive)); + $commentaire = verifier_version_sauvegarde ($archive); + } - debut_admin(generer_url_post_ecrire("import_all","archive=$archive"), $action, $commentaire); + // au tout premier appel, on ne revient pas de cette fonction + debut_admin(generer_url_post_ecrire("import_all","archive=$archive"), $action, $commentaire); - $archive = _DIR_SESSIONS . $archive; + // on est revenu: l'authentification ftp est ok + fin_admin($action); + // dire qu'on commence + ecrire_meta("request_restauration", serialize($_REQUEST)); + ecrire_meta("debut_restauration", "debut"); + ecrire_meta("status_restauration", "0"); + ecrire_metas(); + // se rappeler pour montrer illico ce qu'on fait + header('Location: ./'); +} + +function import_all_dist() +{ + // si l'appel est explicite, passer par l'authentification ftp + if (!$GLOBALS['meta']["debut_restauration"]) + import_all_check(); - ecrire_meta("debut_restauration", "debut"); - ecrire_meta("fichier_restauration", $archive); - ecrire_meta("status_restauration", "0"); - ecrire_metas(); - - fin_admin($action); - header("Location: ./"); + // puis commencer ou continuer + include_ecrire('inc_import'); + import_all_continue(array( +'spip_auteurs', +'spip_articles', +'spip_breves', +'spip_documents', +'spip_forum', +'spip_mots', +'spip_groupes_mots', +'spip_petitions', +'spip_rubriques', +'spip_signatures', +'spip_types_documents', +'spip_visites')); } ?> diff --git a/ecrire/inc_import.php b/ecrire/inc_import.php index fc323391ff..73f7d13bc5 100644 --- a/ecrire/inc_import.php +++ b/ecrire/inc_import.php @@ -10,11 +10,9 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ - -// if (!defined("_ECRIRE_INC_VERSION")) return; - +include_ecrire('inc_presentation'); include_ecrire ("inc_acces"); @@ -310,7 +308,6 @@ function import_objet_0_0($f, $gz=false) { $p = $pos + $abs_pos; ecrire_meta("status_restauration", "$p"); -// ecrire_metas(); return $import_ok = true; } @@ -321,8 +318,7 @@ function import_objet($f, $gz = false) { function import_fin() { // Effacer l'ancien acces admin - $query = "DELETE FROM spip_auteurs WHERE id_auteur=0"; - spip_query($query); + spip_query("DELETE FROM spip_auteurs WHERE id_auteur=0"); if ($charset = $GLOBALS['meta']['charset_restauration']) ecrire_meta('charset', $charset); @@ -344,8 +340,7 @@ function import_abandon() { ecrire_metas(); } - -function import_all($f, $gz=false) { +function import_tables($f, $tables, $gz=false) { global $import_ok; global $auth_htaccess; global $connect_id_auteur; @@ -405,30 +400,7 @@ function import_all($f, $gz=false) { // Destruction des entrees non restaurees - $query = "DELETE FROM spip_rubriques WHERE UNIX_TIMESTAMP(maj) < $my_date"; - spip_query($query); - $query = "DELETE FROM spip_breves WHERE UNIX_TIMESTAMP(maj) < $my_date"; - spip_query($query); - $query = "DELETE FROM spip_auteurs WHERE UNIX_TIMESTAMP(maj) < $my_date"; - spip_query($query); - $query = "DELETE FROM spip_articles WHERE UNIX_TIMESTAMP(maj) < $my_date"; - spip_query($query); - $query = "DELETE FROM spip_documents WHERE UNIX_TIMESTAMP(maj) < $my_date"; - spip_query($query); - $query = "DELETE FROM spip_types_documents WHERE UNIX_TIMESTAMP(maj) < $my_date"; - spip_query($query); - $query = "DELETE FROM spip_forum WHERE UNIX_TIMESTAMP(maj) < $my_date"; - spip_query($query); - $query = "DELETE FROM spip_mots WHERE UNIX_TIMESTAMP(maj) < $my_date"; - spip_query($query); - $query = "DELETE FROM spip_groupes_mots WHERE UNIX_TIMESTAMP(maj) < $my_date"; - spip_query($query); - $query = "DELETE FROM spip_petitions WHERE UNIX_TIMESTAMP(maj) < $my_date"; - spip_query($query); - $query = "DELETE FROM spip_signatures WHERE UNIX_TIMESTAMP(maj) < $my_date"; - spip_query($query); - $query = "DELETE FROM spip_visites WHERE UNIX_TIMESTAMP(maj) < $my_date"; - spip_query($query); + detruit_non_restaurees($mydate, $tables); import_fin(); @@ -438,9 +410,19 @@ function import_all($f, $gz=false) { } +// Destruction des entrees non restaurees + +function detruit_non_restaurees($mydate, $tables) +{ + foreach ($tables as $v) + spip_query("DELETE FROM $v WHERE UNIX_TIMESTAMP(maj) < $my_date"); +} + + function affiche_progression_javascript($abs_pos) { global $affiche_progression_pourcent; include_ecrire('inc_charsets'); + flush(); echo " -->\n<script type='text/javascript'><!--\n"; @@ -461,49 +443,60 @@ function affiche_progression_javascript($abs_pos) { flush(); } -function import_init() +function import_all_continue($tables) { - global $meta, $flag_gz, $buf, $pos, $abs_pos; - $archive = $meta["fichier_restauration"]; + global $meta, $flag_gz, $buf, $pos, $abs_pos; + + @ignore_user_abort(1); + + $request = unserialize($meta['request_restauration']); + + $archive = _DIR_SESSIONS . $request['archive']; + + debut_page(_T('titre_page_index'), "asuivre", "asuivre"); + + debut_gauche(); + + debut_droite(); + + if (!@is_readable($archive)) { + $texte_boite = _T('info_erreur_restauration'); + debut_boite_alerte(); + echo "<font FACE='Verdana,Arial,Sans,sans-serif' SIZE=4 color='black'><B>$texte_boite</B></font>"; + fin_boite_alerte(); + fin_html(); + exit; + } + $my_pos = $meta["status_restauration"]; - $ok = @is_readable($archive); - if ($ok) { - if (ereg("\.gz$", $archive)) { + if (ereg("\.gz$", $archive)) { $affiche_progression_pourcent = false; $taille = taille_en_octets($my_pos); $gz = true; - } - else { + } else { $affiche_progression_pourcent = filesize($archive); $taille = floor(100 * $my_pos / $affiche_progression_pourcent)." %"; $gz = false; } - $texte_boite = _T('info_base_restauration')."<p> + $texte_boite = _T('info_base_restauration')."<p> <form name='progression'><center><input type='text' size=10 style='text-align:center;' name='taille' value='$taille'><br> <input type='text' class='forml' name='recharge' value='"._T('info_recharger_page')."'></center></form>"; - } - else { - $texte_boite = _T('info_erreur_restauration'); - } debut_boite_alerte(); echo "<font FACE='Verdana,Arial,Sans,sans-serif' SIZE=4 color='black'><B>$texte_boite</B></font>"; fin_boite_alerte(); - fin_page("jimmac"); + fin_page(); echo "</HTML><font color='white'>\n<!--"; @flush(); - if ($ok) { - $_fopen = ($gz) ? gzopen : fopen; - $f = $_fopen($archive, "rb"); - $pos = 0; - $buf = ""; - if (!import_all($f, $gz)) import_abandon(); - } - else { - import_fin(); - } + $_fopen = ($gz) ? gzopen : fopen; + $f = $_fopen($archive, "rb"); + $pos = 0; + $buf = ""; + if (!import_tables($f, $tables, $gz)) + import_abandon(); + else import_fin(); } ?> diff --git a/ecrire/index.php b/ecrire/index.php index 5785be790a..d5836451bd 100644 --- a/ecrire/index.php +++ b/ecrire/index.php @@ -155,6 +155,12 @@ if (!isset($reinstall)) { } } +// +// Controle d' interruption d'une longue restauration +// +if ($GLOBALS['_COOKIE']['spip_admin'] AND $GLOBALS['meta']["debut_restauration"]) + $exec = 'import_all'; + $var_f = include_fonction($exec); $var_f(); -- GitLab