From 3dd6f1b6af44746942ad3589f7b460297b4f0546 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Thu, 30 Aug 2007 14:44:11 +0000
Subject: [PATCH] =?UTF-8?q?Multibase:=20#716=20ayant=20pr=C3=A9monitoireme?=
 =?UTF-8?q?nt=20demand=C3=A9=20le=20multi-squelette=20sugg=C3=A9r=C3=A9=20?=
 =?UTF-8?q?dans=20[10113],=20le=20pr=C3=A9sent=20d=C3=A9pot=20(aid=C3=A9?=
 =?UTF-8?q?=20de=C2=A0[10133]=20et=20[10138])=20le=20r=C3=A9alise=20en=20d?=
 =?UTF-8?q?eux=20coups=20de=20cuill=C3=A8re=20=C3=A0=20Post.=20A=20pr?=
 =?UTF-8?q?=C3=A9sent,=20si=20on=20appelle=20une=20page=20avec=20un=20vari?=
 =?UTF-8?q?able=20d'URL=20nomm=C3=A9=20'''connect''',=20SPIP=20consid?=
 =?UTF-8?q?=C3=A8rera=20qu'il=20doit=20utiliser=20non=20pas=20la=20base=20?=
 =?UTF-8?q?principale,=20mais=20celle=20indiqu=C3=A9e=20par=20par=20l'entr?=
 =?UTF-8?q?=C3=A9e=20du=20tableau=20'''connexions'''=20index=C3=A9e=20par?=
 =?UTF-8?q?=20la=20valeur=20du=20param=C3=A8tre=20'''connect'''.=20Rappelo?=
 =?UTF-8?q?ns=20que=20tout=20fichier=20'''config/connect'''X'''.php'''=20g?=
 =?UTF-8?q?arni=20l'entr=C3=A9e=20X=20du=20tableau=20'''connexions'''.=20D?=
 =?UTF-8?q?ans=20cette=20situation,=20les=20boucles=20des=20squelettes=20u?=
 =?UTF-8?q?tilis=C3=A9s=20pour=20produire=20la=20page=20seront=20implicite?=
 =?UTF-8?q?ment=20pr=C3=A9fix=C3=A9es=20par=20la=20connexion=20demand?=
 =?UTF-8?q?=C3=A9e:=20{{{<BOUCLE(T)=20...}}}=20sera=20vue=20comme=20{{{<BO?=
 =?UTF-8?q?UCLE(X:T)=20...}}}=20quand=20l'URL=20comporte=20{{{&connect=3DX?=
 =?UTF-8?q?}}}.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Aspects techniques

La compilation d'un squelette produira autant de fichier dans tmp/cache/skel que d'application à des bases différentes. Il y aurait moyen de faire un plus compact, mais avec une petite chute de performances. On sacrifie donc l'espace au temps, ça ne semble pas un problème vu la taille usuelle d'un squelette compilé.

Les différences entre les compilations d'un même squelettes proviennent des balises #URL_* et assimilées. Il y aura peut-etre une petite réorganisation des fonctions sur les balises et les critères à opérer pour gérer ça plus astucieusement.
---
 ecrire/public/compiler.php | 10 ++++++----
 ecrire/public/composer.php | 13 +++++++------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index cc0a1b49c7..13eaca69a2 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -672,9 +672,8 @@ function code_boucle(&$boucles, $id, $nom)
 // En cas d'erreur, elle retourne un tableau des 2 premiers elements seulement
 
 // http://doc.spip.org/@public_compiler_dist
-function public_compiler_dist($squelette, $nom, $gram, $sourcefile) {
-  global  $table_des_tables, $tables_des_serveurs_sql, $tables_principales, $tables_auxiliaires,
-    $tables_jointures;
+function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect=''){
+	global  $table_des_tables, $tables_des_serveurs_sql, $tables_principales, $tables_auxiliaires, $tables_jointures;
 
 	// Pre-traitement : reperer le charset du squelette, et le convertir
 	// Bonus : supprime le BOM
@@ -703,6 +702,8 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile) {
 	foreach($boucles as $id => $boucle) {
 		$type = $boucle->type_requete;
 		if ($type != 'boucle') {
+			if (!$boucles[$id]->sql_serveur AND $connect)
+				$boucles[$id]->sql_serveur = $connect;
 			$show = trouver_table($type, $boucles[$id]);
 			if ($show) {
 				$nom_table = $show['table'];
@@ -805,7 +806,8 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile) {
 	  $code . '
 
 //
-// Fonction principale du squelette ' . $sourcefile ."
+// Fonction principale du squelette ' . $sourcefile . 
+	  ($connect ? " pour $connect" : '') . ".
 //
 function " . $nom . '($Cache, $Pile, $doublons=array(), $Numrows=array(), $SP=0) {
 	$page = ' .
diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php
index 2a0395e551..b2af6c6b7b 100644
--- a/ecrire/public/composer.php
+++ b/ecrire/public/composer.php
@@ -29,9 +29,10 @@ include_spip('public/debug'); # toujours prevoir le pire
 # Toutefois pour 2. et 3. preferer la technique de la surcharge
 
 // http://doc.spip.org/@public_composer_dist
-function public_composer_dist($squelette, $mime_type, $gram, $sourcefile) {
+function public_composer_dist($squelette, $mime_type, $gram, $source) {
 
-	$nom = $mime_type . '_' . md5($squelette);
+	$connect = _request('connect');
+	$nom = $mime_type . ($connect ?  "_$connect" : '') . '_' . md5($squelette);
 
 	// si squelette est deja en memoire (INCLURE  a repetition)
 	if (function_exists($nom))
@@ -40,7 +41,7 @@ function public_composer_dist($squelette, $mime_type, $gram, $sourcefile) {
 	$phpfile = sous_repertoire(_DIR_SKELS,'',false,true) . $nom . '.php';
 
 	// si squelette est deja compile et perenne, le charger
-	if (!squelette_obsolete($phpfile, $sourcefile)
+	if (!squelette_obsolete($phpfile, $source)
 	AND lire_fichier ($phpfile, $contenu,
 	array('critique' => 'oui', 'phpcheck' => 'oui'))) 
 		eval('?'.'>'.$contenu);
@@ -55,9 +56,9 @@ function public_composer_dist($squelette, $mime_type, $gram, $sourcefile) {
 	if (function_exists($nom)) return $nom;
 
 	// charger le source, si possible, et compiler 
-	if (lire_fichier ($sourcefile, $skel)) {
+	if (lire_fichier ($source, $skel)) {
 		$compiler = charger_fonction('compiler', 'public');
-		$skel_code = $compiler($skel, $nom, $gram, $sourcefile);
+		$skel_code = $compiler($skel, $nom, $gram, $source, $connect);
 	}
 
 	// Tester si le compilateur renvoie une erreur
@@ -72,7 +73,7 @@ function public_composer_dist($squelette, $mime_type, $gram, $sourcefile) {
 			ecrire_fichier ($phpfile, $skel_code);
 			return $nom;
 		} else {
-			erreur_squelette(_T('zbug_erreur_compilation'), $sourcefile);
+			erreur_squelette(_T('zbug_erreur_compilation'), $source);
 		}
 	}
 }
-- 
GitLab