Completed
Push — master ( 92f151...855643 )
by cam
06:02
created
ecrire/base/objets.php 1 patch
Indentation   +957 added lines, -957 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,433 +53,433 @@  discard block
 block discarded – undo
53 53
  * @return array|bool
54 54
  */
55 55
 function lister_tables_objets_sql($table_sql = null, $desc = array()) {
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 : array());
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 = array(
81
-			'spip_articles' => array(
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' => array(
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' => array(
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' => array(
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' => array(
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' => array(
161
-					'id_article' => 'id_article',
162
-					'id_rubrique' => 'id_rubrique'
163
-				),
164
-				'rechercher_champs' => array(
165
-					'surtitre' => 5,
166
-					'titre' => 8,
167
-					'soustitre' => 5,
168
-					'chapo' => 3,
169
-					'texte' => 1,
170
-					'ps' => 1,
171
-					'nom_site' => 1,
172
-					'url_site' => 1,
173
-					'descriptif' => 4
174
-				),
175
-				'rechercher_jointures' => array(
176
-					'auteur' => array('nom' => 10),
177
-				),
178
-				'statut' => array(
179
-					array(
180
-						'champ' => 'statut',
181
-						'publie' => 'publie',
182
-						'previsu' => 'publie,prop,prepa/auteur',
183
-						'post_date' => 'date',
184
-						'exception' => array('statut', 'tout')
185
-					)
186
-				),
187
-				'statut_titres' => array(
188
-					'prepa' => 'info_article_redaction',
189
-					'prop' => 'info_article_propose',
190
-					'publie' => 'info_article_publie',
191
-					'refuse' => 'info_article_refuse',
192
-					'poubelle' => 'info_article_supprime'
193
-				),
194
-				'statut_textes_instituer' => array(
195
-					'prepa' => 'texte_statut_en_cours_redaction',
196
-					'prop' => 'texte_statut_propose_evaluation',
197
-					'publie' => 'texte_statut_publie',
198
-					'refuse' => 'texte_statut_refuse',
199
-					'poubelle' => 'texte_statut_poubelle',
200
-				),
201
-				'texte_changer_statut' => 'texte_article_statut',
202
-				'aide_changer_statut' => 'artstatut',
203
-				'tables_jointures' => array(
204
-					'profondeur' => 'rubriques',
205
-					#'id_auteur' => 'auteurs_liens' // declaration generique plus bas
206
-				),
207
-			),
208
-			'spip_auteurs' => array(
209
-				'page' => 'auteur',
210
-				'texte_retour' => 'icone_retour',
211
-				'texte_ajouter' => 'titre_ajouter_un_auteur',
212
-				'texte_modifier' => 'admin_modifier_auteur',
213
-				'texte_objets' => 'icone_auteurs',
214
-				'texte_objet' => 'public:auteur',
215
-				'info_aucun_objet' => 'info_aucun_auteur',
216
-				'info_1_objet' => 'info_1_auteur',
217
-				'info_nb_objets' => 'info_nb_auteurs',
218
-				'texte_logo_objet' => 'logo_auteur',
219
-				'texte_creer_associer' => 'creer_et_associer_un_auteur',
220
-				'titre' => "nom AS titre, '' AS lang",
221
-				'date' => 'date',
222
-				'principale' => 'oui',
223
-				'champs_editables' => array('nom', 'email', 'bio', 'nom_site', 'url_site', 'imessage', 'pgp'),
224
-				'champs_versionnes' => array('nom', 'bio', 'email', 'nom_site', 'url_site', 'login'),
225
-				'field' => array(
226
-					'id_auteur' => 'bigint(21) NOT NULL',
227
-					'nom' => "text DEFAULT '' NOT NULL",
228
-					'bio' => "text DEFAULT '' NOT NULL",
229
-					'email' => "tinytext DEFAULT '' NOT NULL",
230
-					'nom_site' => "tinytext DEFAULT '' NOT NULL",
231
-					'url_site' => "text DEFAULT '' NOT NULL",
232
-					'login' => 'VARCHAR(255) BINARY',
233
-					'pass' => "tinytext DEFAULT '' NOT NULL",
234
-					'low_sec' => "tinytext DEFAULT '' NOT NULL",
235
-					'statut' => "varchar(255)  DEFAULT '0' NOT NULL",
236
-					'webmestre' => "varchar(3)  DEFAULT 'non' NOT NULL",
237
-					'maj' => 'TIMESTAMP',
238
-					'pgp' => "TEXT DEFAULT '' NOT NULL",
239
-					'htpass' => "tinytext DEFAULT '' NOT NULL",
240
-					'en_ligne' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
241
-					'alea_actuel' => 'tinytext',
242
-					'alea_futur' => 'tinytext',
243
-					'prefs' => 'text',
244
-					'cookie_oubli' => 'tinytext',
245
-					'source' => "VARCHAR(10) DEFAULT 'spip' NOT NULL",
246
-					'lang' => "VARCHAR(10) DEFAULT '' NOT NULL",
247
-					'imessage' => "VARCHAR(3) DEFAULT '' NOT NULL"
248
-				),
249
-				'key' => array(
250
-					'PRIMARY KEY' => 'id_auteur',
251
-					'KEY login' => 'login',
252
-					'KEY statut' => 'statut',
253
-					'KEY en_ligne' => 'en_ligne',
254
-				),
255
-				'join' => array(
256
-					'id_auteur' => 'id_auteur',
257
-					'login' => 'login'
258
-				),
259
-				'rechercher_champs' => array(
260
-					'nom' => 5,
261
-					'bio' => 1,
262
-					'email' => 1,
263
-					'nom_site' => 1,
264
-					'url_site' => 1,
265
-					'login' => 1
266
-				),
267
-				// 2 conditions pour les auteurs : statut!=poubelle,
268
-				// et avoir des articles publies
269
-				'statut' => array(
270
-					array(
271
-						'champ' => 'statut',
272
-						'publie' => '!5poubelle',
273
-						'previsu' => '!5poubelle',
274
-						'exception' => 'statut'
275
-					),
276
-					array(
277
-						'champ' => array(
278
-							array('spip_auteurs_liens', 'id_auteur'),
279
-							array(
280
-								'spip_articles',
281
-								array('id_objet', 'id_article', 'objet', 'article')
282
-							),
283
-							'statut'
284
-						),
285
-						'publie' => 'publie',
286
-						'previsu' => '!',
287
-						'post_date' => 'date',
288
-						'exception' => array('statut', 'lien', 'tout')
289
-					),
290
-				),
291
-				'statut_images' => array(
292
-					'auteur-6forum-16.png',
293
-					'0minirezo' => 'auteur-0minirezo-16.png',
294
-					'1comite' => 'auteur-1comite-16.png',
295
-					'6forum' => 'auteur-6forum-16.png',
296
-					'5poubelle' => 'auteur-5poubelle-16.png',
297
-					'nouveau' => ''
298
-				),
299
-				'statut_titres' => array(
300
-					'titre_image_visiteur',
301
-					'0minirezo' => 'titre_image_administrateur',
302
-					'1comite' => 'titre_image_redacteur_02',
303
-					'6forum' => 'titre_image_visiteur',
304
-					'5poubelle' => 'titre_image_auteur_supprime',
305
-				),
306
-				'tables_jointures' => array(#'auteurs_liens' // declaration generique plus bas
307
-				),
308
-			),
309
-			'spip_rubriques' => array(
310
-				'page' => 'rubrique',
311
-				'url_voir' => 'rubrique',
312
-				'url_edit' => 'rubrique_edit',
313
-				'texte_retour' => 'icone_retour',
314
-				'texte_objets' => 'public:rubriques',
315
-				'texte_objet' => 'public:rubrique',
316
-				'texte_modifier' => 'icone_modifier_rubrique',
317
-				'texte_creer' => 'icone_creer_rubrique',
318
-				'texte_ajouter' => 'titre_ajouter_une_rubrique',
319
-				'texte_creer_associer' => 'creer_et_associer_une_rubrique',
320
-				'info_aucun_objet' => 'info_aucun_rubrique',
321
-				'info_1_objet' => 'info_1_rubrique',
322
-				'info_nb_objets' => 'info_nb_rubriques',
323
-				'texte_logo_objet' => 'logo_rubrique',
324
-				'texte_langue_objet' => 'titre_langue_rubrique',
325
-				'texte_definir_comme_traduction_objet' => 'texte_definir_comme_traduction_rubrique',
326
-				'titre' => 'titre, lang',
327
-				'date' => 'date',
328
-				'principale' => 'oui',
329
-				'introduction_longueur' => '600',
330
-				'champs_editables' => array('titre', 'texte', 'descriptif', 'extra'),
331
-				'champs_versionnes' => array('titre', 'descriptif', 'texte'),
332
-				'field' => array(
333
-					'id_rubrique' => 'bigint(21) NOT NULL',
334
-					'id_parent' => "bigint(21) DEFAULT '0' NOT NULL",
335
-					'titre' => "text DEFAULT '' NOT NULL",
336
-					'descriptif' => "text DEFAULT '' NOT NULL",
337
-					'texte' => "longtext DEFAULT '' NOT NULL",
338
-					'id_secteur' => "bigint(21) DEFAULT '0' NOT NULL",
339
-					'maj' => 'TIMESTAMP',
340
-					'statut' => "varchar(10) DEFAULT '0' NOT NULL",
341
-					'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
342
-					'lang' => "VARCHAR(10) DEFAULT '' NOT NULL",
343
-					'langue_choisie' => "VARCHAR(3) DEFAULT 'non'",
344
-					'statut_tmp' => "varchar(10) DEFAULT '0' NOT NULL",
345
-					'date_tmp' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
346
-					'profondeur' => "smallint(5) DEFAULT '0' NOT NULL"
347
-				),
348
-				'key' => array(
349
-					'PRIMARY KEY' => 'id_rubrique',
350
-					'KEY lang' => 'lang',
351
-					'KEY id_parent' => 'id_parent',
352
-				),
353
-				'rechercher_champs' => array(
354
-					'titre' => 8,
355
-					'descriptif' => 5,
356
-					'texte' => 1
357
-				),
358
-				'statut' => array(
359
-					array(
360
-						'champ' => 'statut',
361
-						'publie' => 'publie',
362
-						'previsu' => '!',
363
-						'exception' => array('statut', 'tout')
364
-					),
365
-				),
366
-				'tables_jointures' => array(#'id_auteur' => 'auteurs_liens' // declaration generique plus bas
367
-				),
368
-			),
369
-			// toutes les tables ont le droit a une jointure sur les auteurs
370
-			array('tables_jointures' => array('id_auteur' => 'auteurs_liens'))
371
-		);
372
-
373
-		// avant d'appeller les pipeline qui peuvent generer une reentrance a l'install
374
-		// initialiser la signature
375
-		$md5 = md5(serialize($infos_tables));
376
-
377
-		$GLOBALS['tables_principales'] = pipeline('declarer_tables_principales', $GLOBALS['tables_principales']);
378
-		$GLOBALS['tables_auxiliaires'] = pipeline('declarer_tables_auxiliaires', $GLOBALS['tables_auxiliaires']);
379
-		$infos_tables = pipeline('declarer_tables_objets_sql', $infos_tables);
380
-
381
-		// completer les informations manquantes ou implicites
382
-		$all = array();
383
-		foreach (array_keys($infos_tables) as $t) {
384
-			// les cles numeriques servent a declarer
385
-			// les proprietes applicables a tous les objets
386
-			// on les mets de cote
387
-			if (is_numeric($t)) {
388
-				$all = array_merge_recursive($all, $infos_tables[$t]);
389
-				unset($infos_tables[$t]);
390
-			} else {
391
-				$infos_tables[$t] = renseigner_table_objet_sql($t, $infos_tables[$t]);
392
-			}
393
-		}
394
-
395
-		// repercuter les proprietes generales communes a tous les objets
396
-		foreach (array_keys($infos_tables) as $t) {
397
-			foreach ($all as $i => $v) {
398
-				if (in_array($i, array('tables_jointures', 'champs_versionnes'))) {
399
-					$add = $all[$i];
400
-					// eviter les doublons de declaration de table jointure (ex des mots sur auteurs)
401
-					// pour les declarations generiques avec cles numeriques
402
-					if ($i == 'tables_jointures' and isset($infos_tables[$t][$i]) and count($infos_tables[$t][$i])) {
403
-						$doublons = array_intersect($infos_tables[$t][$i], $add);
404
-						foreach ($doublons as $d) {
405
-							if (is_numeric(array_search($d, $infos_tables[$t][$i]))
406
-								and is_numeric($k = array_search($d, $add))
407
-							) {
408
-								unset($add[$k]);
409
-							}
410
-						}
411
-					}
412
-					$infos_tables[$t][$i] = array_merge(isset($infos_tables[$t][$i]) ? $infos_tables[$t][$i] : array(), $add);
413
-				} else {
414
-					$infos_tables[$t][$i] = array_merge_recursive(
415
-						isset($infos_tables[$t][$i]) ? $infos_tables[$t][$i] : array(),
416
-						$all[$i]
417
-					);
418
-				}
419
-			}
420
-		}
421
-
422
-		// completer les tables principales et auxiliaires
423
-		// avec celles declarees uniquement dans declarer_table_objets_sql
424
-		// pour assurer la compat en transition
425
-		foreach ($infos_tables as $table => $infos) {
426
-			$principale_ou_auxiliaire = ($infos['principale'] ? 'tables_principales' : 'tables_auxiliaires');
427
-			// memoriser des champs eventuels declares par des plugins dans le pipeline tables_xxx
428
-			// qui a ete appelle avant
429
-			$mem = (isset($GLOBALS[$principale_ou_auxiliaire][$table]) ? $GLOBALS[$principale_ou_auxiliaire][$table] : array());
430
-			// l'ajouter au tableau
431
-			$GLOBALS[$principale_ou_auxiliaire][$table] = array();
432
-			if (isset($infos['field']) and isset($infos['key'])) {
433
-				foreach (array('field', 'key', 'join') as $k) {
434
-					if (isset($infos_tables[$table][$k])) {
435
-						$GLOBALS[$principale_ou_auxiliaire][$table][$k] = &$infos_tables[$table][$k];
436
-					}
437
-				}
438
-			} else {
439
-				// ici on ne renvoie que les declarations, donc RIEN
440
-				// pour avoir la vrai description en base, il faut passer par trouver_table
441
-				$GLOBALS[$principale_ou_auxiliaire][$table] = array();
442
-			}
443
-			if (count($mem)) {
444
-				foreach (array_keys($mem) as $k) {
445
-					if (isset($GLOBALS[$principale_ou_auxiliaire][$table][$k])) {
446
-						$GLOBALS[$principale_ou_auxiliaire][$table][$k] = array_merge(
447
-							$GLOBALS[$principale_ou_auxiliaire][$table][$k],
448
-							$mem[$k]
449
-						);
450
-					} else {
451
-						$GLOBALS[$principale_ou_auxiliaire][$table][$k] = $mem[$k];
452
-					}
453
-				}
454
-			}
455
-		}
456
-
457
-		// recuperer les interfaces (table_titre, table_date)
458
-		// on ne le fait que dans un second temps pour que table_objet soit fonctionnel
459
-		// dans le pipeline de declarer_tables_interfaces
460
-		include_spip('public/interfaces');
461
-		foreach (array_keys($infos_tables) as $t) {
462
-			$infos_tables[$t] = renseigner_table_objet_interfaces($t, $infos_tables[$t]);
463
-		}
464
-
465
-		$deja_la = false;
466
-		// signature
467
-		$md5 = md5(serialize($infos_tables));
468
-	}
469
-	if ($table_sql === '::md5') {
470
-		return $md5;
471
-	}
472
-	if ($table_sql and !isset($infos_tables[$table_sql])) {
473
-		#$desc = renseigner_table_objet_sql($table_sql,$desc);
474
-		$desc = renseigner_table_objet_interfaces($table_sql, $desc);
475
-
476
-		return $desc;
477
-	}
478
-	if ($table_sql) {
479
-		return isset($infos_tables[$table_sql]) ? $infos_tables[$table_sql] : array();
480
-	}
481
-
482
-	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 : array());
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 = array(
81
+            'spip_articles' => array(
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' => array(
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' => array(
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' => array(
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' => array(
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' => array(
161
+                    'id_article' => 'id_article',
162
+                    'id_rubrique' => 'id_rubrique'
163
+                ),
164
+                'rechercher_champs' => array(
165
+                    'surtitre' => 5,
166
+                    'titre' => 8,
167
+                    'soustitre' => 5,
168
+                    'chapo' => 3,
169
+                    'texte' => 1,
170
+                    'ps' => 1,
171
+                    'nom_site' => 1,
172
+                    'url_site' => 1,
173
+                    'descriptif' => 4
174
+                ),
175
+                'rechercher_jointures' => array(
176
+                    'auteur' => array('nom' => 10),
177
+                ),
178
+                'statut' => array(
179
+                    array(
180
+                        'champ' => 'statut',
181
+                        'publie' => 'publie',
182
+                        'previsu' => 'publie,prop,prepa/auteur',
183
+                        'post_date' => 'date',
184
+                        'exception' => array('statut', 'tout')
185
+                    )
186
+                ),
187
+                'statut_titres' => array(
188
+                    'prepa' => 'info_article_redaction',
189
+                    'prop' => 'info_article_propose',
190
+                    'publie' => 'info_article_publie',
191
+                    'refuse' => 'info_article_refuse',
192
+                    'poubelle' => 'info_article_supprime'
193
+                ),
194
+                'statut_textes_instituer' => array(
195
+                    'prepa' => 'texte_statut_en_cours_redaction',
196
+                    'prop' => 'texte_statut_propose_evaluation',
197
+                    'publie' => 'texte_statut_publie',
198
+                    'refuse' => 'texte_statut_refuse',
199
+                    'poubelle' => 'texte_statut_poubelle',
200
+                ),
201
+                'texte_changer_statut' => 'texte_article_statut',
202
+                'aide_changer_statut' => 'artstatut',
203
+                'tables_jointures' => array(
204
+                    'profondeur' => 'rubriques',
205
+                    #'id_auteur' => 'auteurs_liens' // declaration generique plus bas
206
+                ),
207
+            ),
208
+            'spip_auteurs' => array(
209
+                'page' => 'auteur',
210
+                'texte_retour' => 'icone_retour',
211
+                'texte_ajouter' => 'titre_ajouter_un_auteur',
212
+                'texte_modifier' => 'admin_modifier_auteur',
213
+                'texte_objets' => 'icone_auteurs',
214
+                'texte_objet' => 'public:auteur',
215
+                'info_aucun_objet' => 'info_aucun_auteur',
216
+                'info_1_objet' => 'info_1_auteur',
217
+                'info_nb_objets' => 'info_nb_auteurs',
218
+                'texte_logo_objet' => 'logo_auteur',
219
+                'texte_creer_associer' => 'creer_et_associer_un_auteur',
220
+                'titre' => "nom AS titre, '' AS lang",
221
+                'date' => 'date',
222
+                'principale' => 'oui',
223
+                'champs_editables' => array('nom', 'email', 'bio', 'nom_site', 'url_site', 'imessage', 'pgp'),
224
+                'champs_versionnes' => array('nom', 'bio', 'email', 'nom_site', 'url_site', 'login'),
225
+                'field' => array(
226
+                    'id_auteur' => 'bigint(21) NOT NULL',
227
+                    'nom' => "text DEFAULT '' NOT NULL",
228
+                    'bio' => "text DEFAULT '' NOT NULL",
229
+                    'email' => "tinytext DEFAULT '' NOT NULL",
230
+                    'nom_site' => "tinytext DEFAULT '' NOT NULL",
231
+                    'url_site' => "text DEFAULT '' NOT NULL",
232
+                    'login' => 'VARCHAR(255) BINARY',
233
+                    'pass' => "tinytext DEFAULT '' NOT NULL",
234
+                    'low_sec' => "tinytext DEFAULT '' NOT NULL",
235
+                    'statut' => "varchar(255)  DEFAULT '0' NOT NULL",
236
+                    'webmestre' => "varchar(3)  DEFAULT 'non' NOT NULL",
237
+                    'maj' => 'TIMESTAMP',
238
+                    'pgp' => "TEXT DEFAULT '' NOT NULL",
239
+                    'htpass' => "tinytext DEFAULT '' NOT NULL",
240
+                    'en_ligne' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
241
+                    'alea_actuel' => 'tinytext',
242
+                    'alea_futur' => 'tinytext',
243
+                    'prefs' => 'text',
244
+                    'cookie_oubli' => 'tinytext',
245
+                    'source' => "VARCHAR(10) DEFAULT 'spip' NOT NULL",
246
+                    'lang' => "VARCHAR(10) DEFAULT '' NOT NULL",
247
+                    'imessage' => "VARCHAR(3) DEFAULT '' NOT NULL"
248
+                ),
249
+                'key' => array(
250
+                    'PRIMARY KEY' => 'id_auteur',
251
+                    'KEY login' => 'login',
252
+                    'KEY statut' => 'statut',
253
+                    'KEY en_ligne' => 'en_ligne',
254
+                ),
255
+                'join' => array(
256
+                    'id_auteur' => 'id_auteur',
257
+                    'login' => 'login'
258
+                ),
259
+                'rechercher_champs' => array(
260
+                    'nom' => 5,
261
+                    'bio' => 1,
262
+                    'email' => 1,
263
+                    'nom_site' => 1,
264
+                    'url_site' => 1,
265
+                    'login' => 1
266
+                ),
267
+                // 2 conditions pour les auteurs : statut!=poubelle,
268
+                // et avoir des articles publies
269
+                'statut' => array(
270
+                    array(
271
+                        'champ' => 'statut',
272
+                        'publie' => '!5poubelle',
273
+                        'previsu' => '!5poubelle',
274
+                        'exception' => 'statut'
275
+                    ),
276
+                    array(
277
+                        'champ' => array(
278
+                            array('spip_auteurs_liens', 'id_auteur'),
279
+                            array(
280
+                                'spip_articles',
281
+                                array('id_objet', 'id_article', 'objet', 'article')
282
+                            ),
283
+                            'statut'
284
+                        ),
285
+                        'publie' => 'publie',
286
+                        'previsu' => '!',
287
+                        'post_date' => 'date',
288
+                        'exception' => array('statut', 'lien', 'tout')
289
+                    ),
290
+                ),
291
+                'statut_images' => array(
292
+                    'auteur-6forum-16.png',
293
+                    '0minirezo' => 'auteur-0minirezo-16.png',
294
+                    '1comite' => 'auteur-1comite-16.png',
295
+                    '6forum' => 'auteur-6forum-16.png',
296
+                    '5poubelle' => 'auteur-5poubelle-16.png',
297
+                    'nouveau' => ''
298
+                ),
299
+                'statut_titres' => array(
300
+                    'titre_image_visiteur',
301
+                    '0minirezo' => 'titre_image_administrateur',
302
+                    '1comite' => 'titre_image_redacteur_02',
303
+                    '6forum' => 'titre_image_visiteur',
304
+                    '5poubelle' => 'titre_image_auteur_supprime',
305
+                ),
306
+                'tables_jointures' => array(#'auteurs_liens' // declaration generique plus bas
307
+                ),
308
+            ),
309
+            'spip_rubriques' => array(
310
+                'page' => 'rubrique',
311
+                'url_voir' => 'rubrique',
312
+                'url_edit' => 'rubrique_edit',
313
+                'texte_retour' => 'icone_retour',
314
+                'texte_objets' => 'public:rubriques',
315
+                'texte_objet' => 'public:rubrique',
316
+                'texte_modifier' => 'icone_modifier_rubrique',
317
+                'texte_creer' => 'icone_creer_rubrique',
318
+                'texte_ajouter' => 'titre_ajouter_une_rubrique',
319
+                'texte_creer_associer' => 'creer_et_associer_une_rubrique',
320
+                'info_aucun_objet' => 'info_aucun_rubrique',
321
+                'info_1_objet' => 'info_1_rubrique',
322
+                'info_nb_objets' => 'info_nb_rubriques',
323
+                'texte_logo_objet' => 'logo_rubrique',
324
+                'texte_langue_objet' => 'titre_langue_rubrique',
325
+                'texte_definir_comme_traduction_objet' => 'texte_definir_comme_traduction_rubrique',
326
+                'titre' => 'titre, lang',
327
+                'date' => 'date',
328
+                'principale' => 'oui',
329
+                'introduction_longueur' => '600',
330
+                'champs_editables' => array('titre', 'texte', 'descriptif', 'extra'),
331
+                'champs_versionnes' => array('titre', 'descriptif', 'texte'),
332
+                'field' => array(
333
+                    'id_rubrique' => 'bigint(21) NOT NULL',
334
+                    'id_parent' => "bigint(21) DEFAULT '0' NOT NULL",
335
+                    'titre' => "text DEFAULT '' NOT NULL",
336
+                    'descriptif' => "text DEFAULT '' NOT NULL",
337
+                    'texte' => "longtext DEFAULT '' NOT NULL",
338
+                    'id_secteur' => "bigint(21) DEFAULT '0' NOT NULL",
339
+                    'maj' => 'TIMESTAMP',
340
+                    'statut' => "varchar(10) DEFAULT '0' NOT NULL",
341
+                    'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
342
+                    'lang' => "VARCHAR(10) DEFAULT '' NOT NULL",
343
+                    'langue_choisie' => "VARCHAR(3) DEFAULT 'non'",
344
+                    'statut_tmp' => "varchar(10) DEFAULT '0' NOT NULL",
345
+                    'date_tmp' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
346
+                    'profondeur' => "smallint(5) DEFAULT '0' NOT NULL"
347
+                ),
348
+                'key' => array(
349
+                    'PRIMARY KEY' => 'id_rubrique',
350
+                    'KEY lang' => 'lang',
351
+                    'KEY id_parent' => 'id_parent',
352
+                ),
353
+                'rechercher_champs' => array(
354
+                    'titre' => 8,
355
+                    'descriptif' => 5,
356
+                    'texte' => 1
357
+                ),
358
+                'statut' => array(
359
+                    array(
360
+                        'champ' => 'statut',
361
+                        'publie' => 'publie',
362
+                        'previsu' => '!',
363
+                        'exception' => array('statut', 'tout')
364
+                    ),
365
+                ),
366
+                'tables_jointures' => array(#'id_auteur' => 'auteurs_liens' // declaration generique plus bas
367
+                ),
368
+            ),
369
+            // toutes les tables ont le droit a une jointure sur les auteurs
370
+            array('tables_jointures' => array('id_auteur' => 'auteurs_liens'))
371
+        );
372
+
373
+        // avant d'appeller les pipeline qui peuvent generer une reentrance a l'install
374
+        // initialiser la signature
375
+        $md5 = md5(serialize($infos_tables));
376
+
377
+        $GLOBALS['tables_principales'] = pipeline('declarer_tables_principales', $GLOBALS['tables_principales']);
378
+        $GLOBALS['tables_auxiliaires'] = pipeline('declarer_tables_auxiliaires', $GLOBALS['tables_auxiliaires']);
379
+        $infos_tables = pipeline('declarer_tables_objets_sql', $infos_tables);
380
+
381
+        // completer les informations manquantes ou implicites
382
+        $all = array();
383
+        foreach (array_keys($infos_tables) as $t) {
384
+            // les cles numeriques servent a declarer
385
+            // les proprietes applicables a tous les objets
386
+            // on les mets de cote
387
+            if (is_numeric($t)) {
388
+                $all = array_merge_recursive($all, $infos_tables[$t]);
389
+                unset($infos_tables[$t]);
390
+            } else {
391
+                $infos_tables[$t] = renseigner_table_objet_sql($t, $infos_tables[$t]);
392
+            }
393
+        }
394
+
395
+        // repercuter les proprietes generales communes a tous les objets
396
+        foreach (array_keys($infos_tables) as $t) {
397
+            foreach ($all as $i => $v) {
398
+                if (in_array($i, array('tables_jointures', 'champs_versionnes'))) {
399
+                    $add = $all[$i];
400
+                    // eviter les doublons de declaration de table jointure (ex des mots sur auteurs)
401
+                    // pour les declarations generiques avec cles numeriques
402
+                    if ($i == 'tables_jointures' and isset($infos_tables[$t][$i]) and count($infos_tables[$t][$i])) {
403
+                        $doublons = array_intersect($infos_tables[$t][$i], $add);
404
+                        foreach ($doublons as $d) {
405
+                            if (is_numeric(array_search($d, $infos_tables[$t][$i]))
406
+                                and is_numeric($k = array_search($d, $add))
407
+                            ) {
408
+                                unset($add[$k]);
409
+                            }
410
+                        }
411
+                    }
412
+                    $infos_tables[$t][$i] = array_merge(isset($infos_tables[$t][$i]) ? $infos_tables[$t][$i] : array(), $add);
413
+                } else {
414
+                    $infos_tables[$t][$i] = array_merge_recursive(
415
+                        isset($infos_tables[$t][$i]) ? $infos_tables[$t][$i] : array(),
416
+                        $all[$i]
417
+                    );
418
+                }
419
+            }
420
+        }
421
+
422
+        // completer les tables principales et auxiliaires
423
+        // avec celles declarees uniquement dans declarer_table_objets_sql
424
+        // pour assurer la compat en transition
425
+        foreach ($infos_tables as $table => $infos) {
426
+            $principale_ou_auxiliaire = ($infos['principale'] ? 'tables_principales' : 'tables_auxiliaires');
427
+            // memoriser des champs eventuels declares par des plugins dans le pipeline tables_xxx
428
+            // qui a ete appelle avant
429
+            $mem = (isset($GLOBALS[$principale_ou_auxiliaire][$table]) ? $GLOBALS[$principale_ou_auxiliaire][$table] : array());
430
+            // l'ajouter au tableau
431
+            $GLOBALS[$principale_ou_auxiliaire][$table] = array();
432
+            if (isset($infos['field']) and isset($infos['key'])) {
433
+                foreach (array('field', 'key', 'join') as $k) {
434
+                    if (isset($infos_tables[$table][$k])) {
435
+                        $GLOBALS[$principale_ou_auxiliaire][$table][$k] = &$infos_tables[$table][$k];
436
+                    }
437
+                }
438
+            } else {
439
+                // ici on ne renvoie que les declarations, donc RIEN
440
+                // pour avoir la vrai description en base, il faut passer par trouver_table
441
+                $GLOBALS[$principale_ou_auxiliaire][$table] = array();
442
+            }
443
+            if (count($mem)) {
444
+                foreach (array_keys($mem) as $k) {
445
+                    if (isset($GLOBALS[$principale_ou_auxiliaire][$table][$k])) {
446
+                        $GLOBALS[$principale_ou_auxiliaire][$table][$k] = array_merge(
447
+                            $GLOBALS[$principale_ou_auxiliaire][$table][$k],
448
+                            $mem[$k]
449
+                        );
450
+                    } else {
451
+                        $GLOBALS[$principale_ou_auxiliaire][$table][$k] = $mem[$k];
452
+                    }
453
+                }
454
+            }
455
+        }
456
+
457
+        // recuperer les interfaces (table_titre, table_date)
458
+        // on ne le fait que dans un second temps pour que table_objet soit fonctionnel
459
+        // dans le pipeline de declarer_tables_interfaces
460
+        include_spip('public/interfaces');
461
+        foreach (array_keys($infos_tables) as $t) {
462
+            $infos_tables[$t] = renseigner_table_objet_interfaces($t, $infos_tables[$t]);
463
+        }
464
+
465
+        $deja_la = false;
466
+        // signature
467
+        $md5 = md5(serialize($infos_tables));
468
+    }
469
+    if ($table_sql === '::md5') {
470
+        return $md5;
471
+    }
472
+    if ($table_sql and !isset($infos_tables[$table_sql])) {
473
+        #$desc = renseigner_table_objet_sql($table_sql,$desc);
474
+        $desc = renseigner_table_objet_interfaces($table_sql, $desc);
475
+
476
+        return $desc;
477
+    }
478
+    if ($table_sql) {
479
+        return isset($infos_tables[$table_sql]) ? $infos_tables[$table_sql] : array();
480
+    }
481
+
482
+    return $infos_tables;
483 483
 }
