Completed
Push — master ( ca771e...1c1ef3 )
by cam
04:41
created
ecrire/public/references.php 1 patch
Indentation   +499 added lines, -499 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Compilateur\References
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -41,14 +41,14 @@  discard block
 block discarded – undo
41 41
  *     - '' si une référence explicite incorrecte est envoyée
42 42
  */
43 43
 function index_boucle($p) {
44
-	if (strlen($p->nom_boucle)) {
45
-		// retourne l’index explicite demandé s’il existe
46
-		if (!empty($p->boucles[$p->nom_boucle])) {
47
-			return $p->nom_boucle;
48
-		}
49
-		return '';
50
-	} 
51
-	return $p->id_boucle;
44
+    if (strlen($p->nom_boucle)) {
45
+        // retourne l’index explicite demandé s’il existe
46
+        if (!empty($p->boucles[$p->nom_boucle])) {
47
+            return $p->nom_boucle;
48
+        }
49
+        return '';
50
+    } 
51
+    return $p->id_boucle;
52 52
 }
53 53
 
54 54
 
@@ -71,17 +71,17 @@  discard block
 block discarded – undo
71 71
  *     - '' si une référence explicite incorrecte est envoyée
72 72
  */
73 73
 function index_boucle_mere($p) {
74
-	if (strlen($p->nom_boucle)) {
75
-		// retourne l’index explicite demandé s’il existe
76
-		if (!empty($p->boucles[$p->nom_boucle])) {
77
-			return $p->nom_boucle;
78
-		}
79
-		return '';
80
-	} 
81
-	if (!empty($p->descr['id_mere'])) {
82
-		return $p->descr['id_mere'];
83
-	}
84
-	return '';
74
+    if (strlen($p->nom_boucle)) {
75
+        // retourne l’index explicite demandé s’il existe
76
+        if (!empty($p->boucles[$p->nom_boucle])) {
77
+            return $p->nom_boucle;
78
+        }
79
+        return '';
80
+    } 
81
+    if (!empty($p->descr['id_mere'])) {
82
+        return $p->descr['id_mere'];
83
+    }
84
+    return '';
85 85
 }
86 86
 
87 87
 /**
@@ -115,69 +115,69 @@  discard block
 block discarded – undo
115 115
  *     Code PHP pour obtenir le champ SQL
116 116
  */
117 117
 function index_pile(
118
-	$idb,
119
-	$nom_champ,
120
-	&$boucles,
121
-	$explicite = '',
122
-	$defaut = null,
123
-	$remonte_pile = true,
124
-	$select = true
118
+    $idb,
119
+    $nom_champ,
120
+    &$boucles,
121
+    $explicite = '',
122
+    $defaut = null,
123
+    $remonte_pile = true,
124
+    $select = true
125 125
 ) {
126
-	if (!is_string($defaut)) {
127
-		$defaut = '@$Pile[0][\'' . strtolower($nom_champ) . '\']';
128
-	}
129
-
130
-	$i = 0;
131
-	if (strlen($explicite)) {
132
-		// Recherche d'un champ dans un etage superieur
133
-		while (($idb !== $explicite) && ($idb !== '')) {
134
-			#	spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
135
-			$i++;
136
-			$idb = $boucles[$idb]->id_parent;
137
-		}
138
-	}
139
-
140
-	#	spip_log("Cherche: $nom_champ a partir de '$idb'");
141
-	$nom_champ = strtolower($nom_champ);
142
-	$conditionnel = array();
143
-	// attention: entre la boucle nommee 0, "" et le tableau vide,
144
-	// il y a incoherences qu'il vaut mieux eviter
145
-	while (isset($boucles[$idb])) {
146
-		$joker = true;
147
-		// modifie $joker si tous les champs sont autorisés.
148
-		// $t = le select pour le champ, si on l'a trouvé (ou si joker)
149
-		// $c = le nom du champ demandé
150
-		list($t, $c) = index_tables_en_pile($idb, $nom_champ, $boucles, $joker);
151
-		if ($t) {
152
-			if ($select and !in_array($t, $boucles[$idb]->select)) {
153
-				$boucles[$idb]->select[] = $t;
154
-			}
155
-			$champ = '$Pile[$SP' . ($i ? "-$i" : "") . '][\'' . $c . '\']';
156
-			if (!$joker) {
157
-				return index_compose($conditionnel, $champ);
158
-			}
159
-
160
-			// tant que l'on trouve des tables avec joker, on continue
161
-			// avec la boucle parente et on conditionne à l'exécution
162
-			// la présence du champ. Si le champ existe à l'exécution
163
-			// dans une boucle, il est pris, sinon on le cherche dans le parent...
164
-			$conditionnel[] = "isset($champ)?$champ";
165
-		}
166
-
167
-		if ($remonte_pile) {
168
-			#	spip_log("On remonte vers $i");
169
-			// Sinon on remonte d'un cran
170
-			$idb = $boucles[$idb]->id_parent;
171
-			$i++;
172
-		} else {
173
-			$idb = null;
174
-		}
175
-	}
176
-
177
-	#	spip_log("Pas vu $nom_champ");
178
-	// esperons qu'il y sera
179
-	// ou qu'on a fourni une valeur par "defaut" plus pertinent
180
-	return index_compose($conditionnel, $defaut);
126
+    if (!is_string($defaut)) {
127
+        $defaut = '@$Pile[0][\'' . strtolower($nom_champ) . '\']';
128
+    }
129
+
130
+    $i = 0;
131
+    if (strlen($explicite)) {
132
+        // Recherche d'un champ dans un etage superieur
133
+        while (($idb !== $explicite) && ($idb !== '')) {
134
+            #	spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
135
+            $i++;
136
+            $idb = $boucles[$idb]->id_parent;
137
+        }
138
+    }
139
+
140
+    #	spip_log("Cherche: $nom_champ a partir de '$idb'");
141
+    $nom_champ = strtolower($nom_champ);
142
+    $conditionnel = array();
143
+    // attention: entre la boucle nommee 0, "" et le tableau vide,
144
+    // il y a incoherences qu'il vaut mieux eviter
145
+    while (isset($boucles[$idb])) {
146
+        $joker = true;
147
+        // modifie $joker si tous les champs sont autorisés.
148
+        // $t = le select pour le champ, si on l'a trouvé (ou si joker)
149
+        // $c = le nom du champ demandé
150
+        list($t, $c) = index_tables_en_pile($idb, $nom_champ, $boucles, $joker);
151
+        if ($t) {
152
+            if ($select and !in_array($t, $boucles[$idb]->select)) {
153
+                $boucles[$idb]->select[] = $t;
154
+            }
155
+            $champ = '$Pile[$SP' . ($i ? "-$i" : "") . '][\'' . $c . '\']';
156
+            if (!$joker) {
157
+                return index_compose($conditionnel, $champ);
158
+            }
159
+
160
+            // tant que l'on trouve des tables avec joker, on continue
161
+            // avec la boucle parente et on conditionne à l'exécution
162
+            // la présence du champ. Si le champ existe à l'exécution
163
+            // dans une boucle, il est pris, sinon on le cherche dans le parent...
164
+            $conditionnel[] = "isset($champ)?$champ";
165
+        }
166
+
167
+        if ($remonte_pile) {
168
+            #	spip_log("On remonte vers $i");
169
+            // Sinon on remonte d'un cran
170
+            $idb = $boucles[$idb]->id_parent;
171
+            $i++;
172
+        } else {
173
+            $idb = null;
174
+        }
175
+    }
176
+
177
+    #	spip_log("Pas vu $nom_champ");
178
+    // esperons qu'il y sera
179
+    // ou qu'on a fourni une valeur par "defaut" plus pertinent
180
+    return index_compose($conditionnel, $defaut);
181 181
 }
