From 9c4034f72b4041e581b4713200147e4e8a2ec352 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Thu, 11 Oct 2007 11:11:40 +0000
Subject: [PATCH] =?UTF-8?q?Installation=20cl=C3=A9=20en=20mains=20des=20ba?=
 =?UTF-8?q?ses=20de=20donn=C3=A9es=20suppl=C3=A9mentaires.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Le script d'installation de SPIP possède à présent dans sa dernière page un formulaire supplémentaire permettant de déclarer d'autres bases que celle que SPIP vient d'installer ou de retrouver. Ce formulaire est presque le même que celui de la base principale, et il en reprend d'ailleurs les paramètres de connexion comme valeur par défaut. Il est possible de déclarer plusieurs bases, et sur plusieurs serveurs, le formulaire bouclant sur lui-même, en listant toutes les bases déjà déclarées puis en proposant toutes les bases encore déclarables repérées sur le serveur indiqué à chaque fois. Seront listés également les fichiers de connexions issus d'une éventuelle mutualisation à répertoire de connexion partagé (cf [10463]; pour le multi-base en général voir [10183] et [10113]).

A noter que la fonction essayant de retrouver les paramètres de connexion dans une installation inachevée ne marchait plus; c'est réparé.
---
 ecrire/exec/install.php    | 164 +++++++++++++++++++++++++++++++++++++
 ecrire/install/etape_1.php | 113 ++++---------------------
 ecrire/install/etape_2.php |  73 ++++++-----------
 ecrire/install/etape_3.php |  77 +++++++++--------
 ecrire/install/etape_4.php |  59 ++++++++-----
 5 files changed, 284 insertions(+), 202 deletions(-)

diff --git a/ecrire/exec/install.php b/ecrire/exec/install.php
index 86705321b9..8011e9a29b 100644
--- a/ecrire/exec/install.php
+++ b/ecrire/exec/install.php
@@ -45,6 +45,33 @@ function install_fichier_connexion($nom, $texte)
 	ecrire_fichier($nom, $texte);
 }
 
+function analyse_fichier_connection($file)
+{
+  
+	$s = @join('', @file($file));
+	if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) {
+		array_shift($regs);
+		return $regs;
+	} else if (preg_match("#spip_connect_db\('([^']*)','([^']*)','([^']*)','(.*)'#", $s, $regs)) {
+			if ($port_db = $regs[2]) $regs[1] .= ':'.$port_db;
+			$regs[2] = $regs[3];
+			array_shift($regs);
+			return $regs;
+	}
+	return '';
+}
+
+function bases_referencees($exclu='')
+{
+	$tables = array();
+	foreach(preg_files(_DIR_CONNECT, '.php$') as $f) {
+		if ($f != $exclu AND analyse_fichier_connection($f))
+			$tables[]= basename($f, '.php');
+	}
+	return $tables;
+}
+
+
 //
 // Verifier que l'hebergement est compatible SPIP ... ou l'inverse :-)
 // (sert a l'etape 1 de l'installation)
@@ -181,4 +208,141 @@ function fieldset($legend, $champs = array(), $horchamps='') {
 	return $fieldset;
 }
 