484 484
 
485 485
 
@@ -494,27 +494,27 @@  discard block
 block discarded – undo
494 494
  **/
495 495
 function base_serial(&$tables_principales) {
496 496
 
497
-	$spip_jobs = array(
498
-		'id_job' => 'bigint(21) NOT NULL',
499
-		'descriptif' => "text DEFAULT '' NOT NULL",
500
-		'fonction' => 'varchar(255) NOT NULL', //nom de la fonction
501
-		'args' => "longblob DEFAULT '' NOT NULL", // arguments
502
-		'md5args' => "char(32) NOT NULL default ''", // signature des arguments
503
-		'inclure' => 'varchar(255) NOT NULL', // fichier a inclure ou path/ pour charger_fonction
504
-		'priorite' => 'smallint(6) NOT NULL default 0',
505
-		'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // date au plus tot
506
-		'status' => 'tinyint NOT NULL default 1',
507
-	);
508
-
509
-	$spip_jobs_key = array(
510
-		'PRIMARY KEY' => 'id_job',
511
-		'KEY date' => 'date',
512
-		'KEY status' => 'status',
513
-	);
514
-
515
-	/// Attention: mes_fonctions peut avoir deja defini cette variable
516
-	/// il faut donc rajouter, mais pas reinitialiser
517
-	$tables_principales['spip_jobs'] = array('field' => &$spip_jobs, 'key' => &$spip_jobs_key);
497
+    $spip_jobs = array(
498
+        'id_job' => 'bigint(21) NOT NULL',
499
+        'descriptif' => "text DEFAULT '' NOT NULL",
500
+        'fonction' => 'varchar(255) NOT NULL', //nom de la fonction
501
+        'args' => "longblob DEFAULT '' NOT NULL", // arguments
502
+        'md5args' => "char(32) NOT NULL default ''", // signature des arguments
503
+        'inclure' => 'varchar(255) NOT NULL', // fichier a inclure ou path/ pour charger_fonction
504
+        'priorite' => 'smallint(6) NOT NULL default 0',
505
+        'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // date au plus tot
506
+        'status' => 'tinyint NOT NULL default 1',
507
+    );
508
+
509
+    $spip_jobs_key = array(
510
+        'PRIMARY KEY' => 'id_job',
511
+        'KEY date' => 'date',
512
+        'KEY status' => 'status',
513
+    );
514
+
515
+    /// Attention: mes_fonctions peut avoir deja defini cette variable
516
+    /// il faut donc rajouter, mais pas reinitialiser
517
+    $tables_principales['spip_jobs'] = array('field' => &$spip_jobs, 'key' => &$spip_jobs_key);
518 518
 }
