Completed
Push — master ( 350a8b...37aa61 )
by cam
01:39
created
ecrire/plugins/infos_paquet.php 2 patches
Indentation   +195 added lines, -195 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 /**
@@ -24,64 +24,64 @@  discard block
 block discarded – undo
24 24
  * @return array
25 25
  */
26 26
 function plugins_infos_paquet($desc, $plug = '', $dir_plugins = _DIR_PLUGINS) {
27
-	static $process = [ // tableau constant
28
-		'debut' => 'paquet_debutElement',
29
-		'fin' => 'paquet_finElement',
30
-		'text' => 'paquet_textElement'
31
-	];
32
-
33
-	$valider_xml = charger_fonction('valider', 'xml');
34
-	$vxml = $valider_xml($desc, false, $process, 'paquet.dtd', 'utf-8');
35
-	if (!$vxml->err) {
36
-		// On veut toutes les variantes selon la version de SPIP
37
-		if (!$plug) {
38
-			return $vxml->versions;
39
-		}
40
-
41
-		// compatibilite avec l'existant:
42
-		$tree = $vxml->versions['0'];
43
-
44
-		// l'arbre renvoie parfois un tag vide... etrange. Pas la peine de garder ca.
45
-		if (isset($tree['']) && !strlen((string) $tree[''])) {
46
-			unset($tree['']);
47
-		}
48
-
49
-		$tree['slogan'] = $tree['prefix'] . '_slogan';
50
-		$tree['description'] = $tree['prefix'] . '_description';
51
-		paquet_readable_files($tree, "$dir_plugins$plug/");
52
-		if (!$tree['chemin']) {
53
-			$tree['chemin'] = [];
54
-		}
55
-
56
-		// On verifie qu'il existe des balises spip qu'il faudrait rajouter dans
57
-		// la structure d'infos du paquet en fonction de la version spip courante
58
-		if ((is_countable($vxml->versions) ? count($vxml->versions) : 0) > 1) {
59
-			$vspip = $GLOBALS['spip_version_branche'];
60
-			foreach ($vxml->versions as $_compatibilite => $_version) {
61
-				if (
62
-					$_version['balise'] == 'spip'
63
-					&& plugin_version_compatible($_compatibilite, $vspip, 'spip')
64
-				) {
65
-					// on merge les sous-balises de la balise spip compatible avec celles de la
66
-					// balise paquet
67
-					foreach ($_version as $_index => $_balise) {
68
-						if ($_index && $_index != 'balise') {
69
-							$tree[$_index] = array_merge($tree[$_index], $_balise);
70
-						}
71
-					}
72
-				}
73
-			}
74
-		}
75
-
76
-		return $tree;
77
-	}
78
-
79
-	// Prendre les messages d'erreur sans les numeros de lignes
80
-	$msg = array_column($vxml->err, 0);
81
-	$t = _T('plugins_erreur', ['plugins' => $plug]);
82
-	array_unshift($msg, $t . " <ul class='erreur_xml'><li>" . reset($msg) . '</li></ul>');
83
-
84
-	return ['erreur' => $msg];
27
+    static $process = [ // tableau constant
28
+        'debut' => 'paquet_debutElement',
29
+        'fin' => 'paquet_finElement',
30
+        'text' => 'paquet_textElement'
31
+    ];
32
+
33
+    $valider_xml = charger_fonction('valider', 'xml');
34
+    $vxml = $valider_xml($desc, false, $process, 'paquet.dtd', 'utf-8');
35
+    if (!$vxml->err) {
36
+        // On veut toutes les variantes selon la version de SPIP
37
+        if (!$plug) {
38
+            return $vxml->versions;
39
+        }
40
+
41
+        // compatibilite avec l'existant:
42
+        $tree = $vxml->versions['0'];
43
+
44
+        // l'arbre renvoie parfois un tag vide... etrange. Pas la peine de garder ca.
45
+        if (isset($tree['']) && !strlen((string) $tree[''])) {
46
+            unset($tree['']);
47
+        }
48
+
49
+        $tree['slogan'] = $tree['prefix'] . '_slogan';
50
+        $tree['description'] = $tree['prefix'] . '_description';
51
+        paquet_readable_files($tree, "$dir_plugins$plug/");
52
+        if (!$tree['chemin']) {
53
+            $tree['chemin'] = [];
54
+        }
55
+
56
+        // On verifie qu'il existe des balises spip qu'il faudrait rajouter dans
57
+        // la structure d'infos du paquet en fonction de la version spip courante
58
+        if ((is_countable($vxml->versions) ? count($vxml->versions) : 0) > 1) {
59
+            $vspip = $GLOBALS['spip_version_branche'];
60
+            foreach ($vxml->versions as $_compatibilite => $_version) {
61
+                if (
62
+                    $_version['balise'] == 'spip'
63
+                    && plugin_version_compatible($_compatibilite, $vspip, 'spip')
64
+                ) {
65
+                    // on merge les sous-balises de la balise spip compatible avec celles de la
66
+                    // balise paquet
67
+                    foreach ($_version as $_index => $_balise) {
68
+                        if ($_index && $_index != 'balise') {
69
+                            $tree[$_index] = array_merge($tree[$_index], $_balise);
70
+                        }
71
+                    }
72
+                }
73
+            }
74
+        }
75
+
76
+        return $tree;
77
+    }
78
+
79
+    // Prendre les messages d'erreur sans les numeros de lignes
80
+    $msg = array_column($vxml->err, 0);
81
+    $t = _T('plugins_erreur', ['plugins' => $plug]);
82
+    array_unshift($msg, $t . " <ul class='erreur_xml'><li>" . reset($msg) . '</li></ul>');
83
+
84
+    return ['erreur' => $msg];
85 85
 }
86 86
 
87 87
 /**
@@ -93,11 +93,11 @@  discard block
 block discarded – undo
93 93
  * @return void
94 94
  */
95 95
 function paquet_readable_files(&$tree, $dir) {
96
-	$prefix = strtolower((string) $tree['prefix']);
96
+    $prefix = strtolower((string) $tree['prefix']);
97 97
 
98
-	$tree['options'] = (is_readable($dir . $f = ($prefix . '_options.php'))) ? [$f] : [];
99
-	$tree['fonctions'] = (is_readable($dir . $f = ($prefix . '_fonctions.php'))) ? [$f] : [];
100
-	$tree['install'] = (is_readable($dir . $f = ($prefix . '_administrations.php'))) ? [$f] : [];
98
+    $tree['options'] = (is_readable($dir . $f = ($prefix . '_options.php'))) ? [$f] : [];
99
+    $tree['fonctions'] = (is_readable($dir . $f = ($prefix . '_fonctions.php'))) ? [$f] : [];
100
+    $tree['install'] = (is_readable($dir . $f = ($prefix . '_administrations.php'))) ? [$f] : [];
101 101
 }
102 102
 
103 103
 /**
@@ -114,35 +114,35 @@  discard block
 block discarded – undo
114 114
  * @param array $attrs
115 115
  */
116 116
 function paquet_debutElement($phraseur, $name, $attrs) {
117
-	xml_debutElement($phraseur, $name, $attrs);
118
-	if ($phraseur->err) {
119
-		return;
120
-	}
121
-	if ($name == 'paquet' || $name == 'spip') {
122
-		if ($name == 'spip') {
123
-			$n = $attrs['compatibilite'];
124
-			$attrs = [];
125
-		} else {
126
-			$n = '0';
127
-			$phraseur->contenu['paquet'] = $attrs;
128
-			$attrs['menu'] = [];
129
-			$attrs['chemin'] = [];
130
-			$attrs['necessite'] = [];
131
-			$attrs['lib'] = [];
132
-			$attrs['onglet'] = [];
133
-			$attrs['procure'] = [];
134
-			$attrs['pipeline'] = [];
135
-			$attrs['utilise'] = [];
136
-			$attrs['style'] = [];
137
-			$attrs['script'] = [];
138
-			$attrs['genie'] = [];
139
-		}
140
-		$phraseur->contenu['compatible'] = $n;
141
-		$phraseur->versions[$phraseur->contenu['compatible']] = $attrs;
142
-	} else {
143
-		$phraseur->versions[$phraseur->contenu['compatible']][$name][0] = $attrs;
144
-	}
145
-	$phraseur->versions[$phraseur->contenu['compatible']][''] = '';
117
+    xml_debutElement($phraseur, $name, $attrs);
118
+    if ($phraseur->err) {
119
+        return;
120
+    }
121
+    if ($name == 'paquet' || $name == 'spip') {
122
+        if ($name == 'spip') {
123
+            $n = $attrs['compatibilite'];
124
+            $attrs = [];
125
+        } else {
126
+            $n = '0';
127
+            $phraseur->contenu['paquet'] = $attrs;
128
+            $attrs['menu'] = [];
129
+            $attrs['chemin'] = [];
130
+            $attrs['necessite'] = [];
131
+            $attrs['lib'] = [];
132
+            $attrs['onglet'] = [];
133
+            $attrs['procure'] = [];
134
+            $attrs['pipeline'] = [];
135
+            $attrs['utilise'] = [];
136
+            $attrs['style'] = [];
137
+            $attrs['script'] = [];
138
+            $attrs['genie'] = [];
139
+        }
140
+        $phraseur->contenu['compatible'] = $n;
141
+        $phraseur->versions[$phraseur->contenu['compatible']] = $attrs;
142
+    } else {
143
+        $phraseur->versions[$phraseur->contenu['compatible']][$name][0] = $attrs;
144
+    }
145
+    $phraseur->versions[$phraseur->contenu['compatible']][''] = '';
146 146
 }
147 147
 
148 148
 /**
@@ -154,11 +154,11 @@  discard block
 block discarded – undo
154 154
  * @param string $data
155 155
  */
156 156
 function paquet_textElement($phraseur, $data) {
157
-	xml_textElement($phraseur, $data);
158
-	if ($phraseur->err || !(trim($data))) {
159
-		return;
160
-	}
161
-	$phraseur->versions[$phraseur->contenu['compatible']][''] .= $data;
157
+    xml_textElement($phraseur, $data);
158
+    if ($phraseur->err || !(trim($data))) {
159
+        return;
160
+    }
161
+    $phraseur->versions[$phraseur->contenu['compatible']][''] .= $data;
162 162
 }
163 163
 
164 164
 /**
@@ -170,32 +170,32 @@  discard block
 block discarded – undo
170 170
  * @param string $name
171 171
  */
172 172
 function paquet_finElement($phraseur, $name) {
173
-	if ($phraseur->err) {
174
-		return;
175
-	}
176
-	$n = $phraseur->contenu['compatible'];
177
-
178
-	if (isset($phraseur->versions[$n][$name][0]) && is_array($phraseur->versions[$n][$name][0])) {
179
-		$attrs = $phraseur->versions[$n][$name][0];
180
-		unset($phraseur->versions[$n][$name][0]);
181
-	} else {
182
-		$attrs = [];
183
-	}
184
-
185
-	$texte = trim((string) $phraseur->versions[$n]['']);
186
-	$phraseur->versions[$n][''] = '';
187
-
188
-	$f = 'info_paquet_' . $name;
189
-	if (function_exists($f)) {
190
-		$f($phraseur, $attrs, $texte);
191
-	} elseif (!$attrs) {
192
-		$phraseur->versions[$n][$name] = $texte;
193
-	} else {
194
-		// Traitement generique. Si $attrs['nom'] n'existe pas, ce n'est pas normal ici
195
-		$phraseur->versions[$n][$name][$attrs['nom']] = $attrs;
196
-		#	  echo("<br>pour $name $n " . $attrs['nom']); var_dump($phraseur->versions[$n]);
197
-	}
198
-	xml_finElement($phraseur, $name, $attrs);
173
+    if ($phraseur->err) {
174
+        return;
175
+    }
176
+    $n = $phraseur->contenu['compatible'];
177
+
178
+    if (isset($phraseur->versions[$n][$name][0]) && is_array($phraseur->versions[$n][$name][0])) {
179
+        $attrs = $phraseur->versions[$n][$name][0];
180
+        unset($phraseur->versions[$n][$name][0]);
181
+    } else {
182
+        $attrs = [];
183
+    }
184
+
185
+    $texte = trim((string) $phraseur->versions[$n]['']);
186
+    $phraseur->versions[$n][''] = '';
187
+
188
+    $f = 'info_paquet_' . $name;
189
+    if (function_exists($f)) {
190
+        $f($phraseur, $attrs, $texte);
191
+    } elseif (!$attrs) {
192
+        $phraseur->versions[$n][$name] = $texte;
193
+    } else {
194
+        // Traitement generique. Si $attrs['nom'] n'existe pas, ce n'est pas normal ici
195
+        $phraseur->versions[$n][$name][$attrs['nom']] = $attrs;
196
+        #	  echo("<br>pour $name $n " . $attrs['nom']); var_dump($phraseur->versions[$n]);
197
+    }
198
+    xml_finElement($phraseur, $name, $attrs);
199 199
 }
200 200
 
201 201
 /**
@@ -207,9 +207,9 @@  discard block
 block discarded – undo
207 207
  * @param string $texte
208 208
  */
209 209
 function info_paquet_licence($phraseur, $attrs, $texte) {
210
-	$lien = $attrs['lien'] ?? '';
211
-	$n = $phraseur->contenu['compatible'];
212
-	$phraseur->versions[$n]['licence'][] = ['nom' => $texte, 'url' => $lien];
210
+    $lien = $attrs['lien'] ?? '';
211
+    $n = $phraseur->contenu['compatible'];
212
+    $phraseur->versions[$n]['licence'][] = ['nom' => $texte, 'url' => $lien];
213 213
 }
214 214
 
215 215
 /**
@@ -221,14 +221,14 @@  discard block
 block discarded – undo
221 221
  * @param string $texte
222 222
  */
223 223
 function info_paquet_chemin($phraseur, $attrs, $texte) {
224
-	$n = $phraseur->contenu['compatible'];
225
-	if (isset($attrs['path'])) {
226
-		if (isset($attrs['type'])) {
227
-			$phraseur->versions[$n]['chemin'][] = ['path' => $attrs['path'], 'type' => $attrs['type']];
228
-		} else {
229
-			$phraseur->versions[$n]['chemin'][] = ['path' => $attrs['path']];
230
-		}
231
-	}
224
+    $n = $phraseur->contenu['compatible'];
225
+    if (isset($attrs['path'])) {
226
+        if (isset($attrs['type'])) {
227
+            $phraseur->versions[$n]['chemin'][] = ['path' => $attrs['path'], 'type' => $attrs['type']];
228
+        } else {
229
+            $phraseur->versions[$n]['chemin'][] = ['path' => $attrs['path']];
230
+        }
231
+    }
232 232
 }
233 233
 
234 234
 
@@ -242,20 +242,20 @@  discard block
 block discarded – undo
242 242
  * @param string $texte
243 243
  */
244 244
 function info_paquet_auteur($phraseur, $attrs, $texte) {
245
-	#  echo 'auteur ', $texte;  var_dump($attrs);
246
-	if (isset($attrs['mail'])) {
247
-		if (strpos((string) $attrs['mail'], '@')) {
248
-			$attrs['mail'] = str_replace('@', ' AT ', (string) $attrs['mail']);
249
-		}
250
-		$mail = $attrs['mail'];
251
-	} else {
252
-		$mail = '';
253
-	}
254
-
255
-	$lien = $attrs['lien'] ?? '';
256
-
257
-	$n = $phraseur->contenu['compatible'];
258
-	$phraseur->versions[$n]['auteur'][] = ['nom' => $texte, 'url' => $lien, 'mail' => $mail];
245
+    #  echo 'auteur ', $texte;  var_dump($attrs);
246
+    if (isset($attrs['mail'])) {
247
+        if (strpos((string) $attrs['mail'], '@')) {
248
+            $attrs['mail'] = str_replace('@', ' AT ', (string) $attrs['mail']);
249
+        }
250
+        $mail = $attrs['mail'];
251
+    } else {
252
+        $mail = '';
253
+    }
254
+
255
+    $lien = $attrs['lien'] ?? '';
256
+
257
+    $n = $phraseur->contenu['compatible'];
258
+    $phraseur->versions[$n]['auteur'][] = ['nom' => $texte, 'url' => $lien, 'mail' => $mail];
259 259
 }
260 260
 
261 261
 /**
@@ -268,10 +268,10 @@  discard block
 block discarded – undo
268 268
  */
269 269
 function info_paquet_credit($phraseur, $attrs, $texte) {
270 270
 
271
-	$lien = $attrs['lien'] ?? '';
271
+    $lien = $attrs['lien'] ?? '';
272 272
 
273
-	$n = $phraseur->contenu['compatible'];
274
-	$phraseur->versions[$n]['credit'][] = ['nom' => $texte, 'url' => $lien];
273
+    $n = $phraseur->contenu['compatible'];
274
+    $phraseur->versions[$n]['credit'][] = ['nom' => $texte, 'url' => $lien];
275 275
 }
276 276
 
277 277
 /**
@@ -283,8 +283,8 @@  discard block
 block discarded – undo
283 283
  * @param string $texte
284 284
  */
285 285
 function info_paquet_copyright($phraseur, $attrs, $texte) {
286
-	$n = $phraseur->contenu['compatible'];
287
-	$phraseur->versions[$n]['copyright'][] = $texte;
286
+    $n = $phraseur->contenu['compatible'];
287
+    $phraseur->versions[$n]['copyright'][] = $texte;
288 288
 }
289 289
 
290 290
 /**
@@ -296,9 +296,9 @@  discard block
 block discarded – undo
296 296
  * @param string $texte
297 297
  */
298 298
 function info_paquet_paquet($phraseur, $attrs, $texte) {
299
-	$n = 0;
300
-	$phraseur->versions[$n]['dtd'] = 'paquet';
301
-	$phraseur->versions[$n]['balise'] = 'paquet';
299
+    $n = 0;
300
+    $phraseur->versions[$n]['dtd'] = 'paquet';
301
+    $phraseur->versions[$n]['balise'] = 'paquet';
302 302
 }
303 303
 
304 304
 /**
@@ -310,8 +310,8 @@  discard block
 block discarded – undo
310 310
  * @param string $texte
311 311
  **/
312 312
 function info_paquet_traduire($phraseur, $attrs, $texte) {
313
-	$n = $phraseur->contenu['compatible'];
314
-	$phraseur->versions[$n]['traduire'][] = $attrs;
313
+    $n = $phraseur->contenu['compatible'];
314
+    $phraseur->versions[$n]['traduire'][] = $attrs;
315 315
 }
316 316
 
317 317
 /**
@@ -323,8 +323,8 @@  discard block
 block discarded – undo
323 323
  * @param string $texte
324 324
  */
325 325
 function info_paquet_spip($phraseur, $attrs, $texte) {
326
-	$n = $phraseur->contenu['compatible'];
327
-	$phraseur->versions[$n]['balise'] = 'spip';
326
+    $n = $phraseur->contenu['compatible'];
327
+    $phraseur->versions[$n]['balise'] = 'spip';
328 328
 }
329 329
 
330 330
 
@@ -336,8 +336,8 @@  discard block
 block discarded – undo
336 336
  * @param string $texte
337 337
  */
338 338
 function info_paquet_pipeline($phraseur, $attrs, $texte) {
339
-	$n = $phraseur->contenu['compatible'];
340
-	$phraseur->versions[$n]['pipeline'][] = $attrs;
339
+    $n = $phraseur->contenu['compatible'];
340
+    $phraseur->versions[$n]['pipeline'][] = $attrs;
341 341
 }
342 342
 
343 343
 
@@ -350,23 +350,23 @@  discard block
 block discarded – undo
350 350
  * @param string $texte
351 351
  */
352 352
 function info_paquet_style($phraseur, $attrs, $texte) {
353
-	$lien = $chemin = $type = $media = '';
354
-
355
-	include_spip('inc/utils');
356
-	if (tester_url_absolue($attrs['source'])) {
357
-		$lien = $attrs['source'];
358
-	} else {
359
-		$chemin = $attrs['source'];
360
-	}
361
-	if (isset($attrs['type'])) {
362
-		$type = $attrs['type'];
363
-	}
364
-	if (isset($attrs['media'])) {
365
-		$media = $attrs['media'];
366
-	}
367
-
368
-	$n = $phraseur->contenu['compatible'];
369
-	$phraseur->versions[$n]['style'][] = ['url' => $lien, 'path' => $chemin, 'type' => $type, 'media' => $media];
353
+    $lien = $chemin = $type = $media = '';
354
+
355
+    include_spip('inc/utils');
356
+    if (tester_url_absolue($attrs['source'])) {
357
+        $lien = $attrs['source'];
358
+    } else {
359
+        $chemin = $attrs['source'];
360
+    }
361
+    if (isset($attrs['type'])) {
362
+        $type = $attrs['type'];
363
+    }
364
+    if (isset($attrs['media'])) {
365
+        $media = $attrs['media'];
366
+    }
367
+
368
+    $n = $phraseur->contenu['compatible'];
369
+    $phraseur->versions[$n]['style'][] = ['url' => $lien, 'path' => $chemin, 'type' => $type, 'media' => $media];
370 370
 }