+function install_connexion_form($db, $login, $pass, $predef, $hidden, $etape)
+{
+	$pg = function_exists('pg_connect');
+	$mysql = function_exists('mysql_connect');
+
+	if ($predef[0] AND !is_string($predef[0]))
+		$server_db = _INSTALL_SERVER_DB;
+	else if (!($pg AND $mysql))
+		$server_db = $mysql ? 'mysql' : 'pg';
+	else {
+	  $server_db ='';
+	  $m = ($predef != 'mysql') ? '' : " selected='selected'";
+	  $p = ($predef != 'pg') ? '' : " selected='selected'";
+	}
+
+	return generer_form_ecrire('install', (
+	  "\n<input type='hidden' name='etape' value='$etape' />" 
+	. $hidden
+	. (_request('echec')?
+			("<p><b>"._T('avis_connexion_echec_1').
+			"</b></p><p>"._T('avis_connexion_echec_2')."</p><p style='font-size: small;'>"._T('avis_connexion_echec_3')."</p>")
+			:"")
+
+	. ($server_db
+		? '<input type="hidden" name="server_db" value="'.$server_db.'" />'
+		: ('<fieldset><legend>'
+		._L('Indiquer le type de base de donn&eacute;es :')
+		. "\n<select name='server_db'>"
+		. ($mysql
+			? "<option value='mysql'$m>"._L('MySQL')."</option>"
+			: '')
+		. ($pg
+			? "<option value='pg'$p>"._L('PostGreSQL')."</option>"
+			: '')
+		   . "</select></legend></fieldset>")
+	)
+
+	. ($predef[1]
+	? '<h3>'._T('install_adresse_base_hebergeur').'</h3>'
+	: fieldset(_T('entree_base_donnee_1'),
+		array(
+			'adresse_db' => array(
+				'label' => $db[1],
+				'valeur' => $db[0]
+			),
+		)
+	)
+	)
+
+	. ($predef[2]
+	? '<h3>'._T('install_login_base_hebergeur').'</h3>'
+	: fieldset(_T('entree_login_connexion_1'),
+		array(
+			'login_db' => array(
+					'label' => $login[1],
+					'valeur' => $login[0]
+			),
+		)
+	)
+	)
+
+	. ($predef[3]
+	? '<h3>'._T('install_pass_base_hebergeur').'</h3>'
+	: fieldset(_T('entree_mot_passe_1'),
+		array(
+			'pass_db' => array(
+				'label' => $pass[1],
+				'valeur' => $pass[0]
+			),
+		)
+	)
+	)
+
+	. bouton_suivant()));
+
+}
+
+// 4 valeurs qu'on reconduit d'un script a l'autre
+// sauf s'ils sont predefinis.
+
+function predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db)
+{
+	return (defined('_INSTALL_HOST_DB')
+		? ''
+		: "\n<input type='hidden' name='adresse_db'  value=\"".htmlspecialchars($adresse_db)."\" />"
+	)
+	. (defined('_INSTALL_USER_DB')
+		? ''
+		: "\n<input type='hidden' name='login_db' value=\"".htmlspecialchars($login_db)."\" />"
+	)
+	. (defined('_INSTALL_PASS_DB')
+		? ''
+		: "\n<input type='hidden' name='pass_db' value=\"".htmlspecialchars($pass_db)."\" />"
+	)
+
+	. (defined('_INSTALL_SERVER_DB')
+		? ''
+		: "\n<input type='hidden' name='server_db' value=\"".htmlspecialchars($server_db)."\" />"
+	   );
+}
+
+// presentation des bases existantes
+
+function install_etape_liste_bases($server_db, $disabled=array())
+{
+	$result = sql_listdbs($server_db);
+	if (!$result) return '';
+	$bases = $checked = array();
+
+	while ($row = sql_fetch($result, $server_db)) {
+
+		$nom = array_shift($row);
+		$id = htmlspecialchars($nom);
+		$dis = in_array($nom, $disabled) ? " disabled='disabled'" : '';
+		$base = " name=\"choix_db\" value=\""
+		  . $nom
+		  . '"'
+		  . $dis
+		  . " type='radio' id='$id'";
+		$label = "<label for='$id'>"
+		. ($dis ? "<i>$nom</i>" : $nom)
+		. "</label>";
+
+		if (!$checked AND !$dis AND
+		    (($nom == $login_db) OR
+			($GLOBALS['table_prefix'] == $nom))) {
+			$checked = "<input$base checked='checked' />\n$label";
+		} else {
+			$bases[]= "<input$base />\n$label";
+		}
+	}
+	if (!$bases) return false;
+
+	if ($checked) {array_unshift($bases, $checked); $checked = true;}
+
+	return array($checked, $bases);
+}
 ?>
