From 86c02af769db996c3d18ad72860c3a13e2d8fc1c Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Wed, 25 Aug 2004 23:16:19 +0000
Subject: [PATCH] bugs cvs (spip-contrib & pierre andrews)

---
 inc-public-global.php3 | 24 +++++++++++++++++++++++-
 inc-public.php3        | 11 +++++++----
 inc-text-squel.php3    |  3 ++-
 3 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/inc-public-global.php3 b/inc-public-global.php3
index 2f159630f8..cf73511b86 100644
--- a/inc-public-global.php3
+++ b/inc-public-global.php3
@@ -96,9 +96,23 @@ function obtenir_page ($contexte, $chemin_cache, $delais, $use_cache, $fond, $in
 // Appeler cette fonction pour obtenir la page principale
 //
 function afficher_page_globale ($fond, $delais, &$use_cache) {
-	global $flag_preserver, $recalcul, $lastmodified;
+	global $flag_preserver, $recalcul, $preview, $lastmodified;
 	include_local ("inc-cache.php3");
 
+	// demande de previsualisation ?
+	// -> inc-calcul.php3 n'enregistrera pas les fichiers caches
+	// -> inc-reqsql-squel.php3 acceptera les objets non 'publie'
+	if ($preview == 'oui') {
+		// Verifier qu'on a le droit de previsualisation
+		$statut = $GLOBALS['auteur_session']['statut'];
+		if ($statut=='0minirezo' OR
+		(lire_meta('preview_redacteurs')=='oui' AND $statut=='1comite')) {
+			$recalcul = 'oui';
+			$delais = 0;
+		} else
+			$preview = false;
+	}
+
 	$chemin_cache = 'CACHE/'.generer_nom_fichier_cache('', $fond);
 	determiner_cache($delais, $use_cache, $chemin_cache);
 
@@ -246,6 +260,14 @@ function cherche_image_nommee($nom) {
 	}
 }
 
+//
+// Leve un drapeau si le squelette donne une page generant de graves erreurs php
+//
+function spip_error_handler (&$errno, $errstr) {
+	global $drapeau_erreur_page;
+	if ($errno && (E_ERROR | E_WARNING | E_PARSE))
+		$drapeau_erreur_page = true;
+}
 
 // La fonction ci-dessous permet a un script de flusher ses resultats partiels
 function spip_ob_flush() {
diff --git a/inc-public.php3 b/inc-public.php3
index 4f31dde581..927d233fed 100644
--- a/inc-public.php3
+++ b/inc-public.php3
@@ -102,9 +102,12 @@ else {
 		if ($affiche_boutons_admin = (!$GLOBALS['flag_preserver']
 		AND $GLOBALS['HTTP_COOKIE_VARS']['spip_admin'])) {
 			include_local('inc-admin.php3');
-			$page['texte'] .= '<'.'?php
-				define("PAS_D_ERREUR_SQUELETTE", 1);
-			?'.'>';
+
+			// recuperer les parse errors etc.
+			$drapeau_erreur_page = false;
+			if (function_exists('set_error_handler'))
+				set_error_handler('spip_error_handler');
+
 			if ($flag_ob)
 				echo afficher_boutons_admin('', true).'<!-- @@START@@ -->';
 		}
@@ -115,7 +118,7 @@ else {
 		eval('?' . '>' . $page['texte']); // page 'php'
 
 		// en cas d'erreur afficher un message + demander les boutons de debug
-		if (!defined("PAS_D_ERREUR_SQUELETTE")) {
+		if ($drapeau_erreur_page) {
 			echo "<hr /><h2>".
 			_L("Erreur dans le squelette")." $fond.html</h2>";
 			$GLOBALS['bouton_admin_debug'] = true;
diff --git a/inc-text-squel.php3 b/inc-text-squel.php3
index 6d99fe2d29..7f83cb6044 100644
--- a/inc-text-squel.php3
+++ b/inc-text-squel.php3
@@ -73,7 +73,8 @@ function calculer_texte($texte, $id_boucle, &$boucles, $id_mere) {
 			"_T('$module:$chaine')",
 			$id_boucle, 
 			$boucles,
-			$id_mere);
+			$id_mere,
+			'php');	// ne pas manger les espaces avec trim()
 		$code = str_replace($match[0], "'$ferme_multi.$c.$ouvre_multi'", $code);
 	}
 
-- 
GitLab