519 519
 
520 520
 
@@ -526,71 +526,71 @@  discard block
 block discarded – undo
526 526
  * @return void
527 527
  **/
528 528
 function base_auxiliaires(&$tables_auxiliaires) {
529
-	$spip_resultats = array(
530
-		'recherche' => "char(16) DEFAULT '' NOT NULL",
531
-		'id' => 'INT UNSIGNED NOT NULL',
532
-		'points' => "INT UNSIGNED DEFAULT '0' NOT NULL",
533
-		'table_objet' => "varchar(30) DEFAULT '' NOT NULL",
534
-		'serveur' => "char(16) DEFAULT '' NOT NULL", // hash md5 partiel du serveur de base ('' pour le serveur principal)
535
-		'maj' => 'TIMESTAMP'
536
-	);
537
-
538
-	$spip_resultats_key = array(// pas de cle ni index, ca fait des insertions plus rapides et les requetes jointes utilisees en recheche ne sont pas plus lentes ...
539
-	);
540
-
541
-	$spip_auteurs_liens = array(
542
-		'id_auteur' => "bigint(21) DEFAULT '0' NOT NULL",
543
-		'id_objet' => "bigint(21) DEFAULT '0' NOT NULL",
544
-		'objet' => "VARCHAR (25) DEFAULT '' NOT NULL",
545
-		'vu' => "VARCHAR(6) DEFAULT 'non' NOT NULL"
546
-	);
547
-
548
-	$spip_auteurs_liens_key = array(
549
-		'PRIMARY KEY' => 'id_auteur,id_objet,objet',
550
-		'KEY id_auteur' => 'id_auteur',
551
-		'KEY id_objet' => 'id_objet',
552
-		'KEY objet' => 'objet',
553
-	);
554
-
555
-	$spip_meta = array(
556
-		'nom' => 'VARCHAR (255) NOT NULL',
557
-		'valeur' => "text DEFAULT ''",
558
-		'impt' => "ENUM('non', 'oui') DEFAULT 'oui' NOT NULL",
559
-		'maj' => 'TIMESTAMP'
560
-	);
561
-
562
-	$spip_meta_key = array(
563
-		'PRIMARY KEY' => 'nom'
564
-	);
565
-
566
-	$spip_jobs_liens = array(
567
-		'id_job' => "bigint(21) DEFAULT '0' NOT NULL",
568
-		'id_objet' => "bigint(21) DEFAULT '0' NOT NULL",
569
-		'objet' => "VARCHAR (25) DEFAULT '' NOT NULL",
570
-	);
571
-
572
-	$spip_jobs_liens_key = array(
573
-		'PRIMARY KEY' => 'id_job,id_objet,objet',
574
-		'KEY id_job' => 'id_job'
575
-	);
576
-
577
-	$tables_auxiliaires['spip_auteurs_liens'] = array(
578
-		'field' => &$spip_auteurs_liens,
579
-		'key' => &$spip_auteurs_liens_key
580
-	);
581
-
582
-	$tables_auxiliaires['spip_meta'] = array(
583
-		'field' => &$spip_meta,
584
-		'key' => &$spip_meta_key
585
-	);
586
-	$tables_auxiliaires['spip_resultats'] = array(
587
-		'field' => &$spip_resultats,
588
-		'key' => &$spip_resultats_key
589
-	);
590
-	$tables_auxiliaires['spip_jobs_liens'] = array(
591
-		'field' => &$spip_jobs_liens,
592
-		'key' => &$spip_jobs_liens_key
593
-	);
529
+    $spip_resultats = array(
530
+        'recherche' => "char(16) DEFAULT '' NOT NULL",
531
+        'id' => 'INT UNSIGNED NOT NULL',
532
+        'points' => "INT UNSIGNED DEFAULT '0' NOT NULL",
533
+        'table_objet' => "varchar(30) DEFAULT '' NOT NULL",
534
+        'serveur' => "char(16) DEFAULT '' NOT NULL", // hash md5 partiel du serveur de base ('' pour le serveur principal)
535
+        'maj' => 'TIMESTAMP'
536
+    );
537
+
538
+    $spip_resultats_key = array(// pas de cle ni index, ca fait des insertions plus rapides et les requetes jointes utilisees en recheche ne sont pas plus lentes ...
539
+    );
540
+
541
+    $spip_auteurs_liens = array(
542
+        'id_auteur' => "bigint(21) DEFAULT '0' NOT NULL",
543
+        'id_objet' => "bigint(21) DEFAULT '0' NOT NULL",
544
+        'objet' => "VARCHAR (25) DEFAULT '' NOT NULL",
545
+        'vu' => "VARCHAR(6) DEFAULT 'non' NOT NULL"
546
+    );
547
+
548
+    $spip_auteurs_liens_key = array(
549
+        'PRIMARY KEY' => 'id_auteur,id_objet,objet',
550
+        'KEY id_auteur' => 'id_auteur',
551
+        'KEY id_objet' => 'id_objet',
552
+        'KEY objet' => 'objet',
553
+    );
554
+
555
+    $spip_meta = array(
556
+        'nom' => 'VARCHAR (255) NOT NULL',
557
+        'valeur' => "text DEFAULT ''",
558
+        'impt' => "ENUM('non', 'oui') DEFAULT 'oui' NOT NULL",
559
+        'maj' => 'TIMESTAMP'
560
+    );
561
+
562
+    $spip_meta_key = array(
563
+        'PRIMARY KEY' => 'nom'
564
+    );
565
+
566
+    $spip_jobs_liens = array(
567
+        'id_job' => "bigint(21) DEFAULT '0' NOT NULL",
568
+        'id_objet' => "bigint(21) DEFAULT '0' NOT NULL",
569
+        'objet' => "VARCHAR (25) DEFAULT '' NOT NULL",
570
+    );
571
+
572
+    $spip_jobs_liens_key = array(
573
+        'PRIMARY KEY' => 'id_job,id_objet,objet',
574
+        'KEY id_job' => 'id_job'
575
+    );
576
+
577
+    $tables_auxiliaires['spip_auteurs_liens'] = array(
578
+        'field' => &$spip_auteurs_liens,
579
+        'key' => &$spip_auteurs_liens_key
580
+    );
581
+
582
+    $tables_auxiliaires['spip_meta'] = array(
583
+        'field' => &$spip_meta,
584
+        'key' => &$spip_meta_key
585
+    );
586
+    $tables_auxiliaires['spip_resultats'] = array(
587
+        'field' => &$spip_resultats,
588
+        'key' => &$spip_resultats_key
589
+    );
590
+    $tables_auxiliaires['spip_jobs_liens'] = array(
591
+        'field' => &$spip_jobs_liens,
592
+        'key' => &$spip_jobs_liens_key
593
+    );
594 594
 
595 595
 }
