Completed
Push — master ( e9ce2d...38e4b2 )
by cam
01:04
created
ecrire/base/objets.php 3 patches
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -1395,8 +1395,7 @@
 block discarded – undo
1395 1395
 							'champ' 	=> $parent_methode['champ'],
1396 1396
 							'table'    => $table,
1397 1397
 						];
1398
-					}
1399
-					elseif (isset($parent_methode['champ_type'])) {
1398
+					} elseif (isset($parent_methode['champ_type'])) {
1400 1399
 						$parent = [
1401 1400
 							'objet' 	 => $ligne[$parent_methode['champ_type']],
1402 1401
 							'id_objet' 	 => intval($ligne[$parent_methode['champ']]),
Please login to merge, or discard this patch.
Indentation   +1256 added lines, -1256 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
 /**
@@ -32,11 +32,11 @@  discard block
 block discarded – undo
32 32
  * @return void
33 33
  **/
34 34
 function array_set_merge(&$table, $index, $valeur) {
35
-	if (!isset($table[$index])) {
36
-		$table[$index] = $valeur;
37
-	} else {
38
-		$table[$index] = array_merge($table[$index], $valeur);
39
-	}
35
+    if (!isset($table[$index])) {
36
+        $table[$index] = $valeur;
37
+    } else {
38
+        $table[$index] = array_merge($table[$index], $valeur);
39
+    }
40 40
 }
41 41
 
42 42
 /**
@@ -53,440 +53,440 @@  discard block
 block discarded – undo
53 53
  * @return array|bool
54 54
  */
55 55
 function lister_tables_objets_sql(?string $table_sql = null, $desc = []) {
56
-	static $deja_la = false;
57
-	static $infos_tables = null;
58
-	static $md5 = null;
59
-	static $plugin_hash = null;
60
-
61
-	// plugins hash connu ? non si _CACHE_PLUGINS_OPT est pas encore chargé.
62
-	$_PLUGINS_HASH = defined('_PLUGINS_HASH') ? _PLUGINS_HASH : '!_CACHE_PLUGINS_OPT';
63
-
64
-	// prealablement recuperer les tables_principales
65
-	if (is_null($infos_tables) or $plugin_hash !== $_PLUGINS_HASH) {
66
-		// pas de reentrance (cas base/serial)
67
-		if ($deja_la) {
68
-			spip_log('Re-entrance anormale sur lister_tables_objets_sql : '
69
-				. var_export(debug_backtrace(), true), _LOG_CRITIQUE);
70
-
71
-			return ($table_sql === '::md5' ? $md5 : []);
72
-		}
73
-		$deja_la = true;
74
-		$plugin_hash = $_PLUGINS_HASH; // avant de lancer les pipelines
75
-
76
-		// recuperer les declarations explicites ancienne mode
77
-		// qui servent a completer declarer_tables_objets_sql
78
-		base_serial($GLOBALS['tables_principales']);
79
-		base_auxiliaires($GLOBALS['tables_auxiliaires']);
80
-		$infos_tables = [
81
-			'spip_articles' => [
82
-				'page' => 'article',
83
-				'texte_retour' => 'icone_retour_article',
84
-				'texte_modifier' => 'icone_modifier_article',
85
-				'texte_creer' => 'icone_ecrire_article',
86
-				'texte_objets' => 'public:articles',
87
-				'texte_objet' => 'public:article',
88
-				'texte_signale_edition' => 'texte_travail_article',
89
-				'info_aucun_objet' => 'info_aucun_article',
90
-				'info_1_objet' => 'info_1_article',
91
-				'info_nb_objets' => 'info_nb_articles',
92
-				'texte_logo_objet' => 'logo_article',
93
-				'texte_langue_objet' => 'titre_langue_article',
94
-				'texte_definir_comme_traduction_objet' => 'trad_lier',
95
-				'titre' => 'titre, lang',
96
-				'date' => 'date',
97
-				'principale' => 'oui',
98
-				'introduction_longueur' => '500',
99
-				'champs_editables' => [
100
-					'surtitre',
101
-					'titre',
102
-					'soustitre',
103
-					'descriptif',
104
-					'nom_site',
105
-					'url_site',
106
-					'chapo',
107
-					'texte',
108
-					'ps',
109
-					'virtuel'
110
-				],
111
-				'champs_versionnes' => [
112
-					'id_rubrique',
113
-					'surtitre',
114
-					'titre',
115
-					'soustitre',
116
-					'jointure_auteurs',
117
-					'descriptif',
118
-					'nom_site',
119
-					'url_site',
120
-					'chapo',
121
-					'texte',
122
-					'ps'
123
-				],
124
-				'field' => [
125
-					'id_article' => 'bigint(21) NOT NULL',
126
-					'surtitre' => "text DEFAULT '' NOT NULL",
127
-					'titre' => "text DEFAULT '' NOT NULL",
128
-					'soustitre' => "text DEFAULT '' NOT NULL",
129
-					'id_rubrique' => "bigint(21) DEFAULT '0' NOT NULL",
130
-					'descriptif' => "text DEFAULT '' NOT NULL",
131
-					'chapo' => "mediumtext DEFAULT '' NOT NULL",
132
-					'texte' => "longtext DEFAULT '' NOT NULL",
133
-					'ps' => "mediumtext DEFAULT '' NOT NULL",
134
-					'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
135
-					'statut' => "varchar(10) DEFAULT '0' NOT NULL",
136
-					'id_secteur' => "bigint(21) DEFAULT '0' NOT NULL",
137
-					'maj' => 'TIMESTAMP',
138
-					'export' => "VARCHAR(10) DEFAULT 'oui'",
139
-					'date_redac' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
140
-					'visites' => "integer DEFAULT '0' NOT NULL",
141
-					'referers' => "integer DEFAULT '0' NOT NULL",
142
-					'popularite' => "DOUBLE DEFAULT '0' NOT NULL",
143
-					'accepter_forum' => "CHAR(3) DEFAULT '' NOT NULL",
144
-					'date_modif' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
145
-					'lang' => "VARCHAR(10) DEFAULT '' NOT NULL",
146
-					'langue_choisie' => "VARCHAR(3) DEFAULT 'non'",
147
-					'id_trad' => "bigint(21) DEFAULT '0' NOT NULL",
148
-					'nom_site' => "tinytext DEFAULT '' NOT NULL",
149
-					'url_site' => "text DEFAULT '' NOT NULL",
150
-					'virtuel' => "text DEFAULT '' NOT NULL",
151
-				],
152
-				'key' => [
153
-					'PRIMARY KEY' => 'id_article',
154
-					'KEY id_rubrique' => 'id_rubrique',
155
-					'KEY id_secteur' => 'id_secteur',
156
-					'KEY id_trad' => 'id_trad',
157
-					'KEY lang' => 'lang',
158
-					'KEY statut' => 'statut, date',
159
-				],
160
-				'join' => [
161
-					'id_article' => 'id_article',
162
-					'id_rubrique' => 'id_rubrique'
163
-				],
164
-				'parent' => [
165
-					['type' => 'rubrique', 'champ' => 'id_rubrique']
166
-				],
167
-				'rechercher_champs' => [
168
-					'surtitre' => 5,
169
-					'titre' => 8,
170
-					'soustitre' => 5,
171
-					'chapo' => 3,
172
-					'texte' => 1,
173
-					'ps' => 1,
174
-					'nom_site' => 1,
175
-					'url_site' => 1,
176
-					'descriptif' => 4
177
-				],
178
-				'rechercher_jointures' => [
179
-					'auteur' => ['nom' => 10],
180
-				],
181
-				'statut' => [
182
-					[
183
-						'champ' => 'statut',
184
-						'publie' => 'publie',
185
-						'previsu' => 'publie,prop,prepa/auteur',
186
-						'post_date' => 'date',
187
-						'exception' => ['statut', 'tout']
188
-					]
189
-				],
190
-				'statut_titres' => [
191
-					'prepa' => 'info_article_redaction',
192
-					'prop' => 'info_article_propose',
193
-					'publie' => 'info_article_publie',
194
-					'refuse' => 'info_article_refuse',
195
-					'poubelle' => 'info_article_supprime'
196
-				],
197
-				'statut_textes_instituer' => [
198
-					'prepa' => 'texte_statut_en_cours_redaction',
199
-					'prop' => 'texte_statut_propose_evaluation',
200
-					'publie' => 'texte_statut_publie',
201
-					'refuse' => 'texte_statut_refuse',
202
-					'poubelle' => 'texte_statut_poubelle',
203
-				],
204
-				'texte_changer_statut' => 'texte_article_statut',
205
-				'aide_changer_statut' => 'artstatut',
206
-				'tables_jointures' => [
207
-					'profondeur' => 'rubriques',
208
-					#'id_auteur' => 'auteurs_liens' // declaration generique plus bas
209
-				],
210
-			],
211
-			'spip_auteurs' => [
212
-				'page' => 'auteur',
213
-				'texte_retour' => 'icone_retour',
214
-				'texte_ajouter' => 'titre_ajouter_un_auteur',
215
-				'texte_modifier' => 'admin_modifier_auteur',
216
-				'texte_objets' => 'icone_auteurs',
217
-				'texte_objet' => 'public:auteur',
218
-				'info_aucun_objet' => 'info_aucun_auteur',
219
-				'info_1_objet' => 'info_1_auteur',
220
-				'info_nb_objets' => 'info_nb_auteurs',
221
-				'texte_logo_objet' => 'logo_auteur',
222
-				'texte_creer_associer' => 'creer_et_associer_un_auteur',
223
-				'titre' => "nom AS titre, '' AS lang",
224
-				'date' => 'date',
225
-				'principale' => 'oui',
226
-				'champs_editables' => ['nom', 'email', 'bio', 'nom_site', 'url_site', 'imessage', 'pgp'],
227
-				'champs_versionnes' => ['nom', 'bio', 'email', 'nom_site', 'url_site', 'login'],
228
-				'field' => [
229
-					'id_auteur' => 'bigint(21) NOT NULL',
230
-					'nom' => "text DEFAULT '' NOT NULL",
231
-					'bio' => "text DEFAULT '' NOT NULL",
232
-					'email' => "tinytext DEFAULT '' NOT NULL",
233
-					'nom_site' => "tinytext DEFAULT '' NOT NULL",
234
-					'url_site' => "text DEFAULT '' NOT NULL",
235
-					'login' => 'VARCHAR(255) BINARY',
236
-					'pass' => "tinytext DEFAULT '' NOT NULL",
237
-					'low_sec' => "tinytext DEFAULT '' NOT NULL",
238
-					'statut' => "varchar(255)  DEFAULT '0' NOT NULL",
239
-					'webmestre' => "varchar(3)  DEFAULT 'non' NOT NULL",
240
-					'maj' => 'TIMESTAMP',
241
-					'pgp' => "TEXT DEFAULT '' NOT NULL",
242
-					'htpass' => "tinytext DEFAULT '' NOT NULL",
243
-					'en_ligne' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
244
-					'alea_actuel' => 'tinytext',
245
-					'alea_futur' => 'tinytext',
246
-					'prefs' => 'text',
247
-					'cookie_oubli' => 'tinytext',
248
-					'source' => "VARCHAR(10) DEFAULT 'spip' NOT NULL",
249
-					'lang' => "VARCHAR(10) DEFAULT '' NOT NULL",
250
-					'imessage' => "VARCHAR(3) DEFAULT '' NOT NULL"
251
-				],
252
-				'key' => [
253
-					'PRIMARY KEY' => 'id_auteur',
254
-					'KEY login' => 'login',
255
-					'KEY statut' => 'statut',
256
-					'KEY en_ligne' => 'en_ligne',
257
-				],
258
-				'join' => [
259
-					'id_auteur' => 'id_auteur',
260
-					'login' => 'login'
261
-				],
262
-				'rechercher_champs' => [
263
-					'nom' => 5,
264
-					'bio' => 1,
265
-					'email' => 1,
266
-					'nom_site' => 1,
267
-					'url_site' => 1,
268
-					'login' => 1
269
-				],
270
-				// 2 conditions pour les auteurs : statut!=poubelle,
271
-				// et avoir des articles publies
272
-				'statut' => [
273
-					[
274
-						'champ' => 'statut',
275
-						'publie' => '!5poubelle',
276
-						'previsu' => '!5poubelle',
277
-						'exception' => 'statut'
278
-					],
279
-					[
280
-						'champ' => [
281
-							['spip_auteurs_liens', 'id_auteur'],
282
-							[
283
-								'spip_articles',
284
-								['id_objet', 'id_article', 'objet', 'article']
285
-							],
286
-							'statut'
287
-						],
288
-						'publie' => 'publie',
289
-						'previsu' => '!',
290
-						'post_date' => 'date',
291
-						'exception' => ['statut', 'lien', 'tout']
292
-					],
293
-				],
294
-				'statut_images' => [
295
-					'auteur-6forum-16.png',
296
-					'0minirezo' => 'auteur-0minirezo-16.png',
297
-					'1comite' => 'auteur-1comite-16.png',
298
-					'6forum' => 'auteur-6forum-16.png',
299
-					'5poubelle' => 'auteur-5poubelle-16.png',
300
-					'nouveau' => ''
301
-				],
302
-				'statut_titres' => [
303
-					'titre_image_visiteur',
304
-					'0minirezo' => 'titre_image_administrateur',
305
-					'1comite' => 'titre_image_redacteur_02',
306
-					'6forum' => 'titre_image_visiteur',
307
-					'5poubelle' => 'titre_image_auteur_supprime',
308
-				],
309
-				'tables_jointures' => [#'auteurs_liens' // declaration generique plus bas
310
-				],
311
-			],
312
-			'spip_rubriques' => [
313
-				'page' => 'rubrique',
314
-				'url_voir' => 'rubrique',
315
-				'url_edit' => 'rubrique_edit',
316
-				'texte_retour' => 'icone_retour',
317
-				'texte_objets' => 'public:rubriques',
318
-				'texte_objet' => 'public:rubrique',
319
-				'texte_modifier' => 'icone_modifier_rubrique',
320
-				'texte_creer' => 'icone_creer_rubrique',
321
-				'texte_ajouter' => 'titre_ajouter_une_rubrique',
322
-				'texte_creer_associer' => 'creer_et_associer_une_rubrique',
323
-				'info_aucun_objet' => 'info_aucun_rubrique',
324
-				'info_1_objet' => 'info_1_rubrique',
325
-				'info_nb_objets' => 'info_nb_rubriques',
326
-				'texte_logo_objet' => 'logo_rubrique',
327
-				'texte_langue_objet' => 'titre_langue_rubrique',
328
-				'texte_definir_comme_traduction_objet' => 'texte_definir_comme_traduction_rubrique',
329
-				'titre' => 'titre, lang',
330
-				'date' => 'date',
331
-				'principale' => 'oui',
332
-				'introduction_longueur' => '600',
333
-				'champs_editables' => ['titre', 'texte', 'descriptif', 'extra'],
334
-				'champs_versionnes' => ['titre', 'descriptif', 'texte'],
335
-				'field' => [
336
-					'id_rubrique' => 'bigint(21) NOT NULL',
337
-					'id_parent' => "bigint(21) DEFAULT '0' NOT NULL",
338
-					'titre' => "text DEFAULT '' NOT NULL",
339
-					'descriptif' => "text DEFAULT '' NOT NULL",
340
-					'texte' => "longtext DEFAULT '' NOT NULL",
341
-					'id_secteur' => "bigint(21) DEFAULT '0' NOT NULL",
342
-					'maj' => 'TIMESTAMP',
343
-					'statut' => "varchar(10) DEFAULT '0' NOT NULL",
344
-					'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
345
-					'lang' => "VARCHAR(10) DEFAULT '' NOT NULL",
346
-					'langue_choisie' => "VARCHAR(3) DEFAULT 'non'",
347
-					'statut_tmp' => "varchar(10) DEFAULT '0' NOT NULL",
348
-					'date_tmp' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
349
-					'profondeur' => "smallint(5) DEFAULT '0' NOT NULL"
350
-				],
351
-				'key' => [
352
-					'PRIMARY KEY' => 'id_rubrique',
353
-					'KEY lang' => 'lang',
354
-					'KEY id_parent' => 'id_parent',
355
-				],
356
-				'parent' => [
357
-					['type' => 'rubrique', 'champ' => 'id_parent']
358
-				],
359
-				'rechercher_champs' => [
360
-					'titre' => 8,
361
-					'descriptif' => 5,
362
-					'texte' => 1
363
-				],
364
-				'statut' => [
365
-					[
366
-						'champ' => 'statut',
367
-						'publie' => 'publie',
368
-						'previsu' => '!',
369
-						'exception' => ['statut', 'tout']
370
-					],
371
-				],
372
-				'tables_jointures' => [#'id_auteur' => 'auteurs_liens' // declaration generique plus bas
373
-				],
374
-			],
375
-			// toutes les tables ont le droit a une jointure sur les auteurs
376
-			['tables_jointures' => ['id_auteur' => 'auteurs_liens']]
377
-		];
378
-
379
-		// avant d'appeller les pipeline qui peuvent generer une reentrance a l'install
380
-		// initialiser la signature
381
-		$md5 = md5(serialize($infos_tables));
382
-
383
-		$GLOBALS['tables_principales'] = pipeline('declarer_tables_principales', $GLOBALS['tables_principales']);
384
-		$GLOBALS['tables_auxiliaires'] = pipeline('declarer_tables_auxiliaires', $GLOBALS['tables_auxiliaires']);
385
-		$infos_tables = pipeline('declarer_tables_objets_sql', $infos_tables);
386
-
387
-		// completer les informations manquantes ou implicites
388
-		$all = [];
389
-		foreach (array_keys($infos_tables) as $t) {
390
-			// les cles numeriques servent a declarer
391
-			// les proprietes applicables a tous les objets
392
-			// on les mets de cote
393
-			if (is_numeric($t)) {
394
-				$all = array_merge_recursive($all, $infos_tables[$t]);
395
-				unset($infos_tables[$t]);
396
-			} else {
397
-				$infos_tables[$t] = renseigner_table_objet_sql($t, $infos_tables[$t]);
398
-			}
399
-		}
400
-
401
-		// repercuter les proprietes generales communes a tous les objets
402
-		foreach (array_keys($infos_tables) as $t) {
403
-			foreach ($all as $i => $v) {
404
-				if (in_array($i, ['tables_jointures', 'champs_versionnes'])) {
405
-					$add = $all[$i];
406
-					// eviter les doublons de declaration de table jointure (ex des mots sur auteurs)
407
-					// pour les declarations generiques avec cles numeriques
408
-					if ($i == 'tables_jointures' and isset($infos_tables[$t][$i]) and is_countable($infos_tables[$t][$i]) ? count($infos_tables[$t][$i]) : 0) {
409
-						$doublons = array_intersect($infos_tables[$t][$i], $add);
410
-						foreach ($doublons as $d) {
411
-							if (
412
-								is_numeric(array_search($d, $infos_tables[$t][$i]))
413
-								and is_numeric($k = array_search($d, $add))
414
-							) {
415
-								unset($add[$k]);
416
-							}
417
-						}
418
-					}
419
-					$infos_tables[$t][$i] = array_merge($infos_tables[$t][$i] ?? [], $add);
420
-				} else {
421
-					$infos_tables[$t][$i] = array_merge_recursive(
422
-						$infos_tables[$t][$i] ?? [],
423
-						$all[$i]
424
-					);
425
-				}
426
-			}
427
-		}
428
-
429
-		// completer les tables principales et auxiliaires
430
-		// avec celles declarees uniquement dans declarer_table_objets_sql
431
-		// pour assurer la compat en transition
432
-		foreach ($infos_tables as $table => $infos) {
433
-			$principale_ou_auxiliaire = ($infos['principale'] ? 'tables_principales' : 'tables_auxiliaires');
434
-			// memoriser des champs eventuels declares par des plugins dans le pipeline tables_xxx
435
-			// qui a ete appelle avant
436
-			$mem = ($GLOBALS[$principale_ou_auxiliaire][$table] ?? []);
437
-			// l'ajouter au tableau
438
-			$GLOBALS[$principale_ou_auxiliaire][$table] = [];
439
-			if (isset($infos['field']) and isset($infos['key'])) {
440
-				foreach (['field', 'key', 'join'] as $k) {
441
-					if (isset($infos_tables[$table][$k])) {
442
-						$GLOBALS[$principale_ou_auxiliaire][$table][$k] = &$infos_tables[$table][$k];
443
-					}
444
-				}
445
-			} else {
446
-				// ici on ne renvoie que les declarations, donc RIEN
447
-				// pour avoir la vrai description en base, il faut passer par trouver_table
448
-				$GLOBALS[$principale_ou_auxiliaire][$table] = [];
449
-			}
450
-			if (is_countable($mem) ? count($mem) : 0) {
451
-				foreach (array_keys($mem) as $k) {
452
-					if (isset($GLOBALS[$principale_ou_auxiliaire][$table][$k])) {
453
-						$GLOBALS[$principale_ou_auxiliaire][$table][$k] = array_merge(
454
-							$GLOBALS[$principale_ou_auxiliaire][$table][$k],
455
-							$mem[$k]
456
-						);
457
-					} else {
458
-						$GLOBALS[$principale_ou_auxiliaire][$table][$k] = $mem[$k];
459
-					}
460
-				}
461
-			}
462
-		}
463
-
464
-		// recuperer les interfaces (table_titre, table_date)
465
-		// on ne le fait que dans un second temps pour que table_objet soit fonctionnel
466
-		// dans le pipeline de declarer_tables_interfaces
467
-		include_spip('public/interfaces');
468
-		foreach (array_keys($infos_tables) as $t) {
469
-			$infos_tables[$t] = renseigner_table_objet_interfaces($t, $infos_tables[$t]);
470
-		}
471
-
472
-		$deja_la = false;
473
-		// signature
474
-		$md5 = md5(serialize($infos_tables));
475
-	}
476
-	if ($table_sql === '::md5') {
477
-		return $md5;
478
-	}
479
-	if ($table_sql and !isset($infos_tables[$table_sql])) {
480
-		#$desc = renseigner_table_objet_sql($table_sql,$desc);
481
-		$desc = renseigner_table_objet_interfaces($table_sql, $desc);
482
-
483
-		return $desc;
484
-	}
485
-	if ($table_sql) {
486
-		return $infos_tables[$table_sql] ?? [];
487
-	}
488
-
489
-	return $infos_tables;
56
+    static $deja_la = false;
57
+    static $infos_tables = null;
58
+    static $md5 = null;
59
+    static $plugin_hash = null;
60
+
61
+    // plugins hash connu ? non si _CACHE_PLUGINS_OPT est pas encore chargé.
62
+    $_PLUGINS_HASH = defined('_PLUGINS_HASH') ? _PLUGINS_HASH : '!_CACHE_PLUGINS_OPT';
63
+
64
+    // prealablement recuperer les tables_principales
65
+    if (is_null($infos_tables) or $plugin_hash !== $_PLUGINS_HASH) {
66
+        // pas de reentrance (cas base/serial)
67
+        if ($deja_la) {
68
+            spip_log('Re-entrance anormale sur lister_tables_objets_sql : '
69
+                . var_export(debug_backtrace(), true), _LOG_CRITIQUE);
70
+
71
+            return ($table_sql === '::md5' ? $md5 : []);
72
+        }
73
+        $deja_la = true;
74
+        $plugin_hash = $_PLUGINS_HASH; // avant de lancer les pipelines
75
+
76
+        // recuperer les declarations explicites ancienne mode
77
+        // qui servent a completer declarer_tables_objets_sql
78
+        base_serial($GLOBALS['tables_principales']);
79
+        base_auxiliaires($GLOBALS['tables_auxiliaires']);
80
+        $infos_tables = [
81
+            'spip_articles' => [
82
+                'page' => 'article',
83
+                'texte_retour' => 'icone_retour_article',
84
+                'texte_modifier' => 'icone_modifier_article',
85
+                'texte_creer' => 'icone_ecrire_article',
86
+                'texte_objets' => 'public:articles',
87
+                'texte_objet' => 'public:article',
88
+                'texte_signale_edition' => 'texte_travail_article',
89
+                'info_aucun_objet' => 'info_aucun_article',
90
+                'info_1_objet' => 'info_1_article',
91
+                'info_nb_objets' => 'info_nb_articles',
92
+                'texte_logo_objet' => 'logo_article',
93
+                'texte_langue_objet' => 'titre_langue_article',
94
+                'texte_definir_comme_traduction_objet' => 'trad_lier',
95
+                'titre' => 'titre, lang',
96
+                'date' => 'date',
97
+                'principale' => 'oui',
98
+                'introduction_longueur' => '500',
99
+                'champs_editables' => [
100
+                    'surtitre',
101
+                    'titre',
102
+                    'soustitre',
103
+                    'descriptif',
104
+                    'nom_site',
105
+                    'url_site',
106
+                    'chapo',
107
+                    'texte',
108
+                    'ps',
109
+                    'virtuel'
110
+                ],
111
+                'champs_versionnes' => [
112
+                    'id_rubrique',
113
+                    'surtitre',
114
+                    'titre',
115
+                    'soustitre',
116
+                    'jointure_auteurs',
117
+                    'descriptif',
118
+                    'nom_site',
119
+                    'url_site',
120
+                    'chapo',
121
+                    'texte',
122
+                    'ps'
123
+                ],
124
+                'field' => [
125
+                    'id_article' => 'bigint(21) NOT NULL',
126
+                    'surtitre' => "text DEFAULT '' NOT NULL",
127
+                    'titre' => "text DEFAULT '' NOT NULL",
128
+                    'soustitre' => "text DEFAULT '' NOT NULL",
129
+                    'id_rubrique' => "bigint(21) DEFAULT '0' NOT NULL",
130
+                    'descriptif' => "text DEFAULT '' NOT NULL",
131
+                    'chapo' => "mediumtext DEFAULT '' NOT NULL",
132
+                    'texte' => "longtext DEFAULT '' NOT NULL",
133
+                    'ps' => "mediumtext DEFAULT '' NOT NULL",
134
+                    'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
135
+                    'statut' => "varchar(10) DEFAULT '0' NOT NULL",
136
+                    'id_secteur' => "bigint(21) DEFAULT '0' NOT NULL",
137
+                    'maj' => 'TIMESTAMP',
138
+                    'export' => "VARCHAR(10) DEFAULT 'oui'",
139
+                    'date_redac' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
140
+                    'visites' => "integer DEFAULT '0' NOT NULL",
141
+                    'referers' => "integer DEFAULT '0' NOT NULL",
142
+                    'popularite' => "DOUBLE DEFAULT '0' NOT NULL",
143
+                    'accepter_forum' => "CHAR(3) DEFAULT '' NOT NULL",
144
+                    'date_modif' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
145
+                    'lang' => "VARCHAR(10) DEFAULT '' NOT NULL",
146
+                    'langue_choisie' => "VARCHAR(3) DEFAULT 'non'",
147
+                    'id_trad' => "bigint(21) DEFAULT '0' NOT NULL",
148
+                    'nom_site' => "tinytext DEFAULT '' NOT NULL",
149
+                    'url_site' => "text DEFAULT '' NOT NULL",
150
+                    'virtuel' => "text DEFAULT '' NOT NULL",
151
+                ],
152
+                'key' => [
153
+                    'PRIMARY KEY' => 'id_article',
154
+                    'KEY id_rubrique' => 'id_rubrique',
155
+                    'KEY id_secteur' => 'id_secteur',
156
+                    'KEY id_trad' => 'id_trad',
157
+                    'KEY lang' => 'lang',
158
+                    'KEY statut' => 'statut, date',
159
+                ],
160
+                'join' => [
161
+                    'id_article' => 'id_article',
162
+                    'id_rubrique' => 'id_rubrique'
163
+                ],
164
+                'parent' => [
165
+                    ['type' => 'rubrique', 'champ' => 'id_rubrique']
166
+                ],
167
+                'rechercher_champs' => [
168
+                    'surtitre' => 5,
169
+                    'titre' => 8,
170
+                    'soustitre' => 5,
171
+                    'chapo' => 3,
172
+                    'texte' => 1,
173
+                    'ps' => 1,
174
+                    'nom_site' => 1,
175
+                    'url_site' => 1,
176
+                    'descriptif' => 4
177
+                ],
178
+                'rechercher_jointures' => [
179
+                    'auteur' => ['nom' => 10],
180
+                ],
181
+                'statut' => [
182
+                    [
183
+                        'champ' => 'statut',
184
+                        'publie' => 'publie',
185
+                        'previsu' => 'publie,prop,prepa/auteur',
186
+                        'post_date' => 'date',
187
+                        'exception' => ['statut', 'tout']
188
+                    ]
189
+                ],
190
+                'statut_titres' => [
191
+                    'prepa' => 'info_article_redaction',
192
+                    'prop' => 'info_article_propose',
193
+                    'publie' => 'info_article_publie',
194
+                    'refuse' => 'info_article_refuse',
195
+                    'poubelle' => 'info_article_supprime'
196
+                ],
197
+                'statut_textes_instituer' => [
198
+                    'prepa' => 'texte_statut_en_cours_redaction',
199
+                    'prop' => 'texte_statut_propose_evaluation',
200
+                    'publie' => 'texte_statut_publie',
201
+                    'refuse' => 'texte_statut_refuse',
202
+                    'poubelle' => 'texte_statut_poubelle',
203
+                ],
204
+                'texte_changer_statut' => 'texte_article_statut',
205
+                'aide_changer_statut' => 'artstatut',
206
+                'tables_jointures' => [
207
+                    'profondeur' => 'rubriques',
208
+                    #'id_auteur' => 'auteurs_liens' // declaration generique plus bas
209
+                ],
210
+            ],
211
+            'spip_auteurs' => [
212
+                'page' => 'auteur',
213
+                'texte_retour' => 'icone_retour',
214
+                'texte_ajouter' => 'titre_ajouter_un_auteur',
215
+                'texte_modifier' => 'admin_modifier_auteur',
216
+                'texte_objets' => 'icone_auteurs',
217
+                'texte_objet' => 'public:auteur',
218
+                'info_aucun_objet' => 'info_aucun_auteur',
219
+                'info_1_objet' => 'info_1_auteur',
220
+                'info_nb_objets' => 'info_nb_auteurs',
221
+                'texte_logo_objet' => 'logo_auteur',
222
+                'texte_creer_associer' => 'creer_et_associer_un_auteur',
223
+                'titre' => "nom AS titre, '' AS lang",
224
+                'date' => 'date',
225
+                'principale' => 'oui',
226
+                'champs_editables' => ['nom', 'email', 'bio', 'nom_site', 'url_site', 'imessage', 'pgp'],
227
+                'champs_versionnes' => ['nom', 'bio', 'email', 'nom_site', 'url_site', 'login'],
228
+                'field' => [
229
+                    'id_auteur' => 'bigint(21) NOT NULL',
230
+                    'nom' => "text DEFAULT '' NOT NULL",
231
+                    'bio' => "text DEFAULT '' NOT NULL",
232
+                    'email' => "tinytext DEFAULT '' NOT NULL",
233
+                    'nom_site' => "tinytext DEFAULT '' NOT NULL",
234
+                    'url_site' => "text DEFAULT '' NOT NULL",
235
+                    'login' => 'VARCHAR(255) BINARY',
236
+                    'pass' => "tinytext DEFAULT '' NOT NULL",
237
+                    'low_sec' => "tinytext DEFAULT '' NOT NULL",
238
+                    'statut' => "varchar(255)  DEFAULT '0' NOT NULL",
239
+                    'webmestre' => "varchar(3)  DEFAULT 'non' NOT NULL",
240
+                    'maj' => 'TIMESTAMP',
241
+                    'pgp' => "TEXT DEFAULT '' NOT NULL",
242
+                    'htpass' => "tinytext DEFAULT '' NOT NULL",
243
+                    'en_ligne' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
244
+                    'alea_actuel' => 'tinytext',
245
+                    'alea_futur' => 'tinytext',
246
+                    'prefs' => 'text',
247
+                    'cookie_oubli' => 'tinytext',
248
+                    'source' => "VARCHAR(10) DEFAULT 'spip' NOT NULL",
249
+                    'lang' => "VARCHAR(10) DEFAULT '' NOT NULL",
250
+                    'imessage' => "VARCHAR(3) DEFAULT '' NOT NULL"
251
+                ],
252
+                'key' => [
253
+                    'PRIMARY KEY' => 'id_auteur',
254
+                    'KEY login' => 'login',
255
+                    'KEY statut' => 'statut',
256
+                    'KEY en_ligne' => 'en_ligne',
257
+                ],
258
+                'join' => [
259
+                    'id_auteur' => 'id_auteur',
260
+                    'login' => 'login'
261
+                ],
262
+                'rechercher_champs' => [
263
+                    'nom' => 5,
264
+                    'bio' => 1,
265
+                    'email' => 1,
266
+                    'nom_site' => 1,
267
+                    'url_site' => 1,
268
+                    'login' => 1
269
+                ],
270
+                // 2 conditions pour les auteurs : statut!=poubelle,
271
+                // et avoir des articles publies
272
+                'statut' => [
273
+                    [
274
+                        'champ' => 'statut',
275
+                        'publie' => '!5poubelle',
276
+                        'previsu' => '!5poubelle',
277
+                        'exception' => 'statut'
278
+                    ],
279
+                    [
280
+                        'champ' => [
281
+                            ['spip_auteurs_liens', 'id_auteur'],
282
+                            [
283
+                                'spip_articles',
284
+                                ['id_objet', 'id_article', 'objet', 'article']
285
+                            ],
286
+                            'statut'
287
+                        ],
288
+                        'publie' => 'publie',
289
+                        'previsu' => '!',
290
+                        'post_date' => 'date',
291
+                        'exception' => ['statut', 'lien', 'tout']
292
+                    ],
293
+                ],
294
+                'statut_images' => [
295
+                    'auteur-6forum-16.png',
296
+                    '0minirezo' => 'auteur-0minirezo-16.png',
297
+                    '1comite' => 'auteur-1comite-16.png',
298
+                    '6forum' => 'auteur-6forum-16.png',
299
+                    '5poubelle' => 'auteur-5poubelle-16.png',
300
+                    'nouveau' => ''
301
+                ],
302
+                'statut_titres' => [
303
+                    'titre_image_visiteur',
304
+                    '0minirezo' => 'titre_image_administrateur',
305
+                    '1comite' => 'titre_image_redacteur_02',
306
+                    '6forum' => 'titre_image_visiteur',
307
+                    '5poubelle' => 'titre_image_auteur_supprime',
308
+                ],
309
+                'tables_jointures' => [#'auteurs_liens' // declaration generique plus bas
310
+                ],
311
+            ],
312
+            'spip_rubriques' => [
313
+                'page' => 'rubrique',
314
+                'url_voir' => 'rubrique',
315
+                'url_edit' => 'rubrique_edit',
316
+                'texte_retour' => 'icone_retour',
317
+                'texte_objets' => 'public:rubriques',
318
+                'texte_objet' => 'public:rubrique',
319
+                'texte_modifier' => 'icone_modifier_rubrique',
320
+                'texte_creer' => 'icone_creer_rubrique',
321
+                'texte_ajouter' => 'titre_ajouter_une_rubrique',
322
+                'texte_creer_associer' => 'creer_et_associer_une_rubrique',
323
+                'info_aucun_objet' => 'info_aucun_rubrique',
324
+                'info_1_objet' => 'info_1_rubrique',
325
+                'info_nb_objets' => 'info_nb_rubriques',
326
+                'texte_logo_objet' => 'logo_rubrique',
327
+                'texte_langue_objet' => 'titre_langue_rubrique',
328
+                'texte_definir_comme_traduction_objet' => 'texte_definir_comme_traduction_rubrique',
329
+                'titre' => 'titre, lang',
330
+                'date' => 'date',
331
+                'principale' => 'oui',
332
+                'introduction_longueur' => '600',
333
+                'champs_editables' => ['titre', 'texte', 'descriptif', 'extra'],
334
+                'champs_versionnes' => ['titre', 'descriptif', 'texte'],
335
+                'field' => [
336
+                    'id_rubrique' => 'bigint(21) NOT NULL',
337
+                    'id_parent' => "bigint(21) DEFAULT '0' NOT NULL",
338
+                    'titre' => "text DEFAULT '' NOT NULL",
339
+                    'descriptif' => "text DEFAULT '' NOT NULL",
340
+                    'texte' => "longtext DEFAULT '' NOT NULL",
341
+                    'id_secteur' => "bigint(21) DEFAULT '0' NOT NULL",
342
+                    'maj' => 'TIMESTAMP',
343
+                    'statut' => "varchar(10) DEFAULT '0' NOT NULL",
344
+                    'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
345
+                    'lang' => "VARCHAR(10) DEFAULT '' NOT NULL",
346
+                    'langue_choisie' => "VARCHAR(3) DEFAULT 'non'",
347
+                    'statut_tmp' => "varchar(10) DEFAULT '0' NOT NULL",
348
+                    'date_tmp' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
349
+                    'profondeur' => "smallint(5) DEFAULT '0' NOT NULL"
350
+                ],
351
+                'key' => [
352
+                    'PRIMARY KEY' => 'id_rubrique',
353
+                    'KEY lang' => 'lang',
354
+                    'KEY id_parent' => 'id_parent',
355
+                ],
356
+                'parent' => [
357
+                    ['type' => 'rubrique', 'champ' => 'id_parent']
358
+                ],
359
+                'rechercher_champs' => [
360
+                    'titre' => 8,
361
+                    'descriptif' => 5,
362
+                    'texte' => 1
363
+                ],
364
+                'statut' => [
365
+                    [
366
+                        'champ' => 'statut',
367
+                        'publie' => 'publie',
368
+                        'previsu' => '!',
369
+                        'exception' => ['statut', 'tout']
370
+                    ],
371
+                ],
372
+                'tables_jointures' => [#'id_auteur' => 'auteurs_liens' // declaration generique plus bas
373
+                ],
374
+            ],
375
+            // toutes les tables ont le droit a une jointure sur les auteurs
376
+            ['tables_jointures' => ['id_auteur' => 'auteurs_liens']]
377
+        ];
378
+
379
+        // avant d'appeller les pipeline qui peuvent generer une reentrance a l'install
380
+        // initialiser la signature
381
+        $md5 = md5(serialize($infos_tables));
382
+
383
+        $GLOBALS['tables_principales'] = pipeline('declarer_tables_principales', $GLOBALS['tables_principales']);
384
+        $GLOBALS['tables_auxiliaires'] = pipeline('declarer_tables_auxiliaires', $GLOBALS['tables_auxiliaires']);
385
+        $infos_tables = pipeline('declarer_tables_objets_sql', $infos_tables);
386
+
387
+        // completer les informations manquantes ou implicites
388
+        $all = [];
389
+        foreach (array_keys($infos_tables) as $t) {
390
+            // les cles numeriques servent a declarer
391
+            // les proprietes applicables a tous les objets
392
+            // on les mets de cote
393
+            if (is_numeric($t)) {
394
+                $all = array_merge_recursive($all, $infos_tables[$t]);
395
+                unset($infos_tables[$t]);
396
+            } else {
397
+                $infos_tables[$t] = renseigner_table_objet_sql($t, $infos_tables[$t]);
398
+            }
399
+        }
400
+
401
+        // repercuter les proprietes generales communes a tous les objets
402
+        foreach (array_keys($infos_tables) as $t) {
403
+            foreach ($all as $i => $v) {
404
+                if (in_array($i, ['tables_jointures', 'champs_versionnes'])) {
405
+                    $add = $all[$i];
406
+                    // eviter les doublons de declaration de table jointure (ex des mots sur auteurs)
407
+                    // pour les declarations generiques avec cles numeriques
408
+                    if ($i == 'tables_jointures' and isset($infos_tables[$t][$i]) and is_countable($infos_tables[$t][$i]) ? count($infos_tables[$t][$i]) : 0) {
409
+                        $doublons = array_intersect($infos_tables[$t][$i], $add);
410
+                        foreach ($doublons as $d) {
411
+                            if (
412
+                                is_numeric(array_search($d, $infos_tables[$t][$i]))
413
+                                and is_numeric($k = array_search($d, $add))
414
+                            ) {
415
+                                unset($add[$k]);
416
+                            }
417
+                        }
418
+                    }
419
+                    $infos_tables[$t][$i] = array_merge($infos_tables[$t][$i] ?? [], $add);
420
+                } else {
421
+                    $infos_tables[$t][$i] = array_merge_recursive(
422
+                        $infos_tables[$t][$i] ?? [],
423
+                        $all[$i]
424
+                    );
425
+                }
426
+            }
427
+        }
428
+
429
+        // completer les tables principales et auxiliaires
430
+        // avec celles declarees uniquement dans declarer_table_objets_sql
431
+        // pour assurer la compat en transition
432
+        foreach ($infos_tables as $table => $infos) {
433
+            $principale_ou_auxiliaire = ($infos['principale'] ? 'tables_principales' : 'tables_auxiliaires');
434
+            // memoriser des champs eventuels declares par des plugins dans le pipeline tables_xxx
435
+            // qui a ete appelle avant
436
+            $mem = ($GLOBALS[$principale_ou_auxiliaire][$table] ?? []);
437
+            // l'ajouter au tableau
438
+            $GLOBALS[$principale_ou_auxiliaire][$table] = [];
439
+            if (isset($infos['field']) and isset($infos['key'])) {
440
+                foreach (['field', 'key', 'join'] as $k) {
441
+                    if (isset($infos_tables[$table][$k])) {
442
+                        $GLOBALS[$principale_ou_auxiliaire][$table][$k] = &$infos_tables[$table][$k];
443
+                    }
444
+                }
445
+            } else {
446
+                // ici on ne renvoie que les declarations, donc RIEN
447
+                // pour avoir la vrai description en base, il faut passer par trouver_table
448
+                $GLOBALS[$principale_ou_auxiliaire][$table] = [];
449
+            }
450
+            if (is_countable($mem) ? count($mem) : 0) {
451
+                foreach (array_keys($mem) as $k) {
452
+                    if (isset($GLOBALS[$principale_ou_auxiliaire][$table][$k])) {
453
+                        $GLOBALS[$principale_ou_auxiliaire][$table][$k] = array_merge(
454
+                            $GLOBALS[$principale_ou_auxiliaire][$table][$k],
455
+                            $mem[$k]
456
+                        );
457
+                    } else {
458
+                        $GLOBALS[$principale_ou_auxiliaire][$table][$k] = $mem[$k];
459
+                    }
460
+                }
461
+            }
462
+        }
463
+
464
+        // recuperer les interfaces (table_titre, table_date)
465
+        // on ne le fait que dans un second temps pour que table_objet soit fonctionnel
466
+        // dans le pipeline de declarer_tables_interfaces
467
+        include_spip('public/interfaces');
468
+        foreach (array_keys($infos_tables) as $t) {
469
+            $infos_tables[$t] = renseigner_table_objet_interfaces($t, $infos_tables[$t]);
470
+        }
471
+
472
+        $deja_la = false;
473
+        // signature
474
+        $md5 = md5(serialize($infos_tables));
475
+    }
476
+    if ($table_sql === '::md5') {
477
+        return $md5;
478
+    }
479
+    if ($table_sql and !isset($infos_tables[$table_sql])) {
480
+        #$desc = renseigner_table_objet_sql($table_sql,$desc);
481
+        $desc = renseigner_table_objet_interfaces($table_sql, $desc);
482
+
483
+        return $desc;
484
+    }
485
+    if ($table_sql) {
486
+        return $infos_tables[$table_sql] ?? [];
487
+    }
488
+
489
+    return $infos_tables;
490 490
 }
491 491
 
492 492
 
@@ -501,27 +501,27 @@  discard block
 block discarded – undo
501 501
  **/
502 502
 function base_serial(&$tables_principales) {
503 503
 
504
-	$spip_jobs = [
505
-		'id_job' => 'bigint(21) NOT NULL',
506
-		'descriptif' => "text DEFAULT '' NOT NULL",
507
-		'fonction' => 'varchar(255) NOT NULL', //nom de la fonction
508
-		'args' => "longblob DEFAULT '' NOT NULL", // arguments
509
-		'md5args' => "char(32) NOT NULL default ''", // signature des arguments
510
-		'inclure' => 'varchar(255) NOT NULL', // fichier a inclure ou path/ pour charger_fonction
511
-		'priorite' => 'smallint(6) NOT NULL default 0',
512
-		'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // date au plus tot
513
-		'status' => 'tinyint NOT NULL default 1',
514
-	];
515
-
516
-	$spip_jobs_key = [
517
-		'PRIMARY KEY' => 'id_job',
518
-		'KEY date' => 'date',
519
-		'KEY status' => 'status',
520
-	];
521
-
522
-	/// Attention: mes_fonctions peut avoir deja defini cette variable
523
-	/// il faut donc rajouter, mais pas reinitialiser
524
-	$tables_principales['spip_jobs'] = ['field' => &$spip_jobs, 'key' => &$spip_jobs_key];
504
+    $spip_jobs = [
505
+        'id_job' => 'bigint(21) NOT NULL',
506
+        'descriptif' => "text DEFAULT '' NOT NULL",
507
+        'fonction' => 'varchar(255) NOT NULL', //nom de la fonction
508
+        'args' => "longblob DEFAULT '' NOT NULL", // arguments
509
+        'md5args' => "char(32) NOT NULL default ''", // signature des arguments
510
+        'inclure' => 'varchar(255) NOT NULL', // fichier a inclure ou path/ pour charger_fonction
511
+        'priorite' => 'smallint(6) NOT NULL default 0',
512
+        'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // date au plus tot
513
+        'status' => 'tinyint NOT NULL default 1',
514
+    ];
515
+
516
+    $spip_jobs_key = [
517
+        'PRIMARY KEY' => 'id_job',
518
+        'KEY date' => 'date',
519
+        'KEY status' => 'status',
520
+    ];
521
+
522
+    /// Attention: mes_fonctions peut avoir deja defini cette variable
523
+    /// il faut donc rajouter, mais pas reinitialiser
524
+    $tables_principales['spip_jobs'] = ['field' => &$spip_jobs, 'key' => &$spip_jobs_key];
525 525
 }
526 526
 
527 527
 
@@ -533,71 +533,71 @@  discard block
 block discarded – undo
533 533
  * @return void
534 534
  **/
535 535
 function base_auxiliaires(&$tables_auxiliaires) {
536
-	$spip_resultats = [
537
-		'recherche' => "char(16) DEFAULT '' NOT NULL",
538
-		'id' => 'INT UNSIGNED NOT NULL',
539
-		'points' => "INT UNSIGNED DEFAULT '0' NOT NULL",
540
-		'table_objet' => "varchar(30) DEFAULT '' NOT NULL",
541
-		'serveur' => "char(16) DEFAULT '' NOT NULL", // hash md5 partiel du serveur de base ('' pour le serveur principal)
542
-		'maj' => 'TIMESTAMP'
543
-	];
544
-
545
-	$spip_resultats_key = [// pas de cle ni index, ca fait des insertions plus rapides et les requetes jointes utilisees en recheche ne sont pas plus lentes ...
546
-	];
547
-
548
-	$spip_auteurs_liens = [
549
-		'id_auteur' => "bigint(21) DEFAULT '0' NOT NULL",
550
-		'id_objet' => "bigint(21) DEFAULT '0' NOT NULL",
551
-		'objet' => "VARCHAR (25) DEFAULT '' NOT NULL",
552
-		'vu' => "VARCHAR(6) DEFAULT 'non' NOT NULL"
553
-	];
554
-
555
-	$spip_auteurs_liens_key = [
556
-		'PRIMARY KEY' => 'id_auteur,id_objet,objet',
557
-		'KEY id_auteur' => 'id_auteur',
558
-		'KEY id_objet' => 'id_objet',
559
-		'KEY objet' => 'objet',
560
-	];
561
-
562
-	$spip_meta = [
563
-		'nom' => 'VARCHAR (255) NOT NULL',
564
-		'valeur' => "text DEFAULT ''",
565
-		'impt' => "ENUM('non', 'oui') DEFAULT 'oui' NOT NULL",
566
-		'maj' => 'TIMESTAMP'
567
-	];
568
-
569
-	$spip_meta_key = [
570
-		'PRIMARY KEY' => 'nom'
571
-	];
572
-
573
-	$spip_jobs_liens = [
574
-		'id_job' => "bigint(21) DEFAULT '0' NOT NULL",
575
-		'id_objet' => "bigint(21) DEFAULT '0' NOT NULL",
576
-		'objet' => "VARCHAR (25) DEFAULT '' NOT NULL",
577
-	];
578
-
579
-	$spip_jobs_liens_key = [
580
-		'PRIMARY KEY' => 'id_job,id_objet,objet',
581
-		'KEY id_job' => 'id_job'
582
-	];
583
-
584
-	$tables_auxiliaires['spip_auteurs_liens'] = [
585
-		'field' => &$spip_auteurs_liens,
586
-		'key' => &$spip_auteurs_liens_key
587
-	];
588
-
589
-	$tables_auxiliaires['spip_meta'] = [
590
-		'field' => &$spip_meta,
591
-		'key' => &$spip_meta_key
592
-	];
593
-	$tables_auxiliaires['spip_resultats'] = [
594
-		'field' => &$spip_resultats,
595
-		'key' => &$spip_resultats_key
596
-	];
597
-	$tables_auxiliaires['spip_jobs_liens'] = [
598
-		'field' => &$spip_jobs_liens,
599
-		'key' => &$spip_jobs_liens_key
600
-	];
536
+    $spip_resultats = [
537
+        'recherche' => "char(16) DEFAULT '' NOT NULL",
538
+        'id' => 'INT UNSIGNED NOT NULL',
539
+        'points' => "INT UNSIGNED DEFAULT '0' NOT NULL",
540
+        'table_objet' => "varchar(30) DEFAULT '' NOT NULL",
541
+        'serveur' => "char(16) DEFAULT '' NOT NULL", // hash md5 partiel du serveur de base ('' pour le serveur principal)
542
+        'maj' => 'TIMESTAMP'
543
+    ];
544
+
545
+    $spip_resultats_key = [// pas de cle ni index, ca fait des insertions plus rapides et les requetes jointes utilisees en recheche ne sont pas plus lentes ...
546
+    ];
547
+
548
+    $spip_auteurs_liens = [
549
+        'id_auteur' => "bigint(21) DEFAULT '0' NOT NULL",
550
+        'id_objet' => "bigint(21) DEFAULT '0' NOT NULL",
551
+        'objet' => "VARCHAR (25) DEFAULT '' NOT NULL",
552
+        'vu' => "VARCHAR(6) DEFAULT 'non' NOT NULL"
553
+    ];
554
+
555
+    $spip_auteurs_liens_key = [
556
+        'PRIMARY KEY' => 'id_auteur,id_objet,objet',
557
+        'KEY id_auteur' => 'id_auteur',
558
+        'KEY id_objet' => 'id_objet',
559
+        'KEY objet' => 'objet',
560
+    ];
561
+
562
+    $spip_meta = [
563
+        'nom' => 'VARCHAR (255) NOT NULL',
564
+        'valeur' => "text DEFAULT ''",
565
+        'impt' => "ENUM('non', 'oui') DEFAULT 'oui' NOT NULL",
566
+        'maj' => 'TIMESTAMP'
567
+    ];
568
+
569
+    $spip_meta_key = [
570
+        'PRIMARY KEY' => 'nom'
571
+    ];
572
+
573
+    $spip_jobs_liens = [
574
+        'id_job' => "bigint(21) DEFAULT '0' NOT NULL",
575
+        'id_objet' => "bigint(21) DEFAULT '0' NOT NULL",
576
+        'objet' => "VARCHAR (25) DEFAULT '' NOT NULL",
577
+    ];
578
+
579
+    $spip_jobs_liens_key = [
580
+        'PRIMARY KEY' => 'id_job,id_objet,objet',
581
+        'KEY id_job' => 'id_job'
582
+    ];
583
+
584
+    $tables_auxiliaires['spip_auteurs_liens'] = [
585
+        'field' => &$spip_auteurs_liens,
586
+        'key' => &$spip_auteurs_liens_key
587
+    ];
588
+
589
+    $tables_auxiliaires['spip_meta'] = [
590
+        'field' => &$spip_meta,
591
+        'key' => &$spip_meta_key
592
+    ];
593
+    $tables_auxiliaires['spip_resultats'] = [
594
+        'field' => &$spip_resultats,
595
+        'key' => &$spip_resultats_key
596
+    ];
597
+    $tables_auxiliaires['spip_jobs_liens'] = [
598
+        'field' => &$spip_jobs_liens,
599
+        'key' => &$spip_jobs_liens_key
600
+    ];
601 601
 }
602 602
 
603 603
 
@@ -654,129 +654,129 @@  discard block
 block discarded – undo
654 654
  * @return array
655 655
  */
656 656
 function renseigner_table_objet_sql($table_sql, &$infos) {
657
-	if (!isset($infos['type'])) {
658
-		// si on arrive de base/trouver_table, on a la cle primaire :
659
-		// s'en servir pour extrapoler le type
660
-		if (isset($infos['key']['PRIMARY KEY'])) {
661
-			$primary = $infos['key']['PRIMARY KEY'];
662
-			$primary = explode(',', $primary);
663
-			$primary = reset($primary);
664
-			$infos['type'] = preg_replace(',^spip_|^id_|s$,', '', $primary);
665
-		} else {
666
-			$infos['type'] = preg_replace(',^spip_|s$,', '', $table_sql);
667
-		}
668
-	}
669
-	if (!isset($infos['type_surnoms'])) {
670
-		$infos['type_surnoms'] = [];
671
-	}
672
-
673
-	if (!isset($infos['table_objet'])) {
674
-		$infos['table_objet'] = preg_replace(',^spip_,', '', $table_sql);
675
-	}
676
-	if (!isset($infos['table_objet_surnoms'])) {
677
-		$infos['table_objet_surnoms'] = [];
678
-	}
679
-
680
-	if (!isset($infos['principale'])) {
681
-		$infos['principale'] = (isset($GLOBALS['tables_principales'][$table_sql]) ? 'oui' : false);
682
-	}
683
-
684
-	// normaliser pour pouvoir tester en php $infos['principale']?
685
-	// et dans une boucle {principale=oui}
686
-	$infos['principale'] = (($infos['principale'] and $infos['principale'] != 'non') ? 'oui' : false);
687
-
688
-	// declarer et normaliser pour pouvoir tester en php $infos['editable']?
689
-	// et dans une boucle {editable=oui}
690
-	if (!isset($infos['editable'])) {
691
-		$infos['editable'] = 'oui';
692
-	}
693
-
694
-	$infos['editable'] = (($infos['editable'] and $infos['editable'] != 'non') ? 'oui' : false);
695
-
696
-	// les urls publiques sont par defaut page=type pour les tables principales, et rien pour les autres
697
-	// seules les exceptions sont donc a declarer
698
-	if (!isset($infos['page'])) {
699
-		$infos['page'] = ($infos['principale'] ? $infos['type'] : '');
700
-	}
701
-
702
-	if (!isset($infos['url_voir'])) {
703
-		$infos['url_voir'] = $infos['type'];
704
-	}
705
-	if (!isset($infos['url_edit'])) {
706
-		$infos['url_edit'] = $infos['url_voir'] . ($infos['editable'] ? '_edit' : '');
707
-	}
708
-	if (!isset($infos['icone_objet'])) {
709
-		$infos['icone_objet'] = $infos['type'];
710
-	}
711
-
712
-	// chaines de langue
713
-	// par defaut : objet:icone_xxx_objet
714
-	if (!isset($infos['texte_retour'])) {
715
-		$infos['texte_retour'] = 'icone_retour';
716
-	}
717
-	if (!isset($infos['texte_modifier'])) {
718
-		$infos['texte_modifier'] = $infos['type'] . ':' . 'icone_modifier_' . $infos['type'];
719
-	}
720
-	if (!isset($infos['texte_creer'])) {
721
-		$infos['texte_creer'] = $infos['type'] . ':' . 'icone_creer_' . $infos['type'];
722
-	}
723
-	if (!isset($infos['texte_creer_associer'])) {
724
-		$infos['texte_creer_associer'] = $infos['type'] . ':' . 'texte_creer_associer_' . $infos['type'];
725
-	}
726
-	if (!isset($infos['texte_ajouter'])) {
727
-		// Ajouter un X
728
-		$infos['texte_ajouter'] = $infos['type'] . ':' . 'texte_ajouter_' . $infos['type'];
729
-	}
730
-	if (!isset($infos['texte_objets'])) {
731
-		$infos['texte_objets'] = $infos['type'] . ':' . 'titre_' . $infos['table_objet'];
732
-	}
733
-	if (!isset($infos['texte_objet'])) {
734
-		$infos['texte_objet'] = $infos['type'] . ':' . 'titre_' . $infos['type'];
735
-	}
736
-	if (!isset($infos['texte_logo_objet'])) {
737
-		// objet:titre_logo_objet "Logo de ce X"
738
-		$infos['texte_logo_objet'] = $infos['type'] . ':' . 'titre_logo_' . $infos['type'];
739
-	}
740
-	if (!isset($infos['texte_langue_objet'])) {
741
-		// objet:texte_langue_objet "Langue de ce X"
742
-		$infos['texte_langue_objet'] = $infos['type'] . ':' . 'titre_langue_' . $infos['type'];
743
-	}
744
-	if (!isset($infos['texte_definir_comme_traduction_objet'])) {
745
-		// "Ce X est une traduction du X numéro :"
746
-		$infos['texte_definir_comme_traduction_objet'] = $infos['type'] . ':' . 'texte_definir_comme_traduction_' . $infos['type'];
747
-	}
748
-
749
-	// objet:info_aucun_objet
750
-	if (!isset($infos['info_aucun_objet'])) {
751
-		$infos['info_aucun_objet'] = $infos['type'] . ':' . 'info_aucun_' . $infos['type'];
752
-	}
753
-	// objet:info_1_objet
754
-	if (!isset($infos['info_1_objet'])) {
755
-		$infos['info_1_objet'] = $infos['type'] . ':' . 'info_1_' . $infos['type'];
756
-	}
757
-	// objet:info_nb_objets
758
-	if (!isset($infos['info_nb_objets'])) {
759
-		$infos['info_nb_objets'] = $infos['type'] . ':' . 'info_nb_' . $infos['table_objet'];
760
-	}
761
-
762
-	if (!isset($infos['champs_editables'])) {
763
-		$infos['champs_editables'] = [];
764
-	}
765
-	if (!isset($infos['champs_versionnes'])) {
766
-		$infos['champs_versionnes'] = [];
767
-	}
768
-	if (!isset($infos['rechercher_champs'])) {
769
-		$infos['rechercher_champs'] = [];
770
-	}
771
-	if (!isset($infos['rechercher_jointures'])) {
772
-		$infos['rechercher_jointures'] = [];
773
-	}
774
-
775
-	if (!isset($infos['modeles'])) {
776
-		$infos['modeles'] = [$infos['type']];
777
-	}
778
-
779
-	return $infos;
657
+    if (!isset($infos['type'])) {
658
+        // si on arrive de base/trouver_table, on a la cle primaire :
659
+        // s'en servir pour extrapoler le type
660
+        if (isset($infos['key']['PRIMARY KEY'])) {
661
+            $primary = $infos['key']['PRIMARY KEY'];
662
+            $primary = explode(',', $primary);
663
+            $primary = reset($primary);
664
+            $infos['type'] = preg_replace(',^spip_|^id_|s$,', '', $primary);
665
+        } else {
666
+            $infos['type'] = preg_replace(',^spip_|s$,', '', $table_sql);
667
+        }
668
+    }
669
+    if (!isset($infos['type_surnoms'])) {
670
+        $infos['type_surnoms'] = [];
671
+    }
672
+
673
+    if (!isset($infos['table_objet'])) {
674
+        $infos['table_objet'] = preg_replace(',^spip_,', '', $table_sql);
675
+    }
676
+    if (!isset($infos['table_objet_surnoms'])) {
677
+        $infos['table_objet_surnoms'] = [];
678
+    }
679
+
680
+    if (!isset($infos['principale'])) {
681
+        $infos['principale'] = (isset($GLOBALS['tables_principales'][$table_sql]) ? 'oui' : false);
682
+    }
683
+
684
+    // normaliser pour pouvoir tester en php $infos['principale']?
685
+    // et dans une boucle {principale=oui}
686
+    $infos['principale'] = (($infos['principale'] and $infos['principale'] != 'non') ? 'oui' : false);
687
+
688
+    // declarer et normaliser pour pouvoir tester en php $infos['editable']?
689
+    // et dans une boucle {editable=oui}
690
+    if (!isset($infos['editable'])) {
691
+        $infos['editable'] = 'oui';
692
+    }
693
+
694
+    $infos['editable'] = (($infos['editable'] and $infos['editable'] != 'non') ? 'oui' : false);
695
+
696
+    // les urls publiques sont par defaut page=type pour les tables principales, et rien pour les autres
697
+    // seules les exceptions sont donc a declarer
698
+    if (!isset($infos['page'])) {
699
+        $infos['page'] = ($infos['principale'] ? $infos['type'] : '');
700
+    }
701
+
702
+    if (!isset($infos['url_voir'])) {
703
+        $infos['url_voir'] = $infos['type'];
704
+    }
705
+    if (!isset($infos['url_edit'])) {
706
+        $infos['url_edit'] = $infos['url_voir'] . ($infos['editable'] ? '_edit' : '');
707
+    }
708
+    if (!isset($infos['icone_objet'])) {
709
+        $infos['icone_objet'] = $infos['type'];
710
+    }
711
+
712
+    // chaines de langue
713
+    // par defaut : objet:icone_xxx_objet
714
+    if (!isset($infos['texte_retour'])) {
715
+        $infos['texte_retour'] = 'icone_retour';
716
+    }
717
+    if (!isset($infos['texte_modifier'])) {
718
+        $infos['texte_modifier'] = $infos['type'] . ':' . 'icone_modifier_' . $infos['type'];
719
+    }
720
+    if (!isset($infos['texte_creer'])) {
721
+        $infos['texte_creer'] = $infos['type'] . ':' . 'icone_creer_' . $infos['type'];
722
+    }
723
+    if (!isset($infos['texte_creer_associer'])) {
724
+        $infos['texte_creer_associer'] = $infos['type'] . ':' . 'texte_creer_associer_' . $infos['type'];
725
+    }
726
+    if (!isset($infos['texte_ajouter'])) {
727
+        // Ajouter un X
728
+        $infos['texte_ajouter'] = $infos['type'] . ':' . 'texte_ajouter_' . $infos['type'];
729
+    }
730
+    if (!isset($infos['texte_objets'])) {
731
+        $infos['texte_objets'] = $infos['type'] . ':' . 'titre_' . $infos['table_objet'];
732
+    }
733
+    if (!isset($infos['texte_objet'])) {
734
+        $infos['texte_objet'] = $infos['type'] . ':' . 'titre_' . $infos['type'];
735
+    }
736
+    if (!isset($infos['texte_logo_objet'])) {
737
+        // objet:titre_logo_objet "Logo de ce X"
738
+        $infos['texte_logo_objet'] = $infos['type'] . ':' . 'titre_logo_' . $infos['type'];
739
+    }
740
+    if (!isset($infos['texte_langue_objet'])) {
741
+        // objet:texte_langue_objet "Langue de ce X"
742
+        $infos['texte_langue_objet'] = $infos['type'] . ':' . 'titre_langue_' . $infos['type'];
743
+    }
744
+    if (!isset($infos['texte_definir_comme_traduction_objet'])) {
745
+        // "Ce X est une traduction du X numéro :"
746
+        $infos['texte_definir_comme_traduction_objet'] = $infos['type'] . ':' . 'texte_definir_comme_traduction_' . $infos['type'];
747
+    }
748
+
749
+    // objet:info_aucun_objet
750
+    if (!isset($infos['info_aucun_objet'])) {
751
+        $infos['info_aucun_objet'] = $infos['type'] . ':' . 'info_aucun_' . $infos['type'];
752
+    }
753
+    // objet:info_1_objet
754
+    if (!isset($infos['info_1_objet'])) {
755
+        $infos['info_1_objet'] = $infos['type'] . ':' . 'info_1_' . $infos['type'];
756
+    }
757
+    // objet:info_nb_objets
758
+    if (!isset($infos['info_nb_objets'])) {
759
+        $infos['info_nb_objets'] = $infos['type'] . ':' . 'info_nb_' . $infos['table_objet'];
760
+    }
761
+
762
+    if (!isset($infos['champs_editables'])) {
763
+        $infos['champs_editables'] = [];
764
+    }
765
+    if (!isset($infos['champs_versionnes'])) {
766
+        $infos['champs_versionnes'] = [];
767
+    }
768
+    if (!isset($infos['rechercher_champs'])) {
769
+        $infos['rechercher_champs'] = [];
770
+    }
771
+    if (!isset($infos['rechercher_jointures'])) {
772
+        $infos['rechercher_jointures'] = [];
773
+    }
774
+
775
+    if (!isset($infos['modeles'])) {
776
+        $infos['modeles'] = [$infos['type']];
777
+    }
778
+
779
+    return $infos;
780 780
 }
781 781
 
782 782
 /**
@@ -793,30 +793,30 @@  discard block
 block discarded – undo
793 793
  * @return array
794 794
  */
795 795
 function renseigner_table_objet_interfaces($table_sql, &$infos) {
796
-	if (!isset($infos['titre'])) {
797
-		if (isset($infos['table_objet']) and isset($GLOBALS['table_titre'][$infos['table_objet']])) {
798
-			$infos['titre'] = $GLOBALS['table_titre'][$infos['table_objet']];
799
-		} else {
800
-			$infos['titre'] = ((isset($infos['field']['titre'])) ? 'titre,' : "'' as titre,");
801
-			$infos['titre'] .= ((isset($infos['field']['lang'])) ? 'lang' : "'' as lang");
802
-		}
803
-	}
804
-	if (!isset($infos['date'])) {
805
-		if (isset($infos['table_objet']) and isset($GLOBALS['table_date'][$infos['table_objet']])) {
806
-			$infos['date'] = $GLOBALS['table_date'][$infos['table_objet']];
807
-		} else {
808
-			$infos['date'] = ((isset($infos['field']['date'])) ? 'date' : '');
809
-		}
810
-	}
811
-
812
-	$infos['statut'] ??= $GLOBALS['table_statut'][$table_sql] ?? '';
813
-	$infos['tables_jointures'] ??= [];
814
-
815
-	if (isset($GLOBALS['tables_jointures'][$table_sql])) {
816
-		$infos['tables_jointures'] = array_merge($infos['tables_jointures'], $GLOBALS['tables_jointures'][$table_sql]);
817
-	}
818
-
819
-	return $infos;
796
+    if (!isset($infos['titre'])) {
797
+        if (isset($infos['table_objet']) and isset($GLOBALS['table_titre'][$infos['table_objet']])) {
798
+            $infos['titre'] = $GLOBALS['table_titre'][$infos['table_objet']];
799
+        } else {
800
+            $infos['titre'] = ((isset($infos['field']['titre'])) ? 'titre,' : "'' as titre,");
801
+            $infos['titre'] .= ((isset($infos['field']['lang'])) ? 'lang' : "'' as lang");
802
+        }
803
+    }
804
+    if (!isset($infos['date'])) {
805
+        if (isset($infos['table_objet']) and isset($GLOBALS['table_date'][$infos['table_objet']])) {
806
+            $infos['date'] = $GLOBALS['table_date'][$infos['table_objet']];
807
+        } else {
808
+            $infos['date'] = ((isset($infos['field']['date'])) ? 'date' : '');
809
+        }
810
+    }
811
+
812
+    $infos['statut'] ??= $GLOBALS['table_statut'][$table_sql] ?? '';
813
+    $infos['tables_jointures'] ??= [];
814
+
815
+    if (isset($GLOBALS['tables_jointures'][$table_sql])) {
816
+        $infos['tables_jointures'] = array_merge($infos['tables_jointures'], $GLOBALS['tables_jointures'][$table_sql]);
817
+    }
818
+
819
+    return $infos;
820 820
 }
821 821
 
822 822
 /**
@@ -827,13 +827,13 @@  discard block
 block discarded – undo
827 827
  *     Liste et descriptions des tables principales
828 828
  **/
829 829
 function lister_tables_principales() {
830
-	static $done = false;
831
-	if (!$done or !(is_countable($GLOBALS['tables_principales']) ? count($GLOBALS['tables_principales']) : 0)) {
832
-		lister_tables_objets_sql();
833
-		$done = true;
834
-	}
830
+    static $done = false;
831
+    if (!$done or !(is_countable($GLOBALS['tables_principales']) ? count($GLOBALS['tables_principales']) : 0)) {
832
+        lister_tables_objets_sql();
833
+        $done = true;
834
+    }
835 835
 
836
-	return $GLOBALS['tables_principales'];
836
+    return $GLOBALS['tables_principales'];
837 837
 }
838 838
 
839 839
 /**
@@ -844,13 +844,13 @@  discard block
 block discarded – undo
844 844
  *     Liste et descriptions des tables auxiliaires
845 845
  **/
846 846
 function lister_tables_auxiliaires() {
847
-	static $done = false;
848
-	if (!$done or !(is_countable($GLOBALS['tables_auxiliaires']) ? count($GLOBALS['tables_auxiliaires']) : 0)) {
849
-		lister_tables_objets_sql();
850
-		$done = true;
851
-	}
847
+    static $done = false;
848
+    if (!$done or !(is_countable($GLOBALS['tables_auxiliaires']) ? count($GLOBALS['tables_auxiliaires']) : 0)) {
849
+        lister_tables_objets_sql();
850
+        $done = true;
851
+    }
852 852
 
853
-	return $GLOBALS['tables_auxiliaires'];
853
+    return $GLOBALS['tables_auxiliaires'];
854 854
 }
855 855
 
856 856
 /**
@@ -859,45 +859,45 @@  discard block
 block discarded – undo
859 859
  * @return array
860 860
  */
861 861
 function lister_tables_objets_surnoms() {
862
-	static $surnoms = null;
863
-	static $md5 = null;
864
-	if (
865
-		!$surnoms
866
-		or $md5 != lister_tables_objets_sql('::md5')
867
-	) {
868
-		// passer dans un pipeline qui permet aux plugins de declarer leurs exceptions
869
-		// pour compatibilite, car il faut dorenavent utiliser
870
-		// declarer_table_objets_sql
871
-		$surnoms = pipeline(
872
-			'declarer_tables_objets_surnoms',
873
-			[
874
-				# pour les modeles
875
-				# a enlever ?
876
-				'doc' => 'documents',
877
-				'img' => 'documents',
878
-				'emb' => 'documents',
879
-			]
880
-		);
881
-		$infos_tables = lister_tables_objets_sql();
882
-		foreach ($infos_tables as $t => $infos) {
883
-			// cas de base type=>table
884
-			// et preg_replace(',^spip_|^id_|s$,',table)=>table
885
-			if ($infos['table_objet']) { // securite, si la fonction est appelee trop tot, c'est vide
886
-				// optimisations pour table_objet
887
-				//$surnoms[$infos['type']] = $infos['table_objet'];
888
-				$surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['table_objet'];
889
-				$surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['table_objet'];
890
-				if (is_array($infos['table_objet_surnoms']) and count($infos['table_objet_surnoms'])) {
891
-					foreach ($infos['table_objet_surnoms'] as $surnom) {
892
-						$surnoms[$surnom] = $infos['table_objet'];
893
-					}
894
-				}
895
-			}
896
-		}
897
-		$md5 = lister_tables_objets_sql('::md5');
898
-	}
899
-
900
-	return $surnoms;
862
+    static $surnoms = null;
863
+    static $md5 = null;
864
+    if (
865
+        !$surnoms
866
+        or $md5 != lister_tables_objets_sql('::md5')
867
+    ) {
868
+        // passer dans un pipeline qui permet aux plugins de declarer leurs exceptions
869
+        // pour compatibilite, car il faut dorenavent utiliser
870
+        // declarer_table_objets_sql
871
+        $surnoms = pipeline(
872
+            'declarer_tables_objets_surnoms',
873
+            [
874
+                # pour les modeles
875
+                # a enlever ?
876
+                'doc' => 'documents',
877
+                'img' => 'documents',
878
+                'emb' => 'documents',
879
+            ]
880
+        );
881
+        $infos_tables = lister_tables_objets_sql();
882
+        foreach ($infos_tables as $t => $infos) {
883
+            // cas de base type=>table
884
+            // et preg_replace(',^spip_|^id_|s$,',table)=>table
885
+            if ($infos['table_objet']) { // securite, si la fonction est appelee trop tot, c'est vide
886
+                // optimisations pour table_objet
887
+                //$surnoms[$infos['type']] = $infos['table_objet'];
888
+                $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['table_objet'];
889
+                $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['table_objet'];
890
+                if (is_array($infos['table_objet_surnoms']) and count($infos['table_objet_surnoms'])) {
891
+                    foreach ($infos['table_objet_surnoms'] as $surnom) {
892
+                        $surnoms[$surnom] = $infos['table_objet'];
893
+                    }
894
+                }
895
+            }
896
+        }
897
+        $md5 = lister_tables_objets_sql('::md5');
898
+    }
899
+
900
+    return $surnoms;
901 901
 }
902 902
 
903 903
 /**
@@ -906,35 +906,35 @@  discard block
 block discarded – undo
906 906
  * @return array
907 907
  */
908 908
 function lister_types_surnoms() {
909
-	static $surnoms = null;
910
-	static $md5 = null;
911
-	if (
912
-		!$surnoms
913
-		or $md5 != lister_tables_objets_sql('::md5')
914
-	) {
915
-		// passer dans un pipeline qui permet aux plugins de declarer leurs exceptions
916
-		// pour compatibilite, car il faut dorenavent utiliser
917
-		// declarer_table_objets_sql
918
-		$surnoms = pipeline('declarer_type_surnoms', ['racine-site' => 'site']);
919
-		$infos_tables = lister_tables_objets_sql();
920
-		foreach ($infos_tables as $t => $infos) {
921
-			if ($infos['type']) { // securite, si la fonction est appelee trop tot, c'est vide
922
-				// optimisations pour objet_type
923
-				//$surnoms[$infos['type']] = $infos['type'];
924
-				$surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['type'];
925
-				$surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['type'];
926
-				// surnoms declares
927
-				if (is_array($infos['type_surnoms']) and count($infos['type_surnoms'])) {
928
-					foreach ($infos['type_surnoms'] as $surnom) {
929
-						$surnoms[$surnom] = $infos['type'];
930
-					}
931
-				}
932
-			}
933
-		}
934
-		$md5 = lister_tables_objets_sql('::md5');
935
-	}
936
-
937
-	return $surnoms;
909
+    static $surnoms = null;
910
+    static $md5 = null;
911
+    if (
912
+        !$surnoms
913
+        or $md5 != lister_tables_objets_sql('::md5')
914
+    ) {
915
+        // passer dans un pipeline qui permet aux plugins de declarer leurs exceptions
916
+        // pour compatibilite, car il faut dorenavent utiliser
917
+        // declarer_table_objets_sql
918
+        $surnoms = pipeline('declarer_type_surnoms', ['racine-site' => 'site']);
919
+        $infos_tables = lister_tables_objets_sql();
920
+        foreach ($infos_tables as $t => $infos) {
921
+            if ($infos['type']) { // securite, si la fonction est appelee trop tot, c'est vide
922
+                // optimisations pour objet_type
923
+                //$surnoms[$infos['type']] = $infos['type'];
924
+                $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['type'];
925
+                $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['type'];
926
+                // surnoms declares
927
+                if (is_array($infos['type_surnoms']) and count($infos['type_surnoms'])) {
928
+                    foreach ($infos['type_surnoms'] as $surnom) {
929
+                        $surnoms[$surnom] = $infos['type'];
930
+                    }
931
+                }
932
+            }
933
+        }
934
+        $md5 = lister_tables_objets_sql('::md5');
935
+    }
936
+
937
+    return $surnoms;
938 938
 }
939 939
 
940 940
 /**
@@ -948,22 +948,22 @@  discard block
 block discarded – undo
948 948
  *     Couples (nom de la table SQL => même nom, sans 'spip_' devant)
949 949
  **/
950 950
 function lister_tables_spip($serveur = '') {
951
-	static $tables = [];
952
-	if (!isset($tables[$serveur])) {
953
-		$tables[$serveur] = [];
954
-		if (!function_exists('sql_alltable')) {
955
-			include_spip('base/abstract_sql');
956
-		}
957
-		$ts = sql_alltable(null, $serveur); // toutes les tables "spip_" (ou prefixe perso)
958
-		$connexion = $GLOBALS['connexions'][$serveur ?: 0];
959
-		$spip = $connexion['prefixe'] . '_';
960
-		foreach ($ts as $t) {
961
-			$t = substr($t, strlen($spip));
962
-			$tables[$serveur]["spip_$t"] = $t;
963
-		}
964
-	}
965
-
966
-	return $tables[$serveur];
951
+    static $tables = [];
952
+    if (!isset($tables[$serveur])) {
953
+        $tables[$serveur] = [];
954
+        if (!function_exists('sql_alltable')) {
955
+            include_spip('base/abstract_sql');
956
+        }
957
+        $ts = sql_alltable(null, $serveur); // toutes les tables "spip_" (ou prefixe perso)
958
+        $connexion = $GLOBALS['connexions'][$serveur ?: 0];
959
+        $spip = $connexion['prefixe'] . '_';
960
+        foreach ($ts as $t) {
961
+            $t = substr($t, strlen($spip));
962
+            $tables[$serveur]["spip_$t"] = $t;
963
+        }
964
+    }
965
+
966
+    return $tables[$serveur];
967 967
 }
968 968
 
969 969
 
@@ -978,18 +978,18 @@  discard block
 block discarded – undo
978 978
  *     Couples (nom de la table SQL => même nom)
979 979
  **/
980 980
 function lister_toutes_tables($serveur) {
981
-	static $tables = [];
982
-	if (!isset($tables[$serveur])) {
983
-		$tables[$serveur] = [];
984
-		if (!function_exists('sql_alltable')) {
985
-			include_spip('base/abstract_sql');
986
-		}
987
-		$ts = sql_alltable('%', $serveur); // toutes les tables
988
-		foreach ($ts as $t) {
989
-			$tables[$serveur][$t] = $t;
990
-		}
991
-	}
992
-	return $tables[$serveur];
981
+    static $tables = [];
982
+    if (!isset($tables[$serveur])) {
983
+        $tables[$serveur] = [];
984
+        if (!function_exists('sql_alltable')) {
985
+            include_spip('base/abstract_sql');
986
+        }
987
+        $ts = sql_alltable('%', $serveur); // toutes les tables
988
+        foreach ($ts as $t) {
989
+            $tables[$serveur][$t] = $t;
990
+        }
991
+    }
992
+    return $tables[$serveur];
993 993
 }
994 994
 
995 995
 /**
@@ -1010,39 +1010,39 @@  discard block
 block discarded – undo
1010 1010
  **/
1011 1011
 function table_objet(string $type, string $serveur = ''): string {
1012 1012
 
1013
-	if ($type) {
1014
-		$type = preg_replace(',^spip_|^id_|s$,', '', $type);
1015
-	}
1016
-	if (!strlen($type)) {
1017
-		return '';
1018
-	}
1019
-
1020
-	$surnoms = lister_tables_objets_surnoms();
1021
-	if (isset($surnoms[$type])) {
1022
-		return $surnoms[$type];
1023
-	}
1024
-
1025
-	if ($serveur !== false) {
1026
-		$t = lister_tables_spip($serveur);
1027
-		$trouver_table = charger_fonction('trouver_table', 'base');
1028
-		$typetrim = rtrim($type, 's') . 's';
1029
-		if (
1030
-			(isset($t[$typetrim]) or in_array($typetrim, $t))
1031
-			and ($desc = $trouver_table(rtrim($type, 's') . 's', $serveur))
1032
-		) {
1033
-			return $desc['id_table'];
1034
-		} elseif (
1035
-			(isset($t[$type]) or in_array($type, $t))
1036
-			and ($desc = $trouver_table($type, $serveur))
1037
-		) {
1038
-			return $desc['id_table'];
1039
-		}
1040
-
1041
-		spip_log('table_objet(' . $type . ') calculee sans verification');
1042
-		#spip_log(debug_backtrace(),'db');
1043
-	}
1044
-
1045
-	return rtrim($type, 's') . 's'; # cas historique ne devant plus servir, sauf si $serveur=false
1013
+    if ($type) {
1014
+        $type = preg_replace(',^spip_|^id_|s$,', '', $type);
1015
+    }
1016
+    if (!strlen($type)) {
1017
+        return '';
1018
+    }
1019
+
1020
+    $surnoms = lister_tables_objets_surnoms();
1021
+    if (isset($surnoms[$type])) {
1022
+        return $surnoms[$type];
1023
+    }
1024
+
1025
+    if ($serveur !== false) {
1026
+        $t = lister_tables_spip($serveur);
1027
+        $trouver_table = charger_fonction('trouver_table', 'base');
1028
+        $typetrim = rtrim($type, 's') . 's';
1029
+        if (
1030
+            (isset($t[$typetrim]) or in_array($typetrim, $t))
1031
+            and ($desc = $trouver_table(rtrim($type, 's') . 's', $serveur))
1032
+        ) {
1033
+            return $desc['id_table'];
1034
+        } elseif (
1035
+            (isset($t[$type]) or in_array($type, $t))
1036
+            and ($desc = $trouver_table($type, $serveur))
1037
+        ) {
1038
+            return $desc['id_table'];
1039
+        }
1040
+
1041
+        spip_log('table_objet(' . $type . ') calculee sans verification');
1042
+        #spip_log(debug_backtrace(),'db');
1043
+    }
1044
+
1045
+    return rtrim($type, 's') . 's'; # cas historique ne devant plus servir, sauf si $serveur=false
1046 1046
 }
1047 1047
 
1048 1048
 /**
@@ -1063,33 +1063,33 @@  discard block
 block discarded – undo
1063 1063
  **/
1064 1064
 function table_objet_sql(string $type, string $serveur = ''): string {
1065 1065
 
1066
-	$nom = table_objet($type, $serveur);
1067
-	if (!strlen($nom)) {
1068
-		return '';
1069
-	}
1070
-	if (!isset($GLOBALS['table_des_tables']['articles'])) {
1071
-		// eviter de multiples inclusions
1072
-		include_spip('public/interfaces');
1073
-	}
1074
-	if (isset($GLOBALS['table_des_tables'][$nom])) {
1075
-		$nom = $GLOBALS['table_des_tables'][$nom];
1076
-		$nom = "spip_$nom";
1077
-	} else {
1078
-		$infos_tables = lister_tables_objets_sql();
1079
-		if (isset($infos_tables["spip_$nom"])) {
1080
-			$nom = "spip_$nom";
1081
-		} elseif ($serveur !== false) {
1082
-			$t = lister_tables_spip($serveur);
1083
-			if (isset($t[$nom]) or in_array($nom, $t)) {
1084
-				$trouver_table = charger_fonction('trouver_table', 'base');
1085
-				if ($desc = $trouver_table($nom, $serveur)) {
1086
-					return $desc['table_sql'];
1087
-				}
1088
-			}
1089
-		}
1090
-	}
1091
-
1092
-	return $nom;
1066
+    $nom = table_objet($type, $serveur);
1067
+    if (!strlen($nom)) {
1068
+        return '';
1069
+    }
1070
+    if (!isset($GLOBALS['table_des_tables']['articles'])) {
1071
+        // eviter de multiples inclusions
1072
+        include_spip('public/interfaces');
1073
+    }
1074
+    if (isset($GLOBALS['table_des_tables'][$nom])) {
1075
+        $nom = $GLOBALS['table_des_tables'][$nom];
1076
+        $nom = "spip_$nom";
1077
+    } else {
1078
+        $infos_tables = lister_tables_objets_sql();
1079
+        if (isset($infos_tables["spip_$nom"])) {
1080
+            $nom = "spip_$nom";
1081
+        } elseif ($serveur !== false) {
1082
+            $t = lister_tables_spip($serveur);
1083
+            if (isset($t[$nom]) or in_array($nom, $t)) {
1084
+                $trouver_table = charger_fonction('trouver_table', 'base');
1085
+                if ($desc = $trouver_table($nom, $serveur)) {
1086
+                    return $desc['table_sql'];
1087
+                }
1088
+            }
1089
+        }
1090
+    }
1091
+
1092
+    return $nom;
1093 1093
 }
1094 1094
 
1095 1095
 /**
@@ -1108,35 +1108,35 @@  discard block
 block discarded – undo
1108 1108
  *     Nom de la clé primaire
1109 1109
  **/
1110 1110
 function id_table_objet($type, $serveur = '') {
1111
-	static $trouver_table = null;
1112
-	$type = objet_type($type, $serveur);
1113
-	if (!$type) {
1114
-		return;
1115
-	}
1116
-	$t = table_objet($type);
1117
-	if (!$trouver_table) {
1118
-		$trouver_table = charger_fonction('trouver_table', 'base');
1119
-	}
1120
-
1121
-	$ts = lister_tables_spip($serveur);
1122
-	if (
1123
-		in_array($t, $ts)
1124
-		or in_array($t, lister_toutes_tables($serveur))
1125
-	) {
1126
-		$desc = $trouver_table($t, $serveur);
1127
-		if (isset($desc['key']['PRIMARY KEY'])) {
1128
-			return $desc['key']['PRIMARY KEY'];
1129
-		}
1130
-		if (!$desc or isset($desc['field']["id_$type"])) {
1131
-			return "id_$type";
1132
-		}
1133
-		// sinon renvoyer le premier champ de la table...
1134
-		$keys = array_keys($desc['field']);
1135
-
1136
-		return array_shift($keys);
1137
-	}
1138
-
1139
-	return "id_$type";
1111
+    static $trouver_table = null;
1112
+    $type = objet_type($type, $serveur);
1113
+    if (!$type) {
1114
+        return;
1115
+    }
1116
+    $t = table_objet($type);
1117
+    if (!$trouver_table) {
1118
+        $trouver_table = charger_fonction('trouver_table', 'base');
1119
+    }
1120
+
1121
+    $ts = lister_tables_spip($serveur);
1122
+    if (
1123
+        in_array($t, $ts)
1124
+        or in_array($t, lister_toutes_tables($serveur))
1125
+    ) {
1126
+        $desc = $trouver_table($t, $serveur);
1127
+        if (isset($desc['key']['PRIMARY KEY'])) {
1128
+            return $desc['key']['PRIMARY KEY'];
1129
+        }
1130
+        if (!$desc or isset($desc['field']["id_$type"])) {
1131
+            return "id_$type";
1132
+        }
1133
+        // sinon renvoyer le premier champ de la table...
1134
+        $keys = array_keys($desc['field']);
1135
+
1136
+        return array_shift($keys);
1137
+    }
1138
+
1139
+    return "id_$type";
1140 1140
 }
1141 1141
 
1142 1142
 /**
@@ -1155,60 +1155,60 @@  discard block
 block discarded – undo
1155 1155
  *     Type de l'objet
1156 1156
  **/
1157 1157
 function objet_type(string $table_objet, string $serveur = '') : ?string {
1158
-	if (!$table_objet) {
1159
-		return null;
1160
-	}
1161
-	$surnoms = lister_types_surnoms();
1162
-
1163
-	// scenario de base
1164
-	// le type est decline a partir du nom de la table en enlevant le prefixe eventuel
1165
-	// et la marque du pluriel
1166
-	// on accepte id_xx en entree aussi
1167
-	$type = preg_replace(',^spip_|^id_|s$,', '', $table_objet);
1168
-	if (isset($surnoms[$type])) {
1169
-		return $surnoms[$type];
1170
-	}
1171
-
1172
-	// securite : eliminer les caracteres non \w
1173
-	$type = preg_replace(',[^\w-],', '', $type);
1174
-
1175
-	// si le type redonne bien la table c'est bon
1176
-	// oui si table_objet ressemblait deja a un type
1177
-	if (
1178
-		$type == $table_objet
1179
-		or (table_objet($type, $serveur) == $table_objet)
1180
-		or (table_objet_sql($type, $serveur) == $table_objet)
1181
-	) {
1182
-		return $type;
1183
-	}
1184
-
1185
-	// si on ne veut pas chercher en base
1186
-	if ($serveur === false) {
1187
-		return $type;
1188
-	}
1189
-
1190
-	// sinon on passe par la cle primaire id_xx pour trouver le type
1191
-	// car le s a la fin est incertain
1192
-	// notamment en cas de pluriel derogatoire
1193
-	// id_jeu/spip_jeux id_journal/spip_journaux qui necessitent tout deux
1194
-	// une declaration jeu => jeux, journal => journaux
1195
-	// dans le pipeline declarer_tables_objets_surnoms
1196
-	$trouver_table = charger_fonction('trouver_table', 'base');
1197
-	$ts = lister_tables_spip($serveur);
1198
-	$desc = false;
1199
-	if (in_array($table_objet, $ts)) {
1200
-		$desc = $trouver_table($table_objet);
1201
-	}
1202
-	if (!$desc and in_array($table_objet = table_objet($type, $serveur), $ts)) {
1203
-		$desc = $trouver_table($table_objet, $serveur);
1204
-	}
1205
-	// si le type est declare : bingo !
1206
-	if ($desc and isset($desc['type'])) {
1207
-		return $desc['type'];
1208
-	}
1209
-
1210
-	// on a fait ce qu'on a pu
1211
-	return $type;
1158
+    if (!$table_objet) {
1159
+        return null;
1160
+    }
1161
+    $surnoms = lister_types_surnoms();
1162
+
1163
+    // scenario de base
1164
+    // le type est decline a partir du nom de la table en enlevant le prefixe eventuel
1165
+    // et la marque du pluriel
1166
+    // on accepte id_xx en entree aussi
1167
+    $type = preg_replace(',^spip_|^id_|s$,', '', $table_objet);
1168
+    if (isset($surnoms[$type])) {
1169
+        return $surnoms[$type];
1170
+    }
1171
+
1172
+    // securite : eliminer les caracteres non \w
1173
+    $type = preg_replace(',[^\w-],', '', $type);
1174
+
1175
+    // si le type redonne bien la table c'est bon
1176
+    // oui si table_objet ressemblait deja a un type
1177
+    if (
1178
+        $type == $table_objet
1179
+        or (table_objet($type, $serveur) == $table_objet)
1180
+        or (table_objet_sql($type, $serveur) == $table_objet)
1181
+    ) {
1182
+        return $type;
1183
+    }
1184
+
1185
+    // si on ne veut pas chercher en base
1186
+    if ($serveur === false) {
1187
+        return $type;
1188
+    }
1189
+
1190
+    // sinon on passe par la cle primaire id_xx pour trouver le type
1191
+    // car le s a la fin est incertain
1192
+    // notamment en cas de pluriel derogatoire
1193
+    // id_jeu/spip_jeux id_journal/spip_journaux qui necessitent tout deux
1194
+    // une declaration jeu => jeux, journal => journaux
1195
+    // dans le pipeline declarer_tables_objets_surnoms
1196
+    $trouver_table = charger_fonction('trouver_table', 'base');
1197
+    $ts = lister_tables_spip($serveur);
1198
+    $desc = false;
1199
+    if (in_array($table_objet, $ts)) {
1200
+        $desc = $trouver_table($table_objet);
1201
+    }
1202
+    if (!$desc and in_array($table_objet = table_objet($type, $serveur), $ts)) {
1203
+        $desc = $trouver_table($table_objet, $serveur);
1204
+    }
1205
+    // si le type est declare : bingo !
1206
+    if ($desc and isset($desc['type'])) {
1207
+        return $desc['type'];
1208
+    }
1209
+
1210
+    // on a fait ce qu'on a pu
1211
+    return $type;
1212 1212
 }
1213 1213
 
1214 1214
 /**
@@ -1224,62 +1224,62 @@  discard block
 block discarded – undo
1224 1224
  * @return bool
1225 1225
  */
1226 1226
 function objet_test_si_publie($objet, $id_objet, $serveur = '') {
1227
-	// voir si une fonction est definie pour faire le boulot
1228
-	// elle a la priorite dans ce cas
1229
-	if ($f = charger_fonction($objet . '_test_si_publie', 'base', true)) {
1230
-		return $f($objet, $id_objet, $serveur);
1231
-	}
1232
-
1233
-	// sinon on se fie a la declaration de l'objet si presente
1234
-	$id_table = $table_objet = table_objet($objet);
1235
-	$id_table_objet = id_table_objet($objet, $serveur);
1236
-	$trouver_table = charger_fonction('trouver_table', 'base');
1237
-	if (
1238
-		$desc = $trouver_table($table_objet, $serveur)
1239
-		and isset($desc['statut'])
1240
-		and $desc['statut']
1241
-	) {
1242
-		$boucle = new Boucle();
1243
-		$boucle->show = $desc;
1244
-		$boucle->nom = 'objet_test_si_publie';
1245
-		$boucle->id_boucle = $id_table;
1246
-		$boucle->id_table = $id_table;
1247
-		$boucle->primary = $desc['key']['PRIMARY KEY'] ?? '';
1248
-		$boucle->sql_serveur = $serveur;
1249
-		$boucle->select[] = $id_table_objet;
1250
-		$boucle->from[$table_objet] = table_objet_sql($objet, $serveur);
1251
-		$boucle->where[] = $id_table . '.' . $id_table_objet . '=' . intval($id_objet);
1252
-
1253
-		$boucle->descr['nom'] = 'objet_test_si_publie'; // eviter notice php
1254
-		$boucle->descr['sourcefile'] = 'internal';
1255
-		$boucle->descr['gram'] = 'html';
1256
-
1257
-		include_spip('public/compiler');
1258
-		include_spip('public/composer');
1259
-		instituer_boucle($boucle, false, true);
1260
-		$res = calculer_select(
1261
-			$boucle->select,
1262
-			$boucle->from,
1263
-			$boucle->from_type,
1264
-			$boucle->where,
1265
-			$boucle->join,
1266
-			$boucle->group,
1267
-			$boucle->order,
1268
-			$boucle->limit,
1269
-			$boucle->having,
1270
-			$table_objet,
1271
-			$id_table,
1272
-			$serveur
1273
-		);
1274
-		if (sql_fetch($res)) {
1275
-			return true;
1276
-		}
1277
-
1278
-		return false;
1279
-	}
1280
-
1281
-	// si pas d'info statut ni de fonction : l'objet est publie
1282
-	return true;
1227
+    // voir si une fonction est definie pour faire le boulot
1228
+    // elle a la priorite dans ce cas
1229
+    if ($f = charger_fonction($objet . '_test_si_publie', 'base', true)) {
1230
+        return $f($objet, $id_objet, $serveur);
1231
+    }
1232
+
1233
+    // sinon on se fie a la declaration de l'objet si presente
1234
+    $id_table = $table_objet = table_objet($objet);
1235
+    $id_table_objet = id_table_objet($objet, $serveur);
1236
+    $trouver_table = charger_fonction('trouver_table', 'base');
1237
+    if (
1238
+        $desc = $trouver_table($table_objet, $serveur)
1239
+        and isset($desc['statut'])
1240
+        and $desc['statut']
1241
+    ) {
1242
+        $boucle = new Boucle();
1243
+        $boucle->show = $desc;
1244
+        $boucle->nom = 'objet_test_si_publie';
1245
+        $boucle->id_boucle = $id_table;
1246
+        $boucle->id_table = $id_table;
1247
+        $boucle->primary = $desc['key']['PRIMARY KEY'] ?? '';
1248
+        $boucle->sql_serveur = $serveur;
1249
+        $boucle->select[] = $id_table_objet;
1250
+        $boucle->from[$table_objet] = table_objet_sql($objet, $serveur);
1251
+        $boucle->where[] = $id_table . '.' . $id_table_objet . '=' . intval($id_objet);
1252
+
1253
+        $boucle->descr['nom'] = 'objet_test_si_publie'; // eviter notice php
1254
+        $boucle->descr['sourcefile'] = 'internal';
1255
+        $boucle->descr['gram'] = 'html';
1256
+
1257
+        include_spip('public/compiler');
1258
+        include_spip('public/composer');
1259
+        instituer_boucle($boucle, false, true);
1260
+        $res = calculer_select(
1261
+            $boucle->select,
1262
+            $boucle->from,
1263
+            $boucle->from_type,
1264
+            $boucle->where,
1265
+            $boucle->join,
1266
+            $boucle->group,
1267
+            $boucle->order,
1268
+            $boucle->limit,
1269
+            $boucle->having,
1270
+            $table_objet,
1271
+            $id_table,
1272
+            $serveur
1273
+        );
1274
+        if (sql_fetch($res)) {
1275
+            return true;
1276
+        }
1277
+
1278
+        return false;
1279
+    }
1280
+
1281
+    // si pas d'info statut ni de fonction : l'objet est publie
1282
+    return true;
1283 1283
 }
1284 1284
 
1285 1285
 
@@ -1314,124 +1314,124 @@  discard block
 block discarded – undo
1314 1314
  *     Retourne un tableau décrivant les parents trouvés
1315 1315
  */
1316 1316
 function objet_lister_parents($objet, $id_objet, $parent_direct_seulement = false) {
1317
-	$parents = [];
1318
-
1319
-	// Si on trouve une ou des méthodes de parent
1320
-	if ($parent_methodes = objet_type_decrire_infos_parents($objet)) {
1321
-		// On identifie les informations sur l'objet source dont on cherche le parent.
1322
-		include_spip('base/abstract_sql');
1323
-		$table_objet = table_objet_sql($objet);
1324
-		$cle_objet = id_table_objet($objet);
1325
-		$id_objet = intval($id_objet);
1326
-
1327
-		// On teste chacun méthode dans l'ordre, et dès qu'on a trouvé un parent on s'arrête
1328
-		foreach ($parent_methodes as $parent_methode) {
1329
-			// Champ identifiant le parent (id et éventuellement le type)
1330
-			// -- cette identification ne dépend pas du fait que le parent soit stocké dans une table de différente
1331
-			//    de celle de l'objet source
1332
-			$select = [];
1333
-			if (isset($parent_methode['champ'])) {
1334
-				$select[] = $parent_methode['champ'];
1335
-			}
1336
-			if (isset($parent_methode['champ_type'])) {
1337
-				$select[] = $parent_methode['champ_type'];
1338
-			}
1339
-
1340
-			// Détermination de la table du parent et des conditions sur l'objet source et le parent.
1341
-			$condition_objet_invalide = false;
1342
-			$where = [];
1343
-			if (!isset($parent_methode['table'])) {
1344
-				// Le parent est stocké dans la même table que l'objet source :
1345
-				// -- toutes les conditions s'appliquent à la table source.
1346
-				$table = $table_objet;
1347
-				$where = ["$cle_objet = $id_objet"];
1348
-				// -- Condition supplémentaire sur la détection du parent
1349
-				if (isset($parent_methode['condition'])) {
1350
-					$where[] = $parent_methode['condition'];
1351
-				}
1352
-			} elseif (!$parent_direct_seulement) {
1353
-				// Le parent est stocké dans une table différente de l'objet source.
1354
-				// -- on vérifie d'emblée si il y a une condition sur l'objet source et si celle-ci est vérifiée
1355
-				//    Si non, on peut arrêter le traitement.
1356
-				if (isset($parent_methode['condition'])) {
1357
-					$where = [
1358
-						"$cle_objet = $id_objet",
1359
-						$parent_methode['condition']
1360
-					];
1361
-					if (!sql_countsel($table_objet, $where)) {
1362
-						$condition_objet_invalide = true;
1363
-					}
1364
-				}
1365
-
1366
-				// Si pas de condition sur l'objet source ou que la condition est vérifiée, on peut construire
1367
-				// la requête sur la table qui accueille le parent.
1368
-				if (!$condition_objet_invalide) {
1369
-					$table = $parent_methode['table'];
1370
-					// On construit les conditions en fonction de l'identification de l'objet source
1371
-					$where = [];
1372
-					// -- si le champ_source de l'id n'est pas précisé c'est qu'il est déjà connu et donc que c'est
1373
-					//    le même que celui de l'objet source.
1374
-					$where[] = isset($parent_methode['source_champ'])
1375
-						? "{$parent_methode['source_champ']} = $id_objet"
1376
-						: "${cle_objet} = $id_objet";
1377
-					if (isset($parent_methode['source_champ_type'])) {
1378
-						$where[] = "{$parent_methode['source_champ_type']} = " . sql_quote($objet);
1379
-					}
1380
-					// -- Condition supplémentaire sur la détection du parent
1381
-					if (isset($parent_methode['table_condition'])) {
1382
-						$where[] = $parent_methode['table_condition'];
1383
-					}
1384
-				}
1385
-			}
1386
-
1387
-			// On lance la requête de récupération du parent
1388
-			$is_table_lien = (strpos($table, '_liens') !== false and substr($table, -6) === '_liens');
1389
-			if (
1390
-				!$condition_objet_invalide
1391
-				and $where
1392
-				and ($lignes = sql_allfetsel($is_table_lien ? '*' : $select, $table, $where))
1393
-			) {
1394
-				foreach ($lignes as $ligne) {
1395
-					// Si le type est fixe
1396
-					if (isset($parent_methode['type'])) {
1397
-						$parent = [
1398
-							'objet' 	=> $parent_methode['type'],
1399
-							'id_objet'	=> intval($ligne[$parent_methode['champ']]),
1400
-							'champ' 	=> $parent_methode['champ'],
1401
-							'table'    => $table,
1402
-						];
1403
-					}
1404
-					elseif (isset($parent_methode['champ_type'])) {
1405
-						$parent = [
1406
-							'objet' 	 => $ligne[$parent_methode['champ_type']],
1407
-							'id_objet' 	 => intval($ligne[$parent_methode['champ']]),
1408
-							'champ' 	 => $parent_methode['champ'],
1409
-							'champ_type' => $parent_methode['champ_type'],
1410
-							'table'    => $table,
1411
-						];
1412
-					}
1413
-					if ($is_table_lien) {
1414
-						$parent['lien'] = $ligne;
1415
-					}
1416
-					$parents[] = $parent;
1417
-				}
1418
-			}
1419
-		}
1420
-	}
1421
-
1422
-	// On passe par un pipeline avant de retourner
1423
-	$parents = pipeline(
1424
-		'objet_lister_parents',
1425
-		[
1426
-			'args' => [
1427
-				'objet' => $objet,
1428
-				'id_objet' => $id_objet,
1429
-			],
1430
-			'data' => $parents,
1431
-		]
1432
-	);
1433
-
1434
-	return $parents;
1317
+    $parents = [];
1318
+
1319
+    // Si on trouve une ou des méthodes de parent
1320
+    if ($parent_methodes = objet_type_decrire_infos_parents($objet)) {
1321
+        // On identifie les informations sur l'objet source dont on cherche le parent.
1322
+        include_spip('base/abstract_sql');
1323
+        $table_objet = table_objet_sql($objet);
1324
+        $cle_objet = id_table_objet($objet);
1325
+        $id_objet = intval($id_objet);
1326
+
1327
+        // On teste chacun méthode dans l'ordre, et dès qu'on a trouvé un parent on s'arrête
1328
+        foreach ($parent_methodes as $parent_methode) {
1329
+            // Champ identifiant le parent (id et éventuellement le type)
1330
+            // -- cette identification ne dépend pas du fait que le parent soit stocké dans une table de différente
1331
+            //    de celle de l'objet source
1332
+            $select = [];
1333
+            if (isset($parent_methode['champ'])) {
1334
+                $select[] = $parent_methode['champ'];
1335
+            }
1336
+            if (isset($parent_methode['champ_type'])) {
1337
+                $select[] = $parent_methode['champ_type'];
1338
+            }
1339
+
1340
+            // Détermination de la table du parent et des conditions sur l'objet source et le parent.
1341
+            $condition_objet_invalide = false;
1342
+            $where = [];
1343
+            if (!isset($parent_methode['table'])) {
1344
+                // Le parent est stocké dans la même table que l'objet source :
1345
+                // -- toutes les conditions s'appliquent à la table source.
1346
+                $table = $table_objet;
1347
+                $where = ["$cle_objet = $id_objet"];
1348
+                // -- Condition supplémentaire sur la détection du parent
1349
+                if (isset($parent_methode['condition'])) {
1350
+                    $where[] = $parent_methode['condition'];
1351
+                }
1352
+            } elseif (!$parent_direct_seulement) {
1353
+                // Le parent est stocké dans une table différente de l'objet source.
1354
+                // -- on vérifie d'emblée si il y a une condition sur l'objet source et si celle-ci est vérifiée
1355
+                //    Si non, on peut arrêter le traitement.
1356
+                if (isset($parent_methode['condition'])) {
1357
+                    $where = [
1358
+                        "$cle_objet = $id_objet",
1359
+                        $parent_methode['condition']
1360
+                    ];
1361
+                    if (!sql_countsel($table_objet, $where)) {
1362
+                        $condition_objet_invalide = true;
1363
+                    }
1364
+                }
1365
+
1366
+                // Si pas de condition sur l'objet source ou que la condition est vérifiée, on peut construire
1367
+                // la requête sur la table qui accueille le parent.
1368
+                if (!$condition_objet_invalide) {
1369
+                    $table = $parent_methode['table'];
1370
+                    // On construit les conditions en fonction de l'identification de l'objet source
1371
+                    $where = [];
1372
+                    // -- si le champ_source de l'id n'est pas précisé c'est qu'il est déjà connu et donc que c'est
1373
+                    //    le même que celui de l'objet source.
1374
+                    $where[] = isset($parent_methode['source_champ'])
1375
+                        ? "{$parent_methode['source_champ']} = $id_objet"
1376
+                        : "${cle_objet} = $id_objet";
1377
+                    if (isset($parent_methode['source_champ_type'])) {
1378
+                        $where[] = "{$parent_methode['source_champ_type']} = " . sql_quote($objet);
1379
+                    }
1380
+                    // -- Condition supplémentaire sur la détection du parent
1381
+                    if (isset($parent_methode['table_condition'])) {
1382
+                        $where[] = $parent_methode['table_condition'];
1383
+                    }
1384
+                }
1385
+            }
1386
+
1387
+            // On lance la requête de récupération du parent
1388
+            $is_table_lien = (strpos($table, '_liens') !== false and substr($table, -6) === '_liens');
1389
+            if (
1390
+                !$condition_objet_invalide
1391
+                and $where
1392
+                and ($lignes = sql_allfetsel($is_table_lien ? '*' : $select, $table, $where))
1393
+            ) {
1394
+                foreach ($lignes as $ligne) {
1395
+                    // Si le type est fixe
1396
+                    if (isset($parent_methode['type'])) {
1397
+                        $parent = [
1398
+                            'objet' 	=> $parent_methode['type'],
1399
+                            'id_objet'	=> intval($ligne[$parent_methode['champ']]),
1400
+                            'champ' 	=> $parent_methode['champ'],
1401
+                            'table'    => $table,
1402
+                        ];
1403
+                    }
1404
+                    elseif (isset($parent_methode['champ_type'])) {
1405
+                        $parent = [
1406
+                            'objet' 	 => $ligne[$parent_methode['champ_type']],
1407
+                            'id_objet' 	 => intval($ligne[$parent_methode['champ']]),
1408
+                            'champ' 	 => $parent_methode['champ'],
1409
+                            'champ_type' => $parent_methode['champ_type'],
1410
+                            'table'    => $table,
1411
+                        ];
1412
+                    }
1413
+                    if ($is_table_lien) {
1414
+                        $parent['lien'] = $ligne;
1415
+                    }
1416
+                    $parents[] = $parent;
1417
+                }
1418
+            }
1419
+        }
1420
+    }
1421
+
1422
+    // On passe par un pipeline avant de retourner
1423
+    $parents = pipeline(
1424
+        'objet_lister_parents',
1425
+        [
1426
+            'args' => [
1427
+                'objet' => $objet,
1428
+                'id_objet' => $id_objet,
1429
+            ],
1430
+            'data' => $parents,
1431
+        ]
1432
+    );
1433
+
1434
+    return $parents;
1435 1435
 }
1436 1436
 
1437 1437
 /**
@@ -1443,17 +1443,17 @@  discard block
 block discarded – undo
1443 1443
  * @return array
1444 1444
  */
1445 1445
 function objet_lister_parents_par_type($objet, $id_objet) {
1446
-	$parents = objet_lister_parents($objet, $id_objet);
1446
+    $parents = objet_lister_parents($objet, $id_objet);
1447 1447
 
1448
-	$parents_par_type = [];
1449
-	foreach ($parents as $parent) {
1450
-		if (!isset($parents_par_type[$parent['objet']])) {
1451
-			$parents_par_type[$parent['objet']] = [];
1452
-		}
1453
-		$parents_par_type[$parent['objet']][] = $parent['id_objet'];
1454
-	}
1448
+    $parents_par_type = [];
1449
+    foreach ($parents as $parent) {
1450
+        if (!isset($parents_par_type[$parent['objet']])) {
1451
+            $parents_par_type[$parent['objet']] = [];
1452
+        }
1453
+        $parents_par_type[$parent['objet']][] = $parent['id_objet'];
1454
+    }
1455 1455
 
1456
-	return $parents_par_type;
1456
+    return $parents_par_type;
1457 1457
 }
1458 1458
 
1459 1459
 
@@ -1486,85 +1486,85 @@  discard block
 block discarded – undo
1486 1486
  *     Retourne un tableau de tableaux, avec comme clés les types des objets, et dans chacun un tableau des identifiants trouvés
1487 1487
  */
1488 1488
 function objet_lister_enfants($objet, $id_objet) {
1489
-	$enfants = [];
1490
-
1491
-	// Si on trouve des types d'enfants et leurs méthodes
1492
-	if ($enfants_methodes = objet_type_decrire_infos_enfants($objet)) {
1493
-		include_spip('base/abstract_sql');
1494
-		$id_objet = intval($id_objet);
1495
-
1496
-		// On parcourt tous les types d'enfants trouvés
1497
-		foreach ($enfants_methodes as $objet_enfant => $_methode_parent) {
1498
-			// On construit les conditions d'identification du parent
1499
-			$where = [];
1500
-			// -- L'identifiant du parent
1501
-			if (isset($_methode_parent['champ'])) {
1502
-				$where[] = $_methode_parent['champ'] . ' = ' . $id_objet;
1503
-			}
1504
-			// -- Si le parent est variable
1505
-			if (isset($_methode_parent['champ_type'])) {
1506
-				$where[] = $_methode_parent['champ_type'] . ' = ' . sql_quote($objet);
1507
-			}
1508
-
1509
-			// On détermine la table, le champ id des enfants et on complète éventuellement les conditions
1510
-			if (!isset($_methode_parent['table'])) {
1511
-				// Les enfants sont stockés dans la même table que l'objet parent :
1512
-				$table_enfant = table_objet_sql($objet_enfant);
1513
-				$cle_objet_enfant = id_table_objet($objet_enfant);
1514
-
1515
-				// S'il y a une condition supplémentaire
1516
-				if (isset($_methode_parent['condition'])) {
1517
-					$where[] = $_methode_parent['condition'];
1518
-				}
1519
-			} else {
1520
-				// Les enfants sont stockés dans une table différente de l'objet parent.
1521
-				$table_enfant = $_methode_parent['table'];
1522
-				$cle_objet_enfant = $_methode_parent['source_champ'] ?? id_table_objet($objet_enfant);
1523
-
1524
-				// S'il y a une condition supplémentaire
1525
-				if (isset($_methode_parent['table_condition'])) {
1526
-					$where[] = $_methode_parent['table_condition'];
1527
-				}
1528
-			}
1529
-
1530
-			// On lance la requête
1531
-			$is_table_lien = (strpos($table_enfant, '_liens') !== false and substr($table_enfant, -6) === '_liens');
1532
-			if ($rows = sql_allfetsel($is_table_lien ? '*' : $cle_objet_enfant, $table_enfant, $where)) {
1533
-				$enfant = [
1534
-					'objet' => $objet_enfant,
1535
-					'id_objet' => 0,
1536
-					'table' => $table_enfant
1537
-				];
1538
-				if (isset($_methode_parent['champ'])) {
1539
-					$enfant['champ'] = $_methode_parent['champ'];
1540
-				}
1541
-				if (isset($_methode_parent['champ_type'])) {
1542
-					$enfant['champ_type'] = $_methode_parent['champ_type'];
1543
-				}
1544
-				foreach ($rows as $row) {
1545
-					$enfant['id_objet'] = intval($row[$cle_objet_enfant]);
1546
-					if ($is_table_lien) {
1547
-						$enfant['lien'] = $row;
1548
-					}
1549
-					$enfants[] = $enfant;
1550
-				}
1551
-			}
1552
-		}
1553
-	}
1554
-
1555
-	// On passe par un pipeline avant de retourner
1556
-	$enfants = pipeline(
1557
-		'objet_lister_enfants',
1558
-		[
1559
-			'args' => [
1560
-				'objet' => $objet,
1561
-				'id_objet' => $id_objet,
1562
-			],
1563
-			'data' => $enfants,
1564
-		]
1565
-	);
1566
-
1567
-	return $enfants;
1489
+    $enfants = [];
1490
+
1491
+    // Si on trouve des types d'enfants et leurs méthodes
1492
+    if ($enfants_methodes = objet_type_decrire_infos_enfants($objet)) {
1493
+        include_spip('base/abstract_sql');
1494
+        $id_objet = intval($id_objet);
1495
+
1496
+        // On parcourt tous les types d'enfants trouvés
1497
+        foreach ($enfants_methodes as $objet_enfant => $_methode_parent) {
1498
+            // On construit les conditions d'identification du parent
1499
+            $where = [];
1500
+            // -- L'identifiant du parent
1501
+            if (isset($_methode_parent['champ'])) {
1502
+                $where[] = $_methode_parent['champ'] . ' = ' . $id_objet;
1503
+            }
1504
+            // -- Si le parent est variable
1505
+            if (isset($_methode_parent['champ_type'])) {
1506
+                $where[] = $_methode_parent['champ_type'] . ' = ' . sql_quote($objet);
1507
+            }
1508
+
1509
+            // On détermine la table, le champ id des enfants et on complète éventuellement les conditions
1510
+            if (!isset($_methode_parent['table'])) {
1511
+                // Les enfants sont stockés dans la même table que l'objet parent :
1512
+                $table_enfant = table_objet_sql($objet_enfant);
1513
+                $cle_objet_enfant = id_table_objet($objet_enfant);
1514
+
1515
+                // S'il y a une condition supplémentaire
1516
+                if (isset($_methode_parent['condition'])) {
1517
+                    $where[] = $_methode_parent['condition'];
1518
+                }
1519
+            } else {
1520
+                // Les enfants sont stockés dans une table différente de l'objet parent.
1521
+                $table_enfant = $_methode_parent['table'];
1522
+                $cle_objet_enfant = $_methode_parent['source_champ'] ?? id_table_objet($objet_enfant);
1523
+
1524
+                // S'il y a une condition supplémentaire
1525
+                if (isset($_methode_parent['table_condition'])) {
1526
+                    $where[] = $_methode_parent['table_condition'];
1527
+                }
1528
+            }
1529
+
1530
+            // On lance la requête
1531
+            $is_table_lien = (strpos($table_enfant, '_liens') !== false and substr($table_enfant, -6) === '_liens');
1532
+            if ($rows = sql_allfetsel($is_table_lien ? '*' : $cle_objet_enfant, $table_enfant, $where)) {
1533
+                $enfant = [
1534
+                    'objet' => $objet_enfant,
1535
+                    'id_objet' => 0,
1536
+                    'table' => $table_enfant
1537
+                ];
1538
+                if (isset($_methode_parent['champ'])) {
1539
+                    $enfant['champ'] = $_methode_parent['champ'];
1540
+                }
1541
+                if (isset($_methode_parent['champ_type'])) {
1542
+                    $enfant['champ_type'] = $_methode_parent['champ_type'];
1543
+                }
1544
+                foreach ($rows as $row) {
1545
+                    $enfant['id_objet'] = intval($row[$cle_objet_enfant]);
1546
+                    if ($is_table_lien) {
1547
+                        $enfant['lien'] = $row;
1548
+                    }
1549
+                    $enfants[] = $enfant;
1550
+                }
1551
+            }
1552
+        }
1553
+    }
1554
+
1555
+    // On passe par un pipeline avant de retourner
1556
+    $enfants = pipeline(
1557
+        'objet_lister_enfants',
1558
+        [
1559
+            'args' => [
1560
+                'objet' => $objet,
1561
+                'id_objet' => $id_objet,
1562
+            ],
1563
+            'data' => $enfants,
1564
+        ]
1565
+    );
1566
+
1567
+    return $enfants;
1568 1568
 }
1569 1569
 
1570 1570
 /**
@@ -1576,17 +1576,17 @@  discard block
 block discarded – undo
1576 1576
  * @return array
1577 1577
  */
1578 1578
 function objet_lister_enfants_par_type($objet, $id_objet) {
1579
-	$enfants = objet_lister_enfants($objet, $id_objet);
1579
+    $enfants = objet_lister_enfants($objet, $id_objet);
1580 1580
 
1581
-	$enfants_par_type = [];
1582
-	foreach ($enfants as $enfant) {
1583
-		if (!isset($enfants_par_type[$enfant['objet']])) {
1584
-			$enfants_par_type[$enfant['objet']] = [];
1585
-		}
1586
-		$enfants_par_type[$enfant['objet']][] = $enfant['id_objet'];
1587
-	}
1581
+    $enfants_par_type = [];
1582
+    foreach ($enfants as $enfant) {
1583
+        if (!isset($enfants_par_type[$enfant['objet']])) {
1584
+            $enfants_par_type[$enfant['objet']] = [];
1585
+        }
1586
+        $enfants_par_type[$enfant['objet']][] = $enfant['id_objet'];
1587
+    }
1588 1588
 
1589
-	return $enfants_par_type;
1589
+    return $enfants_par_type;
1590 1590
 }
1591 1591
 
1592 1592
 /**
@@ -1598,35 +1598,35 @@  discard block
 block discarded – undo
1598 1598
  *     Retourne un tableau de tableau contenant les informations de type et de champ pour trouver le parent ou false sinon
1599 1599
  */
1600 1600
 function objet_type_decrire_infos_parents($objet) {
1601
-	static $parents = [];
1602
-
1603
-	// Si on ne l'a pas encore cherché pour cet objet
1604
-	if (!isset($parents[$objet])) {
1605
-		$parents[$objet] = false;
1606
-		$table = table_objet_sql($objet);
1607
-
1608
-		// Si on trouve bien la description de cet objet
1609
-		if ($infos = lister_tables_objets_sql($table)) {
1610
-			if (isset($infos['parent']) and is_array($infos['parent'])) {
1611
-				// S'il y a une description explicite de parent, c'est prioritaire
1612
-				// -- on traite les cas où il y a une ou plusieurs description mais on renvoie toujours un tableau
1613
-				//    de description
1614
-				if (!isset($infos['parent'][0])) {
1615
-					$parents[$objet] = [$infos['parent']];
1616
-				} else {
1617
-					$parents[$objet] = $infos['parent'];
1618
-				}
1619
-			} elseif (isset($infos['field']['id_rubrique'])) {
1620
-				// Sinon on cherche des cas courants connus magiquement, à commencer par id_rubrique
1621
-				$parents[$objet] = [['type' => 'rubrique', 'champ' => 'id_rubrique']];
1622
-			} elseif (isset($infos['field']['id_parent'])) {
1623
-				// Sinon on cherche un champ id_parent, ce qui signifie que l'objet est parent de lui-même
1624
-				$parents[$objet] = [['type' => $objet, 'champ' => 'id_parent']];
1625
-			}
1626
-		}
1627
-	}
1628
-
1629
-	return $parents[$objet];
1601
+    static $parents = [];
1602
+
1603
+    // Si on ne l'a pas encore cherché pour cet objet
1604
+    if (!isset($parents[$objet])) {
1605
+        $parents[$objet] = false;
1606
+        $table = table_objet_sql($objet);
1607
+
1608
+        // Si on trouve bien la description de cet objet
1609
+        if ($infos = lister_tables_objets_sql($table)) {
1610
+            if (isset($infos['parent']) and is_array($infos['parent'])) {
1611
+                // S'il y a une description explicite de parent, c'est prioritaire
1612
+                // -- on traite les cas où il y a une ou plusieurs description mais on renvoie toujours un tableau
1613
+                //    de description
1614
+                if (!isset($infos['parent'][0])) {
1615
+                    $parents[$objet] = [$infos['parent']];
1616
+                } else {
1617
+                    $parents[$objet] = $infos['parent'];
1618
+                }
1619
+            } elseif (isset($infos['field']['id_rubrique'])) {
1620
+                // Sinon on cherche des cas courants connus magiquement, à commencer par id_rubrique
1621
+                $parents[$objet] = [['type' => 'rubrique', 'champ' => 'id_rubrique']];
1622
+            } elseif (isset($infos['field']['id_parent'])) {
1623
+                // Sinon on cherche un champ id_parent, ce qui signifie que l'objet est parent de lui-même
1624
+                $parents[$objet] = [['type' => $objet, 'champ' => 'id_parent']];
1625
+            }
1626
+        }
1627
+    }
1628
+
1629
+    return $parents[$objet];
1630 1630
 }
1631 1631
 
1632 1632
 /**
@@ -1638,36 +1638,36 @@  discard block
 block discarded – undo
1638 1638
  *     Retourne un tableau de tableaux contenant chacun les informations d'un type d'enfant
1639 1639
  */
1640 1640
 function objet_type_decrire_infos_enfants($objet) {
1641
-	static $enfants = [];
1642
-
1643
-	// Si on a déjà fait la recherche pour ce type d'objet
1644
-	if (!isset($enfants[$objet])) {
1645
-		$enfants[$objet] = [];
1646
-		$tables = lister_tables_objets_sql();
1647
-
1648
-		// On parcourt toutes les tables d'objet, et on cherche si chacune peut être enfant
1649
-		foreach ($tables as $table => $infos) {
1650
-			$objet_enfant = objet_type($table);
1651
-
1652
-			// On ne va pas refaire les tests des différents cas, on réutilise
1653
-			if ($parent_methodes = objet_type_decrire_infos_parents($objet_enfant)) {
1654
-				// On parcourt les différents cas possible, si certains peuvent concerner l'objet demandé
1655
-				foreach ($parent_methodes as $parent_methode) {
1656
-					// Si la méthode qu'on teste n'exclut pas le parent demandé
1657
-					if (!isset($parent_methode['exclus']) or !in_array($objet, $parent_methode['exclus'])) {
1658
-						// Si le type du parent est fixe et directement l'objet demandé
1659
-						if (isset($parent_methode['type']) and isset($parent_methode['champ']) and $parent_methode['type'] == $objet) {
1660
-							$enfants[$objet][$objet_enfant] = $parent_methode;
1661
-						}
1662
-						// Si le type est variable, alors l'objet demandé peut forcément être parent
1663
-						elseif (isset($parent_methode['champ_type']) and isset($parent_methode['champ'])) {
1664
-							$enfants[$objet][$objet_enfant] = $parent_methode;
1665
-						}
1666
-					}
1667
-				}
1668
-			}
1669
-		}
1670
-	}
1671
-
1672
-	return $enfants[$objet];
1641
+    static $enfants = [];
1642
+
1643
+    // Si on a déjà fait la recherche pour ce type d'objet
1644
+    if (!isset($enfants[$objet])) {
1645
+        $enfants[$objet] = [];
1646
+        $tables = lister_tables_objets_sql();
1647
+
1648
+        // On parcourt toutes les tables d'objet, et on cherche si chacune peut être enfant
1649
+        foreach ($tables as $table => $infos) {
1650
+            $objet_enfant = objet_type($table);
1651
+
1652
+            // On ne va pas refaire les tests des différents cas, on réutilise
1653
+            if ($parent_methodes = objet_type_decrire_infos_parents($objet_enfant)) {
1654
+                // On parcourt les différents cas possible, si certains peuvent concerner l'objet demandé
1655
+                foreach ($parent_methodes as $parent_methode) {
1656
+                    // Si la méthode qu'on teste n'exclut pas le parent demandé
1657
+                    if (!isset($parent_methode['exclus']) or !in_array($objet, $parent_methode['exclus'])) {
1658
+                        // Si le type du parent est fixe et directement l'objet demandé
1659
+                        if (isset($parent_methode['type']) and isset($parent_methode['champ']) and $parent_methode['type'] == $objet) {
1660
+                            $enfants[$objet][$objet_enfant] = $parent_methode;
1661
+                        }
1662
+                        // Si le type est variable, alors l'objet demandé peut forcément être parent
1663
+                        elseif (isset($parent_methode['champ_type']) and isset($parent_methode['champ'])) {
1664
+                            $enfants[$objet][$objet_enfant] = $parent_methode;
1665
+                        }
1666
+                    }
1667
+                }
1668
+            }
1669
+        }
1670
+    }
1671
+
1672
+    return $enfants[$objet];
1673 1673
 }
Please login to merge, or discard this patch.
Spacing   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -703,7 +703,7 @@  discard block
 block discarded – undo
703 703
 		$infos['url_voir'] = $infos['type'];
704 704
 	}
705 705
 	if (!isset($infos['url_edit'])) {
706
-		$infos['url_edit'] = $infos['url_voir'] . ($infos['editable'] ? '_edit' : '');
706
+		$infos['url_edit'] = $infos['url_voir'].($infos['editable'] ? '_edit' : '');
707 707
 	}
708 708
 	if (!isset($infos['icone_objet'])) {
709 709
 		$infos['icone_objet'] = $infos['type'];
@@ -715,48 +715,48 @@  discard block
 block discarded – undo
715 715
 		$infos['texte_retour'] = 'icone_retour';
716 716
 	}
717 717
 	if (!isset($infos['texte_modifier'])) {
718
-		$infos['texte_modifier'] = $infos['type'] . ':' . 'icone_modifier_' . $infos['type'];
718
+		$infos['texte_modifier'] = $infos['type'].':'.'icone_modifier_'.$infos['type'];
719 719
 	}
720 720
 	if (!isset($infos['texte_creer'])) {
721
-		$infos['texte_creer'] = $infos['type'] . ':' . 'icone_creer_' . $infos['type'];
721
+		$infos['texte_creer'] = $infos['type'].':'.'icone_creer_'.$infos['type'];
722 722
 	}
723 723
 	if (!isset($infos['texte_creer_associer'])) {
724
-		$infos['texte_creer_associer'] = $infos['type'] . ':' . 'texte_creer_associer_' . $infos['type'];
724
+		$infos['texte_creer_associer'] = $infos['type'].':'.'texte_creer_associer_'.$infos['type'];
725 725
 	}
726 726
 	if (!isset($infos['texte_ajouter'])) {
727 727
 		// Ajouter un X
728
-		$infos['texte_ajouter'] = $infos['type'] . ':' . 'texte_ajouter_' . $infos['type'];
728
+		$infos['texte_ajouter'] = $infos['type'].':'.'texte_ajouter_'.$infos['type'];
729 729
 	}
730 730
 	if (!isset($infos['texte_objets'])) {
731
-		$infos['texte_objets'] = $infos['type'] . ':' . 'titre_' . $infos['table_objet'];
731
+		$infos['texte_objets'] = $infos['type'].':'.'titre_'.$infos['table_objet'];
732 732
 	}
733 733
 	if (!isset($infos['texte_objet'])) {
734
-		$infos['texte_objet'] = $infos['type'] . ':' . 'titre_' . $infos['type'];
734
+		$infos['texte_objet'] = $infos['type'].':'.'titre_'.$infos['type'];
735 735
 	}
736 736
 	if (!isset($infos['texte_logo_objet'])) {
737 737
 		// objet:titre_logo_objet "Logo de ce X"
738
-		$infos['texte_logo_objet'] = $infos['type'] . ':' . 'titre_logo_' . $infos['type'];
738
+		$infos['texte_logo_objet'] = $infos['type'].':'.'titre_logo_'.$infos['type'];
739 739
 	}
740 740
 	if (!isset($infos['texte_langue_objet'])) {
741 741
 		// objet:texte_langue_objet "Langue de ce X"
742
-		$infos['texte_langue_objet'] = $infos['type'] . ':' . 'titre_langue_' . $infos['type'];
742
+		$infos['texte_langue_objet'] = $infos['type'].':'.'titre_langue_'.$infos['type'];
743 743
 	}
744 744
 	if (!isset($infos['texte_definir_comme_traduction_objet'])) {
745 745
 		// "Ce X est une traduction du X numéro :"
746
-		$infos['texte_definir_comme_traduction_objet'] = $infos['type'] . ':' . 'texte_definir_comme_traduction_' . $infos['type'];
746
+		$infos['texte_definir_comme_traduction_objet'] = $infos['type'].':'.'texte_definir_comme_traduction_'.$infos['type'];
747 747
 	}
748 748
 
749 749
 	// objet:info_aucun_objet
750 750
 	if (!isset($infos['info_aucun_objet'])) {
751
-		$infos['info_aucun_objet'] = $infos['type'] . ':' . 'info_aucun_' . $infos['type'];
751
+		$infos['info_aucun_objet'] = $infos['type'].':'.'info_aucun_'.$infos['type'];
752 752
 	}
753 753
 	// objet:info_1_objet
754 754
 	if (!isset($infos['info_1_objet'])) {
755
-		$infos['info_1_objet'] = $infos['type'] . ':' . 'info_1_' . $infos['type'];
755
+		$infos['info_1_objet'] = $infos['type'].':'.'info_1_'.$infos['type'];
756 756
 	}
757 757
 	// objet:info_nb_objets
758 758
 	if (!isset($infos['info_nb_objets'])) {
759
-		$infos['info_nb_objets'] = $infos['type'] . ':' . 'info_nb_' . $infos['table_objet'];
759
+		$infos['info_nb_objets'] = $infos['type'].':'.'info_nb_'.$infos['table_objet'];
760 760
 	}
761 761
 
762 762
 	if (!isset($infos['champs_editables'])) {
@@ -956,7 +956,7 @@  discard block
 block discarded – undo
956 956
 		}
957 957
 		$ts = sql_alltable(null, $serveur); // toutes les tables "spip_" (ou prefixe perso)
958 958
 		$connexion = $GLOBALS['connexions'][$serveur ?: 0];
959
-		$spip = $connexion['prefixe'] . '_';
959
+		$spip = $connexion['prefixe'].'_';
960 960
 		foreach ($ts as $t) {
961 961
 			$t = substr($t, strlen($spip));
962 962
 			$tables[$serveur]["spip_$t"] = $t;
@@ -1025,10 +1025,10 @@  discard block
 block discarded – undo
1025 1025
 	if ($serveur !== false) {
1026 1026
 		$t = lister_tables_spip($serveur);
1027 1027
 		$trouver_table = charger_fonction('trouver_table', 'base');
1028
-		$typetrim = rtrim($type, 's') . 's';
1028
+		$typetrim = rtrim($type, 's').'s';
1029 1029
 		if (
1030 1030
 			(isset($t[$typetrim]) or in_array($typetrim, $t))
1031
-			and ($desc = $trouver_table(rtrim($type, 's') . 's', $serveur))
1031
+			and ($desc = $trouver_table(rtrim($type, 's').'s', $serveur))
1032 1032
 		) {
1033 1033
 			return $desc['id_table'];
1034 1034
 		} elseif (
@@ -1038,11 +1038,11 @@  discard block
 block discarded – undo
1038 1038
 			return $desc['id_table'];
1039 1039
 		}
1040 1040
 
1041
-		spip_log('table_objet(' . $type . ') calculee sans verification');
1041
+		spip_log('table_objet('.$type.') calculee sans verification');
1042 1042
 		#spip_log(debug_backtrace(),'db');
1043 1043
 	}
1044 1044
 
1045
-	return rtrim($type, 's') . 's'; # cas historique ne devant plus servir, sauf si $serveur=false
1045
+	return rtrim($type, 's').'s'; # cas historique ne devant plus servir, sauf si $serveur=false
1046 1046
 }
1047 1047
 
1048 1048
 /**
@@ -1226,7 +1226,7 @@  discard block
 block discarded – undo
1226 1226
 function objet_test_si_publie($objet, $id_objet, $serveur = '') {
1227 1227
 	// voir si une fonction est definie pour faire le boulot
1228 1228
 	// elle a la priorite dans ce cas
1229
-	if ($f = charger_fonction($objet . '_test_si_publie', 'base', true)) {
1229
+	if ($f = charger_fonction($objet.'_test_si_publie', 'base', true)) {
1230 1230
 		return $f($objet, $id_objet, $serveur);
1231 1231
 	}
1232 1232
 
@@ -1248,7 +1248,7 @@  discard block
 block discarded – undo
1248 1248
 		$boucle->sql_serveur = $serveur;
1249 1249
 		$boucle->select[] = $id_table_objet;
1250 1250
 		$boucle->from[$table_objet] = table_objet_sql($objet, $serveur);
1251
-		$boucle->where[] = $id_table . '.' . $id_table_objet . '=' . intval($id_objet);
1251
+		$boucle->where[] = $id_table.'.'.$id_table_objet.'='.intval($id_objet);
1252 1252
 
1253 1253
 		$boucle->descr['nom'] = 'objet_test_si_publie'; // eviter notice php
1254 1254
 		$boucle->descr['sourcefile'] = 'internal';
@@ -1375,7 +1375,7 @@  discard block
 block discarded – undo
1375 1375
 						? "{$parent_methode['source_champ']} = $id_objet"
1376 1376
 						: "${cle_objet} = $id_objet";
1377 1377
 					if (isset($parent_methode['source_champ_type'])) {
1378
-						$where[] = "{$parent_methode['source_champ_type']} = " . sql_quote($objet);
1378
+						$where[] = "{$parent_methode['source_champ_type']} = ".sql_quote($objet);
1379 1379
 					}
1380 1380
 					// -- Condition supplémentaire sur la détection du parent
1381 1381
 					if (isset($parent_methode['table_condition'])) {
@@ -1499,11 +1499,11 @@  discard block
 block discarded – undo
1499 1499
 			$where = [];
1500 1500
 			// -- L'identifiant du parent
1501 1501
 			if (isset($_methode_parent['champ'])) {
1502
-				$where[] = $_methode_parent['champ'] . ' = ' . $id_objet;
1502
+				$where[] = $_methode_parent['champ'].' = '.$id_objet;
1503 1503
 			}
1504 1504
 			// -- Si le parent est variable
1505 1505
 			if (isset($_methode_parent['champ_type'])) {
1506
-				$where[] = $_methode_parent['champ_type'] . ' = ' . sql_quote($objet);
1506
+				$where[] = $_methode_parent['champ_type'].' = '.sql_quote($objet);
1507 1507
 			}
1508 1508
 
1509 1509
 			// On détermine la table, le champ id des enfants et on complète éventuellement les conditions
Please login to merge, or discard this patch.
ecrire/index.php 2 patches
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -35,7 +35,7 @@  discard block
 block discarded – undo
35 35
 // Determiner l'action demandee
36 36
 //
37 37
 
38
-$exec = (string)_request('exec');
38
+$exec = (string) _request('exec');
39 39
 $reinstall = (!is_null(_request('reinstall'))) ? _request('reinstall') : ($exec == 'install' ? 'oui' : null);
40 40
 //
41 41
 // Les scripts d'insallation n'authentifient pas, forcement,
@@ -121,9 +121,9 @@  discard block
 block discarded – undo
121 121
 			or (isset($GLOBALS['visiteur_session']) and $GLOBALS['visiteur_session']['statut'] == '0minirezo')
122 122
 		)
123 123
 	) {
124
-		spip_log('Quand la meta admin vaut ' .
125
-			$GLOBALS['meta']['admin'] .
126
-			' seul un admin peut se connecter et sans AJAX.' .
124
+		spip_log('Quand la meta admin vaut '.
125
+			$GLOBALS['meta']['admin'].
126
+			' seul un admin peut se connecter et sans AJAX.'.
127 127
 			' En cas de probleme, detruire cette meta.');
128 128
 		die(_T('info_travaux_texte'));
129 129
 	}
Please login to merge, or discard this patch.
Indentation   +77 added lines, -77 removed lines patch added patch discarded remove patch
@@ -19,14 +19,14 @@  discard block
 block discarded – undo
19 19
 /** Drapeau indiquant que l'on est dans l'espace privé */
20 20
 define('_ESPACE_PRIVE', true);
21 21
 if (!defined('_ECRIRE_INC_VERSION')) {
22
-	include 'inc_version.php';
22
+    include 'inc_version.php';
23 23
 }
24 24
 
25 25
 // Verification anti magic_quotes_sybase, pour qui addslashes("'") = "''"
26 26
 // On prefere la faire ici plutot que dans inc_version, c'est moins souvent et
27 27
 // si le reglage est modifie sur un site en prod, ca fait moins mal
28 28
 if (addslashes("'") !== "\\'") {
29
-	die('SPIP incompatible magic_quotes_sybase');
29
+    die('SPIP incompatible magic_quotes_sybase');
30 30
 }
31 31
 
32 32
 include_spip('inc/cookie');
@@ -42,18 +42,18 @@  discard block
 block discarded – undo
42 42
 // alors il faut blinder les variables d'URL
43 43
 //
44 44
 if (autoriser_sans_cookie($exec, false)) {
45
-	if (!isset($reinstall)) {
46
-		$reinstall = 'non';
47
-	}
48
-	$var_auth = true;
45
+    if (!isset($reinstall)) {
46
+        $reinstall = 'non';
47
+    }
48
+    $var_auth = true;
49 49
 } else {
50
-	// Authentification, redefinissable
51
-	$auth = charger_fonction('auth', 'inc');
52
-	$var_auth = $auth();
53
-	if ($var_auth) {
54
-		echo auth_echec($var_auth);
55
-		exit;
56
-	}
50
+    // Authentification, redefinissable
51
+    $auth = charger_fonction('auth', 'inc');
52
+    $var_auth = $auth();
53
+    if ($var_auth) {
54
+        echo auth_echec($var_auth);
55
+        exit;
56
+    }
57 57
 }
58 58
 
59 59
 // initialiser a la langue par defaut
@@ -64,29 +64,29 @@  discard block
 block discarded – undo
64 64
 
65 65
 
66 66
 if (_request('action') or _request('var_ajax') or _request('formulaire_action')) {
67
-	if (!autoriser_sans_cookie($exec)) {
68
-		// Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires
69
-		include_spip('public/aiguiller');
70
-		if (
71
-			// cas des appels actions ?action=xxx
72
-			traiter_appels_actions()
73
-			or
74
-			// cas des hits ajax sur les inclusions ajax
75
-			traiter_appels_inclusions_ajax()
76
-			or
77
-			// cas des formulaires charger/verifier/traiter
78
-			traiter_formulaires_dynamiques()
79
-		) {
80
-			exit;
81
-		} // le hit est fini !
82
-	}
67
+    if (!autoriser_sans_cookie($exec)) {
68
+        // Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires
69
+        include_spip('public/aiguiller');
70
+        if (
71
+            // cas des appels actions ?action=xxx
72
+            traiter_appels_actions()
73
+            or
74
+            // cas des hits ajax sur les inclusions ajax
75
+            traiter_appels_inclusions_ajax()
76
+            or
77
+            // cas des formulaires charger/verifier/traiter
78
+            traiter_formulaires_dynamiques()
79
+        ) {
80
+            exit;
81
+        } // le hit est fini !
82
+    }
83 83
 }
84 84
 // securiser les redirect du back-office
85 85
 if (_request('redirect')) {
86
-	if (!function_exists('securiser_redirect_action')) {
87
-		include_spip('public/aiguiller');
88
-	}
89
-	set_request('redirect', securiser_redirect_action(_request('redirect')));
86
+    if (!function_exists('securiser_redirect_action')) {
87
+        include_spip('public/aiguiller');
88
+    }
89
+    set_request('redirect', securiser_redirect_action(_request('redirect')));
90 90
 }
91 91
 
92 92
 
@@ -96,12 +96,12 @@  discard block
 block discarded – undo
96 96
 
97 97
 // Controle de la version, sauf si on est deja en train de s'en occuper
98 98
 if (
99
-	!$reinstall == 'oui'
100
-	and !_AJAX
101
-	and isset($GLOBALS['meta']['version_installee'])
102
-	and ($GLOBALS['spip_version_base'] != (str_replace(',', '.', $GLOBALS['meta']['version_installee'])))
99
+    !$reinstall == 'oui'
100
+    and !_AJAX
101
+    and isset($GLOBALS['meta']['version_installee'])
102
+    and ($GLOBALS['spip_version_base'] != (str_replace(',', '.', $GLOBALS['meta']['version_installee'])))
103 103
 ) {
104
-	$exec = 'demande_mise_a_jour';
104
+    $exec = 'demande_mise_a_jour';
105 105
 }
106 106
 
107 107
 // Quand une action d'administration est en cours (meta "admin"),
@@ -111,39 +111,39 @@  discard block
 block discarded – undo
111 111
 // sinon c'est qu'elle a ete interrompue et il faut la reprendre
112 112
 
113 113
 elseif (isset($GLOBALS['meta']['admin'])) {
114
-	if (preg_match('/^(.*)_(\d+)_/', $GLOBALS['meta']['admin'], $l)) {
115
-		[, $var_f, $n] = $l;
116
-	}
117
-	if (
118
-		_AJAX
119
-		or !(
120
-			isset($_COOKIE['spip_admin'])
121
-			or (isset($GLOBALS['visiteur_session']) and $GLOBALS['visiteur_session']['statut'] == '0minirezo')
122
-		)
123
-	) {
124
-		spip_log('Quand la meta admin vaut ' .
125
-			$GLOBALS['meta']['admin'] .
126
-			' seul un admin peut se connecter et sans AJAX.' .
127
-			' En cas de probleme, detruire cette meta.');
128
-		die(_T('info_travaux_texte'));
129
-	}
130
-	if ($n) {
131
-		[, $var_f, $n] = $l;
132
-		if (tester_url_ecrire("base_$var_f")) {
133
-			$var_f = "base_$var_f";
134
-		}
135
-		if ($var_f != $exec) {
136
-			spip_log("Le script $var_f lance par auteur$n se substitue a l'exec $exec");
137
-			$exec = $var_f;
138
-			set_request('exec', $exec);
139
-		}
140
-	}
114
+    if (preg_match('/^(.*)_(\d+)_/', $GLOBALS['meta']['admin'], $l)) {
115
+        [, $var_f, $n] = $l;
116
+    }
117
+    if (
118
+        _AJAX
119
+        or !(
120
+            isset($_COOKIE['spip_admin'])
121
+            or (isset($GLOBALS['visiteur_session']) and $GLOBALS['visiteur_session']['statut'] == '0minirezo')
122
+        )
123
+    ) {
124
+        spip_log('Quand la meta admin vaut ' .
125
+            $GLOBALS['meta']['admin'] .
126
+            ' seul un admin peut se connecter et sans AJAX.' .
127
+            ' En cas de probleme, detruire cette meta.');
128
+        die(_T('info_travaux_texte'));
129
+    }
130
+    if ($n) {
131
+        [, $var_f, $n] = $l;
132
+        if (tester_url_ecrire("base_$var_f")) {
133
+            $var_f = "base_$var_f";
134
+        }
135
+        if ($var_f != $exec) {
136
+            spip_log("Le script $var_f lance par auteur$n se substitue a l'exec $exec");
137
+            $exec = $var_f;
138
+            set_request('exec', $exec);
139
+        }
140
+    }
141 141
 }
142 142
 // si nom pas plausible, prendre le script par defaut
143 143
 // attention aux deux cas 404/403 qui commencent par un 4 !
144 144
 elseif (!preg_match(',^[a-z4_][0-9a-z_-]*$,i', $exec)) {
145
-	$exec = 'accueil';
146
-	set_request('exec', $exec);
145
+    $exec = 'accueil';
146
+    set_request('exec', $exec);
147 147
 }
148 148
 
149 149
 // compatibilite ascendante : obsolete, ne plus utiliser
@@ -155,19 +155,19 @@  discard block
 block discarded – undo
155 155
 // on appelle directement la fonction, car un appel d'action peut conduire a une boucle infinie
156 156
 // si le cookie n'est pas pose correctement dans l'action
157 157
 if (
158
-	!$var_auth and isset($_COOKIE['spip_lang_ecrire'])
159
-	and $_COOKIE['spip_lang_ecrire'] <> $GLOBALS['visiteur_session']['lang']
158
+    !$var_auth and isset($_COOKIE['spip_lang_ecrire'])
159
+    and $_COOKIE['spip_lang_ecrire'] <> $GLOBALS['visiteur_session']['lang']
160 160
 ) {
161
-	include_spip('action/converser');
162
-	action_converser_post($GLOBALS['visiteur_session']['lang'], true);
161
+    include_spip('action/converser');
162
+    action_converser_post($GLOBALS['visiteur_session']['lang'], true);
163 163
 }
164 164
 
165 165
 if ($var_f = tester_url_ecrire($exec)) {
166
-	$var_f = charger_fonction($var_f);
167
-	$var_f(); // at last
166
+    $var_f = charger_fonction($var_f);
167
+    $var_f(); // at last
168 168
 } else {
169
-	// Rien de connu: rerouter vers exec=404 au lieu d'echouer
170
-	// ce qui permet de laisser la main a un plugin
171
-	$var_f = charger_fonction('404');
172
-	$var_f($exec);
169
+    // Rien de connu: rerouter vers exec=404 au lieu d'echouer
170
+    // ce qui permet de laisser la main a un plugin
171
+    $var_f = charger_fonction('404');
172
+    $var_f($exec);
173 173
 }
Please login to merge, or discard this patch.
ecrire/iterateur/php.php 1 patch
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
 
19 19
 
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 
@@ -36,22 +36,22 @@  discard block
 block discarded – undo
36 36
  *     Description de la boucle complétée des champs
37 37
  */
38 38
 function iterateur_php_dist($b, $iteratorName) {
39
-	$b->iterateur = $iteratorName; # designe la classe d'iterateur
40
-	$b->show = [
41
-		'field' => [
42
-			'cle' => 'STRING',
43
-			'valeur' => 'STRING',
44
-		]
45
-	];
46
-	foreach (get_class_methods($iteratorName) as $method) {
47
-		$b->show['field'][strtolower($method)] = 'METHOD';
48
-	}
49
-
50
-	/*
39
+    $b->iterateur = $iteratorName; # designe la classe d'iterateur
40
+    $b->show = [
41
+        'field' => [
42
+            'cle' => 'STRING',
43
+            'valeur' => 'STRING',
44
+        ]
45
+    ];
46
+    foreach (get_class_methods($iteratorName) as $method) {
47
+        $b->show['field'][strtolower($method)] = 'METHOD';
48
+    }
49
+
50
+    /*
51 51
 	foreach (get_class_vars($iteratorName) as $property) {
52 52
 		$b->show['field'][ strtolower($property) ] = 'PROPERTY';
53 53
 	}
54 54
 	*/
55 55
 
56
-	return $b;
56
+    return $b;
57 57
 }
Please login to merge, or discard this patch.
ecrire/iterateur/pour.php 1 patch
Indentation   +9 added lines, -9 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
 include_spip('iterateur/data');
@@ -39,13 +39,13 @@  discard block
 block discarded – undo
39 39
  *     Description de la boucle complétée des champs
40 40
  */
41 41
 function iterateur_POUR_dist($b) {
42
-	$b->iterateur = 'DATA'; # designe la classe d'iterateur
43
-	$b->show = [
44
-		'field' => [
45
-			'cle' => 'STRING',
46
-			'valeur' => 'STRING',
47
-		]
48
-	];
42
+    $b->iterateur = 'DATA'; # designe la classe d'iterateur
43
+    $b->show = [
44
+        'field' => [
45
+            'cle' => 'STRING',
46
+            'valeur' => 'STRING',
47
+        ]
48
+    ];
49 49
 
50
-	return $b;
50
+    return $b;
51 51
 }
Please login to merge, or discard this patch.
ecrire/iterateur/condition.php 1 patch
Indentation   +14 added lines, -14 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
 include_spip('iterateur/data');
@@ -35,12 +35,12 @@  discard block
 block discarded – undo
35 35
  *     Description de la boucle complétée des champs
36 36
  */
37 37
 function iterateur_CONDITION_dist($b) {
38
-	$b->iterateur = 'CONDITION'; # designe la classe d'iterateur
39
-	$b->show = [
40
-		'field' => []
41
-	];
38
+    $b->iterateur = 'CONDITION'; # designe la classe d'iterateur
39
+    $b->show = [
40
+        'field' => []
41
+    ];
42 42
 
43
-	return $b;
43
+    return $b;
44 44
 }
45 45
 
46 46
 /**
@@ -49,12 +49,12 @@  discard block
 block discarded – undo
49 49
  * La boucle condition n'a toujours qu'un seul élément.
50 50
  */
51 51
 class IterateurCONDITION extends IterateurData {
52
-	/**
53
-	 * Obtenir les données de la boucle CONDITION
54
-	 *
55
-	 * @param array $command
56
-	 **/
57
-	protected function select($command) {
58
-		$this->tableau = [0 => 1];
59
-	}
52
+    /**
53
+     * Obtenir les données de la boucle CONDITION
54
+     *
55
+     * @param array $command
56
+     **/
57
+    protected function select($command) {
58
+        $this->tableau = [0 => 1];
59
+    }
60 60
 }
Please login to merge, or discard this patch.
ecrire/install/etape_ldap1.php 2 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -58,11 +58,11 @@  discard block
 block discarded – undo
58 58
 					'valeur' => $adresse_ldap
59 59
 				],