diff --git a/ecrire/install/etape_1.php b/ecrire/install/etape_1.php
index 2e835980e5..134d1decf4 100644
--- a/ecrire/install/etape_1.php
+++ b/ecrire/install/etape_1.php
@@ -10,42 +10,39 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
 // http://doc.spip.org/@inc_install_1
 function install_etape_1_dist()
 {
-
 	echo install_debut_html();
 
 	// stopper en cas de grosse incompatibilite de l'hebergement
 	tester_compatibilite_hebergement();
 
-	list($adresse_db, $login_db) = login_hebergeur();
-	$pass_db = '';
+	// Recuperer les anciennes donnees pour plus de facilite (si presentes)
+	$s = !@is_readable(_FILE_CONNECT_TMP) ? ''
+	  : analyse_fichier_connection(_FILE_CONNECT_TMP);
+
+	list($adresse_db, $login_db) = $s ? $s : login_hebergeur();
 
 	$chmod = (isset($_GET['chmod']) AND preg_match(',^[0-9]+$,', $_GET['chmod']))? sprintf('%04o', $_GET['chmod']):'0777';
-	// Recuperer les anciennes donnees pour plus de facilite (si presentes)
-	if (@file_exists(_FILE_CONNECT_TMP)) {
-		$s = @join('', @file(_FILE_CONNECT_TMP));
-		if (preg_match("#mysql_connect\([\"'](.*)[\"'],[\"'](.*)[\"'],[\"'](.*)[\"']\)#", $s, $regs)) {
-			$adresse_db = $regs[1];
-			$login_db = $regs[2];
-		}
-		else if (preg_match("#spip_connect_db\('(.*)','(.*)','(.*)','(.*)'#", $s, $regs)) {
-			$adresse_db = $regs[1];
-			if ($port_db = $regs[2]) $adresse_db .= ':'.$port_db;
-			$login_db = $regs[3];
-		}
-	}
-	if(@file_exists(_FILE_CHMOD_TMP)){
+
+	if(@is_readable(_FILE_CHMOD_TMP)){
 		$s = @join('', @file(_FILE_CHMOD_TMP));
 		if(preg_match("#define\('_SPIP_CHMOD', (.*)\)#", $s, $regs)) {
 			$chmod = $regs[1]; 
 		}
 	}
 
-	$req = array($adresse_db,$login_db,$pass_db);
+	$db = array($adresse_db, _T('entree_base_donnee_2'));
+	$login = array($login_db, _T('entree_login_connexion_2'));
+	$pass = array($pass_db, _T('entree_mot_passe_2'));
 
-	$predef = array(defined('_INSTALL_SERVER_DB'), defined('_INSTALL_HOST_DB'), defined('_INSTALL_USER_DB'), defined('_INSTALL_PASS_DB'));
+	$predef = array(defined('_INSTALL_SERVER_DB'), 
+			defined('_INSTALL_HOST_DB'),
+			defined('_INSTALL_USER_DB'),
+			defined('_INSTALL_PASS_DB'));
 
 	// ces deux chaines de langues doivent etre reecrites
 #	echo info_etape(_T('info_connexion_mysql'), _T('texte_connexion_mysql').aide ("install1"));
@@ -57,86 +54,10 @@ function install_etape_1_dist()
 			. _L("SPIP sait utiliser MySQL (le plus r&eacute;pandu) et PostGreSQL (support encore exp&eacute;rimental).")
 			.'</p>'
 			);
-	echo install_etape_1_form($req, $predef, "\n<input type='hidden' name='chmod' value='$chmod' />", 2);
+	echo install_connexion_form($db, $login, $pass, $predef, "\n<input type='hidden' name='chmod' value='$chmod' />", 2);
 	echo info_progression_etape(1,'etape_','install/');
 	echo install_fin_html();
 }
 
