From 428896941ffa18be1a2838e54157f7aec7417e1c Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Thu, 24 Apr 2008 14:06:33 +0000
Subject: [PATCH] support d'ajax avec les ecritures #MODELE{truc,ajax}
 <truc|ajax> Au passage, les parametres a valeur implicite sont acceptes dans
 les modeles : par exemple : <embxx|autostart> est equivalent a
 <embxx|autostart=autostart>

---
 ecrire/public/assembler.php | 13 +++++++++++--
 ecrire/public/balises.php   |  9 ++++++++-
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/ecrire/public/assembler.php b/ecrire/public/assembler.php
index 73550b72b6..96e978d0bc 100644
--- a/ecrire/public/assembler.php
+++ b/ecrire/public/assembler.php
@@ -658,6 +658,8 @@ function creer_contexte_de_modele($args) {
 				$args = explode('=', $val);
 				if (count($args)>=2) // Flashvars=arg1=machin&arg2=truc genere plus de deux args
 					$contexte[trim($args[0])] = substr($val,strlen($args[0])+1);
+				else // notation abregee
+					$contexte[trim($val)] = trim($val);
 			}
 		}
 		else
@@ -682,7 +684,7 @@ function inclure_modele($type, $id, $params, $lien, $connect='') {
 		list(,$soustype) = each($params);
 		$soustype = strtolower($soustype);
 		if (in_array($soustype,
-		array('left', 'right', 'center'))) {
+		array('left', 'right', 'center', 'ajax'))) {
 			list(,$soustype) = each($params);
 			$soustype = strtolower($soustype);
 		}
@@ -693,6 +695,8 @@ function inclure_modele($type, $id, $params, $lien, $connect='') {
 				$fond = 'modeles/'.$type;
 				$class = $soustype;
 			}
+			// enlever le sous type des params
+			$params = array_diff($params,array($soustype));
 		}
 	}
 
@@ -739,6 +743,11 @@ function inclure_modele($type, $id, $params, $lien, $connect='') {
 	// Traiter les parametres
 	// par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
 	$arg_list = creer_contexte_de_modele($params);
+	if (isset($arg_list['ajax']) && $arg_list['ajax']=='ajax'){
+		$contexte['fond_ajax']=$contexte['fond'];
+		$contexte['fond']='fond/ajax';
+		unset($arg_list['ajax']);
+	}
 	$contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
 	$contexte = array_merge($contexte,$arg_list);
 
@@ -752,7 +761,7 @@ function inclure_modele($type, $id, $params, $lien, $connect='') {
 	$GLOBALS['compt_note'] = 0;
 
 	// Appliquer le modele avec le contexte
-	$page = evaluer_fond($fond, $contexte, array(), $connect);
+	$page = evaluer_fond($contexte['fond'], $contexte, array(), $connect);
 	$retour = trim($page['texte']);
 
 	// Lever un drapeau (global) si le modele utilise #SESSION
diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php
index 0f083ee81a..e92464df55 100644
--- a/ecrire/public/balises.php
+++ b/ecrire/public/balises.php
@@ -1127,12 +1127,19 @@ function balise_MODELE_dist($p) {
 	if (!$nom)
 		die("erreur de compilation #MODELE{nom du modele}");
 
+	$nom = "modeles/".$nom;
 	$champ = phraser_arguments_inclure($p, true); 
 
 	// a priori true
 	// si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise
 	// si true, les arguments simples (sans truc=chose) vont degager
 	$code_contexte = argumenter_inclure($champ, $p->descr, $p->boucles, $p->id_boucle, false);
+	// Gerer ajax
+	if (isset($code_contexte['ajax'])){
+		$code_contexte['fond_ajax'] = "'fond_ajax' => '$nom'";
+		$nom = 'fond/ajax_stat';
+		unset($_contexte['ajax']);
+	}
 
 	// Si le champ existe dans la pile, on le met dans le contexte
 	// (a priori c'est du code mort ; il servait pour #LESAUTEURS dans
@@ -1150,7 +1157,7 @@ function balise_MODELE_dist($p) {
 
 	$connect = $p->boucles[$p->id_boucle]->sql_serveur;
 	$p->code = "( ((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))<5)?
-	recuperer_fond('modeles/".$nom."',
+	recuperer_fond('$nom',
 		creer_contexte_de_modele(array(".join(',', $code_contexte).",'recurs='.(++\$recurs), \$GLOBALS['spip_lang'])), true, " . sql_quote($connect) . "):'')";
 	$p->interdire_scripts = false; // securite assuree par le squelette
 
-- 
GitLab