182 182
 
183 183
 /**
@@ -191,12 +191,12 @@  discard block
 block discarded – undo
191 191
  * @return string              Code PHP complet de recherche d'un champ
192 192
  */
193 193
 function index_compose($conditionnel, $defaut) {
194
-	while ($c = array_pop($conditionnel)) {
195
-		// si on passe defaut = '', ne pas générer d'erreur de compilation.
196
-		$defaut = "($c:(" . ($defaut ? $defaut : "''") . "))";
197
-	}
194
+    while ($c = array_pop($conditionnel)) {
195
+        // si on passe defaut = '', ne pas générer d'erreur de compilation.
196
+        $defaut = "($c:(" . ($defaut ? $defaut : "''") . "))";
197
+    }
198 198
 
199
-	return $defaut;
199
+    return $defaut;
200 200
 }
201 201
 
202 202
 /**
@@ -232,74 +232,74 @@  discard block
 block discarded – undo
232 232
  **/
233 233
 function index_tables_en_pile($idb, $nom_champ, &$boucles, &$joker) {
234 234
 
235
-	$r = $boucles[$idb]->type_requete;
236
-	// boucle recursive, c'est foutu...
237
-	if ($r == TYPE_RECURSIF) {
238
-		return array();
239
-	}
240
-	if (!$r) {
241
-		$joker = false; // indiquer a l'appelant
242
-		# continuer pour chercher l'erreur suivante
243
-		return array("'#" . $r . ':' . $nom_champ . "'", '');
244
-	}
245
-
246
-	$desc = $boucles[$idb]->show;
247
-	// le nom du champ est il une exception de la table ? un alias ?
248
-	$excep = isset($GLOBALS['exceptions_des_tables'][$r]) ? $GLOBALS['exceptions_des_tables'][$r] : '';
249
-	if ($excep) {
250
-		$excep = isset($excep[$nom_champ]) ? $excep[$nom_champ] : '';
251
-	}
252
-	if ($excep) {
253
-		$joker = false; // indiquer a l'appelant
254
-		return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
255
-	} // pas d'alias. Le champ existe t'il ?
256
-	else {
257
-		// le champ est réellement présent, on le prend.
258
-		if (isset($desc['field'][$nom_champ])) {
259
-			$t = $boucles[$idb]->id_table;
260
-			$joker = false; // indiquer a l'appelant
261
-			return array("$t.$nom_champ", $nom_champ);
262
-		}
263
-		// Tous les champs sont-ils acceptés ?
264
-		// Si oui, on retourne le champ, et on lève le flag joker
265
-		// C'est le cas des itérateurs DATA qui acceptent tout
266
-		// et testent la présence du champ à l'exécution et non à la compilation
267
-		// car ils ne connaissent pas ici leurs contenus.
268
-		elseif (/*$joker AND */
269
-		isset($desc['field']['*'])
270
-		) {
271
-			$joker = true; // indiquer a l'appelant
272
-			return array($nom_champ, $nom_champ);
273
-		}
274
-		// pas d'alias, pas de champ, pas de joker...
275
-		// tenter via une jointure...
276
-		else {
277
-			$joker = false; // indiquer a l'appelant
278
-			// regarder si le champ est deja dans une jointure existante
279
-			// sinon, si il y a des joitures explicites, la construire
280
-			if (!$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb])) {
281
-				if ($boucles[$idb]->jointures_explicites) {
282
-					// [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!!
283
-					// fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites
284
-					// mais est-ce ce qu'on veut ?
285
-					$jointures = preg_split("/\s+/", $boucles[$idb]->jointures_explicites);
286
-					if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) {
287
-						$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]);
288
-					}
289
-				}
290
-			}
291
-			if ($t) {
292
-				// si on a trouvé une jointure possible, on fait comme
293
-				// si c'était une exception pour le champ demandé
294
-				return index_exception($boucles[$idb],
295
-					$desc,
296
-					$nom_champ,
297
-					array($t[1]['id_table'], reset($t[2])));
298
-			}
299
-
300
-			return array('', '');
301
-		}
302
-	}
235
+    $r = $boucles[$idb]->type_requete;
236
+    // boucle recursive, c'est foutu...
237
+    if ($r == TYPE_RECURSIF) {
238
+        return array();
239
+    }
240
+    if (!$r) {
241
+        $joker = false; // indiquer a l'appelant
242
+        # continuer pour chercher l'erreur suivante
243
+        return array("'#" . $r . ':' . $nom_champ . "'", '');
244
+    }
245
+
246
+    $desc = $boucles[$idb]->show;
247
+    // le nom du champ est il une exception de la table ? un alias ?
248
+    $excep = isset($GLOBALS['exceptions_des_tables'][$r]) ? $GLOBALS['exceptions_des_tables'][$r] : '';
249
+    if ($excep) {
250
+        $excep = isset($excep[$nom_champ]) ? $excep[$nom_champ] : '';
251
+    }
252
+    if ($excep) {
253
+        $joker = false; // indiquer a l'appelant
254
+        return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
255
+    } // pas d'alias. Le champ existe t'il ?
256
+    else {
257
+        // le champ est réellement présent, on le prend.
258
+        if (isset($desc['field'][$nom_champ])) {
259
+            $t = $boucles[$idb]->id_table;
260
+            $joker = false; // indiquer a l'appelant
261
+            return array("$t.$nom_champ", $nom_champ);
262
+        }
263
+        // Tous les champs sont-ils acceptés ?
264
+        // Si oui, on retourne le champ, et on lève le flag joker
265
+        // C'est le cas des itérateurs DATA qui acceptent tout
266
+        // et testent la présence du champ à l'exécution et non à la compilation
267
+        // car ils ne connaissent pas ici leurs contenus.
268
+        elseif (/*$joker AND */
269
+        isset($desc['field']['*'])
270
+        ) {
271
+            $joker = true; // indiquer a l'appelant
272
+            return array($nom_champ, $nom_champ);
273
+        }
274
+        // pas d'alias, pas de champ, pas de joker...
275
+        // tenter via une jointure...
276
+        else {
277
+            $joker = false; // indiquer a l'appelant
278
+            // regarder si le champ est deja dans une jointure existante
279
+            // sinon, si il y a des joitures explicites, la construire
280
+            if (!$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb])) {
281
+                if ($boucles[$idb]->jointures_explicites) {
282
+                    // [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!!
283
+                    // fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites
284
+                    // mais est-ce ce qu'on veut ?
285
+                    $jointures = preg_split("/\s+/", $boucles[$idb]->jointures_explicites);
286
+                    if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) {
287
+                        $t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]);
288
+                    }
289
+                }
290
+            }
291
+            if ($t) {
292
+                // si on a trouvé une jointure possible, on fait comme
293
+                // si c'était une exception pour le champ demandé
294
+                return index_exception($boucles[$idb],
295
+                    $desc,
296
+                    $nom_champ,
297
+                    array($t[1]['id_table'], reset($t[2])));
298
+            }
299
+
300
+            return array('', '');
301
+        }
302
+    }
303 303
 }