596 596
 
@@ -648,129 +648,129 @@  discard block
 block discarded – undo
648 648
  * @return array
649 649
  */
650 650
 function renseigner_table_objet_sql($table_sql, &$infos) {
651
-	if (!isset($infos['type'])) {
652
-		// si on arrive de base/trouver_table, on a la cle primaire :
653
-		// s'en servir pour extrapoler le type
654
-		if (isset($infos['key']['PRIMARY KEY'])) {
655
-			$primary = $infos['key']['PRIMARY KEY'];
656
-			$primary = explode(',', $primary);
657
-			$primary = reset($primary);
658
-			$infos['type'] = preg_replace(',^spip_|^id_|s$,', '', $primary);
659
-		} else {
660
-			$infos['type'] = preg_replace(',^spip_|s$,', '', $table_sql);
661
-		}
662
-	}
663
-	if (!isset($infos['type_surnoms'])) {
664
-		$infos['type_surnoms'] = array();
665
-	}
666
-
667
-	if (!isset($infos['table_objet'])) {
668
-		$infos['table_objet'] = preg_replace(',^spip_,', '', $table_sql);
669
-	}
670
-	if (!isset($infos['table_objet_surnoms'])) {
671
-		$infos['table_objet_surnoms'] = array();
672
-	}
673
-
674
-	if (!isset($infos['principale'])) {
675
-		$infos['principale'] = (isset($GLOBALS['tables_principales'][$table_sql]) ? 'oui' : false);
676
-	}
677
-
678
-	// normaliser pour pouvoir tester en php $infos['principale']?
679
-	// et dans une boucle {principale=oui}
680
-	$infos['principale'] = (($infos['principale'] and $infos['principale'] != 'non') ? 'oui' : false);
681
-
682
-	// declarer et normaliser pour pouvoir tester en php $infos['editable']?
683
-	// et dans une boucle {editable=oui}
684
-	if (!isset($infos['editable'])) {
685
-		$infos['editable'] = 'oui';
686
-	}
687
-
688
-	$infos['editable'] = (($infos['editable'] and $infos['editable'] != 'non') ? 'oui' : false);
689
-
690
-	// les urls publiques sont par defaut page=type pour les tables principales, et rien pour les autres
691
-	// seules les exceptions sont donc a declarer
692
-	if (!isset($infos['page'])) {
693
-		$infos['page'] = ($infos['principale'] ? $infos['type'] : '');
694
-	}
695
-
696
-	if (!isset($infos['url_voir'])) {
697
-		$infos['url_voir'] = $infos['type'];
698
-	}
699
-	if (!isset($infos['url_edit'])) {
700
-		$infos['url_edit'] = $infos['url_voir'] . ($infos['editable'] ? '_edit' : '');
701
-	}
702
-	if (!isset($infos['icone_objet'])) {
703
-		$infos['icone_objet'] = $infos['type'];
704
-	}
705
-
706
-	// chaines de langue
707
-	// par defaut : objet:icone_xxx_objet
708
-	if (!isset($infos['texte_retour'])) {
709
-		$infos['texte_retour'] = 'icone_retour';
710
-	}
711
-	if (!isset($infos['texte_modifier'])) {
712
-		$infos['texte_modifier'] = $infos['type'] . ':' . 'icone_modifier_' . $infos['type'];
713
-	}
714
-	if (!isset($infos['texte_creer'])) {
715
-		$infos['texte_creer'] = $infos['type'] . ':' . 'icone_creer_' . $infos['type'];
716
-	}
717
-	if (!isset($infos['texte_creer_associer'])) {
718
-		$infos['texte_creer_associer'] = $infos['type'] . ':' . 'texte_creer_associer_' . $infos['type'];
719
-	}
720
-	if (!isset($infos['texte_ajouter'])) {
721
-		// Ajouter un X
722
-		$infos['texte_ajouter'] = $infos['type'] . ':' . 'texte_ajouter_' . $infos['type'];
723
-	}
724
-	if (!isset($infos['texte_objets'])) {
725
-		$infos['texte_objets'] = $infos['type'] . ':' . 'titre_' . $infos['table_objet'];
726
-	}
727
-	if (!isset($infos['texte_objet'])) {
728
-		$infos['texte_objet'] = $infos['type'] . ':' . 'titre_' . $infos['type'];
729
-	}
730
-	if (!isset($infos['texte_logo_objet'])) {
731
-		// objet:titre_logo_objet "Logo de ce X"
732
-		$infos['texte_logo_objet'] = $infos['type'] . ':' . 'titre_logo_' . $infos['type'];
733
-	}
734
-	if (!isset($infos['texte_langue_objet'])) {
735
-		// objet:texte_langue_objet "Langue de ce X"
736
-		$infos['texte_langue_objet'] = $infos['type'] . ':' . 'titre_langue_' . $infos['type'];
737
-	}
738
-	if (!isset($infos['texte_definir_comme_traduction_objet'])) {
739
-		// "Ce X est une traduction du X numéro :"
740
-		$infos['texte_definir_comme_traduction_objet'] = $infos['type'] . ':' . 'texte_definir_comme_traduction_' . $infos['type'];
741
-	}
742
-
743
-	// objet:info_aucun_objet
744
-	if (!isset($infos['info_aucun_objet'])) {
745
-		$infos['info_aucun_objet'] = $infos['type'] . ':' . 'info_aucun_' . $infos['type'];
746
-	}
747
-	// objet:info_1_objet
748
-	if (!isset($infos['info_1_objet'])) {
749
-		$infos['info_1_objet'] = $infos['type'] . ':' . 'info_1_' . $infos['type'];
750
-	}
751
-	// objet:info_nb_objets
752
-	if (!isset($infos['info_nb_objets'])) {
753
-		$infos['info_nb_objets'] = $infos['type'] . ':' . 'info_nb_' . $infos['table_objet'];
754
-	}
755
-
756
-	if (!isset($infos['champs_editables'])) {
757
-		$infos['champs_editables'] = array();
758
-	}
759
-	if (!isset($infos['champs_versionnes'])) {
760
-		$infos['champs_versionnes'] = array();
761
-	}
762
-	if (!isset($infos['rechercher_champs'])) {
763
-		$infos['rechercher_champs'] = array();
764
-	}
765
-	if (!isset($infos['rechercher_jointures'])) {
766
-		$infos['rechercher_jointures'] = array();
767
-	}
768
-
769
-	if (!isset($infos['modeles'])) {
770
-		$infos['modeles'] = array($infos['type']);
771
-	}
772
-
773
-	return $infos;
651
+    if (!isset($infos['type'])) {
652
+        // si on arrive de base/trouver_table, on a la cle primaire :
653
+        // s'en servir pour extrapoler le type
654
+        if (isset($infos['key']['PRIMARY KEY'])) {
655
+            $primary = $infos['key']['PRIMARY KEY'];
656
+            $primary = explode(',', $primary);
657
+            $primary = reset($primary);
658
+            $infos['type'] = preg_replace(',^spip_|^id_|s$,', '', $primary);
659
+        } else {
660
+            $infos['type'] = preg_replace(',^spip_|s$,', '', $table_sql);
661
+        }
662
+    }
663
+    if (!isset($infos['type_surnoms'])) {
664
+        $infos['type_surnoms'] = array();
665
+    }
666
+
667
+    if (!isset($infos['table_objet'])) {
668
+        $infos['table_objet'] = preg_replace(',^spip_,', '', $table_sql);
669
+    }
670
+    if (!isset($infos['table_objet_surnoms'])) {
671
+        $infos['table_objet_surnoms'] = array();
672
+    }
673
+
674
+    if (!isset($infos['principale'])) {
675
+        $infos['principale'] = (isset($GLOBALS['tables_principales'][$table_sql]) ? 'oui' : false);
676
+    }
677
+
678
+    // normaliser pour pouvoir tester en php $infos['principale']?
679
+    // et dans une boucle {principale=oui}
680
+    $infos['principale'] = (($infos['principale'] and $infos['principale'] != 'non') ? 'oui' : false);
681
+
682
+    // declarer et normaliser pour pouvoir tester en php $infos['editable']?
683
+    // et dans une boucle {editable=oui}
684
+    if (!isset($infos['editable'])) {
685
+        $infos['editable'] = 'oui';
686
+    }
687
+
688
+    $infos['editable'] = (($infos['editable'] and $infos['editable'] != 'non') ? 'oui' : false);
689
+
690
+    // les urls publiques sont par defaut page=type pour les tables principales, et rien pour les autres
691
+    // seules les exceptions sont donc a declarer
692
+    if (!isset($infos['page'])) {
693
+        $infos['page'] = ($infos['principale'] ? $infos['type'] : '');
694
+    }
695
+
696
+    if (!isset($infos['url_voir'])) {
697
+        $infos['url_voir'] = $infos['type'];
698
+    }
699
+    if (!isset($infos['url_edit'])) {
700
+        $infos['url_edit'] = $infos['url_voir'] . ($infos['editable'] ? '_edit' : '');
701
+    }
702
+    if (!isset($infos['icone_objet'])) {
703
+        $infos['icone_objet'] = $infos['type'];
704
+    }
705
+
706
+    // chaines de langue
707
+    // par defaut : objet:icone_xxx_objet
708
+    if (!isset($infos['texte_retour'])) {
709
+        $infos['texte_retour'] = 'icone_retour';
710
+    }
711
+    if (!isset($infos['texte_modifier'])) {
712
+        $infos['texte_modifier'] = $infos['type'] . ':' . 'icone_modifier_' . $infos['type'];
713
+    }
714
+    if (!isset($infos['texte_creer'])) {
715
+        $infos['texte_creer'] = $infos['type'] . ':' . 'icone_creer_' . $infos['type'];
716
+    }
717
+    if (!isset($infos['texte_creer_associer'])) {
718
+        $infos['texte_creer_associer'] = $infos['type'] . ':' . 'texte_creer_associer_' . $infos['type'];
719
+    }
720
+    if (!isset($infos['texte_ajouter'])) {
721
+        // Ajouter un X
722
+        $infos['texte_ajouter'] = $infos['type'] . ':' . 'texte_ajouter_' . $infos['type'];
723
+    }
724
+    if (!isset($infos['texte_objets'])) {
725
+        $infos['texte_objets'] = $infos['type'] . ':' . 'titre_' . $infos['table_objet'];
726
+    }
727
+    if (!isset($infos['texte_objet'])) {
728
+        $infos['texte_objet'] = $infos['type'] . ':' . 'titre_' . $infos['type'];
729
+    }
730
+    if (!isset($infos['texte_logo_objet'])) {
731
+        // objet:titre_logo_objet "Logo de ce X"
732
+        $infos['texte_logo_objet'] = $infos['type'] . ':' . 'titre_logo_' . $infos['type'];
733
+    }
734
+    if (!isset($infos['texte_langue_objet'])) {
735
+        // objet:texte_langue_objet "Langue de ce X"
736
+        $infos['texte_langue_objet'] = $infos['type'] . ':' . 'titre_langue_' . $infos['type'];
737
+    }
738
+    if (!isset($infos['texte_definir_comme_traduction_objet'])) {
739
+        // "Ce X est une traduction du X numéro :"
740
+        $infos['texte_definir_comme_traduction_objet'] = $infos['type'] . ':' . 'texte_definir_comme_traduction_' . $infos['type'];
741
+    }
742
+
743
+    // objet:info_aucun_objet
744
+    if (!isset($infos['info_aucun_objet'])) {
745
+        $infos['info_aucun_objet'] = $infos['type'] . ':' . 'info_aucun_' . $infos['type'];
746
+    }
747
+    // objet:info_1_objet
748
+    if (!isset($infos['info_1_objet'])) {
749
+        $infos['info_1_objet'] = $infos['type'] . ':' . 'info_1_' . $infos['type'];
750
+    }
751
+    // objet:info_nb_objets
752
+    if (!isset($infos['info_nb_objets'])) {
753
+        $infos['info_nb_objets'] = $infos['type'] . ':' . 'info_nb_' . $infos['table_objet'];
754
+    }
755
+
756
+    if (!isset($infos['champs_editables'])) {
757
+        $infos['champs_editables'] = array();
758
+    }
759
+    if (!isset($infos['champs_versionnes'])) {
760
+        $infos['champs_versionnes'] = array();
761
+    }
762
+    if (!isset($infos['rechercher_champs'])) {
763
+        $infos['rechercher_champs'] = array();
764
+    }
765
+    if (!isset($infos['rechercher_jointures'])) {
766
+        $infos['rechercher_jointures'] = array();
767
+    }
768
+
769
+    if (!isset($infos['modeles'])) {
770
+        $infos['modeles'] = array($infos['type']);
771
+    }
772
+
773
+    return $infos;
774 774
 }