-function install_etape_1_form($req, $predef, $hidden, $etape)
-{
-
-	if ($predef[0])
-		$server_db = _INSTALL_SERVER_DB;
-	else if (
-	abs(function_exists('pg_connect'))
-	+ abs(function_exists('mysql_connect'))
-	<= 1)
-		$server_db = function_exists('mysql_connect')
-			? 'mysql'
-			: 'pg';
-	else
-		$server_db ='';
-
-  return generer_form_ecrire('install', (
-	  "\n<input type='hidden' name='etape' value='$etape' />" 
-	. $hidden
-	. (_request('echec')?
-			("<p><b>"._T('avis_connexion_echec_1').
-			"</b></p><p>"._T('avis_connexion_echec_2')."</p><p style='font-size: small;'>"._T('avis_connexion_echec_3')."</p>")
-			:"")
-
-	. ($server_db
-		? '<input type="hidden" name="server_db" value="'.$server_db.'" />'
-		: 
-		'<fieldset><legend>'._L('Indiquer le type de base de donn&eacute;es :')
-		. "\n<select name='server_db'>"
-		. (function_exists('mysql_connect')
-			? "<option value='mysql'>"._L('MySQL')."</option>"
-			: '')
-		. (function_exists('pg_connect')
-			? "<option value='pg'>"._L('PostGreSQL')."</option>"
-			: '')
-		. "</select></legend></fieldset>"
-	)
-
-	. ($predef[1]
-	? '<h3>'._T('install_adresse_base_hebergeur').'</h3>'
-	: fieldset(_T('entree_base_donnee_1'),
-		array(
-			'adresse_db' => array(
-				'label' => _T('entree_base_donnee_2'),
-				'valeur' => $req[0]
-			),
-		)
-	)
-	)
-
-	. ($predef[2]
-	? '<h3>'._T('install_login_base_hebergeur').'</h3>'
-	: fieldset(_T('entree_login_connexion_1'),
-		array(
-			'login_db' => array(
-				'label' => _T('entree_login_connexion_2'),
-				'valeur' => $req[1]
-			),
-		)
-	)
-	)
-
-	. ($predef[3]
-	? '<h3>'._T('install_pass_base_hebergeur').'</h3>'
-	: fieldset(_T('entree_mot_passe_1'),
-		array(
-			'pass_db' => array(
-				'label' => _T('entree_mot_passe_2'),
-				'valeur' => $req[2]
-			),
-		)
-	)
-	)
-
-	. bouton_suivant()));
-
-}
 
 ?>
diff --git a/ecrire/install/etape_2.php b/ecrire/install/etape_2.php
index bf233c2012..46eb1d7fae 100644
--- a/ecrire/install/etape_2.php
+++ b/ecrire/install/etape_2.php
@@ -57,10 +57,10 @@ function install_etape_2_dist()
 
 		$hidden = (defined('_SPIP_CHMOD')
 		? ''
-		: "\n<input type='hidden' name='chmod' value='".htmlspecialchars($chmod)."' />"
-			   );
+		: ("\n<input type='hidden' name='chmod' value='".htmlspecialchars($chmod)."' />"))
+		. predef_ou_cache($adresse_db,$login_db,$pass_db, $server_db);
 
