From 82450e514ae6a069a85a4f5e10c6b94ce3db155f Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Fri, 5 Oct 2007 12:23:46 +0000
Subject: [PATCH] =?UTF-8?q?Installation=20plus=20propre,=20sans=20message?=
 =?UTF-8?q?=20d'erreur.=20Attention,=20la=20fonction=20d'abstraction=20{{{?=
 =?UTF-8?q?showbase}}}=20introduite=20[10371]=C2=A0change=20l=C3=A9g=C3=A8?=
 =?UTF-8?q?rement=20de=20sp=C3=A9cification:=20si=20son=20argument=20est?=
 =?UTF-8?q?=20fourni,=20il=20est=20pris=20tel=20quel=20comme=20op=C3=A9ran?=
 =?UTF-8?q?de=20de=20ILIKE.=20Rien=20de=20chang=C3=A9=20si=20ps=20d'argume?=
 =?UTF-8?q?nt.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/base/abstract_sql.php | 19 +++++++++++--------
 ecrire/install/etape_3.php   | 23 +++++++++++------------
 2 files changed, 22 insertions(+), 20 deletions(-)

diff --git a/ecrire/base/abstract_sql.php b/ecrire/base/abstract_sql.php
index 53f8722a0e..638a38a000 100644
--- a/ecrire/base/abstract_sql.php
+++ b/ecrire/base/abstract_sql.php
@@ -49,9 +49,12 @@ function sql_get_charset($charset, $serveur=''){
   // le nom http du charset differe parfois du nom SQL utf-8 ==> utf8 etc.
 	$desc = spip_connect($serveur);
 	$c = @$desc['charsets'][$charset];
-	if (!$c) return false;
-	if (!function_exists($f=@$desc['get_charset'])) return false;
-	if ($f($c, $serveur)) return $c;
+	if ($c) {
+		if (function_exists($f=@$desc['get_charset'])) 
+			if ($f($c, $serveur)) return $c;
+	}
+	spip_log("SPIP ne connait pas les Charsets disponibles sur le serveur $serveur. Le serveur choisira seul.");
+	return false;
 }
 
 // Cette fonction est systematiquement appelee par les squelettes
@@ -174,15 +177,15 @@ function sql_replace($table, $values, $desc=array(), $serveur='')
 }
 
 // http://doc.spip.org/@sql_showbase
-function sql_showbase($spip=true, $serveur='')
+function sql_showbase($spip=NULL, $serveur='')
 {
-	if ($spip){
+	if ($spip == NULL){
 		$connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0];
-		$prefixe = $connexion['prefixe'];
-	} else $prefixe ='';
+		$spip = $connexion['prefixe'] . '%';
+	}
 	
 	$f = sql_serveur('showbase', $serveur);
-	return $f("$prefixe%", $serveur);
+	return $f($spip, $serveur);
 }
 
 // http://doc.spip.org/@sql_showtable
diff --git a/ecrire/install/etape_3.php b/ecrire/install/etape_3.php
index cbd173f654..8535ff4172 100644
--- a/ecrire/install/etape_3.php
+++ b/ecrire/install/etape_3.php
@@ -74,15 +74,10 @@ function install_bases(){
 
 	$GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix;
 	$GLOBALS['connexions'][$server_db]['db'] = $sel_db;
-	// s'il y a erreur c'est qu'elle est nouvelle
-	$nouvelle = !@$fquery("SELECT COUNT(*) FROM spip_meta", $server_db);
-
-	if ($nouvelle) {
-		// rouvrir la connexion apres l'erreur
-		$GLOBALS['connexions'][$server_db] = spip_connect_db($adresse_db, 0, $login_db, $pass_db, '', $server_db);
-		$GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix;
-		$GLOBALS['connexions'][$server_db]['db'] = $sel_db;
 
+	$old = sql_showbase($table_prefix  . "_meta", $server_db);
+	if ($old) $old = sql_fetch($old, $server_db);
+	if (!$old) {
 
 		// Si possible, demander au serveur d'envoyer les textes
 		// dans le codage std de SPIP,
@@ -97,8 +92,12 @@ function install_bases(){
 				$charset['collation'];
 			$GLOBALS['meta']['charset_sql_connexion'] = 
 				$charset['charset'];
-		} else spip_log(_DEFAULT_CHARSET . " inconnu du serveur SQL");
-
+			$charsetbase = $charset['charset'];
+		} else {
+			spip_log(_DEFAULT_CHARSET . " inconnu du serveur SQL");
+			$charsetbase = 'standard';
+		}
+		spip_log("Creation des tables. Codage $charsetbase");
 		creer_base($server_db); // AT LAST
 
 		// memoriser avec quel charset on l'a creee
@@ -111,7 +110,7 @@ function install_bases(){
 	} else {
 
 	  // pour recreer les tables disparues au besoin
-
+	  spip_log("Table des Meta deja la. Verification des autres.");
 	  creer_base($server_db); 
 
 	  $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db);
@@ -130,7 +129,7 @@ function install_bases(){
 	: test_rappel_nom_base_mysql($server_db);
 
 	$result_ok = @$fquery("SELECT COUNT(*) FROM spip_meta", $server_db);
-	if (!$result_ok) return "<!--\n$nouvelle $ligne_rappel\n-->";
+	if (!$result_ok) return "<!--\nvielle = $old rappel= $ligne_rappel\n-->";
 
 	if($chmod) {
 		install_fichier_connexion(_FILE_CHMOD_TMP, "@define('_SPIP_CHMOD', ". sprintf('0%3o',$chmod).");\n");
-- 
GitLab