From 5043e4cd7e7d7c4191e3060a3aad9280047f9a8b Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sat, 3 Jun 2006 22:29:13 +0000
Subject: [PATCH] =?UTF-8?q?Permettre=20aux=20administrateurs=20restreints?=
 =?UTF-8?q?=20de=20sauvegarder=20la=20base=20dans=20leur=20r=C3=A9pertoire?=
 =?UTF-8?q?=20personnel?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/exec/admin_tech.php    | 95 ++++++++++++++++++-----------------
 ecrire/exec/configuration.php |  3 +-
 ecrire/exec/export_all.php    | 40 +++++++++------
 ecrire/inc/admin.php          | 28 ++++++++---
 ecrire/inc/boutons.php        |  4 +-
 ecrire/inc/utils.php          |  1 +
 6 files changed, 99 insertions(+), 72 deletions(-)

diff --git a/ecrire/exec/admin_tech.php b/ecrire/exec/admin_tech.php
index 43dbc16d27..7dc7a07a7c 100644
--- a/ecrire/exec/admin_tech.php
+++ b/ecrire/exec/admin_tech.php
@@ -16,65 +16,69 @@ include_spip('inc/presentation');
 
 function exec_admin_tech_dist()
 {
-  global $connect_statut, $connect_toutes_rubriques, $couleur_foncee, $flag_gz, $options;
+  global $connect_statut, $connect_login, $connect_toutes_rubriques, $couleur_foncee, $flag_gz, $options;
 
-debut_page(_T('titre_admin_tech'), "administration", "base");
+ debut_page(_T('titre_admin_tech'), "administration", "base");
 
+ echo "<br />";
 
-echo "<br>";
-
-if ($options == "avancees") {
-	echo "<br><br>";
-	gros_titre(_T('titre_admin_tech'));
-	barre_onglets("administration", "sauver");
-}
-
-
-debut_gauche();
-
-debut_boite_info();
-
-echo _T('info_gauche_admin_tech');
-
-fin_boite_info();
-
-debut_droite();
-
-if ($connect_statut != '0minirezo' OR !$connect_toutes_rubriques) {
+ if ($connect_statut != '0minirezo' ){
 	echo _T('avis_non_acces_page');
 	fin_page();
 	exit;
+ }
+
+ if  ($options == "avancees")
+ {
+	echo "<br /><br />";
+	gros_titre(_T('titre_admin_tech'));
+	if ($connect_toutes_rubriques) {
+		barre_onglets("administration", "sauver");
+		debut_gauche();
+		debut_boite_info();
+		echo _T('info_gauche_admin_tech');
+		fin_boite_info();
+		$file = joli_repertoire(_DIR_SESSIONS . _SPIP_DUMP);
+		$zfile = joli_repertoire(_DIR_SESSIONS . _SPIP_DUMP . '.gz');
+		$dir = joli_repertoire(_DIR_SESSIONS);
+	} else {
+		debut_gauche();
+		$dir = _DIR_TRANSFERT . $connect_login . '/';
+		$file = joli_repertoire($dir . _SPIP_DUMP);
+		$zfile = joli_repertoire($dir . _SPIP_DUMP . '.gz');
+		$dir = joli_repertoire($dir);
+	}
 }
 
+ debut_droite();
+
 //
 // Sauvegarde de la base
 //
 
-debut_cadre_relief();
-
-echo "<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=5 WIDTH=\"100%\">";
-echo "<TR><TD BGCOLOR='$couleur_foncee' BACKGROUND=''><B>";
-echo "<FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=3 COLOR='#FFFFFF'>";
-echo _T('texte_sauvegarde')."</FONT></B></TD></TR>";
-
-echo "<tr><td class='serif'>";
+ debut_cadre_relief();
 
- echo  generer_url_post_ecrire("export_all", "reinstall=non"),
+ echo "<TABLE BORDER='0' CELLSPACING='0' CELLPADDING='5' WIDTH=\"100%\">",
+   "<tr><td BGCOLOR='", $couleur_foncee, "' background=''><b>",
+   "<font face='Verdana,Arial,Sans,sans-serif' size='3' color='#FFFFFF'>",
+   _T('texte_sauvegarde'),
+   "</font></b></td></tr><tr><td class='serif'>",
+   generer_url_post_ecrire("export_all", "reinstall=non"),
    "\n<p align='justify'>",
    http_img_pack('warning.gif', _T('info_avertissement'), "width='48' height='48' align='right'"),
-   _T('texte_admin_tech_01', array('dossier'=>'<i>'.joli_repertoire(_DIR_SESSIONS).'</i>')),
+   _T('texte_admin_tech_01', array('dossier' => '<i>'.$dir.'</i>')),
    "<p>",
    _T('texte_admin_tech_02');
 
 if ($flag_gz) {
 	echo "\n<p align='justify'>"._T('texte_admin_tech_03')."<p>";
 	echo "\n<INPUT TYPE='radio' NAME='gz' VALUE='1' id='gz_on' CHECKED><label for='gz_on'> "._T('bouton_radio_sauvegarde_compressee',
-	array('fichier'=>'<b>'.joli_repertoire(_DIR_SESSIONS.'dump.xml.gz').'</b>'))." </label><BR>\n";
+	array('fichier'=>'<b>'.$zfile.'</b>'))." </label><BR>\n";
 	echo "\n<INPUT TYPE='radio' NAME='gz' VALUE='0' id='gz_off'><label for='gz_off'> "._T('bouton_radio_sauvegarde_non_compressee',
-	array('fichier'=>'<b>'.joli_repertoire(_DIR_SESSIONS.'dump.xml').'</b>'))." </label><BR>\n";
+	array('fichier'=>'<b>'.$file.'</b>'))." </label><BR>\n";
 }
 else {
-	echo "\n<p align='justify'>"._T('texte_sauvegarde_compressee', array('fichier'=>'<b>'.joli_repertoire(_DIR_SESSIONS).'dump.xml</b>'));
+	echo "\n<p align='justify'>"._T('texte_sauvegarde_compressee', array('fichier'=>'<b>'.$file.'</b>'));
 	echo "\n<INPUT TYPE='hidden' NAME='gz' VALUE='0' />";
 }
 