371 371
 
372 372
 
@@ -379,20 +379,20 @@  discard block
 block discarded – undo
379 379
  * @param string $texte
380 380
  */
381 381
 function info_paquet_script($phraseur, $attrs, $texte) {
382
-	$lien = $chemin = $type = $media = '';
383
-
384
-	include_spip('inc/utils');
385
-	if (tester_url_absolue($attrs['source'])) {
386
-		$lien = $attrs['source'];
387
-	} else {
388
-		$chemin = $attrs['source'];
389
-	}
390
-	if (isset($attrs['type'])) {
391
-		$type = $attrs['type'];
392
-	}
393
-
394
-	$n = $phraseur->contenu['compatible'];
395
-	$phraseur->versions[$n]['script'][] = ['url' => $lien, 'path' => $chemin, 'type' => $type];
382
+    $lien = $chemin = $type = $media = '';
383
+
384
+    include_spip('inc/utils');
385
+    if (tester_url_absolue($attrs['source'])) {
386
+        $lien = $attrs['source'];
387
+    } else {
388
+        $chemin = $attrs['source'];
389
+    }
390
+    if (isset($attrs['type'])) {
391
+        $type = $attrs['type'];
392
+    }
393
+
394
+    $n = $phraseur->contenu['compatible'];
395
+    $phraseur->versions[$n]['script'][] = ['url' => $lien, 'path' => $chemin, 'type' => $type];
396 396
 }
397 397
 
398 398
 /**
@@ -403,6 +403,6 @@  discard block
 block discarded – undo
403 403
  * @param string $texte
404 404
  */
405 405
 function info_paquet_genie($phraseur, $attrs, $texte) {
406
-	$n = $phraseur->contenu['compatible'];
407
-	$phraseur->versions[$n]['genie'][] = $attrs;
406
+    $n = $phraseur->contenu['compatible'];
407
+    $phraseur->versions[$n]['genie'][] = $attrs;
408 408
 }
Please login to merge, or discard this patch.
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -24,7 +24,7 @@  discard block
 block discarded – undo
24 24
  * @return array
25 25
  */
26 26
 function plugins_infos_paquet($desc, $plug = '', $dir_plugins = _DIR_PLUGINS) {
27
-	static $process = [ // tableau constant
27
+	static $process = [// tableau constant
28 28
 		'debut' => 'paquet_debutElement',
29 29
 		'fin' => 'paquet_finElement',
30 30
 		'text' => 'paquet_textElement'
@@ -46,8 +46,8 @@  discard block
 block discarded – undo
46 46
 			unset($tree['']);
47 47
 		}
48 48
 
49
-		$tree['slogan'] = $tree['prefix'] . '_slogan';
50
-		$tree['description'] = $tree['prefix'] . '_description';
49
+		$tree['slogan'] = $tree['prefix'].'_slogan';
50
+		$tree['description'] = $tree['prefix'].'_description';
51 51
 		paquet_readable_files($tree, "$dir_plugins$plug/");
52 52
 		if (!$tree['chemin']) {
53 53
 			$tree['chemin'] = [];
@@ -79,7 +79,7 @@  discard block
 block discarded – undo
79 79
 	// Prendre les messages d'erreur sans les numeros de lignes
80 80
 	$msg = array_column($vxml->err, 0);
81 81
 	$t = _T('plugins_erreur', ['plugins' => $plug]);
82
-	array_unshift($msg, $t . " <ul class='erreur_xml'><li>" . reset($msg) . '</li></ul>');
82
+	array_unshift($msg, $t." <ul class='erreur_xml'><li>".reset($msg).'</li></ul>');
83 83
 
84 84
 	return ['erreur' => $msg];
85 85
 }
@@ -95,9 +95,9 @@  discard block
 block discarded – undo
95 95
 function paquet_readable_files(&$tree, $dir) {
96 96
 	$prefix = strtolower((string) $tree['prefix']);
97 97
 
98
-	$tree['options'] = (is_readable($dir . $f = ($prefix . '_options.php'))) ? [$f] : [];
99
-	$tree['fonctions'] = (is_readable($dir . $f = ($prefix . '_fonctions.php'))) ? [$f] : [];
100
-	$tree['install'] = (is_readable($dir . $f = ($prefix . '_administrations.php'))) ? [$f] : [];
98
+	$tree['options'] = (is_readable($dir.$f = ($prefix.'_options.php'))) ? [$f] : [];
99
+	$tree['fonctions'] = (is_readable($dir.$f = ($prefix.'_fonctions.php'))) ? [$f] : [];
100
+	$tree['install'] = (is_readable($dir.$f = ($prefix.'_administrations.php'))) ? [$f] : [];
101 101
 }
102 102
 
103 103
 /**
@@ -185,7 +185,7 @@  discard block
 block discarded – undo
185 185
 	$texte = trim((string) $phraseur->versions[$n]['']);
186 186
 	$phraseur->versions[$n][''] = '';
187 187
 
188
-	$f = 'info_paquet_' . $name;
188
+	$f = 'info_paquet_'.$name;
189 189
 	if (function_exists($f)) {
190 190
 		$f($phraseur, $attrs, $texte);
191 191
 	} elseif (!$attrs) {
Please login to merge, or discard this patch.
ecrire/plugins/extraire_boutons.php 1 patch
Indentation   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 /**
@@ -20,31 +20,31 @@  discard block
 block discarded – undo
20 20
  * @return array
21 21
  */
22 22
 function plugins_extraire_boutons_dist($arbre) {
23
-	$les_boutons = null;
24
-	$ret = ['bouton' => [], 'onglet' => []];
25
-	// recuperer les boutons et onglets si necessaire
26
-	spip_xml_match_nodes(',^(bouton|onglet)\s,', $arbre, $les_boutons);
27
-	if (is_array($les_boutons) && count($les_boutons)) {
28
-		$ret['bouton'] = [];
29
-		$ret['onglet'] = [];
30
-		foreach ($les_boutons as $bouton => $val) {
31
-			$bouton = spip_xml_decompose_tag($bouton);
32
-			$type = reset($bouton);
33
-			$bouton = end($bouton);
34
-			if (isset($bouton['id'])) {
35
-				$id = $bouton['id'];
36
-				$val = reset($val);
37
-				if (is_array($val)) {
38
-					$ret[$type][$id]['parent'] = $bouton['parent'] ?? '';
39
-					$ret[$type][$id]['position'] = $bouton['position'] ?? '';
40
-					$ret[$type][$id]['titre'] = isset($val['titre']) ? trim((string) spip_xml_aplatit($val['titre'])) : '';
41
-					$ret[$type][$id]['icone'] = isset($val['icone']) ? trim((string) end($val['icone'])) : '';
42
-					$ret[$type][$id]['action'] = isset($val['url']) ? trim((string) end($val['url'])) : '';
43
-					$ret[$type][$id]['parametres'] = isset($val['args']) ? trim((string) end($val['args'])) : '';
44
-				}
45
-			}
46
-		}
47
-	}
23
+    $les_boutons = null;
24
+    $ret = ['bouton' => [], 'onglet' => []];
25
+    // recuperer les boutons et onglets si necessaire
26
+    spip_xml_match_nodes(',^(bouton|onglet)\s,', $arbre, $les_boutons);
27
+    if (is_array($les_boutons) && count($les_boutons)) {
28
+        $ret['bouton'] = [];
29
+        $ret['onglet'] = [];
30
+        foreach ($les_boutons as $bouton => $val) {
31
+            $bouton = spip_xml_decompose_tag($bouton);
32
+            $type = reset($bouton);
33
+            $bouton = end($bouton);
34
+            if (isset($bouton['id'])) {
35
+                $id = $bouton['id'];
36
+                $val = reset($val);
37
+                if (is_array($val)) {
38
+                    $ret[$type][$id]['parent'] = $bouton['parent'] ?? '';
39
+                    $ret[$type][$id]['position'] = $bouton['position'] ?? '';
40
+                    $ret[$type][$id]['titre'] = isset($val['titre']) ? trim((string) spip_xml_aplatit($val['titre'])) : '';
41
+                    $ret[$type][$id]['icone'] = isset($val['icone']) ? trim((string) end($val['icone'])) : '';
42
+                    $ret[$type][$id]['action'] = isset($val['url']) ? trim((string) end($val['url'])) : '';
43
+                    $ret[$type][$id]['parametres'] = isset($val['args']) ? trim((string) end($val['args'])) : '';
44
+                }
45
+            }
46
+        }
47
+    }
48 48
 
49
-	return $ret;
49
+    return $ret;
50 50
 }
Please login to merge, or discard this patch.
ecrire/plugins/afficher_repertoires.php 2 patches
Indentation   +87 added lines, -87 removed lines patch added patch discarded remove patch
@@ -10,110 +10,110 @@
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 function plugins_afficher_repertoires_dist($url_page, $liste_plugins, $liste_plugins_actifs) {
17
-	$ligne_plug = charger_fonction('afficher_plugin', 'plugins');
18
-	$racine = basename((string) _DIR_PLUGINS);
19
-	$init_dir = $current_dir = '';
20
-	// liste des repertoires deplies : construit en remontant l'arbo de chaque plugin actif
21
-	// des qu'un path est deja note deplie on s'arrete
22
-	$deplie = [$racine => true];
23
-	$fast_liste_plugins_actifs = [];
24
-	foreach ($liste_plugins_actifs as $key => $plug) {
25
-		$chemin_plug = chemin_plug($racine, $plug);
26
-		$fast_liste_plugins_actifs[$chemin_plug] = true;
27
-		$dir = dirname((string) $chemin_plug);
28
-		$maxiter = 100;
29
-		while (strlen($dir) && !isset($deplie[$dir]) && $dir !== $racine && $maxiter-- > 0) {
30
-			$deplie[$dir] = true;
31
-			$dir = dirname($dir);
32
-		}
33
-	}
17
+    $ligne_plug = charger_fonction('afficher_plugin', 'plugins');
18
+    $racine = basename((string) _DIR_PLUGINS);
19
+    $init_dir = $current_dir = '';
20
+    // liste des repertoires deplies : construit en remontant l'arbo de chaque plugin actif
21
+    // des qu'un path est deja note deplie on s'arrete
22
+    $deplie = [$racine => true];
23
+    $fast_liste_plugins_actifs = [];
24
+    foreach ($liste_plugins_actifs as $key => $plug) {
25
+        $chemin_plug = chemin_plug($racine, $plug);
26
+        $fast_liste_plugins_actifs[$chemin_plug] = true;
27
+        $dir = dirname((string) $chemin_plug);
28
+        $maxiter = 100;
29
+        while (strlen($dir) && !isset($deplie[$dir]) && $dir !== $racine && $maxiter-- > 0) {
30
+            $deplie[$dir] = true;
31
+            $dir = dirname($dir);
32
+        }
33
+    }
34 34
 
35
-	// index repertoires --> plugin
36
-	$dir_index = [];
37
-	foreach ($liste_plugins as $key => $plug) {
38
-		$liste_plugins[$key] = chemin_plug($racine, $plug);
39
-		$dir_index[dirname((string) $liste_plugins[$key])][] = $key;
40
-	}
35
+    // index repertoires --> plugin
36
+    $dir_index = [];
37
+    foreach ($liste_plugins as $key => $plug) {
38
+        $liste_plugins[$key] = chemin_plug($racine, $plug);
39
+        $dir_index[dirname((string) $liste_plugins[$key])][] = $key;
40
+    }
41 41
 
42
-	$visible = @isset($deplie[$current_dir]);
43
-	$maxiter = 1000;
42
+    $visible = @isset($deplie[$current_dir]);
43
+    $maxiter = 1000;
44 44
 
45
-	$res = '';
46
-	while ((is_countable($liste_plugins) ? count($liste_plugins) : 0) && $maxiter--) {
47
-		// le rep suivant
48
-		$dir = dirname((string) reset($liste_plugins));
49
-		if ($dir != $current_dir) {
50
-			$res .= tree_open_close_dir($current_dir, $dir, $deplie);
51
-		}
45
+    $res = '';
46
+    while ((is_countable($liste_plugins) ? count($liste_plugins) : 0) && $maxiter--) {
47
+        // le rep suivant
48
+        $dir = dirname((string) reset($liste_plugins));
49
+        if ($dir != $current_dir) {
50
+            $res .= tree_open_close_dir($current_dir, $dir, $deplie);
51
+        }
52 52
 
53
-		// d'abord tous les plugins du rep courant
54
-		if (isset($dir_index[$current_dir])) {
55
-			foreach ($dir_index[$current_dir] as $key) {
56
-				$plug = $liste_plugins[$key];
57
-				$actif = @isset($fast_liste_plugins_actifs[$plug]);
58
-				$id = substr(md5((string) $plug), 0, 16);
59
-				$res .= $ligne_plug(
60
-					$url_page,
61
-					str_replace(_DIR_PLUGINS, '', _DIR_RACINE . $plug),
62
-					$actif,
63
-					'menu-entree'
64
-				) . "\n";
65
-				unset($liste_plugins[$key]);
66
-			}
67
-		}
68
-	}
69
-	$res .= tree_open_close_dir($current_dir, $init_dir, true);
53
+        // d'abord tous les plugins du rep courant
54
+        if (isset($dir_index[$current_dir])) {
55
+            foreach ($dir_index[$current_dir] as $key) {
56
+                $plug = $liste_plugins[$key];
57
+                $actif = @isset($fast_liste_plugins_actifs[$plug]);
58
+                $id = substr(md5((string) $plug), 0, 16);
59
+                $res .= $ligne_plug(
60
+                    $url_page,
61
+                    str_replace(_DIR_PLUGINS, '', _DIR_RACINE . $plug),
62
+                    $actif,
63
+                    'menu-entree'
64
+                ) . "\n";
65
+                unset($liste_plugins[$key]);
66
+            }
67
+        }
68
+    }
69
+    $res .= tree_open_close_dir($current_dir, $init_dir, true);
70 70
 
71
-	return "<ul class='menu-liste plugins'>"
72
-	. $res
73
-	. '</ul>';
71
+    return "<ul class='menu-liste plugins'>"
72
+    . $res
73
+    . '</ul>';
74 74
 }
75 75
 
76 76
 
77 77
 // vraiment n'importe quoi la gestion des chemins des plugins
78 78
 // une fonction pour aider...
79 79
 function chemin_plug($racine, $plug) {
80
-	return preg_replace(',[^/]+/\.\./,', '', "$racine/$plug");
80
+    return preg_replace(',[^/]+/\.\./,', '', "$racine/$plug");
81 81
 }
82 82
 
83 83
 function tree_open_close_dir(&$current, $target, $deplie = []) {
84
-	if ($current == $target) {
85
-		return '';
86
-	}
87
-	$tcur = explode('/', (string) $current);
88
-	$ttarg = explode('/', (string) $target);
89
-	$tcom = [];
90
-	$output = '';
91
-	// la partie commune
92
-	while (reset($tcur) === reset($ttarg)) {
93
-		$tcom[] = array_shift($tcur);
94
-		array_shift($ttarg);
95
-	}
96
-	// fermer les repertoires courant jusqu'au point de fork
97
-	while ($close = array_pop($tcur)) {
98
-		$output .= "</ul>\n";
99
-		$output .= fin_block();
100
-		$output .= "</li>\n";
101
-	}
102
-	$chemin = '';
103
-	if ($tcom !== []) {
104
-		$chemin .= implode('/', $tcom) . '/';
105
-	}
106
-	// ouvrir les repertoires jusqu'a la cible
107
-	while ($open = array_shift($ttarg)) {
108
-		$visible = @isset($deplie[$chemin . $open]);
109
-		$chemin .= $open . '/';
110
-		$output .= '<li>';
111
-		$output .= bouton_block_depliable($chemin, $visible);
112
-		$output .= debut_block_depliable($visible);
84
+    if ($current == $target) {
85
+        return '';
86
+    }
87
+    $tcur = explode('/', (string) $current);
88
+    $ttarg = explode('/', (string) $target);
89
+    $tcom = [];
90
+    $output = '';
91
+    // la partie commune
92
+    while (reset($tcur) === reset($ttarg)) {
93
+        $tcom[] = array_shift($tcur);
94
+        array_shift($ttarg);
95
+    }
96
+    // fermer les repertoires courant jusqu'au point de fork
97
+    while ($close = array_pop($tcur)) {
98
+        $output .= "</ul>\n";
99
+        $output .= fin_block();
100
+        $output .= "</li>\n";
101
+    }
102
+    $chemin = '';
103
+    if ($tcom !== []) {
104
+        $chemin .= implode('/', $tcom) . '/';
105
+    }
106
+    // ouvrir les repertoires jusqu'a la cible
107
+    while ($open = array_shift($ttarg)) {
108
+        $visible = @isset($deplie[$chemin . $open]);
109
+        $chemin .= $open . '/';
110
+        $output .= '<li>';
111
+        $output .= bouton_block_depliable($chemin, $visible);
112
+        $output .= debut_block_depliable($visible);
113 113
 
114
-		$output .= "<ul>\n";
115
-	}
116
-	$current = $target;
114
+        $output .= "<ul>\n";
115
+    }
116
+    $current = $target;
117 117
 
118
-	return $output;
118
+    return $output;
119 119
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -58,10 +58,10 @@  discard block
 block discarded – undo
58 58
 				$id = substr(md5((string) $plug), 0, 16);
59 59
 				$res .= $ligne_plug(
60 60
 					$url_page,
61
-					str_replace(_DIR_PLUGINS, '', _DIR_RACINE . $plug),
61
+					str_replace(_DIR_PLUGINS, '', _DIR_RACINE.$plug),
62 62
 					$actif,
63 63
 					'menu-entree'
64
-				) . "\n";
64
+				)."\n";
65 65
 				unset($liste_plugins[$key]);
66 66
 			}
67 67
 		}
@@ -101,12 +101,12 @@  discard block
 block discarded – undo
101 101
 	}
102 102
 	$chemin = '';
103 103
 	if ($tcom !== []) {
104
-		$chemin .= implode('/', $tcom) . '/';
104
+		$chemin .= implode('/', $tcom).'/';
105 105
 	}
106 106
 	// ouvrir les repertoires jusqu'a la cible
