From 976a3bc486304cdc0c5a059dfb2799c89565c031 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sun, 30 Sep 2007 20:34:31 +0000
Subject: [PATCH] =?UTF-8?q?Multi-base:=20suite=20au=20probl=C3=A8me=20pos?=
 =?UTF-8?q?=C3=A9=20dans=20[10460]=20sur=20la=20possibilit=C3=A9=20depuis?=
 =?UTF-8?q?=20[10457]=20d'avoir=20dans=20un=20unique=20r=C3=A9pertoire=20t?=
 =?UTF-8?q?ous=20les=20fichiers=20de=20connexions=20de=20sites=20partagean?=
 =?UTF-8?q?t=20les=20mes=20sources,=20la=20sp=C3=A9cification=20de=20ces?=
 =?UTF-8?q?=20fichiers,=20telle=20que=20d=C3=A9crite=20dans=20[10113]=20(e?=
 =?UTF-8?q?t=20reprise=20dans=20[10183]=20et=20http://www.spip-contrib.net?=
 =?UTF-8?q?/MultiBase)=20subit=20une=20modification.=20Sont=20introduites?=
 =?UTF-8?q?=20deux=20constantes=20=5FDIR=5FCONNECT=20et=20=5FDIR=5FCHMOD,?=
 =?UTF-8?q?=20indiquant=20les=20r=C3=A9pertoires=20o=C3=B9=20figureront=20?=
 =?UTF-8?q?le=20fichier=20d=C3=A9crivant=20la=20connexion=20et=20celui=20d?=
 =?UTF-8?q?=C3=A9crivant=20les=20droits=20des=20fichiers,=20en=20plus=20de?=
 =?UTF-8?q?s=20constantes=20FILE=5FCONNECT=5FINS=20et=20FILE=5FCHMOD=5FINS?=
 =?UTF-8?q?.=20Par=20d=C3=A9faut,=20ces=20valeurs=20conservent=20le=20nomm?=
 =?UTF-8?q?age=20habituel=20en=20{{{config/connect.php}}}=20et=20{{{config?=
 =?UTF-8?q?/chmod.php}}}.=20Lorsqu'on=20le=20r=C3=A9f=C3=A9rence=20une=20b?=
 =?UTF-8?q?ase=20externe=20''A'',=20SPIP=20va=20=C3=A0=20pr=C3=A9sent=20ch?=
 =?UTF-8?q?ercher=20le=20fichier=20nomm=C3=A9=20par=20l'expression=20{{{?=
 =?UTF-8?q?=20=5FDIR=5FCONNECT=20.=20}}}=20''A''=20{{{=20.=20'.php'=20}}},?=
 =?UTF-8?q?=20autrement=20dit=20{{{config/}}}A{{{.php}}}.=20Par=20rapport?=
 =?UTF-8?q?=20=C3=A0=20la=20sp=C3=A9cification=20pr=C3=A9c=C3=A9dente,=20l?=
 =?UTF-8?q?e=20pr=C3=A9fixe=20{{{connect}}}=20a=20donc=20disparu,=20ce=20q?=
 =?UTF-8?q?ui=20r=C3=A9soud=20le=20probl=C3=A8me=20pos=C3=A9=20dans=20[104?=
 =?UTF-8?q?60].?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Pour avoir dans un même répertoire tous les fichiers de connexion de sites mutualisés (et un autre pour les sauvegardes, un autre pour les Logs et un autre pour les droits), sans oublier de provoquer la vérification des droits sur les répertoires lors des installations, on peut utiliser le schéma de mutualisation suivant:

