From 973be34995ef9edcf6020299ee40763fefca0fc1 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Mon, 22 Jan 2007 21:12:59 +0000
Subject: [PATCH] =?UTF-8?q?Pourquoi=20faire=20simple=20quand=20on=20peut?=
 =?UTF-8?q?=20faire=20compliqu=C3=A9:=20depuis=20la=20nuit=20des=20temps?=
 =?UTF-8?q?=20SPIP=20faisait=20une=20requete=20mysql=5Ffield=5Fname=20pour?=
 =?UTF-8?q?=20exporter=20une=20table=20alors=20que=20le=20spip=5Ffetch=5Fa?=
 =?UTF-8?q?rray=20qui=20suit=20contient=20aussi=20ces=20informations.=20Et?=
 =?UTF-8?q?=20un=20peu=20plus=20de=20lisibilit=C3=A9.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/exec/export_all.php | 11 ++++-------
 ecrire/inc/export.php      | 34 +++++++++++++---------------------
 2 files changed, 17 insertions(+), 28 deletions(-)

diff --git a/ecrire/exec/export_all.php b/ecrire/exec/export_all.php
index 9a05e2bc3e..a6f43b1913 100644
--- a/ecrire/exec/export_all.php
+++ b/ecrire/exec/export_all.php
@@ -142,8 +142,6 @@ function exec_export_all_dist()
 	echo "<div style='text-align: left'>\n";
 	$etape = 1;
 	foreach($tables_for_dump as $table){
-
-		$liens = $tables_for_link[$table];
 		if ($etape_actuelle <= $etape) {
 		  $r = spip_query("SELECT COUNT(*) FROM $table");
 		  $r = spip_fetch_array($r, SPIP_NUM);
@@ -151,14 +149,13 @@ function exec_export_all_dist()
 		  echo "\n<br /><strong>",$etape, '. ', $table,"</strong> ";
 		  if (!$r) echo _T('texte_vide');
 		  else {
-		    $cpt = export_objets($table, $liens, $etape, $sous_etape,$dir, $archive, $gz, $r);
-			$filetable = $dir . $archive . '_' . $etape;
-			ramasse_parties($dir . $archive . ".$etape", $filetable, $cpt);
+		    $liens = $tables_for_link[$table];
+		    export_objets($table, $liens, $etape, $sous_etape,$dir, $archive, $gz, $r);
 		  }
+		  if ($GLOBALS['flag_ob_flush']) ob_flush();
+		  flush();
 		  $etape++;
 		  $sous_etape = 0;
-		  $status_dump = "$gz::$archive::" . $etape . "::0";
-		  ecrire_meta("status_dump", $status_dump,'non');
 		}
 	}
 	echo "</div>\n";
diff --git a/ecrire/inc/export.php b/ecrire/inc/export.php
index c07a7e243c..a7ded7c451 100644
--- a/ecrire/inc/export.php
+++ b/ecrire/inc/export.php
@@ -61,8 +61,9 @@ define('_EXPORT_TRANCHES_LIMITE', 400);
 // La constante ci-dessus determine la taille des tranches,
 // chaque tranche etant copiee immediatement dans un fichier 
 // et son numero memorisee dans le serveur SQL.
-// En cas d'abandon sur Time-out, le travail pourra ainsi avancer
-// charge a l'appelant de coller tous les morceaux de 1 a N
+// En cas d'abandon sur Time-out, le travail pourra ainsi avancer.
+// Au final, on regroupe les tranches en un seul fichier
+// et on memorise dans le serveur qu'on va passer a la table suivante.
 
 // http://doc.spip.org/@export_objets
 function export_objets($table, $liens, $etape, $cpt, $dir, $archive, $gz, $total) {
@@ -73,9 +74,6 @@ function export_objets($table, $liens, $etape, $cpt, $dir, $archive, $gz, $total
 
 	while (1){ // on ne connait pas le nb de paquets d'avance
 
-		if ($GLOBALS['flag_ob_flush']) ob_flush();
-		flush();
-
 		$string = build_while($debut, $table);
 		// attention $string vide ne suffit pas a sortir
 		// car les admins restreints peuvent parcourir
@@ -95,9 +93,14 @@ function export_objets($table, $liens, $etape, $cpt, $dir, $archive, $gz, $total
 	// a la relecture on en profitera pour mettre le cache a jour
 		$status_dump = "$gz::$archive::$etape::$cpt";
 		ecrire_meta("status_dump", $status_dump,'non');
+
 	}
 	echo " $total."; 
-	return $cpt;
+	$filetable = $dir . $archive . '_' . $etape;
+	ramasse_parties($dir . $archive . ".$etape", $filetable, $cpt);
+	$status_dump = "$gz::$archive::" . ($etape+1) . "::0";
+	ecrire_meta("status_dump", $status_dump,'non');
+
 }
 
 // Construit la version xml  des champs d'une table
@@ -109,27 +112,16 @@ function build_while($debut, $table) {
 	static $table_fields=array();
 
 	$result = spip_query("SELECT * FROM $table LIMIT $debut," . _EXPORT_TRANCHES_LIMITE);
-	// Recuperer les noms des champs
-	// Ces infos sont donnees par le abstract_showtable
-	// les instructions natives mysql ne devraient pas apparaitre ici
-	if (!isset($table_fields[$table])){
-		$nfields = mysql_num_fields($result);
-		for ($i = 0; $i < $nfields; ++$i)
-		  $table_fields[$table][$i] = mysql_field_name($result, $i);
-	} else	$nfields = count($table_fields[$table]);
 
 	$string = '';
-
-	$all = $connect_toutes_rubriques
-	  ||(!in_array('id_rubrique',$table_fields[$table]));
-
 	while ($row = spip_fetch_array($result,SPIP_ASSOC)) {
 		if ((!isset($row['impt']) OR $row['impt']=='oui')
-		AND ($all OR autoriser('publierdans','rubrique',$row['id_rubrique']))) {
+		AND ($connect_toutes_rubriques
+		     OR !isset($row['id_rubrique'])
+		     OR autoriser('publierdans','rubrique',$row['id_rubrique']))) {
 			$attributs = "";
 			$string .= "<$table$attributs>\n";
-			for ($i = 0; $i < $nfields; ++$i) {
-				$k = $table_fields[$table][$i];
+			foreach ($row as $k => $v) {
 				$string .= "<$k>" . text_to_xml($row[$k]) . "</$k>\n";
 			}
 			$string .= "</$table>\n\n";
-- 
GitLab