Completed
Push — master ( 870337...b0842c )
by cam
01:30
created
ecrire/public/compiler.php 3 patches
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -920,8 +920,7 @@
 block discarded – undo
920 920
 			if (isset($boucles[$idb]->descr['sourcefile'])) {
921 921
 				$descr['sourcefile'] = $boucles[$idb]->descr['sourcefile'];
922 922
 			}
923
-		}
924
-		else {
923
+		} else {
925 924
 			$descr = [];
926 925
 		}
927 926
 	}
Please login to merge, or discard this patch.
Indentation   +1208 added lines, -1208 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 /** Repérer un code ne calculant rien, meme avec commentaire */
@@ -58,92 +58,92 @@  discard block
 block discarded – undo
58 58
 
59 59
 
60 60
 function argumenter_inclure(
61
-	$params,
62
-	$rejet_filtres,
63
-	$p,
64
-	&$boucles,
65
-	$id_boucle,
66
-	$echap = true,
67
-	$lang = '',
68
-	$fond1 = false
61
+    $params,
62
+    $rejet_filtres,
63
+    $p,
64
+    &$boucles,
65
+    $id_boucle,
66
+    $echap = true,
67
+    $lang = '',
68
+    $fond1 = false
69 69
 ) {
70
-	$l = [];
71
-	$erreur_p_i_i = '';
72
-	if (!is_array($params)) {
73
-		return $l;
74
-	}
75
-	foreach ($params as $k => $couple) {
76
-		// la liste d'arguments d'inclusion peut se terminer par un filtre
77
-		$filtre = array_shift($couple);
78
-		if ($filtre) {
79
-			break;
80
-		}
81
-		foreach ($couple as $n => $val) {
82
-			$var = $val[0];
83
-			if ($var->type != 'texte') {
84
-				if ($n or $k or $fond1) {
85
-					$erreur_p_i_i = [
86
-						'zbug_parametres_inclus_incorrects',
87
-						['param' => $var->nom_champ]
88
-					];
89
-					erreur_squelette($erreur_p_i_i, $p);
90
-					break;
91
-				} else {
92
-					$l[1] = calculer_liste($val, $p->descr, $boucles, $id_boucle);
93
-				}
94
-			} else {
95
-				preg_match(',^([^=]*)(=?)(.*)$,m', $var->texte, $m);
96
-				$m = array_pad($m, 3, null);
97
-				$var = $m[1];
98
-				$auto = false;
70
+    $l = [];
71
+    $erreur_p_i_i = '';
72
+    if (!is_array($params)) {
73
+        return $l;
74
+    }
75
+    foreach ($params as $k => $couple) {
76
+        // la liste d'arguments d'inclusion peut se terminer par un filtre
77
+        $filtre = array_shift($couple);
78
+        if ($filtre) {
79
+            break;
80
+        }
81
+        foreach ($couple as $n => $val) {
82
+            $var = $val[0];
83
+            if ($var->type != 'texte') {
84
+                if ($n or $k or $fond1) {
85
+                    $erreur_p_i_i = [
86
+                        'zbug_parametres_inclus_incorrects',
87
+                        ['param' => $var->nom_champ]
88
+                    ];
89
+                    erreur_squelette($erreur_p_i_i, $p);
90
+                    break;
91
+                } else {
92
+                    $l[1] = calculer_liste($val, $p->descr, $boucles, $id_boucle);
93
+                }
94
+            } else {
95
+                preg_match(',^([^=]*)(=?)(.*)$,m', $var->texte, $m);
96
+                $m = array_pad($m, 3, null);
97
+                $var = $m[1];
98
+                $auto = false;
99 99
 ;
100
-				if ($m[2]) {
101
-					$v = $m[3];
102
-					if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) {
103
-						$v = $m[1];
104
-					}
105
-					$val[0] = new Texte();
106
-					$val[0]->texte = $v;
107
-				} elseif ($k or $n or $fond1) {
108
-					$auto = true;
109
-				} else {
110
-					$var = 1;
111
-				}
112
-
113
-				if ($var == 'lang') {
114
-					$lang = !$auto
115
-						? calculer_liste($val, $p->descr, $boucles, $id_boucle)
116
-						: '$GLOBALS["spip_lang"]';
117
-				} else {
118
-					$val = $auto
119
-						? index_pile($id_boucle, $var, $boucles)
120
-						: calculer_liste($val, $p->descr, $boucles, $id_boucle);
121
-					if ($var !== 1) {
122
-						$val = ($echap ? "\'$var\' => ' . argumenter_squelette(" : "'$var' => ")
123
-							. $val . ($echap ? ") . '" : ' ');
124
-					} else {
125
-						$val = $echap ? "'.$val.'" : $val;
126
-					}
127
-					$l[$var] = $val;
128
-				}
129
-			}
130
-		}
131
-	}
132
-	if ($erreur_p_i_i) {
133
-		return false;
134
-	}
135
-	// Cas particulier de la langue : si {lang=xx} est definie, on
136
-	// la passe, sinon on passe la langue courante au moment du calcul
137
-	// sauf si on n'en veut pas
138
-	if ($lang === false) {
139
-		return $l;
140
-	}
141
-	if (!$lang) {
142
-		$lang = '$GLOBALS["spip_lang"]';
143
-	}
144
-	$l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ") . $lang . ($echap ? ") . '" : ' ');
145
-
146
-	return $l;
100
+                if ($m[2]) {
101
+                    $v = $m[3];
102
+                    if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) {
103
+                        $v = $m[1];
104
+                    }
105
+                    $val[0] = new Texte();
106
+                    $val[0]->texte = $v;
107
+                } elseif ($k or $n or $fond1) {
108
+                    $auto = true;
109
+                } else {
110
+                    $var = 1;
111
+                }
112
+
113
+                if ($var == 'lang') {
114
+                    $lang = !$auto
115
+                        ? calculer_liste($val, $p->descr, $boucles, $id_boucle)
116
+                        : '$GLOBALS["spip_lang"]';
117
+                } else {
118
+                    $val = $auto
119
+                        ? index_pile($id_boucle, $var, $boucles)
120
+                        : calculer_liste($val, $p->descr, $boucles, $id_boucle);
121
+                    if ($var !== 1) {
122
+                        $val = ($echap ? "\'$var\' => ' . argumenter_squelette(" : "'$var' => ")
123
+                            . $val . ($echap ? ") . '" : ' ');
124
+                    } else {
125
+                        $val = $echap ? "'.$val.'" : $val;
126
+                    }
127
+                    $l[$var] = $val;
128
+                }
129
+            }
130
+        }
131
+    }
132
+    if ($erreur_p_i_i) {
133
+        return false;
134
+    }
135
+    // Cas particulier de la langue : si {lang=xx} est definie, on
136
+    // la passe, sinon on passe la langue courante au moment du calcul
137
+    // sauf si on n'en veut pas
138
+    if ($lang === false) {
139
+        return $l;
140
+    }
141
+    if (!$lang) {
142
+        $lang = '$GLOBALS["spip_lang"]';
143
+    }
144
+    $l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ") . $lang . ($echap ? ") . '" : ' ');
145
+
146
+    return $l;
147 147
 }
148 148
 
149 149
 /**
@@ -167,84 +167,84 @@  discard block
 block discarded – undo
167 167
  **/
168 168
 function calculer_inclure($p, &$boucles, $id_boucle) {
169 169
 
170
-	$_options = [];
171
-	$_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true);
172
-	if (is_string($p->texte)) {
173
-		$fichier = $p->texte;
174
-		$code = '"' . str_replace('"', '\"', $fichier) . '"';
175
-	} else {
176
-		$code = calculer_liste($p->texte, $p->descr, $boucles, $id_boucle);
177
-		if ($code and preg_match("/^'([^']*)'/s", $code, $r)) {
178
-			$fichier = $r[1];
179
-		} else {
180
-			$fichier = '';
181
-		}
182
-	}
183
-	if (!$code or $code === '""' or $code === "''") {
184
-		$trace = $p->fonctions;
185
-		while (
186
-			is_array($trace)
187
-			and $trace = array_filter($trace)
188
-			and count($trace) == 1
189
-		) {
190
-			$trace = reset($trace);
191
-		}
192
-		$erreur_p_i_i = [
193
-			'zbug_parametres_inclus_incorrects',
194
-			['param' => print_r($trace, true)]
195
-		];
196
-		erreur_squelette($erreur_p_i_i, $p);
197
-
198
-		return "''";
199
-	}
200
-	$compil = texte_script(memoriser_contexte_compil($p));
201
-
202
-	if (is_array($_contexte)) {
203
-		// Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
204
-		if ($env = (isset($_contexte['env']) || isset($_contexte['self']))) {
205
-			unset($_contexte['env']);
206
-		}
207
-
208
-		// noter les doublons dans l'appel a public.php
209
-		if (isset($_contexte['doublons'])) {
210
-			$_contexte['doublons'] = "\\'doublons\\' => '.var_export(\$doublons,true).'";
211
-		}
212
-
213
-		if ($ajax = isset($_contexte['ajax'])) {
214
-			$ajax = preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
215
-			unset($_contexte['ajax']);
216
-		}
217
-
218
-		$_contexte = join(",\n\t", $_contexte);
219
-	} else {
220
-		return false;
221
-	} // j'aurais voulu toucher le fond ...
222
-
223
-	$contexte = 'array(' . $_contexte . ')';
224
-
225
-	if ($env) {
226
-		$contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)";
227
-	}
228
-
229
-	// s'il y a une extension .php, ce n'est pas un squelette
230
-	if ($fichier and preg_match('/^.+[.]php$/s', $fichier)) {
231
-		$code = sandbox_composer_inclure_php($fichier, $p, $contexte);
232
-	} else {
233
-		$_options[] = "\"compil\"=>array($compil)";
234
-		if ($ajax) {
235
-			$_options[] = $ajax;
236
-		}
237
-		$code = " ' . argumenter_squelette($code) . '";
238
-		$code = 'echo ' . sprintf(
239
-			CODE_RECUPERER_FOND,
240
-			$code,
241
-			$contexte,
242
-			implode(',', $_options),
243
-			"_request(\\'connect\\') ?? \\'\\'"
244
-		) . ';';
245
-	}
246
-
247
-	return "\n'<'.'" . '?php ' . $code . "\n?'." . "'>'";
170
+    $_options = [];
171
+    $_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true);
172
+    if (is_string($p->texte)) {
173
+        $fichier = $p->texte;
174
+        $code = '"' . str_replace('"', '\"', $fichier) . '"';
175
+    } else {
176
+        $code = calculer_liste($p->texte, $p->descr, $boucles, $id_boucle);
177
+        if ($code and preg_match("/^'([^']*)'/s", $code, $r)) {
178
+            $fichier = $r[1];
179
+        } else {
180
+            $fichier = '';
181
+        }
182
+    }
183
+    if (!$code or $code === '""' or $code === "''") {
184
+        $trace = $p->fonctions;
185
+        while (
186
+            is_array($trace)
187
+            and $trace = array_filter($trace)
188
+            and count($trace) == 1
189
+        ) {
190
+            $trace = reset($trace);
191
+        }
192
+        $erreur_p_i_i = [
193
+            'zbug_parametres_inclus_incorrects',
194
+            ['param' => print_r($trace, true)]
195
+        ];
196
+        erreur_squelette($erreur_p_i_i, $p);
197
+
198
+        return "''";
199
+    }
200
+    $compil = texte_script(memoriser_contexte_compil($p));
201
+
202
+    if (is_array($_contexte)) {
203
+        // Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
204
+        if ($env = (isset($_contexte['env']) || isset($_contexte['self']))) {
205
+            unset($_contexte['env']);
206
+        }
207
+
208
+        // noter les doublons dans l'appel a public.php
209
+        if (isset($_contexte['doublons'])) {
210
+            $_contexte['doublons'] = "\\'doublons\\' => '.var_export(\$doublons,true).'";
211
+        }
212
+
213
+        if ($ajax = isset($_contexte['ajax'])) {
214
+            $ajax = preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
215
+            unset($_contexte['ajax']);
216
+        }
217
+
218
+        $_contexte = join(",\n\t", $_contexte);
219
+    } else {
220
+        return false;
221
+    } // j'aurais voulu toucher le fond ...
222
+
223
+    $contexte = 'array(' . $_contexte . ')';
224
+
225
+    if ($env) {
226
+        $contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)";
227
+    }
228
+
229
+    // s'il y a une extension .php, ce n'est pas un squelette
230
+    if ($fichier and preg_match('/^.+[.]php$/s', $fichier)) {
231
+        $code = sandbox_composer_inclure_php($fichier, $p, $contexte);
232
+    } else {
233
+        $_options[] = "\"compil\"=>array($compil)";
234
+        if ($ajax) {
235
+            $_options[] = $ajax;
236
+        }
237
+        $code = " ' . argumenter_squelette($code) . '";
238
+        $code = 'echo ' . sprintf(
239
+            CODE_RECUPERER_FOND,
240
+            $code,
241
+            $contexte,
242
+            implode(',', $_options),
243
+            "_request(\\'connect\\') ?? \\'\\'"
244
+        ) . ';';
245
+    }
246
+
247
+    return "\n'<'.'" . '?php ' . $code . "\n?'." . "'>'";
248 248
 }
249 249
 
250 250
 
@@ -262,7 +262,7 @@  discard block
 block discarded – undo
262 262
  *     true pour ne tester que le cas publie et ignorer l'eventuel var_mode=preview de la page
263 263
  */
264 264
 function instituer_boucle(&$boucle, $echapper = true, $ignore_previsu = false) {
265
-	/*
265
+    /*
266 266
 	$show['statut'][] = array(
267 267
 		'champ'=>'statut',  // champ de la table sur lequel porte le filtrage par le statut
268 268
 		'publie'=>'publie', // valeur ou liste de valeurs, qui definissent l'objet comme publie.
@@ -286,74 +286,74 @@  discard block
 block discarded – undo
286 286
 	champstatut est alors le champ statut sur la tablen
287 287
 	dans les jointures, clen peut etre un tableau pour une jointure complexe : array('id_objet','id_article','objet','article')
288 288
 */
289
-	$id_table = $boucle->id_table;
290
-	$show = $boucle->show;
291
-	if (isset($show['statut']) and $show['statut']) {
292
-		foreach ($show['statut'] as $k => $s) {
293
-			// Restreindre aux elements publies si pas de {statut} ou autre dans les criteres
294
-			$filtrer = true;
295
-			if (isset($s['exception'])) {
296
-				foreach (is_array($s['exception']) ? $s['exception'] : [$s['exception']] as $m) {
297
-					if (isset($boucle->modificateur[$m]) or isset($boucle->modificateur['criteres'][$m])) {
298
-						$filtrer = false;
299
-						break;
300
-					}
301
-				}
302
-			}
303
-
304
-			if ($filtrer) {
305
-				if (is_array($s['champ'])) {
306
-					$statut = preg_replace(',\W,', '', array_pop($s['champ'])); // securite
307
-					$jointures = [];
308
-					// indiquer la description de chaque table dans le tableau de jointures,
309
-					// ce qui permet d'eviter certains GROUP BY inutiles.
310
-					$trouver_table = charger_fonction('trouver_table', 'base');
311
-					foreach ($s['champ'] as $j) {
312
-						$id = reset($j);
313
-						$def = $trouver_table($id);
314
-						$jointures[] = ['', [$id, $def], end($j)];
315
-					}
316
-					$jointures[0][0] = $id_table;
317
-					if (!array_search($id, $boucle->from)) {
318
-						include_spip('public/jointures');
319
-						fabrique_jointures($boucle, $jointures, true, $boucle->show, $id_table, '', $echapper);
320
-					}
321
-					// trouver l'alias de la table d'arrivee qui porte le statut
322
-					$id = array_search($id, $boucle->from);
323
-				} else {
324
-					$id = $id_table;
325
-					$statut = preg_replace(',\W,', '', $s['champ']); // securite
326
-				}
327
-				$mstatut = $id . '.' . $statut;
328
-
329
-				$arg_ignore_previsu = ($ignore_previsu ? ',true' : '');
330
-				include_spip('public/quete');
331
-				if (
332
-					isset($s['post_date']) and $s['post_date']
333
-					and $GLOBALS['meta']['post_dates'] == 'non'
334
-				) {
335
-					$date = $id . '.' . preg_replace(',\W,', '', $s['post_date']); // securite
336
-					array_unshift(
337
-						$boucle->where,
338
-						$echapper ?
339
-							"\nquete_condition_postdates('$date'," . _q($boucle->sql_serveur) . "$arg_ignore_previsu)"
340
-							:
341
-							quete_condition_postdates($date, $boucle->sql_serveur, $ignore_previsu)
342
-					);
343
-				}
344
-				array_unshift(
345
-					$boucle->where,
346
-					$echapper ?
347
-						"\nquete_condition_statut('$mstatut',"
348
-						. _q($s['previsu']) . ','
349
-						. _q($s['publie']) . ','
350
-						. _q($boucle->sql_serveur) . "$arg_ignore_previsu)"
351
-						:
352
-						quete_condition_statut($mstatut, $s['previsu'], $s['publie'], $boucle->sql_serveur, $ignore_previsu)
353
-				);
354
-			}
355
-		}
356
-	}
289
+    $id_table = $boucle->id_table;
290
+    $show = $boucle->show;
291
+    if (isset($show['statut']) and $show['statut']) {
292
+        foreach ($show['statut'] as $k => $s) {
293
+            // Restreindre aux elements publies si pas de {statut} ou autre dans les criteres
294
+            $filtrer = true;
295
+            if (isset($s['exception'])) {
296
+                foreach (is_array($s['exception']) ? $s['exception'] : [$s['exception']] as $m) {
297
+                    if (isset($boucle->modificateur[$m]) or isset($boucle->modificateur['criteres'][$m])) {
298
+                        $filtrer = false;
299
+                        break;
300
+                    }
301
+                }
302
+            }
303
+
304
+            if ($filtrer) {
305
+                if (is_array($s['champ'])) {
306
+                    $statut = preg_replace(',\W,', '', array_pop($s['champ'])); // securite
307
+                    $jointures = [];
308
+                    // indiquer la description de chaque table dans le tableau de jointures,
309
+                    // ce qui permet d'eviter certains GROUP BY inutiles.
310
+                    $trouver_table = charger_fonction('trouver_table', 'base');
311
+                    foreach ($s['champ'] as $j) {
312
+                        $id = reset($j);
313
+                        $def = $trouver_table($id);
314
+                        $jointures[] = ['', [$id, $def], end($j)];
315
+                    }
316
+                    $jointures[0][0] = $id_table;
317
+                    if (!array_search($id, $boucle->from)) {
318
+                        include_spip('public/jointures');
319
+                        fabrique_jointures($boucle, $jointures, true, $boucle->show, $id_table, '', $echapper);
320
+                    }
321
+                    // trouver l'alias de la table d'arrivee qui porte le statut
322
+                    $id = array_search($id, $boucle->from);
323
+                } else {
324
+                    $id = $id_table;
325
+                    $statut = preg_replace(',\W,', '', $s['champ']); // securite
326
+                }
327
+                $mstatut = $id . '.' . $statut;
328
+
329
+                $arg_ignore_previsu = ($ignore_previsu ? ',true' : '');
330
+                include_spip('public/quete');
331
+                if (
332
+                    isset($s['post_date']) and $s['post_date']
333
+                    and $GLOBALS['meta']['post_dates'] == 'non'
334
+                ) {
335
+                    $date = $id . '.' . preg_replace(',\W,', '', $s['post_date']); // securite
336
+                    array_unshift(
337
+                        $boucle->where,
338
+                        $echapper ?
339
+                            "\nquete_condition_postdates('$date'," . _q($boucle->sql_serveur) . "$arg_ignore_previsu)"
340
+                            :
341
+                            quete_condition_postdates($date, $boucle->sql_serveur, $ignore_previsu)
342
+                    );
343
+                }
344
+                array_unshift(
345
+                    $boucle->where,
346
+                    $echapper ?
347
+                        "\nquete_condition_statut('$mstatut',"
348
+                        . _q($s['previsu']) . ','
349
+                        . _q($s['publie']) . ','
350
+                        . _q($boucle->sql_serveur) . "$arg_ignore_previsu)"
351
+                        :
352
+                        quete_condition_statut($mstatut, $s['previsu'], $s['publie'], $boucle->sql_serveur, $ignore_previsu)
353
+                );
354
+            }
355
+        }
356
+    }
357 357
 }
358 358
 
359 359
 /**
@@ -372,29 +372,29 @@  discard block
 block discarded – undo
372 372
  */
373 373
 function calculer_boucle($id_boucle, &$boucles) {
374 374
 
375
-	$boucle = &$boucles[$id_boucle];
376
-	instituer_boucle($boucle);
377
-	$boucles[$id_boucle] = pipeline('post_boucle', $boucles[$id_boucle]);
378
-
379
-	// en mode debug memoriser les premiers passages dans la boucle,
380
-	// mais pas tous, sinon ca pete.
381
-	if (_request('var_mode_affiche') != 'resultat') {
382
-		$trace = '';
383
-	} else {
384
-		$_trace = $boucles[$id_boucle]->descr['nom'] . $id_boucle;
385
-		$_trace = "\$GLOBALS['debug_objets']['resultat']['$_trace']";
386
-		$trace = "
375
+    $boucle = &$boucles[$id_boucle];
376
+    instituer_boucle($boucle);
377
+    $boucles[$id_boucle] = pipeline('post_boucle', $boucles[$id_boucle]);
378
+
379
+    // en mode debug memoriser les premiers passages dans la boucle,
380
+    // mais pas tous, sinon ca pete.
381
+    if (_request('var_mode_affiche') != 'resultat') {
382
+        $trace = '';
383
+    } else {
384
+        $_trace = $boucles[$id_boucle]->descr['nom'] . $id_boucle;
385
+        $_trace = "\$GLOBALS['debug_objets']['resultat']['$_trace']";
386
+        $trace = "
387 387
 		if (empty($_trace)) { 
388 388
 			$_trace = []; 
389 389
 		}
390 390
 		if (count($_trace) < 3) { 
391 391
 			$_trace" . '[] = $t0; 
392 392
 		}';
393
-	}
393
+    }
394 394
 
395
-	return ($boucles[$id_boucle]->type_requete == TYPE_RECURSIF)
396
-		? calculer_boucle_rec($id_boucle, $boucles, $trace)
397
-		: calculer_boucle_nonrec($id_boucle, $boucles, $trace);
395
+    return ($boucles[$id_boucle]->type_requete == TYPE_RECURSIF)
396
+        ? calculer_boucle_rec($id_boucle, $boucles, $trace)
397
+        : calculer_boucle_nonrec($id_boucle, $boucles, $trace);
398 398
 }
399 399
 
400 400
 
@@ -417,15 +417,15 @@  discard block
 block discarded – undo
417 417
  *    Code PHP compilé de la boucle récursive
418 418
  **/
419 419
 function calculer_boucle_rec($id_boucle, &$boucles, $trace) {
420
-	$nom = $boucles[$id_boucle]->param[0];
421
-
422
-	return
423
-		// Numrows[$nom] peut ne pas être encore defini
424
-		"\n\t\$save_numrows = (isset(\$Numrows['$nom']) ? \$Numrows['$nom'] : array());"
425
-		. "\n\t\$t0 = " . $boucles[$id_boucle]->return . ';'
426
-		. "\n\t\$Numrows['$nom'] = (\$save_numrows);"
427
-		. $trace
428
-		. "\n\treturn \$t0;";
420
+    $nom = $boucles[$id_boucle]->param[0];
421
+
422
+    return
423
+        // Numrows[$nom] peut ne pas être encore defini
424
+        "\n\t\$save_numrows = (isset(\$Numrows['$nom']) ? \$Numrows['$nom'] : array());"
425
+        . "\n\t\$t0 = " . $boucles[$id_boucle]->return . ';'
426
+        . "\n\t\$Numrows['$nom'] = (\$save_numrows);"
427
+        . $trace
428
+        . "\n\treturn \$t0;";
429 429
 }
430 430
 
431 431
 /**
@@ -478,174 +478,174 @@  discard block
 block discarded – undo
478 478
  **/
479 479
 function calculer_boucle_nonrec($id_boucle, &$boucles, $trace) {
480 480
 
481
-	$code_sep = null;
482
-	$boucle = &$boucles[$id_boucle];
483
-	$return = $boucle->return;
484
-	$type_boucle = $boucle->type_requete;
485
-	$primary = $boucle->primary;
486
-	$constant = preg_match(CODE_MONOTONE, str_replace("\\'", '', $return));
487
-	$flag_cpt = $boucle->mode_partie || $boucle->cptrows;
488
-	$corps = '';
489
-
490
-	// faudrait expanser le foreach a la compil, car y en a souvent qu'un
491
-	// et puis faire un [] plutot qu'un "','."
492
-	if ($boucle->doublons) {
493
-		$corps .= "\n\t\t\tforeach(" . $boucle->doublons . ' as $k) $doublons[$k] .= "," . ' .
494
-			index_pile($id_boucle, $primary, $boucles)
495
-			. "; // doublons\n";
496
-	}
497
-
498
-	// La boucle doit-elle selectionner la langue ?
499
-	// - par defaut, les boucles suivantes le font
500
-	//    (sauf si forcer_lang==true ou si le titre contient <multi>).
501
-	// - a moins d'une demande explicite via {!lang_select}
502
-	if (
503
-		!$constant && $boucle->lang_select != 'non' &&
504
-		(($boucle->lang_select == 'oui') ||
505
-			in_array($type_boucle, [
506
-				'articles',
507
-				'rubriques',
508
-				'hierarchie',
509
-				'breves'
510
-			]))
511
-	) {
512
-		// Memoriser la langue avant la boucle et la restituer apres
513
-		// afin que le corps de boucle affecte la globale directement
514
-		$init_lang = "lang_select(\$GLOBALS['spip_lang']);\n\t";
515
-		$fin_lang = "lang_select();\n\t";
516
-		$fin_lang_select_public = "\n\t\tlang_select();";
517
-
518
-		$corps .=
519
-			"\n\t\tlang_select_public("
520
-			. index_pile($id_boucle, 'lang', $boucles)
521
-			. ", '" . $boucle->lang_select . "'"
522
-			. (in_array($type_boucle, [
523
-				'articles',
524
-				'rubriques',
525
-				'hierarchie',
526
-				'breves'
527
-			]) ? ', ' . index_pile($id_boucle, 'titre', $boucles) : '')
528
-			. ');';
529
-	} else {
530
-		$init_lang = '';
531
-		$fin_lang = '';
532
-		$fin_lang_select_public = '';
533
-		// sortir les appels au traducteur (invariants de boucle)
534
-		if (
535
-			strpos($return, '?php') === false
536
-			and preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r)
537
-		) {
538
-			$i = 1;
539
-			foreach ($r[1] as $t) {
540
-				$init_lang .= "\n\t\$l$i = $t;";
541
-				$return = str_replace($t, "\$l$i", $return);
542
-				$i++;
543
-			}
544
-		}
545
-	}
546
-
547
-	// gestion optimale des separateurs et des boucles constantes
548
-	if (is_countable($boucle->separateur) ? count($boucle->separateur) : 0) {
549
-		$code_sep = ("'" . str_replace("'", "\'", join('', $boucle->separateur)) . "'");
550
-	}
551
-
552
-	$corps .=
553
-		((!$boucle->separateur) ?
554
-			(($constant && !$corps && !$flag_cpt) ? $return :
555
-				(($return === "''") ? '' :
556
-					("\n\t\t" . '$t0 .= ' . $return . ';'))) :
557
-			("\n\t\t\$t1 " .
558
-				((strpos($return, '$t1.') === 0) ?
559
-					('.=' . substr($return, 4)) :
560
-					('= ' . $return)) .
561
-				";\n\t\t" .
562
-				'$t0 .= ((strlen($t1) && strlen($t0)) ? ' . $code_sep . " : '') . \$t1;"));
563
-
564
-	// Calculer les invalideurs si c'est une boucle non constante et si on
565
-	// souhaite invalider ces elements
566
-	if (!$constant and $primary) {
567
-		include_spip('inc/invalideur');
568
-		$corps = calcul_invalideurs($corps, $primary, $boucles, $id_boucle);
569
-	}
570
-
571
-	// gerer le compteur de boucle
572
-	// avec ou sans son utilisation par les criteres {1/3} {1,4} {n-2,1}...
573
-
574
-	if ($boucle->partie or $boucle->cptrows) {
575
-		$corps = "\n\t\t\$Numrows['$id_boucle']['compteur_boucle']++;"
576
-			. $boucle->partie
577
-			. $corps;
578
-	}
579
-
580
-	// depiler la lang de la boucle si besoin
581
-	$corps .= $fin_lang_select_public;
582
-
583
-	// si le corps est une constante, ne pas appeler le serveur N fois!
584
-
585
-	if (preg_match(CODE_MONOTONE, str_replace("\\'", '', $corps), $r)) {
586
-		if (!isset($r[2]) or (!$r[2])) {
587
-			if (!$boucle->numrows) {
588
-				return "\n\t\$t0 = '';";
589
-			} else {
590
-				$corps = '';
591
-			}
592
-		} else {
593
-			$boucle->numrows = true;
594
-			$corps = "\n\t\$t0 = str_repeat($corps, \$Numrows['$id_boucle']['total']);";
595
-		}
596
-	} else {
597
-		$corps = "while (\$Pile[\$SP]=\$iter->fetch()) {\n$corps\n	}";
598
-	}
599
-
600
-	$count = '';
601
-	if (!$boucle->select) {
602
-		if (!$boucle->numrows or $boucle->limit or $boucle->mode_partie or $boucle->group) {
603
-			$count = '1';
604
-		} else {
605
-			$count = 'count(*)';
606
-		}
607
-		$boucles[$id_boucle]->select[] = $count;
608
-	}
609
-
610
-	if ($flag_cpt) {
611
-		$nums = "\n\t// COMPTEUR\n\t"
612
-			. "\$Numrows['$id_boucle']['compteur_boucle'] = 0;\n\t";
613
-	} else {
614
-		$nums = '';
615
-	}
616
-
617
-	if ($boucle->numrows or $boucle->mode_partie) {
618
-		$nums .= "\$Numrows['$id_boucle']['command'] = \$command;\n\t"
619
-			. "\$Numrows['$id_boucle']['total'] = @intval(\$iter->count());"
620
-			. $boucle->mode_partie
621
-			. "\n\t";
622
-	}
623
-
624
-	// Ne calculer la requete que maintenant
625
-	// car ce qui precede appelle index_pile qui influe dessus
626
-
627
-	$init = (($init = $boucles[$id_boucle]->doublons)
628
-			? ("\n\t$init = array();") : '')
629
-		. calculer_requete_sql($boucles[$id_boucle]);
630
-
631
-	$contexte = memoriser_contexte_compil($boucle);
632
-
633
-	$a = sprintf(
634
-		CODE_CORPS_BOUCLE,
635
-		$init,
636
-		$boucle->iterateur,
637
-		'$command',
638
-		$contexte,
639
-		$nums,
640
-		$init_lang,
641
-		$corps,
642
-		$fin_lang,
643
-		$trace,
644
-		'BOUCLE' . $id_boucle . ' @ ' . ($boucle->descr['sourcefile'])
645
-	);
481
+    $code_sep = null;
482
+    $boucle = &$boucles[$id_boucle];
483
+    $return = $boucle->return;
484
+    $type_boucle = $boucle->type_requete;
485
+    $primary = $boucle->primary;
486
+    $constant = preg_match(CODE_MONOTONE, str_replace("\\'", '', $return));
487
+    $flag_cpt = $boucle->mode_partie || $boucle->cptrows;
488
+    $corps = '';
489
+
490
+    // faudrait expanser le foreach a la compil, car y en a souvent qu'un
491
+    // et puis faire un [] plutot qu'un "','."
492
+    if ($boucle->doublons) {
493
+        $corps .= "\n\t\t\tforeach(" . $boucle->doublons . ' as $k) $doublons[$k] .= "," . ' .
494
+            index_pile($id_boucle, $primary, $boucles)
495
+            . "; // doublons\n";
496
+    }
497
+
498
+    // La boucle doit-elle selectionner la langue ?
499
+    // - par defaut, les boucles suivantes le font
500
+    //    (sauf si forcer_lang==true ou si le titre contient <multi>).
501
+    // - a moins d'une demande explicite via {!lang_select}
502
+    if (
503
+        !$constant && $boucle->lang_select != 'non' &&
504
+        (($boucle->lang_select == 'oui') ||
505
+            in_array($type_boucle, [
506
+                'articles',
507
+                'rubriques',
508
+                'hierarchie',
509
+                'breves'
510
+            ]))
511
+    ) {
512
+        // Memoriser la langue avant la boucle et la restituer apres
513
+        // afin que le corps de boucle affecte la globale directement
514
+        $init_lang = "lang_select(\$GLOBALS['spip_lang']);\n\t";
515
+        $fin_lang = "lang_select();\n\t";
516
+        $fin_lang_select_public = "\n\t\tlang_select();";
517
+
518
+        $corps .=
519
+            "\n\t\tlang_select_public("
520
+            . index_pile($id_boucle, 'lang', $boucles)
521
+            . ", '" . $boucle->lang_select . "'"
522
+            . (in_array($type_boucle, [
523
+                'articles',
524
+                'rubriques',
525
+                'hierarchie',
526
+                'breves'
527
+            ]) ? ', ' . index_pile($id_boucle, 'titre', $boucles) : '')
528
+            . ');';
529
+    } else {
530
+        $init_lang = '';
531
+        $fin_lang = '';
532
+        $fin_lang_select_public = '';
533
+        // sortir les appels au traducteur (invariants de boucle)
534
+        if (
535
+            strpos($return, '?php') === false
536
+            and preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r)
537
+        ) {
538
+            $i = 1;
539
+            foreach ($r[1] as $t) {
540
+                $init_lang .= "\n\t\$l$i = $t;";
541
+                $return = str_replace($t, "\$l$i", $return);
542
+                $i++;
543
+            }
544
+        }
545
+    }
546
+
547
+    // gestion optimale des separateurs et des boucles constantes
548
+    if (is_countable($boucle->separateur) ? count($boucle->separateur) : 0) {
549
+        $code_sep = ("'" . str_replace("'", "\'", join('', $boucle->separateur)) . "'");
550
+    }
551
+
552
+    $corps .=
553
+        ((!$boucle->separateur) ?
554
+            (($constant && !$corps && !$flag_cpt) ? $return :
555
+                (($return === "''") ? '' :
556
+                    ("\n\t\t" . '$t0 .= ' . $return . ';'))) :
557
+            ("\n\t\t\$t1 " .
558
+                ((strpos($return, '$t1.') === 0) ?
559
+                    ('.=' . substr($return, 4)) :
560
+                    ('= ' . $return)) .
561
+                ";\n\t\t" .
562
+                '$t0 .= ((strlen($t1) && strlen($t0)) ? ' . $code_sep . " : '') . \$t1;"));
563
+
564
+    // Calculer les invalideurs si c'est une boucle non constante et si on
565
+    // souhaite invalider ces elements
566
+    if (!$constant and $primary) {
567
+        include_spip('inc/invalideur');
568
+        $corps = calcul_invalideurs($corps, $primary, $boucles, $id_boucle);
569
+    }
570
+
571
+    // gerer le compteur de boucle
572
+    // avec ou sans son utilisation par les criteres {1/3} {1,4} {n-2,1}...
573
+
574
+    if ($boucle->partie or $boucle->cptrows) {
575
+        $corps = "\n\t\t\$Numrows['$id_boucle']['compteur_boucle']++;"
576
+            . $boucle->partie
577
+            . $corps;
578
+    }
579
+
580
+    // depiler la lang de la boucle si besoin
581
+    $corps .= $fin_lang_select_public;
582
+
583
+    // si le corps est une constante, ne pas appeler le serveur N fois!
584
+
585
+    if (preg_match(CODE_MONOTONE, str_replace("\\'", '', $corps), $r)) {
586
+        if (!isset($r[2]) or (!$r[2])) {
587
+            if (!$boucle->numrows) {
588
+                return "\n\t\$t0 = '';";
589
+            } else {
590
+                $corps = '';
591
+            }
592
+        } else {
593
+            $boucle->numrows = true;
594
+            $corps = "\n\t\$t0 = str_repeat($corps, \$Numrows['$id_boucle']['total']);";
595
+        }
596
+    } else {
597
+        $corps = "while (\$Pile[\$SP]=\$iter->fetch()) {\n$corps\n	}";
598
+    }
599
+
600
+    $count = '';
601
+    if (!$boucle->select) {
602
+        if (!$boucle->numrows or $boucle->limit or $boucle->mode_partie or $boucle->group) {
603
+            $count = '1';
604
+        } else {
605
+            $count = 'count(*)';
606
+        }
607
+        $boucles[$id_boucle]->select[] = $count;
608
+    }
609
+
610
+    if ($flag_cpt) {
611
+        $nums = "\n\t// COMPTEUR\n\t"
612
+            . "\$Numrows['$id_boucle']['compteur_boucle'] = 0;\n\t";
613
+    } else {
614
+        $nums = '';
615
+    }
616
+
617
+    if ($boucle->numrows or $boucle->mode_partie) {
618
+        $nums .= "\$Numrows['$id_boucle']['command'] = \$command;\n\t"
619
+            . "\$Numrows['$id_boucle']['total'] = @intval(\$iter->count());"
620
+            . $boucle->mode_partie
621
+            . "\n\t";
622
+    }
623
+
624
+    // Ne calculer la requete que maintenant
625
+    // car ce qui precede appelle index_pile qui influe dessus
626
+
627
+    $init = (($init = $boucles[$id_boucle]->doublons)
628
+            ? ("\n\t$init = array();") : '')
629
+        . calculer_requete_sql($boucles[$id_boucle]);
630
+
631
+    $contexte = memoriser_contexte_compil($boucle);
632
+
633
+    $a = sprintf(
634
+        CODE_CORPS_BOUCLE,
635
+        $init,
636
+        $boucle->iterateur,
637
+        '$command',
638
+        $contexte,
639
+        $nums,
640
+        $init_lang,
641
+        $corps,
642
+        $fin_lang,
643
+        $trace,
644
+        'BOUCLE' . $id_boucle . ' @ ' . ($boucle->descr['sourcefile'])
645
+    );
646 646
 
647 647
 #	var_dump($a);exit;
648
-	return $a;
648
+    return $a;
649 649
 }
650 650
 
651 651
 
@@ -661,48 +661,48 @@  discard block
 block discarded – undo
661 661
  *     Code PHP compilé définissant les informations de requête
662 662
  **/
663 663
 function calculer_requete_sql($boucle) {
664
-	$init = [];
665
-	$init[] = calculer_dec('table', "'" . $boucle->id_table . "'");
666
-	$init[] = calculer_dec('id', "'" . $boucle->id_boucle . "'");
667
-	# En absence de champ c'est un decompte :
668
-	$init[] = calculer_dec('from', calculer_from($boucle));
669
-	$init[] = calculer_dec('type', calculer_from_type($boucle));
670
-	$init[] = calculer_dec(
671
-		'groupby',
672
-		'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ')'
673
-	);
674
-	$init[] = calculer_dec('select', 'array("' . join("\",\n\t\t\"", $boucle->select) . '")');
675
-	$init[] = calculer_dec('orderby', 'array(' . calculer_order($boucle) . ')');
676
-	$init[] = calculer_dec('where', calculer_dump_array($boucle->where));
677
-	$init[] = calculer_dec('join', calculer_dump_join($boucle->join));
678
-	$init[] = calculer_dec(
679
-		'limit',
680
-		(
681
-			strpos($boucle->limit, 'intval') === false ?
682
-			"'" . ($boucle->limit) . "'" :
683
-			$boucle->limit
684
-		)
685
-	);
686
-	$init[] = calculer_dec('having', calculer_dump_array($boucle->having));
687
-	$s = $d = '';
688
-	// l'index 0 de $i indique si l'affectation est statique (contenu)
689
-	// ou recalculée à chaque passage (vide)
690
-	foreach ($init as $i) {
691
-		if (reset($i)) {
692
-			$s .= "\n\t\t" . end($i);
693
-		} # statique
694
-		else {
695
-			$d .= "\n\t" . end($i);
696
-		} # dynamique
697
-	}
698
-
699
-	return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '')
700
-	. $boucle->in
701
-	. $boucle->hash
702
-	. "\n\t" . 'if (!isset($command[\'table\'])) {'
703
-	. $s
704
-	. "\n\t}"
705
-	. $d;
664
+    $init = [];
665
+    $init[] = calculer_dec('table', "'" . $boucle->id_table . "'");
666
+    $init[] = calculer_dec('id', "'" . $boucle->id_boucle . "'");
667
+    # En absence de champ c'est un decompte :
668
+    $init[] = calculer_dec('from', calculer_from($boucle));
669
+    $init[] = calculer_dec('type', calculer_from_type($boucle));
670
+    $init[] = calculer_dec(
671
+        'groupby',
672
+        'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ')'
673
+    );
674
+    $init[] = calculer_dec('select', 'array("' . join("\",\n\t\t\"", $boucle->select) . '")');
675
+    $init[] = calculer_dec('orderby', 'array(' . calculer_order($boucle) . ')');
676
+    $init[] = calculer_dec('where', calculer_dump_array($boucle->where));
677
+    $init[] = calculer_dec('join', calculer_dump_join($boucle->join));
678
+    $init[] = calculer_dec(
679
+        'limit',
680
+        (
681
+            strpos($boucle->limit, 'intval') === false ?
682
+            "'" . ($boucle->limit) . "'" :
683
+            $boucle->limit
684
+        )
685
+    );
686
+    $init[] = calculer_dec('having', calculer_dump_array($boucle->having));
687
+    $s = $d = '';
688
+    // l'index 0 de $i indique si l'affectation est statique (contenu)
689
+    // ou recalculée à chaque passage (vide)
690
+    foreach ($init as $i) {
691
+        if (reset($i)) {
692
+            $s .= "\n\t\t" . end($i);
693
+        } # statique
694
+        else {
695
+            $d .= "\n\t" . end($i);
696
+        } # dynamique
697
+    }
698
+
699
+    return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '')
700
+    . $boucle->in
701
+    . $boucle->hash
702
+    . "\n\t" . 'if (!isset($command[\'table\'])) {'
703
+    . $s
704
+    . "\n\t}"
705
+    . $d;
706 706
 }
707 707
 
708 708
 /**
@@ -720,13 +720,13 @@  discard block
 block discarded – undo
720 720
  *     qui peut être utilisé pour la production d'un tableau array()
721 721
  **/
722 722
 function memoriser_contexte_compil($p) {
723
-	return join(',', [
724
-		_q($p->descr['sourcefile'] ?? ''),
725
-		_q($p->descr['nom'] ?? ''),
726
-		_q($p->id_boucle ?? ''),
727
-		intval($p->ligne),
728
-		'$GLOBALS[\'spip_lang\']'
729
-	]);
723
+    return join(',', [
724
+        _q($p->descr['sourcefile'] ?? ''),
725
+        _q($p->descr['nom'] ?? ''),
726
+        _q($p->id_boucle ?? ''),
727
+        intval($p->ligne),
728
+        '$GLOBALS[\'spip_lang\']'
729
+    ]);
730 730
 }
731 731
 
732 732
 /**
@@ -744,19 +744,19 @@  discard block
 block discarded – undo
744 744
  *     Objet Contexte
745 745
  **/
746 746
 function reconstruire_contexte_compil($context_compil) {
747
-	if (!is_array($context_compil)) {
748
-		return $context_compil;
749
-	}
750
-	$p = new Contexte();
751
-	$p->descr = [
752
-		'sourcefile' => $context_compil[0],
753
-		'nom' => $context_compil[1]
754
-	];
755
-	$p->id_boucle = $context_compil[2];
756
-	$p->ligne = $context_compil[3];
757
-	$p->lang = $context_compil[4];
758
-
759
-	return $p;
747
+    if (!is_array($context_compil)) {
748
+        return $context_compil;
749
+    }
750
+    $p = new Contexte();
751
+    $p->descr = [
752
+        'sourcefile' => $context_compil[0],
753
+        'nom' => $context_compil[1]
754
+    ];
755
+    $p->id_boucle = $context_compil[2];
756
+    $p->ligne = $context_compil[3];
757
+    $p->lang = $context_compil[4];
758
+
759
+    return $p;
760 760
 }
761 761
 
762 762
 /**
@@ -782,12 +782,12 @@  discard block
 block discarded – undo
782 782
  *    - index 1 : Code de l'affectation
783 783
  **/
784 784
 function calculer_dec($nom, $val) {
785
-	$static = 'if (!isset($command[\'' . $nom . '\'])) ';
786
-	// si une variable apparait dans le calcul de la clause
787
-	// il faut la re-evaluer a chaque passage
788
-	if (
789
-		strpos($val, '$') !== false
790
-		/*
785
+    $static = 'if (!isset($command[\'' . $nom . '\'])) ';
786
+    // si une variable apparait dans le calcul de la clause
787
+    // il faut la re-evaluer a chaque passage
788
+    if (
789
+        strpos($val, '$') !== false
790
+        /*
791 791
 		OR strpos($val, 'sql_') !== false
792 792
 		OR (
793 793
 			$test = str_replace(array("array(",'\"',"\'"),array("","",""),$val) // supprimer les array( et les echappements de guillemets
@@ -795,11 +795,11 @@  discard block
 block discarded – undo
795 795
 			AND $test = preg_replace(",'[^']*',UimsS","",$test) // supprimer les chaines qui peuvent contenir des fonctions SQL qui ne genent pas
796 796
 			AND preg_match(",\w+\s*\(,UimsS",$test,$regs) // tester la presence de fonctions restantes
797 797
 		)*/
798
-	) {
799
-		$static = '';
800
-	}
798
+    ) {
799
+        $static = '';
800
+    }
801 801
 
802
-	return [$static, '$command[\'' . $nom . '\'] = ' . $val . ';'];
802
+    return [$static, '$command[\'' . $nom . '\'] = ' . $val . ';'];
803 803
 }
804 804
 
805 805
 /**
@@ -819,32 +819,32 @@  discard block
 block discarded – undo
819 819
  *     Expression PHP décrivant un texte ou un tableau
820 820
  **/
821 821
 function calculer_dump_array($a) {
822
-	if (!is_array($a)) {
823
-		return $a;
824
-	}
825
-	$res = '';
826
-	if ($a and $a[0] == "'?'") {
827
-		return ('(' . calculer_dump_array($a[1]) .
828
-			' ? ' . calculer_dump_array($a[2]) .
829
-			' : ' . calculer_dump_array($a[3]) .
830
-			')');
831
-	} else {
832
-		foreach ($a as $k => $v) {
833
-			$showk = (is_numeric($k) ? '' : sql_quote($k) . ' => ');
834
-			$res .= ', ' . $showk . calculer_dump_array($v);
835
-		}
836
-
837
-		return "\n\t\t\tarray(" . substr($res, 2) . ')';
838
-	}
822
+    if (!is_array($a)) {
823
+        return $a;
824
+    }
825
+    $res = '';
826
+    if ($a and $a[0] == "'?'") {
827
+        return ('(' . calculer_dump_array($a[1]) .
828
+            ' ? ' . calculer_dump_array($a[2]) .
829
+            ' : ' . calculer_dump_array($a[3]) .
830
+            ')');
831
+    } else {
832
+        foreach ($a as $k => $v) {
833
+            $showk = (is_numeric($k) ? '' : sql_quote($k) . ' => ');
834
+            $res .= ', ' . $showk . calculer_dump_array($v);
835
+        }
836
+
837
+        return "\n\t\t\tarray(" . substr($res, 2) . ')';
838
+    }
839 839
 }
840 840
 
841 841
 function calculer_dump_join($a) {
842
-	$res = '';
843
-	foreach ($a as $k => $v) {
844
-		$res .= ", '$k' => array(" . implode(',', $v) . ')';
845
-	}
842
+    $res = '';
843
+    foreach ($a as $k => $v) {
844
+        $res .= ", '$k' => array(" . implode(',', $v) . ')';
845
+    }
846 846
 
847
-	return 'array(' . substr($res, 2) . ')';
847
+    return 'array(' . substr($res, 2) . ')';
848 848
 }
849 849
 
850 850
 /**
@@ -856,12 +856,12 @@  discard block
 block discarded – undo
856 856
  *     Code PHP construisant un tableau des alias et noms des tables du FROM
857 857
  **/
858 858
 function calculer_from(&$boucle) {
859
-	$res = '';
860
-	foreach ($boucle->from as $k => $v) {
861
-		$res .= ",'$k' => '$v'";
862
-	}
859
+    $res = '';
860
+    foreach ($boucle->from as $k => $v) {
861
+        $res .= ",'$k' => '$v'";
862
+    }
863 863
 
864
-	return 'array(' . substr($res, 1) . ')';
864
+    return 'array(' . substr($res, 1) . ')';
865 865
 }
866 866
 
867 867
 /**
@@ -874,30 +874,30 @@  discard block
 block discarded – undo
874 874
  *     Code PHP construisant un tableau des alias et type de jointure du FROM
875 875
  **/
876 876
 function calculer_from_type(&$boucle) {
877
-	$res = '';
878
-	foreach ($boucle->from_type as $k => $v) {
879
-		$res .= ",'$k' => '$v'";
880
-	}
877
+    $res = '';
878
+    foreach ($boucle->from_type as $k => $v) {
879
+        $res .= ",'$k' => '$v'";
880
+    }
881 881
 
882
-	return 'array(' . substr($res, 1) . ')';
882
+    return 'array(' . substr($res, 1) . ')';
883 883
 }
884 884
 
885 885
 function calculer_order(&$boucle) {
886
-	if (
887
-		!$order = $boucle->order
888
-		and !$order = $boucle->default_order
889
-	) {
890
-		$order = [];
891
-	}
892
-
893
-	/*if (isset($boucle->modificateur['collate'])){
886
+    if (
887
+        !$order = $boucle->order
888
+        and !$order = $boucle->default_order
889
+    ) {
890
+        $order = [];
891
+    }
892
+
893
+    /*if (isset($boucle->modificateur['collate'])){
894 894
 		$col = "." . $boucle->modificateur['collate'];
895 895
 		foreach($order as $k=>$o)
896 896
 			if (strpos($order[$k],'COLLATE')===false)
897 897
 				$order[$k].= $col;
898 898
 	}*/
899 899
 
900
-	return join(', ', $order);
900
+    return join(', ', $order);
901 901
 }
902 902
 
903 903
 // Production du code PHP a partir de la sequence livree par le phraseur
@@ -906,62 +906,62 @@  discard block
 block discarded – undo
906 906
 // (qui sera argument d'un Return ou la partie droite d'une affectation).
907 907
 
908 908
 function calculer_liste($tableau, $descr, &$boucles, $id_boucle = '') {
909
-	if (!$tableau) {
910
-		return "''";
911
-	}
912
-	if (is_string($descr)) {
913
-		if (isset($boucles[$descr])) {
914
-			$idb = $descr;
915
-			$descr = [];
916
-			if (isset($boucles[$idb]->descr['id_mere_contexte'])) {
917
-				$descr['id_mere'] = $boucles[$idb]->descr['id_mere_contexte'];
918
-			}
919
-			if (isset($boucles[$idb]->descr['sourcefile'])) {
920
-				$descr['sourcefile'] = $boucles[$idb]->descr['sourcefile'];
921
-			}
922
-		}
923
-		else {
924
-			$descr = [];
925
-		}
926
-	}
927
-	if (!isset($descr['niv'])) {
928
-		$descr['niv'] = 0;
929
-	}
930
-	$codes = compile_cas($tableau, $descr, $boucles, $id_boucle);
931
-	if ($codes === false) {
932
-		return false;
933
-	}
934
-	$n = is_countable($codes) ? count($codes) : 0;
935
-	if (!$n) {
936
-		return "''";
937
-	}
938
-	$tab = str_repeat("\t", $descr['niv']);
939
-	if (_request('var_mode_affiche') != 'validation') {
940
-		if ($n == 1) {
941
-			return $codes[0];
942
-		} else {
943
-			$res = '';
944
-			foreach ($codes as $code) {
945
-				if (
946
-					!preg_match("/^'[^']*'$/", $code)
947
-					or substr($res, -1, 1) !== "'"
948
-				) {
949
-					$res .= " .\n$tab$code";
950
-				} else {
951
-					$res = substr($res, 0, -1) . substr($code, 1);
952
-				}
953
-			}
954
-
955
-			return '(' . substr($res, 2 + $descr['niv']) . ')';
956
-		}
957
-	} else {
958
-		$nom = $descr['nom'] . $id_boucle . ($descr['niv'] ?: '');
959
-
960
-		return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(
961
-			" ,\n$tab",
962
-			$codes
963
-		) . ')))';
964
-	}
909
+    if (!$tableau) {
910
+        return "''";
911
+    }
912
+    if (is_string($descr)) {
913
+        if (isset($boucles[$descr])) {
914
+            $idb = $descr;
915
+            $descr = [];
916
+            if (isset($boucles[$idb]->descr['id_mere_contexte'])) {
917
+                $descr['id_mere'] = $boucles[$idb]->descr['id_mere_contexte'];
918
+            }
919
+            if (isset($boucles[$idb]->descr['sourcefile'])) {
920
+                $descr['sourcefile'] = $boucles[$idb]->descr['sourcefile'];
921
+            }
922
+        }
923
+        else {
924
+            $descr = [];
925
+        }
926
+    }
927
+    if (!isset($descr['niv'])) {
928
+        $descr['niv'] = 0;
929
+    }
930
+    $codes = compile_cas($tableau, $descr, $boucles, $id_boucle);
931
+    if ($codes === false) {
932
+        return false;
933
+    }
934
+    $n = is_countable($codes) ? count($codes) : 0;
935
+    if (!$n) {
936
+        return "''";
937
+    }
938
+    $tab = str_repeat("\t", $descr['niv']);
939
+    if (_request('var_mode_affiche') != 'validation') {
940
+        if ($n == 1) {
941
+            return $codes[0];
942
+        } else {
943
+            $res = '';
944
+            foreach ($codes as $code) {
945
+                if (
946
+                    !preg_match("/^'[^']*'$/", $code)
947
+                    or substr($res, -1, 1) !== "'"
948
+                ) {
949
+                    $res .= " .\n$tab$code";
950
+                } else {
951
+                    $res = substr($res, 0, -1) . substr($code, 1);
952
+                }
953
+            }
954
+
955
+            return '(' . substr($res, 2 + $descr['niv']) . ')';
956
+        }
957
+    } else {
958
+        $nom = $descr['nom'] . $id_boucle . ($descr['niv'] ?: '');
959
+
960
+        return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(
961
+            " ,\n$tab",
962
+            $codes
963
+        ) . ')))';
964
+    }
965 965
 }
966 966
 
967 967
 
@@ -971,213 +971,213 @@  discard block
 block discarded – undo
971 971
 
972 972
 function compile_cas($tableau, $descr, &$boucles, $id_boucle) {
973 973
 
974
-	$codes = [];
975
-	// cas de la boucle recursive
976
-	if (is_array($id_boucle)) {
977
-		$id_boucle = $id_boucle[0];
978
-	}
979
-	$type = !$id_boucle ? '' : $boucles[$id_boucle]->type_requete;
980
-	$tab = str_repeat("\t", ++$descr['niv']);
981
-	$mode = _request('var_mode_affiche');
982
-	$err_e_c = '';
983
-	// chaque commentaire introduit dans le code doit commencer
984
-	// par un caractere distinguant le cas, pour exploitation par debug.
985
-	foreach ($tableau as $p) {
986
-		switch ($p->type) {
987
-			// texte seul
988
-			case 'texte':
989
-				$code = sandbox_composer_texte($p->texte, $p);
990
-				$commentaire = strlen($p->texte) . ' signes';
991
-				$avant = '';
992
-				$apres = '';
993
-				$altern = "''";
994
-				break;
995
-
996
-			case 'polyglotte':
997
-				$code = '';
998
-				foreach ($p->traductions as $k => $v) {
999
-					$code .= ",'" .
1000
-						str_replace(['\\', "'"], ['\\\\', "\\'"], $k) .
1001
-						"' => '" .
1002
-						str_replace(['\\', "'"], ['\\\\', "\\'"], $v) .
1003
-						"'";
1004
-				}
1005
-				$code = 'choisir_traduction(array(' .
1006
-					substr($code, 1) .
1007
-					'))';
1008
-				$commentaire = '&';
1009
-				$avant = '';
1010
-				$apres = '';
1011
-				$altern = "''";
1012
-				break;
1013
-
1014
-			// inclure
1015
-			case 'include':
1016
-				$p->descr = $descr;
1017
-				$code = calculer_inclure($p, $boucles, $id_boucle);
1018
-				if ($code === false) {
1019
-					$err_e_c = true;
1020
-					$code = "''";
1021
-				} else {
1022
-					$commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>';
1023
-					$avant = '';
1024
-					$apres = '';
1025
-					$altern = "''";
1026
-				}
1027
-				break;
1028
-
1029
-			// boucle
1030
-			case TYPE_RECURSIF:
1031
-				$nom = $p->id_boucle;
1032
-				$newdescr = $descr;
1033
-				$newdescr['id_mere'] = $nom;
1034
-				$newdescr['niv']++;
1035
-				$preaff = calculer_liste($p->preaff, $newdescr, $boucles, $id_boucle);
1036
-				$avant = calculer_liste($p->avant, $newdescr, $boucles, $id_boucle);
1037
-				$apres = calculer_liste($p->apres, $newdescr, $boucles, $id_boucle);
1038
-				$postaff = calculer_liste($p->postaff, $newdescr, $boucles, $id_boucle);
1039
-				$newdescr['niv']--;
1040
-				$altern = calculer_liste($p->altern, $newdescr, $boucles, $id_boucle);
1041
-				if (
1042
-					$preaff === false
1043
-					or $avant === false
1044
-					or $apres === false
1045
-					or $altern === false
1046
-					or $postaff === false
1047
-				) {
1048
-					$err_e_c = true;
1049
-					$code = "''";
1050
-				} else {
1051
-					$code = 'BOUCLE' .
1052
-						str_replace('-', '_', $nom) . $descr['nom'] .
1053
-						'($Cache, $Pile, $doublons, $Numrows, $SP)';
1054
-					$commentaire = "?$nom";
1055
-					if (
1056
-						!$boucles[$nom]->milieu
1057
-						and $boucles[$nom]->type_requete <> TYPE_RECURSIF
1058
-					) {
1059
-						if ($preaff != "''") {
1060
-							$code .= "\n. $preaff";
1061
-						}
1062
-						if ($altern != "''") {
1063
-							$code .= "\n. $altern";
1064
-						}
1065
-						if ($postaff != "''") {
1066
-							$code .= "\n. $postaff";
1067
-						}
1068
-						if ($avant <> "''" or $apres <> "''") {
1069
-							spip_log("boucle $nom toujours vide, code superflu dans $descr[sourcefile]");
1070
-						}
1071
-						$avant = $apres = $altern = "''";
1072
-					} else {
1073
-						if ($preaff != "''") {
1074
-							$avant = compile_concatene_parties_codes($preaff, $avant);
1075
-							$altern = compile_concatene_parties_codes($preaff, $altern);
1076
-						}
1077
-						if ($postaff != "''") {
1078
-							$apres = compile_concatene_parties_codes($apres, $postaff);
1079
-							$altern = compile_concatene_parties_codes($altern, $postaff);
1080
-						}
1081
-						if ($altern != "''") {
1082
-							$altern = "($altern)";
1083
-						}
1084
-					}
1085
-				}
1086
-				break;
1087
-
1088
-			case 'idiome':
1089
-				$l = [];
1090
-				$code = '';
1091
-				foreach ($p->arg as $k => $v) {
1092
-					$_v = calculer_liste($v, $descr, $boucles, $id_boucle);
1093
-					if ($k) {
1094
-						$l[] = _q($k) . ' => ' . $_v;
1095
-					} else {
1096
-						$code = $_v;
1097
-					}
1098
-				}
1099
-				// Si le module n'est pas fourni, l'expliciter sauf si calculé
1100
-				if ($p->module) {
1101
-					$m = $p->module . ':' . $p->nom_champ;
1102
-				} elseif ($p->nom_champ) {
1103
-					$m = MODULES_IDIOMES . ':' . $p->nom_champ;
1104
-				} else {
1105
-					$m = '';
1106
-				}
1107
-
1108
-				$code = (!$code ? "'$m'" :
1109
-						($m ? "'$m' . $code" :
1110
-							("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))")))
1111
-					. (!$l ? '' : (', array(' . implode(",\n", $l) . ')'));
1112
-				$code = "_T($code)";
1113
-				if ($p->param) {
1114
-					$p->id_boucle = $id_boucle;
1115
-					$p->boucles = &$boucles;
1116
-					$code = compose_filtres($p, $code);
1117
-				}
1118
-				$commentaire = ':';
1119
-				$avant = '';
1120
-				$apres = '';
1121
-				$altern = "''";
1122
-				break;
1123
-
1124
-			case 'champ':
1125
-				// cette structure pourrait etre completee des le phrase' (a faire)
1126
-				$p->id_boucle = $id_boucle;
1127
-				$p->boucles = &$boucles;
1128
-				$p->descr = $descr;
1129
-				#$p->interdire_scripts = true;
1130
-				$p->type_requete = $type;
1131
-
1132
-				$code = calculer_champ($p);
1133
-				$commentaire = '#' . $p->nom_champ . $p->etoile;
1134
-				$avant = calculer_liste(
1135
-					$p->avant,
1136
-					$descr,
1137
-					$boucles,
1138
-					$id_boucle
1139
-				);
1140
-				$apres = calculer_liste(
1141
-					$p->apres,
1142
-					$descr,
1143
-					$boucles,
1144
-					$id_boucle
1145
-				);
1146
-				$altern = "''";
1147
-				// Si la valeur est destinee a une comparaison a ''
1148
-				// forcer la conversion en une chaine par strval
1149
-				// si ca peut etre autre chose qu'une chaine
1150
-				if (
1151
-					($avant != "''" or $apres != "''")
1152
-					and $code[0] != "'"
974
+    $codes = [];
975
+    // cas de la boucle recursive
976
+    if (is_array($id_boucle)) {
977
+        $id_boucle = $id_boucle[0];
978
+    }
979
+    $type = !$id_boucle ? '' : $boucles[$id_boucle]->type_requete;
980
+    $tab = str_repeat("\t", ++$descr['niv']);
981
+    $mode = _request('var_mode_affiche');
982
+    $err_e_c = '';
983
+    // chaque commentaire introduit dans le code doit commencer
984
+    // par un caractere distinguant le cas, pour exploitation par debug.
985
+    foreach ($tableau as $p) {
986
+        switch ($p->type) {
987
+            // texte seul
988
+            case 'texte':
989
+                $code = sandbox_composer_texte($p->texte, $p);
990
+                $commentaire = strlen($p->texte) . ' signes';
991
+                $avant = '';
992
+                $apres = '';
993
+                $altern = "''";
994
+                break;
995
+
996
+            case 'polyglotte':
997
+                $code = '';
998
+                foreach ($p->traductions as $k => $v) {
999
+                    $code .= ",'" .
1000
+                        str_replace(['\\', "'"], ['\\\\', "\\'"], $k) .
1001
+                        "' => '" .
1002
+                        str_replace(['\\', "'"], ['\\\\', "\\'"], $v) .
1003
+                        "'";
1004
+                }
1005
+                $code = 'choisir_traduction(array(' .
1006
+                    substr($code, 1) .
1007
+                    '))';
1008
+                $commentaire = '&';
1009
+                $avant = '';
1010
+                $apres = '';
1011
+                $altern = "''";
1012
+                break;
1013
+
1014
+            // inclure
1015
+            case 'include':
1016
+                $p->descr = $descr;
1017
+                $code = calculer_inclure($p, $boucles, $id_boucle);
1018
+                if ($code === false) {
1019
+                    $err_e_c = true;
1020
+                    $code = "''";
1021
+                } else {
1022
+                    $commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>';
1023
+                    $avant = '';
1024
+                    $apres = '';
1025
+                    $altern = "''";
1026
+                }
1027
+                break;
1028
+
1029
+            // boucle
1030
+            case TYPE_RECURSIF:
1031
+                $nom = $p->id_boucle;
1032
+                $newdescr = $descr;
1033
+                $newdescr['id_mere'] = $nom;
1034
+                $newdescr['niv']++;
1035
+                $preaff = calculer_liste($p->preaff, $newdescr, $boucles, $id_boucle);
1036
+                $avant = calculer_liste($p->avant, $newdescr, $boucles, $id_boucle);
1037
+                $apres = calculer_liste($p->apres, $newdescr, $boucles, $id_boucle);
1038
+                $postaff = calculer_liste($p->postaff, $newdescr, $boucles, $id_boucle);
1039
+                $newdescr['niv']--;
1040
+                $altern = calculer_liste($p->altern, $newdescr, $boucles, $id_boucle);
1041
+                if (
1042
+                    $preaff === false
1043
+                    or $avant === false
1044
+                    or $apres === false
1045
+                    or $altern === false
1046
+                    or $postaff === false
1047
+                ) {
1048
+                    $err_e_c = true;
1049
+                    $code = "''";
1050
+                } else {
1051
+                    $code = 'BOUCLE' .
1052
+                        str_replace('-', '_', $nom) . $descr['nom'] .
1053
+                        '($Cache, $Pile, $doublons, $Numrows, $SP)';
1054
+                    $commentaire = "?$nom";
1055
+                    if (
1056
+                        !$boucles[$nom]->milieu
1057
+                        and $boucles[$nom]->type_requete <> TYPE_RECURSIF
1058
+                    ) {
1059
+                        if ($preaff != "''") {
1060
+                            $code .= "\n. $preaff";
1061
+                        }
1062
+                        if ($altern != "''") {
1063
+                            $code .= "\n. $altern";
1064
+                        }
1065
+                        if ($postaff != "''") {
1066
+                            $code .= "\n. $postaff";
1067
+                        }
1068
+                        if ($avant <> "''" or $apres <> "''") {
1069
+                            spip_log("boucle $nom toujours vide, code superflu dans $descr[sourcefile]");
1070
+                        }
1071
+                        $avant = $apres = $altern = "''";
1072
+                    } else {
1073
+                        if ($preaff != "''") {
1074
+                            $avant = compile_concatene_parties_codes($preaff, $avant);
1075
+                            $altern = compile_concatene_parties_codes($preaff, $altern);
1076
+                        }
1077
+                        if ($postaff != "''") {
1078
+                            $apres = compile_concatene_parties_codes($apres, $postaff);
1079
+                            $altern = compile_concatene_parties_codes($altern, $postaff);
1080
+                        }
1081
+                        if ($altern != "''") {
1082
+                            $altern = "($altern)";
1083
+                        }
1084
+                    }
1085
+                }
1086
+                break;
1087
+
1088
+            case 'idiome':
1089
+                $l = [];
1090
+                $code = '';
1091
+                foreach ($p->arg as $k => $v) {
1092
+                    $_v = calculer_liste($v, $descr, $boucles, $id_boucle);
1093
+                    if ($k) {
1094
+                        $l[] = _q($k) . ' => ' . $_v;
1095
+                    } else {
1096
+                        $code = $_v;
1097
+                    }
1098
+                }
1099
+                // Si le module n'est pas fourni, l'expliciter sauf si calculé
1100
+                if ($p->module) {
1101
+                    $m = $p->module . ':' . $p->nom_champ;
1102
+                } elseif ($p->nom_champ) {
1103
+                    $m = MODULES_IDIOMES . ':' . $p->nom_champ;
1104
+                } else {
1105
+                    $m = '';
1106
+                }
1107
+
1108
+                $code = (!$code ? "'$m'" :
1109
+                        ($m ? "'$m' . $code" :
1110
+                            ("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))")))
1111
+                    . (!$l ? '' : (', array(' . implode(",\n", $l) . ')'));
1112
+                $code = "_T($code)";
1113
+                if ($p->param) {
1114
+                    $p->id_boucle = $id_boucle;
1115
+                    $p->boucles = &$boucles;
1116
+                    $code = compose_filtres($p, $code);
1117
+                }
1118
+                $commentaire = ':';
1119
+                $avant = '';
1120
+                $apres = '';
1121
+                $altern = "''";
1122
+                break;
1123
+
1124
+            case 'champ':
1125
+                // cette structure pourrait etre completee des le phrase' (a faire)
1126
+                $p->id_boucle = $id_boucle;
1127
+                $p->boucles = &$boucles;
1128
+                $p->descr = $descr;
1129
+                #$p->interdire_scripts = true;
1130
+                $p->type_requete = $type;
1131
+
1132
+                $code = calculer_champ($p);
1133
+                $commentaire = '#' . $p->nom_champ . $p->etoile;
1134
+                $avant = calculer_liste(
1135
+                    $p->avant,
1136
+                    $descr,
1137
+                    $boucles,
1138
+                    $id_boucle
1139
+                );
1140
+                $apres = calculer_liste(
1141
+                    $p->apres,
1142
+                    $descr,
1143
+                    $boucles,
1144
+                    $id_boucle
1145
+                );
1146
+                $altern = "''";
1147
+                // Si la valeur est destinee a une comparaison a ''
1148
+                // forcer la conversion en une chaine par strval
1149
+                // si ca peut etre autre chose qu'une chaine
1150
+                if (
1151
+                    ($avant != "''" or $apres != "''")
1152
+                    and $code[0] != "'"
1153 1153
 #			AND (strpos($code,'interdire_scripts') !== 0)
1154
-					and !preg_match(_REGEXP_COND_VIDE_NONVIDE, $code)
1155
-					and !preg_match(_REGEXP_COND_NONVIDE_VIDE, $code)
1156
-					and !preg_match(_REGEXP_CONCAT_NON_VIDE, $code)
1157
-				) {
1158
-					$code = "strval($code)";
1159
-				}
1160
-				break;
1161
-
1162
-			default:
1163
-				// Erreur de construction de l'arbre de syntaxe abstraite
1164
-				$code = "''";
1165
-				$p->descr = $descr;
1166
-				$err_e_c = _T('zbug_erreur_compilation');
1167
-				erreur_squelette($err_e_c, $p);
1168
-		} // switch
1169
-
1170
-		if ($code != "''") {
1171
-			$code = compile_retour($code, $avant, $apres, $altern, $tab, $descr['niv']);
1172
-			$codes[] = (($mode == 'validation') ?
1173
-				"array($code, '$commentaire', " . $p->ligne . ')'
1174
-				: (($mode == 'code') ?
1175
-					"\n// $commentaire\n$code" :
1176
-					$code));
1177
-		}
1178
-	} // foreach
1179
-
1180
-	return $err_e_c ? false : $codes;
1154
+                    and !preg_match(_REGEXP_COND_VIDE_NONVIDE, $code)
1155
+                    and !preg_match(_REGEXP_COND_NONVIDE_VIDE, $code)
1156
+                    and !preg_match(_REGEXP_CONCAT_NON_VIDE, $code)
1157
+                ) {
1158
+                    $code = "strval($code)";
1159
+                }
1160
+                break;
1161
+
1162
+            default:
1163
+                // Erreur de construction de l'arbre de syntaxe abstraite
1164
+                $code = "''";
1165
+                $p->descr = $descr;
1166
+                $err_e_c = _T('zbug_erreur_compilation');
1167
+                erreur_squelette($err_e_c, $p);
1168
+        } // switch
1169
+
1170
+        if ($code != "''") {
1171
+            $code = compile_retour($code, $avant, $apres, $altern, $tab, $descr['niv']);
1172
+            $codes[] = (($mode == 'validation') ?
1173
+                "array($code, '$commentaire', " . $p->ligne . ')'
1174
+                : (($mode == 'code') ?
1175
+                    "\n// $commentaire\n$code" :
1176
+                    $code));
1177
+        }
1178
+    } // foreach
1179
+
1180
+    return $err_e_c ? false : $codes;
1181 1181
 }
1182 1182
 
1183 1183
 /**
@@ -1187,13 +1187,13 @@  discard block
 block discarded – undo
1187 1187
  * @return string
1188 1188
  */
1189 1189
 function compile_concatene_parties_codes($partie1, $partie2) {
1190
-	if ($partie1 === "''") {
1191
-		return $partie2;
1192
-	}
1193
-	if ($partie2 === "''") {
1194
-		return $partie1;
1195
-	}
1196
-	return "$partie1\n. $partie2";
1190
+    if ($partie1 === "''") {
1191
+        return $partie2;
1192
+    }
1193
+    if ($partie2 === "''") {
1194
+        return $partie1;
1195
+    }
1196
+    return "$partie1\n. $partie2";
1197 1197
 }
1198 1198
 
1199 1199
 
@@ -1217,56 +1217,56 @@  discard block
 block discarded – undo
1217 1217
  * @return mixed|string
1218 1218
  */
1219 1219
 function compile_retour($code, $avant, $apres, $altern, $tab, $n) {
1220
-	if ($avant === "''") {
1221
-		$avant = '';
1222
-	}
1223
-	if ($apres === "''") {
1224
-		$apres = '';
1225
-	}
1226
-	if ($avant or $apres or ($altern !== "''")) {
1227
-		if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)) {
1228
-			$t = $code;
1229
-			$cond = '';
1230
-		} elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE, $code, $r)) {
1231
-			$t = $r[2];
1232
-			$cond = '!' . $r[1];
1233
-		} else {
1234
-			if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)) {
1235
-				$t = $r[2];
1236
-				$cond = $r[1];
1237
-			} else {
1238
-				$t = '$t' . $n;
1239
-				$cond = "($t = $code)!==''";
1240
-			}
1241
-		}
1242
-
1243
-		$res = (!$avant ? '' : "$avant . ") .
1244
-			$t .
1245
-			(!$apres ? '' : " . $apres");
1246
-
1247
-		if ($res !== $t) {
1248
-			$res = "($res)";
1249
-		}
1250
-
1251
-		$code = (!$cond ? $res : "($cond ?\n\t$tab$res :\n\t$tab$altern)");
1252
-	}
1253
-
1254
-	return $code;
1220
+    if ($avant === "''") {
1221
+        $avant = '';
1222
+    }
1223
+    if ($apres === "''") {
1224
+        $apres = '';
1225
+    }
1226
+    if ($avant or $apres or ($altern !== "''")) {
1227
+        if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)) {
1228
+            $t = $code;
1229
+            $cond = '';
1230
+        } elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE, $code, $r)) {
1231
+            $t = $r[2];
1232
+            $cond = '!' . $r[1];
1233
+        } else {
1234
+            if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)) {
1235
+                $t = $r[2];
1236
+                $cond = $r[1];
1237
+            } else {
1238
+                $t = '$t' . $n;
1239
+                $cond = "($t = $code)!==''";
1240
+            }
1241
+        }
1242
+
1243
+        $res = (!$avant ? '' : "$avant . ") .
1244
+            $t .
1245
+            (!$apres ? '' : " . $apres");
1246
+
1247
+        if ($res !== $t) {
1248
+            $res = "($res)";
1249
+        }
1250
+
1251
+        $code = (!$cond ? $res : "($cond ?\n\t$tab$res :\n\t$tab$altern)");
1252
+    }
1253
+
1254
+    return $code;
1255 1255
 }
1256 1256
 
1257 1257
 
1258 1258
 function compile_inclure_doublons($lexemes) {
1259
-	foreach ($lexemes as $v) {
1260
-		if ($v->type === 'include' and $v->param) {
1261
-			foreach ($v->param as $r) {
1262
-				if (trim($r[0]) === 'doublons') {
1263
-					return true;
1264
-				}
1265
-			}
1266
-		}
1267
-	}
1268
-
1269
-	return false;
1259
+    foreach ($lexemes as $v) {
1260
+        if ($v->type === 'include' and $v->param) {
1261
+            foreach ($v->param as $r) {
1262
+                if (trim($r[0]) === 'doublons') {
1263
+                    return true;
1264
+                }
1265
+            }
1266
+        }
1267
+    }
1268
+
1269
+    return false;
1270 1270
 }
1271 1271
 
1272 1272
 // Prend en argument le texte d'un squelette, le nom de son fichier d'origine,
@@ -1285,354 +1285,354 @@  discard block
 block discarded – undo
1285 1285
 // En cas d'erreur, elle retournera un tableau des 2 premiers elements seulement
1286 1286
 
1287 1287
 function public_compiler_dist($squelette, $nom, $gram, $sourcefile, string $connect = '') {
1288
-	// Pre-traitement : reperer le charset du squelette, et le convertir
1289
-	// Bonus : supprime le BOM
1290
-	include_spip('inc/charsets');
1291
-	$squelette = transcoder_page($squelette);
1292
-
1293
-	// rendre inertes les echappements de #[](){}<>
1294
-	$i = 0;
1295
-	while (false !== strpos($squelette, $inerte = '-INERTE' . $i)) {
1296
-		$i++;
1297
-	}
1298
-	$squelette = preg_replace_callback(
1299
-		',\\\\([#[()\]{}<>]),',
1300
-		fn($a) => "$inerte-" . ord($a[1]) . '-',
1301
-		$squelette,
1302
-		-1,
1303
-		$esc
1304
-	);
1305
-
1306
-	$descr = [
1307
-		'nom' => $nom,
1308
-		'gram' => $gram,
1309
-		'sourcefile' => $sourcefile,
1310
-		'squelette' => $squelette
1311
-	];
1312
-
1313
-	// Phraser le squelette, selon sa grammaire
1314
-
1315
-	$boucles = [];
1316
-	$f = charger_fonction('phraser_' . $gram, 'public');
1317
-
1318
-	$squelette = $f($squelette, '', $boucles, $descr);
1319
-
1320
-	$boucles = compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect);
1321
-
1322
-	// restituer les echappements
1323
-	if ($esc) {
1324
-		foreach ($boucles as $i => $boucle) {
1325
-			$boucles[$i]->return = preg_replace_callback(
1326
-				",$inerte-(\d+)-,",
1327
-				fn($a) => chr($a[1]),
1328
-				$boucle->return
1329
-			);
1330
-			$boucles[$i]->descr['squelette'] = preg_replace_callback(
1331
-				",$inerte-(\d+)-,",
1332
-				fn($a) => '\\\\' . chr($a[1]),
1333
-				$boucle->descr['squelette']
1334
-			);
1335
-		}
1336
-	}
1337
-
1338
-	$debug = ($boucles and defined('_VAR_MODE') and _VAR_MODE == 'debug');
1339
-	if ($debug) {
1340
-		include_spip('public/decompiler');
1341
-		foreach ($boucles as $id => $boucle) {
1342
-			if ($id) {
1343
-				$decomp = "\n/* BOUCLE " .
1344
-					$boucle->type_requete .
1345
-					' ' .
1346
-					str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) .
1347
-					($boucle->debug ? "\n *\n * " . implode("\n * ", $boucle->debug) . "\n" : '') .
1348
-					" */\n";
1349
-			} else {
1350
-				$decomp = ("\n/*\n" .
1351
-					str_replace('*/', '* /', public_decompiler($squelette, $gram))
1352
-					. "\n*/");
1353
-			}
1354
-			$boucles[$id]->return = $decomp . $boucle->return;
1355
-			$GLOBALS['debug_objets']['code'][$nom . $id] = $boucle->return;
1356
-		}
1357
-	}
1358
-
1359
-	return $boucles;
1288
+    // Pre-traitement : reperer le charset du squelette, et le convertir
1289
+    // Bonus : supprime le BOM
1290
+    include_spip('inc/charsets');
1291
+    $squelette = transcoder_page($squelette);
1292
+
1293
+    // rendre inertes les echappements de #[](){}<>
1294
+    $i = 0;
1295
+    while (false !== strpos($squelette, $inerte = '-INERTE' . $i)) {
1296
+        $i++;
1297
+    }
1298
+    $squelette = preg_replace_callback(
1299
+        ',\\\\([#[()\]{}<>]),',
1300
+        fn($a) => "$inerte-" . ord($a[1]) . '-',
1301
+        $squelette,
1302
+        -1,
1303
+        $esc
1304
+    );
1305
+
1306
+    $descr = [
1307
+        'nom' => $nom,
1308
+        'gram' => $gram,
1309
+        'sourcefile' => $sourcefile,
1310
+        'squelette' => $squelette
1311
+    ];
1312
+
1313
+    // Phraser le squelette, selon sa grammaire
1314
+
1315
+    $boucles = [];
1316
+    $f = charger_fonction('phraser_' . $gram, 'public');
1317
+
1318
+    $squelette = $f($squelette, '', $boucles, $descr);
1319
+
1320
+    $boucles = compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect);
1321
+
1322
+    // restituer les echappements
1323
+    if ($esc) {
1324
+        foreach ($boucles as $i => $boucle) {
1325
+            $boucles[$i]->return = preg_replace_callback(
1326
+                ",$inerte-(\d+)-,",
1327
+                fn($a) => chr($a[1]),
1328
+                $boucle->return
1329
+            );
1330
+            $boucles[$i]->descr['squelette'] = preg_replace_callback(
1331
+                ",$inerte-(\d+)-,",
1332
+                fn($a) => '\\\\' . chr($a[1]),
1333
+                $boucle->descr['squelette']
1334
+            );
1335
+        }
1336
+    }
1337
+
1338
+    $debug = ($boucles and defined('_VAR_MODE') and _VAR_MODE == 'debug');
1339
+    if ($debug) {
1340
+        include_spip('public/decompiler');
1341
+        foreach ($boucles as $id => $boucle) {
1342
+            if ($id) {
1343
+                $decomp = "\n/* BOUCLE " .
1344
+                    $boucle->type_requete .
1345
+                    ' ' .
1346
+                    str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) .
1347
+                    ($boucle->debug ? "\n *\n * " . implode("\n * ", $boucle->debug) . "\n" : '') .
1348
+                    " */\n";
1349
+            } else {
1350
+                $decomp = ("\n/*\n" .
1351
+                    str_replace('*/', '* /', public_decompiler($squelette, $gram))
1352
+                    . "\n*/");
1353
+            }
1354
+            $boucles[$id]->return = $decomp . $boucle->return;
1355
+            $GLOBALS['debug_objets']['code'][$nom . $id] = $boucle->return;
1356
+        }
1357
+    }
1358
+
1359
+    return $boucles;
1360 1360
 }
1361 1361
 
1362 1362
 // Point d'entree pour arbre de syntaxe abstraite fourni en premier argument
1363 1363
 // Autres specifications comme ci-dessus
1364 1364
 
1365 1365
 function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, string $connect = '') {
1366
-	static $trouver_table;
1367
-	spip_timer('calcul_skel');
1368
-
1369
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
1370
-		$GLOBALS['debug_objets']['squelette'][$nom] = $descr['squelette'];
1371
-		$GLOBALS['debug_objets']['sourcefile'][$nom] = $sourcefile;
1372
-
1373
-		if (!isset($GLOBALS['debug_objets']['principal'])) {
1374
-			$GLOBALS['debug_objets']['principal'] = $nom;
1375
-		}
1376
-	}
1377
-	foreach ($boucles as $id => $boucle) {
1378
-		$GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle;
1379
-	}
1380
-	$descr['documents'] = compile_inclure_doublons($squelette);
1381
-
1382
-	// Demander la description des tables une fois pour toutes
1383
-	if (!$trouver_table) {
1384
-		$trouver_table = charger_fonction('trouver_table', 'base');
1385
-	}
1386
-
1387
-	// reperer si les doublons sont demandes
1388
-	// pour un inclure ou une boucle document
1389
-	// c'est utile a la fonction champs_traitements
1390
-	foreach ($boucles as $id => $boucle) {
1391
-		if (!($type = $boucle->type_requete)) {
1392
-			continue;
1393
-		}
1394
-		if (
1395
-			!$descr['documents'] and (
1396
-				(($type == 'documents') and $boucle->doublons) or
1397
-				compile_inclure_doublons($boucle->avant) or
1398
-				compile_inclure_doublons($boucle->apres) or
1399
-				compile_inclure_doublons($boucle->milieu) or
1400
-				compile_inclure_doublons($boucle->altern))
1401
-		) {
1402
-			$descr['documents'] = true;
1403
-		}
1404
-		if ($type != TYPE_RECURSIF) {
1405
-			if (!$boucles[$id]->sql_serveur and $connect) {
1406
-				$boucles[$id]->sql_serveur = $connect;
1407
-			}
1408
-
1409
-			// chercher dans les iterateurs du repertoire iterateur/
1410
-			if (
1411
-				$g = charger_fonction(
1412
-					preg_replace('/\W/', '_', $boucle->type_requete),
1413
-					'iterateur',
1414
-					true
1415
-				)
1416
-			) {
1417
-				$boucles[$id] = $g($boucle);
1418
-
1419
-				// sinon, en cas de requeteur d'un type predefini,
1420
-				// utiliser les informations donnees par le requeteur
1421
-				// cas "php:xx" et "data:xx".
1422
-			} else {
1423
-				if ($boucle->sql_serveur and $requeteur = charger_fonction($boucle->sql_serveur, 'requeteur', true)) {
1424
-					$requeteur($boucles, $boucle, $id);
1425
-
1426
-					// utiliser la description des champs transmis
1427
-				} else {
1428
-					$show = $trouver_table($type, $boucles[$id]->sql_serveur);
1429
-					// si la table n'existe pas avec le connecteur par defaut,
1430
-					// c'est peut etre une table qui necessite son connecteur dedie fourni
1431
-					// permet une ecriture allegee (GEO) -> (geo:GEO)
1432
-					if (
1433
-						!$show
1434
-						and $show = $trouver_table($type, strtolower($type))
1435
-					) {
1436
-						$boucles[$id]->sql_serveur = strtolower($type);
1437
-					}
1438
-					if ($show) {
1439
-						$boucles[$id]->show = $show;
1440
-						// recopie les infos les plus importantes
1441
-						$boucles[$id]->primary = $show['key']['PRIMARY KEY'] ?? '';
1442
-						$boucles[$id]->id_table = $x = preg_replace(',^spip_,', '', $show['id_table']);
1443
-						$boucles[$id]->from[$x] = $nom_table = $show['table'];
1444
-						$boucles[$id]->iterateur = 'SQL';
1445
-
1446
-						if (empty($boucles[$id]->descr)) {
1447
-							$boucles[$id]->descr = &$descr;
1448
-						}
1449
-						if (
1450
-							(!$boucles[$id]->jointures)
1451
-							and is_array($show['tables_jointures'])
1452
-							and count($x = $show['tables_jointures'])
1453
-						) {
1454
-							$boucles[$id]->jointures = $x;
1455
-						}
1456
-						if ($boucles[$id]->jointures_explicites) {
1457
-							$jointures = preg_split('/\s+/', $boucles[$id]->jointures_explicites);
1458
-							while ($j = array_pop($jointures)) {
1459
-								array_unshift($boucles[$id]->jointures, $j);
1460
-							}
1461
-						}
1462
-					} else {
1463
-						// Pas une erreur si la table est optionnelle
1464
-						if ($boucles[$id]->table_optionnelle) {
1465
-							$boucles[$id]->type_requete = '';
1466
-						} else {
1467
-							$boucles[$id]->type_requete = false;
1468
-							$boucle = $boucles[$id];
1469
-							$x = (!$boucle->sql_serveur ? '' :
1470
-									($boucle->sql_serveur . ':')) .
1471
-								$type;
1472
-							$msg = [
1473
-								'zbug_table_inconnue',
1474
-								['table' => $x]
1475
-							];
1476
-							erreur_squelette($msg, $boucle);
1477
-						}
1478
-					}
1479
-				}
1480
-			}
1481
-		}
1482
-	}
1483
-
1484
-	// Commencer par reperer les boucles appelees explicitement
1485
-	// car elles indexent les arguments de maniere derogatoire
1486
-	foreach ($boucles as $id => $boucle) {
1487
-		if ($boucle->type_requete == TYPE_RECURSIF and $boucle->param) {
1488
-			$boucles[$id]->descr = &$descr;
1489
-			$rec = &$boucles[$boucle->param[0]];
1490
-			if (!$rec) {
1491
-				$msg = [
1492
-					'zbug_boucle_recursive_undef',
1493
-					['nom' => $boucle->param[0]]
1494
-				];
1495
-				erreur_squelette($msg, $boucle);
1496
-				$boucles[$id]->type_requete = false;
1497
-			} else {
1498
-				$rec->externe = $id;
1499
-				$descr['id_mere'] = $id;
1500
-				$boucles[$id]->return =
1501
-					calculer_liste(
1502
-						[$rec],
1503
-						$descr,
1504
-						$boucles,
1505
-						$boucle->param
1506
-					);
1507
-			}
1508
-		}
1509
-	}
1510
-	foreach ($boucles as $id => $boucle) {
1511
-		$id = strval($id); // attention au type dans index_pile
1512
-		$type = $boucle->type_requete;
1513
-		if ($type and $type != TYPE_RECURSIF) {
1514
-			$res = '';
1515
-			if ($boucle->param) {
1516
-				// retourne un tableau en cas d'erreur
1517
-				$res = calculer_criteres($id, $boucles);
1518
-			}
1519
-			$descr['id_mere'] = $id;
1520
-			$boucles[$id]->return =
1521
-				calculer_liste(
1522
-					$boucle->milieu,
1523
-					$descr,
1524
-					$boucles,
1525
-					$id
1526
-				);
1527
-			// Si les criteres se sont mal compiles
1528
-			// ne pas tenter d'assembler le code final
1529
-			// (mais compiler le corps pour detection d'erreurs)
1530
-			if (is_array($res)) {
1531
-				$boucles[$id]->type_requete = false;
1532
-			}
1533
-		}
1534
-	}
1535
-
1536
-	// idem pour la racine
1537
-	$descr['id_mere'] = '';
1538
-	$corps = calculer_liste($squelette, $descr, $boucles);
1539
-
1540
-
1541
-	// Calcul du corps de toutes les fonctions PHP,
1542
-	// en particulier les requetes SQL et TOTAL_BOUCLE
1543
-	// de'terminables seulement maintenant
1544
-
1545
-	foreach ($boucles as $id => $boucle) {
1546
-		$boucle = $boucles[$id] = pipeline('pre_boucle', $boucle);
1547
-		if ($boucle->return === false) {
1548
-			$corps = false;
1549
-			continue;
1550
-		}
1551
-		// appeler la fonction de definition de la boucle
1552
-
1553
-		if ($req = $boucle->type_requete) {
1554
-			// boucle personnalisée ?
1555
-			$table = strtoupper($boucle->type_requete);
1556
-			$serveur = strtolower($boucle->sql_serveur);
1557
-			if (
1558
-				// fonction de boucle avec serveur & table
1559
-				(!$serveur or
1560
-					((!function_exists($f = 'boucle_' . $serveur . '_' . $table))
1561
-						and (!function_exists($f = $f . '_dist'))
1562
-					)
1563
-				)
1564
-				// fonction de boucle avec table
1565
-				and (!function_exists($f = 'boucle_' . $table))
1566
-				and (!function_exists($f = $f . '_dist'))
1567
-			) {
1568
-				// fonction de boucle standard
1569
-				if (!function_exists($f = 'boucle_DEFAUT')) {
1570
-					$f = 'boucle_DEFAUT_dist';
1571
-				}
1572
-			}
1573
-
1574
-			$req = "\n\n\tstatic \$command = array();\n\t" .
1575
-				"static \$connect;\n\t" .
1576
-				"\$command['connect'] = \$connect = " .
1577
-				_q($boucle->sql_serveur) .
1578
-				';' .
1579
-				$f($id, $boucles);
1580
-		} else {
1581
-			$req = ("\n\treturn '';");
1582
-		}
1583
-
1584
-		$boucles[$id]->return =
1585
-			"\n\nfunction BOUCLE" . strtr($id, '-', '_') . $nom .
1586
-			'(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' .
1587
-			$req .
1588
-			"\n}\n";
1589
-	}
1590
-
1591
-	// Au final, si le corps ou un critere au moins s'est mal compile
1592
-	// retourner False, sinon inserer leur decompilation
1593
-	if (is_bool($corps)) {
1594
-		return false;
1595
-	}
1596
-
1597
-	$principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) {
1366
+    static $trouver_table;
1367
+    spip_timer('calcul_skel');
1368
+
1369
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
1370
+        $GLOBALS['debug_objets']['squelette'][$nom] = $descr['squelette'];
1371
+        $GLOBALS['debug_objets']['sourcefile'][$nom] = $sourcefile;
1372
+
1373
+        if (!isset($GLOBALS['debug_objets']['principal'])) {
1374
+            $GLOBALS['debug_objets']['principal'] = $nom;
1375
+        }
1376
+    }
1377
+    foreach ($boucles as $id => $boucle) {
1378
+        $GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle;
1379
+    }
1380
+    $descr['documents'] = compile_inclure_doublons($squelette);
1381
+
1382
+    // Demander la description des tables une fois pour toutes
1383
+    if (!$trouver_table) {
1384
+        $trouver_table = charger_fonction('trouver_table', 'base');
1385
+    }
1386
+
1387
+    // reperer si les doublons sont demandes
1388
+    // pour un inclure ou une boucle document
1389
+    // c'est utile a la fonction champs_traitements
1390
+    foreach ($boucles as $id => $boucle) {
1391
+        if (!($type = $boucle->type_requete)) {
1392
+            continue;
1393
+        }
1394
+        if (
1395
+            !$descr['documents'] and (
1396
+                (($type == 'documents') and $boucle->doublons) or
1397
+                compile_inclure_doublons($boucle->avant) or
1398
+                compile_inclure_doublons($boucle->apres) or
1399
+                compile_inclure_doublons($boucle->milieu) or
1400
+                compile_inclure_doublons($boucle->altern))
1401
+        ) {
1402
+            $descr['documents'] = true;
1403
+        }
1404
+        if ($type != TYPE_RECURSIF) {
1405
+            if (!$boucles[$id]->sql_serveur and $connect) {
1406
+                $boucles[$id]->sql_serveur = $connect;
1407
+            }
1408
+
1409
+            // chercher dans les iterateurs du repertoire iterateur/
1410
+            if (
1411
+                $g = charger_fonction(
1412
+                    preg_replace('/\W/', '_', $boucle->type_requete),
1413
+                    'iterateur',
1414
+                    true
1415
+                )
1416
+            ) {
1417
+                $boucles[$id] = $g($boucle);
1418
+
1419
+                // sinon, en cas de requeteur d'un type predefini,
1420
+                // utiliser les informations donnees par le requeteur
1421
+                // cas "php:xx" et "data:xx".
1422
+            } else {
1423
+                if ($boucle->sql_serveur and $requeteur = charger_fonction($boucle->sql_serveur, 'requeteur', true)) {
1424
+                    $requeteur($boucles, $boucle, $id);
1425
+
1426
+                    // utiliser la description des champs transmis
1427
+                } else {
1428
+                    $show = $trouver_table($type, $boucles[$id]->sql_serveur);
1429
+                    // si la table n'existe pas avec le connecteur par defaut,
1430
+                    // c'est peut etre une table qui necessite son connecteur dedie fourni
1431
+                    // permet une ecriture allegee (GEO) -> (geo:GEO)
1432
+                    if (
1433
+                        !$show
1434
+                        and $show = $trouver_table($type, strtolower($type))
1435
+                    ) {
1436
+                        $boucles[$id]->sql_serveur = strtolower($type);
1437
+                    }
1438
+                    if ($show) {
1439
+                        $boucles[$id]->show = $show;
1440
+                        // recopie les infos les plus importantes
1441
+                        $boucles[$id]->primary = $show['key']['PRIMARY KEY'] ?? '';
1442
+                        $boucles[$id]->id_table = $x = preg_replace(',^spip_,', '', $show['id_table']);
1443
+                        $boucles[$id]->from[$x] = $nom_table = $show['table'];
1444
+                        $boucles[$id]->iterateur = 'SQL';
1445
+
1446
+                        if (empty($boucles[$id]->descr)) {
1447
+                            $boucles[$id]->descr = &$descr;
1448
+                        }
1449
+                        if (
1450
+                            (!$boucles[$id]->jointures)
1451
+                            and is_array($show['tables_jointures'])
1452
+                            and count($x = $show['tables_jointures'])
1453
+                        ) {
1454
+                            $boucles[$id]->jointures = $x;
1455
+                        }
1456
+                        if ($boucles[$id]->jointures_explicites) {
1457
+                            $jointures = preg_split('/\s+/', $boucles[$id]->jointures_explicites);
1458
+                            while ($j = array_pop($jointures)) {
1459
+                                array_unshift($boucles[$id]->jointures, $j);
1460
+                            }
1461
+                        }
1462
+                    } else {
1463
+                        // Pas une erreur si la table est optionnelle
1464
+                        if ($boucles[$id]->table_optionnelle) {
1465
+                            $boucles[$id]->type_requete = '';
1466
+                        } else {
1467
+                            $boucles[$id]->type_requete = false;
1468
+                            $boucle = $boucles[$id];
1469
+                            $x = (!$boucle->sql_serveur ? '' :
1470
+                                    ($boucle->sql_serveur . ':')) .
1471
+                                $type;
1472
+                            $msg = [
1473
+                                'zbug_table_inconnue',
1474
+                                ['table' => $x]
1475
+                            ];
1476
+                            erreur_squelette($msg, $boucle);
1477
+                        }
1478
+                    }
1479
+                }
1480
+            }
1481
+        }
1482
+    }
1483
+
1484
+    // Commencer par reperer les boucles appelees explicitement
1485
+    // car elles indexent les arguments de maniere derogatoire
1486
+    foreach ($boucles as $id => $boucle) {
1487
+        if ($boucle->type_requete == TYPE_RECURSIF and $boucle->param) {
1488
+            $boucles[$id]->descr = &$descr;
1489
+            $rec = &$boucles[$boucle->param[0]];
1490
+            if (!$rec) {
1491
+                $msg = [
1492
+                    'zbug_boucle_recursive_undef',
1493
+                    ['nom' => $boucle->param[0]]
1494
+                ];
1495
+                erreur_squelette($msg, $boucle);
1496
+                $boucles[$id]->type_requete = false;
1497
+            } else {
1498
+                $rec->externe = $id;
1499
+                $descr['id_mere'] = $id;
1500
+                $boucles[$id]->return =
1501
+                    calculer_liste(
1502
+                        [$rec],
1503
+                        $descr,
1504
+                        $boucles,
1505
+                        $boucle->param
1506
+                    );
1507
+            }
1508
+        }
1509
+    }
1510
+    foreach ($boucles as $id => $boucle) {
1511
+        $id = strval($id); // attention au type dans index_pile
1512
+        $type = $boucle->type_requete;
1513
+        if ($type and $type != TYPE_RECURSIF) {
1514
+            $res = '';
1515
+            if ($boucle->param) {
1516
+                // retourne un tableau en cas d'erreur
1517
+                $res = calculer_criteres($id, $boucles);
1518
+            }
1519
+            $descr['id_mere'] = $id;
1520
+            $boucles[$id]->return =
1521
+                calculer_liste(
1522
+                    $boucle->milieu,
1523
+                    $descr,
1524
+                    $boucles,
1525
+                    $id
1526
+                );
1527
+            // Si les criteres se sont mal compiles
1528
+            // ne pas tenter d'assembler le code final
1529
+            // (mais compiler le corps pour detection d'erreurs)
1530
+            if (is_array($res)) {
1531
+                $boucles[$id]->type_requete = false;
1532
+            }
1533
+        }
1534
+    }
1535
+
1536
+    // idem pour la racine
1537
+    $descr['id_mere'] = '';
1538
+    $corps = calculer_liste($squelette, $descr, $boucles);
1539
+
1540
+
1541
+    // Calcul du corps de toutes les fonctions PHP,
1542
+    // en particulier les requetes SQL et TOTAL_BOUCLE
1543
+    // de'terminables seulement maintenant
1544
+
1545
+    foreach ($boucles as $id => $boucle) {
1546
+        $boucle = $boucles[$id] = pipeline('pre_boucle', $boucle);
1547
+        if ($boucle->return === false) {
1548
+            $corps = false;
1549
+            continue;
1550
+        }
1551
+        // appeler la fonction de definition de la boucle
1552
+
1553
+        if ($req = $boucle->type_requete) {
1554
+            // boucle personnalisée ?
1555
+            $table = strtoupper($boucle->type_requete);
1556
+            $serveur = strtolower($boucle->sql_serveur);
1557
+            if (
1558
+                // fonction de boucle avec serveur & table
1559
+                (!$serveur or
1560
+                    ((!function_exists($f = 'boucle_' . $serveur . '_' . $table))
1561
+                        and (!function_exists($f = $f . '_dist'))
1562
+                    )
1563
+                )
1564
+                // fonction de boucle avec table
1565
+                and (!function_exists($f = 'boucle_' . $table))
1566
+                and (!function_exists($f = $f . '_dist'))
1567
+            ) {
1568
+                // fonction de boucle standard
1569
+                if (!function_exists($f = 'boucle_DEFAUT')) {
1570
+                    $f = 'boucle_DEFAUT_dist';
1571
+                }
1572
+            }
1573
+
1574
+            $req = "\n\n\tstatic \$command = array();\n\t" .
1575
+                "static \$connect;\n\t" .
1576
+                "\$command['connect'] = \$connect = " .
1577
+                _q($boucle->sql_serveur) .
1578
+                ';' .
1579
+                $f($id, $boucles);
1580
+        } else {
1581
+            $req = ("\n\treturn '';");
1582
+        }
1583
+
1584
+        $boucles[$id]->return =
1585
+            "\n\nfunction BOUCLE" . strtr($id, '-', '_') . $nom .
1586
+            '(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' .
1587
+            $req .
1588
+            "\n}\n";
1589
+    }
1590
+
1591
+    // Au final, si le corps ou un critere au moins s'est mal compile
1592
+    // retourner False, sinon inserer leur decompilation
1593
+    if (is_bool($corps)) {
1594
+        return false;
1595
+    }
1596
+
1597
+    $principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) {
1598 1598
 '
1599
-		// reporter de maniere securisee les doublons inclus
1600
-		. '
1599
+        // reporter de maniere securisee les doublons inclus
1600
+        . '
1601 1601
 	if (isset($Pile[0]["doublons"]) AND is_array($Pile[0]["doublons"]))
1602 1602
 		$doublons = nettoyer_env_doublons($Pile[0]["doublons"]);
1603 1603
 
1604 1604
 	$connect = ' .
1605
-		_q($connect) . ';
1605
+        _q($connect) . ';
1606 1606
 	$page = ' .
1607
-		// ATTENTION, le calcul de l'expression $corps affectera $Cache
1608
-		// c'est pourquoi on l'affecte a la variable auxiliaire $page.
1609
-		// avant de referencer $Cache
1610
-		$corps . ';
1607
+        // ATTENTION, le calcul de l'expression $corps affectera $Cache
1608
+        // c'est pourquoi on l'affecte a la variable auxiliaire $page.
1609
+        // avant de referencer $Cache
1610
+        $corps . ';
1611 1611
 
1612 1612
 	return analyse_resultat_skel(' . var_export($nom, true)
1613
-		. ', $Cache, $page, ' . var_export($sourcefile, true) . ');
1613
+        . ', $Cache, $page, ' . var_export($sourcefile, true) . ');
1614 1614
 }';
1615 1615
 
1616
-	$secondes = spip_timer('calcul_skel');
1617
-	spip_log("COMPIL ($secondes) [$sourcefile] $nom.php");
1618
-	// $connect n'est pas sûr : on nettoie
1619
-	$connect = preg_replace(',[^\w],', '', $connect);
1616
+    $secondes = spip_timer('calcul_skel');
1617
+    spip_log("COMPIL ($secondes) [$sourcefile] $nom.php");
1618
+    // $connect n'est pas sûr : on nettoie
1619
+    $connect = preg_replace(',[^\w],', '', $connect);
1620 1620
 
1621
-	// Assimiler la fct principale a une boucle anonyme, pour retourner un resultat simple
1622
-	$code = new Boucle();
1623
-	$code->descr = $descr;
1624
-	$code->return = '
1621
+    // Assimiler la fct principale a une boucle anonyme, pour retourner un resultat simple
1622
+    $code = new Boucle();
1623
+    $code->descr = $descr;
1624
+    $code->return = '
1625 1625
 //
1626 1626
 // Fonction principale du squelette ' .
1627
-		$sourcefile .
1628
-		($connect ? " pour $connect" : '') .
1629
-		(!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") .
1630
-		"\n//\n" .
1631
-		$principal;
1627
+        $sourcefile .
1628
+        ($connect ? " pour $connect" : '') .
1629
+        (!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") .
1630
+        "\n//\n" .
1631
+        $principal;
1632 1632
 
1633
-	$boucles[''] = $code;
1633
+    $boucles[''] = $code;
1634 1634
 
1635
-	return $boucles;
1635
+    return $boucles;
1636 1636
 }
1637 1637
 
1638 1638
 
@@ -1649,18 +1649,18 @@  discard block
 block discarded – undo
1649 1649
  *
1650 1650
  **/
1651 1651
 function requeteur_php_dist(&$boucles, &$boucle, &$id) {
1652
-	if (class_exists($boucle->type_requete)) {
1653
-		$g = charger_fonction('php', 'iterateur');
1654
-		$boucles[$id] = $g($boucle, $boucle->type_requete);
1655
-	} else {
1656
-		$x = $boucle->type_requete;
1657
-		$boucle->type_requete = false;
1658
-		$msg = [
1659
-			'zbug_iterateur_inconnu',
1660
-			['iterateur' => $x]
1661
-		];
1662
-		erreur_squelette($msg, $boucle);
1663
-	}
1652
+    if (class_exists($boucle->type_requete)) {
1653
+        $g = charger_fonction('php', 'iterateur');
1654
+        $boucles[$id] = $g($boucle, $boucle->type_requete);
1655
+    } else {
1656
+        $x = $boucle->type_requete;
1657
+        $boucle->type_requete = false;
1658
+        $msg = [
1659
+            'zbug_iterateur_inconnu',
1660
+            ['iterateur' => $x]
1661
+        ];
1662
+        erreur_squelette($msg, $boucle);
1663
+    }
1664 1664
 }
1665 1665
 
1666 1666
 
@@ -1678,22 +1678,22 @@  discard block
 block discarded – undo
1678 1678
  *
1679 1679
  **/
1680 1680
 function requeteur_data_dist(&$boucles, &$boucle, &$id) {
1681
-	include_spip('iterateur/data');
1682
-	if ($h = charger_fonction($boucle->type_requete . '_to_array', 'inc', true)) {
1683
-		$g = charger_fonction('data', 'iterateur');
1684
-		$boucles[$id] = $g($boucle);
1685
-		// from[0] stocke le type de data (rss, yql, ...)
1686
-		$boucles[$id]->from[] = $boucle->type_requete;
1687
-	} else {
1688
-		$x = $boucle->type_requete;
1689
-		$boucle->type_requete = false;
1690
-		$msg = [
1691
-			'zbug_requeteur_inconnu',
1692
-			[
1693
-				'requeteur' => 'data',
1694
-				'type' => $x
1695
-			]
1696
-		];
1697
-		erreur_squelette($msg, $boucle);
1698
-	}
1681
+    include_spip('iterateur/data');
1682
+    if ($h = charger_fonction($boucle->type_requete . '_to_array', 'inc', true)) {
1683
+        $g = charger_fonction('data', 'iterateur');
1684
+        $boucles[$id] = $g($boucle);
1685
+        // from[0] stocke le type de data (rss, yql, ...)
1686
+        $boucles[$id]->from[] = $boucle->type_requete;
1687
+    } else {
1688
+        $x = $boucle->type_requete;
1689
+        $boucle->type_requete = false;
1690
+        $msg = [
1691
+            'zbug_requeteur_inconnu',
1692
+            [
1693
+                'requeteur' => 'data',
1694
+                'type' => $x
1695
+            ]
1696
+        ];
1697
+        erreur_squelette($msg, $boucle);
1698
+    }
1699 1699
 }
Please login to merge, or discard this patch.
Spacing   +108 added lines, -117 removed lines patch added patch discarded remove patch
@@ -120,7 +120,7 @@  discard block
 block discarded – undo
120 120
 						: calculer_liste($val, $p->descr, $boucles, $id_boucle);
121 121
 					if ($var !== 1) {
122 122
 						$val = ($echap ? "\'$var\' => ' . argumenter_squelette(" : "'$var' => ")
123
-							. $val . ($echap ? ") . '" : ' ');
123
+							. $val.($echap ? ") . '" : ' ');
124 124
 					} else {
125 125
 						$val = $echap ? "'.$val.'" : $val;
126 126
 					}
@@ -141,7 +141,7 @@  discard block
 block discarded – undo
141 141
 	if (!$lang) {
142 142
 		$lang = '$GLOBALS["spip_lang"]';
143 143
 	}
144
-	$l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ") . $lang . ($echap ? ") . '" : ' ');
144
+	$l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ").$lang.($echap ? ") . '" : ' ');
145 145
 
146 146
 	return $l;
147 147
 }
@@ -171,7 +171,7 @@  discard block
 block discarded – undo
171 171
 	$_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true);
172 172
 	if (is_string($p->texte)) {
173 173
 		$fichier = $p->texte;
174
-		$code = '"' . str_replace('"', '\"', $fichier) . '"';
174
+		$code = '"'.str_replace('"', '\"', $fichier).'"';
175 175
 	} else {
176 176
 		$code = calculer_liste($p->texte, $p->descr, $boucles, $id_boucle);
177 177
 		if ($code and preg_match("/^'([^']*)'/s", $code, $r)) {
@@ -220,7 +220,7 @@  discard block
 block discarded – undo
220 220
 		return false;
221 221
 	} // j'aurais voulu toucher le fond ...
222 222
 
223
-	$contexte = 'array(' . $_contexte . ')';
223
+	$contexte = 'array('.$_contexte.')';
224 224
 
225 225
 	if ($env) {
226 226
 		$contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)";
@@ -235,16 +235,16 @@  discard block
 block discarded – undo
235 235
 			$_options[] = $ajax;
236 236
 		}
237 237
 		$code = " ' . argumenter_squelette($code) . '";
238
-		$code = 'echo ' . sprintf(
238
+		$code = 'echo '.sprintf(
239 239
 			CODE_RECUPERER_FOND,
240 240
 			$code,
241 241
 			$contexte,
242 242
 			implode(',', $_options),
243 243
 			"_request(\\'connect\\') ?? \\'\\'"
244
-		) . ';';
244
+		).';';
245 245
 	}
246 246
 
247
-	return "\n'<'.'" . '?php ' . $code . "\n?'." . "'>'";
247
+	return "\n'<'.'".'?php '.$code."\n?'."."'>'";
248 248
 }
249 249
 
250 250
 
@@ -324,7 +324,7 @@  discard block
 block discarded – undo
324 324
 					$id = $id_table;
325 325
 					$statut = preg_replace(',\W,', '', $s['champ']); // securite
326 326
 				}
327
-				$mstatut = $id . '.' . $statut;
327
+				$mstatut = $id.'.'.$statut;
328 328
 
329 329
 				$arg_ignore_previsu = ($ignore_previsu ? ',true' : '');
330 330
 				include_spip('public/quete');
@@ -332,11 +332,11 @@  discard block
 block discarded – undo
332 332
 					isset($s['post_date']) and $s['post_date']
333 333
 					and $GLOBALS['meta']['post_dates'] == 'non'
334 334
 				) {
335
-					$date = $id . '.' . preg_replace(',\W,', '', $s['post_date']); // securite
335
+					$date = $id.'.'.preg_replace(',\W,', '', $s['post_date']); // securite
336 336
 					array_unshift(
337 337
 						$boucle->where,
338 338
 						$echapper ?
339
-							"\nquete_condition_postdates('$date'," . _q($boucle->sql_serveur) . "$arg_ignore_previsu)"
339
+							"\nquete_condition_postdates('$date',"._q($boucle->sql_serveur)."$arg_ignore_previsu)"
340 340
 							:
341 341
 							quete_condition_postdates($date, $boucle->sql_serveur, $ignore_previsu)
342 342
 					);
@@ -345,9 +345,9 @@  discard block
 block discarded – undo
345 345
 					$boucle->where,
346 346
 					$echapper ?
347 347
 						"\nquete_condition_statut('$mstatut',"
348
-						. _q($s['previsu']) . ','
349
-						. _q($s['publie']) . ','
350
-						. _q($boucle->sql_serveur) . "$arg_ignore_previsu)"
348
+						. _q($s['previsu']).','
349
+						. _q($s['publie']).','
350
+						. _q($boucle->sql_serveur)."$arg_ignore_previsu)"
351 351
 						:
352 352
 						quete_condition_statut($mstatut, $s['previsu'], $s['publie'], $boucle->sql_serveur, $ignore_previsu)
353 353
 				);
@@ -381,14 +381,14 @@  discard block
 block discarded – undo
381 381
 	if (_request('var_mode_affiche') != 'resultat') {
382 382
 		$trace = '';
383 383
 	} else {
384
-		$_trace = $boucles[$id_boucle]->descr['nom'] . $id_boucle;
384
+		$_trace = $boucles[$id_boucle]->descr['nom'].$id_boucle;
385 385
 		$_trace = "\$GLOBALS['debug_objets']['resultat']['$_trace']";
386 386
 		$trace = "
387 387
 		if (empty($_trace)) { 
388 388
 			$_trace = []; 
389 389
 		}
390 390
 		if (count($_trace) < 3) { 
391
-			$_trace" . '[] = $t0; 
391
+			$_trace".'[] = $t0; 
392 392
 		}';
393 393
 	}
394 394
 
@@ -422,7 +422,7 @@  discard block
 block discarded – undo
422 422
 	return
423 423
 		// Numrows[$nom] peut ne pas être encore defini
424 424
 		"\n\t\$save_numrows = (isset(\$Numrows['$nom']) ? \$Numrows['$nom'] : array());"
425
-		. "\n\t\$t0 = " . $boucles[$id_boucle]->return . ';'
425
+		. "\n\t\$t0 = ".$boucles[$id_boucle]->return.';'
426 426
 		. "\n\t\$Numrows['$nom'] = (\$save_numrows);"
427 427
 		. $trace
428 428
 		. "\n\treturn \$t0;";
@@ -490,7 +490,7 @@  discard block
 block discarded – undo
490 490
 	// faudrait expanser le foreach a la compil, car y en a souvent qu'un
491 491
 	// et puis faire un [] plutot qu'un "','."
492 492
 	if ($boucle->doublons) {
493
-		$corps .= "\n\t\t\tforeach(" . $boucle->doublons . ' as $k) $doublons[$k] .= "," . ' .
493
+		$corps .= "\n\t\t\tforeach(".$boucle->doublons.' as $k) $doublons[$k] .= "," . '.
494 494
 			index_pile($id_boucle, $primary, $boucles)
495 495
 			. "; // doublons\n";
496 496
 	}
@@ -518,13 +518,13 @@  discard block
 block discarded – undo
518 518
 		$corps .=
519 519
 			"\n\t\tlang_select_public("
520 520
 			. index_pile($id_boucle, 'lang', $boucles)
521
-			. ", '" . $boucle->lang_select . "'"
521
+			. ", '".$boucle->lang_select."'"
522 522
 			. (in_array($type_boucle, [
523 523
 				'articles',
524 524
 				'rubriques',
525 525
 				'hierarchie',
526 526
 				'breves'
527
-			]) ? ', ' . index_pile($id_boucle, 'titre', $boucles) : '')
527
+			]) ? ', '.index_pile($id_boucle, 'titre', $boucles) : '')
528 528
 			. ');';
529 529
 	} else {
530 530
 		$init_lang = '';
@@ -546,20 +546,16 @@  discard block
 block discarded – undo
546 546
 
547 547
 	// gestion optimale des separateurs et des boucles constantes
548 548
 	if (is_countable($boucle->separateur) ? count($boucle->separateur) : 0) {
549
-		$code_sep = ("'" . str_replace("'", "\'", join('', $boucle->separateur)) . "'");
549
+		$code_sep = ("'".str_replace("'", "\'", join('', $boucle->separateur))."'");
550 550
 	}
551 551
 
552 552
 	$corps .=
553 553
 		((!$boucle->separateur) ?
554
-			(($constant && !$corps && !$flag_cpt) ? $return :
555
-				(($return === "''") ? '' :
556
-					("\n\t\t" . '$t0 .= ' . $return . ';'))) :
557
-			("\n\t\t\$t1 " .
554
+			(($constant && !$corps && !$flag_cpt) ? $return : (($return === "''") ? '' : ("\n\t\t".'$t0 .= '.$return.';'))) : ("\n\t\t\$t1 ".
558 555
 				((strpos($return, '$t1.') === 0) ?
559
-					('.=' . substr($return, 4)) :
560
-					('= ' . $return)) .
561
-				";\n\t\t" .
562
-				'$t0 .= ((strlen($t1) && strlen($t0)) ? ' . $code_sep . " : '') . \$t1;"));
556
+					('.='.substr($return, 4)) : ('= '.$return)).
557
+				";\n\t\t".
558
+				'$t0 .= ((strlen($t1) && strlen($t0)) ? '.$code_sep." : '') . \$t1;"));
563 559
 
564 560
 	// Calculer les invalideurs si c'est une boucle non constante et si on
565 561
 	// souhaite invalider ces elements
@@ -641,7 +637,7 @@  discard block
 block discarded – undo
641 637
 		$corps,
642 638
 		$fin_lang,
643 639
 		$trace,
644
-		'BOUCLE' . $id_boucle . ' @ ' . ($boucle->descr['sourcefile'])
640
+		'BOUCLE'.$id_boucle.' @ '.($boucle->descr['sourcefile'])
645 641
 	);
646 642
 
647 643
 #	var_dump($a);exit;
@@ -662,25 +658,24 @@  discard block
 block discarded – undo
662 658
  **/
663 659
 function calculer_requete_sql($boucle) {
664 660
 	$init = [];
665
-	$init[] = calculer_dec('table', "'" . $boucle->id_table . "'");
666
-	$init[] = calculer_dec('id', "'" . $boucle->id_boucle . "'");
661
+	$init[] = calculer_dec('table', "'".$boucle->id_table."'");
662
+	$init[] = calculer_dec('id', "'".$boucle->id_boucle."'");
667 663
 	# En absence de champ c'est un decompte :
668 664
 	$init[] = calculer_dec('from', calculer_from($boucle));
669 665
 	$init[] = calculer_dec('type', calculer_from_type($boucle));
670 666
 	$init[] = calculer_dec(
671 667
 		'groupby',
672
-		'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ')'
668
+		'array('.(($g = join("\",\n\t\t\"", $boucle->group)) ? '"'.$g.'"' : '').')'
673 669
 	);
674
-	$init[] = calculer_dec('select', 'array("' . join("\",\n\t\t\"", $boucle->select) . '")');
675
-	$init[] = calculer_dec('orderby', 'array(' . calculer_order($boucle) . ')');
670
+	$init[] = calculer_dec('select', 'array("'.join("\",\n\t\t\"", $boucle->select).'")');
671
+	$init[] = calculer_dec('orderby', 'array('.calculer_order($boucle).')');
676 672
 	$init[] = calculer_dec('where', calculer_dump_array($boucle->where));
677 673
 	$init[] = calculer_dec('join', calculer_dump_join($boucle->join));
678 674
 	$init[] = calculer_dec(
679 675
 		'limit',
680 676
 		(
681 677
 			strpos($boucle->limit, 'intval') === false ?
682
-			"'" . ($boucle->limit) . "'" :
683
-			$boucle->limit
678
+			"'".($boucle->limit)."'" : $boucle->limit
684 679
 		)
685 680
 	);
686 681
 	$init[] = calculer_dec('having', calculer_dump_array($boucle->having));
@@ -689,17 +684,17 @@  discard block
 block discarded – undo
689 684
 	// ou recalculée à chaque passage (vide)
690 685
 	foreach ($init as $i) {
691 686
 		if (reset($i)) {
692
-			$s .= "\n\t\t" . end($i);
687
+			$s .= "\n\t\t".end($i);
693 688
 		} # statique
694 689
 		else {
695
-			$d .= "\n\t" . end($i);
690
+			$d .= "\n\t".end($i);
696 691
 		} # dynamique
697 692
 	}
698 693
 
699 694
 	return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '')
700 695
 	. $boucle->in
701 696
 	. $boucle->hash
702
-	. "\n\t" . 'if (!isset($command[\'table\'])) {'
697
+	. "\n\t".'if (!isset($command[\'table\'])) {'
703 698
 	. $s
704 699
 	. "\n\t}"
705 700
 	. $d;
@@ -782,7 +777,7 @@  discard block
 block discarded – undo
782 777
  *    - index 1 : Code de l'affectation
783 778
  **/
784 779
 function calculer_dec($nom, $val) {
785
-	$static = 'if (!isset($command[\'' . $nom . '\'])) ';
780
+	$static = 'if (!isset($command[\''.$nom.'\'])) ';
786 781
 	// si une variable apparait dans le calcul de la clause
787 782
 	// il faut la re-evaluer a chaque passage
788 783
 	if (
@@ -799,7 +794,7 @@  discard block
 block discarded – undo
799 794
 		$static = '';
800 795
 	}
801 796
 
802
-	return [$static, '$command[\'' . $nom . '\'] = ' . $val . ';'];
797
+	return [$static, '$command[\''.$nom.'\'] = '.$val.';'];
803 798
 }
804 799
 
805 800
 /**
@@ -824,27 +819,27 @@  discard block
 block discarded – undo
824 819
 	}
825 820
 	$res = '';
826 821
 	if ($a and $a[0] == "'?'") {
827
-		return ('(' . calculer_dump_array($a[1]) .
828
-			' ? ' . calculer_dump_array($a[2]) .
829
-			' : ' . calculer_dump_array($a[3]) .
822
+		return ('('.calculer_dump_array($a[1]).
823
+			' ? '.calculer_dump_array($a[2]).
824
+			' : '.calculer_dump_array($a[3]).
830 825
 			')');
831 826
 	} else {
832 827
 		foreach ($a as $k => $v) {
833
-			$showk = (is_numeric($k) ? '' : sql_quote($k) . ' => ');
834
-			$res .= ', ' . $showk . calculer_dump_array($v);
828
+			$showk = (is_numeric($k) ? '' : sql_quote($k).' => ');
829
+			$res .= ', '.$showk.calculer_dump_array($v);
835 830
 		}
836 831
 
837
-		return "\n\t\t\tarray(" . substr($res, 2) . ')';
832
+		return "\n\t\t\tarray(".substr($res, 2).')';
838 833
 	}
839 834
 }
840 835
 
841 836
 function calculer_dump_join($a) {
842 837
 	$res = '';
843 838
 	foreach ($a as $k => $v) {
844
-		$res .= ", '$k' => array(" . implode(',', $v) . ')';
839
+		$res .= ", '$k' => array(".implode(',', $v).')';
845 840
 	}
846 841
 
847
-	return 'array(' . substr($res, 2) . ')';
842
+	return 'array('.substr($res, 2).')';
848 843
 }
849 844
 
850 845
 /**
@@ -861,7 +856,7 @@  discard block
 block discarded – undo
861 856
 		$res .= ",'$k' => '$v'";
862 857
 	}
863 858
 
864
-	return 'array(' . substr($res, 1) . ')';
859
+	return 'array('.substr($res, 1).')';
865 860
 }
866 861
 
867 862
 /**
@@ -879,7 +874,7 @@  discard block
 block discarded – undo
879 874
 		$res .= ",'$k' => '$v'";
880 875
 	}
881 876
 
882
-	return 'array(' . substr($res, 1) . ')';
877
+	return 'array('.substr($res, 1).')';
883 878
 }
884 879
 
885 880
 function calculer_order(&$boucle) {
@@ -948,19 +943,19 @@  discard block
 block discarded – undo
948 943
 				) {
949 944
 					$res .= " .\n$tab$code";
950 945
 				} else {
951
-					$res = substr($res, 0, -1) . substr($code, 1);
946
+					$res = substr($res, 0, -1).substr($code, 1);
952 947
 				}
953 948
 			}
954 949
 
955
-			return '(' . substr($res, 2 + $descr['niv']) . ')';
950
+			return '('.substr($res, 2 + $descr['niv']).')';
956 951
 		}
957 952
 	} else {
958
-		$nom = $descr['nom'] . $id_boucle . ($descr['niv'] ?: '');
953
+		$nom = $descr['nom'].$id_boucle.($descr['niv'] ?: '');
959 954
 
960
-		return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(
955
+		return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(".join(
961 956
 			" ,\n$tab",
962 957
 			$codes
963
-		) . ')))';
958
+		).')))';
964 959
 	}
965 960
 }
966 961
 
@@ -987,7 +982,7 @@  discard block
 block discarded – undo
987 982
 			// texte seul
988 983
 			case 'texte':
989 984
 				$code = sandbox_composer_texte($p->texte, $p);
990
-				$commentaire = strlen($p->texte) . ' signes';
985
+				$commentaire = strlen($p->texte).' signes';
991 986
 				$avant = '';
992 987
 				$apres = '';
993 988
 				$altern = "''";
@@ -996,14 +991,14 @@  discard block
 block discarded – undo
996 991
 			case 'polyglotte':
997 992
 				$code = '';
998 993
 				foreach ($p->traductions as $k => $v) {
999
-					$code .= ",'" .
1000
-						str_replace(['\\', "'"], ['\\\\', "\\'"], $k) .
1001
-						"' => '" .
1002
-						str_replace(['\\', "'"], ['\\\\', "\\'"], $v) .
994
+					$code .= ",'".
995
+						str_replace(['\\', "'"], ['\\\\', "\\'"], $k).
996
+						"' => '".
997
+						str_replace(['\\', "'"], ['\\\\', "\\'"], $v).
1003 998
 						"'";
1004 999
 				}
1005
-				$code = 'choisir_traduction(array(' .
1006
-					substr($code, 1) .
1000
+				$code = 'choisir_traduction(array('.
1001
+					substr($code, 1).
1007 1002
 					'))';
1008 1003
 				$commentaire = '&';
1009 1004
 				$avant = '';
@@ -1019,7 +1014,7 @@  discard block
 block discarded – undo
1019 1014
 					$err_e_c = true;
1020 1015
 					$code = "''";
1021 1016
 				} else {
1022
-					$commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>';
1017
+					$commentaire = '<INCLURE '.addslashes(str_replace("\n", ' ', $code)).'>';
1023 1018
 					$avant = '';
1024 1019
 					$apres = '';
1025 1020
 					$altern = "''";
@@ -1048,8 +1043,8 @@  discard block
 block discarded – undo
1048 1043
 					$err_e_c = true;
1049 1044
 					$code = "''";
1050 1045
 				} else {
1051
-					$code = 'BOUCLE' .
1052
-						str_replace('-', '_', $nom) . $descr['nom'] .
1046
+					$code = 'BOUCLE'.
1047
+						str_replace('-', '_', $nom).$descr['nom'].
1053 1048
 						'($Cache, $Pile, $doublons, $Numrows, $SP)';
1054 1049
 					$commentaire = "?$nom";
1055 1050
 					if (
@@ -1091,24 +1086,22 @@  discard block
 block discarded – undo
1091 1086
 				foreach ($p->arg as $k => $v) {
1092 1087
 					$_v = calculer_liste($v, $descr, $boucles, $id_boucle);
1093 1088
 					if ($k) {
1094
-						$l[] = _q($k) . ' => ' . $_v;
1089
+						$l[] = _q($k).' => '.$_v;
1095 1090
 					} else {
1096 1091
 						$code = $_v;
1097 1092
 					}
1098 1093
 				}
1099 1094
 				// Si le module n'est pas fourni, l'expliciter sauf si calculé
1100 1095
 				if ($p->module) {
1101
-					$m = $p->module . ':' . $p->nom_champ;
1096
+					$m = $p->module.':'.$p->nom_champ;
1102 1097
 				} elseif ($p->nom_champ) {
1103
-					$m = MODULES_IDIOMES . ':' . $p->nom_champ;
1098
+					$m = MODULES_IDIOMES.':'.$p->nom_champ;
1104 1099
 				} else {
1105 1100
 					$m = '';
1106 1101
 				}
1107 1102
 
1108
-				$code = (!$code ? "'$m'" :
1109
-						($m ? "'$m' . $code" :
1110
-							("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))")))
1111
-					. (!$l ? '' : (', array(' . implode(",\n", $l) . ')'));
1103
+				$code = (!$code ? "'$m'" : ($m ? "'$m' . $code" : ("(strpos(\$x=$code, ':') ? \$x : ('".MODULES_IDIOMES.":' . \$x))")))
1104
+					. (!$l ? '' : (', array('.implode(",\n", $l).')'));
1112 1105
 				$code = "_T($code)";
1113 1106
 				if ($p->param) {
1114 1107
 					$p->id_boucle = $id_boucle;
@@ -1130,7 +1123,7 @@  discard block
 block discarded – undo
1130 1123
 				$p->type_requete = $type;
1131 1124
 
1132 1125
 				$code = calculer_champ($p);
1133
-				$commentaire = '#' . $p->nom_champ . $p->etoile;
1126
+				$commentaire = '#'.$p->nom_champ.$p->etoile;
1134 1127
 				$avant = calculer_liste(
1135 1128
 					$p->avant,
1136 1129
 					$descr,
@@ -1170,10 +1163,9 @@  discard block
 block discarded – undo
1170 1163
 		if ($code != "''") {
1171 1164
 			$code = compile_retour($code, $avant, $apres, $altern, $tab, $descr['niv']);
1172 1165
 			$codes[] = (($mode == 'validation') ?
1173
-				"array($code, '$commentaire', " . $p->ligne . ')'
1166
+				"array($code, '$commentaire', ".$p->ligne.')'
1174 1167
 				: (($mode == 'code') ?
1175
-					"\n// $commentaire\n$code" :
1176
-					$code));
1168
+					"\n// $commentaire\n$code" : $code));
1177 1169
 		}
1178 1170
 	} // foreach
1179 1171
 
@@ -1229,19 +1221,19 @@  discard block
 block discarded – undo
1229 1221
 			$cond = '';
1230 1222
 		} elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE, $code, $r)) {
1231 1223
 			$t = $r[2];
1232
-			$cond = '!' . $r[1];
1224
+			$cond = '!'.$r[1];
1233 1225
 		} else {
1234 1226
 			if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)) {
1235 1227
 				$t = $r[2];
1236 1228
 				$cond = $r[1];
1237 1229
 			} else {
1238
-				$t = '$t' . $n;
1230
+				$t = '$t'.$n;
1239 1231
 				$cond = "($t = $code)!==''";
1240 1232
 			}
1241 1233
 		}
1242 1234
 
1243
-		$res = (!$avant ? '' : "$avant . ") .
1244
-			$t .
1235
+		$res = (!$avant ? '' : "$avant . ").
1236
+			$t.
1245 1237
 			(!$apres ? '' : " . $apres");
1246 1238
 
1247 1239
 		if ($res !== $t) {
@@ -1292,12 +1284,12 @@  discard block
 block discarded – undo
1292 1284
 
1293 1285
 	// rendre inertes les echappements de #[](){}<>
1294 1286
 	$i = 0;
1295
-	while (false !== strpos($squelette, $inerte = '-INERTE' . $i)) {
1287
+	while (false !== strpos($squelette, $inerte = '-INERTE'.$i)) {
1296 1288
 		$i++;
1297 1289
 	}
1298 1290
 	$squelette = preg_replace_callback(
1299 1291
 		',\\\\([#[()\]{}<>]),',
1300
-		fn($a) => "$inerte-" . ord($a[1]) . '-',
1292
+		fn($a) => "$inerte-".ord($a[1]).'-',
1301 1293
 		$squelette,
1302 1294
 		-1,
1303 1295
 		$esc
@@ -1313,7 +1305,7 @@  discard block
 block discarded – undo
1313 1305
 	// Phraser le squelette, selon sa grammaire
1314 1306
 
1315 1307
 	$boucles = [];
1316
-	$f = charger_fonction('phraser_' . $gram, 'public');
1308
+	$f = charger_fonction('phraser_'.$gram, 'public');
1317 1309
 
1318 1310
 	$squelette = $f($squelette, '', $boucles, $descr);
1319 1311
 
@@ -1329,7 +1321,7 @@  discard block
 block discarded – undo
1329 1321
 			);
1330 1322
 			$boucles[$i]->descr['squelette'] = preg_replace_callback(
1331 1323
 				",$inerte-(\d+)-,",
1332
-				fn($a) => '\\\\' . chr($a[1]),
1324
+				fn($a) => '\\\\'.chr($a[1]),
1333 1325
 				$boucle->descr['squelette']
1334 1326
 			);
1335 1327
 		}
@@ -1340,19 +1332,19 @@  discard block
 block discarded – undo
1340 1332
 		include_spip('public/decompiler');
1341 1333
 		foreach ($boucles as $id => $boucle) {
1342 1334
 			if ($id) {
1343
-				$decomp = "\n/* BOUCLE " .
1344
-					$boucle->type_requete .
1345
-					' ' .
1346
-					str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) .
1347
-					($boucle->debug ? "\n *\n * " . implode("\n * ", $boucle->debug) . "\n" : '') .
1335
+				$decomp = "\n/* BOUCLE ".
1336
+					$boucle->type_requete.
1337
+					' '.
1338
+					str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')).
1339
+					($boucle->debug ? "\n *\n * ".implode("\n * ", $boucle->debug)."\n" : '').
1348 1340
 					" */\n";
1349 1341
 			} else {
1350
-				$decomp = ("\n/*\n" .
1342
+				$decomp = ("\n/*\n".
1351 1343
 					str_replace('*/', '* /', public_decompiler($squelette, $gram))
1352 1344
 					. "\n*/");
1353 1345
 			}
1354
-			$boucles[$id]->return = $decomp . $boucle->return;
1355
-			$GLOBALS['debug_objets']['code'][$nom . $id] = $boucle->return;
1346
+			$boucles[$id]->return = $decomp.$boucle->return;
1347
+			$GLOBALS['debug_objets']['code'][$nom.$id] = $boucle->return;
1356 1348
 		}
1357 1349
 	}
1358 1350
 
@@ -1375,7 +1367,7 @@  discard block
 block discarded – undo
1375 1367
 		}
1376 1368
 	}
1377 1369
 	foreach ($boucles as $id => $boucle) {
1378
-		$GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle;
1370
+		$GLOBALS['debug_objets']['boucle'][$nom.$id] = $boucle;
1379 1371
 	}
1380 1372
 	$descr['documents'] = compile_inclure_doublons($squelette);
1381 1373
 
@@ -1466,8 +1458,7 @@  discard block
 block discarded – undo
1466 1458
 						} else {
1467 1459
 							$boucles[$id]->type_requete = false;
1468 1460
 							$boucle = $boucles[$id];
1469
-							$x = (!$boucle->sql_serveur ? '' :
1470
-									($boucle->sql_serveur . ':')) .
1461
+							$x = (!$boucle->sql_serveur ? '' : ($boucle->sql_serveur.':')).
1471 1462
 								$type;
1472 1463
 							$msg = [
1473 1464
 								'zbug_table_inconnue',
@@ -1557,13 +1548,13 @@  discard block
 block discarded – undo
1557 1548
 			if (
1558 1549
 				// fonction de boucle avec serveur & table
1559 1550
 				(!$serveur or
1560
-					((!function_exists($f = 'boucle_' . $serveur . '_' . $table))
1561
-						and (!function_exists($f = $f . '_dist'))
1551
+					((!function_exists($f = 'boucle_'.$serveur.'_'.$table))
1552
+						and (!function_exists($f = $f.'_dist'))
1562 1553
 					)
1563 1554
 				)
1564 1555
 				// fonction de boucle avec table
1565
-				and (!function_exists($f = 'boucle_' . $table))
1566
-				and (!function_exists($f = $f . '_dist'))
1556
+				and (!function_exists($f = 'boucle_'.$table))
1557
+				and (!function_exists($f = $f.'_dist'))
1567 1558
 			) {
1568 1559
 				// fonction de boucle standard
1569 1560
 				if (!function_exists($f = 'boucle_DEFAUT')) {
@@ -1571,20 +1562,20 @@  discard block
 block discarded – undo
1571 1562
 				}
1572 1563
 			}
1573 1564
 
1574
-			$req = "\n\n\tstatic \$command = array();\n\t" .
1575
-				"static \$connect;\n\t" .
1576
-				"\$command['connect'] = \$connect = " .
1577
-				_q($boucle->sql_serveur) .
1578
-				';' .
1565
+			$req = "\n\n\tstatic \$command = array();\n\t".
1566
+				"static \$connect;\n\t".
1567
+				"\$command['connect'] = \$connect = ".
1568
+				_q($boucle->sql_serveur).
1569
+				';'.
1579 1570
 				$f($id, $boucles);
1580 1571
 		} else {
1581 1572
 			$req = ("\n\treturn '';");
1582 1573
 		}
1583 1574
 
1584 1575
 		$boucles[$id]->return =
1585
-			"\n\nfunction BOUCLE" . strtr($id, '-', '_') . $nom .
1586
-			'(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' .
1587
-			$req .
1576
+			"\n\nfunction BOUCLE".strtr($id, '-', '_').$nom.
1577
+			'(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {'.
1578
+			$req.
1588 1579
 			"\n}\n";
1589 1580
 	}
1590 1581
 
@@ -1594,7 +1585,7 @@  discard block
 block discarded – undo
1594 1585
 		return false;
1595 1586
 	}
1596 1587
 
1597
-	$principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) {
1588
+	$principal = "\nfunction ".$nom.'($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) {
1598 1589
 '
1599 1590
 		// reporter de maniere securisee les doublons inclus
1600 1591
 		. '
@@ -1602,15 +1593,15 @@  discard block
 block discarded – undo
1602 1593
 		$doublons = nettoyer_env_doublons($Pile[0]["doublons"]);
1603 1594
 
1604 1595
 	$connect = ' .
1605
-		_q($connect) . ';
1596
+		_q($connect).';
1606 1597
 	$page = ' .
1607 1598
 		// ATTENTION, le calcul de l'expression $corps affectera $Cache
1608 1599
 		// c'est pourquoi on l'affecte a la variable auxiliaire $page.
1609 1600
 		// avant de referencer $Cache
1610
-		$corps . ';
1601
+		$corps.';
1611 1602
 
1612 1603
 	return analyse_resultat_skel(' . var_export($nom, true)
1613
-		. ', $Cache, $page, ' . var_export($sourcefile, true) . ');
1604
+		. ', $Cache, $page, '.var_export($sourcefile, true).');
1614 1605
 }';
1615 1606
 
1616 1607
 	$secondes = spip_timer('calcul_skel');
@@ -1624,10 +1615,10 @@  discard block
 block discarded – undo
1624 1615
 	$code->return = '
1625 1616
 //
1626 1617
 // Fonction principale du squelette ' .
1627
-		$sourcefile .
1628
-		($connect ? " pour $connect" : '') .
1629
-		(!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") .
1630
-		"\n//\n" .
1618
+		$sourcefile.
1619
+		($connect ? " pour $connect" : '').
1620
+		(!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes").
1621
+		"\n//\n".
1631 1622
 		$principal;
1632 1623
 
1633 1624
 	$boucles[''] = $code;
@@ -1679,7 +1670,7 @@  discard block
 block discarded – undo
1679 1670
  **/
1680 1671
 function requeteur_data_dist(&$boucles, &$boucle, &$id) {
1681 1672
 	include_spip('iterateur/data');
1682
-	if ($h = charger_fonction($boucle->type_requete . '_to_array', 'inc', true)) {
1673
+	if ($h = charger_fonction($boucle->type_requete.'_to_array', 'inc', true)) {
1683 1674
 		$g = charger_fonction('data', 'iterateur');
1684 1675
 		$boucles[$id] = $g($boucle);
1685 1676
 		// from[0] stocke le type de data (rss, yql, ...)
Please login to merge, or discard this patch.
ecrire/public/phraser_html.php 3 patches
Braces   +4 added lines, -8 removed lines patch added patch discarded remove patch
@@ -802,8 +802,7 @@  discard block
 block discarded – undo
802 802
 function public_compte_ligne($texte, $debut = 0, $fin = null) {
803 803
 	if (is_null($fin)) {
804 804
 		return substr_count($texte, "\n", $debut);
805
-	}
806
-	else {
805
+	} else {
807 806
 		return substr_count($texte, "\n", $debut, $fin - $debut);
808 807
 	}
809 808
 }
@@ -850,8 +849,7 @@  discard block
 block discarded – undo
850 849
 			erreur_squelette($err_b, $result);
851 850
 
852 851
 			continue;
853
-		}
854
-		else {
852
+		} else {
855 853
 			$boucle = [
856 854
 				'id_boucle' => $id_boucle,
857 855
 				'id_boucle_err' => $id_boucle,
@@ -991,8 +989,7 @@  discard block
 block discarded – undo
991 989
 	// si c'est un appel pour memoriser une boucle, memorisons la
992 990
 	if (is_string($champ) and !empty($boucle_placeholder) and !empty($boucle)) {
993 991
 		$boucles_connues[$boucle_placeholder][$champ] = &$boucle;
994
-	}
995
-	else {
992
+	} else {
996 993
 		if (!empty($champ->nom_champ) and !empty($boucles_connues[$champ->nom_champ])) {
997 994
 			$placeholder = $champ->nom_champ;
998 995
 			$id = reset($champ->param[0][1]);
@@ -1135,8 +1132,7 @@  discard block
 block discarded – undo
1135 1132
 				];
1136 1133
 				erreur_squelette($err_b, $result);
1137 1134
 				$pos_courante += strlen($fin_boucle);
1138
-			}
1139
-			else {
1135
+			} else {
1140 1136
 				// verifier une eventuelle imbrication d'une boucle homonyme
1141 1137
 				// (interdite, generera une erreur plus loin, mais permet de signaler la bonne erreur)
1142 1138
 				$search_debut_boucle = BALISE_BOUCLE . $id_boucle_search . '(';
Please login to merge, or discard this patch.
Indentation   +1032 added lines, -1032 removed lines patch added patch discarded remove patch
@@ -20,7 +20,7 @@  discard block
 block discarded – undo
20 20
  **/
21 21
 
22 22
 if (!defined('_ECRIRE_INC_VERSION')) {
23
-	return;
23
+    return;
24 24
 }
25 25
 
26 26
 /** Début de la partie principale d'une boucle */
@@ -64,82 +64,82 @@  discard block
 block discarded – undo
64 64
 
65 65
 function phraser_inclure($texte, $ligne, $result) {
66 66
 
67
-	while (preg_match(BALISE_INCLURE, $texte, $match)) {
68
-		$match = array_pad($match, 3, null);
69
-		$p = strpos($texte, (string) $match[0]);
70
-		$debut = substr($texte, 0, $p);
71
-		if ($p) {
72
-			$result = phraser_idiomes($debut, $ligne, $result);
73
-		}
74
-		$ligne += substr_count($debut, "\n");
75
-		$champ = new Inclure();
76
-		$champ->ligne = $ligne;
77
-		$ligne += substr_count($match[0], "\n");
78
-		$fichier = $match[2];
79
-		# assurer ici la migration .php3 => .php
80
-		# et de l'ancienne syntaxe INCLURE(page.php3) devenue surperflue
81
-		if ($fichier and preg_match(',^(.*[.]php)3$,', $fichier, $r)) {
82
-			$fichier = $r[1];
83
-		}
84
-		$champ->texte = ($fichier !== 'page.php') ? $fichier : '';
85
-		$texte = substr($texte, $p + strlen($match[0]));
86
-		// on assimile {var=val} a une liste de un argument sans fonction
87
-		$pos_apres = 0;
88
-		phraser_args($texte, '/>', '', $result, $champ, $pos_apres);
89
-		if (!$champ->texte or (is_countable($champ->param) ? count($champ->param) : 0) > 1) {
90
-			if (!function_exists('normaliser_inclure')) {
91
-				include_spip('public/normaliser');
92
-			}
93
-			normaliser_inclure($champ);
94
-		}
95
-		$texte = substr($texte, strpos($texte, '>', $pos_apres) + 1);
96
-		$texte = preg_replace(',^</INCLU[DR]E>,', '', $texte);
97
-		$result[] = $champ;
98
-	}
99
-
100
-	return (($texte === '') ? $result : phraser_idiomes($texte, $ligne, $result));
67
+    while (preg_match(BALISE_INCLURE, $texte, $match)) {
68
+        $match = array_pad($match, 3, null);
69
+        $p = strpos($texte, (string) $match[0]);
70
+        $debut = substr($texte, 0, $p);
71
+        if ($p) {
72
+            $result = phraser_idiomes($debut, $ligne, $result);
73
+        }
74
+        $ligne += substr_count($debut, "\n");
75
+        $champ = new Inclure();
76
+        $champ->ligne = $ligne;
77
+        $ligne += substr_count($match[0], "\n");
78
+        $fichier = $match[2];
79
+        # assurer ici la migration .php3 => .php
80
+        # et de l'ancienne syntaxe INCLURE(page.php3) devenue surperflue
81
+        if ($fichier and preg_match(',^(.*[.]php)3$,', $fichier, $r)) {
82
+            $fichier = $r[1];
83
+        }
84
+        $champ->texte = ($fichier !== 'page.php') ? $fichier : '';
85
+        $texte = substr($texte, $p + strlen($match[0]));
86
+        // on assimile {var=val} a une liste de un argument sans fonction
87
+        $pos_apres = 0;
88
+        phraser_args($texte, '/>', '', $result, $champ, $pos_apres);
89
+        if (!$champ->texte or (is_countable($champ->param) ? count($champ->param) : 0) > 1) {
90
+            if (!function_exists('normaliser_inclure')) {
91
+                include_spip('public/normaliser');
92
+            }
93
+            normaliser_inclure($champ);
94
+        }
95
+        $texte = substr($texte, strpos($texte, '>', $pos_apres) + 1);
96
+        $texte = preg_replace(',^</INCLU[DR]E>,', '', $texte);
97
+        $result[] = $champ;
98
+    }
99
+
100
+    return (($texte === '') ? $result : phraser_idiomes($texte, $ligne, $result));
101 101
 }
102 102
 
103 103
 function phraser_polyglotte($texte, $ligne, $result) {
104 104
 
105
-	if (preg_match_all(BALISE_POLYGLOTTE, $texte, $m, PREG_SET_ORDER)) {
106
-		foreach ($m as $match) {
107
-			$p = strpos($texte, (string) $match[0]);
108
-			$debut = substr($texte, 0, $p);
109
-			if ($p) {
110
-				$champ = new Texte();
111
-				$champ->texte = $debut;
112
-				$champ->ligne = $ligne;
113
-				$result[] = $champ;
114
-				$ligne += substr_count($champ->texte, "\n");
115
-			}
116
-
117
-			$champ = new Polyglotte();
118
-			$champ->ligne = $ligne;
119
-			$ligne += substr_count($match[0], "\n");
120
-			$lang = '';
121
-			$bloc = $match[1];
122
-			$texte = substr($texte, $p + strlen($match[0]));
123
-			while (preg_match('/^[[:space:]]*([^[{]*)[[:space:]]*[[{]([a-z_]+)[]}](.*)$/si', $bloc, $regs)) {
124
-				$trad = $regs[1];
125
-				if ($trad or $lang) {
126
-					$champ->traductions[$lang] = $trad;
127
-				}
128
-				$lang = $regs[2];
129
-				$bloc = $regs[3];
130
-			}
131
-			$champ->traductions[$lang] = $bloc;
132
-			$result[] = $champ;
133
-		}
134
-	}
135
-	if ($texte !== '') {
136
-		$champ = new Texte();
137
-		$champ->texte = $texte;
138
-		$champ->ligne = $ligne;
139
-		$result[] = $champ;
140
-	}
141
-
142
-	return $result;
105
+    if (preg_match_all(BALISE_POLYGLOTTE, $texte, $m, PREG_SET_ORDER)) {
106
+        foreach ($m as $match) {
107
+            $p = strpos($texte, (string) $match[0]);
108
+            $debut = substr($texte, 0, $p);
109
+            if ($p) {
110
+                $champ = new Texte();
111
+                $champ->texte = $debut;
112
+                $champ->ligne = $ligne;
113
+                $result[] = $champ;
114
+                $ligne += substr_count($champ->texte, "\n");
115
+            }
116
+
117
+            $champ = new Polyglotte();
118
+            $champ->ligne = $ligne;
119
+            $ligne += substr_count($match[0], "\n");
120
+            $lang = '';
121
+            $bloc = $match[1];
122
+            $texte = substr($texte, $p + strlen($match[0]));
123
+            while (preg_match('/^[[:space:]]*([^[{]*)[[:space:]]*[[{]([a-z_]+)[]}](.*)$/si', $bloc, $regs)) {
124
+                $trad = $regs[1];
125
+                if ($trad or $lang) {
126
+                    $champ->traductions[$lang] = $trad;
127
+                }
128
+                $lang = $regs[2];
129
+                $bloc = $regs[3];
130
+            }
131
+            $champ->traductions[$lang] = $bloc;
132
+            $result[] = $champ;
133
+        }
134
+    }
135
+    if ($texte !== '') {
136
+        $champ = new Texte();
137
+        $champ->texte = $texte;
138
+        $champ->ligne = $ligne;
139
+        $result[] = $champ;
140
+    }
141
+
142
+    return $result;
143 143
 }
144 144
 
145 145
 
@@ -161,43 +161,43 @@  discard block
 block discarded – undo
161 161
  * @return array
162 162
  **/
163 163
 function phraser_idiomes($texte, $ligne, $result) {
164
-	while (preg_match(BALISE_IDIOMES, $texte, $match)) {
165
-		$match = array_pad($match, 8, null);
166
-		$p = strpos($texte, (string) $match[0]);
167
-		$ko = (!$match[3] && ($match[5][0] !== '='));
168
-		$debut = substr($texte, 0, $p + ($ko ? strlen($match[0]) : 0));
169
-		if ($debut) {
170
-			$result = phraser_champs($debut, $ligne, $result);
171
-		}
172
-		$texte = substr($texte, $p + strlen($match[0]));
173
-		$ligne += substr_count($debut, "\n");
174
-		if ($ko) {
175
-			continue;
176
-		} // faux idiome
177
-		$champ = new Idiome();
178
-		$champ->ligne = $ligne;
179
-		$ligne += substr_count($match[0], "\n");
180
-		// Stocker les arguments de la balise de traduction
181
-		$args = [];
182
-		$largs = $match[5];
183
-		while (preg_match(BALISE_IDIOMES_ARGS, $largs, $r)) {
184
-			$args[$r[1]] = phraser_champs($r[2], 0, []);
185
-			$largs = substr($largs, strlen($r[0]));
186
-		}
187
-		$champ->arg = $args;
188
-		$champ->nom_champ = strtolower($match[3]);
189
-		$champ->module = $match[2];
190
-		// pas d'imbrication pour les filtres sur langue
191
-		$pos_apres = 0;
192
-		phraser_args($match[7] ?? '', ':', '', [], $champ, $pos_apres);
193
-		$champ->apres = substr($match[7] ?? '', $pos_apres);
194
-		$result[] = $champ;
195
-	}
196
-	if ($texte !== '') {
197
-		$result = phraser_champs($texte, $ligne, $result);
198
-	}
199
-
200
-	return $result;
164
+    while (preg_match(BALISE_IDIOMES, $texte, $match)) {
165
+        $match = array_pad($match, 8, null);
166
+        $p = strpos($texte, (string) $match[0]);
167
+        $ko = (!$match[3] && ($match[5][0] !== '='));
168
+        $debut = substr($texte, 0, $p + ($ko ? strlen($match[0]) : 0));
169
+        if ($debut) {
170
+            $result = phraser_champs($debut, $ligne, $result);
171
+        }
172
+        $texte = substr($texte, $p + strlen($match[0]));
173
+        $ligne += substr_count($debut, "\n");
174
+        if ($ko) {
175
+            continue;
176
+        } // faux idiome
177
+        $champ = new Idiome();
178
+        $champ->ligne = $ligne;
179
+        $ligne += substr_count($match[0], "\n");
180
+        // Stocker les arguments de la balise de traduction
181
+        $args = [];
182
+        $largs = $match[5];
183
+        while (preg_match(BALISE_IDIOMES_ARGS, $largs, $r)) {
184
+            $args[$r[1]] = phraser_champs($r[2], 0, []);
185
+            $largs = substr($largs, strlen($r[0]));
186
+        }
187
+        $champ->arg = $args;
188
+        $champ->nom_champ = strtolower($match[3]);
189
+        $champ->module = $match[2];
190
+        // pas d'imbrication pour les filtres sur langue
191
+        $pos_apres = 0;
192
+        phraser_args($match[7] ?? '', ':', '', [], $champ, $pos_apres);
193
+        $champ->apres = substr($match[7] ?? '', $pos_apres);
194
+        $result[] = $champ;
195
+    }
196
+    if ($texte !== '') {
197
+        $result = phraser_champs($texte, $ligne, $result);
198
+    }
199
+
200
+    return $result;
201 201
 }
202 202
 
203 203
 /**
@@ -215,47 +215,47 @@  discard block
 block discarded – undo
215 215
  * @return array
216 216
  **/
217 217
 function phraser_champs($texte, $ligne, $result) {
218
-	while (preg_match('/' . NOM_DE_CHAMP . '/S', $texte, $match)) {
219
-		$p = strpos($texte, (string) $match[0]);
220
-		// texte après la balise
221
-		$suite = substr($texte, $p + strlen($match[0]));
222
-
223
-		$debut = substr($texte, 0, $p);
224
-		if ($p) {
225
-			$result = phraser_polyglotte($debut, $ligne, $result);
226
-		}
227
-		$ligne += substr_count($debut, "\n");
228
-		$champ = new Champ();
229
-		$champ->ligne = $ligne;
230
-		$ligne += substr_count($match[0], "\n");
231
-		$champ->nom_boucle = $match[2];
232
-		$champ->nom_champ = $match[3];
233
-		$champ->etoile = $match[5];
234
-
235
-		if ($suite and $suite[0] == '{') {
236
-			phraser_arg($suite, '', [], $champ);
237
-			// ce ltrim est une ereur de conception
238
-			// mais on le conserve par souci de compatibilite
239
-			$texte = ltrim($suite);
240
-			// Il faudrait le normaliser dans l'arbre de syntaxe abstraite
241
-			// pour faire sauter ce cas particulier a la decompilation.
242
-			/* Ce qui suit est malheureusement incomplet pour cela:
218
+    while (preg_match('/' . NOM_DE_CHAMP . '/S', $texte, $match)) {
219
+        $p = strpos($texte, (string) $match[0]);
220
+        // texte après la balise
221
+        $suite = substr($texte, $p + strlen($match[0]));
222
+
223
+        $debut = substr($texte, 0, $p);
224
+        if ($p) {
225
+            $result = phraser_polyglotte($debut, $ligne, $result);
226
+        }
227
+        $ligne += substr_count($debut, "\n");
228
+        $champ = new Champ();
229
+        $champ->ligne = $ligne;
230
+        $ligne += substr_count($match[0], "\n");
231
+        $champ->nom_boucle = $match[2];
232
+        $champ->nom_champ = $match[3];
233
+        $champ->etoile = $match[5];
234
+
235
+        if ($suite and $suite[0] == '{') {
236
+            phraser_arg($suite, '', [], $champ);
237
+            // ce ltrim est une ereur de conception
238
+            // mais on le conserve par souci de compatibilite
239
+            $texte = ltrim($suite);
240
+            // Il faudrait le normaliser dans l'arbre de syntaxe abstraite
241
+            // pour faire sauter ce cas particulier a la decompilation.
242
+            /* Ce qui suit est malheureusement incomplet pour cela:
243 243
 			if ($n = (strlen($suite) - strlen($texte))) {
244 244
 				$champ->apres = array(new Texte);
245 245
 				$champ->apres[0]->texte = substr($suite,0,$n);
246 246
 			}
247 247
 			*/
248
-		} else {
249
-			$texte = $suite;
250
-		}
251
-		phraser_vieux($champ);
252
-		$result[] = $champ;
253
-	}
254
-	if ($texte !== '') {
255
-		$result = phraser_polyglotte($texte, $ligne, $result);
256
-	}
257
-
258
-	return $result;
248
+        } else {
249
+            $texte = $suite;
250
+        }
251
+        phraser_vieux($champ);
252
+        $result[] = $champ;
253
+    }
254
+    if ($texte !== '') {
255
+        $result = phraser_polyglotte($texte, $ligne, $result);
256
+    }
257
+
258
+    return $result;
259 259
 }
260 260
 
261 261
 // Gestion des imbrications:
@@ -264,15 +264,15 @@  discard block
 block discarded – undo
264 264
 // on recommence tant qu'il y a des [...] en substituant a l'appel suivant
265 265
 
266 266
 function phraser_champs_etendus($texte, $ligne, $result) {
267
-	if ($texte === '') {
268
-		return $result;
269
-	}
270
-	$sep = '##';
271
-	while (strpos($texte, (string) $sep) !== false) {
272
-		$sep .= '#';
273
-	}
274
-
275
-	return array_merge($result, phraser_champs_interieurs($texte, $ligne, $sep, []));
267
+    if ($texte === '') {
268
+        return $result;
269
+    }
270
+    $sep = '##';
271
+    while (strpos($texte, (string) $sep) !== false) {
272
+        $sep .= '#';
273
+    }
274
+
275
+    return array_merge($result, phraser_champs_interieurs($texte, $ligne, $sep, []));
276 276
 }
277 277
 
278 278
 /**
@@ -291,275 +291,275 @@  discard block
 block discarded – undo
291 291
  * @return array
292 292
  */
293 293
 function phraser_args(string $texte, $fin, $sep, $result, &$pointeur_champ, &$pos_debut) {
294
-	$length = strlen($texte);
295
-	while ($pos_debut < $length and trim($texte[$pos_debut]) === '') {
296
-		$pos_debut++;
297
-	}
298
-	while (($pos_debut < $length) && strpos($fin, $texte[$pos_debut]) === false) {
299
-		// phraser_arg modifie directement le $texte, on fait donc avec ici en passant par une sous chaine
300
-		$st = substr($texte, $pos_debut);
301
-		$result = phraser_arg($st, $sep, $result, $pointeur_champ);
302
-		$pos_debut = $length - strlen($st);
303
-		while ($pos_debut < $length and trim($texte[$pos_debut]) === '') {
304
-			$pos_debut++;
305
-		}
306
-	}
307
-
308
-	return $result;
294
+    $length = strlen($texte);
295
+    while ($pos_debut < $length and trim($texte[$pos_debut]) === '') {
296
+        $pos_debut++;
297
+    }
298
+    while (($pos_debut < $length) && strpos($fin, $texte[$pos_debut]) === false) {
299
+        // phraser_arg modifie directement le $texte, on fait donc avec ici en passant par une sous chaine
300
+        $st = substr($texte, $pos_debut);
301
+        $result = phraser_arg($st, $sep, $result, $pointeur_champ);
302
+        $pos_debut = $length - strlen($st);
303
+        while ($pos_debut < $length and trim($texte[$pos_debut]) === '') {
304
+            $pos_debut++;
305
+        }
306
+    }
307
+
308
+    return $result;
309 309
 }
310 310
 
311 311
 function phraser_arg(&$texte, $sep, $result, &$pointeur_champ) {
312
-	preg_match(',^(\|?[^}{)|]*)(.*)$,ms', $texte, $match);
313
-	$suite = ltrim($match[2]);
314
-	$fonc = trim($match[1]);
315
-	if ($fonc && $fonc[0] == '|') {
316
-		$fonc = ltrim(substr($fonc, 1));
317
-	}
318
-	$res = [$fonc];
319
-	$err_f = '';
320
-	// cas du filtre sans argument ou du critere /
321
-	if (($suite && ($suite[0] != '{')) || ($fonc && $fonc[0] == '/')) {
322
-		// si pas d'argument, alors il faut une fonction ou un double |
323
-		if (!$match[1]) {
324
-			$err_f = ['zbug_erreur_filtre', ['filtre' => $texte]];
325
-			erreur_squelette($err_f, $pointeur_champ);
326
-			$texte = '';
327
-		} else {
328
-			$texte = $suite;
329
-		}
330
-		if ($err_f) {
331
-			$pointeur_champ->param = false;
332
-		} elseif ($fonc !== '') {
333
-			$pointeur_champ->param[] = $res;
334
-		}
335
-		// pour les balises avec faux filtres qui boudent ce dur larbeur
336
-		$pointeur_champ->fonctions[] = [$fonc, ''];
337
-
338
-		return $result;
339
-	}
340
-	$args = ltrim(substr($suite, 1)); // virer le '(' initial
341
-	$collecte = [];
342
-	while ($args && $args[0] != '}') {
343
-		if ($args[0] == '"') {
344
-			preg_match('/^(")([^"]*)(")(.*)$/ms', $args, $regs);
345
-		} elseif ($args[0] == "'") {
346
-			preg_match("/^(')([^']*)(')(.*)$/ms", $args, $regs);
347
-		} else {
348
-			preg_match('/^([[:space:]]*)([^,([{}]*([(\[{][^])}]*[])}])?[^,}]*)([,}].*)$/ms', $args, $regs);
349
-			if (!isset($regs[2]) or !strlen($regs[2])) {
350
-				$err_f = ['zbug_erreur_filtre', ['filtre' => $args]];
351
-				erreur_squelette($err_f, $pointeur_champ);
352
-				$champ = new Texte();
353
-				$champ->apres = $champ->avant = $args = '';
354
-				break;
355
-			}
356
-		}
357
-		$arg = $regs[2];
358
-		if (trim($regs[1])) {
359
-			$champ = new Texte();
360
-			$champ->texte = $arg;
361
-			$champ->apres = $champ->avant = $regs[1];
362
-			$result[] = $champ;
363
-			$collecte[] = $champ;
364
-			$args = ltrim($regs[count($regs) - 1]);
365
-		} else {
366
-			if (!preg_match('/' . NOM_DE_CHAMP . '([{|])/', $arg, $r)) {
367
-				// 0 est un aveu d'impuissance. A completer
368
-				$arg = phraser_champs_exterieurs($arg, 0, $sep, $result);
369
-
370
-				$args = ltrim($regs[count($regs) - 1]);
371
-				$collecte = array_merge($collecte, $arg);
372
-				$result = array_merge($result, $arg);
373
-			} else {
374
-				$n = strpos($args, (string) $r[0]);
375
-				$pred = substr($args, 0, $n);
376
-				$par = ',}';
377
-				if (preg_match('/^(.*)\($/', $pred, $m)) {
378
-					$pred = $m[1];
379
-					$par = ')';
380
-				}
381
-				if ($pred) {
382
-					$champ = new Texte();
383
-					$champ->texte = $pred;
384
-					$champ->apres = $champ->avant = '';
385
-					$result[] = $champ;
386
-					$collecte[] = $champ;
387
-				}
388
-				$rec = substr($args, $n + strlen($r[0]) - 1);
389
-				$champ = new Champ();
390
-				$champ->nom_boucle = $r[2];
391
-				$champ->nom_champ = $r[3];
392
-				$champ->etoile = $r[5];
393
-				$next = $r[6];
394
-				while ($next == '{') {
395
-					phraser_arg($rec, $sep, [], $champ);
396
-					$args = ltrim($rec);
397
-					$next = $args[0] ?? '';
398
-				}
399
-				while ($next == '|') {
400
-					$pos_apres = 0;
401
-					phraser_args($rec, $par, $sep, [], $champ, $pos_apres);
402
-					$args = substr($rec, $pos_apres);
403
-					$next = $args[0] ?? '';
404
-				}
405
-				// Si erreur de syntaxe dans un sous-argument, propager.
406
-				if ($champ->param === false) {
407
-					$err_f = true;
408
-				} else {
409
-					phraser_vieux($champ);
410
-				}
411
-				if ($par == ')') {
412
-					$args = substr($args, 1);
413
-				}
414
-				$collecte[] = $champ;
415
-				$result[] = $champ;
416
-			}
417
-		}
418
-		if (isset($args[0]) and $args[0] == ',') {
419
-			$args = ltrim(substr($args, 1));
420
-			if ($collecte) {
421
-				$res[] = $collecte;
422
-				$collecte = [];
423
-			}
424
-		}
425
-	}
426
-	if ($collecte) {
427
-		$res[] = $collecte;
428
-		$collecte = [];
429
-	}
430
-	$texte = substr($args, 1);
431
-	$source = substr($suite, 0, strlen($suite) - strlen($texte));
432
-	// propager les erreurs, et ignorer les param vides
433
-	if ($pointeur_champ->param !== false) {
434
-		if ($err_f) {
435
-			$pointeur_champ->param = false;
436
-		} elseif ($fonc !== '' || count($res) > 1) {
437
-			$pointeur_champ->param[] = $res;
438
-		}
439
-	}
440
-	// pour les balises avec faux filtres qui boudent ce dur larbeur
441
-	$pointeur_champ->fonctions[] = [$fonc, $source];
442
-
443
-	return $result;
312
+    preg_match(',^(\|?[^}{)|]*)(.*)$,ms', $texte, $match);
313
+    $suite = ltrim($match[2]);
314
+    $fonc = trim($match[1]);
315
+    if ($fonc && $fonc[0] == '|') {
316
+        $fonc = ltrim(substr($fonc, 1));
317
+    }
318
+    $res = [$fonc];
319
+    $err_f = '';
320
+    // cas du filtre sans argument ou du critere /
321
+    if (($suite && ($suite[0] != '{')) || ($fonc && $fonc[0] == '/')) {
322
+        // si pas d'argument, alors il faut une fonction ou un double |
323
+        if (!$match[1]) {
324
+            $err_f = ['zbug_erreur_filtre', ['filtre' => $texte]];
325
+            erreur_squelette($err_f, $pointeur_champ);
326
+            $texte = '';
327
+        } else {
328
+            $texte = $suite;
329
+        }
330
+        if ($err_f) {
331
+            $pointeur_champ->param = false;
332
+        } elseif ($fonc !== '') {
333
+            $pointeur_champ->param[] = $res;
334
+        }
335
+        // pour les balises avec faux filtres qui boudent ce dur larbeur
336
+        $pointeur_champ->fonctions[] = [$fonc, ''];
337
+
338
+        return $result;
339
+    }
340
+    $args = ltrim(substr($suite, 1)); // virer le '(' initial
341
+    $collecte = [];
342
+    while ($args && $args[0] != '}') {
343
+        if ($args[0] == '"') {
344
+            preg_match('/^(")([^"]*)(")(.*)$/ms', $args, $regs);
345
+        } elseif ($args[0] == "'") {
346
+            preg_match("/^(')([^']*)(')(.*)$/ms", $args, $regs);
347
+        } else {
348
+            preg_match('/^([[:space:]]*)([^,([{}]*([(\[{][^])}]*[])}])?[^,}]*)([,}].*)$/ms', $args, $regs);
349
+            if (!isset($regs[2]) or !strlen($regs[2])) {
350
+                $err_f = ['zbug_erreur_filtre', ['filtre' => $args]];
351
+                erreur_squelette($err_f, $pointeur_champ);
352
+                $champ = new Texte();
353
+                $champ->apres = $champ->avant = $args = '';
354
+                break;
355
+            }
356
+        }
357
+        $arg = $regs[2];
358
+        if (trim($regs[1])) {
359
+            $champ = new Texte();
360
+            $champ->texte = $arg;
361
+            $champ->apres = $champ->avant = $regs[1];
362
+            $result[] = $champ;
363
+            $collecte[] = $champ;
364
+            $args = ltrim($regs[count($regs) - 1]);
365
+        } else {
366
+            if (!preg_match('/' . NOM_DE_CHAMP . '([{|])/', $arg, $r)) {
367
+                // 0 est un aveu d'impuissance. A completer
368
+                $arg = phraser_champs_exterieurs($arg, 0, $sep, $result);
369
+
370
+                $args = ltrim($regs[count($regs) - 1]);
371
+                $collecte = array_merge($collecte, $arg);
372
+                $result = array_merge($result, $arg);
373
+            } else {
374
+                $n = strpos($args, (string) $r[0]);
375
+                $pred = substr($args, 0, $n);
376
+                $par = ',}';
377
+                if (preg_match('/^(.*)\($/', $pred, $m)) {
378
+                    $pred = $m[1];
379
+                    $par = ')';
380
+                }
381
+                if ($pred) {
382
+                    $champ = new Texte();
383
+                    $champ->texte = $pred;
384
+                    $champ->apres = $champ->avant = '';
385
+                    $result[] = $champ;
386
+                    $collecte[] = $champ;
387
+                }
388
+                $rec = substr($args, $n + strlen($r[0]) - 1);
389
+                $champ = new Champ();
390
+                $champ->nom_boucle = $r[2];
391
+                $champ->nom_champ = $r[3];
392
+                $champ->etoile = $r[5];
393
+                $next = $r[6];
394
+                while ($next == '{') {
395
+                    phraser_arg($rec, $sep, [], $champ);
396
+                    $args = ltrim($rec);
397
+                    $next = $args[0] ?? '';
398
+                }
399
+                while ($next == '|') {
400
+                    $pos_apres = 0;
401
+                    phraser_args($rec, $par, $sep, [], $champ, $pos_apres);
402
+                    $args = substr($rec, $pos_apres);
403
+                    $next = $args[0] ?? '';
404
+                }
405
+                // Si erreur de syntaxe dans un sous-argument, propager.
406
+                if ($champ->param === false) {
407
+                    $err_f = true;
408
+                } else {
409
+                    phraser_vieux($champ);
410
+                }
411
+                if ($par == ')') {
412
+                    $args = substr($args, 1);
413
+                }
414
+                $collecte[] = $champ;
415
+                $result[] = $champ;
416
+            }
417
+        }
418
+        if (isset($args[0]) and $args[0] == ',') {
419
+            $args = ltrim(substr($args, 1));
420
+            if ($collecte) {
421
+                $res[] = $collecte;
422
+                $collecte = [];
423
+            }
424
+        }
425
+    }
426
+    if ($collecte) {
427
+        $res[] = $collecte;
428
+        $collecte = [];
429
+    }
430
+    $texte = substr($args, 1);
431
+    $source = substr($suite, 0, strlen($suite) - strlen($texte));
432
+    // propager les erreurs, et ignorer les param vides
433
+    if ($pointeur_champ->param !== false) {
434
+        if ($err_f) {
435
+            $pointeur_champ->param = false;
436
+        } elseif ($fonc !== '' || count($res) > 1) {
437
+            $pointeur_champ->param[] = $res;
438
+        }
439
+    }
440
+    // pour les balises avec faux filtres qui boudent ce dur larbeur
441
+    $pointeur_champ->fonctions[] = [$fonc, $source];
442
+
443
+    return $result;
444 444
 }
445 445
 
446 446
 
447 447
 function phraser_champs_exterieurs($texte, $ligne, $sep, $nested) {
448
-	$res = [];
449
-	while (($p = strpos($texte, (string) "%$sep")) !== false) {
450
-		if (!preg_match(',^%' . preg_quote($sep) . '([0-9]+)@,', substr($texte, $p), $m)) {
451
-			break;
452
-		}
453
-		$debut = substr($texte, 0, $p);
454
-		$texte = substr($texte, $p + strlen($m[0]));
455
-		if ($p) {
456
-			$res = phraser_inclure($debut, $ligne, $res);
457
-		}
458
-		$ligne += substr_count($debut, "\n");
459
-		$res[] = $nested[$m[1]];
460
-	}
461
-
462
-	return (($texte === '') ? $res : phraser_inclure($texte, $ligne, $res));
448
+    $res = [];
449
+    while (($p = strpos($texte, (string) "%$sep")) !== false) {
450
+        if (!preg_match(',^%' . preg_quote($sep) . '([0-9]+)@,', substr($texte, $p), $m)) {
451
+            break;
452
+        }
453
+        $debut = substr($texte, 0, $p);
454
+        $texte = substr($texte, $p + strlen($m[0]));
455
+        if ($p) {
456
+            $res = phraser_inclure($debut, $ligne, $res);
457
+        }
458
+        $ligne += substr_count($debut, "\n");
459
+        $res[] = $nested[$m[1]];
460
+    }
461
+
462
+    return (($texte === '') ? $res : phraser_inclure($texte, $ligne, $res));
463 463
 }
464 464
 
465 465
 function phraser_champs_interieurs($texte, $ligne, $sep, $result) {
466
-	$i = 0; // en fait count($result)
467
-	$x = '';
468
-
469
-	while (true) {
470
-		$j = $i;
471
-		$n = $ligne;
472
-		while (preg_match(CHAMP_ETENDU, $texte, $match)) {
473
-			$p = strpos($texte, (string) $match[0]);
474
-			$debut = substr($texte, 0, $p);
475
-			if ($p) {
476
-				$result[$i] = $debut;
477
-				$i++;
478
-			}
479
-			$nom = $match[4];
480
-			$champ = new Champ();
481
-			// ca ne marche pas encore en cas de champ imbrique
482
-			$champ->ligne = $x ? 0 : ($n + substr_count($debut, "\n"));
483
-			$champ->nom_boucle = $match[3];
484
-			$champ->nom_champ = $nom;
485
-			$champ->etoile = $match[6];
486
-			// phraser_args indiquera ou commence apres
487
-			$pos_apres = 0;
488
-			$result = phraser_args($match[7], ')', $sep, $result, $champ, $pos_apres);
489
-			phraser_vieux($champ);
490
-			$champ->avant =	phraser_champs_exterieurs($match[1], $n, $sep, $result);
491
-			$debut = substr($match[7], $pos_apres + 1);
492
-			if (!empty($debut)) {
493
-				$n += substr_count(substr($texte, 0, strpos($texte, $debut)), "\n");
494
-			}
495
-			$champ->apres = phraser_champs_exterieurs($debut, $n, $sep, $result);
496
-
497
-			// reinjecter la boucle si c'en est une
498
-			phraser_boucle_placeholder($champ);
499
-
500
-			$result[$i] = $champ;
501
-			$i++;
502
-			$texte = substr($texte, $p + strlen($match[0]));
503
-		}
504
-		if ($texte !== '') {
505
-			$result[$i] = $texte;
506
-			$i++;
507
-		}
508
-		$x = '';
509
-
510
-		while ($j < $i) {
511
-			$z = $result[$j];
512
-			// j'aurais besoin de connaitre le nombre de lignes...
513
-			if (is_object($z)) {
514
-				$x .= "%$sep$j@";
515
-			} else {
516
-				$x .= $z;
517
-			}
518
-			$j++;
519
-		}
520
-		if (preg_match(CHAMP_ETENDU, $x)) {
521
-			$texte = $x;
522
-		} else {
523
-			return phraser_champs_exterieurs($x, $ligne, $sep, $result);
524
-		}
525
-	}
466
+    $i = 0; // en fait count($result)
467
+    $x = '';
468
+
469
+    while (true) {
470
+        $j = $i;
471
+        $n = $ligne;
472
+        while (preg_match(CHAMP_ETENDU, $texte, $match)) {
473
+            $p = strpos($texte, (string) $match[0]);
474
+            $debut = substr($texte, 0, $p);
475
+            if ($p) {
476
+                $result[$i] = $debut;
477
+                $i++;
478
+            }
479
+            $nom = $match[4];
480
+            $champ = new Champ();
481
+            // ca ne marche pas encore en cas de champ imbrique
482
+            $champ->ligne = $x ? 0 : ($n + substr_count($debut, "\n"));
483
+            $champ->nom_boucle = $match[3];
484
+            $champ->nom_champ = $nom;
485
+            $champ->etoile = $match[6];
486
+            // phraser_args indiquera ou commence apres
487
+            $pos_apres = 0;
488
+            $result = phraser_args($match[7], ')', $sep, $result, $champ, $pos_apres);
489
+            phraser_vieux($champ);
490
+            $champ->avant =	phraser_champs_exterieurs($match[1], $n, $sep, $result);
491
+            $debut = substr($match[7], $pos_apres + 1);
492
+            if (!empty($debut)) {
493
+                $n += substr_count(substr($texte, 0, strpos($texte, $debut)), "\n");
494
+            }
495
+            $champ->apres = phraser_champs_exterieurs($debut, $n, $sep, $result);
496
+
497
+            // reinjecter la boucle si c'en est une
498
+            phraser_boucle_placeholder($champ);
499
+
500
+            $result[$i] = $champ;
501
+            $i++;
502
+            $texte = substr($texte, $p + strlen($match[0]));
503
+        }
504
+        if ($texte !== '') {
505
+            $result[$i] = $texte;
506
+            $i++;
507
+        }
508
+        $x = '';
509
+
510
+        while ($j < $i) {
511
+            $z = $result[$j];
512
+            // j'aurais besoin de connaitre le nombre de lignes...
513
+            if (is_object($z)) {
514
+                $x .= "%$sep$j@";
515
+            } else {
516
+                $x .= $z;
517
+            }
518
+            $j++;
519
+        }
520
+        if (preg_match(CHAMP_ETENDU, $x)) {
521
+            $texte = $x;
522
+        } else {
523
+            return phraser_champs_exterieurs($x, $ligne, $sep, $result);
524
+        }
525
+    }
526 526
 }
527 527
 
528 528
 function phraser_vieux(&$champ) {
529
-	$nom = $champ->nom_champ;
530
-	if ($nom == 'EMBED_DOCUMENT') {
531
-		if (!function_exists('phraser_vieux_emb')) {
532
-			include_spip('public/normaliser');
533
-		}
534
-		phraser_vieux_emb($champ);
535
-	} elseif ($nom == 'EXPOSER') {
536
-		if (!function_exists('phraser_vieux_exposer')) {
537
-			include_spip('public/normaliser');
538
-		}
539
-		phraser_vieux_exposer($champ);
540
-	} elseif ($champ->param) {
541
-		if ($nom == 'FORMULAIRE_RECHERCHE') {
542
-			if (!function_exists('phraser_vieux_recherche')) {
543
-				include_spip('public/normaliser');
544
-			}
545
-			phraser_vieux_recherche($champ);
546
-		} elseif (preg_match(',^LOGO_[A-Z]+,', $nom)) {
547
-			if (!function_exists('phraser_vieux_logos')) {
548
-				include_spip('public/normaliser');
549
-			}
550
-			phraser_vieux_logos($champ);
551
-		} elseif ($nom == 'MODELE') {
552
-			if (!function_exists('phraser_vieux_modele')) {
553
-				include_spip('public/normaliser');
554
-			}
555
-			phraser_vieux_modele($champ);
556
-		} elseif ($nom == 'INCLURE' or $nom == 'INCLUDE') {
557
-			if (!function_exists('phraser_vieux_inclu')) {
558
-				include_spip('public/normaliser');
559
-			}
560
-			phraser_vieux_inclu($champ);
561
-		}
562
-	}
529
+    $nom = $champ->nom_champ;
530
+    if ($nom == 'EMBED_DOCUMENT') {
531
+        if (!function_exists('phraser_vieux_emb')) {
532
+            include_spip('public/normaliser');
533
+        }
534
+        phraser_vieux_emb($champ);
535
+    } elseif ($nom == 'EXPOSER') {
536
+        if (!function_exists('phraser_vieux_exposer')) {
537
+            include_spip('public/normaliser');
538
+        }
539
+        phraser_vieux_exposer($champ);
540
+    } elseif ($champ->param) {
541
+        if ($nom == 'FORMULAIRE_RECHERCHE') {
542
+            if (!function_exists('phraser_vieux_recherche')) {
543
+                include_spip('public/normaliser');
544
+            }
545
+            phraser_vieux_recherche($champ);
546
+        } elseif (preg_match(',^LOGO_[A-Z]+,', $nom)) {
547
+            if (!function_exists('phraser_vieux_logos')) {
548
+                include_spip('public/normaliser');
549
+            }
550
+            phraser_vieux_logos($champ);
551
+        } elseif ($nom == 'MODELE') {
552
+            if (!function_exists('phraser_vieux_modele')) {
553
+                include_spip('public/normaliser');
554
+            }
555
+            phraser_vieux_modele($champ);
556
+        } elseif ($nom == 'INCLURE' or $nom == 'INCLUDE') {
557
+            if (!function_exists('phraser_vieux_inclu')) {
558
+                include_spip('public/normaliser');
559
+            }
560
+            phraser_vieux_inclu($champ);
561
+        }
562
+    }
563 563
 }
564 564
 
565 565
 
@@ -587,200 +587,200 @@  discard block
 block discarded – undo
587 587
  **/
588 588
 function phraser_criteres($params, &$result) {
589 589
 
590
-	$err_ci = ''; // indiquera s'il y a eu une erreur
591
-	$args = [];
592
-	$type = $result->type_requete;
593
-	$doublons = [];
594
-	foreach ($params as $v) {
595
-		$var = $v[1][0];
596
-		$param = ($var->type != 'texte') ? '' : $var->texte;
597
-		if (((is_countable($v) ? count($v) : 0) > 2) && (!preg_match(',[^A-Za-z]IN[^A-Za-z],i', $param))) {
598
-			// plus d'un argument et pas le critere IN:
599
-			// detecter comme on peut si c'est le critere implicite LIMIT debut, fin
600
-			if (
601
-				$var->type != 'texte'
602
-				or preg_match('/^(n|n-|(n-)?\d+)$/S', $param)
603
-			) {
604
-				$op = ',';
605
-				$not = '';
606
-				$cond = false;
607
-			} else {
608
-				// Le debut du premier argument est l'operateur
609
-				preg_match('/^([!]?)([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*(\??)[[:space:]]*(.*)$/ms', $param, $m);
610
-				$op = $m[2];
611
-				$not = $m[1];
612
-				$cond = $m[3];
613
-				// virer le premier argument,
614
-				// et mettre son reliquat eventuel
615
-				// Recopier pour ne pas alterer le texte source
616
-				// utile au debusqueur
617
-				if ($m[4]) {
618
-					// une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"}
619
-					if (preg_match(',^(["\'])(.*)\1$,', $m[4])) {
620
-						$c = null;
621
-						eval('$c = ' . $m[4] . ';');
622
-						if (isset($c)) {
623
-							$m[4] = $c;
624
-						}
625
-					}
626
-					$texte = new Texte();
627
-					$texte->texte = $m[4];
628
-					$v[1][0] = $texte;
629
-				} else {
630
-					array_shift($v[1]);
631
-				}
632
-			}
633
-			array_shift($v); // $v[O] est vide
634
-			$crit = new Critere();
635
-			$crit->op = $op;
636
-			$crit->not = $not;
637
-			$crit->cond = $cond;
638
-			$crit->exclus = '';
639
-			$crit->param = $v;
640
-			$args[] = $crit;
641
-		} else {
642
-			if ($var->type != 'texte') {
643
-				// cas 1 seul arg ne commencant pas par du texte brut:
644
-				// erreur ou critere infixe "/"
645
-				if (($v[1][1]->type != 'texte') || (trim($v[1][1]->texte) != '/')) {
646
-					$err_ci = [
647
-						'zbug_critere_inconnu',
648
-						['critere' => $var->nom_champ]
649
-					];
650
-					erreur_squelette($err_ci, $result);
651
-				} else {
652
-					$crit = new Critere();
653
-					$crit->op = '/';
654
-					$crit->not = '';
655
-					$crit->exclus = '';
656
-					$crit->param = [[$v[1][0]], [$v[1][2]]];
657
-					$args[] = $crit;
658
-				}
659
-			} else {
660
-				// traiter qq lexemes particuliers pour faciliter la suite
661
-				// les separateurs
662
-				if ($var->apres) {
663
-					$result->separateur[] = $param;
664
-				} elseif (($param == 'tout') or ($param == 'tous')) {
665
-					$result->modificateur['tout'] = true;
666
-				} elseif ($param == 'plat') {
667
-					$result->modificateur['plat'] = true;
668
-				}
669
-
670
-				// Boucle hierarchie, analyser le critere id_rubrique
671
-				// et les autres critères {id_x} pour forcer {tout} sur
672
-				// ceux-ci pour avoir la rubrique mere...
673
-				// Les autres critères de la boucle hierarchie doivent être
674
-				// traités normalement.
675
-				elseif (
676
-					strcasecmp($type, 'hierarchie') == 0
677
-					and !preg_match(",^id_rubrique\b,", $param)
678
-					and preg_match(',^id_\w+\s*$,', $param)
679
-				) {
680
-					$result->modificateur['tout'] = true;
681
-				} elseif (strcasecmp($type, 'hierarchie') == 0 and $param == 'id_rubrique') {
682
-					// rien a faire sur {id_rubrique} tout seul
683
-				} else {
684
-					// pas d'emplacement statique, faut un dynamique
685
-					// mais il y a 2 cas qui ont les 2 !
686
-					if (($param == 'unique') || (preg_match(',^!?doublons *,', $param))) {
687
-						// cette variable sera inseree dans le code
688
-						// et son nom sert d'indicateur des maintenant
689
-						$result->doublons = '$doublons_index';
690
-						if ($param == 'unique') {
691
-							$param = 'doublons';
692
-						}
693
-					} elseif ($param == 'recherche') {
694
-						// meme chose (a cause de #nom_de_boucle:URL_*)
695
-						$result->hash = ' ';
696
-					}
697
-
698
-					if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', $param, $m)) {
699
-						$crit = phraser_critere_infixe($m[1], $m[3], $v, '/', '', '');
700
-					} elseif (
701
-						preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC .
702
-						')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', $param, $m)
703
-					) {
704
-						$a2 = trim($m[8]);
705
-						if ($a2 and ($a2[0] == "'" or $a2[0] == '"') and ($a2[0] == substr($a2, -1))) {
706
-							$a2 = substr($a2, 1, -1);
707
-						}
708
-						$crit = phraser_critere_infixe(
709
-							$m[2],
710
-							$a2,
711
-							$v,
712
-							(($m[2] == 'lang_select') ? $m[2] : $m[7]),
713
-							$m[6],
714
-							$m[5]
715
-						);
716
-						$crit->exclus = $m[1];
717
-					} elseif (
718
-						preg_match('/^([!]?)\s*(' .
719
-						CHAMP_SQL_PLUS_FONC .
720
-						')\s*(\??)(.*)$/is', $param, $m)
721
-					) {
722
-						// contient aussi les comparaisons implicites !
723
-						// Comme ci-dessus:
724
-						// le premier arg contient l'operateur
725
-						array_shift($v);
726
-						if ($m[6]) {
727
-							$v[0][0] = new Texte();
728
-							$v[0][0]->texte = $m[6];
729
-						} else {
730
-							array_shift($v[0]);
731
-							if (!$v[0]) {
732
-								array_shift($v);
733
-							}
734
-						}
735
-						$crit = new Critere();
736
-						$crit->op = $m[2];
737
-						$crit->param = $v;
738
-						$crit->not = $m[1];
739
-						$crit->cond = $m[5];
740
-					} else {
741
-						$err_ci = [
742
-							'zbug_critere_inconnu',
743
-							['critere' => $param]
744
-						];
745
-						erreur_squelette($err_ci, $result);
746
-					}
747
-
748
-					if ((!preg_match(',^!?doublons *,', $param)) || $crit->not) {
749
-						$args[] = $crit;
750
-					} else {
751
-						$doublons[] = $crit;
752
-					}
753
-				}
754
-			}
755
-		}
756
-	}
757
-
758
-	// les doublons non nies doivent etre le dernier critere
759
-	// pour que la variable $doublon_index ait la bonne valeur
760
-	// cf critere_doublon
761
-	if ($doublons) {
762
-		$args = [...$args, ...$doublons];
763
-	}
764
-
765
-	// Si erreur, laisser la chaine dans ce champ pour le HTTP 503
766
-	if (!$err_ci) {
767
-		$result->criteres = $args;
768
-	}
590
+    $err_ci = ''; // indiquera s'il y a eu une erreur
591
+    $args = [];
592
+    $type = $result->type_requete;
593
+    $doublons = [];
594
+    foreach ($params as $v) {
595
+        $var = $v[1][0];
596
+        $param = ($var->type != 'texte') ? '' : $var->texte;
597
+        if (((is_countable($v) ? count($v) : 0) > 2) && (!preg_match(',[^A-Za-z]IN[^A-Za-z],i', $param))) {
598
+            // plus d'un argument et pas le critere IN:
599
+            // detecter comme on peut si c'est le critere implicite LIMIT debut, fin
600
+            if (
601
+                $var->type != 'texte'
602
+                or preg_match('/^(n|n-|(n-)?\d+)$/S', $param)
603
+            ) {
604
+                $op = ',';
605
+                $not = '';
606
+                $cond = false;
607
+            } else {
608
+                // Le debut du premier argument est l'operateur
609
+                preg_match('/^([!]?)([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*(\??)[[:space:]]*(.*)$/ms', $param, $m);
610
+                $op = $m[2];
611
+                $not = $m[1];
612
+                $cond = $m[3];
613
+                // virer le premier argument,
614
+                // et mettre son reliquat eventuel
615
+                // Recopier pour ne pas alterer le texte source
616
+                // utile au debusqueur
617
+                if ($m[4]) {
618
+                    // une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"}
619
+                    if (preg_match(',^(["\'])(.*)\1$,', $m[4])) {
620
+                        $c = null;
621
+                        eval('$c = ' . $m[4] . ';');
622
+                        if (isset($c)) {
623
+                            $m[4] = $c;
624
+                        }
625
+                    }
626
+                    $texte = new Texte();
627
+                    $texte->texte = $m[4];
628
+                    $v[1][0] = $texte;
629
+                } else {
630
+                    array_shift($v[1]);
631
+                }
632
+            }
633
+            array_shift($v); // $v[O] est vide
634
+            $crit = new Critere();
635
+            $crit->op = $op;
636
+            $crit->not = $not;
637
+            $crit->cond = $cond;
638
+            $crit->exclus = '';
639
+            $crit->param = $v;
640
+            $args[] = $crit;
641
+        } else {
642
+            if ($var->type != 'texte') {
643
+                // cas 1 seul arg ne commencant pas par du texte brut:
644
+                // erreur ou critere infixe "/"
645
+                if (($v[1][1]->type != 'texte') || (trim($v[1][1]->texte) != '/')) {
646
+                    $err_ci = [
647
+                        'zbug_critere_inconnu',
648
+                        ['critere' => $var->nom_champ]
649
+                    ];
650
+                    erreur_squelette($err_ci, $result);
651
+                } else {
652
+                    $crit = new Critere();
653
+                    $crit->op = '/';
654
+                    $crit->not = '';
655
+                    $crit->exclus = '';
656
+                    $crit->param = [[$v[1][0]], [$v[1][2]]];
657
+                    $args[] = $crit;
658
+                }
659
+            } else {
660
+                // traiter qq lexemes particuliers pour faciliter la suite
661
+                // les separateurs
662
+                if ($var->apres) {
663
+                    $result->separateur[] = $param;
664
+                } elseif (($param == 'tout') or ($param == 'tous')) {
665
+                    $result->modificateur['tout'] = true;
666
+                } elseif ($param == 'plat') {
667
+                    $result->modificateur['plat'] = true;
668
+                }
669
+
670
+                // Boucle hierarchie, analyser le critere id_rubrique
671
+                // et les autres critères {id_x} pour forcer {tout} sur
672
+                // ceux-ci pour avoir la rubrique mere...
673
+                // Les autres critères de la boucle hierarchie doivent être
674
+                // traités normalement.
675
+                elseif (
676
+                    strcasecmp($type, 'hierarchie') == 0
677
+                    and !preg_match(",^id_rubrique\b,", $param)
678
+                    and preg_match(',^id_\w+\s*$,', $param)
679
+                ) {
680
+                    $result->modificateur['tout'] = true;
681
+                } elseif (strcasecmp($type, 'hierarchie') == 0 and $param == 'id_rubrique') {
682
+                    // rien a faire sur {id_rubrique} tout seul
683
+                } else {
684
+                    // pas d'emplacement statique, faut un dynamique
685
+                    // mais il y a 2 cas qui ont les 2 !
686
+                    if (($param == 'unique') || (preg_match(',^!?doublons *,', $param))) {
687
+                        // cette variable sera inseree dans le code
688
+                        // et son nom sert d'indicateur des maintenant
689
+                        $result->doublons = '$doublons_index';
690
+                        if ($param == 'unique') {
691
+                            $param = 'doublons';
692
+                        }
693
+                    } elseif ($param == 'recherche') {
694
+                        // meme chose (a cause de #nom_de_boucle:URL_*)
695
+                        $result->hash = ' ';
696
+                    }
697
+
698
+                    if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', $param, $m)) {
699
+                        $crit = phraser_critere_infixe($m[1], $m[3], $v, '/', '', '');
700
+                    } elseif (
701
+                        preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC .
702
+                        ')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', $param, $m)
703
+                    ) {
704
+                        $a2 = trim($m[8]);
705
+                        if ($a2 and ($a2[0] == "'" or $a2[0] == '"') and ($a2[0] == substr($a2, -1))) {
706
+                            $a2 = substr($a2, 1, -1);
707
+                        }
708
+                        $crit = phraser_critere_infixe(
709
+                            $m[2],
710
+                            $a2,
711
+                            $v,
712
+                            (($m[2] == 'lang_select') ? $m[2] : $m[7]),
713
+                            $m[6],
714
+                            $m[5]
715
+                        );
716
+                        $crit->exclus = $m[1];
717
+                    } elseif (
718
+                        preg_match('/^([!]?)\s*(' .
719
+                        CHAMP_SQL_PLUS_FONC .
720
+                        ')\s*(\??)(.*)$/is', $param, $m)
721
+                    ) {
722
+                        // contient aussi les comparaisons implicites !
723
+                        // Comme ci-dessus:
724
+                        // le premier arg contient l'operateur
725
+                        array_shift($v);
726
+                        if ($m[6]) {
727
+                            $v[0][0] = new Texte();
728
+                            $v[0][0]->texte = $m[6];
729
+                        } else {
730
+                            array_shift($v[0]);
731
+                            if (!$v[0]) {
732
+                                array_shift($v);
733
+                            }
734
+                        }
735
+                        $crit = new Critere();
736
+                        $crit->op = $m[2];
737
+                        $crit->param = $v;
738
+                        $crit->not = $m[1];
739
+                        $crit->cond = $m[5];
740
+                    } else {
741
+                        $err_ci = [
742
+                            'zbug_critere_inconnu',
743
+                            ['critere' => $param]
744
+                        ];
745
+                        erreur_squelette($err_ci, $result);
746
+                    }
747
+
748
+                    if ((!preg_match(',^!?doublons *,', $param)) || $crit->not) {
749
+                        $args[] = $crit;
750
+                    } else {
751
+                        $doublons[] = $crit;
752
+                    }
753
+                }
754
+            }
755
+        }
756
+    }
757
+
758
+    // les doublons non nies doivent etre le dernier critere
759
+    // pour que la variable $doublon_index ait la bonne valeur
760
+    // cf critere_doublon
761
+    if ($doublons) {
762
+        $args = [...$args, ...$doublons];
763
+    }
764
+
765
+    // Si erreur, laisser la chaine dans ce champ pour le HTTP 503
766
+    if (!$err_ci) {
767
+        $result->criteres = $args;
768
+    }
769 769
 }
770 770
 
771 771
 function phraser_critere_infixe($arg1, $arg2, $args, $op, $not, $cond) {
772
-	$args[0] = new Texte();
773
-	$args[0]->texte = $arg1;
774
-	$args[0] = [$args[0]];
775
-	$args[1][0] = new Texte();
776
-	$args[1][0]->texte = $arg2;
777
-	$crit = new Critere();
778
-	$crit->op = $op;
779
-	$crit->not = $not;
780
-	$crit->cond = $cond;
781
-	$crit->param = $args;
782
-
783
-	return $crit;
772
+    $args[0] = new Texte();
773
+    $args[0]->texte = $arg1;
774
+    $args[0] = [$args[0]];
775
+    $args[1][0] = new Texte();
776
+    $args[1][0]->texte = $arg2;
777
+    $crit = new Critere();
778
+    $crit->op = $op;
779
+    $crit->not = $not;
780
+    $crit->cond = $cond;
781
+    $crit->param = $args;
782
+
783
+    return $crit;
784 784
 }
785 785
 
786 786
 /**
@@ -791,12 +791,12 @@  discard block
 block discarded – undo
791 791
  * @return int
792 792
  */
793 793
 function public_compte_ligne($texte, $debut = 0, $fin = null) {
794
-	if (is_null($fin)) {
795
-		return substr_count($texte, "\n", $debut);
796
-	}
797
-	else {
798
-		return substr_count($texte, "\n", $debut, $fin - $debut);
799
-	}
794
+    if (is_null($fin)) {
795
+        return substr_count($texte, "\n", $debut);
796
+    }
797
+    else {
798
+        return substr_count($texte, "\n", $debut, $fin - $debut);
799
+    }
800 800
 }
801 801
 
802 802
 
@@ -812,87 +812,87 @@  discard block
 block discarded – undo
812 812
  * @return array|null
813 813
  */
814 814
 function public_trouver_premiere_boucle($texte, $id_parent, $descr, $pos_debut_texte = 0) {
815
-	$premiere_boucle = null;
816
-	$pos_derniere_boucle_anonyme = $pos_debut_texte;
817
-
818
-	$current_pos = $pos_debut_texte;
819
-	while (($pos_boucle = strpos($texte, BALISE_BOUCLE, $current_pos)) !== false) {
820
-		$current_pos = $pos_boucle + 1;
821
-		$pos_parent = strpos($texte, '(', $pos_boucle);
822
-
823
-		$id_boucle = '';
824
-		if ($pos_parent !== false) {
825
-			$id_boucle = trim(substr($texte, $pos_boucle + strlen(BALISE_BOUCLE), $pos_parent - $pos_boucle - strlen(BALISE_BOUCLE)));
826
-		}
827
-		if (
828
-			$pos_parent === false
829
-			or (strlen($id_boucle) and !(is_numeric($id_boucle) or strpos($id_boucle, '_') === 0))
830
-		) {
831
-			$result = new Boucle();
832
-			$result->id_parent = $id_parent;
833
-			$result->descr = $descr;
834
-
835
-			// un id_boucle pour l'affichage de l'erreur
836
-			if (!strlen($id_boucle)) {
837
-				$id_boucle = substr($texte, $pos_boucle + strlen(BALISE_BOUCLE), 15);
838
-			}
839
-			$result->id_boucle = $id_boucle;
840
-			$err_b = ['zbug_erreur_boucle_syntaxe', ['id' => $id_boucle]];
841
-			erreur_squelette($err_b, $result);
842
-
843
-			continue;
844
-		}
845
-		else {
846
-			$boucle = [
847
-				'id_boucle' => $id_boucle,
848
-				'id_boucle_err' => $id_boucle,
849
-				'debut_boucle' => $pos_boucle,
850
-				'pos_boucle' => $pos_boucle,
851
-				'pos_parent' => $pos_parent,
852
-				'pos_precond' => false,
853
-				'pos_precond_inside' => false,
854
-				'pos_preaff' => false,
855
-				'pos_preaff_inside' => false,
856
-			];
857
-
858
-			// un id_boucle pour l'affichage de l'erreur sur les boucle anonymes
859
-			if (!strlen($id_boucle)) {
860
-				$boucle['id_boucle_err'] = substr($texte, $pos_boucle + strlen(BALISE_BOUCLE), 15);
861
-			}
862
-
863
-			// trouver sa position de depart reelle : au <Bxx> ou au <BBxx>
864
-			$precond_boucle = BALISE_PRECOND_BOUCLE . $id_boucle . '>';
865
-			$pos_precond = strpos($texte, $precond_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
866
-			if (
867
-				$pos_precond !== false
868
-				and $pos_precond < $boucle['debut_boucle']
869
-			) {
870
-				$boucle['debut_boucle'] = $pos_precond;
871
-				$boucle['pos_precond'] = $pos_precond;
872
-				$boucle['pos_precond_inside'] = $pos_precond + strlen($precond_boucle);
873
-			}
874
-
875
-			$preaff_boucle = BALISE_PREAFF_BOUCLE . $id_boucle . '>';
876
-			$pos_preaff = strpos($texte, $preaff_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
877
-			if (
878
-				$pos_preaff !== false
879
-				and $pos_preaff < $boucle['debut_boucle']
880
-			) {
881
-				$boucle['debut_boucle'] = $pos_preaff;
882
-				$boucle['pos_preaff'] = $pos_preaff;
883
-				$boucle['pos_preaff_inside'] = $pos_preaff + strlen($preaff_boucle);
884
-			}
885
-			if (!strlen($id_boucle)) {
886
-				$pos_derniere_boucle_anonyme = $pos_boucle;
887
-			}
888
-
889
-			if (is_null($premiere_boucle) or $premiere_boucle['debut_boucle'] > $boucle['debut_boucle']) {
890
-				$premiere_boucle = $boucle;
891
-			}
892
-		}
893
-	}
894
-
895
-	return $premiere_boucle;
815
+    $premiere_boucle = null;
816
+    $pos_derniere_boucle_anonyme = $pos_debut_texte;
817
+
818
+    $current_pos = $pos_debut_texte;
819
+    while (($pos_boucle = strpos($texte, BALISE_BOUCLE, $current_pos)) !== false) {
820
+        $current_pos = $pos_boucle + 1;
821
+        $pos_parent = strpos($texte, '(', $pos_boucle);
822
+
823
+        $id_boucle = '';
824
+        if ($pos_parent !== false) {
825
+            $id_boucle = trim(substr($texte, $pos_boucle + strlen(BALISE_BOUCLE), $pos_parent - $pos_boucle - strlen(BALISE_BOUCLE)));
826
+        }
827
+        if (
828
+            $pos_parent === false
829
+            or (strlen($id_boucle) and !(is_numeric($id_boucle) or strpos($id_boucle, '_') === 0))
830
+        ) {
831
+            $result = new Boucle();
832
+            $result->id_parent = $id_parent;
833
+            $result->descr = $descr;
834
+
835
+            // un id_boucle pour l'affichage de l'erreur
836
+            if (!strlen($id_boucle)) {
837
+                $id_boucle = substr($texte, $pos_boucle + strlen(BALISE_BOUCLE), 15);
838
+            }
839
+            $result->id_boucle = $id_boucle;
840
+            $err_b = ['zbug_erreur_boucle_syntaxe', ['id' => $id_boucle]];
841
+            erreur_squelette($err_b, $result);
842
+
843
+            continue;
844
+        }
845
+        else {
846
+            $boucle = [
847
+                'id_boucle' => $id_boucle,
848
+                'id_boucle_err' => $id_boucle,
849
+                'debut_boucle' => $pos_boucle,
850
+                'pos_boucle' => $pos_boucle,
851
+                'pos_parent' => $pos_parent,
852
+                'pos_precond' => false,
853
+                'pos_precond_inside' => false,
854
+                'pos_preaff' => false,
855
+                'pos_preaff_inside' => false,
856
+            ];
857
+
858
+            // un id_boucle pour l'affichage de l'erreur sur les boucle anonymes
859
+            if (!strlen($id_boucle)) {
860
+                $boucle['id_boucle_err'] = substr($texte, $pos_boucle + strlen(BALISE_BOUCLE), 15);
861
+            }
862
+
863
+            // trouver sa position de depart reelle : au <Bxx> ou au <BBxx>
864
+            $precond_boucle = BALISE_PRECOND_BOUCLE . $id_boucle . '>';
865
+            $pos_precond = strpos($texte, $precond_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
866
+            if (
867
+                $pos_precond !== false
868
+                and $pos_precond < $boucle['debut_boucle']
869
+            ) {
870
+                $boucle['debut_boucle'] = $pos_precond;
871
+                $boucle['pos_precond'] = $pos_precond;
872
+                $boucle['pos_precond_inside'] = $pos_precond + strlen($precond_boucle);
873
+            }
874
+
875
+            $preaff_boucle = BALISE_PREAFF_BOUCLE . $id_boucle . '>';
876
+            $pos_preaff = strpos($texte, $preaff_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
877
+            if (
878
+                $pos_preaff !== false
879
+                and $pos_preaff < $boucle['debut_boucle']
880
+            ) {
881
+                $boucle['debut_boucle'] = $pos_preaff;
882
+                $boucle['pos_preaff'] = $pos_preaff;
883
+                $boucle['pos_preaff_inside'] = $pos_preaff + strlen($preaff_boucle);
884
+            }
885
+            if (!strlen($id_boucle)) {
886
+                $pos_derniere_boucle_anonyme = $pos_boucle;
887
+            }
888
+
889
+            if (is_null($premiere_boucle) or $premiere_boucle['debut_boucle'] > $boucle['debut_boucle']) {
890
+                $premiere_boucle = $boucle;
891
+            }
892
+        }
893
+    }
894
+
895
+    return $premiere_boucle;
896 896
 }
897 897
 
898 898
 /**
@@ -907,68 +907,68 @@  discard block
 block discarded – undo
907 907
  * @return mixed
908 908
  */
909 909
 function public_trouver_fin_boucle($texte, $id_parent, $boucle, $pos_debut_texte, $result) {
910
-	$id_boucle = $boucle['id_boucle'];
911
-	$pos_courante = $pos_debut_texte;
912
-
913
-	$boucle['pos_postcond'] = false;
914
-	$boucle['pos_postcond_inside'] = false;
915
-	$boucle['pos_altern'] = false;
916
-	$boucle['pos_altern_inside'] = false;
917
-	$boucle['pos_postaff'] = false;
918
-	$boucle['pos_postaff_inside'] = false;
919
-
920
-	$pos_anonyme_next = null;
921
-	// si c'est une boucle anonyme, chercher la position de la prochaine boucle anonyme
922
-	if (!strlen($id_boucle)) {
923
-		$pos_anonyme_next = strpos($texte, BALISE_BOUCLE . '(', $pos_courante);
924
-	}
925
-
926
-	//
927
-	// 1. Recuperer la partie conditionnelle apres
928
-	//
929
-	$apres_boucle = BALISE_POSTCOND_BOUCLE . $id_boucle . '>';
930
-	$pos_apres = strpos($texte, $apres_boucle, $pos_courante);
931
-	if (
932
-		$pos_apres !== false
933
-		and (!$pos_anonyme_next or $pos_apres < $pos_anonyme_next)
934
-	) {
935
-		$boucle['pos_postcond'] = $pos_apres;
936
-		$pos_apres += strlen($apres_boucle);
937
-		$boucle['pos_postcond_inside'] = $pos_apres;
938
-		$pos_courante = $pos_apres ;
939
-	}
940
-
941
-	//
942
-	// 2. Récuperer la partie alternative apres
943
-	//
944
-	$altern_boucle = BALISE_ALT_BOUCLE . $id_boucle . '>';
945
-	$pos_altern = strpos($texte, $altern_boucle, $pos_courante);
946
-	if (
947
-		$pos_altern !== false
948
-		and (!$pos_anonyme_next or $pos_altern < $pos_anonyme_next)
949
-	) {
950
-		$boucle['pos_altern'] = $pos_altern;
951
-		$pos_altern += strlen($altern_boucle);
952
-		$boucle['pos_altern_inside'] = $pos_altern;
953
-		$pos_courante = $pos_altern;
954
-	}
955
-
956
-	//
957
-	// 3. Recuperer la partie footer non alternative
958
-	//
959
-	$postaff_boucle = BALISE_POSTAFF_BOUCLE . $id_boucle . '>';
960
-	$pos_postaff = strpos($texte, $postaff_boucle, $pos_courante);
961
-	if (
962
-		$pos_postaff !== false
963
-		and (!$pos_anonyme_next or $pos_postaff < $pos_anonyme_next)
964
-	) {
965
-		$boucle['pos_postaff'] = $pos_postaff;
966
-		$pos_postaff += strlen($postaff_boucle);
967
-		$boucle['pos_postaff_inside'] = $pos_postaff;
968
-		$pos_courante = $pos_postaff ;
969
-	}
970
-
971
-	return $boucle;
910
+    $id_boucle = $boucle['id_boucle'];
911
+    $pos_courante = $pos_debut_texte;
912
+
913
+    $boucle['pos_postcond'] = false;
914
+    $boucle['pos_postcond_inside'] = false;
915
+    $boucle['pos_altern'] = false;
916
+    $boucle['pos_altern_inside'] = false;
917
+    $boucle['pos_postaff'] = false;
918
+    $boucle['pos_postaff_inside'] = false;
919
+
920
+    $pos_anonyme_next = null;
921
+    // si c'est une boucle anonyme, chercher la position de la prochaine boucle anonyme
922
+    if (!strlen($id_boucle)) {
923
+        $pos_anonyme_next = strpos($texte, BALISE_BOUCLE . '(', $pos_courante);
924
+    }
925
+
926
+    //
927
+    // 1. Recuperer la partie conditionnelle apres
928
+    //
929
+    $apres_boucle = BALISE_POSTCOND_BOUCLE . $id_boucle . '>';
930
+    $pos_apres = strpos($texte, $apres_boucle, $pos_courante);
931
+    if (
932
+        $pos_apres !== false
933
+        and (!$pos_anonyme_next or $pos_apres < $pos_anonyme_next)
934
+    ) {
935
+        $boucle['pos_postcond'] = $pos_apres;
936
+        $pos_apres += strlen($apres_boucle);
937
+        $boucle['pos_postcond_inside'] = $pos_apres;
938
+        $pos_courante = $pos_apres ;
939
+    }
940
+
941
+    //
942
+    // 2. Récuperer la partie alternative apres
943
+    //
944
+    $altern_boucle = BALISE_ALT_BOUCLE . $id_boucle . '>';
945
+    $pos_altern = strpos($texte, $altern_boucle, $pos_courante);
946
+    if (
947
+        $pos_altern !== false
948
+        and (!$pos_anonyme_next or $pos_altern < $pos_anonyme_next)
949
+    ) {
950
+        $boucle['pos_altern'] = $pos_altern;
951
+        $pos_altern += strlen($altern_boucle);
952
+        $boucle['pos_altern_inside'] = $pos_altern;
953
+        $pos_courante = $pos_altern;
954
+    }
955
+
956
+    //
957
+    // 3. Recuperer la partie footer non alternative
958
+    //
959
+    $postaff_boucle = BALISE_POSTAFF_BOUCLE . $id_boucle . '>';
960
+    $pos_postaff = strpos($texte, $postaff_boucle, $pos_courante);
961
+    if (
962
+        $pos_postaff !== false
963
+        and (!$pos_anonyme_next or $pos_postaff < $pos_anonyme_next)
964
+    ) {
965
+        $boucle['pos_postaff'] = $pos_postaff;
966
+        $pos_postaff += strlen($postaff_boucle);
967
+        $boucle['pos_postaff_inside'] = $pos_postaff;
968
+        $pos_courante = $pos_postaff ;
969
+    }
970
+
971
+    return $boucle;
972 972
 }
973 973
 
974 974
 
@@ -978,21 +978,21 @@  discard block
 block discarded – undo
978 978
  * @param null|object $boucle
979 979
  */
980 980
 function phraser_boucle_placeholder(&$champ, $boucle_placeholder = null, $boucle = null) {
981
-	static $boucles_connues = [];
982
-	// si c'est un appel pour memoriser une boucle, memorisons la
983
-	if (is_string($champ) and !empty($boucle_placeholder) and !empty($boucle)) {
984
-		$boucles_connues[$boucle_placeholder][$champ] = &$boucle;
985
-	}
986
-	else {
987
-		if (!empty($champ->nom_champ) and !empty($boucles_connues[$champ->nom_champ])) {
988
-			$placeholder = $champ->nom_champ;
989
-			$id = reset($champ->param[0][1]);
990
-			$id = $id->texte;
991
-			if (!empty($boucles_connues[$placeholder][$id])) {
992
-				$champ = $boucles_connues[$placeholder][$id];
993
-			}
994
-		}
995
-	}
981
+    static $boucles_connues = [];
982
+    // si c'est un appel pour memoriser une boucle, memorisons la
983
+    if (is_string($champ) and !empty($boucle_placeholder) and !empty($boucle)) {
984
+        $boucles_connues[$boucle_placeholder][$champ] = &$boucle;
985
+    }
986
+    else {
987
+        if (!empty($champ->nom_champ) and !empty($boucles_connues[$champ->nom_champ])) {
988
+            $placeholder = $champ->nom_champ;
989
+            $id = reset($champ->param[0][1]);
990
+            $id = $id->texte;
991
+            if (!empty($boucles_connues[$placeholder][$id])) {
992
+                $champ = $boucles_connues[$placeholder][$id];
993
+            }
994
+        }
995
+    }
996 996
 }
997 997
 
998 998
 
@@ -1005,274 +1005,274 @@  discard block
 block discarded – undo
1005 1005
  * @return string
1006 1006
  */
1007 1007
 function public_generer_boucle_placeholder($id_boucle, &$boucle, $boucle_placeholder, $nb_lignes) {
1008
-	$placeholder = "[(#{$boucle_placeholder}{" . $id_boucle . '})' . str_pad('', $nb_lignes, "\n") . ']';
1009
-	//memoriser la boucle a reinjecter
1010
-	$id_boucle = "$id_boucle";
1011
-	phraser_boucle_placeholder($id_boucle, $boucle_placeholder, $boucle);
1012
-	return $placeholder;
1008
+    $placeholder = "[(#{$boucle_placeholder}{" . $id_boucle . '})' . str_pad('', $nb_lignes, "\n") . ']';
1009
+    //memoriser la boucle a reinjecter
1010
+    $id_boucle = "$id_boucle";
1011
+    phraser_boucle_placeholder($id_boucle, $boucle_placeholder, $boucle);
1012
+    return $placeholder;
1013 1013
 }
1014 1014
 
1015 1015
 function public_phraser_html_dist($texte, $id_parent, &$boucles, $descr, $ligne_debut_texte = 1, $boucle_placeholder = null) {
1016 1016
 
1017
-	$all_res = [];
1018
-	// definir un placholder pour les boucles dont on est sur d'avoir aucune occurence dans le squelette
1019
-	if (is_null($boucle_placeholder)) {
1020
-		do {
1021
-			$boucle_placeholder = 'BOUCLE_PLACEHOLDER_' . strtoupper(md5(uniqid()));
1022
-		} while (strpos($texte, $boucle_placeholder) !== false);
1023
-	}
1024
-
1025
-	$ligne_debut_initial = $ligne_debut_texte;
1026
-	$pos_debut_texte = 0;
1027
-	while ($boucle = public_trouver_premiere_boucle($texte, $id_parent, $descr, $pos_debut_texte)) {
1028
-		$err_b = ''; // indiquera s'il y a eu une erreur
1029
-		$result = new Boucle();
1030
-		$result->id_parent = $id_parent;
1031
-		$result->descr = $descr;
1032
-
1033
-		$pos_courante = $boucle['pos_boucle'];
1034
-		$pos_parent = $boucle['pos_parent'];
1035
-		$id_boucle_search = $id_boucle = $boucle['id_boucle'];
1036
-
1037
-		$ligne_preaff = $ligne_avant = $ligne_milieu = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_parent);
1038
-
1039
-		// boucle anonyme ?
1040
-		if (!strlen($id_boucle)) {
1041
-			$id_boucle = '_anon_L' . $ligne_milieu . '_' . substr(md5('anonyme:' . $id_parent . ':' . json_encode($boucle, JSON_THROW_ON_ERROR)), 0, 8);
1042
-		}
1043
-
1044
-		$pos_debut_boucle = $pos_courante;
1045
-
1046
-		$pos_milieu = $pos_parent;
1047
-
1048
-		// Regarder si on a une partie conditionnelle avant <B_xxx>
1049
-		if ($boucle['pos_precond'] !== false) {
1050
-			$pos_debut_boucle = $boucle['pos_precond'];
1051
-
1052
-			$pos_avant = $boucle['pos_precond_inside'];
1053
-			$result->avant = substr($texte, $pos_avant, $pos_courante - $pos_avant);
1054
-			$ligne_avant = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_avant);
1055
-		}
1056
-
1057
-		// Regarder si on a une partie inconditionnelle avant <BB_xxx>
1058
-		if ($boucle['pos_preaff'] !== false) {
1059
-			$end_preaff = $pos_debut_boucle;
1060
-
1061
-			$pos_preaff = $boucle['pos_preaff_inside'];
1062
-			$result->preaff = substr($texte, $pos_preaff, $end_preaff - $pos_preaff);
1063
-			$ligne_preaff = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_preaff);
1064
-		}
1065
-
1066
-		$result->id_boucle = $id_boucle;
1067
-
1068
-		if (
1069
-			!preg_match(SPEC_BOUCLE, $texte, $match, 0, $pos_milieu)
1070
-			or ($pos_match = strpos($texte, (string) $match[0], $pos_milieu)) === false
1071
-			or $pos_match > $pos_milieu
1072
-		) {
1073
-			$err_b = ['zbug_erreur_boucle_syntaxe', ['id' => $id_boucle]];
1074
-			erreur_squelette($err_b, $result);
1075
-
1076
-			$ligne_debut_texte += public_compte_ligne($texte, $pos_debut_texte, $pos_courante + 1);
1077
-			$pos_debut_texte = $pos_courante + 1;
1078
-			continue;
1079
-		}
1080
-
1081
-		$result->type_requete = $match[0];
1082
-		$pos_milieu += strlen($match[0]);
1083
-		$pos_courante = $pos_milieu; // on s'en sert pour compter les lignes plus precisemment
1084
-
1085
-		$type = $match[1];
1086
-		$jointures = trim($match[2]);
1087
-		$table_optionnelle = ($match[3]);
1088
-		if ($jointures) {
1089
-			// on affecte pas ici les jointures explicites, mais dans la compilation
1090
-			// ou elles seront completees des jointures declarees
1091
-			$result->jointures_explicites = $jointures;
1092
-		}
1093
-
1094
-		if ($table_optionnelle) {
1095
-			$result->table_optionnelle = $type;
1096
-		}
1097
-
1098
-		// 1ere passe sur les criteres, vu comme des arguments sans fct
1099
-		// Resultat mis dans result->param
1100
-		$pos_fin_criteres = $pos_milieu;
1101
-		phraser_args($texte, '/>', '', $all_res, $result, $pos_fin_criteres);
1102
-
1103
-		// En 2e passe result->criteres contiendra un tableau
1104
-		// pour l'instant on met le source (chaine) :
1105
-		// si elle reste ici au final, c'est qu'elle contient une erreur
1106
-		$pos_courante = $pos_fin_criteres; // on s'en sert pour compter les lignes plus precisemment
1107
-		$result->criteres = substr($texte, $pos_milieu, $pos_fin_criteres - $pos_milieu);
1108
-		$pos_milieu = $pos_fin_criteres;
1109
-
1110
-		//
1111
-		// Recuperer la fin :
1112
-		//
1113
-		if ($texte[$pos_milieu] === '/') {
1114
-			// boucle autofermante : pas de partie conditionnelle apres
1115
-			$pos_courante += 2;
1116
-			$result->milieu = '';
1117
-		} else {
1118
-			$pos_milieu += 1;
1119
-
1120
-			$fin_boucle = BALISE_FIN_BOUCLE . $id_boucle_search . '>';
1121
-			$pos_fin = strpos($texte, $fin_boucle, $pos_milieu);
1122
-			if ($pos_fin === false) {
1123
-				$err_b = [
1124
-					'zbug_erreur_boucle_fermant',
1125
-					['id' => $id_boucle]
1126
-				];
1127
-				erreur_squelette($err_b, $result);
1128
-				$pos_courante += strlen($fin_boucle);
1129
-			}
1130
-			else {
1131
-				// verifier une eventuelle imbrication d'une boucle homonyme
1132
-				// (interdite, generera une erreur plus loin, mais permet de signaler la bonne erreur)
1133
-				$search_debut_boucle = BALISE_BOUCLE . $id_boucle_search . '(';
1134
-				$search_from = $pos_milieu;
1135
-				$nb_open = 1;
1136
-				$nb_close = 1;
1137
-				$maxiter = 0;
1138
-				do {
1139
-					while (
1140
-						$nb_close < $nb_open
1141
-						and $p = strpos($texte, $fin_boucle, $pos_fin + 1)
1142
-					) {
1143
-						$nb_close++;
1144
-						$pos_fin = $p;
1145
-					}
1146
-					// si on a pas trouve assez de boucles fermantes, sortir de la, on a fait de notre mieux
1147
-					if ($nb_close < $nb_open) {
1148
-						break;
1149
-					}
1150
-					while (
1151
-						$p = strpos($texte, $search_debut_boucle, $search_from)
1152
-						and $p < $pos_fin
1153
-					) {
1154
-						$nb_open++;
1155
-						$search_from = $p + 1;
1156
-					}
1157
-				} while ($nb_close < $nb_open and $maxiter++ < 5);
1158
-
1159
-				$pos_courante = $pos_fin + strlen($fin_boucle);
1160
-			}
1161
-			$result->milieu = substr($texte, $pos_milieu, $pos_fin - $pos_milieu);
1162
-		}
1163
-
1164
-		$ligne_suite = $ligne_apres = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_courante);
1165
-		$boucle = public_trouver_fin_boucle($texte, $id_parent, $boucle, $pos_courante, $result);
1166
-
1167
-		//
1168
-		// 1. Partie conditionnelle apres ?
1169
-		//
1170
-		if ($boucle['pos_postcond']) {
1171
-			$result->apres = substr($texte, $pos_courante, $boucle['pos_postcond'] - $pos_courante);
1172
-			$ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postcond_inside']);
1173
-			$pos_courante = $boucle['pos_postcond_inside'] ;
1174
-		}
1175
-
1176
-
1177
-		//
1178
-		// 2. Partie alternative apres ?
1179
-		//
1180
-		$ligne_altern = $ligne_suite;
1181
-		if ($boucle['pos_altern']) {
1182
-			$result->altern = substr($texte, $pos_courante, $boucle['pos_altern'] - $pos_courante);
1183
-			$ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_altern_inside']);
1184
-			$pos_courante = $boucle['pos_altern_inside'];
1185
-		}
1186
-
1187
-		//
1188
-		// 3. Partie footer non alternative ?
1189
-		//
1190
-		$ligne_postaff = $ligne_suite;
1191
-		if ($boucle['pos_postaff']) {
1192
-			$result->postaff = substr($texte, $pos_courante, $boucle['pos_postaff'] - $pos_courante);
1193
-			$ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postaff_inside']);
1194
-			$pos_courante = $boucle['pos_postaff_inside'];
1195
-		}
1196
-
1197
-		$result->ligne = $ligne_preaff;
1198
-
1199
-		if ($p = strpos($type, ':')) {
1200
-			$result->sql_serveur = substr($type, 0, $p);
1201
-			$type = substr($type, $p + 1);
1202
-		}
1203
-		$soustype = strtolower($type);
1204
-
1205
-		if (!isset($GLOBALS['table_des_tables'][$soustype])) {
1206
-			$soustype = $type;
1207
-		}
1208
-
1209
-		$result->type_requete = $soustype;
1210
-		// Lancer la 2e passe sur les criteres si la 1ere etait bonne
1211
-		if (!is_array($result->param)) {
1212
-			$err_b = true;
1213
-		} else {
1214
-			phraser_criteres($result->param, $result);
1215
-			if (strncasecmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF)) == 0) {
1216
-				$result->type_requete = TYPE_RECURSIF;
1217
-				$args = $result->param;
1218
-				array_unshift(
1219
-					$args,
1220
-					substr($type, strlen(TYPE_RECURSIF))
1221
-				);
1222
-				$result->param = $args;
1223
-			}
1224
-		}
1225
-
1226
-		$descr['id_mere_contexte'] = $id_boucle;
1227
-		$result->milieu = public_phraser_html_dist($result->milieu, $id_boucle, $boucles, $descr, $ligne_milieu, $boucle_placeholder);
1228
-		// reserver la place dans la pile des boucles pour compiler ensuite dans le bon ordre
1229
-		// ie les boucles qui apparaissent dans les partie conditionnelles doivent etre compilees apres cette boucle
1230
-		// si il y a deja une boucle de ce nom, cela declenchera une erreur ensuite
1231
-		if (empty($boucles[$id_boucle])) {
1232
-			$boucles[$id_boucle] = null;
1233
-		}
1234
-		$result->preaff = public_phraser_html_dist($result->preaff, $id_parent, $boucles, $descr, $ligne_preaff, $boucle_placeholder);
1235
-		$result->avant = public_phraser_html_dist($result->avant, $id_parent, $boucles, $descr, $ligne_avant, $boucle_placeholder);
1236
-		$result->apres = public_phraser_html_dist($result->apres, $id_parent, $boucles, $descr, $ligne_apres, $boucle_placeholder);
1237
-		$result->altern = public_phraser_html_dist($result->altern, $id_parent, $boucles, $descr, $ligne_altern, $boucle_placeholder);
1238
-		$result->postaff = public_phraser_html_dist($result->postaff, $id_parent, $boucles, $descr, $ligne_postaff, $boucle_placeholder);
1239
-
1240
-		// Prevenir le generateur de code que le squelette est faux
1241
-		if ($err_b) {
1242
-			$result->type_requete = false;
1243
-		}
1244
-
1245
-		// Verifier qu'il n'y a pas double definition
1246
-		// apres analyse des sous-parties (pas avant).
1247
-		if (!empty($boucles[$id_boucle])) {
1248
-			if ($boucles[$id_boucle]->type_requete !== false) {
1249
-				$err_b_d = [
1250
-					'zbug_erreur_boucle_double',
1251
-					['id' => $id_boucle]
1252
-				];
1253
-				erreur_squelette($err_b_d, $result);
1254
-				// Prevenir le generateur de code que le squelette est faux
1255
-				$boucles[$id_boucle]->type_requete = false;
1256
-			}
1257
-		} else {
1258
-			$boucles[$id_boucle] = $result;
1259
-		}
1260
-
1261
-		// remplacer la boucle par un placeholder qui compte le meme nombre de lignes
1262
-		$placeholder = public_generer_boucle_placeholder($id_boucle, $boucles[$id_boucle], $boucle_placeholder, $ligne_suite - $ligne_debut_texte);
1263
-		$longueur_boucle = $pos_courante - $boucle['debut_boucle'];
1264
-		$texte = substr_replace($texte, $placeholder, $boucle['debut_boucle'], $longueur_boucle);
1265
-		$pos_courante = $pos_courante - $longueur_boucle + strlen($placeholder);
1266
-
1267
-		// phraser la partie avant le debut de la boucle
1268
-		#$all_res = phraser_champs_etendus(substr($texte, $pos_debut_texte, $boucle['debut_boucle'] - $pos_debut_texte), $ligne_debut_texte, $all_res);
1269
-		#$all_res[] = &$boucles[$id_boucle];
1270
-
1271
-		$ligne_debut_texte = $ligne_suite;
1272
-		$pos_debut_texte = $pos_courante;
1273
-	}
1274
-
1275
-	$all_res = phraser_champs_etendus($texte, $ligne_debut_initial, $all_res);
1276
-
1277
-	return $all_res;
1017
+    $all_res = [];
1018
+    // definir un placholder pour les boucles dont on est sur d'avoir aucune occurence dans le squelette
1019
+    if (is_null($boucle_placeholder)) {
1020
+        do {
1021
+            $boucle_placeholder = 'BOUCLE_PLACEHOLDER_' . strtoupper(md5(uniqid()));
1022
+        } while (strpos($texte, $boucle_placeholder) !== false);
1023
+    }
1024
+
1025
+    $ligne_debut_initial = $ligne_debut_texte;
1026
+    $pos_debut_texte = 0;
1027
+    while ($boucle = public_trouver_premiere_boucle($texte, $id_parent, $descr, $pos_debut_texte)) {
1028
+        $err_b = ''; // indiquera s'il y a eu une erreur
1029
+        $result = new Boucle();
1030
+        $result->id_parent = $id_parent;
1031
+        $result->descr = $descr;
1032
+
1033
+        $pos_courante = $boucle['pos_boucle'];
1034
+        $pos_parent = $boucle['pos_parent'];
1035
+        $id_boucle_search = $id_boucle = $boucle['id_boucle'];
1036
+
1037
+        $ligne_preaff = $ligne_avant = $ligne_milieu = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_parent);
1038
+
1039
+        // boucle anonyme ?
1040
+        if (!strlen($id_boucle)) {
1041
+            $id_boucle = '_anon_L' . $ligne_milieu . '_' . substr(md5('anonyme:' . $id_parent . ':' . json_encode($boucle, JSON_THROW_ON_ERROR)), 0, 8);
1042
+        }
1043
+
1044
+        $pos_debut_boucle = $pos_courante;
1045
+
1046
+        $pos_milieu = $pos_parent;
1047
+
1048
+        // Regarder si on a une partie conditionnelle avant <B_xxx>
1049
+        if ($boucle['pos_precond'] !== false) {
1050
+            $pos_debut_boucle = $boucle['pos_precond'];
1051
+
1052
+            $pos_avant = $boucle['pos_precond_inside'];
1053
+            $result->avant = substr($texte, $pos_avant, $pos_courante - $pos_avant);
1054
+            $ligne_avant = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_avant);
1055
+        }
1056
+
1057
+        // Regarder si on a une partie inconditionnelle avant <BB_xxx>
1058
+        if ($boucle['pos_preaff'] !== false) {
1059
+            $end_preaff = $pos_debut_boucle;
1060
+
1061
+            $pos_preaff = $boucle['pos_preaff_inside'];
1062
+            $result->preaff = substr($texte, $pos_preaff, $end_preaff - $pos_preaff);
1063
+            $ligne_preaff = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_preaff);
1064
+        }
1065
+
1066
+        $result->id_boucle = $id_boucle;
1067
+
1068
+        if (
1069
+            !preg_match(SPEC_BOUCLE, $texte, $match, 0, $pos_milieu)
1070
+            or ($pos_match = strpos($texte, (string) $match[0], $pos_milieu)) === false
1071
+            or $pos_match > $pos_milieu
1072
+        ) {
1073
+            $err_b = ['zbug_erreur_boucle_syntaxe', ['id' => $id_boucle]];
1074
+            erreur_squelette($err_b, $result);
1075
+
1076
+            $ligne_debut_texte += public_compte_ligne($texte, $pos_debut_texte, $pos_courante + 1);
1077
+            $pos_debut_texte = $pos_courante + 1;
1078
+            continue;
1079
+        }
1080
+
1081
+        $result->type_requete = $match[0];
1082
+        $pos_milieu += strlen($match[0]);
1083
+        $pos_courante = $pos_milieu; // on s'en sert pour compter les lignes plus precisemment
1084
+
1085
+        $type = $match[1];
1086
+        $jointures = trim($match[2]);
1087
+        $table_optionnelle = ($match[3]);
1088
+        if ($jointures) {
1089
+            // on affecte pas ici les jointures explicites, mais dans la compilation
1090
+            // ou elles seront completees des jointures declarees
1091
+            $result->jointures_explicites = $jointures;
1092
+        }
1093
+
1094
+        if ($table_optionnelle) {
1095
+            $result->table_optionnelle = $type;
1096
+        }
1097
+
1098
+        // 1ere passe sur les criteres, vu comme des arguments sans fct
1099
+        // Resultat mis dans result->param
1100
+        $pos_fin_criteres = $pos_milieu;
1101
+        phraser_args($texte, '/>', '', $all_res, $result, $pos_fin_criteres);
1102
+
1103
+        // En 2e passe result->criteres contiendra un tableau
1104
+        // pour l'instant on met le source (chaine) :
1105
+        // si elle reste ici au final, c'est qu'elle contient une erreur
1106
+        $pos_courante = $pos_fin_criteres; // on s'en sert pour compter les lignes plus precisemment
1107
+        $result->criteres = substr($texte, $pos_milieu, $pos_fin_criteres - $pos_milieu);
1108
+        $pos_milieu = $pos_fin_criteres;
1109
+
1110
+        //
1111
+        // Recuperer la fin :
1112
+        //
1113
+        if ($texte[$pos_milieu] === '/') {
1114
+            // boucle autofermante : pas de partie conditionnelle apres
1115
+            $pos_courante += 2;
1116
+            $result->milieu = '';
1117
+        } else {
1118
+            $pos_milieu += 1;
1119
+
1120
+            $fin_boucle = BALISE_FIN_BOUCLE . $id_boucle_search . '>';
1121
+            $pos_fin = strpos($texte, $fin_boucle, $pos_milieu);
1122
+            if ($pos_fin === false) {
1123
+                $err_b = [
1124
+                    'zbug_erreur_boucle_fermant',
1125
+                    ['id' => $id_boucle]
1126
+                ];
1127
+                erreur_squelette($err_b, $result);
1128
+                $pos_courante += strlen($fin_boucle);
1129
+            }
1130
+            else {
1131
+                // verifier une eventuelle imbrication d'une boucle homonyme
1132
+                // (interdite, generera une erreur plus loin, mais permet de signaler la bonne erreur)
1133
+                $search_debut_boucle = BALISE_BOUCLE . $id_boucle_search . '(';
1134
+                $search_from = $pos_milieu;
1135
+                $nb_open = 1;
1136
+                $nb_close = 1;
1137
+                $maxiter = 0;
1138
+                do {
1139
+                    while (
1140
+                        $nb_close < $nb_open
1141
+                        and $p = strpos($texte, $fin_boucle, $pos_fin + 1)
1142
+                    ) {
1143
+                        $nb_close++;
1144
+                        $pos_fin = $p;
1145
+                    }
1146
+                    // si on a pas trouve assez de boucles fermantes, sortir de la, on a fait de notre mieux
1147
+                    if ($nb_close < $nb_open) {
1148
+                        break;
1149
+                    }
1150
+                    while (
1151
+                        $p = strpos($texte, $search_debut_boucle, $search_from)
1152
+                        and $p < $pos_fin
1153
+                    ) {
1154
+                        $nb_open++;
1155
+                        $search_from = $p + 1;
1156
+                    }
1157
+                } while ($nb_close < $nb_open and $maxiter++ < 5);
1158
+
1159
+                $pos_courante = $pos_fin + strlen($fin_boucle);
1160
+            }
1161
+            $result->milieu = substr($texte, $pos_milieu, $pos_fin - $pos_milieu);
1162
+        }
1163
+
1164
+        $ligne_suite = $ligne_apres = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_courante);
1165
+        $boucle = public_trouver_fin_boucle($texte, $id_parent, $boucle, $pos_courante, $result);
1166
+
1167
+        //
1168
+        // 1. Partie conditionnelle apres ?
1169
+        //
1170
+        if ($boucle['pos_postcond']) {
1171
+            $result->apres = substr($texte, $pos_courante, $boucle['pos_postcond'] - $pos_courante);
1172
+            $ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postcond_inside']);
1173
+            $pos_courante = $boucle['pos_postcond_inside'] ;
1174
+        }
1175
+
1176
+
1177
+        //
1178
+        // 2. Partie alternative apres ?
1179
+        //
1180
+        $ligne_altern = $ligne_suite;
1181
+        if ($boucle['pos_altern']) {
1182
+            $result->altern = substr($texte, $pos_courante, $boucle['pos_altern'] - $pos_courante);
1183
+            $ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_altern_inside']);
1184
+            $pos_courante = $boucle['pos_altern_inside'];
1185
+        }
1186
+
1187
+        //
1188
+        // 3. Partie footer non alternative ?
1189
+        //
1190
+        $ligne_postaff = $ligne_suite;
1191
+        if ($boucle['pos_postaff']) {
1192
+            $result->postaff = substr($texte, $pos_courante, $boucle['pos_postaff'] - $pos_courante);
1193
+            $ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postaff_inside']);
1194
+            $pos_courante = $boucle['pos_postaff_inside'];
1195
+        }
1196
+
1197
+        $result->ligne = $ligne_preaff;
1198
+
1199
+        if ($p = strpos($type, ':')) {
1200
+            $result->sql_serveur = substr($type, 0, $p);
1201
+            $type = substr($type, $p + 1);
1202
+        }
1203
+        $soustype = strtolower($type);
1204
+
1205
+        if (!isset($GLOBALS['table_des_tables'][$soustype])) {
1206
+            $soustype = $type;
1207
+        }
1208
+
1209
+        $result->type_requete = $soustype;
1210
+        // Lancer la 2e passe sur les criteres si la 1ere etait bonne
1211
+        if (!is_array($result->param)) {
1212
+            $err_b = true;
1213
+        } else {
1214
+            phraser_criteres($result->param, $result);
1215
+            if (strncasecmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF)) == 0) {
1216
+                $result->type_requete = TYPE_RECURSIF;
1217
+                $args = $result->param;
1218
+                array_unshift(
1219
+                    $args,
1220
+                    substr($type, strlen(TYPE_RECURSIF))
1221
+                );
1222
+                $result->param = $args;
1223
+            }
1224
+        }
1225
+
1226
+        $descr['id_mere_contexte'] = $id_boucle;
1227
+        $result->milieu = public_phraser_html_dist($result->milieu, $id_boucle, $boucles, $descr, $ligne_milieu, $boucle_placeholder);
1228
+        // reserver la place dans la pile des boucles pour compiler ensuite dans le bon ordre
1229
+        // ie les boucles qui apparaissent dans les partie conditionnelles doivent etre compilees apres cette boucle
1230
+        // si il y a deja une boucle de ce nom, cela declenchera une erreur ensuite
1231
+        if (empty($boucles[$id_boucle])) {
1232
+            $boucles[$id_boucle] = null;
1233
+        }
1234
+        $result->preaff = public_phraser_html_dist($result->preaff, $id_parent, $boucles, $descr, $ligne_preaff, $boucle_placeholder);
1235
+        $result->avant = public_phraser_html_dist($result->avant, $id_parent, $boucles, $descr, $ligne_avant, $boucle_placeholder);
1236
+        $result->apres = public_phraser_html_dist($result->apres, $id_parent, $boucles, $descr, $ligne_apres, $boucle_placeholder);
1237
+        $result->altern = public_phraser_html_dist($result->altern, $id_parent, $boucles, $descr, $ligne_altern, $boucle_placeholder);
1238
+        $result->postaff = public_phraser_html_dist($result->postaff, $id_parent, $boucles, $descr, $ligne_postaff, $boucle_placeholder);
1239
+
1240
+        // Prevenir le generateur de code que le squelette est faux
1241
+        if ($err_b) {
1242
+            $result->type_requete = false;
1243
+        }
1244
+
1245
+        // Verifier qu'il n'y a pas double definition
1246
+        // apres analyse des sous-parties (pas avant).
1247
+        if (!empty($boucles[$id_boucle])) {
1248
+            if ($boucles[$id_boucle]->type_requete !== false) {
1249
+                $err_b_d = [
1250
+                    'zbug_erreur_boucle_double',
1251
+                    ['id' => $id_boucle]
1252
+                ];
1253
+                erreur_squelette($err_b_d, $result);
1254
+                // Prevenir le generateur de code que le squelette est faux
1255
+                $boucles[$id_boucle]->type_requete = false;
1256
+            }
1257
+        } else {
1258
+            $boucles[$id_boucle] = $result;
1259
+        }
1260
+
1261
+        // remplacer la boucle par un placeholder qui compte le meme nombre de lignes
1262
+        $placeholder = public_generer_boucle_placeholder($id_boucle, $boucles[$id_boucle], $boucle_placeholder, $ligne_suite - $ligne_debut_texte);
1263
+        $longueur_boucle = $pos_courante - $boucle['debut_boucle'];
1264
+        $texte = substr_replace($texte, $placeholder, $boucle['debut_boucle'], $longueur_boucle);
1265
+        $pos_courante = $pos_courante - $longueur_boucle + strlen($placeholder);
1266
+
1267
+        // phraser la partie avant le debut de la boucle
1268
+        #$all_res = phraser_champs_etendus(substr($texte, $pos_debut_texte, $boucle['debut_boucle'] - $pos_debut_texte), $ligne_debut_texte, $all_res);
1269
+        #$all_res[] = &$boucles[$id_boucle];
1270
+
1271
+        $ligne_debut_texte = $ligne_suite;
1272
+        $pos_debut_texte = $pos_courante;
1273
+    }
1274
+
1275
+    $all_res = phraser_champs_etendus($texte, $ligne_debut_initial, $all_res);
1276
+
1277
+    return $all_res;
1278 1278
 }
Please login to merge, or discard this patch.
Spacing   +28 added lines, -28 removed lines patch added patch discarded remove patch
@@ -48,19 +48,19 @@  discard block
 block discarded – undo
48 48
  * Nom d'une balise #TOTO
49 49
  *
50 50
  * Écriture alambiquée pour rester compatible avec les hexadecimaux des vieux squelettes */
51
-define('NOM_DE_CHAMP', '#((' . NOM_DE_BOUCLE . "):)?(([A-F]*[G-Z_][A-Z_0-9]*)|[A-Z_]+)\b(\*{0,2})");
51
+define('NOM_DE_CHAMP', '#(('.NOM_DE_BOUCLE."):)?(([A-F]*[G-Z_][A-Z_0-9]*)|[A-Z_]+)\b(\*{0,2})");
52 52
 /** Balise complète [...(#TOTO) ... ] */
53
-define('CHAMP_ETENDU', '/\[([^]\[]*)\(' . NOM_DE_CHAMP . '([^[)]*\)[^]\[]*)\]/S');
53
+define('CHAMP_ETENDU', '/\[([^]\[]*)\('.NOM_DE_CHAMP.'([^[)]*\)[^]\[]*)\]/S');
54 54
 
55 55
 define('BALISE_INCLURE', '/<INCLU[DR]E[[:space:]]*(\(([^)]*)\))?/S');
56 56
 define('BALISE_POLYGLOTTE', ',<multi>(.*)</multi>,Uims');
57 57
 define('BALISE_IDIOMES', ',<:(([a-z0-9_]+):)?([a-z0-9_]*)({([^\|=>]*=[^\|>]*)})?((\|[^>]*)?:/?>),iS');
58
-define('BALISE_IDIOMES_ARGS', '@^\s*([^= ]*)\s*=\s*((' . NOM_DE_CHAMP . '[{][^}]*})?[^,]*)\s*,?\s*@s');
58
+define('BALISE_IDIOMES_ARGS', '@^\s*([^= ]*)\s*=\s*(('.NOM_DE_CHAMP.'[{][^}]*})?[^,]*)\s*,?\s*@s');
59 59
 
60 60
 /** Champ sql dans parenthèse ex: (id_article) */
61 61
 define('SQL_ARGS', '(\([^)]*\))');
62 62
 /** Fonction SQL sur un champ ex: SUM(visites) */
63
-define('CHAMP_SQL_PLUS_FONC', '`?([A-Z_\/][A-Z_\/0-9.]*)' . SQL_ARGS . '?`?');
63
+define('CHAMP_SQL_PLUS_FONC', '`?([A-Z_\/][A-Z_\/0-9.]*)'.SQL_ARGS.'?`?');
64 64
 
65 65
 function phraser_inclure($texte, $ligne, $result) {
66 66
 
@@ -215,7 +215,7 @@  discard block
 block discarded – undo
215 215
  * @return array
216 216
  **/
217 217
 function phraser_champs($texte, $ligne, $result) {
218
-	while (preg_match('/' . NOM_DE_CHAMP . '/S', $texte, $match)) {
218
+	while (preg_match('/'.NOM_DE_CHAMP.'/S', $texte, $match)) {
219 219
 		$p = strpos($texte, (string) $match[0]);
220 220
 		// texte après la balise
221 221
 		$suite = substr($texte, $p + strlen($match[0]));
@@ -363,7 +363,7 @@  discard block
 block discarded – undo
363 363
 			$collecte[] = $champ;
364 364
 			$args = ltrim($regs[count($regs) - 1]);
365 365
 		} else {
366
-			if (!preg_match('/' . NOM_DE_CHAMP . '([{|])/', $arg, $r)) {
366
+			if (!preg_match('/'.NOM_DE_CHAMP.'([{|])/', $arg, $r)) {
367 367
 				// 0 est un aveu d'impuissance. A completer
368 368
 				$arg = phraser_champs_exterieurs($arg, 0, $sep, $result);
369 369
 
@@ -447,7 +447,7 @@  discard block
 block discarded – undo
447 447
 function phraser_champs_exterieurs($texte, $ligne, $sep, $nested) {
448 448
 	$res = [];
449 449
 	while (($p = strpos($texte, (string) "%$sep")) !== false) {
450
-		if (!preg_match(',^%' . preg_quote($sep) . '([0-9]+)@,', substr($texte, $p), $m)) {
450
+		if (!preg_match(',^%'.preg_quote($sep).'([0-9]+)@,', substr($texte, $p), $m)) {
451 451
 			break;
452 452
 		}
453 453
 		$debut = substr($texte, 0, $p);
@@ -487,7 +487,7 @@  discard block
 block discarded – undo
487 487
 			$pos_apres = 0;
488 488
 			$result = phraser_args($match[7], ')', $sep, $result, $champ, $pos_apres);
489 489
 			phraser_vieux($champ);
490
-			$champ->avant =	phraser_champs_exterieurs($match[1], $n, $sep, $result);
490
+			$champ->avant = phraser_champs_exterieurs($match[1], $n, $sep, $result);
491 491
 			$debut = substr($match[7], $pos_apres + 1);
492 492
 			if (!empty($debut)) {
493 493
 				$n += substr_count(substr($texte, 0, strpos($texte, $debut)), "\n");
@@ -618,7 +618,7 @@  discard block
 block discarded – undo
618 618
 					// une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"}
619 619
 					if (preg_match(',^(["\'])(.*)\1$,', $m[4])) {
620 620
 						$c = null;
621
-						eval('$c = ' . $m[4] . ';');
621
+						eval('$c = '.$m[4].';');
622 622
 						if (isset($c)) {
623 623
 							$m[4] = $c;
624 624
 						}
@@ -698,7 +698,7 @@  discard block
 block discarded – undo
698 698
 					if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', $param, $m)) {
699 699
 						$crit = phraser_critere_infixe($m[1], $m[3], $v, '/', '', '');
700 700
 					} elseif (
701
-						preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC .
701
+						preg_match(',^([!]?)('.CHAMP_SQL_PLUS_FONC.
702 702
 						')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', $param, $m)
703 703
 					) {
704 704
 						$a2 = trim($m[8]);
@@ -715,8 +715,8 @@  discard block
 block discarded – undo
715 715
 						);
716 716
 						$crit->exclus = $m[1];
717 717
 					} elseif (
718
-						preg_match('/^([!]?)\s*(' .
719
-						CHAMP_SQL_PLUS_FONC .
718
+						preg_match('/^([!]?)\s*('.
719
+						CHAMP_SQL_PLUS_FONC.
720 720
 						')\s*(\??)(.*)$/is', $param, $m)
721 721
 					) {
722 722
 						// contient aussi les comparaisons implicites !
@@ -861,7 +861,7 @@  discard block
 block discarded – undo
861 861
 			}
862 862
 
863 863
 			// trouver sa position de depart reelle : au <Bxx> ou au <BBxx>
864
-			$precond_boucle = BALISE_PRECOND_BOUCLE . $id_boucle . '>';
864
+			$precond_boucle = BALISE_PRECOND_BOUCLE.$id_boucle.'>';
865 865
 			$pos_precond = strpos($texte, $precond_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
866 866
 			if (
867 867
 				$pos_precond !== false
@@ -872,7 +872,7 @@  discard block
 block discarded – undo
872 872
 				$boucle['pos_precond_inside'] = $pos_precond + strlen($precond_boucle);
873 873
 			}
874 874
 
875
-			$preaff_boucle = BALISE_PREAFF_BOUCLE . $id_boucle . '>';
875
+			$preaff_boucle = BALISE_PREAFF_BOUCLE.$id_boucle.'>';
876 876
 			$pos_preaff = strpos($texte, $preaff_boucle, $id_boucle ? $pos_debut_texte : $pos_derniere_boucle_anonyme);
877 877
 			if (
878 878
 				$pos_preaff !== false
@@ -920,13 +920,13 @@  discard block
 block discarded – undo
920 920
 	$pos_anonyme_next = null;
921 921
 	// si c'est une boucle anonyme, chercher la position de la prochaine boucle anonyme
922 922
 	if (!strlen($id_boucle)) {
923
-		$pos_anonyme_next = strpos($texte, BALISE_BOUCLE . '(', $pos_courante);
923
+		$pos_anonyme_next = strpos($texte, BALISE_BOUCLE.'(', $pos_courante);
924 924
 	}
925 925
 
926 926
 	//
927 927
 	// 1. Recuperer la partie conditionnelle apres
928 928
 	//
929
-	$apres_boucle = BALISE_POSTCOND_BOUCLE . $id_boucle . '>';
929
+	$apres_boucle = BALISE_POSTCOND_BOUCLE.$id_boucle.'>';
930 930
 	$pos_apres = strpos($texte, $apres_boucle, $pos_courante);
931 931
 	if (
932 932
 		$pos_apres !== false
@@ -935,13 +935,13 @@  discard block
 block discarded – undo
935 935
 		$boucle['pos_postcond'] = $pos_apres;
936 936
 		$pos_apres += strlen($apres_boucle);
937 937
 		$boucle['pos_postcond_inside'] = $pos_apres;
938
-		$pos_courante = $pos_apres ;
938
+		$pos_courante = $pos_apres;
939 939
 	}
940 940
 
941 941
 	//
942 942
 	// 2. Récuperer la partie alternative apres
943 943
 	//
944
-	$altern_boucle = BALISE_ALT_BOUCLE . $id_boucle . '>';
944
+	$altern_boucle = BALISE_ALT_BOUCLE.$id_boucle.'>';
945 945
 	$pos_altern = strpos($texte, $altern_boucle, $pos_courante);
946 946
 	if (
947 947
 		$pos_altern !== false
@@ -956,7 +956,7 @@  discard block
 block discarded – undo
956 956
 	//
957 957
 	// 3. Recuperer la partie footer non alternative
958 958
 	//
959
-	$postaff_boucle = BALISE_POSTAFF_BOUCLE . $id_boucle . '>';
959
+	$postaff_boucle = BALISE_POSTAFF_BOUCLE.$id_boucle.'>';
960 960
 	$pos_postaff = strpos($texte, $postaff_boucle, $pos_courante);
961 961
 	if (
962 962
 		$pos_postaff !== false
@@ -965,7 +965,7 @@  discard block
 block discarded – undo
965 965
 		$boucle['pos_postaff'] = $pos_postaff;
966 966
 		$pos_postaff += strlen($postaff_boucle);
967 967
 		$boucle['pos_postaff_inside'] = $pos_postaff;
968
-		$pos_courante = $pos_postaff ;
968
+		$pos_courante = $pos_postaff;
969 969
 	}
970 970
 
971 971
 	return $boucle;
@@ -1005,7 +1005,7 @@  discard block
 block discarded – undo
1005 1005
  * @return string
1006 1006
  */
1007 1007
 function public_generer_boucle_placeholder($id_boucle, &$boucle, $boucle_placeholder, $nb_lignes) {
1008
-	$placeholder = "[(#{$boucle_placeholder}{" . $id_boucle . '})' . str_pad('', $nb_lignes, "\n") . ']';
1008
+	$placeholder = "[(#{$boucle_placeholder}{".$id_boucle.'})'.str_pad('', $nb_lignes, "\n").']';
1009 1009
 	//memoriser la boucle a reinjecter
1010 1010
 	$id_boucle = "$id_boucle";
1011 1011
 	phraser_boucle_placeholder($id_boucle, $boucle_placeholder, $boucle);
@@ -1018,7 +1018,7 @@  discard block
 block discarded – undo
1018 1018
 	// definir un placholder pour les boucles dont on est sur d'avoir aucune occurence dans le squelette
1019 1019
 	if (is_null($boucle_placeholder)) {
1020 1020
 		do {
1021
-			$boucle_placeholder = 'BOUCLE_PLACEHOLDER_' . strtoupper(md5(uniqid()));
1021
+			$boucle_placeholder = 'BOUCLE_PLACEHOLDER_'.strtoupper(md5(uniqid()));
1022 1022
 		} while (strpos($texte, $boucle_placeholder) !== false);
1023 1023
 	}
1024 1024
 
@@ -1038,7 +1038,7 @@  discard block
 block discarded – undo
1038 1038
 
1039 1039
 		// boucle anonyme ?
1040 1040
 		if (!strlen($id_boucle)) {
1041
-			$id_boucle = '_anon_L' . $ligne_milieu . '_' . substr(md5('anonyme:' . $id_parent . ':' . json_encode($boucle, JSON_THROW_ON_ERROR)), 0, 8);
1041
+			$id_boucle = '_anon_L'.$ligne_milieu.'_'.substr(md5('anonyme:'.$id_parent.':'.json_encode($boucle, JSON_THROW_ON_ERROR)), 0, 8);
1042 1042
 		}
1043 1043
 
1044 1044
 		$pos_debut_boucle = $pos_courante;
@@ -1051,7 +1051,7 @@  discard block
 block discarded – undo
1051 1051
 
1052 1052
 			$pos_avant = $boucle['pos_precond_inside'];
1053 1053
 			$result->avant = substr($texte, $pos_avant, $pos_courante - $pos_avant);
1054
-			$ligne_avant = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_avant);
1054
+			$ligne_avant = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_avant);
1055 1055
 		}
1056 1056
 
1057 1057
 		// Regarder si on a une partie inconditionnelle avant <BB_xxx>
@@ -1060,7 +1060,7 @@  discard block
 block discarded – undo
1060 1060
 
1061 1061
 			$pos_preaff = $boucle['pos_preaff_inside'];
1062 1062
 			$result->preaff = substr($texte, $pos_preaff, $end_preaff - $pos_preaff);
1063
-			$ligne_preaff = $ligne_debut_texte +  public_compte_ligne($texte, $pos_debut_texte, $pos_preaff);
1063
+			$ligne_preaff = $ligne_debut_texte + public_compte_ligne($texte, $pos_debut_texte, $pos_preaff);
1064 1064
 		}
1065 1065
 
1066 1066
 		$result->id_boucle = $id_boucle;
@@ -1117,7 +1117,7 @@  discard block
 block discarded – undo
1117 1117
 		} else {
1118 1118
 			$pos_milieu += 1;
1119 1119
 
1120
-			$fin_boucle = BALISE_FIN_BOUCLE . $id_boucle_search . '>';
1120
+			$fin_boucle = BALISE_FIN_BOUCLE.$id_boucle_search.'>';
1121 1121
 			$pos_fin = strpos($texte, $fin_boucle, $pos_milieu);
1122 1122
 			if ($pos_fin === false) {
1123 1123
 				$err_b = [
@@ -1130,7 +1130,7 @@  discard block
 block discarded – undo
1130 1130
 			else {
1131 1131
 				// verifier une eventuelle imbrication d'une boucle homonyme
1132 1132
 				// (interdite, generera une erreur plus loin, mais permet de signaler la bonne erreur)
1133
-				$search_debut_boucle = BALISE_BOUCLE . $id_boucle_search . '(';
1133
+				$search_debut_boucle = BALISE_BOUCLE.$id_boucle_search.'(';
1134 1134
 				$search_from = $pos_milieu;
1135 1135
 				$nb_open = 1;
1136 1136
 				$nb_close = 1;
@@ -1170,7 +1170,7 @@  discard block
 block discarded – undo
1170 1170
 		if ($boucle['pos_postcond']) {
1171 1171
 			$result->apres = substr($texte, $pos_courante, $boucle['pos_postcond'] - $pos_courante);
1172 1172
 			$ligne_suite += public_compte_ligne($texte, $pos_courante, $boucle['pos_postcond_inside']);
1173
-			$pos_courante = $boucle['pos_postcond_inside'] ;
1173
+			$pos_courante = $boucle['pos_postcond_inside'];
1174 1174
 		}
1175 1175
 
1176 1176
 
Please login to merge, or discard this patch.
ecrire/public/normaliser.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -52,7 +52,7 @@  discard block
 block discarded – undo
52 52
 			array_shift($p->param);
53 53
 			$p->etoile = '*';
54 54
 			spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
55
-		} elseif (preg_match('/^' . NOM_DE_CHAMP . '(.*)$/sS', $nom, $m)) {
55
+		} elseif (preg_match('/^'.NOM_DE_CHAMP.'(.*)$/sS', $nom, $m)) {
56 56
 			$champ = new Champ();
57 57
 			$champ->nom_boucle = $m[2];
58 58
 			$champ->nom_champ = $m[3];
@@ -128,7 +128,7 @@  discard block
 block discarded – undo
128 128
 		$p->param[0][1] = [$c];
129 129
 		$p->param[0][0] = '';
130 130
 		$p->fonctions = [];
131
-		spip_log('FORMULAIRE_RECHERCHE avec filtre ' . $c->texte, 'vieilles_defs');
131
+		spip_log('FORMULAIRE_RECHERCHE avec filtre '.$c->texte, 'vieilles_defs');
132 132
 	}
133 133
 }
134 134
 
Please login to merge, or discard this patch.
Indentation   +159 added lines, -159 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 // Les fonctions de ce fichier sont appelees en certains points
@@ -25,193 +25,193 @@  discard block
 block discarded – undo
25 25
 // -> https://www.spip.net/fr_article901.html
26 26
 
27 27
 function phraser_vieux_logos(&$p) {
28
-	if ($p->param[0][0]) {
29
-		$args = [''];
30
-	} else {
31
-		$args = array_shift($p->param);
32
-	}
33
-
34
-	foreach ($p->param as $couple) {
35
-		$nom = trim($couple[0]);
36
-		if ($nom == '') {
37
-			array_shift($p->param);
38
-			break;
39
-		}
40
-		$r = phraser_logo_faux_filtres($nom);
41
-		if ($r === 0) {
42
-			$c = new Texte();
43
-			$c->texte = $nom;
44
-			$args[] = [$c];
45
-			array_shift($p->param);
46
-			spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
47
-		} elseif ($r === 2) {
48
-			$p->etoile = '**';
49
-			array_shift($p->param);
50
-			spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
51
-		} elseif ($r === 1) {
52
-			array_shift($p->param);
53
-			$p->etoile = '*';
54
-			spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
55
-		} elseif (preg_match('/^' . NOM_DE_CHAMP . '(.*)$/sS', $nom, $m)) {
56
-			$champ = new Champ();
57
-			$champ->nom_boucle = $m[2];
58
-			$champ->nom_champ = $m[3];
59
-			$champ->etoile = $m[5];
60
-			$champ = [$champ];
61
-			if ($m[6]) {
62
-				$r = new Texte();
63
-				$r->texte = $m[6];
64
-				$champ[] = $r;
65
-			}
66
-			$args[] = $champ;
67
-			array_shift($p->param);
68
-			spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
69
-		} // le cas else est la seule incompatibilite
70
-	}
71
-	array_unshift($p->param, $args);
28
+    if ($p->param[0][0]) {
29
+        $args = [''];
30
+    } else {
31
+        $args = array_shift($p->param);
32
+    }
33
+
34
+    foreach ($p->param as $couple) {
35
+        $nom = trim($couple[0]);
36
+        if ($nom == '') {
37
+            array_shift($p->param);
38
+            break;
39
+        }
40
+        $r = phraser_logo_faux_filtres($nom);
41
+        if ($r === 0) {
42
+            $c = new Texte();
43
+            $c->texte = $nom;
44
+            $args[] = [$c];
45
+            array_shift($p->param);
46
+            spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
47
+        } elseif ($r === 2) {
48
+            $p->etoile = '**';
49
+            array_shift($p->param);
50
+            spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
51
+        } elseif ($r === 1) {
52
+            array_shift($p->param);
53
+            $p->etoile = '*';
54
+            spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
55
+        } elseif (preg_match('/^' . NOM_DE_CHAMP . '(.*)$/sS', $nom, $m)) {
56
+            $champ = new Champ();
57
+            $champ->nom_boucle = $m[2];
58
+            $champ->nom_champ = $m[3];
59
+            $champ->etoile = $m[5];
60
+            $champ = [$champ];
61
+            if ($m[6]) {
62
+                $r = new Texte();
63
+                $r->texte = $m[6];
64
+                $champ[] = $r;
65
+            }
66
+            $args[] = $champ;
67
+            array_shift($p->param);
68
+            spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
69
+        } // le cas else est la seule incompatibilite
70
+    }
71
+    array_unshift($p->param, $args);
72 72
 }
73 73
 
74 74
 
75 75
 function phraser_logo_faux_filtres($nom) {
76
-	switch ($nom) {
77
-		case 'top':
78
-		case 'left':
79
-		case 'right':
80
-		case 'center':
81
-		case 'bottom':
82
-			return 0;
83
-		case 'lien':
84
-			return 1;
85
-		case 'fichier':
86
-			return 2;
87
-		default:
88
-			return $nom;
89
-	}
76
+    switch ($nom) {
77
+        case 'top':
78
+        case 'left':
79
+        case 'right':
80
+        case 'center':
81
+        case 'bottom':
82
+            return 0;
83
+        case 'lien':
84
+            return 1;
85
+        case 'fichier':
86
+            return 2;
87
+        default:
88
+            return $nom;
89
+    }
90 90
 }
91 91
 
92 92
 
93 93
 // La balise embed_document est a present le modele emb
94 94
 
95 95
 function phraser_vieux_emb(&$p) {
96
-	if (!is_array($p->param)) {
97
-		$p->param = [];
98
-	}
99
-
100
-	// Produire le premier argument {emb}
101
-	$texte = new Texte();
102
-	$texte->texte = 'emb';
103
-	$param = ['', [$texte]];
104
-
105
-	// Transformer les filtres en arguments
106
-	for ($i = 0; $i < (is_countable($p->param) ? count($p->param) : 0); $i++) {
107
-		if ($p->param[$i][0]) {
108
-			if (!strstr($p->param[$i][0], '=')) {
109
-				break;
110
-			}# on a rencontre un vrai filtre, c'est fini
111
-			$texte = new Texte();
112
-			$texte->texte = $p->param[$i][0];
113
-			$param[] = [$texte];
114
-		}
115
-		array_shift($p->param);
116
-	}
117
-	array_unshift($p->param, $param);
118
-	spip_log('balise EMBED_DOCUMENT obsolete', 'vieilles_defs');
119
-	$p->nom_champ = 'MODELE';
96
+    if (!is_array($p->param)) {
97
+        $p->param = [];
98
+    }
99
+
100
+    // Produire le premier argument {emb}
101
+    $texte = new Texte();
102
+    $texte->texte = 'emb';
103
+    $param = ['', [$texte]];
104
+
105
+    // Transformer les filtres en arguments
106
+    for ($i = 0; $i < (is_countable($p->param) ? count($p->param) : 0); $i++) {
107
+        if ($p->param[$i][0]) {
108
+            if (!strstr($p->param[$i][0], '=')) {
109
+                break;
110
+            }# on a rencontre un vrai filtre, c'est fini
111
+            $texte = new Texte();
112
+            $texte->texte = $p->param[$i][0];
113
+            $param[] = [$texte];
114
+        }
115
+        array_shift($p->param);
116
+    }
117
+    array_unshift($p->param, $param);
118
+    spip_log('balise EMBED_DOCUMENT obsolete', 'vieilles_defs');
119
+    $p->nom_champ = 'MODELE';
120 120
 }
121 121
 
122 122
 // Vieux formulaire de recherch
123 123
 
124 124
 function phraser_vieux_recherche($p) {
125
-	if ($p->param[0][0]) {
126
-		$c = new Texte();
127
-		$c->texte = $p->param[0][0];
128
-		$p->param[0][1] = [$c];
129
-		$p->param[0][0] = '';
130
-		$p->fonctions = [];
131
-		spip_log('FORMULAIRE_RECHERCHE avec filtre ' . $c->texte, 'vieilles_defs');
132
-	}
125
+    if ($p->param[0][0]) {
126
+        $c = new Texte();
127
+        $c->texte = $p->param[0][0];
128
+        $p->param[0][1] = [$c];
129
+        $p->param[0][0] = '';
130
+        $p->fonctions = [];
131
+        spip_log('FORMULAIRE_RECHERCHE avec filtre ' . $c->texte, 'vieilles_defs');
132
+    }
133 133
 }
134 134
 
135 135
 // Gerer la notation [(#EXPOSER|on,off)]
136 136
 function phraser_vieux_exposer($p) {
137
-	if ($a = $p->fonctions) {
138
-		preg_match('#([^,]*)(,(.*))?#', $a[0][0], $regs);
139
-		$args = [];
140
-		if ($regs[1]) {
141
-			$a = new Texte();
142
-			$a->texte = $regs[1];
143
-			$args = ['', [$a]];
144
-			if ($regs[3]) {
145
-				$a = new Texte();
146
-				$a->texte = $regs[3];
147
-				$args[] = [$a];
148
-			}
149
-		}
150
-		$p->param[0] = $args;
151
-		$p->fonctions = [];
152
-		$p->nom_champ = 'EXPOSE';
153
-	}
137
+    if ($a = $p->fonctions) {
138
+        preg_match('#([^,]*)(,(.*))?#', $a[0][0], $regs);
139
+        $args = [];
140
+        if ($regs[1]) {
141
+            $a = new Texte();
142
+            $a->texte = $regs[1];
143
+            $args = ['', [$a]];
144
+            if ($regs[3]) {
145
+                $a = new Texte();
146
+                $a->texte = $regs[3];
147
+                $args[] = [$a];
148
+            }
149
+        }
150
+        $p->param[0] = $args;
151
+        $p->fonctions = [];
152
+        $p->nom_champ = 'EXPOSE';
153
+    }
154 154
 }
155 155
 
156 156
 function phraser_vieux_modele($p) {
157
- normaliser_args_inclumodel($p);
157
+    normaliser_args_inclumodel($p);
158 158
 }
159 159
 
160 160
 function phraser_vieux_inclu($p) {
161
- normaliser_args_inclumodel($p);
161
+    normaliser_args_inclumodel($p);
162 162
 }
163 163
 
164 164
 function normaliser_args_inclumodel($p) {
165
-	$params = $p->param;
166
-	if (!$params) {
167
-		return;
168
-	}
169
-	$args = $params[0];
170
-	if ($args[0]) {
171
-		return;
172
-	} // filtre immediat
173
-	array_shift($p->param);
174
-	foreach ($p->param as $l) {
175
-		if (!array_shift($l)) {
176
-			$args = array_merge($args, $l);
177
-			array_shift($p->param);
178
-		} else {
179
-			break;
180
-		} // filtre
181
-	}
182
-	array_unshift($p->param, $args);
165
+    $params = $p->param;
166
+    if (!$params) {
167
+        return;
168
+    }
169
+    $args = $params[0];
170
+    if ($args[0]) {
171
+        return;
172
+    } // filtre immediat
173
+    array_shift($p->param);
174
+    foreach ($p->param as $l) {
175
+        if (!array_shift($l)) {
176
+            $args = array_merge($args, $l);
177
+            array_shift($p->param);
178
+        } else {
179
+            break;
180
+        } // filtre
181
+    }
182
+    array_unshift($p->param, $args);
183 183
 }
184 184
 
185 185
 function normaliser_inclure($champ) {
186
-	normaliser_args_inclumodel($champ);
187
-	$l = $champ->param[0];
188
-	if (is_array($l) and !$l[0]) {
189
-		foreach ($l as $k => $p) {
190
-			if ($p and $p[0]->type == 'texte' and !strpos($p[0]->texte, '=')) {
191
-				$p[0]->texte = trim($p[0]->texte);
192
-			}
193
-		}
194
-		foreach ($l as $k => $p) {
195
-			if (
196
-				!$p or $p[0]->type != 'texte' or
197
-				!preg_match('/^fond\s*=\s*(.*)$/', $p[0]->texte, $r)
198
-			) {
199
-				continue;
200
-			}
201
-
202
-			if ($r[1]) {
203
-				$p[0]->texte = $r[1];
204
-			} else {
205
-				unset($p[0]);
206
-			}
207
-			$champ->texte = $p;
208
-			unset($champ->param[0][$k]);
209
-			if ((is_countable($champ->param[0]) ? count($champ->param[0]) : 0) == 1) {
210
-				array_shift($champ->param);
211
-			}
212
-
213
-			return;
214
-		}
215
-	}
216
-	spip_log('inclure sans fond ni fichier');
186
+    normaliser_args_inclumodel($champ);
187
+    $l = $champ->param[0];
188
+    if (is_array($l) and !$l[0]) {
189
+        foreach ($l as $k => $p) {
190
+            if ($p and $p[0]->type == 'texte' and !strpos($p[0]->texte, '=')) {
191
+                $p[0]->texte = trim($p[0]->texte);
192
+            }
193
+        }
194
+        foreach ($l as $k => $p) {
195
+            if (
196
+                !$p or $p[0]->type != 'texte' or
197
+                !preg_match('/^fond\s*=\s*(.*)$/', $p[0]->texte, $r)
198
+            ) {
199
+                continue;
200
+            }
201
+
202
+            if ($r[1]) {
203
+                $p[0]->texte = $r[1];
204
+            } else {
205
+                unset($p[0]);
206
+            }
207
+            $champ->texte = $p;
208
+            unset($champ->param[0][$k]);
209
+            if ((is_countable($champ->param[0]) ? count($champ->param[0]) : 0) == 1) {
210
+                array_shift($champ->param);
211
+            }
212
+
213
+            return;
214
+        }
215
+    }
216
+    spip_log('inclure sans fond ni fichier');
217 217
 }
Please login to merge, or discard this patch.
ecrire/public/sandbox.php 2 patches
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -41,7 +41,7 @@  discard block
 block discarded – undo
41 41
  *     Texte
42 42
  */
43 43
 function sandbox_composer_texte($texte, &$p) {
44
-	$code = "'" . str_replace(['\\', "'"], ['\\\\', "\\'"], $texte) . "'";
44
+	$code = "'".str_replace(['\\', "'"], ['\\\\', "\\'"], $texte)."'";
45 45
 
46 46
 	return $code;
47 47
 }
@@ -85,7 +85,7 @@  discard block
 block discarded – undo
85 85
 		$min_f = $refl->getNumberOfRequiredParameters();
86 86
 		if (($nb_args_f < $min_f)) {
87 87
 			$msg_args = ['filtre' => texte_script($fonc), 'nb' => $min_f - $nb_args_f];
88
-			erreur_squelette([ 'zbug_erreur_filtre_nbarg_min', $msg_args], $p);
88
+			erreur_squelette(['zbug_erreur_filtre_nbarg_min', $msg_args], $p);
89 89
 		}
90 90
 	}
91 91
 	// le filtre n'existe pas,
@@ -170,8 +170,8 @@  discard block
 block discarded – undo
170 170
  */
171 171
 function sandbox_filtrer_squelette($skel, $corps, $filtres) {
172 172
 	$series_filtres = func_get_args();
173
-	array_shift($series_filtres);// skel
174
-	array_shift($series_filtres);// corps
173
+	array_shift($series_filtres); // skel
174
+	array_shift($series_filtres); // corps
175 175
 
176 176
 	// proteger les <INCLUDE> et tous les morceaux de php licites
177 177
 	if ($skel['process_ins'] == 'php') {
@@ -219,7 +219,7 @@  discard block
 block discarded – undo
219 219
 	if (is_array($r)) {
220 220
 		$dst[] = $r[0];
221 221
 
222
-		return $src[] = '___' . md5($r[0]) . '___';
222
+		return $src[] = '___'.md5($r[0]).'___';
223 223
 	}
224 224
 
225 225
 	// si on recoit pas un tableau, on renvoit les couples de substitution
Please login to merge, or discard this patch.
Indentation   +99 added lines, -99 removed lines patch added patch discarded remove patch
@@ -23,7 +23,7 @@  discard block
 block discarded – undo
23 23
  **/
24 24
 
25 25
 if (!defined('_ECRIRE_INC_VERSION')) {
26
-	return;
26
+    return;
27 27
 }
28 28
 
29 29
 /**
@@ -41,9 +41,9 @@  discard block
 block discarded – undo
41 41
  *     Texte
42 42
  */
43 43
 function sandbox_composer_texte($texte, &$p) {
44
-	$code = "'" . str_replace(['\\', "'"], ['\\\\', "\\'"], $texte) . "'";
44
+    $code = "'" . str_replace(['\\', "'"], ['\\\\', "\\'"], $texte) . "'";
45 45
 
46
-	return $code;
46
+    return $code;
47 47
 }
48 48
 
49 49
 
@@ -59,42 +59,42 @@  discard block
 block discarded – undo
59 59
  * @return string
60 60
  */
61 61
 function sandbox_composer_filtre($fonc, $code, $arglist, &$p, $nb_arg_droite = 1000): string {
62
-	if (isset($GLOBALS['spip_matrice'][$fonc])) {
63
-		$code = "filtrer('$fonc',$code$arglist)";
64
-	}
65
-
66
-	// le filtre est defini sous forme de fonction ou de methode
67
-	// par ex. dans inc_texte, inc_filtres ou mes_fonctions
68
-	elseif ($f = chercher_filtre($fonc)) {
69
-		// cas particulier : le filtre |set doit acceder a la $Pile
70
-		// proto: filtre_set(&$Pile, $val, $args...)
71
-		if (strpbrk($f, ':')) { // Class::method
72
-			$refl = new ReflectionMethod($f);
73
-		} else {
74
-			$refl = new ReflectionFunction($f);
75
-		}
76
-		$refs = $refl->getParameters();
77
-		if (isset($refs[0]) and $refs[0]->name == 'Pile') {
78
-			$code = "$f(\$Pile,$code$arglist)";
79
-			$nb_arg_gauche = 2; // la balise à laquelle s'applique le filtre + $Pile
80
-		} else {
81
-			$code = "$f($code$arglist)";
82
-			$nb_arg_gauche = 1; // la balise à laquelle s'applique le filtre
83
-		}
84
-		$nb_args_f = $nb_arg_gauche + $nb_arg_droite;
85
-		$min_f = $refl->getNumberOfRequiredParameters();
86
-		if (($nb_args_f < $min_f)) {
87
-			$msg_args = ['filtre' => texte_script($fonc), 'nb' => $min_f - $nb_args_f];
88
-			erreur_squelette([ 'zbug_erreur_filtre_nbarg_min', $msg_args], $p);
89
-		}
90
-	}
91
-	// le filtre n'existe pas,
92
-	// on le notifie
93
-	else {
94
-		erreur_squelette(['zbug_erreur_filtre', ['filtre' => texte_script($fonc)]], $p);
95
-	}
96
-
97
-	return $code;
62
+    if (isset($GLOBALS['spip_matrice'][$fonc])) {
63
+        $code = "filtrer('$fonc',$code$arglist)";
64
+    }
65
+
66
+    // le filtre est defini sous forme de fonction ou de methode
67
+    // par ex. dans inc_texte, inc_filtres ou mes_fonctions
68
+    elseif ($f = chercher_filtre($fonc)) {
69
+        // cas particulier : le filtre |set doit acceder a la $Pile
70
+        // proto: filtre_set(&$Pile, $val, $args...)
71
+        if (strpbrk($f, ':')) { // Class::method
72
+            $refl = new ReflectionMethod($f);
73
+        } else {
74
+            $refl = new ReflectionFunction($f);
75
+        }
76
+        $refs = $refl->getParameters();
77
+        if (isset($refs[0]) and $refs[0]->name == 'Pile') {
78
+            $code = "$f(\$Pile,$code$arglist)";
79
+            $nb_arg_gauche = 2; // la balise à laquelle s'applique le filtre + $Pile
80
+        } else {
81
+            $code = "$f($code$arglist)";
82
+            $nb_arg_gauche = 1; // la balise à laquelle s'applique le filtre
83
+        }
84
+        $nb_args_f = $nb_arg_gauche + $nb_arg_droite;
85
+        $min_f = $refl->getNumberOfRequiredParameters();
86
+        if (($nb_args_f < $min_f)) {
87
+            $msg_args = ['filtre' => texte_script($fonc), 'nb' => $min_f - $nb_args_f];
88
+            erreur_squelette([ 'zbug_erreur_filtre_nbarg_min', $msg_args], $p);
89
+        }
90
+    }
91
+    // le filtre n'existe pas,
92
+    // on le notifie
93
+    else {
94
+        erreur_squelette(['zbug_erreur_filtre', ['filtre' => texte_script($fonc)]], $p);
95
+    }
96
+
97
+    return $code;
98 98
 }
99 99
 
100 100
 // Calculer un <INCLURE(xx.php)>
@@ -117,15 +117,15 @@  discard block
 block discarded – undo
117 117
  * @return string
118 118
  */
119 119
 function sandbox_composer_inclure_php($fichier, &$p, $_contexte) {
120
-	$compil = texte_script(memoriser_contexte_compil($p));
121
-	// si inexistant, on essaiera a l'execution
122
-	if ($path = find_in_path($fichier)) {
123
-		$path = "\"$path\"";
124
-	} else {
125
-		$path = "find_in_path(\"$fichier\")";
126
-	}
127
-
128
-	return sprintf(CODE_INCLURE_SCRIPT, $path, $fichier, $compil, $_contexte);
120
+    $compil = texte_script(memoriser_contexte_compil($p));
121
+    // si inexistant, on essaiera a l'execution
122
+    if ($path = find_in_path($fichier)) {
123
+        $path = "\"$path\"";
124
+    } else {
125
+        $path = "find_in_path(\"$fichier\")";
126
+    }
127
+
128
+    return sprintf(CODE_INCLURE_SCRIPT, $path, $fichier, $compil, $_contexte);
129 129
 }
130 130
 
131 131
 /**
@@ -137,20 +137,20 @@  discard block
 block discarded – undo
137 137
  * @return string
138 138
  */
139 139
 function sandbox_composer_interdire_scripts($code, &$p) {
140
-	// Securite
141
-	if (
142
-		$p->interdire_scripts
143
-		and $p->etoile != '**'
144
-	) {
145
-		if (!preg_match("/^sinon[(](.*),'([^']*)'[)]$/", $code, $r)) {
146
-			$code = "interdire_scripts($code)";
147
-		} else {
148
-			$code = interdire_scripts($r[2]);
149
-			$code = "sinon(interdire_scripts($r[1]),'$code')";
150
-		}
151
-	}
152
-
153
-	return $code;
140
+    // Securite
141
+    if (
142
+        $p->interdire_scripts
143
+        and $p->etoile != '**'
144
+    ) {
145
+        if (!preg_match("/^sinon[(](.*),'([^']*)'[)]$/", $code, $r)) {
146
+            $code = "interdire_scripts($code)";
147
+        } else {
148
+            $code = interdire_scripts($r[2]);
149
+            $code = "sinon(interdire_scripts($r[1]),'$code')";
150
+        }
151
+    }
152
+
153
+    return $code;
154 154
 }
155 155
 
156 156
 
@@ -169,30 +169,30 @@  discard block
 block discarded – undo
169 169
  * @return mixed|string
170 170
  */
171 171
 function sandbox_filtrer_squelette($skel, $corps, $filtres) {
172
-	$series_filtres = func_get_args();
173
-	array_shift($series_filtres);// skel
174
-	array_shift($series_filtres);// corps
175
-
176
-	// proteger les <INCLUDE> et tous les morceaux de php licites
177
-	if ($skel['process_ins'] == 'php') {
178
-		$corps = preg_replace_callback(',<[?](\s|php|=).*[?]>,UimsS', 'echapper_php_callback', $corps);
179
-	}
180
-
181
-	// recuperer les couples de remplacement
182
-	$replace = echapper_php_callback();
183
-
184
-	foreach ($series_filtres as $filtres) {
185
-		if (is_countable($filtres) ? count($filtres) : 0) {
186
-			foreach ($filtres as $filtre) {
187
-				if ($filtre and $f = chercher_filtre($filtre)) {
188
-					$corps = $f($corps);
189
-				}
190
-			}
191
-		}
192
-	}
193
-
194
-	// restaurer les echappements
195
-	return str_replace($replace[0], $replace[1], $corps);
172
+    $series_filtres = func_get_args();
173
+    array_shift($series_filtres);// skel
174
+    array_shift($series_filtres);// corps
175
+
176
+    // proteger les <INCLUDE> et tous les morceaux de php licites
177
+    if ($skel['process_ins'] == 'php') {
178
+        $corps = preg_replace_callback(',<[?](\s|php|=).*[?]>,UimsS', 'echapper_php_callback', $corps);
179
+    }
180
+
181
+    // recuperer les couples de remplacement
182
+    $replace = echapper_php_callback();
183
+
184
+    foreach ($series_filtres as $filtres) {
185
+        if (is_countable($filtres) ? count($filtres) : 0) {
186
+            foreach ($filtres as $filtre) {
187
+                if ($filtre and $f = chercher_filtre($filtre)) {
188
+                    $corps = $f($corps);
189
+                }
190
+            }
191
+        }
192
+    }
193
+
194
+    // restaurer les echappements
195
+    return str_replace($replace[0], $replace[1], $corps);
196 196
 }
197 197
 
198 198
 
@@ -211,21 +211,21 @@  discard block
 block discarded – undo
211 211
  *     - array : Liste( liste des codes PHP, liste des substitutions )
212 212
  **/
213 213
 function echapper_php_callback($r = null) {
214
-	static $src = [];
215
-	static $dst = [];
214
+    static $src = [];
215
+    static $dst = [];
216 216
 
217
-	// si on recoit un tableau, on est en mode echappement
218
-	// on enregistre le code a echapper dans dst, et le code echappe dans src
219
-	if (is_array($r)) {
220
-		$dst[] = $r[0];
217
+    // si on recoit un tableau, on est en mode echappement
218
+    // on enregistre le code a echapper dans dst, et le code echappe dans src
219
+    if (is_array($r)) {
220
+        $dst[] = $r[0];
221 221
 
222
-		return $src[] = '___' . md5($r[0]) . '___';
223
-	}
222
+        return $src[] = '___' . md5($r[0]) . '___';
223
+    }
224 224
 
225
-	// si on recoit pas un tableau, on renvoit les couples de substitution
226
-	// et on RAZ les remplacements
227
-	$r = [$src, $dst];
228
-	$src = $dst = [];
225
+    // si on recoit pas un tableau, on renvoit les couples de substitution
226
+    // et on RAZ les remplacements
227
+    $r = [$src, $dst];
228
+    $src = $dst = [];
229 229
 
230
-	return $r;
230
+    return $r;
231 231
 }
Please login to merge, or discard this patch.
ecrire/public/styliser_par_z.php 2 patches
Spacing   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -53,7 +53,7 @@  discard block
 block discarded – undo
53 53
 			$apl_constant = '_Z_AJAX_PARALLEL_LOAD';
54 54
 			$page = _SPIP_PAGE;
55 55
 			$echafauder = charger_fonction('echafauder', 'public', true);
56
-			define('_ZCORE_EXCLURE_PATH', '\bprive|\bsquelettes-dist' . (defined('_DIR_PLUGIN_DIST') ? '|\b' . rtrim(
56
+			define('_ZCORE_EXCLURE_PATH', '\bprive|\bsquelettes-dist'.(defined('_DIR_PLUGIN_DIST') ? '|\b'.rtrim(
57 57
 				_DIR_PLUGIN_DIST,
58 58
 				'/'
59 59
 			) : ''));
@@ -77,7 +77,7 @@  discard block
 block discarded – undo
77 77
 			and in_array($dir, $z_blocs) // verifier deja qu'on est dans un bloc Z
78 78
 			and defined($apl_constant)
79 79
 			and in_array($dir, explode(',', constant($apl_constant))) // et dans un demande en APL
80
-			and $pipe = z_trouver_bloc($prefix_path . $prepend, $dir, 'z_apl', $ext) // et qui contient le squelette APL
80
+			and $pipe = z_trouver_bloc($prefix_path.$prepend, $dir, 'z_apl', $ext) // et qui contient le squelette APL
81 81
 		) {
82 82
 			$flux['data'] = $pipe;
83 83
 
@@ -90,7 +90,7 @@  discard block
 block discarded – undo
90 90
 			$echafauder = '';
91 91
 		}
92 92
 		if ($prepend) {
93
-			$squelette = substr(find_in_path($prefix_path . $prepend . "$fond.$ext"), 0, -strlen(".$ext"));
93
+			$squelette = substr(find_in_path($prefix_path.$prepend."$fond.$ext"), 0, -strlen(".$ext"));
94 94
 			if ($squelette) {
95 95
 				$flux['data'] = $squelette;
96 96
 			}
@@ -113,11 +113,11 @@  discard block
 block discarded – undo
113 113
 				// se brancher sur contenu/xx si il existe
114 114
 				// ou si c'est un objet spip, associe a une table, utiliser le fond homonyme
115 115
 				if (!isset($disponible[$fond])) {
116
-					$disponible[$fond] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $fond, $ext, $echafauder);
116
+					$disponible[$fond] = z_contenu_disponible($prefix_path.$prepend, $z_contenu, $fond, $ext, $echafauder);
117 117
 				}
118 118
 
119 119
 				if ($disponible[$fond]) {
120
-					$flux['data'] = substr(find_in_path($prefix_path . "page.$ext"), 0, -strlen(".$ext"));
120
+					$flux['data'] = substr(find_in_path($prefix_path."page.$ext"), 0, -strlen(".$ext"));
121 121
 				}
122 122
 			}
123 123
 
@@ -130,7 +130,7 @@  discard block
 block discarded – undo
130 130
 					$type = $flux['args']['contexte'][$page];
131 131
 				}
132 132
 				if (!isset($disponible[$type])) {
133
-					$disponible[$type] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $type, $ext, $echafauder);
133
+					$disponible[$type] = z_contenu_disponible($prefix_path.$prepend, $z_contenu, $type, $ext, $echafauder);
134 134
 				}
135 135
 				if (is_string($disponible[$type])) {
136 136
 					$flux['data'] = $disponible[$type];
@@ -145,7 +145,7 @@  discard block
 block discarded – undo
145 145
 					$flux['data'] = $echafauder($type, $is[0], $is[1], $is[2], $ext);
146 146
 				} else {
147 147
 					$flux['data'] = ($disponible['404'] = z_contenu_disponible(
148
-						$prefix_path . $prepend,
148
+						$prefix_path.$prepend,
149 149
 						$z_contenu,
150 150
 						'404',
151 151
 						$ext,
@@ -169,10 +169,10 @@  discard block
 block discarded – undo
169 169
 						$type = $flux['args']['contexte'][$page];
170 170
 					}
171 171
 					if ($type !== 'page' and !isset($disponible[$type])) {
172
-						$disponible[$type] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $type, $ext, $echafauder);
172
+						$disponible[$type] = z_contenu_disponible($prefix_path.$prepend, $z_contenu, $type, $ext, $echafauder);
173 173
 					}
174 174
 					if ($type == 'page' or $disponible[$type]) {
175
-						$flux['data'] = z_trouver_bloc($prefix_path . $prepend, $dir, 'dist', $ext);
175
+						$flux['data'] = z_trouver_bloc($prefix_path.$prepend, $dir, 'dist', $ext);
176 176
 					}
177 177
 				}
178 178
 			}
@@ -188,9 +188,9 @@  discard block
 block discarded – undo
188 188
 				isset($flux['args']['contexte']['type-page'])
189 189
 				and (
190 190
 					(isset($flux['args']['contexte']['composition'])
191
-						and file_exists(($f = $squelette . '-' . $flux['args']['contexte']['type-page'] . '-' . $flux['args']['contexte']['composition']) . ".$ext"))
191
+						and file_exists(($f = $squelette.'-'.$flux['args']['contexte']['type-page'].'-'.$flux['args']['contexte']['composition']).".$ext"))
192 192
 					or
193
-					file_exists(($f = $squelette . '-' . $flux['args']['contexte']['type-page']) . ".$ext")
193
+					file_exists(($f = $squelette.'-'.$flux['args']['contexte']['type-page']).".$ext")
194 194
 				)
195 195
 			) {
196 196
 				$flux['data'] = $f;
@@ -198,7 +198,7 @@  discard block
 block discarded – undo
198 198
 		} elseif (
199 199
 			$fond == 'structure'
200 200
 			and z_sanitize_var_zajax()
201
-			and $f = find_in_path($prefix_path . $prepend . 'ajax' . ".$ext")
201
+			and $f = find_in_path($prefix_path.$prepend.'ajax'.".$ext")
202 202
 		) {
203 203
 			$flux['data'] = substr($f, 0, -strlen(".$ext"));
204 204
 		} // chercher le fond correspondant a la composition
@@ -209,7 +209,7 @@  discard block
 block discarded – undo
209 209
 			and $dir = explode('/', $dir)
210 210
 			and $dir = reset($dir)
211 211
 			and in_array($dir, $z_blocs)
212
-			and $f = find_in_path($prefix_path . $prepend . $fond . '-' . $flux['args']['contexte']['composition'] . ".$ext")
212
+			and $f = find_in_path($prefix_path.$prepend.$fond.'-'.$flux['args']['contexte']['composition'].".$ext")
213 213
 		) {
214 214
 			$flux['data'] = substr($f, 0, -strlen(".$ext"));
215 215
 		}
@@ -271,7 +271,7 @@  discard block
 block discarded – undo
271 271
 function z_fond_valide($squelette) {
272 272
 	if (
273 273
 		!_ZCORE_EXCLURE_PATH
274
-		or !preg_match(',(' . _ZCORE_EXCLURE_PATH . ')/,', $squelette)
274
+		or !preg_match(',('._ZCORE_EXCLURE_PATH.')/,', $squelette)
275 275
 	) {
276 276
 		return true;
277 277
 	}
@@ -395,23 +395,23 @@  discard block
 block discarded – undo
395 395
 		}
396 396
 		$dir = z_blocs(test_espace_prive());
397 397
 		$dir = reset($dir);
398
-		$scaffold = "<INCLURE{fond=prive/echafaudage/$dir/" . $fond . ',objet=' . $type . ',id_objet=#' . strtoupper($primary) . ',env}>';
398
+		$scaffold = "<INCLURE{fond=prive/echafaudage/$dir/".$fond.',objet='.$type.',id_objet=#'.strtoupper($primary).',env}>';
399 399
 	} // page objets
400 400
 	elseif ($type = $desc_exec and strpos($type, '/') === false) {
401 401
 		$dir = z_blocs(test_espace_prive());
402 402
 		$dir = reset($dir);
403
-		$scaffold = "<INCLURE{fond=prive/echafaudage/$dir/objets,objet=" . $type . ',env} />';
403
+		$scaffold = "<INCLURE{fond=prive/echafaudage/$dir/objets,objet=".$type.',env} />';
404 404
 	}
405 405
 	// morceau d'objet : on fournit le fond de sibstitution dans $desc_exec
406 406
 	// et objet et tire de $table
407 407
 	elseif ($fond = $desc_exec) {
408 408
 		$dir = md5(dirname($fond));
409
-		$scaffold = "<INCLURE{fond=$fond,objet=" . objet_type($table) . ',env} />';
409
+		$scaffold = "<INCLURE{fond=$fond,objet=".objet_type($table).',env} />';
410 410
 	}
411 411
 
412 412
 	$base_dir = sous_repertoire(_DIR_CACHE, 'scaffold', false);
413 413
 	$base_dir = sous_repertoire($base_dir, $dir, false);
414
-	$f = $base_dir . "$exec";
414
+	$f = $base_dir."$exec";
415 415
 	ecrire_fichier("$f.$ext", $scaffold);
416 416
 
417 417
 	return $f;
Please login to merge, or discard this patch.
Indentation   +319 added lines, -319 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
  * @package SPIP\Core\Public\Styliser
20 20
  **/
21 21
 if (!defined('_ECRIRE_INC_VERSION')) {
22
-	return;
22
+    return;
23 23
 }
24 24
 
25 25
 /**
@@ -29,193 +29,193 @@  discard block
 block discarded – undo
29 29
  * @return array Données modifiées du pipeline
30 30
  */
31 31
 function public_styliser_par_z_dist($flux) {
32
-	static $prefix_path = null;
33
-	static $prefix_length;
34
-	static $z_blocs;
35
-	static $apl_constant;
36
-	static $page;
37
-	static $disponible = [];
38
-	static $echafauder;
39
-	static $prepend = '';
40
-
41
-	if (!isset($prefix_path)) {
42
-		$z_blocs = z_blocs(test_espace_prive());
43
-		if (test_espace_prive()) {
44
-			$prefix_path = 'prive/squelettes/';
45
-			$prefix_length = strlen($prefix_path);
46
-			$apl_constant = '_ECRIRE_AJAX_PARALLEL_LOAD';
47
-			$page = 'exec';
48
-			$echafauder = charger_fonction('echafauder', 'prive', true);
49
-			define('_ZCORE_EXCLURE_PATH', '');
50
-		} else {
51
-			$prefix_path = '';
52
-			$prefix_length = 0;
53
-			$apl_constant = '_Z_AJAX_PARALLEL_LOAD';
54
-			$page = _SPIP_PAGE;
55
-			$echafauder = charger_fonction('echafauder', 'public', true);
56
-			define('_ZCORE_EXCLURE_PATH', '\bprive|\bsquelettes-dist' . (defined('_DIR_PLUGIN_DIST') ? '|\b' . rtrim(
57
-				_DIR_PLUGIN_DIST,
58
-				'/'
59
-			) : ''));
60
-		}
61
-		$prepend = (defined('_Z_PREPEND_PATH') ? _Z_PREPEND_PATH : '');
62
-	}
63
-	$z_contenu = reset($z_blocs); // contenu par defaut
64
-
65
-	$fond = $flux['args']['fond'];
66
-
67
-	if ($prepend or strncmp($fond, $prefix_path, $prefix_length) == 0) {
68
-		$fond = substr($fond, $prefix_length);
69
-		$squelette = $flux['data'];
70
-		$ext = $flux['args']['ext'];
71
-		// Ajax Parallel loading : ne pas calculer le bloc, mais renvoyer un js qui le loadera en ajax
72
-		if (
73
-			defined('_Z_AJAX_PARALLEL_LOAD_OK')
74
-			and $dir = explode('/', $fond)
75
-			and count($dir) == 2 // pas un sous repertoire
76
-			and $dir = reset($dir)
77
-			and in_array($dir, $z_blocs) // verifier deja qu'on est dans un bloc Z
78
-			and defined($apl_constant)
79
-			and in_array($dir, explode(',', constant($apl_constant))) // et dans un demande en APL
80
-			and $pipe = z_trouver_bloc($prefix_path . $prepend, $dir, 'z_apl', $ext) // et qui contient le squelette APL
81
-		) {
82
-			$flux['data'] = $pipe;
83
-
84
-			return $flux;
85
-		}
86
-
87
-		// surcharger aussi les squelettes venant de squelettes-dist/
88
-		if ($squelette and !z_fond_valide($squelette)) {
89
-			$squelette = '';
90
-			$echafauder = '';
91
-		}
92
-		if ($prepend) {
93
-			$squelette = substr(find_in_path($prefix_path . $prepend . "$fond.$ext"), 0, -strlen(".$ext"));
94
-			if ($squelette) {
95
-				$flux['data'] = $squelette;
96
-			}
97
-		}
98
-
99
-		// gerer les squelettes non trouves
100
-		// -> router vers les /dist.html
101
-		// ou scaffolding ou page automatique les contenus
102
-		if (!$squelette) {
103
-			// si on est sur un ?page=XX non trouve
104
-			if (
105
-				(isset($flux['args']['contexte'][$page])
106
-					and $flux['args']['contexte'][$page] == $fond)
107
-				or (isset($flux['args']['contexte']['type-page'])
108
-					and $flux['args']['contexte']['type-page'] == $fond)
109
-				or ($fond == 'sommaire'
110
-					and (!isset($flux['args']['contexte'][$page]) or !$flux['args']['contexte'][$page]))
111
-			) {
112
-				// si on est sur un ?page=XX non trouve
113
-				// se brancher sur contenu/xx si il existe
114
-				// ou si c'est un objet spip, associe a une table, utiliser le fond homonyme
115
-				if (!isset($disponible[$fond])) {
116
-					$disponible[$fond] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $fond, $ext, $echafauder);
117
-				}
118
-
119
-				if ($disponible[$fond]) {
120
-					$flux['data'] = substr(find_in_path($prefix_path . "page.$ext"), 0, -strlen(".$ext"));
121
-				}
122
-			}
123
-
124
-			// echafaudage :
125
-			// si c'est un fond de contenu d'un objet en base
126
-			// generer un fond automatique a la volee pour les webmestres
127
-			elseif (strncmp($fond, "$z_contenu/", strlen($z_contenu) + 1) == 0) {
128
-				$type = substr($fond, strlen($z_contenu) + 1);
129
-				if (($type == 'page') and isset($flux['args']['contexte'][$page])) {
130
-					$type = $flux['args']['contexte'][$page];
131
-				}
132
-				if (!isset($disponible[$type])) {
133
-					$disponible[$type] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $type, $ext, $echafauder);
134
-				}
135
-				if (is_string($disponible[$type])) {
136
-					$flux['data'] = $disponible[$type];
137
-				} elseif (
138
-					$echafauder
139
-					and include_spip('inc/autoriser')
140
-					and isset($GLOBALS['visiteur_session']['statut']) // performance
141
-					and autoriser('echafauder', $type)
142
-					and $is = $disponible[$type]
143
-					and is_array($is)
144
-				) {
145
-					$flux['data'] = $echafauder($type, $is[0], $is[1], $is[2], $ext);
146
-				} else {
147
-					$flux['data'] = ($disponible['404'] = z_contenu_disponible(
148
-						$prefix_path . $prepend,
149
-						$z_contenu,
150
-						'404',
151
-						$ext,
152
-						$echafauder
153
-					));
154
-				}
155
-			}
156
-
157
-			// sinon, si on demande un fond non trouve dans un des autres blocs
158
-			// et si il y a bien un contenu correspondant ou echafaudable
159
-			// se rabbatre sur le dist.html du bloc concerne
160
-			else {
161
-				if (
162
-					$dir = explode('/', $fond)
163
-					and $dir = reset($dir)
164
-					and $dir !== $z_contenu
165
-					and in_array($dir, $z_blocs)
166
-				) {
167
-					$type = substr($fond, strlen("$dir/"));
168
-					if (($type == 'page') and isset($flux['args']['contexte'][$page])) {
169
-						$type = $flux['args']['contexte'][$page];
170
-					}
171
-					if ($type !== 'page' and !isset($disponible[$type])) {
172
-						$disponible[$type] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $type, $ext, $echafauder);
173
-					}
174
-					if ($type == 'page' or $disponible[$type]) {
175
-						$flux['data'] = z_trouver_bloc($prefix_path . $prepend, $dir, 'dist', $ext);
176
-					}
177
-				}
178
-			}
179
-			$squelette = $flux['data'];
180
-		}
181
-		// layout specifiques par type et compositions :
182
-		// body-article.html
183
-		// body-sommaire.html
184
-		// pour des raisons de perfo, les declinaisons doivent etre dans le
185
-		// meme dossier que body.html
186
-		if ($fond == 'body' and substr($squelette, -strlen($fond)) == $fond) {
187
-			if (
188
-				isset($flux['args']['contexte']['type-page'])
189
-				and (
190
-					(isset($flux['args']['contexte']['composition'])
191
-						and file_exists(($f = $squelette . '-' . $flux['args']['contexte']['type-page'] . '-' . $flux['args']['contexte']['composition']) . ".$ext"))
192
-					or
193
-					file_exists(($f = $squelette . '-' . $flux['args']['contexte']['type-page']) . ".$ext")
194
-				)
195
-			) {
196
-				$flux['data'] = $f;
197
-			}
198
-		} elseif (
199
-			$fond == 'structure'
200
-			and z_sanitize_var_zajax()
201
-			and $f = find_in_path($prefix_path . $prepend . 'ajax' . ".$ext")
202
-		) {
203
-			$flux['data'] = substr($f, 0, -strlen(".$ext"));
204
-		} // chercher le fond correspondant a la composition
205
-		elseif (
206
-			isset($flux['args']['contexte']['composition'])
207
-			and (basename($fond) == 'page' or ($squelette and substr($squelette, -strlen($fond)) == $fond))
208
-			and $dir = substr($fond, $prefix_length)
209
-			and $dir = explode('/', $dir)
210
-			and $dir = reset($dir)
211
-			and in_array($dir, $z_blocs)
212
-			and $f = find_in_path($prefix_path . $prepend . $fond . '-' . $flux['args']['contexte']['composition'] . ".$ext")
213
-		) {
214
-			$flux['data'] = substr($f, 0, -strlen(".$ext"));
215
-		}
216
-	}
217
-
218
-	return $flux;
32
+    static $prefix_path = null;
33
+    static $prefix_length;
34
+    static $z_blocs;
35
+    static $apl_constant;
36
+    static $page;
37
+    static $disponible = [];
38
+    static $echafauder;
39
+    static $prepend = '';
40
+
41
+    if (!isset($prefix_path)) {
42
+        $z_blocs = z_blocs(test_espace_prive());
43
+        if (test_espace_prive()) {
44
+            $prefix_path = 'prive/squelettes/';
45
+            $prefix_length = strlen($prefix_path);
46
+            $apl_constant = '_ECRIRE_AJAX_PARALLEL_LOAD';
47
+            $page = 'exec';
48
+            $echafauder = charger_fonction('echafauder', 'prive', true);
49
+            define('_ZCORE_EXCLURE_PATH', '');
50
+        } else {
51
+            $prefix_path = '';
52
+            $prefix_length = 0;
53
+            $apl_constant = '_Z_AJAX_PARALLEL_LOAD';
54
+            $page = _SPIP_PAGE;
55
+            $echafauder = charger_fonction('echafauder', 'public', true);
56
+            define('_ZCORE_EXCLURE_PATH', '\bprive|\bsquelettes-dist' . (defined('_DIR_PLUGIN_DIST') ? '|\b' . rtrim(
57
+                _DIR_PLUGIN_DIST,
58
+                '/'
59
+            ) : ''));
60
+        }
61
+        $prepend = (defined('_Z_PREPEND_PATH') ? _Z_PREPEND_PATH : '');
62
+    }
63
+    $z_contenu = reset($z_blocs); // contenu par defaut
64
+
65
+    $fond = $flux['args']['fond'];
66
+
67
+    if ($prepend or strncmp($fond, $prefix_path, $prefix_length) == 0) {
68
+        $fond = substr($fond, $prefix_length);
69
+        $squelette = $flux['data'];
70
+        $ext = $flux['args']['ext'];
71
+        // Ajax Parallel loading : ne pas calculer le bloc, mais renvoyer un js qui le loadera en ajax
72
+        if (
73
+            defined('_Z_AJAX_PARALLEL_LOAD_OK')
74
+            and $dir = explode('/', $fond)
75
+            and count($dir) == 2 // pas un sous repertoire
76
+            and $dir = reset($dir)
77
+            and in_array($dir, $z_blocs) // verifier deja qu'on est dans un bloc Z
78
+            and defined($apl_constant)
79
+            and in_array($dir, explode(',', constant($apl_constant))) // et dans un demande en APL
80
+            and $pipe = z_trouver_bloc($prefix_path . $prepend, $dir, 'z_apl', $ext) // et qui contient le squelette APL
81
+        ) {
82
+            $flux['data'] = $pipe;
83
+
84
+            return $flux;
85
+        }
86
+
87
+        // surcharger aussi les squelettes venant de squelettes-dist/
88
+        if ($squelette and !z_fond_valide($squelette)) {
89
+            $squelette = '';
90
+            $echafauder = '';
91
+        }
92
+        if ($prepend) {
93
+            $squelette = substr(find_in_path($prefix_path . $prepend . "$fond.$ext"), 0, -strlen(".$ext"));
94
+            if ($squelette) {
95
+                $flux['data'] = $squelette;
96
+            }
97
+        }
98
+
99
+        // gerer les squelettes non trouves
100
+        // -> router vers les /dist.html
101
+        // ou scaffolding ou page automatique les contenus
102
+        if (!$squelette) {
103
+            // si on est sur un ?page=XX non trouve
104
+            if (
105
+                (isset($flux['args']['contexte'][$page])
106
+                    and $flux['args']['contexte'][$page] == $fond)
107
+                or (isset($flux['args']['contexte']['type-page'])
108
+                    and $flux['args']['contexte']['type-page'] == $fond)
109
+                or ($fond == 'sommaire'
110
+                    and (!isset($flux['args']['contexte'][$page]) or !$flux['args']['contexte'][$page]))
111
+            ) {
112
+                // si on est sur un ?page=XX non trouve
113
+                // se brancher sur contenu/xx si il existe
114
+                // ou si c'est un objet spip, associe a une table, utiliser le fond homonyme
115
+                if (!isset($disponible[$fond])) {
116
+                    $disponible[$fond] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $fond, $ext, $echafauder);
117
+                }
118
+
119
+                if ($disponible[$fond]) {
120
+                    $flux['data'] = substr(find_in_path($prefix_path . "page.$ext"), 0, -strlen(".$ext"));
121
+                }
122
+            }
123
+
124
+            // echafaudage :
125
+            // si c'est un fond de contenu d'un objet en base
126
+            // generer un fond automatique a la volee pour les webmestres
127
+            elseif (strncmp($fond, "$z_contenu/", strlen($z_contenu) + 1) == 0) {
128
+                $type = substr($fond, strlen($z_contenu) + 1);
129
+                if (($type == 'page') and isset($flux['args']['contexte'][$page])) {
130
+                    $type = $flux['args']['contexte'][$page];
131
+                }
132
+                if (!isset($disponible[$type])) {
133
+                    $disponible[$type] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $type, $ext, $echafauder);
134
+                }
135
+                if (is_string($disponible[$type])) {
136
+                    $flux['data'] = $disponible[$type];
137
+                } elseif (
138
+                    $echafauder
139
+                    and include_spip('inc/autoriser')
140
+                    and isset($GLOBALS['visiteur_session']['statut']) // performance
141
+                    and autoriser('echafauder', $type)
142
+                    and $is = $disponible[$type]
143
+                    and is_array($is)
144
+                ) {
145
+                    $flux['data'] = $echafauder($type, $is[0], $is[1], $is[2], $ext);
146
+                } else {
147
+                    $flux['data'] = ($disponible['404'] = z_contenu_disponible(
148
+                        $prefix_path . $prepend,
149
+                        $z_contenu,
150
+                        '404',
151
+                        $ext,
152
+                        $echafauder
153
+                    ));
154
+                }
155
+            }
156
+
157
+            // sinon, si on demande un fond non trouve dans un des autres blocs
158
+            // et si il y a bien un contenu correspondant ou echafaudable
159
+            // se rabbatre sur le dist.html du bloc concerne
160
+            else {
161
+                if (
162
+                    $dir = explode('/', $fond)
163
+                    and $dir = reset($dir)
164
+                    and $dir !== $z_contenu
165
+                    and in_array($dir, $z_blocs)
166
+                ) {
167
+                    $type = substr($fond, strlen("$dir/"));
168
+                    if (($type == 'page') and isset($flux['args']['contexte'][$page])) {
169
+                        $type = $flux['args']['contexte'][$page];
170
+                    }
171
+                    if ($type !== 'page' and !isset($disponible[$type])) {
172
+                        $disponible[$type] = z_contenu_disponible($prefix_path . $prepend, $z_contenu, $type, $ext, $echafauder);
173
+                    }
174
+                    if ($type == 'page' or $disponible[$type]) {
175
+                        $flux['data'] = z_trouver_bloc($prefix_path . $prepend, $dir, 'dist', $ext);
176
+                    }
177
+                }
178
+            }
179
+            $squelette = $flux['data'];
180
+        }
181
+        // layout specifiques par type et compositions :
182
+        // body-article.html
183
+        // body-sommaire.html
184
+        // pour des raisons de perfo, les declinaisons doivent etre dans le
185
+        // meme dossier que body.html
186
+        if ($fond == 'body' and substr($squelette, -strlen($fond)) == $fond) {
187
+            if (
188
+                isset($flux['args']['contexte']['type-page'])
189
+                and (
190
+                    (isset($flux['args']['contexte']['composition'])
191
+                        and file_exists(($f = $squelette . '-' . $flux['args']['contexte']['type-page'] . '-' . $flux['args']['contexte']['composition']) . ".$ext"))
192
+                    or
193
+                    file_exists(($f = $squelette . '-' . $flux['args']['contexte']['type-page']) . ".$ext")
194
+                )
195
+            ) {
196
+                $flux['data'] = $f;
197
+            }
198
+        } elseif (
199
+            $fond == 'structure'
200
+            and z_sanitize_var_zajax()
201
+            and $f = find_in_path($prefix_path . $prepend . 'ajax' . ".$ext")
202
+        ) {
203
+            $flux['data'] = substr($f, 0, -strlen(".$ext"));
204
+        } // chercher le fond correspondant a la composition
205
+        elseif (
206
+            isset($flux['args']['contexte']['composition'])
207
+            and (basename($fond) == 'page' or ($squelette and substr($squelette, -strlen($fond)) == $fond))
208
+            and $dir = substr($fond, $prefix_length)
209
+            and $dir = explode('/', $dir)
210
+            and $dir = reset($dir)
211
+            and in_array($dir, $z_blocs)
212
+            and $f = find_in_path($prefix_path . $prepend . $fond . '-' . $flux['args']['contexte']['composition'] . ".$ext")
213
+        ) {
214
+            $flux['data'] = substr($f, 0, -strlen(".$ext"));
215
+        }
216
+    }
217
+
218
+    return $flux;
219 219
 }
220 220
 
221 221
 /**
@@ -225,18 +225,18 @@  discard block
 block discarded – undo
225 225
  * @return array
226 226
  */
227 227
 function z_blocs($espace_prive = false) {
228
-	if ($espace_prive) {
229
-		return ($GLOBALS['z_blocs_ecrire'] ?? [
230
-			'contenu',
231
-			'navigation',
232
-			'extra',
233
-			'head',
234
-			'hierarchie',
235
-			'top'
236
-		]);
237
-	}
238
-
239
-	return ($GLOBALS['z_blocs'] ?? ['contenu']);
228
+    if ($espace_prive) {
229
+        return ($GLOBALS['z_blocs_ecrire'] ?? [
230
+            'contenu',
231
+            'navigation',
232
+            'extra',
233
+            'head',
234
+            'hierarchie',
235
+            'top'
236
+        ]);
237
+    }
238
+
239
+    return ($GLOBALS['z_blocs'] ?? ['contenu']);
240 240
 }
241 241
 
242 242
 /**
@@ -251,11 +251,11 @@  discard block
 block discarded – undo
251 251
  * @return mixed
252 252
  */
253 253
 function z_contenu_disponible($prefix_path, $z_contenu, $type, $ext, $echafauder = true) {
254
-	if ($d = z_trouver_bloc($prefix_path, $z_contenu, $type, $ext)) {
255
-		return $d;
256
-	}
254
+    if ($d = z_trouver_bloc($prefix_path, $z_contenu, $type, $ext)) {
255
+        return $d;
256
+    }
257 257
 
258
-	return $echafauder ? z_echafaudable($type) : false;
258
+    return $echafauder ? z_echafaudable($type) : false;
259 259
 }
260 260
 
261 261
 /**
@@ -269,14 +269,14 @@  discard block
 block discarded – undo
269 269
  *   `true` si on peut l'utiliser, `false` sinon.
270 270
  **/
271 271
 function z_fond_valide($squelette) {
272
-	if (
273
-		!_ZCORE_EXCLURE_PATH
274
-		or !preg_match(',(' . _ZCORE_EXCLURE_PATH . ')/,', $squelette)
275
-	) {
276
-		return true;
277
-	}
278
-
279
-	return false;
272
+    if (
273
+        !_ZCORE_EXCLURE_PATH
274
+        or !preg_match(',(' . _ZCORE_EXCLURE_PATH . ')/,', $squelette)
275
+    ) {
276
+        return true;
277
+    }
278
+
279
+    return false;
280 280
 }
281 281
 
282 282
 /**
@@ -294,14 +294,14 @@  discard block
 block discarded – undo
294 294
  * @return string
295 295
  */
296 296
 function z_trouver_bloc($prefix_path, $bloc, $fond, $ext) {
297
-	if (
298
-		(defined('_ZCORE_BLOC_PREFIX_SKEL') and $f = find_in_path("$prefix_path$bloc/$bloc.$fond.$ext") and z_fond_valide($f))
299
-		or ($f = find_in_path("$prefix_path$bloc/$fond.$ext") and z_fond_valide($f))
300
-	) {
301
-		return substr($f, 0, -strlen(".$ext"));
302
-	}
303
-
304
-	return '';
297
+    if (
298
+        (defined('_ZCORE_BLOC_PREFIX_SKEL') and $f = find_in_path("$prefix_path$bloc/$bloc.$fond.$ext") and z_fond_valide($f))
299
+        or ($f = find_in_path("$prefix_path$bloc/$fond.$ext") and z_fond_valide($f))
300
+    ) {
301
+        return substr($f, 0, -strlen(".$ext"));
302
+    }
303
+
304
+    return '';
305 305
 }
306 306
 
307 307
 /**
@@ -313,52 +313,52 @@  discard block
 block discarded – undo
313 313
  * @return bool
314 314
  */
315 315
 function z_echafaudable($type) {
316
-	static $pages = null;
317
-	static $echafaudable = [];
318
-	if (isset($echafaudable[$type])) {
319
-		return $echafaudable[$type];
320
-	}
321
-	if (preg_match(',[^\w],', $type)) {
322
-		return $echafaudable[$type] = false;
323
-	}
324
-
325
-	if (test_espace_prive()) {
326
-		if (!function_exists('trouver_objet_exec')) {
327
-			include_spip('inc/pipelines_ecrire');
328
-		}
329
-		if ($e = trouver_objet_exec($type)) {
330
-			return $echafaudable[$type] = [$e['table'], $e['table_objet_sql'], $e];
331
-		} else {
332
-			// peut etre c'est un exec=types qui liste tous les objets "type"
333
-			if (
334
-				($t = objet_type($type, false)) !== $type
335
-				and $e = trouver_objet_exec($t)
336
-			) {
337
-				return $echafaudable[$type] = [$e['table'], $e['table_objet_sql'], $t];
338
-			}
339
-		}
340
-	} else {
341
-		if (is_null($pages)) {
342
-			$pages = [];
343
-			$liste = lister_tables_objets_sql();
344
-			foreach ($liste as $t => $d) {
345
-				if ($d['page']) {
346
-					$pages[$d['page']] = [$d['table_objet'], $t];
347
-				}
348
-			}
349
-		}
350
-		if (!isset($pages[$type])) {
351
-			return $echafaudable[$type] = false;
352
-		}
353
-		if ((is_countable($pages[$type]) ? count($pages[$type]) : 0) == 2) {
354
-			$trouver_table = charger_fonction('trouver_table', 'base');
355
-			$pages[$type][] = $trouver_table(reset($pages[$type]));
356
-		}
357
-
358
-		return $echafaudable[$type] = $pages[$type];
359
-	}
360
-
361
-	return $echafaudable[$type] = false;
316
+    static $pages = null;
317
+    static $echafaudable = [];
318
+    if (isset($echafaudable[$type])) {
319
+        return $echafaudable[$type];
320
+    }
321
+    if (preg_match(',[^\w],', $type)) {
322
+        return $echafaudable[$type] = false;
323
+    }
324
+
325
+    if (test_espace_prive()) {
326
+        if (!function_exists('trouver_objet_exec')) {
327
+            include_spip('inc/pipelines_ecrire');
328
+        }
329
+        if ($e = trouver_objet_exec($type)) {
330
+            return $echafaudable[$type] = [$e['table'], $e['table_objet_sql'], $e];
331
+        } else {
332
+            // peut etre c'est un exec=types qui liste tous les objets "type"
333
+            if (
334
+                ($t = objet_type($type, false)) !== $type
335
+                and $e = trouver_objet_exec($t)
336
+            ) {
337
+                return $echafaudable[$type] = [$e['table'], $e['table_objet_sql'], $t];
338
+            }
339
+        }
340
+    } else {
341
+        if (is_null($pages)) {
342
+            $pages = [];
343
+            $liste = lister_tables_objets_sql();
344
+            foreach ($liste as $t => $d) {
345
+                if ($d['page']) {
346
+                    $pages[$d['page']] = [$d['table_objet'], $t];
347
+                }
348
+            }
349
+        }
350
+        if (!isset($pages[$type])) {
351
+            return $echafaudable[$type] = false;
352
+        }
353
+        if ((is_countable($pages[$type]) ? count($pages[$type]) : 0) == 2) {
354
+            $trouver_table = charger_fonction('trouver_table', 'base');
355
+            $pages[$type][] = $trouver_table(reset($pages[$type]));
356
+        }
357
+
358
+        return $echafaudable[$type] = $pages[$type];
359
+    }
360
+
361
+    return $echafaudable[$type] = false;
362 362
 }
363 363
 
364 364
 
@@ -375,46 +375,46 @@  discard block
 block discarded – undo
375 375
  * @return string
376 376
  */
377 377
 function prive_echafauder_dist($exec, $table, $table_sql, $desc_exec, $ext) {
378
-	$scaffold = '';
379
-
380
-	// page objet ou objet_edit
381
-	if (is_array($desc_exec)) {
382
-		$type = $desc_exec['type'];
383
-		$primary = $desc_exec['id_table_objet'];
384
-
385
-		if ($desc_exec['edition'] === false) {
386
-			$fond = 'objet';
387
-		} else {
388
-			$trouver_table = charger_fonction('trouver_table', 'base');
389
-			$desc = $trouver_table($table_sql);
390
-			if (isset($desc['field']['id_rubrique'])) {
391
-				$fond = 'objet_edit';
392
-			} else {
393
-				$fond = 'objet_edit.sans_rubrique';
394
-			}
395
-		}
396
-		$dir = z_blocs(test_espace_prive());
397
-		$dir = reset($dir);
398
-		$scaffold = "<INCLURE{fond=prive/echafaudage/$dir/" . $fond . ',objet=' . $type . ',id_objet=#' . strtoupper($primary) . ',env}>';
399
-	} // page objets
400
-	elseif ($type = $desc_exec and strpos($type, '/') === false) {
401
-		$dir = z_blocs(test_espace_prive());
402
-		$dir = reset($dir);
403
-		$scaffold = "<INCLURE{fond=prive/echafaudage/$dir/objets,objet=" . $type . ',env} />';
404
-	}
405
-	// morceau d'objet : on fournit le fond de sibstitution dans $desc_exec
406
-	// et objet et tire de $table
407
-	elseif ($fond = $desc_exec) {
408
-		$dir = md5(dirname($fond));
409
-		$scaffold = "<INCLURE{fond=$fond,objet=" . objet_type($table) . ',env} />';
410
-	}
411
-
412
-	$base_dir = sous_repertoire(_DIR_CACHE, 'scaffold', false);
413
-	$base_dir = sous_repertoire($base_dir, $dir, false);
414
-	$f = $base_dir . "$exec";
415
-	ecrire_fichier("$f.$ext", $scaffold);
416
-
417
-	return $f;
378
+    $scaffold = '';
379
+
380
+    // page objet ou objet_edit
381
+    if (is_array($desc_exec)) {
382
+        $type = $desc_exec['type'];
383
+        $primary = $desc_exec['id_table_objet'];
384
+
385
+        if ($desc_exec['edition'] === false) {
386
+            $fond = 'objet';
387
+        } else {
388
+            $trouver_table = charger_fonction('trouver_table', 'base');
389
+            $desc = $trouver_table($table_sql);
390
+            if (isset($desc['field']['id_rubrique'])) {
391
+                $fond = 'objet_edit';
392
+            } else {
393
+                $fond = 'objet_edit.sans_rubrique';
394
+            }
395
+        }
396
+        $dir = z_blocs(test_espace_prive());
397
+        $dir = reset($dir);
398
+        $scaffold = "<INCLURE{fond=prive/echafaudage/$dir/" . $fond . ',objet=' . $type . ',id_objet=#' . strtoupper($primary) . ',env}>';
399
+    } // page objets
400
+    elseif ($type = $desc_exec and strpos($type, '/') === false) {
401
+        $dir = z_blocs(test_espace_prive());
402
+        $dir = reset($dir);
403
+        $scaffold = "<INCLURE{fond=prive/echafaudage/$dir/objets,objet=" . $type . ',env} />';
404
+    }
405
+    // morceau d'objet : on fournit le fond de sibstitution dans $desc_exec
406
+    // et objet et tire de $table
407
+    elseif ($fond = $desc_exec) {
408
+        $dir = md5(dirname($fond));
409
+        $scaffold = "<INCLURE{fond=$fond,objet=" . objet_type($table) . ',env} />';
410
+    }
411
+
412
+    $base_dir = sous_repertoire(_DIR_CACHE, 'scaffold', false);
413
+    $base_dir = sous_repertoire($base_dir, $dir, false);
414
+    $f = $base_dir . "$exec";
415
+    ecrire_fichier("$f.$ext", $scaffold);
416
+
417
+    return $f;
418 418
 }
419 419
 
420 420
 /**
@@ -423,17 +423,17 @@  discard block
 block discarded – undo
423 423
  * @return bool|string
424 424
  */
425 425
 function z_sanitize_var_zajax() {
426
-	$z_ajax = _request('var_zajax');
427
-	if (!$z_ajax) {
428
-		return false;
429
-	}
430
-	if (
431
-		!$z_blocs = z_blocs(test_espace_prive())
432
-		or !in_array($z_ajax, $z_blocs)
433
-	) {
434
-		set_request('var_zajax'); // enlever cette demande incongrue
435
-		$z_ajax = false;
436
-	}
437
-
438
-	return $z_ajax;
426
+    $z_ajax = _request('var_zajax');
427
+    if (!$z_ajax) {
428
+        return false;
429
+    }
430
+    if (
431
+        !$z_blocs = z_blocs(test_espace_prive())
432
+        or !in_array($z_ajax, $z_blocs)
433
+    ) {
434
+        set_request('var_zajax'); // enlever cette demande incongrue
435
+        $z_ajax = false;
436
+    }
437
+
438
+    return $z_ajax;
439 439
 }
Please login to merge, or discard this patch.
ecrire/public/evaluer_page.php 3 patches
Indentation   +58 added lines, -58 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 /**
@@ -32,67 +32,67 @@  discard block
 block discarded – undo
32 32
 
33 33
 // Cas d'une page contenant du PHP :
34 34
 if (empty($page['process_ins']) or $page['process_ins'] != 'html') {
35
-	include_spip('inc/lang');
35
+    include_spip('inc/lang');
36 36
 
37
-	// restaurer l'etat des notes avant calcul
38
-	if (
39
-		isset($page['notes'])
40
-		and $page['notes']
41
-		and $notes = charger_fonction('notes', 'inc', true)
42
-	) {
43
-		$notes($page['notes'], 'restaurer_etat');
44
-	}
45
-	ob_start();
46
-	if (strpos($page['texte'], '?xml') !== false) {
47
-		$page['texte'] = str_replace('<' . '?xml', "<\1?xml", $page['texte']);
48
-	}
37
+    // restaurer l'etat des notes avant calcul
38
+    if (
39
+        isset($page['notes'])
40
+        and $page['notes']
41
+        and $notes = charger_fonction('notes', 'inc', true)
42
+    ) {
43
+        $notes($page['notes'], 'restaurer_etat');
44
+    }
45
+    ob_start();
46
+    if (strpos($page['texte'], '?xml') !== false) {
47
+        $page['texte'] = str_replace('<' . '?xml', "<\1?xml", $page['texte']);
48
+    }
49 49
 
50
-	try {
51
-		$res = eval('?' . '>' . $page['texte']);
52
-		// error catching 5.2<=PHP<7
53
-		if (
54
-			$res === false
55
-			and function_exists('error_get_last')
56
-			and ($erreur = error_get_last())
57
-		) {
58
-			$code = $page['texte'];
59
-			$GLOBALS['numero_ligne_php'] = 1;
60
-			if (!function_exists('numerote_ligne_php')) {
61
-				function numerote_ligne_php($match) {
62
-					$GLOBALS['numero_ligne_php']++;
63
-					return "\n/*" . str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
64
-				}
65
-			}
66
-			$code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', $code);
67
-			$code = trim(highlight_string($code, true));
68
-			erreur_squelette('L' . $erreur['line'] . ': ' . $erreur['message'] . '<br />' . $code, [$page['source'],'',$erreur['file'],'',$GLOBALS['spip_lang']]);
69
-			$page['texte'] = '<!-- Erreur -->';
70
-		}
71
-		else {
72
-			$page['texte'] = ob_get_contents();
73
-		}
74
-	}
75
-	catch (Exception $e) {
76
-		$code = $page['texte'];
77
-		$GLOBALS['numero_ligne_php'] = 1;
78
-		if (!function_exists('numerote_ligne_php')) {
79
-			function numerote_ligne_php($match) {
80
-				$GLOBALS['numero_ligne_php']++;
81
-				return "\n/*" . str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
82
-			}
83
-		}
84
-		$code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', $code);
85
-		$code = trim(highlight_string($code, true));
86
-		erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]);
87
-		$page['texte'] = '<!-- Erreur -->';
88
-	}
89
-	ob_end_clean();
50
+    try {
51
+        $res = eval('?' . '>' . $page['texte']);
52
+        // error catching 5.2<=PHP<7
53
+        if (
54
+            $res === false
55
+            and function_exists('error_get_last')
56
+            and ($erreur = error_get_last())
57
+        ) {
58
+            $code = $page['texte'];
59
+            $GLOBALS['numero_ligne_php'] = 1;
60
+            if (!function_exists('numerote_ligne_php')) {
61
+                function numerote_ligne_php($match) {
62
+                    $GLOBALS['numero_ligne_php']++;
63
+                    return "\n/*" . str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
64
+                }
65
+            }
66
+            $code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', $code);
67
+            $code = trim(highlight_string($code, true));
68
+            erreur_squelette('L' . $erreur['line'] . ': ' . $erreur['message'] . '<br />' . $code, [$page['source'],'',$erreur['file'],'',$GLOBALS['spip_lang']]);
69
+            $page['texte'] = '<!-- Erreur -->';
70
+        }
71
+        else {
72
+            $page['texte'] = ob_get_contents();
73
+        }
74
+    }
75
+    catch (Exception $e) {
76
+        $code = $page['texte'];
77
+        $GLOBALS['numero_ligne_php'] = 1;
78
+        if (!function_exists('numerote_ligne_php')) {
79
+            function numerote_ligne_php($match) {
80
+                $GLOBALS['numero_ligne_php']++;
81
+                return "\n/*" . str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
82
+            }
83
+        }
84
+        $code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', $code);
85
+        $code = trim(highlight_string($code, true));
86
+        erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]);
87
+        $page['texte'] = '<!-- Erreur -->';
88
+    }
89
+    ob_end_clean();
90 90
 
91
-	$page['process_ins'] = 'html';
91
+    $page['process_ins'] = 'html';
92 92
 
93
-	if (strpos($page['texte'], '?xml') !== false) {
94
-		$page['texte'] = str_replace("<\1?xml", '<' . '?xml', $page['texte']);
95
-	}
93
+    if (strpos($page['texte'], '?xml') !== false) {
94
+        $page['texte'] = str_replace("<\1?xml", '<' . '?xml', $page['texte']);
95
+    }
96 96
 }
97 97
 
98 98
 page_base_href($page['texte']);
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -44,11 +44,11 @@  discard block
 block discarded – undo
44 44
 	}
45 45
 	ob_start();
46 46
 	if (strpos($page['texte'], '?xml') !== false) {
47
-		$page['texte'] = str_replace('<' . '?xml', "<\1?xml", $page['texte']);
47
+		$page['texte'] = str_replace('<'.'?xml', "<\1?xml", $page['texte']);
48 48
 	}
49 49
 
50 50
 	try {
51
-		$res = eval('?' . '>' . $page['texte']);
51
+		$res = eval('?'.'>'.$page['texte']);
52 52
 		// error catching 5.2<=PHP<7
53 53
 		if (
54 54
 			$res === false
@@ -60,12 +60,12 @@  discard block
 block discarded – undo
60 60
 			if (!function_exists('numerote_ligne_php')) {
61 61
 				function numerote_ligne_php($match) {
62 62
 					$GLOBALS['numero_ligne_php']++;
63
-					return "\n/*" . str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
63
+					return "\n/*".str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT).'*/';
64 64
 				}
65 65
 			}
66
-			$code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', $code);
66
+			$code = '/*001*/'.preg_replace_callback(",\n,", 'numerote_ligne_php', $code);
67 67
 			$code = trim(highlight_string($code, true));
68
-			erreur_squelette('L' . $erreur['line'] . ': ' . $erreur['message'] . '<br />' . $code, [$page['source'],'',$erreur['file'],'',$GLOBALS['spip_lang']]);
68
+			erreur_squelette('L'.$erreur['line'].': '.$erreur['message'].'<br />'.$code, [$page['source'], '', $erreur['file'], '', $GLOBALS['spip_lang']]);
69 69
 			$page['texte'] = '<!-- Erreur -->';
70 70
 		}
71 71
 		else {
@@ -78,12 +78,12 @@  discard block
 block discarded – undo
78 78
 		if (!function_exists('numerote_ligne_php')) {
79 79
 			function numerote_ligne_php($match) {
80 80
 				$GLOBALS['numero_ligne_php']++;
81
-				return "\n/*" . str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
81
+				return "\n/*".str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT).'*/';
82 82
 			}
83 83
 		}
84
-		$code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', $code);
84
+		$code = '/*001*/'.preg_replace_callback(",\n,", 'numerote_ligne_php', $code);
85 85
 		$code = trim(highlight_string($code, true));
86
-		erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]);
86
+		erreur_squelette('L'.$e->getLine().': '.$e->getMessage().'<br />'.$code, [$page['source'], '', $e->getFile(), '', $GLOBALS['spip_lang']]);
87 87
 		$page['texte'] = '<!-- Erreur -->';
88 88
 	}
89 89
 	ob_end_clean();
@@ -91,7 +91,7 @@  discard block
 block discarded – undo
91 91
 	$page['process_ins'] = 'html';
92 92
 
93 93
 	if (strpos($page['texte'], '?xml') !== false) {
94
-		$page['texte'] = str_replace("<\1?xml", '<' . '?xml', $page['texte']);
94
+		$page['texte'] = str_replace("<\1?xml", '<'.'?xml', $page['texte']);
95 95
 	}
96 96
 }
97 97
 
Please login to merge, or discard this patch.
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -67,12 +67,10 @@
 block discarded – undo
67 67
 			$code = trim(highlight_string($code, true));
68 68
 			erreur_squelette('L' . $erreur['line'] . ': ' . $erreur['message'] . '<br />' . $code, [$page['source'],'',$erreur['file'],'',$GLOBALS['spip_lang']]);
69 69
 			$page['texte'] = '<!-- Erreur -->';
70
-		}
71
-		else {
70
+		} else {
72 71
 			$page['texte'] = ob_get_contents();
73 72
 		}
74
-	}
75
-	catch (Exception $e) {
73
+	} catch (Exception $e) {
76 74
 		$code = $page['texte'];
77 75
 		$GLOBALS['numero_ligne_php'] = 1;
78 76
 		if (!function_exists('numerote_ligne_php')) {
Please login to merge, or discard this patch.
ecrire/public/balises.php 3 patches
Spacing   +51 added lines, -51 removed lines patch added patch discarded remove patch
@@ -364,7 +364,7 @@  discard block
 block discarded – undo
364 364
  */
365 365
 function balise_DOSSIER_SQUELETTE_dist($p) {
366 366
 	$code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE));
367
-	$p->code = "_DIR_RACINE . '$code'" .
367
+	$p->code = "_DIR_RACINE . '$code'".
368 368
 		$p->interdire_scripts = false;
369 369
 
370 370
 	return $p;
@@ -383,7 +383,7 @@  discard block
 block discarded – undo
383 383
  */
384 384
 function balise_SQUELETTE_dist($p) {
385 385
 	$code = addslashes($p->descr['sourcefile']);
386
-	$p->code = "'$code'" .
386
+	$p->code = "'$code'".
387 387
 		$p->interdire_scripts = false;
388 388
 
389 389
 	return $p;
@@ -435,9 +435,9 @@  discard block
 block discarded – undo
435 435
  **/
436 436
 function balise_NOM_SITE_dist($p) {
437 437
 	if (!$p->etoile) {
438
-		$p->code = 'supprimer_numero(calculer_url(' .
439
-			champ_sql('url_site', $p) . ',' .
440
-			champ_sql('nom_site', $p) .
438
+		$p->code = 'supprimer_numero(calculer_url('.
439
+			champ_sql('url_site', $p).','.
440
+			champ_sql('nom_site', $p).
441 441
 			", 'titre', \$connect, false))";
442 442
 	} else {
443 443
 		$p->code = champ_sql('nom_site', $p);
@@ -588,8 +588,8 @@  discard block
 block discarded – undo
588 588
  *     Pile complétée par le code à générer
589 589
  **/
590 590
 function balise_POPULARITE_ABSOLUE_dist($p) {
591
-	$p->code = 'ceil(' .
592
-		champ_sql('popularite', $p) .
591
+	$p->code = 'ceil('.
592
+		champ_sql('popularite', $p).
593 593
 		')';
594 594
 	$p->interdire_scripts = false;
595 595
 
@@ -670,7 +670,7 @@  discard block
 block discarded – undo
670 670
 	$p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b);
671 671
 ;
672 672
 	if (($v = interprete_argument_balise(1, $p)) !== null) {
673
-		$p->code = 'table_valeur(' . $p->code . ', ' . $v . ')';
673
+		$p->code = 'table_valeur('.$p->code.', '.$v.')';
674 674
 	}
675 675
 	$p->interdire_scripts = true;
676 676
 
@@ -809,16 +809,16 @@  discard block
 block discarded – undo
809 809
 	$trouver_table = charger_fonction('trouver_table', 'base');
810 810
 	if ($desc = $trouver_table(table_objet_sql($type_objet))) {
811 811
 		if (isset($desc['field']['descriptif'])) {
812
-			$_ligne .= "'descriptif' => " . champ_sql('descriptif', $p) . ',';
812
+			$_ligne .= "'descriptif' => ".champ_sql('descriptif', $p).',';
813 813
 		}
814 814
 		if (isset($desc['field']['texte'])) {
815
-			$_ligne .= "'texte' => " . champ_sql('texte', $p) . ',';
815
+			$_ligne .= "'texte' => ".champ_sql('texte', $p).',';
816 816
 		}
817 817
 		if (isset($desc['field']['chapo'])) {
818
-			$_ligne .= "'chapo' => " . champ_sql('chapo', $p) . ',';
818
+			$_ligne .= "'chapo' => ".champ_sql('chapo', $p).',';
819 819
 		}
820 820
 		if (isset($desc['introduction_longueur'])) {
821
-			$_introduction_longueur = "'" . $desc['introduction_longueur'] . "'";
821
+			$_introduction_longueur = "'".$desc['introduction_longueur']."'";
822 822
 		}
823 823
 	}
824 824
 	$_ligne .= ')';
@@ -917,10 +917,10 @@  discard block
 block discarded – undo
917 917
 		$p->code = sprintf(
918 918
 			CODE_RECUPERER_FOND,
919 919
 			"'modeles/lesauteurs'",
920
-			"array('objet'=>'" . $objet .
921
-			"','id_objet' => " . champ_sql($id_table_objet, $p) .
922
-			",'$id_table_objet' => " . champ_sql($id_table_objet, $p) .
923
-			($objet == 'article' ? '' : ",'id_article' => " . champ_sql('id_article', $p)) .
920
+			"array('objet'=>'".$objet.
921
+			"','id_objet' => ".champ_sql($id_table_objet, $p).
922
+			",'$id_table_objet' => ".champ_sql($id_table_objet, $p).
923
+			($objet == 'article' ? '' : ",'id_article' => ".champ_sql('id_article', $p)).
924 924
 			')',
925 925
 			"'trim'=>true, 'compil'=>array($c)",
926 926
 			_q($connect)
@@ -989,7 +989,7 @@  discard block
 block discarded – undo
989 989
 					$m = trim($m);
990 990
 					if ($m != "''") {
991 991
 						if (!preg_match(',\W,', $m)) {
992
-							$m = $boucle->id_table . ".$m";
992
+							$m = $boucle->id_table.".$m";
993 993
 						}
994 994
 
995 995
 						$m .= ' AS titre_rang';
@@ -1150,7 +1150,7 @@  discard block
 block discarded – undo
1150 1150
 	$f_pagination = chercher_filtre('pagination');
1151 1151
 	$type = $p->boucles[$b]->modificateur['debut_nom'];
1152 1152
 	$modif = ($type[0] !== "'") ? "'debut'.$type"
1153
-		: ("'debut" . substr($type, 1));
1153
+		: ("'debut".substr($type, 1));
1154 1154
 
1155 1155
 	$p->code = sprintf(
1156 1156
 		CODE_PAGINATION,
@@ -1294,7 +1294,7 @@  discard block
 block discarded – undo
1294 1294
 		$msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN']];
1295 1295
 		erreur_squelette($msg, $p);
1296 1296
 	} else {
1297
-		$p->code = 'find_in_path(' . $arg . ')';
1297
+		$p->code = 'find_in_path('.$arg.')';
1298 1298
 	}
1299 1299
 
1300 1300
 	$p->interdire_scripts = false;
@@ -1329,7 +1329,7 @@  discard block
 block discarded – undo
1329 1329
 		$msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN_IMAGE']];
1330 1330
 		erreur_squelette($msg, $p);
1331 1331
 	} else {
1332
-		$p->code = 'chemin_image(' . $arg . ')';
1332
+		$p->code = 'chemin_image('.$arg.')';
1333 1333
 	}
1334 1334
 
1335 1335
 	$p->interdire_scripts = false;
@@ -1383,7 +1383,7 @@  discard block
 block discarded – undo
1383 1383
 		// cas de #ENV sans argument : on retourne le serialize() du tableau
1384 1384
 		// une belle fonction [(#ENV|affiche_env)] serait pratique
1385 1385
 		if ($src) {
1386
-			$p->code = '(is_array($a = (' . $src . ')) ? serialize($a) : "")';
1386
+			$p->code = '(is_array($a = ('.$src.')) ? serialize($a) : "")';
1387 1387
 		} else {
1388 1388
 			$p->code = 'serialize($Pile[0]??[])';
1389 1389
 		}
@@ -1436,8 +1436,8 @@  discard block
 block discarded – undo
1436 1436
 	$_sinon = interprete_argument_balise(2, $p);
1437 1437
 	$_unserialize = sinon(interprete_argument_balise(3, $p), 'false');
1438 1438
 
1439
-	$p->code = '(include_spip(\'inc/config\')?lire_config(' . $arg . ',' .
1440
-		($_sinon && $_sinon != "''" ? $_sinon : 'null') . ',' . $_unserialize . "):'')";
1439
+	$p->code = '(include_spip(\'inc/config\')?lire_config('.$arg.','.
1440
+		($_sinon && $_sinon != "''" ? $_sinon : 'null').','.$_unserialize."):'')";
1441 1441
 
1442 1442
 	return $p;
1443 1443
 }
@@ -1530,7 +1530,7 @@  discard block
 block discarded – undo
1530 1530
 		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SESSION_SET']];
1531 1531
 		erreur_squelette($err_b_s_a, $p);
1532 1532
 	} else {
1533
-		$p->code = '(include_spip("inc/session") AND session_set(' . $_nom . ',' . $_val . '))';
1533
+		$p->code = '(include_spip("inc/session") AND session_set('.$_nom.','.$_val.'))';
1534 1534
 	}
1535 1535
 
1536 1536
 	$p->interdire_scripts = false;
@@ -1578,7 +1578,7 @@  discard block
 block discarded – undo
1578 1578
 			)
1579 1579
 		) {
1580 1580
 			$p->code = /* $r[1]. */
1581
-				'(' . $r[2] . ')';
1581
+				'('.$r[2].')';
1582 1582
 		} else {
1583 1583
 			$p->code = "eval('return '.$php.';')";
1584 1584
 		}
@@ -1822,9 +1822,9 @@  discard block
 block discarded – undo
1822 1822
 
1823 1823
 		// noter la duree du cache dans un entete proprietaire
1824 1824
 
1825
-		$code = "'<'.'" . '?php header("X-Spip-Cache: '
1825
+		$code = "'<'.'".'?php header("X-Spip-Cache: '
1826 1826
 			. $duree
1827
-			. '"); ?' . "'.'>'";
1827
+			. '"); ?'."'.'>'";
1828 1828
 
1829 1829
 		// Remplir le header Cache-Control
1830 1830
 		// cas #CACHE{0}
@@ -1845,9 +1845,9 @@  discard block
 block discarded – undo
1845 1845
 				$pa == 'cache-client'
1846 1846
 				and $duree > 0
1847 1847
 			) {
1848
-				$code .= ".'<'.'" . '?php header("Cache-Control: max-age='
1848
+				$code .= ".'<'.'".'?php header("Cache-Control: max-age='
1849 1849
 					. $duree
1850
-					. '"); ?' . "'.'>'";
1850
+					. '"); ?'."'.'>'";
1851 1851
 				// il semble logique, si on cache-client, de ne pas invalider
1852 1852
 				$pa = 'statique';
1853 1853
 			}
@@ -1856,7 +1856,7 @@  discard block
 block discarded – undo
1856 1856
 				$pa == 'statique'
1857 1857
 				and $duree > 0
1858 1858
 			) {
1859
-				$code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'";
1859
+				$code .= ".'<'.'".'?php header("X-Spip-Statique: oui"); ?'."'.'>'";
1860 1860
 			}
1861 1861
 		}
1862 1862
 	} else {
@@ -2020,9 +2020,9 @@  discard block
 block discarded – undo
2020 2020
 		if ($p->etoile) {
2021 2021
 			$_options[] = "'etoile'=>true";
2022 2022
 		}
2023
-		$_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ')';
2023
+		$_options[] = "'compil'=>array(".memoriser_contexte_compil($p).')';
2024 2024
 
2025
-		$_l = 'array(' . join(",\n\t", $_contexte) . ')';
2025
+		$_l = 'array('.join(",\n\t", $_contexte).')';
2026 2026
 		if ($flag_env) {
2027 2027
 			$_l = "array_merge(\$Pile[0],$_l)";
2028 2028
 		}
@@ -2032,7 +2032,7 @@  discard block
 block discarded – undo
2032 2032
 		$msg = ['zbug_balise_sans_argument', ['balise' => ' INCLURE']];
2033 2033
 		erreur_squelette($msg, $p);
2034 2034
 	} else {
2035
-		$p->code = 'charge_scripts(' . $_contexte[1] . ',false)';
2035
+		$p->code = 'charge_scripts('.$_contexte[1].',false)';
2036 2036
 	}
2037 2037
 
2038 2038
 	$p->interdire_scripts = false; // la securite est assuree par recuperer_fond
@@ -2080,7 +2080,7 @@  discard block
 block discarded – undo
2080 2080
 		unset($_contexte[1]);
2081 2081
 
2082 2082
 		if (preg_match("/^\s*'[^']*'/s", $nom)) {
2083
-			$nom = "'modeles/" . substr($nom, 1);
2083
+			$nom = "'modeles/".substr($nom, 1);
2084 2084
 		} else {
2085 2085
 			$nom = "'modeles/' . $nom";
2086 2086
 		}
@@ -2097,8 +2097,8 @@  discard block
 block discarded – undo
2097 2097
 			$primary = $p->boucles[$p->id_boucle]->primary;
2098 2098
 			if (!strpos($primary, ',')) {
2099 2099
 				$id = champ_sql($primary, $p);
2100
-				$_contexte[] = "'$primary'=>" . $id;
2101
-				$_contexte[] = "'id'=>" . $id;
2100
+				$_contexte[] = "'$primary'=>".$id;
2101
+				$_contexte[] = "'id'=>".$id;
2102 2102
 			}
2103 2103
 		}
2104 2104
 		$_contexte[] = "'recurs'=>(++\$recurs)";
@@ -2110,11 +2110,11 @@  discard block
 block discarded – undo
2110 2110
 		$_options = memoriser_contexte_compil($p);
2111 2111
 		$_options = "'compil'=>array($_options), 'trim'=>true";
2112 2112
 		if (isset($_contexte['ajax'])) {
2113
-			$_options .= ', ' . preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2113
+			$_options .= ', '.preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2114 2114
 			unset($_contexte['ajax']);
2115 2115
 		}
2116 2116
 
2117
-		$_l = 'array(' . join(",\n\t", $_contexte) . ')';
2117
+		$_l = 'array('.join(",\n\t", $_contexte).')';
2118 2118
 		if ($flag_env) {
2119 2119
 			$_l = "array_merge(\$Pile[0],$_l)";
2120 2120
 		}
@@ -2224,12 +2224,12 @@  discard block
 block discarded – undo
2224 2224
 function balise_DOUBLONS_dist($p) {
2225 2225
 	if ($type = interprete_argument_balise(1, $p)) {
2226 2226
 		if ($famille = interprete_argument_balise(2, $p)) {
2227
-			$type .= '.' . $famille;
2227
+			$type .= '.'.$famille;
2228 2228
 		}
2229
-		$p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")';
2229
+		$p->code = '(isset($doublons['.$type.']) ? $doublons['.$type.'] : "")';
2230 2230
 		if (!$p->etoile) {
2231 2231
 			$p->code = 'array_filter(array_map("intval",explode(",",'
2232
-				. $p->code . ')))';
2232
+				. $p->code.')))';
2233 2233
 		}
2234 2234
 	} else {
2235 2235
 		$p->code = '$doublons';
@@ -2358,7 +2358,7 @@  discard block
 block discarded – undo
2358 2358
 			$_code[] = "$_key => $_val";
2359 2359
 		}
2360 2360
 	} while ($_key && $_val);
2361
-	$p->code = 'array(' . join(', ', $_code) . ')';
2361
+	$p->code = 'array('.join(', ', $_code).')';
2362 2362
 	$p->interdire_scripts = false;
2363 2363
 
2364 2364
 	return $p;
@@ -2385,7 +2385,7 @@  discard block
 block discarded – undo
2385 2385
 	while ($_val = interprete_argument_balise($n++, $p)) {
2386 2386
 		$_code[] = $_val;
2387 2387
 	}
2388
-	$p->code = 'array(' . join(', ', $_code) . ')';
2388
+	$p->code = 'array('.join(', ', $_code).')';
2389 2389
 	$p->interdire_scripts = false;
2390 2390
 
2391 2391
 	return $p;
@@ -2430,10 +2430,10 @@  discard block
 block discarded – undo
2430 2430
 		$_code[] = $_v;
2431 2431
 	}
2432 2432
 
2433
-	$p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join(
2433
+	$p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser('.join(
2434 2434
 		', ',
2435 2435
 		$_code
2436
-	) . ')?" ":"")';
2436
+	).')?" ":"")';
2437 2437
 	$p->interdire_scripts = false;
2438 2438
 
2439 2439
 	return $p;
@@ -2466,7 +2466,7 @@  discard block
 block discarded – undo
2466 2466
 	$type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"';
2467 2467
 
2468 2468
 	$f = chercher_filtre('info_plugin');
2469
-	$p->code = $f . '(' . $plugin . ', ' . $type_info . ')';
2469
+	$p->code = $f.'('.$plugin.', '.$type_info.')';
2470 2470
 
2471 2471
 	return $p;
2472 2472
 }
@@ -2716,12 +2716,12 @@  discard block
 block discarded – undo
2716 2716
 	$_issens = "in_array($_champ,array('>','<'))";
2717 2717
 	$_sens = "(strpos('< >',$_champ)-1)";
2718 2718
 
2719
-	$_variable = "((\$s=$_issens)?'sens':'tri')." . $boucle->modificateur['tri_nom'];
2719
+	$_variable = "((\$s=$_issens)?'sens':'tri').".$boucle->modificateur['tri_nom'];
2720 2720
 	$_url = "parametre_url(self(),$_variable,\$s?$_sens:$_champ)";
2721
-	$_url = "parametre_url($_url,'var_memotri',strncmp(" . $boucle->modificateur['tri_nom'] . ",'session',7)==0?$_variable:'')";
2722
-	$_on = '$s?(' . $boucle->modificateur['tri_sens'] . "==$_sens" . '):(' . $boucle->modificateur['tri_champ'] . "==$_champ)";
2721
+	$_url = "parametre_url($_url,'var_memotri',strncmp(".$boucle->modificateur['tri_nom'].",'session',7)==0?$_variable:'')";
2722
+	$_on = '$s?('.$boucle->modificateur['tri_sens']."==$_sens".'):('.$boucle->modificateur['tri_champ']."==$_champ)";
2723 2723
 
2724
-	$p->code = "lien_ou_expose($_url,$_libelle,$_on" . ($_class ? ",$_class" : '') . ')';
2724
+	$p->code = "lien_ou_expose($_url,$_libelle,$_on".($_class ? ",$_class" : '').')';
2725 2725
 	//$p->code = "''";
2726 2726
 	$p->interdire_scripts = false;
2727 2727
 
@@ -2795,7 +2795,7 @@  discard block
 block discarded – undo
2795 2795
 		$connect = $p->boucles[$p->id_boucle]->sql_serveur;
2796 2796
 	}
2797 2797
 
2798
-	$p->code = '(objet_test_si_publie(' . $_type . ',intval(' . $_id . '),' . _q($connect) . ")?' ':'')";
2798
+	$p->code = '(objet_test_si_publie('.$_type.',intval('.$_id.'),'._q($connect).")?' ':'')";
2799 2799
 	$p->interdire_scripts = false;
2800 2800
 
2801 2801
 	return $p;
Please login to merge, or discard this patch.
Indentation   +945 added lines, -945 removed lines patch added patch discarded remove patch
@@ -26,7 +26,7 @@  discard block
 block discarded – undo
26 26
  **/
27 27
 
28 28
 if (!defined('_ECRIRE_INC_VERSION')) {
29
-	return;
29
+    return;
30 30
 }
31 31
 
32 32
 /**
@@ -48,16 +48,16 @@  discard block
 block discarded – undo
48 48
  *     Code PHP si cet argument est présent, sinon null
49 49
  **/
50 50
 function interprete_argument_balise(int $n, Champ $p): ?string {
51
-	if (($p->param) && (!$p->param[0][0]) && ((is_countable($p->param[0]) ? count($p->param[0]) : 0) > $n)) {
52
-		return calculer_liste(
53
-			$p->param[0][$n],
54
-			$p->descr,
55
-			$p->boucles,
56
-			$p->id_boucle
57
-		);
58
-	} else {
59
-		return null;
60
-	}
51
+    if (($p->param) && (!$p->param[0][0]) && ((is_countable($p->param[0]) ? count($p->param[0]) : 0) > $n)) {
52
+        return calculer_liste(
53
+            $p->param[0][$n],
54
+            $p->descr,
55
+            $p->boucles,
56
+            $p->id_boucle
57
+        );
58
+    } else {
59
+        return null;
60
+    }
61 61
 }
62 62
 
63 63
 
@@ -77,10 +77,10 @@  discard block
 block discarded – undo
77 77
  *     Pile complétée par le code à générer
78 78
  **/
79 79
 function balise_NOM_SITE_SPIP_dist($p) {
80
-	$p->code = "\$GLOBALS['meta']['nom_site']";
80
+    $p->code = "\$GLOBALS['meta']['nom_site']";
81 81
 
82
-	#$p->interdire_scripts = true;
83
-	return $p;
82
+    #$p->interdire_scripts = true;
83
+    return $p;
84 84
 }
85 85
 
86 86
 /**
@@ -96,10 +96,10 @@  discard block
 block discarded – undo
96 96
  *     Pile complétée par le code à générer
97 97
  **/
98 98
 function balise_EMAIL_WEBMASTER_dist($p) {
99
-	$p->code = "\$GLOBALS['meta']['email_webmaster']";
99
+    $p->code = "\$GLOBALS['meta']['email_webmaster']";
100 100
 
101
-	#$p->interdire_scripts = true;
102
-	return $p;
101
+    #$p->interdire_scripts = true;
102
+    return $p;
103 103
 }
104 104
 
105 105
 /**
@@ -115,10 +115,10 @@  discard block
 block discarded – undo
115 115
  *     Pile complétée par le code à générer
116 116
  **/
117 117
 function balise_DESCRIPTIF_SITE_SPIP_dist($p) {
118
-	$p->code = "\$GLOBALS['meta']['descriptif_site']";
118
+    $p->code = "\$GLOBALS['meta']['descriptif_site']";
119 119
 
120
-	#$p->interdire_scripts = true;
121
-	return $p;
120
+    #$p->interdire_scripts = true;
121
+    return $p;
122 122
 }
123 123
 
124 124
 
@@ -139,10 +139,10 @@  discard block
 block discarded – undo
139 139
  *     Pile complétée par le code à générer
140 140
  **/
141 141
 function balise_CHARSET_dist($p) {
142
-	$p->code = "\$GLOBALS['meta']['charset']";
142
+    $p->code = "\$GLOBALS['meta']['charset']";
143 143
 
144
-	#$p->interdire_scripts = true;
145
-	return $p;
144
+    #$p->interdire_scripts = true;
145
+    return $p;
146 146
 }
147 147
 
148 148
 /**
@@ -167,11 +167,11 @@  discard block
 block discarded – undo
167 167
  *     Pile complétée par le code à générer
168 168
  **/
169 169
 function balise_LANG_LEFT_dist($p) {
170
-	$_lang = champ_sql('lang', $p);
171
-	$p->code = "lang_dir($_lang, 'left','right')";
172
-	$p->interdire_scripts = false;
170
+    $_lang = champ_sql('lang', $p);
171
+    $p->code = "lang_dir($_lang, 'left','right')";
172
+    $p->interdire_scripts = false;
173 173
 
174
-	return $p;
174
+    return $p;
175 175
 }
176 176
 
177 177
 /**
@@ -191,11 +191,11 @@  discard block
 block discarded – undo
191 191
  *     Pile complétée par le code à générer
192 192
  **/
193 193
 function balise_LANG_RIGHT_dist($p) {
194
-	$_lang = champ_sql('lang', $p);
195
-	$p->code = "lang_dir($_lang, 'right','left')";
196
-	$p->interdire_scripts = false;
194
+    $_lang = champ_sql('lang', $p);
195
+    $p->code = "lang_dir($_lang, 'right','left')";
196
+    $p->interdire_scripts = false;
197 197
 
198
-	return $p;
198
+    return $p;
199 199
 }
200 200
 
201 201
 /**
@@ -220,11 +220,11 @@  discard block
 block discarded – undo
220 220
  *     Pile complétée par le code à générer
221 221
  **/
222 222
 function balise_LANG_DIR_dist($p) {
223
-	$_lang = champ_sql('lang', $p);
224
-	$p->code = "lang_dir($_lang, 'ltr','rtl')";
225
-	$p->interdire_scripts = false;
223
+    $_lang = champ_sql('lang', $p);
224
+    $p->code = "lang_dir($_lang, 'ltr','rtl')";
225
+    $p->interdire_scripts = false;
226 226
 
227
-	return $p;
227
+    return $p;
228 228
 }
229 229
 
230 230
 
@@ -241,10 +241,10 @@  discard block
 block discarded – undo
241 241
  *     Pile complétée par le code à générer
242 242
  **/
243 243
 function balise_PUCE_dist($p) {
244
-	$p->code = 'definir_puce()';
245
-	$p->interdire_scripts = false;
244
+    $p->code = 'definir_puce()';
245
+    $p->interdire_scripts = false;
246 246
 
247
-	return $p;
247
+    return $p;
248 248
 }
249 249
 
250 250
 
@@ -268,9 +268,9 @@  discard block
 block discarded – undo
268 268
  *     Pile completée du code PHP d'exécution de la balise
269 269
  */
270 270
 function balise_DATE_dist($p) {
271
-	$p->code = champ_sql('date', $p);
271
+    $p->code = champ_sql('date', $p);
272 272
 
273
-	return $p;
273
+    return $p;
274 274
 }
275 275
 
276 276
 
@@ -290,10 +290,10 @@  discard block
 block discarded – undo
290 290
  *     Pile completée du code PHP d'exécution de la balise
291 291
  */
292 292
 function balise_DATE_REDAC_dist($p) {
293
-	$p->code = champ_sql('date_redac', $p);
294
-	$p->interdire_scripts = false;
293
+    $p->code = champ_sql('date_redac', $p);
294
+    $p->interdire_scripts = false;
295 295
 
296
-	return $p;
296
+    return $p;
297 297
 }
298 298
 
299 299
 /**
@@ -312,10 +312,10 @@  discard block
 block discarded – undo
312 312
  *     Pile completée du code PHP d'exécution de la balise
313 313
  */
314 314
 function balise_DATE_MODIF_dist($p) {
315
-	$p->code = champ_sql('date_modif', $p);
316
-	$p->interdire_scripts = false;
315
+    $p->code = champ_sql('date_modif', $p);
316
+    $p->interdire_scripts = false;
317 317
 
318
-	return $p;
318
+    return $p;
319 319
 }
320 320
 
321 321
 /**
@@ -333,13 +333,13 @@  discard block
 block discarded – undo
333 333
  *     Pile completée du code PHP d'exécution de la balise
334 334
  */
335 335
 function balise_DATE_NOUVEAUTES_dist($p) {
336
-	$p->code = "((\$GLOBALS['meta']['quoi_de_neuf'] == 'oui'
336
+    $p->code = "((\$GLOBALS['meta']['quoi_de_neuf'] == 'oui'
337 337
 	AND isset(\$GLOBALS['meta']['dernier_envoi_neuf'])) ?
338 338
 	\$GLOBALS['meta']['dernier_envoi_neuf'] :
339 339
 	\"'0000-00-00'\")";
340
-	$p->interdire_scripts = false;
340
+    $p->interdire_scripts = false;
341 341
 
342
-	return $p;
342
+    return $p;
343 343
 }
344 344
 
345 345
 
@@ -357,11 +357,11 @@  discard block
 block discarded – undo
357 357
  *     Pile completée du code PHP d'exécution de la balise
358 358
  */
359 359
 function balise_DOSSIER_SQUELETTE_dist($p) {
360
-	$code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE));
361
-	$p->code = "_DIR_RACINE . '$code'" .
362
-		$p->interdire_scripts = false;
360
+    $code = substr(addslashes(dirname($p->descr['sourcefile'])), strlen(_DIR_RACINE));
361
+    $p->code = "_DIR_RACINE . '$code'" .
362
+        $p->interdire_scripts = false;
363 363
 
364
-	return $p;
364
+    return $p;
365 365
 }
366 366
 
367 367
 /**
@@ -376,11 +376,11 @@  discard block
 block discarded – undo
376 376
  *     Pile completée du code PHP d'exécution de la balise
377 377
  */
378 378
 function balise_SQUELETTE_dist($p) {
379
-	$code = addslashes($p->descr['sourcefile']);
380
-	$p->code = "'$code'" .
381
-		$p->interdire_scripts = false;
379
+    $code = addslashes($p->descr['sourcefile']);
380
+    $p->code = "'$code'" .
381
+        $p->interdire_scripts = false;
382 382
 
383
-	return $p;
383
+    return $p;
384 384
 }
385 385
 
386 386
 /**
@@ -399,10 +399,10 @@  discard block
 block discarded – undo
399 399
  *     Pile completée du code PHP d'exécution de la balise
400 400
  */
401 401
 function balise_SPIP_VERSION_dist($p) {
402
-	$p->code = 'spip_version()';
403
-	$p->interdire_scripts = false;
402
+    $p->code = 'spip_version()';
403
+    $p->interdire_scripts = false;
404 404
 
405
-	return $p;
405
+    return $p;
406 406
 }
407 407
 
408 408
 
@@ -428,18 +428,18 @@  discard block
 block discarded – undo
428 428
  *     Pile complétée par le code à générer
429 429
  **/
430 430
 function balise_NOM_SITE_dist($p) {
431
-	if (!$p->etoile) {
432
-		$p->code = 'supprimer_numero(calculer_url(' .
433
-			champ_sql('url_site', $p) . ',' .
434
-			champ_sql('nom_site', $p) .
435
-			", 'titre', \$connect, false))";
436
-	} else {
437
-		$p->code = champ_sql('nom_site', $p);
438
-	}
431
+    if (!$p->etoile) {
432
+        $p->code = 'supprimer_numero(calculer_url(' .
433
+            champ_sql('url_site', $p) . ',' .
434
+            champ_sql('nom_site', $p) .
435
+            ", 'titre', \$connect, false))";
436
+    } else {
437
+        $p->code = champ_sql('nom_site', $p);
438
+    }
439 439
 
440
-	$p->interdire_scripts = true;
440
+    $p->interdire_scripts = true;
441 441
 
442
-	return $p;
442
+    return $p;
443 443
 }
444 444
 
445 445
 
@@ -456,11 +456,11 @@  discard block
 block discarded – undo
456 456
  *     Pile complétée par le code à générer
457 457
  **/
458 458
 function balise_NOTES_dist($p) {
459
-	// Recuperer les notes
460
-	$p->code = 'calculer_notes()';
459
+    // Recuperer les notes
460
+    $p->code = 'calculer_notes()';
461 461
 
462
-	#$p->interdire_scripts = true;
463
-	return $p;
462
+    #$p->interdire_scripts = true;
463
+    return $p;
464 464
 }
465 465
 
466 466
 
@@ -482,10 +482,10 @@  discard block
 block discarded – undo
482 482
  *     Pile complétée par le code à générer
483 483
  **/
484 484
 function balise_RECHERCHE_dist($p) {
485
-	$p->code = 'entites_html(_request("recherche"))';
486
-	$p->interdire_scripts = false;
485
+    $p->code = 'entites_html(_request("recherche"))';
486
+    $p->interdire_scripts = false;
487 487
 
488
-	return $p;
488
+    return $p;
489 489
 }
490 490
 
491 491
 
@@ -503,17 +503,17 @@  discard block
 block discarded – undo
503 503
  *     Pile complétée par le code à générer
504 504
  **/
505 505
 function balise_COMPTEUR_BOUCLE_dist($p) {
506
-	$b = index_boucle_mere($p);
507
-	if ($b === '') {
508
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
509
-		erreur_squelette($msg, $p);
510
-	} else {
511
-		$p->code = "(\$Numrows['$b']['compteur_boucle'] ?? 0)";
512
-		$p->boucles[$b]->cptrows = true;
513
-		$p->interdire_scripts = false;
506
+    $b = index_boucle_mere($p);
507
+    if ($b === '') {
508
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
509
+        erreur_squelette($msg, $p);
510
+    } else {
511
+        $p->code = "(\$Numrows['$b']['compteur_boucle'] ?? 0)";
512
+        $p->boucles[$b]->cptrows = true;
513
+        $p->interdire_scripts = false;
514 514
 
515
-		return $p;
516
-	}
515
+        return $p;
516
+    }
517 517
 }
518 518
 
519 519
 /**
@@ -531,17 +531,17 @@  discard block
 block discarded – undo
531 531
  *     Pile complétée par le code à générer
532 532
  **/
533 533
 function balise_TOTAL_BOUCLE_dist($p) {
534
-	$b = index_boucle_mere($p);
535
-	if ($b === '') {
536
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
537
-		erreur_squelette($msg, $p);
538
-	} else {
539
-		$p->code = "(\$Numrows['$b']['total'] ?? 0)";
540
-		$p->boucles[$b]->numrows = true;
541
-		$p->interdire_scripts = false;
542
-	}
534
+    $b = index_boucle_mere($p);
535
+    if ($b === '') {
536
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
537
+        erreur_squelette($msg, $p);
538
+    } else {
539
+        $p->code = "(\$Numrows['$b']['total'] ?? 0)";
540
+        $p->boucles[$b]->numrows = true;
541
+        $p->interdire_scripts = false;
542
+    }
543 543
 
544
-	return $p;
544
+    return $p;
545 545
 }
546 546
 
547 547
 
@@ -561,7 +561,7 @@  discard block
 block discarded – undo
561 561
  *     Pile complétée par le code à générer
562 562
  **/
563 563
 function balise_POINTS_dist($p) {
564
-	return rindex_pile($p, 'points', 'recherche');
564
+    return rindex_pile($p, 'points', 'recherche');
565 565
 }
566 566
 
567 567
 
@@ -582,12 +582,12 @@  discard block
 block discarded – undo
582 582
  *     Pile complétée par le code à générer
583 583
  **/
584 584
 function balise_POPULARITE_ABSOLUE_dist($p) {
585
-	$p->code = 'ceil(' .
586
-		champ_sql('popularite', $p) .
587
-		')';
588
-	$p->interdire_scripts = false;
585
+    $p->code = 'ceil(' .
586
+        champ_sql('popularite', $p) .
587
+        ')';
588
+    $p->interdire_scripts = false;
589 589
 
590
-	return $p;
590
+    return $p;
591 591
 }
592 592
 
593 593
 /**
@@ -607,10 +607,10 @@  discard block
 block discarded – undo
607 607
  *     Pile complétée par le code à générer
608 608
  **/
609 609
 function balise_POPULARITE_SITE_dist($p) {
610
-	$p->code = 'ceil($GLOBALS["meta"][\'popularite_total\'])';
611
-	$p->interdire_scripts = false;
610
+    $p->code = 'ceil($GLOBALS["meta"][\'popularite_total\'])';
611
+    $p->interdire_scripts = false;
612 612
 
613
-	return $p;
613
+    return $p;
614 614
 }
615 615
 
616 616
 /**
@@ -631,10 +631,10 @@  discard block
 block discarded – undo
631 631
  *     Pile complétée par le code à générer
632 632
  **/
633 633
 function balise_POPULARITE_MAX_dist($p) {
634
-	$p->code = 'ceil($GLOBALS["meta"][\'popularite_max\'])';
635
-	$p->interdire_scripts = false;
634
+    $p->code = 'ceil($GLOBALS["meta"][\'popularite_max\'])';
635
+    $p->interdire_scripts = false;
636 636
 
637
-	return $p;
637
+    return $p;
638 638
 }
639 639
 
640 640
 
@@ -660,15 +660,15 @@  discard block
 block discarded – undo
660 660
  *     Pile complétée par le code à générer
661 661
  **/
662 662
 function balise_VALEUR_dist($p) {
663
-	$b = $p->nom_boucle ?: $p->id_boucle;
664
-	$p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b);
663
+    $b = $p->nom_boucle ?: $p->id_boucle;
664
+    $p->code = index_pile($p->id_boucle, 'valeur', $p->boucles, $b);
665 665
 ;
666
-	if (($v = interprete_argument_balise(1, $p)) !== null) {
667
-		$p->code = 'table_valeur(' . $p->code . ', ' . $v . ')';
668
-	}
669
-	$p->interdire_scripts = true;
666
+    if (($v = interprete_argument_balise(1, $p)) !== null) {
667
+        $p->code = 'table_valeur(' . $p->code . ', ' . $v . ')';
668
+    }
669
+    $p->interdire_scripts = true;
670 670
 
671
-	return $p;
671
+    return $p;
672 672
 }
673 673
 
674 674
 /**
@@ -697,16 +697,16 @@  discard block
 block discarded – undo
697 697
  *     Pile complétée par le code à générer
698 698
  **/
699 699
 function balise_EXPOSE_dist($p) {
700
-	$on = "'on'";
701
-	$off = "''";
702
-	if (($v = interprete_argument_balise(1, $p)) !== null) {
703
-		$on = $v;
704
-		if (($v = interprete_argument_balise(2, $p)) !== null) {
705
-			$off = $v;
706
-		}
707
-	}
700
+    $on = "'on'";
701
+    $off = "''";
702
+    if (($v = interprete_argument_balise(1, $p)) !== null) {
703
+        $on = $v;
704
+        if (($v = interprete_argument_balise(2, $p)) !== null) {
705
+            $off = $v;
706
+        }
707
+    }
708 708
 
709
-	return calculer_balise_expose($p, $on, $off);
709
+    return calculer_balise_expose($p, $on, $off);
710 710
 }
711 711
 
712 712
 /**
@@ -724,35 +724,35 @@  discard block
 block discarded – undo
724 724
  *     Pile complétée par le code à générer
725 725
  **/
726 726
 function calculer_balise_expose($p, $on, $off) {
727
-	$b = index_boucle($p);
728
-	if (empty($p->boucles[$b]->primary)) {
729
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
730
-		erreur_squelette($msg, $p);
731
-	} else {
732
-		$key = $p->boucles[$b]->primary;
733
-		$type = $p->boucles[$p->id_boucle]->primary;
734
-		$desc = $p->boucles[$b]->show;
735
-		$connect = sql_quote($p->boucles[$b]->sql_serveur);
727
+    $b = index_boucle($p);
728
+    if (empty($p->boucles[$b]->primary)) {
729
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
730
+        erreur_squelette($msg, $p);
731
+    } else {
732
+        $key = $p->boucles[$b]->primary;
733
+        $type = $p->boucles[$p->id_boucle]->primary;
734
+        $desc = $p->boucles[$b]->show;
735
+        $connect = sql_quote($p->boucles[$b]->sql_serveur);
736 736
 
737
-		// Ne pas utiliser champ_sql, on jongle avec le nom boucle explicite
738
-		$c = index_pile($p->id_boucle, $type, $p->boucles);
737
+        // Ne pas utiliser champ_sql, on jongle avec le nom boucle explicite
738
+        $c = index_pile($p->id_boucle, $type, $p->boucles);
739 739
 
740
-		if (isset($desc['field']['id_parent'])) {
741
-			$parent = 0; // pour if (!$parent) dans calculer_expose
742
-		} elseif (isset($desc['field']['id_rubrique'])) {
743
-			$parent = index_pile($p->id_boucle, 'id_rubrique', $p->boucles, $b);
744
-		} elseif (isset($desc['field']['id_groupe'])) {
745
-			$parent = index_pile($p->id_boucle, 'id_groupe', $p->boucles, $b);
746
-		} else {
747
-			$parent = "''";
748
-		}
740
+        if (isset($desc['field']['id_parent'])) {
741
+            $parent = 0; // pour if (!$parent) dans calculer_expose
742
+        } elseif (isset($desc['field']['id_rubrique'])) {
743
+            $parent = index_pile($p->id_boucle, 'id_rubrique', $p->boucles, $b);
744
+        } elseif (isset($desc['field']['id_groupe'])) {
745
+            $parent = index_pile($p->id_boucle, 'id_groupe', $p->boucles, $b);
746
+        } else {
747
+            $parent = "''";
748
+        }
749 749
 
750
-		$p->code = "(calcul_exposer($c, '$type', \$Pile[0], $parent, '$key', $connect) ? $on : $off)";
751
-	}
750
+        $p->code = "(calcul_exposer($c, '$type', \$Pile[0], $parent, '$key', $connect) ? $on : $off)";
751
+    }
752 752
 
753
-	$p->interdire_scripts = false;
753
+    $p->interdire_scripts = false;
754 754
 
755
-	return $p;
755
+    return $p;
756 756
 }
757 757
 
758 758
 
@@ -793,46 +793,46 @@  discard block
 block discarded – undo
793 793
  **/
794 794
 function balise_INTRODUCTION_dist($p) {
795 795
 
796
-	$type_objet = $p->type_requete;
797
-	$cle_objet = id_table_objet($type_objet);
798
-	$_id_objet = champ_sql($cle_objet, $p);
799
-
800
-	// Récupérer les valeurs sql nécessaires : descriptif, texte et chapo
801
-	// ainsi que le longueur d'introduction donnée dans la description de l'objet.
802
-	$_introduction_longueur = 'null';
803
-	$_ligne = 'array(';
804
-	$trouver_table = charger_fonction('trouver_table', 'base');
805
-	if ($desc = $trouver_table(table_objet_sql($type_objet))) {
806
-		if (isset($desc['field']['descriptif'])) {
807
-			$_ligne .= "'descriptif' => " . champ_sql('descriptif', $p) . ',';
808
-		}
809
-		if (isset($desc['field']['texte'])) {
810
-			$_ligne .= "'texte' => " . champ_sql('texte', $p) . ',';
811
-		}
812
-		if (isset($desc['field']['chapo'])) {
813
-			$_ligne .= "'chapo' => " . champ_sql('chapo', $p) . ',';
814
-		}
815
-		if (isset($desc['introduction_longueur'])) {
816
-			$_introduction_longueur = "'" . $desc['introduction_longueur'] . "'";
817
-		}
818
-	}
819
-	$_ligne .= ')';
820
-
821
-	// Récupérer la longueur et la suite passés en paramètres
822
-	$_longueur_ou_suite = 'null';
823
-	if (($v1 = interprete_argument_balise(1, $p)) !== null) {
824
-		$_longueur_ou_suite = $v1;
825
-	}
826
-	$_suite = 'null';
827
-	if (($v2 = interprete_argument_balise(2, $p)) !== null) {
828
-		$_suite = $v2;
829
-	}
830
-
831
-	$p->code = "generer_objet_introduction($_id_objet, '$type_objet', $_ligne, $_introduction_longueur, $_longueur_ou_suite, $_suite, \$connect)";
832
-
833
-	#$p->interdire_scripts = true;
834
-	$p->etoile = '*'; // propre est deja fait dans le calcul de l'intro
835
-	return $p;
796
+    $type_objet = $p->type_requete;
797
+    $cle_objet = id_table_objet($type_objet);
798
+    $_id_objet = champ_sql($cle_objet, $p);
799
+
800
+    // Récupérer les valeurs sql nécessaires : descriptif, texte et chapo
801
+    // ainsi que le longueur d'introduction donnée dans la description de l'objet.
802
+    $_introduction_longueur = 'null';
803
+    $_ligne = 'array(';
804
+    $trouver_table = charger_fonction('trouver_table', 'base');
805
+    if ($desc = $trouver_table(table_objet_sql($type_objet))) {
806
+        if (isset($desc['field']['descriptif'])) {
807
+            $_ligne .= "'descriptif' => " . champ_sql('descriptif', $p) . ',';
808
+        }
809
+        if (isset($desc['field']['texte'])) {
810
+            $_ligne .= "'texte' => " . champ_sql('texte', $p) . ',';
811
+        }
812
+        if (isset($desc['field']['chapo'])) {
813
+            $_ligne .= "'chapo' => " . champ_sql('chapo', $p) . ',';
814
+        }
815
+        if (isset($desc['introduction_longueur'])) {
816
+            $_introduction_longueur = "'" . $desc['introduction_longueur'] . "'";
817
+        }
818
+    }
819
+    $_ligne .= ')';
820
+
821
+    // Récupérer la longueur et la suite passés en paramètres
822
+    $_longueur_ou_suite = 'null';
823
+    if (($v1 = interprete_argument_balise(1, $p)) !== null) {
824
+        $_longueur_ou_suite = $v1;
825
+    }
826
+    $_suite = 'null';
827
+    if (($v2 = interprete_argument_balise(2, $p)) !== null) {
828
+        $_suite = $v2;
829
+    }
830
+
831
+    $p->code = "generer_objet_introduction($_id_objet, '$type_objet', $_ligne, $_introduction_longueur, $_longueur_ou_suite, $_suite, \$connect)";
832
+
833
+    #$p->interdire_scripts = true;
834
+    $p->etoile = '*'; // propre est deja fait dans le calcul de l'intro
835
+    return $p;
836 836
 }
837 837
 
838 838
 
@@ -852,15 +852,15 @@  discard block
 block discarded – undo
852 852
  *     Pile complétée par le code à générer
853 853
  **/
854 854
 function balise_LANG_dist($p) {
855
-	$_lang = champ_sql('lang', $p);
856
-	if (!$p->etoile) {
857
-		$p->code = "spip_htmlentities($_lang ? $_lang : \$GLOBALS['spip_lang'])";
858
-	} else {
859
-		$p->code = "spip_htmlentities($_lang)";
860
-	}
861
-	$p->interdire_scripts = false;
855
+    $_lang = champ_sql('lang', $p);
856
+    if (!$p->etoile) {
857
+        $p->code = "spip_htmlentities($_lang ? $_lang : \$GLOBALS['spip_lang'])";
858
+    } else {
859
+        $p->code = "spip_htmlentities($_lang)";
860
+    }
861
+    $p->interdire_scripts = false;
862 862
 
863
-	return $p;
863
+    return $p;
864 864
 }
865 865
 
866 866
 /**
@@ -882,45 +882,45 @@  discard block
 block discarded – undo
882 882
  *     Pile complétée par le code à générer
883 883
  */
884 884
 function balise_LESAUTEURS_dist($p) {
885
-	// Cherche le champ 'lesauteurs' dans la pile
886
-	$_lesauteurs = champ_sql('lesauteurs', $p, '');
887
-
888
-	// Si le champ n'existe pas (cas de spip_articles), on applique
889
-	// le modele lesauteurs.html en passant id_article dans le contexte;
890
-	// dans le cas contraire on prend le champ 'lesauteurs'
891
-	// (cf extension sites/)
892
-	if ($_lesauteurs) {
893
-		$p->code = "safehtml($_lesauteurs)";
894
-		// $p->interdire_scripts = true;
895
-	} else {
896
-		if (!$p->id_boucle) {
897
-			$connect = '';
898
-			$objet = 'article';
899
-			$id_table_objet = 'id_article';
900
-		} else {
901
-			$b = $p->nom_boucle ?: $p->id_boucle;
902
-			$connect = $p->boucles[$b]->sql_serveur;
903
-			$type_boucle = $p->boucles[$b]->type_requete;
904
-			$objet = objet_type($type_boucle);
905
-			$id_table_objet = id_table_objet($type_boucle);
906
-		}
907
-		$c = memoriser_contexte_compil($p);
908
-
909
-		$p->code = sprintf(
910
-			CODE_RECUPERER_FOND,
911
-			"'modeles/lesauteurs'",
912
-			"array('objet'=>'" . $objet .
913
-			"','id_objet' => " . champ_sql($id_table_objet, $p) .
914
-			",'$id_table_objet' => " . champ_sql($id_table_objet, $p) .
915
-			($objet == 'article' ? '' : ",'id_article' => " . champ_sql('id_article', $p)) .
916
-			')',
917
-			"'trim'=>true, 'compil'=>array($c)",
918
-			_q($connect)
919
-		);
920
-		$p->interdire_scripts = false; // securite apposee par recuperer_fond()
921
-	}
922
-
923
-	return $p;
885
+    // Cherche le champ 'lesauteurs' dans la pile
886
+    $_lesauteurs = champ_sql('lesauteurs', $p, '');
887
+
888
+    // Si le champ n'existe pas (cas de spip_articles), on applique
889
+    // le modele lesauteurs.html en passant id_article dans le contexte;
890
+    // dans le cas contraire on prend le champ 'lesauteurs'
891
+    // (cf extension sites/)
892
+    if ($_lesauteurs) {
893
+        $p->code = "safehtml($_lesauteurs)";
894
+        // $p->interdire_scripts = true;
895
+    } else {
896
+        if (!$p->id_boucle) {
897
+            $connect = '';
898
+            $objet = 'article';
899
+            $id_table_objet = 'id_article';
900
+        } else {
901
+            $b = $p->nom_boucle ?: $p->id_boucle;
902
+            $connect = $p->boucles[$b]->sql_serveur;
903
+            $type_boucle = $p->boucles[$b]->type_requete;
904
+            $objet = objet_type($type_boucle);
905
+            $id_table_objet = id_table_objet($type_boucle);
906
+        }
907
+        $c = memoriser_contexte_compil($p);
908
+
909
+        $p->code = sprintf(
910
+            CODE_RECUPERER_FOND,
911
+            "'modeles/lesauteurs'",
912
+            "array('objet'=>'" . $objet .
913
+            "','id_objet' => " . champ_sql($id_table_objet, $p) .
914
+            ",'$id_table_objet' => " . champ_sql($id_table_objet, $p) .
915
+            ($objet == 'article' ? '' : ",'id_article' => " . champ_sql('id_article', $p)) .
916
+            ')',
917
+            "'trim'=>true, 'compil'=>array($c)",
918
+            _q($connect)
919
+        );
920
+        $p->interdire_scripts = false; // securite apposee par recuperer_fond()
921
+    }
922
+
923
+    return $p;
924 924
 }
925 925
 
926 926
 
@@ -947,76 +947,76 @@  discard block
 block discarded – undo
947 947
  *     Pile complétée par le code à générer
948 948
  */
949 949
 function balise_RANG_dist($p) {
950
-	$b = index_boucle($p);
951
-	if ($b === '') {
952
-		$msg = [
953
-			'zbug_champ_hors_boucle',
954
-			['champ' => '#RANG']
955
-		];
956
-		erreur_squelette($msg, $p);
957
-	} else {
958
-		// chercher d'abord un champ sql rang (mais pas dans le env : defaut '' si on trouve pas de champ sql)
959
-		// dans la boucle immediatement englobante uniquement
960
-		// sinon on compose le champ calcule
961
-		$_rang = champ_sql('rang', $p, '', false);
962
-
963
-		// si pas trouve de champ sql rang :
964
-		if (!$_rang or $_rang == "''") {
965
-			$boucle = &$p->boucles[$b];
966
-
967
-			// on gere le cas ou #RANG est une extraction du numero dans le titre
968
-			$trouver_table = charger_fonction('trouver_table', 'base');
969
-			$desc = $trouver_table($boucle->id_table);
970
-			$_titre = ''; # où extraire le numero ?
971
-
972
-			if (isset($desc['titre'])) {
973
-				$t = $desc['titre'];
974
-				if (
975
-					// Soit on trouve avec la déclaration de la lang AVANT
976
-					preg_match(';(?:lang\s*,)\s*(.*?titre)\s*(,|$);', $t, $m)
977
-					// Soit on prend depuis le début
978
-					or preg_match(';^(.*?titre)\s*(,|$);', $t, $m)
979
-				) {
980
-					$m = preg_replace(',as\s+titre$,i', '', $m[1]);
981
-					$m = trim($m);
982
-					if ($m != "''") {
983
-						if (!preg_match(',\W,', $m)) {
984
-							$m = $boucle->id_table . ".$m";
985
-						}
986
-
987
-						$m .= ' AS titre_rang';
988
-
989
-						$boucle->select[] = $m;
990
-						$_titre = '$Pile[$SP][\'titre_rang\']';
991
-					}
992
-				}
993
-			}
994
-
995
-			// si on n'a rien trouvé, on utilise le champ titre classique
996
-			if (!$_titre) {
997
-				$_titre = champ_sql('titre', $p);
998
-			}
999
-
1000
-			// et on recupere aussi les infos de liaison si on est en train d'editer les liens justement
1001
-			// cas des formulaires xxx_lies utilises par #FORMULAIRE_EDITER_LIENS
1002
-			$type_boucle = $boucle->type_requete;
1003
-			$objet = objet_type($type_boucle);
1004
-			$id_table_objet = id_table_objet($type_boucle);
1005
-			$_primary = champ_sql($id_table_objet, $p, '', false);
1006
-			$_env = '$Pile[0]';
1007
-
1008
-			if (!$_titre) {$_titre = "''";
1009
-			}
1010
-			if (!$_primary) {$_primary = "''";
1011
-			}
1012
-			$_rang = "calculer_rang_smart($_titre, '$objet', $_primary, $_env)";
1013
-		}
1014
-
1015
-		$p->code = $_rang;
1016
-		$p->interdire_scripts = false;
1017
-	}
1018
-
1019
-	return $p;
950
+    $b = index_boucle($p);
951
+    if ($b === '') {
952
+        $msg = [
953
+            'zbug_champ_hors_boucle',
954
+            ['champ' => '#RANG']
955
+        ];
956
+        erreur_squelette($msg, $p);
957
+    } else {
958
+        // chercher d'abord un champ sql rang (mais pas dans le env : defaut '' si on trouve pas de champ sql)
959
+        // dans la boucle immediatement englobante uniquement
960
+        // sinon on compose le champ calcule
961
+        $_rang = champ_sql('rang', $p, '', false);
962
+
963
+        // si pas trouve de champ sql rang :
964
+        if (!$_rang or $_rang == "''") {
965
+            $boucle = &$p->boucles[$b];
966
+
967
+            // on gere le cas ou #RANG est une extraction du numero dans le titre
968
+            $trouver_table = charger_fonction('trouver_table', 'base');
969
+            $desc = $trouver_table($boucle->id_table);
970
+            $_titre = ''; # où extraire le numero ?
971
+
972
+            if (isset($desc['titre'])) {
973
+                $t = $desc['titre'];
974
+                if (
975
+                    // Soit on trouve avec la déclaration de la lang AVANT
976
+                    preg_match(';(?:lang\s*,)\s*(.*?titre)\s*(,|$);', $t, $m)
977
+                    // Soit on prend depuis le début
978
+                    or preg_match(';^(.*?titre)\s*(,|$);', $t, $m)
979
+                ) {
980
+                    $m = preg_replace(',as\s+titre$,i', '', $m[1]);
981
+                    $m = trim($m);
982
+                    if ($m != "''") {
983
+                        if (!preg_match(',\W,', $m)) {
984
+                            $m = $boucle->id_table . ".$m";
985
+                        }
986
+
987
+                        $m .= ' AS titre_rang';
988
+
989
+                        $boucle->select[] = $m;
990
+                        $_titre = '$Pile[$SP][\'titre_rang\']';
991
+                    }
992
+                }
993
+            }
994
+
995
+            // si on n'a rien trouvé, on utilise le champ titre classique
996
+            if (!$_titre) {
997
+                $_titre = champ_sql('titre', $p);
998
+            }
999
+
1000
+            // et on recupere aussi les infos de liaison si on est en train d'editer les liens justement
1001
+            // cas des formulaires xxx_lies utilises par #FORMULAIRE_EDITER_LIENS
1002
+            $type_boucle = $boucle->type_requete;
1003
+            $objet = objet_type($type_boucle);
1004
+            $id_table_objet = id_table_objet($type_boucle);
1005
+            $_primary = champ_sql($id_table_objet, $p, '', false);
1006
+            $_env = '$Pile[0]';
1007
+
1008
+            if (!$_titre) {$_titre = "''";
1009
+            }
1010
+            if (!$_primary) {$_primary = "''";
1011
+            }
1012
+            $_rang = "calculer_rang_smart($_titre, '$objet', $_primary, $_env)";
1013
+        }
1014
+
1015
+        $p->code = $_rang;
1016
+        $p->interdire_scripts = false;
1017
+    }
1018
+
1019
+    return $p;
1020 1020
 }
1021 1021
 
1022 1022
 
@@ -1038,12 +1038,12 @@  discard block
 block discarded – undo
1038 1038
  *     Pile complétée par le code à générer
1039 1039
  **/
1040 1040
 function balise_POPULARITE_dist($p) {
1041
-	$_popularite = champ_sql('popularite', $p);
1042
-	$p->code = "(ceil(min(100, 100 * $_popularite
1041
+    $_popularite = champ_sql('popularite', $p);
1042
+    $p->code = "(ceil(min(100, 100 * $_popularite
1043 1043
 	/ max(1 , 0 + \$GLOBALS['meta']['popularite_max']))))";
1044
-	$p->interdire_scripts = false;
1044
+    $p->interdire_scripts = false;
1045 1045
 
1046
-	return $p;
1046
+    return $p;
1047 1047
 }
1048 1048
 
1049 1049
 /**
@@ -1054,8 +1054,8 @@  discard block
 block discarded – undo
1054 1054
  * l'absence peut-être due à une faute de frappe dans le contexte inclus.
1055 1055
  */
1056 1056
 define(
1057
-	'CODE_PAGINATION',
1058
-	'%s($Numrows["%s"]["grand_total"],
1057
+    'CODE_PAGINATION',
1058
+    '%s($Numrows["%s"]["grand_total"],
1059 1059
  		%s,
1060 1060
 		isset($Pile[0][%4$s])?$Pile[0][%4$s]:intval(_request(%4$s)),
1061 1061
 		%5$s, %6$s, %7$s, %8$s, array(%9$s))'
@@ -1092,75 +1092,75 @@  discard block
 block discarded – undo
1092 1092
  *     Pile complétée par le code à générer
1093 1093
  */
1094 1094
 function balise_PAGINATION_dist($p, $liste = 'true') {
1095
-	$b = index_boucle_mere($p);
1096
-
1097
-	// s'il n'y a pas de nom de boucle, on ne peut pas paginer
1098
-	if ($b === '') {
1099
-		$msg = [
1100
-			'zbug_champ_hors_boucle',
1101
-			['champ' => $liste ? 'PAGINATION' : 'ANCRE_PAGINATION']
1102
-		];
1103
-		erreur_squelette($msg, $p);
1104
-
1105
-		return $p;
1106
-	}
1107
-
1108
-	// s'il n'y a pas de mode_partie, c'est qu'on se trouve
1109
-	// dans un boucle recursive ou qu'on a oublie le critere {pagination}
1110
-	if (!$p->boucles[$b]->mode_partie) {
1111
-		if (!$p->boucles[$b]->table_optionnelle) {
1112
-			$msg = [
1113
-				'zbug_pagination_sans_critere',
1114
-				['champ' => '#PAGINATION']
1115
-			];
1116
-			erreur_squelette($msg, $p);
1117
-		}
1118
-
1119
-		return $p;
1120
-	}
1121
-
1122
-	// a priori true
1123
-	// si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise
1124
-	// si true, les arguments simples (sans truc=chose) vont degager
1125
-	$_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false, false);
1126
-	if (is_countable($_contexte) ? count($_contexte) : 0) {
1127
-		$key = key($_contexte);
1128
-		if (is_numeric($key)) {
1129
-			array_shift($_contexte);
1130
-			$__modele = interprete_argument_balise(1, $p);
1131
-		}
1132
-	}
1133
-
1134
-	if (is_countable($_contexte) ? count($_contexte) : 0) {
1135
-		$code_contexte = implode(',', $_contexte);
1136
-	} else {
1137
-		$code_contexte = '';
1138
-	}
1139
-
1140
-	$connect = $p->boucles[$b]->sql_serveur;
1141
-	$pas = $p->boucles[$b]->total_parties;
1142
-	$f_pagination = chercher_filtre('pagination');
1143
-	$type = $p->boucles[$b]->modificateur['debut_nom'];
1144
-	$modif = ($type[0] !== "'") ? "'debut'.$type"
1145
-		: ("'debut" . substr($type, 1));
1146
-
1147
-	$p->code = sprintf(
1148
-		CODE_PAGINATION,
1149
-		$f_pagination,
1150
-		$b,
1151
-		$type,
1152
-		$modif,
1153
-		$pas,
1154
-		$liste,
1155
-		((isset($__modele) and $__modele) ? $__modele : "''"),
1156
-		_q($connect),
1157
-		$code_contexte
1158
-	);
1159
-
1160
-	$p->boucles[$b]->numrows = true;
1161
-	$p->interdire_scripts = false;
1162
-
1163
-	return $p;
1095
+    $b = index_boucle_mere($p);
1096
+
1097
+    // s'il n'y a pas de nom de boucle, on ne peut pas paginer
1098
+    if ($b === '') {
1099
+        $msg = [
1100
+            'zbug_champ_hors_boucle',
1101
+            ['champ' => $liste ? 'PAGINATION' : 'ANCRE_PAGINATION']
1102
+        ];
1103
+        erreur_squelette($msg, $p);
1104
+
1105
+        return $p;
1106
+    }
1107
+
1108
+    // s'il n'y a pas de mode_partie, c'est qu'on se trouve
1109
+    // dans un boucle recursive ou qu'on a oublie le critere {pagination}
1110
+    if (!$p->boucles[$b]->mode_partie) {
1111
+        if (!$p->boucles[$b]->table_optionnelle) {
1112
+            $msg = [
1113
+                'zbug_pagination_sans_critere',
1114
+                ['champ' => '#PAGINATION']
1115
+            ];
1116
+            erreur_squelette($msg, $p);
1117
+        }
1118
+
1119
+        return $p;
1120
+    }
1121
+
1122
+    // a priori true
1123
+    // si false, le compilo va bloquer sur des syntaxes avec un filtre sans argument qui suit la balise
1124
+    // si true, les arguments simples (sans truc=chose) vont degager
1125
+    $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false, false);
1126
+    if (is_countable($_contexte) ? count($_contexte) : 0) {
1127
+        $key = key($_contexte);
1128
+        if (is_numeric($key)) {
1129
+            array_shift($_contexte);
1130
+            $__modele = interprete_argument_balise(1, $p);
1131
+        }
1132
+    }
1133
+
1134
+    if (is_countable($_contexte) ? count($_contexte) : 0) {
1135
+        $code_contexte = implode(',', $_contexte);
1136
+    } else {
1137
+        $code_contexte = '';
1138
+    }
1139
+
1140
+    $connect = $p->boucles[$b]->sql_serveur;
1141
+    $pas = $p->boucles[$b]->total_parties;
1142
+    $f_pagination = chercher_filtre('pagination');
1143
+    $type = $p->boucles[$b]->modificateur['debut_nom'];
1144
+    $modif = ($type[0] !== "'") ? "'debut'.$type"
1145
+        : ("'debut" . substr($type, 1));
1146
+
1147
+    $p->code = sprintf(
1148
+        CODE_PAGINATION,
1149
+        $f_pagination,
1150
+        $b,
1151
+        $type,
1152
+        $modif,
1153
+        $pas,
1154
+        $liste,
1155
+        ((isset($__modele) and $__modele) ? $__modele : "''"),
1156
+        _q($connect),
1157
+        $code_contexte
1158
+    );
1159
+
1160
+    $p->boucles[$b]->numrows = true;
1161
+    $p->interdire_scripts = false;
1162
+
1163
+    return $p;
1164 1164
 }
1165 1165
 
1166 1166
 
@@ -1187,11 +1187,11 @@  discard block
 block discarded – undo
1187 1187
  *     Pile complétée par le code à générer
1188 1188
  **/
1189 1189
 function balise_ANCRE_PAGINATION_dist($p) {
1190
-	if ($f = charger_fonction('PAGINATION', 'balise', true)) {
1191
-		return $f($p, $liste = 'false');
1192
-	} else {
1193
-		return null;
1194
-	} // ou une erreur ?
1190
+    if ($f = charger_fonction('PAGINATION', 'balise', true)) {
1191
+        return $f($p, $liste = 'false');
1192
+    } else {
1193
+        return null;
1194
+    } // ou une erreur ?
1195 1195
 }
1196 1196
 
1197 1197
 
@@ -1212,17 +1212,17 @@  discard block
 block discarded – undo
1212 1212
  *     Pile complétée par le code à générer
1213 1213
  **/
1214 1214
 function balise_GRAND_TOTAL_dist($p) {
1215
-	$b = index_boucle_mere($p);
1216
-	if ($b === '') {
1217
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
1218
-		erreur_squelette($msg, $p);
1219
-	} else {
1220
-		$p->code = "(\$Numrows['$b']['grand_total'] ?? \$Numrows['$b']['total'] ?? 0)";
1221
-		$p->boucles[$b]->numrows = true;
1222
-		$p->interdire_scripts = false;
1223
-	}
1215
+    $b = index_boucle_mere($p);
1216
+    if ($b === '') {
1217
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
1218
+        erreur_squelette($msg, $p);
1219
+    } else {
1220
+        $p->code = "(\$Numrows['$b']['grand_total'] ?? \$Numrows['$b']['total'] ?? 0)";
1221
+        $p->boucles[$b]->numrows = true;
1222
+        $p->interdire_scripts = false;
1223
+    }
1224 1224
 
1225
-	return $p;
1225
+    return $p;
1226 1226
 }
1227 1227
 
1228 1228
 
@@ -1250,10 +1250,10 @@  discard block
 block discarded – undo
1250 1250
  *     Pile complétée par le code à générer
1251 1251
  **/
1252 1252
 function balise_SELF_dist($p) {
1253
-	$p->code = 'self()';
1254
-	$p->interdire_scripts = false;
1253
+    $p->code = 'self()';
1254
+    $p->interdire_scripts = false;
1255 1255
 
1256
-	return $p;
1256
+    return $p;
1257 1257
 }
1258 1258
 
1259 1259
 
@@ -1280,17 +1280,17 @@  discard block
 block discarded – undo
1280 1280
  *     Pile complétée par le code à générer
1281 1281
  **/
1282 1282
 function balise_CHEMIN_dist($p) {
1283
-	$arg = interprete_argument_balise(1, $p);
1284
-	if (!$arg) {
1285
-		$msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN']];
1286
-		erreur_squelette($msg, $p);
1287
-	} else {
1288
-		$p->code = 'find_in_path(' . $arg . ')';
1289
-	}
1283
+    $arg = interprete_argument_balise(1, $p);
1284
+    if (!$arg) {
1285
+        $msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN']];
1286
+        erreur_squelette($msg, $p);
1287
+    } else {
1288
+        $p->code = 'find_in_path(' . $arg . ')';
1289
+    }
1290 1290
 
1291
-	$p->interdire_scripts = false;
1291
+    $p->interdire_scripts = false;
1292 1292
 
1293
-	return $p;
1293
+    return $p;
1294 1294
 }
1295 1295
 
1296 1296
 /**
@@ -1315,16 +1315,16 @@  discard block
 block discarded – undo
1315 1315
  *     Pile complétée par le code à générer
1316 1316
  **/
1317 1317
 function balise_CHEMIN_IMAGE_dist($p) {
1318
-	$arg = interprete_argument_balise(1, $p);
1319
-	if (!$arg) {
1320
-		$msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN_IMAGE']];
1321
-		erreur_squelette($msg, $p);
1322
-	} else {
1323
-		$p->code = 'chemin_image(' . $arg . ')';
1324
-	}
1318
+    $arg = interprete_argument_balise(1, $p);
1319
+    if (!$arg) {
1320
+        $msg = ['zbug_balise_sans_argument', ['balise' => ' CHEMIN_IMAGE']];
1321
+        erreur_squelette($msg, $p);
1322
+    } else {
1323
+        $p->code = 'chemin_image(' . $arg . ')';
1324
+    }
1325 1325
 
1326
-	$p->interdire_scripts = false;
1327
-	return $p;
1326
+    $p->interdire_scripts = false;
1327
+    return $p;
1328 1328
 }
1329 1329
 
1330 1330
 
@@ -1362,36 +1362,36 @@  discard block
 block discarded – undo
1362 1362
  **/
1363 1363
 function balise_ENV_dist($p, $src = null) {
1364 1364
 
1365
-	// cle du tableau desiree
1366
-	$_nom = interprete_argument_balise(1, $p);
1367
-	// valeur par defaut
1368
-	$_sinon = interprete_argument_balise(2, $p);
1365
+    // cle du tableau desiree
1366
+    $_nom = interprete_argument_balise(1, $p);
1367
+    // valeur par defaut
1368
+    $_sinon = interprete_argument_balise(2, $p);
1369 1369
 
1370
-	// $src est un tableau de donnees sources eventuellement transmis
1371
-	// en absence, on utilise l'environnement du squelette $Pile[0]
1370
+    // $src est un tableau de donnees sources eventuellement transmis
1371
+    // en absence, on utilise l'environnement du squelette $Pile[0]
1372 1372
 
1373
-	if (!$_nom) {
1374
-		// cas de #ENV sans argument : on retourne le serialize() du tableau
1375
-		// une belle fonction [(#ENV|affiche_env)] serait pratique
1376
-		if ($src) {
1377
-			$p->code = '(is_array($a = (' . $src . ')) ? serialize($a) : "")';
1378
-		} else {
1379
-			$p->code = 'serialize($Pile[0]??[])';
1380
-		}
1381
-	} else {
1382
-		if (!$src) {
1383
-			$src = '$Pile[0]??[]';
1384
-		}
1385
-		if ($_sinon) {
1386
-			$p->code = "sinon(table_valeur($src, (string)$_nom, null), $_sinon)";
1387
-		} else {
1388
-			$p->code = "table_valeur($src, (string)$_nom, null)";
1389
-		}
1390
-	}
1373
+    if (!$_nom) {
1374
+        // cas de #ENV sans argument : on retourne le serialize() du tableau
1375
+        // une belle fonction [(#ENV|affiche_env)] serait pratique
1376
+        if ($src) {
1377
+            $p->code = '(is_array($a = (' . $src . ')) ? serialize($a) : "")';
1378
+        } else {
1379
+            $p->code = 'serialize($Pile[0]??[])';
1380
+        }
1381
+    } else {
1382
+        if (!$src) {
1383
+            $src = '$Pile[0]??[]';
1384
+        }
1385
+        if ($_sinon) {
1386
+            $p->code = "sinon(table_valeur($src, (string)$_nom, null), $_sinon)";
1387
+        } else {
1388
+            $p->code = "table_valeur($src, (string)$_nom, null)";
1389
+        }
1390
+    }
1391 1391
 
1392
-	#$p->interdire_scripts = true;
1392
+    #$p->interdire_scripts = true;
1393 1393
 
1394
-	return $p;
1394
+    return $p;
1395 1395
 }
1396 1396
 
1397 1397
 /**
@@ -1421,16 +1421,16 @@  discard block
 block discarded – undo
1421 1421
  *     Pile completée du code PHP d'exécution de la balise
1422 1422
  */
1423 1423
 function balise_CONFIG_dist($p) {
1424
-	if (!$arg = interprete_argument_balise(1, $p)) {
1425
-		$arg = "''";
1426
-	}
1427
-	$_sinon = interprete_argument_balise(2, $p);
1428
-	$_unserialize = sinon(interprete_argument_balise(3, $p), 'false');
1424
+    if (!$arg = interprete_argument_balise(1, $p)) {
1425
+        $arg = "''";
1426
+    }
1427
+    $_sinon = interprete_argument_balise(2, $p);
1428
+    $_unserialize = sinon(interprete_argument_balise(3, $p), 'false');
1429 1429
 
1430
-	$p->code = '(include_spip(\'inc/config\')?lire_config(' . $arg . ',' .
1431
-		($_sinon && $_sinon != "''" ? $_sinon : 'null') . ',' . $_unserialize . "):'')";
1430
+    $p->code = '(include_spip(\'inc/config\')?lire_config(' . $arg . ',' .
1431
+        ($_sinon && $_sinon != "''" ? $_sinon : 'null') . ',' . $_unserialize . "):'')";
1432 1432
 
1433
-	return $p;
1433
+    return $p;
1434 1434
 }
1435 1435
 
1436 1436
 
@@ -1453,10 +1453,10 @@  discard block
 block discarded – undo
1453 1453
  *     Pile completée du code PHP d'exécution de la balise
1454 1454
  */
1455 1455
 function balise_CONNECT_dist($p) {
1456
-	$p->code = '($connect ? $connect : NULL)';
1457
-	$p->interdire_scripts = false;
1456
+    $p->code = '($connect ? $connect : NULL)';
1457
+    $p->interdire_scripts = false;
1458 1458
 
1459
-	return $p;
1459
+    return $p;
1460 1460
 }
1461 1461
 
1462 1462
 
@@ -1484,15 +1484,15 @@  discard block
 block discarded – undo
1484 1484
  *     Pile completée du code PHP d'exécution de la balise
1485 1485
  **/
1486 1486
 function balise_SESSION_dist($p) {
1487
-	$p->descr['session'] = true;
1487
+    $p->descr['session'] = true;
1488 1488
 
1489
-	$f = function_exists('balise_ENV')
1490
-		? 'balise_ENV'
1491
-		: 'balise_ENV_dist';
1489
+    $f = function_exists('balise_ENV')
1490
+        ? 'balise_ENV'
1491
+        : 'balise_ENV_dist';
1492 1492
 
1493
-	$p = $f($p, '$GLOBALS["visiteur_session"]??[]');
1493
+    $p = $f($p, '$GLOBALS["visiteur_session"]??[]');
1494 1494
 
1495
-	return $p;
1495
+    return $p;
1496 1496
 }
1497 1497
 
1498 1498
 
@@ -1515,18 +1515,18 @@  discard block
 block discarded – undo
1515 1515
  *     Pile completée du code PHP d'exécution de la balise
1516 1516
  **/
1517 1517
 function balise_SESSION_SET_dist($p) {
1518
-	$_nom = interprete_argument_balise(1, $p);
1519
-	$_val = interprete_argument_balise(2, $p);
1520
-	if (!$_nom or !$_val) {
1521
-		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SESSION_SET']];
1522
-		erreur_squelette($err_b_s_a, $p);
1523
-	} else {
1524
-		$p->code = '(include_spip("inc/session") AND session_set(' . $_nom . ',' . $_val . '))';
1525
-	}
1518
+    $_nom = interprete_argument_balise(1, $p);
1519
+    $_val = interprete_argument_balise(2, $p);
1520
+    if (!$_nom or !$_val) {
1521
+        $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SESSION_SET']];
1522
+        erreur_squelette($err_b_s_a, $p);
1523
+    } else {
1524
+        $p->code = '(include_spip("inc/session") AND session_set(' . $_nom . ',' . $_val . '))';
1525
+    }
1526 1526
 
1527
-	$p->interdire_scripts = false;
1527
+    $p->interdire_scripts = false;
1528 1528
 
1529
-	return $p;
1529
+    return $p;
1530 1530
 }
1531 1531
 
1532 1532
 
@@ -1557,30 +1557,30 @@  discard block
 block discarded – undo
1557 1557
  *     Pile completée du code PHP d'exécution de la balise
1558 1558
  **/
1559 1559
 function balise_EVAL_dist($p) {
1560
-	$php = interprete_argument_balise(1, $p);
1561
-	if ($php) {
1562
-		# optimisation sur les #EVAL{une expression sans #BALISE}
1563
-		# attention au commentaire "// x signes" qui precede
1564
-		if (
1565
-			preg_match(
1566
-				",^([[:space:]]*//[^\n]*\n)'([^']+)'$,ms",
1567
-				$php,
1568
-				$r
1569
-			)
1570
-		) {
1571
-			$p->code = /* $r[1]. */
1572
-				'(' . $r[2] . ')';
1573
-		} else {
1574
-			$p->code = "eval('return '.$php.';')";
1575
-		}
1576
-	} else {
1577
-		$msg = ['zbug_balise_sans_argument', ['balise' => ' EVAL']];
1578
-		erreur_squelette($msg, $p);
1579
-	}
1580
-
1581
-	#$p->interdire_scripts = true;
1582
-
1583
-	return $p;
1560
+    $php = interprete_argument_balise(1, $p);
1561
+    if ($php) {
1562
+        # optimisation sur les #EVAL{une expression sans #BALISE}
1563
+        # attention au commentaire "// x signes" qui precede
1564
+        if (
1565
+            preg_match(
1566
+                ",^([[:space:]]*//[^\n]*\n)'([^']+)'$,ms",
1567
+                $php,
1568
+                $r
1569
+            )
1570
+        ) {
1571
+            $p->code = /* $r[1]. */
1572
+                '(' . $r[2] . ')';
1573
+        } else {
1574
+            $p->code = "eval('return '.$php.';')";
1575
+        }
1576
+    } else {
1577
+        $msg = ['zbug_balise_sans_argument', ['balise' => ' EVAL']];
1578
+        erreur_squelette($msg, $p);
1579
+    }
1580
+
1581
+    #$p->interdire_scripts = true;
1582
+
1583
+    return $p;
1584 1584
 }
1585 1585
 
1586 1586
 
@@ -1610,19 +1610,19 @@  discard block
 block discarded – undo
1610 1610
  **/
1611 1611
 function balise_CHAMP_SQL_dist($p) {
1612 1612
 
1613
-	if (
1614
-		$p->param
1615
-		and isset($p->param[0][1][0])
1616
-		and $champ = ($p->param[0][1][0]->texte)
1617
-	) {
1618
-		$p->code = champ_sql($champ, $p);
1619
-	} else {
1620
-		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => ' CHAMP_SQL']];
1621
-		erreur_squelette($err_b_s_a, $p);
1622
-	}
1613
+    if (
1614
+        $p->param
1615
+        and isset($p->param[0][1][0])
1616
+        and $champ = ($p->param[0][1][0]->texte)
1617
+    ) {
1618
+        $p->code = champ_sql($champ, $p);
1619
+    } else {
1620
+        $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => ' CHAMP_SQL']];
1621
+        erreur_squelette($err_b_s_a, $p);
1622
+    }
1623 1623
 
1624
-	#$p->interdire_scripts = true;
1625
-	return $p;
1624
+    #$p->interdire_scripts = true;
1625
+    return $p;
1626 1626
 }
1627 1627
 
1628 1628
 /**
@@ -1648,13 +1648,13 @@  discard block
 block discarded – undo
1648 1648
  *     Pile complétée par le code à générer
1649 1649
  **/
1650 1650
 function balise_VAL_dist($p) {
1651
-	$p->code = interprete_argument_balise(1, $p);
1652
-	if ($p->code === null || !strlen($p->code)) {
1653
-		$p->code = "''";
1654
-	}
1655
-	$p->interdire_scripts = false;
1651
+    $p->code = interprete_argument_balise(1, $p);
1652
+    if ($p->code === null || !strlen($p->code)) {
1653
+        $p->code = "''";
1654
+    }
1655
+    $p->interdire_scripts = false;
1656 1656
 
1657
-	return $p;
1657
+    return $p;
1658 1658
 }
1659 1659
 
1660 1660
 /**
@@ -1683,10 +1683,10 @@  discard block
 block discarded – undo
1683 1683
  *     Pile complétée par le code à générer
1684 1684
  **/
1685 1685
 function balise_REM_dist($p) {
1686
-	$p->code = "''";
1687
-	$p->interdire_scripts = false;
1686
+    $p->code = "''";
1687
+    $p->interdire_scripts = false;
1688 1688
 
1689
-	return $p;
1689
+    return $p;
1690 1690
 }
1691 1691
 
1692 1692
 /**
@@ -1696,10 +1696,10 @@  discard block
 block discarded – undo
1696 1696
  * @return mixed
1697 1697
  */
1698 1698
 function balise_NULL_dist($p) {
1699
-	$p->code = 'null';
1700
-	$p->interdire_scripts = false;
1699
+    $p->code = 'null';
1700
+    $p->interdire_scripts = false;
1701 1701
 
1702
-	return $p;
1702
+    return $p;
1703 1703
 }
1704 1704
 
1705 1705
 
@@ -1723,18 +1723,18 @@  discard block
 block discarded – undo
1723 1723
  **/
1724 1724
 function balise_HTTP_HEADER_dist($p) {
1725 1725
 
1726
-	$header = interprete_argument_balise(1, $p);
1727
-	if (!$header) {
1728
-		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'HTTP_HEADER']];
1729
-		erreur_squelette($err_b_s_a, $p);
1730
-	} else {
1731
-		$p->code = "'<'.'?php header(' . _q("
1732
-			. $header
1733
-			. ") . '); ?'.'>'";
1734
-	}
1735
-	$p->interdire_scripts = false;
1726
+    $header = interprete_argument_balise(1, $p);
1727
+    if (!$header) {
1728
+        $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'HTTP_HEADER']];
1729
+        erreur_squelette($err_b_s_a, $p);
1730
+    } else {
1731
+        $p->code = "'<'.'?php header(' . _q("
1732
+            . $header
1733
+            . ") . '); ?'.'>'";
1734
+    }
1735
+    $p->interdire_scripts = false;
1736 1736
 
1737
-	return $p;
1737
+    return $p;
1738 1738
 }
1739 1739
 
1740 1740
 
@@ -1759,20 +1759,20 @@  discard block
 block discarded – undo
1759 1759
  *     Pile complétée par le code à générer
1760 1760
  **/
1761 1761
 function balise_FILTRE_dist($p) {
1762
-	if ($p->param) {
1763
-		$args = [];
1764
-		foreach ($p->param as $i => $ignore) {
1765
-			$args[] = interprete_argument_balise($i + 1, $p);
1766
-		}
1767
-		$p->code = "'<' . '"
1768
-			. '?php header("X-Spip-Filtre: \'.'
1769
-			. join('.\'|\'.', $args)
1770
-			. " . '\"); ?'.'>'";
1762
+    if ($p->param) {
1763
+        $args = [];
1764
+        foreach ($p->param as $i => $ignore) {
1765
+            $args[] = interprete_argument_balise($i + 1, $p);
1766
+        }
1767
+        $p->code = "'<' . '"
1768
+            . '?php header("X-Spip-Filtre: \'.'
1769
+            . join('.\'|\'.', $args)
1770
+            . " . '\"); ?'.'>'";
1771 1771
 
1772
-		$p->interdire_scripts = false;
1772
+        $p->interdire_scripts = false;
1773 1773
 
1774
-		return $p;
1775
-	}
1774
+        return $p;
1775
+    }
1776 1776
 }
1777 1777
 
1778 1778
 
@@ -1808,55 +1808,55 @@  discard block
 block discarded – undo
1808 1808
  **/
1809 1809
 function balise_CACHE_dist($p) {
1810 1810
 
1811
-	if ($p->param) {
1812
-		$duree = valeur_numerique($p->param[0][1][0]->texte);
1813
-
1814
-		// noter la duree du cache dans un entete proprietaire
1815
-
1816
-		$code = "'<'.'" . '?php header("X-Spip-Cache: '
1817
-			. $duree
1818
-			. '"); ?' . "'.'>'";
1819
-
1820
-		// Remplir le header Cache-Control
1821
-		// cas #CACHE{0}
1822
-		if ($duree == 0) {
1823
-			$code .= ".'<'.'"
1824
-				. '?php header("Cache-Control: no-cache, must-revalidate"); ?'
1825
-				. "'.'><'.'"
1826
-				. '?php header("Pragma: no-cache"); ?'
1827
-				. "'.'>'";
1828
-		}
1829
-
1830
-		// recuperer les parametres suivants
1831
-		$i = 1;
1832
-		while (isset($p->param[0][++$i])) {
1833
-			$pa = ($p->param[0][$i][0]->texte);
1834
-
1835
-			if (
1836
-				$pa == 'cache-client'
1837
-				and $duree > 0
1838
-			) {
1839
-				$code .= ".'<'.'" . '?php header("Cache-Control: max-age='
1840
-					. $duree
1841
-					. '"); ?' . "'.'>'";
1842
-				// il semble logique, si on cache-client, de ne pas invalider
1843
-				$pa = 'statique';
1844
-			}
1845
-
1846
-			if (
1847
-				$pa == 'statique'
1848
-				and $duree > 0
1849
-			) {
1850
-				$code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'";
1851
-			}
1852
-		}
1853
-	} else {
1854
-		$code = "''";
1855
-	}
1856
-	$p->code = $code;
1857
-	$p->interdire_scripts = false;
1858
-
1859
-	return $p;
1811
+    if ($p->param) {
1812
+        $duree = valeur_numerique($p->param[0][1][0]->texte);
1813
+
1814
+        // noter la duree du cache dans un entete proprietaire
1815
+
1816
+        $code = "'<'.'" . '?php header("X-Spip-Cache: '
1817
+            . $duree
1818
+            . '"); ?' . "'.'>'";
1819
+
1820
+        // Remplir le header Cache-Control
1821
+        // cas #CACHE{0}
1822
+        if ($duree == 0) {
1823
+            $code .= ".'<'.'"
1824
+                . '?php header("Cache-Control: no-cache, must-revalidate"); ?'
1825
+                . "'.'><'.'"
1826
+                . '?php header("Pragma: no-cache"); ?'
1827
+                . "'.'>'";
1828
+        }
1829
+
1830
+        // recuperer les parametres suivants
1831
+        $i = 1;
1832
+        while (isset($p->param[0][++$i])) {
1833
+            $pa = ($p->param[0][$i][0]->texte);
1834
+
1835
+            if (
1836
+                $pa == 'cache-client'
1837
+                and $duree > 0
1838
+            ) {
1839
+                $code .= ".'<'.'" . '?php header("Cache-Control: max-age='
1840
+                    . $duree
1841
+                    . '"); ?' . "'.'>'";
1842
+                // il semble logique, si on cache-client, de ne pas invalider
1843
+                $pa = 'statique';
1844
+            }
1845
+
1846
+            if (
1847
+                $pa == 'statique'
1848
+                and $duree > 0
1849
+            ) {
1850
+                $code .= ".'<'.'" . '?php header("X-Spip-Statique: oui"); ?' . "'.'>'";
1851
+            }
1852
+        }
1853
+    } else {
1854
+        $code = "''";
1855
+    }
1856
+    $p->code = $code;
1857
+    $p->interdire_scripts = false;
1858
+
1859
+    return $p;
1860 1860
 }
1861 1861
 
1862 1862
 
@@ -1888,13 +1888,13 @@  discard block
 block discarded – undo
1888 1888
  *     Pile complétée par le code à générer
1889 1889
  */
1890 1890
 function balise_INSERT_HEAD_dist($p) {
1891
-	$p->code = "'<'.'"
1892
-		. '?php header("X-Spip-Filtre: insert_head_css_conditionnel"); ?'
1893
-		. "'.'>'";
1894
-	$p->code .= ". pipeline('insert_head','<!-- insert_head -->')";
1895
-	$p->interdire_scripts = false;
1891
+    $p->code = "'<'.'"
1892
+        . '?php header("X-Spip-Filtre: insert_head_css_conditionnel"); ?'
1893
+        . "'.'>'";
1894
+    $p->code .= ". pipeline('insert_head','<!-- insert_head -->')";
1895
+    $p->interdire_scripts = false;
1896 1896
 
1897
-	return $p;
1897
+    return $p;
1898 1898
 }
1899 1899
 
1900 1900
 /**
@@ -1912,10 +1912,10 @@  discard block
 block discarded – undo
1912 1912
  *     Pile complétée par le code à générer
1913 1913
  */
1914 1914
 function balise_INSERT_HEAD_CSS_dist($p) {
1915
-	$p->code = "pipeline('insert_head_css','<!-- insert_head_css -->')";
1916
-	$p->interdire_scripts = false;
1915
+    $p->code = "pipeline('insert_head_css','<!-- insert_head_css -->')";
1916
+    $p->interdire_scripts = false;
1917 1917
 
1918
-	return $p;
1918
+    return $p;
1919 1919
 }
1920 1920
 
1921 1921
 /**
@@ -1930,11 +1930,11 @@  discard block
 block discarded – undo
1930 1930
  *     Pile complétée par le code à générer
1931 1931
  **/
1932 1932
 function balise_INCLUDE_dist($p) {
1933
-	if (function_exists('balise_INCLURE')) {
1934
-		return balise_INCLURE($p);
1935
-	} else {
1936
-		return balise_INCLURE_dist($p);
1937
-	}
1933
+    if (function_exists('balise_INCLURE')) {
1934
+        return balise_INCLURE($p);
1935
+    } else {
1936
+        return balise_INCLURE_dist($p);
1937
+    }
1938 1938
 }
1939 1939
 
1940 1940
 /**
@@ -1968,66 +1968,66 @@  discard block
 block discarded – undo
1968 1968
  *     Pile complétée par le code à générer
1969 1969
  **/
1970 1970
 function balise_INCLURE_dist($p) {
1971
-	$id_boucle = $p->id_boucle;
1972
-	// la lang n'est pas passe de facon automatique par argumenter
1973
-	// mais le sera pas recuperer_fond, sauf si etoile=>true est passe
1974
-	// en option
1975
-
1976
-	$_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $id_boucle, false, false);
1977
-
1978
-	// erreur de syntaxe = fond absent
1979
-	// (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP
1980
-	if (!$_contexte) {
1981
-		$contexte = [];
1982
-	}
1983
-
1984
-	if (isset($_contexte['fond'])) {
1985
-		$f = $_contexte['fond'];
1986
-		// toujours vrai :
1987
-		if (preg_match('/^.fond.\s*=>(.*)$/s', $f, $r)) {
1988
-			$f = $r[1];
1989
-			unset($_contexte['fond']);
1990
-		} else {
1991
-			spip_log('compilation de #INCLURE a revoir');
1992
-		}
1993
-
1994
-		// #INCLURE{doublons}
1995
-		if (isset($_contexte['doublons'])) {
1996
-			$_contexte['doublons'] = "'doublons' => \$doublons";
1997
-		}
1998
-
1999
-		// Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
2000
-		$flag_env = false;
2001
-		if (isset($_contexte['env']) or isset($_contexte['self'])) {
2002
-			$flag_env = true;
2003
-			unset($_contexte['env']);
2004
-		}
2005
-
2006
-		$_options = [];
2007
-		if (isset($_contexte['ajax'])) {
2008
-			$_options[] = preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2009
-			unset($_contexte['ajax']);
2010
-		}
2011
-		if ($p->etoile) {
2012
-			$_options[] = "'etoile'=>true";
2013
-		}
2014
-		$_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ')';
2015
-
2016
-		$_l = 'array(' . join(",\n\t", $_contexte) . ')';
2017
-		if ($flag_env) {
2018
-			$_l = "array_merge(\$Pile[0],$_l)";
2019
-		}
2020
-
2021
-		$p->code = sprintf(CODE_RECUPERER_FOND, $f, $_l, join(',', $_options), "_request('connect') ?? ''");
2022
-	} elseif (!isset($_contexte[1])) {
2023
-		$msg = ['zbug_balise_sans_argument', ['balise' => ' INCLURE']];
2024
-		erreur_squelette($msg, $p);
2025
-	} else {
2026
-		$p->code = 'charge_scripts(' . $_contexte[1] . ',false)';
2027
-	}
2028
-
2029
-	$p->interdire_scripts = false; // la securite est assuree par recuperer_fond
2030
-	return $p;
1971
+    $id_boucle = $p->id_boucle;
1972
+    // la lang n'est pas passe de facon automatique par argumenter
1973
+    // mais le sera pas recuperer_fond, sauf si etoile=>true est passe
1974
+    // en option
1975
+
1976
+    $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $id_boucle, false, false);
1977
+
1978
+    // erreur de syntaxe = fond absent
1979
+    // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP
1980
+    if (!$_contexte) {
1981
+        $contexte = [];
1982
+    }
1983
+
1984
+    if (isset($_contexte['fond'])) {
1985
+        $f = $_contexte['fond'];
1986
+        // toujours vrai :
1987
+        if (preg_match('/^.fond.\s*=>(.*)$/s', $f, $r)) {
1988
+            $f = $r[1];
1989
+            unset($_contexte['fond']);
1990
+        } else {
1991
+            spip_log('compilation de #INCLURE a revoir');
1992
+        }
1993
+
1994
+        // #INCLURE{doublons}
1995
+        if (isset($_contexte['doublons'])) {
1996
+            $_contexte['doublons'] = "'doublons' => \$doublons";
1997
+        }
1998
+
1999
+        // Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
2000
+        $flag_env = false;
2001
+        if (isset($_contexte['env']) or isset($_contexte['self'])) {
2002
+            $flag_env = true;
2003
+            unset($_contexte['env']);
2004
+        }
2005
+
2006
+        $_options = [];
2007
+        if (isset($_contexte['ajax'])) {
2008
+            $_options[] = preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2009
+            unset($_contexte['ajax']);
2010
+        }
2011
+        if ($p->etoile) {
2012
+            $_options[] = "'etoile'=>true";
2013
+        }
2014
+        $_options[] = "'compil'=>array(" . memoriser_contexte_compil($p) . ')';
2015
+
2016
+        $_l = 'array(' . join(",\n\t", $_contexte) . ')';
2017
+        if ($flag_env) {
2018
+            $_l = "array_merge(\$Pile[0],$_l)";
2019
+        }
2020
+
2021
+        $p->code = sprintf(CODE_RECUPERER_FOND, $f, $_l, join(',', $_options), "_request('connect') ?? ''");
2022
+    } elseif (!isset($_contexte[1])) {
2023
+        $msg = ['zbug_balise_sans_argument', ['balise' => ' INCLURE']];
2024
+        erreur_squelette($msg, $p);
2025
+    } else {
2026
+        $p->code = 'charge_scripts(' . $_contexte[1] . ',false)';
2027
+    }
2028
+
2029
+    $p->interdire_scripts = false; // la securite est assuree par recuperer_fond
2030
+    return $p;
2031 2031
 }
2032 2032
 
2033 2033
 
@@ -2055,69 +2055,69 @@  discard block
 block discarded – undo
2055 2055
  **/
2056 2056
 function balise_MODELE_dist($p) {
2057 2057
 
2058
-	$_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false);
2059
-
2060
-	// erreur de syntaxe = fond absent
2061
-	// (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP
2062
-	if (!$_contexte) {
2063
-		$_contexte = [];
2064
-	}
2065
-
2066
-	if (!isset($_contexte[1])) {
2067
-		$msg = ['zbug_balise_sans_argument', ['balise' => ' MODELE']];
2068
-		erreur_squelette($msg, $p);
2069
-	} else {
2070
-		$nom = $_contexte[1];
2071
-		unset($_contexte[1]);
2072
-
2073
-		if (preg_match("/^\s*'[^']*'/s", $nom)) {
2074
-			$nom = "'modeles/" . substr($nom, 1);
2075
-		} else {
2076
-			$nom = "'modeles/' . $nom";
2077
-		}
2078
-
2079
-		$flag_env = false;
2080
-		if (isset($_contexte['env'])) {
2081
-			$flag_env = true;
2082
-			unset($_contexte['env']);
2083
-		}
2084
-
2085
-		// Incoherence dans la syntaxe du contexte. A revoir.
2086
-		// Reserver la cle primaire de la boucle courante si elle existe
2087
-		if (isset($p->boucles[$p->id_boucle]->primary)) {
2088
-			$primary = $p->boucles[$p->id_boucle]->primary;
2089
-			if (!strpos($primary, ',')) {
2090
-				$id = champ_sql($primary, $p);
2091
-				$_contexte[] = "'$primary'=>" . $id;
2092
-				$_contexte[] = "'id'=>" . $id;
2093
-			}
2094
-		}
2095
-		$_contexte[] = "'recurs'=>(++\$recurs)";
2096
-		$connect = '';
2097
-		if (isset($p->boucles[$p->id_boucle])) {
2098
-			$connect = $p->boucles[$p->id_boucle]->sql_serveur;
2099
-		}
2100
-
2101
-		$_options = memoriser_contexte_compil($p);
2102
-		$_options = "'compil'=>array($_options), 'trim'=>true";
2103
-		if (isset($_contexte['ajax'])) {
2104
-			$_options .= ', ' . preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2105
-			unset($_contexte['ajax']);
2106
-		}
2107
-
2108
-		$_l = 'array(' . join(",\n\t", $_contexte) . ')';
2109
-		if ($flag_env) {
2110
-			$_l = "array_merge(\$Pile[0],$_l)";
2111
-		}
2112
-
2113
-		$page = sprintf(CODE_RECUPERER_FOND, $nom, $_l, $_options, _q($connect));
2114
-
2115
-		$p->code = "\n\t(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' :\n\t$page)\n";
2116
-
2117
-		$p->interdire_scripts = false; // securite assuree par le squelette
2118
-	}
2119
-
2120
-	return $p;
2058
+    $_contexte = argumenter_inclure($p->param, true, $p, $p->boucles, $p->id_boucle, false);
2059
+
2060
+    // erreur de syntaxe = fond absent
2061
+    // (2 messages d'erreur SPIP pour le prix d'un, mais pas d'erreur PHP
2062
+    if (!$_contexte) {
2063
+        $_contexte = [];
2064
+    }
2065
+
2066
+    if (!isset($_contexte[1])) {
2067
+        $msg = ['zbug_balise_sans_argument', ['balise' => ' MODELE']];
2068
+        erreur_squelette($msg, $p);
2069
+    } else {
2070
+        $nom = $_contexte[1];
2071
+        unset($_contexte[1]);
2072
+
2073
+        if (preg_match("/^\s*'[^']*'/s", $nom)) {
2074
+            $nom = "'modeles/" . substr($nom, 1);
2075
+        } else {
2076
+            $nom = "'modeles/' . $nom";
2077
+        }
2078
+
2079
+        $flag_env = false;
2080
+        if (isset($_contexte['env'])) {
2081
+            $flag_env = true;
2082
+            unset($_contexte['env']);
2083
+        }
2084
+
2085
+        // Incoherence dans la syntaxe du contexte. A revoir.
2086
+        // Reserver la cle primaire de la boucle courante si elle existe
2087
+        if (isset($p->boucles[$p->id_boucle]->primary)) {
2088
+            $primary = $p->boucles[$p->id_boucle]->primary;
2089
+            if (!strpos($primary, ',')) {
2090
+                $id = champ_sql($primary, $p);
2091
+                $_contexte[] = "'$primary'=>" . $id;
2092
+                $_contexte[] = "'id'=>" . $id;
2093
+            }
2094
+        }
2095
+        $_contexte[] = "'recurs'=>(++\$recurs)";
2096
+        $connect = '';
2097
+        if (isset($p->boucles[$p->id_boucle])) {
2098
+            $connect = $p->boucles[$p->id_boucle]->sql_serveur;
2099
+        }
2100
+
2101
+        $_options = memoriser_contexte_compil($p);
2102
+        $_options = "'compil'=>array($_options), 'trim'=>true";
2103
+        if (isset($_contexte['ajax'])) {
2104
+            $_options .= ', ' . preg_replace(',=>(.*)$,ims', '=> ($v=(\\1))?$v:true', $_contexte['ajax']);
2105
+            unset($_contexte['ajax']);
2106
+        }
2107
+
2108
+        $_l = 'array(' . join(",\n\t", $_contexte) . ')';
2109
+        if ($flag_env) {
2110
+            $_l = "array_merge(\$Pile[0],$_l)";
2111
+        }
2112
+
2113
+        $page = sprintf(CODE_RECUPERER_FOND, $nom, $_l, $_options, _q($connect));
2114
+
2115
+        $p->code = "\n\t(((\$recurs=(isset(\$Pile[0]['recurs'])?\$Pile[0]['recurs']:0))>=5)? '' :\n\t$page)\n";
2116
+
2117
+        $p->interdire_scripts = false; // securite assuree par le squelette
2118
+    }
2119
+
2120
+    return $p;
2121 2121
 }
2122 2122
 
2123 2123
 
@@ -2141,21 +2141,21 @@  discard block
 block discarded – undo
2141 2141
  *     Pile complétée par le code à générer
2142 2142
  **/
2143 2143
 function balise_SET_dist($p) {
2144
-	$_nom = interprete_argument_balise(1, $p);
2145
-	$_val = interprete_argument_balise(2, $p);
2144
+    $_nom = interprete_argument_balise(1, $p);
2145
+    $_val = interprete_argument_balise(2, $p);
2146 2146
 
2147
-	if (!$_nom or !$_val) {
2148
-		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SET']];
2149
-		erreur_squelette($err_b_s_a, $p);
2150
-	}
2151
-	// affectation $_zzz inutile, mais permet de contourner un bug OpCode cache sous PHP 5.5.4
2152
-	// cf https://bugs.php.net/bug.php?id=65845
2153
-	else {
2154
-		$p->code = "vide(\$Pile['vars'][\$_zzz=(string)$_nom] = $_val)";
2155
-	}
2147
+    if (!$_nom or !$_val) {
2148
+        $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'SET']];
2149
+        erreur_squelette($err_b_s_a, $p);
2150
+    }
2151
+    // affectation $_zzz inutile, mais permet de contourner un bug OpCode cache sous PHP 5.5.4
2152
+    // cf https://bugs.php.net/bug.php?id=65845
2153
+    else {
2154
+        $p->code = "vide(\$Pile['vars'][\$_zzz=(string)$_nom] = $_val)";
2155
+    }
2156 2156
 
2157
-	$p->interdire_scripts = false; // la balise ne renvoie rien
2158
-	return $p;
2157
+    $p->interdire_scripts = false; // la balise ne renvoie rien
2158
+    return $p;
2159 2159
 }
2160 2160
 
2161 2161
 
@@ -2185,12 +2185,12 @@  discard block
 block discarded – undo
2185 2185
  *     Pile complétée par le code à générer
2186 2186
  **/
2187 2187
 function balise_GET_dist($p) {
2188
-	$p->interdire_scripts = false; // le contenu vient de #SET, donc il est de confiance
2189
-	if (function_exists('balise_ENV')) {
2190
-		return balise_ENV($p, '$Pile["vars"]??[]');
2191
-	} else {
2192
-		return balise_ENV_dist($p, '$Pile["vars"]??[]');
2193
-	}
2188
+    $p->interdire_scripts = false; // le contenu vient de #SET, donc il est de confiance
2189
+    if (function_exists('balise_ENV')) {
2190
+        return balise_ENV($p, '$Pile["vars"]??[]');
2191
+    } else {
2192
+        return balise_ENV_dist($p, '$Pile["vars"]??[]');
2193
+    }
2194 2194
 }
2195 2195
 
2196 2196
 
@@ -2213,22 +2213,22 @@  discard block
 block discarded – undo
2213 2213
  *     Pile complétée par le code à générer
2214 2214
  **/
2215 2215
 function balise_DOUBLONS_dist($p) {
2216
-	if ($type = interprete_argument_balise(1, $p)) {
2217
-		if ($famille = interprete_argument_balise(2, $p)) {
2218
-			$type .= '.' . $famille;
2219
-		}
2220
-		$p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")';
2221
-		if (!$p->etoile) {
2222
-			$p->code = 'array_filter(array_map("intval",explode(",",'
2223
-				. $p->code . ')))';
2224
-		}
2225
-	} else {
2226
-		$p->code = '$doublons';
2227
-	}
2216
+    if ($type = interprete_argument_balise(1, $p)) {
2217
+        if ($famille = interprete_argument_balise(2, $p)) {
2218
+            $type .= '.' . $famille;
2219
+        }
2220
+        $p->code = '(isset($doublons[' . $type . ']) ? $doublons[' . $type . '] : "")';
2221
+        if (!$p->etoile) {
2222
+            $p->code = 'array_filter(array_map("intval",explode(",",'
2223
+                . $p->code . ')))';
2224
+        }
2225
+    } else {
2226
+        $p->code = '$doublons';
2227
+    }
2228 2228
 
2229
-	$p->interdire_scripts = false;
2229
+    $p->interdire_scripts = false;
2230 2230
 
2231
-	return $p;
2231
+    return $p;
2232 2232
 }
2233 2233
 
2234 2234
 
@@ -2251,18 +2251,18 @@  discard block
 block discarded – undo
2251 2251
  *     Pile complétée par le code à générer
2252 2252
  **/
2253 2253
 function balise_PIPELINE_dist($p) {
2254
-	$_pipe = interprete_argument_balise(1, $p);
2255
-	if (!$_pipe) {
2256
-		$err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'PIPELINE']];
2257
-		erreur_squelette($err_b_s_a, $p);
2258
-	} else {
2259
-		$_flux = interprete_argument_balise(2, $p);
2260
-		$_flux = $_flux ?: "''";
2261
-		$p->code = "pipeline( $_pipe , $_flux )";
2262
-		$p->interdire_scripts = false;
2263
-	}
2254
+    $_pipe = interprete_argument_balise(1, $p);
2255
+    if (!$_pipe) {
2256
+        $err_b_s_a = ['zbug_balise_sans_argument', ['balise' => 'PIPELINE']];
2257
+        erreur_squelette($err_b_s_a, $p);
2258
+    } else {
2259
+        $_flux = interprete_argument_balise(2, $p);
2260
+        $_flux = $_flux ?: "''";
2261
+        $p->code = "pipeline( $_pipe , $_flux )";
2262
+        $p->interdire_scripts = false;
2263
+    }
2264 2264
 
2265
-	return $p;
2265
+    return $p;
2266 2266
 }
2267 2267
 
2268 2268
 
@@ -2287,10 +2287,10 @@  discard block
 block discarded – undo
2287 2287
  *     Pile complétée par le code à générer
2288 2288
  **/
2289 2289
 function balise_EDIT_dist($p) {
2290
-	$p->code = "''";
2291
-	$p->interdire_scripts = false;
2290
+    $p->code = "''";
2291
+    $p->interdire_scripts = false;
2292 2292
 
2293
-	return $p;
2293
+    return $p;
2294 2294
 }
2295 2295
 
2296 2296
 
@@ -2313,11 +2313,11 @@  discard block
 block discarded – undo
2313 2313
  *     Pile complétée par le code à générer
2314 2314
  **/
2315 2315
 function balise_TOTAL_UNIQUE_dist($p) {
2316
-	$_famille = interprete_argument_balise(1, $p);
2317
-	$_famille = $_famille ?: "''";
2318
-	$p->code = "unique('', $_famille, true)";
2316
+    $_famille = interprete_argument_balise(1, $p);
2317
+    $_famille = $_famille ?: "''";
2318
+    $p->code = "unique('', $_famille, true)";
2319 2319
 
2320
-	return $p;
2320
+    return $p;
2321 2321
 }
2322 2322
 
2323 2323
 /**
@@ -2340,19 +2340,19 @@  discard block
 block discarded – undo
2340 2340
  *     Pile complétée par le code à générer
2341 2341
  **/
2342 2342
 function balise_ARRAY_dist($p) {
2343
-	$_code = [];
2344
-	$n = 1;
2345
-	do {
2346
-		$_key = interprete_argument_balise($n++, $p);
2347
-		$_val = interprete_argument_balise($n++, $p);
2348
-		if ($_key and $_val) {
2349
-			$_code[] = "$_key => $_val";
2350
-		}
2351
-	} while ($_key && $_val);
2352
-	$p->code = 'array(' . join(', ', $_code) . ')';
2353
-	$p->interdire_scripts = false;
2343
+    $_code = [];
2344
+    $n = 1;
2345
+    do {
2346
+        $_key = interprete_argument_balise($n++, $p);
2347
+        $_val = interprete_argument_balise($n++, $p);
2348
+        if ($_key and $_val) {
2349
+            $_code[] = "$_key => $_val";
2350
+        }
2351
+    } while ($_key && $_val);
2352
+    $p->code = 'array(' . join(', ', $_code) . ')';
2353
+    $p->interdire_scripts = false;
2354 2354
 
2355
-	return $p;
2355
+    return $p;
2356 2356
 }
2357 2357
 
2358 2358
 /**
@@ -2371,15 +2371,15 @@  discard block
 block discarded – undo
2371 2371
  *     Pile complétée par le code à générer
2372 2372
  */
2373 2373
 function balise_LISTE_dist($p) {
2374
-	$_code = [];
2375
-	$n = 1;
2376
-	while ($_val = interprete_argument_balise($n++, $p)) {
2377
-		$_code[] = $_val;
2378
-	}
2379
-	$p->code = 'array(' . join(', ', $_code) . ')';
2380
-	$p->interdire_scripts = false;
2374
+    $_code = [];
2375
+    $n = 1;
2376
+    while ($_val = interprete_argument_balise($n++, $p)) {
2377
+        $_code[] = $_val;
2378
+    }
2379
+    $p->code = 'array(' . join(', ', $_code) . ')';
2380
+    $p->interdire_scripts = false;
2381 2381
 
2382
-	return $p;
2382
+    return $p;
2383 2383
 }
2384 2384
 
2385 2385
 
@@ -2413,21 +2413,21 @@  discard block
 block discarded – undo
2413 2413
  *     Pile complétée par le code à générer
2414 2414
  **/
2415 2415
 function balise_AUTORISER_dist($p) {
2416
-	$_code = [];
2417
-	$p->descr['session'] = true; // faire un cache par session
2416
+    $_code = [];
2417
+    $p->descr['session'] = true; // faire un cache par session
2418 2418
 
2419
-	$n = 1;
2420
-	while ($_v = interprete_argument_balise($n++, $p)) {
2421
-		$_code[] = $_v;
2422
-	}
2419
+    $n = 1;
2420
+    while ($_v = interprete_argument_balise($n++, $p)) {
2421
+        $_code[] = $_v;
2422
+    }
2423 2423
 
2424
-	$p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join(
2425
-		', ',
2426
-		$_code
2427
-	) . ')?" ":"")';
2428
-	$p->interdire_scripts = false;
2424
+    $p->code = '((function_exists("autoriser")||include_spip("inc/autoriser"))&&autoriser(' . join(
2425
+        ', ',
2426
+        $_code
2427
+    ) . ')?" ":"")';
2428
+    $p->interdire_scripts = false;
2429 2429
 
2430
-	return $p;
2430
+    return $p;
2431 2431
 }
2432 2432
 
2433 2433
 
@@ -2451,15 +2451,15 @@  discard block
 block discarded – undo
2451 2451
  *     Pile complétée par le code à générer
2452 2452
  **/
2453 2453
 function balise_PLUGIN_dist($p) {
2454
-	$plugin = interprete_argument_balise(1, $p);
2455
-	$plugin = isset($plugin) ? str_replace('\'', '"', $plugin) : '""';
2456
-	$type_info = interprete_argument_balise(2, $p);
2457
-	$type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"';
2454
+    $plugin = interprete_argument_balise(1, $p);
2455
+    $plugin = isset($plugin) ? str_replace('\'', '"', $plugin) : '""';
2456
+    $type_info = interprete_argument_balise(2, $p);
2457
+    $type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '"est_actif"';
2458 2458
 
2459
-	$f = chercher_filtre('info_plugin');
2460
-	$p->code = $f . '(' . $plugin . ', ' . $type_info . ')';
2459
+    $f = chercher_filtre('info_plugin');
2460
+    $p->code = $f . '(' . $plugin . ', ' . $type_info . ')';
2461 2461
 
2462
-	return $p;
2462
+    return $p;
2463 2463
 }
2464 2464
 
2465 2465
 /**
@@ -2480,9 +2480,9 @@  discard block
 block discarded – undo
2480 2480
  *     Pile complétée par le code à générer
2481 2481
  **/
2482 2482
 function balise_AIDER_dist($p) {
2483
-	$_motif = interprete_argument_balise(1, $p);
2484
-	$p->code = "((\$aider=charger_fonction('aide','inc',true))?\$aider($_motif):'')";
2485
-	return $p;
2483
+    $_motif = interprete_argument_balise(1, $p);
2484
+    $p->code = "((\$aider=charger_fonction('aide','inc',true))?\$aider($_motif):'')";
2485
+    return $p;
2486 2486
 }
2487 2487
 
2488 2488
 /**
@@ -2508,16 +2508,16 @@  discard block
 block discarded – undo
2508 2508
  *     Pile complétée par le code à générer
2509 2509
  **/
2510 2510
 function balise_ACTION_FORMULAIRE($p) {
2511
-	if (!$_url = interprete_argument_balise(1, $p)) {
2512
-		$_url = "(\$Pile[0]['action'] ?? '')";
2513
-	}
2514
-	if (!$_form = interprete_argument_balise(2, $p)) {
2515
-		$_form = "(\$Pile[0]['form'] ?? '')";
2516
-	}
2517
-
2518
-	// envoyer le nom du formulaire que l'on traite
2519
-	// transmettre les eventuels args de la balise formulaire
2520
-	$p->code = "	'<span class=\"form-hidden\">' .
2511
+    if (!$_url = interprete_argument_balise(1, $p)) {
2512
+        $_url = "(\$Pile[0]['action'] ?? '')";
2513
+    }
2514
+    if (!$_form = interprete_argument_balise(2, $p)) {
2515
+        $_form = "(\$Pile[0]['form'] ?? '')";
2516
+    }
2517
+
2518
+    // envoyer le nom du formulaire que l'on traite
2519
+    // transmettre les eventuels args de la balise formulaire
2520
+    $p->code = "	'<span class=\"form-hidden\">' .
2521 2521
 	form_hidden($_url) .
2522 2522
 	'<input name=\'formulaire_action\' type=\'hidden\'
2523 2523
 		value=\'' . $_form . '\' />' .
@@ -2528,9 +2528,9 @@  discard block
 block discarded – undo
2528 2528
 	(\$Pile[0]['_hidden'] ?? '') .
2529 2529
 	'</span>'";
2530 2530
 
2531
-	$p->interdire_scripts = false;
2531
+    $p->interdire_scripts = false;
2532 2532
 
2533
-	return $p;
2533
+    return $p;
2534 2534
 }
2535 2535
 
2536 2536
 
@@ -2571,25 +2571,25 @@  discard block
 block discarded – undo
2571 2571
  */
2572 2572
 function balise_BOUTON_ACTION_dist($p) {
2573 2573
 
2574
-	$args = [];
2575
-	for ($k = 1; $k <= 6; $k++) {
2576
-		$_a = interprete_argument_balise($k, $p);
2577
-		if (!$_a) {
2578
-			$_a = "''";
2579
-		}
2580
-		$args[] = $_a;
2581
-	}
2582
-	// supprimer les args vides
2583
-	while (end($args) == "''" and count($args) > 2) {
2584
-		array_pop($args);
2585
-	}
2586
-	$args = implode(',', $args);
2574
+    $args = [];
2575
+    for ($k = 1; $k <= 6; $k++) {
2576
+        $_a = interprete_argument_balise($k, $p);
2577
+        if (!$_a) {
2578
+            $_a = "''";
2579
+        }
2580
+        $args[] = $_a;
2581
+    }
2582
+    // supprimer les args vides
2583
+    while (end($args) == "''" and count($args) > 2) {
2584
+        array_pop($args);
2585
+    }
2586
+    $args = implode(',', $args);
2587 2587
 
2588
-	$bouton_action = chercher_filtre('bouton_action');
2589
-	$p->code = "$bouton_action($args)";
2590
-	$p->interdire_scripts = false;
2588
+    $bouton_action = chercher_filtre('bouton_action');
2589
+    $p->code = "$bouton_action($args)";
2590
+    $p->interdire_scripts = false;
2591 2591
 
2592
-	return $p;
2592
+    return $p;
2593 2593
 }
2594 2594
 
2595 2595
 
@@ -2608,10 +2608,10 @@  discard block
 block discarded – undo
2608 2608
  *     Pile complétée par le code à générer
2609 2609
  */
2610 2610
 function balise_SLOGAN_SITE_SPIP_dist($p) {
2611
-	$p->code = "\$GLOBALS['meta']['slogan_site']";
2611
+    $p->code = "\$GLOBALS['meta']['slogan_site']";
2612 2612
 
2613
-	#$p->interdire_scripts = true;
2614
-	return $p;
2613
+    #$p->interdire_scripts = true;
2614
+    return $p;
2615 2615
 }
2616 2616
 
2617 2617
 
@@ -2635,10 +2635,10 @@  discard block
 block discarded – undo
2635 2635
  *     Pile complétée par le code à générer
2636 2636
  */
2637 2637
 function balise_HTML5_dist($p) {
2638
-	$p->code = html5_permis() ? "' '" : "''";
2639
-	$p->interdire_scripts = false;
2638
+    $p->code = html5_permis() ? "' '" : "''";
2639
+    $p->interdire_scripts = false;
2640 2640
 
2641
-	return $p;
2641
+    return $p;
2642 2642
 }
2643 2643
 
2644 2644
 
@@ -2664,61 +2664,61 @@  discard block
 block discarded – undo
2664 2664
  *     Pile complétée par le code à générer
2665 2665
  */
2666 2666
 function balise_TRI_dist($p, $liste = 'true') {
2667
-	$b = index_boucle_mere($p);
2668
-	// s'il n'y a pas de nom de boucle, on ne peut pas trier
2669
-	if ($b === '') {
2670
-		$msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
2671
-		erreur_squelette($msg, $p);
2672
-		$p->code = "''";
2667
+    $b = index_boucle_mere($p);
2668
+    // s'il n'y a pas de nom de boucle, on ne peut pas trier
2669
+    if ($b === '') {
2670
+        $msg = ['zbug_champ_hors_boucle', ['champ' => zbug_presenter_champ($p)]];
2671
+        erreur_squelette($msg, $p);
2672
+        $p->code = "''";
2673 2673
 
2674
-		return $p;
2675
-	}
2676
-	$boucle = $p->boucles[$b];
2674
+        return $p;
2675
+    }
2676
+    $boucle = $p->boucles[$b];
2677 2677
 
2678
-	// s'il n'y a pas de tri_champ, c'est qu'on se trouve
2679
-	// dans un boucle recursive ou qu'on a oublie le critere {tri}
2680
-	if (!isset($boucle->modificateur['tri_champ'])) {
2681
-		$msg = ['zbug_champ_hors_critere', [
2682
-			'champ' => zbug_presenter_champ($p),
2683
-			'critere' => 'tri'
2684
-		]];
2685
-		erreur_squelette($msg, $p);
2686
-		$p->code = "''";
2678
+    // s'il n'y a pas de tri_champ, c'est qu'on se trouve
2679
+    // dans un boucle recursive ou qu'on a oublie le critere {tri}
2680
+    if (!isset($boucle->modificateur['tri_champ'])) {
2681
+        $msg = ['zbug_champ_hors_critere', [
2682
+            'champ' => zbug_presenter_champ($p),
2683
+            'critere' => 'tri'
2684
+        ]];
2685
+        erreur_squelette($msg, $p);
2686
+        $p->code = "''";
2687 2687
 
2688
-		return $p;
2689
-	}
2688
+        return $p;
2689
+    }
2690 2690
 
2691
-	$_champ = interprete_argument_balise(1, $p);
2692
-	// si pas de champ, renvoyer le critere de tri utilise
2693
-	if (!$_champ) {
2694
-		$p->code = $boucle->modificateur['tri_champ'];
2691
+    $_champ = interprete_argument_balise(1, $p);
2692
+    // si pas de champ, renvoyer le critere de tri utilise
2693
+    if (!$_champ) {
2694
+        $p->code = $boucle->modificateur['tri_champ'];
2695 2695
 
2696
-		return $p;
2697
-	}
2698
-	// forcer la jointure si besoin, et si le champ est statique
2699
-	if (preg_match(",^'([\w.]+)'$,i", $_champ, $m)) {
2700
-		index_pile($b, $m[1], $p->boucles, '', null, true, false);
2701
-	}
2696
+        return $p;
2697
+    }
2698
+    // forcer la jointure si besoin, et si le champ est statique
2699
+    if (preg_match(",^'([\w.]+)'$,i", $_champ, $m)) {
2700
+        index_pile($b, $m[1], $p->boucles, '', null, true, false);
2701
+    }
2702 2702
 
2703
-	$_libelle = interprete_argument_balise(2, $p);
2704
-	$_libelle = $_libelle ?: $_champ;
2703
+    $_libelle = interprete_argument_balise(2, $p);
2704
+    $_libelle = $_libelle ?: $_champ;
2705 2705
 
2706
-	$_class = interprete_argument_balise(3, $p);
2707
-	// si champ = ">" c'est un lien vers le tri croissant : de gauche a droite ==> 1
2708
-	// si champ = "<" c'est un lien vers le tri decroissant : (sens inverse) == -1
2709
-	$_issens = "in_array($_champ,array('>','<'))";
2710
-	$_sens = "(strpos('< >',$_champ)-1)";
2706
+    $_class = interprete_argument_balise(3, $p);
2707
+    // si champ = ">" c'est un lien vers le tri croissant : de gauche a droite ==> 1
2708
+    // si champ = "<" c'est un lien vers le tri decroissant : (sens inverse) == -1
2709
+    $_issens = "in_array($_champ,array('>','<'))";
2710
+    $_sens = "(strpos('< >',$_champ)-1)";
2711 2711
 
2712
-	$_variable = "((\$s=$_issens)?'sens':'tri')." . $boucle->modificateur['tri_nom'];
2713
-	$_url = "parametre_url(self(),$_variable,\$s?$_sens:$_champ)";
2714
-	$_url = "parametre_url($_url,'var_memotri',strncmp(" . $boucle->modificateur['tri_nom'] . ",'session',7)==0?$_variable:'')";
2715
-	$_on = '$s?(' . $boucle->modificateur['tri_sens'] . "==$_sens" . '):(' . $boucle->modificateur['tri_champ'] . "==$_champ)";
2712
+    $_variable = "((\$s=$_issens)?'sens':'tri')." . $boucle->modificateur['tri_nom'];
2713
+    $_url = "parametre_url(self(),$_variable,\$s?$_sens:$_champ)";
2714
+    $_url = "parametre_url($_url,'var_memotri',strncmp(" . $boucle->modificateur['tri_nom'] . ",'session',7)==0?$_variable:'')";
2715
+    $_on = '$s?(' . $boucle->modificateur['tri_sens'] . "==$_sens" . '):(' . $boucle->modificateur['tri_champ'] . "==$_champ)";
2716 2716
 
2717
-	$p->code = "lien_ou_expose($_url,$_libelle,$_on" . ($_class ? ",$_class" : '') . ')';
2718
-	//$p->code = "''";
2719
-	$p->interdire_scripts = false;
2717
+    $p->code = "lien_ou_expose($_url,$_libelle,$_on" . ($_class ? ",$_class" : '') . ')';
2718
+    //$p->code = "''";
2719
+    $p->interdire_scripts = false;
2720 2720
 
2721
-	return $p;
2721
+    return $p;
2722 2722
 }
2723 2723
 
2724 2724
 
@@ -2739,21 +2739,21 @@  discard block
 block discarded – undo
2739 2739
  *     Pile complétée par le code à générer
2740 2740
  */
2741 2741
 function balise_SAUTER_dist($p) {
2742
-	$id_boucle = $p->id_boucle;
2742
+    $id_boucle = $p->id_boucle;
2743 2743
 
2744
-	if (empty($p->boucles[$id_boucle])) {
2745
-		$msg = ['zbug_champ_hors_boucle', ['champ' => '#SAUTER']];
2746
-		erreur_squelette($msg, $p);
2747
-	} else {
2748
-		$_saut = interprete_argument_balise(1, $p);
2749
-		$_compteur = "\$Numrows['$id_boucle']['compteur_boucle']";
2750
-		$_total = "(\$Numrows['$id_boucle']['total'] ?? null)";
2744
+    if (empty($p->boucles[$id_boucle])) {
2745
+        $msg = ['zbug_champ_hors_boucle', ['champ' => '#SAUTER']];
2746
+        erreur_squelette($msg, $p);
2747
+    } else {
2748
+        $_saut = interprete_argument_balise(1, $p);
2749
+        $_compteur = "\$Numrows['$id_boucle']['compteur_boucle']";
2750
+        $_total = "(\$Numrows['$id_boucle']['total'] ?? null)";
2751 2751
 
2752
-		$p->code = "vide($_compteur=\$iter->skip($_saut,$_total))";
2753
-	}
2754
-	$p->interdire_scripts = false;
2752
+        $p->code = "vide($_compteur=\$iter->skip($_saut,$_total))";
2753
+    }
2754
+    $p->interdire_scripts = false;
2755 2755
 
2756
-	return $p;
2756
+    return $p;
2757 2757
 }
2758 2758
 
2759 2759
 
@@ -2775,22 +2775,22 @@  discard block
 block discarded – undo
2775 2775
  *     Pile complétée par le code à générer
2776 2776
  */
2777 2777
 function balise_PUBLIE_dist($p) {
2778
-	if (!$_type = interprete_argument_balise(1, $p)) {
2779
-		$_type = _q($p->type_requete);
2780
-		$_id = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
2781
-	} else {
2782
-		$_id = interprete_argument_balise(2, $p);
2783
-	}
2778
+    if (!$_type = interprete_argument_balise(1, $p)) {
2779
+        $_type = _q($p->type_requete);
2780
+        $_id = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
2781
+    } else {
2782
+        $_id = interprete_argument_balise(2, $p);
2783
+    }
2784 2784
 
2785
-	$connect = '';
2786
-	if (isset($p->boucles[$p->id_boucle])) {
2787
-		$connect = $p->boucles[$p->id_boucle]->sql_serveur;
2788
-	}
2785
+    $connect = '';
2786
+    if (isset($p->boucles[$p->id_boucle])) {
2787
+        $connect = $p->boucles[$p->id_boucle]->sql_serveur;
2788
+    }
2789 2789
 
2790
-	$p->code = '(objet_test_si_publie(' . $_type . ',intval(' . $_id . '),' . _q($connect) . ")?' ':'')";
2791
-	$p->interdire_scripts = false;
2790
+    $p->code = '(objet_test_si_publie(' . $_type . ',intval(' . $_id . '),' . _q($connect) . ")?' ':'')";
2791
+    $p->interdire_scripts = false;
2792 2792
 
2793
-	return $p;
2793
+    return $p;
2794 2794
 }
2795 2795
 
2796 2796
 /**
@@ -2819,12 +2819,12 @@  discard block
 block discarded – undo
2819 2819
  *     Pile complétée par le code à générer
2820 2820
  */
2821 2821
 function balise_PRODUIRE_dist($p) {
2822
-	$balise_inclure = charger_fonction('INCLURE', 'balise');
2823
-	$p = $balise_inclure($p);
2822
+    $balise_inclure = charger_fonction('INCLURE', 'balise');
2823
+    $p = $balise_inclure($p);
2824 2824
 
2825
-	$p->code = str_replace('recuperer_fond(', 'produire_fond_statique(', $p->code);
2825
+    $p->code = str_replace('recuperer_fond(', 'produire_fond_statique(', $p->code);
2826 2826
 
2827
-	return $p;
2827
+    return $p;
2828 2828
 }
2829 2829
 
2830 2830
 /**
@@ -2843,13 +2843,13 @@  discard block
 block discarded – undo
2843 2843
  *     Pile complétée par le code à générer
2844 2844
  */
2845 2845
 function balise_LARGEUR_ECRAN_dist($p) {
2846
-	$_class = interprete_argument_balise(1, $p);
2847
-	if (!$_class) {
2848
-		$_class = 'null';
2849
-	}
2850
-	$p->code = "(is_string($_class)?vide(\$GLOBALS['largeur_ecran']=$_class):(isset(\$GLOBALS['largeur_ecran'])?\$GLOBALS['largeur_ecran']:''))";
2846
+    $_class = interprete_argument_balise(1, $p);
2847
+    if (!$_class) {
2848
+        $_class = 'null';
2849
+    }
2850
+    $p->code = "(is_string($_class)?vide(\$GLOBALS['largeur_ecran']=$_class):(isset(\$GLOBALS['largeur_ecran'])?\$GLOBALS['largeur_ecran']:''))";
2851 2851
 
2852
-	return $p;
2852
+    return $p;
2853 2853
 }
2854 2854
 
2855 2855
 
@@ -2865,14 +2865,14 @@  discard block
 block discarded – undo
2865 2865
  *     Pile complétée par le code à générer
2866 2866
  **/
2867 2867
 function balise_CONST_dist($p) {
2868
-	$_const = interprete_argument_balise(1, $p);
2869
-	if (!strlen($_const ?? '')) {
2870
-		$p->code = "''";
2871
-	}
2872
-	else {
2873
-		$p->code = "(defined($_const)?constant($_const):'')";
2874
-	}
2875
-	$p->interdire_scripts = false;
2876
-
2877
-	return $p;
2868
+    $_const = interprete_argument_balise(1, $p);
2869
+    if (!strlen($_const ?? '')) {
2870
+        $p->code = "''";
2871
+    }
2872
+    else {
2873
+        $p->code = "(defined($_const)?constant($_const):'')";
2874
+    }
2875
+    $p->interdire_scripts = false;
2876
+
2877
+    return $p;
2878 2878
 }
Please login to merge, or discard this patch.
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -2868,8 +2868,7 @@
 block discarded – undo
2868 2868
 	$_const = interprete_argument_balise(1, $p);
2869 2869
 	if (!strlen($_const ?? '')) {
2870 2870
 		$p->code = "''";
2871
-	}
2872
-	else {
2871
+	} else {
2873 2872
 		$p->code = "(defined($_const)?constant($_const):'')";
2874 2873
 	}
2875 2874
 	$p->interdire_scripts = false;
Please login to merge, or discard this patch.
ecrire/public/fonctions.php 3 patches
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -84,7 +84,7 @@  discard block
 block discarded – undo
84 84
 		$texte = $intro;
85 85
 	} else {
86 86
 		if (
87
-			strpos("\n" . $texte, "\n|") === false
87
+			strpos("\n".$texte, "\n|") === false
88 88
 			and strlen($texte) > 2.5 * $longueur
89 89
 		) {
90 90
 			if (strpos($texte, '<multi') !== false) {
@@ -168,12 +168,12 @@  discard block
 block discarded – undo
168 168
 	if ($pas < 1) {
169 169
 		return '';
170 170
 	}
171
-	$ancre = 'pagination' . $nom; // #pagination_articles
172
-	$debut = 'debut' . $nom; // 'debut_articles'
171
+	$ancre = 'pagination'.$nom; // #pagination_articles
172
+	$debut = 'debut'.$nom; // 'debut_articles'
173 173
 
174 174
 	// n'afficher l'ancre qu'une fois
175 175
 	if (!isset($ancres[$ancre])) {
176
-		$bloc_ancre = $ancres[$ancre] = "<a id='" . $ancre . "' class='pagination_ancre'></a>";
176
+		$bloc_ancre = $ancres[$ancre] = "<a id='".$ancre."' class='pagination_ancre'></a>";
177 177
 	} else {
178 178
 		$bloc_ancre = '';
179 179
 	}
@@ -205,8 +205,8 @@  discard block
 block discarded – undo
205 205
 
206 206
 	if ($modele) {
207 207
 		$pagination['type_pagination'] = $modele;
208
-		if (trouver_fond('pagination_' . $modele, 'modeles')) {
209
-			$modele = '_' . $modele;
208
+		if (trouver_fond('pagination_'.$modele, 'modeles')) {
209
+			$modele = '_'.$modele;
210 210
 		}
211 211
 		else {
212 212
 			$modele = '';
@@ -291,7 +291,7 @@  discard block
 block discarded – undo
291 291
 function lister_objets_avec_logos($type) {
292 292
 
293 293
 	$objet = objet_type($type);
294
-	$ids = sql_allfetsel('L.id_objet', 'spip_documents AS D JOIN spip_documents_liens AS L ON L.id_document=D.id_document', 'D.mode=' . sql_quote('logoon') . ' AND L.objet=' . sql_quote($objet));
294
+	$ids = sql_allfetsel('L.id_objet', 'spip_documents AS D JOIN spip_documents_liens AS L ON L.id_document=D.id_document', 'D.mode='.sql_quote('logoon').' AND L.objet='.sql_quote($objet));
295 295
 	if ($ids) {
296 296
 		$ids = array_column($ids, 'id_objet');
297 297
 		return implode(',', $ids);
@@ -465,7 +465,7 @@  discard block
 block discarded – undo
465 465
 		case 'sinum ':
466 466
 			return "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}";
467 467
 		default:
468
-			return $champ . $senstri;
468
+			return $champ.$senstri;
469 469
 	}
470 470
 }
471 471
 
Please login to merge, or discard this patch.
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -207,8 +207,7 @@  discard block
 block discarded – undo
207 207
 		$pagination['type_pagination'] = $modele;
208 208
 		if (trouver_fond('pagination_' . $modele, 'modeles')) {
209 209
 			$modele = '_' . $modele;
210
-		}
211
-		else {
210
+		} else {
212 211
 			$modele = '';
213 212
 		}
214 213
 	}
@@ -295,8 +294,7 @@  discard block
 block discarded – undo
295 294
 	if ($ids) {
296 295
 		$ids = array_column($ids, 'id_objet');
297 296
 		return implode(',', $ids);
298
-	}
299
-	else {
297
+	} else {
300 298
 		return '0';
301 299
 	}
302 300
 }
Please login to merge, or discard this patch.
Indentation   +299 added lines, -299 removed lines patch added patch discarded remove patch
@@ -23,7 +23,7 @@  discard block
 block discarded – undo
23 23
  **/
24 24
 
25 25
 if (!defined('_ECRIRE_INC_VERSION')) {
26
-	return;
26
+    return;
27 27
 }
28 28
 
29 29
 
@@ -52,75 +52,75 @@  discard block
 block discarded – undo
52 52
  *     Introduction calculée
53 53
  **/
54 54
 function filtre_introduction_dist($descriptif, $texte, $longueur, $connect, $suite = null) {
55
-	// Si un descriptif est envoye, on l'utilise directement
56
-	if (strlen($descriptif)) {
57
-		return appliquer_traitement_champ($descriptif, 'introduction', '', [], $connect);
58
-	}
59
-
60
-	// De preference ce qui est marque <intro>...</intro>
61
-	$intro = '';
62
-	$texte = preg_replace(',(</?)intro>,i', "\\1intro>", $texte); // minuscules
63
-	while ($fin = strpos($texte, '</intro>')) {
64
-		$zone = substr($texte, 0, $fin);
65
-		$texte = substr($texte, $fin + strlen('</intro>'));
66
-		if ($deb = strpos($zone, '<intro>') or substr($zone, 0, 7) == '<intro>') {
67
-			$zone = substr($zone, $deb + 7);
68
-		}
69
-		$intro .= $zone;
70
-	}
71
-
72
-	// [12025] On ne *PEUT* pas couper simplement ici car c'est du texte brut,
73
-	// qui inclus raccourcis et modeles
74
-	// un simple <articlexx> peut etre ensuite transforme en 1000 lignes ...
75
-	// par ailleurs le nettoyage des raccourcis ne tient pas compte
76
-	// des surcharges et enrichissement de propre
77
-	// couper doit se faire apres propre
78
-	//$texte = nettoyer_raccourcis_typo($intro ? $intro : $texte, $connect);
79
-
80
-	// Cependant pour des questions de perfs on coupe quand meme, en prenant
81
-	// large et en se mefiant des tableaux #1323
82
-
83
-	if (strlen($intro)) {
84
-		$texte = $intro;
85
-	} else {
86
-		if (
87
-			strpos("\n" . $texte, "\n|") === false
88
-			and strlen($texte) > 2.5 * $longueur
89
-		) {
90
-			if (strpos($texte, '<multi') !== false) {
91
-				$texte = extraire_multi($texte);
92
-			}
93
-			$texte = couper($texte, 2 * $longueur);
94
-		}
95
-	}
96
-
97
-	// ne pas tenir compte des notes
98
-	if ($notes = charger_fonction('notes', 'inc', true)) {
99
-		$notes('', 'empiler');
100
-	}
101
-	// Supprimer les modèles avant le propre afin d'éviter qu'ils n'ajoutent du texte indésirable
102
-	// dans l'introduction.
103
-	$texte = supprime_img($texte, '');
104
-	$texte = appliquer_traitement_champ($texte, 'introduction', '', [], $connect);
105
-
106
-	if ($notes) {
107
-		$notes('', 'depiler');
108
-	}
109
-
110
-	if (is_null($suite) and defined('_INTRODUCTION_SUITE')) {
111
-		$suite = _INTRODUCTION_SUITE;
112
-	}
113
-	$texte = couper($texte, $longueur, $suite);
114
-	// comme on a coupe il faut repasser la typo (on a perdu les insecables)
115
-	$texte = typo($texte, true, $connect, []);
116
-
117
-	// et reparagrapher si necessaire (coherence avec le cas descriptif)
118
-	// une introduction a tojours un <p>
119
-	if ($GLOBALS['toujours_paragrapher']) { // Fermer les paragraphes
120
-	$texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']);
121
-	}
122
-
123
-	return $texte;
55
+    // Si un descriptif est envoye, on l'utilise directement
56
+    if (strlen($descriptif)) {
57
+        return appliquer_traitement_champ($descriptif, 'introduction', '', [], $connect);
58
+    }
59
+
60
+    // De preference ce qui est marque <intro>...</intro>
61
+    $intro = '';
62
+    $texte = preg_replace(',(</?)intro>,i', "\\1intro>", $texte); // minuscules
63
+    while ($fin = strpos($texte, '</intro>')) {
64
+        $zone = substr($texte, 0, $fin);
65
+        $texte = substr($texte, $fin + strlen('</intro>'));
66
+        if ($deb = strpos($zone, '<intro>') or substr($zone, 0, 7) == '<intro>') {
67
+            $zone = substr($zone, $deb + 7);
68
+        }
69
+        $intro .= $zone;
70
+    }
71
+
72
+    // [12025] On ne *PEUT* pas couper simplement ici car c'est du texte brut,
73
+    // qui inclus raccourcis et modeles
74
+    // un simple <articlexx> peut etre ensuite transforme en 1000 lignes ...
75
+    // par ailleurs le nettoyage des raccourcis ne tient pas compte
76
+    // des surcharges et enrichissement de propre
77
+    // couper doit se faire apres propre
78
+    //$texte = nettoyer_raccourcis_typo($intro ? $intro : $texte, $connect);
79
+
80
+    // Cependant pour des questions de perfs on coupe quand meme, en prenant
81
+    // large et en se mefiant des tableaux #1323
82
+
83
+    if (strlen($intro)) {
84
+        $texte = $intro;
85
+    } else {
86
+        if (
87
+            strpos("\n" . $texte, "\n|") === false
88
+            and strlen($texte) > 2.5 * $longueur
89
+        ) {
90
+            if (strpos($texte, '<multi') !== false) {
91
+                $texte = extraire_multi($texte);
92
+            }
93
+            $texte = couper($texte, 2 * $longueur);
94
+        }
95
+    }
96
+
97
+    // ne pas tenir compte des notes
98
+    if ($notes = charger_fonction('notes', 'inc', true)) {
99
+        $notes('', 'empiler');
100
+    }
101
+    // Supprimer les modèles avant le propre afin d'éviter qu'ils n'ajoutent du texte indésirable
102
+    // dans l'introduction.
103
+    $texte = supprime_img($texte, '');
104
+    $texte = appliquer_traitement_champ($texte, 'introduction', '', [], $connect);
105
+
106
+    if ($notes) {
107
+        $notes('', 'depiler');
108
+    }
109
+
110
+    if (is_null($suite) and defined('_INTRODUCTION_SUITE')) {
111
+        $suite = _INTRODUCTION_SUITE;
112
+    }
113
+    $texte = couper($texte, $longueur, $suite);
114
+    // comme on a coupe il faut repasser la typo (on a perdu les insecables)
115
+    $texte = typo($texte, true, $connect, []);
116
+
117
+    // et reparagrapher si necessaire (coherence avec le cas descriptif)
118
+    // une introduction a tojours un <p>
119
+    if ($GLOBALS['toujours_paragrapher']) { // Fermer les paragraphes
120
+    $texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']);
121
+    }
122
+
123
+    return $texte;
124 124
 }
125 125
 
126 126
 
@@ -155,73 +155,73 @@  discard block
 block discarded – undo
155 155
  *     Code HTML de la pagination
156 156
  **/
157 157
 function filtre_pagination_dist(
158
-	$total,
159
-	$nom,
160
-	$position,
161
-	$pas,
162
-	$liste = true,
163
-	$modele = '',
164
-	string $connect = '',
165
-	$env = []
158
+    $total,
159
+    $nom,
160
+    $position,
161
+    $pas,
162
+    $liste = true,
163
+    $modele = '',
164
+    string $connect = '',
165
+    $env = []
166 166
 ) {
167
-	static $ancres = [];
168
-	if ($pas < 1) {
169
-		return '';
170
-	}
171
-	$ancre = 'pagination' . $nom; // #pagination_articles
172
-	$debut = 'debut' . $nom; // 'debut_articles'
173
-
174
-	// n'afficher l'ancre qu'une fois
175
-	if (!isset($ancres[$ancre])) {
176
-		$bloc_ancre = $ancres[$ancre] = "<a id='" . $ancre . "' class='pagination_ancre'></a>";
177
-	} else {
178
-		$bloc_ancre = '';
179
-	}
180
-	// liste = false : on ne veut que l'ancre
181
-	if (!$liste) {
182
-		return $ancres[$ancre];
183
-	}
184
-
185
-	$self = (empty($env['self']) ? self() : $env['self']);
186
-	$pagination = [
187
-		'debut' => $debut,
188
-		'url' => parametre_url($self, 'fragment', ''), // nettoyer l'id ahah eventuel
189
-		'total' => $total,
190
-		'position' => intval($position),
191
-		'pas' => $pas,
192
-		'nombre_pages' => floor(($total - 1) / $pas) + 1,
193
-		'page_courante' => floor(intval($position) / $pas) + 1,
194
-		'ancre' => $ancre,
195
-		'bloc_ancre' => $bloc_ancre
196
-	];
197
-	if (is_array($env)) {
198
-		$pagination = array_merge($env, $pagination);
199
-	}
200
-
201
-	// Pas de pagination
202
-	if ($pagination['nombre_pages'] <= 1) {
203
-		return '';
204
-	}
205
-
206
-	if ($modele) {
207
-		$pagination['type_pagination'] = $modele;
208
-		if (trouver_fond('pagination_' . $modele, 'modeles')) {
209
-			$modele = '_' . $modele;
210
-		}
211
-		else {
212
-			$modele = '';
213
-		}
214
-	}
215
-
216
-	if (!defined('_PAGINATION_NOMBRE_LIENS_MAX')) {
217
-		define('_PAGINATION_NOMBRE_LIENS_MAX', 10);
218
-	}
219
-	if (!defined('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE')) {
220
-		define('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE', 5);
221
-	}
222
-
223
-
224
-	return recuperer_fond("modeles/pagination$modele", $pagination, ['trim' => true], $connect);
167
+    static $ancres = [];
168
+    if ($pas < 1) {
169
+        return '';
170
+    }
171
+    $ancre = 'pagination' . $nom; // #pagination_articles
172
+    $debut = 'debut' . $nom; // 'debut_articles'
173
+
174
+    // n'afficher l'ancre qu'une fois
175
+    if (!isset($ancres[$ancre])) {
176
+        $bloc_ancre = $ancres[$ancre] = "<a id='" . $ancre . "' class='pagination_ancre'></a>";
177
+    } else {
178
+        $bloc_ancre = '';
179
+    }
180
+    // liste = false : on ne veut que l'ancre
181
+    if (!$liste) {
182
+        return $ancres[$ancre];
183
+    }
184
+
185
+    $self = (empty($env['self']) ? self() : $env['self']);
186
+    $pagination = [
187
+        'debut' => $debut,
188
+        'url' => parametre_url($self, 'fragment', ''), // nettoyer l'id ahah eventuel
189
+        'total' => $total,
190
+        'position' => intval($position),
191
+        'pas' => $pas,
192
+        'nombre_pages' => floor(($total - 1) / $pas) + 1,
193
+        'page_courante' => floor(intval($position) / $pas) + 1,
194
+        'ancre' => $ancre,
195
+        'bloc_ancre' => $bloc_ancre
196
+    ];
197
+    if (is_array($env)) {
198
+        $pagination = array_merge($env, $pagination);
199
+    }
200
+
201
+    // Pas de pagination
202
+    if ($pagination['nombre_pages'] <= 1) {
203
+        return '';
204
+    }
205
+
206
+    if ($modele) {
207
+        $pagination['type_pagination'] = $modele;
208
+        if (trouver_fond('pagination_' . $modele, 'modeles')) {
209
+            $modele = '_' . $modele;
210
+        }
211
+        else {
212
+            $modele = '';
213
+        }
214
+    }
215
+
216
+    if (!defined('_PAGINATION_NOMBRE_LIENS_MAX')) {
217
+        define('_PAGINATION_NOMBRE_LIENS_MAX', 10);
218
+    }
219
+    if (!defined('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE')) {
220
+        define('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE', 5);
221
+    }
222
+
223
+
224
+    return recuperer_fond("modeles/pagination$modele", $pagination, ['trim' => true], $connect);
225 225
 }
226 226
 
227 227
 
@@ -240,44 +240,44 @@  discard block
 block discarded – undo
240 240
  *     Liste (première page, dernière page).
241 241
  **/
242 242
 function filtre_bornes_pagination_dist($courante, $nombre, $max = 10) {
243
-	if ($max <= 0 or $max >= $nombre) {
244
-		return [1, $nombre];
245
-	}
246
-	if ($max <= 1) {
247
-		return [$courante, $courante];
248
-	}
249
-
250
-	$premiere = max(1, $courante - floor(($max - 1) / 2));
251
-	$derniere = min($nombre, $premiere + $max - 2);
252
-	$premiere = $derniere == $nombre ? $derniere - $max + 1 : $premiere;
253
-
254
-	return [$premiere, $derniere];
243
+    if ($max <= 0 or $max >= $nombre) {
244
+        return [1, $nombre];
245
+    }
246
+    if ($max <= 1) {
247
+        return [$courante, $courante];
248
+    }
249
+
250
+    $premiere = max(1, $courante - floor(($max - 1) / 2));
251
+    $derniere = min($nombre, $premiere + $max - 2);
252
+    $premiere = $derniere == $nombre ? $derniere - $max + 1 : $premiere;
253
+
254
+    return [$premiere, $derniere];
255 255
 }
256 256
 
257 257
 function filtre_pagination_affiche_texte_lien_page_dist($type_pagination, $numero_page, $rang_item) {
258
-	if ($numero_page === 'tous') {
259
-		return '&#8734;';
260
-	}
261
-	if ($numero_page === 'prev') {
262
-		return '&lt;';
263
-	}
264
-	if ($numero_page === 'next') {
265
-		return '&gt;';
266
-	}
267
-
268
-	switch ($type_pagination) {
269
-		case 'resultats':
270
-			return $rang_item + 1; // 1 11 21 31...
271
-		case 'naturel':
272
-			return $rang_item ?: 1; // 1 10 20 30...
273
-		case 'rang':
274
-			return $rang_item; // 0 10 20 30...
275
-
276
-		case 'page':
277
-		case 'prive':
278
-		default:
279
-			return $numero_page; // 1 2 3 4 5...
280
-	}
258
+    if ($numero_page === 'tous') {
259
+        return '&#8734;';
260
+    }
261
+    if ($numero_page === 'prev') {
262
+        return '&lt;';
263
+    }
264
+    if ($numero_page === 'next') {
265
+        return '&gt;';
266
+    }
267
+
268
+    switch ($type_pagination) {
269
+        case 'resultats':
270
+            return $rang_item + 1; // 1 11 21 31...
271
+        case 'naturel':
272
+            return $rang_item ?: 1; // 1 10 20 30...
273
+        case 'rang':
274
+            return $rang_item; // 0 10 20 30...
275
+
276
+        case 'page':
277
+        case 'prive':
278
+        default:
279
+            return $numero_page; // 1 2 3 4 5...
280
+    }
281 281
 }
282 282
 
283 283
 /**
@@ -290,15 +290,15 @@  discard block
 block discarded – undo
290 290
  **/
291 291
 function lister_objets_avec_logos($type) {
292 292
 
293
-	$objet = objet_type($type);
294
-	$ids = sql_allfetsel('L.id_objet', 'spip_documents AS D JOIN spip_documents_liens AS L ON L.id_document=D.id_document', 'D.mode=' . sql_quote('logoon') . ' AND L.objet=' . sql_quote($objet));
295
-	if ($ids) {
296
-		$ids = array_column($ids, 'id_objet');
297
-		return implode(',', $ids);
298
-	}
299
-	else {
300
-		return '0';
301
-	}
293
+    $objet = objet_type($type);
294
+    $ids = sql_allfetsel('L.id_objet', 'spip_documents AS D JOIN spip_documents_liens AS L ON L.id_document=D.id_document', 'D.mode=' . sql_quote('logoon') . ' AND L.objet=' . sql_quote($objet));
295
+    if ($ids) {
296
+        $ids = array_column($ids, 'id_objet');
297
+        return implode(',', $ids);
298
+    }
299
+    else {
300
+        return '0';
301
+    }
302 302
 }
303 303
 
304 304
 
@@ -314,14 +314,14 @@  discard block
 block discarded – undo
314 314
  *     Code HTML des notes
315 315
  **/
316 316
 function calculer_notes() {
317
-	$r = '';
318
-	if ($notes = charger_fonction('notes', 'inc', true)) {
319
-		$r = $notes([]);
320
-		$notes('', 'depiler');
321
-		$notes('', 'empiler');
322
-	}
323
-
324
-	return $r;
317
+    $r = '';
318
+    if ($notes = charger_fonction('notes', 'inc', true)) {
319
+        $r = $notes([]);
320
+        $notes('', 'depiler');
321
+        $notes('', 'empiler');
322
+    }
323
+
324
+    return $r;
325 325
 }
326 326
 
327 327
 
@@ -338,10 +338,10 @@  discard block
 block discarded – undo
338 338
  * @return string
339 339
  */
340 340
 function retrouver_rang_lien($objet_source, $ids, $objet_lie, $idl, $objet_lien) {
341
-	$res = lister_objets_liens($objet_source, $objet_lie, $idl, $objet_lien);
342
-	$res = array_column($res, 'rang_lien', $objet_source);
341
+    $res = lister_objets_liens($objet_source, $objet_lie, $idl, $objet_lien);
342
+    $res = array_column($res, 'rang_lien', $objet_source);
343 343
 
344
-	return ($res[$ids] ?? '');
344
+    return ($res[$ids] ?? '');
345 345
 }
346 346
 
347 347
 
@@ -358,19 +358,19 @@  discard block
 block discarded – undo
358 358
  * @private
359 359
  */
360 360
 function lister_objets_liens($objet_source, $objet, $id_objet, $objet_lien) {
361
-	static $liens = [];
362
-	if (!isset($liens["$objet_source-$objet-$id_objet-$objet_lien"])) {
363
-		include_spip('action/editer_liens');
364
-		// quand $objet == $objet_lien == $objet_source on reste sur le cas par defaut de $objet_lien == $objet_source
365
-		if ($objet_lien == $objet and $objet_lien !== $objet_source) {
366
-			$res = objet_trouver_liens([$objet => $id_objet], [$objet_source => '*']);
367
-		} else {
368
-			$res = objet_trouver_liens([$objet_source => '*'], [$objet => $id_objet]);
369
-		}
370
-
371
-		$liens["$objet_source-$objet-$id_objet-$objet_lien"] = $res;
372
-	}
373
-	return $liens["$objet_source-$objet-$id_objet-$objet_lien"];
361
+    static $liens = [];
362
+    if (!isset($liens["$objet_source-$objet-$id_objet-$objet_lien"])) {
363
+        include_spip('action/editer_liens');
364
+        // quand $objet == $objet_lien == $objet_source on reste sur le cas par defaut de $objet_lien == $objet_source
365
+        if ($objet_lien == $objet and $objet_lien !== $objet_source) {
366
+            $res = objet_trouver_liens([$objet => $id_objet], [$objet_source => '*']);
367
+        } else {
368
+            $res = objet_trouver_liens([$objet_source => '*'], [$objet => $id_objet]);
369
+        }
370
+
371
+        $liens["$objet_source-$objet-$id_objet-$objet_lien"] = $res;
372
+    }
373
+    return $liens["$objet_source-$objet-$id_objet-$objet_lien"];
374 374
 }
375 375
 
376 376
 /**
@@ -384,24 +384,24 @@  discard block
 block discarded – undo
384 384
  * @return int|string
385 385
  */
386 386
 function calculer_rang_smart($titre, $objet_source, $id, $env) {
387
-	// Cas du #RANG utilisé dans #FORMULAIRE_EDITER_LIENS -> attraper le rang du lien
388
-	// permet de voir le rang du lien si il y en a un en base, meme avant un squelette xxxx-lies.html ne gerant pas les liens
389
-	if (
390
-		isset($env['form']) and $env['form']
391
-		and isset($env['_objet_lien']) and $env['_objet_lien']
392
-		and (function_exists('lien_triables') or include_spip('action/editer_liens'))
393
-		and $r = objet_associable($env['_objet_lien'])
394
-		and [$p, $table_lien] = $r
395
-		and lien_triables($table_lien)
396
-		and isset($env['objet']) and $env['objet']
397
-		and isset($env['id_objet']) and $env['id_objet']
398
-		and $objet_source
399
-		and $id = intval($id)
400
-	) {
401
-		$rang = retrouver_rang_lien($objet_source, $id, $env['objet'], $env['id_objet'], $env['_objet_lien']);
402
-		return ($rang ?: '');
403
-	}
404
-	return recuperer_numero($titre);
387
+    // Cas du #RANG utilisé dans #FORMULAIRE_EDITER_LIENS -> attraper le rang du lien
388
+    // permet de voir le rang du lien si il y en a un en base, meme avant un squelette xxxx-lies.html ne gerant pas les liens
389
+    if (
390
+        isset($env['form']) and $env['form']
391
+        and isset($env['_objet_lien']) and $env['_objet_lien']
392
+        and (function_exists('lien_triables') or include_spip('action/editer_liens'))
393
+        and $r = objet_associable($env['_objet_lien'])
394
+        and [$p, $table_lien] = $r
395
+        and lien_triables($table_lien)
396
+        and isset($env['objet']) and $env['objet']
397
+        and isset($env['id_objet']) and $env['id_objet']
398
+        and $objet_source
399
+        and $id = intval($id)
400
+    ) {
401
+        $rang = retrouver_rang_lien($objet_source, $id, $env['objet'], $env['id_objet'], $env['_objet_lien']);
402
+        return ($rang ?: '');
403
+    }
404
+    return recuperer_numero($titre);
405 405
 }
406 406
 
407 407
 
@@ -417,7 +417,7 @@  discard block
 block discarded – undo
417 417
  * @return string
418 418
  */
419 419
 function tri_protege_champ($t) {
420
-	return preg_replace(',[^\s\w.+\[\]],', '', $t);
420
+    return preg_replace(',[^\s\w.+\[\]],', '', $t);
421 421
 }
422 422
 
423 423
 /**
@@ -430,43 +430,43 @@  discard block
 block discarded – undo
430 430
  * @return string
431 431
  */
432 432
 function tri_champ_order($t, $from = null, $senstri = '') {
433
-	if (strncmp($t, 'multi ', 6) == 0) {
434
-		return 'multi';
435
-	}
436
-
437
-	$champ = $t;
438
-
439
-	$prefixe = '';
440
-	foreach (['num ', 'sinum '] as $p) {
441
-		if (strpos($t, $p) === 0) {
442
-			$champ = substr($t, strlen($p));
443
-			$prefixe = $p;
444
-		}
445
-	}
446
-
447
-	// enlever les autres espaces non evacues par tri_protege_champ
448
-	$champ = preg_replace(',\s,', '', $champ);
449
-
450
-	if (is_array($from)) {
451
-		$trouver_table = charger_fonction('trouver_table', 'base');
452
-		foreach ($from as $idt => $table_sql) {
453
-			if (
454
-				$desc = $trouver_table($table_sql)
455
-				and isset($desc['field'][$champ])
456
-			) {
457
-				$champ = "$idt.$champ";
458
-				break;
459
-			}
460
-		}
461
-	}
462
-	switch ($prefixe) {
463
-		case 'num ':
464
-			return "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}, 0+$champ{$senstri}";
465
-		case 'sinum ':
466
-			return "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}";
467
-		default:
468
-			return $champ . $senstri;
469
-	}
433
+    if (strncmp($t, 'multi ', 6) == 0) {
434
+        return 'multi';
435
+    }
436
+
437
+    $champ = $t;
438
+
439
+    $prefixe = '';
440
+    foreach (['num ', 'sinum '] as $p) {
441
+        if (strpos($t, $p) === 0) {
442
+            $champ = substr($t, strlen($p));
443
+            $prefixe = $p;
444
+        }
445
+    }
446
+
447
+    // enlever les autres espaces non evacues par tri_protege_champ
448
+    $champ = preg_replace(',\s,', '', $champ);
449
+
450
+    if (is_array($from)) {
451
+        $trouver_table = charger_fonction('trouver_table', 'base');
452
+        foreach ($from as $idt => $table_sql) {
453
+            if (
454
+                $desc = $trouver_table($table_sql)
455
+                and isset($desc['field'][$champ])
456
+            ) {
457
+                $champ = "$idt.$champ";
458
+                break;
459
+            }
460
+        }
461
+    }
462
+    switch ($prefixe) {
463
+        case 'num ':
464
+            return "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}, 0+$champ{$senstri}";
465
+        case 'sinum ':
466
+            return "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}";
467
+        default:
468
+            return $champ . $senstri;
469
+    }
470 470
 }
471 471
 
472 472
 /**
@@ -480,18 +480,18 @@  discard block
 block discarded – undo
480 480
  * @return string
481 481
  */
482 482
 function tri_champ_select($t) {
483
-	if (strncmp($t, 'multi ', 6) == 0) {
484
-		$t = substr($t, 6);
485
-		$t = preg_replace(',\s,', '', $t);
486
-		$t = sql_multi($t, $GLOBALS['spip_lang']);
487
-
488
-		return $t;
489
-	}
490
-	if (trim($t) == 'hasard') {
491
-		return 'rand() AS hasard';
492
-	}
493
-
494
-	return "''";
483
+    if (strncmp($t, 'multi ', 6) == 0) {
484
+        $t = substr($t, 6);
485
+        $t = preg_replace(',\s,', '', $t);
486
+        $t = sql_multi($t, $GLOBALS['spip_lang']);
487
+
488
+        return $t;
489
+    }
490
+    if (trim($t) == 'hasard') {
491
+        return 'rand() AS hasard';
492
+    }
493
+
494
+    return "''";
495 495
 }
496 496
 
497 497
 /**
@@ -503,16 +503,16 @@  discard block
 block discarded – undo
503 503
  * @return string
504 504
  */
505 505
 function formate_liste_critere_par_ordre_liste($valeurs, $serveur = '') {
506
-	if (!is_array($valeurs)) {
507
-		return '';
508
-	}
509
-	$f = sql_serveur('quote', $serveur, true);
510
-	if (!is_string($f) or !$f) {
511
-		return '';
512
-	}
513
-	$valeurs = implode(',', array_map($f, array_unique($valeurs)));
514
-
515
-	return $valeurs;
506
+    if (!is_array($valeurs)) {
507
+        return '';
508
+    }
509
+    $f = sql_serveur('quote', $serveur, true);
510
+    if (!is_string($f) or !$f) {
511
+        return '';
512
+    }
513
+    $valeurs = implode(',', array_map($f, array_unique($valeurs)));
514
+
515
+    return $valeurs;
516 516
 }
517 517
 
518 518
 /**
@@ -535,21 +535,21 @@  discard block
 block discarded – undo
535 535
  *     Valeur $defaut sinon.
536 536
  **/
537 537
 function appliquer_filtre_sinon($arg, $filtre, $args, $defaut = '') {
538
-	// Si c'est un filtre d'image, on utilise image_filtrer()
539
-	// Attention : les 2 premiers arguments sont inversés dans ce cas
540
-	if (trouver_filtre_matrice($filtre) and substr($filtre, 0, 6) == 'image_') {
541
-		include_spip('inc/filtres_images_lib_mini');
542
-		$args[1] = $args[0];
543
-		$args[0] = $filtre;
544
-		return image_graver(image_filtrer($args));
545
-	}
546
-
547
-	$f = chercher_filtre($filtre);
548
-	if (!$f) {
549
-		return $defaut;
550
-	}
551
-	array_shift($args); // enlever $arg
552
-	array_shift($args); // enlever $filtre
553
-	array_unshift($args, $arg); // remettre $arg
554
-	return call_user_func_array($f, $args);
538
+    // Si c'est un filtre d'image, on utilise image_filtrer()
539
+    // Attention : les 2 premiers arguments sont inversés dans ce cas
540
+    if (trouver_filtre_matrice($filtre) and substr($filtre, 0, 6) == 'image_') {
541
+        include_spip('inc/filtres_images_lib_mini');
542
+        $args[1] = $args[0];
543
+        $args[0] = $filtre;
544
+        return image_graver(image_filtrer($args));
545
+    }
546
+
547
+    $f = chercher_filtre($filtre);
548
+    if (!$f) {
549
+        return $defaut;
550
+    }
551
+    array_shift($args); // enlever $arg
552
+    array_shift($args); // enlever $filtre
553
+    array_unshift($args, $arg); // remettre $arg
554
+    return call_user_func_array($f, $args);
555 555
 }
Please login to merge, or discard this patch.
ecrire/public/assembler.php 2 patches
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -37,7 +37,7 @@  discard block
 block discarded – undo
37 37
 
38 38
 	$GLOBALS['contexte'] = calculer_contexte();
39 39
 	$page = ['contexte_implicite' => calculer_contexte_implicite()];
40
-	$page['contexte_implicite']['cache'] = $fond . preg_replace(
40
+	$page['contexte_implicite']['cache'] = $fond.preg_replace(
41 41
 		',\.[a-zA-Z0-9]*$,',
42 42
 		'',
43 43
 		preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI'])
@@ -138,7 +138,7 @@  discard block
 block discarded – undo
138 138
 			if ($page === '') {
139 139
 				$erreur = _T(
140 140
 					'info_erreur_squelette2',
141
-					['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES]
141
+					['fichier' => spip_htmlspecialchars($fond).'.'._EXTENSION_SQUELETTES]
142 142
 				);
143 143
 				erreur_squelette($erreur);
144 144
 				// eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
@@ -183,7 +183,7 @@  discard block
 block discarded – undo
183 183
 		and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
184 184
 		and !isset($page['entetes']['Last-Modified'])
185 185
 	) {
186
-		$page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT';
186
+		$page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified).' GMT';
187 187
 	}
188 188
 
189 189
 	// fermer la connexion apres les headers si requete HEAD
@@ -248,7 +248,7 @@  discard block
 block discarded – undo
248 248
 		'spip_version_code' => $GLOBALS['spip_version_code'],
249 249
 	];
250 250
 	if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
251
-		$contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST'];
251
+		$contexte_implicite['host'] .= '|'.$_SERVER['HTTP_X_FORWARDED_HOST'];
252 252
 	}
253 253
 
254 254
 	return $contexte_implicite;
@@ -579,7 +579,7 @@  discard block
 block discarded – undo
579 579
 			}
580 580
 		}
581 581
 		if (is_null($id)) {
582
-			$msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]);
582
+			$msg = "modeles/$modele : "._T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]);
583 583
 			erreur_squelette($msg);
584 584
 			// on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant
585 585
 			$id = 0;
@@ -626,7 +626,7 @@  discard block
 block discarded – undo
626 626
 		}
627 627
 
628 628
 		if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
629
-			if (!trouve_modele($fond = ($type . '_' . $soustype))) {
629
+			if (!trouve_modele($fond = ($type.'_'.$soustype))) {
630 630
 				$fond = '';
631 631
 				$class = $soustype;
632 632
 			}
@@ -641,7 +641,7 @@  discard block
 block discarded – undo
641 641
 
642 642
 		return false;
643 643
 	}
644
-	$fond = 'modeles/' . $fond;
644
+	$fond = 'modeles/'.$fond;
645 645
 	// Creer le contexte
646 646
 	$contexte = $env;
647 647
 	$contexte['dir_racine'] = _DIR_RACINE; # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte
@@ -682,7 +682,7 @@  discard block
 block discarded – undo
682 682
 	// sinon, s'il y a un lien, on l'ajoute classiquement
683 683
 	if (
684 684
 		strstr(
685
-			' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
685
+			' '.($classes = extraire_attribut($retour, 'class')).' ',
686 686
 			'spip_lien_ok'
687 687
 		)
688 688
 	) {
@@ -693,7 +693,7 @@  discard block
 block discarded – undo
693 693
 		);
694 694
 	} else {
695 695
 		if ($lien) {
696
-			$retour = "<a href='" . $lien['href'] . "' class='" . $lien['class'] . "'>" . $retour . '</a>';
696
+			$retour = "<a href='".$lien['href']."' class='".$lien['class']."'>".$retour.'</a>';
697 697
 		}
698 698
 	}
699 699
 
@@ -717,7 +717,7 @@  discard block
 block discarded – undo
717 717
 		return $page;
718 718
 	}
719 719
 	// eval $page et affecte $res
720
-	include _ROOT_RESTREINT . 'public/evaluer_page.php';
720
+	include _ROOT_RESTREINT.'public/evaluer_page.php';
721 721
 
722 722
 	// Lever un drapeau (global) si le fond utilise #SESSION
723 723
 	// a destination de public/parametrer
@@ -785,16 +785,16 @@  discard block
 block discarded – undo
785 785
 			if (($pos = strpos($head, '<head>')) !== false) {
786 786
 				$head = substr_replace($head, $base, $pos + 6, 0);
787 787
 			} elseif (preg_match(',<head[^>]*>,i', $head, $r)) {
788
-				$head = str_replace($r[0], $r[0] . $base, $head);
788
+				$head = str_replace($r[0], $r[0].$base, $head);
789 789
 			}
790
-			$texte = $head . substr($texte, $poshead);
790
+			$texte = $head.substr($texte, $poshead);
791 791
 		}
792 792
 		if ($href_base) {
793 793
 			// gerer les ancres
794 794
 			$base = $_SERVER['REQUEST_URI'];
795 795
 			// pas de guillemets ni < dans l'URL qu'on insere dans le HTML
796 796
 			if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) {
797
-				$base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base);
797
+				$base = str_replace(["'", '"', '<'], ['%27', '%22', '%3C'], $base);
798 798
 			}
799 799
 			if (strpos($texte, "href='#") !== false) {
800 800
 				$texte = str_replace("href='#", "href='$base#", $texte);
Please login to merge, or discard this patch.
Indentation   +632 added lines, -632 removed lines patch added patch discarded remove patch
@@ -20,180 +20,180 @@  discard block
 block discarded – undo
20 20
  **/
21 21
 
22 22
 if (!defined('_ECRIRE_INC_VERSION')) {
23
-	return;
23
+    return;
24 24
 }
25 25
 
26 26
 // En cas de modification, il faut aussi actualiser la regexp de nettoyer_uri_var() dans inc/utils.php
27 27
 if (!defined('_CONTEXTE_IGNORE_VARIABLES')) {
28
-	define('_CONTEXTE_IGNORE_VARIABLES', '/(^var_|^PHPSESSID$|^fbclid$|^utm_)/');
28
+    define('_CONTEXTE_IGNORE_VARIABLES', '/(^var_|^PHPSESSID$|^fbclid$|^utm_)/');
29 29
 }
30 30
 
31 31
 function assembler($fond, string $connect = '') {
32 32
 
33
-	$chemin_cache = null;
34
-	$lastmodified = null;
35
-	$res = null;
36
-	// flag_preserver est modifie ici, et utilise en globale
37
-	// use_cache sert a informer le bouton d'admin pr savoir s'il met un *
38
-	// contexte est utilise en globale dans le formulaire d'admin
39
-
40
-	$GLOBALS['contexte'] = calculer_contexte();
41
-	$page = ['contexte_implicite' => calculer_contexte_implicite()];
42
-	$page['contexte_implicite']['cache'] = $fond . preg_replace(
43
-		',\.[a-zA-Z0-9]*$,',
44
-		'',
45
-		preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI'])
46
-	);
47
-	// Cette fonction est utilisee deux fois
48
-	$cacher = charger_fonction('cacher', 'public', true);
49
-	// Les quatre derniers parametres sont modifies par la fonction:
50
-	// emplacement, validite, et, s'il est valide, contenu & age
51
-	if ($cacher) {
52
-		$res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified);
53
-	} else {
54
-		$GLOBALS['use_cache'] = -1;
55
-	}
56
-	// Si un resultat est retourne, c'est un message d'impossibilite
57
-	if ($res) {
58
-		return ['texte' => $res];
59
-	}
60
-
61
-	if (!$chemin_cache || !$lastmodified) {
62
-		$lastmodified = time();
63
-	}
64
-
65
-	$headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD');
66
-	$calculer_page = true;
67
-
68
-	// Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client})
69
-	// une perennite valide a meme reponse qu'une requete HEAD (par defaut les
70
-	// pages sont dynamiques)
71
-	if (
72
-		isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
73
-		and (!defined('_VAR_MODE') or !_VAR_MODE)
74
-		and $chemin_cache
75
-		and isset($page['entetes'])
76
-		and isset($page['entetes']['Cache-Control'])
77
-		and strstr($page['entetes']['Cache-Control'], 'max-age=')
78
-		and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/')
79
-	) {
80
-		$since = preg_replace(
81
-			'/;.*/',
82
-			'',
83
-			$_SERVER['HTTP_IF_MODIFIED_SINCE']
84
-		);
85
-		$since = str_replace('GMT', '', $since);
86
-		if (trim($since) == gmdate('D, d M Y H:i:s', $lastmodified)) {
87
-			$page['status'] = 304;
88
-			$headers_only = true;
89
-			$calculer_page = false;
90
-		}
91
-	}
92
-
93
-	// Si requete HEAD ou Last-modified compatible, ignorer le texte
94
-	// et pas de content-type (pour contrer le bouton admin de inc-public)
95
-	if (!$calculer_page) {
96
-		$page['texte'] = '';
97
-	} else {
98
-		// si la page est prise dans le cache
99
-		if (!$GLOBALS['use_cache']) {
100
-			// Informer les boutons d'admin du contexte
101
-			// (fourni par urls_decoder_url ci-dessous lors de la mise en cache)
102
-			$GLOBALS['contexte'] = $page['contexte'];
103
-
104
-			// vider les globales url propres qui ne doivent plus etre utilisees en cas
105
-			// d'inversion url => objet
106
-			// plus necessaire si on utilise bien la fonction urls_decoder_url
107
-			#unset($_SERVER['REDIRECT_url_propre']);
108
-			#unset($_ENV['url_propre']);
109
-		} else {
110
-			// Compat ascendante :
111
-			// 1. $contexte est global
112
-			// (a evacuer car urls_decoder_url gere ce probleme ?)
113
-			// et calculer la page
114
-			if (!test_espace_prive()) {
115
-				include_spip('inc/urls');
116
-				[$fond, $GLOBALS['contexte'], $url_redirect] = urls_decoder_url(
117
-					nettoyer_uri(),
118
-					$fond,
119
-					$GLOBALS['contexte'],
120
-					true
121
-				);
122
-			}
123
-			// squelette par defaut
124
-			if (!strlen($fond ?? '')) {
125
-				$fond = 'sommaire';
126
-			}
127
-
128
-			// produire la page : peut mettre a jour $lastmodified
129
-			$produire_page = charger_fonction('produire_page', 'public');
130
-			$page = $produire_page(
131
-				$fond,
132
-				$GLOBALS['contexte'],
133
-				$GLOBALS['use_cache'],
134
-				$chemin_cache,
135
-				null,
136
-				$page,
137
-				$lastmodified,
138
-				$connect
139
-			);
140
-			if ($page === '') {
141
-				$erreur = _T(
142
-					'info_erreur_squelette2',
143
-					['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES]
144
-				);
145
-				erreur_squelette($erreur);
146
-				// eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
147
-				$page = ['texte' => '', 'erreur' => $erreur];
148
-			}
149
-		}
150
-
151
-		if ($page and $chemin_cache) {
152
-			$page['cache'] = $chemin_cache;
153
-		}
154
-
155
-		auto_content_type($page);
156
-
157
-		$GLOBALS['flag_preserver'] |= headers_sent();
158
-
159
-		// Definir les entetes si ce n'est fait
160
-		if (!$GLOBALS['flag_preserver']) {
161
-			if ($GLOBALS['flag_ob']) {
162
-				// Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions
163
-				if (
164
-					trim($page['texte']) === ''
165
-					and _VAR_MODE != 'debug'
166
-					and !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur
167
-				) {
168
-					$GLOBALS['contexte']['fond_erreur'] = $fond;
169
-					$page = message_page_indisponible($page, $GLOBALS['contexte']);
170
-				}
171
-				// pas de cache client en mode 'observation'
172
-				if (defined('_VAR_MODE') and _VAR_MODE) {
173
-					$page['entetes']['Cache-Control'] = 'no-cache,must-revalidate';
174
-					$page['entetes']['Pragma'] = 'no-cache';
175
-				}
176
-			}
177
-		}
178
-	}
179
-
180
-	// Entete Last-Modified:
181
-	// eviter d'etre incoherent en envoyant un lastmodified identique
182
-	// a celui qu'on a refuse d'honorer plus haut (cf. #655)
183
-	if (
184
-		$lastmodified
185
-		and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
186
-		and !isset($page['entetes']['Last-Modified'])
187
-	) {
188
-		$page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT';
189
-	}
190
-
191
-	// fermer la connexion apres les headers si requete HEAD
192
-	if ($headers_only) {
193
-		$page['entetes']['Connection'] = 'close';
194
-	}
195
-
196
-	return $page;
33
+    $chemin_cache = null;
34
+    $lastmodified = null;
35
+    $res = null;
36
+    // flag_preserver est modifie ici, et utilise en globale
37
+    // use_cache sert a informer le bouton d'admin pr savoir s'il met un *
38
+    // contexte est utilise en globale dans le formulaire d'admin
39
+
40
+    $GLOBALS['contexte'] = calculer_contexte();
41
+    $page = ['contexte_implicite' => calculer_contexte_implicite()];
42
+    $page['contexte_implicite']['cache'] = $fond . preg_replace(
43
+        ',\.[a-zA-Z0-9]*$,',
44
+        '',
45
+        preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI'])
46
+    );
47
+    // Cette fonction est utilisee deux fois
48
+    $cacher = charger_fonction('cacher', 'public', true);
49
+    // Les quatre derniers parametres sont modifies par la fonction:
50
+    // emplacement, validite, et, s'il est valide, contenu & age
51
+    if ($cacher) {
52
+        $res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified);
53
+    } else {
54
+        $GLOBALS['use_cache'] = -1;
55
+    }
56
+    // Si un resultat est retourne, c'est un message d'impossibilite
57
+    if ($res) {
58
+        return ['texte' => $res];
59
+    }
60
+
61
+    if (!$chemin_cache || !$lastmodified) {
62
+        $lastmodified = time();
63
+    }
64
+
65
+    $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD');
66
+    $calculer_page = true;
67
+
68
+    // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client})
69
+    // une perennite valide a meme reponse qu'une requete HEAD (par defaut les
70
+    // pages sont dynamiques)
71
+    if (
72
+        isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
73
+        and (!defined('_VAR_MODE') or !_VAR_MODE)
74
+        and $chemin_cache
75
+        and isset($page['entetes'])
76
+        and isset($page['entetes']['Cache-Control'])
77
+        and strstr($page['entetes']['Cache-Control'], 'max-age=')
78
+        and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/')
79
+    ) {
80
+        $since = preg_replace(
81
+            '/;.*/',
82
+            '',
83
+            $_SERVER['HTTP_IF_MODIFIED_SINCE']
84
+        );
85
+        $since = str_replace('GMT', '', $since);
86
+        if (trim($since) == gmdate('D, d M Y H:i:s', $lastmodified)) {
87
+            $page['status'] = 304;
88
+            $headers_only = true;
89
+            $calculer_page = false;
90
+        }
91
+    }
92
+
93
+    // Si requete HEAD ou Last-modified compatible, ignorer le texte
94
+    // et pas de content-type (pour contrer le bouton admin de inc-public)
95
+    if (!$calculer_page) {
96
+        $page['texte'] = '';
97
+    } else {
98
+        // si la page est prise dans le cache
99
+        if (!$GLOBALS['use_cache']) {
100
+            // Informer les boutons d'admin du contexte
101
+            // (fourni par urls_decoder_url ci-dessous lors de la mise en cache)
102
+            $GLOBALS['contexte'] = $page['contexte'];
103
+
104
+            // vider les globales url propres qui ne doivent plus etre utilisees en cas
105
+            // d'inversion url => objet
106
+            // plus necessaire si on utilise bien la fonction urls_decoder_url
107
+            #unset($_SERVER['REDIRECT_url_propre']);
108
+            #unset($_ENV['url_propre']);
109
+        } else {
110
+            // Compat ascendante :
111
+            // 1. $contexte est global
112
+            // (a evacuer car urls_decoder_url gere ce probleme ?)
113
+            // et calculer la page
114
+            if (!test_espace_prive()) {
115
+                include_spip('inc/urls');
116
+                [$fond, $GLOBALS['contexte'], $url_redirect] = urls_decoder_url(
117
+                    nettoyer_uri(),
118
+                    $fond,
119
+                    $GLOBALS['contexte'],
120
+                    true
121
+                );
122
+            }
123
+            // squelette par defaut
124
+            if (!strlen($fond ?? '')) {
125
+                $fond = 'sommaire';
126
+            }
127
+
128
+            // produire la page : peut mettre a jour $lastmodified
129
+            $produire_page = charger_fonction('produire_page', 'public');
130
+            $page = $produire_page(
131
+                $fond,
132
+                $GLOBALS['contexte'],
133
+                $GLOBALS['use_cache'],
134
+                $chemin_cache,
135
+                null,
136
+                $page,
137
+                $lastmodified,
138
+                $connect
139
+            );
140
+            if ($page === '') {
141
+                $erreur = _T(
142
+                    'info_erreur_squelette2',
143
+                    ['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES]
144
+                );
145
+                erreur_squelette($erreur);
146
+                // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
147
+                $page = ['texte' => '', 'erreur' => $erreur];
148
+            }
149
+        }
150
+
151
+        if ($page and $chemin_cache) {
152
+            $page['cache'] = $chemin_cache;
153
+        }
154
+
155
+        auto_content_type($page);
156
+
157
+        $GLOBALS['flag_preserver'] |= headers_sent();
158
+
159
+        // Definir les entetes si ce n'est fait
160
+        if (!$GLOBALS['flag_preserver']) {
161
+            if ($GLOBALS['flag_ob']) {
162
+                // Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions
163
+                if (
164
+                    trim($page['texte']) === ''
165
+                    and _VAR_MODE != 'debug'
166
+                    and !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur
167
+                ) {
168
+                    $GLOBALS['contexte']['fond_erreur'] = $fond;
169
+                    $page = message_page_indisponible($page, $GLOBALS['contexte']);
170
+                }
171
+                // pas de cache client en mode 'observation'
172
+                if (defined('_VAR_MODE') and _VAR_MODE) {
173
+                    $page['entetes']['Cache-Control'] = 'no-cache,must-revalidate';
174
+                    $page['entetes']['Pragma'] = 'no-cache';
175
+                }
176
+            }
177
+        }
178
+    }
179
+
180
+    // Entete Last-Modified:
181
+    // eviter d'etre incoherent en envoyant un lastmodified identique
182
+    // a celui qu'on a refuse d'honorer plus haut (cf. #655)
183
+    if (
184
+        $lastmodified
185
+        and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])
186
+        and !isset($page['entetes']['Last-Modified'])
187
+    ) {
188
+        $page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT';
189
+    }
190
+
191
+    // fermer la connexion apres les headers si requete HEAD
192
+    if ($headers_only) {
193
+        $page['entetes']['Connection'] = 'close';
194
+    }
195
+
196
+    return $page;
197 197
 }
198 198
 
199 199
 /**
@@ -210,19 +210,19 @@  discard block
 block discarded – undo
210 210
  */
211 211
 function calculer_contexte() {
212 212
 
213
-	$contexte = [];
214
-	foreach ($_GET as $var => $val) {
215
-		if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
216
-			$contexte[$var] = $val;
217
-		}
218
-	}
219
-	foreach ($_POST as $var => $val) {
220
-		if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
221
-			$contexte[$var] = $val;
222
-		}
223
-	}
224
-
225
-	return $contexte;
213
+    $contexte = [];
214
+    foreach ($_GET as $var => $val) {
215
+        if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
216
+            $contexte[$var] = $val;
217
+        }
218
+    }
219
+    foreach ($_POST as $var => $val) {
220
+        if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) {
221
+            $contexte[$var] = $val;
222
+        }
223
+    }
224
+
225
+    return $contexte;
226 226
 }
227 227
 
228 228
 /**
@@ -233,25 +233,25 @@  discard block
 block discarded – undo
233 233
  * @return array
234 234
  */
235 235
 function calculer_contexte_implicite() {
236
-	static $notes = null;
237
-	if (is_null($notes)) {
238
-		$notes = charger_fonction('notes', 'inc', true);
239
-	}
240
-	$contexte_implicite = [
241
-		'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ?
242
-		'host' => ($_SERVER['HTTP_HOST'] ?? null),
243
-		'https' => ($_SERVER['HTTPS'] ?? ''),
244
-		'espace' => test_espace_prive(),
245
-		'marqueur' => ($GLOBALS['marqueur'] ?? ''),
246
-		'marqueur_skel' => ($GLOBALS['marqueur_skel'] ?? ''),
247
-		'notes' => $notes ? $notes('', 'contexter_cache') : '',
248
-		'spip_version_code' => $GLOBALS['spip_version_code'],
249
-	];
250
-	if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
251
-		$contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST'];
252
-	}
253
-
254
-	return $contexte_implicite;
236
+    static $notes = null;
237
+    if (is_null($notes)) {
238
+        $notes = charger_fonction('notes', 'inc', true);
239
+    }
240
+    $contexte_implicite = [
241
+        'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ?
242
+        'host' => ($_SERVER['HTTP_HOST'] ?? null),
243
+        'https' => ($_SERVER['HTTPS'] ?? ''),
244
+        'espace' => test_espace_prive(),
245
+        'marqueur' => ($GLOBALS['marqueur'] ?? ''),
246
+        'marqueur_skel' => ($GLOBALS['marqueur_skel'] ?? ''),
247
+        'notes' => $notes ? $notes('', 'contexter_cache') : '',
248
+        'spip_version_code' => $GLOBALS['spip_version_code'],
249
+    ];
250
+    if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
251
+        $contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST'];
252
+    }
253
+
254
+    return $contexte_implicite;
255 255
 }
256 256
 
257 257
 //
@@ -260,55 +260,55 @@  discard block
 block discarded – undo
260 260
 
261 261
 function auto_content_type($page) {
262 262
 
263
-	if (!isset($GLOBALS['flag_preserver'])) {
264
-		$GLOBALS['flag_preserver'] = ($page && preg_match(
265
-			'/header\s*\(\s*.content\-type:/isx',
266
-			$page['texte']
267
-		) || (isset($page['entetes']['Content-Type'])));
268
-	}
263
+    if (!isset($GLOBALS['flag_preserver'])) {
264
+        $GLOBALS['flag_preserver'] = ($page && preg_match(
265
+            '/header\s*\(\s*.content\-type:/isx',
266
+            $page['texte']
267
+        ) || (isset($page['entetes']['Content-Type'])));
268
+    }
269 269
 }
270 270
 
271 271
 function inclure_page($fond, $contexte, string $connect = '') {
272
-	$use_cache = null;
273
-	$chemin_cache = null;
274
-	$lastinclude = null;
275
-	$res = null;
276
-	static $cacher, $produire_page;
277
-
278
-	// enlever le fond de contexte inclus car sinon il prend la main
279
-	// dans les sous inclusions -> boucle infinie d'inclusion identique
280
-	// (cette precaution n'est probablement plus utile)
281
-	unset($contexte['fond']);
282
-	$page = ['contexte_implicite' => calculer_contexte_implicite()];
283
-	$page['contexte_implicite']['cache'] = $fond;
284
-	if (is_null($cacher)) {
285
-		$cacher = charger_fonction('cacher', 'public', true);
286
-	}
287
-	// Les quatre derniers parametres sont modifies par la fonction:
288
-	// emplacement, validite, et, s'il est valide, contenu & age
289
-	if ($cacher) {
290
-		$res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude);
291
-	} else {
292
-		$use_cache = -1;
293
-	}
294
-	// $res = message d'erreur : on sort de la
295
-	if ($res) {
296
-		return ['texte' => $res];
297
-	}
298
-
299
-	// Si use_cache ne vaut pas 0, la page doit etre calculee
300
-	// produire la page : peut mettre a jour $lastinclude
301
-	// le contexte_cache envoye a cacher() a ete conserve et est passe a produire
302
-	if ($use_cache) {
303
-		if (is_null($produire_page)) {
304
-			$produire_page = charger_fonction('produire_page', 'public');
305
-		}
306
-		$page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect);
307
-	}
308
-	// dans tous les cas, mettre a jour $GLOBALS['lastmodified']
309
-	$GLOBALS['lastmodified'] = max(($GLOBALS['lastmodified'] ?? 0), $lastinclude);
310
-
311
-	return $page;
272
+    $use_cache = null;
273
+    $chemin_cache = null;
274
+    $lastinclude = null;
275
+    $res = null;
276
+    static $cacher, $produire_page;
277
+
278
+    // enlever le fond de contexte inclus car sinon il prend la main
279
+    // dans les sous inclusions -> boucle infinie d'inclusion identique
280
+    // (cette precaution n'est probablement plus utile)
281
+    unset($contexte['fond']);
282
+    $page = ['contexte_implicite' => calculer_contexte_implicite()];
283
+    $page['contexte_implicite']['cache'] = $fond;
284
+    if (is_null($cacher)) {
285
+        $cacher = charger_fonction('cacher', 'public', true);
286
+    }
287
+    // Les quatre derniers parametres sont modifies par la fonction:
288
+    // emplacement, validite, et, s'il est valide, contenu & age
289
+    if ($cacher) {
290
+        $res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude);
291
+    } else {
292
+        $use_cache = -1;
293
+    }
294
+    // $res = message d'erreur : on sort de la
295
+    if ($res) {
296
+        return ['texte' => $res];
297
+    }
298
+
299
+    // Si use_cache ne vaut pas 0, la page doit etre calculee
300
+    // produire la page : peut mettre a jour $lastinclude
301
+    // le contexte_cache envoye a cacher() a ete conserve et est passe a produire
302
+    if ($use_cache) {
303
+        if (is_null($produire_page)) {
304
+            $produire_page = charger_fonction('produire_page', 'public');
305
+        }
306
+        $page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect);
307
+    }
308
+    // dans tous les cas, mettre a jour $GLOBALS['lastmodified']
309
+    $GLOBALS['lastmodified'] = max(($GLOBALS['lastmodified'] ?? 0), $lastinclude);
310
+
311
+    return $page;
312 312
 }
313 313
 
314 314
 /**
@@ -326,41 +326,41 @@  discard block
 block discarded – undo
326 326
  * @return array
327 327
  */
328 328
 function public_produire_page_dist(
329
-	$fond,
330
-	$contexte,
331
-	$use_cache,
332
-	$chemin_cache,
333
-	$contexte_cache,
334
-	&$page,
335
-	&$lastinclude,
336
-	$connect = ''
329
+    $fond,
330
+    $contexte,
331
+    $use_cache,
332
+    $chemin_cache,
333
+    $contexte_cache,
334
+    &$page,
335
+    &$lastinclude,
336
+    $connect = ''
337 337
 ) {
338
-	static $parametrer, $cacher;
339
-	if (!$parametrer) {
340
-		$parametrer = charger_fonction('parametrer', 'public');
341
-	}
342
-	$page = $parametrer($fond, $contexte, $chemin_cache, $connect);
343
-	// et on l'enregistre sur le disque
344
-	if (
345
-		$chemin_cache
346
-		and $use_cache > -1
347
-		and is_array($page)
348
-		and count($page)
349
-		and isset($page['entetes']['X-Spip-Cache'])
350
-		and $page['entetes']['X-Spip-Cache'] > 0
351
-	) {
352
-		if (is_null($cacher)) {
353
-			$cacher = charger_fonction('cacher', 'public', true);
354
-		}
355
-		$lastinclude = time();
356
-		if ($cacher) {
357
-			$cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude);
358
-		} else {
359
-			$use_cache = -1;
360
-		}
361
-	}
362
-
363
-	return $page;
338
+    static $parametrer, $cacher;
339
+    if (!$parametrer) {
340
+        $parametrer = charger_fonction('parametrer', 'public');
341
+    }
342
+    $page = $parametrer($fond, $contexte, $chemin_cache, $connect);
343
+    // et on l'enregistre sur le disque
344
+    if (
345
+        $chemin_cache
346
+        and $use_cache > -1
347
+        and is_array($page)
348
+        and count($page)
349
+        and isset($page['entetes']['X-Spip-Cache'])
350
+        and $page['entetes']['X-Spip-Cache'] > 0
351
+    ) {
352
+        if (is_null($cacher)) {
353
+            $cacher = charger_fonction('cacher', 'public', true);
354
+        }
355
+        $lastinclude = time();
356
+        if ($cacher) {
357
+            $cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude);
358
+        } else {
359
+            $use_cache = -1;
360
+        }
361
+    }
362
+
363
+    return $page;
364 364
 }
365 365
 
366 366
 // Fonction inseree par le compilateur dans le code compile.
@@ -374,14 +374,14 @@  discard block
 block discarded – undo
374 374
 // 4: langue
375 375
 
376 376
 function inserer_balise_dynamique($contexte_exec, $contexte_compil) {
377
-	arguments_balise_dyn_depuis_modele(null, 'reset');
378
-
379
-	if (!is_array($contexte_exec)) {
380
-		echo $contexte_exec;
381
-	} // message d'erreur etc
382
-	else {
383
-		inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
384
-	}
377
+    arguments_balise_dyn_depuis_modele(null, 'reset');
378
+
379
+    if (!is_array($contexte_exec)) {
380
+        echo $contexte_exec;
381
+    } // message d'erreur etc
382
+    else {
383
+        inclure_balise_dynamique($contexte_exec, true, $contexte_compil);
384
+    }
385 385
 }
386 386
 
387 387
 /**
@@ -394,98 +394,98 @@  discard block
 block discarded – undo
394 394
  * @return string
395 395
  */
396 396
 function inclure_balise_dynamique($texte, $echo = true, $contexte_compil = []) {
397
-	if (is_array($texte)) {
398
-		[$fond, $delainc, $contexte_inclus] = $texte;
399
-
400
-		// delais a l'ancienne, c'est pratiquement mort
401
-		$d = $GLOBALS['delais'] ?? null;
402
-		$GLOBALS['delais'] = $delainc;
403
-
404
-		$page = recuperer_fond(
405
-			$fond,
406
-			$contexte_inclus,
407
-			['trim' => false, 'raw' => true, 'compil' => $contexte_compil]
408
-		);
409
-
410
-		$texte = $page['texte'];
411
-
412
-		$GLOBALS['delais'] = $d;
413
-		// Faire remonter les entetes
414
-		if (is_array($page['entetes'])) {
415
-			// mais pas toutes
416
-			unset($page['entetes']['X-Spip-Cache']);
417
-			unset($page['entetes']['Content-Type']);
418
-			if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) {
419
-				if (!is_array($GLOBALS['page']['entetes'])) {
420
-					$GLOBALS['page']['entetes'] = [];
421
-				}
422
-				$GLOBALS['page']['entetes'] =
423
-					array_merge($GLOBALS['page']['entetes'], $page['entetes']);
424
-			}
425
-		}
426
-		// _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines
427
-		if (
428
-			isset($page['contexte']['_pipelines'])
429
-			and is_array($page['contexte']['_pipelines'])
430
-			and count($page['contexte']['_pipelines'])
431
-		) {
432
-			foreach ($page['contexte']['_pipelines'] as $pipe => $args) {
433
-				$args['contexte'] = $page['contexte'];
434
-				unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul
435
-				$texte = pipeline(
436
-					$pipe,
437
-					[
438
-						'data' => $texte,
439
-						'args' => $args
440
-					]
441
-				);
442
-			}
443
-		}
444
-	}
445
-
446
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
447
-		// compatibilite : avant on donnait le numero de ligne ou rien.
448
-		$ligne = intval($contexte_compil[3] ?? $contexte_compil);
449
-		$GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
450
-	}
451
-	if ($echo) {
452
-		echo $texte;
453
-	} else {
454
-		return $texte;
455
-	}
397
+    if (is_array($texte)) {
398
+        [$fond, $delainc, $contexte_inclus] = $texte;
399
+
400
+        // delais a l'ancienne, c'est pratiquement mort
401
+        $d = $GLOBALS['delais'] ?? null;
402
+        $GLOBALS['delais'] = $delainc;
403
+
404
+        $page = recuperer_fond(
405
+            $fond,
406
+            $contexte_inclus,
407
+            ['trim' => false, 'raw' => true, 'compil' => $contexte_compil]
408
+        );
409
+
410
+        $texte = $page['texte'];
411
+
412
+        $GLOBALS['delais'] = $d;
413
+        // Faire remonter les entetes
414
+        if (is_array($page['entetes'])) {
415
+            // mais pas toutes
416
+            unset($page['entetes']['X-Spip-Cache']);
417
+            unset($page['entetes']['Content-Type']);
418
+            if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) {
419
+                if (!is_array($GLOBALS['page']['entetes'])) {
420
+                    $GLOBALS['page']['entetes'] = [];
421
+                }
422
+                $GLOBALS['page']['entetes'] =
423
+                    array_merge($GLOBALS['page']['entetes'], $page['entetes']);
424
+            }
425
+        }
426
+        // _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines
427
+        if (
428
+            isset($page['contexte']['_pipelines'])
429
+            and is_array($page['contexte']['_pipelines'])
430
+            and count($page['contexte']['_pipelines'])
431
+        ) {
432
+            foreach ($page['contexte']['_pipelines'] as $pipe => $args) {
433
+                $args['contexte'] = $page['contexte'];
434
+                unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul
435
+                $texte = pipeline(
436
+                    $pipe,
437
+                    [
438
+                        'data' => $texte,
439
+                        'args' => $args
440
+                    ]
441
+                );
442
+            }
443
+        }
444
+    }
445
+
446
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
447
+        // compatibilite : avant on donnait le numero de ligne ou rien.
448
+        $ligne = intval($contexte_compil[3] ?? $contexte_compil);
449
+        $GLOBALS['debug_objets']['resultat'][$ligne] = $texte;
450
+    }
451
+    if ($echo) {
452
+        echo $texte;
453
+    } else {
454
+        return $texte;
455
+    }
456 456
 }
457 457
 
458 458
 function message_page_indisponible($page, $contexte) {
459
-	static $deja = false;
460
-	if ($deja) {
461
-		return 'erreur';
462
-	}
463
-	$codes = [
464
-		'404' => '404 Not Found',
465
-		'503' => '503 Service Unavailable',
466
-	];
467
-
468
-	$contexte['status'] = ($page !== false) ? '404' : '503';
469
-	$contexte['code'] = $codes[$contexte['status']];
470
-	$contexte['fond'] = '404'; // gere les 2 erreurs
471
-	if (!isset($contexte['lang'])) {
472
-		include_spip('inc/lang');
473
-		$contexte['lang'] = $GLOBALS['spip_lang'];
474
-	}
475
-
476
-	$deja = true;
477
-	// passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent
478
-	// ex restriction d'acces => 401
479
-	$contexte = pipeline('page_indisponible', $contexte);
480
-
481
-	// produire la page d'erreur
482
-	$page = inclure_page($contexte['fond'], $contexte);
483
-	if (!$page) {
484
-		$page = inclure_page('404', $contexte);
485
-	}
486
-	$page['status'] = $contexte['status'];
487
-
488
-	return $page;
459
+    static $deja = false;
460
+    if ($deja) {
461
+        return 'erreur';
462
+    }
463
+    $codes = [
464
+        '404' => '404 Not Found',
465
+        '503' => '503 Service Unavailable',
466
+    ];
467
+
468
+    $contexte['status'] = ($page !== false) ? '404' : '503';
469
+    $contexte['code'] = $codes[$contexte['status']];
470
+    $contexte['fond'] = '404'; // gere les 2 erreurs
471
+    if (!isset($contexte['lang'])) {
472
+        include_spip('inc/lang');
473
+        $contexte['lang'] = $GLOBALS['spip_lang'];
474
+    }
475
+
476
+    $deja = true;
477
+    // passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent
478
+    // ex restriction d'acces => 401
479
+    $contexte = pipeline('page_indisponible', $contexte);
480
+
481
+    // produire la page d'erreur
482
+    $page = inclure_page($contexte['fond'], $contexte);
483
+    if (!$page) {
484
+        $page = inclure_page('404', $contexte);
485
+    }
486
+    $page['status'] = $contexte['status'];
487
+
488
+    return $page;
489 489
 }
490 490
 
491 491
 /**
@@ -497,44 +497,44 @@  discard block
 block discarded – undo
497 497
  * @return mixed
498 498
  */
499 499
 function arguments_balise_dyn_depuis_modele($arg, $operation = 'set') {
500
-	static $balise_dyn_appellee_par_modele = null;
501
-	switch ($operation) {
502
-		case 'read':
503
-			return $balise_dyn_appellee_par_modele;
504
-		case 'reset':
505
-			$balise_dyn_appellee_par_modele = null;
506
-			return null;
507
-		case 'set':
508
-		default:
509
-			$balise_dyn_appellee_par_modele = $arg;
510
-			return $arg;
511
-	}
500
+    static $balise_dyn_appellee_par_modele = null;
501
+    switch ($operation) {
502
+        case 'read':
503
+            return $balise_dyn_appellee_par_modele;
504
+        case 'reset':
505
+            $balise_dyn_appellee_par_modele = null;
506
+            return null;
507
+        case 'set':
508
+        default:
509
+            $balise_dyn_appellee_par_modele = $arg;
510
+            return $arg;
511
+    }
512 512
 }
513 513
 
514 514
 // temporairement ici : a mettre dans le futur inc/modeles
515 515
 // creer_contexte_de_modele('left', 'autostart=true', ...) renvoie un array()
516 516
 function creer_contexte_de_modele($args) {
517
-	$contexte = [];
518
-	foreach ($args as $var => $val) {
519
-		if (is_int($var)) { // argument pas formate
520
-			if (in_array($val, ['left', 'right', 'center'])) {
521
-				$var = 'align';
522
-				$contexte[$var] = $val;
523
-			} else {
524
-				$args = explode('=', $val);
525
-				if (count($args) >= 2) { // Flashvars=arg1=machin&arg2=truc genere plus de deux args
526
-				$contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1);
527
-				} else // notation abregee
528
-				{
529
-					$contexte[trim($val)] = trim($val);
530
-				}
531
-			}
532
-		} else {
533
-			$contexte[$var] = $val;
534
-		}
535
-	}
536
-
537
-	return $contexte;
517
+    $contexte = [];
518
+    foreach ($args as $var => $val) {
519
+        if (is_int($var)) { // argument pas formate
520
+            if (in_array($val, ['left', 'right', 'center'])) {
521
+                $var = 'align';
522
+                $contexte[$var] = $val;
523
+            } else {
524
+                $args = explode('=', $val);
525
+                if (count($args) >= 2) { // Flashvars=arg1=machin&arg2=truc genere plus de deux args
526
+                $contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1);
527
+                } else // notation abregee
528
+                {
529
+                    $contexte[trim($val)] = trim($val);
530
+                }
531
+            }
532
+        } else {
533
+            $contexte[$var] = $val;
534
+        }
535
+    }
536
+
537
+    return $contexte;
538 538
 }
539 539
 
540 540
 /**
@@ -549,43 +549,43 @@  discard block
 block discarded – undo
549 549
  * @return string
550 550
  */
551 551
 function styliser_modele($modele, $id, $contexte = null) {
552
-	static $styliseurs = null;
553
-	if (is_null($styliseurs)) {
554
-		$tables_objet = lister_tables_objets_sql();
555
-		foreach ($tables_objet as $table => $desc) {
556
-			if (
557
-				isset($desc['modeles']) and $desc['modeles']
558
-				and isset($desc['modeles_styliser']) and $desc['modeles_styliser']
559
-				and function_exists($desc['modeles_styliser'])
560
-			) {
561
-				$primary = id_table_objet($table);
562
-				foreach ($desc['modeles'] as $m) {
563
-					$styliseurs[$m] = ['primary' => $primary, 'callback' => $desc['modeles_styliser']];
564
-				}
565
-			}
566
-		}
567
-	}
568
-
569
-	if (isset($styliseurs[$modele])) {
570
-		$styliseur = $styliseurs[$modele]['callback'];
571
-		$primary = $styliseurs[$modele]['primary'];
572
-		if (is_null($id) and $contexte) {
573
-			if (isset($contexte['id'])) {
574
-				$id = $contexte['id'];
575
-			} elseif (isset($contexte[$primary])) {
576
-				$id = $contexte[$primary];
577
-			}
578
-		}
579
-		if (is_null($id)) {
580
-			$msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]);
581
-			erreur_squelette($msg);
582
-			// on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant
583
-			$id = 0;
584
-		}
585
-		$modele = $styliseur($modele, $id);
586
-	}
587
-
588
-	return $modele;
552
+    static $styliseurs = null;
553
+    if (is_null($styliseurs)) {
554
+        $tables_objet = lister_tables_objets_sql();
555
+        foreach ($tables_objet as $table => $desc) {
556
+            if (
557
+                isset($desc['modeles']) and $desc['modeles']
558
+                and isset($desc['modeles_styliser']) and $desc['modeles_styliser']
559
+                and function_exists($desc['modeles_styliser'])
560
+            ) {
561
+                $primary = id_table_objet($table);
562
+                foreach ($desc['modeles'] as $m) {
563
+                    $styliseurs[$m] = ['primary' => $primary, 'callback' => $desc['modeles_styliser']];
564
+                }
565
+            }
566
+        }
567
+    }
568
+
569
+    if (isset($styliseurs[$modele])) {
570
+        $styliseur = $styliseurs[$modele]['callback'];
571
+        $primary = $styliseurs[$modele]['primary'];
572
+        if (is_null($id) and $contexte) {
573
+            if (isset($contexte['id'])) {
574
+                $id = $contexte['id'];
575
+            } elseif (isset($contexte[$primary])) {
576
+                $id = $contexte[$primary];
577
+            }
578
+        }
579
+        if (is_null($id)) {
580
+            $msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]);
581
+            erreur_squelette($msg);
582
+            // on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant
583
+            $id = 0;
584
+        }
585
+        $modele = $styliseur($modele, $id);
586
+    }
587
+
588
+    return $modele;
589 589
 }
590 590
 
591 591
 /**
@@ -602,102 +602,102 @@  discard block
 block discarded – undo
602 602
  */
603 603
 function inclure_modele($type, $id, $params, $lien, string $connect = '', $env = []) {
604 604
 
605
-	static $compteur;
606
-	if (++$compteur > 10) {
607
-		return '';
608
-	} # ne pas boucler indefiniment
609
-
610
-	$type = strtolower($type);
611
-	$type = styliser_modele($type, $id);
612
-
613
-	$fond = $class = '';
614
-
615
-	$params = array_filter(explode('|', $params));
616
-	if ($params) {
617
-		$soustype = current($params);
618
-		$soustype = strtolower(trim($soustype));
619
-		if (in_array($soustype, ['left', 'right', 'center', 'ajax'])) {
620
-			$soustype = next($params);
621
-			$soustype = strtolower($soustype);
622
-		}
623
-
624
-		if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
625
-			if (!trouve_modele($fond = ($type . '_' . $soustype))) {
626
-				$fond = '';
627
-				$class = $soustype;
628
-			}
629
-			// enlever le sous type des params
630
-			$params = array_diff($params, [$soustype]);
631
-		}
632
-	}
633
-
634
-	// Si ca marche pas en precisant le sous-type, prendre le type
635
-	if (!$fond and !trouve_modele($fond = $type)) {
636
-		spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE);
637
-
638
-		return false;
639
-	}
640
-	$fond = 'modeles/' . $fond;
641
-	// Creer le contexte
642
-	$contexte = $env;
643
-	$contexte['dir_racine'] = _DIR_RACINE; # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte
644
-
645
-	// Le numero du modele est mis dans l'environnement
646
-	// d'une part sous l'identifiant "id"
647
-	// et d'autre part sous l'identifiant de la cle primaire
648
-	// par la fonction id_table_objet,
649
-	// (<article1> =>> article =>> id_article =>> id_article=1)
650
-	$_id = id_table_objet($type);
651
-	$contexte['id'] = $contexte[$_id] = $id;
652
-
653
-	if (isset($class)) {
654
-		$contexte['class'] = $class;
655
-	}
656
-
657
-	// Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url]
658
-	if ($lien) {
659
-		# un eventuel guillemet (") sera reechappe par #ENV
660
-		$contexte['lien'] = str_replace('&quot;', '"', $lien['href']);
661
-		$contexte['lien_class'] = $lien['class'];
662
-		$contexte['lien_mime'] = $lien['mime'];
663
-		$contexte['lien_title'] = $lien['title'];
664
-		$contexte['lien_hreflang'] = $lien['hreflang'];
665
-	}
666
-
667
-	// Traiter les parametres
668
-	// par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
669
-	$arg_list = creer_contexte_de_modele($params);
670
-	$contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
671
-	$contexte = array_merge($contexte, $arg_list);
672
-
673
-	// Appliquer le modele avec le contexte
674
-	$retour = recuperer_fond($fond, $contexte, [], $connect);
675
-
676
-	// Regarder si le modele tient compte des liens (il *doit* alors indiquer
677
-	// spip_lien_ok dans les classes de son conteneur de premier niveau ;
678
-	// sinon, s'il y a un lien, on l'ajoute classiquement
679
-	if (
680
-		strstr(
681
-			' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
682
-			'spip_lien_ok'
683
-		)
684
-	) {
685
-		$retour = inserer_attribut(
686
-			$retour,
687
-			'class',
688
-			trim(str_replace(' spip_lien_ok ', ' ', " $classes "))
689
-		);
690
-	} else {
691
-		if ($lien) {
692
-			$retour = "<a href='" . $lien['href'] . "' class='" . $lien['class'] . "'>" . $retour . '</a>';
693
-		}
694
-	}
695
-
696
-	$compteur--;
697
-
698
-	return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax')
699
-		? encoder_contexte_ajax($contexte, '', $retour)
700
-		: $retour;
605
+    static $compteur;
606
+    if (++$compteur > 10) {
607
+        return '';
608
+    } # ne pas boucler indefiniment
609
+
610
+    $type = strtolower($type);
611
+    $type = styliser_modele($type, $id);
612
+
613
+    $fond = $class = '';
614
+
615
+    $params = array_filter(explode('|', $params));
616
+    if ($params) {
617
+        $soustype = current($params);
618
+        $soustype = strtolower(trim($soustype));
619
+        if (in_array($soustype, ['left', 'right', 'center', 'ajax'])) {
620
+            $soustype = next($params);
621
+            $soustype = strtolower($soustype);
622
+        }
623
+
624
+        if (preg_match(',^[a-z0-9_]+$,', $soustype)) {
625
+            if (!trouve_modele($fond = ($type . '_' . $soustype))) {
626
+                $fond = '';
627
+                $class = $soustype;
628
+            }
629
+            // enlever le sous type des params
630
+            $params = array_diff($params, [$soustype]);
631
+        }
632
+    }
633
+
634
+    // Si ca marche pas en precisant le sous-type, prendre le type
635
+    if (!$fond and !trouve_modele($fond = $type)) {
636
+        spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE);
637
+
638
+        return false;
639
+    }
640
+    $fond = 'modeles/' . $fond;
641
+    // Creer le contexte
642
+    $contexte = $env;
643
+    $contexte['dir_racine'] = _DIR_RACINE; # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte
644
+
645
+    // Le numero du modele est mis dans l'environnement
646
+    // d'une part sous l'identifiant "id"
647
+    // et d'autre part sous l'identifiant de la cle primaire
648
+    // par la fonction id_table_objet,
649
+    // (<article1> =>> article =>> id_article =>> id_article=1)
650
+    $_id = id_table_objet($type);
651
+    $contexte['id'] = $contexte[$_id] = $id;
652
+
653
+    if (isset($class)) {
654
+        $contexte['class'] = $class;
655
+    }
656
+
657
+    // Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url]
658
+    if ($lien) {
659
+        # un eventuel guillemet (") sera reechappe par #ENV
660
+        $contexte['lien'] = str_replace('&quot;', '"', $lien['href']);
661
+        $contexte['lien_class'] = $lien['class'];
662
+        $contexte['lien_mime'] = $lien['mime'];
663
+        $contexte['lien_title'] = $lien['title'];
664
+        $contexte['lien_hreflang'] = $lien['hreflang'];
665
+    }
666
+
667
+    // Traiter les parametres
668
+    // par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en>
669
+    $arg_list = creer_contexte_de_modele($params);
670
+    $contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args
671
+    $contexte = array_merge($contexte, $arg_list);
672
+
673
+    // Appliquer le modele avec le contexte
674
+    $retour = recuperer_fond($fond, $contexte, [], $connect);
675
+
676
+    // Regarder si le modele tient compte des liens (il *doit* alors indiquer
677
+    // spip_lien_ok dans les classes de son conteneur de premier niveau ;
678
+    // sinon, s'il y a un lien, on l'ajoute classiquement
679
+    if (
680
+        strstr(
681
+            ' ' . ($classes = extraire_attribut($retour, 'class')) . ' ',
682
+            'spip_lien_ok'
683
+        )
684
+    ) {
685
+        $retour = inserer_attribut(
686
+            $retour,
687
+            'class',
688
+            trim(str_replace(' spip_lien_ok ', ' ', " $classes "))
689
+        );
690
+    } else {
691
+        if ($lien) {
692
+            $retour = "<a href='" . $lien['href'] . "' class='" . $lien['class'] . "'>" . $retour . '</a>';
693
+        }
694
+    }
695
+
696
+    $compteur--;
697
+
698
+    return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax')
699
+        ? encoder_contexte_ajax($contexte, '', $retour)
700
+        : $retour;
701 701
 }
702 702
 
703 703
 // Un inclure_page qui marche aussi pour l'espace prive
@@ -706,105 +706,105 @@  discard block
 block discarded – undo
706 706
 // 	recuperer_fond($fond,$contexte,array('raw'=>true))
707 707
 function evaluer_fond($fond, $contexte = [], string $connect = '') {
708 708
 
709
-	$page = inclure_page($fond, $contexte, $connect);
710
-
711
-	if (!$page) {
712
-		return $page;
713
-	}
714
-	// eval $page et affecte $res
715
-	include _ROOT_RESTREINT . 'public/evaluer_page.php';
716
-
717
-	// Lever un drapeau (global) si le fond utilise #SESSION
718
-	// a destination de public/parametrer
719
-	// pour remonter vers les inclusions appelantes
720
-	// il faut bien lever ce drapeau apres avoir evalue le fond
721
-	// pour ne pas faire descendre le flag vers les inclusions appelees
722
-	if (
723
-		isset($page['invalideurs'])
724
-		and isset($page['invalideurs']['session'])
725
-	) {
726
-		$GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
727
-	}
728
-
729
-	return $page;
709
+    $page = inclure_page($fond, $contexte, $connect);
710
+
711
+    if (!$page) {
712
+        return $page;
713
+    }
714
+    // eval $page et affecte $res
715
+    include _ROOT_RESTREINT . 'public/evaluer_page.php';
716
+
717
+    // Lever un drapeau (global) si le fond utilise #SESSION
718
+    // a destination de public/parametrer
719
+    // pour remonter vers les inclusions appelantes
720
+    // il faut bien lever ce drapeau apres avoir evalue le fond
721
+    // pour ne pas faire descendre le flag vers les inclusions appelees
722
+    if (
723
+        isset($page['invalideurs'])
724
+        and isset($page['invalideurs']['session'])
725
+    ) {
726
+        $GLOBALS['cache_utilise_session'] = $page['invalideurs']['session'];
727
+    }
728
+
729
+    return $page;
730 730
 }
731 731
 
732 732
 
733 733
 function page_base_href(&$texte) {
734
-	static $set_html_base = null;
735
-	if (is_null($set_html_base)) {
736
-		if (!defined('_SET_HTML_BASE')) {
737
-			// si la profondeur est superieure a 1
738
-			// est que ce n'est pas une url page ni une url action
739
-			// activer par defaut
740
-		$set_html_base = ((
741
-				$GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2)
742
-				and _request(_SPIP_PAGE) !== 'login'
743
-				and !_request('action')) ? true : false);
744
-		} else {
745
-			$set_html_base = _SET_HTML_BASE;
746
-		}
747
-	}
748
-
749
-	if (
750
-		$set_html_base
751
-		and isset($GLOBALS['html']) and $GLOBALS['html']
752
-		and $GLOBALS['profondeur_url'] > 0
753
-		and ($poshead = strpos($texte, '</head>')) !== false
754
-	) {
755
-		$head = substr($texte, 0, $poshead);
756
-		$insert = false;
757
-		$href_base = false;
758
-		if (strpos($head, '<base') === false) {
759
-			$insert = true;
760
-		} else {
761
-			// si aucun <base ...> n'a de href il faut en inserer un
762
-			// sinon juste re-ecrire les ancres si besoin
763
-			$insert = true;
764
-			include_spip('inc/filtres');
765
-			$bases = extraire_balises($head, 'base');
766
-			foreach ($bases as $base) {
767
-				if ($href_base = extraire_attribut($base, 'href')) {
768
-					$insert = false;
769
-					break;
770
-				}
771
-			}
772
-		}
773
-
774
-		if ($insert) {
775
-			include_spip('inc/filtres_mini');
776
-			// ajouter un base qui reglera tous les liens relatifs
777
-			$href_base = url_absolue('./');
778
-			$base = "\n<base href=\"$href_base\" />";
779
-			if (($pos = strpos($head, '<head>')) !== false) {
780
-				$head = substr_replace($head, $base, $pos + 6, 0);
781
-			} elseif (preg_match(',<head[^>]*>,i', $head, $r)) {
782
-				$head = str_replace($r[0], $r[0] . $base, $head);
783
-			}
784
-			$texte = $head . substr($texte, $poshead);
785
-		}
786
-		if ($href_base) {
787
-			// gerer les ancres
788
-			$base = $_SERVER['REQUEST_URI'];
789
-			// pas de guillemets ni < dans l'URL qu'on insere dans le HTML
790
-			if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) {
791
-				$base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base);
792
-			}
793
-			if (strpos($texte, "href='#") !== false) {
794
-				$texte = str_replace("href='#", "href='$base#", $texte);
795
-			}
796
-			if (strpos($texte, 'href="#') !== false) {
797
-				$texte = str_replace('href="#', "href=\"$base#", $texte);
798
-			}
799
-		}
800
-	}
734
+    static $set_html_base = null;
735
+    if (is_null($set_html_base)) {
736
+        if (!defined('_SET_HTML_BASE')) {
737
+            // si la profondeur est superieure a 1
738
+            // est que ce n'est pas une url page ni une url action
739
+            // activer par defaut
740
+        $set_html_base = ((
741
+                $GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2)
742
+                and _request(_SPIP_PAGE) !== 'login'
743
+                and !_request('action')) ? true : false);
744
+        } else {
745
+            $set_html_base = _SET_HTML_BASE;
746
+        }
747
+    }
748
+
749
+    if (
750
+        $set_html_base
751
+        and isset($GLOBALS['html']) and $GLOBALS['html']
752
+        and $GLOBALS['profondeur_url'] > 0
753
+        and ($poshead = strpos($texte, '</head>')) !== false
754
+    ) {
755
+        $head = substr($texte, 0, $poshead);
756
+        $insert = false;
757
+        $href_base = false;
758
+        if (strpos($head, '<base') === false) {
759
+            $insert = true;
760
+        } else {
761
+            // si aucun <base ...> n'a de href il faut en inserer un
762
+            // sinon juste re-ecrire les ancres si besoin
763
+            $insert = true;
764
+            include_spip('inc/filtres');
765
+            $bases = extraire_balises($head, 'base');
766
+            foreach ($bases as $base) {
767
+                if ($href_base = extraire_attribut($base, 'href')) {
768
+                    $insert = false;
769
+                    break;
770
+                }
771
+            }
772
+        }
773
+
774
+        if ($insert) {
775
+            include_spip('inc/filtres_mini');
776
+            // ajouter un base qui reglera tous les liens relatifs
777
+            $href_base = url_absolue('./');
778
+            $base = "\n<base href=\"$href_base\" />";
779
+            if (($pos = strpos($head, '<head>')) !== false) {
780
+                $head = substr_replace($head, $base, $pos + 6, 0);
781
+            } elseif (preg_match(',<head[^>]*>,i', $head, $r)) {
782
+                $head = str_replace($r[0], $r[0] . $base, $head);
783
+            }
784
+            $texte = $head . substr($texte, $poshead);
785
+        }
786
+        if ($href_base) {
787
+            // gerer les ancres
788
+            $base = $_SERVER['REQUEST_URI'];
789
+            // pas de guillemets ni < dans l'URL qu'on insere dans le HTML
790
+            if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) {
791
+                $base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base);
792
+            }
793
+            if (strpos($texte, "href='#") !== false) {
794
+                $texte = str_replace("href='#", "href='$base#", $texte);
795
+            }
796
+            if (strpos($texte, 'href="#') !== false) {
797
+                $texte = str_replace('href="#', "href=\"$base#", $texte);
798
+            }
799
+        }
800
+    }
801 801
 }
802 802
 
803 803
 
804 804
 // Envoyer les entetes, en retenant ceux qui sont a usage interne
805 805
 // et demarrent par X-Spip-...
806 806
 function envoyer_entetes($entetes) {
807
-	foreach ($entetes as $k => $v) { #	if (strncmp($k, 'X-Spip-', 7))
808
-	@header(strlen($v) ? "$k: $v" : $k);
809
-	}
807
+    foreach ($entetes as $k => $v) { #	if (strncmp($k, 'X-Spip-', 7))
808
+    @header(strlen($v) ? "$k: $v" : $k);
809
+    }
810 810
 }
Please login to merge, or discard this patch.