@@ -88,16 +92,16 @@ echo "</TABLE>";
 // Restauration de la base
 //
 
-if ($flag_gz) {
-	$fichier_defaut = 'dump.xml.gz';
-	$texte_compresse = _T('texte_compresse_ou_non')."&nbsp;";
-}
-else {
-	$fichier_defaut = 'dump.xml';
-	$texte_compresse = _T('texte_non_compresse')."&nbsp;";
-}
+ if ($connect_toutes_rubriques) {
+	if ($flag_gz) {
+		$fichier_defaut = _SPIP_DUMP . '.gz';
+		$texte_compresse = _T('texte_compresse_ou_non')."&nbsp;";
+	} else {
+		$fichier_defaut = _SPIP_DUMP;
+		$texte_compresse = _T('texte_non_compresse')."&nbsp;";
+	}
 
-echo	"<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=8 WIDTH=\"100%\">",
+	echo	"<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=8 WIDTH=\"100%\">",
 	"<TR><TD BGCOLOR='#EEEECC' BACKGROUND=''><B>",
 	"<FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=3 COLOR='#000000'>",
 	_T('texte_restaurer_base')."</FONT></B></TD></TR>",
@@ -112,12 +116,13 @@ echo	"<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=8 WIDTH=\"100%\">",
 	"\n</td></tr>",
 	"</TABLE>";
 
+ }
 
 //
 // Lien vers la reparation
 //
 