107 107
 	while ($open = array_shift($ttarg)) {
108
-		$visible = @isset($deplie[$chemin . $open]);
109
-		$chemin .= $open . '/';
108
+		$visible = @isset($deplie[$chemin.$open]);
109
+		$chemin .= $open.'/';
110 110
 		$output .= '<li>';
111 111
 		$output .= bouton_block_depliable($chemin, $visible);
112 112
 		$output .= debut_block_depliable($visible);
Please login to merge, or discard this patch.
ecrire/public/decompiler.php 2 patches
Indentation   +176 added lines, -176 removed lines patch added patch discarded remove patch
@@ -12,129 +12,129 @@  discard block
 block discarded – undo
12 12
 \***************************************************************************/
13 13
 
14 14
 if (!defined('_ECRIRE_INC_VERSION')) {
15
-	return;
15
+    return;
16 16
 }
17 17
 
18 18
 // Decompilation de l'arbre de syntaxe abstraite d'un squelette SPIP
19 19
 
20 20
 function decompiler_boucle($struct, $fmt = '', $prof = 0) {
21
-	$nom = $struct->id_boucle;
22
-	$preaff = decompiler_($struct->preaff, $fmt, $prof);
23
-	$avant = decompiler_($struct->avant, $fmt, $prof);
24
-	$apres = decompiler_($struct->apres, $fmt, $prof);
25
-	$altern = decompiler_($struct->altern, $fmt, $prof);
26
-	$milieu = decompiler_($struct->milieu, $fmt, $prof);
27
-	$postaff = decompiler_($struct->postaff, $fmt, $prof);
28
-
29
-	$type = $struct->sql_serveur ? "$struct->sql_serveur:" : '';
30
-	$type .= ($struct->type_requete ?: $struct->table_optionnelle);
31
-
32
-	if ($struct->jointures_explicites) {
33
-		$type .= ' ' . $struct->jointures_explicites;
34
-	}
35
-	if ($struct->table_optionnelle) {
36
-		$type .= '?';
37
-	}
38
-	// Revoir le cas de la boucle recursive
39
-
40
-	$crit = $struct->param;
41
-	if ($crit && !is_array($crit[0])) {
42
-		$type = strtolower($type) . array_shift($crit);
43
-	}
44
-	$crit = decompiler_criteres($struct, $fmt, $prof);
45
-
46
-	$f = 'format_boucle_' . $fmt;
47
-
48
-	return $f($preaff, $avant, $nom, $type, $crit, $milieu, $apres, $altern, $postaff, $prof);
21
+    $nom = $struct->id_boucle;
22
+    $preaff = decompiler_($struct->preaff, $fmt, $prof);
23
+    $avant = decompiler_($struct->avant, $fmt, $prof);
24
+    $apres = decompiler_($struct->apres, $fmt, $prof);
25
+    $altern = decompiler_($struct->altern, $fmt, $prof);
26
+    $milieu = decompiler_($struct->milieu, $fmt, $prof);
27
+    $postaff = decompiler_($struct->postaff, $fmt, $prof);
28
+
29
+    $type = $struct->sql_serveur ? "$struct->sql_serveur:" : '';
30
+    $type .= ($struct->type_requete ?: $struct->table_optionnelle);
31
+
32
+    if ($struct->jointures_explicites) {
33
+        $type .= ' ' . $struct->jointures_explicites;
34
+    }
35
+    if ($struct->table_optionnelle) {
36
+        $type .= '?';
37
+    }
38
+    // Revoir le cas de la boucle recursive
39
+
40
+    $crit = $struct->param;
41
+    if ($crit && !is_array($crit[0])) {
42
+        $type = strtolower($type) . array_shift($crit);
43
+    }
44
+    $crit = decompiler_criteres($struct, $fmt, $prof);
45
+
46
+    $f = 'format_boucle_' . $fmt;
47
+
48
+    return $f($preaff, $avant, $nom, $type, $crit, $milieu, $apres, $altern, $postaff, $prof);
49 49
 }
50 50
 
51 51
 function decompiler_include($struct, $fmt = '', $prof = 0) {
52
-	$res = [];
53
-	foreach ($struct->param ?: [] as $couple) {
54
-		array_shift($couple);
55
-		foreach ($couple as $v) {
56
-			$res[] = decompiler_($v, $fmt, $prof);
57
-		}
58
-	}
59
-	$file = is_string($struct->texte) ? $struct->texte :
60
-		decompiler_($struct->texte, $fmt, $prof);
61
-	$f = 'format_inclure_' . $fmt;
62
-
63
-	return $f($file, $res, $prof);
52
+    $res = [];
53
+    foreach ($struct->param ?: [] as $couple) {
54
+        array_shift($couple);
55
+        foreach ($couple as $v) {
56
+            $res[] = decompiler_($v, $fmt, $prof);
57
+        }
58
+    }
59
+    $file = is_string($struct->texte) ? $struct->texte :
60
+        decompiler_($struct->texte, $fmt, $prof);
61
+    $f = 'format_inclure_' . $fmt;
62
+
63
+    return $f($file, $res, $prof);
64 64
 }
65 65
 
66 66
 function decompiler_texte($struct, $fmt = '', $prof = 0) {
67
-	$f = 'format_texte_' . $fmt;
67
+    $f = 'format_texte_' . $fmt;
68 68
 
69
-	return strlen((string) $struct->texte) ? $f($struct->texte, $prof) : '';
69
+    return strlen((string) $struct->texte) ? $f($struct->texte, $prof) : '';
70 70
 }
71 71
 
72 72
 function decompiler_polyglotte($struct, $fmt = '', $prof = 0) {
73
-	$f = 'format_polyglotte_' . $fmt;
73
+    $f = 'format_polyglotte_' . $fmt;
74 74
 
75
-	return $f($struct->traductions, $prof);
75
+    return $f($struct->traductions, $prof);
76 76
 }
77 77
 
78 78
 function decompiler_idiome($struct, $fmt = '', $prof = 0) {
79
-	$args = [];
80
-	foreach ($struct->arg as $k => $v) {
81
-		$args[$k] = public_decompiler($v, $fmt, $prof);
82
-	}
79
+    $args = [];
80
+    foreach ($struct->arg as $k => $v) {
81
+        $args[$k] = public_decompiler($v, $fmt, $prof);
82
+    }
83 83
 
84
-	$filtres = decompiler_liste($struct->param, $fmt, $prof);
84
+    $filtres = decompiler_liste($struct->param, $fmt, $prof);
85 85
 
86
-	$f = 'format_idiome_' . $fmt;
86
+    $f = 'format_idiome_' . $fmt;
87 87
 
88
-	return $f($struct->nom_champ, $struct->module, $args, $filtres, $prof);
88
+    return $f($struct->nom_champ, $struct->module, $args, $filtres, $prof);
89 89
 }
90 90
 
91 91
 function decompiler_champ($struct, $fmt = '', $prof = 0) {
92
-	$avant = decompiler_($struct->avant, $fmt, $prof);
93
-	$apres = decompiler_($struct->apres, $fmt, $prof);
94
-	$args = $filtres = '';
95
-	if ($p = $struct->param) {
96
-		if ($p[0][0] === '') {
97
-			$args = decompiler_liste([array_shift($p)], $fmt, $prof);
98
-		}
99
-		$filtres = decompiler_liste($p, $fmt, $prof);
100
-	}
101
-	$f = 'format_champ_' . $fmt;
102
-
103
-	return $f($struct->nom_champ, $struct->nom_boucle, $struct->etoile, $avant, $apres, $args, $filtres, $prof);
92
+    $avant = decompiler_($struct->avant, $fmt, $prof);
93
+    $apres = decompiler_($struct->apres, $fmt, $prof);
94
+    $args = $filtres = '';
95
+    if ($p = $struct->param) {
96
+        if ($p[0][0] === '') {
97
+            $args = decompiler_liste([array_shift($p)], $fmt, $prof);
98
+        }
99
+        $filtres = decompiler_liste($p, $fmt, $prof);
100
+    }
101
+    $f = 'format_champ_' . $fmt;
102
+
103
+    return $f($struct->nom_champ, $struct->nom_boucle, $struct->etoile, $avant, $apres, $args, $filtres, $prof);
104 104
 }
105 105
 
106 106
 function decompiler_liste($sources, $fmt = '', $prof = 0) {
107
-	if (!is_array($sources)) {
108
-		return '';
109
-	}
110
-	$f = 'format_liste_' . $fmt;
111
-	$res = '';
112
-	foreach ($sources as $arg) {
113
-		if (!is_array($arg)) {
114
-			continue; // ne devrait pas arriver.
115
-		} else {
116
-			$r = array_shift($arg);
117
-		}
118
-		$args = [];
119
-		foreach ($arg as $v) {
120
-			// cas des arguments entoures de ' ou "
121
-			if (
122
-				(is_countable($v) ? count($v) : 0) == 1
123
-				&& $v[0]->type == 'texte'
124
-				&& strlen((string) $v[0]->apres) == 1
125
-				&& $v[0]->apres == $v[0]->avant
126
-			) {
127
-				$args[] = $v[0]->avant . $v[0]->texte . $v[0]->apres;
128
-			} else {
129
-				$args[] = decompiler_($v, $fmt, 0 - $prof);
130
-			}
131
-		}
132
-		if ($r !== '' || $args) {
133
-			$res .= $f($r, $args, $prof);
134
-		}
135
-	}
136
-
137
-	return $res;
107
+    if (!is_array($sources)) {
108
+        return '';
109
+    }
110
+    $f = 'format_liste_' . $fmt;
111
+    $res = '';
112
+    foreach ($sources as $arg) {
113
+        if (!is_array($arg)) {
114
+            continue; // ne devrait pas arriver.
115
+        } else {
116
+            $r = array_shift($arg);
117
+        }
118
+        $args = [];
119
+        foreach ($arg as $v) {
120
+            // cas des arguments entoures de ' ou "
121
+            if (
122
+                (is_countable($v) ? count($v) : 0) == 1
123
+                && $v[0]->type == 'texte'
124
+                && strlen((string) $v[0]->apres) == 1
125
+                && $v[0]->apres == $v[0]->avant
126
+            ) {
127
+                $args[] = $v[0]->avant . $v[0]->texte . $v[0]->apres;
128
+            } else {
129
+                $args[] = decompiler_($v, $fmt, 0 - $prof);
130
+            }
131
+        }
132
+        if ($r !== '' || $args) {
133
+            $res .= $f($r, $args, $prof);
134
+        }
135
+    }
136
+
137
+    return $res;
138 138
 }
139 139
 
140 140
 // Decompilation des criteres: on triche et on deroge:
@@ -142,93 +142,93 @@  discard block
 block discarded – undo
142 142
 // - le champ apres signale le critere {"separateur"} ou {'separateur'}
143 143
 // - les champs sont implicitement etendus (crochets implicites mais interdits)
144 144
 function decompiler_criteres($boucle, $fmt = '', $prof = 0) {
145
-	$sources = $boucle->param;
146
-	if (!is_array($sources)) {
147
-		return '';
148
-	}
149
-	$res = '';
150
-	$f = 'format_critere_' . $fmt;
151
-	foreach ($sources as $crit) {
152
-		if (!is_array($crit)) {
153
-			continue;
154
-		} // boucle recursive
155
-		array_shift($crit);
156
-		$args = [];
157
-		foreach ($crit as $i => $v) {
158
-			if (
159
-				(is_countable($v) ? count($v) : 0) == 1
160
-				&& $v[0]->type == 'texte'
161
-				&& $v[0]->apres
162
-			) {
163
-				$args[] = [['texte', ($v[0]->apres . $v[0]->texte . $v[0]->apres)]];
164
-			} else {
165
-				$res2 = [];
166
-				foreach ($v as $k => $p) {
167
-					if (
168
-						isset($p->type)
169
-						&& function_exists($d = 'decompiler_' . $p->type)
170
-					) {
171
-						$r = $d($p, $fmt, (0 - $prof));
172
-						$res2[] = [$p->type, $r];
173
-					} else {
174
-						spip_log("critere $i / $k mal forme");
175
-					}
176
-				}
177
-				$args[] = $res2;
178
-			}
179
-		}
180
-		$res .= $f($args);
181
-	}
182
-
183
-	return $res;
145
+    $sources = $boucle->param;
146
+    if (!is_array($sources)) {
147
+        return '';
148
+    }
149
+    $res = '';
150
+    $f = 'format_critere_' . $fmt;
151
+    foreach ($sources as $crit) {
152
+        if (!is_array($crit)) {
153
+            continue;
154
+        } // boucle recursive
155
+        array_shift($crit);
156
+        $args = [];
157
+        foreach ($crit as $i => $v) {
158
+            if (
159
+                (is_countable($v) ? count($v) : 0) == 1
160
+                && $v[0]->type == 'texte'
161
+                && $v[0]->apres
162
+            ) {
163
+                $args[] = [['texte', ($v[0]->apres . $v[0]->texte . $v[0]->apres)]];
164
+            } else {
165
+                $res2 = [];
166
+                foreach ($v as $k => $p) {
167
+                    if (
168
+                        isset($p->type)
169
+                        && function_exists($d = 'decompiler_' . $p->type)
170
+                    ) {
171
+                        $r = $d($p, $fmt, (0 - $prof));
172
+                        $res2[] = [$p->type, $r];
173
+                    } else {
174
+                        spip_log("critere $i / $k mal forme");
175
+                    }
176
+                }
177
+                $args[] = $res2;
178
+            }
179
+        }
180
+        $res .= $f($args);
181
+    }
182
+
183
+    return $res;
184 184
 }
185 185
 
186 186
 
187 187
 function decompiler_($liste, $fmt = '', $prof = 0) {
188
-	if (!is_array($liste)) {
189
-		return '';
190
-	}
191
-	$prof2 = ($prof < 0) ? ($prof - 1) : ($prof + 1);
192
-	$contenu = [];
193
-	foreach ($liste as $k => $p) {
194
-		if (!isset($p->type)) {
195
-			continue;
196
-		} #??????
197
-		$d = 'decompiler_' . $p->type;
198
-		$next = $liste[$k + 1] ?? false;
199
-		// Forcer le champ etendu si son source (pas les reecritures)
200
-		// contenait des args et s'il est suivi d'espaces,
201
-		// le champ simple les eliminant est un bug helas perenne.
202
-
203
-		if (
204
-			$next
205
-			&& $next->type == 'texte'
206
-			&& $p->type == 'champ'
207
-			&& !$p->apres
208
-			&& !$p->avant
209
-			&& $p->fonctions
210
-		) {
211
-			$n = strlen((string) $next->texte) - strlen(ltrim((string) $next->texte));
212
-			if ($n) {
213
-				$champ = new Texte();
214
-				$champ->texte = substr((string) $next->texte, 0, $n);
215
-				$champ->ligne = $p->ligne;
216
-				$p->apres = [$champ];
217
-				$next->texte = substr((string) $next->texte, $n);
218
-			}
219
-		}
220
-		$contenu[] = [$d($p, $fmt, $prof2), $p->type];
221
-	}
222
-	$f = 'format_suite_' . $fmt;
223
-
224
-	return $f($contenu);
188
+    if (!is_array($liste)) {
189
+        return '';
190
+    }
191
+    $prof2 = ($prof < 0) ? ($prof - 1) : ($prof + 1);
192
+    $contenu = [];
193
+    foreach ($liste as $k => $p) {
194
+        if (!isset($p->type)) {
195
+            continue;
196
+        } #??????
197
+        $d = 'decompiler_' . $p->type;
198
+        $next = $liste[$k + 1] ?? false;
199
+        // Forcer le champ etendu si son source (pas les reecritures)
200
+        // contenait des args et s'il est suivi d'espaces,
201
+        // le champ simple les eliminant est un bug helas perenne.
202
+
203
+        if (
204
+            $next
205
+            && $next->type == 'texte'
206
+            && $p->type == 'champ'
207
+            && !$p->apres
208
+            && !$p->avant
209
+            && $p->fonctions
210
+        ) {
211
+            $n = strlen((string) $next->texte) - strlen(ltrim((string) $next->texte));
212
+            if ($n) {
213
+                $champ = new Texte();
214
+                $champ->texte = substr((string) $next->texte, 0, $n);
215
+                $champ->ligne = $p->ligne;
216
+                $p->apres = [$champ];
217
+                $next->texte = substr((string) $next->texte, $n);
218
+            }
219
+        }
220
+        $contenu[] = [$d($p, $fmt, $prof2), $p->type];
221
+    }
222
+    $f = 'format_suite_' . $fmt;
223
+
224
+    return $f($contenu);
225 225
 }
226 226
 
227 227
 function public_decompiler($liste, $fmt = '', $prof = 0, $quoi = '') {
228
-	if (!include_spip('public/format_' . $fmt)) {
229
-		return "'$fmt'?";
230
-	}
231
-	$f = 'decompiler_' . $quoi;
228
+    if (!include_spip('public/format_' . $fmt)) {
229
+        return "'$fmt'?";
230
+    }
231
+    $f = 'decompiler_' . $quoi;
232 232
 
233
-	return $f($liste, $fmt, $prof);
233
+    return $f($liste, $fmt, $prof);
234 234
 }
Please login to merge, or discard this patch.
Spacing   +18 added lines, -19 removed lines patch added patch discarded remove patch
@@ -30,7 +30,7 @@  discard block
 block discarded – undo
30 30
 	$type .= ($struct->type_requete ?: $struct->table_optionnelle);
31 31
 
32 32
 	if ($struct->jointures_explicites) {
33
-		$type .= ' ' . $struct->jointures_explicites;
33
+		$type .= ' '.$struct->jointures_explicites;
34 34
 	}
35 35
 	if ($struct->table_optionnelle) {
36 36
 		$type .= '?';
@@ -39,11 +39,11 @@  discard block
 block discarded – undo
39 39
 
40 40
 	$crit = $struct->param;
41 41
 	if ($crit && !is_array($crit[0])) {
42
-		$type = strtolower($type) . array_shift($crit);
42
+		$type = strtolower($type).array_shift($crit);
43 43
 	}
44 44
 	$crit = decompiler_criteres($struct, $fmt, $prof);
45 45
 
46
-	$f = 'format_boucle_' . $fmt;
46
+	$f = 'format_boucle_'.$fmt;
47 47
 
48 48
 	return $f($preaff, $avant, $nom, $type, $crit, $milieu, $apres, $altern, $postaff, $prof);
49 49
 }
@@ -56,21 +56,20 @@  discard block
 block discarded – undo
56 56
 			$res[] = decompiler_($v, $fmt, $prof);
57 57
 		}
58 58
 	}
59
-	$file = is_string($struct->texte) ? $struct->texte :
60
-		decompiler_($struct->texte, $fmt, $prof);
61
-	$f = 'format_inclure_' . $fmt;
59
+	$file = is_string($struct->texte) ? $struct->texte : decompiler_($struct->texte, $fmt, $prof);
60
+	$f = 'format_inclure_'.$fmt;
62 61
 
63 62
 	return $f($file, $res, $prof);
64 63
 }
65 64
 
66 65
 function decompiler_texte($struct, $fmt = '', $prof = 0) {
67
-	$f = 'format_texte_' . $fmt;
66
+	$f = 'format_texte_'.$fmt;
68 67
 
69 68
 	return strlen((string) $struct->texte) ? $f($struct->texte, $prof) : '';
70 69
 }
71 70
 
72 71
 function decompiler_polyglotte($struct, $fmt = '', $prof = 0) {
73
-	$f = 'format_polyglotte_' . $fmt;
72
+	$f = 'format_polyglotte_'.$fmt;
74 73
 
75 74
 	return $f($struct->traductions, $prof);
76 75
 }
@@ -83,7 +82,7 @@  discard block
 block discarded – undo
83 82
 
84 83
 	$filtres = decompiler_liste($struct->param, $fmt, $prof);
85 84
 
86
-	$f = 'format_idiome_' . $fmt;
85
+	$f = 'format_idiome_'.$fmt;
87 86
 
88 87
 	return $f($struct->nom_champ, $struct->module, $args, $filtres, $prof);
89 88
 }
@@ -98,7 +97,7 @@  discard block
 block discarded – undo
98 97
 		}
99 98
 		$filtres = decompiler_liste($p, $fmt, $prof);
100 99
 	}
101
-	$f = 'format_champ_' . $fmt;
100
+	$f = 'format_champ_'.$fmt;
102 101
 
103 102
 	return $f($struct->nom_champ, $struct->nom_boucle, $struct->etoile, $avant, $apres, $args, $filtres, $prof);
104 103
 }
@@ -107,7 +106,7 @@  discard block
 block discarded – undo
107 106
 	if (!is_array($sources)) {
108 107
 		return '';
109 108
 	}
110
-	$f = 'format_liste_' . $fmt;
109
+	$f = 'format_liste_'.$fmt;
111 110
 	$res = '';
112 111
 	foreach ($sources as $arg) {
113 112
 		if (!is_array($arg)) {
@@ -124,7 +123,7 @@  discard block
 block discarded – undo
124 123
 				&& strlen((string) $v[0]->apres) == 1
125 124
 				&& $v[0]->apres == $v[0]->avant
126 125
 			) {
127
-				$args[] = $v[0]->avant . $v[0]->texte . $v[0]->apres;
126
+				$args[] = $v[0]->avant.$v[0]->texte.$v[0]->apres;
128 127
 			} else {
129 128
 				$args[] = decompiler_($v, $fmt, 0 - $prof);
130 129
 			}
@@ -147,7 +146,7 @@  discard block
 block discarded – undo
147 146
 		return '';
148 147
 	}
149 148
 	$res = '';