304 304
 
305 305
 
@@ -327,52 +327,52 @@  discard block
 block discarded – undo
327 327
  *     est une expression pour le SELECT de la boucle du style "mots.titre AS titre_mot"
328 328
  **/
329 329
 function index_exception(&$boucle, $desc, $nom_champ, $excep) {
330
-	static $trouver_table;
331
-	if (!$trouver_table) {
332
-		$trouver_table = charger_fonction('trouver_table', 'base');
333
-	}
334
-
335
-	if (is_array($excep)) {
336
-		// permettre aux plugins de gerer eux meme des jointures derogatoire ingerables
337
-		$t = null;
338
-		if (count($excep) == 3) {
339
-			$index_exception_derogatoire = array_pop($excep);
340
-			$t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
341
-		}
342
-		if ($t == null) {
343
-			list($e, $x) = $excep;  #PHP4 affecte de gauche a droite
344
-			$excep = $x;    #PHP5 de droite a gauche !
345
-			$j = $trouver_table($e, $boucle->sql_serveur);
346
-			if (!$j) {
347
-				return array('', '');
348
-			}
349
-			$e = $j['table'];
350
-			if (!$t = array_search($e, $boucle->from)) {
351
-				$k = $j['key']['PRIMARY KEY'];
352
-				if (strpos($k, ',')) {
353
-					$l = (preg_split('/\s*,\s*/', $k));
354
-					$k = $desc['key']['PRIMARY KEY'];
355
-					if (!in_array($k, $l)) {
356
-						spip_log("jointure impossible $e " . join(',', $l));
357
-
358
-						return array('', '');
359
-					}
360
-				}
361
-				$k = array($boucle->id_table, array($e), $k);
362
-				fabrique_jointures($boucle, array($k));
363
-				$t = array_search($e, $boucle->from);
364
-			}
365
-		}
366
-	} else {
367
-		$t = $boucle->id_table;
368
-	}
369
-	// demander a SQL de gerer le synonyme
370
-	// ca permet que excep soit dynamique (Cedric, 2/3/06)
371
-	if ($excep != $nom_champ) {
372
-		$excep .= ' AS ' . $nom_champ;
373
-	}
374
-
375
-	return array("$t.$excep", $nom_champ);
330
+    static $trouver_table;
331
+    if (!$trouver_table) {
332
+        $trouver_table = charger_fonction('trouver_table', 'base');
333
+    }
334
+
335
+    if (is_array($excep)) {
336
+        // permettre aux plugins de gerer eux meme des jointures derogatoire ingerables
337
+        $t = null;
338
+        if (count($excep) == 3) {
339
+            $index_exception_derogatoire = array_pop($excep);
340
+            $t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
341
+        }
342
+        if ($t == null) {
343
+            list($e, $x) = $excep;  #PHP4 affecte de gauche a droite
344
+            $excep = $x;    #PHP5 de droite a gauche !
345
+            $j = $trouver_table($e, $boucle->sql_serveur);
346
+            if (!$j) {
347
+                return array('', '');
348
+            }
349
+            $e = $j['table'];
350
+            if (!$t = array_search($e, $boucle->from)) {
351
+                $k = $j['key']['PRIMARY KEY'];
352
+                if (strpos($k, ',')) {
353
+                    $l = (preg_split('/\s*,\s*/', $k));
354
+                    $k = $desc['key']['PRIMARY KEY'];
355
+                    if (!in_array($k, $l)) {
356
+                        spip_log("jointure impossible $e " . join(',', $l));
357
+
358
+                        return array('', '');
359
+                    }
360
+                }
361
+                $k = array($boucle->id_table, array($e), $k);
362
+                fabrique_jointures($boucle, array($k));
363
+                $t = array_search($e, $boucle->from);
364
+            }
365
+        }
366
+    } else {
367
+        $t = $boucle->id_table;
368
+    }
369
+    // demander a SQL de gerer le synonyme
370
+    // ca permet que excep soit dynamique (Cedric, 2/3/06)
371
+    if ($excep != $nom_champ) {
372
+        $excep .= ' AS ' . $nom_champ;
373
+    }
374
+
375
+    return array("$t.$excep", $nom_champ);
376 376
 }