-if ($options == "avancees") {
+if ($options == "avancees" AND 	$connect_toutes_rubriques) {
 	$res = spip_mysql_version();
 	if ($res >= '3.23.14') {
 		echo "<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=8 WIDTH=\"100%\">";
diff --git a/ecrire/exec/configuration.php b/ecrire/exec/configuration.php
index 7893d0ee69..f1f9dc0e01 100644
--- a/ecrire/exec/configuration.php
+++ b/ecrire/exec/configuration.php
@@ -20,12 +20,13 @@ include_spip('inc/presentation');
 include_spip('inc/config');
 include_spip('inc/logos');
 
-if ($connect_statut != '0minirezo' OR !$connect_toutes_rubriques) {
+ if ($connect_statut != '0minirezo') {
 	echo _T('avis_non_acces_page');
 	fin_page();
 	exit;
 }
 
+if (!$connect_toutes_rubriques) redirige_par_entete(generer_url_ecrire('admin_tech','',true));
 
 //
 // Modifications
diff --git a/ecrire/exec/export_all.php b/ecrire/exec/export_all.php
index dd043675c6..95aab298d8 100644
--- a/ecrire/exec/export_all.php
+++ b/ecrire/exec/export_all.php
@@ -53,14 +53,19 @@ else{
 
 function exec_export_all_dist()
 {
-  global $archive, $debut_limit, $etape, $gz, $spip_version, $spip_version_affichee, $version_archive;
+  global $archive, $debut_limit, $etape, $gz, $spip_version, $spip_version_affichee, $version_archive, $connect_login, $connect_toutes_rubriques;
 
-	if (!$archive) {
-		if ($gz) $archive = "dump.xml.gz";
-		else $archive = "dump.xml";
+	if ($connect_toutes_rubriques) {
+		$dir = _DIR_SESSIONS;
+	} else {
+		$dir = _DIR_TRANSFERT . $connect_login . '/';
 	}
-	$partfile = $archive.".part";
-	
+
+  	if (!$archive) {
+		if ($gz) $archive = _SPIP_DUMP . '.gz';
+		else $archive = _SPIP_DUMP;
+	}
+  
 	// utiliser une version fraiche des metas (ie pas le cache)
 	include_spip('inc/meta');
 	lire_metas();
@@ -86,6 +91,9 @@ function exec_export_all_dist()
 
 	install_debut_html(_T('info_sauvegarde'));
 
+	$file = $dir . $archive;
+	$partfile = $file . ".part";
+
 	//if (!$etape) echo "<p><blockquote><font size=2>"._T('info_sauvegarde_echouee')." <a href='" . generer_url_ecrire("export_all","reinstall=non&etape=1&gz=$gz") . "'>"._T('info_procedez_par_etape')."</a></font></blockquote><p>";
 
 	$_fputs = ($gz) ? gzputs : fputs;
@@ -99,12 +107,12 @@ function exec_export_all_dist()
 		#ramasse_parties(_DIR_SESSIONS . $archive, $gz, _DIR_SESSIONS . $partfile);
 		// et au cas ou (le rammase_parties s'arrete si un fichier de la serie est absent)
 		// on ratisse large avec un preg_files
-		$liste = preg_files(_DIR_SESSIONS, "$archive\.part\.[0-9]*");
+		$liste = preg_files($file .  ".part\.[0-9]*");
 		foreach($liste as $dummy)
 			@unlink($dummy);
 
 		echo _T("info_sauvegarde")."<br/>";
-		$f = ($gz) ? gzopen(_DIR_SESSIONS . $archive, "wb") : fopen(_DIR_SESSIONS . $archive, "wb");
+		$f = ($gz) ? gzopen($file, "wb") : fopen($file, "wb");
 		if (!$f) {
 			echo _T('avis_erreur_sauvegarde', array('type'=>'.', 'id_objet'=>'. .'));
 			exit;
@@ -114,9 +122,9 @@ function exec_export_all_dist()
 		if ($gz) gzclose($f);
 		else fclose($f);
 	}
-	else{
+	else{ // reprise
 		echo _T("info_sauvegarde"). " (" . $status_dump[2] . ", " . $status_dump[3] . ")<br/>";
-		$f = ($gz) ? gzopen(_DIR_SESSIONS . $archive, "ab") : fopen(_DIR_SESSIONS . $archive, "ab");
+		$f = ($gz) ? gzopen($file, "ab") : fopen($file, "ab");
 		if (!$f) {
 			echo _T('avis_erreur_sauvegarde', array('type'=>'.', 'id_objet'=>'. .'));
 			exit;
@@ -191,16 +199,16 @@ function exec_export_all_dist()
 		}
 
 		ob_flush();flush();
-		ramasse_parties(_DIR_SESSIONS . $archive, $gz, _DIR_SESSIONS . $partfile);
+		ramasse_parties($file, $gz, $partfile);
 
-		$f = ($gz) ? gzopen(_DIR_SESSIONS . $archive, "ab") : fopen(_DIR_SESSIONS . $archive, "ab");
+		$f = ($gz) ? gzopen($file, "ab") : fopen($file, "ab");
 		$_fputs ($f, build_end_tag("SPIP")."\n");
 		if ($gz) gzclose($f);
 		else fclose($f);
 		
 		effacer_meta("status_dump");
 		ecrire_metas();
-		echo "<p>"._T('info_sauvegarde_reussi_01')."</b><p>"._T('info_sauvegarde_reussi_02', array('archive' => '<b>'.joli_repertoire(_DIR_SESSIONS.$archive).'</b>'))." <a href='./'>"._T('info_sauvegarde_reussi_03')."</a> "._T('info_sauvegarde_reussi_04')."\n";
+		echo "<p>"._T('info_sauvegarde_reussi_01')."</b><p>"._T('info_sauvegarde_reussi_02', array('archive' => '<b>'.joli_repertoire($file).'</b>'))." <a href='./'>"._T('info_sauvegarde_reussi_03')."</a> "._T('info_sauvegarde_reussi_04')."\n";
 	}
 	else{
 		if (!($timeout = ini_get('max_execution_time')*1000));
@@ -215,12 +223,12 @@ function exec_export_all_dist()
 			list($string,$status_dump)=export_objets($table, primary_index_table($table), $tables_for_link[$table],0, false, $i, _T("info_sauvegarde").", $table",$paquets);
 		  while ($string!=''){
 				if ($cpt == 0)
-					ramasse_parties(_DIR_SESSIONS . $archive, $gz, _DIR_SESSIONS . $partfile);
+					ramasse_parties($file, $gz, $partfile);
 
 				// on ecrit dans un fichier generique
-				ecrire_fichier (_DIR_SESSIONS .$partfile, $string);
+				ecrire_fichier ($partfile, $string);
 				// on le renomme avec un numero -> operation atomique en linux
-				rename(_DIR_SESSIONS .$partfile,_DIR_SESSIONS .$partfile.".$cpt");
+				rename($partfile,$partfile.".$cpt");
 				$cpt ++;
 				ecrire_meta("status_dump", implode("::",$status_dump));
 				#lire_metas();
diff --git a/ecrire/inc/admin.php b/ecrire/inc/admin.php
index fa88b58a5d..1d18e47aa7 100644
--- a/ecrire/inc/admin.php
+++ b/ecrire/inc/admin.php
@@ -18,14 +18,20 @@ function fichier_admin($action) {
 }
 
 function debut_admin($form, $action, $commentaire='') {
-	global $connect_statut;
+	global $connect_login, $connect_statut, $connect_toutes_rubriques;
 
 	if ((!$action) || ($connect_statut != "0minirezo")) {
 		include_spip('inc/minipres');
 		minipres(_T('info_acces_refuse'));
 	}
-	$fichier = fichier_admin($action);
-	if (@file_exists(_DIR_SESSIONS . $fichier)) {
+	if ($connect_toutes_rubriques) {
+		$dir = _DIR_SESSIONS;
+	} else {
+		$dir = _DIR_TRANSFERT . $connect_login . '/';
+
+	}
+	$signal = fichier_admin($action);
+	if (@file_exists($dir . $signal)) {
 		spip_log ("Action admin: $action");
 		return true;
 	}
@@ -42,11 +48,11 @@ function debut_admin($form, $action, $commentaire='') {
 		. "\n<p>"
 		. _T('info_creer_repertoire')
 		. "\n<p align='center'>\n<INPUT TYPE='text' NAME='fichier' CLASS='fondl' VALUE=\"".
-		 $fichier
+		 $signal
 		. "\" size='30'>"
 		. "\n<p>"
 		. _T('info_creer_repertoire_2',
-			array('repertoire' => joli_repertoire(_DIR_SESSIONS)))
+			array('repertoire' => joli_repertoire($dir)))
 		. "\n<p align='right'><INPUT TYPE='submit' VALUE='"
 		. _T('bouton_recharger_page')
 		. "' CLASS='fondo'>"
@@ -54,9 +60,15 @@ function debut_admin($form, $action, $commentaire='') {
 }
 
 function fin_admin($action) {
-	$fichier = fichier_admin($action);
-	@unlink(_DIR_SESSIONS . $fichier);
-	@rmdir(_DIR_SESSIONS . $fichier);
+	global $connect_login, $connect_toutes_rubriques;
+	if ($connect_toutes_rubriques) {
+		$dir = _DIR_SESSIONS;
+	} else {
+		$dir = _DIR_TRANSFERT . $connect_login . '/';
+	}
+	$signal = fichier_admin($action);
+	@unlink($dir . $signal);
+	@rmdir($dir . $signal);
 }
 
 
diff --git a/ecrire/inc/boutons.php b/ecrire/inc/boutons.php
index f2472ce388..55179498e9 100644
--- a/ecrire/inc/boutons.php
+++ b/ecrire/inc/boutons.php
@@ -68,8 +68,8 @@ function definir_barre_boutons() {
 		$boutons_admin['statistiques_visites']=
 		  new Bouton('statistiques-48.png', 'icone_statistiques_visites');
 	}
-	if ($GLOBALS['connect_statut'] == '0minirezo'
-		AND $GLOBALS['connect_toutes_rubriques']) {
+	if ($GLOBALS['connect_statut'] == '0minirezo') {
+
 		$boutons_admin['configuration']=
 		  new Bouton('administration-48.png', 'icone_configuration_site');
 	}
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index f375a9d359..76ad7f5e3a 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -949,6 +949,7 @@ function spip_initialisation() {
 	// qq chaines standard
 	define('_ACCESS_FILE_NAME', '.htaccess');
 	define('_AUTH_USER_FILE', '.htpasswd');
+	define('_SPIP_DUMP', 'dump.xml');
 
 	define('_DOCTYPE_ECRIRE', "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
 
-- 
GitLab