150
-	$f = 'format_critere_' . $fmt;
149
+	$f = 'format_critere_'.$fmt;
151 150
 	foreach ($sources as $crit) {
152 151
 		if (!is_array($crit)) {
153 152
 			continue;
@@ -160,13 +159,13 @@  discard block
 block discarded – undo
160 159
 				&& $v[0]->type == 'texte'
161 160
 				&& $v[0]->apres
162 161
 			) {
163
-				$args[] = [['texte', ($v[0]->apres . $v[0]->texte . $v[0]->apres)]];
162
+				$args[] = [['texte', ($v[0]->apres.$v[0]->texte.$v[0]->apres)]];
164 163
 			} else {
165 164
 				$res2 = [];
166 165
 				foreach ($v as $k => $p) {
167 166
 					if (
168 167
 						isset($p->type)
169
-						&& function_exists($d = 'decompiler_' . $p->type)
168
+						&& function_exists($d = 'decompiler_'.$p->type)
170 169
 					) {
171 170
 						$r = $d($p, $fmt, (0 - $prof));
172 171
 						$res2[] = [$p->type, $r];
@@ -194,7 +193,7 @@  discard block
 block discarded – undo
194 193
 		if (!isset($p->type)) {
195 194
 			continue;
196 195
 		} #??????
197
-		$d = 'decompiler_' . $p->type;
196
+		$d = 'decompiler_'.$p->type;
198 197
 		$next = $liste[$k + 1] ?? false;
199 198
 		// Forcer le champ etendu si son source (pas les reecritures)
200 199
 		// contenait des args et s'il est suivi d'espaces,
@@ -219,16 +218,16 @@  discard block
 block discarded – undo
219 218
 		}
220 219
 		$contenu[] = [$d($p, $fmt, $prof2), $p->type];
221 220
 	}
222
-	$f = 'format_suite_' . $fmt;
221
+	$f = 'format_suite_'.$fmt;
223 222
 
224 223
 	return $f($contenu);
225 224
 }
226 225
 
227 226
 function public_decompiler($liste, $fmt = '', $prof = 0, $quoi = '') {
228
-	if (!include_spip('public/format_' . $fmt)) {
227
+	if (!include_spip('public/format_'.$fmt)) {
229 228
 		return "'$fmt'?";
230 229
 	}
231
-	$f = 'decompiler_' . $quoi;
230
+	$f = 'decompiler_'.$quoi;
232 231
 
233 232
 	return $f($liste, $fmt, $prof);
234 233
 }
Please login to merge, or discard this patch.
ecrire/public/parametrer.php 2 patches
Indentation   +246 added lines, -246 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 include_fichiers_fonctions();
@@ -29,177 +29,177 @@  discard block
 block discarded – undo
29 29
 # En cas d'erreur process_ins est absent et texte est un tableau de 2 chaines
30 30
 
31 31
 function public_parametrer_dist($fond, $contexte = '', $cache = '', string $connect = '') {
32
-	static $composer, $styliser, $notes = null;
33
-	$page = tester_redirection($fond, $contexte, $connect);
34
-	if ($page) {
35
-		return $page;
36
-	}
37
-
38
-	if (isset($contexte['lang'])) {
39
-		$lang = $contexte['lang'];
40
-	} elseif (!isset($lang)) {
41
-		$lang = $GLOBALS['meta']['langue_site'];
42
-	}
43
-
44
-	$select = ((!isset($GLOBALS['forcer_lang']) || !$GLOBALS['forcer_lang']) && $lang != $GLOBALS['spip_lang']);
45
-	if ($select) {
46
-		$select = lang_select($lang);
47
-	}
48
-
49
-	$debug = (defined('_VAR_MODE') && _VAR_MODE == 'debug');
50
-
51
-	if (!$styliser) {
52
-		$styliser = charger_fonction('styliser', 'public');
53
-	}
54
-	[$skel, $mime_type, $gram, $sourcefile] =
55
-		$styliser($fond, $contexte, $GLOBALS['spip_lang'], $connect);
56
-
57
-	if ($skel) {
58
-		// sauver le nom de l'eventuel squelette en cours d'execution
59
-		// (recursion possible a cause des modeles)
60
-		if ($debug) {
61
-			$courant = $GLOBALS['debug_objets']['courant'] ?? null;
62
-			$GLOBALS['debug_objets']['contexte'][$sourcefile] = $contexte;
63
-		}
64
-
65
-		// charger le squelette en specifiant les langages cibles et source
66
-		// au cas il faudrait le compiler (source posterieure au resultat)
67
-
68
-		if (!$composer) {
69
-			$composer = charger_fonction('composer', 'public');
70
-		}
71
-		$fonc = $composer($skel, $mime_type, $gram, $sourcefile, $connect);
72
-	} else {
73
-		$fonc = '';
74
-	}
75
-
76
-	if (!$fonc) { // squelette inconnu (==='') ou faux (===false)
77
-		$page = $fonc;
78
-	} else {
79
-		// Preparer l'appel de la fonction principale du squelette
80
-
81
-		spip_timer($a = 'calcul page ' . random_int(0, 1000));
82
-
83
-		// On cree un marqueur de notes unique lie a cette composition
84
-		// et on enregistre l'etat courant des globales de notes...
85
-		if (is_null($notes)) {
86
-			$notes = charger_fonction('notes', 'inc', true);
87
-		}
88
-		if ($notes) {
89
-			$notes('', 'empiler');
90
-		}
91
-
92
-		// Rajouter d'office ces deux parametres
93
-		// (mais vaudrait mieux que le compilateur sache le simuler
94
-		// car ca interdit l'usage de criteres conditionnels dessus).
95
-		if (!isset($contexte['date'])) {
96
-			$contexte['date'] = date('Y-m-d H:i:s');
97
-			$contexte['date_default'] = true;
98
-		} else {
99
-			$contexte['date'] = normaliser_date($contexte['date'], true);
100
-		}
101
-
102
-		if (!isset($contexte['date_redac'])) {
103
-			$contexte['date_redac'] = date('Y-m-d H:i:s');
104
-			$contexte['date_redac_default'] = true;
105
-		} else {
106
-			$contexte['date_redac'] = normaliser_date($contexte['date_redac'], true);
107
-		}
108
-
109
-		// Passer le nom du cache pour produire sa destruction automatique
110
-		try {
111
-			$page = $fonc(['cache' => $cache], [$contexte]);
112
-		} catch (Throwable $e) {
113
-			$msg = _T('zbug_erreur_execution_page') . " $sourcefile";
114
-			$full_msg = $msg . ' | File ' . $e->getFile() . ' Line ' . $e->getLine() . ' : ' . $e->getMessage();
115
-			$full_msg = str_replace(_ROOT_RACINE, '[…]/', $full_msg);
116
-			$corps = "<pre>$msg</pre>";
117
-			$page = analyse_resultat_skel($fond, ['cache' => $cache], $corps, $sourcefile);
118
-			erreur_squelette($full_msg);
119
-			unset($msg, $full_msg, $corps);
120
-		}
121
-
122
-		// Restituer les globales de notes telles qu'elles etaient avant l'appel
123
-		// Si l'inclus n'a pas affiche ses notes, tant pis (elles *doivent*
124
-		// etre dans son resultat, autrement elles ne seraient pas prises en
125
-		// compte a chaque calcul d'un texte contenant un modele, mais seulement
126
-		// quand le modele serait calcule, et on aurait des resultats incoherents)
127
-		if ($notes) {
128
-			$notes('', 'depiler');
129
-		}
130
-
131
-		// reinjecter en dynamique la pile des notes
132
-		// si il y a des inclure dynamiques
133
-		// si la pile n'est pas vide
134
-		// la generalisation de cette injection permettrait de corriger le point juste au dessus
135
-		// en faisant remonter les notes a l'incluant (A tester et valider avant application)
136
-		if ($notes) {
137
-			$page['notes'] = $notes('', 'sauver_etat');
138
-		}
139
-
140
-		// spip_log: un joli contexte
141
-		$infos = presenter_contexte(array_filter($contexte));
142
-
143
-		$profile = spip_timer($a);
144
-		spip_log("calcul ($profile) [$skel] $infos"
145
-			. ' (' . strlen((string) $page['texte']) . ' octets)');
146
-
147
-		if (defined('_CALCUL_PROFILER') && (int) $profile > _CALCUL_PROFILER) {
148
-			spip_log("calcul ($profile) [$skel] $infos"
149
-				. ' (' . strlen((string) $page['texte']) . ' octets) | ' . $_SERVER['REQUEST_URI'], 'profiler' . _LOG_AVERTISSEMENT);
150
-		}
151
-
152
-		if ($debug) {
153
-			// si c'est ce que demande le debusqueur, lui passer la main
154
-			$t = strlen((string) $page['texte']) ? $page['texte'] : ' ';
155
-			$GLOBALS['debug_objets']['resultat'][$fonc . 'tout'] = $t;
156
-			$GLOBALS['debug_objets']['courant'] = $courant;
157
-			$GLOBALS['debug_objets']['profile'][$sourcefile] = $profile;
158
-			if (
159
-				$GLOBALS['debug_objets']['sourcefile']
160
-				&& _request('var_mode_objet') == $fonc
161
-				&& _request('var_mode_affiche') == 'resultat'
162
-			) {
163
-				erreur_squelette();
164
-			}
165
-		}
166
-		// Si #CACHE{} n'etait pas la, le mettre a $delais
167
-		if (!isset($page['entetes']['X-Spip-Cache'])) {
168
-			// Dans l'espace prive ou dans un modeles/ on pose un cache 0 par defaut
169
-			// si aucun #CACHE{} spécifié
170
-			// le contexte implicite qui conditionne le cache assure qu'on retombe pas sur le meme
171
-			// entre public et prive
172
-			if (test_espace_prive() || str_starts_with((string) $fond, 'modeles/')) {
173
-				$page['entetes']['X-Spip-Cache'] = 0;
174
-			} else {
175
-				$page['entetes']['X-Spip-Cache'] = $GLOBALS['delais'] ?? 36000;
176
-			}
177
-		}
178
-
179
-		$page['contexte'] = $contexte;
180
-
181
-		// faire remonter le fichier source
182
-		static $js_inclus = false;
183
-		if (defined('_VAR_INCLURE') && _VAR_INCLURE) {
184
-			$page['sourcefile'] = $sourcefile;
185
-			$page['texte'] =
186
-				"<div class='inclure_blocs'><h6>" . $page['sourcefile'] . '</h6>' . $page['texte'] . '</div>'
187
-				. ($js_inclus ? '' : "<script type='text/javascript'>jQuery(function(){jQuery('.inclure_blocs > h6:first-child').hover(function(){jQuery(this).parent().addClass('hover')},function(){jQuery(this).parent().removeClass('hover')})});</script>");
188
-			$js_inclus = true;
189
-		}
190
-
191
-		// Si un modele contenait #SESSION, on note l'info dans $page
192
-		if (isset($GLOBALS['cache_utilise_session'])) {
193
-			$page['invalideurs']['session'] = $GLOBALS['cache_utilise_session'];
194
-			unset($GLOBALS['cache_utilise_session']);
195
-		}
196
-	}
197
-
198
-	if ($select) {
199
-		lang_select();
200
-	}
201
-
202
-	return $page;
32
+    static $composer, $styliser, $notes = null;
33
+    $page = tester_redirection($fond, $contexte, $connect);
34
+    if ($page) {
35
+        return $page;
36
+    }
37
+
38
+    if (isset($contexte['lang'])) {
39
+        $lang = $contexte['lang'];
40
+    } elseif (!isset($lang)) {
41
+        $lang = $GLOBALS['meta']['langue_site'];
42
+    }
43
+
44
+    $select = ((!isset($GLOBALS['forcer_lang']) || !$GLOBALS['forcer_lang']) && $lang != $GLOBALS['spip_lang']);
45
+    if ($select) {
46
+        $select = lang_select($lang);
47
+    }
48
+
49
+    $debug = (defined('_VAR_MODE') && _VAR_MODE == 'debug');
50
+
51
+    if (!$styliser) {
52
+        $styliser = charger_fonction('styliser', 'public');
53
+    }
54
+    [$skel, $mime_type, $gram, $sourcefile] =
55
+        $styliser($fond, $contexte, $GLOBALS['spip_lang'], $connect);
56
+
57
+    if ($skel) {
58
+        // sauver le nom de l'eventuel squelette en cours d'execution
59
+        // (recursion possible a cause des modeles)
60
+        if ($debug) {
61
+            $courant = $GLOBALS['debug_objets']['courant'] ?? null;
62
+            $GLOBALS['debug_objets']['contexte'][$sourcefile] = $contexte;
63
+        }
64
+
65
+        // charger le squelette en specifiant les langages cibles et source
66
+        // au cas il faudrait le compiler (source posterieure au resultat)
67
+
68
+        if (!$composer) {
69
+            $composer = charger_fonction('composer', 'public');
70
+        }
71
+        $fonc = $composer($skel, $mime_type, $gram, $sourcefile, $connect);
72
+    } else {
73
+        $fonc = '';
74
+    }
75
+
76
+    if (!$fonc) { // squelette inconnu (==='') ou faux (===false)
77
+        $page = $fonc;
78
+    } else {
79
+        // Preparer l'appel de la fonction principale du squelette
80
+
81
+        spip_timer($a = 'calcul page ' . random_int(0, 1000));
82
+
83
+        // On cree un marqueur de notes unique lie a cette composition
84
+        // et on enregistre l'etat courant des globales de notes...
85
+        if (is_null($notes)) {
86
+            $notes = charger_fonction('notes', 'inc', true);
87
+        }
88
+        if ($notes) {
89
+            $notes('', 'empiler');
90
+        }
91
+
92
+        // Rajouter d'office ces deux parametres
93
+        // (mais vaudrait mieux que le compilateur sache le simuler
94
+        // car ca interdit l'usage de criteres conditionnels dessus).
95
+        if (!isset($contexte['date'])) {
96
+            $contexte['date'] = date('Y-m-d H:i:s');
97
+            $contexte['date_default'] = true;
98
+        } else {
99
+            $contexte['date'] = normaliser_date($contexte['date'], true);
100
+        }
101
+
102
+        if (!isset($contexte['date_redac'])) {
103
+            $contexte['date_redac'] = date('Y-m-d H:i:s');
104
+            $contexte['date_redac_default'] = true;
105
+        } else {
106
+            $contexte['date_redac'] = normaliser_date($contexte['date_redac'], true);
107
+        }
108
+
109
+        // Passer le nom du cache pour produire sa destruction automatique
110
+        try {
111
+            $page = $fonc(['cache' => $cache], [$contexte]);
112
+        } catch (Throwable $e) {
113
+            $msg = _T('zbug_erreur_execution_page') . " $sourcefile";
114
+            $full_msg = $msg . ' | File ' . $e->getFile() . ' Line ' . $e->getLine() . ' : ' . $e->getMessage();
115
+            $full_msg = str_replace(_ROOT_RACINE, '[…]/', $full_msg);
116
+            $corps = "<pre>$msg</pre>";
117
+            $page = analyse_resultat_skel($fond, ['cache' => $cache], $corps, $sourcefile);
118
+            erreur_squelette($full_msg);
119
+            unset($msg, $full_msg, $corps);
120
+        }
121
+
122
+        // Restituer les globales de notes telles qu'elles etaient avant l'appel
123
+        // Si l'inclus n'a pas affiche ses notes, tant pis (elles *doivent*
124
+        // etre dans son resultat, autrement elles ne seraient pas prises en
125
+        // compte a chaque calcul d'un texte contenant un modele, mais seulement
126
+        // quand le modele serait calcule, et on aurait des resultats incoherents)
127
+        if ($notes) {
128
+            $notes('', 'depiler');
129
+        }
130
+
131
+        // reinjecter en dynamique la pile des notes
132
+        // si il y a des inclure dynamiques
133
+        // si la pile n'est pas vide
134
+        // la generalisation de cette injection permettrait de corriger le point juste au dessus
135
+        // en faisant remonter les notes a l'incluant (A tester et valider avant application)
136
+        if ($notes) {
137
+            $page['notes'] = $notes('', 'sauver_etat');
138
+        }
139
+
140
+        // spip_log: un joli contexte
141
+        $infos = presenter_contexte(array_filter($contexte));
142
+
143
+        $profile = spip_timer($a);
144
+        spip_log("calcul ($profile) [$skel] $infos"
145
+            . ' (' . strlen((string) $page['texte']) . ' octets)');
146
+
147
+        if (defined('_CALCUL_PROFILER') && (int) $profile > _CALCUL_PROFILER) {
148
+            spip_log("calcul ($profile) [$skel] $infos"
149
+                . ' (' . strlen((string) $page['texte']) . ' octets) | ' . $_SERVER['REQUEST_URI'], 'profiler' . _LOG_AVERTISSEMENT);
150
+        }
151
+
152
+        if ($debug) {
153
+            // si c'est ce que demande le debusqueur, lui passer la main
154
+            $t = strlen((string) $page['texte']) ? $page['texte'] : ' ';
155
+            $GLOBALS['debug_objets']['resultat'][$fonc . 'tout'] = $t;
156
+            $GLOBALS['debug_objets']['courant'] = $courant;
157
+            $GLOBALS['debug_objets']['profile'][$sourcefile] = $profile;
158
+            if (
159
+                $GLOBALS['debug_objets']['sourcefile']
160
+                && _request('var_mode_objet') == $fonc
161
+                && _request('var_mode_affiche') == 'resultat'
162
+            ) {
163
+                erreur_squelette();
164
+            }
165
+        }
166
+        // Si #CACHE{} n'etait pas la, le mettre a $delais
167
+        if (!isset($page['entetes']['X-Spip-Cache'])) {
168
+            // Dans l'espace prive ou dans un modeles/ on pose un cache 0 par defaut
169
+            // si aucun #CACHE{} spécifié
170
+            // le contexte implicite qui conditionne le cache assure qu'on retombe pas sur le meme
171
+            // entre public et prive
172
+            if (test_espace_prive() || str_starts_with((string) $fond, 'modeles/')) {
173
+                $page['entetes']['X-Spip-Cache'] = 0;
174
+            } else {
175
+                $page['entetes']['X-Spip-Cache'] = $GLOBALS['delais'] ?? 36000;
176
+            }
177
+        }
178
+
179
+        $page['contexte'] = $contexte;
180
+
181
+        // faire remonter le fichier source
182
+        static $js_inclus = false;
183
+        if (defined('_VAR_INCLURE') && _VAR_INCLURE) {
184
+            $page['sourcefile'] = $sourcefile;
185
+            $page['texte'] =
186
+                "<div class='inclure_blocs'><h6>" . $page['sourcefile'] . '</h6>' . $page['texte'] . '</div>'
187
+                . ($js_inclus ? '' : "<script type='text/javascript'>jQuery(function(){jQuery('.inclure_blocs > h6:first-child').hover(function(){jQuery(this).parent().addClass('hover')},function(){jQuery(this).parent().removeClass('hover')})});</script>");
188
+            $js_inclus = true;
189
+        }
190
+
191
+        // Si un modele contenait #SESSION, on note l'info dans $page
192
+        if (isset($GLOBALS['cache_utilise_session'])) {
193
+            $page['invalideurs']['session'] = $GLOBALS['cache_utilise_session'];
194
+            unset($GLOBALS['cache_utilise_session']);
195
+        }
196
+    }
197
+
198
+    if ($select) {
199
+        lang_select();
200
+    }
201
+
202
+    return $page;
203 203
 }
204 204
 
205 205
 /**
@@ -208,37 +208,37 @@  discard block
 block discarded – undo
208 208
  * @return string
209 209
 */
210 210
 function presenter_contexte($contexte, $profondeur_max = 1, $max_lines = 0) {
211
-	$infos = [];
212
-	$line = 0;
213
-	foreach ($contexte as $var => $val) {
214
-		$line++;
215
-		if ($max_lines && $max_lines < $line) {
216
-			$infos[] = '…';
217
-			break;
218
-		}
219
-		if ($val === null) {
220
-			$val = '';
221
-		} elseif (is_array($val)) {
222
-			if ($profondeur_max > 0) {
223
-				$val = 'array:' . count($val) . '(' . presenter_contexte($val, $profondeur_max - 1, 3) . ')';
224
-			} else {
225
-				$val = 'array:' . count($val);
226
-			}
227
-		} elseif (is_object($val)) {
228
-			$val = $val::class;
229
-		} elseif (strlen("$val") > 30) {
230
-			$val = substr("$val", 0, 29) . '…';
231
-			if (strstr($val, ' ')) {
232
-				$val = "'$val'";
233
-			}
234
-		} elseif (strstr((string) $val, ' ')) {
235
-			$val = "'$val'";
236
-		} elseif (!strlen((string) $val)) {
237
-			$val = "''";
238
-		}
239
-		$infos[] = $var . '=' . $val;
240
-	}
241
-	return implode(', ', $infos);
211
+    $infos = [];
212
+    $line = 0;
213
+    foreach ($contexte as $var => $val) {
214
+        $line++;
215
+        if ($max_lines && $max_lines < $line) {
216
+            $infos[] = '…';
217
+            break;
218
+        }
219
+        if ($val === null) {
220
+            $val = '';
221
+        } elseif (is_array($val)) {
222
+            if ($profondeur_max > 0) {
223
+                $val = 'array:' . count($val) . '(' . presenter_contexte($val, $profondeur_max - 1, 3) . ')';
224
+            } else {
225
+                $val = 'array:' . count($val);
226
+            }
227
+        } elseif (is_object($val)) {
228
+            $val = $val::class;
229
+        } elseif (strlen("$val") > 30) {
230
+            $val = substr("$val", 0, 29) . '…';
231
+            if (strstr($val, ' ')) {
232
+                $val = "'$val'";
233
+            }
234
+        } elseif (strstr((string) $val, ' ')) {
235
+            $val = "'$val'";
236
+        } elseif (!strlen((string) $val)) {
237
+            $val = "''";
238
+        }
239
+        $infos[] = $var . '=' . $val;
240
+    }
241
+    return implode(', ', $infos);
242 242
 }
243 243
 
244 244
 
@@ -255,11 +255,11 @@  discard block
 block discarded – undo
255 255
  * @return array|bool
256 256
  */
257 257
 function tester_redirection($fond, $contexte, $connect) {
258
-	static $tester_redirection = null;
259
-	if (is_null($tester_redirection)) {
260
-		$tester_redirection = charger_fonction('tester_redirection', 'public');
261
-	}
262
-	return $tester_redirection($fond, $contexte, $connect);
258
+    static $tester_redirection = null;
259
+    if (is_null($tester_redirection)) {
260
+        $tester_redirection = charger_fonction('tester_redirection', 'public');
261
+    }
262
+    return $tester_redirection($fond, $contexte, $connect);
263 263
 }
264 264
 
265 265
 
@@ -275,42 +275,42 @@  discard block
 block discarded – undo
275 275
  * @return array|bool
276 276
  */
277 277
 function public_tester_redirection_dist($fond, $contexte, $connect) {
278
-	if (
279
-		$fond == 'article'
280
-		&& !empty($contexte['id_article'])
281
-		&& ($id_article = (int) $contexte['id_article'])
282
-	) {
283
-		include_spip('public/quete'); // pour quete_virtuel et ses dependances
284
-		$m = quete_virtuel($id_article, $connect) ?? '';
285
-		if (strlen($m)) {
286
-			include_spip('inc/texte');
287
-			// les navigateurs pataugent si l'URL est vide
288
-			if ($url = virtuel_redirige($m, true)) {
289
-				// passer en url absolue car cette redirection pourra
290
-				// etre utilisee dans un contexte d'url qui change
291
-				// y compris url arbo
292
-				$status = 302;
293
-				if (defined('_STATUS_REDIRECTION_VIRTUEL')) {
294
-					$status = _STATUS_REDIRECTION_VIRTUEL;
295
-				}
296
-				if (!preg_match(',^\w+:,', (string) $url)) {
297
-					include_spip('inc/filtres_mini');
298
-					$url = url_absolue($url);
299
-				}
300
-				$url = str_replace('&amp;', '&', (string) $url);
301
-
302
-				return [
303
-					'texte' => '<'
304
-						. "?php include_spip('inc/headers');redirige_par_entete('"
305
-						. texte_script($url)
306
-						. "','',$status);"
307
-						. '?' . '>',
308
-					'process_ins' => 'php',
309
-					'status' => $status
310
-				];
311
-			}
312
-		}
313
-	}
314
-
315
-	return false;
278
+    if (
279
+        $fond == 'article'
280
+        && !empty($contexte['id_article'])
281
+        && ($id_article = (int) $contexte['id_article'])
282
+    ) {
283
+        include_spip('public/quete'); // pour quete_virtuel et ses dependances
284
+        $m = quete_virtuel($id_article, $connect) ?? '';
285
+        if (strlen($m)) {
286
+            include_spip('inc/texte');
287
+            // les navigateurs pataugent si l'URL est vide
288
+            if ($url = virtuel_redirige($m, true)) {
289
+                // passer en url absolue car cette redirection pourra
290
+                // etre utilisee dans un contexte d'url qui change
291
+                // y compris url arbo
292
+                $status = 302;
293
+                if (defined('_STATUS_REDIRECTION_VIRTUEL')) {
294
+                    $status = _STATUS_REDIRECTION_VIRTUEL;
295
+                }
296
+                if (!preg_match(',^\w+:,', (string) $url)) {
297
+                    include_spip('inc/filtres_mini');
298
+                    $url = url_absolue($url);
299
+                }
300
+                $url = str_replace('&amp;', '&', (string) $url);
301
+
302
+                return [
303
+                    'texte' => '<'
304
+                        . "?php include_spip('inc/headers');redirige_par_entete('"
305
+                        . texte_script($url)
306
+                        . "','',$status);"
307
+                        . '?' . '>',
308
+                    'process_ins' => 'php',
309
+                    'status' => $status
310
+                ];
311
+            }
312
+        }
313
+    }
314
+
315
+    return false;
316 316
 }
Please login to merge, or discard this patch.
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -78,7 +78,7 @@  discard block
 block discarded – undo
78 78
 	} else {
79 79
 		// Preparer l'appel de la fonction principale du squelette
80 80
 
81
-		spip_timer($a = 'calcul page ' . random_int(0, 1000));
81
+		spip_timer($a = 'calcul page '.random_int(0, 1000));
82 82
 
83 83
 		// On cree un marqueur de notes unique lie a cette composition
84 84
 		// et on enregistre l'etat courant des globales de notes...
@@ -110,8 +110,8 @@  discard block
 block discarded – undo
110 110
 		try {
111 111
 			$page = $fonc(['cache' => $cache], [$contexte]);
112 112
 		} catch (Throwable $e) {
113
-			$msg = _T('zbug_erreur_execution_page') . " $sourcefile";
114
-			$full_msg = $msg . ' | File ' . $e->getFile() . ' Line ' . $e->getLine() . ' : ' . $e->getMessage();
113
+			$msg = _T('zbug_erreur_execution_page')." $sourcefile";
114
+			$full_msg = $msg.' | File '.$e->getFile().' Line '.$e->getLine().' : '.$e->getMessage();
115 115
 			$full_msg = str_replace(_ROOT_RACINE, '[…]/', $full_msg);
116 116
 			$corps = "<pre>$msg</pre>";
117 117
 			$page = analyse_resultat_skel($fond, ['cache' => $cache], $corps, $sourcefile);
@@ -142,17 +142,17 @@  discard block
 block discarded – undo
142 142
 
143 143
 		$profile = spip_timer($a);
144 144
 		spip_log("calcul ($profile) [$skel] $infos"
145
-			. ' (' . strlen((string) $page['texte']) . ' octets)');
145
+			. ' ('.strlen((string) $page['texte']).' octets)');
146 146
 
147 147
 		if (defined('_CALCUL_PROFILER') && (int) $profile > _CALCUL_PROFILER) {
148 148
 			spip_log("calcul ($profile) [$skel] $infos"
149
-				. ' (' . strlen((string) $page['texte']) . ' octets) | ' . $_SERVER['REQUEST_URI'], 'profiler' . _LOG_AVERTISSEMENT);
149
+				. ' ('.strlen((string) $page['texte']).' octets) | '.$_SERVER['REQUEST_URI'], 'profiler'._LOG_AVERTISSEMENT);
150 150
 		}
151 151
 
152 152
 		if ($debug) {
153 153
 			// si c'est ce que demande le debusqueur, lui passer la main
154 154
 			$t = strlen((string) $page['texte']) ? $page['texte'] : ' ';
155
-			$GLOBALS['debug_objets']['resultat'][$fonc . 'tout'] = $t;
155
+			$GLOBALS['debug_objets']['resultat'][$fonc.'tout'] = $t;
156 156
 			$GLOBALS['debug_objets']['courant'] = $courant;
157 157
 			$GLOBALS['debug_objets']['profile'][$sourcefile] = $profile;
158 158
 			if (
@@ -183,7 +183,7 @@  discard block
 block discarded – undo
183 183
 		if (defined('_VAR_INCLURE') && _VAR_INCLURE) {
184 184
 			$page['sourcefile'] = $sourcefile;
185 185
 			$page['texte'] =
186
-				"<div class='inclure_blocs'><h6>" . $page['sourcefile'] . '</h6>' . $page['texte'] . '</div>'
186
+				"<div class='inclure_blocs'><h6>".$page['sourcefile'].'</h6>'.$page['texte'].'</div>'
187 187
 				. ($js_inclus ? '' : "<script type='text/javascript'>jQuery(function(){jQuery('.inclure_blocs > h6:first-child').hover(function(){jQuery(this).parent().addClass('hover')},function(){jQuery(this).parent().removeClass('hover')})});</script>");
188 188
 			$js_inclus = true;
189 189
 		}
@@ -220,14 +220,14 @@  discard block
 block discarded – undo
220 220
 			$val = '';
221 221
 		} elseif (is_array($val)) {
222 222
 			if ($profondeur_max > 0) {
223
-				$val = 'array:' . count($val) . '(' . presenter_contexte($val, $profondeur_max - 1, 3) . ')';
223
+				$val = 'array:'.count($val).'('.presenter_contexte($val, $profondeur_max - 1, 3).')';
224 224
 			} else {
225
-				$val = 'array:' . count($val);
225
+				$val = 'array:'.count($val);
226 226
 			}
227 227
 		} elseif (is_object($val)) {
228 228
 			$val = $val::class;
229 229
 		} elseif (strlen("$val") > 30) {
230
-			$val = substr("$val", 0, 29) . '…';
230
+			$val = substr("$val", 0, 29).'…';
231 231
 			if (strstr($val, ' ')) {
232 232
 				$val = "'$val'";
233 233
 			}
@@ -236,7 +236,7 @@  discard block
 block discarded – undo
236 236
 		} elseif (!strlen((string) $val)) {
237 237
 			$val = "''";
238 238
 		}
239
-		$infos[] = $var . '=' . $val;
239
+		$infos[] = $var.'='.$val;
240 240
 	}
241 241
 	return implode(', ', $infos);
242 242
 }