377 377
 
378 378
 /**
@@ -397,7 +397,7 @@  discard block
 block discarded – undo
397 397
  *     Code PHP pour retrouver le champ
398 398
  */
399 399
 function champ_sql($champ, $p, $defaut = null, $remonte_pile = true) {
400
-	return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile);
400
+    return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile);
401 401
 }
402 402
 
403 403
 
@@ -417,9 +417,9 @@  discard block
 block discarded – undo
417 417
  *     Code PHP pour d'exécution de la balise et de ses filtres
418 418
  **/
419 419
 function calculer_champ($p) {
420
-	$p = calculer_balise($p->nom_champ, $p);
420
+    $p = calculer_balise($p->nom_champ, $p);
421 421
 
422
-	return applique_filtres($p);
422
+    return applique_filtres($p);
423 423
 }
424 424
 
425 425
 
@@ -456,26 +456,26 @@  discard block
 block discarded – undo
456 456
  **/
457 457
 function calculer_balise($nom, $p) {
458 458
 
459
-	// S'agit-t-il d'une balise_XXXX[_dist]() ?
460
-	if ($f = charger_fonction($nom, 'balise', true)) {
461
-		$p->balise_calculee = true;
462
-		$res = $f($p);
463
-		if ($res !== null and is_object($res)) {
464
-			return $res;
465
-		}
466
-	}
467
-
468
-	// Certaines des balises comportant un _ sont generiques
469
-	if ($balise_generique = chercher_balise_generique($nom)) {
470
-		$res = $balise_generique['fonction_generique']($p);
471
-		if ($res !== null and is_object($res)) {
472
-			return $res;
473
-		}
474
-	}
475
-
476
-	$f = charger_fonction('DEFAUT', 'calculer_balise');
477
-
478
-	return $f($nom, $p);
459
+    // S'agit-t-il d'une balise_XXXX[_dist]() ?
460
+    if ($f = charger_fonction($nom, 'balise', true)) {
461
+        $p->balise_calculee = true;
462
+        $res = $f($p);
463
+        if ($res !== null and is_object($res)) {
464
+            return $res;
465
+        }
466
+    }
467
+
468
+    // Certaines des balises comportant un _ sont generiques
469
+    if ($balise_generique = chercher_balise_generique($nom)) {
470
+        $res = $balise_generique['fonction_generique']($p);
471
+        if ($res !== null and is_object($res)) {
472
+            return $res;
473
+        }
474
+    }
475
+
476
+    $f = charger_fonction('DEFAUT', 'calculer_balise');
477
+
478
+    return $f($nom, $p);
479 479
 }
480 480
 
481 481
 
@@ -503,36 +503,36 @@  discard block
 block discarded – undo
503 503
  **/
504 504
 function calculer_balise_DEFAUT_dist($nom, $p) {
505 505
 
506
-	// ca pourrait etre un champ SQL homonyme,
507
-	$p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
508
-
509
-	// compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
510
-	// il faut recracher {...} quand ce n'est finalement pas des args
511
-	if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) {
512
-		$code = addslashes($p->fonctions[0][1]);
513
-		$p->code .= " . '$code'";
514
-	}
515
-
516
-	// ne pas passer le filtre securite sur les id_xxx
517
-	if (strpos($nom, 'ID_') === 0) {
518
-		$p->interdire_scripts = false;
519
-	}
520
-
521
-	// Compatibilite ascendante avec les couleurs html (#FEFEFE) :
522
-	// SI le champ SQL n'est pas trouve
523
-	// ET si la balise a une forme de couleur
524
-	// ET s'il n'y a ni filtre ni etoile
525
-	// ALORS retourner la couleur.
526
-	// Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)]
527
-	if (preg_match("/^[A-F]{1,6}$/i", $nom)
528
-		and !$p->etoile
529
-		and !$p->fonctions
530
-	) {
531
-		$p->code = "'#$nom'";
532
-		$p->interdire_scripts = false;
533
-	}
534
-
535
-	return $p;
506
+    // ca pourrait etre un champ SQL homonyme,
507
+    $p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
508
+
509
+    // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
510
+    // il faut recracher {...} quand ce n'est finalement pas des args
511
+    if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) {
512
+        $code = addslashes($p->fonctions[0][1]);
513
+        $p->code .= " . '$code'";
514
+    }
515
+
516
+    // ne pas passer le filtre securite sur les id_xxx
517
+    if (strpos($nom, 'ID_') === 0) {
518
+        $p->interdire_scripts = false;
519
+    }
520
+
521
+    // Compatibilite ascendante avec les couleurs html (#FEFEFE) :
522
+    // SI le champ SQL n'est pas trouve
523
+    // ET si la balise a une forme de couleur
524
+    // ET s'il n'y a ni filtre ni etoile
525
+    // ALORS retourner la couleur.
526
+    // Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)]
527
+    if (preg_match("/^[A-F]{1,6}$/i", $nom)
528
+        and !$p->etoile
529
+        and !$p->fonctions
530
+    ) {
531
+        $p->code = "'#$nom'";
532
+        $p->interdire_scripts = false;
533
+    }
534
+
535
+    return $p;
536 536
 }
