Valider b0e46520 rédigé par esj's avatar esj
Parcourir les fichiers

Correction d'un bug de conception affectant le script ecrire/prive.php...

Correction d'un bug de conception affectant le script ecrire/prive.php permettant d'exécuter un squelette à partir de l'espace privé. Cette exécution marchait pour le squelette lui-meme mais:
	- provoquait des erreurs en cas d'inclusion par ce squelette
	- produisait des URL incorrectes vers les feuilles de styles et connexes

A présent, la compilation d'un squelette ne calcule plus au moment de la compilation les valeurs des constantes _DIR_RESTREINT et _DIR_RACINE, mais au contraire écrit le nom de ces constantes dans le code produit (ceci concerne la balise INCLUDE, les balises dynamiques et la balise DOSSIER_SQUELETTE). Lorsque sera exécuté, il tiendra donc compte de l'espace dans lequel il est appelé, et produira donc des pages différentes selon qu'il est appelé par public.php ou par prive.php.

Afin de ne pas multiplier par 2 la taille du cache ou d'y mettre des pages inappropriées à l'appel effectué, l'utilisation du script prive.php (assez rare) est repérée par le système de cache qui alors n'utilisera pas les pages disponibles en cache, et ne placera pas en cache les pages calculées pour cet appel spécifique.
parent 085d17d0
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+3 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -798,7 +798,7 @@ function get_spip_script($default='') {


// http://doc.spip.org/@generer_url_public
function generer_url_public($script, $args="", $no_entities=false) {
function generer_url_public($script, $args="", $no_entities=false, $rel=false) {

	// si le script est une action (spip_pass, spip_inscription),
	// standardiser vers la nouvelle API
@@ -820,7 +820,7 @@ function generer_url_public($script, $args="", $no_entities=false) {
	if (!$no_entities)
		$action = quote_amp($action);

	return url_de_base() . $action;
	return ($rel ? '' : url_de_base()) . $action;
}

// http://doc.spip.org/@generer_url_prive
@@ -995,7 +995,7 @@ function spip_initialisation($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {

	define('_DOCTYPE_ECRIRE', 
		// "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
		"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>");
		"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>\n");
		// "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>\n");
	       // "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 //EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>\n");
	define('_DOCTYPE_AIDE', 
+10 −7
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -18,13 +18,16 @@ include_spip('inc/cookie');

$auth = charger_fonction('auth', 'inc');
$auth = $auth();
spip_log("authen: $auth");

if ($auth) {
	if ($auth===-1) exit();
	include_spip('inc/headers');
	if ($auth == '6forum') {
	  $auth = generer_url_public('', $_SERVER['QUERY_STRING'], true);
	  spip_log("6forum pour $auth");
		$auth = '../?' . $_SERVER['QUERY_STRING'];
		preg_match(',^[^/]*//[^/]*(.*)/.*/$,',
				   url_de_base(),
				   $r);
		spip_setcookie('spip_session', $spip_session, time() + 3600 * 24 * 14, $r[1]);
	} else
	  $auth = generer_url_public('login',
			"url=" . 
@@ -34,7 +37,7 @@ if ($auth) {
	redirige_par_entete($auth);
 }

# au travail...
include_once 'public.php';
// En somme, est prive' ce qui est publiquement nomme'...

include_once 'public.php';
?>
+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -140,8 +140,8 @@ function balise_DATE_NOUVEAUTES_dist($p) {

// http://doc.spip.org/@balise_DOSSIER_SQUELETTE_dist
function balise_DOSSIER_SQUELETTE_dist($p) {
	$code = addslashes(dirname($p->descr['sourcefile']));
	$p->code = "'$code'" . 
	$code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE));
	$p->code = "_DIR_RACINE . '$code'" . 
	$p->interdire_scripts = false;
	return $p;
}
+5 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -158,7 +158,11 @@ function public_cacher_dist($contexte, &$use_cache, &$chemin_cache, &$page, &$la

	// Cas ignorant le cache car complement dynamique
	if ($_SERVER['REQUEST_METHOD'] == 'POST'
	OR substr($contexte['fond'],0,8)=='modeles/') {
	OR (substr($contexte['fond'],0,8)=='modeles/') 
// Mode auteur authentifie appelant de ecrire/ : il ne faut rien lire du cache
// et n'y ecrire que la compilation des squelettes (pas les pages produites)
// car les references aux repertoires ne sont pas relatifs a l'espace public
	OR !_DIR_RESTREINT) {
		$use_cache = -1;
		$lastmodified = 0;
		$chemin_cache = "";
+20 −21
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -69,36 +69,35 @@ function argumenter_inclure($struct, $descr, &$boucles, $id_boucle, $echap=true)
//
// http://doc.spip.org/@calculer_inclure
function calculer_inclure($struct, $descr, &$boucles, $id_boucle) {
	$fichier = $struct->texte;

	# raccourci <INCLURE{fond=xxx}> sans fichier .php
	if (!strlen($fichier))
		$path = _DIR_RESTREINT.'public.php';

	# sinon chercher le fichier, eventuellement en changeant.php3 => .php
	# Si pas raccourci <INCLURE{fond=xxx}> 
	# chercher le fichier, eventuellement en changeant.php3 => .php
	# et en gardant la compatibilite <INCLURE(page.php3)>
	else if (!($path = find_in_path($fichier))
	AND !(
		preg_match(',^(.*[.]php)3$,', $fichier, $r)
		AND (
			($path = find_in_path($r[1]))
			OR ($path = ($r[1] == 'page.php') ? _DIR_RESTREINT.'public.php':'')
		)
	)) {
	if ($fichier = $struct->texte) {
		if (preg_match(',^(.*[.]php)3$,', $fichier, $r)) {
			$fichier = $r[1];
		}
		if ($fichier == 'page.php') {
			$fichier = '';
		} else {
			$path = find_in_path($fichier);
			if (!$path) {
			spip_log("ERREUR: <INCLURE($fichier)> impossible");
			erreur_squelette(_T('zbug_info_erreur_squelette'),
				 "&lt;INCLURE($fichier)&gt; - "
				 ._T('fichier_introuvable', array('fichier' => $fichier)));
			return "'<!-- Erreur INCLURE(".texte_script($fichier).") -->'";
			}

	$l = argumenter_inclure($struct, $descr, $boucles, $id_boucle);
		}
	}

	return "\n'<".
		"?php\n\t\$contexte_inclus = array(" .
		join(",\n\t",$l) .
		join(",\n\t", argumenter_inclure($struct, $descr, $boucles, $id_boucle)) .
		");" .
		"\n\tinclude(" .
		($fichier ? "\\'$path\\'" : ('_DIR_RESTREINT . "public.php"')).
		");" .
		"\n\tinclude(\\'$path\\');" .
		"\n?'." . "'>'";
 }

Chargement en cours