@@ -304,7 +304,7 @@  discard block
 block discarded – undo
304 304
 						. "?php include_spip('inc/headers');redirige_par_entete('"
305 305
 						. texte_script($url)
306 306
 						. "','',$status);"
307
-						. '?' . '>',
307
+						. '?'.'>',
308 308
 					'process_ins' => 'php',
309 309
 					'status' => $status
310 310
 				];
Please login to merge, or discard this patch.
ecrire/public/evaluer_page.php 2 patches
Indentation   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 \***************************************************************************/
11 11
 
12 12
 if (!defined('_ECRIRE_INC_VERSION')) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 /**
@@ -28,50 +28,50 @@  discard block
 block discarded – undo
28 28
  * @return void
29 29
  */
30 30
 
31
- /** @var bool Évaluation réussie ? */
31
+    /** @var bool Évaluation réussie ? */
32 32
 $res = true;
33 33
 
34 34
 // Cas d'une page contenant du PHP :
35 35
 if (empty($page['process_ins']) || $page['process_ins'] != 'html') {
36
-	include_spip('inc/lang');
36
+    include_spip('inc/lang');
37 37
 
38
-	// restaurer l'etat des notes avant calcul
39
-	if (
40
-		isset($page['notes'])
41
-		&& $page['notes']
42
-		&& ($notes = charger_fonction('notes', 'inc', true))
43
-	) {
44
-		$notes($page['notes'], 'restaurer_etat');
45
-	}
46
-	ob_start();
47
-	if (str_contains((string) $page['texte'], '?xml')) {
48
-		$page['texte'] = str_replace('<?xml', "<\1?xml", (string) $page['texte']);
49
-	}
38
+    // restaurer l'etat des notes avant calcul
39
+    if (
40
+        isset($page['notes'])
41
+        && $page['notes']
42
+        && ($notes = charger_fonction('notes', 'inc', true))
43
+    ) {
44
+        $notes($page['notes'], 'restaurer_etat');
45
+    }
46
+    ob_start();
47
+    if (str_contains((string) $page['texte'], '?xml')) {
48
+        $page['texte'] = str_replace('<?xml', "<\1?xml", (string) $page['texte']);
49
+    }
50 50
 
51
-	try {
52
-		$res = eval('?' . '>' . $page['texte']);
53
-		$page['texte'] = ob_get_contents();
54
-	} catch (\Throwable $e) {
55
-		$code = $page['texte'];
56
-		$GLOBALS['numero_ligne_php'] = 1;
57
-		if (!function_exists('numerote_ligne_php')) {
58
-			function numerote_ligne_php($match) {
59
-				$GLOBALS['numero_ligne_php']++;
60
-				return "\n/*" . str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
61
-			}
62
-		}
63
-		$code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', (string) $code);
64
-		$code = trim(highlight_string($code, true));
65
-		erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]);
66
-		$page['texte'] = '<!-- Erreur -->';
67
-	}
68
-	ob_end_clean();
51
+    try {
52
+        $res = eval('?' . '>' . $page['texte']);
53
+        $page['texte'] = ob_get_contents();
54
+    } catch (\Throwable $e) {
55
+        $code = $page['texte'];
56
+        $GLOBALS['numero_ligne_php'] = 1;
57
+        if (!function_exists('numerote_ligne_php')) {
58
+            function numerote_ligne_php($match) {
59
+                $GLOBALS['numero_ligne_php']++;
60
+                return "\n/*" . str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
61
+            }
62
+        }
63
+        $code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', (string) $code);
64
+        $code = trim(highlight_string($code, true));
65
+        erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]);
66
+        $page['texte'] = '<!-- Erreur -->';
67
+    }
68
+    ob_end_clean();
69 69
 
70
-	$page['process_ins'] = 'html';
70
+    $page['process_ins'] = 'html';
71 71
 
72
-	if (str_contains((string) $page['texte'], '?xml')) {
73
-		$page['texte'] = str_replace("<\1?xml", '<?xml', (string) $page['texte']);
74
-	}
72
+    if (str_contains((string) $page['texte'], '?xml')) {
73
+        $page['texte'] = str_replace("<\1?xml", '<?xml', (string) $page['texte']);
74
+    }
75 75
 }
76 76
 
77 77
 // le résultat de calcul d'un squelette est toujours de type string
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -49,7 +49,7 @@  discard block
 block discarded – undo
49 49
 	}
50 50
 
51 51
 	try {
52
-		$res = eval('?' . '>' . $page['texte']);
52
+		$res = eval('?'.'>'.$page['texte']);
53 53
 		$page['texte'] = ob_get_contents();
54 54
 	} catch (\Throwable $e) {
55 55
 		$code = $page['texte'];
@@ -57,12 +57,12 @@  discard block
 block discarded – undo
57 57
 		if (!function_exists('numerote_ligne_php')) {
58 58
 			function numerote_ligne_php($match) {
59 59
 				$GLOBALS['numero_ligne_php']++;
60
-				return "\n/*" . str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/';
60
+				return "\n/*".str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT).'*/';
61 61
 			}
62 62
 		}
63
-		$code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', (string) $code);
63
+		$code = '/*001*/'.preg_replace_callback(",\n,", 'numerote_ligne_php', (string) $code);
64 64
 		$code = trim(highlight_string($code, true));
65
-		erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]);
65
+		erreur_squelette('L'.$e->getLine().': '.$e->getMessage().'<br />'.$code, [$page['source'], '', $e->getFile(), '', $GLOBALS['spip_lang']]);
66 66
 		$page['texte'] = '<!-- Erreur -->';
67 67
 	}
68 68
 	ob_end_clean();
Please login to merge, or discard this patch.
ecrire/public/references.php 1 patch
Indentation   +532 added lines, -532 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
  * @package SPIP\Core\Compilateur\References
19 19
  **/
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 /**
@@ -43,14 +43,14 @@  discard block
 block discarded – undo
43 43
  *     - '' si une référence explicite incorrecte est envoyée
44 44
  */
45 45
 function index_boucle($p) {
46
-	if (strlen($p->nom_boucle)) {
47
-		// retourne l’index explicite demandé s’il existe
48
-		if (!empty($p->boucles[$p->nom_boucle])) {
49
-			return $p->nom_boucle;
50
-		}
51
-		return '';
52
-	}
53
-	return $p->id_boucle;
46
+    if (strlen($p->nom_boucle)) {
47
+        // retourne l’index explicite demandé s’il existe
48
+        if (!empty($p->boucles[$p->nom_boucle])) {
49
+            return $p->nom_boucle;
50
+        }
51
+        return '';
52
+    }
53
+    return $p->id_boucle;
54 54
 }
55 55
 
56 56
 
@@ -73,17 +73,17 @@  discard block
 block discarded – undo
73 73
  *     - '' si une référence explicite incorrecte est envoyée
74 74
  */
75 75
 function index_boucle_mere($p) {
76
-	if (strlen($p->nom_boucle)) {
77
-		// retourne l’index explicite demandé s’il existe
78
-		if (!empty($p->boucles[$p->nom_boucle])) {
79
-			return $p->nom_boucle;
80
-		}
81
-		return '';
82
-	}
83
-	if (!empty($p->descr['id_mere'])) {
84
-		return $p->descr['id_mere'];
85
-	}
86
-	return '';
76
+    if (strlen($p->nom_boucle)) {
77
+        // retourne l’index explicite demandé s’il existe
78
+        if (!empty($p->boucles[$p->nom_boucle])) {
79
+            return $p->nom_boucle;
80
+        }
81
+        return '';
82
+    }
83
+    if (!empty($p->descr['id_mere'])) {
84
+        return $p->descr['id_mere'];
85
+    }
86
+    return '';
87 87
 }
88 88
 
89 89
 /**
@@ -117,74 +117,74 @@  discard block
 block discarded – undo
117 117
  *     Code PHP pour obtenir le champ SQL
118 118
  */