60 60
 				'port_ldap' => [
61
-					'label' => _T('entree_port_annuaire') . '<br />' . _T('texte_port_annuaire'),
61
+					'label' => _T('entree_port_annuaire').'<br />'._T('texte_port_annuaire'),
62 62
 					'valeur' => $port_ldap
63 63
 				],
64 64
 				'tls_ldap' => [
65
-					'label' => '<b>' . _T('tls_ldap') . '</b>',
65
+					'label' => '<b>'._T('tls_ldap').'</b>',
66 66
 					'valeur' => $tls_ldap,
67 67
 					'alternatives' => [
68 68
 						'non' => _T('item_non'),
@@ -80,7 +80,7 @@  discard block
 block discarded – undo
80 80
 			]
81 81
 		)
82 82
 
83
-		. "\n<p>" . _T('texte_acces_ldap_anonyme_1') . '</p>'
83
+		. "\n<p>"._T('texte_acces_ldap_anonyme_1').'</p>'
84 84
 		. fieldset(
85 85
 			_T('connexion_ldap'),
86 86
 			[
Please login to merge, or discard this patch.
Indentation   +71 added lines, -71 removed lines patch added patch discarded remove patch
@@ -11,88 +11,88 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 function install_etape_ldap1_dist() {
18
-	$adresse_ldap = defined('_INSTALL_HOST_LDAP')
19
-		? _INSTALL_HOST_LDAP
20
-		: 'localhost';
18
+    $adresse_ldap = defined('_INSTALL_HOST_LDAP')
19
+        ? _INSTALL_HOST_LDAP
20
+        : 'localhost';
21 21
 
22
-	$port_ldap = defined('_INSTALL_PORT_LDAP')
23
-		? _INSTALL_PORT_LDAP
24
-		: 389;
22
+    $port_ldap = defined('_INSTALL_PORT_LDAP')
23
+        ? _INSTALL_PORT_LDAP
24
+        : 389;
25 25
 
26
-	$tls_ldap = defined('_INSTALL_TLS_LDAP')
27
-		? _INSTALL_TLS_LDAP
28
-		: 'non';
26
+    $tls_ldap = defined('_INSTALL_TLS_LDAP')
27
+        ? _INSTALL_TLS_LDAP
28
+        : 'non';
29 29
 
30
-	$protocole_ldap = defined('_INSTALL_PROTOCOLE_LDAP')
31
-		? _INSTALL_PROTOCOLE_LDAP
32
-		: 3; // on essaie 2 en cas d'echec
30
+    $protocole_ldap = defined('_INSTALL_PROTOCOLE_LDAP')
31
+        ? _INSTALL_PROTOCOLE_LDAP
32
+        : 3; // on essaie 2 en cas d'echec
33 33
 
34
-	$login_ldap = defined('_INSTALL_USER_LDAP')
35
-		? _INSTALL_USER_LDAP
36
-		: '';
34
+    $login_ldap = defined('_INSTALL_USER_LDAP')
35
+        ? _INSTALL_USER_LDAP
36
+        : '';
37 37
 
38
-	$pass_ldap = defined('_INSTALL_PASS_LDAP')
39
-		? _INSTALL_PASS_LDAP
40
-		: '';
38
+    $pass_ldap = defined('_INSTALL_PASS_LDAP')
39
+        ? _INSTALL_PASS_LDAP
40
+        : '';
41 41
 
42
-	echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
42
+    echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
43 43
 
44
-	echo info_etape(
45
-		_T('titre_connexion_ldap'),
46
-		info_progression_etape(1, 'etape_ldap', 'install/')
47
-	);
44
+    echo info_etape(
45
+        _T('titre_connexion_ldap'),
46
+        info_progression_etape(1, 'etape_ldap', 'install/')
47
+    );
48 48
 
49
-	echo generer_form_ecrire('install', (
50
-		"\n<input type='hidden' name='etape' value='ldap2' />"
51
-		. fieldset(
52
-			_T('entree_adresse_annuaire'),
53
-			[
54
-				'adresse_ldap' => [
55
-					'label' => _T('texte_adresse_annuaire_1'),
56
-					'valeur' => $adresse_ldap
57
-				],
58
-				'port_ldap' => [
59
-					'label' => _T('entree_port_annuaire') . '<br />' . _T('texte_port_annuaire'),
60
-					'valeur' => $port_ldap
61
-				],
62
-				'tls_ldap' => [
63
-					'label' => '<b>' . _T('tls_ldap') . '</b>',
64
-					'valeur' => $tls_ldap,
65
-					'alternatives' => [
66
-						'non' => _T('item_non'),
67
-						'oui' => _T('item_oui')
68
-					]
69
-				],
70
-				'protocole_ldap' => [
71
-					'label' => _T('protocole_ldap'),
72
-					'valeur' => $protocole_ldap,
73
-					'alternatives' => [
74
-						'3' => '3',
75
-						'2' => '2'
76
-					]
77
-				]
78
-			]
79
-		)
49
+    echo generer_form_ecrire('install', (
50
+        "\n<input type='hidden' name='etape' value='ldap2' />"
51
+        . fieldset(
52
+            _T('entree_adresse_annuaire'),
53
+            [
54
+                'adresse_ldap' => [
55
+                    'label' => _T('texte_adresse_annuaire_1'),
56
+                    'valeur' => $adresse_ldap
57
+                ],
58
+                'port_ldap' => [
59
+                    'label' => _T('entree_port_annuaire') . '<br />' . _T('texte_port_annuaire'),
60
+                    'valeur' => $port_ldap
61
+                ],
62
+                'tls_ldap' => [
63
+                    'label' => '<b>' . _T('tls_ldap') . '</b>',
64
+                    'valeur' => $tls_ldap,
65
+                    'alternatives' => [
66
+                        'non' => _T('item_non'),
67
+                        'oui' => _T('item_oui')
68
+                    ]
69
+                ],
70
+                'protocole_ldap' => [
71
+                    'label' => _T('protocole_ldap'),
72
+                    'valeur' => $protocole_ldap,
73
+                    'alternatives' => [
74
+                        '3' => '3',
75
+                        '2' => '2'
76
+                    ]
77
+                ]
78
+            ]
79
+        )
80 80
 
81
-		. "\n<p>" . _T('texte_acces_ldap_anonyme_1') . '</p>'
82
-		. fieldset(
83
-			_T('connexion_ldap'),
84
-			[
85
-				'login_ldap' => [
86
-					'label' => _T('texte_login_ldap_1'),
87
-					'valeur' => $login_ldap
88
-				],
89
-				'pass_ldap' => [
90
-					'label' => _T('entree_passe_ldap'),
91
-					'valeur' => $pass_ldap
92
-				]
93
-			]
94
-		)
95
-		. bouton_suivant()));
81
+        . "\n<p>" . _T('texte_acces_ldap_anonyme_1') . '</p>'
82
+        . fieldset(
83
+            _T('connexion_ldap'),
84
+            [
85
+                'login_ldap' => [
86
+                    'label' => _T('texte_login_ldap_1'),
87
+                    'valeur' => $login_ldap
88
+                ],
89
+                'pass_ldap' => [
90
+                    'label' => _T('entree_passe_ldap'),
91
+                    'valeur' => $pass_ldap
92
+                ]
93
+            ]
94
+        )
95
+        . bouton_suivant()));
96 96
 
97
-	echo install_fin_html();
97
+    echo install_fin_html();
98 98
 }
Please login to merge, or discard this patch.
ecrire/install/etape_chmod.php 2 patches
Spacing   +15 added lines, -16 removed lines patch added patch discarded remove patch
@@ -81,7 +81,7 @@  discard block
 block discarded – undo
81 81
 			$test_dir .= '/';
82 82
 		}
83 83
 		if (!in_array($test_dir, $GLOBALS['test_dirs'])) {
84
-			$GLOBALS['test_dirs'][] = _DIR_RACINE . $test_dir;
84
+			$GLOBALS['test_dirs'][] = _DIR_RACINE.$test_dir;
85 85
 		}
86 86
 	} else {
87 87
 		if (!_FILE_CONNECT) {
@@ -96,11 +96,11 @@  discard block
 block discarded – undo
96 96
 	foreach ($GLOBALS['test_dirs'] as $i => $my_dir) {
97 97
 		$test = test_ecrire($my_dir);
98 98
 		if (!$test) {
99
-			$m = preg_replace(',^' . _DIR_RACINE . ',', '', $my_dir);
99
+			$m = preg_replace(',^'._DIR_RACINE.',', '', $my_dir);
100 100
 			if (@file_exists($my_dir)) {
101
-				$bad_dirs['<li>' . $m . '</li>'] = 1;
101
+				$bad_dirs['<li>'.$m.'</li>'] = 1;
102 102
 			} else {
103
-				$absent_dirs['<li>' . $m . '</li>'] = 1;
103
+				$absent_dirs['<li>'.$m.'</li>'] = 1;
104 104
 			}
105 105
 		} else {
106 106
 			$chmod = max($chmod, $test);
@@ -110,21 +110,21 @@  discard block
 block discarded – undo
110 110
 	if ($bad_dirs or $absent_dirs) {
111 111
 		if (!_FILE_CONNECT) {
112 112
 			$titre = _T('dirs_preliminaire');
113
-			$continuer = ' ' . _T('dirs_commencer') . '.';
113
+			$continuer = ' '._T('dirs_commencer').'.';
114 114
 		} else {
115 115
 			$titre = _T('dirs_probleme_droits');
116 116
 		}
117 117
 
118 118
 
119
-		$res = "<div align='right'>" . menu_langues('var_lang_ecrire') . "</div>\n";
119
+		$res = "<div align='right'>".menu_langues('var_lang_ecrire')."</div>\n";
120 120
 
121 121
 		if ($bad_dirs) {
122 122
 			$res .=
123 123
 				_T(
124 124
 					'dirs_repertoires_suivants',
125 125
 					['bad_dirs' => join("\n", array_keys($bad_dirs))]
126
-				) .
127
-				'<b>' . _T('login_recharger') . '</b>.';
126
+				).
127
+				'<b>'._T('login_recharger').'</b>.';
128 128
 		}
129 129
 
130 130
 		if ($absent_dirs) {
@@ -132,22 +132,21 @@  discard block
 block discarded – undo
132 132
 				_T(
133 133
 					'dirs_repertoires_absents',
134 134
 					['bad_dirs' => join("\n", array_keys($absent_dirs))]
135
-				) .
136
-				'<b>' . _T('login_recharger') . '</b>.';
135
+				).
136
+				'<b>'._T('login_recharger').'</b>.';
137 137
 		}
138
-		$res = '<p>' . $continuer . $res . aider('install0', true) . '</p>';
138
+		$res = '<p>'.$continuer.$res.aider('install0', true).'</p>';
139 139
 
140 140
 		$t = _T('login_recharger');
141
-		$t = (!$test_dir ? '' :
142
-				"<input type='hidden' name='test_dir' value='" . spip_htmlspecialchars($test_dir, ENT_QUOTES) . "' />")
141
+		$t = (!$test_dir ? '' : "<input type='hidden' name='test_dir' value='".spip_htmlspecialchars($test_dir, ENT_QUOTES)."' />")
143 142
 			. "<input type='hidden' name='etape' value='chmod' />"
144
-			. "<div style='text-align: right'><input type='submit' value='" . attribut_html($t) . "' /></div>";
143
+			. "<div style='text-align: right'><input type='submit' value='".attribut_html($t)."' /></div>";
145 144
 
146
-		echo minipres($titre, $res . generer_form_ecrire('install', $t));
145
+		echo minipres($titre, $res.generer_form_ecrire('install', $t));
147 146
 	} else {
148 147
 		$deja = (_FILE_CONNECT and analyse_fichier_connection(_FILE_CONNECT));
149 148
 		if (!$deja) {
150
-			redirige_url_ecrire('install', 'etape=1&chmod=' . $chmod);
149
+			redirige_url_ecrire('install', 'etape=1&chmod='.$chmod);
151 150
 		} else {
152 151
 			redirige_url_ecrire();
153 152
 		}
Please login to merge, or discard this patch.
Indentation   +118 added lines, -118 removed lines patch added patch discarded remove patch
@@ -11,11 +11,11 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 if (defined('_TEST_DIRS')) {
18
-	return;
18
+    return;
19 19
 }
20 20
 define('_TEST_DIRS', '1');
21 21
 
@@ -26,42 +26,42 @@  discard block
 block discarded – undo
26 26
 // Tente d'ecrire
27 27
 //
28 28
 function test_ecrire($my_dir) {
29
-	static $chmod = 0;
30
-
31
-	$ok = false;
32
-	$script = @file_exists('spip_loader.php') ? 'spip_loader.php' : $_SERVER['PHP_SELF'];
33
-	$self = basename($script);
34
-	$uid = @fileowner('.');
35
-	$uid2 = @fileowner($self);
36
-	$gid = @filegroup('.');
37
-	$gid2 = @filegroup($self);
38
-	$perms = @fileperms($self);
39
-
40
-	// Comparer l'appartenance d'un fichier cree par PHP
41
-	// avec celle du script et du repertoire courant
42
-	if (!$chmod) {
43
-		@rmdir('test');
44
-		spip_unlink('test'); // effacer au cas ou
45
-		@touch('test');
46
-		if ($uid > 0 && $uid == $uid2 && @fileowner('test') == $uid) {
47
-			$chmod = 0700;
48
-		} else {
49
-			if ($gid > 0 && $gid == $gid2 && @filegroup('test') == $gid) {
50
-				$chmod = 0770;
51
-			} else {
52
-				$chmod = 0777;
53
-			}
54
-		}
55
-		// Appliquer de plus les droits d'acces du script
56
-		if ($perms > 0) {
57
-			$perms = ($perms & 0777) | (($perms & 0444) >> 2);
58
-			$chmod |= $perms;
59
-		}
60
-		spip_unlink('test');
61
-	}
62
-	$ok = is_dir($my_dir) && is_writable($my_dir);
63
-
64
-	return $ok ? $chmod : false;
29
+    static $chmod = 0;
30
+
31
+    $ok = false;
32
+    $script = @file_exists('spip_loader.php') ? 'spip_loader.php' : $_SERVER['PHP_SELF'];
33
+    $self = basename($script);
34
+    $uid = @fileowner('.');
35
+    $uid2 = @fileowner($self);
36
+    $gid = @filegroup('.');
37
+    $gid2 = @filegroup($self);
38
+    $perms = @fileperms($self);
39
+
40
+    // Comparer l'appartenance d'un fichier cree par PHP
41
+    // avec celle du script et du repertoire courant
42
+    if (!$chmod) {
43
+        @rmdir('test');
44
+        spip_unlink('test'); // effacer au cas ou
45
+        @touch('test');
46
+        if ($uid > 0 && $uid == $uid2 && @fileowner('test') == $uid) {
47
+            $chmod = 0700;
48
+        } else {
49
+            if ($gid > 0 && $gid == $gid2 && @filegroup('test') == $gid) {
50
+                $chmod = 0770;
51
+            } else {
52
+                $chmod = 0777;
53
+            }
54
+        }
55
+        // Appliquer de plus les droits d'acces du script
56
+        if ($perms > 0) {
57
+            $perms = ($perms & 0777) | (($perms & 0444) >> 2);
58
+            $chmod |= $perms;
59
+        }
60
+        spip_unlink('test');
61
+    }
62
+    $ok = is_dir($my_dir) && is_writable($my_dir);
63
+
64
+    return $ok ? $chmod : false;
65 65
 }
66 66
 
67 67
 //
@@ -71,84 +71,84 @@  discard block
 block discarded – undo
71 71
 
72 72
 function install_etape_chmod_dist() {
73 73
 
74
-	$continuer = null;
75
-	$test_dir = _request('test_dir');
76
-	$chmod = 0;
77
-
78
-	if ($test_dir) {
79
-		if (substr($test_dir, -1) !== '/') {
80
-			$test_dir .= '/';
81
-		}
82
-		if (!in_array($test_dir, $GLOBALS['test_dirs'])) {
83
-			$GLOBALS['test_dirs'][] = _DIR_RACINE . $test_dir;
84
-		}
85
-	} else {
86
-		if (!_FILE_CONNECT) {
87
-			$GLOBALS['test_dirs'][] = _DIR_CONNECT;
88
-			$GLOBALS['test_dirs'][] = _DIR_CHMOD;
89
-		}
90
-	}
91
-
92
-	$bad_dirs = [];
93
-	$absent_dirs = [];
94
-
95
-	foreach ($GLOBALS['test_dirs'] as $i => $my_dir) {
96
-		$test = test_ecrire($my_dir);
97
-		if (!$test) {
98
-			$m = preg_replace(',^' . _DIR_RACINE . ',', '', $my_dir);
99
-			if (@file_exists($my_dir)) {
100
-				$bad_dirs['<li>' . $m . '</li>'] = 1;
101
-			} else {
102
-				$absent_dirs['<li>' . $m . '</li>'] = 1;
103
-			}
104
-		} else {
105
-			$chmod = max($chmod, $test);
106
-		}
107
-	}
108
-
109
-	if ($bad_dirs or $absent_dirs) {
110
-		if (!_FILE_CONNECT) {
111
-			$titre = _T('dirs_preliminaire');
112
-			$continuer = ' ' . _T('dirs_commencer') . '.';
113
-		} else {
114
-			$titre = _T('dirs_probleme_droits');
115
-		}
116
-
117
-
118
-		$res = "<div align='right'>" . menu_langues('var_lang_ecrire') . "</div>\n";
119
-
120
-		if ($bad_dirs) {
121
-			$res .=
122
-				_T(
123
-					'dirs_repertoires_suivants',
124
-					['bad_dirs' => join("\n", array_keys($bad_dirs))]
125
-				) .
126
-				'<b>' . _T('login_recharger') . '</b>.';
127
-		}
128
-
129
-		if ($absent_dirs) {
130
-			$res .=
131
-				_T(
132
-					'dirs_repertoires_absents',
133
-					['bad_dirs' => join("\n", array_keys($absent_dirs))]
134
-				) .
135
-				'<b>' . _T('login_recharger') . '</b>.';
136
-		}
137
-		$res = '<p>' . $continuer . $res . aider('install0', true) . '</p>';
138
-
139
-		$t = _T('login_recharger');
140
-		$t = (!$test_dir ? '' :
141
-				"<input type='hidden' name='test_dir' value='" . spip_htmlspecialchars($test_dir, ENT_QUOTES) . "' />")
142
-			. "<input type='hidden' name='etape' value='chmod' />"
143
-			. "<div style='text-align: right'><input type='submit' value='" . attribut_html($t) . "' /></div>";
144
-
145
-		echo minipres($titre, $res . generer_form_ecrire('install', $t));
146
-	} else {
147
-		$deja = (_FILE_CONNECT and analyse_fichier_connection(_FILE_CONNECT));
148
-		if (!$deja) {
149
-			redirige_url_ecrire('install', 'etape=1&chmod=' . $chmod);
150
-		} else {
151
-			redirige_url_ecrire();
152
-		}
153
-	}
74
+    $continuer = null;
75
+    $test_dir = _request('test_dir');
76
+    $chmod = 0;
77
+
78
+    if ($test_dir) {
79
+        if (substr($test_dir, -1) !== '/') {
80
+            $test_dir .= '/';
81
+        }
82
+        if (!in_array($test_dir, $GLOBALS['test_dirs'])) {
83
+            $GLOBALS['test_dirs'][] = _DIR_RACINE . $test_dir;
84
+        }
85
+    } else {
86
+        if (!_FILE_CONNECT) {
87
+            $GLOBALS['test_dirs'][] = _DIR_CONNECT;
88
+            $GLOBALS['test_dirs'][] = _DIR_CHMOD;
89
+        }
90
+    }
91
+
92
+    $bad_dirs = [];
93
+    $absent_dirs = [];
94
+
95
+    foreach ($GLOBALS['test_dirs'] as $i => $my_dir) {
96
+        $test = test_ecrire($my_dir);
97
+        if (!$test) {
98
+            $m = preg_replace(',^' . _DIR_RACINE . ',', '', $my_dir);
99
+            if (@file_exists($my_dir)) {
100
+                $bad_dirs['<li>' . $m . '</li>'] = 1;
101
+            } else {
102
+                $absent_dirs['<li>' . $m . '</li>'] = 1;
103
+            }
104
+        } else {
105
+            $chmod = max($chmod, $test);
106
+        }
107
+    }
108
+
109
+    if ($bad_dirs or $absent_dirs) {
110
+        if (!_FILE_CONNECT) {
111
+            $titre = _T('dirs_preliminaire');
112
+            $continuer = ' ' . _T('dirs_commencer') . '.';
113
+        } else {
114
+            $titre = _T('dirs_probleme_droits');
115
+        }
116
+
117
+
118
+        $res = "<div align='right'>" . menu_langues('var_lang_ecrire') . "</div>\n";
119
+
120
+        if ($bad_dirs) {
121
+            $res .=
122
+                _T(
123
+                    'dirs_repertoires_suivants',
124
+                    ['bad_dirs' => join("\n", array_keys($bad_dirs))]
125
+                ) .
126
+                '<b>' . _T('login_recharger') . '</b>.';
127
+        }
128
+
129
+        if ($absent_dirs) {
130
+            $res .=
131
+                _T(
132
+                    'dirs_repertoires_absents',
133
+                    ['bad_dirs' => join("\n", array_keys($absent_dirs))]
134
+                ) .
135
+                '<b>' . _T('login_recharger') . '</b>.';
136
+        }
137
+        $res = '<p>' . $continuer . $res . aider('install0', true) . '</p>';
138
+
139
+        $t = _T('login_recharger');
140
+        $t = (!$test_dir ? '' :
141
+                "<input type='hidden' name='test_dir' value='" . spip_htmlspecialchars($test_dir, ENT_QUOTES) . "' />")
142
+            . "<input type='hidden' name='etape' value='chmod' />"
143
+            . "<div style='text-align: right'><input type='submit' value='" . attribut_html($t) . "' /></div>";
144
+
145
+        echo minipres($titre, $res . generer_form_ecrire('install', $t));
146
+    } else {
147
+        $deja = (_FILE_CONNECT and analyse_fichier_connection(_FILE_CONNECT));
148
+        if (!$deja) {
149
+            redirige_url_ecrire('install', 'etape=1&chmod=' . $chmod);
150
+        } else {
151
+            redirige_url_ecrire();
152
+        }
153
+    }
154 154
 }
Please login to merge, or discard this patch.
ecrire/install/etape_fin.php 2 patches
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -45,7 +45,7 @@  discard block
 block discarded – undo
45 45
 	// creer le repertoire cache, qui sert partout !
46 46
 	// deja fait en etape 4 en principe, on garde au cas ou
47 47
 	if (!@file_exists(_DIR_CACHE)) {
48
-		$rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE);
48
+		$rep = preg_replace(','._DIR_TMP.',', '', _DIR_CACHE);
49 49
 		$rep = sous_repertoire(_DIR_TMP, $rep, true, true);
50 50
 	}
51 51
 
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
 	if ($msg) {
56 56
 		$cible = _T('public:accueil_site');
57 57
 		$cible = generer_form_ecrire('accueil', '', '', $cible);
58
-		echo minipres('AUTO', $msg . $cible);
58
+		echo minipres('AUTO', $msg.$cible);
59 59
 		// ok, deboucher dans l'espace prive
60 60
 	} else {
61 61
 		redirige_url_ecrire('accueil');
@@ -75,9 +75,9 @@  discard block
 block discarded – undo
75 75
 	$averti = _T(
76 76
 		'htaccess_a_simuler',
77 77
 		[
78
-			'htaccess' => '<tt>' . _ACCESS_FILE_NAME . '</tt>',
78
+			'htaccess' => '<tt>'._ACCESS_FILE_NAME.'</tt>',
79 79
 			'constantes' => '<tt>_DIR_TMP &amp; _DIR_CONNECT</tt>',
80
-			'document_root' => '<tt>' . $_SERVER['DOCUMENT_ROOT'] . '</tt>'
80
+			'document_root' => '<tt>'.$_SERVER['DOCUMENT_ROOT'].'</tt>'
81 81
 		]
82 82
 	);
83 83
 
Please login to merge, or discard this patch.
Indentation   +52 added lines, -52 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 include_spip('inc/headers');
@@ -20,65 +20,65 @@  discard block
 block discarded – undo
20 20
 // Mise en place des fichiers de configuration si ce n'est fait
21 21
 
22 22
 function install_etape_fin_dist() {
23
-	ecrire_acces();
23
+    ecrire_acces();
24 24
 
25
-	$f = str_replace(_FILE_TMP_SUFFIX, '.php', _FILE_CHMOD_TMP);
26
-	if (file_exists(_FILE_CHMOD_TMP)) {
27
-		if (!@rename(_FILE_CHMOD_TMP, $f)) {
28
-			if (@copy(_FILE_CHMOD_TMP, $f)) {
29
-				spip_unlink(_FILE_CHMOD_TMP);
30
-			}
31
-		}
32
-	}
25
+    $f = str_replace(_FILE_TMP_SUFFIX, '.php', _FILE_CHMOD_TMP);
26
+    if (file_exists(_FILE_CHMOD_TMP)) {
27
+        if (!@rename(_FILE_CHMOD_TMP, $f)) {
28
+            if (@copy(_FILE_CHMOD_TMP, $f)) {
29
+                spip_unlink(_FILE_CHMOD_TMP);
30
+            }
31
+        }
32
+    }
33 33
 
34
-	$f = str_replace(_FILE_TMP_SUFFIX, '.php', _FILE_CONNECT_TMP);
35
-	if (file_exists(_FILE_CONNECT_TMP)) {
36
-		spip_log("renomme $f");
37
-		if (!@rename(_FILE_CONNECT_TMP, $f)) {
38
-			if (@copy(_FILE_CONNECT_TMP, $f)) {
39
-				@spip_unlink(_FILE_CONNECT_TMP);
40
-			}
41
-		}
42
-	}
34
+    $f = str_replace(_FILE_TMP_SUFFIX, '.php', _FILE_CONNECT_TMP);
35
+    if (file_exists(_FILE_CONNECT_TMP)) {
36
+        spip_log("renomme $f");
37
+        if (!@rename(_FILE_CONNECT_TMP, $f)) {
38
+            if (@copy(_FILE_CONNECT_TMP, $f)) {
39
+                @spip_unlink(_FILE_CONNECT_TMP);
40
+            }
41
+        }
42
+    }
43 43
 
44
-	// creer le repertoire cache, qui sert partout !
45
-	// deja fait en etape 4 en principe, on garde au cas ou
46
-	if (!@file_exists(_DIR_CACHE)) {
47
-		$rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE);
48
-		$rep = sous_repertoire(_DIR_TMP, $rep, true, true);
49
-	}
44
+    // creer le repertoire cache, qui sert partout !
45
+    // deja fait en etape 4 en principe, on garde au cas ou
46
+    if (!@file_exists(_DIR_CACHE)) {
47
+        $rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE);
48
+        $rep = sous_repertoire(_DIR_TMP, $rep, true, true);
49
+    }
50 50
 
51
-	// Verifier la securite des htaccess
52
-	// Si elle ne fonctionne pas, prevenir
53
-	$msg = install_verifier_htaccess();
54
-	if ($msg) {
55
-		$cible = _T('public:accueil_site');
56
-		$cible = generer_form_ecrire('accueil', '', '', $cible);
57
-		echo minipres('AUTO', $msg . $cible);
58
-		// ok, deboucher dans l'espace prive
59
-	} else {
60
-		redirige_url_ecrire('accueil');
61
-	}
51
+    // Verifier la securite des htaccess
52
+    // Si elle ne fonctionne pas, prevenir
53
+    $msg = install_verifier_htaccess();
54
+    if ($msg) {
55
+        $cible = _T('public:accueil_site');
56
+        $cible = generer_form_ecrire('accueil', '', '', $cible);
57
+        echo minipres('AUTO', $msg . $cible);
58
+        // ok, deboucher dans l'espace prive
59
+    } else {
60
+        redirige_url_ecrire('accueil');
61
+    }
62 62
 }
63 63
 
64 64
 function install_verifier_htaccess() {
65
-	if (
66
-		verifier_htaccess(_DIR_TMP, true)
67
-		and verifier_htaccess(_DIR_CONNECT, true)
68
-	) {
69
-		return '';
70
-	}
65
+    if (
66
+        verifier_htaccess(_DIR_TMP, true)
67
+        and verifier_htaccess(_DIR_CONNECT, true)
68
+    ) {
69
+        return '';
70
+    }
71 71
 
72
-	$titre = _T('htaccess_inoperant');
72
+    $titre = _T('htaccess_inoperant');
73 73
 
74
-	$averti = _T(
75
-		'htaccess_a_simuler',
76
-		[
77
-			'htaccess' => '<tt>' . _ACCESS_FILE_NAME . '</tt>',
78
-			'constantes' => '<tt>_DIR_TMP &amp; _DIR_CONNECT</tt>',
79
-			'document_root' => '<tt>' . $_SERVER['DOCUMENT_ROOT'] . '</tt>'
80
-		]
81
-	);
74
+    $averti = _T(
75
+        'htaccess_a_simuler',
76
+        [
77
+            'htaccess' => '<tt>' . _ACCESS_FILE_NAME . '</tt>',
78
+            'constantes' => '<tt>_DIR_TMP &amp; _DIR_CONNECT</tt>',
79
+            'document_root' => '<tt>' . $_SERVER['DOCUMENT_ROOT'] . '</tt>'
80
+        ]
81
+    );
82 82
 
83
-	return "<div class='error'><h3>$titre</h3><p>$averti</p></div>";
83
+    return "<div class='error'><h3>$titre</h3><p>$averti</p></div>";
84 84
 }
Please login to merge, or discard this patch.
ecrire/install/etape_4.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -21,7 +21,7 @@  discard block
 block discarded – undo
21 21
 
22 22
 	// creer le repertoire cache, qui sert partout !
23 23
 	if (!@file_exists(_DIR_CACHE)) {
24
-		$rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE);
24
+		$rep = preg_replace(','._DIR_TMP.',', '', _DIR_CACHE);
25 25
 		$rep = sous_repertoire(_DIR_TMP, $rep, true, true);
26 26
 	}