775 775
 
776 776
 /**
@@ -787,32 +787,32 @@  discard block
 block discarded – undo
787 787
  * @return array
788 788
  */
789 789
 function renseigner_table_objet_interfaces($table_sql, &$infos) {
790
-	if (!isset($infos['titre'])) {
791
-		if (isset($infos['table_objet']) and isset($GLOBALS['table_titre'][$infos['table_objet']])) {
792
-			$infos['titre'] = $GLOBALS['table_titre'][$infos['table_objet']];
793
-		} else {
794
-			$infos['titre'] = ((isset($infos['field']['titre'])) ? 'titre,' : "'' as titre,");
795
-			$infos['titre'] .= ((isset($infos['field']['lang'])) ? 'lang' : "'' as lang");
796
-		}
797
-	}
798
-	if (!isset($infos['date'])) {
799
-		if (isset($infos['table_objet']) and isset($GLOBALS['table_date'][$infos['table_objet']])) {
800
-			$infos['date'] = $GLOBALS['table_date'][$infos['table_objet']];
801
-		} else {
802
-			$infos['date'] = ((isset($infos['field']['date'])) ? 'date' : '');
803
-		}
804
-	}
805
-	if (!isset($infos['statut'])) {
806
-		$infos['statut'] = isset($GLOBALS['table_statut'][$table_sql]) ? $GLOBALS['table_statut'][$table_sql] : '';
807
-	}
808
-	if (!isset($infos['tables_jointures'])) {
809
-		$infos['tables_jointures'] = array();
810
-	}
811
-	if (isset($GLOBALS['tables_jointures'][$table_sql])) {
812
-		$infos['tables_jointures'] = array_merge($infos['tables_jointures'], $GLOBALS['tables_jointures'][$table_sql]);
813
-	}
814
-
815
-	return $infos;
790
+    if (!isset($infos['titre'])) {
791
+        if (isset($infos['table_objet']) and isset($GLOBALS['table_titre'][$infos['table_objet']])) {
792
+            $infos['titre'] = $GLOBALS['table_titre'][$infos['table_objet']];
793
+        } else {
794
+            $infos['titre'] = ((isset($infos['field']['titre'])) ? 'titre,' : "'' as titre,");
795
+            $infos['titre'] .= ((isset($infos['field']['lang'])) ? 'lang' : "'' as lang");
796
+        }
797
+    }
798
+    if (!isset($infos['date'])) {
799
+        if (isset($infos['table_objet']) and isset($GLOBALS['table_date'][$infos['table_objet']])) {
800
+            $infos['date'] = $GLOBALS['table_date'][$infos['table_objet']];
801
+        } else {
802
+            $infos['date'] = ((isset($infos['field']['date'])) ? 'date' : '');
803
+        }
804
+    }
805
+    if (!isset($infos['statut'])) {
806
+        $infos['statut'] = isset($GLOBALS['table_statut'][$table_sql]) ? $GLOBALS['table_statut'][$table_sql] : '';
807
+    }
808
+    if (!isset($infos['tables_jointures'])) {
809
+        $infos['tables_jointures'] = array();
810
+    }
811
+    if (isset($GLOBALS['tables_jointures'][$table_sql])) {
812
+        $infos['tables_jointures'] = array_merge($infos['tables_jointures'], $GLOBALS['tables_jointures'][$table_sql]);
813
+    }
814
+
815
+    return $infos;
816 816
 }