119 119
 function index_pile(
120
-	$idb,
121
-	$nom_champ,
122
-	&$boucles,
123
-	$explicite = '',
124
-	$defaut = null,
125
-	$remonte_pile = true,
126
-	$select = true
120
+    $idb,
121
+    $nom_champ,
122
+    &$boucles,
123
+    $explicite = '',
124
+    $defaut = null,
125
+    $remonte_pile = true,
126
+    $select = true
127 127
 ) {
128
-	if (!is_string($defaut)) {
129
-		$defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)';
130
-	}
131
-
132
-	$idb_origine = $idb;
133
-	$nom_champ_origine = $nom_champ;
134
-
135
-	$i = 0;
136
-	if (strlen($explicite)) {
137
-		// Recherche d'un champ dans un etage superieur
138
-		while (($idb !== $explicite) && ($idb !== '')) {
139
-			#	spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
140
-			$i++;
141
-			$idb = $boucles[$idb]->id_parent;
142
-		}
143
-	}
144
-
145
-	#	spip_log("Cherche: $nom_champ a partir de '$idb'");
146
-	$nom_champ = strtolower($nom_champ);
147
-	$conditionnel = [];
148
-	// attention: entre la boucle nommee 0, "" et le tableau vide,
149
-	// il y a incoherences qu'il vaut mieux eviter
150
-	while (isset($boucles[$idb])) {
151
-		$joker = true;
152
-		// modifie $joker si tous les champs sont autorisés.
153
-		// $t = le select pour le champ, si on l'a trouvé (ou si joker)
154
-		// $c = le nom du champ demandé
155
-		[$t, $c] = index_tables_en_pile($idb, $nom_champ, $boucles, $joker);
156
-		if ($t) {
157
-			if ($select && !in_array($t, $boucles[$idb]->select)) {
158
-				$boucles[$idb]->select[] = $t;
159
-			}
160
-			// renseigner la boucle source de ce champ pour les traitements
161
-			$boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
162
-			$champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
163
-			if (!$joker) {
164
-				return index_compose($conditionnel, $champ);
165
-			}
166
-
167
-			// tant que l'on trouve des tables avec joker, on continue
168
-			// avec la boucle parente et on conditionne à l'exécution
169
-			// la présence du champ. Si le champ existe à l'exécution
170
-			// dans une boucle, il est pris, sinon on le cherche dans le parent...
171
-			$conditionnel[] = "isset($champ)?$champ";
172
-		}
173
-
174
-		if ($remonte_pile) {
175
-			#	spip_log("On remonte vers $i");
176
-			// Sinon on remonte d'un cran
177
-			$idb = $boucles[$idb]->id_parent;
178
-			$i++;
179
-		} else {
180
-			$idb = null;
181
-		}
182
-	}
183
-
184
-	#	spip_log("Pas vu $nom_champ");
185
-	// esperons qu'il y sera
186
-	// ou qu'on a fourni une valeur par "defaut" plus pertinent
187
-	return index_compose($conditionnel, $defaut);
128
+    if (!is_string($defaut)) {
129
+        $defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)';
130
+    }
131
+
132
+    $idb_origine = $idb;
133
+    $nom_champ_origine = $nom_champ;
134
+
135
+    $i = 0;
136
+    if (strlen($explicite)) {
137
+        // Recherche d'un champ dans un etage superieur
138
+        while (($idb !== $explicite) && ($idb !== '')) {
139
+            #	spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
140
+            $i++;
141
+            $idb = $boucles[$idb]->id_parent;
142
+        }
143
+    }
144
+
145
+    #	spip_log("Cherche: $nom_champ a partir de '$idb'");
146
+    $nom_champ = strtolower($nom_champ);
147
+    $conditionnel = [];
148
+    // attention: entre la boucle nommee 0, "" et le tableau vide,
149
+    // il y a incoherences qu'il vaut mieux eviter
150
+    while (isset($boucles[$idb])) {
151
+        $joker = true;
152
+        // modifie $joker si tous les champs sont autorisés.
153
+        // $t = le select pour le champ, si on l'a trouvé (ou si joker)
154
+        // $c = le nom du champ demandé
155
+        [$t, $c] = index_tables_en_pile($idb, $nom_champ, $boucles, $joker);
156
+        if ($t) {
157
+            if ($select && !in_array($t, $boucles[$idb]->select)) {
158
+                $boucles[$idb]->select[] = $t;
159
+            }
160
+            // renseigner la boucle source de ce champ pour les traitements
161
+            $boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
162
+            $champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
163
+            if (!$joker) {
164
+                return index_compose($conditionnel, $champ);
165
+            }
166
+
167
+            // tant que l'on trouve des tables avec joker, on continue
168
+            // avec la boucle parente et on conditionne à l'exécution
169
+            // la présence du champ. Si le champ existe à l'exécution
170
+            // dans une boucle, il est pris, sinon on le cherche dans le parent...
171
+            $conditionnel[] = "isset($champ)?$champ";
172
+        }
173
+
174
+        if ($remonte_pile) {
175
+            #	spip_log("On remonte vers $i");
176
+            // Sinon on remonte d'un cran
177
+            $idb = $boucles[$idb]->id_parent;
178
+            $i++;
179
+        } else {
180
+            $idb = null;
181
+        }
182
+    }
183
+
184
+    #	spip_log("Pas vu $nom_champ");
185
+    // esperons qu'il y sera
186
+    // ou qu'on a fourni une valeur par "defaut" plus pertinent
187
+    return index_compose($conditionnel, $defaut);
188 188
 }
189 189
 
190 190
 /**
@@ -198,12 +198,12 @@  discard block
 block discarded – undo
198 198
  * @return string              Code PHP complet de recherche d'un champ
199 199
  */
200 200
 function index_compose($conditionnel, $defaut) {
201
-	while ($c = array_pop($conditionnel)) {
202
-		// si on passe defaut = '', ne pas générer d'erreur de compilation.
203
-		$defaut = "($c:(" . ($defaut ?: "''") . '))';
204
-	}
201
+    while ($c = array_pop($conditionnel)) {
202
+        // si on passe defaut = '', ne pas générer d'erreur de compilation.
203
+        $defaut = "($c:(" . ($defaut ?: "''") . '))';
204
+    }
205 205
 
206
-	return $defaut;
206
+    return $defaut;
207 207
 }
208 208
 
209 209
 /**
@@ -239,98 +239,98 @@  discard block
 block discarded – undo
239 239
  **/
240 240
 function index_tables_en_pile($idb, $nom_champ, &$boucles, &$joker) {
241 241
 
242
-	$r = $boucles[$idb]->type_requete;
243
-	// boucle recursive, c'est foutu...
244
-	if ($r == TYPE_RECURSIF) {
245
-		return [];
246
-	}
247
-	if (!$r) {
248
-		$joker = false; // indiquer a l'appelant
249
-		# continuer pour chercher l'erreur suivante
250
-		return ["'#" . $r . ':' . $nom_champ . "'", ''];
251
-	}
252
-
253
-	$desc = $boucles[$idb]->show;
254
-	// le nom du champ est il une exception de la table ? un alias ?
255
-	$excep = $GLOBALS['exceptions_des_tables'][$r] ?? '';
256
-	if ($excep) {
257
-		$excep = $excep[$nom_champ] ?? '';
258
-	}
259
-
260
-	// il y a un alias connu pour ce champ
261
-	if ($excep) {
262
-		$joker = false; // indiquer a l'appelant
263
-		return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
264
-	}
265
-
266
-	// le champ existe dans la table, on le prend.
267
-	if (isset($desc['field'][$nom_champ])) {
268
-		$t = $boucles[$idb]->id_table ?? '';
269
-		$joker = false; // indiquer a l'appelant
270
-		// note: dans certains cas ('valeur' d’une boucle DATA, sans id_table), retourne ['.valeur', 'valeur'] …
271
-		return ["$t.$nom_champ", $nom_champ];
272
-	}
273
-
274
-	// Tous les champs sont-ils acceptés ?
275
-	// Si oui, on retourne le champ, et on lève le flag joker
276
-	// C'est le cas des itérateurs DATA qui acceptent tout
277
-	// et testent la présence du champ à l'exécution et non à la compilation
278
-	// car ils ne connaissent pas ici leurs contenus.
279
-	if (
280
-		/*$joker AND */
281
-		isset($desc['field']['*'])
282
-	) {
283
-		$joker = true; // indiquer a l'appelant
284
-		return [$nom_champ, $nom_champ];
285
-	}
286
-
287
-	$joker = false; // indiquer a l'appelant
288
-
289
-	// la table de jointure est explicitement indiquée (rubrique.titre)
290
-	if (preg_match('/^(.*)\.(.*)$/', $nom_champ, $r)) {
291
-		[, $_table, $_nom_champ] = $r;
292
-		if ($cle = trouver_jointure_champ($_nom_champ, $boucles[$idb], [$_table])) {
293
-			$_alias = $cle . '_' . $_nom_champ;
294
-			return index_exception(
295
-				$boucles[$idb],
296
-				$desc,
297
-				$_alias,
298
-				[$_table, $_nom_champ]
299
-			);
300
-		}
301
-		return ['', ''];
302
-	}
303
-
304
-	// pas d'alias, pas de champ, pas de joker...
305
-	// tenter via une jointure...
306
-
307
-	// regarder si le champ est deja dans une jointure existante
308
-	// sinon, si il y a des joitures explicites, la construire
309
-	if (
310
-		!($t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]))
311
-		&& $boucles[$idb]->jointures_explicites
312
-	) {
313
-		// [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!!
314
-		// fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites
315
-		// mais est-ce ce qu'on veut ?
316
-		$jointures = preg_split('/\s+/', $boucles[$idb]->jointures_explicites);
317
-		if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) {
318
-			$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]);
319
-		}
320
-	}
321
-
322
-	if ($t) {
323
-		// si on a trouvé une jointure possible, on fait comme
324
-		// si c'était une exception pour le champ demandé
325
-		return index_exception(
326
-			$boucles[$idb],
327
-			$desc,
328
-			$nom_champ,
329
-			[$t[1]['id_table'], reset($t[2])]
330
-		);
331
-	}
332
-
333
-	return ['', ''];
242
+    $r = $boucles[$idb]->type_requete;
243
+    // boucle recursive, c'est foutu...
244
+    if ($r == TYPE_RECURSIF) {
245
+        return [];
246
+    }
247
+    if (!$r) {
248
+        $joker = false; // indiquer a l'appelant
249
+        # continuer pour chercher l'erreur suivante
250
+        return ["'#" . $r . ':' . $nom_champ . "'", ''];
251
+    }
252
+
253
+    $desc = $boucles[$idb]->show;
254
+    // le nom du champ est il une exception de la table ? un alias ?
255
+    $excep = $GLOBALS['exceptions_des_tables'][$r] ?? '';
256
+    if ($excep) {
257
+        $excep = $excep[$nom_champ] ?? '';
258
+    }
259
+
260
+    // il y a un alias connu pour ce champ
261
+    if ($excep) {
262
+        $joker = false; // indiquer a l'appelant
263
+        return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
264
+    }
265
+
266
+    // le champ existe dans la table, on le prend.
267
+    if (isset($desc['field'][$nom_champ])) {
268
+        $t = $boucles[$idb]->id_table ?? '';
269
+        $joker = false; // indiquer a l'appelant
270
+        // note: dans certains cas ('valeur' d’une boucle DATA, sans id_table), retourne ['.valeur', 'valeur'] …
271
+        return ["$t.$nom_champ", $nom_champ];
272
+    }
273
+
274
+    // Tous les champs sont-ils acceptés ?
275
+    // Si oui, on retourne le champ, et on lève le flag joker
276
+    // C'est le cas des itérateurs DATA qui acceptent tout
277
+    // et testent la présence du champ à l'exécution et non à la compilation
278
+    // car ils ne connaissent pas ici leurs contenus.
279
+    if (
280
+        /*$joker AND */
281
+        isset($desc['field']['*'])
282
+    ) {
283
+        $joker = true; // indiquer a l'appelant
284
+        return [$nom_champ, $nom_champ];
285
+    }
286
+
287
+    $joker = false; // indiquer a l'appelant
288
+
289
+    // la table de jointure est explicitement indiquée (rubrique.titre)
290
+    if (preg_match('/^(.*)\.(.*)$/', $nom_champ, $r)) {
291
+        [, $_table, $_nom_champ] = $r;
292
+        if ($cle = trouver_jointure_champ($_nom_champ, $boucles[$idb], [$_table])) {
293
+            $_alias = $cle . '_' . $_nom_champ;
294
+            return index_exception(
295
+                $boucles[$idb],
296
+                $desc,
297
+                $_alias,
298
+                [$_table, $_nom_champ]
299
+            );
300
+        }
301
+        return ['', ''];
302
+    }
303
+
304
+    // pas d'alias, pas de champ, pas de joker...
305
+    // tenter via une jointure...
306
+
307
+    // regarder si le champ est deja dans une jointure existante
308
+    // sinon, si il y a des joitures explicites, la construire
309
+    if (
310
+        !($t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]))
311
+        && $boucles[$idb]->jointures_explicites
312
+    ) {
313
+        // [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!!
314
+        // fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites
315
+        // mais est-ce ce qu'on veut ?
316
+        $jointures = preg_split('/\s+/', $boucles[$idb]->jointures_explicites);
317
+        if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) {
318
+            $t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]);
319
+        }
320
+    }
321
+
322
+    if ($t) {
323
+        // si on a trouvé une jointure possible, on fait comme
324
+        // si c'était une exception pour le champ demandé
325
+        return index_exception(
326
+            $boucles[$idb],
327
+            $desc,
328
+            $nom_champ,
329
+            [$t[1]['id_table'], reset($t[2])]
330
+        );
331
+    }
332
+
333
+    return ['', ''];
334 334
 }
335 335
 
336 336
 
@@ -358,52 +358,52 @@  discard block
 block discarded – undo
358 358
  *     est une expression pour le SELECT de la boucle du style "mots.titre AS titre_mot"
359 359
  **/
360 360
 function index_exception(&$boucle, $desc, $nom_champ, $excep) {
361
-	static $trouver_table;
362
-	if (!$trouver_table) {
363
-		$trouver_table = charger_fonction('trouver_table', 'base');
364
-	}
365
-
366
-	if (is_array($excep)) {
367
-		// permettre aux plugins de gerer eux meme des jointures derogatoire ingerables
368
-		$t = null;
369
-		if (count($excep) == 3) {
370
-			$index_exception_derogatoire = array_pop($excep);
371
-			$t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
372
-		}
373
-		if ($t == null) {
374
-			[$e, $x] = $excep;  #PHP4 affecte de gauche a droite
375
-			$excep = $x;    #PHP5 de droite a gauche !
376
-			$j = $trouver_table($e, $boucle->sql_serveur);
377
-			if (!$j) {
378
-				return ['', ''];
379
-			}
380
-			$e = $j['table'];
381
-			if (!$t = array_search($e, $boucle->from)) {
382
-				$k = $j['key']['PRIMARY KEY'];
383
-				if (strpos($k, ',')) {
384
-					$l = (preg_split('/\s*,\s*/', $k));
385
-					$k = $desc['key']['PRIMARY KEY'];
386
-					if (!in_array($k, $l)) {
387
-						spip_log("jointure impossible $e " . implode(',', $l));
388
-
389
-						return ['', ''];
390
-					}
391
-				}
392
-				$k = [$boucle->id_table, [$e], $k];
393
-				fabrique_jointures($boucle, [$k]);
394
-				$t = array_search($e, $boucle->from);
395
-			}
396
-		}
397
-	} else {
398
-		$t = $boucle->id_table;
399
-	}
400
-	// demander a SQL de gerer le synonyme
401
-	// ca permet que excep soit dynamique (Cedric, 2/3/06)
402
-	if ($excep != $nom_champ) {
403
-		$excep .= ' AS ' . $nom_champ;
404
-	}
405
-
406
-	return ["$t.$excep", $nom_champ];
361
+    static $trouver_table;
362
+    if (!$trouver_table) {
363
+        $trouver_table = charger_fonction('trouver_table', 'base');
364
+    }
365
+
366
+    if (is_array($excep)) {
367
+        // permettre aux plugins de gerer eux meme des jointures derogatoire ingerables
368
+        $t = null;
369
+        if (count($excep) == 3) {
370
+            $index_exception_derogatoire = array_pop($excep);
371
+            $t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
372
+        }
373
+        if ($t == null) {
374
+            [$e, $x] = $excep;  #PHP4 affecte de gauche a droite
375
+            $excep = $x;    #PHP5 de droite a gauche !
376
+            $j = $trouver_table($e, $boucle->sql_serveur);
377
+            if (!$j) {
378
+                return ['', ''];
379
+            }
380
+            $e = $j['table'];
381
+            if (!$t = array_search($e, $boucle->from)) {
382
+                $k = $j['key']['PRIMARY KEY'];
383
+                if (strpos($k, ',')) {
384
+                    $l = (preg_split('/\s*,\s*/', $k));
385
+                    $k = $desc['key']['PRIMARY KEY'];
386
+                    if (!in_array($k, $l)) {
387
+                        spip_log("jointure impossible $e " . implode(',', $l));
388
+
389
+                        return ['', ''];
390
+                    }
391
+                }
392
+                $k = [$boucle->id_table, [$e], $k];
393
+                fabrique_jointures($boucle, [$k]);
394
+                $t = array_search($e, $boucle->from);
395
+            }
396
+        }
397
+    } else {
398
+        $t = $boucle->id_table;
399
+    }
400
+    // demander a SQL de gerer le synonyme
401
+    // ca permet que excep soit dynamique (Cedric, 2/3/06)
402
+    if ($excep != $nom_champ) {
403
+        $excep .= ' AS ' . $nom_champ;
404
+    }
405
+
406
+    return ["$t.$excep", $nom_champ];
407 407
 }
408 408
 
409 409
 /**
@@ -428,7 +428,7 @@  discard block
 block discarded – undo
428 428
  *     Code PHP pour retrouver le champ
429 429
  */
430 430
 function champ_sql($champ, $p, $defaut = null, $remonte_pile = true) {
431
-	return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile);
431
+    return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile);
432 432
 }
433 433
 
434 434
 
@@ -448,9 +448,9 @@  discard block
 block discarded – undo
448 448
  *     Code PHP pour d'exécution de la balise et de ses filtres
449 449
  **/
450 450
 function calculer_champ($p) {
451
-	$p = calculer_balise($p->nom_champ, $p);
451
+    $p = calculer_balise($p->nom_champ, $p);
452 452
 
453
-	return applique_filtres($p);
453
+    return applique_filtres($p);
454 454
 }
455 455
 
456 456
 
@@ -487,26 +487,26 @@  discard block
 block discarded – undo
487 487
  **/
488 488
 function calculer_balise(string $nom, Champ $p): Champ {
489 489
 
490
-	// S'agit-t-il d'une balise_XXXX[_dist]() ?
491
-	if ($f = charger_fonction($nom, 'balise', true)) {
492
-		$p->balise_calculee = true;
493
-		$res = $f($p);
494
-		if ($res !== null && is_object($res)) {
495
-			return $res;
496
-		}
497
-	}
498
-
499
-	// Certaines des balises comportant un _ sont generiques
500
-	if ($balise_generique = chercher_balise_generique($nom)) {
501
-		$res = $balise_generique['fonction_generique']($p);
502
-		if ($res !== null && is_object($res)) {
503
-			return $res;
504
-		}
505
-	}
506
-
507
-	$f = charger_fonction('DEFAUT', 'calculer_balise');
508
-
509
-	return $f($nom, $p);
490
+    // S'agit-t-il d'une balise_XXXX[_dist]() ?
491
+    if ($f = charger_fonction($nom, 'balise', true)) {
492
+        $p->balise_calculee = true;
493
+        $res = $f($p);
494
+        if ($res !== null && is_object($res)) {
495
+            return $res;
496
+        }
497
+    }
498
+
499
+    // Certaines des balises comportant un _ sont generiques
500
+    if ($balise_generique = chercher_balise_generique($nom)) {
501
+        $res = $balise_generique['fonction_generique']($p);
502
+        if ($res !== null && is_object($res)) {
503
+            return $res;
504
+        }
505
+    }
506
+
507
+    $f = charger_fonction('DEFAUT', 'calculer_balise');
508
+
509
+    return $f($nom, $p);
510 510
 }
511 511
 
512 512
 
@@ -534,33 +534,33 @@  discard block
 block discarded – undo
534 534
  **/
535 535
 function calculer_balise_DEFAUT_dist($nom, $p) {
536 536
 
537
-	// ca pourrait etre un champ SQL homonyme,
538
-	$p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
539
-
540
-	// compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
541
-	// il faut recracher {...} quand ce n'est finalement pas des args
542
-	if ($p->fonctions && !$p->fonctions[0][0] && $p->fonctions[0][1]) {
543
-		$code = addslashes($p->fonctions[0][1]);
544
-		$p->code .= " . '$code'";
545
-	}
546
-
547
-	// ne pas passer le filtre securite sur les id_xxx
548
-	if (str_starts_with($nom, 'ID_')) {
549
-		$p->interdire_scripts = false;
550
-	}
551
-
552
-	// Compatibilite ascendante avec les couleurs html (#FEFEFE) :
553
-	// SI le champ SQL n'est pas trouve
554
-	// ET si la balise a une forme de couleur
555
-	// ET s'il n'y a ni filtre ni etoile
556
-	// ALORS retourner la couleur.
557
-	// Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)]
558
-	if (preg_match('/^[A-F]{1,6}$/i', $nom) && !$p->etoile && !$p->fonctions) {
559
-		$p->code = "'#$nom'";
560
-		$p->interdire_scripts = false;
561
-	}
562
-
563
-	return $p;
537
+    // ca pourrait etre un champ SQL homonyme,
538
+    $p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
539
+
540
+    // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
541
+    // il faut recracher {...} quand ce n'est finalement pas des args
542
+    if ($p->fonctions && !$p->fonctions[0][0] && $p->fonctions[0][1]) {
543
+        $code = addslashes($p->fonctions[0][1]);
544
+        $p->code .= " . '$code'";
545
+    }
546
+
547
+    // ne pas passer le filtre securite sur les id_xxx
548
+    if (str_starts_with($nom, 'ID_')) {
549
+        $p->interdire_scripts = false;
550
+    }
551
+
552
+    // Compatibilite ascendante avec les couleurs html (#FEFEFE) :
553
+    // SI le champ SQL n'est pas trouve
554
+    // ET si la balise a une forme de couleur
555
+    // ET s'il n'y a ni filtre ni etoile
556
+    // ALORS retourner la couleur.
557
+    // Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)]
558
+    if (preg_match('/^[A-F]{1,6}$/i', $nom) && !$p->etoile && !$p->fonctions) {
559
+        $p->code = "'#$nom'";
560
+        $p->interdire_scripts = false;
561
+    }
562
+
563
+    return $p;
564 564
 }