27 27
 
@@ -39,7 +39,7 @@  discard block
 block discarded – undo
39 39
 	echo '<p>'
40 40
 		. _T(
41 41
 			'plugin_info_plugins_dist_1',
42
-			['plugins_dist' => '<tt>' . joli_repertoire(_DIR_PLUGINS_DIST) . '</tt>']
42
+			['plugins_dist' => '<tt>'.joli_repertoire(_DIR_PLUGINS_DIST).'</tt>']
43 43
 		)
44 44
 		. '</p>';
45 45
 
Please login to merge, or discard this patch.
Indentation   +49 added lines, -49 removed lines patch added patch discarded remove patch
@@ -11,69 +11,69 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 include_spip('inc/headers');
18 18
 
19 19
 function install_etape_4_dist() {
20 20
 
21
-	// creer le repertoire cache, qui sert partout !
22
-	if (!@file_exists(_DIR_CACHE)) {
23
-		$rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE);
24
-		$rep = sous_repertoire(_DIR_TMP, $rep, true, true);
25
-	}
21
+    // creer le repertoire cache, qui sert partout !
22
+    if (!@file_exists(_DIR_CACHE)) {
23
+        $rep = preg_replace(',' . _DIR_TMP . ',', '', _DIR_CACHE);
24
+        $rep = sous_repertoire(_DIR_TMP, $rep, true, true);
25
+    }
26 26
 
