Completed
Push — master ( afb18e...7b1735 )
by cam
01:21
created
ecrire/public/interfaces.php 1 patch
Indentation   +780 added lines, -780 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -34,35 +34,35 @@  discard block
 block discarded – undo
34 34
  * @package SPIP\Core\Compilateur\AST
35 35
  */
36 36
 class Contexte {
37
-	/**
38
-	 * Description du squelette
39
-	 *
40
-	 * Sert pour la gestion d'erreur et la production de code dependant du contexte
41
-	 *
42
-	 * Peut contenir les index :
43
-	 *
44
-	 * - nom : Nom du fichier de cache
45
-	 * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
46
-	 * - sourcefile : Chemin du squelette
47
-	 * - squelette : Code du squelette
48
-	 * - id_mere : Identifiant de la boucle parente
49
-	 * - documents : Pour embed et img dans les textes
50
-	 * - session : Pour un cache sessionné par auteur
51
-	 * - niv : Niveau de tabulation
52
-	 */
53
-	public array $descr = [];
54
-
55
-	/** Identifiant de la boucle */
56
-	public string $id_boucle = '';
57
-
58
-	/** Numéro de ligne dans le code source du squelette */
59
-	public int $ligne = 0;
60
-
61
-	/** Langue d'exécution */
62
-	public string $lang = '';
63
-
64
-	/** Résultat de la compilation: toujours une expression PHP */
65
-	public string $code = '';
37
+    /**
38
+     * Description du squelette
39
+     *
40
+     * Sert pour la gestion d'erreur et la production de code dependant du contexte
41
+     *
42
+     * Peut contenir les index :
43
+     *
44
+     * - nom : Nom du fichier de cache
45
+     * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
46
+     * - sourcefile : Chemin du squelette
47
+     * - squelette : Code du squelette
48
+     * - id_mere : Identifiant de la boucle parente
49
+     * - documents : Pour embed et img dans les textes
50
+     * - session : Pour un cache sessionné par auteur
51
+     * - niv : Niveau de tabulation
52
+     */
53
+    public array $descr = [];
54
+
55
+    /** Identifiant de la boucle */
56
+    public string $id_boucle = '';
57
+
58
+    /** Numéro de ligne dans le code source du squelette */
59
+    public int $ligne = 0;
60
+
61
+    /** Langue d'exécution */
62
+    public string $lang = '';
63
+
64
+    /** Résultat de la compilation: toujours une expression PHP */
65
+    public string $code = '';
66 66
 }
67 67
 
68 68
 
@@ -72,32 +72,32 @@  discard block
 block discarded – undo
72 72
  * @package SPIP\Core\Compilateur\AST
73 73
  **/
74 74
 class Texte {
75
-	/** Type de noeud */
76
-	public string $type = 'texte';
77
-
78
-	/** Le texte */
79
-	public string $texte;
80
-
81
-	/**
82
-	 * Contenu avant le texte.
83
-	 *
84
-	 * Vide ou apostrophe simple ou double si le texte en était entouré
85
-	 *
86
-	 * @var string|array
87
-	 */
88
-	public $avant = '';
89
-
90
-	/**
91
-	 * Contenu après le texte.
92
-	 *
93
-	 * Vide ou apostrophe simple ou double si le texte en était entouré
94
-	 *
95
-	 * @var string|array
96
-	 */
97
-	public $apres = '';
98
-
99
-	/** Numéro de ligne dans le code source du squelette */
100
-	public int $ligne = 0;
75
+    /** Type de noeud */
76
+    public string $type = 'texte';
77
+
78
+    /** Le texte */
79
+    public string $texte;
80
+
81
+    /**
82
+     * Contenu avant le texte.
83
+     *
84
+     * Vide ou apostrophe simple ou double si le texte en était entouré
85
+     *
86
+     * @var string|array
87
+     */
88
+    public $avant = '';
89
+
90
+    /**
91
+     * Contenu après le texte.
92
+     *
93
+     * Vide ou apostrophe simple ou double si le texte en était entouré
94
+     *
95
+     * @var string|array
96
+     */
97
+    public $apres = '';
98
+
99
+    /** Numéro de ligne dans le code source du squelette */
100
+    public int $ligne = 0;
101 101
 }
102 102
 
103 103
 /**
@@ -106,65 +106,65 @@  discard block
 block discarded – undo
106 106
  * @package SPIP\Core\Compilateur\AST
107 107
  **/
108 108
 class Inclure {
109
-	/** Type de noeud */
110
-	public string $type = 'include';
111
-
112
-	/**
113
-	 * Nom d'un fichier inclu
114
-	 *
115
-	 * - Objet Texte si inclusion d'un autre squelette
116
-	 * - chaîne si inclusion d'un fichier PHP directement
117
-	 *
118
-	 * @var string|Texte
119
-	 */
120
-	public $texte;
121
-
122
-	/**
123
-	 * Inutilisé, propriété générique de l'AST
124
-	 *
125
-	 * @var string|array
126
-	 */
127
-	public $avant = '';
128
-
129
-	/**
130
-	 * Inutilisé, propriété générique de l'AST
131
-	 *
132
-	 * @var string|array
133
-	 */
134
-	public $apres = '';
135
-
136
-	/** Numéro de ligne dans le code source du squelette */
137
-	public int $ligne = 0;
138
-
139
-	/**
140
-	 * Valeurs des paramètres
141
-	 *
142
-	 * FIXME: type unique.
143
-	 * @var false|array
144
-	 *     - false: erreur de syntaxe
145
-	 */
146
-	public $param = [];
147
-
148
-	/** Source des filtres (compatibilité) (?) */
149
-	public array $fonctions = [];
150
-
151
-	/**
152
-	 * Description du squelette
153
-	 *
154
-	 * Sert pour la gestion d'erreur et la production de code dependant du contexte
155
-	 *
156
-	 * Peut contenir les index :
157
-	 *
158
-	 * - nom : Nom du fichier de cache
159
-	 * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
160
-	 * - sourcefile : Chemin du squelette
161
-	 * - squelette : Code du squelette
162
-	 * - id_mere : Identifiant de la boucle parente
163
-	 * - documents : Pour embed et img dans les textes
164
-	 * - session : Pour un cache sessionné par auteur
165
-	 * - niv : Niveau de tabulation
166
-	 */
167
-	public array $descr = [];
109
+    /** Type de noeud */
110
+    public string $type = 'include';
111
+
112
+    /**
113
+     * Nom d'un fichier inclu
114
+     *
115
+     * - Objet Texte si inclusion d'un autre squelette
116
+     * - chaîne si inclusion d'un fichier PHP directement
117
+     *
118
+     * @var string|Texte
119
+     */
120
+    public $texte;
121
+
122
+    /**
123
+     * Inutilisé, propriété générique de l'AST
124
+     *
125
+     * @var string|array
126
+     */
127
+    public $avant = '';
128
+
129
+    /**
130
+     * Inutilisé, propriété générique de l'AST
131
+     *
132
+     * @var string|array
133
+     */
134
+    public $apres = '';
135
+
136
+    /** Numéro de ligne dans le code source du squelette */
137
+    public int $ligne = 0;
138
+
139
+    /**
140
+     * Valeurs des paramètres
141
+     *
142
+     * FIXME: type unique.
143
+     * @var false|array
144
+     *     - false: erreur de syntaxe
145
+     */
146
+    public $param = [];
147
+
148
+    /** Source des filtres (compatibilité) (?) */
149
+    public array $fonctions = [];
150
+
151
+    /**
152
+     * Description du squelette
153
+     *
154
+     * Sert pour la gestion d'erreur et la production de code dependant du contexte
155
+     *
156
+     * Peut contenir les index :
157
+     *
158
+     * - nom : Nom du fichier de cache
159
+     * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
160
+     * - sourcefile : Chemin du squelette
161
+     * - squelette : Code du squelette
162
+     * - id_mere : Identifiant de la boucle parente
163
+     * - documents : Pour embed et img dans les textes
164
+     * - session : Pour un cache sessionné par auteur
165
+     * - niv : Niveau de tabulation
166
+     */
167
+    public array $descr = [];
168 168
 }