817 817
 
818 818
 /**
@@ -823,13 +823,13 @@  discard block
 block discarded – undo
823 823
  *     Liste et descriptions des tables principales
824 824
  **/
825 825
 function lister_tables_principales() {
826
-	static $done = false;
827
-	if (!$done or !count($GLOBALS['tables_principales'])) {
828
-		lister_tables_objets_sql();
829
-		$done = true;
830
-	}
826
+    static $done = false;
827
+    if (!$done or !count($GLOBALS['tables_principales'])) {
828
+        lister_tables_objets_sql();
829
+        $done = true;
830
+    }
831 831
 
832
-	return $GLOBALS['tables_principales'];
832
+    return $GLOBALS['tables_principales'];
833 833
 }
834 834
 
835 835
 /**
@@ -840,13 +840,13 @@  discard block
 block discarded – undo
840 840
  *     Liste et descriptions des tables auxiliaires
841 841
  **/
842 842
 function lister_tables_auxiliaires() {
843
-	static $done = false;
844
-	if (!$done or !count($GLOBALS['tables_auxiliaires'])) {
845
-		lister_tables_objets_sql();
846
-		$done = true;
847
-	}
843
+    static $done = false;
844
+    if (!$done or !count($GLOBALS['tables_auxiliaires'])) {
845
+        lister_tables_objets_sql();
846
+        $done = true;
847
+    }
848 848
 
849
-	return $GLOBALS['tables_auxiliaires'];
849
+    return $GLOBALS['tables_auxiliaires'];
850 850
 }
851 851
 
852 852
 /**
@@ -855,44 +855,44 @@  discard block
 block discarded – undo
855 855
  * @return array
856 856
  */
857 857
 function lister_tables_objets_surnoms() {
858
-	static $surnoms = null;
859
-	static $md5 = null;
860
-	if (!$surnoms
861
-		or $md5 != lister_tables_objets_sql('::md5')
862
-	) {
863
-		// passer dans un pipeline qui permet aux plugins de declarer leurs exceptions
864
-		// pour compatibilite, car il faut dorenavent utiliser
865
-		// declarer_table_objets_sql
866
-		$surnoms = pipeline(
867
-			'declarer_tables_objets_surnoms',
868
-			array(
869
-				# pour les modeles
870
-				# a enlever ?
871
-				'doc' => 'documents',
872
-				'img' => 'documents',
873
-				'emb' => 'documents',
874
-			)
875
-		);
876
-		$infos_tables = lister_tables_objets_sql();
877
-		foreach ($infos_tables as $t => $infos) {
878
-			// cas de base type=>table
879
-			// et preg_replace(',^spip_|^id_|s$,',table)=>table
880
-			if ($infos['table_objet']) { // securite, si la fonction est appelee trop tot, c'est vide
881
-				// optimisations pour table_objet
882
-				//$surnoms[$infos['type']] = $infos['table_objet'];
883
-				$surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['table_objet'];
884
-				$surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['table_objet'];
885
-				if (is_array($infos['table_objet_surnoms']) and count($infos['table_objet_surnoms'])) {
886
-					foreach ($infos['table_objet_surnoms'] as $surnom) {
887
-						$surnoms[$surnom] = $infos['table_objet'];
888
-					}
889
-				}
890
-			}
891
-		}
892
-		$md5 = lister_tables_objets_sql('::md5');
893
-	}
894
-
895
-	return $surnoms;
858
+    static $surnoms = null;
859
+    static $md5 = null;
860
+    if (!$surnoms
861
+        or $md5 != lister_tables_objets_sql('::md5')
862
+    ) {
863
+        // passer dans un pipeline qui permet aux plugins de declarer leurs exceptions
864
+        // pour compatibilite, car il faut dorenavent utiliser
865
+        // declarer_table_objets_sql
866
+        $surnoms = pipeline(
867
+            'declarer_tables_objets_surnoms',
868
+            array(
869
+                # pour les modeles
870
+                # a enlever ?
871
+                'doc' => 'documents',
872
+                'img' => 'documents',
873
+                'emb' => 'documents',
874
+            )
875
+        );
876
+        $infos_tables = lister_tables_objets_sql();
877
+        foreach ($infos_tables as $t => $infos) {
878
+            // cas de base type=>table
879
+            // et preg_replace(',^spip_|^id_|s$,',table)=>table
880
+            if ($infos['table_objet']) { // securite, si la fonction est appelee trop tot, c'est vide
881
+                // optimisations pour table_objet
882
+                //$surnoms[$infos['type']] = $infos['table_objet'];
883
+                $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['table_objet'];
884
+                $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['table_objet'];
885
+                if (is_array($infos['table_objet_surnoms']) and count($infos['table_objet_surnoms'])) {
886
+                    foreach ($infos['table_objet_surnoms'] as $surnom) {
887
+                        $surnoms[$surnom] = $infos['table_objet'];
888
+                    }
889
+                }
890
+            }
891
+        }
892
+        $md5 = lister_tables_objets_sql('::md5');
893
+    }
894
+
895
+    return $surnoms;
896 896
 }
897 897
 
898 898
 /**
@@ -901,34 +901,34 @@  discard block
 block discarded – undo
901 901
  * @return array
902 902
  */