27 27
 
28
-	echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
29
-	echo info_progression_etape(4, 'etape_', 'install/');
28
+    echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
29
+    echo info_progression_etape(4, 'etape_', 'install/');
30 30
 
31
-	echo "<div class='success'><b>"
32
-		. _T('info_derniere_etape')
33
-		. '</b><p>'
34
-		. _T('info_utilisation_spip')
35
-		. '</p></div>';
31
+    echo "<div class='success'><b>"
32
+        . _T('info_derniere_etape')
33
+        . '</b><p>'
34
+        . _T('info_utilisation_spip')
35
+        . '</p></div>';
36 36
 
37 37
 
38
-	echo '<p>'
39
-		. _T(
40
-			'plugin_info_plugins_dist_1',
41
-			['plugins_dist' => '<tt>' . joli_repertoire(_DIR_PLUGINS_DIST) . '</tt>']
42
-		)
43
-		. '</p>';
38
+    echo '<p>'
39
+        . _T(
40
+            'plugin_info_plugins_dist_1',
41
+            ['plugins_dist' => '<tt>' . joli_repertoire(_DIR_PLUGINS_DIST) . '</tt>']
42
+        )
43
+        . '</p>';
44 44
 
45
-	// installer les extensions
46
-	include_spip('inc/plugin');
47
-	$afficher = charger_fonction('afficher_liste', 'plugins');
48
-	echo $afficher(
49
-		self(),
50
-		liste_plugin_files(_DIR_PLUGINS_DIST),
51
-		[],
52
-		[],
53
-		_DIR_PLUGINS_DIST,
54
-		'afficher_nom_plugin'
55
-	);
45
+    // installer les extensions
46
+    include_spip('inc/plugin');
47
+    $afficher = charger_fonction('afficher_liste', 'plugins');
48
+    echo $afficher(
49
+        self(),
50
+        liste_plugin_files(_DIR_PLUGINS_DIST),
51
+        [],
52
+        [],
53
+        _DIR_PLUGINS_DIST,
54
+        'afficher_nom_plugin'
55
+    );
56 56
 
