diff --git a/ecrire/inc/meta.php b/ecrire/inc/meta.php index b0778c212e81b5eda06f6044708a154ec004c6be..f9ac4a175a0ca72f62bed54f3b189de3c555076f 100644 --- a/ecrire/inc/meta.php +++ b/ecrire/inc/meta.php @@ -13,9 +13,8 @@ if (!defined("_ECRIRE_INC_VERSION")) return; function lire_metas() { - // preserver le noyau, sauf si recalcul - if (_DIR_RESTREINT - AND !_request('var_mode')) + // preserver le noyau + if (_DIR_RESTREINT) $noyau = $GLOBALS['meta']['noyau']; else $noyau = array(); diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index 19a3aaa6304899c7222bb30f8433ba5458d67cb0..9ce68540e53ba6a63374b39465531ed0133e4f39 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -82,16 +82,39 @@ function include_spip($f, $include = true) { // Hack pour pouvoir appeler cette fonction depuis mes_options. define('_DIR_INCLUDE', _DIR_RESTREINT); + // chercher le fichier dans le chemin (eventuellement, surcharge) - if (!$s = find_in_path($f . '.php') - AND (!_EXTENSION_PHP OR !$s = find_in_path($f . '.php3'))) + + // est-ce dans les chemins du noyau (optimises) ? + if (_DIR_RESTREINT) { + if (isset($GLOBALS['meta']['noyau'][$f])) { + $s = $GLOBALS['meta']['noyau'][$f]; + if (!$s) return false; + } + // sinon on se souvient qu'il faudra ecrire le noyau dans public/global + else + define('ecrire_noyau', 1); + } + + if (!isset($s) + AND !$s = find_in_path($f . '.php') + AND (!_EXTENSION_PHP OR !$s = find_in_path($f . '.php3'))) { + if (_DIR_RESTREINT) + $GLOBALS['meta']['noyau'][$f] = false; return $included_files[$f] = false; + } // deja charge (chemin complet) ? - if (isset($included_files[$s])) + if (isset($included_files[$s])) { + if (_DIR_RESTREINT) + $GLOBALS['meta']['noyau'][$f] = $included_files[$s]; return $included_files[$f] = $included_files[$s]; - else + } + else { + if (_DIR_RESTREINT) + $GLOBALS['meta']['noyau'][$f] = $s; $included_files[$f] = $included_files[$s] = $s; + } // alors on le charge (sauf si on ne voulait que son chemin) if ($include) { @@ -626,14 +649,6 @@ function find_in_path ($filename) { static $path_a = array(); static $c = ''; - // est-ce dans les chemins deja connus (optimises) ? - if (_DIR_RESTREINT) { - if (isset($GLOBALS['meta']['noyau'][$filename])) - return $GLOBALS['meta']['noyau'][$filename]; - // sinon on se souvient qu'il faudra ecrire le noyau dans public/global - define('ecrire_noyau', 1); - } - // on calcule le chemin si le nombre de plugins a change if ($c != count($GLOBALS['plugins']).$GLOBALS['dossier_squelettes']) { $c = count($GLOBALS['plugins']).$GLOBALS['dossier_squelettes']; @@ -674,13 +689,11 @@ function find_in_path ($filename) { foreach ($path_a as $dir) { if (@is_readable($f = "$dir$filename")) { # spip_log("find_in_path trouve $f"); - if (_DIR_RESTREINT) $GLOBALS['meta']['noyau'][$filename] = $f; return $f; } } # spip_log("find_in_path n'a pas vu '$filename' dans " . $path); - if (_DIR_RESTREINT) $GLOBALS['meta']['noyau'][$filename] = false; return false; } @@ -1049,6 +1062,11 @@ function spip_initialisation() { ecrire_metas(); } + // supprimer le noyau si on recalcul + if ($_REQUEST['var_mode']) { + $GLOBALS['meta']['noyau'] = array(); + define('ecrire_noyau', 1); + } // Langue principale du site $GLOBALS['langue_site'] = $GLOBALS['meta']['langue_site']; diff --git a/ecrire/public.php b/ecrire/public.php index 25c2833d7d82d07dceedc6a5184806fced0a5c0d..f43f52d6cac197b542361eebc965c61f6335af02 100644 --- a/ecrire/public.php +++ b/ecrire/public.php @@ -184,7 +184,7 @@ if (defined('_INC_PUBLIC')) { // Ecrire le noyau s'il a change ; // c'est avant cron() pour ne pas l'alourdir if (defined('ecrire_noyau')) { - include_spip('inc_meta'); + include_spip('inc/meta'); ecrire_metas(); }