-		echo install_etape_2_form($adresse_db,$login_db,$pass_db, $server_db, $hidden, $checked, $res);
+		echo install_etape_2_form($hidden, $checked, $res, 3);
 	} else  {
 		echo info_etape(_T('info_connexion_base'));
 		echo "<p class='resultat'><b>",
@@ -83,36 +83,28 @@ function install_etape_2_dist()
 
 function install_etape_2_bases($login_db, $server_db)
 {
-
-	$result = sql_listdbs($server_db);
-
-	$bases = $checked = '';
-	if ($result) {
-		while ($row = sql_fetch($result, $server_db)) {
-
-			$table_nom = array_shift($row);
-			$base = "<li>\n<input name=\"choix_db\" value=\"".$table_nom."\" type='radio' id='tab$i'";
-			$base_fin = " /><label for='tab$i'>".$table_nom."</label>\n</li>";
-			if (!$checked AND
-			    (($table_nom == $login_db) OR
-			     ($GLOBALS['table_prefix'] == $table_nom))) {
-				$checked = "$base checked='checked'$base_fin";
-			} else {
-				$bases .= "$base$base_fin\n";
-			}
-		}
-	}
-
-	if ($bases) 
+	$res =  install_etape_liste_bases($server_db);
+	if ($res) {
+		list($checked, $bases) = $res;
 		return array($checked, 
-		       "<label for='choix_db'><b>"._T('texte_choix_base_2')."</b><br />"._T('texte_choix_base_3')."</label>"
-		       .  "<ul>$checked$bases</ul><p>"._T('info_ou')." ");
-
+			     "<label for='choix_db'><b>"
+			     ._T('texte_choix_base_2')
+			     ."</b><br />"
+			     ._T('texte_choix_base_3')
+			     ."</label>"
+			     . "<ul>\n<li>"
+			     . join("</li>\n<li>",$bases)
+			     . "</li>\n</ul><p>"
+			     . _T('info_ou')
+			     . " "
+			     );
+	}
 	$res = "<b>"._T('avis_lecture_noms_bases_1')."</b>
 		"._T('avis_lecture_noms_bases_2')."<p>";
+
 	if ($login_db) {
-			// Si un login comporte un point, le nom de la base est plus
-			// probablement le login sans le point -- testons pour savoir
+		// Si un login comporte un point, le nom de la base est plus
+		// probablement le login sans le point -- testons pour savoir
 			$test_base = $login_db;
 			$ok = sql_selectdb($test_base, $server_db);
 			$test_base2 = str_replace('.', '_', $test_base);
@@ -135,29 +127,11 @@ function install_etape_2_bases($login_db, $server_db)
 	return array($checked, $res);
 }
 
-function install_etape_2_form($adresse_db,$login_db,$pass_db, $server_db, $hidden, $checked, $res)
+function install_etape_2_form($hidden, $checked, $res, $etape)
  {
 	return generer_form_ecrire('install', (
-	  "\n<input type='hidden' name='etape' value='3' />"
+	  "\n<input type='hidden' name='etape' value='$etape' />"
 	 . $hidden
-	. (defined('_INSTALL_HOST_DB')
-		? ''
-		: "\n<input type='hidden' name='adresse_db'  value=\"".htmlspecialchars($adresse_db)."\" />"
-	)
-	. (defined('_INSTALL_USER_DB')
-		? ''
-		: "\n<input type='hidden' name='login_db' value=\"".htmlspecialchars($login_db)."\" />"
-	)
-	. (defined('_INSTALL_PASS_DB')
-		? ''
-		: "\n<input type='hidden' name='pass_db' value=\"".htmlspecialchars($pass_db)."\" />"
-	)
-
-	. (defined('_INSTALL_SERVER_DB')
-		? ''
-		: "\n<input type='hidden' name='server_db' value=\"".htmlspecialchars($server_db)."\" />"
-	)
-
 	. (defined('_INSTALL_NAME_DB')
 		? '<h3>'._T('install_nom_base_hebergeur'). ' <tt>'._INSTALL_NAME_DB.'</tt>'.'</h3>'
 		: "\n<fieldset><legend>"._T('texte_choix_base_1')."</legend>\n"
@@ -180,5 +154,4 @@ function install_etape_2_form($adresse_db,$login_db,$pass_db, $server_db, $hidde
 
 	. bouton_suivant()));
 }
-
 ?>
diff --git a/ecrire/install/etape_3.php b/ecrire/install/etape_3.php
index a241cef9c2..c4835e6366 100644
--- a/ecrire/install/etape_3.php
+++ b/ecrire/install/etape_3.php
@@ -15,31 +15,8 @@ if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
 include_spip('inc/headers');
 include_spip('base/abstract_sql');
 
-function install_bases(){
+function install_bases($adresse_db, $login_db, $pass_db,  $server_db, $choix_db, $chmod_db){
 	global $spip_version;
-	$adresse_db = defined('_INSTALL_HOST_DB')
-		? _INSTALL_HOST_DB
-		: _request('adresse_db');
-
-	$login_db = defined('_INSTALL_USER_DB')
-		? _INSTALL_USER_DB
-		: _request('login_db');
-
-	$pass_db = defined('_INSTALL_PASS_DB')
-		? _INSTALL_PASS_DB
-		: _request('pass_db');
-
-	$choix_db = defined('_INSTALL_NAME_DB')
-		? _INSTALL_NAME_DB
-		: _request('choix_db');
-
-	$server_db = defined('_INSTALL_SERVER_DB')
-		? _INSTALL_SERVER_DB
-		: _request('server_db');
-
-	$chmod = defined('_SPIP_CHMOD')
-		? _SPIP_CHMOD
-		: _request('chmod');
 
 	// Prefix des tables :
 	// contrairement a ce qui est dit dans le message (trop strict mais c'est
@@ -132,8 +109,8 @@ function install_bases(){
 	$result_ok = @$fquery("SELECT COUNT(*) FROM spip_meta", $server_db);
 	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");
+	if ($chmod_db) {
+		install_fichier_connexion(_FILE_CHMOD_TMP, "@define('_SPIP_CHMOD', ". sprintf('0%3o',$chmod_db).");\n");
 	}
 
 	if (preg_match(',(.*):(.*),', $adresse_db, $r))
@@ -167,7 +144,7 @@ function install_propose_ldap()
 }
 
 
-function install_premier_auteur($email, $login, $nom, $pass)
+function install_premier_auteur($email, $login, $nom, $pass, $hidden)
 {
 	return info_etape(_T('info_informations_personnelles'),
 		     "<b>"._T('texte_informations_personnelles_1')."</b>" .
@@ -178,11 +155,8 @@ function install_premier_auteur($email, $login, $nom, $pass)
 			     )
 	. generer_form_ecrire('install', (
 			  "\n<input type='hidden' name='etape' value='4' />"
-			  . (defined('_INSTALL_SERVER_DB')
-			     ? ''
-			     : "\n<input type='hidden' name='server_db' value=\"".htmlspecialchars(_request('server_db'))."\" />"
-			     )
-			 . fieldset(_T('info_identification_publique'),
+			  . $hidden
+			  . fieldset(_T('info_identification_publique'),
 				    array(
 					  'nom' => array(
 							 'label' => "<b>"._T('entree_signature')."</b><br />\n"._T('entree_nom_pseudo_1')."\n",
@@ -216,8 +190,32 @@ function install_premier_auteur($email, $login, $nom, $pass)
 
 function install_etape_3_dist()
 {
+	$adresse_db = defined('_INSTALL_HOST_DB')
+		? _INSTALL_HOST_DB
+		: _request('adresse_db');
+
+	$login_db = defined('_INSTALL_USER_DB')
+		? _INSTALL_USER_DB
+		: _request('login_db');
+
+	$pass_db = defined('_INSTALL_PASS_DB')
+		? _INSTALL_PASS_DB
+		: _request('pass_db');
+
+	$server_db = defined('_INSTALL_SERVER_DB')
+		? _INSTALL_SERVER_DB
+		: _request('server_db');
+
+	$choix_db = defined('_INSTALL_NAME_DB')
+		? _INSTALL_NAME_DB
+		: _request('choix_db');
+
+	$chmod_db = defined('_SPIP_CHMOD')
+		? _SPIP_CHMOD
+		: _request('chmod');
+
 	$ldap_present = _request('ldap_present');
-	$res = $ldap_present ? '' : install_bases();
+	$res = $ldap_present ? '' : install_bases($adresse_db, $login_db, $pass_db,  $server_db, $choix_db, $chmod_db);
 
 	if (!function_exists('ldap_connect')) $ldap_present = true;
 
@@ -235,13 +233,20 @@ function install_etape_3_dist()
 		else
 			redirige_par_entete(generer_url_ecrire('install'));
 
+		$hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db)
+		  . (defined('_INSTALL_NAME_DB') ? ''
+		     :  ("\n<input type='hidden' name='sel_db' value='"
+			 . (($choix_db == "new_spip") ? _request('table_new'): $choix_db)
+			 . "' />"));
+
 		$res =  "<p class='resultat'><b>"
 		. _T('info_base_installee')
 		. "</b></p>"
 		. install_premier_auteur(_request('email'),
-					   _request('login'),
-					   _request('nom'),
-					   _request('pass'))
+					_request('login'),
+					_request('nom'),
+					_request('pass'),
+					 $hidden)
 		. ($ldap_present ?  '' : install_propose_ldap());
 	}
 
diff --git a/ecrire/install/etape_4.php b/ecrire/install/etape_4.php
index e993617bd0..27cc9f53cb 100644
--- a/ecrire/install/etape_4.php
+++ b/ecrire/install/etape_4.php
@@ -13,7 +13,6 @@
 if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
 
 include_spip('inc/headers');
-include_spip('inc/acces');
 
 function install_etape_4_dist()
 {
@@ -98,30 +97,50 @@ function install_etape_4_dist()
 	$config = charger_fonction('config', 'inc');
 	$config();
 
-	$htpasswd = _DIR_TMP . _AUTH_USER_FILE;
-	spip_unlink($htpasswd);
-	spip_unlink($htpasswd."-admin");
-	ecrire_acces();
+	$suite =  "\n<input type='hidden' name='etape' value='fin' />" 
+	  . bouton_suivant(_T('login_espace_prive'));
 
-	// on l'envoie dans l'espace prive
-	echo generer_form_ecrire('accueil', bouton_suivant());
-	echo info_progression_etape(4,'etape_','install/');
-	echo install_fin_html();
+	$adresse_db = defined('_INSTALL_HOST_DB')
+		? _INSTALL_HOST_DB
+		: _request('adresse_db');
 
-	// et on perennise
+	$login_db = defined('_INSTALL_USER_DB')
+		? _INSTALL_USER_DB
+		: _request('login_db');
 
-	$f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CHMOD_TMP);
-	if (!@rename(_FILE_CHMOD_TMP, $f)) {
-		if (@copy(_FILE_CHMOD_TMP, $f))
-			spip_unlink(_FILE_CHMOD_TMP);
-	}
+	$pass_db = defined('_INSTALL_PASS_DB')
+		? _INSTALL_PASS_DB
+		: _request('pass_db');
 
-	$f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CONNECT_TMP);
-	if (!@rename(_FILE_CONNECT_TMP, $f)) {
-		if (@copy(_FILE_CONNECT_TMP, $f))
-			@spip_unlink(_FILE_CONNECT_TMP);
-	}
+	$server_db = defined('_INSTALL_SERVER_DB')
+		? _INSTALL_SERVER_DB
+		: _request('server_db');
+
+	$choix = defined('_INSTALL_NAME_DB')
+		? ''
+	  : ("\n<input type='hidden' name='sel_db' value='" . _request('sel_db') . "' />\n");
 
+	echo generer_form_ecrire('install', $suite);
+	echo info_progression_etape(4,'etape_','install/');
+	echo autres_bases($adresse_db, $login_db, $pass_db, $server_db, $choix);
+	echo install_fin_html();
 }
 
+function autres_bases($adresse_db, $login_db, $pass_db, $server_db, $hidden)
+{
+	$tables =  bases_referencees(_FILE_CONNECT_TMP);
+
+	if ($tables)
+		$tables = '<br /><br />'
+		  . _L('Bases d&eacute;j&agrave; interrogeables:')
+		  . "<ul>\n<li>"
+		  . join("</li>\n<li>",  $tables)
+		  . "</li>\n</ul>";
+
+	return "<br ><div style='padding: 10px; border: 1px solid; text-align: left'>" 
+	.  _L("Toutefois, si vous avez une autre base de donn&eacute;es &agrave; interroger avec SPIP, sur ce serveur ou un autre, d&eacute;clarez-la d&egrave;s maintenant.")
+	  . $tables
+	  .  install_connexion_form(array($adresse_db), array($login_db), array($pass_db), array(), $hidden, 'sup1')
+	.  "</div>";
+}
 ?>
-- 
GitLab