903 903
 function lister_types_surnoms() {
904
-	static $surnoms = null;
905
-	static $md5 = null;
906
-	if (!$surnoms
907
-		or $md5 != lister_tables_objets_sql('::md5')
908
-	) {
909
-		// passer dans un pipeline qui permet aux plugins de declarer leurs exceptions
910
-		// pour compatibilite, car il faut dorenavent utiliser
911
-		// declarer_table_objets_sql
912
-		$surnoms = pipeline('declarer_type_surnoms', array('racine-site' => 'site'));
913
-		$infos_tables = lister_tables_objets_sql();
914
-		foreach ($infos_tables as $t => $infos) {
915
-			if ($infos['type']) { // securite, si la fonction est appelee trop tot, c'est vide
916
-				// optimisations pour objet_type
917
-				//$surnoms[$infos['type']] = $infos['type'];
918
-				$surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['type'];
919
-				$surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['type'];
920
-				// surnoms declares
921
-				if (is_array($infos['type_surnoms']) and count($infos['type_surnoms'])) {
922
-					foreach ($infos['type_surnoms'] as $surnom) {
923
-						$surnoms[$surnom] = $infos['type'];
924
-					}
925
-				}
926
-			}
927
-		}
928
-		$md5 = lister_tables_objets_sql('::md5');
929
-	}
930
-
931
-	return $surnoms;
904
+    static $surnoms = null;
905
+    static $md5 = null;
906
+    if (!$surnoms
907
+        or $md5 != lister_tables_objets_sql('::md5')
908
+    ) {
909
+        // passer dans un pipeline qui permet aux plugins de declarer leurs exceptions
910
+        // pour compatibilite, car il faut dorenavent utiliser
911
+        // declarer_table_objets_sql
912
+        $surnoms = pipeline('declarer_type_surnoms', array('racine-site' => 'site'));
913
+        $infos_tables = lister_tables_objets_sql();
914
+        foreach ($infos_tables as $t => $infos) {
915
+            if ($infos['type']) { // securite, si la fonction est appelee trop tot, c'est vide
916
+                // optimisations pour objet_type
917
+                //$surnoms[$infos['type']] = $infos['type'];
918
+                $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['type'];
919
+                $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['type'];
920
+                // surnoms declares
921
+                if (is_array($infos['type_surnoms']) and count($infos['type_surnoms'])) {
922
+                    foreach ($infos['type_surnoms'] as $surnom) {
923
+                        $surnoms[$surnom] = $infos['type'];
924
+                    }
925
+                }
926
+            }
927
+        }
928
+        $md5 = lister_tables_objets_sql('::md5');
929
+    }
930
+
931
+    return $surnoms;
932 932
 }
933 933
 
934 934
 /**
@@ -942,22 +942,22 @@  discard block
 block discarded – undo
942 942
  *     Couples (nom de la table SQL => même nom, sans 'spip_' devant)
943 943
  **/
944 944
 function lister_tables_spip($serveur = '') {
945
-	static $tables = array();
946
-	if (!isset($tables[$serveur])) {
947
-		$tables[$serveur] = array();
948
-		if (!function_exists('sql_alltable')) {
949
-			include_spip('base/abstract_sql');
950
-		}
951
-		$ts = sql_alltable(null, $serveur); // toutes les tables "spip_" (ou prefixe perso)
952
-		$connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0];
953
-		$spip = $connexion['prefixe'] . '_';
954
-		foreach ($ts as $t) {
955
-			$t = substr($t, strlen($spip));
956
-			$tables[$serveur]["spip_$t"] = $t;
957
-		}
958
-	}
959
-
960
-	return $tables[$serveur];
945
+    static $tables = array();
946
+    if (!isset($tables[$serveur])) {
947
+        $tables[$serveur] = array();
948
+        if (!function_exists('sql_alltable')) {
949
+            include_spip('base/abstract_sql');
950
+        }
951
+        $ts = sql_alltable(null, $serveur); // toutes les tables "spip_" (ou prefixe perso)
952
+        $connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0];
953
+        $spip = $connexion['prefixe'] . '_';
954
+        foreach ($ts as $t) {
955
+            $t = substr($t, strlen($spip));
956
+            $tables[$serveur]["spip_$t"] = $t;
957
+        }
958
+    }
959
+
960
+    return $tables[$serveur];
961 961
 }
962 962
 
963 963
 
@@ -972,17 +972,17 @@  discard block
 block discarded – undo
972 972
  *     Couples (nom de la table SQL => même nom)
973 973
  **/
974 974
 function lister_toutes_tables($serveur){
975
-	static $tables = array();
976
-	if (!isset($tables[$serveur])){
977
-		$tables[$serveur] = array();
978
-		if (!function_exists("sql_alltable"))
979
-			include_spip("base/abstract_sql");
980
-		$ts = sql_alltable('%',$serveur); // toutes les tables
981
-		foreach ($ts as $t){
982
-			$tables[$serveur][$t] = $t;
983
-		}
984
-	}
985
-	return $tables[$serveur];
975
+    static $tables = array();
976
+    if (!isset($tables[$serveur])){
977
+        $tables[$serveur] = array();
978
+        if (!function_exists("sql_alltable"))
979
+            include_spip("base/abstract_sql");
980
+        $ts = sql_alltable('%',$serveur); // toutes les tables
981
+        foreach ($ts as $t){
982
+            $tables[$serveur][$t] = $t;
983
+        }
984
+    }
985
+    return $tables[$serveur];
986 986
 }
987 987
 
988 988
 /**
@@ -1002,34 +1002,34 @@  discard block
 block discarded – undo
1002 1002
  *     Nom de l'objet
1003 1003
  **/
1004 1004
 function table_objet($type, $serveur = '') {
1005
-	$surnoms = lister_tables_objets_surnoms();
1006
-	$type = preg_replace(',^spip_|^id_|s$,', '', $type);
1007
-	if (!$type) {
1008
-		return;
1009
-	}
1010
-	if (isset($surnoms[$type])) {
1011
-		return $surnoms[$type];
1012
-	}
1013
-
1014
-	if ($serveur !== false) {
1015
-		$t = lister_tables_spip($serveur);
1016
-		$trouver_table = charger_fonction('trouver_table', 'base');
1017
-		$typetrim = rtrim($type, 's') . 's';
1018
-		if ((isset($t[$typetrim]) or in_array($typetrim, $t))
1019
-			and ($desc = $trouver_table(rtrim($type, 's') . 's', $serveur))
1020
-		) {
1021
-			return $desc['id_table'];
1022
-		} elseif ((isset($t[$type]) or in_array($type, $t))
1023
-			and ($desc = $trouver_table($type, $serveur))
1024
-		) {
1025
-			return $desc['id_table'];
1026
-		}
1027
-
1028
-		spip_log('table_objet(' . $type . ') calculee sans verification');
1029
-		#spip_log(debug_backtrace(),'db');
1030
-	}
1031
-
1032
-	return rtrim($type, 's') . 's'; # cas historique ne devant plus servir, sauf si $serveur=false
1005
+    $surnoms = lister_tables_objets_surnoms();
1006
+    $type = preg_replace(',^spip_|^id_|s$,', '', $type);
1007
+    if (!$type) {
1008
+        return;
1009
+    }
1010
+    if (isset($surnoms[$type])) {
1011
+        return $surnoms[$type];
1012
+    }
1013
+
1014
+    if ($serveur !== false) {
1015
+        $t = lister_tables_spip($serveur);
1016
+        $trouver_table = charger_fonction('trouver_table', 'base');
1017
+        $typetrim = rtrim($type, 's') . 's';
1018
+        if ((isset($t[$typetrim]) or in_array($typetrim, $t))
1019
+            and ($desc = $trouver_table(rtrim($type, 's') . 's', $serveur))
1020
+        ) {
1021
+            return $desc['id_table'];
1022
+        } elseif ((isset($t[$type]) or in_array($type, $t))
1023
+            and ($desc = $trouver_table($type, $serveur))
1024
+        ) {
1025
+            return $desc['id_table'];
1026
+        }
1027
+
1028
+        spip_log('table_objet(' . $type . ') calculee sans verification');
1029
+        #spip_log(debug_backtrace(),'db');
1030
+    }
1031
+
1032
+    return rtrim($type, 's') . 's'; # cas historique ne devant plus servir, sauf si $serveur=false
1033 1033
 }
1034 1034
 
1035 1035
 /**
@@ -1050,30 +1050,30 @@  discard block
 block discarded – undo
1050 1050
  **/
1051 1051
 function table_objet_sql($type, $serveur = '') {
1052 1052
 
1053
-	$nom = table_objet($type, $serveur);
1054
-	if (!isset($GLOBALS['table_des_tables']['articles'])) {
1055
-		// eviter de multiples inclusions
1056
-		include_spip('public/interfaces');
1057
-	}
1058
-	if (isset($GLOBALS['table_des_tables'][$nom])) {
1059
-		$nom = $GLOBALS['table_des_tables'][$nom];
1060
-		$nom = "spip_$nom";
1061
-	} else {
1062
-		$infos_tables = lister_tables_objets_sql();
1063
-		if (isset($infos_tables["spip_$nom"])) {
1064
-			$nom = "spip_$nom";
1065
-		} elseif ($serveur !== false) {
1066
-			$t = lister_tables_spip($serveur);
1067
-			if (isset($t[$nom]) or in_array($nom, $t)) {
1068
-				$trouver_table = charger_fonction('trouver_table', 'base');
1069
-				if ($desc = $trouver_table($nom, $serveur)) {
1070
-					return $desc['table_sql'];
1071
-				}
1072
-			}
1073
-		}
1074
-	}
1075
-
1076
-	return $nom;
1053
+    $nom = table_objet($type, $serveur);
1054
+    if (!isset($GLOBALS['table_des_tables']['articles'])) {
1055
+        // eviter de multiples inclusions
1056
+        include_spip('public/interfaces');
1057
+    }
1058
+    if (isset($GLOBALS['table_des_tables'][$nom])) {
1059
+        $nom = $GLOBALS['table_des_tables'][$nom];
1060
+        $nom = "spip_$nom";
1061
+    } else {
1062
+        $infos_tables = lister_tables_objets_sql();
1063
+        if (isset($infos_tables["spip_$nom"])) {
1064
+            $nom = "spip_$nom";
1065
+        } elseif ($serveur !== false) {
1066
+            $t = lister_tables_spip($serveur);
1067
+            if (isset($t[$nom]) or in_array($nom, $t)) {
1068
+                $trouver_table = charger_fonction('trouver_table', 'base');
1069
+                if ($desc = $trouver_table($nom, $serveur)) {
1070
+                    return $desc['table_sql'];
1071
+                }
1072
+            }
1073
+        }
1074
+    }
1075
+
1076
+    return $nom;
1077 1077
 }
1078 1078
 
1079 1079
 /**
@@ -1092,35 +1092,35 @@  discard block
 block discarded – undo
1092 1092
  *     Nom de la clé primaire
1093 1093
  **/
