From 64b99faabf60a77db482768daebba190f50c1278 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Mon, 17 Jul 2006 09:33:30 +0000
Subject: [PATCH] nettoyage du code du noyau et reintroduction du bug qui fait
 qu'il ne depand pas du chemin (pas encore trouve comment faire)

---
 ecrire/inc/meta.php  |  9 ++-----
 ecrire/inc/utils.php | 59 ++++++++++++++++++++++----------------------
 ecrire/public.php    |  7 ------
 3 files changed, 32 insertions(+), 43 deletions(-)

diff --git a/ecrire/inc/meta.php b/ecrire/inc/meta.php
index 01ff8942f3..967238c236 100644
--- a/ecrire/inc/meta.php
+++ b/ecrire/inc/meta.php
@@ -13,12 +13,6 @@
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
 function lire_metas() {
-	// preserver le noyau
-	if (_DIR_RESTREINT)
-		$noyau = $GLOBALS['meta']['noyau'];
-	else
-		$noyau = array();
-
 	$result = spip_query("SELECT nom,valeur FROM spip_meta");
 	if($GLOBALS['db_ok']) {
 		$GLOBALS['meta'] = array();
@@ -28,7 +22,8 @@ function lire_metas() {
 	if (!$GLOBALS['meta']['charset'])
 		ecrire_meta('charset', _DEFAULT_CHARSET);
 
-	$GLOBALS['meta']['noyau'] = $noyau;
+	if (isset($GLOBALS['noyau']))
+		$GLOBALS['meta']['noyau'] = $GLOBALS['noyau'];
 }
 
 function ecrire_meta($nom, $valeur) {
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index e2fcf5df9c..3461c069ca 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -74,25 +74,21 @@ function charger_fonction($nom, $dossier='exec', $continue=false) {
 //
 function include_spip($f, $include = true) {
 
-	// deja charge (nom) ?
-	if (isset($GLOBALS['meta']['noyau'][_NOYAU][$f])) {
-		$s = $GLOBALS['meta']['noyau'][_NOYAU][$f];
-		if ($include && $s) {
-			include_once $s;
-		}
-		return $s;
+	// Dans le noyau ?
+	if (isset($GLOBALS['noyau'][$f])) {
+		$s = $GLOBALS['noyau'][$f];
 	}
-	if (!$s = find_in_path($f . '.php')
-	AND (!_EXTENSION_PHP OR !$s = find_in_path($f . '.php3'))) {
-		return $GLOBALS['meta']['noyau'][_NOYAU][$f] = false;
+	// Sinon le chercher et mettre a jour le noyau
+	else {
+		if (!$s = find_in_path($f . '.php')
+		AND (!_EXTENSION_PHP OR !$s = find_in_path($f . '.php3'))) {
+			return $GLOBALS['noyau'][$f] = false;
+		} else
+			$GLOBALS['noyau'][$f] = $s;
 	}
 
-	$GLOBALS['meta']['noyau'][_NOYAU][$f] = $s;
-	if (!defined('ecrire_noyau'))
-		define('ecrire_noyau', 1);
-
-	// alors on le charge (sauf si on ne voulait que son chemin)
-	if ($include) {
+	// On charge le fichier (sauf si on ne voulait que son chemin)
+	if ($include && $s) {
 		include_once $s;
 	}
 
@@ -569,8 +565,7 @@ function texte_script($texte) {
 //
 // find_in_path() : chercher un fichier nomme x selon le chemin rep1:rep2:rep3
 //
-
-function find_in_path ($filename) {
+function creer_chemin() {
 	static $path_a = array();
 	static $c = '';
 
@@ -607,18 +602,21 @@ function find_in_path ($filename) {
 				$dir .= "/";
 			$path_a[] = $dir;
 		}
-		define('_NOYAU', md5(join(':', $path_a)));
 	}
 
+	return $path_a;
+}
+
+function find_in_path ($filename) {
 	// Parcourir le chemin
-	foreach ($path_a as $dir) {
+	foreach (creer_chemin() as $dir) {
 		if (@is_readable($f = "$dir$filename")) {
 # spip_log("find_in_path trouve $f");
 			return $f;
 		}
 	}
 
-# spip_log("find_in_path n'a pas vu '$filename' dans " . join(':',$path_a));
+# spip_log("find_in_path n'a pas vu '$filename' dans " . join(':',creer_chemin()));
 	return false;
 }
 
@@ -977,21 +975,24 @@ function spip_initialisation() {
 	// systematique du noyau ou une baisse de perfs => a etudier)
 	include_once _DIR_RESTREINT . 'inc/flock.php';
 
-	// Lire les meta cachees
-	if (lire_fichier(_FILE_META, $meta))
+	// Lire les meta cachees et initier le noyau (espace public uniquement)
+	$GLOBALS['noyau'] = array();
+	if (lire_fichier(_FILE_META, $meta)) {
 		$GLOBALS['meta'] = @unserialize($meta);
+		if (_DIR_RESTREINT
+		AND isset($GLOBALS['meta']['noyau'])
+		AND is_array($GLOBALS['meta']['noyau']))
+			$GLOBALS['noyau'] = $GLOBALS['meta']['noyau'];
+	}
 	// en cas d'echec refaire le fichier
 	if (!is_array($GLOBALS['meta']) AND _FILE_CONNECT) {
 		include_spip('inc/meta');
 		ecrire_metas();
 	}
 
-	// supprimer le noyau si on recalcul
-	if (isset($_REQUEST['var_mode'])) {
-		$GLOBALS['meta']['noyau'] = array();
-		if (!defined('ecrire_noyau'))
-			define('ecrire_noyau', 1);
-	}
+	// supprimer le noyau si on recalcule
+	if (isset($_REQUEST['var_mode']))
+		$GLOBALS['noyau'] = array();
 
 	// Langue principale du site
 	$GLOBALS['langue_site'] = $GLOBALS['meta']['langue_site'];
diff --git a/ecrire/public.php b/ecrire/public.php
index cb606fa6aa..0663737e69 100644
--- a/ecrire/public.php
+++ b/ecrire/public.php
@@ -162,13 +162,6 @@ if (defined('_INC_PUBLIC')) {
 		$f();
 	}
 
-	// Ecrire le noyau s'il a change ;
-	// c'est avant cron() pour ne pas l'alourdir
-	if (defined('ecrire_noyau')) {
-		include_spip('inc/meta');
-		ecrire_metas();
-	}
-
 	// Effectuer une tache de fond ?
 	cron();
 
-- 
GitLab