565 565
 
566 566
 
@@ -608,52 +608,52 @@  discard block
 block discarded – undo
608 608
  **/
609 609
 function calculer_balise_dynamique($p, $nom, $l, $supp = []) {
610 610
 
611
-	if (!balise_distante_interdite($p)) {
612
-		$p->code = "''";
613
-
614
-		return $p;
615
-	}
616
-	// compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
617
-	// il faut recracher {...} quand ce n'est finalement pas des args
618
-	if ($p->fonctions && !$p->fonctions[0][0] && $p->fonctions[0][1]) {
619
-		$p->fonctions = [];
620
-	}
621
-
622
-	if ($p->param && ($c = $p->param[0])) {
623
-		// liste d'arguments commence toujours par la chaine vide
624
-		array_shift($c);
625
-		// construire la liste d'arguments comme pour un filtre
626
-		$param = compose_filtres_args($p, $c, ',');
627
-	} else {
628
-		$param = '';
629
-	}
630
-	$collecte = collecter_balise_dynamique($l, $p, $nom);
631
-
632
-	$dans_un_modele = false;
633
-	if (
634
-		!empty($p->descr['sourcefile']) && ($f = $p->descr['sourcefile']) && basename(dirname($f)) === 'modeles'
635
-	) {
636
-		$dans_un_modele = true;
637
-	}
638
-
639
-	// un modele est toujours inséré en texte dans son contenant
640
-	// donc si on est dans le public avec un cache on va perdre le dynamisme
641
-	// et on risque de mettre en cache les valeurs pre-remplies du formulaire
642
-	// on passe donc par une fonction proxy qui si besoin va collecter les arguments
643
-	// et injecter le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction
644
-	// (dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave))
645
-	$p->code = sprintf(
646
-		$dans_un_modele ? CODE_EXECUTER_BALISE_MODELE : CODE_EXECUTER_BALISE,
647
-		$nom,
648
-		implode(',', $collecte),
649
-		($collecte ? $param : substr($param, 1)), # virer la virgule
650
-		memoriser_contexte_compil($p),
651
-		($supp ? ', ' . implode(',', $supp) : (''))
652
-	);
653
-
654
-	$p->interdire_scripts = false;
655
-
656
-	return $p;
611
+    if (!balise_distante_interdite($p)) {
612
+        $p->code = "''";
613
+
614
+        return $p;
615
+    }
616
+    // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
617
+    // il faut recracher {...} quand ce n'est finalement pas des args
618
+    if ($p->fonctions && !$p->fonctions[0][0] && $p->fonctions[0][1]) {
619
+        $p->fonctions = [];
620
+    }
621
+
622
+    if ($p->param && ($c = $p->param[0])) {
623
+        // liste d'arguments commence toujours par la chaine vide
624
+        array_shift($c);
625
+        // construire la liste d'arguments comme pour un filtre
626
+        $param = compose_filtres_args($p, $c, ',');
627
+    } else {
628
+        $param = '';
629
+    }
630
+    $collecte = collecter_balise_dynamique($l, $p, $nom);
631
+
632
+    $dans_un_modele = false;
633
+    if (
634
+        !empty($p->descr['sourcefile']) && ($f = $p->descr['sourcefile']) && basename(dirname($f)) === 'modeles'
635
+    ) {
636
+        $dans_un_modele = true;
637
+    }
638
+
639
+    // un modele est toujours inséré en texte dans son contenant
640
+    // donc si on est dans le public avec un cache on va perdre le dynamisme
641
+    // et on risque de mettre en cache les valeurs pre-remplies du formulaire
642
+    // on passe donc par une fonction proxy qui si besoin va collecter les arguments
643
+    // et injecter le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction
644
+    // (dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave))
645
+    $p->code = sprintf(
646
+        $dans_un_modele ? CODE_EXECUTER_BALISE_MODELE : CODE_EXECUTER_BALISE,
647
+        $nom,
648
+        implode(',', $collecte),
649
+        ($collecte ? $param : substr($param, 1)), # virer la virgule
650
+        memoriser_contexte_compil($p),
651
+        ($supp ? ', ' . implode(',', $supp) : (''))
652
+    );
653
+
654
+    $p->interdire_scripts = false;
655
+
656
+    return $p;
657 657
 }
658 658
 
659 659
 
@@ -683,17 +683,17 @@  discard block
 block discarded – undo
683 683
  *     Liste des codes PHP d'éxecution des balises collectées
684 684
  **/
685 685
 function collecter_balise_dynamique(array $l, Champ &$p, string $nom): array {
686
-	$args = [];
687
-	foreach ($l as $c) {
688
-		if ($c === null) {
689
-			$args[] = 'null';
690
-		} else {
691
-			$x = calculer_balise($c, $p);
692
-			$args[] = $x->code;
693
-		}
694
-	}
695
-
696
-	return $args;
686
+    $args = [];
687
+    foreach ($l as $c) {
688
+        if ($c === null) {
689
+            $args[] = 'null';
690
+        } else {
691
+            $x = calculer_balise($c, $p);
692
+            $args[] = $x->code;
693
+        }
694
+    }
695
+
696
+    return $args;
697 697
 }
698 698
 
699 699
 
@@ -708,19 +708,19 @@  discard block
 block discarded – undo
708 708
  *     Nom de la connexion
709 709
  **/
710 710
 function trouver_nom_serveur_distant($p) {
711
-	$nom = $p->id_boucle;
712
-	if (
713
-		$nom && isset($p->boucles[$nom])
714
-	) {
715
-		$s = $p->boucles[$nom]->sql_serveur;
716
-		if (
717
-			strlen($s) && strlen($serveur = strtolower($s)) && !in_array($serveur, $GLOBALS['exception_des_connect'])
718
-		) {
719
-			return $serveur;
720
-		}
721
-	}
722
-
723
-	return '';
711
+    $nom = $p->id_boucle;
712
+    if (
713
+        $nom && isset($p->boucles[$nom])
714
+    ) {
715
+        $s = $p->boucles[$nom]->sql_serveur;
716
+        if (
717
+            strlen($s) && strlen($serveur = strtolower($s)) && !in_array($serveur, $GLOBALS['exception_des_connect'])
718
+        ) {
719
+            return $serveur;
720
+        }
721
+    }
722
+
723
+    return '';
724 724
 }
725 725
 
726 726
 
@@ -744,15 +744,15 @@  discard block
 block discarded – undo
744 744
  *     - false : La balise est interdite car le serveur est distant
745 745
  **/
746 746
 function balise_distante_interdite($p) {
747
-	$nom = $p->id_boucle;
747
+    $nom = $p->id_boucle;
748 748
 
749
-	if ($nom && trouver_nom_serveur_distant($p)) {
750
-		spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
749
+    if ($nom && trouver_nom_serveur_distant($p)) {
750
+        spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
751 751
 
752
-		return false;
753
-	}
752
+        return false;
753
+    }
754 754
 
755
-	return true;
755
+    return true;
756 756
 }
757 757
 
758 758
 
@@ -762,75 +762,75 @@  discard block
 block discarded – undo
762 762
 //
763 763
 function champs_traitements($p) {
764 764
 
765
-	if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) {
766
-		$ps = $GLOBALS['table_des_traitements'][$p->nom_champ];
767
-	} else {
768
-		// quand on utilise un traitement catch-all *
769
-		// celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
770
-		// leur propre securite
771
-		$ps = $p->balise_calculee ? false : $GLOBALS['table_des_traitements']['*'];
772
-	}
773
-
774
-	if (is_array($ps)) {
775
-		// Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
776
-		$idb = index_boucle($p);
777
-		// si le champ a ete trouve dans une boucle parente sa source est renseignee ici
778
-		if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) {
779
-			$idb = $p->boucles[$idb]->index_champ[$p->nom_champ];
780
-		}
781
-
782
-		// mais on peut aussi etre hors boucle. Se mefier.
783
-		$type_requete = $p->boucles[$idb]->type_requete ?? false;
784
-		$table_sql = $p->boucles[$idb]->show['table_sql'] ?? false;
785
-
786
-		// bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
787
-		if ($type_requete && isset($GLOBALS['table_des_tables'][$type_requete])) {
788
-			$type_alias = $type_requete;
789
-			$type_requete = $GLOBALS['table_des_tables'][$type_requete];
790
-		} else {
791
-			$type_alias = false;
792
-		}
793
-
794
-		// le traitement peut n'etre defini que pour une table en particulier "spip_articles"
795
-		if ($table_sql && isset($ps[$table_sql])) {
796
-			$ps = $ps[$table_sql];
797
-		} // ou pour une boucle en particulier "DATA","articles"
798
-		elseif ($type_requete && isset($ps[$type_requete])) {
799
-			$ps = $ps[$type_requete];
800
-		} // ou pour une boucle utilisant un alias ("hierarchie")
801
-		elseif ($type_alias && isset($ps[$type_alias])) {
802
-			$ps = $ps[$type_alias];
803
-		} // ou pour indifféremment quelle que soit la boucle
804
-		elseif (isset($ps[0])) {
805
-			$ps = $ps[0];
806
-		} else {
807
-			$ps = false;
808
-		}
809
-	}
810
-
811
-	if (!$ps) {
812
-		return $p->code;
813
-	}
814
-
815
-	// Si une boucle DOCUMENTS{doublons} est presente dans le squelette,
816
-	// ou si in INCLURE contient {doublons}
817
-	// on insere une fonction de remplissage du tableau des doublons
818
-	// dans les filtres propre() ou typo()
819
-	// (qui traitent les raccourcis <docXX> referencant les docs)
820
-
821
-	if (
822
-		isset($p->descr['documents'])
823
-		&& $p->descr['documents']
824
-		&& (str_contains($ps, 'propre') || str_contains($ps, 'typo'))
825
-	) {
826
-		$ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
827
-	}
828
-
829
-	// La protection des champs par |safehtml est assuree par les extensions
830
-	// dans la declaration des traitements des champs sensibles
831
-
832
-	// Remplacer enfin le placeholder %s par le vrai code de la balise
833
-	return str_replace('%s', $p->code, $ps);
765
+    if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) {
766
+        $ps = $GLOBALS['table_des_traitements'][$p->nom_champ];
767
+    } else {
768
+        // quand on utilise un traitement catch-all *
769
+        // celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
770
+        // leur propre securite
771
+        $ps = $p->balise_calculee ? false : $GLOBALS['table_des_traitements']['*'];
772
+    }
773
+
774
+    if (is_array($ps)) {
775
+        // Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
776
+        $idb = index_boucle($p);
777
+        // si le champ a ete trouve dans une boucle parente sa source est renseignee ici
778
+        if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) {
779
+            $idb = $p->boucles[$idb]->index_champ[$p->nom_champ];
780
+        }
781
+
782
+        // mais on peut aussi etre hors boucle. Se mefier.
783
+        $type_requete = $p->boucles[$idb]->type_requete ?? false;
784
+        $table_sql = $p->boucles[$idb]->show['table_sql'] ?? false;
785
+
786
+        // bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
787
+        if ($type_requete && isset($GLOBALS['table_des_tables'][$type_requete])) {
788
+            $type_alias = $type_requete;
789
+            $type_requete = $GLOBALS['table_des_tables'][$type_requete];
790
+        } else {
791
+            $type_alias = false;
792
+        }
793
+
794
+        // le traitement peut n'etre defini que pour une table en particulier "spip_articles"
795
+        if ($table_sql && isset($ps[$table_sql])) {
796
+            $ps = $ps[$table_sql];
797
+        } // ou pour une boucle en particulier "DATA","articles"
798
+        elseif ($type_requete && isset($ps[$type_requete])) {
799
+            $ps = $ps[$type_requete];
800
+        } // ou pour une boucle utilisant un alias ("hierarchie")
801
+        elseif ($type_alias && isset($ps[$type_alias])) {
802
+            $ps = $ps[$type_alias];
803
+        } // ou pour indifféremment quelle que soit la boucle
804
+        elseif (isset($ps[0])) {
805
+            $ps = $ps[0];
806
+        } else {
807
+            $ps = false;
808
+        }
809
+    }
810
+
811
+    if (!$ps) {
812
+        return $p->code;
813
+    }
814
+
815
+    // Si une boucle DOCUMENTS{doublons} est presente dans le squelette,
816
+    // ou si in INCLURE contient {doublons}
817
+    // on insere une fonction de remplissage du tableau des doublons
818
+    // dans les filtres propre() ou typo()
819
+    // (qui traitent les raccourcis <docXX> referencant les docs)
820
+
821
+    if (
822
+        isset($p->descr['documents'])
823
+        && $p->descr['documents']
824
+        && (str_contains($ps, 'propre') || str_contains($ps, 'typo'))
825
+    ) {
826
+        $ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
827
+    }
828
+
829
+    // La protection des champs par |safehtml est assuree par les extensions
830
+    // dans la declaration des traitements des champs sensibles
831
+
832
+    // Remplacer enfin le placeholder %s par le vrai code de la balise
833
+    return str_replace('%s', $p->code, $ps);
834 834
 }
835 835
 
836 836
 
@@ -842,95 +842,95 @@  discard block
 block discarded – undo
842 842
 //
843 843
 function applique_filtres($p) {
844 844
 
845
-	// Traitements standards (cf. supra)
846
-	$code = $p->etoile == '' ? champs_traitements($p) : $p->code;
845
+    // Traitements standards (cf. supra)
846
+    $code = $p->etoile == '' ? champs_traitements($p) : $p->code;
847 847
 
848
-	// Appliquer les filtres perso
849
-	if ($p->param) {
850
-		$code = compose_filtres($p, $code);
851
-	}
848
+    // Appliquer les filtres perso
849
+    if ($p->param) {
850
+        $code = compose_filtres($p, $code);
851
+    }
852 852
 
853
-	// S'il y a un lien avec la session, ajouter un code qui levera
854
-	// un drapeau dans la structure d'invalidation $Cache
855
-	if (isset($p->descr['session'])) {
856
-		$code = "invalideur_session(\$Cache, $code)";
857
-	}
853
+    // S'il y a un lien avec la session, ajouter un code qui levera
854
+    // un drapeau dans la structure d'invalidation $Cache
855
+    if (isset($p->descr['session'])) {
856
+        $code = "invalideur_session(\$Cache, $code)";
857
+    }
858 858
 
859
-	return sandbox_composer_interdire_scripts($code, $p);
859
+    return sandbox_composer_interdire_scripts($code, $p);
860 860
 }
861 861
 
862 862
 // Cf. function pipeline dans ecrire/inc_utils.php
863 863
 function compose_filtres(&$p, $code) {
864 864
 
865
-	$image_miette = false;
866
-	foreach ($p->param as $filtre) {
867
-		$fonc = array_shift($filtre);
868
-		if (!$fonc) {
869
-			continue;
870
-		} // normalement qu'au premier tour.
871
-		$is_filtre_image = (str_starts_with($fonc, 'image_') && $fonc != 'image_graver');
872
-		if ($image_miette && !$is_filtre_image) {
873
-			// il faut graver maintenant car apres le filtre en cours
874
-			// on est pas sur d'avoir encore le nom du fichier dans le pipe
875
-			$code = "filtrer('image_graver', $code)";
876
-			$image_miette = false;
877
-		}
878
-
879
-		// recuperer les arguments du filtre,
880
-		// a separer par "," ou ":" dans le cas du filtre "?{a,b}"
881
-		$countfiltre = is_countable($filtre) ? count($filtre) : 0;
882
-		if ($fonc !== '?') {
883
-			$sep = ',';
884
-		} else {
885
-			$sep = ':';
886
-			// |?{a,b} *doit* avoir exactement 2 arguments ; on les force
887
-			if ($countfiltre != 2) {
888
-				$filtre = [$filtre[0] ?? '', $filtre[1] ?? ''];
889
-				$countfiltre = 2;
890
-			}
891
-		}
892
-		$arglist = compose_filtres_args($p, $filtre, $sep);
893
-		$logique = filtre_logique($fonc, $code, substr($arglist, 1));
894
-		if ($logique) {
895
-			$code = $logique;
896
-		} else {
897
-			$code = sandbox_composer_filtre($fonc, $code, $arglist, $p, $countfiltre);
898
-			if ($is_filtre_image) {
899
-				$image_miette = true;
900
-			}
901
-		}
902
-	}
903
-	// ramasser les images intermediaires inutiles et graver l'image finale
904
-	if ($image_miette) {
905
-		$code = "filtrer('image_graver',$code)";
906
-	}
907
-
908
-	return $code;
865
+    $image_miette = false;
866
+    foreach ($p->param as $filtre) {
867
+        $fonc = array_shift($filtre);
868
+        if (!$fonc) {
869
+            continue;
870
+        } // normalement qu'au premier tour.
871
+        $is_filtre_image = (str_starts_with($fonc, 'image_') && $fonc != 'image_graver');
872
+        if ($image_miette && !$is_filtre_image) {
873
+            // il faut graver maintenant car apres le filtre en cours
874
+            // on est pas sur d'avoir encore le nom du fichier dans le pipe
875
+            $code = "filtrer('image_graver', $code)";
876
+            $image_miette = false;
877
+        }
878
+
879
+        // recuperer les arguments du filtre,
880
+        // a separer par "," ou ":" dans le cas du filtre "?{a,b}"
881
+        $countfiltre = is_countable($filtre) ? count($filtre) : 0;
882
+        if ($fonc !== '?') {
883
+            $sep = ',';
884
+        } else {
885
+            $sep = ':';
886
+            // |?{a,b} *doit* avoir exactement 2 arguments ; on les force
887
+            if ($countfiltre != 2) {
888
+                $filtre = [$filtre[0] ?? '', $filtre[1] ?? ''];
889
+                $countfiltre = 2;
890
+            }
891
+        }
892
+        $arglist = compose_filtres_args($p, $filtre, $sep);
893
+        $logique = filtre_logique($fonc, $code, substr($arglist, 1));
894
+        if ($logique) {
895
+            $code = $logique;
896
+        } else {
897
+            $code = sandbox_composer_filtre($fonc, $code, $arglist, $p, $countfiltre);
898
+            if ($is_filtre_image) {
899
+                $image_miette = true;
900
+            }
901
+        }
902
+    }
903
+    // ramasser les images intermediaires inutiles et graver l'image finale
904
+    if ($image_miette) {
905
+        $code = "filtrer('image_graver',$code)";
906
+    }
907
+
908
+    return $code;
909 909
 }
910 910
 
911 911
 // Filtres et,ou,oui,non,sinon,xou,xor,and,or,not,yes
912 912
 // et comparateurs
913 913
 function filtre_logique($fonc, $code, $arg) {
914
-	return match (true) {
915
-		in_array($fonc, $GLOBALS['table_criteres_infixes']) => "($code $fonc $arg)",
916
-		$fonc == 'and' || $fonc == 'et' => "((($code) AND ($arg)) ?' ' :'')",
917
-		$fonc == 'or' || $fonc == 'ou' => "((($code) OR ($arg)) ?' ' :'')",
918
-		$fonc == 'xor' || $fonc == 'xou' => "((($code) XOR ($arg)) ?' ' :'')",
919
-		$fonc == 'sinon' => "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)",
920
-		$fonc == 'not' || $fonc == 'non' => "(($code) ?'' :' ')",
921
-		$fonc == 'yes' || $fonc == 'oui' => "(($code) ?' ' :'')",
922
-		default => '',
923
-	};
914
+    return match (true) {
915
+        in_array($fonc, $GLOBALS['table_criteres_infixes']) => "($code $fonc $arg)",
916
+        $fonc == 'and' || $fonc == 'et' => "((($code) AND ($arg)) ?' ' :'')",
917
+        $fonc == 'or' || $fonc == 'ou' => "((($code) OR ($arg)) ?' ' :'')",
918
+        $fonc == 'xor' || $fonc == 'xou' => "((($code) XOR ($arg)) ?' ' :'')",
919
+        $fonc == 'sinon' => "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)",
920
+        $fonc == 'not' || $fonc == 'non' => "(($code) ?'' :' ')",
921
+        $fonc == 'yes' || $fonc == 'oui' => "(($code) ?' ' :'')",
922
+        default => '',
923
+    };
924 924
 }
925 925
 
