From 963f1f08cb8ae66e014c62b78b9dd9f792661153 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Tue, 21 Sep 2004 21:11:16 +0000
Subject: [PATCH] =?UTF-8?q?un=20peu=20de=20nettoyage=20de=20tout=20=C3=A7a?=
 =?UTF-8?q?=20(d=C3=A9buggueur,=20parcours=20du=20code,=20var=5Frecherche?=
 =?UTF-8?q?=20et=20codes=20php,=20etc.)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

La gestion de certaines erreurs php (parse errors) dans les squelettes a disparu (code mangé par ESJ qui avait très faim de bugs-frites)
---
 inc-admin.php3         |  41 +++++++------
 inc-balises.php3       |   5 --
 inc-calcul.php3        |  36 ++++++-----
 inc-compilo-index.php3 |   1 -
 inc-formulaires.php3   |   8 ---
 inc-html-squel.php3    |   6 --
 inc-public.php3        | 134 ++++++++++++++++++-----------------------
 7 files changed, 97 insertions(+), 134 deletions(-)

diff --git a/inc-admin.php3 b/inc-admin.php3
index 10c7f04da1..01f93ce2bc 100644
--- a/inc-admin.php3
+++ b/inc-admin.php3
@@ -137,18 +137,14 @@ function spip_error_handler ($errno, $errmsg, $filename, $linenum, $vars) {
 	global $tableau_des_erreurs, $page;
 
 	// On ne veut intercepter que les erreurs des $page['texte'],
-	// si le code avait ete développé proprement dès le départ
-	// ce serait moins approximatif que ci-dessous
-
-	if (($errno & (E_ERROR | E_WARNING | E_PARSE)) &&
-	    (!strpos($filename, 'ecrire/')))
-	  {
-
-# si $filename = inc-public + eval, dénoncer le squelette,
-# sinon c'est un appel du handler explicitement par le compilateur 
-# qui donne les bons arguments tout de suite, mais avec linenum = ''
-		$tableau_des_erreurs[]
-		  = array($errno,
+	// et pas celles de SPIP :^)
+	if (($errno & (E_ERROR | E_WARNING | E_PARSE))
+	&& (!strpos($filename, 'ecrire/'))) {
+
+		# si $filename = inc-public + eval, denoncer le squelette,
+		# sinon c'est un appel du handler explicitement par le compilateur 
+		# qui donne les bons arguments tout de suite, mais avec linenum = ''
+		$tableau_des_erreurs[] = array($errno,
 			  $errmsg,
 			  ($linenum ? "ligne $linenum" : ''),
 			  ((!strpos($filename, 'inc-public.php3(')) ? 
@@ -183,19 +179,24 @@ function affiche_erreurs_execution_page() {
 	global $tableau_des_erreurs, $affiche_boutons_admin;
 
 	if ($affiche_boutons_admin) {
-		echo "<div style='position: absolute; top: 10px;
-			z-index: 1000; background-color: pink;'>";
-		echo "<h2>",
+		include_ecrire('inc_presentation.php3');
+
+		echo "<div id='spip-debug' style='position: absolute; top: 20;",
+		" z-index: 1000;'><ul><li>",
 		_L("Erreur(s) dans le squelette"),
-		"</h2>",
-		"<code><ul>";
+
+## aide locale courte a ecrire, avec lien vers une grosse page de documentation
+#		aide('erreur_compilation'),
+
+		"<br /></li>",
+		"<ul>";
 		foreach ($tableau_des_erreurs as $err) {
 			echo "<li>$err[2] $err[3]  $err[1]",
-			"<small>$err[4]</small><br><br>",
+			"<small>$err[4]</small><br />",
 			"</li>\n";
 		}
-		echo "</ul></code>";
-		echo "</div>";
+		echo "</ul>";
+		echo "</ul></div>";
 		$GLOBALS['bouton_admin_debug'] = true;
 	}
 }
diff --git a/inc-balises.php3 b/inc-balises.php3
index 0cd4351d32..c044c0ac17 100644
--- a/inc-balises.php3
+++ b/inc-balises.php3
@@ -255,7 +255,6 @@ function balise_RECHERCHE_dist($p) {
 
 function balise_COMPTEUR_BOUCLE_dist($p) {
 	if ($p->id_mere === '') {
-		include_local("inc-admin.php3");
 		erreur_squelette(_L("Champ #COMPTEUR_BOUCLE hors boucle"), $p->id_boucle);
 		$p->code = "''";
 	} else {
@@ -267,7 +266,6 @@ function balise_COMPTEUR_BOUCLE_dist($p) {
 
 function balise_TOTAL_BOUCLE_dist($p) {
 	if ($p->id_mere === '') {
-		include_local("inc-admin.php3");
 		erreur_squelette(_L("Champ #TOTAL_BOUCLE hors boucle"), $p->id_boucle);
 		$p->code = "''";
 	} else {
@@ -297,7 +295,6 @@ function balise_POINTS_dist($p) {
 	$b = $p->boucles[$b]->id_parent;
 	}
 	if (!$p->code) {
-		include_local("inc-admin.php3");
 		erreur_squelette(_L("Champ #POINTS hors d'une recherche"), $p->id_boucle);
 	}
 	$p->statut = 'php';
@@ -329,7 +326,6 @@ function balise_EXPOSER_dist($p) {
 	$type_boucle = $p->type_requete;
 	$primary_key = $table_primary[$type_boucle];
 	if (!$primary_key) {
-		include_local("inc-admin.php3");
 		erreur_squelette(_L("Champ #EXPOSER hors boucle"), $p->id_boucle);
 	}
 	$on = 'on';
@@ -774,7 +770,6 @@ function balise_FORMULAIRE_SITE_dist($p) {
 function balise_distante_interdite($p) {
 	$nom = $p->id_boucle;
 	if ($p->boucles[$nom]->sql_serveur) {
-		include_local("inc-admin.php3");
 		erreur_squelette($p->nom_champ ._L(" distant interdit"), $nom);
 	}
 }
diff --git a/inc-calcul.php3 b/inc-calcul.php3
index 15256e0989..78c9b5956a 100644
--- a/inc-calcul.php3
+++ b/inc-calcul.php3
@@ -16,9 +16,7 @@ include_ecrire("inc_lang.php3");
 include_ecrire("inc_documents.php3");
 include_local("inc-forum.php3");
 include_local("inc-calcul-outils.php3");
-
-#include_local("inc-calcul_html");	# anciens noms des fichiers
-#include_local("inc-calcul_mysql");
+include_local("inc-admin.php3");
 
 
 // Ce fichier peut contenir une affectation de $dossier_squelettes  indiquant
@@ -142,19 +140,17 @@ function cherche_page ($cache, $contexte, $fond, $id_rubrique, $lang='')  {
 		if ($fonc = charger_squelette($skel))
 		  $page = $fonc(array('cache' => $cache), array($contexte));
 
-			// Passer la main au debuggueur)
-		if ($GLOBALS['var_debug'] AND 
-		    $GLOBALS['debug_objet'] == $fonc AND
-		    $GLOBALS['debug_affiche'] == 'resultat')
+		// Passer la main au debuggueur)
+		if ($GLOBALS['var_debug']
+		AND $GLOBALS['debug_objet'] == $fonc
+		AND $GLOBALS['debug_affiche'] == 'resultat')
 			debug_dumpfile ($page['texte']);
 	}
-	# flag pour spip_error_handler(), cf inc-admin ??
-	$page['squelette'] = $skel;
 
 	// Nettoyer le resultat si on est fou de XML
 	if ($GLOBALS['xhtml']) {
-		  include_ecrire("inc_tidy.php");
-		  $page['texte'] = xhtml($page['texte']);
+		include_ecrire("inc_tidy.php");
+		$page['texte'] = xhtml($page['texte']);
 	}
 
 	// Entrer les invalideurs dans la base
@@ -283,6 +279,8 @@ function calculer_page($chemin_cache, $elements, $delais, $inclusion=false) {
 	return $page;
 }
 
+
+## tout ce qui suit devrait etre ailleurs : ecrire/inc_db_(mysql|pgsql).php3
 // Cette fonction est systematiquement appelee par les squelettes
 // pour constuire une requete SQL de type "lecture" (SELECT) a partir
 // de chaque boucle.
@@ -331,12 +329,13 @@ function spip_abstract_select (
 }
 
 function spip_abstract_serveur($f, $serveur) {
-  if (function_exists($f)) return $f;
-  include_local("inc-admin.php3");
-  erreur_squelette(_L(' serveur SQL indefini'), $serveur);
-		   
-  // hack pour continuer la chasse aux erreurs
-  return 'array';
+	if (function_exists($f))
+		return $f;
+
+	erreur_squelette(_L(' serveur SQL indefini'), $serveur);
+
+	// hack pour continuer la chasse aux erreurs
+	return 'array';
 }
 
 // Les 3 fonctions suivantes exploitent le resultat de la precedente,
@@ -363,8 +362,7 @@ function spip_abstract_free($res, $serveur='')
   return $f($res);
 }
 
-# une composition tellement fréquente...
-
+# une composition tellement frequente...
 function spip_abstract_fetsel(
 	$select = array(), $from = array(), $where = '',
 	$groupby = '', $orderby = '', $limit = '',
diff --git a/inc-compilo-index.php3 b/inc-compilo-index.php3
index c2a5f14406..fc86a254e3 100644
--- a/inc-compilo-index.php3
+++ b/inc-compilo-index.php3
@@ -46,7 +46,6 @@ function index_pile($idb, $nom_champ, &$boucles, $explicite='') {
 #		spip_log("Go: idb='$idb' r='$r' c='$c' nom='$nom_champ' s=$s");
 		$desc = $tables_des_serveurs_sql[$s][$t];
 		if (!$desc) {
-			include_local("inc-admin.php3");
 			erreur_squelette(_L("Table SQL \"$r\" inconnue"), "'$idb'");
 			# continuer pour chercher l'erreur suivante
 			return  "'#" . $r . ':' . $nom_champ . "'";
diff --git a/inc-formulaires.php3 b/inc-formulaires.php3
index e18c83199f..8ce3e7f806 100644
--- a/inc-formulaires.php3
+++ b/inc-formulaires.php3
@@ -542,13 +542,5 @@ function formulaire_ecrire_auteur($id_auteur, $email_auteur) {
 	return $res;
 }
 
-function formulaire_admin() {
-  if (!$GLOBALS['flag_preserver'] && ($GLOBALS['HTTP_COOKIE_VARS']['spip_admin'])) {
-    include_local('inc-admin.php3');
-    global $page, $cle, $fraicheur;
-    return afficher_boutons_admin($page, $cle, $fraicheur);
-  }
-  return '';
-}
 
 ?>
diff --git a/inc-html-squel.php3 b/inc-html-squel.php3
index 4c3bf4f976..97fd95605b 100644
--- a/inc-html-squel.php3
+++ b/inc-html-squel.php3
@@ -47,7 +47,6 @@ function parser_texte($texte) {
 			$champ->params = '';
 		else {
 			if (!(ereg('^\\{(.*)\\}$', $p, $params))) {
-				include_local("inc-admin.php3");
 				erreur_squelette(_L("Param&egrave;tres d'inclusion incorrects"), $s);
 			}
 			else
@@ -210,7 +209,6 @@ function parser_param($params, &$result) {
 	}
 
 	if ($params) {
-		include_local("inc-admin.php3");
 		erreur_squelette(($result->id_boucle .
 				  _L(": Param&egrave;tre $i (ou suivants) incorrect")),
 				 $params);
@@ -241,7 +239,6 @@ function parser($texte, $id_parent, &$boucles, $nom) {
 		$debut = substr($texte, 0, $p);
 		$milieu = substr($texte, $p);
 		if (!ereg(BALISE_DE_BOUCLE, $milieu, $match)) {
-			include_local("inc-admin.php3");
 			erreur_squelette((_T('erreur_boucle_syntaxe')), $milieu);
 		}
 		$id_boucle = $match[1];
@@ -281,7 +278,6 @@ function parser($texte, $id_parent, &$boucles, $nom) {
 		}
 		$milieu = substr($milieu, strlen($match[0]));
 		if (strpos($milieu, $s)) {
-			include_local("inc-admin.php3");
 			erreur_squelette(_T('erreur_boucle_syntaxe'),
 				$id_boucle . 
 				_L('&nbsp;: balise B en aval'));
@@ -293,7 +289,6 @@ function parser($texte, $id_parent, &$boucles, $nom) {
 		$s = "</BOUCLE$id_boucle>";
 		$p = strpos($milieu, $s);
 		if ($p === false) {
-			include_local("inc-admin.php3");
 			erreur_squelette(_T('erreur_boucle_syntaxe'),
 					 _T('erreur_boucle_fermant',
 						array('id'=>$id_boucle)));
@@ -329,7 +324,6 @@ function parser($texte, $id_parent, &$boucles, $nom) {
 		$all_res = array_merge($all_res, parser_champs_etendus($debut));
 		$all_res[] = $result;
 		if ($boucles[$id_boucle]) {
-			include_local("inc-admin.php3");
 			erreur_squelette(_T('erreur_boucle_syntaxe'),
 					 _T('erreur_boucle_double',
 					 	array('id'=>$id_boucle)));
diff --git a/inc-public.php3 b/inc-public.php3
index ec1c808112..ea2d199da3 100644
--- a/inc-public.php3
+++ b/inc-public.php3
@@ -3,16 +3,11 @@
 // Page inclue ?
 if (defined("_INC_PUBLIC")) {
 	$page = inclure_page($fond, $delais, $contexte_inclus, $fichier_inclus);
-	$contenu = $page['texte'];
-	// Traiter var_recherche pour surligner les mots
-	if ($GLOBALS['var_recherche']) {
-	  include_ecrire("inc_surligne.php3");
-	  $contenu = surligner_mots($contenu, $var_recherche);
-		}
-	if ($page['process_ins'] == 'php') {
-		eval('?' . '>' . $contenu); // page 'php'
-	} else
-		echo $contenu; // page tout 'html'
+
+	if ($page['process_ins'] == 'html')
+		echo $page['texte'];
+	else
+		eval('?' . '>' . $page['texte']);
 
 	if ($page['lang_select'])
 		lang_dselect();
@@ -73,13 +68,12 @@ else {
 		reponse_confirmation($id_article, $val_confirm);
 	}
 
+	include_local ('inc-public-global.php3');
 
 	// demande de debug ?
 	if ($var_debug AND ($code_activation_debug == $var_debug
-	OR ($code_activation_debug == ''
-	AND $auteur_session['statut'] == '0minirezo')
+		OR $auteur_session['statut'] == '0minirezo'
 	)) {
-		include_local('inc-admin.php3');
 		$recalcul = 'oui';
 		$var_debug = true;
 		spip_log('debug !');
@@ -88,17 +82,15 @@ else {
 
 	// Faut-il preparer les boutons d'admin ?
 	$affiche_boutons_admin = (!$flag_preserver
-				  AND ($HTTP_COOKIE_VARS['spip_admin']
-				       OR $HTTP_COOKIE_VARS['spip_debug']));
-
-	// inc-admin contient aussi le traitement d'erreur
-	include_local('inc-admin.php3');
-	include_local ("inc-public-global.php3");
+		AND ($HTTP_COOKIE_VARS['spip_admin']
+			OR $HTTP_COOKIE_VARS['spip_debug']));
+	if ($affiche_boutons_admin)
+		include_local('inc-admin.php3');
 
 	$tableau_des_erreurs = array();
 	$page = afficher_page_globale ($fond, $delais, $use_cache);
 
-		// Interdire au client de cacher un login, un admin ou un recalcul
+	// Interdire au client de cacher un login, un admin ou un recalcul
 	if ($flag_dynamique OR ($recalcul == 'oui')
 			OR $HTTP_COOKIE_VARS['spip_admin']) {
 			@header("Cache-Control: no-cache,must-revalidate");
@@ -108,12 +100,52 @@ else {
 			@Header ("Last-Modified: ".http_gmoddate($lastmodified)." GMT");
 
 		@header("Content-Type: text/html; charset=".lire_meta('charset'));
- #entre gzip et debug, faut revoir
-		#@header('Content-Length: '.strlen($contenu));
-#		@header('Connection: close');
 
-		$contenu = $page['texte'];
-		spip_log($page['process_ins'] . strlen($contenu));
+		// Faudra-t-il post-traiter la page ?
+		define('spip_active_ob', $flag_ob AND
+		($var_debug OR $var_recherche OR $affiche_boutons_admin));
+
+		// Cas d'une page contenant uniquement du HTML :
+		if ($page['process_ins'] == 'html') {
+			if (!spip_active_ob) {
+				echo $page['texte'];
+				$contenu = '';
+			} else
+				$contenu = $page['texte'];
+		}
+
+		// Cas d'une page contenant du PHP :
+		else {
+
+			// Evaluer la page
+			if (!spip_active_ob) {
+				$res = eval('?' . '>' . $page['texte']);
+				$contenu = '';
+			} else {
+				ob_start(); 
+				$res = eval('?' . '>' . $page['texte']);
+				$contenu = ob_get_contents(); 
+				ob_end_clean();
+			}
+                      
+			// en cas d'erreur afficher un message + demander boutons debug
+			if ($affiche_boutons_admin
+			AND $auteur_session['statut'] == '0minirezo') {
+				if (function_exists('restore_error_handler'))
+					restore_error_handler();
+				if ($res === false)
+					spip_error_handler(1,'erreur de compilation','','','');
+			}
+
+		}
+
+		// Passer la main au debuggueur le cas echeant 
+		if ($var_debug) {
+			debug_dumpfile('');
+			exit;
+		} else if (count($tableau_des_erreurs) > 0)
+			affiche_erreurs_execution_page ();
+
 		// Traiter var_recherche pour surligner les mots
 		if ($var_recherche) {
 			include_ecrire("inc_surligne.php3");
@@ -123,58 +155,10 @@ else {
 		// Ajouter les boutons admins (les normaux)
 		if ($affiche_boutons_admin)
 			$contenu = calcul_admin_page($use_cache, $contenu);
-		spip_log($page['process_ins'] . $contenu);
-
-		if ($page['process_ins'] == 'html') 
-		  {if (!$var_debug) echo $contenu;}
-		else {
-
-		// Ici on va ruser pour intercepter les erreurs (meme les FATAL)
-		// dans le eval : on envoie le bouton debug, et on le supprime
-		// de l'autre cote ; de cette facon, si on traverse sans encombre,
-		// on est propre, et sinon on a le bouton
 
-			if ($affiche_boutons_admin) {
-
-		// recuperer les parse errors etc., type "FATAL" (cf. infra)
-			  if ($auteur_session['statut'] == '0minirezo') {
-				$page_principale = $page;
-				if (function_exists('set_error_handler'))
-					set_error_handler('spip_error_handler');
-			  }
-			  
-			}
+		echo $contenu;
 
-		//
-		// Evaluer la page php
-		//
-			if (!$var_debug)
-			  $res = eval('?' . '>' . $contenu); 
-			else {
-			  ob_start(); 
-			  $res = eval('?' . '>' . $contenu);
-			  $contenu = ob_get_contents(); 
-			  ob_end_clean();
-			}
-                      
-		// en cas d'erreur afficher un message + demander les boutons de debug
-			if ($affiche_boutons_admin
-			    AND $auteur_session['statut'] == '0minirezo') {
-			  if (function_exists('restore_error_handler'))
-			    restore_error_handler();
-			  if ($res === false)
-			    spip_error_handler(1,'erreur de compilation','','','');
-			}
-			
-		}
-	// Passer la main au debuggueur le cas echeant 
-	if ($var_debug)	
-	  debug_dumpfile('');
-	else {
-		if (count($tableau_des_erreurs) > 0)
-			affiche_erreurs_execution_page ();
-	}
-	terminer_public_global($use_cache, $page['cache']);
+		terminer_public_global($use_cache, $page['cache']);
 }
 
 ?>
-- 
GitLab