537 537
 
538 538
 
@@ -575,36 +575,36 @@  discard block
 block discarded – undo
575 575
  **/
576 576
 function calculer_balise_dynamique($p, $nom, $l, $supp = array()) {
577 577
 
578
-	if (!balise_distante_interdite($p)) {
579
-		$p->code = "''";
580
-
581
-		return $p;
582
-	}
583
-	// compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
584
-	// il faut recracher {...} quand ce n'est finalement pas des args
585
-	if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) {
586
-		$p->fonctions = null;
587
-	}
588
-
589
-	if ($p->param and ($c = $p->param[0])) {
590
-		// liste d'arguments commence toujours par la chaine vide
591
-		array_shift($c);
592
-		// construire la liste d'arguments comme pour un filtre
593
-		$param = compose_filtres_args($p, $c, ',');
594
-	} else {
595
-		$param = "";
596
-	}
597
-	$collecte = collecter_balise_dynamique($l, $p, $nom);
598
-
599
-	$p->code = sprintf(CODE_EXECUTER_BALISE, $nom,
600
-		join(',', $collecte),
601
-		($collecte ? $param : substr($param, 1)), # virer la virgule
602
-		memoriser_contexte_compil($p),
603
-		(!$supp ? '' : (', ' . join(',', $supp))));
604
-
605
-	$p->interdire_scripts = false;
606
-
607
-	return $p;
578
+    if (!balise_distante_interdite($p)) {
579
+        $p->code = "''";
580
+
581
+        return $p;
582
+    }
583
+    // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
584
+    // il faut recracher {...} quand ce n'est finalement pas des args
585
+    if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) {
586
+        $p->fonctions = null;
587
+    }
588
+
589
+    if ($p->param and ($c = $p->param[0])) {
590
+        // liste d'arguments commence toujours par la chaine vide
591
+        array_shift($c);
592
+        // construire la liste d'arguments comme pour un filtre
593
+        $param = compose_filtres_args($p, $c, ',');
594
+    } else {
595
+        $param = "";
596
+    }
597
+    $collecte = collecter_balise_dynamique($l, $p, $nom);
598
+
599
+    $p->code = sprintf(CODE_EXECUTER_BALISE, $nom,
600
+        join(',', $collecte),
601
+        ($collecte ? $param : substr($param, 1)), # virer la virgule
602
+        memoriser_contexte_compil($p),
603
+        (!$supp ? '' : (', ' . join(',', $supp))));
604
+
605
+    $p->interdire_scripts = false;
606
+
607
+    return $p;
608 608
 }
609 609
 
610 610
 
@@ -634,13 +634,13 @@  discard block
 block discarded – undo
634 634
  *     Liste des codes PHP d'éxecution des balises collectées
635 635
  **/
636 636
 function collecter_balise_dynamique($l, &$p, $nom) {
637
-	$args = array();
638
-	foreach ($l as $c) {
639
-		$x = calculer_balise($c, $p);
640
-		$args[] = $x->code;
641
-	}
637
+    $args = array();
638
+    foreach ($l as $c) {
639
+        $x = calculer_balise($c, $p);
640
+        $args[] = $x->code;
641
+    }
642 642
 
643
-	return $args;
643
+    return $args;
644 644
 }
645 645
 
646 646
 
@@ -655,20 +655,20 @@  discard block
 block discarded – undo
655 655
  *     Nom de la connexion
656 656
  **/
657 657
 function trouver_nom_serveur_distant($p) {
658
-	$nom = $p->id_boucle;
659
-	if ($nom
660
-		and isset($p->boucles[$nom])
661
-	) {
662
-		$s = $p->boucles[$nom]->sql_serveur;
663
-		if (strlen($s)
664
-			and strlen($serveur = strtolower($s))
665
-			and !in_array($serveur, $GLOBALS['exception_des_connect'])
666
-		) {
667
-			return $serveur;
668
-		}
669
-	}
670
-
671
-	return "";
658
+    $nom = $p->id_boucle;
659
+    if ($nom
660
+        and isset($p->boucles[$nom])
661
+    ) {
662
+        $s = $p->boucles[$nom]->sql_serveur;
663
+        if (strlen($s)
664
+            and strlen($serveur = strtolower($s))
665
+            and !in_array($serveur, $GLOBALS['exception_des_connect'])
666
+        ) {
667
+            return $serveur;
668
+        }
669
+    }
670
+
671
+    return "";
672 672
 }
673 673
 
674 674
 
@@ -692,15 +692,15 @@  discard block
 block discarded – undo
692 692
  *     - false : La balise est interdite car le serveur est distant
693 693
  **/
694 694
 function balise_distante_interdite($p) {
695
-	$nom = $p->id_boucle;
695
+    $nom = $p->id_boucle;
696 696
 
697
-	if ($nom and trouver_nom_serveur_distant($p)) {
698
-		spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
697
+    if ($nom and trouver_nom_serveur_distant($p)) {
698
+        spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
699 699
 
700
-		return false;
701
-	}
700
+        return false;
701
+    }
702 702
 
703
-	return true;
703
+    return true;
704 704
 }
705 705
 
706 706
 
@@ -711,78 +711,78 @@  discard block
 block discarded – undo
711 711
 // https://code.spip.net/@champs_traitements