{{{
if ( preg_match(',/([a-zA-Z0-9_-]*)[/?],',$_SERVER['REQUEST_URI'],$r)) {
	if (is_dir($e = _DIR_RACINE . 'Ajouts/' . $r[1]. '/')) {
		$cookie_prefix = $table_prefix = $r[1];

		define('_SPIP_PATH',
			_DIR_RACINE. 'Ajouts/' . $table_prefix  . '/dist/:' .
			_DIR_RACINE .'Ajouts/' . $table_prefix  . '/:' .
			_DIR_RACINE .'dist/:' .
			_DIR_RACINE .'dist/javascript/:' .
			_DIR_RESTREINT);

		$pi = $e . _NOM_PERMANENTS_INACCESSIBLES;
		$pa = $e . _NOM_PERMANENTS_ACCESSIBLES;
		$ti = $e . _NOM_TEMPORAIRES_INACCESSIBLES;
		$ta = $e . _NOM_TEMPORAIRES_ACCESSIBLES;

		$pig = _DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES;
		$tig = _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES;

		define('_DIR_DUMP', $tig . 'dump/');
		define('_DIR_LOG', $tig . 'log/');
		define('_DIR_CONNECT', $pig . 'connect/');
		define('_DIR_CHMOD', $pig . 'chmod/');
		define('_FILE_CONNECT_INS', $table_prefix);
		define('_FILE_CHMOD_INS', $table_prefix);
		define('_FILE_LOG_SUFFIX', '_' . $table_prefix . '.log');

		$GLOBALS['test_dirs'] =
		  array($pa, $ta, $ti, $pig, $tig,
			_DIR_DUMP, _DIR_LOG, _DIR_CONNECT, _DIR_CHMOD);

		spip_initialisation($pi, $pa, $ti, $ta);
}}}

Seront donc créés à la racine {{{config/connect, config/chmod, tmp/log, tmp/dump}}}, le premier contenant ''A''.php pour la connexion à la base ''A'' etc.
---
 ecrire/action/converser.php    |  2 +-
 ecrire/inc/lang.php            |  2 +-
 ecrire/inc/utils.php           | 14 +++++++++-----
 ecrire/install/etape_chmod.php | 15 ++++++++-------
 4 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/ecrire/action/converser.php b/ecrire/action/converser.php
index 5552d4f985..85e2894887 100644
--- a/ecrire/action/converser.php
+++ b/ecrire/action/converser.php
@@ -23,7 +23,7 @@ function action_converser_dist()
 	if ($lang = _request('var_lang'))
 		action_converser_post($lang);
 	elseif ($lang = _request('var_lang_ecrire')) {
-		if ( _request('arg') AND _FILE_CONNECT) {
+		if ( _request('arg') AND spip_connect()) {
 			$securiser_action = charger_fonction('securiser_action', 'inc');
 			$securiser_action();
 
diff --git a/ecrire/inc/lang.php b/ecrire/inc/lang.php
index 3acf22a4d9..3af1eed641 100644
--- a/ecrire/inc/lang.php
+++ b/ecrire/inc/lang.php
@@ -117,7 +117,7 @@ function menu_langues($nom_select) {
 		$base = '';
 	} else {
 		$cible = _DIR_RESTREINT_ABS . self();
-		$base = _FILE_CONNECT ? 'base' : '';
+		$base = spip_connect() ? 'base' : '';
 	}
 
 	$change = ' onchange="this.parentNode.parentNode.submit()"';
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 9fb6cdcff8..4cc02bf2e0 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -252,7 +252,7 @@ function spip_connect($serveur='') {
 
 	$f = (!preg_match('/^\w*$/', $serveur))	? ''
 	: (($serveur AND !$install) ?
-		( _DIR_ETC .'connect' . $serveur . '.php')
+		( _DIR_CONNECT. $serveur . '.php')
 		: (_FILE_CONNECT ? _FILE_CONNECT : _FILE_CONNECT_TMP));
 
 	unset($GLOBALS['db_ok']);
@@ -1196,19 +1196,23 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
 	define('_DIR_VAR', $ta);
 
 	define('_DIR_ETC', $pi);
+	define('_DIR_CONNECT', $pi);
+	define('_DIR_CHMOD', $pi);
 
 	define('_DIR_LOG', _DIR_TMP);
 	define('_FILE_LOG', 'spip');
 	define('_FILE_LOG_SUFFIX', '.log');
 
 	if (!isset($GLOBALS['test_dirs']))
+	  // Pas $pi car il est bon de le mettre hors ecriture apres intstall
+	  // il sera rajoute automatiquement si besoin a l'etape 2 de l'install
 		$GLOBALS['test_dirs'] =  array($pa, $ti, $ta);
 
 	// Le fichier de connexion a la base de donnees
 	// tient compte des anciennes versions (inc_connect...)
 	define('_FILE_CONNECT_INS', 'connect');
 	define('_FILE_CONNECT',
-		(@is_readable($f = _DIR_ETC . _FILE_CONNECT_INS . '.php') ? $f
+		(@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f
 	:	(@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f
 	:	(@is_readable($f = _DIR_RESTREINT . 'inc_connect.php3') ? $f
 	:	false))));
@@ -1216,12 +1220,12 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
 	// Le fichier de reglages des droits
 	define('_FILE_CHMOD_INS', 'chmod');
 	define('_FILE_CHMOD',
-		(@is_readable($f = _DIR_ETC . _FILE_CHMOD_INS . '.php') ? $f
+		(@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f
 	:	false));
 
 	define('_FILE_TMP_SUFFIX', '.tmp.php');
-	define('_FILE_CONNECT_TMP', _DIR_ETC . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
-	define('_FILE_CHMOD_TMP', _DIR_ETC . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
+	define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX);
+	define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX);
 
 	// Definition des droits d'acces en ecriture
 	if (!defined('_SPIP_CHMOD')) {
diff --git a/ecrire/install/etape_chmod.php b/ecrire/install/etape_chmod.php
index 86ce36384d..b733cc443b 100644
--- a/ecrire/install/etape_chmod.php
+++ b/ecrire/install/etape_chmod.php
@@ -16,7 +16,6 @@ if (defined("_TEST_DIRS")) return;
 define("_TEST_DIRS", "1");
 
 include_spip('inc/minipres');
-#include_spip('inc/headers'); // fait dans inc/public
 utiliser_langue_visiteur();
 
 //
@@ -81,8 +80,10 @@ function install_etape_chmod_dist()
 		if (substr($test_dir,-1)!=='/') $test_dir .= '/';
 		if (!in_array($test_dir, $test_dirs)) $test_dirs[] = _DIR_RACINE  . $test_dir;
 	} else {
-		if (!_FILE_CONNECT)
-			$test_dirs[] = _DIR_ETC;
+		if (!_FILE_CONNECT) {
+			$test_dirs[] = _DIR_CONNECT;
+			$test_dirs[] = _DIR_CHMOD;
+		}
 	}
 
 	$bad_dirs = array();
@@ -93,9 +94,9 @@ function install_etape_chmod_dist()
 		if (!$test) {
 			$m = preg_replace(',^' . _DIR_RACINE . ',', '',$my_dir);
 			if (@file_exists($my_dir)) {
-				$bad_dirs[] = "<li>".$m."</li>";
+				$bad_dirs["<li>".$m."</li>"] = 1;
 			} else
-				$absent_dirs[] = "<li>".$m."</li>";
+				$absent_dirs["<li>".$m."</li>"] = 1;
 		} else $chmod = max($chmod, $test);
 	}
 
@@ -113,14 +114,14 @@ function install_etape_chmod_dist()
 	if ($bad_dirs) {
 		$res .=
 		  _T('dirs_repertoires_suivants',
-			   array('bad_dirs' => join(" ", $bad_dirs))) .
+		     array('bad_dirs' => join("\n", array_keys($bad_dirs)))) .
 		  	"<b>". _T('login_recharger')."</b>.";
 	}
 
 	if ($absent_dirs) {
 	  	$res .=
 			_T('dirs_repertoires_absents',
-			   array('bad_dirs' => join(" ", $absent_dirs))) .
+			   array('bad_dirs' => join("\n", array_keys($absent_dirs)))) .
 			"<b>". _T('login_recharger')."</b>.";
 	}
 	$res = "<p>" . $continuer  . $res . aide ("install0") . "</p>";
-- 
GitLab