57
-	// si la base de SPIP est up, on peut installer les plugins, sinon on passe cette etape
58
-	// car les plugins supposent que la base de SPIP est dans son etat normal (mise a jour)
59
-	// au premier passage dans l'espace prive on aura une demande d'upgrade qui se poursuit sur la page plugin
60
-	// et procede alors a l'installation
61
-	if (
62
-		!isset($GLOBALS['meta']['version_installee'])
63
-		or ($GLOBALS['spip_version_base'] == (str_replace(',', '.', $GLOBALS['meta']['version_installee'])))
64
-	) {
65
-		plugin_installes_meta();
66
-	}
57
+    // si la base de SPIP est up, on peut installer les plugins, sinon on passe cette etape
58
+    // car les plugins supposent que la base de SPIP est dans son etat normal (mise a jour)
59
+    // au premier passage dans l'espace prive on aura une demande d'upgrade qui se poursuit sur la page plugin
60
+    // et procede alors a l'installation
61
+    if (
62
+        !isset($GLOBALS['meta']['version_installee'])
63
+        or ($GLOBALS['spip_version_base'] == (str_replace(',', '.', $GLOBALS['meta']['version_installee'])))
64
+    ) {
65
+        plugin_installes_meta();
66
+    }
67 67
 
68
-	// mettre a jour si necessaire l'adresse du site
69
-	// securite si on arrive plus a se loger
70
-	include_spip('inc/config');
71
-	appliquer_adresse_site('');
68
+    // mettre a jour si necessaire l'adresse du site
69
+    // securite si on arrive plus a se loger
70
+    include_spip('inc/config');
71
+    appliquer_adresse_site('');
72 72
 
73
-	// aller a la derniere etape qui clos l'install et redirige
74
-	$suite = "\n<input type='hidden' name='etape' value='fin' />"
75
-		. bouton_suivant(_T('login_espace_prive'));
73
+    // aller a la derniere etape qui clos l'install et redirige
74
+    $suite = "\n<input type='hidden' name='etape' value='fin' />"
75
+        . bouton_suivant(_T('login_espace_prive'));
76 76
 
77
-	echo generer_form_ecrire('install', $suite);
78
-	echo install_fin_html();
77
+    echo generer_form_ecrire('install', $suite);
78
+    echo install_fin_html();
79 79
 }
Please login to merge, or discard this patch.