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
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+0 −11
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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
//
+40 −14
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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);
		}

	// 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("fichier_restauration", $archive);
	ecrire_meta("status_restauration", "0");
	ecrire_metas();
	// se rappeler pour montrer illico ce qu'on fait 
	header('Location: ./');
}

  fin_admin($action);
  header("Location: ./");
function import_all_dist()
{
	// si l'appel est explicite, passer par l'authentification ftp
	if (!$GLOBALS['meta']["debut_restauration"])
		import_all_check();

	// 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'));		
}
?>
+49 −56
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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,20 +443,38 @@ 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"];

	@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)) {
			$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;
@@ -482,28 +482,21 @@ function import_init()
	$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();
	}
	if (!import_tables($f, $tables, $gz))
		import_abandon();
	else	import_fin();
}

?>
+6 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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();