712 712
 function champs_traitements($p) {
713 713
 
714
-	if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) {
715
-		$ps = $GLOBALS['table_des_traitements'][$p->nom_champ];
716
-	} else {
717
-		// quand on utilise un traitement catch-all *
718
-		// celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
719
-		// leur propre securite
720
-		if (!$p->balise_calculee) {
721
-			$ps = $GLOBALS['table_des_traitements']['*'];
722
-		} else {
723
-			$ps = false;
724
-		}
725
-	}
726
-
727
-	if (is_array($ps)) {
728
-		// Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
729
-		$idb = index_boucle($p);
730
-		// mais on peut aussi etre hors boucle. Se mefier.
731
-		$type_requete = isset($p->boucles[$idb]->type_requete) ? $p->boucles[$idb]->type_requete : false;
732
-		$table_sql = isset($p->boucles[$idb]->show['table_sql']) ? $p->boucles[$idb]->show['table_sql'] : false;
733
-
734
-		// bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
735
-		if ($type_requete and isset($GLOBALS['table_des_tables'][$type_requete])) {
736
-			$type_alias = $type_requete;
737
-			$type_requete = $GLOBALS['table_des_tables'][$type_requete];
738
-		} else {
739
-			$type_alias = false;
740
-		}
741
-
742
-		// le traitement peut n'etre defini que pour une table en particulier "spip_articles"
743
-		if ($table_sql and isset($ps[$table_sql])) {
744
-			$ps = $ps[$table_sql];
745
-		} // ou pour une boucle en particulier "DATA","articles"
746
-		elseif ($type_requete and isset($ps[$type_requete])) {
747
-			$ps = $ps[$type_requete];
748
-		} // ou pour une boucle utilisant un alias ("hierarchie")
749
-		elseif ($type_alias and isset($ps[$type_alias])) {
750
-			$ps = $ps[$type_alias];
751
-		} // ou pour indifféremment quelle que soit la boucle
752
-		elseif (isset($ps[0])) {
753
-			$ps = $ps[0];
754
-		} else {
755
-			$ps = false;
756
-		}
757
-	}
758
-
759
-	if (!$ps) {
760
-		return $p->code;
761
-	}
762
-
763
-	// Si une boucle DOCUMENTS{doublons} est presente dans le squelette,
764
-	// ou si in INCLURE contient {doublons}
765
-	// on insere une fonction de remplissage du tableau des doublons 
766
-	// dans les filtres propre() ou typo()
767
-	// (qui traitent les raccourcis <docXX> referencant les docs)
768
-
769
-	if (isset($p->descr['documents'])
770
-		and
771
-		$p->descr['documents']
772
-		and (
773
-			(strpos($ps, 'propre') !== false)
774
-			or
775
-			(strpos($ps, 'typo') !== false)
776
-		)
777
-	) {
778
-		$ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
779
-	}
780
-
781
-	// La protection des champs par |safehtml est assuree par les extensions
782
-	// dans la declaration des traitements des champs sensibles
783
-
784
-	// Remplacer enfin le placeholder %s par le vrai code de la balise
785
-	return str_replace('%s', $p->code, $ps);
714
+    if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) {
715
+        $ps = $GLOBALS['table_des_traitements'][$p->nom_champ];
716
+    } else {
717
+        // quand on utilise un traitement catch-all *
718
+        // celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
719
+        // leur propre securite
720
+        if (!$p->balise_calculee) {
721
+            $ps = $GLOBALS['table_des_traitements']['*'];
722
+        } else {
723
+            $ps = false;
724
+        }
725
+    }
726
+
727
+    if (is_array($ps)) {
728
+        // Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
729
+        $idb = index_boucle($p);
730
+        // mais on peut aussi etre hors boucle. Se mefier.
731
+        $type_requete = isset($p->boucles[$idb]->type_requete) ? $p->boucles[$idb]->type_requete : false;
732
+        $table_sql = isset($p->boucles[$idb]->show['table_sql']) ? $p->boucles[$idb]->show['table_sql'] : false;
733
+
734
+        // bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
735
+        if ($type_requete and isset($GLOBALS['table_des_tables'][$type_requete])) {
736
+            $type_alias = $type_requete;
737
+            $type_requete = $GLOBALS['table_des_tables'][$type_requete];
738
+        } else {
739
+            $type_alias = false;
740
+        }
741
+
742
+        // le traitement peut n'etre defini que pour une table en particulier "spip_articles"
743
+        if ($table_sql and isset($ps[$table_sql])) {
744
+            $ps = $ps[$table_sql];
745
+        } // ou pour une boucle en particulier "DATA","articles"
746
+        elseif ($type_requete and isset($ps[$type_requete])) {
747
+            $ps = $ps[$type_requete];
748
+        } // ou pour une boucle utilisant un alias ("hierarchie")
749
+        elseif ($type_alias and isset($ps[$type_alias])) {
750
+            $ps = $ps[$type_alias];
751
+        } // ou pour indifféremment quelle que soit la boucle
752
+        elseif (isset($ps[0])) {
753
+            $ps = $ps[0];
754
+        } else {
755
+            $ps = false;
756
+        }
757
+    }
758
+
759
+    if (!$ps) {
760
+        return $p->code;
761
+    }
762
+
763
+    // Si une boucle DOCUMENTS{doublons} est presente dans le squelette,
764
+    // ou si in INCLURE contient {doublons}
765
+    // on insere une fonction de remplissage du tableau des doublons 
766
+    // dans les filtres propre() ou typo()
767
+    // (qui traitent les raccourcis <docXX> referencant les docs)
768
+
769
+    if (isset($p->descr['documents'])
770
+        and
771
+        $p->descr['documents']
772
+        and (
773
+            (strpos($ps, 'propre') !== false)
774
+            or
775
+            (strpos($ps, 'typo') !== false)
776
+        )
777
+    ) {
778
+        $ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
779
+    }
780
+
781
+    // La protection des champs par |safehtml est assuree par les extensions
782
+    // dans la declaration des traitements des champs sensibles
783
+
784
+    // Remplacer enfin le placeholder %s par le vrai code de la balise
785
+    return str_replace('%s', $p->code, $ps);
786 786
 }
787 787
 
788 788
 
@@ -795,109 +795,109 @@  discard block
 block discarded – undo