926 926
 function compose_filtres_args($p, $args, $sep) {
927
-	$arglist = '';
928
-	foreach ($args as $arg) {
929
-		$arglist .= $sep .
930
-			calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
931
-	}
927
+    $arglist = '';
928
+    foreach ($args as $arg) {
929
+        $arglist .= $sep .
930
+            calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
931
+    }
932 932
 
933
-	return $arglist;
933
+    return $arglist;
934 934
 }
935 935
 
936 936
 
@@ -948,15 +948,15 @@  discard block
 block discarded – undo
948 948
  **/
949 949
 function calculer_argument_precedent($idb, $nom_champ, &$boucles, $defaut = null) {
950 950
 
951
-	// si recursif, forcer l'extraction du champ SQL mais ignorer le code
952
-	if ($boucles[$idb]->externe) {
953
-		index_pile($idb, $nom_champ, $boucles, '', $defaut);
954
-		// retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
955
-		// on ignore le defaut fourni dans ce cas
956
-		$defaut = "(\$Pile[\$SP]['$nom_champ'] ?? null)";
957
-	}
951
+    // si recursif, forcer l'extraction du champ SQL mais ignorer le code
952
+    if ($boucles[$idb]->externe) {
953
+        index_pile($idb, $nom_champ, $boucles, '', $defaut);
954
+        // retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
955
+        // on ignore le defaut fourni dans ce cas
956
+        $defaut = "(\$Pile[\$SP]['$nom_champ'] ?? null)";
957
+    }
958 958
 
959
-	return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut);
959
+    return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut);
960 960
 }
961 961
 
962 962
 //
@@ -970,30 +970,30 @@  discard block
 block discarded – undo
970 970
 //
971 971
 
972 972
 function rindex_pile($p, $champ, $motif) {
973
-	$n = 0;
974
-	$b = $p->id_boucle;
975
-	$p->code = '';
976
-	while ($b != '') {
977
-		foreach ($p->boucles[$b]->criteres as $critere) {
978
-			if ($critere->op == $motif) {
979
-				$p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
980
-					"]['$champ']";
981
-				$b = '';
982
-				break 2;
983
-			}
984
-		}
985
-		$n++;
986
-		$b = $p->boucles[$b]->id_parent;
987
-	}
988
-
989
-	// si on est hors d'une boucle de {recherche}, cette balise est vide
990
-	if (!$p->code) {
991
-		$p->code = "''";
992
-	}
993
-
994
-	$p->interdire_scripts = false;
995
-
996
-	return $p;
973
+    $n = 0;
974
+    $b = $p->id_boucle;
975
+    $p->code = '';
976
+    while ($b != '') {
977
+        foreach ($p->boucles[$b]->criteres as $critere) {
978
+            if ($critere->op == $motif) {
979
+                $p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
980
+                    "]['$champ']";
981
+                $b = '';
982
+                break 2;
983
+            }
984
+        }
985
+        $n++;
986
+        $b = $p->boucles[$b]->id_parent;
987
+    }
988
+
989
+    // si on est hors d'une boucle de {recherche}, cette balise est vide
990
+    if (!$p->code) {
991
+        $p->code = "''";
992
+    }
993
+
994
+    $p->interdire_scripts = false;
995
+
996
+    return $p;
997 997
 }
998 998
 
999 999
 /**
@@ -1003,7 +1003,7 @@  discard block
 block discarded – undo
1003 1003
  * @return string Nom de la balise, avec indication de boucle explicite si présent.
1004 1004
  */
1005 1005
 function zbug_presenter_champ($p, $champ = '') {
1006
-	$balise = $champ ?: $p->nom_champ;
1007
-	$explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
1008
-	return "#{$explicite}{$balise}";
1006
+    $balise = $champ ?: $p->nom_champ;
1007
+    $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
1008
+    return "#{$explicite}{$balise}";
1009 1009
 }
Please login to merge, or discard this patch.
ecrire/public/normaliser.php 1 patch
Indentation   +148 added lines, -148 removed lines patch added patch discarded remove patch
@@ -13,7 +13,7 @@  discard block
 block discarded – undo
13 13
 \***************************************************************************/
14 14
 
15 15
 if (!defined('_ECRIRE_INC_VERSION')) {
16
-	return;
16
+    return;
17 17
 }
18 18
 
19 19
 // Les fonctions de ce fichier sont appelees en certains points
@@ -27,182 +27,182 @@  discard block
 block discarded – undo
27 27
 // -> https://www.spip.net/fr_article901.html
28 28
 
29 29
 function phraser_vieux_logos(&$p) {
30
-	$args = $p->param[0][0] ? [''] : array_shift($p->param);
31
-
32
-	foreach ($p->param as $couple) {
33
-		$nom = trim((string) $couple[0]);
34
-		if ($nom == '') {
35
-			array_shift($p->param);
36
-			break;
37
-		}
38
-		$r = phraser_logo_faux_filtres($nom);
39
-		if ($r === 0) {
40
-			$c = new Texte();
41
-			$c->texte = $nom;
42
-			$args[] = [$c];
43
-			array_shift($p->param);
44
-			spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
45
-		} elseif ($r === 2) {
46
-			$p->etoile = '**';
47
-			array_shift($p->param);
48
-			spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
49
-		} elseif ($r === 1) {
50
-			array_shift($p->param);
51
-			$p->etoile = '*';
52
-			spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
53
-		} elseif (preg_match('/^' . NOM_DE_CHAMP . '(.*)$/sS', $nom, $m)) {
54
-			$champ = new Champ();
55
-			$champ->nom_boucle = $m[2];
56
-			$champ->nom_champ = $m[3];
57
-			$champ->etoile = $m[5];
58
-			$champ = [$champ];
59
-			if ($m[6]) {
60
-				$r = new Texte();
61
-				$r->texte = $m[6];
62
-				$champ[] = $r;
63
-			}
64
-			$args[] = $champ;
65
-			array_shift($p->param);
66
-			spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
67
-		} // le cas else est la seule incompatibilite
68
-	}
69
-	array_unshift($p->param, $args);
30
+    $args = $p->param[0][0] ? [''] : array_shift($p->param);
31
+
32
+    foreach ($p->param as $couple) {
33
+        $nom = trim((string) $couple[0]);
34
+        if ($nom == '') {
35
+            array_shift($p->param);
36
+            break;
37
+        }
38
+        $r = phraser_logo_faux_filtres($nom);
39
+        if ($r === 0) {
40
+            $c = new Texte();
41
+            $c->texte = $nom;
42
+            $args[] = [$c];
43
+            array_shift($p->param);
44
+            spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
45
+        } elseif ($r === 2) {
46
+            $p->etoile = '**';
47
+            array_shift($p->param);
48
+            spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
49
+        } elseif ($r === 1) {
50
+            array_shift($p->param);
51
+            $p->etoile = '*';
52
+            spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
53
+        } elseif (preg_match('/^' . NOM_DE_CHAMP . '(.*)$/sS', $nom, $m)) {
54
+            $champ = new Champ();
55
+            $champ->nom_boucle = $m[2];
56
+            $champ->nom_champ = $m[3];
57
+            $champ->etoile = $m[5];
58
+            $champ = [$champ];
59
+            if ($m[6]) {
60
+                $r = new Texte();
61
+                $r->texte = $m[6];
62
+                $champ[] = $r;
63
+            }
64
+            $args[] = $champ;
65
+            array_shift($p->param);
66
+            spip_log("filtre de logo obsolete $nom", 'vieilles_defs');
67
+        } // le cas else est la seule incompatibilite
68
+    }
69
+    array_unshift($p->param, $args);
70 70
 }
71 71
 
72 72
 
73 73
 function phraser_logo_faux_filtres($nom) {
74
-	return match ($nom) {
75
-		'top', 'left', 'right', 'center', 'bottom' => 0,
76
-		'lien' => 1,
77
-		'fichier' => 2,
78
-		default => $nom,
79
-	};
74
+    return match ($nom) {
75
+        'top', 'left', 'right', 'center', 'bottom' => 0,
76
+        'lien' => 1,
77
+        'fichier' => 2,
78
+        default => $nom,
79
+    };
80 80
 }
81 81
 
82 82
 
83 83
 // La balise embed_document est a present le modele emb
84 84
 
85 85
 function phraser_vieux_emb(&$p) {
86
-	if (!is_array($p->param)) {
87
-		$p->param = [];
88
-	}
89
-
90
-	// Produire le premier argument {emb}
91
-	$texte = new Texte();
92
-	$texte->texte = 'emb';
93
-	$param = ['', [$texte]];
94
-
95
-	// Transformer les filtres en arguments
96
-	$paramCount = is_countable($p->param) ? count($p->param) : 0;
97
-	for ($i = 0; $i < $paramCount; $i++) {
98
-		if ($p->param[$i][0]) {
99
-			if (!strstr((string) $p->param[$i][0], '=')) {
100
-				break;
101
-			}# on a rencontre un vrai filtre, c'est fini
102
-			$texte = new Texte();
103
-			$texte->texte = $p->param[$i][0];
104
-			$param[] = [$texte];
105
-		}
106
-		array_shift($p->param);
107
-	}
108
-	array_unshift($p->param, $param);
109
-	spip_log('balise EMBED_DOCUMENT obsolete', 'vieilles_defs');
110
-	$p->nom_champ = 'MODELE';
86
+    if (!is_array($p->param)) {
87
+        $p->param = [];
88
+    }
89
+
90
+    // Produire le premier argument {emb}
91
+    $texte = new Texte();
92
+    $texte->texte = 'emb';
93
+    $param = ['', [$texte]];
94
+
95
+    // Transformer les filtres en arguments
96
+    $paramCount = is_countable($p->param) ? count($p->param) : 0;
97
+    for ($i = 0; $i < $paramCount; $i++) {
98
+        if ($p->param[$i][0]) {
99
+            if (!strstr((string) $p->param[$i][0], '=')) {
100
+                break;
101
+            }# on a rencontre un vrai filtre, c'est fini
102
+            $texte = new Texte();
103
+            $texte->texte = $p->param[$i][0];
104
+            $param[] = [$texte];
105
+        }
106
+        array_shift($p->param);
107
+    }
108
+    array_unshift($p->param, $param);
109
+    spip_log('balise EMBED_DOCUMENT obsolete', 'vieilles_defs');
110
+    $p->nom_champ = 'MODELE';
111 111
 }
112 112
 
113 113
 // Vieux formulaire de recherch
114 114
 
115 115
 function phraser_vieux_recherche($p) {
116
-	if ($p->param[0][0]) {
117
-		$c = new Texte();
118
-		$c->texte = $p->param[0][0];
119
-		$p->param[0][1] = [$c];
120
-		$p->param[0][0] = '';
121
-		$p->fonctions = [];
122
-		spip_log('FORMULAIRE_RECHERCHE avec filtre ' . $c->texte, 'vieilles_defs');
123
-	}
116
+    if ($p->param[0][0]) {
117
+        $c = new Texte();
118
+        $c->texte = $p->param[0][0];
119
+        $p->param[0][1] = [$c];
120
+        $p->param[0][0] = '';
121
+        $p->fonctions = [];
122
+        spip_log('FORMULAIRE_RECHERCHE avec filtre ' . $c->texte, 'vieilles_defs');
123
+    }
124 124
 }
125 125
 
126 126
 // Gerer la notation [(#EXPOSER|on,off)]
127 127
 function phraser_vieux_exposer($p) {
128
-	if ($a = $p->fonctions) {
129
-		preg_match('#([^,]*)(,(.*))?#', (string) $a[0][0], $regs);
130
-		$args = [];
131
-		if ($regs[1]) {
132
-			$a = new Texte();
133
-			$a->texte = $regs[1];
134
-			$args = ['', [$a]];
135
-			if ($regs[3]) {
136
-				$a = new Texte();
137
-				$a->texte = $regs[3];
138
-				$args[] = [$a];
139
-			}
140
-		}
141
-		$p->param[0] = $args;
142
-		$p->fonctions = [];
143
-		$p->nom_champ = 'EXPOSE';
144
-	}
128
+    if ($a = $p->fonctions) {
129
+        preg_match('#([^,]*)(,(.*))?#', (string) $a[0][0], $regs);
130
+        $args = [];
131
+        if ($regs[1]) {
132
+            $a = new Texte();
133
+            $a->texte = $regs[1];
134
+            $args = ['', [$a]];
135
+            if ($regs[3]) {
136
+                $a = new Texte();
137
+                $a->texte = $regs[3];
138
+                $args[] = [$a];
139
+            }
140
+        }
141
+        $p->param[0] = $args;
142
+        $p->fonctions = [];
143
+        $p->nom_champ = 'EXPOSE';
144
+    }
145 145
 }
146 146
 
147 147
 function phraser_vieux_modele($p) {
148
- normaliser_args_inclumodel($p);
148
+    normaliser_args_inclumodel($p);
149 149
 }
150 150
 
151 151
 function phraser_vieux_inclu($p) {
152
- normaliser_args_inclumodel($p);
152
+    normaliser_args_inclumodel($p);
153 153
 }
154 154
 
155 155
 function normaliser_args_inclumodel($p) {
156
-	$params = $p->param;
157
-	if (!$params) {
158
-		return;
159
-	}
160
-	$args = $params[0];
161
-	if ($args[0]) {
162
-		return;
163
-	} // filtre immediat
164
-	array_shift($p->param);
165
-	foreach ($p->param as $l) {
166
-		if (!array_shift($l)) {
167
-			$args = array_merge($args, $l);
168
-			array_shift($p->param);
169
-		} else {
170
-			break;
171
-		} // filtre
172
-	}
173
-	array_unshift($p->param, $args);
156
+    $params = $p->param;
157
+    if (!$params) {
158
+        return;
159
+    }
160
+    $args = $params[0];
161
+    if ($args[0]) {
162
+        return;
163
+    } // filtre immediat
164
+    array_shift($p->param);
165
+    foreach ($p->param as $l) {
166
+        if (!array_shift($l)) {
167
+            $args = array_merge($args, $l);
168
+            array_shift($p->param);
169
+        } else {
170
+            break;
171
+        } // filtre
172
+    }
173
+    array_unshift($p->param, $args);
174 174
 }
175 175
 
176 176
 function normaliser_inclure($champ) {
177
-	normaliser_args_inclumodel($champ);
178
-	$l = $champ->param[0];
179
-	if (is_array($l) && !$l[0]) {
180
-		foreach ($l as $k => $p) {
181
-			if ($p && $p[0]->type == 'texte' && !strpos((string) $p[0]->texte, '=')) {
182
-				$p[0]->texte = trim((string) $p[0]->texte);
183
-			}
184
-		}
185
-		foreach ($l as $k => $p) {
186
-			if (
187
-				!$p || $p[0]->type != 'texte'
188
-				|| !preg_match('/^fond\s*=\s*(.*)$/', (string) $p[0]->texte, $r)
189
-			) {
190
-				continue;
191
-			}
192
-
193
-			if ($r[1]) {
194
-				$p[0]->texte = $r[1];
195
-			} else {
196
-				unset($p[0]);
197
-			}
198
-			$champ->texte = $p;
199
-			unset($champ->param[0][$k]);
200
-			if ((is_countable($champ->param[0]) ? count($champ->param[0]) : 0) == 1) {
201
-				array_shift($champ->param);
202
-			}
203
-
204
-			return;
205
-		}
206
-	}
207
-	spip_log('inclure sans fond ni fichier');
177
+    normaliser_args_inclumodel($champ);
178
+    $l = $champ->param[0];
179
+    if (is_array($l) && !$l[0]) {
180
+        foreach ($l as $k => $p) {
181
+            if ($p && $p[0]->type == 'texte' && !strpos((string) $p[0]->texte, '=')) {
182
+                $p[0]->texte = trim((string) $p[0]->texte);
183
+            }
184
+        }
185
+        foreach ($l as $k => $p) {
186
+            if (
187
+                !$p || $p[0]->type != 'texte'
188
+                || !preg_match('/^fond\s*=\s*(.*)$/', (string) $p[0]->texte, $r)
189
+            ) {
190
+                continue;
191
+            }
192
+
193
+            if ($r[1]) {
194
+                $p[0]->texte = $r[1];
195
+            } else {
196
+                unset($p[0]);
197
+            }
198
+            $champ->texte = $p;
199
+            unset($champ->param[0][$k]);
200
+            if ((is_countable($champ->param[0]) ? count($champ->param[0]) : 0) == 1) {
201
+                array_shift($champ->param);
202
+            }
203
+
204
+            return;
205
+        }
206
+    }
207
+    spip_log('inclure sans fond ni fichier');
208 208
 }
Please login to merge, or discard this patch.
ecrire/public/admin.php 2 patches
Indentation   +28 added lines, -28 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  **/
17 17
 
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -33,37 +33,37 @@  discard block
 block discarded – undo
33 33
  *     Contenu HTML, avec boutons d'administrations et sa CSS
34 34
  **/
35 35
 function affiche_boutons_admin($contenu) {
36
-	include_spip('inc/filtres');
36
+    include_spip('inc/filtres');
37 37
 
38
-	// Inserer le css d'admin
39
-	$css = "<link rel='stylesheet' href='" . url_absolue(direction_css(find_in_path('spip_admin.css')))
40
-		. "' type='text/css' />\n";
41
-	if ($f = find_in_path('spip_admin_perso.css')) {
42
-		$css .= "<link rel='stylesheet' href='"
43
-			. url_absolue(direction_css($f)) . "' type='text/css' />\n";
44
-	}
38
+    // Inserer le css d'admin
39
+    $css = "<link rel='stylesheet' href='" . url_absolue(direction_css(find_in_path('spip_admin.css')))
40
+        . "' type='text/css' />\n";
41
+    if ($f = find_in_path('spip_admin_perso.css')) {
42
+        $css .= "<link rel='stylesheet' href='"
43
+            . url_absolue(direction_css($f)) . "' type='text/css' />\n";
44
+    }
45 45
 
46
-	if (
47
-		!($pos = stripos($contenu, '</head>'))
48
-		&& !($pos = stripos($contenu, '<body>'))
49
-	) {
50
-		$pos = 0;
51
-	}
52
-	$contenu = substr_replace($contenu, $css, $pos, 0);
46
+    if (
47
+        !($pos = stripos($contenu, '</head>'))
48
+        && !($pos = stripos($contenu, '<body>'))
49
+    ) {
50
+        $pos = 0;
51
+    }
52
+    $contenu = substr_replace($contenu, $css, $pos, 0);
53 53
 
54 54
 
55
-	// Inserer la balise #FORMULAIRE_ADMIN, en float
56
-	$boutons_admin = inclure_balise_dynamique(
57
-		balise_FORMULAIRE_ADMIN_dyn('spip-admin-float'),
58
-		false
59
-	);
60
-	if (
61
-		!($pos = strripos($contenu, '</body>'))
62
-		&& !($pos = strripos($contenu, '</html>'))
63
-	) {
64
-		$pos = strlen($contenu);
65
-	}
55
+    // Inserer la balise #FORMULAIRE_ADMIN, en float
56
+    $boutons_admin = inclure_balise_dynamique(
57
+        balise_FORMULAIRE_ADMIN_dyn('spip-admin-float'),
58
+        false
59
+    );
60
+    if (
61
+        !($pos = strripos($contenu, '</body>'))
62
+        && !($pos = strripos($contenu, '</html>'))
63
+    ) {
64
+        $pos = strlen($contenu);
65
+    }
66 66
 
67 67
 
68
-	return substr_replace($contenu, (string) $boutons_admin, $pos, 0);
68
+    return substr_replace($contenu, (string) $boutons_admin, $pos, 0);
69 69
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -36,11 +36,11 @@
 block discarded – undo
36 36
 	include_spip('inc/filtres');
37 37
 
38 38
 	// Inserer le css d'admin
39
-	$css = "<link rel='stylesheet' href='" . url_absolue(direction_css(find_in_path('spip_admin.css')))
39
+	$css = "<link rel='stylesheet' href='".url_absolue(direction_css(find_in_path('spip_admin.css')))
40 40
 		. "' type='text/css' />\n";
41 41
 	if ($f = find_in_path('spip_admin_perso.css')) {
42 42
 		$css .= "<link rel='stylesheet' href='"
43
-			. url_absolue(direction_css($f)) . "' type='text/css' />\n";
43
+			. url_absolue(direction_css($f))."' type='text/css' />\n";
44 44
 	}
45 45
 
46 46
 	if (
Please login to merge, or discard this patch.