169 169
 
170 170
 
@@ -174,369 +174,369 @@  discard block
 block discarded – undo
174 174
  * @package SPIP\Core\Compilateur\AST
175 175
  **/
176 176
 class Boucle {
177
-	/** Type de noeud */
178
-	public string $type = 'boucle';
179
-
180
-	/** Identifiant de la boucle */
181
-	public string $id_boucle;
182
-
183
-	/** Identifiant de la boucle parente */
184
-	public string $id_parent = '';
185
-
186
-	/** Un nom explicite qui peut être affecté manuellement à certaines boucles générées */
187
-	public string $nom = '';
188
-
189
-	/**
190
-	 * Partie avant toujours affichee
191
-	 *
192
-	 * @var string|array
193
-	 */
194
-	public $preaff = '';
195
-
196
-	/**
197
-	 * Partie optionnelle avant
198
-	 *
199
-	 * @var string|array
200
-	 */
201
-	public $avant = '';
202
-
203
-	/**
204
-	 * Pour chaque élément
205
-	 *
206
-	 * @var string|array
207
-	 */
208
-	public $milieu = '';
209
-
210
-	/**
211
-	 * Partie optionnelle après
212
-	 *
213
-	 * @var string|array
214
-	 */
215
-	public $apres = '';
216
-
217
-	/**
218
-	 * Partie alternative, si pas de résultat dans la boucle
219
-	 *
220
-	 * @var string|array
221
-	 */
222
-	public $altern = '';
223
-
224
-	/**
225
-	 * Partie apres toujours affichee
226
-	 *
227
-	 * @var string|array
228
-	 */
229
-	public $postaff = '';
230
-
231
-
232
-	/**
233
-	 * La boucle doit-elle sélectionner la langue ?
234
-	 *
235
-	 * Valeurs : '', 'oui', 'non'
236
-	 */
237
-	public string $lang_select = '';
238
-
239
-	/**
240
-	 * Alias de table d'application de la requête ou nom complet de la table SQL
241
-	 *
242
-	 * FIXME: un seul typage (string ?)
243
-	 *
244
-	 * @var string|false|null
245
-	 */
246
-	public $type_requete = null;
247
-
248
-	/**
249
-	 * La table est elle optionnelle ?
250
-	 *
251
-	 * Si oui, aucune erreur ne sera générée si la table demandée n'est pas présente
252
-	 */
253
-	public bool $table_optionnelle = false;
254
-
255
-	/**
256
-	 * Nom du fichier de connexion
257
-	 */
258
-	public string $sql_serveur = '';
259
-
260
-	/**
261
-	 * Paramètres de la boucle
262
-	 *
263
-	 * Description des paramètres passés à la boucle, qui servent ensuite
264
-	 * au calcul des critères
265
-	 *
266
-	 * FIXME: type unique.
267
-	 * @var false|array
268
-	 *     - false: erreur de syntaxe
269
-	 */
270
-	public $param = [];
271
-
272
-	/**
273
-	 * Critères de la boucle
274
-	 *
275
-	 * FIXME: type array unique.
276
-	 *
277
-	 * @var string|Critere[]
278
-	 * - string: phrasage (code brut). Il reste si erreur de critère
279
-	 * - array: analyse correcte des critères...
280
-	 */
281
-	public $criteres = [];
282
-
283
-	/**
284
-	 * Textes insérés entre 2 éléments de boucle (critère inter)
285
-	 *
286
-	 * @var string[]
287
-	 */
288
-	public array $separateur = [];
289
-
290
-	/**
291
-	 * Liste des jointures possibles avec cette table
292
-	 *
293
-	 * Les jointures par défaut de la table sont complétées en priorité
294
-	 * des jointures déclarées explicitement sur la boucle
295
-	 *
296
-	 * @see base_trouver_table_dist()
297
-	 */
298
-	public array $jointures = [];
299
-
300
-	/**
301
-	 * Jointures explicites avec cette table
302
-	 *
303
-	 * Ces jointures sont utilisées en priorité par rapport aux jointures
304
-	 * normales possibles pour retrouver les colonnes demandées extérieures
305
-	 * à la boucle.
306
-	 *
307
-	 * @var string|bool
308
-	 */
309
-	public $jointures_explicites = false;
310
-
311
-	/**
312
-	 * Nom de la variable PHP stockant le noms de doublons utilisés "$doublons_index"
313
-	 */
314
-	public string $doublons = '';
315
-
316
-	/**
317
-	 * Code PHP ajouté au début de chaque itération de boucle.
318
-	 *
319
-	 * Utilisé entre autre par les critères {pagination}, {n-a,b}, {a/b}...
320
-	 */
321
-	public string $partie = '';
322
-
323
-	/**
324
-	 * Nombre de divisions de la boucle, d'éléments à afficher,
325
-	 * ou de soustractions d'éléments à faire
326
-	 *
327
-	 * Dans les critères limitant le nombre d'éléments affichés
328
-	 * {a,b}, {a,n-b}, {a/b}, {pagination b}, b est affecté à total_parties.
329
-	 */
330
-	public string $total_parties = '';
331
-
332
-	/**
333
-	 * Code PHP ajouté avant l'itération de boucle.
334
-	 *
335
-	 * Utilisé entre autre par les critères {pagination}, {a,b}, {a/b}
336
-	 * pour initialiser les variables de début et de fin d'itération.
337
-	 */
338
-	public string $mode_partie = '';
339
-
340
-	/**
341
-	 * Identifiant d'une boucle qui appelle celle-ci de manière récursive
342
-	 *
343
-	 * Si une boucle est appelée de manière récursive quelque part par
344
-	 * une autre boucle comme <BOUCLE_rec(boucle_identifiant) />, cette
345
-	 * boucle (identifiant) reçoit dans cette propriété l'identifiant
346
-	 * de l'appelant (rec)
347
-	 */
348
-	public string $externe = '';
349
-
350
-	// champs pour la construction de la requete SQL
351
-
352
-	/**
353
-	 * Liste des champs à récupérer par la boucle
354
-	 *
355
-	 * Expression 'table.nom_champ' ou calculée 'nom_champ AS x'
356
-	 *
357
-	 * @var string[]
358
-	 */
359
-	public array $select = [];
360
-
361
-	/**
362
-	 * Liste des alias / tables SQL utilisées dans la boucle
363
-	 *
364
-	 * L'index est un identifiant (xx dans spip_xx assez souvent) qui servira
365
-	 * d'alias au nom de la table ; la valeur est le nom de la table SQL désirée.
366
-	 *
367
-	 * L'index 0 peut définir le type de sources de données de l'itérateur DATA
368
-	 *
369
-	 * @var string[]
370
-	 */
371
-	public array $from = [];
372
-
373
-	/**
374
-	 * Liste des alias / type de jointures utilisées dans la boucle
375
-	 *
376
-	 * L'index est le nom d'alias (comme pour la propriété $from), et la valeur
377
-	 * un type de jointure parmi 'INNER', 'LEFT', 'RIGHT', 'OUTER'.
378
-	 *
379
-	 * Lorsque le type n'est pas déclaré pour un alias, c'est 'INNER'
380
-	 * qui sera utilisé par défaut (créant donc un INNER JOIN).
381
-	 *
382
-	 * @var string[]
383
-	 */
384
-	public array $from_type = [];
385
-
386
-	/**
387
-	 * Liste des conditions WHERE de la boucle
388
-	 *
389
-	 * Permet de restreindre les éléments retournés par une boucle
390
-	 * en fonctions des conditions transmises dans ce tableau.
391
-	 *
392
-	 * Ce tableau peut avoir plusieurs niveaux de profondeur.
393
-	 *
394
-	 * Les éléments du premier niveau sont reliés par des AND, donc
395
-	 * chaque élément ajouté directement au where par
396
-	 * $boucle->where[] = array(...) ou $boucle->where[] = "'expression'"
397
-	 * est une condition AND en plus.
398
-	 *
399
-	 * Par contre, lorsqu'on indique un tableau, il peut décrire des relations
400
-	 * internes différentes. Soit $expr un tableau d'expressions quelconques de 3 valeurs :
401
-	 * $expr = array(operateur, val1, val2)
402
-	 *
403
-	 * Ces 3 valeurs sont des expressions PHP. L'index 0 désigne l'opérateur
404
-	 * à réaliser tel que :
405
-	 *
406
-	 * - "'='" , "'>='", "'<'", "'IN'", "'REGEXP'", "'LIKE'", ... :
407
-	 *    val1 et val2 sont des champs et valeurs à utiliser dans la comparaison
408
-	 *    suivant cet ordre : "val1 operateur val2".
409
-	 *    Exemple : $boucle->where[] = array("'='", "'articles.statut'", "'\"publie\"'");
410
-	 * - "'AND'", "'OR'", "'NOT'" :
411
-	 *    dans ce cas val1 et val2 sont également des expressions
412
-	 *    de comparaison complètes, et peuvent être eux-même des tableaux comme $expr
413
-	 *    Exemples :
414
-	 *    $boucle->where[] = array("'OR'", $expr1, $expr2);
415
-	 *    $boucle->where[] = array("'NOT'", $expr); // val2 n'existe pas avec NOT
416
-	 *
417
-	 * D'autres noms sont possibles pour l'opérateur (le nombre de valeurs diffère) :
418
-	 * - "'SELF'", "'SUBSELECT'" : indiquent des sous requêtes
419
-	 * - "'?'" : indique une condition à faire évaluer (val1 ? val2 : val3)
420
-	 */
421
-	public array $where = [];
422
-
423
-	public array $join = [];
424
-	public array $having = [];
425
-	public $limit = '';
426
-	public array $group = [];
427
-	public array $order = [];
428
-	public array $default_order = [];
429
-	public string $date = 'date';
430
-	public string $hash = '';
431
-	public $in = '';
432
-	public bool $sous_requete = false;
433
-
434
-	/**
435
-	 * Code PHP qui sera ajouté en tout début de la fonction de boucle
436
-	 *
437
-	 * Il sert à insérer le code calculant une hierarchie
438
-	 */
439
-	public string $hierarchie = '';
440
-
441
-	// champs pour la construction du corps PHP
442
-
443
-	/**
444
-	 * Description des sources de données de la boucle
445
-	 *
446
-	 * Description des données de la boucle issu de trouver_table
447
-	 * dans le cadre de l'itérateur SQL et contenant au moins l'index 'field'.
448
-	 *
449
-	 * @see base_trouver_table_dist()
450
-	 */
451
-	public array $show = [];
452
-
453
-	/**
454
-	 * Nom de la table SQL principale de la boucle, sans son préfixe
455
-	 */
456
-	public string $id_table = '';
457
-
458
-	/**
459
-	 * Nom de la clé primaire de la table SQL principale de la boucle
460
-	 */
461
-	public string $primary = '';
462
-
463
-	/**
464
-	 * Code PHP compilé de la boucle
465
-	 *
466
-	 * FIXME: un seul type (string ?)
467
-	 *
468
-	 * - false: boucle fautive ?
469
-	 *
470
-	 * @var string|false
471
-	 */
472
-	public $return = '';
473
-
474
-	public $numrows = false;
475
-	public $cptrows = false;
476
-
477
-	/**
478
-	 * Description du squelette
479
-	 *
480
-	 * Sert pour la gestion d'erreur et la production de code dependant du contexte
481
-	 *
482
-	 * Peut contenir les index :
483
-	 *
484
-	 * - nom : Nom du fichier de cache
485
-	 * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
486
-	 * - sourcefile : Chemin du squelette
487
-	 * - squelette : Code du squelette
488
-	 * - id_mere : Identifiant de la boucle parente
489
-	 * - documents : Pour embed et img dans les textes
490
-	 * - session : Pour un cache sessionné par auteur
491
-	 * - niv : Niveau de tabulation
492
-	 */
493
-	public array $descr = [];
494
-
495
-	/** Numéro de ligne dans le code source du squelette */
496
-	public int $ligne = 0;
497
-
498
-
499
-	/**
500
-	 * table pour stocker les modificateurs de boucle tels que tout, plat ...,
501
-	 * utilisable par les plugins egalement
502
-	 *
503
-	 * @var array<string, mixed>
504
-	 */
505
-	public array $modificateur = [];
506
-
507
-	/**
508
-	 * Type d'itérateur utilisé pour cette boucle
509
-	 *
510
-	 * - 'SQL' dans le cadre d'une boucle sur une table SQL
511
-	 * - 'DATA' pour l'itérateur DATA, ...
512
-	 *
513
-	 * @var string
514
-	 */
515
-	public string $iterateur = ''; // type d'iterateur
516
-
517
-	/**
518
-	 * @var array $debug Textes qui seront insérés dans l’entête de boucle du mode debug
519
-	 */
520
-	public array $debug = [];
521
-
522
-	/**
523
-	 * Index de la boucle dont le champ présent dans cette boucle est originaire,
524
-	 * notamment si le champ a été trouve dans une boucle parente
525
-	 *
526
-	 * Tableau nom du champ => index de boucle
527
-	*/
528
-	public array $index_champ = [];
529
-
530
-	/** Résultat de la compilation (?) (sert au débusqueur) */
531
-	public string $code = '';
532
-
533
-	/** Source des filtres (compatibilité) (?) */
534
-	public array $fonctions = [];
535
-
536
-	// obsoletes, conserves provisoirement pour compatibilite
537
-	public $tout = false;
538
-	public $plat = false;
539
-	public $lien = false;
177
+    /** Type de noeud */
178
+    public string $type = 'boucle';
179
+
180
+    /** Identifiant de la boucle */
181
+    public string $id_boucle;
182
+
183
+    /** Identifiant de la boucle parente */
184
+    public string $id_parent = '';
185
+
186
+    /** Un nom explicite qui peut être affecté manuellement à certaines boucles générées */
187
+    public string $nom = '';
188
+
189
+    /**
190
+     * Partie avant toujours affichee
191
+     *
192
+     * @var string|array
193
+     */
194
+    public $preaff = '';
195
+
196
+    /**
197
+     * Partie optionnelle avant
198
+     *
199
+     * @var string|array
200
+     */
201
+    public $avant = '';
202
+
203
+    /**
204
+     * Pour chaque élément
205
+     *
206
+     * @var string|array
207
+     */
208
+    public $milieu = '';
209
+
210
+    /**
211
+     * Partie optionnelle après
212
+     *
213
+     * @var string|array
214
+     */
215
+    public $apres = '';
216
+
217
+    /**
218
+     * Partie alternative, si pas de résultat dans la boucle
219
+     *
220
+     * @var string|array
221
+     */
222
+    public $altern = '';
223
+
224
+    /**
225
+     * Partie apres toujours affichee
226
+     *
227
+     * @var string|array
228
+     */
229
+    public $postaff = '';
230
+
231
+
232
+    /**
233
+     * La boucle doit-elle sélectionner la langue ?
234
+     *
235
+     * Valeurs : '', 'oui', 'non'
236
+     */
237
+    public string $lang_select = '';
238
+
239
+    /**
240
+     * Alias de table d'application de la requête ou nom complet de la table SQL
241
+     *
242
+     * FIXME: un seul typage (string ?)
243
+     *
244
+     * @var string|false|null
245
+     */
246
+    public $type_requete = null;
247
+
248
+    /**
249
+     * La table est elle optionnelle ?
250
+     *
251
+     * Si oui, aucune erreur ne sera générée si la table demandée n'est pas présente
252
+     */
253
+    public bool $table_optionnelle = false;
254
+
255
+    /**
256
+     * Nom du fichier de connexion
257
+     */
258
+    public string $sql_serveur = '';
259
+
260
+    /**
261
+     * Paramètres de la boucle
262
+     *
263
+     * Description des paramètres passés à la boucle, qui servent ensuite
264
+     * au calcul des critères
265
+     *
266
+     * FIXME: type unique.
267
+     * @var false|array
268
+     *     - false: erreur de syntaxe
269
+     */
270
+    public $param = [];
271
+
272
+    /**
273
+     * Critères de la boucle
274
+     *
275
+     * FIXME: type array unique.
276
+     *
277
+     * @var string|Critere[]
278
+     * - string: phrasage (code brut). Il reste si erreur de critère
279
+     * - array: analyse correcte des critères...
280
+     */
281
+    public $criteres = [];
282
+
283
+    /**
284
+     * Textes insérés entre 2 éléments de boucle (critère inter)
285
+     *
286
+     * @var string[]
287
+     */
288
+    public array $separateur = [];
289
+
290
+    /**
291
+     * Liste des jointures possibles avec cette table
292
+     *
293
+     * Les jointures par défaut de la table sont complétées en priorité
294
+     * des jointures déclarées explicitement sur la boucle
295
+     *
296
+     * @see base_trouver_table_dist()
297
+     */
298
+    public array $jointures = [];
299
+
300
+    /**
301
+     * Jointures explicites avec cette table
302
+     *
303
+     * Ces jointures sont utilisées en priorité par rapport aux jointures
304
+     * normales possibles pour retrouver les colonnes demandées extérieures
305
+     * à la boucle.
306
+     *
307
+     * @var string|bool
308
+     */
309
+    public $jointures_explicites = false;
310
+
311
+    /**
312
+     * Nom de la variable PHP stockant le noms de doublons utilisés "$doublons_index"
313
+     */
314
+    public string $doublons = '';
315
+
316
+    /**
317
+     * Code PHP ajouté au début de chaque itération de boucle.
318
+     *
319
+     * Utilisé entre autre par les critères {pagination}, {n-a,b}, {a/b}...
320
+     */
321
+    public string $partie = '';
322
+
323
+    /**
324
+     * Nombre de divisions de la boucle, d'éléments à afficher,
325
+     * ou de soustractions d'éléments à faire
326
+     *
327
+     * Dans les critères limitant le nombre d'éléments affichés
328
+     * {a,b}, {a,n-b}, {a/b}, {pagination b}, b est affecté à total_parties.
329
+     */
330
+    public string $total_parties = '';
331
+
332
+    /**
333
+     * Code PHP ajouté avant l'itération de boucle.
334
+     *
335
+     * Utilisé entre autre par les critères {pagination}, {a,b}, {a/b}
336
+     * pour initialiser les variables de début et de fin d'itération.
337
+     */
338
+    public string $mode_partie = '';
339
+
340
+    /**
341
+     * Identifiant d'une boucle qui appelle celle-ci de manière récursive
342
+     *
343
+     * Si une boucle est appelée de manière récursive quelque part par
344
+     * une autre boucle comme <BOUCLE_rec(boucle_identifiant) />, cette
345
+     * boucle (identifiant) reçoit dans cette propriété l'identifiant
346
+     * de l'appelant (rec)
347
+     */
348
+    public string $externe = '';
349
+
350
+    // champs pour la construction de la requete SQL
351
+
352
+    /**
353
+     * Liste des champs à récupérer par la boucle
354
+     *
355
+     * Expression 'table.nom_champ' ou calculée 'nom_champ AS x'
356
+     *
357
+     * @var string[]
358
+     */
359
+    public array $select = [];
360
+
361
+    /**
362
+     * Liste des alias / tables SQL utilisées dans la boucle
363
+     *
364
+     * L'index est un identifiant (xx dans spip_xx assez souvent) qui servira
365
+     * d'alias au nom de la table ; la valeur est le nom de la table SQL désirée.
366
+     *
367
+     * L'index 0 peut définir le type de sources de données de l'itérateur DATA
368
+     *
369
+     * @var string[]
370
+     */
371
+    public array $from = [];
372
+
373
+    /**
374
+     * Liste des alias / type de jointures utilisées dans la boucle
375
+     *
376
+     * L'index est le nom d'alias (comme pour la propriété $from), et la valeur
377
+     * un type de jointure parmi 'INNER', 'LEFT', 'RIGHT', 'OUTER'.
378
+     *
379
+     * Lorsque le type n'est pas déclaré pour un alias, c'est 'INNER'
380
+     * qui sera utilisé par défaut (créant donc un INNER JOIN).
381
+     *
382
+     * @var string[]
383
+     */
384
+    public array $from_type = [];
385
+
386
+    /**
387
+     * Liste des conditions WHERE de la boucle
388
+     *
389
+     * Permet de restreindre les éléments retournés par une boucle
390
+     * en fonctions des conditions transmises dans ce tableau.
391
+     *
392
+     * Ce tableau peut avoir plusieurs niveaux de profondeur.
393
+     *
394
+     * Les éléments du premier niveau sont reliés par des AND, donc
395
+     * chaque élément ajouté directement au where par
396
+     * $boucle->where[] = array(...) ou $boucle->where[] = "'expression'"
397
+     * est une condition AND en plus.
398
+     *
399
+     * Par contre, lorsqu'on indique un tableau, il peut décrire des relations
400
+     * internes différentes. Soit $expr un tableau d'expressions quelconques de 3 valeurs :
401
+     * $expr = array(operateur, val1, val2)
402
+     *
403
+     * Ces 3 valeurs sont des expressions PHP. L'index 0 désigne l'opérateur
404
+     * à réaliser tel que :
405
+     *
406
+     * - "'='" , "'>='", "'<'", "'IN'", "'REGEXP'", "'LIKE'", ... :
407
+     *    val1 et val2 sont des champs et valeurs à utiliser dans la comparaison
408
+     *    suivant cet ordre : "val1 operateur val2".
409
+     *    Exemple : $boucle->where[] = array("'='", "'articles.statut'", "'\"publie\"'");
410
+     * - "'AND'", "'OR'", "'NOT'" :
411
+     *    dans ce cas val1 et val2 sont également des expressions
412
+     *    de comparaison complètes, et peuvent être eux-même des tableaux comme $expr
413
+     *    Exemples :
414
+     *    $boucle->where[] = array("'OR'", $expr1, $expr2);
415
+     *    $boucle->where[] = array("'NOT'", $expr); // val2 n'existe pas avec NOT
416
+     *
417
+     * D'autres noms sont possibles pour l'opérateur (le nombre de valeurs diffère) :
418
+     * - "'SELF'", "'SUBSELECT'" : indiquent des sous requêtes
419
+     * - "'?'" : indique une condition à faire évaluer (val1 ? val2 : val3)
420
+     */
421
+    public array $where = [];
422
+
423
+    public array $join = [];
424
+    public array $having = [];
425
+    public $limit = '';
426
+    public array $group = [];
427
+    public array $order = [];
428
+    public array $default_order = [];
429
+    public string $date = 'date';
430
+    public string $hash = '';
431
+    public $in = '';
432
+    public bool $sous_requete = false;
433
+
434
+    /**
435
+     * Code PHP qui sera ajouté en tout début de la fonction de boucle
436
+     *
437
+     * Il sert à insérer le code calculant une hierarchie
438
+     */
439
+    public string $hierarchie = '';
440
+
441
+    // champs pour la construction du corps PHP
442
+
443
+    /**
444
+     * Description des sources de données de la boucle
445
+     *
446
+     * Description des données de la boucle issu de trouver_table
447
+     * dans le cadre de l'itérateur SQL et contenant au moins l'index 'field'.
448
+     *
449
+     * @see base_trouver_table_dist()
450
+     */
451
+    public array $show = [];
452
+
453
+    /**
454
+     * Nom de la table SQL principale de la boucle, sans son préfixe
455
+     */
456
+    public string $id_table = '';
457
+
458
+    /**
459
+     * Nom de la clé primaire de la table SQL principale de la boucle
460
+     */
461
+    public string $primary = '';
462
+
463
+    /**
464
+     * Code PHP compilé de la boucle
465
+     *
466
+     * FIXME: un seul type (string ?)
467
+     *
468
+     * - false: boucle fautive ?
469
+     *
470
+     * @var string|false
471
+     */
472
+    public $return = '';
473
+
474
+    public $numrows = false;
475
+    public $cptrows = false;
476
+
477
+    /**
478
+     * Description du squelette
479
+     *
480
+     * Sert pour la gestion d'erreur et la production de code dependant du contexte
481
+     *
482
+     * Peut contenir les index :
483
+     *
484
+     * - nom : Nom du fichier de cache
485
+     * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
486
+     * - sourcefile : Chemin du squelette
487
+     * - squelette : Code du squelette
488
+     * - id_mere : Identifiant de la boucle parente
489
+     * - documents : Pour embed et img dans les textes
490
+     * - session : Pour un cache sessionné par auteur
491
+     * - niv : Niveau de tabulation
492
+     */
493
+    public array $descr = [];
494
+
495
+    /** Numéro de ligne dans le code source du squelette */
496
+    public int $ligne = 0;
497
+
498
+
499
+    /**
500
+     * table pour stocker les modificateurs de boucle tels que tout, plat ...,
501
+     * utilisable par les plugins egalement
502
+     *
503
+     * @var array<string, mixed>
504
+     */
505
+    public array $modificateur = [];
506
+
507
+    /**
508
+     * Type d'itérateur utilisé pour cette boucle
509
+     *
510
+     * - 'SQL' dans le cadre d'une boucle sur une table SQL
511
+     * - 'DATA' pour l'itérateur DATA, ...
512
+     *
513
+     * @var string
514
+     */
515
+    public string $iterateur = ''; // type d'iterateur
516
+
517
+    /**
518
+     * @var array $debug Textes qui seront insérés dans l’entête de boucle du mode debug
519
+     */
520
+    public array $debug = [];
521
+
522
+    /**
523
+     * Index de la boucle dont le champ présent dans cette boucle est originaire,
524
+     * notamment si le champ a été trouve dans une boucle parente
525
+     *
526
+     * Tableau nom du champ => index de boucle
527
+     */
528
+    public array $index_champ = [];
529
+
530
+    /** Résultat de la compilation (?) (sert au débusqueur) */
531
+    public string $code = '';
532
+
533
+    /** Source des filtres (compatibilité) (?) */
534
+    public array $fonctions = [];
535
+
536
+    // obsoletes, conserves provisoirement pour compatibilite
537
+    public $tout = false;
538
+    public $plat = false;
539
+    public $lien = false;
540 540
 }
541 541
 
542 542
 /**
@@ -547,34 +547,34 @@  discard block
 block discarded – undo
547 547
  * @package SPIP\Core\Compilateur\AST
548 548
  **/
549 549
 class Critere {
550
-	/** Type de noeud */
551
-	public string $type = 'critere';
552
-
553
-	/** Opérateur (>, <, >=, IN, ...) */
554
-	public ?string $op;
555
-
556
-	/** Présence d'une négation (truc !op valeur) */
557
-	public bool $not = false;
558
-
559
-	/** Présence d'une exclusion (!truc op valeur) */
560
-	public string $exclus = '';
561
-
562
-	/** Présence d'une condition dans le critère (truc ?) */
563
-	public bool $cond = false;
564
-
565
-	/**
566
-	 * Paramètres du critère
567
-	 * - $param[0] : élément avant l'opérateur
568
-	 * - $param[1..n] : éléments après l'opérateur
569
-	 *
570
-	 * FIXME: type unique.
571
-	 * @var false|array
572
-	 *     - false: erreur de syntaxe
573
-	 */
574
-	public $param = [];
575
-
576
-	/** Numéro de ligne dans le code source du squelette */
577
-	public int $ligne = 0;
550
+    /** Type de noeud */
551
+    public string $type = 'critere';
552
+
553
+    /** Opérateur (>, <, >=, IN, ...) */
554
+    public ?string $op;
555
+
556
+    /** Présence d'une négation (truc !op valeur) */
557
+    public bool $not = false;
558
+
559
+    /** Présence d'une exclusion (!truc op valeur) */
560
+    public string $exclus = '';
561
+
562
+    /** Présence d'une condition dans le critère (truc ?) */
563
+    public bool $cond = false;
564
+
565
+    /**
566
+     * Paramètres du critère
567
+     * - $param[0] : élément avant l'opérateur
568
+     * - $param[1..n] : éléments après l'opérateur
569
+     *
570
+     * FIXME: type unique.
571
+     * @var false|array
572
+     *     - false: erreur de syntaxe
573
+     */
574
+    public $param = [];
575
+
576
+    /** Numéro de ligne dans le code source du squelette */
577
+    public int $ligne = 0;
578 578
 }
579 579
 
580 580
 /**
@@ -583,104 +583,104 @@  discard block
 block discarded – undo
583 583
  * @package SPIP\Core\Compilateur\AST
584 584
  **/
585 585
 class Champ {
586
-	/** Type de noeud */
587
-	public string $type = 'champ';
588
-
589
-	/** Nom du champ demandé. Exemple 'ID_ARTICLE' */
590
-	public ?string $nom_champ;
591
-
592
-	/** Identifiant de la boucle parente si explicité */
593
-	public ?string $nom_boucle = '';
594
-
595
-	/**
596
-	 * Partie optionnelle avant
597
-	 *
598
-	 * @var null|string|array
599
-	 */
600
-	public $avant;
601
-
602
-	/**
603
-	 * Partie optionnelle après
604
-	 *
605
-	 * @var null|string|array
606
-	 */
607
-	public $apres;
608
-
609
-	/**
610
-	 * Étoiles : annuler des automatismes
611
-	 *
612
-	 * - '*' annule les filtres automatiques
613
-	 * - '**' annule en plus les protections de scripts
614
-	 */
615
-	public ?string $etoile;
616
-
617
-	/**
618
-	 * Arguments et filtres explicites sur la balise
619
-	 *
620
-	 * - $param[0] contient les arguments de la balise
621
-	 * - $param[1..n] contient les filtres à appliquer à la balise
622
-	 *
623
-	 * FIXME: type unique.
624
-	 * @var false|array
625
-	 *     - false: erreur de syntaxe
626
-	 */
627
-	public $param = [];
628
-
629
-	/** Source des filtres (compatibilité) (?) */
630
-	public array $fonctions = [];
631
-
632
-	/**
633
-	 * Identifiant de la boucle
634
-	 *
635
-	 * @var string
636
-	 */
637
-	public $id_boucle = '';
638
-
639
-	/**
640
-	 * AST du squelette, liste de toutes les boucles
641
-	 *
642
-	 * @var Boucle[]
643
-	 */
644
-	public array $boucles;
645
-
646
-	/** Alias de table d'application de la requête ou nom complet de la table SQL */
647
-	public ?string $type_requete;
648
-
649
-	/** Résultat de la compilation: toujours une expression PHP */
650
-	public string $code = '';
651
-
652
-	/**
653
-	 * Interdire les scripts
654
-	 *
655
-	 * false si on est sûr de cette balise
656
-	 *
657
-	 * @see interdire_scripts()
658
-	 */
659
-	public bool $interdire_scripts = true;
660
-
661
-	/**
662
-	 * Description du squelette
663
-	 *
664
-	 * Sert pour la gestion d'erreur et la production de code dependant du contexte
665
-	 *
666
-	 * Peut contenir les index :
667
-	 *
668
-	 * - nom : Nom du fichier de cache
669
-	 * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
670
-	 * - sourcefile : Chemin du squelette
671
-	 * - squelette : Code du squelette
672
-	 * - id_mere : Identifiant de la boucle parente
673
-	 * - documents : Pour embed et img dans les textes
674
-	 * - session : Pour un cache sessionné par auteur
675
-	 * - niv : Niveau de tabulation
676
-	 */
677
-	public array $descr = [];
678
-
679
-	/** Numéro de ligne dans le code source du squelette*/
680
-	public int $ligne = 0;
681
-
682
-	/** Drapeau pour reperer les balises calculées par une fonction explicite */
683
-	public bool $balise_calculee = false;
586
+    /** Type de noeud */
587
+    public string $type = 'champ';
588
+
589
+    /** Nom du champ demandé. Exemple 'ID_ARTICLE' */
590
+    public ?string $nom_champ;
591
+
592
+    /** Identifiant de la boucle parente si explicité */
593
+    public ?string $nom_boucle = '';
594
+
595
+    /**
596
+     * Partie optionnelle avant
597
+     *
598
+     * @var null|string|array
599
+     */
600
+    public $avant;
601
+
602
+    /**
603
+     * Partie optionnelle après
604
+     *
605
+     * @var null|string|array
606
+     */
607
+    public $apres;
608
+
609
+    /**
610
+     * Étoiles : annuler des automatismes
611
+     *
612
+     * - '*' annule les filtres automatiques
613
+     * - '**' annule en plus les protections de scripts
614
+     */
615
+    public ?string $etoile;
616
+
617
+    /**
618
+     * Arguments et filtres explicites sur la balise
619
+     *
620
+     * - $param[0] contient les arguments de la balise
621
+     * - $param[1..n] contient les filtres à appliquer à la balise
622
+     *
623
+     * FIXME: type unique.
624
+     * @var false|array
625
+     *     - false: erreur de syntaxe
626
+     */
627
+    public $param = [];
628
+
629
+    /** Source des filtres (compatibilité) (?) */
630
+    public array $fonctions = [];
631
+
632
+    /**
633
+     * Identifiant de la boucle
634
+     *
635
+     * @var string
636
+     */
637
+    public $id_boucle = '';
638
+
639
+    /**
640
+     * AST du squelette, liste de toutes les boucles
641
+     *
642
+     * @var Boucle[]
643
+     */
644
+    public array $boucles;
645
+
646
+    /** Alias de table d'application de la requête ou nom complet de la table SQL */
647
+    public ?string $type_requete;
648
+
649
+    /** Résultat de la compilation: toujours une expression PHP */
650
+    public string $code = '';
651
+
652
+    /**
653
+     * Interdire les scripts
654
+     *
655
+     * false si on est sûr de cette balise
656
+     *
657
+     * @see interdire_scripts()
658
+     */
659
+    public bool $interdire_scripts = true;
660
+
661
+    /**
662
+     * Description du squelette
663
+     *
664
+     * Sert pour la gestion d'erreur et la production de code dependant du contexte
665
+     *
666
+     * Peut contenir les index :
667
+     *
668
+     * - nom : Nom du fichier de cache
669
+     * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
670
+     * - sourcefile : Chemin du squelette
671
+     * - squelette : Code du squelette
672
+     * - id_mere : Identifiant de la boucle parente
673
+     * - documents : Pour embed et img dans les textes
674
+     * - session : Pour un cache sessionné par auteur
675
+     * - niv : Niveau de tabulation
676
+     */
677
+    public array $descr = [];
678
+
679
+    /** Numéro de ligne dans le code source du squelette*/
680
+    public int $ligne = 0;
681
+
682
+    /** Drapeau pour reperer les balises calculées par une fonction explicite */
683
+    public bool $balise_calculee = false;
684 684
 }
685 685
 
686 686
 
@@ -688,86 +688,86 @@  discard block
 block discarded – undo
688 688
  * Description d'une chaîne de langue
689 689
  **/
690 690
 class Idiome {
691
-	/** Type de noeud */
692
-	public string $type = 'idiome';
693
-
694
-	/** Clé de traduction demandée. Exemple 'item_oui' */
695
-	public string $nom_champ = '';
696
-
697
-	/** Module de langue où chercher la clé de traduction. Exemple 'medias' */
698
-	public string $module = '';
699
-
700
-	/** Arguments à passer à la chaîne */
701
-	public array $arg = [];
702
-
703
-	/**
704
-	 * Filtres à appliquer au résultat
705
-	 *
706
-	 * FIXME: type unique.
707
-	 * @var false|array
708
-	 *     - false: erreur de syntaxe
709
-	 */
710
-	public $param = [];
711
-
712
-	/** Source des filtres (compatibilité) (?) */
713
-	public array $fonctions = [];
714
-
715
-	/**
716
-	 * Inutilisé, propriété générique de l'AST
717
-	 *
718
-	 * @var string|array
719
-	 */
720
-	public $avant = '';
721
-
722
-	/**
723
-	 * Inutilisé, propriété générique de l'AST
724
-	 *
725
-	 * @var string|array
726
-	 */
727
-	public $apres = '';
728
-
729
-	/** Identifiant de la boucle */
730
-	public string $id_boucle = '';
731
-
732
-	/**
733
-	 * AST du squelette, liste de toutes les boucles
734
-	 *
735
-	 * @var Boucle[]
736
-	 */
737
-	public array $boucles;
738
-
739
-	/** Alias de table d'application de la requête ou nom complet de la table SQL */
740
-	public ?string $type_requete;
741
-
742
-	/** Résultat de la compilation: toujours une expression PHP */
743
-	public string $code = '';
744
-
745
-	/**
746
-	 * Interdire les scripts
747
-	 *
748
-	 * @see interdire_scripts()
749
-	 */
750
-	public bool $interdire_scripts = false;
751
-
752
-	/**
753
-	 * Description du squelette
754
-	 *
755
-	 * Sert pour la gestion d'erreur et la production de code dependant du contexte
756
-	 *
757
-	 * Peut contenir les index :
758
-	 * - nom : Nom du fichier de cache
759
-	 * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
760
-	 * - sourcefile : Chemin du squelette
761
-	 * - squelette : Code du squelette
762
-	 * - id_mere : Identifiant de la boucle parente
763
-	 * - documents : Pour embed et img dans les textes
764
-	 * - session : Pour un cache sessionné par auteur
765
-	 * - niv : Niveau de tabulation
766
-	 */
767
-	public array $descr = [];
768
-
769
-	/** Numéro de ligne dans le code source du squelette */
770
-	public int $ligne = 0;
691
+    /** Type de noeud */
692
+    public string $type = 'idiome';
693
+
694
+    /** Clé de traduction demandée. Exemple 'item_oui' */
695
+    public string $nom_champ = '';
696
+
697
+    /** Module de langue où chercher la clé de traduction. Exemple 'medias' */
698
+    public string $module = '';
699
+
700
+    /** Arguments à passer à la chaîne */
701
+    public array $arg = [];
702
+
703
+    /**
704
+     * Filtres à appliquer au résultat
705
+     *
706
+     * FIXME: type unique.
707
+     * @var false|array
708
+     *     - false: erreur de syntaxe
709
+     */
710
+    public $param = [];
711
+
712
+    /** Source des filtres (compatibilité) (?) */
713
+    public array $fonctions = [];
714
+
715
+    /**
716
+     * Inutilisé, propriété générique de l'AST
717
+     *
718
+     * @var string|array
719
+     */
720
+    public $avant = '';
721
+
722
+    /**
723
+     * Inutilisé, propriété générique de l'AST
724
+     *
725
+     * @var string|array
726
+     */
727
+    public $apres = '';
728
+
729
+    /** Identifiant de la boucle */
730
+    public string $id_boucle = '';
731
+
732
+    /**
733
+     * AST du squelette, liste de toutes les boucles
734
+     *
735
+     * @var Boucle[]
736
+     */
737
+    public array $boucles;
738
+
739
+    /** Alias de table d'application de la requête ou nom complet de la table SQL */
740
+    public ?string $type_requete;
741
+
742
+    /** Résultat de la compilation: toujours une expression PHP */
743
+    public string $code = '';
744
+
745
+    /**
746
+     * Interdire les scripts
747
+     *
748
+     * @see interdire_scripts()
749
+     */
750
+    public bool $interdire_scripts = false;
751
+
752
+    /**
753
+     * Description du squelette
754
+     *
755
+     * Sert pour la gestion d'erreur et la production de code dependant du contexte
756
+     *
757
+     * Peut contenir les index :
758
+     * - nom : Nom du fichier de cache
759
+     * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser)
760
+     * - sourcefile : Chemin du squelette
761
+     * - squelette : Code du squelette
762
+     * - id_mere : Identifiant de la boucle parente
763
+     * - documents : Pour embed et img dans les textes
764
+     * - session : Pour un cache sessionné par auteur
765
+     * - niv : Niveau de tabulation
766
+     */
767
+    public array $descr = [];
768
+
769
+    /** Numéro de ligne dans le code source du squelette */
770
+    public int $ligne = 0;
771 771
 }
772 772
 
773 773
 /**
@@ -776,18 +776,18 @@  discard block
 block discarded – undo
776 776
  * @package SPIP\Core\Compilateur\AST
777 777
  **/
778 778
 class Polyglotte {
779
-	/** Type de noeud */
780
-	public string $type = 'polyglotte';
781
-
782
-	/**
783
-	 * Tableau des traductions possibles classées par langue
784
-	 *
785
-	 * Tableau code de langue => texte
786
-	 */
787
-	public array $traductions = [];
788
-
789
-	/** Numéro de ligne dans le code source du squelette */
790
-	public int $ligne = 0;
779
+    /** Type de noeud */
780
+    public string $type = 'polyglotte';
781
+
782
+    /**
783
+     * Tableau des traductions possibles classées par langue
784
+     *
785
+     * Tableau code de langue => texte
786
+     */
787
+    public array $traductions = [];
788
+
789
+    /** Numéro de ligne dans le code source du squelette */
790
+    public int $ligne = 0;
791 791
 }
792 792
 
793 793
 
@@ -810,90 +810,90 @@  discard block
 block discarded – undo
810 810
  */
811 811
 function declarer_interfaces() {
812 812
 
813
-	$GLOBALS['table_des_tables']['articles'] = 'articles';
814
-	$GLOBALS['table_des_tables']['auteurs'] = 'auteurs';
815
-	$GLOBALS['table_des_tables']['rubriques'] = 'rubriques';
816
-	$GLOBALS['table_des_tables']['hierarchie'] = 'rubriques';
817
-
818
-	// definition des statuts de publication
819
-	$GLOBALS['table_statut'] = [];
820
-
821
-	//
822
-	// tableau des tables de jointures
823
-	// Ex: gestion du critere {id_mot} dans la boucle(ARTICLES)
824
-	$GLOBALS['tables_jointures'] = [];
825
-	$GLOBALS['tables_jointures']['spip_jobs'][] = 'jobs_liens';
826
-
827
-	// $GLOBALS['exceptions_des_jointures']['titre_mot'] = array('spip_mots', 'titre'); // pour exemple
828
-	$GLOBALS['exceptions_des_jointures']['profondeur'] = ['spip_rubriques', 'profondeur'];
829
-
830
-
831
-	if (!defined('_TRAITEMENT_TYPO')) {
832
-		define('_TRAITEMENT_TYPO', 'typo(%s, "TYPO", $connect, $Pile[0])');
833
-	}
834
-	if (!defined('_TRAITEMENT_RACCOURCIS')) {
835
-		define('_TRAITEMENT_RACCOURCIS', 'propre(%s, $connect, $Pile[0])');
836
-	}
837
-	if (!defined('_TRAITEMENT_TYPO_SANS_NUMERO')) {
838
-		define('_TRAITEMENT_TYPO_SANS_NUMERO', 'supprimer_numero(typo(%s, "TYPO", $connect, $Pile[0]))');
839
-	}
840
-	$GLOBALS['table_des_traitements']['BIO'][] = 'safehtml(' . _TRAITEMENT_RACCOURCIS . ')';
841
-	$GLOBALS['table_des_traitements']['NOM_SITE']['auteurs'] = 'entites_html(%s)';
842
-	$GLOBALS['table_des_traitements']['NOM']['auteurs'] = 'safehtml(' . _TRAITEMENT_TYPO_SANS_NUMERO . ')';
843
-	$GLOBALS['table_des_traitements']['CHAPO'][] = _TRAITEMENT_RACCOURCIS;
844
-	$GLOBALS['table_des_traitements']['DATE'][] = 'normaliser_date(%s)';
845
-	$GLOBALS['table_des_traitements']['DATE_REDAC'][] = 'normaliser_date(%s)';
846
-	$GLOBALS['table_des_traitements']['DATE_MODIF'][] = 'normaliser_date(%s)';
847
-	$GLOBALS['table_des_traitements']['DATE_NOUVEAUTES'][] = 'normaliser_date(%s)';
848
-	$GLOBALS['table_des_traitements']['DESCRIPTIF'][] = _TRAITEMENT_RACCOURCIS;
849
-	$GLOBALS['table_des_traitements']['INTRODUCTION'][] = _TRAITEMENT_RACCOURCIS;
850
-	$GLOBALS['table_des_traitements']['NOM_SITE_SPIP'][] = _TRAITEMENT_TYPO;
851
-	$GLOBALS['table_des_traitements']['NOM'][] = _TRAITEMENT_TYPO_SANS_NUMERO;
852
-	$GLOBALS['table_des_traitements']['AUTEUR'][] = _TRAITEMENT_TYPO;
853
-	$GLOBALS['table_des_traitements']['PS'][] = _TRAITEMENT_RACCOURCIS;
854
-	$GLOBALS['table_des_traitements']['SOURCE'][] = _TRAITEMENT_TYPO;
855
-	$GLOBALS['table_des_traitements']['SOUSTITRE'][] = _TRAITEMENT_TYPO;
856
-	$GLOBALS['table_des_traitements']['SURTITRE'][] = _TRAITEMENT_TYPO;
857
-	$GLOBALS['table_des_traitements']['TAGS'][] = '%s';
858
-	$GLOBALS['table_des_traitements']['TEXTE'][] = _TRAITEMENT_RACCOURCIS;
859
-	$GLOBALS['table_des_traitements']['TITRE'][] = _TRAITEMENT_TYPO_SANS_NUMERO;
860
-	$GLOBALS['table_des_traitements']['TYPE'][] = _TRAITEMENT_TYPO;
861
-	$GLOBALS['table_des_traitements']['DESCRIPTIF_SITE_SPIP'][] = _TRAITEMENT_RACCOURCIS;
862
-	$GLOBALS['table_des_traitements']['SLOGAN_SITE_SPIP'][] = _TRAITEMENT_TYPO;
863
-	$GLOBALS['table_des_traitements']['ENV'][] = 'entites_html(%s,true)';
864
-
865
-	// valeur par defaut pour les balises non listees ci-dessus
866
-	$GLOBALS['table_des_traitements']['*'][] = false; // pas de traitement, mais permet au compilo de trouver la declaration suivante
867
-	// toujours securiser les DATA
868
-	$GLOBALS['table_des_traitements']['*']['DATA'] = 'safehtml(%s)';
869
-	// expliciter pour VALEUR qui est un champ calcule et ne sera pas protege par le catch-all *
870
-	$GLOBALS['table_des_traitements']['VALEUR']['DATA'] = 'safehtml(%s)';
871
-
872
-
873
-	// gerer l'affectation en 2 temps car si le pipe n'est pas encore declare, on ecrase les globales
874
-	$interfaces = pipeline(
875
-		'declarer_tables_interfaces',
876
-		[
877
-			'table_des_tables' => $GLOBALS['table_des_tables'],
878
-			'exceptions_des_tables' => $GLOBALS['exceptions_des_tables'],
879
-			'table_date' => $GLOBALS['table_date'],
880
-			'table_titre' => $GLOBALS['table_titre'],
881
-			'tables_jointures' => $GLOBALS['tables_jointures'],
882
-			'exceptions_des_jointures' => $GLOBALS['exceptions_des_jointures'],
883
-			'table_des_traitements' => $GLOBALS['table_des_traitements'],
884
-			'table_statut' => $GLOBALS['table_statut'],
885
-		]
886
-	);
887
-	if ($interfaces) {
888
-		$GLOBALS['table_des_tables'] = $interfaces['table_des_tables'];
889
-		$GLOBALS['exceptions_des_tables'] = $interfaces['exceptions_des_tables'];
890
-		$GLOBALS['table_date'] = $interfaces['table_date'];
891
-		$GLOBALS['table_titre'] = $interfaces['table_titre'];
892
-		$GLOBALS['tables_jointures'] = $interfaces['tables_jointures'];
893
-		$GLOBALS['exceptions_des_jointures'] = $interfaces['exceptions_des_jointures'];
894
-		$GLOBALS['table_des_traitements'] = $interfaces['table_des_traitements'];
895
-		$GLOBALS['table_statut'] = $interfaces['table_statut'];
896
-	}
813
+    $GLOBALS['table_des_tables']['articles'] = 'articles';
814
+    $GLOBALS['table_des_tables']['auteurs'] = 'auteurs';
815
+    $GLOBALS['table_des_tables']['rubriques'] = 'rubriques';
816
+    $GLOBALS['table_des_tables']['hierarchie'] = 'rubriques';
817
+
818
+    // definition des statuts de publication
819
+    $GLOBALS['table_statut'] = [];
820
+
821
+    //
822
+    // tableau des tables de jointures
823
+    // Ex: gestion du critere {id_mot} dans la boucle(ARTICLES)
824
+    $GLOBALS['tables_jointures'] = [];
825
+    $GLOBALS['tables_jointures']['spip_jobs'][] = 'jobs_liens';
826
+
827
+    // $GLOBALS['exceptions_des_jointures']['titre_mot'] = array('spip_mots', 'titre'); // pour exemple
828
+    $GLOBALS['exceptions_des_jointures']['profondeur'] = ['spip_rubriques', 'profondeur'];
829
+
830
+
831
+    if (!defined('_TRAITEMENT_TYPO')) {
832
+        define('_TRAITEMENT_TYPO', 'typo(%s, "TYPO", $connect, $Pile[0])');
833
+    }
834
+    if (!defined('_TRAITEMENT_RACCOURCIS')) {
835
+        define('_TRAITEMENT_RACCOURCIS', 'propre(%s, $connect, $Pile[0])');
836
+    }
837
+    if (!defined('_TRAITEMENT_TYPO_SANS_NUMERO')) {
838
+        define('_TRAITEMENT_TYPO_SANS_NUMERO', 'supprimer_numero(typo(%s, "TYPO", $connect, $Pile[0]))');
839
+    }
840
+    $GLOBALS['table_des_traitements']['BIO'][] = 'safehtml(' . _TRAITEMENT_RACCOURCIS . ')';
841
+    $GLOBALS['table_des_traitements']['NOM_SITE']['auteurs'] = 'entites_html(%s)';
842
+    $GLOBALS['table_des_traitements']['NOM']['auteurs'] = 'safehtml(' . _TRAITEMENT_TYPO_SANS_NUMERO . ')';
843
+    $GLOBALS['table_des_traitements']['CHAPO'][] = _TRAITEMENT_RACCOURCIS;
844
+    $GLOBALS['table_des_traitements']['DATE'][] = 'normaliser_date(%s)';
845
+    $GLOBALS['table_des_traitements']['DATE_REDAC'][] = 'normaliser_date(%s)';
846
+    $GLOBALS['table_des_traitements']['DATE_MODIF'][] = 'normaliser_date(%s)';
847
+    $GLOBALS['table_des_traitements']['DATE_NOUVEAUTES'][] = 'normaliser_date(%s)';
848
+    $GLOBALS['table_des_traitements']['DESCRIPTIF'][] = _TRAITEMENT_RACCOURCIS;
849
+    $GLOBALS['table_des_traitements']['INTRODUCTION'][] = _TRAITEMENT_RACCOURCIS;
850
+    $GLOBALS['table_des_traitements']['NOM_SITE_SPIP'][] = _TRAITEMENT_TYPO;
851
+    $GLOBALS['table_des_traitements']['NOM'][] = _TRAITEMENT_TYPO_SANS_NUMERO;
852
+    $GLOBALS['table_des_traitements']['AUTEUR'][] = _TRAITEMENT_TYPO;
853
+    $GLOBALS['table_des_traitements']['PS'][] = _TRAITEMENT_RACCOURCIS;
854
+    $GLOBALS['table_des_traitements']['SOURCE'][] = _TRAITEMENT_TYPO;
855
+    $GLOBALS['table_des_traitements']['SOUSTITRE'][] = _TRAITEMENT_TYPO;
856
+    $GLOBALS['table_des_traitements']['SURTITRE'][] = _TRAITEMENT_TYPO;
857
+    $GLOBALS['table_des_traitements']['TAGS'][] = '%s';
858
+    $GLOBALS['table_des_traitements']['TEXTE'][] = _TRAITEMENT_RACCOURCIS;
859
+    $GLOBALS['table_des_traitements']['TITRE'][] = _TRAITEMENT_TYPO_SANS_NUMERO;
860
+    $GLOBALS['table_des_traitements']['TYPE'][] = _TRAITEMENT_TYPO;
861
+    $GLOBALS['table_des_traitements']['DESCRIPTIF_SITE_SPIP'][] = _TRAITEMENT_RACCOURCIS;
862
+    $GLOBALS['table_des_traitements']['SLOGAN_SITE_SPIP'][] = _TRAITEMENT_TYPO;
863
+    $GLOBALS['table_des_traitements']['ENV'][] = 'entites_html(%s,true)';
864
+
865
+    // valeur par defaut pour les balises non listees ci-dessus
866
+    $GLOBALS['table_des_traitements']['*'][] = false; // pas de traitement, mais permet au compilo de trouver la declaration suivante
867
+    // toujours securiser les DATA
868
+    $GLOBALS['table_des_traitements']['*']['DATA'] = 'safehtml(%s)';
869
+    // expliciter pour VALEUR qui est un champ calcule et ne sera pas protege par le catch-all *
870
+    $GLOBALS['table_des_traitements']['VALEUR']['DATA'] = 'safehtml(%s)';
871
+
872
+
873
+    // gerer l'affectation en 2 temps car si le pipe n'est pas encore declare, on ecrase les globales
874
+    $interfaces = pipeline(
875
+        'declarer_tables_interfaces',
876
+        [
877
+            'table_des_tables' => $GLOBALS['table_des_tables'],
878
+            'exceptions_des_tables' => $GLOBALS['exceptions_des_tables'],
879
+            'table_date' => $GLOBALS['table_date'],
880
+            'table_titre' => $GLOBALS['table_titre'],
881
+            'tables_jointures' => $GLOBALS['tables_jointures'],
882
+            'exceptions_des_jointures' => $GLOBALS['exceptions_des_jointures'],
883
+            'table_des_traitements' => $GLOBALS['table_des_traitements'],
884
+            'table_statut' => $GLOBALS['table_statut'],
885
+        ]
886
+    );
887
+    if ($interfaces) {
888
+        $GLOBALS['table_des_tables'] = $interfaces['table_des_tables'];
889
+        $GLOBALS['exceptions_des_tables'] = $interfaces['exceptions_des_tables'];
890
+        $GLOBALS['table_date'] = $interfaces['table_date'];
891
+        $GLOBALS['table_titre'] = $interfaces['table_titre'];
892
+        $GLOBALS['tables_jointures'] = $interfaces['tables_jointures'];
893
+        $GLOBALS['exceptions_des_jointures'] = $interfaces['exceptions_des_jointures'];
894
+        $GLOBALS['table_des_traitements'] = $interfaces['table_des_traitements'];
895
+        $GLOBALS['table_statut'] = $interfaces['table_statut'];
896
+    }
897 897
 }
898 898
 
899 899
 declarer_interfaces();
Please login to merge, or discard this patch.