Completed
Push — master ( 783046...8c9753 )
by cam
03:32 queued 02:25
created
ecrire/typographie/fr.php 2 patches
Indentation   +59 added lines, -59 removed lines patch added patch discarded remove patch
@@ -11,74 +11,74 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 // Correction typographique francaise
18 18
 
19 19
 function typographie_fr_dist($letexte) {
20 20
 
21
-	static $trans;
21
+    static $trans;
22 22
 
23
-	// Nettoyer 160 = nbsp ; 187 = raquo ; 171 = laquo ; 176 = deg ;
24
-	// 147 = ldquo; 148 = rdquo; ' = zouli apostrophe
25
-	if (!$trans) {
26
-		$trans = [
27
-			"'" => '’',
28
-			' ' => '~',
29
-			'»' => '»',
30
-			'«' => '«',
31
-			'”' => '”',
32
-			'“' => '“',
33
-			'°' => '°'
34
-		];
35
-		$chars = [160 => '~', 187 => '»', 171 => '«', 148 => '”', 147 => '“', 176 => '°'];
36
-		$chars_trans = array_keys($chars);
37
-		$chars = array_values($chars);
38
-		$chars_trans = implode(' ', array_map('chr', $chars_trans));
39
-		$chars_trans = unicode2charset(charset2unicode($chars_trans, 'iso-8859-1', 'forcer'));
40
-		$chars_trans = explode(' ', $chars_trans);
41
-		foreach ($chars as $k => $r) {
42
-			$trans[$chars_trans[$k]] = $r;
43
-		}
44
-	}
23
+    // Nettoyer 160 = nbsp ; 187 = raquo ; 171 = laquo ; 176 = deg ;
24
+    // 147 = ldquo; 148 = rdquo; ' = zouli apostrophe
25
+    if (!$trans) {
26
+        $trans = [
27
+            "'" => '’',
28
+            ' ' => '~',
29
+            '»' => '»',
30
+            '«' => '«',
31
+            '”' => '”',
32
+            '“' => '“',
33
+            '°' => '°'
34
+        ];
35
+        $chars = [160 => '~', 187 => '»', 171 => '«', 148 => '”', 147 => '“', 176 => '°'];
36
+        $chars_trans = array_keys($chars);
37
+        $chars = array_values($chars);
38
+        $chars_trans = implode(' ', array_map('chr', $chars_trans));
39
+        $chars_trans = unicode2charset(charset2unicode($chars_trans, 'iso-8859-1', 'forcer'));
40
+        $chars_trans = explode(' ', $chars_trans);
41
+        foreach ($chars as $k => $r) {
42
+            $trans[$chars_trans[$k]] = $r;
43
+        }
44
+    }
45 45
 
46
-	$letexte = strtr($letexte, $trans);
46
+    $letexte = strtr($letexte, $trans);
47 47
 
48
-	$cherche1 = [
49
-		/* 1 */
50
-		'/((?:^|[^\#0-9a-zA-Z\&])[\#0-9a-zA-Z]*)\;/S',
51
-		/* 2 */
52
-		'/»| --?,|(?::(?!:)| %)(?:\W|$)/S',
53
-		/* 3 */
54
-		'/([^[<(!?.])([!?][!?\.]*)/iS',
55
-		/* 4 */
56
-		'/&#171;|(?:M(?:M?\.|mes?|r\.?)|[MnN]&#176;) /S'
57
-	];
58
-	$remplace1 = [
59
-		/* 1 */
60
-		'\1~;',
61
-		/* 2 */
62
-		'~\0',
63
-		/* 3 */
64
-		'\1~\2',
65
-		/* 4 */
66
-		'\0~'
67
-	];
68
-	$letexte = preg_replace($cherche1, $remplace1, $letexte);
69
-	$letexte = preg_replace('/ *~+ */S', '~', $letexte);
48
+    $cherche1 = [
49
+        /* 1 */
50
+        '/((?:^|[^\#0-9a-zA-Z\&])[\#0-9a-zA-Z]*)\;/S',
51
+        /* 2 */
52
+        '/&#187;| --?,|(?::(?!:)| %)(?:\W|$)/S',
53
+        /* 3 */
54
+        '/([^[<(!?.])([!?][!?\.]*)/iS',
55
+        /* 4 */
56
+        '/&#171;|(?:M(?:M?\.|mes?|r\.?)|[MnN]&#176;) /S'
57
+    ];
58
+    $remplace1 = [
59
+        /* 1 */
60
+        '\1~;',
61
+        /* 2 */
62
+        '~\0',
63
+        /* 3 */
64
+        '\1~\2',
65
+        /* 4 */
66
+        '\0~'
67
+    ];
68
+    $letexte = preg_replace($cherche1, $remplace1, $letexte);
69
+    $letexte = preg_replace('/ *~+ */S', '~', $letexte);
70 70
 
71
-	$cherche2 = [
72
-		'/([^-\n]|^)--([^-]|$)/S',
73
-		',(' . _PROTOCOLES_STD . ')~((://[^"\'\s\[\]\}\)<>]+)~([?]))?,S',
74
-		'/~/'
75
-	];
76
-	$remplace2 = [
77
-		'\1&mdash;\2',
78
-		'\1\3\4',
79
-		'&nbsp;'
80
-	];
81
-	$letexte = preg_replace($cherche2, $remplace2, $letexte);
71
+    $cherche2 = [
72
+        '/([^-\n]|^)--([^-]|$)/S',
73
+        ',(' . _PROTOCOLES_STD . ')~((://[^"\'\s\[\]\}\)<>]+)~([?]))?,S',
74
+        '/~/'
75
+    ];
76
+    $remplace2 = [
77
+        '\1&mdash;\2',
78
+        '\1\3\4',
79
+        '&nbsp;'
80
+    ];
81
+    $letexte = preg_replace($cherche2, $remplace2, $letexte);
82 82
 
83
-	return $letexte;
83
+    return $letexte;
84 84
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -70,7 +70,7 @@
 block discarded – undo
70 70
 
71 71
 	$cherche2 = [
72 72
 		'/([^-\n]|^)--([^-]|$)/S',
73
-		',(' . _PROTOCOLES_STD . ')~((://[^"\'\s\[\]\}\)<>]+)~([?]))?,S',
73
+		',('._PROTOCOLES_STD.')~((://[^"\'\s\[\]\}\)<>]+)~([?]))?,S',
74 74
 		'/~/'
75 75
 	];
76 76
 	$remplace2 = [
Please login to merge, or discard this patch.
ecrire/typographie/en.php 1 patch
Indentation   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -11,37 +11,37 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 // rien sauf les "~" et "-,"
18 18
 
19 19
 function typographie_en_dist($letexte) {
20 20
 
21
-	// zouli apostrophe
22
-	$letexte = str_replace("'", '&#8217;', $letexte);
21
+    // zouli apostrophe
22
+    $letexte = str_replace("'", '&#8217;', $letexte);
23 23
 
24
-	$cherche1 = [
25
-		'/ --?,/S'
26
-	];
27
-	$remplace1 = [
28
-		'~\0'
29
-	];
30
-	$letexte = preg_replace($cherche1, $remplace1, $letexte);
24
+    $cherche1 = [
25
+        '/ --?,/S'
26
+    ];
27
+    $remplace1 = [
28
+        '~\0'
29
+    ];
30
+    $letexte = preg_replace($cherche1, $remplace1, $letexte);
31 31
 
32
-	$letexte = str_replace('&nbsp;', '~', $letexte);
33
-	$letexte = preg_replace('/ *~+ */', '~', $letexte);
32
+    $letexte = str_replace('&nbsp;', '~', $letexte);
33
+    $letexte = preg_replace('/ *~+ */', '~', $letexte);
34 34
 
35
-	$cherche2 = [
36
-		'/([^-\n]|^)--([^-]|$)/',
37
-		'/~/'
38
-	];
39
-	$remplace2 = [
40
-		'\1&mdash;\2',
41
-		'&nbsp;'
42
-	];
35
+    $cherche2 = [
36
+        '/([^-\n]|^)--([^-]|$)/',
37
+        '/~/'
38
+    ];
39
+    $remplace2 = [
40
+        '\1&mdash;\2',
41
+        '&nbsp;'
42
+    ];
43 43
 
44
-	$letexte = preg_replace($cherche2, $remplace2, $letexte);
44
+    $letexte = preg_replace($cherche2, $remplace2, $letexte);
45 45
 
46
-	return $letexte;
46
+    return $letexte;
47 47
 }
Please login to merge, or discard this patch.
ecrire/public/jointures.php 2 patches
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -177,14 +177,14 @@  discard block
 block discarded – undo
177 177
 			// sache qu'il peut enlever ce where si il enleve la jointure
178 178
 			$boucle->where["JOIN-L$n"] =
179 179
 				$echap ?
180
-					["'='","'$obj'","sql_quote('$type')"]
180
+					["'='", "'$obj'", "sql_quote('$type')"]
181 181
 					:
182
-					['=',"$obj",sql_quote($type)];
182
+					['=', "$obj", sql_quote($type)];
183 183
 			$boucle->join["L$n"] =
184 184
 				$echap ?
185 185
 					["'$id_table'", "'$j2'", "'$j1'", "'$obj='.sql_quote('$type')"]
186 186
 					:
187
-					[$id_table, $j2, $j1, "$obj=" . sql_quote($type)];
187
+					[$id_table, $j2, $j1, "$obj=".sql_quote($type)];
188 188
 		} else {
189 189
 			$boucle->join["L$n"] = $echap ? ["'$id_table'", "'$j'"] : [$id_table, $j];
190 190
 		}
@@ -218,7 +218,7 @@  discard block
 block discarded – undo
218 218
 	$groups = liste_champs_jointures($nom, $desc, true);
219 219
 	if (!$pk) {
220 220
 		foreach ($groups as $id_prim) {
221
-			$id_field = $nom . '.' . $id_prim;
221
+			$id_field = $nom.'.'.$id_prim;
222 222
 			if (!in_array($id_field, $boucle->group)) {
223 223
 				$boucle->group[] = $id_field;
224 224
 			}
Please login to merge, or discard this patch.
Indentation   +401 added lines, -401 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
 
@@ -33,11 +33,11 @@  discard block
 block discarded – undo
33 33
  *     Chaine sinon : le nom du champ (non décomposable donc)
34 34
  */
35 35
 function decompose_champ_id_objet($champ) {
36
-	if (($champ !== 'id_objet') and preg_match(',^id_([a-z_]+)$,', $champ, $regs)) {
37
-		return ['id_objet', 'objet', objet_type($champ)];
38
-	}
36
+    if (($champ !== 'id_objet') and preg_match(',^id_([a-z_]+)$,', $champ, $regs)) {
37
+        return ['id_objet', 'objet', objet_type($champ)];
38
+    }
39 39
 
40
-	return $champ;
40
+    return $champ;
41 41
 }
42 42
 
43 43
 /**
@@ -56,21 +56,21 @@  discard block
 block discarded – undo
56 56
  *     - array(id_objet, objet), si le champ n'existe pas mais qu'on peut décomposer
57 57
  */
58 58
 function trouver_champs_decomposes($champ, $desc) {
59
-	if (
60
-		!is_array($desc) // on ne se risque pas en conjectures si on ne connait pas la table
61
-		or array_key_exists($champ, $desc['field'])
62
-	) {
63
-		return [$champ];
64
-	}
65
-	// si le champ se décompose, tester que les colonnes décomposées sont présentes
66
-	if (is_array($decompose = decompose_champ_id_objet($champ))) {
67
-		array_pop($decompose);
68
-		if (count(array_intersect($decompose, array_keys($desc['field']))) == count($decompose)) {
69
-			return $decompose;
70
-		}
71
-	}
72
-
73
-	return [$champ];
59
+    if (
60
+        !is_array($desc) // on ne se risque pas en conjectures si on ne connait pas la table
61
+        or array_key_exists($champ, $desc['field'])
62
+    ) {
63
+        return [$champ];
64
+    }
65
+    // si le champ se décompose, tester que les colonnes décomposées sont présentes
66
+    if (is_array($decompose = decompose_champ_id_objet($champ))) {
67
+        array_pop($decompose);
68
+        if (count(array_intersect($decompose, array_keys($desc['field']))) == count($decompose)) {
69
+            return $decompose;
70
+        }
71
+    }
72
+
73
+    return [$champ];
74 74
 }
75 75
 
76 76
 
@@ -100,23 +100,23 @@  discard block
 block discarded – undo
100 100
  *     Alias de la table de jointure (Lx)
101 101
  */
102 102
 function calculer_jointure(&$boucle, $depart, $arrivee, $col = '', $cond = false, $max_liens = 5) {
103
-	// les jointures minimales sont optimales :
104
-	// on contraint le nombre d'etapes en l'augmentant
105
-	// jusqu'a ce qu'on trouve une jointure ou qu'on atteigne la limite maxi
106
-	$max = 1;
107
-	$res = false;
108
-	$milieu_exclus = ($col ?: []);
109
-	while ($max <= $max_liens and !$res) {
110
-		$res = calculer_chaine_jointures($boucle, $depart, $arrivee, [], $milieu_exclus, $max);
111
-		$max++;
112
-	}
113
-	if (!$res) {
114
-		return '';
115
-	}
116
-
117
-	[$nom, $desc] = $depart;
118
-
119
-	return fabrique_jointures($boucle, $res, $cond, $desc, $nom, $col);
103
+    // les jointures minimales sont optimales :
104
+    // on contraint le nombre d'etapes en l'augmentant
105
+    // jusqu'a ce qu'on trouve une jointure ou qu'on atteigne la limite maxi
106
+    $max = 1;
107
+    $res = false;
108
+    $milieu_exclus = ($col ?: []);
109
+    while ($max <= $max_liens and !$res) {
110
+        $res = calculer_chaine_jointures($boucle, $depart, $arrivee, [], $milieu_exclus, $max);
111
+        $max++;
112
+    }
113
+    if (!$res) {
114
+        return '';
115
+    }
116
+
117
+    [$nom, $desc] = $depart;
118
+
119
+    return fabrique_jointures($boucle, $res, $cond, $desc, $nom, $col);
120 120
 }
121 121
 
122 122
 /**
@@ -155,82 +155,82 @@  discard block
 block discarded – undo
155 155
  *     Alias de la table de jointure (Lx)
156 156
  */
157 157
 function fabrique_jointures(&$boucle, $res, $cond = false, $desc = [], $nom = '', $col = '', $echap = true) {
158
-	$a = [];
159
-	$j = null;
160
-	$n = null;
161
-	static $num = [];
162
-	$id_table = '';
163
-	$cpt = &$num[$boucle->descr['nom']][$boucle->descr['gram']][$boucle->id_boucle];
164
-	foreach ($res as $cle => $r) {
165
-		[$d, $a, $j] = $r;
166
-		if (!$id_table) {
167
-			$id_table = $d;
168
-		}
169
-		$n = ++$cpt;
170
-		if (is_array($j)) { // c'est un lien sur un champ du type id_objet,objet,'article'
171
-			[$j1, $j2, $obj, $type] = $j;
172
-			// trouver de quel cote est (id_objet,objet)
173
-			if ($j1 == "id_$obj") {
174
-				$obj = "$id_table.$obj";
175
-			} else {
176
-				$obj = "L$n.$obj";
177
-			}
178
-			// le where complementaire est envoye dans la jointure et dans le where
179
-			// on utilise une clé qui le relie a la jointure pour que l'optimiseur
180
-			// sache qu'il peut enlever ce where si il enleve la jointure
181
-			$boucle->where["JOIN-L$n"] =
182
-				$echap ?
183
-					["'='","'$obj'","sql_quote('$type')"]
184
-					:
185
-					['=',"$obj",sql_quote($type)];
186
-			$boucle->join["L$n"] =
187
-				$echap ?
188
-					["'$id_table'", "'$j2'", "'$j1'", "'$obj='.sql_quote('$type')"]
189
-					:
190
-					[$id_table, $j2, $j1, "$obj=" . sql_quote($type)];
191
-		} else {
192
-			$boucle->join["L$n"] = $echap ? ["'$id_table'", "'$j'"] : [$id_table, $j];
193
-		}
194
-		$boucle->from[$id_table = "L$n"] = $a[0];
195
-	}
196
-
197
-
198
-	// pas besoin de group by
199
-	// (cf http://article.gmane.org/gmane.comp.web.spip.devel/30555)
200
-	// si une seule jointure et sur une table avec primary key formee
201
-	// de l'index principal et de l'index de jointure (non conditionnel! [6031])
202
-	// et operateur d'egalite (https://core.spip.net/issues/477)
203
-
204
-	if ($pk = (isset($a[1]) && (count($boucle->from) == 2) && !$cond)) {
205
-		$pk = nogroupby_if($desc, $a[1], $col);
206
-	}
207
-
208
-	// pas de group by
209
-	// si une seule jointure
210
-	// et si l'index de jointure est une primary key a l'arrivee !
211
-	if (
212
-		!$pk
213
-		and (count($boucle->from) == 2)
214
-		and isset($a[1]['key']['PRIMARY KEY'])
215
-		and ($j == $a[1]['key']['PRIMARY KEY'])
216
-	) {
217
-		$pk = true;
218
-	}
219
-
220
-	// la clause Group by est en conflit avec ORDER BY, a completer
221
-	$groups = liste_champs_jointures($nom, $desc, true);
222
-	if (!$pk) {
223
-		foreach ($groups as $id_prim) {
224
-			$id_field = $nom . '.' . $id_prim;
225
-			if (!in_array($id_field, $boucle->group)) {
226
-				$boucle->group[] = $id_field;
227
-			}
228
-		}
229
-	}
230
-
231
-	$boucle->modificateur['lien'] = true;
232
-
233
-	return "L$n";
158
+    $a = [];
159
+    $j = null;
160
+    $n = null;
161
+    static $num = [];
162
+    $id_table = '';
163
+    $cpt = &$num[$boucle->descr['nom']][$boucle->descr['gram']][$boucle->id_boucle];
164
+    foreach ($res as $cle => $r) {
165
+        [$d, $a, $j] = $r;
166
+        if (!$id_table) {
167
+            $id_table = $d;
168
+        }
169
+        $n = ++$cpt;
170
+        if (is_array($j)) { // c'est un lien sur un champ du type id_objet,objet,'article'
171
+            [$j1, $j2, $obj, $type] = $j;
172
+            // trouver de quel cote est (id_objet,objet)
173
+            if ($j1 == "id_$obj") {
174
+                $obj = "$id_table.$obj";
175
+            } else {
176
+                $obj = "L$n.$obj";
177
+            }
178
+            // le where complementaire est envoye dans la jointure et dans le where
179
+            // on utilise une clé qui le relie a la jointure pour que l'optimiseur
180
+            // sache qu'il peut enlever ce where si il enleve la jointure
181
+            $boucle->where["JOIN-L$n"] =
182
+                $echap ?
183
+                    ["'='","'$obj'","sql_quote('$type')"]
184
+                    :
185
+                    ['=',"$obj",sql_quote($type)];
186
+            $boucle->join["L$n"] =
187
+                $echap ?
188
+                    ["'$id_table'", "'$j2'", "'$j1'", "'$obj='.sql_quote('$type')"]
189
+                    :
190
+                    [$id_table, $j2, $j1, "$obj=" . sql_quote($type)];
191
+        } else {
192
+            $boucle->join["L$n"] = $echap ? ["'$id_table'", "'$j'"] : [$id_table, $j];
193
+        }
194
+        $boucle->from[$id_table = "L$n"] = $a[0];
195
+    }
196
+
197
+
198
+    // pas besoin de group by
199
+    // (cf http://article.gmane.org/gmane.comp.web.spip.devel/30555)
200
+    // si une seule jointure et sur une table avec primary key formee
201
+    // de l'index principal et de l'index de jointure (non conditionnel! [6031])
202
+    // et operateur d'egalite (https://core.spip.net/issues/477)
203
+
204
+    if ($pk = (isset($a[1]) && (count($boucle->from) == 2) && !$cond)) {
205
+        $pk = nogroupby_if($desc, $a[1], $col);
206
+    }
207
+
208
+    // pas de group by
209
+    // si une seule jointure
210
+    // et si l'index de jointure est une primary key a l'arrivee !
211
+    if (
212
+        !$pk
213
+        and (count($boucle->from) == 2)
214
+        and isset($a[1]['key']['PRIMARY KEY'])
215
+        and ($j == $a[1]['key']['PRIMARY KEY'])
216
+    ) {
217
+        $pk = true;
218
+    }
219
+
220
+    // la clause Group by est en conflit avec ORDER BY, a completer
221
+    $groups = liste_champs_jointures($nom, $desc, true);
222
+    if (!$pk) {
223
+        foreach ($groups as $id_prim) {
224
+            $id_field = $nom . '.' . $id_prim;
225
+            if (!in_array($id_field, $boucle->group)) {
226
+                $boucle->group[] = $id_field;
227
+            }
228
+        }
229
+    }
230
+
231
+    $boucle->modificateur['lien'] = true;
232
+
233
+    return "L$n";
234 234
 }
235 235
 
236 236
 /**
@@ -245,19 +245,19 @@  discard block
 block discarded – undo
245 245
  * @return bool
246 246
  */
247 247
 function nogroupby_if($depart, $arrivee, $col) {
248
-	if (
249
-		empty($arrivee['key']['PRIMARY KEY'])
250
-		or !($pk = $arrivee['key']['PRIMARY KEY'])
251
-		or empty($depart['key']['PRIMARY KEY'])
252
-	) {
253
-		return false;
254
-	}
255
-	$id_primary = $depart['key']['PRIMARY KEY'];
256
-	if (is_array($col)) {
257
-		$col = implode(', *', $col);
258
-	} // cas id_objet, objet
259
-	return (preg_match("/^$id_primary, *$col$/", $pk) or
260
-		preg_match("/^$col, *$id_primary$/", $pk));
248
+    if (
249
+        empty($arrivee['key']['PRIMARY KEY'])
250
+        or !($pk = $arrivee['key']['PRIMARY KEY'])
251
+        or empty($depart['key']['PRIMARY KEY'])
252
+    ) {
253
+        return false;
254
+    }
255
+    $id_primary = $depart['key']['PRIMARY KEY'];
256
+    if (is_array($col)) {
257
+        $col = implode(', *', $col);
258
+    } // cas id_objet, objet
259
+    return (preg_match("/^$id_primary, *$col$/", $pk) or
260
+        preg_match("/^$col, *$id_primary$/", $pk));
261 261
 }
262 262
 
263 263
 /**
@@ -275,46 +275,46 @@  discard block
 block discarded – undo
275 275
  */
276 276
 function liste_champs_jointures($nom, $desc, $primary = false) {
277 277
 
278
-	static $nojoin = ['idx', 'maj', 'date', 'statut'];
278
+    static $nojoin = ['idx', 'maj', 'date', 'statut'];
279 279
 
280
-	// si cle primaire demandee, la privilegier
281
-	if ($primary && isset($desc['key']['PRIMARY KEY'])) {
282
-		return split_key($desc['key']['PRIMARY KEY']);
283
-	}
280
+    // si cle primaire demandee, la privilegier
281
+    if ($primary && isset($desc['key']['PRIMARY KEY'])) {
282
+        return split_key($desc['key']['PRIMARY KEY']);
283
+    }
284 284
 
285
-	// les champs declares explicitement pour les jointures
286
-	if (isset($desc['join'])) {
287
-		return $desc['join'];
288
-	}
289
-	/*elseif (isset($GLOBALS['tables_principales'][$nom]['join'])) return $GLOBALS['tables_principales'][$nom]['join'];
285
+    // les champs declares explicitement pour les jointures
286
+    if (isset($desc['join'])) {
287
+        return $desc['join'];
288
+    }
289
+    /*elseif (isset($GLOBALS['tables_principales'][$nom]['join'])) return $GLOBALS['tables_principales'][$nom]['join'];
290 290
 	elseif (isset($GLOBALS['tables_auxiliaires'][$nom]['join'])) return $GLOBALS['tables_auxiliaires'][$nom]['join'];*/
291 291
 
292
-	// si pas de cle, c'est fichu
293
-	if (!isset($desc['key'])) {
294
-		return [];
295
-	}
296
-
297
-	// si cle primaire
298
-	if (isset($desc['key']['PRIMARY KEY'])) {
299
-		return split_key($desc['key']['PRIMARY KEY']);
300
-	}
301
-
302
-	// ici on se rabat sur les cles secondaires,
303
-	// en eliminant celles qui sont pas pertinentes (idx, maj)
304
-	// si jamais le resultat n'est pas pertinent pour une table donnee,
305
-	// il faut declarer explicitement le champ 'join' de sa description
306
-
307
-	$join = [];
308
-	foreach ($desc['key'] as $v) {
309
-		$join = split_key($v, $join);
310
-	}
311
-	foreach ($join as $k) {
312
-		if (in_array($k, $nojoin)) {
313
-			unset($join[$k]);
314
-		}
315
-	}
316
-
317
-	return $join;
292
+    // si pas de cle, c'est fichu
293
+    if (!isset($desc['key'])) {
294
+        return [];
295
+    }
296
+
297
+    // si cle primaire
298
+    if (isset($desc['key']['PRIMARY KEY'])) {
299
+        return split_key($desc['key']['PRIMARY KEY']);
300
+    }
301
+
302
+    // ici on se rabat sur les cles secondaires,
303
+    // en eliminant celles qui sont pas pertinentes (idx, maj)
304
+    // si jamais le resultat n'est pas pertinent pour une table donnee,
305
+    // il faut declarer explicitement le champ 'join' de sa description
306
+
307
+    $join = [];
308
+    foreach ($desc['key'] as $v) {
309
+        $join = split_key($v, $join);
310
+    }
311
+    foreach ($join as $k) {
312
+        if (in_array($k, $nojoin)) {
313
+            unset($join[$k]);
314
+        }
315
+    }
316
+
317
+    return $join;
318 318
 }
319 319
 
320 320
 /**
@@ -325,14 +325,14 @@  discard block
 block discarded – undo
325 325
  * @return array
326 326
  */
327 327
 function split_key($v, $join = []) {
328
-	foreach (preg_split('/,\s*/', $v) as $k) {
329
-		if (strpos($k, '(') !== false) {
330
-			$k = explode('(', $k);
331
-			$k = trim(reset($k));
332
-		}
333
-		$join[$k] = $k;
334
-	}
335
-	return $join;
328
+    foreach (preg_split('/,\s*/', $v) as $k) {
329
+        if (strpos($k, '(') !== false) {
330
+            $k = explode('(', $k);
331
+            $k = trim(reset($k));
332
+        }
333
+        $join[$k] = $k;
334
+    }
335
+    return $join;
336 336
 }
337 337
 
338 338
 /**
@@ -355,135 +355,135 @@  discard block
 block discarded – undo
355 355
  * @return array
356 356
  */
357 357
 function calculer_chaine_jointures(
358
-	&$boucle,
359
-	$depart,
360
-	$arrivee,
361
-	$vu = [],
362
-	$milieu_exclus = [],
363
-	$max_liens = 5
358
+    &$boucle,
359
+    $depart,
360
+    $arrivee,
361
+    $vu = [],
362
+    $milieu_exclus = [],
363
+    $max_liens = 5
364 364
 ) {
365
-	static $trouver_table;
366
-	if (!$trouver_table) {
367
-		$trouver_table = charger_fonction('trouver_table', 'base');
368
-	}
369
-
370
-	if (is_string($milieu_exclus)) {
371
-		$milieu_exclus = [$milieu_exclus];
372
-	}
373
-	// quand on a exclus id_objet comme cle de jointure, il faut aussi exclure objet
374
-	// faire une jointure sur objet tout seul n'a pas de sens
375
-	if (in_array('id_objet', $milieu_exclus) and !in_array('objet', $milieu_exclus)) {
376
-		$milieu_exclus[] = 'objet';
377
-	}
378
-
379
-	[$dnom, $ddesc] = $depart;
380
-	[$anom, $adesc] = $arrivee;
381
-	if (!count($vu)) {
382
-		$vu[] = $dnom; // ne pas oublier la table de depart
383
-		$vu[] = $anom; // ne pas oublier la table d'arrivee
384
-	}
385
-
386
-	$akeys = [];
387
-	foreach ($adesc['key'] as $k) {
388
-		// respecter l'ordre de $adesc['key'] pour ne pas avoir id_trad en premier entre autres...
389
-		$akeys = array_merge($akeys, preg_split('/,\s*/', $k));
390
-	}
391
-
392
-	// enlever les cles d'arrivee exclues par l'appel
393
-	$akeys = array_diff($akeys, $milieu_exclus);
394
-
395
-	// cles candidates au depart
396
-	$keys = liste_champs_jointures($dnom, $ddesc);
397
-	// enlever les cles dde depart exclues par l'appel
398
-	$keys = array_diff($keys, $milieu_exclus);
399
-
400
-	$v = !$keys ? false : array_intersect(array_values($keys), $akeys);
401
-
402
-	if ($v) {
403
-		return [[$dnom, [$adesc['table'], $adesc], array_shift($v)]];
404
-	}
405
-
406
-	// regarder si l'on a (id_objet,objet) au depart et si on peut le mapper sur un id_xx
407
-	if (count(array_intersect(['id_objet', 'objet'], $keys)) == 2) {
408
-		// regarder si l'une des cles d'arrivee peut se decomposer en
409
-		// id_objet,objet
410
-		// si oui on la prend
411
-		foreach ($akeys as $key) {
412
-			$v = decompose_champ_id_objet($key);
413
-			if (is_array($v)) {
414
-				$objet = array_shift($v); // objet,'article'
415
-				array_unshift($v, $key); // id_article,objet,'article'
416
-				array_unshift($v, $objet); // id_objet,id_article,objet,'article'
417
-				return [[$dnom, [$adesc['table'], $adesc], $v]];
418
-			}
419
-		}
420
-	} else {
421
-		// regarder si l'une des cles de depart peut se decomposer en
422
-		// id_objet,objet a l'arrivee
423
-		// si oui on la prend
424
-		foreach ($keys as $key) {
425
-			if (count($v = trouver_champs_decomposes($key, $adesc)) > 1) {
426
-				if (count($v) == count(array_intersect($v, $akeys))) {
427
-					$v = decompose_champ_id_objet($key); // id_objet,objet,'article'
428
-					array_unshift($v, $key); // id_article,id_objet,objet,'article'
429
-					return [[$dnom, [$adesc['table'], $adesc], $v]];
430
-				}
431
-			}
432
-		}
433
-	}
434
-	// si l'on voulait une jointure direct, c'est rate !
435
-	if ($max_liens <= 1) {
436
-		return [];
437
-	}
438
-
439
-	// sinon essayer de passer par une autre table
440
-	$new = $vu;
441
-	foreach ($boucle->jointures as $v) {
442
-		if (
443
-			$v
444
-			and !in_array($v, $vu)
445
-			and $def = $trouver_table($v, $boucle->sql_serveur)
446
-			and !in_array($def['table_sql'], $vu)
447
-		) {
448
-			// ne pas tester les cles qui sont exclues a l'appel
449
-			// ie la cle de la jointure precedente
450
-			$test_cles = $milieu_exclus;
451
-			$new[] = $v;
452
-			$max_iter = 50; // securite
453
-			while (
454
-				count($jointure_directe_possible = calculer_chaine_jointures(
455
-					$boucle,
456
-					$depart,
457
-					[$v, $def],
458
-					$vu,
459
-					$test_cles,
460
-					1
461
-				))
462
-				and $max_iter--
463
-			) {
464
-				$jointure_directe_possible = reset($jointure_directe_possible);
465
-				$milieu = end($jointure_directe_possible);
466
-				$exclure_fin = $milieu_exclus;
467
-				if (is_string($milieu)) {
468
-					$exclure_fin[] = $milieu;
469
-					$test_cles[] = $milieu;
470
-				} else {
471
-					$exclure_fin = array_merge($exclure_fin, $milieu);
472
-					$test_cles = array_merge($test_cles, $milieu);
473
-				}
474
-				// essayer de rejoindre l'arrivee a partir de cette etape intermediaire
475
-				// sans repasser par la meme cle milieu, ni une cle deja vue !
476
-				$r = calculer_chaine_jointures($boucle, [$v, $def], $arrivee, $new, $exclure_fin, $max_liens - 1);
477
-				if ($r) {
478
-					array_unshift($r, $jointure_directe_possible);
479
-
480
-					return $r;
481
-				}
482
-			}
483
-		}
484
-	}
485
-
486
-	return [];
365
+    static $trouver_table;
366
+    if (!$trouver_table) {
367
+        $trouver_table = charger_fonction('trouver_table', 'base');
368
+    }
369
+
370
+    if (is_string($milieu_exclus)) {
371
+        $milieu_exclus = [$milieu_exclus];
372
+    }
373
+    // quand on a exclus id_objet comme cle de jointure, il faut aussi exclure objet
374
+    // faire une jointure sur objet tout seul n'a pas de sens
375
+    if (in_array('id_objet', $milieu_exclus) and !in_array('objet', $milieu_exclus)) {
376
+        $milieu_exclus[] = 'objet';
377
+    }
378
+
379
+    [$dnom, $ddesc] = $depart;
380
+    [$anom, $adesc] = $arrivee;
381
+    if (!count($vu)) {
382
+        $vu[] = $dnom; // ne pas oublier la table de depart
383
+        $vu[] = $anom; // ne pas oublier la table d'arrivee
384
+    }
385
+
386
+    $akeys = [];
387
+    foreach ($adesc['key'] as $k) {
388
+        // respecter l'ordre de $adesc['key'] pour ne pas avoir id_trad en premier entre autres...
389
+        $akeys = array_merge($akeys, preg_split('/,\s*/', $k));
390
+    }
391
+
392
+    // enlever les cles d'arrivee exclues par l'appel
393
+    $akeys = array_diff($akeys, $milieu_exclus);
394
+
395
+    // cles candidates au depart
396
+    $keys = liste_champs_jointures($dnom, $ddesc);
397
+    // enlever les cles dde depart exclues par l'appel
398
+    $keys = array_diff($keys, $milieu_exclus);
399
+
400
+    $v = !$keys ? false : array_intersect(array_values($keys), $akeys);
401
+
402
+    if ($v) {
403
+        return [[$dnom, [$adesc['table'], $adesc], array_shift($v)]];
404
+    }
405
+
406
+    // regarder si l'on a (id_objet,objet) au depart et si on peut le mapper sur un id_xx
407
+    if (count(array_intersect(['id_objet', 'objet'], $keys)) == 2) {
408
+        // regarder si l'une des cles d'arrivee peut se decomposer en
409
+        // id_objet,objet
410
+        // si oui on la prend
411
+        foreach ($akeys as $key) {
412
+            $v = decompose_champ_id_objet($key);
413
+            if (is_array($v)) {
414
+                $objet = array_shift($v); // objet,'article'
415
+                array_unshift($v, $key); // id_article,objet,'article'
416
+                array_unshift($v, $objet); // id_objet,id_article,objet,'article'
417
+                return [[$dnom, [$adesc['table'], $adesc], $v]];
418
+            }
419
+        }
420
+    } else {
421
+        // regarder si l'une des cles de depart peut se decomposer en
422
+        // id_objet,objet a l'arrivee
423
+        // si oui on la prend
424
+        foreach ($keys as $key) {
425
+            if (count($v = trouver_champs_decomposes($key, $adesc)) > 1) {
426
+                if (count($v) == count(array_intersect($v, $akeys))) {
427
+                    $v = decompose_champ_id_objet($key); // id_objet,objet,'article'
428
+                    array_unshift($v, $key); // id_article,id_objet,objet,'article'
429
+                    return [[$dnom, [$adesc['table'], $adesc], $v]];
430
+                }
431
+            }
432
+        }
433
+    }
434
+    // si l'on voulait une jointure direct, c'est rate !
435
+    if ($max_liens <= 1) {
436
+        return [];
437
+    }
438
+
439
+    // sinon essayer de passer par une autre table
440
+    $new = $vu;
441
+    foreach ($boucle->jointures as $v) {
442
+        if (
443
+            $v
444
+            and !in_array($v, $vu)
445
+            and $def = $trouver_table($v, $boucle->sql_serveur)
446
+            and !in_array($def['table_sql'], $vu)
447
+        ) {
448
+            // ne pas tester les cles qui sont exclues a l'appel
449
+            // ie la cle de la jointure precedente
450
+            $test_cles = $milieu_exclus;
451
+            $new[] = $v;
452
+            $max_iter = 50; // securite
453
+            while (
454
+                count($jointure_directe_possible = calculer_chaine_jointures(
455
+                    $boucle,
456
+                    $depart,
457
+                    [$v, $def],
458
+                    $vu,
459
+                    $test_cles,
460
+                    1
461
+                ))
462
+                and $max_iter--
463
+            ) {
464
+                $jointure_directe_possible = reset($jointure_directe_possible);
465
+                $milieu = end($jointure_directe_possible);
466
+                $exclure_fin = $milieu_exclus;
467
+                if (is_string($milieu)) {
468
+                    $exclure_fin[] = $milieu;
469
+                    $test_cles[] = $milieu;
470
+                } else {
471
+                    $exclure_fin = array_merge($exclure_fin, $milieu);
472
+                    $test_cles = array_merge($test_cles, $milieu);
473
+                }
474
+                // essayer de rejoindre l'arrivee a partir de cette etape intermediaire
475
+                // sans repasser par la meme cle milieu, ni une cle deja vue !
476
+                $r = calculer_chaine_jointures($boucle, [$v, $def], $arrivee, $new, $exclure_fin, $max_liens - 1);
477
+                if ($r) {
478
+                    array_unshift($r, $jointure_directe_possible);
479
+
480
+                    return $r;
481
+                }
482
+            }
483
+        }
484
+    }
485
+
486
+    return [];
487 487
 }
488 488
 
489 489
 /**
@@ -494,18 +494,18 @@  discard block
 block discarded – undo
494 494
  * @return array
495 495
  */
496 496
 function trouver_cles_table($keys) {
497
-	$res = [];
498
-	foreach ($keys as $v) {
499
-		if (!strpos($v, ',')) {
500
-			$res[$v] = 1;
501
-		} else {
502
-			foreach (preg_split('/\s*,\s*/', $v) as $k) {
503
-				$res[$k] = 1;
504
-			}
505
-		}
506
-	}
507
-
508
-	return array_keys($res);
497
+    $res = [];
498
+    foreach ($keys as $v) {
499
+        if (!strpos($v, ',')) {
500
+            $res[$v] = 1;
501
+        } else {
502
+            foreach (preg_split('/\s*,\s*/', $v) as $k) {
503
+                $res[$k] = 1;
504
+            }
505
+        }
506
+    }
507
+
508
+    return array_keys($res);
509 509
 }
510 510
 
511 511
 
@@ -532,34 +532,34 @@  discard block
 block discarded – undo
532 532
  *     - 'alias' : alias utilisé pour la table (si pertinent. ie: avec `$boucle->from` transmis par exemple)
533 533
  */
534 534
 function chercher_champ_dans_tables($cle, $tables, $connect, $checkarrivee = false) {
535
-	static $trouver_table = '';
536
-	if (!$trouver_table) {
537
-		$trouver_table = charger_fonction('trouver_table', 'base');
538
-	}
539
-
540
-	if (!is_array($cle)) {
541
-		$cle = [$cle];
542
-	}
543
-
544
-	foreach ($tables as $k => $table) {
545
-		if ($table && $desc = $trouver_table($table, $connect)) {
546
-			if (
547
-				isset($desc['field'])
548
-				// verifier que toutes les cles cherchees sont la
549
-				and (count(array_intersect($cle, array_keys($desc['field']))) == count($cle))
550
-				// si on sait ou on veut arriver, il faut que ca colle
551
-				and ($checkarrivee == false || $checkarrivee == $desc['table'])
552
-			) {
553
-				return [
554
-					'desc' => $desc,
555
-					'table' => $desc['table'],
556
-					'alias' => $k,
557
-				];
558
-			}
559
-		}
560
-	}
561
-
562
-	return false;
535
+    static $trouver_table = '';
536
+    if (!$trouver_table) {
537
+        $trouver_table = charger_fonction('trouver_table', 'base');
538
+    }
539
+
540
+    if (!is_array($cle)) {
541
+        $cle = [$cle];
542
+    }
543
+
544
+    foreach ($tables as $k => $table) {
545
+        if ($table && $desc = $trouver_table($table, $connect)) {
546
+            if (
547
+                isset($desc['field'])
548
+                // verifier que toutes les cles cherchees sont la
549
+                and (count(array_intersect($cle, array_keys($desc['field']))) == count($cle))
550
+                // si on sait ou on veut arriver, il faut que ca colle
551
+                and ($checkarrivee == false || $checkarrivee == $desc['table'])
552
+            ) {
553
+                return [
554
+                    'desc' => $desc,
555
+                    'table' => $desc['table'],
556
+                    'alias' => $k,
557
+                ];
558
+            }
559
+        }
560
+    }
561
+
562
+    return false;
563 563
 }
564 564
 
565 565
 /**
@@ -585,52 +585,52 @@  discard block
 block discarded – undo
585 585
  */
586 586
 function trouver_champ_exterieur($cle, $joints, &$boucle, $checkarrivee = false) {
587 587
 
588
-	// support de la recherche multi champ :
589
-	// si en seconde etape on a decompose le champ id_xx en id_objet,objet
590
-	// on reentre ici soit en cherchant une table les 2 champs id_objet,objet
591
-	// soit une table avec les 3 champs id_xx, id_objet, objet
592
-	if (!is_array($cle)) {
593
-		$cle = [$cle];
594
-	}
595
-
596
-	if ($infos = chercher_champ_dans_tables($cle, $joints, $boucle->sql_serveur, $checkarrivee)) {
597
-		return [$infos['table'], $infos['desc'], $cle];
598
-	}
599
-
600
-	// au premier coup, on essaye de decomposer, si possible
601
-	if (
602
-		count($cle) == 1
603
-		and $c = reset($cle)
604
-		and is_array($decompose = decompose_champ_id_objet($c))
605
-	) {
606
-		$desc = $boucle->show;
607
-
608
-		// cas 1 : la cle id_xx est dans la table de depart
609
-		// -> on cherche uniquement id_objet,objet a l'arrivee
610
-		if (isset($desc['field'][$c])) {
611
-			$cle = [];
612
-			$cle[] = array_shift($decompose); // id_objet
613
-			$cle[] = array_shift($decompose); // objet
614
-			return trouver_champ_exterieur($cle, $joints, $boucle, $checkarrivee);
615
-		}
616
-		// cas 2 : la cle id_xx n'est pas dans la table de depart
617
-		// -> il faut trouver une cle de depart zzz telle que
618
-		// id_objet,objet,zzz soit a l'arrivee
619
-		else {
620
-			$depart = liste_champs_jointures(($desc['table'] ?? ''), $desc);
621
-			foreach ($depart as $d) {
622
-				$cle = [];
623
-				$cle[] = array_shift($decompose); // id_objet
624
-				$cle[] = array_shift($decompose); // objet
625
-				$cle[] = $d;
626
-				if ($ext = trouver_champ_exterieur($cle, $joints, $boucle, $checkarrivee)) {
627
-					return $ext;
628
-				}
629
-			}
630
-		}
631
-	}
632
-
633
-	return '';
588
+    // support de la recherche multi champ :
589
+    // si en seconde etape on a decompose le champ id_xx en id_objet,objet
590
+    // on reentre ici soit en cherchant une table les 2 champs id_objet,objet
591
+    // soit une table avec les 3 champs id_xx, id_objet, objet
592
+    if (!is_array($cle)) {
593
+        $cle = [$cle];
594
+    }
595
+
596
+    if ($infos = chercher_champ_dans_tables($cle, $joints, $boucle->sql_serveur, $checkarrivee)) {
597
+        return [$infos['table'], $infos['desc'], $cle];
598
+    }
599
+
600
+    // au premier coup, on essaye de decomposer, si possible
601
+    if (
602
+        count($cle) == 1
603
+        and $c = reset($cle)
604
+        and is_array($decompose = decompose_champ_id_objet($c))
605
+    ) {
606
+        $desc = $boucle->show;
607
+
608
+        // cas 1 : la cle id_xx est dans la table de depart
609
+        // -> on cherche uniquement id_objet,objet a l'arrivee
610
+        if (isset($desc['field'][$c])) {
611
+            $cle = [];
612
+            $cle[] = array_shift($decompose); // id_objet
613
+            $cle[] = array_shift($decompose); // objet
614
+            return trouver_champ_exterieur($cle, $joints, $boucle, $checkarrivee);
615
+        }
616
+        // cas 2 : la cle id_xx n'est pas dans la table de depart
617
+        // -> il faut trouver une cle de depart zzz telle que
618
+        // id_objet,objet,zzz soit a l'arrivee
619
+        else {
620
+            $depart = liste_champs_jointures(($desc['table'] ?? ''), $desc);
621
+            foreach ($depart as $d) {
622
+                $cle = [];
623
+                $cle[] = array_shift($decompose); // id_objet
624
+                $cle[] = array_shift($decompose); // objet
625
+                $cle[] = $d;
626
+                if ($ext = trouver_champ_exterieur($cle, $joints, $boucle, $checkarrivee)) {
627
+                    return $ext;
628
+                }
629
+            }
630
+        }
631
+    }
632
+
633
+    return '';
634 634
 }
635 635
 
636 636
 /**
@@ -662,21 +662,21 @@  discard block
 block discarded – undo
662 662
  * @return string
663 663
  */
664 664
 function trouver_jointure_champ($champ, &$boucle, $jointures = false, $cond = false, $checkarrivee = false) {
665
-	if ($jointures === false) {
666
-		$jointures = $boucle->jointures;
667
-	}
668
-	// TODO : aberration, on utilise $jointures pour trouver le champ
669
-	// mais pas poour construire la jointure ensuite
670
-	$arrivee = trouver_champ_exterieur($champ, $jointures, $boucle, $checkarrivee);
671
-	if ($arrivee) {
672
-		$desc = $boucle->show;
673
-		array_pop($arrivee); // enlever la cle en 3eme argument
674
-		$cle = calculer_jointure($boucle, [$desc['id_table'], $desc], $arrivee, '', $cond);
675
-		if ($cle) {
676
-			return $cle;
677
-		}
678
-	}
679
-	spip_log("trouver_jointure_champ: $champ inconnu");
680
-
681
-	return '';
665
+    if ($jointures === false) {
666
+        $jointures = $boucle->jointures;
667
+    }
668
+    // TODO : aberration, on utilise $jointures pour trouver le champ
669
+    // mais pas poour construire la jointure ensuite
670
+    $arrivee = trouver_champ_exterieur($champ, $jointures, $boucle, $checkarrivee);
671
+    if ($arrivee) {
672
+        $desc = $boucle->show;
673
+        array_pop($arrivee); // enlever la cle en 3eme argument
674
+        $cle = calculer_jointure($boucle, [$desc['id_table'], $desc], $arrivee, '', $cond);
675
+        if ($cle) {
676
+            return $cle;
677
+        }
678
+    }
679
+    spip_log("trouver_jointure_champ: $champ inconnu");
680
+
681
+    return '';
682 682
 }
Please login to merge, or discard this patch.
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.
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.
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.
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/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.