Skip to content
Extraits de code Groupes Projets
Valider 17f00975 rédigé par esj's avatar esj
Parcourir les fichiers

Le script de restauration n'etait pas vraiment surchargeable car la fonction...

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.
parent 0f23fb3e
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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
//
......
......@@ -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'));
}
?>
......@@ -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();
}
?>
......@@ -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();
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter