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