1094 1094
 function id_table_objet($type, $serveur = '') {
1095
-	static $trouver_table = null;
1096
-	$type = objet_type($type, $serveur);
1097
-	if (!$type) {
1098
-		return;
1099
-	}
1100
-	$t = table_objet($type);
1101
-	if (!$trouver_table) {
1102
-		$trouver_table = charger_fonction('trouver_table', 'base');
1103
-	}
1104
-
1105
-	$ts = lister_tables_spip($serveur);
1106
-	if (
1107
-		in_array($t, $ts)
1108
-		or in_array($t, lister_toutes_tables($serveur))
1109
-	){
1110
-		$desc = $trouver_table($t, $serveur);
1111
-		if (isset($desc['key']['PRIMARY KEY'])) {
1112
-			return $desc['key']['PRIMARY KEY'];
1113
-		}
1114
-		if (!$desc or isset($desc['field']["id_$type"])) {
1115
-			return "id_$type";
1116
-		}
1117
-		// sinon renvoyer le premier champ de la table...
1118
-		$keys = array_keys($desc['field']);
1119
-
1120
-		return array_shift($keys);
1121
-	}
1122
-
1123
-	return "id_$type";
1095
+    static $trouver_table = null;
1096
+    $type = objet_type($type, $serveur);
1097
+    if (!$type) {
1098
+        return;
1099
+    }
1100
+    $t = table_objet($type);
1101
+    if (!$trouver_table) {
1102
+        $trouver_table = charger_fonction('trouver_table', 'base');
1103
+    }
1104
+
1105
+    $ts = lister_tables_spip($serveur);
1106
+    if (
1107
+        in_array($t, $ts)
1108
+        or in_array($t, lister_toutes_tables($serveur))
1109
+    ){
1110
+        $desc = $trouver_table($t, $serveur);
1111
+        if (isset($desc['key']['PRIMARY KEY'])) {
1112
+            return $desc['key']['PRIMARY KEY'];
1113
+        }
1114
+        if (!$desc or isset($desc['field']["id_$type"])) {
1115
+            return "id_$type";
1116
+        }
1117
+        // sinon renvoyer le premier champ de la table...
1118
+        $keys = array_keys($desc['field']);
1119
+
1120
+        return array_shift($keys);
1121
+    }
1122
+
1123
+    return "id_$type";
1124 1124
 }
1125 1125
 
1126 1126
 /**
@@ -1139,59 +1139,59 @@  discard block
 block discarded – undo
1139 1139
  *     Type de l'objet
1140 1140
  **/
1141 1141
 function objet_type($table_objet, $serveur = '') {
1142
-	if (!$table_objet) {
1143
-		return;
1144
-	}
1145
-	$surnoms = lister_types_surnoms();
1146
-
1147
-	// scenario de base
1148
-	// le type est decline a partir du nom de la table en enlevant le prefixe eventuel
1149
-	// et la marque du pluriel
1150
-	// on accepte id_xx en entree aussi
1151
-	$type = preg_replace(',^spip_|^id_|s$,', '', $table_objet);
1152
-	if (isset($surnoms[$type])) {
1153
-		return $surnoms[$type];
1154
-	}
1155
-
1156
-	// securite : eliminer les caracteres non \w
1157
-	$type = preg_replace(',[^\w-],', '', $type);
1158
-
1159
-	// si le type redonne bien la table c'est bon
1160
-	// oui si table_objet ressemblait deja a un type
1161
-	if ($type == $table_objet
1162
-		or (table_objet($type, $serveur) == $table_objet)
1163
-		or (table_objet_sql($type, $serveur) == $table_objet)
1164
-	) {
1165
-		return $type;
1166
-	}
1167
-
1168
-	// si on ne veut pas chercher en base
1169
-	if ($serveur === false) {
1170
-		return $type;
1171
-	}
1172
-
1173
-	// sinon on passe par la cle primaire id_xx pour trouver le type
1174
-	// car le s a la fin est incertain
1175
-	// notamment en cas de pluriel derogatoire
1176
-	// id_jeu/spip_jeux id_journal/spip_journaux qui necessitent tout deux
1177
-	// une declaration jeu => jeux, journal => journaux
1178
-	// dans le pipeline declarer_tables_objets_surnoms
1179
-	$trouver_table = charger_fonction('trouver_table', 'base');
1180
-	$ts = lister_tables_spip($serveur);
1181
-	$desc = false;
1182
-	if (in_array($table_objet, $ts)) {
1183
-		$desc = $trouver_table($table_objet);
1184
-	}
1185
-	if (!$desc and in_array($table_objet = table_objet($type, $serveur), $ts)) {
1186
-		$desc = $trouver_table($table_objet, $serveur);
1187
-	}
1188
-	// si le type est declare : bingo !
1189
-	if ($desc and isset($desc['type'])) {
1190
-		return $desc['type'];
1191
-	}
1192
-
1193
-	// on a fait ce qu'on a pu
1194
-	return $type;
1142
+    if (!$table_objet) {
1143
+        return;
1144
+    }
1145
+    $surnoms = lister_types_surnoms();
1146
+
1147
+    // scenario de base
1148
+    // le type est decline a partir du nom de la table en enlevant le prefixe eventuel
1149
+    // et la marque du pluriel
1150
+    // on accepte id_xx en entree aussi
1151
+    $type = preg_replace(',^spip_|^id_|s$,', '', $table_objet);
1152
+    if (isset($surnoms[$type])) {
1153
+        return $surnoms[$type];
1154
+    }
1155
+
1156
+    // securite : eliminer les caracteres non \w
1157
+    $type = preg_replace(',[^\w-],', '', $type);
1158
+
1159
+    // si le type redonne bien la table c'est bon
1160
+    // oui si table_objet ressemblait deja a un type
1161
+    if ($type == $table_objet
1162
+        or (table_objet($type, $serveur) == $table_objet)
1163
+        or (table_objet_sql($type, $serveur) == $table_objet)
1164
+    ) {
1165
+        return $type;
1166
+    }
1167
+
1168
+    // si on ne veut pas chercher en base
1169
+    if ($serveur === false) {
1170
+        return $type;
1171
+    }
1172
+
1173
+    // sinon on passe par la cle primaire id_xx pour trouver le type
1174
+    // car le s a la fin est incertain
1175
+    // notamment en cas de pluriel derogatoire
1176
+    // id_jeu/spip_jeux id_journal/spip_journaux qui necessitent tout deux
1177
+    // une declaration jeu => jeux, journal => journaux
1178
+    // dans le pipeline declarer_tables_objets_surnoms
1179
+    $trouver_table = charger_fonction('trouver_table', 'base');
1180
+    $ts = lister_tables_spip($serveur);
1181
+    $desc = false;
1182
+    if (in_array($table_objet, $ts)) {
1183
+        $desc = $trouver_table($table_objet);
1184
+    }
1185
+    if (!$desc and in_array($table_objet = table_objet($type, $serveur), $ts)) {
1186
+        $desc = $trouver_table($table_objet, $serveur);
1187
+    }
1188
+    // si le type est declare : bingo !
1189
+    if ($desc and isset($desc['type'])) {
1190
+        return $desc['type'];
1191
+    }
1192
+
1193
+    // on a fait ce qu'on a pu
1194
+    return $type;
1195 1195
 }
1196 1196
 
1197 1197
 /**
@@ -1207,54 +1207,54 @@  discard block
 block discarded – undo
1207 1207
  * @return bool
1208 1208
  */
1209 1209
 function objet_test_si_publie($objet, $id_objet, $serveur = '') {
1210
-	// voir si une fonction est definie pour faire le boulot
1211
-	// elle a la priorite dans ce cas
1212
-	if ($f = charger_fonction($objet . '_test_si_publie', 'base', true)) {
1213
-		return $f($objet, $id_objet, $serveur);
1214
-	}
1215
-
1216
-	// sinon on se fie a la declaration de l'objet si presente
1217
-	$id_table = $table_objet = table_objet($objet);
1218
-	$id_table_objet = id_table_objet($objet, $serveur);
1219
-	$trouver_table = charger_fonction('trouver_table', 'base');
1220
-	if ($desc = $trouver_table($table_objet, $serveur)
1221
-		and isset($desc['statut'])
1222
-		and $desc['statut']
1223
-	) {
1224
-		$boucle = new Boucle();
1225
-		$boucle->show = $desc;
1226
-		$boucle->nom = 'objet_test_si_publie';
1227
-		$boucle->id_boucle = $id_table;
1228
-		$boucle->id_table = $id_table;
1229
-		$boucle->sql_serveur = $serveur;
1230
-		$boucle->select[] = $id_table_objet;
1231
-		$boucle->from[$table_objet] = table_objet_sql($objet, $serveur);
1232
-		$boucle->where[] = $id_table . '.' . $id_table_objet . '=' . intval($id_objet);
1233
-
1234
-		include_spip('public/compiler');
1235
-		include_spip('public/composer');
1236
-		instituer_boucle($boucle, false, true);
1237
-		$res = calculer_select(
1238
-			$boucle->select,
1239
-			$boucle->from,
1240
-			$boucle->from_type,
1241
-			$boucle->where,
1242
-			$boucle->join,
1243
-			$boucle->group,
1244
-			$boucle->order,
1245
-			$boucle->limit,
1246
-			$boucle->having,
1247
-			$table_objet,
1248
-			$id_table,
1249
-			$serveur
1250
-		);
1251
-		if (sql_fetch($res)) {
1252
-			return true;
1253
-		}
1254
-
1255
-		return false;
1256
-	}
1257
-
1258
-	// si pas d'info statut ni de fonction : l'objet est publie
1259
-	return true;
1210
+    // voir si une fonction est definie pour faire le boulot
1211
+    // elle a la priorite dans ce cas
1212
+    if ($f = charger_fonction($objet . '_test_si_publie', 'base', true)) {
1213
+        return $f($objet, $id_objet, $serveur);
1214
+    }
1215
+
1216
+    // sinon on se fie a la declaration de l'objet si presente
1217
+    $id_table = $table_objet = table_objet($objet);
1218
+    $id_table_objet = id_table_objet($objet, $serveur);
1219
+    $trouver_table = charger_fonction('trouver_table', 'base');
1220
+    if ($desc = $trouver_table($table_objet, $serveur)
1221
+        and isset($desc['statut'])
1222
+        and $desc['statut']
1223
+    ) {
1224
+        $boucle = new Boucle();
1225
+        $boucle->show = $desc;
1226
+        $boucle->nom = 'objet_test_si_publie';
1227
+        $boucle->id_boucle = $id_table;
1228
+        $boucle->id_table = $id_table;
1229
+        $boucle->sql_serveur = $serveur;
1230
+        $boucle->select[] = $id_table_objet;
1231
+        $boucle->from[$table_objet] = table_objet_sql($objet, $serveur);
1232
+        $boucle->where[] = $id_table . '.' . $id_table_objet . '=' . intval($id_objet);
1233
+
1234
+        include_spip('public/compiler');
1235
+        include_spip('public/composer');
1236
+        instituer_boucle($boucle, false, true);
1237
+        $res = calculer_select(
1238
+            $boucle->select,
1239
+            $boucle->from,
1240
+            $boucle->from_type,
1241
+            $boucle->where,
1242
+            $boucle->join,
1243
+            $boucle->group,
1244
+            $boucle->order,
1245
+            $boucle->limit,
1246
+            $boucle->having,
1247
+            $table_objet,
1248
+            $id_table,
1249
+            $serveur
1250
+        );
1251
+        if (sql_fetch($res)) {
1252
+            return true;
1253
+        }
1254
+
1255
+        return false;
1256
+    }
1257
+
1258
+    // si pas d'info statut ni de fonction : l'objet est publie
1259
+    return true;
1260 1260
 }
Please login to merge, or discard this patch.