Valider afe4fd23 rédigé par Fil's avatar Fil
Parcourir les fichiers

modifs importantes :

- gros travail sur le debuggueur : les boutons de debug s'affichent maintenant dès qu'une erreur php a été détéctée dans l'exécution de la page, les erreurs 'parse error' ou 'fatal error' sont traitées (ce qui n'a pas été facile...)
- les fichiers du cache sont stockés en mode compressé (quand c'est possible)
- la compression auto est redéconnectée des post-traitements de page (trop de problèmes, notamment sur spip-contrib)

par ailleurs petites corrections, suppression de code mort, etc.

J'espère que le déroulé des opérations dans inc-public - inc-cache - inc-calcul - inc-calcul-squel est plus lisible maintenant ; la partie "affichage des boutons d'admin", en revanche, est vraiment méchante :-)
parent 29e82001
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -146,7 +146,7 @@ function spip_get_lock($nom, $timeout = 0) {
	$q = spip_query("SELECT GET_LOCK('$nom', $timeout)");
	list($lock_ok) = spip_fetch_array($q);

	if (!$lock_ok) spip_log("pas de lock sql pour $lock");
	if (!$lock_ok) spip_log("pas de lock sql pour $nom");
	return $lock_ok;
}

+8 −23
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -1935,20 +1935,11 @@ function debut_page($titre = "", $rubrique = "asuivre", $sous_rubrique = "asuivr

	debut_html($titre, $rubrique, $onLoad);

	$ctitre = _T('titre_changer_couleur_interface');
	echo "\n<map name='map_couleur'>";
	echo lien_change_var ($clean_link, 'set_couleur', 6, '0,0,10,10', $ctitre, "onMouseOver=\"changestyle('bandeauinterface','visibility', 'visible');\"");
	echo lien_change_var ($clean_link, 'set_couleur', 1, '12,0,22,10', $ctitre, "onMouseOver=\"changestyle('bandeauinterface','visibility', 'visible');\"");
	echo lien_change_var ($clean_link, 'set_couleur', 2, '24,0,34,10', $ctitre, "onMouseOver=\"changestyle('bandeauinterface','visibility', 'visible');\"");
	echo lien_change_var ($clean_link, 'set_couleur', 3, '36,0,46,10', $ctitre, "onMouseOver=\"changestyle('bandeauinterface','visibility', 'visible');\"");
	echo lien_change_var ($clean_link, 'set_couleur', 4, '48,0,58,10', $ctitre, "onMouseOver=\"changestyle('bandeauinterface','visibility', 'visible');\"");
	echo lien_change_var ($clean_link, 'set_couleur', 5, '60,0,70,10', $ctitre, "onMouseOver=\"changestyle('bandeauinterface','visibility', 'visible');\"");
	echo "\n</map>";

	$link = $clean_link;
	echo "\n<map name='map_layout'>";
	echo lien_change_var ($clean_link, 'set_disp', 1, '1,0,18,15', _T('lien_afficher_texte_seul'), "onMouseOver=\"changestyle('bandeauvide','visibility', 'visible');\"");
	echo lien_change_var ($clean_link, 'set_disp', 2, '19,0,40,15', _T('lien_afficher_texte_icones'), "onMouseOver=\"changestyle('bandeauvide','visibility', 'visible');\"");
	echo lien_change_var ($clean_link, 'set_disp', 3, '41,0,59,15', _T('lien_afficher_icones_seuls'), "onMouseOver=\"changestyle('bandeauvide','visibility', 'visible');\"");
	echo lien_change_var ($link, 'set_disp', 1, '1,0,18,15', _T('lien_afficher_texte_seul'), "onMouseOver=\"changestyle('bandeauvide','visibility', 'visible');\"");
	echo lien_change_var ($link, 'set_disp', 2, '19,0,40,15', _T('lien_afficher_texte_icones'), "onMouseOver=\"changestyle('bandeauvide','visibility', 'visible');\"");
	echo lien_change_var ($link, 'set_disp', 3, '41,0,59,15', _T('lien_afficher_icones_seuls'), "onMouseOver=\"changestyle('bandeauvide','visibility', 'visible');\"");
	echo "\n</map>";


@@ -2224,20 +2215,14 @@ else {

			// Choix de la couleur: automatique en fonction de $couleurs_spip

			// nettoyer le lien global
			$clean_link->delVar('var_lang');
			$clean_link->delVar('set_options');
			$clean_link->delVar('set_couleur');
			$clean_link->delVar('set_disp');
			$clean_link->delVar('set_ecran');
						
			$link = $clean_link;
			echo "<img src='img_pack/rien.gif' width='10' height='1' alt='' />";
			ksort($couleurs_spip);
			while (list($key,$val) = each($couleurs_spip)) {
					$clean_link->delVar('set_couleur');
					$clean_link->addVar('set_couleur', $key);
					$link->delVar('set_couleur');
					$link->addVar('set_couleur', $key);
					
					echo "<a href=\"".$clean_link->getUrl()."\"><img src='img_pack/rien.gif' width='8' height='8' border='0' style='margin: 1px; background-color: ".$couleurs_spip[$key]['couleur_claire'].";' onMouseOver=\"changestyle('bandeauinterface','visibility', 'visible');\" alt='' /></a>";
					echo "<a href=\"".$link->getUrl()."\"><img src='img_pack/rien.gif' width='8' height='8' border='0' style='margin: 1px; background-color: ".$couleurs_spip[$key]['couleur_claire'].";' onMouseOver=\"changestyle('bandeauinterface','visibility', 'visible');\" alt='' /></a>";

			}
			
+63 −70
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -266,7 +266,7 @@ $flag_revisions = ($flag_pcre AND function_exists("gzcompress"));
// Appliquer le prefixe cookie
//
function spip_setcookie ($name='', $value='', $expire=0, $path='AUTO', $domain='', $secure='') {
	$name = ereg_replace ('^spip', $GLOBALS['cookie_prefix'], $name);
	$name = ereg_replace ('^spip_', $GLOBALS['cookie_prefix'].'_', $name);
	if ($path == 'AUTO') $path=$GLOBALS['cookie_path'];

	if ($secure)
@@ -283,15 +283,15 @@ function spip_setcookie ($name='', $value='', $expire=0, $path='AUTO', $domain='
if ($cookie_prefix != 'spip') {
	reset ($HTTP_COOKIE_VARS);
	while (list($name,$value) = each($HTTP_COOKIE_VARS)) {
		if (ereg('^spip', $name)) {
		if (ereg('^spip_', $name)) {
			unset($HTTP_COOKIE_VARS[$name]);
			unset($$name);
		}
	}
	reset ($HTTP_COOKIE_VARS);
	while (list($name,$value) = each($HTTP_COOKIE_VARS)) {
		if (ereg('^'.$cookie_prefix, $name)) {
			$spipname = ereg_replace ('^'.$cookie_prefix, 'spip', $name);
		if (ereg('^'.$cookie_prefix.'_', $name)) {
			$spipname = ereg_replace ('^'.$cookie_prefix.'_', 'spip_', $name);
			$HTTP_COOKIE_VARS[$spipname] = $INSECURE[$spipname] = $value;
			$$spipname = $value;
		}
@@ -456,71 +456,30 @@ function tester_upload() {
// Reglage de l'output buffering : si possible, generer une sortie
// compressee pour economiser de la bande passante
//

// si un buffer est deja ouvert, stop
if ($flag_ob AND !strlen(@ob_get_contents())) {
	@header("Vary: Cookie, Accept-Encoding");
	@ob_start("spip_ob_handler");
} else {
	$flag_ob = false;
	@header("Vary: Cookie");
}

//
// La fonction elle-meme
//
function spip_ob_handler ($page) {
	global $var_recherche, $flag_pcre, $flag_preserver, $flag_ecrire;
	static $buffer_continuation = false;

	// buffer de continuation ?
	global $ob_send;
	if ($ob_send)
		$buffer_continuation = true;

	// Surligner les mots sur le site public
	if ($var_recherche AND $flag_pcre AND !$flag_preserver AND !$flag_ecrire) {
		include_ecrire("inc_surligne.php3");
		if ($page_surligne = surligner_mots($page, $var_recherche))
			$page = $page_surligne;
	}

	// Tests compression
	$use_gz = $GLOBALS['auto_compress'] && $GLOBALS['flag_obgz']
	// pas de continuation detectee
	&& !$buffer_continuation
function test_obgz () {
	return
	$GLOBALS['auto_compress']
	&& $GLOBALS['flag_ob']
	&& $GLOBALS['flag_obgz']
	// special bug de proxy
	&& !eregi("NetCache|Hasd_proxy", $HTTP_VIA)
	&& !eregi("NetCache|Hasd_proxy", $GLOBALS['HTTP_VIA'])
	// special bug Netscape Win 4.0x
	&& !eregi("Mozilla/4\.0[^ ].*Win", $HTTP_USER_AGENT)
	&& !eregi("Mozilla/4\.0[^ ].*Win", $GLOBALS['HTTP_USER_AGENT'])
	// special bug Apache2x
	&& !eregi("Apache(-[^ ]+)?/2", $SERVER_SOFTWARE)
	&& !($flag_sapi_name && ereg("^apache2", @php_sapi_name()))
	&& !eregi("Apache(-[^ ]+)?/2", $GLOBALS['SERVER_SOFTWARE'])
	&& !($GLOBALS['flag_sapi_name'] AND ereg("^apache2", @php_sapi_name()))
	// si la compression est deja commencee, stop
	&& !@ini_get("zlib.output_compression") && !@ini_get("output_handler");

	if ($use_gz AND ($page_gz = @ob_gzhandler($page,5)) !== false)
		$page = $page_gz;

	# spip_log('Content-Length: '.strlen($page).($page_gz? ', compression':'').($buffer_continuation ? ", portion":""));
	if (!$buffer_continuation) {
		@header('Content-Length: '.strlen($page));
		@header('Connection: close');
	&& !@ini_get("zlib.output_compression")
	&& !@ini_get("output_handler");
}

	return $page;
}

// La fonction ci-dessous permet a un script de flusher ses resultats partiels
// (en contrepartie cela desactive la compression)
function spip_ob_flush() {
	$GLOBALS['ob_send'] = true;
	ob_end_flush();
	ob_start('spip_ob_handler');
// si un buffer est deja ouvert, stop
if ($flag_ob AND !strlen(@ob_get_contents())) {
	@header("Vary: Cookie, Accept-Encoding");
#	if (test_obgz())
#		ob_start('ob_gzhandler');
}



class Link {
	var $file;
	var $vars;
@@ -893,32 +852,48 @@ function spip_flock($filehandle, $mode, $fichier) {
		return @flock($filehandle, $mode);
}

function spip_file_get_contents ($fichier) {
	if (substr($fichier, -3) != '.gz') {
		if (function_exists('file_get_contents'))
			return @file_get_contents($fichier);
		else
			return join('', file($fichier));
	} else
			return join('', gzfile($fichier));
	
}
// options = array(
// 'size' => 1024      # recuperer seulement le debut
// 'phpcheck' => 'oui' # verifier qu'on a bien du php
// dezippe automatiquement les fichiers .gz
function lire_fichier ($fichier, &$contenu, $options=false) {
	$contenu = '';
	if (!@file_exists($fichier))
		return false;

	#spip_timer('lire_fichier');

	if ($fl = @fopen($fichier, 'r')) {

		// verrou lecture
		while (!spip_flock($fl, LOCK_SH, $fichier));

		if (!$s = $options['size'])
			$s = @filesize($fichier);
		else
			$s = min($s, @filesize($fichier));
		$contenu = @fread($fl, $s);
		// lire le fichier
		$contenu = spip_file_get_contents($fichier);

		// liberer le verrou
		spip_flock($fl, LOCK_UN, $fichier);
		@fclose($fl);

		// Verifications
		$ok = (strlen($contenu) == $s);
		$ok = true;
		if ($options['phpcheck'] == 'oui')
			$ok &= (ereg("[?]>\n?$", $contenu));

		#spip_log("$fread $fichier ".spip_timer('lire_fichier'));
		if (!$ok)
			spip_log("echec lecture $fichier");

		return $ok;
	}
}
@@ -927,6 +902,7 @@ function lire_fichier ($fichier, &$contenu, $options=false) {
//
// Ecrire un fichier de maniere un peu sure
//
// zippe les fichiers .gz
function ecrire_fichier ($fichier, $contenu) {

	// Ecriture dans un fichier temporaire
@@ -936,11 +912,26 @@ function ecrire_fichier ($fichier, $contenu) {
	$fichiertmp = $dir.'/'
	.uniqid(substr(md5($fichier),0,6).'-'
	.@getmypid()).".tmp";
	if ($ft = @fopen($fichiertmp, 'wb')) {

	$gzip = (substr($fichier, -3) == '.gz');

	if ($gzip) {
		$fopen = gzopen;
		$fputs = gzputs;
		$fclose = gzclose;
	} else {
		$fopen = fopen;
		$fputs = fputs;
		$fclose = fclose;
	}

	#spip_timer('ecrire_fichier');

	if ($ft = @$fopen($fichiertmp, 'wb')) {
		// on en profite pour tester flock()
		$flock = test_flock($dir, $ft);
		$s = @fputs($ft, $contenu);
		@fclose($ft);
		$s = @$fputs($ft, $contenu);
		@$fclose($ft);
		$ok = (strlen($contenu) == $s);
	}

@@ -964,6 +955,8 @@ function ecrire_fichier ($fichier, $contenu) {
	if (!$ok)
		@unlink($fichiertmp);

	#spip_log("$fputs $fichier ".spip_timer('ecrire_fichier'));

	return $ok;
}

+27 −28
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -15,36 +15,27 @@ function bouton_admin($titre, $lien) {
}


function boutons_admin_debug () {
	if ($GLOBALS['bouton_admin_debug']
function boutons_admin_debug($forcer_debug = false) {
	if (($forcer_debug OR $GLOBALS['bouton_admin_debug']
	OR $GLOBALS['var_afficher_debug'])
	AND ($GLOBALS['auteur_session']['statut'] == '0minirezo')) {
		include_ecrire('inc_filtres.php3');

		$link = $GLOBALS['clean_link'];
		if ($link->getvar('var_afficher_debug') != 'page') {
		$link->addvar('var_afficher_debug', 'page');
		$link->addvar('recalcul', 'oui');
		$ret .= bouton_admin(_L('Debug cache'), $link->getUrl());
		}

		$link = $GLOBALS['clean_link'];
		if ($link->getvar('var_afficher_debug') != 'skel') {
		$link->addvar('var_afficher_debug', 'skel');
		$link->addvar('recalcul', 'oui');
		$ret .= bouton_admin(_L('Debug skel'), $link->getUrl());
	}
	
		$link = $GLOBALS['clean_link'];
		if ($link->getvar('var_afficher_debug') != '') {
			$link->delvar('var_afficher_debug');
			$link->addvar('recalcul', 'oui');
			$ret .= bouton_admin(_T('icone_retour'), $link->getUrl());
		}
	}
	
	return $ret;
}

function afficher_boutons_admin($pop) {
function afficher_boutons_admin($pop, $forcer_debug = false) {
	global $id_article, $id_breve, $id_rubrique, $id_mot, $id_auteur;
	include_ecrire("inc_filtres.php3");
	include_ecrire("inc_lang.php3");
@@ -54,8 +45,8 @@ function afficher_boutons_admin($pop) {
		$q = spip_query("SELECT lang FROM spip_auteurs WHERE login='$login'");
		$row = spip_fetch_array($q);
		$lang = $row['lang'];
	}
		lang_select($lang);
	}

	// Feuilles de style admin : d'abord la CSS officielle, puis la perso,
	// puis celle du squelette (.spip-admin, cf. impression.css)
@@ -86,6 +77,7 @@ function afficher_boutons_admin($pop) {
	// Bouton Recalculer
	$link = $GLOBALS['clean_link'];
	$link->addVar('recalcul', 'oui');
	$link->delVar('var_afficher_debug');
	$lien = $link->getUrl();
	$ret .= bouton_admin(_T('admin_recalculer').$pop, $lien);

@@ -101,7 +93,7 @@ function afficher_boutons_admin($pop) {
	}

	// Boutons debug
	$ret .= boutons_admin_debug();
	$ret .= boutons_admin_debug($forcer_debug);

	$ret .= "</ul></div></div></div>";

@@ -111,7 +103,8 @@ function afficher_boutons_admin($pop) {
}

function calcul_admin_page($cached, $texte) {
	$a = '<'.'?php echo afficher_boutons_admin("'. ($cached ? ' *' : '').'"); ?'.'>';

	$a = afficher_boutons_admin($cached ? ' *' : '');

	// La constante doit etre definie a l'identique dans inc-form-squel
	// balise #FORMULAIRE_ADMIN ? sinon ajouter en fin de page
@@ -133,12 +126,18 @@ function page_debug($type,$texte,$fichier) {
	<link rel='stylesheet' href='spip_admin.css' type='text/css' />\n";
	if (@file_exists('spip_admin_perso.css')) echo "\t<link rel='stylesheet' href='spip_admin_perso.css' type='text/css' />\n";
	echo "</head><body>\n";
	echo "<code>$fichier</code>\n";
	echo '<div class="spip-admin-bloc">
	<div class="spip-admin">';
	echo boutons_admin_debug();
	echo "</ul></div><hr />\n";
	echo "<p style='whitespace: nowrap;'><br /><code>$fichier</code><hr />\n";

	$tableau = explode("\n", $texte);
	$format = "%0".strlen(count($tableau))."d";
	$texte = '';
	foreach ($tableau as $ligne)
		$texte .= "\n".sprintf($format, ++$i).'. '.$ligne;
	highlight_string($texte);

	echo "</p>";
	echo afficher_boutons_admin('', true);
	echo "</body></html>\n";
}


+3 −7
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -414,14 +414,10 @@ function calculer_param_date($date_compare, $date_orig) {
function calculer_param_dynamique($val, &$boucles, $idb) {
	if (ereg("^#([A-Za-z0-9_-]+)$", $val, $m)) {
		$c = calculer_champ('',$m[1], $idb, $boucles,$idb);
		#spip_log("trouve $c");
		if ($a) {
			return array(_T('info_erreur_squelette'),
			($val . _L("&nbsp;: champ interdit dans cette comparaison"))) ;
		} else if (ereg("[$]Pile[[][^]]+[]][[]'[^]]*'[]]", $c, $v))
		if (ereg("[$]Pile[[][^]]+[]][[]'[^]]*'[]]", $c, $v))
			return $v[0];
		else {
			spip_log("hum : $c");
			spip_log("champ inexistant ? : $c");
			return $c;
		}
	} else {
Chargement en cours