795 795
 // https://code.spip.net/@applique_filtres
796 796
 function applique_filtres($p) {
797 797
 
798
-	// Traitements standards (cf. supra)
799
-	if ($p->etoile == '') {
800
-		$code = champs_traitements($p);
801
-	} else {
802
-		$code = $p->code;
803
-	}
798
+    // Traitements standards (cf. supra)
799
+    if ($p->etoile == '') {
800
+        $code = champs_traitements($p);
801
+    } else {
802
+        $code = $p->code;
803
+    }
804 804
 
805
-	// Appliquer les filtres perso
806
-	if ($p->param) {
807
-		$code = compose_filtres($p, $code);
808
-	}
805
+    // Appliquer les filtres perso
806
+    if ($p->param) {
807
+        $code = compose_filtres($p, $code);
808
+    }
809 809
 
810
-	// S'il y a un lien avec la session, ajouter un code qui levera
811
-	// un drapeau dans la structure d'invalidation $Cache
812
-	if (isset($p->descr['session'])) {
813
-		$code = "invalideur_session(\$Cache, $code)";
814
-	}
810
+    // S'il y a un lien avec la session, ajouter un code qui levera
811
+    // un drapeau dans la structure d'invalidation $Cache
812
+    if (isset($p->descr['session'])) {
813
+        $code = "invalideur_session(\$Cache, $code)";
814
+    }
815 815
 
816
-	$code = sandbox_composer_interdire_scripts($code, $p);
816
+    $code = sandbox_composer_interdire_scripts($code, $p);
817 817
 
818
-	return $code;
818
+    return $code;
819 819
 }
820 820
 
821 821
 // Cf. function pipeline dans ecrire/inc_utils.php
822 822
 // https://code.spip.net/@compose_filtres
823 823
 function compose_filtres(&$p, $code) {
824 824
 
825
-	$image_miette = false;
826
-	foreach ($p->param as $filtre) {
827
-		$fonc = array_shift($filtre);
828
-		if (!$fonc) {
829
-			continue;
830
-		} // normalement qu'au premier tour.
831
-		$is_filtre_image = ((substr($fonc, 0, 6) == 'image_') and $fonc != 'image_graver');
832
-		if ($image_miette and !$is_filtre_image) {
833
-			// il faut graver maintenant car apres le filtre en cours
834
-			// on est pas sur d'avoir encore le nom du fichier dans le pipe
835
-			$code = "filtrer('image_graver', $code)";
836
-			$image_miette = false;
837
-		}
838
-		// recuperer les arguments du filtre, 
839
-		// a separer par "," ou ":" dans le cas du filtre "?{a,b}"
840
-		if ($fonc !== '?') {
841
-			$sep = ',';
842
-		} else {
843
-			$sep = ':';
844
-			// |?{a,b} *doit* avoir exactement 2 arguments ; on les force
845
-			if (count($filtre) != 2) {
846
-				$filtre = array(isset($filtre[0]) ? $filtre[0] : "", isset($filtre[1]) ? $filtre[1] : "");
847
-			}
848
-		}
849
-		$arglist = compose_filtres_args($p, $filtre, $sep);
850
-		$logique = filtre_logique($fonc, $code, substr($arglist, 1));
851
-		if ($logique) {
852
-			$code = $logique;
853
-		} else {
854
-			$code = sandbox_composer_filtre($fonc, $code, $arglist, $p);
855
-			if ($is_filtre_image) {
856
-				$image_miette = true;
857
-			}
858
-		}
859
-	}
860
-	// ramasser les images intermediaires inutiles et graver l'image finale
861
-	if ($image_miette) {
862
-		$code = "filtrer('image_graver',$code)";
863
-	}
864
-
865
-	return $code;
825
+    $image_miette = false;
826
+    foreach ($p->param as $filtre) {
827
+        $fonc = array_shift($filtre);
828
+        if (!$fonc) {
829
+            continue;
830
+        } // normalement qu'au premier tour.
831
+        $is_filtre_image = ((substr($fonc, 0, 6) == 'image_') and $fonc != 'image_graver');
832
+        if ($image_miette and !$is_filtre_image) {
833
+            // il faut graver maintenant car apres le filtre en cours
834
+            // on est pas sur d'avoir encore le nom du fichier dans le pipe
835
+            $code = "filtrer('image_graver', $code)";
836
+            $image_miette = false;
837
+        }
838
+        // recuperer les arguments du filtre, 
839
+        // a separer par "," ou ":" dans le cas du filtre "?{a,b}"
840
+        if ($fonc !== '?') {
841
+            $sep = ',';
842
+        } else {
843
+            $sep = ':';
844
+            // |?{a,b} *doit* avoir exactement 2 arguments ; on les force
845
+            if (count($filtre) != 2) {
846
+                $filtre = array(isset($filtre[0]) ? $filtre[0] : "", isset($filtre[1]) ? $filtre[1] : "");
847
+            }
848
+        }
849
+        $arglist = compose_filtres_args($p, $filtre, $sep);
850
+        $logique = filtre_logique($fonc, $code, substr($arglist, 1));
851
+        if ($logique) {
852
+            $code = $logique;
853
+        } else {
854
+            $code = sandbox_composer_filtre($fonc, $code, $arglist, $p);
855
+            if ($is_filtre_image) {
856
+                $image_miette = true;
857
+            }
858
+        }
859
+    }
860
+    // ramasser les images intermediaires inutiles et graver l'image finale
861
+    if ($image_miette) {
862
+        $code = "filtrer('image_graver',$code)";
863
+    }
864
+
865
+    return $code;
866 866
 }
867 867
 
868 868
 // Filtres et,ou,oui,non,sinon,xou,xor,and,or,not,yes
869 869
 // et comparateurs
