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

Après un remue-méninges collectif, les problèmes de contextes autour de {{{...

Après un remue-méninges collectif, les problèmes de contextes autour de {{{ lang }}}, {{{ date }}} et {{{ date_redac }}} sont résolus par l'introduction d'une variante de{{{ #INCLURE }}}s'écrivant{{{ #INCLURE* }}}. En présence de l'étoile, l'inclusion a lieu sans insertion dans le contexte des 3 paramètres évoqués (on peut donc utiliser des critères conditionnels dans le squelette inclus). Les formes habituelles de{{{ INCLURE }}}restent inchangées.

En commentaire dans ce dépot, un essai inabouti de simuler l'insertion des paramètres {{{ date }}} et {{{ date_redac }}} par le compilateur. Ca a des impacts a plusieurs endroits, ce sera pour plus tard.
parent 133807b9
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+11 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -1428,6 +1428,7 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect='
	$pages = array();
	if (isset($contexte['fond']))
		$fond = $contexte['fond'];

	// Si on a inclus sans fixer le critere de lang, on prend la langue courante
	if (!isset($contexte['lang']))
		$contexte['lang'] = $GLOBALS['spip_lang'];
@@ -1436,6 +1437,16 @@ function recuperer_fond($fond, $contexte=array(), $options = array(), $connect='
		$lang_select = lang_select($contexte['lang']);
	} else $lang_select ='';

	// idem pour les dates
	include_spip('inc/filtres'); // pour normaliser_date
	if (!isset($contexte['date']))
		$contexte['date'] = date("Y-m-d H:i:s");
	else $contexte['date'] = normaliser_date($contexte['date']);

	if (!isset($contexte['date_redac']))
		$contexte['date_redac'] = date("Y-m-d H:i:s");
	else $contexte['date_redac'] = normaliser_date($contexte['date_redac']);

	@$GLOBALS['_INC_PUBLIC']++;

	foreach(is_array($fond) ? $fond : array($fond) as $f){
+17 −22
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -21,9 +21,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
// http://doc.spip.org/@assembler
function assembler($fond, $connect='') {

	global $flag_preserver,$lastmodified, $use_cache;
	global $flag_preserver,$lastmodified, $use_cache, $contexte;

	$GLOBALS['contexte'] = calculer_contexte();
	$contexte = calculer_contexte();
	// Cette fonction est utilisee deux fois
	$cacher = charger_fonction('cacher', 'public');
	// Garnir ces quatre parametres avec les infos sur le cache
@@ -65,10 +65,21 @@ function assembler($fond, $connect='') {
		if (!$use_cache)  {
		// Informer les boutons d'admin du contexte
		// (fourni par assembler_contexte lors de la mise en cache)
			$GLOBALS['contexte'] = $page['contexte'];
			$contexte = $page['contexte'];
		}
		// sinon analyser le contexte & calculer la page
		// sinon rajouter les dates dans le contexte
		// lui rajouter les parametres implcites des URLs symboliques
		// et calculer la page
		else {
			include_spip('inc/filtres'); // pour normaliser_date

			if (!isset($contexte['date']))
				$contexte['date'] = date("Y-m-d H:i:s");
			else $contexte['date'] = normaliser_date($contexte['date']);

			if (!isset($contexte['date_redac']))
				$contexte['date_redac'] = date("Y-m-d H:i:s");
			else $contexte['date_redac'] = normaliser_date($contexte['date_redac']);
			assembler_contexte($fond);
			$parametrer = charger_fonction('parametrer', 'public');
			$page = $parametrer($fond, $GLOBALS['contexte'], $chemin_cache, $connect);
@@ -139,7 +150,7 @@ function assembler_contexte(&$fond)

//
// Contexte : lors du calcul d'une page spip etablit le contexte a partir
// des variables $_GET et $_POST, et leur ajoute la date
// des variables $_GET et $_POST, purgees des fausses variables var_*
// Note : pour hacker le contexte depuis le fichier d'appel (page.php),
// il est recommande de modifier $_GET['toto'] (meme si la page est
// appelee avec la methode POST).
@@ -194,25 +205,9 @@ function inclure_page($fond, $contexte, $connect='') {
	// Si use_cache vaut 0, la page a ete tiree du cache et se trouve dans $page
	if (!$use_cache) {
		$lastmodified = max($lastmodified, $lastinclude);
	}
	// sinon on la calcule et on ajoute la date (et date_redac)
	// dans le contexte, pour que les criteres {age} etc fonctionnent
	// ATTENTION : les balises dynamiques passent par la, 
	// l'ajout de la date/heure/seconde rend tout cache invalide,
	// meme si le reste des arguments est constant
	// probleme possible de perf ici
	else {
		include_spip('inc/filtres'); // pour normaliser_date
		if (isset($contexte['date']))
			$contexte['date'] = normaliser_date($contexte['date']);
		else	$contexte['date'] = date("Y-m-d H:i:s");

		if (!isset($contexte['date_redac']))
			$contexte['date_redac'] = $contexte['date'];
		else $contexte['date_redac'] = normaliser_date($contexte['date_redac']);
	} else {
		$parametrer = charger_fonction('parametrer', 'public');
		$page = $parametrer($fond, $contexte, $chemin_cache, $connect);

		$lastmodified = time();
		// et on l'enregistre sur le disque
		if ($chemin_cache
+17 −13
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -99,9 +99,11 @@ function balise_PUCE_dist($p) {
// http://www.spip.net/fr_article1971.html
// http://doc.spip.org/@balise_DATE_dist
function balise_DATE_dist ($p) {
	$_date = champ_sql('date', $p);
	$p->code = "$_date";
	$p->interdire_scripts = false;
	$d = champ_sql('date', $p);
#	if ($d === "@\$Pile[0]['date']")
#		$d = "isset(\$Pile[0]['date']) ? $d : time()";
	$p->code = "normaliser_date($d)";
	spip_log("balise_DATE retourne $d");
	return $p;
}

@@ -109,8 +111,10 @@ function balise_DATE_dist ($p) {
// http://www.spip.net/fr_article1971.html
// http://doc.spip.org/@balise_DATE_REDAC_dist
function balise_DATE_REDAC_dist ($p) {
	$_date = champ_sql('date_redac', $p);
	$p->code = "$_date";
	$d = champ_sql('date_redac', $p);
#	if ($d === "@\$Pile[0]['date_redac']")
#		$d = "isset(\$Pile[0]['date_redac']) ? $d : time()";
	$p->code = "normaliser_date($d)";
	$p->interdire_scripts = false;
	return $p;
}
@@ -1053,20 +1057,20 @@ function balise_INCLURE_dist($p) {
			unset($_contexte['env']);
		} else $flag_env = false;

		$l = 'array(' . join(",\n\t", $_contexte) .')';
		if ($flag_env) {
			$l = "array_merge(\$Pile[0],$l)";
		}
		$_l = 'array(' . join(",\n\t", $_contexte) .')';
		if ($flag_env) $_l = "array_merge(\$Pile[0],$_l)";

		$_connect = _q(!$id_boucle ? '' : $p->boucles[$id_boucle]->sql_serveur);

		$connect = !$id_boucle ? '' 
		  : $p->boucles[$id_boucle]->sql_serveur;
		$page = $p->etoile
		  ? "evaluer_fond('', \$l = $_l, $_connect)"
		  : "recuperer_fond('',\$l =  $_l, array('raw'=>true), $_connect)";

		$page = '$p = evaluer_fond("", $l = ' . $l. ", " . _q($connect) .')';
		$retour = !isset($_contexte['ajax']) ? 
		  "\$p['texte']" :
		  'encoder_contexte_ajax($l,"",$p["texte"])';

		$p->code = "(!($page) ? '' :\n\t$retour)";
		$p->code = "(!(\$p = $page) ? '' :\n\t$retour)";

	} else {
		$n = interprete_argument_balise(1,$p);
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
#HTTP_HEADER{Content-Type: text/xml; charset=#CHARSET}[(#INCLURE{fond=prive/rss/#ENV{op}}{env})]
 No newline at end of file
#HTTP_HEADER{Content-Type: text/xml; charset=#CHARSET}[(#INCLURE*{fond=prive/rss/#ENV{op}}{env})]
 No newline at end of file