870 870
 function filtre_logique($fonc, $code, $arg) {
871 871
 
872
-	switch (true) {
873
-		case in_array($fonc, $GLOBALS['table_criteres_infixes']):
874
-			return "($code $fonc $arg)";
875
-		case ($fonc == 'and') or ($fonc == 'et'):
876
-			return "((($code) AND ($arg)) ?' ' :'')";
877
-		case ($fonc == 'or') or ($fonc == 'ou'):
878
-			return "((($code) OR ($arg)) ?' ' :'')";
879
-		case ($fonc == 'xor') or ($fonc == 'xou'):
880
-			return "((($code) XOR ($arg)) ?' ' :'')";
881
-		case ($fonc == 'sinon'):
882
-			return "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)";
883
-		case ($fonc == 'not') or ($fonc == 'non'):
884
-			return "(($code) ?'' :' ')";
885
-		case ($fonc == 'yes') or ($fonc == 'oui'):
886
-			return "(($code) ?' ' :'')";
887
-	}
888
-
889
-	return '';
872
+    switch (true) {
873
+        case in_array($fonc, $GLOBALS['table_criteres_infixes']):
874
+            return "($code $fonc $arg)";
875
+        case ($fonc == 'and') or ($fonc == 'et'):
876
+            return "((($code) AND ($arg)) ?' ' :'')";
877
+        case ($fonc == 'or') or ($fonc == 'ou'):
878
+            return "((($code) OR ($arg)) ?' ' :'')";
879
+        case ($fonc == 'xor') or ($fonc == 'xou'):
880
+            return "((($code) XOR ($arg)) ?' ' :'')";
881
+        case ($fonc == 'sinon'):
882
+            return "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)";
883
+        case ($fonc == 'not') or ($fonc == 'non'):
884
+            return "(($code) ?'' :' ')";
885
+        case ($fonc == 'yes') or ($fonc == 'oui'):
886
+            return "(($code) ?' ' :'')";
887
+    }
888
+
889
+    return '';
890 890
 }
891 891
 
892 892
 // https://code.spip.net/@compose_filtres_args
893 893
 function compose_filtres_args($p, $args, $sep) {
894
-	$arglist = "";
895
-	foreach ($args as $arg) {
896
-		$arglist .= $sep .
897
-			calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
898
-	}
894
+    $arglist = "";
895
+    foreach ($args as $arg) {
896
+        $arglist .= $sep .
897
+            calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
898
+    }
899 899
 
900
-	return $arglist;
900
+    return $arglist;
901 901
 }
902 902
 
903 903
 
@@ -915,15 +915,15 @@  discard block
 block discarded – undo
915 915
  **/
916 916
 function calculer_argument_precedent($idb, $nom_champ, &$boucles, $defaut = null) {
917 917
 
918
-	// si recursif, forcer l'extraction du champ SQL mais ignorer le code
919
-	if ($boucles[$idb]->externe) {
920
-		index_pile($idb, $nom_champ, $boucles, '', $defaut);
921
-		// retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
922
-		// on ignore le defaut fourni dans ce cas
923
-		$defaut = "@\$Pile[\$SP]['$nom_champ']";
924
-	}
918
+    // si recursif, forcer l'extraction du champ SQL mais ignorer le code
919
+    if ($boucles[$idb]->externe) {
920
+        index_pile($idb, $nom_champ, $boucles, '', $defaut);
921
+        // retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
922
+        // on ignore le defaut fourni dans ce cas
923
+        $defaut = "@\$Pile[\$SP]['$nom_champ']";
924
+    }
925 925
 
926
-	return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut);
926
+    return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut);
927 927
 }
928 928
 
929 929
 //
@@ -938,30 +938,30 @@  discard block
 block discarded – undo
938 938
 
939 939
 // https://code.spip.net/@rindex_pile
940 940
 function rindex_pile($p, $champ, $motif) {
941
-	$n = 0;
942
-	$b = $p->id_boucle;
943
-	$p->code = '';
944
-	while ($b != '') {
945
-		foreach ($p->boucles[$b]->criteres as $critere) {
946
-			if ($critere->op == $motif) {
947
-				$p->code = '$Pile[$SP' . (($n == 0) ? "" : "-$n") .
948
-					"]['$champ']";
949
-				$b = '';
950
-				break 2;
951
-			}
952
-		}
953
-		$n++;
954
-		$b = $p->boucles[$b]->id_parent;
955
-	}
956
-
957
-	// si on est hors d'une boucle de {recherche}, cette balise est vide
958
-	if (!$p->code) {
959
-		$p->code = "''";
960
-	}
961
-
962
-	$p->interdire_scripts = false;
963
-
964
-	return $p;
941
+    $n = 0;
942
+    $b = $p->id_boucle;
943
+    $p->code = '';
944
+    while ($b != '') {
945
+        foreach ($p->boucles[$b]->criteres as $critere) {
946
+            if ($critere->op == $motif) {
947
+                $p->code = '$Pile[$SP' . (($n == 0) ? "" : "-$n") .
948
+                    "]['$champ']";
949
+                $b = '';
950
+                break 2;
951
+            }
952
+        }
953
+        $n++;
954
+        $b = $p->boucles[$b]->id_parent;
955
+    }
956
+
957
+    // si on est hors d'une boucle de {recherche}, cette balise est vide
958
+    if (!$p->code) {
959
+        $p->code = "''";
960
+    }
961
+
962
+    $p->interdire_scripts = false;
963
+
964
+    return $p;
965 965
 }
966 966
 
967 967
 /** 
@@ -971,7 +971,7 @@  discard block
 block discarded – undo
971 971
  * @return string Nom de la balise, avec indication de boucle explicite si présent.
972 972
  */
973 973
 function zbug_presenter_champ($p, $champ = "") {
974
-	$balise = $champ ? $champ : $p->nom_champ;
975
-	$explicite = $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
976
-	return "#{$explicite}{$balise}";
974
+    $balise = $champ ? $champ : $p->nom_champ;
975
+    $explicite = $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
976
+    return "#{$explicite}{$balise}";
977 977
 }
978 978
\ No newline at end of file
Please login to merge, or discard this patch.