Completed
Push — master ( 1891d3...7fa313 )
by cam
01:19
created
ecrire/typographie/en.php 1 patch
Indentation   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -11,37 +11,37 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 // rien sauf les "~" et "-,"
18 18
 
19 19
 function typographie_en_dist($letexte) {
20 20
 
21
-	// zouli apostrophe
22
-	$letexte = str_replace("'", '’', $letexte);
21
+    // zouli apostrophe
22
+    $letexte = str_replace("'", '’', $letexte);
23 23
 
24
-	$cherche1 = [
25
-		'/ --?,/S'
26
-	];
27
-	$remplace1 = [
28
-		'~\0'
29
-	];
30
-	$letexte = preg_replace($cherche1, $remplace1, $letexte);
24
+    $cherche1 = [
25
+        '/ --?,/S'
26
+    ];
27
+    $remplace1 = [
28
+        '~\0'
29
+    ];
30
+    $letexte = preg_replace($cherche1, $remplace1, $letexte);
31 31
 
32
-	$letexte = str_replace(' ', '~', $letexte);
33
-	$letexte = preg_replace('/ *~+ */', '~', $letexte);
32
+    $letexte = str_replace(' ', '~', $letexte);
33
+    $letexte = preg_replace('/ *~+ */', '~', $letexte);
34 34
 
35
-	$cherche2 = [
36
-		'/([^-\n]|^)--([^-]|$)/',
37
-		'/~/'
38
-	];
39
-	$remplace2 = [
40
-		'\1—\2',
41
-		' '
42
-	];
35
+    $cherche2 = [
36
+        '/([^-\n]|^)--([^-]|$)/',
37
+        '/~/'
38
+    ];
39
+    $remplace2 = [
40
+        '\1—\2',
41
+        ' '
42
+    ];
43 43
 
44
-	$letexte = preg_replace($cherche2, $remplace2, $letexte);
44
+    $letexte = preg_replace($cherche2, $remplace2, $letexte);
45 45
 
46
-	return $letexte;
46
+    return $letexte;
47 47
 }
Please login to merge, or discard this patch.
ecrire/public/quete.php 2 patches
Indentation   +408 added lines, -408 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
  **/
20 20
 
21 21
 if (!defined('_ECRIRE_INC_VERSION')) {
22
-	return;
22
+    return;
23 23
 }
24 24
 
25 25
 
@@ -33,16 +33,16 @@  discard block
 block discarded – undo
33 33
  * @return array|bool|null
34 34
  */
35 35
 function quete_virtuel($id_article, $connect) {
36
-	return sql_getfetsel(
37
-		'virtuel',
38
-		'spip_articles',
39
-		['id_article=' . intval($id_article), "statut='publie'"],
40
-		'',
41
-		'',
42
-		'',
43
-		'',
44
-		$connect
45
-	);
36
+    return sql_getfetsel(
37
+        'virtuel',
38
+        'spip_articles',
39
+        ['id_article=' . intval($id_article), "statut='publie'"],
40
+        '',
41
+        '',
42
+        '',
43
+        '',
44
+        $connect
45
+    );
46 46
 }
47 47
 
48 48
 /**
@@ -57,41 +57,41 @@  discard block
 block discarded – undo
57 57
  * @return array
58 58
  */
59 59
 function quete_parent_lang($table, $id, $connect = '') {
60
-	static $cache_quete = [];
61
-
62
-	if (!isset($cache_quete[$connect][$table][$id])) {
63
-		if (!isset($cache_quete[$connect][$table]['_select'])) {
64
-			$trouver_table = charger_fonction('trouver_table', 'base');
65
-			if (
66
-				!$desc = $trouver_table(
67
-					$table,
68
-					$connect
69
-				) or !isset($desc['field']['id_rubrique'])
70
-			) {
71
-				// pas de parent rubrique, on passe
72
-				$cache_quete[$connect][$table]['_select'] = false;
73
-			} else {
74
-				$select = ($table == 'spip_rubriques' ? 'id_parent' : 'id_rubrique');
75
-				$select .= isset($desc['field']['lang']) ? ', lang' : '';
76
-				$cache_quete[$connect][$table]['_select'] = $select;
77
-				$cache_quete[$connect][$table]['_id'] = id_table_objet(objet_type($table));
78
-			}
79
-		}
80
-		if ($cache_quete[$connect][$table]['_select']) {
81
-			$cache_quete[$connect][$table][$id] = sql_fetsel(
82
-				$cache_quete[$connect][$table]['_select'],
83
-				$table,
84
-				$cache_quete[$connect][$table]['_id'] . '=' . intval($id),
85
-				'',
86
-				'',
87
-				'',
88
-				'',
89
-				$connect
90
-			);
91
-		}
92
-	}
93
-
94
-	return isset($cache_quete[$connect][$table][$id]) ? $cache_quete[$connect][$table][$id] : null;
60
+    static $cache_quete = [];
61
+
62
+    if (!isset($cache_quete[$connect][$table][$id])) {
63
+        if (!isset($cache_quete[$connect][$table]['_select'])) {
64
+            $trouver_table = charger_fonction('trouver_table', 'base');
65
+            if (
66
+                !$desc = $trouver_table(
67
+                    $table,
68
+                    $connect
69
+                ) or !isset($desc['field']['id_rubrique'])
70
+            ) {
71
+                // pas de parent rubrique, on passe
72
+                $cache_quete[$connect][$table]['_select'] = false;
73
+            } else {
74
+                $select = ($table == 'spip_rubriques' ? 'id_parent' : 'id_rubrique');
75
+                $select .= isset($desc['field']['lang']) ? ', lang' : '';
76
+                $cache_quete[$connect][$table]['_select'] = $select;
77
+                $cache_quete[$connect][$table]['_id'] = id_table_objet(objet_type($table));
78
+            }
79
+        }
80
+        if ($cache_quete[$connect][$table]['_select']) {
81
+            $cache_quete[$connect][$table][$id] = sql_fetsel(
82
+                $cache_quete[$connect][$table]['_select'],
83
+                $table,
84
+                $cache_quete[$connect][$table]['_id'] . '=' . intval($id),
85
+                '',
86
+                '',
87
+                '',
88
+                '',
89
+                $connect
90
+            );
91
+        }
92
+    }
93
+
94
+    return isset($cache_quete[$connect][$table][$id]) ? $cache_quete[$connect][$table][$id] : null;
95 95
 }
96 96
 
97 97
 
@@ -108,11 +108,11 @@  discard block
 block discarded – undo
108 108
  * @return int
109 109
  */
110 110
 function quete_parent($id_rubrique, $connect = '') {
111
-	if (!$id_rubrique = intval($id_rubrique)) {
112
-		return 0;
113
-	}
114
-	$id_parent = quete_parent_lang('spip_rubriques', $id_rubrique, $connect);
115
-	return $id_parent ? $id_parent['id_parent'] : 0;
111
+    if (!$id_rubrique = intval($id_rubrique)) {
112
+        return 0;
113
+    }
114
+    $id_parent = quete_parent_lang('spip_rubriques', $id_rubrique, $connect);
115
+    return $id_parent ? $id_parent['id_parent'] : 0;
116 116
 }
117 117
 
118 118
 /**
@@ -128,9 +128,9 @@  discard block
 block discarded – undo
128 128
  * @return int
129 129
  */
130 130
 function quete_rubrique($id_article, $serveur) {
131
-	$id_parent = quete_parent_lang('spip_articles', $id_article, $serveur);
131
+    $id_parent = quete_parent_lang('spip_articles', $id_article, $serveur);
132 132
 
133
-	return $id_parent['id_rubrique'];
133
+    return $id_parent['id_rubrique'];
134 134
 }
135 135
 
136 136
 
@@ -144,13 +144,13 @@  discard block
 block discarded – undo
144 144
  * @return int
145 145
  */
146 146
 function quete_profondeur($id, $connect = '') {
147
-	$n = 0;
148
-	while ($id) {
149
-		$n++;
150
-		$id = quete_parent($id, $connect);
151
-	}
147
+    $n = 0;
148
+    while ($id) {
149
+        $n++;
150
+        $id = quete_parent($id, $connect);
151
+    }
152 152
 
153
-	return $n;
153
+    return $n;
154 154
 }
155 155
 
156 156
 
@@ -166,15 +166,15 @@  discard block
 block discarded – undo
166 166
  *     Morceau de la requête SQL testant la date
167 167
  */
168 168
 function quete_condition_postdates($champ_date, $serveur = '', $ignore_previsu = false) {
169
-	if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
170
-		return '1=1';
171
-	}
172
-
173
-	return
174
-		(isset($GLOBALS['meta']['date_prochain_postdate'])
175
-			and $GLOBALS['meta']['date_prochain_postdate'] > time())
176
-			? "$champ_date<" . sql_quote(date('Y-m-d H:i:s', $GLOBALS['meta']['date_prochain_postdate']), $serveur)
177
-			: '1=1';
169
+    if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
170
+        return '1=1';
171
+    }
172
+
173
+    return
174
+        (isset($GLOBALS['meta']['date_prochain_postdate'])
175
+            and $GLOBALS['meta']['date_prochain_postdate'] > time())
176
+            ? "$champ_date<" . sql_quote(date('Y-m-d H:i:s', $GLOBALS['meta']['date_prochain_postdate']), $serveur)
177
+            : '1=1';
178 178
 }
179 179
 
180 180
 
@@ -194,101 +194,101 @@  discard block
 block discarded – undo
194 194
  * @return array|string
195 195
  */
196 196
 function quete_condition_statut($mstatut, $previsu, $publie, $serveur = '', $ignore_previsu = false) {
197
-	static $cond = [];
198
-	$key = func_get_args();
199
-	$key = implode('-', $key);
200
-	if (isset($cond[$key])) {
201
-		return $cond[$key];
202
-	}
203
-
204
-	$liste_statuts = $publie;
205
-	if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
206
-		$liste_statuts = $previsu;
207
-	}
208
-	$not = false;
209
-	if (strncmp($liste_statuts, '!', 1) == 0) {
210
-		$not = true;
211
-		$liste_statuts = substr($liste_statuts, 1);
212
-	}
213
-	// '' => ne rien afficher, '!'=> ne rien filtrer
214
-	if (!strlen($liste_statuts)) {
215
-		return $cond[$key] = ($not ? '1=1' : '0=1');
216
-	}
217
-
218
-	$liste_statuts = explode(',', $liste_statuts);
219
-	$where = [];
220
-	foreach ($liste_statuts as $k => $v) {
221
-		// filtrage /auteur pour limiter les objets d'un statut (prepa en general)
222
-		// a ceux de l'auteur identifie
223
-		if (strpos($v, '/') !== false) {
224
-			$v = explode('/', $v);
225
-			$filtre = end($v);
226
-			$v = reset($v);
227
-			$v = preg_replace(',\W,', '', $v);
228
-			if (
229
-				$filtre == 'auteur'
230
-				and (strpos($mstatut, '.') !== false)
231
-				and $objet = explode('.', $mstatut)
232
-				and $id_table = reset($objet)
233
-				and $objet = objet_type($id_table)
234
-			) {
235
-				$w = "$mstatut<>" . sql_quote($v);
236
-
237
-				// retrouver l’id_auteur qui a filé un lien de prévisu éventuellement,
238
-				// sinon l’auteur en session
239
-				include_spip('inc/securiser_action');
240
-				if ($desc = decrire_token_previsu()) {
241
-					$id_auteur = $desc['id_auteur'];
242
-				} elseif (isset($GLOBALS['visiteur_session']['id_auteur'])) {
243
-					$id_auteur = intval($GLOBALS['visiteur_session']['id_auteur']);
244
-				} else {
245
-					$id_auteur = null;
246
-				}
247
-
248
-				// dans ce cas (admin en general), pas de filtrage sur ce statut
249
-				if (!autoriser('previsualiser' . $v, $objet, '', $id_auteur)) {
250
-					// si pas d'auteur identifie pas de sous-requete car pas d'article qui matche
251
-					if (!$id_auteur) {
252
-						$where[] = $w;
253
-					} else {
254
-						$primary = id_table_objet($objet);
255
-						$where[] = "($w OR $id_table.$primary IN (" . sql_get_select(
256
-							'ssss.id_objet',
257
-							'spip_auteurs_liens AS ssss',
258
-							'ssss.objet=' . sql_quote($objet) . ' AND ssss.id_auteur=' . intval($id_auteur),
259
-							'',
260
-							'',
261
-							'',
262
-							'',
263
-							$serveur
264
-						) . '))';
265
-					}
266
-				}
267
-			} // ignorer ce statut si on ne sait pas comment le filtrer
268
-			else {
269
-				$v = '';
270
-			}
271
-		}
272
-		// securite
273
-		$liste_statuts[$k] = preg_replace(',\W,', '', $v);
274
-	}
275
-	$liste_statuts = array_filter($liste_statuts);
276
-	if (count($liste_statuts) == 1) {
277
-		$where[] = ['=', $mstatut, sql_quote(reset($liste_statuts), $serveur)];
278
-	} else {
279
-		$where[] = sql_in($mstatut, $liste_statuts, $not, $serveur);
280
-	}
281
-
282
-	while (count($where) > 1) {
283
-		$and = ['AND', array_pop($where), array_pop($where)];
284
-		$where[] = $and;
285
-	}
286
-	$cond[$key] = reset($where);
287
-	if ($not) {
288
-		$cond[$key] = ['NOT', $cond[$key]];
289
-	}
290
-
291
-	return $cond[$key];
197
+    static $cond = [];
198
+    $key = func_get_args();
199
+    $key = implode('-', $key);
200
+    if (isset($cond[$key])) {
201
+        return $cond[$key];
202
+    }
203
+
204
+    $liste_statuts = $publie;
205
+    if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
206
+        $liste_statuts = $previsu;
207
+    }
208
+    $not = false;
209
+    if (strncmp($liste_statuts, '!', 1) == 0) {
210
+        $not = true;
211
+        $liste_statuts = substr($liste_statuts, 1);
212
+    }
213
+    // '' => ne rien afficher, '!'=> ne rien filtrer
214
+    if (!strlen($liste_statuts)) {
215
+        return $cond[$key] = ($not ? '1=1' : '0=1');
216
+    }
217
+
218
+    $liste_statuts = explode(',', $liste_statuts);
219
+    $where = [];
220
+    foreach ($liste_statuts as $k => $v) {
221
+        // filtrage /auteur pour limiter les objets d'un statut (prepa en general)
222
+        // a ceux de l'auteur identifie
223
+        if (strpos($v, '/') !== false) {
224
+            $v = explode('/', $v);
225
+            $filtre = end($v);
226
+            $v = reset($v);
227
+            $v = preg_replace(',\W,', '', $v);
228
+            if (
229
+                $filtre == 'auteur'
230
+                and (strpos($mstatut, '.') !== false)
231
+                and $objet = explode('.', $mstatut)
232
+                and $id_table = reset($objet)
233
+                and $objet = objet_type($id_table)
234
+            ) {
235
+                $w = "$mstatut<>" . sql_quote($v);
236
+
237
+                // retrouver l’id_auteur qui a filé un lien de prévisu éventuellement,
238
+                // sinon l’auteur en session
239
+                include_spip('inc/securiser_action');
240
+                if ($desc = decrire_token_previsu()) {
241
+                    $id_auteur = $desc['id_auteur'];
242
+                } elseif (isset($GLOBALS['visiteur_session']['id_auteur'])) {
243
+                    $id_auteur = intval($GLOBALS['visiteur_session']['id_auteur']);
244
+                } else {
245
+                    $id_auteur = null;
246
+                }
247
+
248
+                // dans ce cas (admin en general), pas de filtrage sur ce statut
249
+                if (!autoriser('previsualiser' . $v, $objet, '', $id_auteur)) {
250
+                    // si pas d'auteur identifie pas de sous-requete car pas d'article qui matche
251
+                    if (!$id_auteur) {
252
+                        $where[] = $w;
253
+                    } else {
254
+                        $primary = id_table_objet($objet);
255
+                        $where[] = "($w OR $id_table.$primary IN (" . sql_get_select(
256
+                            'ssss.id_objet',
257
+                            'spip_auteurs_liens AS ssss',
258
+                            'ssss.objet=' . sql_quote($objet) . ' AND ssss.id_auteur=' . intval($id_auteur),
259
+                            '',
260
+                            '',
261
+                            '',
262
+                            '',
263
+                            $serveur
264
+                        ) . '))';
265
+                    }
266
+                }
267
+            } // ignorer ce statut si on ne sait pas comment le filtrer
268
+            else {
269
+                $v = '';
270
+            }
271
+        }
272
+        // securite
273
+        $liste_statuts[$k] = preg_replace(',\W,', '', $v);
274
+    }
275
+    $liste_statuts = array_filter($liste_statuts);
276
+    if (count($liste_statuts) == 1) {
277
+        $where[] = ['=', $mstatut, sql_quote(reset($liste_statuts), $serveur)];
278
+    } else {
279
+        $where[] = sql_in($mstatut, $liste_statuts, $not, $serveur);
280
+    }
281
+
282
+    while (count($where) > 1) {
283
+        $and = ['AND', array_pop($where), array_pop($where)];
284
+        $where[] = $and;
285
+    }
286
+    $cond[$key] = reset($where);
287
+    if ($not) {
288
+        $cond[$key] = ['NOT', $cond[$key]];
289
+    }
290
+
291
+    return $cond[$key];
292 292
 }
293 293
 
294 294
 /**
@@ -299,7 +299,7 @@  discard block
 block discarded – undo
299 299
  * @return array|bool|null
300 300
  */
301 301
 function quete_fichier($id_document, $serveur = '') {
302
-	return sql_getfetsel('fichier', 'spip_documents', ('id_document=' . intval($id_document)), '', [], '', '', $serveur);
302
+    return sql_getfetsel('fichier', 'spip_documents', ('id_document=' . intval($id_document)), '', [], '', '', $serveur);
303 303
 }
304 304
 
305 305
 /**
@@ -310,7 +310,7 @@  discard block
 block discarded – undo
310 310
  * @return array|bool
311 311
  */
312 312
 function quete_document($id_document, $serveur = '') {
313
-	return sql_fetsel('*', 'spip_documents', ('id_document=' . intval($id_document)), '', [], '', '', $serveur);
313
+    return sql_fetsel('*', 'spip_documents', ('id_document=' . intval($id_document)), '', [], '', '', $serveur);
314 314
 }
315 315
 
316 316
 /**
@@ -321,7 +321,7 @@  discard block
 block discarded – undo
321 321
  * @return array|bool|null
322 322
  */
323 323
 function quete_meta($nom, $serveur) {
324
-	return sql_getfetsel('valeur', 'spip_meta', 'nom=' . sql_quote($nom), '', '', '', '', $serveur);
324
+    return sql_getfetsel('valeur', 'spip_meta', 'nom=' . sql_quote($nom), '', '', '', '', $serveur);
325 325
 }
326 326
 
327 327
 /**
@@ -347,66 +347,66 @@  discard block
 block discarded – undo
347 347
  *     Retourne soit un tableau, soit le chemin du fichier.
348 348
  */
349 349
 function quete_logo($cle_objet, $onoff, $id, $id_rubrique, $flag) {
350
-	include_spip('base/objets');
351
-	$nom = strtolower($onoff);
352
-
353
-	$cle_objet = id_table_objet($cle_objet);
354
-
355
-	while (1) {
356
-		$objet = objet_type($cle_objet);
357
-
358
-		$on = quete_logo_objet($id, $objet, $nom);
359
-
360
-		if ($on) {
361
-			if ($flag) {
362
-				return basename($on['chemin']);
363
-			} else {
364
-				$taille = @spip_getimagesize($on['chemin']);
365
-
366
-				// Si on a déjà demandé un survol directement ($onoff = off)
367
-				// ou qu'on a demandé uniquement le normal ($onoff = on)
368
-				// alors on ne cherche pas du tout le survol ici
369
-				if ($onoff != 'ON') {
370
-					$off = '';
371
-				} else {
372
-					// Sinon, c'est qu'on demande normal ET survol à la fois, donc on cherche maintenant le survol
373
-					$off = quete_logo_objet($id, $objet, 'off');
374
-				}
375
-
376
-				// on retourne une url du type IMG/artonXX?timestamp
377
-				// qui permet de distinguer le changement de logo
378
-				// et placer un expire sur le dossier IMG/
379
-				$res = [
380
-					$on['chemin'] . ($on['timestamp'] ? "?{$on['timestamp']}" : ''),
381
-					($off ? $off['chemin'] . ($off['timestamp'] ? "?{$off['timestamp']}" : '') : ''),
382
-					(!$taille ? '' : (' ' . $taille[3]))
383
-				];
384
-				$res['src'] = $res[0];
385
-				$res['logo_on'] = $res[0];
386
-				$res['logo_off'] = $res[1];
387
-				$res['width'] = ($taille ? $taille[0] : '');
388
-				$res['height'] = ($taille ? $taille[1] : '');
389
-
390
-				return $res;
391
-			}
392
-		} else {
393
-			if (defined('_LOGO_RUBRIQUE_DESACTIVER_HERITAGE')) {
394
-				return '';
395
-			} else {
396
-				if ($id_rubrique) {
397
-					$cle_objet = 'id_rubrique';
398
-					$id = $id_rubrique;
399
-					$id_rubrique = 0;
400
-				} else {
401
-					if ($id and $cle_objet == 'id_rubrique') {
402
-						$id = quete_parent($id);
403
-					} else {
404
-						return '';
405
-					}
406
-				}
407
-			}
408
-		}
409
-	}
350
+    include_spip('base/objets');
351
+    $nom = strtolower($onoff);
352
+
353
+    $cle_objet = id_table_objet($cle_objet);
354
+
355
+    while (1) {
356
+        $objet = objet_type($cle_objet);
357
+
358
+        $on = quete_logo_objet($id, $objet, $nom);
359
+
360
+        if ($on) {
361
+            if ($flag) {
362
+                return basename($on['chemin']);
363
+            } else {
364
+                $taille = @spip_getimagesize($on['chemin']);
365
+
366
+                // Si on a déjà demandé un survol directement ($onoff = off)
367
+                // ou qu'on a demandé uniquement le normal ($onoff = on)
368
+                // alors on ne cherche pas du tout le survol ici
369
+                if ($onoff != 'ON') {
370
+                    $off = '';
371
+                } else {
372
+                    // Sinon, c'est qu'on demande normal ET survol à la fois, donc on cherche maintenant le survol
373
+                    $off = quete_logo_objet($id, $objet, 'off');
374
+                }
375
+
376
+                // on retourne une url du type IMG/artonXX?timestamp
377
+                // qui permet de distinguer le changement de logo
378
+                // et placer un expire sur le dossier IMG/
379
+                $res = [
380
+                    $on['chemin'] . ($on['timestamp'] ? "?{$on['timestamp']}" : ''),
381
+                    ($off ? $off['chemin'] . ($off['timestamp'] ? "?{$off['timestamp']}" : '') : ''),
382
+                    (!$taille ? '' : (' ' . $taille[3]))
383
+                ];
384
+                $res['src'] = $res[0];
385
+                $res['logo_on'] = $res[0];
386
+                $res['logo_off'] = $res[1];
387
+                $res['width'] = ($taille ? $taille[0] : '');
388
+                $res['height'] = ($taille ? $taille[1] : '');
389
+
390
+                return $res;
391
+            }
392
+        } else {
393
+            if (defined('_LOGO_RUBRIQUE_DESACTIVER_HERITAGE')) {
394
+                return '';
395
+            } else {
396
+                if ($id_rubrique) {
397
+                    $cle_objet = 'id_rubrique';
398
+                    $id = $id_rubrique;
399
+                    $id_rubrique = 0;
400
+                } else {
401
+                    if ($id and $cle_objet == 'id_rubrique') {
402
+                        $id = quete_parent($id);
403
+                    } else {
404
+                        return '';
405
+                    }
406
+                }
407
+            }
408
+        }
409
+    }
410 410
 }
411 411
 
412 412
 /**
@@ -420,37 +420,37 @@  discard block
 block discarded – undo
420 420
  * 		"on" ou "off" suivant le logo normal ou survol
421 421
  **/
422 422
 function quete_logo_objet($id_objet, $objet, $mode) {
423
-	static $chercher_logo;
424
-	if (is_null($chercher_logo)) {
425
-		$chercher_logo = charger_fonction('chercher_logo', 'inc');
426
-	}
427
-	$cle_objet = id_table_objet($objet);
428
-
429
-	// On cherche pas la méthode classique
430
-	$infos_logo = $chercher_logo($id_objet, $cle_objet, $mode);
431
-	// Si la méthode classique a trouvé quelque chose, on utilise le nouveau format
432
-	if (!empty($infos_logo)) {
433
-		$infos_logo = [
434
-			'chemin' => $infos_logo[0],
435
-			'timestamp' => $infos_logo[4],
436
-		];
437
-	}
438
-
439
-	// On passe cette recherche de logo dans un pipeline
440
-	$infos_logo = pipeline(
441
-		'quete_logo_objet',
442
-		[
443
-			'args' => [
444
-				'id_objet' => $id_objet,
445
-				'objet' => $objet,
446
-				'cle_objet' => $cle_objet,
447
-				'mode' => $mode,
448
-			],
449
-			'data' => $infos_logo,
450
-		]
451
-	);
452
-
453
-	return $infos_logo;
423
+    static $chercher_logo;
424
+    if (is_null($chercher_logo)) {
425
+        $chercher_logo = charger_fonction('chercher_logo', 'inc');
426
+    }
427
+    $cle_objet = id_table_objet($objet);
428
+
429
+    // On cherche pas la méthode classique
430
+    $infos_logo = $chercher_logo($id_objet, $cle_objet, $mode);
431
+    // Si la méthode classique a trouvé quelque chose, on utilise le nouveau format
432
+    if (!empty($infos_logo)) {
433
+        $infos_logo = [
434
+            'chemin' => $infos_logo[0],
435
+            'timestamp' => $infos_logo[4],
436
+        ];
437
+    }
438
+
439
+    // On passe cette recherche de logo dans un pipeline
440
+    $infos_logo = pipeline(
441
+        'quete_logo_objet',
442
+        [
443
+            'args' => [
444
+                'id_objet' => $id_objet,
445
+                'objet' => $objet,
446
+                'cle_objet' => $cle_objet,
447
+                'mode' => $mode,
448
+            ],
449
+            'data' => $infos_logo,
450
+        ]
451
+    );
452
+
453
+    return $infos_logo;
454 454
 }
455 455
 
456 456
 /**
@@ -463,25 +463,25 @@  discard block
 block discarded – undo
463 463
  * @return bool|string
464 464
  */
465 465
 function quete_logo_file($row, $connect = null) {
466
-	include_spip('inc/documents');
467
-	$logo = vignette_logo_document($row, $connect);
468
-	if (!$logo) {
469
-		$logo = image_du_document($row, $connect);
470
-	}
471
-	if (!$logo) {
472
-		$f = charger_fonction('vignette', 'inc');
473
-		$logo = $f($row['extension'], false);
474
-	}
475
-	// si c'est une vignette type doc, la renvoyer direct
476
-	if (
477
-		strcmp($logo, _DIR_PLUGINS) == 0
478
-		or strcmp($logo, _DIR_PLUGINS_DIST) == 0
479
-		or strcmp($logo, _DIR_RACINE . 'prive/') == 0
480
-	) {
481
-		return $logo;
482
-	}
483
-
484
-	return get_spip_doc($logo);
466
+    include_spip('inc/documents');
467
+    $logo = vignette_logo_document($row, $connect);
468
+    if (!$logo) {
469
+        $logo = image_du_document($row, $connect);
470
+    }
471
+    if (!$logo) {
472
+        $f = charger_fonction('vignette', 'inc');
473
+        $logo = $f($row['extension'], false);
474
+    }
475
+    // si c'est une vignette type doc, la renvoyer direct
476
+    if (
477
+        strcmp($logo, _DIR_PLUGINS) == 0
478
+        or strcmp($logo, _DIR_PLUGINS_DIST) == 0
479
+        or strcmp($logo, _DIR_RACINE . 'prive/') == 0
480
+    ) {
481
+        return $logo;
482
+    }
483
+
484
+    return get_spip_doc($logo);
485 485
 }
486 486
 
487 487
 /**
@@ -509,20 +509,20 @@  discard block
 block discarded – undo
509 509
  */
510 510
 function quete_logo_document($row, $lien, $align, $mode_logo, $x, $y, $connect = null) {
511 511
 
512
-	include_spip('inc/documents');
513
-	$logo = '';
514
-	if (!in_array($mode_logo, ['icone', 'apercu'])) {
515
-		$logo = vignette_logo_document($row, $connect);
516
-	}
517
-	// si on veut explicitement la vignette, ne rien renvoyer si il n'y en a pas
518
-	if ($mode_logo == 'vignette' and !$logo) {
519
-		return '';
520
-	}
521
-	if ($mode_logo == 'icone') {
522
-		$row['fichier'] = '';
523
-	}
524
-
525
-	return vignette_automatique($logo, $row, $lien, $x, $y, $align, null, $connect);
512
+    include_spip('inc/documents');
513
+    $logo = '';
514
+    if (!in_array($mode_logo, ['icone', 'apercu'])) {
515
+        $logo = vignette_logo_document($row, $connect);
516
+    }
517
+    // si on veut explicitement la vignette, ne rien renvoyer si il n'y en a pas
518
+    if ($mode_logo == 'vignette' and !$logo) {
519
+        return '';
520
+    }
521
+    if ($mode_logo == 'icone') {
522
+        $row['fichier'] = '';
523
+    }
524
+
525
+    return vignette_automatique($logo, $row, $lien, $x, $y, $align, null, $connect);
526 526
 }
527 527
 
528 528
 /**
@@ -534,19 +534,19 @@  discard block
 block discarded – undo
534 534
  */
535 535
 function quete_html_logo($logo, $align, $lien) {
536 536
 
537
-	if (!is_array($logo)) {
538
-		return '';
539
-	}
540
-
541
-	$contexte = [];
542
-	foreach ($logo as $k => $v) {
543
-		if (!is_numeric($k)) {
544
-			$contexte[$k] = $v;
545
-		}
546
-	}
547
-	$contexte['align'] = $align;
548
-	$contexte['lien'] = $lien;
549
-	return recuperer_fond('modeles/logo', $contexte);
537
+    if (!is_array($logo)) {
538
+        return '';
539
+    }
540
+
541
+    $contexte = [];
542
+    foreach ($logo as $k => $v) {
543
+        if (!is_numeric($k)) {
544
+            $contexte[$k] = $v;
545
+        }
546
+    }
547
+    $contexte['align'] = $align;
548
+    $contexte['lien'] = $lien;
549
+    return recuperer_fond('modeles/logo', $contexte);
550 550
 }
551 551
 
552 552
 /**
@@ -560,14 +560,14 @@  discard block
 block discarded – undo
560 560
  * @return string|false
561 561
  */
562 562
 function document_spip_externe($fichier, $connect) {
563
-	if ($connect) {
564
-		$site = quete_meta('adresse_site', $connect);
565
-		if ($site) {
566
-			$dir = quete_meta('dir_img', $connect);
567
-			return "$site/$dir$fichier";
568
-		}
569
-	}
570
-	return false;
563
+    if ($connect) {
564
+        $site = quete_meta('adresse_site', $connect);
565
+        if ($site) {
566
+            $dir = quete_meta('dir_img', $connect);
567
+            return "$site/$dir$fichier";
568
+        }
569
+    }
570
+    return false;
571 571
 }
572 572
 
573 573
 /**
@@ -580,23 +580,23 @@  discard block
 block discarded – undo
580 580
  * @return string
581 581
  */
582 582
 function vignette_logo_document($row, $connect = '') {
583
-	if (!$row['id_vignette']) {
584
-		return '';
585
-	}
586
-	$fichier = quete_fichier($row['id_vignette'], $connect);
587
-	if ($url = document_spip_externe($fichier, $connect)) {
588
-		return $url;
589
-	}
590
-
591
-	$f = get_spip_doc($fichier);
592
-	if ($f and @file_exists($f)) {
593
-		return $f;
594
-	}
595
-	if ($row['mode'] !== 'vignette') {
596
-		return '';
597
-	}
598
-
599
-	return generer_url_entite($row['id_document'], 'document', '', '', $connect);
583
+    if (!$row['id_vignette']) {
584
+        return '';
585
+    }
586
+    $fichier = quete_fichier($row['id_vignette'], $connect);
587
+    if ($url = document_spip_externe($fichier, $connect)) {
588
+        return $url;
589
+    }
590
+
591
+    $f = get_spip_doc($fichier);
592
+    if ($f and @file_exists($f)) {
593
+        return $f;
594
+    }
595
+    if ($row['mode'] !== 'vignette') {
596
+        return '';
597
+    }
598
+
599
+    return generer_url_entite($row['id_document'], 'document', '', '', $connect);
600 600
 }
601 601
 
602 602
 /**
@@ -612,69 +612,69 @@  discard block
 block discarded – undo
612 612
  * @return bool|string
613 613
  */
614 614
 function calcul_exposer($id, $prim, $reference, $parent, $type, $connect = '') {
615
-	static $exposer = [];
616
-
617
-	// Que faut-il exposer ? Tous les elements de $reference
618
-	// ainsi que leur hierarchie ; on ne fait donc ce calcul
619
-	// qu'une fois (par squelette) et on conserve le resultat
620
-	// en static.
621
-	if (!isset($exposer[$m = md5(serialize($reference))][$prim])) {
622
-		$principal = isset($reference[$type]) ? $reference[$type] :
623
-			// cas de la pagination indecte @xx qui positionne la page avec l'id xx
624
-			// et donne la reference dynamique @type=xx dans le contexte
625
-			(isset($reference["@$type"]) ? $reference["@$type"] : '');
626
-		// le parent fournit en argument est le parent de $id, pas celui de $principal
627
-		// il n'est donc pas utile
628
-		$parent = 0;
629
-		if (!$principal) { // regarder si un enfant est dans le contexte, auquel cas il expose peut etre le parent courant
630
-			$enfants = ['id_rubrique' => ['id_article'], 'id_groupe' => ['id_mot']];
631
-			if (isset($enfants[$type])) {
632
-				foreach ($enfants[$type] as $t) {
633
-					if (
634
-						isset($reference[$t])
635
-						// cas de la reference donnee dynamiquement par la pagination
636
-						or isset($reference["@$t"])
637
-					) {
638
-						$type = $t;
639
-						$principal = isset($reference[$type]) ? $reference[$type] : $reference["@$type"];
640
-						continue;
641
-					}
642
-				}
643
-			}
644
-		}
645
-		$exposer[$m][$type] = [];
646
-		if ($principal) {
647
-			$principaux = is_array($principal) ? $principal : [$principal];
648
-			foreach ($principaux as $principal) {
649
-				$exposer[$m][$type][$principal] = true;
650
-				if ($type == 'id_mot') {
651
-					if (!$parent) {
652
-						$parent = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot=' . intval($principal), '', '', '', '', $connect);
653
-					}
654
-					if ($parent) {
655
-						$exposer[$m]['id_groupe'][$parent] = true;
656
-					}
657
-				} else {
658
-					if ($type != 'id_groupe') {
659
-						if (!$parent) {
660
-							if ($type == 'id_rubrique') {
661
-								$parent = $principal;
662
-							}
663
-							if ($type == 'id_article') {
664
-								$parent = quete_rubrique($principal, $connect);
665
-							}
666
-						}
667
-						do {
668
-							$exposer[$m]['id_rubrique'][$parent] = true;
669
-						} while ($parent = quete_parent($parent, $connect));
670
-					}
671
-				}
672
-			}
673
-		}
674
-	}
675
-
676
-	// And the winner is...
677
-	return isset($exposer[$m][$prim]) ? isset($exposer[$m][$prim][$id]) : '';
615
+    static $exposer = [];
616
+
617
+    // Que faut-il exposer ? Tous les elements de $reference
618
+    // ainsi que leur hierarchie ; on ne fait donc ce calcul
619
+    // qu'une fois (par squelette) et on conserve le resultat
620
+    // en static.
621
+    if (!isset($exposer[$m = md5(serialize($reference))][$prim])) {
622
+        $principal = isset($reference[$type]) ? $reference[$type] :
623
+            // cas de la pagination indecte @xx qui positionne la page avec l'id xx
624
+            // et donne la reference dynamique @type=xx dans le contexte
625
+            (isset($reference["@$type"]) ? $reference["@$type"] : '');
626
+        // le parent fournit en argument est le parent de $id, pas celui de $principal
627
+        // il n'est donc pas utile
628
+        $parent = 0;
629
+        if (!$principal) { // regarder si un enfant est dans le contexte, auquel cas il expose peut etre le parent courant
630
+            $enfants = ['id_rubrique' => ['id_article'], 'id_groupe' => ['id_mot']];
631
+            if (isset($enfants[$type])) {
632
+                foreach ($enfants[$type] as $t) {
633
+                    if (
634
+                        isset($reference[$t])
635
+                        // cas de la reference donnee dynamiquement par la pagination
636
+                        or isset($reference["@$t"])
637
+                    ) {
638
+                        $type = $t;
639
+                        $principal = isset($reference[$type]) ? $reference[$type] : $reference["@$type"];
640
+                        continue;
641
+                    }
642
+                }
643
+            }
644
+        }
645
+        $exposer[$m][$type] = [];
646
+        if ($principal) {
647
+            $principaux = is_array($principal) ? $principal : [$principal];
648
+            foreach ($principaux as $principal) {
649
+                $exposer[$m][$type][$principal] = true;
650
+                if ($type == 'id_mot') {
651
+                    if (!$parent) {
652
+                        $parent = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot=' . intval($principal), '', '', '', '', $connect);
653
+                    }
654
+                    if ($parent) {
655
+                        $exposer[$m]['id_groupe'][$parent] = true;
656
+                    }
657
+                } else {
658
+                    if ($type != 'id_groupe') {
659
+                        if (!$parent) {
660
+                            if ($type == 'id_rubrique') {
661
+                                $parent = $principal;
662
+                            }
663
+                            if ($type == 'id_article') {
664
+                                $parent = quete_rubrique($principal, $connect);
665
+                            }
666
+                        }
667
+                        do {
668
+                            $exposer[$m]['id_rubrique'][$parent] = true;
669
+                        } while ($parent = quete_parent($parent, $connect));
670
+                    }
671
+                }
672
+            }
673
+        }
674
+    }
675
+
676
+    // And the winner is...
677
+    return isset($exposer[$m][$prim]) ? isset($exposer[$m][$prim][$id]) : '';
678 678
 }
679 679
 
680 680
 /**
@@ -689,21 +689,21 @@  discard block
 block discarded – undo
689 689
  * @return int
690 690
  */
691 691
 function quete_debut_pagination($primary, $valeur, $pas, $iter) {
692
-	// on ne devrait pas arriver ici si la cle primaire est inexistante
693
-	// ou composee, mais verifions
694
-	if (!$primary or preg_match('/[,\s]/', $primary)) {
695
-		return 0;
696
-	}
697
-
698
-	$pos = 0;
699
-	while ($row = $iter->fetch() and $row[$primary] != $valeur) {
700
-		$pos++;
701
-	}
702
-	// si on a pas trouve
703
-	if (!$row or $row[$primary] != $valeur) {
704
-		return 0;
705
-	}
706
-
707
-	// sinon, calculer le bon numero de page
708
-	return floor($pos / $pas) * $pas;
692
+    // on ne devrait pas arriver ici si la cle primaire est inexistante
693
+    // ou composee, mais verifions
694
+    if (!$primary or preg_match('/[,\s]/', $primary)) {
695
+        return 0;
696
+    }
697
+
698
+    $pos = 0;
699
+    while ($row = $iter->fetch() and $row[$primary] != $valeur) {
700
+        $pos++;
701
+    }
702
+    // si on a pas trouve
703
+    if (!$row or $row[$primary] != $valeur) {
704
+        return 0;
705
+    }
706
+
707
+    // sinon, calculer le bon numero de page
708
+    return floor($pos / $pas) * $pas;
709 709
 }
Please login to merge, or discard this patch.
Spacing   +17 added lines, -18 removed lines patch added patch discarded remove patch
@@ -36,7 +36,7 @@  discard block
 block discarded – undo
36 36
 	return sql_getfetsel(
37 37
 		'virtuel',
38 38
 		'spip_articles',
39
-		['id_article=' . intval($id_article), "statut='publie'"],
39
+		['id_article='.intval($id_article), "statut='publie'"],
40 40
 		'',
41 41
 		'',
42 42
 		'',
@@ -81,7 +81,7 @@  discard block
 block discarded – undo
81 81
 			$cache_quete[$connect][$table][$id] = sql_fetsel(
82 82
 				$cache_quete[$connect][$table]['_select'],
83 83
 				$table,
84
-				$cache_quete[$connect][$table]['_id'] . '=' . intval($id),
84
+				$cache_quete[$connect][$table]['_id'].'='.intval($id),
85 85
 				'',
86 86
 				'',
87 87
 				'',
@@ -173,7 +173,7 @@  discard block
 block discarded – undo
173 173
 	return
174 174
 		(isset($GLOBALS['meta']['date_prochain_postdate'])
175 175
 			and $GLOBALS['meta']['date_prochain_postdate'] > time())
176
-			? "$champ_date<" . sql_quote(date('Y-m-d H:i:s', $GLOBALS['meta']['date_prochain_postdate']), $serveur)
176
+			? "$champ_date<".sql_quote(date('Y-m-d H:i:s', $GLOBALS['meta']['date_prochain_postdate']), $serveur)
177 177
 			: '1=1';
178 178
 }
179 179
 
@@ -232,7 +232,7 @@  discard block
 block discarded – undo
232 232
 				and $id_table = reset($objet)
233 233
 				and $objet = objet_type($id_table)
234 234
 			) {
235
-				$w = "$mstatut<>" . sql_quote($v);
235
+				$w = "$mstatut<>".sql_quote($v);
236 236
 
237 237
 				// retrouver l’id_auteur qui a filé un lien de prévisu éventuellement,
238 238
 				// sinon l’auteur en session
@@ -246,22 +246,22 @@  discard block
 block discarded – undo
246 246
 				}
247 247
 
248 248
 				// dans ce cas (admin en general), pas de filtrage sur ce statut
249
-				if (!autoriser('previsualiser' . $v, $objet, '', $id_auteur)) {
249
+				if (!autoriser('previsualiser'.$v, $objet, '', $id_auteur)) {
250 250
 					// si pas d'auteur identifie pas de sous-requete car pas d'article qui matche
251 251
 					if (!$id_auteur) {
252 252
 						$where[] = $w;
253 253
 					} else {
254 254
 						$primary = id_table_objet($objet);
255
-						$where[] = "($w OR $id_table.$primary IN (" . sql_get_select(
255
+						$where[] = "($w OR $id_table.$primary IN (".sql_get_select(
256 256
 							'ssss.id_objet',
257 257
 							'spip_auteurs_liens AS ssss',
258
-							'ssss.objet=' . sql_quote($objet) . ' AND ssss.id_auteur=' . intval($id_auteur),
258
+							'ssss.objet='.sql_quote($objet).' AND ssss.id_auteur='.intval($id_auteur),
259 259
 							'',
260 260
 							'',
261 261
 							'',
262 262
 							'',
263 263
 							$serveur
264
-						) . '))';
264
+						).'))';
265 265
 					}
266 266
 				}
267 267
 			} // ignorer ce statut si on ne sait pas comment le filtrer
@@ -299,7 +299,7 @@  discard block
 block discarded – undo
299 299
  * @return array|bool|null
300 300
  */
301 301
 function quete_fichier($id_document, $serveur = '') {
302
-	return sql_getfetsel('fichier', 'spip_documents', ('id_document=' . intval($id_document)), '', [], '', '', $serveur);
302
+	return sql_getfetsel('fichier', 'spip_documents', ('id_document='.intval($id_document)), '', [], '', '', $serveur);
303 303
 }
304 304
 
305 305
 /**
@@ -310,7 +310,7 @@  discard block
 block discarded – undo
310 310
  * @return array|bool
311 311
  */
312 312
 function quete_document($id_document, $serveur = '') {
313
-	return sql_fetsel('*', 'spip_documents', ('id_document=' . intval($id_document)), '', [], '', '', $serveur);
313
+	return sql_fetsel('*', 'spip_documents', ('id_document='.intval($id_document)), '', [], '', '', $serveur);
314 314
 }
315 315
 
316 316
 /**
@@ -321,7 +321,7 @@  discard block
 block discarded – undo
321 321
  * @return array|bool|null
322 322
  */
323 323
 function quete_meta($nom, $serveur) {
324
-	return sql_getfetsel('valeur', 'spip_meta', 'nom=' . sql_quote($nom), '', '', '', '', $serveur);
324
+	return sql_getfetsel('valeur', 'spip_meta', 'nom='.sql_quote($nom), '', '', '', '', $serveur);
325 325
 }
326 326
 
327 327
 /**
@@ -377,9 +377,9 @@  discard block
 block discarded – undo
377 377
 				// qui permet de distinguer le changement de logo
378 378
 				// et placer un expire sur le dossier IMG/
379 379
 				$res = [
380
-					$on['chemin'] . ($on['timestamp'] ? "?{$on['timestamp']}" : ''),
381
-					($off ? $off['chemin'] . ($off['timestamp'] ? "?{$off['timestamp']}" : '') : ''),
382
-					(!$taille ? '' : (' ' . $taille[3]))
380
+					$on['chemin'].($on['timestamp'] ? "?{$on['timestamp']}" : ''),
381
+					($off ? $off['chemin'].($off['timestamp'] ? "?{$off['timestamp']}" : '') : ''),
382
+					(!$taille ? '' : (' '.$taille[3]))
383 383
 				];
384 384
 				$res['src'] = $res[0];
385 385
 				$res['logo_on'] = $res[0];
@@ -476,7 +476,7 @@  discard block
 block discarded – undo
476 476
 	if (
477 477
 		strcmp($logo, _DIR_PLUGINS) == 0
478 478
 		or strcmp($logo, _DIR_PLUGINS_DIST) == 0
479
-		or strcmp($logo, _DIR_RACINE . 'prive/') == 0
479
+		or strcmp($logo, _DIR_RACINE.'prive/') == 0
480 480
 	) {
481 481
 		return $logo;
482 482
 	}
@@ -619,8 +619,7 @@  discard block
 block discarded – undo
619 619
 	// qu'une fois (par squelette) et on conserve le resultat
620 620
 	// en static.
621 621
 	if (!isset($exposer[$m = md5(serialize($reference))][$prim])) {
622
-		$principal = isset($reference[$type]) ? $reference[$type] :
623
-			// cas de la pagination indecte @xx qui positionne la page avec l'id xx
622
+		$principal = isset($reference[$type]) ? $reference[$type] : // cas de la pagination indecte @xx qui positionne la page avec l'id xx
624 623
 			// et donne la reference dynamique @type=xx dans le contexte
625 624
 			(isset($reference["@$type"]) ? $reference["@$type"] : '');
626 625
 		// le parent fournit en argument est le parent de $id, pas celui de $principal
@@ -649,7 +648,7 @@  discard block
 block discarded – undo
649 648
 				$exposer[$m][$type][$principal] = true;
650 649
 				if ($type == 'id_mot') {
651 650
 					if (!$parent) {
652
-						$parent = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot=' . intval($principal), '', '', '', '', $connect);
651
+						$parent = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot='.intval($principal), '', '', '', '', $connect);
653 652
 					}
654 653
 					if ($parent) {
655 654
 						$exposer[$m]['id_groupe'][$parent] = true;
Please login to merge, or discard this patch.
ecrire/public/references.php 2 patches
Indentation   +521 added lines, -521 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Compilateur\References
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -41,14 +41,14 @@  discard block
 block discarded – undo
41 41
  *     - '' si une référence explicite incorrecte est envoyée
42 42
  */
43 43
 function index_boucle($p) {
44
-	if (strlen($p->nom_boucle)) {
45
-		// retourne l’index explicite demandé s’il existe
46
-		if (!empty($p->boucles[$p->nom_boucle])) {
47
-			return $p->nom_boucle;
48
-		}
49
-		return '';
50
-	}
51
-	return $p->id_boucle;
44
+    if (strlen($p->nom_boucle)) {
45
+        // retourne l’index explicite demandé s’il existe
46
+        if (!empty($p->boucles[$p->nom_boucle])) {
47
+            return $p->nom_boucle;
48
+        }
49
+        return '';
50
+    }
51
+    return $p->id_boucle;
52 52
 }
53 53
 
54 54
 
@@ -71,17 +71,17 @@  discard block
 block discarded – undo
71 71
  *     - '' si une référence explicite incorrecte est envoyée
72 72
  */
73 73
 function index_boucle_mere($p) {
74
-	if (strlen($p->nom_boucle)) {
75
-		// retourne l’index explicite demandé s’il existe
76
-		if (!empty($p->boucles[$p->nom_boucle])) {
77
-			return $p->nom_boucle;
78
-		}
79
-		return '';
80
-	}
81
-	if (!empty($p->descr['id_mere'])) {
82
-		return $p->descr['id_mere'];
83
-	}
84
-	return '';
74
+    if (strlen($p->nom_boucle)) {
75
+        // retourne l’index explicite demandé s’il existe
76
+        if (!empty($p->boucles[$p->nom_boucle])) {
77
+            return $p->nom_boucle;
78
+        }
79
+        return '';
80
+    }
81
+    if (!empty($p->descr['id_mere'])) {
82
+        return $p->descr['id_mere'];
83
+    }
84
+    return '';
85 85
 }
86 86
 
87 87
 /**
@@ -115,74 +115,74 @@  discard block
 block discarded – undo
115 115
  *     Code PHP pour obtenir le champ SQL
116 116
  */
117 117
 function index_pile(
118
-	$idb,
119
-	$nom_champ,
120
-	&$boucles,
121
-	$explicite = '',
122
-	$defaut = null,
123
-	$remonte_pile = true,
124
-	$select = true
118
+    $idb,
119
+    $nom_champ,
120
+    &$boucles,
121
+    $explicite = '',
122
+    $defaut = null,
123
+    $remonte_pile = true,
124
+    $select = true
125 125
 ) {
126
-	if (!is_string($defaut)) {
127
-		$defaut = '@$Pile[0][\'' . strtolower($nom_champ) . '\']';
128
-	}
129
-
130
-	$idb_origine = $idb;
131
-	$nom_champ_origine = $nom_champ;
132
-
133
-	$i = 0;
134
-	if (strlen($explicite)) {
135
-		// Recherche d'un champ dans un etage superieur
136
-		while (($idb !== $explicite) && ($idb !== '')) {
137
-			#	spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
138
-			$i++;
139
-			$idb = $boucles[$idb]->id_parent;
140
-		}
141
-	}
142
-
143
-	#	spip_log("Cherche: $nom_champ a partir de '$idb'");
144
-	$nom_champ = strtolower($nom_champ);
145
-	$conditionnel = [];
146
-	// attention: entre la boucle nommee 0, "" et le tableau vide,
147
-	// il y a incoherences qu'il vaut mieux eviter
148
-	while (isset($boucles[$idb])) {
149
-		$joker = true;
150
-		// modifie $joker si tous les champs sont autorisés.
151
-		// $t = le select pour le champ, si on l'a trouvé (ou si joker)
152
-		// $c = le nom du champ demandé
153
-		list($t, $c) = index_tables_en_pile($idb, $nom_champ, $boucles, $joker);
154
-		if ($t) {
155
-			if ($select and !in_array($t, $boucles[$idb]->select)) {
156
-				$boucles[$idb]->select[] = $t;
157
-			}
158
-			// renseigner la boucle source de ce champ pour les traitements
159
-			$boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
160
-			$champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
161
-			if (!$joker) {
162
-				return index_compose($conditionnel, $champ);
163
-			}
164
-
165
-			// tant que l'on trouve des tables avec joker, on continue
166
-			// avec la boucle parente et on conditionne à l'exécution
167
-			// la présence du champ. Si le champ existe à l'exécution
168
-			// dans une boucle, il est pris, sinon on le cherche dans le parent...
169
-			$conditionnel[] = "isset($champ)?$champ";
170
-		}
171
-
172
-		if ($remonte_pile) {
173
-			#	spip_log("On remonte vers $i");
174
-			// Sinon on remonte d'un cran
175
-			$idb = $boucles[$idb]->id_parent;
176
-			$i++;
177
-		} else {
178
-			$idb = null;
179
-		}
180
-	}
181
-
182
-	#	spip_log("Pas vu $nom_champ");
183
-	// esperons qu'il y sera
184
-	// ou qu'on a fourni une valeur par "defaut" plus pertinent
185
-	return index_compose($conditionnel, $defaut);
126
+    if (!is_string($defaut)) {
127
+        $defaut = '@$Pile[0][\'' . strtolower($nom_champ) . '\']';
128
+    }
129
+
130
+    $idb_origine = $idb;
131
+    $nom_champ_origine = $nom_champ;
132
+
133
+    $i = 0;
134
+    if (strlen($explicite)) {
135
+        // Recherche d'un champ dans un etage superieur
136
+        while (($idb !== $explicite) && ($idb !== '')) {
137
+            #	spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'");
138
+            $i++;
139
+            $idb = $boucles[$idb]->id_parent;
140
+        }
141
+    }
142
+
143
+    #	spip_log("Cherche: $nom_champ a partir de '$idb'");
144
+    $nom_champ = strtolower($nom_champ);
145
+    $conditionnel = [];
146
+    // attention: entre la boucle nommee 0, "" et le tableau vide,
147
+    // il y a incoherences qu'il vaut mieux eviter
148
+    while (isset($boucles[$idb])) {
149
+        $joker = true;
150
+        // modifie $joker si tous les champs sont autorisés.
151
+        // $t = le select pour le champ, si on l'a trouvé (ou si joker)
152
+        // $c = le nom du champ demandé
153
+        list($t, $c) = index_tables_en_pile($idb, $nom_champ, $boucles, $joker);
154
+        if ($t) {
155
+            if ($select and !in_array($t, $boucles[$idb]->select)) {
156
+                $boucles[$idb]->select[] = $t;
157
+            }
158
+            // renseigner la boucle source de ce champ pour les traitements
159
+            $boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
160
+            $champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
161
+            if (!$joker) {
162
+                return index_compose($conditionnel, $champ);
163
+            }
164
+
165
+            // tant que l'on trouve des tables avec joker, on continue
166
+            // avec la boucle parente et on conditionne à l'exécution
167
+            // la présence du champ. Si le champ existe à l'exécution
168
+            // dans une boucle, il est pris, sinon on le cherche dans le parent...
169
+            $conditionnel[] = "isset($champ)?$champ";
170
+        }
171
+
172
+        if ($remonte_pile) {
173
+            #	spip_log("On remonte vers $i");
174
+            // Sinon on remonte d'un cran
175
+            $idb = $boucles[$idb]->id_parent;
176
+            $i++;
177
+        } else {
178
+            $idb = null;
179
+        }
180
+    }
181
+
182
+    #	spip_log("Pas vu $nom_champ");
183
+    // esperons qu'il y sera
184
+    // ou qu'on a fourni une valeur par "defaut" plus pertinent
185
+    return index_compose($conditionnel, $defaut);
186 186
 }
187 187
 
188 188
 /**
@@ -196,12 +196,12 @@  discard block
 block discarded – undo
196 196
  * @return string              Code PHP complet de recherche d'un champ
197 197
  */
198 198
 function index_compose($conditionnel, $defaut) {
199
-	while ($c = array_pop($conditionnel)) {
200
-		// si on passe defaut = '', ne pas générer d'erreur de compilation.
201
-		$defaut = "($c:(" . ($defaut ? $defaut : "''") . '))';
202
-	}
199
+    while ($c = array_pop($conditionnel)) {
200
+        // si on passe defaut = '', ne pas générer d'erreur de compilation.
201
+        $defaut = "($c:(" . ($defaut ? $defaut : "''") . '))';
202
+    }
203 203
 
204
-	return $defaut;
204
+    return $defaut;
205 205
 }
206 206
 
207 207
 /**
@@ -237,77 +237,77 @@  discard block
 block discarded – undo
237 237
  **/
238 238
 function index_tables_en_pile($idb, $nom_champ, &$boucles, &$joker) {
239 239
 
240
-	$r = $boucles[$idb]->type_requete;
241
-	// boucle recursive, c'est foutu...
242
-	if ($r == TYPE_RECURSIF) {
243
-		return [];
244
-	}
245
-	if (!$r) {
246
-		$joker = false; // indiquer a l'appelant
247
-		# continuer pour chercher l'erreur suivante
248
-		return ["'#" . $r . ':' . $nom_champ . "'", ''];
249
-	}
250
-
251
-	$desc = $boucles[$idb]->show;
252
-	// le nom du champ est il une exception de la table ? un alias ?
253
-	$excep = isset($GLOBALS['exceptions_des_tables'][$r]) ? $GLOBALS['exceptions_des_tables'][$r] : '';
254
-	if ($excep) {
255
-		$excep = isset($excep[$nom_champ]) ? $excep[$nom_champ] : '';
256
-	}
257
-	if ($excep) {
258
-		$joker = false; // indiquer a l'appelant
259
-		return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
260
-	} // pas d'alias. Le champ existe t'il ?
261
-	else {
262
-		// le champ est réellement présent, on le prend.
263
-		if (isset($desc['field'][$nom_champ])) {
264
-			$t = $boucles[$idb]->id_table;
265
-			$joker = false; // indiquer a l'appelant
266
-			return ["$t.$nom_champ", $nom_champ];
267
-		}
268
-		// Tous les champs sont-ils acceptés ?
269
-		// Si oui, on retourne le champ, et on lève le flag joker
270
-		// C'est le cas des itérateurs DATA qui acceptent tout
271
-		// et testent la présence du champ à l'exécution et non à la compilation
272
-		// car ils ne connaissent pas ici leurs contenus.
273
-		elseif (
240
+    $r = $boucles[$idb]->type_requete;
241
+    // boucle recursive, c'est foutu...
242
+    if ($r == TYPE_RECURSIF) {
243
+        return [];
244
+    }
245
+    if (!$r) {
246
+        $joker = false; // indiquer a l'appelant
247
+        # continuer pour chercher l'erreur suivante
248
+        return ["'#" . $r . ':' . $nom_champ . "'", ''];
249
+    }
250
+
251
+    $desc = $boucles[$idb]->show;
252
+    // le nom du champ est il une exception de la table ? un alias ?
253
+    $excep = isset($GLOBALS['exceptions_des_tables'][$r]) ? $GLOBALS['exceptions_des_tables'][$r] : '';
254
+    if ($excep) {
255
+        $excep = isset($excep[$nom_champ]) ? $excep[$nom_champ] : '';
256
+    }
257
+    if ($excep) {
258
+        $joker = false; // indiquer a l'appelant
259
+        return index_exception($boucles[$idb], $desc, $nom_champ, $excep);
260
+    } // pas d'alias. Le champ existe t'il ?
261
+    else {
262
+        // le champ est réellement présent, on le prend.
263
+        if (isset($desc['field'][$nom_champ])) {
264
+            $t = $boucles[$idb]->id_table;
265
+            $joker = false; // indiquer a l'appelant
266
+            return ["$t.$nom_champ", $nom_champ];
267
+        }
268
+        // Tous les champs sont-ils acceptés ?
269
+        // Si oui, on retourne le champ, et on lève le flag joker
270
+        // C'est le cas des itérateurs DATA qui acceptent tout
271
+        // et testent la présence du champ à l'exécution et non à la compilation
272
+        // car ils ne connaissent pas ici leurs contenus.
273
+        elseif (
274 274
 /*$joker AND */
275
-			isset($desc['field']['*'])
276
-		) {
277
-			$joker = true; // indiquer a l'appelant
278
-			return [$nom_champ, $nom_champ];
279
-		}
280
-		// pas d'alias, pas de champ, pas de joker...
281
-		// tenter via une jointure...
282
-		else {
283
-			$joker = false; // indiquer a l'appelant
284
-			// regarder si le champ est deja dans une jointure existante
285
-			// sinon, si il y a des joitures explicites, la construire
286
-			if (!$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb])) {
287
-				if ($boucles[$idb]->jointures_explicites) {
288
-					// [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!!
289
-					// fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites
290
-					// mais est-ce ce qu'on veut ?
291
-					$jointures = preg_split('/\s+/', $boucles[$idb]->jointures_explicites);
292
-					if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) {
293
-						$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]);
294
-					}
295
-				}
296
-			}
297
-			if ($t) {
298
-				// si on a trouvé une jointure possible, on fait comme
299
-				// si c'était une exception pour le champ demandé
300
-				return index_exception(
301
-					$boucles[$idb],
302
-					$desc,
303
-					$nom_champ,
304
-					[$t[1]['id_table'], reset($t[2])]
305
-				);
306
-			}
307
-
308
-			return ['', ''];
309
-		}
310
-	}
275
+            isset($desc['field']['*'])
276
+        ) {
277
+            $joker = true; // indiquer a l'appelant
278
+            return [$nom_champ, $nom_champ];
279
+        }
280
+        // pas d'alias, pas de champ, pas de joker...
281
+        // tenter via une jointure...
282
+        else {
283
+            $joker = false; // indiquer a l'appelant
284
+            // regarder si le champ est deja dans une jointure existante
285
+            // sinon, si il y a des joitures explicites, la construire
286
+            if (!$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb])) {
287
+                if ($boucles[$idb]->jointures_explicites) {
288
+                    // [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!!
289
+                    // fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites
290
+                    // mais est-ce ce qu'on veut ?
291
+                    $jointures = preg_split('/\s+/', $boucles[$idb]->jointures_explicites);
292
+                    if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) {
293
+                        $t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]);
294
+                    }
295
+                }
296
+            }
297
+            if ($t) {
298
+                // si on a trouvé une jointure possible, on fait comme
299
+                // si c'était une exception pour le champ demandé
300
+                return index_exception(
301
+                    $boucles[$idb],
302
+                    $desc,
303
+                    $nom_champ,
304
+                    [$t[1]['id_table'], reset($t[2])]
305
+                );
306
+            }
307
+
308
+            return ['', ''];
309
+        }
310
+    }
311 311
 }
312 312
 
313 313
 
@@ -335,52 +335,52 @@  discard block
 block discarded – undo
335 335
  *     est une expression pour le SELECT de la boucle du style "mots.titre AS titre_mot"
336 336
  **/
337 337
 function index_exception(&$boucle, $desc, $nom_champ, $excep) {
338
-	static $trouver_table;
339
-	if (!$trouver_table) {
340
-		$trouver_table = charger_fonction('trouver_table', 'base');
341
-	}
342
-
343
-	if (is_array($excep)) {
344
-		// permettre aux plugins de gerer eux meme des jointures derogatoire ingerables
345
-		$t = null;
346
-		if (count($excep) == 3) {
347
-			$index_exception_derogatoire = array_pop($excep);
348
-			$t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
349
-		}
350
-		if ($t == null) {
351
-			list($e, $x) = $excep;  #PHP4 affecte de gauche a droite
352
-			$excep = $x;    #PHP5 de droite a gauche !
353
-			$j = $trouver_table($e, $boucle->sql_serveur);
354
-			if (!$j) {
355
-				return ['', ''];
356
-			}
357
-			$e = $j['table'];
358
-			if (!$t = array_search($e, $boucle->from)) {
359
-				$k = $j['key']['PRIMARY KEY'];
360
-				if (strpos($k, ',')) {
361
-					$l = (preg_split('/\s*,\s*/', $k));
362
-					$k = $desc['key']['PRIMARY KEY'];
363
-					if (!in_array($k, $l)) {
364
-						spip_log("jointure impossible $e " . join(',', $l));
365
-
366
-						return ['', ''];
367
-					}
368
-				}
369
-				$k = [$boucle->id_table, [$e], $k];
370
-				fabrique_jointures($boucle, [$k]);
371
-				$t = array_search($e, $boucle->from);
372
-			}
373
-		}
374
-	} else {
375
-		$t = $boucle->id_table;
376
-	}
377
-	// demander a SQL de gerer le synonyme
378
-	// ca permet que excep soit dynamique (Cedric, 2/3/06)
379
-	if ($excep != $nom_champ) {
380
-		$excep .= ' AS ' . $nom_champ;
381
-	}
382
-
383
-	return ["$t.$excep", $nom_champ];
338
+    static $trouver_table;
339
+    if (!$trouver_table) {
340
+        $trouver_table = charger_fonction('trouver_table', 'base');
341
+    }
342
+
343
+    if (is_array($excep)) {
344
+        // permettre aux plugins de gerer eux meme des jointures derogatoire ingerables
345
+        $t = null;
346
+        if (count($excep) == 3) {
347
+            $index_exception_derogatoire = array_pop($excep);
348
+            $t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
349
+        }
350
+        if ($t == null) {
351
+            list($e, $x) = $excep;  #PHP4 affecte de gauche a droite
352
+            $excep = $x;    #PHP5 de droite a gauche !
353
+            $j = $trouver_table($e, $boucle->sql_serveur);
354
+            if (!$j) {
355
+                return ['', ''];
356
+            }
357
+            $e = $j['table'];
358
+            if (!$t = array_search($e, $boucle->from)) {
359
+                $k = $j['key']['PRIMARY KEY'];
360
+                if (strpos($k, ',')) {
361
+                    $l = (preg_split('/\s*,\s*/', $k));
362
+                    $k = $desc['key']['PRIMARY KEY'];
363
+                    if (!in_array($k, $l)) {
364
+                        spip_log("jointure impossible $e " . join(',', $l));
365
+
366
+                        return ['', ''];
367
+                    }
368
+                }
369
+                $k = [$boucle->id_table, [$e], $k];
370
+                fabrique_jointures($boucle, [$k]);
371
+                $t = array_search($e, $boucle->from);
372
+            }
373
+        }
374
+    } else {
375
+        $t = $boucle->id_table;
376
+    }
377
+    // demander a SQL de gerer le synonyme
378
+    // ca permet que excep soit dynamique (Cedric, 2/3/06)
379
+    if ($excep != $nom_champ) {
380
+        $excep .= ' AS ' . $nom_champ;
381
+    }
382
+
383
+    return ["$t.$excep", $nom_champ];
384 384
 }
385 385
 
386 386
 /**
@@ -405,7 +405,7 @@  discard block
 block discarded – undo
405 405
  *     Code PHP pour retrouver le champ
406 406
  */
407 407
 function champ_sql($champ, $p, $defaut = null, $remonte_pile = true) {
408
-	return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile);
408
+    return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile);
409 409
 }
410 410
 
411 411
 
@@ -425,9 +425,9 @@  discard block
 block discarded – undo
425 425
  *     Code PHP pour d'exécution de la balise et de ses filtres
426 426
  **/
427 427
 function calculer_champ($p) {
428
-	$p = calculer_balise($p->nom_champ, $p);
428
+    $p = calculer_balise($p->nom_champ, $p);
429 429
 
430
-	return applique_filtres($p);
430
+    return applique_filtres($p);
431 431
 }
432 432
 
433 433
 
@@ -464,26 +464,26 @@  discard block
 block discarded – undo
464 464
  **/
465 465
 function calculer_balise($nom, $p) {
466 466
 
467
-	// S'agit-t-il d'une balise_XXXX[_dist]() ?
468
-	if ($f = charger_fonction($nom, 'balise', true)) {
469
-		$p->balise_calculee = true;
470
-		$res = $f($p);
471
-		if ($res !== null and is_object($res)) {
472
-			return $res;
473
-		}
474
-	}
475
-
476
-	// Certaines des balises comportant un _ sont generiques
477
-	if ($balise_generique = chercher_balise_generique($nom)) {
478
-		$res = $balise_generique['fonction_generique']($p);
479
-		if ($res !== null and is_object($res)) {
480
-			return $res;
481
-		}
482
-	}
483
-
484
-	$f = charger_fonction('DEFAUT', 'calculer_balise');
485
-
486
-	return $f($nom, $p);
467
+    // S'agit-t-il d'une balise_XXXX[_dist]() ?
468
+    if ($f = charger_fonction($nom, 'balise', true)) {
469
+        $p->balise_calculee = true;
470
+        $res = $f($p);
471
+        if ($res !== null and is_object($res)) {
472
+            return $res;
473
+        }
474
+    }
475
+
476
+    // Certaines des balises comportant un _ sont generiques
477
+    if ($balise_generique = chercher_balise_generique($nom)) {
478
+        $res = $balise_generique['fonction_generique']($p);
479
+        if ($res !== null and is_object($res)) {
480
+            return $res;
481
+        }
482
+    }
483
+
484
+    $f = charger_fonction('DEFAUT', 'calculer_balise');
485
+
486
+    return $f($nom, $p);
487 487
 }
488 488
 
489 489
 
@@ -511,37 +511,37 @@  discard block
 block discarded – undo
511 511
  **/
512 512
 function calculer_balise_DEFAUT_dist($nom, $p) {
513 513
 
514
-	// ca pourrait etre un champ SQL homonyme,
515
-	$p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
516
-
517
-	// compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
518
-	// il faut recracher {...} quand ce n'est finalement pas des args
519
-	if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) {
520
-		$code = addslashes($p->fonctions[0][1]);
521
-		$p->code .= " . '$code'";
522
-	}
523
-
524
-	// ne pas passer le filtre securite sur les id_xxx
525
-	if (strpos($nom, 'ID_') === 0) {
526
-		$p->interdire_scripts = false;
527
-	}
528
-
529
-	// Compatibilite ascendante avec les couleurs html (#FEFEFE) :
530
-	// SI le champ SQL n'est pas trouve
531
-	// ET si la balise a une forme de couleur
532
-	// ET s'il n'y a ni filtre ni etoile
533
-	// ALORS retourner la couleur.
534
-	// Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)]
535
-	if (
536
-		preg_match('/^[A-F]{1,6}$/i', $nom)
537
-		and !$p->etoile
538
-		and !$p->fonctions
539
-	) {
540
-		$p->code = "'#$nom'";
541
-		$p->interdire_scripts = false;
542
-	}
543
-
544
-	return $p;
514
+    // ca pourrait etre un champ SQL homonyme,
515
+    $p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle);
516
+
517
+    // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
518
+    // il faut recracher {...} quand ce n'est finalement pas des args
519
+    if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) {
520
+        $code = addslashes($p->fonctions[0][1]);
521
+        $p->code .= " . '$code'";
522
+    }
523
+
524
+    // ne pas passer le filtre securite sur les id_xxx
525
+    if (strpos($nom, 'ID_') === 0) {
526
+        $p->interdire_scripts = false;
527
+    }
528
+
529
+    // Compatibilite ascendante avec les couleurs html (#FEFEFE) :
530
+    // SI le champ SQL n'est pas trouve
531
+    // ET si la balise a une forme de couleur
532
+    // ET s'il n'y a ni filtre ni etoile
533
+    // ALORS retourner la couleur.
534
+    // Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)]
535
+    if (
536
+        preg_match('/^[A-F]{1,6}$/i', $nom)
537
+        and !$p->etoile
538
+        and !$p->fonctions
539
+    ) {
540
+        $p->code = "'#$nom'";
541
+        $p->interdire_scripts = false;
542
+    }
543
+
544
+    return $p;
545 545
 }
546 546
 
547 547
 
@@ -584,39 +584,39 @@  discard block
 block discarded – undo
584 584
  **/
585 585
 function calculer_balise_dynamique($p, $nom, $l, $supp = []) {
586 586
 
587
-	if (!balise_distante_interdite($p)) {
588
-		$p->code = "''";
589
-
590
-		return $p;
591
-	}
592
-	// compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
593
-	// il faut recracher {...} quand ce n'est finalement pas des args
594
-	if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) {
595
-		$p->fonctions = null;
596
-	}
597
-
598
-	if ($p->param and ($c = $p->param[0])) {
599
-		// liste d'arguments commence toujours par la chaine vide
600
-		array_shift($c);
601
-		// construire la liste d'arguments comme pour un filtre
602
-		$param = compose_filtres_args($p, $c, ',');
603
-	} else {
604
-		$param = '';
605
-	}
606
-	$collecte = collecter_balise_dynamique($l, $p, $nom);
607
-
608
-	$p->code = sprintf(
609
-		CODE_EXECUTER_BALISE,
610
-		$nom,
611
-		join(',', $collecte),
612
-		($collecte ? $param : substr($param, 1)), # virer la virgule
613
-		memoriser_contexte_compil($p),
614
-		(!$supp ? '' : (', ' . join(',', $supp)))
615
-	);
616
-
617
-	$p->interdire_scripts = false;
618
-
619
-	return $p;
587
+    if (!balise_distante_interdite($p)) {
588
+        $p->code = "''";
589
+
590
+        return $p;
591
+    }
592
+    // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour
593
+    // il faut recracher {...} quand ce n'est finalement pas des args
594
+    if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) {
595
+        $p->fonctions = null;
596
+    }
597
+
598
+    if ($p->param and ($c = $p->param[0])) {
599
+        // liste d'arguments commence toujours par la chaine vide
600
+        array_shift($c);
601
+        // construire la liste d'arguments comme pour un filtre
602
+        $param = compose_filtres_args($p, $c, ',');
603
+    } else {
604
+        $param = '';
605
+    }
606
+    $collecte = collecter_balise_dynamique($l, $p, $nom);
607
+
608
+    $p->code = sprintf(
609
+        CODE_EXECUTER_BALISE,
610
+        $nom,
611
+        join(',', $collecte),
612
+        ($collecte ? $param : substr($param, 1)), # virer la virgule
613
+        memoriser_contexte_compil($p),
614
+        (!$supp ? '' : (', ' . join(',', $supp)))
615
+    );
616
+
617
+    $p->interdire_scripts = false;
618
+
619
+    return $p;
620 620
 }
621 621
 
622 622
 
@@ -646,13 +646,13 @@  discard block
 block discarded – undo
646 646
  *     Liste des codes PHP d'éxecution des balises collectées
647 647
  **/
648 648
 function collecter_balise_dynamique($l, &$p, $nom) {
649
-	$args = [];
650
-	foreach ($l as $c) {
651
-		$x = calculer_balise($c, $p);
652
-		$args[] = $x->code;
653
-	}
649
+    $args = [];
650
+    foreach ($l as $c) {
651
+        $x = calculer_balise($c, $p);
652
+        $args[] = $x->code;
653
+    }
654 654
 
655
-	return $args;
655
+    return $args;
656 656
 }
657 657
 
658 658
 
@@ -667,22 +667,22 @@  discard block
 block discarded – undo
667 667
  *     Nom de la connexion
668 668
  **/
669 669
 function trouver_nom_serveur_distant($p) {
670
-	$nom = $p->id_boucle;
671
-	if (
672
-		$nom
673
-		and isset($p->boucles[$nom])
674
-	) {
675
-		$s = $p->boucles[$nom]->sql_serveur;
676
-		if (
677
-			strlen($s)
678
-			and strlen($serveur = strtolower($s))
679
-			and !in_array($serveur, $GLOBALS['exception_des_connect'])
680
-		) {
681
-			return $serveur;
682
-		}
683
-	}
684
-
685
-	return '';
670
+    $nom = $p->id_boucle;
671
+    if (
672
+        $nom
673
+        and isset($p->boucles[$nom])
674
+    ) {
675
+        $s = $p->boucles[$nom]->sql_serveur;
676
+        if (
677
+            strlen($s)
678
+            and strlen($serveur = strtolower($s))
679
+            and !in_array($serveur, $GLOBALS['exception_des_connect'])
680
+        ) {
681
+            return $serveur;
682
+        }
683
+    }
684
+
685
+    return '';
686 686
 }
687 687
 
688 688
 
@@ -706,15 +706,15 @@  discard block
 block discarded – undo
706 706
  *     - false : La balise est interdite car le serveur est distant
707 707
  **/
708 708
 function balise_distante_interdite($p) {
709
-	$nom = $p->id_boucle;
709
+    $nom = $p->id_boucle;
710 710
 
711
-	if ($nom and trouver_nom_serveur_distant($p)) {
712
-		spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
711
+    if ($nom and trouver_nom_serveur_distant($p)) {
712
+        spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
713 713
 
714
-		return false;
715
-	}
714
+        return false;
715
+    }
716 716
 
717
-	return true;
717
+    return true;
718 718
 }
719 719
 
720 720
 
@@ -725,84 +725,84 @@  discard block
 block discarded – undo
725 725
 // https://code.spip.net/@champs_traitements
726 726
 function champs_traitements($p) {
727 727
 
728
-	if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) {
729
-		$ps = $GLOBALS['table_des_traitements'][$p->nom_champ];
730
-	} else {
731
-		// quand on utilise un traitement catch-all *
732
-		// celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
733
-		// leur propre securite
734
-		if (!$p->balise_calculee) {
735
-			$ps = $GLOBALS['table_des_traitements']['*'];
736
-		} else {
737
-			$ps = false;
738
-		}
739
-	}
740
-
741
-	if (is_array($ps)) {
742
-		// Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
743
-		$idb = index_boucle($p);
744
-		// si le champ a ete trouve dans une boucle parente sa source est renseignee ici
745
-		if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) {
746
-			$idb = $p->boucles[$idb]->index_champ[$p->nom_champ];
747
-		}
748
-
749
-		// mais on peut aussi etre hors boucle. Se mefier.
750
-		$type_requete = isset($p->boucles[$idb]->type_requete) ? $p->boucles[$idb]->type_requete : false;
751
-		$table_sql = isset($p->boucles[$idb]->show['table_sql']) ? $p->boucles[$idb]->show['table_sql'] : false;
752
-
753
-		// bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
754
-		if ($type_requete and isset($GLOBALS['table_des_tables'][$type_requete])) {
755
-			$type_alias = $type_requete;
756
-			$type_requete = $GLOBALS['table_des_tables'][$type_requete];
757
-		} else {
758
-			$type_alias = false;
759
-		}
760
-
761
-		// le traitement peut n'etre defini que pour une table en particulier "spip_articles"
762
-		if ($table_sql and isset($ps[$table_sql])) {
763
-			$ps = $ps[$table_sql];
764
-		} // ou pour une boucle en particulier "DATA","articles"
765
-		elseif ($type_requete and isset($ps[$type_requete])) {
766
-			$ps = $ps[$type_requete];
767
-		} // ou pour une boucle utilisant un alias ("hierarchie")
768
-		elseif ($type_alias and isset($ps[$type_alias])) {
769
-			$ps = $ps[$type_alias];
770
-		} // ou pour indifféremment quelle que soit la boucle
771
-		elseif (isset($ps[0])) {
772
-			$ps = $ps[0];
773
-		} else {
774
-			$ps = false;
775
-		}
776
-	}
777
-
778
-	if (!$ps) {
779
-		return $p->code;
780
-	}
781
-
782
-	// Si une boucle DOCUMENTS{doublons} est presente dans le squelette,
783
-	// ou si in INCLURE contient {doublons}
784
-	// on insere une fonction de remplissage du tableau des doublons
785
-	// dans les filtres propre() ou typo()
786
-	// (qui traitent les raccourcis <docXX> referencant les docs)
787
-
788
-	if (
789
-		isset($p->descr['documents'])
790
-		and
791
-		$p->descr['documents']
792
-		and (
793
-			(strpos($ps, 'propre') !== false)
794
-			or
795
-			(strpos($ps, 'typo') !== false)
796
-		)
797
-	) {
798
-		$ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
799
-	}
800
-
801
-	// La protection des champs par |safehtml est assuree par les extensions
802
-	// dans la declaration des traitements des champs sensibles
803
-
804
-	// Remplacer enfin le placeholder %s par le vrai code de la balise
805
-	return str_replace('%s', $p->code, $ps);
728
+    if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) {
729
+        $ps = $GLOBALS['table_des_traitements'][$p->nom_champ];
730
+    } else {
731
+        // quand on utilise un traitement catch-all *
732
+        // celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer
733
+        // leur propre securite
734
+        if (!$p->balise_calculee) {
735
+            $ps = $GLOBALS['table_des_traitements']['*'];
736
+        } else {
737
+            $ps = false;
738
+        }
739
+    }
740
+
741
+    if (is_array($ps)) {
742
+        // Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte
743
+        $idb = index_boucle($p);
744
+        // si le champ a ete trouve dans une boucle parente sa source est renseignee ici
745
+        if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) {
746
+            $idb = $p->boucles[$idb]->index_champ[$p->nom_champ];
747
+        }
748
+
749
+        // mais on peut aussi etre hors boucle. Se mefier.
750
+        $type_requete = isset($p->boucles[$idb]->type_requete) ? $p->boucles[$idb]->type_requete : false;
751
+        $table_sql = isset($p->boucles[$idb]->show['table_sql']) ? $p->boucles[$idb]->show['table_sql'] : false;
752
+
753
+        // bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.)
754
+        if ($type_requete and isset($GLOBALS['table_des_tables'][$type_requete])) {
755
+            $type_alias = $type_requete;
756
+            $type_requete = $GLOBALS['table_des_tables'][$type_requete];
757
+        } else {
758
+            $type_alias = false;
759
+        }
760
+
761
+        // le traitement peut n'etre defini que pour une table en particulier "spip_articles"
762
+        if ($table_sql and isset($ps[$table_sql])) {
763
+            $ps = $ps[$table_sql];
764
+        } // ou pour une boucle en particulier "DATA","articles"
765
+        elseif ($type_requete and isset($ps[$type_requete])) {
766
+            $ps = $ps[$type_requete];
767
+        } // ou pour une boucle utilisant un alias ("hierarchie")
768
+        elseif ($type_alias and isset($ps[$type_alias])) {
769
+            $ps = $ps[$type_alias];
770
+        } // ou pour indifféremment quelle que soit la boucle
771
+        elseif (isset($ps[0])) {
772
+            $ps = $ps[0];
773
+        } else {
774
+            $ps = false;
775
+        }
776
+    }
777
+
778
+    if (!$ps) {
779
+        return $p->code;
780
+    }
781
+
782
+    // Si une boucle DOCUMENTS{doublons} est presente dans le squelette,
783
+    // ou si in INCLURE contient {doublons}
784
+    // on insere une fonction de remplissage du tableau des doublons
785
+    // dans les filtres propre() ou typo()
786
+    // (qui traitent les raccourcis <docXX> referencant les docs)
787
+
788
+    if (
789
+        isset($p->descr['documents'])
790
+        and
791
+        $p->descr['documents']
792
+        and (
793
+            (strpos($ps, 'propre') !== false)
794
+            or
795
+            (strpos($ps, 'typo') !== false)
796
+        )
797
+    ) {
798
+        $ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
799
+    }
800
+
801
+    // La protection des champs par |safehtml est assuree par les extensions
802
+    // dans la declaration des traitements des champs sensibles
803
+
804
+    // Remplacer enfin le placeholder %s par le vrai code de la balise
805
+    return str_replace('%s', $p->code, $ps);
806 806
 }
807 807
 
808 808
 
@@ -815,112 +815,112 @@  discard block
 block discarded – undo
815 815
 // https://code.spip.net/@applique_filtres
816 816
 function applique_filtres($p) {
817 817
 
818
-	// Traitements standards (cf. supra)
819
-	if ($p->etoile == '') {
820
-		$code = champs_traitements($p);
821
-	} else {
822
-		$code = $p->code;
823
-	}
818
+    // Traitements standards (cf. supra)
819
+    if ($p->etoile == '') {
820
+        $code = champs_traitements($p);
821
+    } else {
822
+        $code = $p->code;
823
+    }
824 824
 
825
-	// Appliquer les filtres perso
826
-	if ($p->param) {
827
-		$code = compose_filtres($p, $code);
828
-	}
825
+    // Appliquer les filtres perso
826
+    if ($p->param) {
827
+        $code = compose_filtres($p, $code);
828
+    }
829 829
 
830
-	// S'il y a un lien avec la session, ajouter un code qui levera
831
-	// un drapeau dans la structure d'invalidation $Cache
832
-	if (isset($p->descr['session'])) {
833
-		$code = "invalideur_session(\$Cache, $code)";
834
-	}
830
+    // S'il y a un lien avec la session, ajouter un code qui levera
831
+    // un drapeau dans la structure d'invalidation $Cache
832
+    if (isset($p->descr['session'])) {
833
+        $code = "invalideur_session(\$Cache, $code)";
834
+    }
835 835
 
836
-	$code = sandbox_composer_interdire_scripts($code, $p);
836
+    $code = sandbox_composer_interdire_scripts($code, $p);
837 837
 
838
-	return $code;
838
+    return $code;
839 839
 }
840 840
 
841 841
 // Cf. function pipeline dans ecrire/inc_utils.php
842 842
 // https://code.spip.net/@compose_filtres
843 843
 function compose_filtres(&$p, $code) {
844 844
 
845
-	$image_miette = false;
846
-	foreach ($p->param as $filtre) {
847
-		$fonc = array_shift($filtre);
848
-		if (!$fonc) {
849
-			continue;
850
-		} // normalement qu'au premier tour.
851
-		$is_filtre_image = ((substr($fonc, 0, 6) == 'image_') and $fonc != 'image_graver');
852
-		if ($image_miette and !$is_filtre_image) {
853
-			// il faut graver maintenant car apres le filtre en cours
854
-			// on est pas sur d'avoir encore le nom du fichier dans le pipe
855
-			$code = "filtrer('image_graver', $code)";
856
-			$image_miette = false;
857
-		}
858
-
859
-		// recuperer les arguments du filtre,
860
-		// a separer par "," ou ":" dans le cas du filtre "?{a,b}"
861
-		$countfiltre = count($filtre);
862
-		if ($fonc !== '?') {
863
-			$sep = ',';
864
-		} else {
865
-			$sep = ':';
866
-			// |?{a,b} *doit* avoir exactement 2 arguments ; on les force
867
-			if ($countfiltre != 2) {
868
-				$filtre = [$filtre[0] ?? '', $filtre[1] ?? ''];
869
-				$countfiltre = 2;
870
-			}
871
-		}
872
-		$arglist = compose_filtres_args($p, $filtre, $sep);
873
-		$logique = filtre_logique($fonc, $code, substr($arglist, 1));
874
-		if ($logique) {
875
-			$code = $logique;
876
-		} else {
877
-			$code = sandbox_composer_filtre($fonc, $code, $arglist, $p, $countfiltre);
878
-			if ($is_filtre_image) {
879
-				$image_miette = true;
880
-			}
881
-		}
882
-	}
883
-	// ramasser les images intermediaires inutiles et graver l'image finale
884
-	if ($image_miette) {
885
-		$code = "filtrer('image_graver',$code)";
886
-	}
887
-
888
-	return $code;
845
+    $image_miette = false;
846
+    foreach ($p->param as $filtre) {
847
+        $fonc = array_shift($filtre);
848
+        if (!$fonc) {
849
+            continue;
850
+        } // normalement qu'au premier tour.
851
+        $is_filtre_image = ((substr($fonc, 0, 6) == 'image_') and $fonc != 'image_graver');
852
+        if ($image_miette and !$is_filtre_image) {
853
+            // il faut graver maintenant car apres le filtre en cours
854
+            // on est pas sur d'avoir encore le nom du fichier dans le pipe
855
+            $code = "filtrer('image_graver', $code)";
856
+            $image_miette = false;
857
+        }
858
+
859
+        // recuperer les arguments du filtre,
860
+        // a separer par "," ou ":" dans le cas du filtre "?{a,b}"
861
+        $countfiltre = count($filtre);
862
+        if ($fonc !== '?') {
863
+            $sep = ',';
864
+        } else {
865
+            $sep = ':';
866
+            // |?{a,b} *doit* avoir exactement 2 arguments ; on les force
867
+            if ($countfiltre != 2) {
868
+                $filtre = [$filtre[0] ?? '', $filtre[1] ?? ''];
869
+                $countfiltre = 2;
870
+            }
871
+        }
872
+        $arglist = compose_filtres_args($p, $filtre, $sep);
873
+        $logique = filtre_logique($fonc, $code, substr($arglist, 1));
874
+        if ($logique) {
875
+            $code = $logique;
876
+        } else {
877
+            $code = sandbox_composer_filtre($fonc, $code, $arglist, $p, $countfiltre);
878
+            if ($is_filtre_image) {
879
+                $image_miette = true;
880
+            }
881
+        }
882
+    }
883
+    // ramasser les images intermediaires inutiles et graver l'image finale
884
+    if ($image_miette) {
885
+        $code = "filtrer('image_graver',$code)";
886
+    }
887
+
888
+    return $code;
889 889
 }
890 890
 
891 891
 // Filtres et,ou,oui,non,sinon,xou,xor,and,or,not,yes
892 892
 // et comparateurs
893 893
 function filtre_logique($fonc, $code, $arg) {
894 894
 
895
-	switch (true) {
896
-		case in_array($fonc, $GLOBALS['table_criteres_infixes']):
897
-			return "($code $fonc $arg)";
898
-		case ($fonc == 'and') or ($fonc == 'et'):
899
-			return "((($code) AND ($arg)) ?' ' :'')";
900
-		case ($fonc == 'or') or ($fonc == 'ou'):
901
-			return "((($code) OR ($arg)) ?' ' :'')";
902
-		case ($fonc == 'xor') or ($fonc == 'xou'):
903
-			return "((($code) XOR ($arg)) ?' ' :'')";
904
-		case ($fonc == 'sinon'):
905
-			return "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)";
906
-		case ($fonc == 'not') or ($fonc == 'non'):
907
-			return "(($code) ?'' :' ')";
908
-		case ($fonc == 'yes') or ($fonc == 'oui'):
909
-			return "(($code) ?' ' :'')";
910
-	}
911
-
912
-	return '';
895
+    switch (true) {
896
+        case in_array($fonc, $GLOBALS['table_criteres_infixes']):
897
+            return "($code $fonc $arg)";
898
+        case ($fonc == 'and') or ($fonc == 'et'):
899
+            return "((($code) AND ($arg)) ?' ' :'')";
900
+        case ($fonc == 'or') or ($fonc == 'ou'):
901
+            return "((($code) OR ($arg)) ?' ' :'')";
902
+        case ($fonc == 'xor') or ($fonc == 'xou'):
903
+            return "((($code) XOR ($arg)) ?' ' :'')";
904
+        case ($fonc == 'sinon'):
905
+            return "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)";
906
+        case ($fonc == 'not') or ($fonc == 'non'):
907
+            return "(($code) ?'' :' ')";
908
+        case ($fonc == 'yes') or ($fonc == 'oui'):
909
+            return "(($code) ?' ' :'')";
910
+    }
911
+
912
+    return '';
913 913
 }
914 914
 
915 915
 // https://code.spip.net/@compose_filtres_args
916 916
 function compose_filtres_args($p, $args, $sep) {
917
-	$arglist = '';
918
-	foreach ($args as $arg) {
919
-		$arglist .= $sep .
920
-			calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
921
-	}
917
+    $arglist = '';
918
+    foreach ($args as $arg) {
919
+        $arglist .= $sep .
920
+            calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
921
+    }
922 922
 
923
-	return $arglist;
923
+    return $arglist;
924 924
 }
925 925
 
926 926
 
@@ -938,15 +938,15 @@  discard block
 block discarded – undo
938 938
  **/
939 939
 function calculer_argument_precedent($idb, $nom_champ, &$boucles, $defaut = null) {
940 940
 
941
-	// si recursif, forcer l'extraction du champ SQL mais ignorer le code
942
-	if ($boucles[$idb]->externe) {
943
-		index_pile($idb, $nom_champ, $boucles, '', $defaut);
944
-		// retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
945
-		// on ignore le defaut fourni dans ce cas
946
-		$defaut = "@\$Pile[\$SP]['$nom_champ']";
947
-	}
941
+    // si recursif, forcer l'extraction du champ SQL mais ignorer le code
942
+    if ($boucles[$idb]->externe) {
943
+        index_pile($idb, $nom_champ, $boucles, '', $defaut);
944
+        // retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle
945
+        // on ignore le defaut fourni dans ce cas
946
+        $defaut = "@\$Pile[\$SP]['$nom_champ']";
947
+    }
948 948
 
949
-	return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut);
949
+    return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut);
950 950
 }
951 951
 
952 952
 //
@@ -961,30 +961,30 @@  discard block
 block discarded – undo
961 961
 
962 962
 // https://code.spip.net/@rindex_pile
963 963
 function rindex_pile($p, $champ, $motif) {
964
-	$n = 0;
965
-	$b = $p->id_boucle;
966
-	$p->code = '';
967
-	while ($b != '') {
968
-		foreach ($p->boucles[$b]->criteres as $critere) {
969
-			if ($critere->op == $motif) {
970
-				$p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
971
-					"]['$champ']";
972
-				$b = '';
973
-				break 2;
974
-			}
975
-		}
976
-		$n++;
977
-		$b = $p->boucles[$b]->id_parent;
978
-	}
979
-
980
-	// si on est hors d'une boucle de {recherche}, cette balise est vide
981
-	if (!$p->code) {
982
-		$p->code = "''";
983
-	}
984
-
985
-	$p->interdire_scripts = false;
986
-
987
-	return $p;
964
+    $n = 0;
965
+    $b = $p->id_boucle;
966
+    $p->code = '';
967
+    while ($b != '') {
968
+        foreach ($p->boucles[$b]->criteres as $critere) {
969
+            if ($critere->op == $motif) {
970
+                $p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
971
+                    "]['$champ']";
972
+                $b = '';
973
+                break 2;
974
+            }
975
+        }
976
+        $n++;
977
+        $b = $p->boucles[$b]->id_parent;
978
+    }
979
+
980
+    // si on est hors d'une boucle de {recherche}, cette balise est vide
981
+    if (!$p->code) {
982
+        $p->code = "''";
983
+    }
984
+
985
+    $p->interdire_scripts = false;
986
+
987
+    return $p;
988 988
 }
989 989
 
990 990
 /**
@@ -994,7 +994,7 @@  discard block
 block discarded – undo
994 994
  * @return string Nom de la balise, avec indication de boucle explicite si présent.
995 995
  */
996 996
 function zbug_presenter_champ($p, $champ = '') {
997
-	$balise = $champ ? $champ : $p->nom_champ;
998
-	$explicite = $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
999
-	return "#{$explicite}{$balise}";
997
+    $balise = $champ ? $champ : $p->nom_champ;
998
+    $explicite = $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
999
+    return "#{$explicite}{$balise}";
1000 1000
 }
Please login to merge, or discard this patch.
Spacing   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -124,7 +124,7 @@  discard block
 block discarded – undo
124 124
 	$select = true
125 125
 ) {
126 126
 	if (!is_string($defaut)) {
127
-		$defaut = '@$Pile[0][\'' . strtolower($nom_champ) . '\']';
127
+		$defaut = '@$Pile[0][\''.strtolower($nom_champ).'\']';
128 128
 	}
129 129
 
130 130
 	$idb_origine = $idb;
@@ -157,7 +157,7 @@  discard block
 block discarded – undo
157 157
 			}
158 158
 			// renseigner la boucle source de ce champ pour les traitements
159 159
 			$boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb;
160
-			$champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']';
160
+			$champ = '$Pile[$SP'.($i ? "-$i" : '').'][\''.$c.'\']';
161 161
 			if (!$joker) {
162 162
 				return index_compose($conditionnel, $champ);
163 163
 			}
@@ -198,7 +198,7 @@  discard block
 block discarded – undo
198 198
 function index_compose($conditionnel, $defaut) {
199 199
 	while ($c = array_pop($conditionnel)) {
200 200
 		// si on passe defaut = '', ne pas générer d'erreur de compilation.
201
-		$defaut = "($c:(" . ($defaut ? $defaut : "''") . '))';
201
+		$defaut = "($c:(".($defaut ? $defaut : "''").'))';
202 202
 	}
203 203
 
204 204
 	return $defaut;
@@ -245,7 +245,7 @@  discard block
 block discarded – undo
245 245
 	if (!$r) {
246 246
 		$joker = false; // indiquer a l'appelant
247 247
 		# continuer pour chercher l'erreur suivante
248
-		return ["'#" . $r . ':' . $nom_champ . "'", ''];
248
+		return ["'#".$r.':'.$nom_champ."'", ''];
249 249
 	}
250 250
 
251 251
 	$desc = $boucles[$idb]->show;
@@ -348,8 +348,8 @@  discard block
 block discarded – undo
348 348
 			$t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
349 349
 		}
350 350
 		if ($t == null) {
351
-			list($e, $x) = $excep;  #PHP4 affecte de gauche a droite
352
-			$excep = $x;    #PHP5 de droite a gauche !
351
+			list($e, $x) = $excep; #PHP4 affecte de gauche a droite
352
+			$excep = $x; #PHP5 de droite a gauche !
353 353
 			$j = $trouver_table($e, $boucle->sql_serveur);
354 354
 			if (!$j) {
355 355
 				return ['', ''];
@@ -361,7 +361,7 @@  discard block
 block discarded – undo
361 361
 					$l = (preg_split('/\s*,\s*/', $k));
362 362
 					$k = $desc['key']['PRIMARY KEY'];
363 363
 					if (!in_array($k, $l)) {
364
-						spip_log("jointure impossible $e " . join(',', $l));
364
+						spip_log("jointure impossible $e ".join(',', $l));
365 365
 
366 366
 						return ['', ''];
367 367
 					}
@@ -377,7 +377,7 @@  discard block
 block discarded – undo
377 377
 	// demander a SQL de gerer le synonyme
378 378
 	// ca permet que excep soit dynamique (Cedric, 2/3/06)
379 379
 	if ($excep != $nom_champ) {
380
-		$excep .= ' AS ' . $nom_champ;
380
+		$excep .= ' AS '.$nom_champ;
381 381
 	}
382 382
 
383 383
 	return ["$t.$excep", $nom_champ];
@@ -611,7 +611,7 @@  discard block
 block discarded – undo
611 611
 		join(',', $collecte),
612 612
 		($collecte ? $param : substr($param, 1)), # virer la virgule
613 613
 		memoriser_contexte_compil($p),
614
-		(!$supp ? '' : (', ' . join(',', $supp)))
614
+		(!$supp ? '' : (', '.join(',', $supp)))
615 615
 	);
616 616
 
617 617
 	$p->interdire_scripts = false;
@@ -709,7 +709,7 @@  discard block
 block discarded – undo
709 709
 	$nom = $p->id_boucle;
710 710
 
711 711
 	if ($nom and trouver_nom_serveur_distant($p)) {
712
-		spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit'));
712
+		spip_log($nom.':'.$p->nom_champ.' '._T('zbug_distant_interdit'));
713 713
 
714 714
 		return false;
715 715
 	}
@@ -795,7 +795,7 @@  discard block
 block discarded – undo
795 795
 			(strpos($ps, 'typo') !== false)
796 796
 		)
797 797
 	) {
798
-		$ps = 'traiter_doublons_documents($doublons, ' . $ps . ')';
798
+		$ps = 'traiter_doublons_documents($doublons, '.$ps.')';
799 799
 	}
800 800
 
801 801
 	// La protection des champs par |safehtml est assuree par les extensions
@@ -916,7 +916,7 @@  discard block
 block discarded – undo
916 916
 function compose_filtres_args($p, $args, $sep) {
917 917
 	$arglist = '';
918 918
 	foreach ($args as $arg) {
919
-		$arglist .= $sep .
919
+		$arglist .= $sep.
920 920
 			calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle);
921 921
 	}
922 922
 
@@ -967,7 +967,7 @@  discard block
 block discarded – undo
967 967
 	while ($b != '') {
968 968
 		foreach ($p->boucles[$b]->criteres as $critere) {
969 969
 			if ($critere->op == $motif) {
970
-				$p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") .
970
+				$p->code = '$Pile[$SP'.(($n == 0) ? '' : "-$n").
971 971
 					"]['$champ']";
972 972
 				$b = '';
973 973
 				break 2;
@@ -995,6 +995,6 @@  discard block
 block discarded – undo
995 995
  */
996 996
 function zbug_presenter_champ($p, $champ = '') {
997 997
 	$balise = $champ ? $champ : $p->nom_champ;
998
-	$explicite = $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : '';
998
+	$explicite = $explicite = $p->nom_boucle ? $p->nom_boucle.':' : '';
999 999
 	return "#{$explicite}{$balise}";
1000 1000
 }
Please login to merge, or discard this patch.
ecrire/public/decompiler.php 2 patches
Indentation   +177 added lines, -177 removed lines patch added patch discarded remove patch
@@ -11,130 +11,130 @@  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
 // Decompilation de l'arbre de syntaxe abstraite d'un squelette SPIP
18 18
 
19 19
 function decompiler_boucle($struct, $fmt = '', $prof = 0) {
20
-	$nom = $struct->id_boucle;
21
-	$preaff = decompiler_($struct->preaff, $fmt, $prof);
22
-	$avant = decompiler_($struct->avant, $fmt, $prof);
23
-	$apres = decompiler_($struct->apres, $fmt, $prof);
24
-	$altern = decompiler_($struct->altern, $fmt, $prof);
25
-	$milieu = decompiler_($struct->milieu, $fmt, $prof);
26
-	$postaff = decompiler_($struct->postaff, $fmt, $prof);
27
-
28
-	$type = $struct->sql_serveur ? "$struct->sql_serveur:" : '';
29
-	$type .= ($struct->type_requete ? $struct->type_requete :
30
-		$struct->table_optionnelle);
31
-
32
-	if ($struct->jointures_explicites) {
33
-		$type .= ' ' . $struct->jointures_explicites;
34
-	}
35
-	if ($struct->table_optionnelle) {
36
-		$type .= '?';
37
-	}
38
-	// Revoir le cas de la boucle recursive
39
-
40
-	$crit = $struct->param;
41
-	if ($crit and !is_array($crit[0])) {
42
-		$type = strtolower($type) . array_shift($crit);
43
-	}
44
-	$crit = decompiler_criteres($struct, $fmt, $prof);
45
-
46
-	$f = 'format_boucle_' . $fmt;
47
-
48
-	return $f($preaff, $avant, $nom, $type, $crit, $milieu, $apres, $altern, $postaff, $prof);
20
+    $nom = $struct->id_boucle;
21
+    $preaff = decompiler_($struct->preaff, $fmt, $prof);
22
+    $avant = decompiler_($struct->avant, $fmt, $prof);
23
+    $apres = decompiler_($struct->apres, $fmt, $prof);
24
+    $altern = decompiler_($struct->altern, $fmt, $prof);
25
+    $milieu = decompiler_($struct->milieu, $fmt, $prof);
26
+    $postaff = decompiler_($struct->postaff, $fmt, $prof);
27
+
28
+    $type = $struct->sql_serveur ? "$struct->sql_serveur:" : '';
29
+    $type .= ($struct->type_requete ? $struct->type_requete :
30
+        $struct->table_optionnelle);
31
+
32
+    if ($struct->jointures_explicites) {
33
+        $type .= ' ' . $struct->jointures_explicites;
34
+    }
35
+    if ($struct->table_optionnelle) {
36
+        $type .= '?';
37
+    }
38
+    // Revoir le cas de la boucle recursive
39
+
40
+    $crit = $struct->param;
41
+    if ($crit and !is_array($crit[0])) {
42
+        $type = strtolower($type) . array_shift($crit);
43
+    }
44
+    $crit = decompiler_criteres($struct, $fmt, $prof);
45
+
46
+    $f = 'format_boucle_' . $fmt;
47
+
48
+    return $f($preaff, $avant, $nom, $type, $crit, $milieu, $apres, $altern, $postaff, $prof);
49 49
 }
50 50
 
51 51
 function decompiler_include($struct, $fmt = '', $prof = 0) {
52
-	$res = [];
53
-	foreach ($struct->param ? $struct->param : [] as $couple) {
54
-		array_shift($couple);
55
-		foreach ($couple as $v) {
56
-			$res[] = decompiler_($v, $fmt, $prof);
57
-		}
58
-	}
59
-	$file = is_string($struct->texte) ? $struct->texte :
60
-		decompiler_($struct->texte, $fmt, $prof);
61
-	$f = 'format_inclure_' . $fmt;
62
-
63
-	return $f($file, $res, $prof);
52
+    $res = [];
53
+    foreach ($struct->param ? $struct->param : [] as $couple) {
54
+        array_shift($couple);
55
+        foreach ($couple as $v) {
56
+            $res[] = decompiler_($v, $fmt, $prof);
57
+        }
58
+    }
59
+    $file = is_string($struct->texte) ? $struct->texte :
60
+        decompiler_($struct->texte, $fmt, $prof);
61
+    $f = 'format_inclure_' . $fmt;
62
+
63
+    return $f($file, $res, $prof);
64 64
 }
65 65
 
66 66
 function decompiler_texte($struct, $fmt = '', $prof = 0) {
67
-	$f = 'format_texte_' . $fmt;
67
+    $f = 'format_texte_' . $fmt;
68 68
 
69
-	return strlen($struct->texte) ? $f($struct->texte, $prof) : '';
69
+    return strlen($struct->texte) ? $f($struct->texte, $prof) : '';
70 70
 }
71 71
 
72 72
 function decompiler_polyglotte($struct, $fmt = '', $prof = 0) {
73
-	$f = 'format_polyglotte_' . $fmt;
73
+    $f = 'format_polyglotte_' . $fmt;
74 74
 
75
-	return $f($struct->traductions, $prof);
75
+    return $f($struct->traductions, $prof);
76 76
 }
77 77
 
78 78
 function decompiler_idiome($struct, $fmt = '', $prof = 0) {
79
-	$args = [];
80
-	foreach ($struct->arg as $k => $v) {
81
-		$args[$k] = public_decompiler($v, $fmt, $prof);
82
-	}
79
+    $args = [];
80
+    foreach ($struct->arg as $k => $v) {
81
+        $args[$k] = public_decompiler($v, $fmt, $prof);
82
+    }
83 83
 
84
-	$filtres = decompiler_liste($struct->param, $fmt, $prof);
84
+    $filtres = decompiler_liste($struct->param, $fmt, $prof);
85 85
 
86
-	$f = 'format_idiome_' . $fmt;
86
+    $f = 'format_idiome_' . $fmt;
87 87
 
88
-	return $f($struct->nom_champ, $struct->module, $args, $filtres, $prof);
88
+    return $f($struct->nom_champ, $struct->module, $args, $filtres, $prof);
89 89
 }
90 90
 
91 91
 function decompiler_champ($struct, $fmt = '', $prof = 0) {
92
-	$avant = decompiler_($struct->avant, $fmt, $prof);
93
-	$apres = decompiler_($struct->apres, $fmt, $prof);
94
-	$args = $filtres = '';
95
-	if ($p = $struct->param) {
96
-		if ($p[0][0] === '') {
97
-			$args = decompiler_liste([array_shift($p)], $fmt, $prof);
98
-		}
99
-		$filtres = decompiler_liste($p, $fmt, $prof);
100
-	}
101
-	$f = 'format_champ_' . $fmt;
102
-
103
-	return $f($struct->nom_champ, $struct->nom_boucle, $struct->etoile, $avant, $apres, $args, $filtres, $prof);
92
+    $avant = decompiler_($struct->avant, $fmt, $prof);
93
+    $apres = decompiler_($struct->apres, $fmt, $prof);
94
+    $args = $filtres = '';
95
+    if ($p = $struct->param) {
96
+        if ($p[0][0] === '') {
97
+            $args = decompiler_liste([array_shift($p)], $fmt, $prof);
98
+        }
99
+        $filtres = decompiler_liste($p, $fmt, $prof);
100
+    }
101
+    $f = 'format_champ_' . $fmt;
102
+
103
+    return $f($struct->nom_champ, $struct->nom_boucle, $struct->etoile, $avant, $apres, $args, $filtres, $prof);
104 104
 }
105 105
 
106 106
 function decompiler_liste($sources, $fmt = '', $prof = 0) {
107
-	if (!is_array($sources)) {
108
-		return '';
109
-	}
110
-	$f = 'format_liste_' . $fmt;
111
-	$res = '';
112
-	foreach ($sources as $arg) {
113
-		if (!is_array($arg)) {
114
-			continue; // ne devrait pas arriver.
115
-		} else {
116
-			$r = array_shift($arg);
117
-		}
118
-		$args = [];
119
-		foreach ($arg as $v) {
120
-			// cas des arguments entoures de ' ou "
121
-			if (
122
-				(count($v) == 1)
123
-				and $v[0]->type == 'texte'
124
-				and (strlen($v[0]->apres) == 1)
125
-				and $v[0]->apres == $v[0]->avant
126
-			) {
127
-				$args[] = $v[0]->avant . $v[0]->texte . $v[0]->apres;
128
-			} else {
129
-				$args[] = decompiler_($v, $fmt, 0 - $prof);
130
-			}
131
-		}
132
-		if (($r !== '') or $args) {
133
-			$res .= $f($r, $args, $prof);
134
-		}
135
-	}
136
-
137
-	return $res;
107
+    if (!is_array($sources)) {
108
+        return '';
109
+    }
110
+    $f = 'format_liste_' . $fmt;
111
+    $res = '';
112
+    foreach ($sources as $arg) {
113
+        if (!is_array($arg)) {
114
+            continue; // ne devrait pas arriver.
115
+        } else {
116
+            $r = array_shift($arg);
117
+        }
118
+        $args = [];
119
+        foreach ($arg as $v) {
120
+            // cas des arguments entoures de ' ou "
121
+            if (
122
+                (count($v) == 1)
123
+                and $v[0]->type == 'texte'
124
+                and (strlen($v[0]->apres) == 1)
125
+                and $v[0]->apres == $v[0]->avant
126
+            ) {
127
+                $args[] = $v[0]->avant . $v[0]->texte . $v[0]->apres;
128
+            } else {
129
+                $args[] = decompiler_($v, $fmt, 0 - $prof);
130
+            }
131
+        }
132
+        if (($r !== '') or $args) {
133
+            $res .= $f($r, $args, $prof);
134
+        }
135
+    }
136
+
137
+    return $res;
138 138
 }
139 139
 
140 140
 // Decompilation des criteres: on triche et on deroge:
@@ -142,93 +142,93 @@  discard block
 block discarded – undo
142 142
 // - le champ apres signale le critere {"separateur"} ou {'separateur'}
143 143
 // - les champs sont implicitement etendus (crochets implicites mais interdits)
144 144
 function decompiler_criteres($boucle, $fmt = '', $prof = 0) {
145
-	$sources = $boucle->param;
146
-	if (!is_array($sources)) {
147
-		return '';
148
-	}
149
-	$res = '';
150
-	$f = 'format_critere_' . $fmt;
151
-	foreach ($sources as $crit) {
152
-		if (!is_array($crit)) {
153
-			continue;
154
-		} // boucle recursive
155
-		array_shift($crit);
156
-		$args = [];
157
-		foreach ($crit as $i => $v) {
158
-			if (
159
-				(count($v) == 1)
160
-				and $v[0]->type == 'texte'
161
-				and $v[0]->apres
162
-			) {
163
-				$args[] = [['texte', ($v[0]->apres . $v[0]->texte . $v[0]->apres)]];
164
-			} else {
165
-				$res2 = [];
166
-				foreach ($v as $k => $p) {
167
-					if (
168
-						isset($p->type)
169
-						and function_exists($d = 'decompiler_' . $p->type)
170
-					) {
171
-						$r = $d($p, $fmt, (0 - $prof), @$v[$k + 1]);
172
-						$res2[] = [$p->type, $r];
173
-					} else {
174
-						spip_log("critere $i / $k mal forme");
175
-					}
176
-				}
177
-				$args[] = $res2;
178
-			}
179
-		}
180
-		$res .= $f($args);
181
-	}
182
-
183
-	return $res;
145
+    $sources = $boucle->param;
146
+    if (!is_array($sources)) {
147
+        return '';
148
+    }
149
+    $res = '';
150
+    $f = 'format_critere_' . $fmt;
151
+    foreach ($sources as $crit) {
152
+        if (!is_array($crit)) {
153
+            continue;
154
+        } // boucle recursive
155
+        array_shift($crit);
156
+        $args = [];
157
+        foreach ($crit as $i => $v) {
158
+            if (
159
+                (count($v) == 1)
160
+                and $v[0]->type == 'texte'
161
+                and $v[0]->apres
162
+            ) {
163
+                $args[] = [['texte', ($v[0]->apres . $v[0]->texte . $v[0]->apres)]];
164
+            } else {
165
+                $res2 = [];
166
+                foreach ($v as $k => $p) {
167
+                    if (
168
+                        isset($p->type)
169
+                        and function_exists($d = 'decompiler_' . $p->type)
170
+                    ) {
171
+                        $r = $d($p, $fmt, (0 - $prof), @$v[$k + 1]);
172
+                        $res2[] = [$p->type, $r];
173
+                    } else {
174
+                        spip_log("critere $i / $k mal forme");
175
+                    }
176
+                }
177
+                $args[] = $res2;
178
+            }
179
+        }
180
+        $res .= $f($args);
181
+    }
182
+
183
+    return $res;
184 184
 }
185 185
 
186 186
 
187 187
 function decompiler_($liste, $fmt = '', $prof = 0) {
188
-	if (!is_array($liste)) {
189
-		return '';
190
-	}
191
-	$prof2 = ($prof < 0) ? ($prof - 1) : ($prof + 1);
192
-	$contenu = [];
193
-	foreach ($liste as $k => $p) {
194
-		if (!isset($p->type)) {
195
-			continue;
196
-		} #??????
197
-		$d = 'decompiler_' . $p->type;
198
-		$next = isset($liste[$k + 1]) ? $liste[$k + 1] : false;
199
-		// Forcer le champ etendu si son source (pas les reecritures)
200
-		// contenait des args et s'il est suivi d'espaces,
201
-		// le champ simple les eliminant est un bug helas perenne.
202
-
203
-		if (
204
-			$next
205
-			and ($next->type == 'texte')
206
-			and $p->type == 'champ'
207
-			and !$p->apres
208
-			and !$p->avant
209
-			and $p->fonctions
210
-		) {
211
-			$n = strlen($next->texte) - strlen(ltrim($next->texte));
212
-			if ($n) {
213
-				$champ = new Texte();
214
-				$champ->texte = substr($next->texte, 0, $n);
215
-				$champ->ligne = $p->ligne;
216
-				$p->apres = [$champ];
217
-				$next->texte = substr($next->texte, $n);
218
-			}
219
-		}
220
-		$contenu[] = [$d($p, $fmt, $prof2), $p->type];
221
-	}
222
-	$f = 'format_suite_' . $fmt;
223
-
224
-	return $f($contenu);
188
+    if (!is_array($liste)) {
189
+        return '';
190
+    }
191
+    $prof2 = ($prof < 0) ? ($prof - 1) : ($prof + 1);
192
+    $contenu = [];
193
+    foreach ($liste as $k => $p) {
194
+        if (!isset($p->type)) {
195
+            continue;
196
+        } #??????
197
+        $d = 'decompiler_' . $p->type;
198
+        $next = isset($liste[$k + 1]) ? $liste[$k + 1] : false;
199
+        // Forcer le champ etendu si son source (pas les reecritures)
200
+        // contenait des args et s'il est suivi d'espaces,
201
+        // le champ simple les eliminant est un bug helas perenne.
202
+
203
+        if (
204
+            $next
205
+            and ($next->type == 'texte')
206
+            and $p->type == 'champ'
207
+            and !$p->apres
208
+            and !$p->avant
209
+            and $p->fonctions
210
+        ) {
211
+            $n = strlen($next->texte) - strlen(ltrim($next->texte));
212
+            if ($n) {
213
+                $champ = new Texte();
214
+                $champ->texte = substr($next->texte, 0, $n);
215
+                $champ->ligne = $p->ligne;
216
+                $p->apres = [$champ];
217
+                $next->texte = substr($next->texte, $n);
218
+            }
219
+        }
220
+        $contenu[] = [$d($p, $fmt, $prof2), $p->type];
221
+    }
222
+    $f = 'format_suite_' . $fmt;
223
+
224
+    return $f($contenu);
225 225
 }
226 226
 
227 227
 function public_decompiler($liste, $fmt = '', $prof = 0, $quoi = '') {
228
-	if (!include_spip('public/format_' . $fmt)) {
229
-		return "'$fmt'?";
230
-	}
231
-	$f = 'decompiler_' . $quoi;
228
+    if (!include_spip('public/format_' . $fmt)) {
229
+        return "'$fmt'?";
230
+    }
231
+    $f = 'decompiler_' . $quoi;
232 232
 
233
-	return $f($liste, $fmt, $prof);
233
+    return $f($liste, $fmt, $prof);
234 234
 }
Please login to merge, or discard this patch.
Spacing   +19 added lines, -21 removed lines patch added patch discarded remove patch
@@ -26,11 +26,10 @@  discard block
 block discarded – undo
26 26
 	$postaff = decompiler_($struct->postaff, $fmt, $prof);
27 27
 
28 28
 	$type = $struct->sql_serveur ? "$struct->sql_serveur:" : '';
29
-	$type .= ($struct->type_requete ? $struct->type_requete :
30
-		$struct->table_optionnelle);
29
+	$type .= ($struct->type_requete ? $struct->type_requete : $struct->table_optionnelle);
31 30
 
32 31
 	if ($struct->jointures_explicites) {
33
-		$type .= ' ' . $struct->jointures_explicites;
32
+		$type .= ' '.$struct->jointures_explicites;
34 33
 	}
35 34
 	if ($struct->table_optionnelle) {
36 35
 		$type .= '?';
@@ -39,11 +38,11 @@  discard block
 block discarded – undo
39 38
 
40 39
 	$crit = $struct->param;
41 40
 	if ($crit and !is_array($crit[0])) {
42
-		$type = strtolower($type) . array_shift($crit);
41
+		$type = strtolower($type).array_shift($crit);
43 42
 	}
44 43
 	$crit = decompiler_criteres($struct, $fmt, $prof);
45 44
 
46
-	$f = 'format_boucle_' . $fmt;
45
+	$f = 'format_boucle_'.$fmt;
47 46
 
48 47
 	return $f($preaff, $avant, $nom, $type, $crit, $milieu, $apres, $altern, $postaff, $prof);
49 48
 }
@@ -56,21 +55,20 @@  discard block
 block discarded – undo
56 55
 			$res[] = decompiler_($v, $fmt, $prof);
57 56
 		}
58 57
 	}
59
-	$file = is_string($struct->texte) ? $struct->texte :
60
-		decompiler_($struct->texte, $fmt, $prof);
61
-	$f = 'format_inclure_' . $fmt;
58
+	$file = is_string($struct->texte) ? $struct->texte : decompiler_($struct->texte, $fmt, $prof);
59
+	$f = 'format_inclure_'.$fmt;
62 60
 
63 61
 	return $f($file, $res, $prof);
64 62
 }
65 63
 
66 64
 function decompiler_texte($struct, $fmt = '', $prof = 0) {
67
-	$f = 'format_texte_' . $fmt;
65
+	$f = 'format_texte_'.$fmt;
68 66
 
69 67
 	return strlen($struct->texte) ? $f($struct->texte, $prof) : '';
70 68
 }
71 69
 
72 70
 function decompiler_polyglotte($struct, $fmt = '', $prof = 0) {
73
-	$f = 'format_polyglotte_' . $fmt;
71
+	$f = 'format_polyglotte_'.$fmt;
74 72
 
75 73
 	return $f($struct->traductions, $prof);
76 74
 }
@@ -83,7 +81,7 @@  discard block
 block discarded – undo
83 81
 
84 82
 	$filtres = decompiler_liste($struct->param, $fmt, $prof);
85 83
 
86
-	$f = 'format_idiome_' . $fmt;
84
+	$f = 'format_idiome_'.$fmt;
87 85
 
88 86
 	return $f($struct->nom_champ, $struct->module, $args, $filtres, $prof);
89 87
 }
@@ -98,7 +96,7 @@  discard block
 block discarded – undo
98 96
 		}
99 97
 		$filtres = decompiler_liste($p, $fmt, $prof);
100 98
 	}
101
-	$f = 'format_champ_' . $fmt;
99
+	$f = 'format_champ_'.$fmt;
102 100
 
103 101
 	return $f($struct->nom_champ, $struct->nom_boucle, $struct->etoile, $avant, $apres, $args, $filtres, $prof);
104 102
 }
@@ -107,7 +105,7 @@  discard block
 block discarded – undo
107 105
 	if (!is_array($sources)) {
108 106
 		return '';
109 107
 	}
110
-	$f = 'format_liste_' . $fmt;
108
+	$f = 'format_liste_'.$fmt;
111 109
 	$res = '';
112 110
 	foreach ($sources as $arg) {
113 111
 		if (!is_array($arg)) {
@@ -124,7 +122,7 @@  discard block
 block discarded – undo
124 122
 				and (strlen($v[0]->apres) == 1)
125 123
 				and $v[0]->apres == $v[0]->avant
126 124
 			) {
127
-				$args[] = $v[0]->avant . $v[0]->texte . $v[0]->apres;
125
+				$args[] = $v[0]->avant.$v[0]->texte.$v[0]->apres;
128 126
 			} else {
129 127
 				$args[] = decompiler_($v, $fmt, 0 - $prof);
130 128
 			}
@@ -147,7 +145,7 @@  discard block
 block discarded – undo
147 145
 		return '';
148 146
 	}
149 147
 	$res = '';
150
-	$f = 'format_critere_' . $fmt;
148
+	$f = 'format_critere_'.$fmt;
151 149
 	foreach ($sources as $crit) {
152 150
 		if (!is_array($crit)) {
153 151
 			continue;
@@ -160,13 +158,13 @@  discard block
 block discarded – undo
160 158
 				and $v[0]->type == 'texte'
161 159
 				and $v[0]->apres
162 160
 			) {
163
-				$args[] = [['texte', ($v[0]->apres . $v[0]->texte . $v[0]->apres)]];
161
+				$args[] = [['texte', ($v[0]->apres.$v[0]->texte.$v[0]->apres)]];
164 162
 			} else {
165 163
 				$res2 = [];
166 164
 				foreach ($v as $k => $p) {
167 165
 					if (
168 166
 						isset($p->type)
169
-						and function_exists($d = 'decompiler_' . $p->type)
167
+						and function_exists($d = 'decompiler_'.$p->type)
170 168
 					) {
171 169
 						$r = $d($p, $fmt, (0 - $prof), @$v[$k + 1]);
172 170
 						$res2[] = [$p->type, $r];
@@ -194,7 +192,7 @@  discard block
 block discarded – undo
194 192
 		if (!isset($p->type)) {
195 193
 			continue;
196 194
 		} #??????
197
-		$d = 'decompiler_' . $p->type;
195
+		$d = 'decompiler_'.$p->type;
198 196
 		$next = isset($liste[$k + 1]) ? $liste[$k + 1] : false;
199 197
 		// Forcer le champ etendu si son source (pas les reecritures)
200 198
 		// contenait des args et s'il est suivi d'espaces,
@@ -219,16 +217,16 @@  discard block
 block discarded – undo
219 217
 		}
220 218
 		$contenu[] = [$d($p, $fmt, $prof2), $p->type];
221 219
 	}
222
-	$f = 'format_suite_' . $fmt;
220
+	$f = 'format_suite_'.$fmt;
223 221
 
224 222
 	return $f($contenu);
225 223
 }
226 224
 
227 225
 function public_decompiler($liste, $fmt = '', $prof = 0, $quoi = '') {
228
-	if (!include_spip('public/format_' . $fmt)) {
226
+	if (!include_spip('public/format_'.$fmt)) {
229 227
 		return "'$fmt'?";
230 228
 	}
231
-	$f = 'decompiler_' . $quoi;
229
+	$f = 'decompiler_'.$quoi;
232 230
 
233 231
 	return $f($liste, $fmt, $prof);
234 232
 }
Please login to merge, or discard this patch.
ecrire/public/iterateur.php 2 patches
Indentation   +570 added lines, -570 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
 /**
@@ -21,583 +21,583 @@  discard block
 block discarded – undo
21 21
  *
22 22
  */
23 23
 class IterFactory {
24
-	public static function create($iterateur, $command, $info = null) {
25
-
26
-		// cas des SI {si expression} analises tres tot
27
-		// pour eviter le chargement de tout iterateur
28
-		if (isset($command['si'])) {
29
-			foreach ($command['si'] as $si) {
30
-				if (!$si) {
31
-					// $command pour boucle SQL peut generer des erreurs de compilation
32
-					// s'il est transmis alors qu'on est dans un iterateur vide
33
-					return new IterDecorator(new EmptyIterator(), [], $info);
34
-				}
35
-			}
36
-		}
37
-
38
-		// chercher un iterateur PHP existant (par exemple dans SPL)
39
-		// (il faudrait passer l'argument ->sql_serveur
40
-		// pour etre certain qu'on est sur un "php:")
41
-		if (class_exists($iterateur)) {
42
-			$a = isset($command['args']) ? $command['args'] : [];
43
-
44
-			// permettre de passer un Iterateur directement {args #ITERATEUR} :
45
-			// si on recoit deja un iterateur en argument, on l'utilise
46
-			if (count($a) == 1 and is_object($a[0]) and is_subclass_of($a[0], 'Iterator')) {
47
-				$iter = $a[0];
48
-
49
-				// sinon, on cree un iterateur du type donne
50
-			} else {
51
-				// arguments de creation de l'iterateur...
52
-				// (pas glop)
53
-				try {
54
-					switch (count($a)) {
55
-						case 0:
56
-							$iter = new $iterateur();
57
-							break;
58
-						case 1:
59
-							$iter = new $iterateur($a[0]);
60
-							break;
61
-						case 2:
62
-							$iter = new $iterateur($a[0], $a[1]);
63
-							break;
64
-						case 3:
65
-							$iter = new $iterateur($a[0], $a[1], $a[2]);
66
-							break;
67
-						case 4:
68
-							$iter = new $iterateur($a[0], $a[1], $a[2], $a[3]);
69
-							break;
70
-					}
71
-				} catch (Exception $e) {
72
-					spip_log("Erreur de chargement de l'iterateur $iterateur");
73
-					spip_log($e->getMessage());
74
-					$iter = new EmptyIterator();
75
-				}
76
-			}
77
-		} else {
78
-			// chercher la classe d'iterateur
79
-			// IterateurXXX
80
-			// definie dans le fichier iterateurs/xxx.php
81
-			$class = 'Iterateur' . $iterateur;
82
-			if (!class_exists($class)) {
83
-				if (
84
-					!include_spip('iterateur/' . strtolower($iterateur))
85
-					or !class_exists($class)
86
-				) {
87
-					die("Iterateur $iterateur non trouv&#233;");
88
-					// si l'iterateur n'existe pas, on se rabat sur le generique
89
-					# $iter = new EmptyIterator();
90
-				}
91
-			}
92
-			$iter = new $class($command, $info);
93
-		}
94
-
95
-		return new IterDecorator($iter, $command, $info);
96
-	}
24
+    public static function create($iterateur, $command, $info = null) {
25
+
26
+        // cas des SI {si expression} analises tres tot
27
+        // pour eviter le chargement de tout iterateur
28
+        if (isset($command['si'])) {
29
+            foreach ($command['si'] as $si) {
30
+                if (!$si) {
31
+                    // $command pour boucle SQL peut generer des erreurs de compilation
32
+                    // s'il est transmis alors qu'on est dans un iterateur vide
33
+                    return new IterDecorator(new EmptyIterator(), [], $info);
34
+                }
35
+            }
36
+        }
37
+
38
+        // chercher un iterateur PHP existant (par exemple dans SPL)
39
+        // (il faudrait passer l'argument ->sql_serveur
40
+        // pour etre certain qu'on est sur un "php:")
41
+        if (class_exists($iterateur)) {
42
+            $a = isset($command['args']) ? $command['args'] : [];
43
+
44
+            // permettre de passer un Iterateur directement {args #ITERATEUR} :
45
+            // si on recoit deja un iterateur en argument, on l'utilise
46
+            if (count($a) == 1 and is_object($a[0]) and is_subclass_of($a[0], 'Iterator')) {
47
+                $iter = $a[0];
48
+
49
+                // sinon, on cree un iterateur du type donne
50
+            } else {
51
+                // arguments de creation de l'iterateur...
52
+                // (pas glop)
53
+                try {
54
+                    switch (count($a)) {
55
+                        case 0:
56
+                            $iter = new $iterateur();
57
+                            break;
58
+                        case 1:
59
+                            $iter = new $iterateur($a[0]);
60
+                            break;
61
+                        case 2:
62
+                            $iter = new $iterateur($a[0], $a[1]);
63
+                            break;
64
+                        case 3:
65
+                            $iter = new $iterateur($a[0], $a[1], $a[2]);
66
+                            break;
67
+                        case 4:
68
+                            $iter = new $iterateur($a[0], $a[1], $a[2], $a[3]);
69
+                            break;
70
+                    }
71
+                } catch (Exception $e) {
72
+                    spip_log("Erreur de chargement de l'iterateur $iterateur");
73
+                    spip_log($e->getMessage());
74
+                    $iter = new EmptyIterator();
75
+                }
76
+            }
77
+        } else {
78
+            // chercher la classe d'iterateur
79
+            // IterateurXXX
80
+            // definie dans le fichier iterateurs/xxx.php
81
+            $class = 'Iterateur' . $iterateur;
82
+            if (!class_exists($class)) {
83
+                if (
84
+                    !include_spip('iterateur/' . strtolower($iterateur))
85
+                    or !class_exists($class)
86
+                ) {
87
+                    die("Iterateur $iterateur non trouv&#233;");
88
+                    // si l'iterateur n'existe pas, on se rabat sur le generique
89
+                    # $iter = new EmptyIterator();
90
+                }
91
+            }
92
+            $iter = new $class($command, $info);
93
+        }
94
+
95
+        return new IterDecorator($iter, $command, $info);
96
+    }
97 97
 }
98 98
 
99 99
 
100 100
 class IterDecorator extends FilterIterator {
101
-	private $iter;
102
-
103
-	/**
104
-	 * Conditions de filtrage
105
-	 * ie criteres de selection
106
-	 *
107
-	 * @var array
108
-	 */
109
-	protected $filtre = [];
110
-
111
-	/**
112
-	 * Fonction de filtrage compilee a partir des criteres de filtre
113
-	 *
114
-	 * @var string
115
-	 */
116
-	protected $func_filtre = null;
117
-
118
-	/**
119
-	 * Critere {offset, limit}
120
-	 *
121
-	 * @var int
122
-	 * @var int
123
-	 */
124
-	protected $offset = null;
125
-	protected $limit = null;
126
-
127
-	/**
128
-	 * nombre d'elements recuperes depuis la position 0,
129
-	 * en tenant compte des filtres
130
-	 *
131
-	 * @var int
132
-	 */
133
-	protected $fetched = 0;
134
-
135
-	/**
136
-	 * Y a t'il une erreur ?
137
-	 *
138
-	 * @var bool
139
-	 **/
140
-	protected $err = false;
141
-
142
-	/**
143
-	 * Drapeau a activer en cas d'echec
144
-	 * (select SQL errone, non chargement des DATA, etc)
145
-	 */
146
-	public function err() {
147
-		if (method_exists($this->iter, 'err')) {
148
-			return $this->iter->err();
149
-		}
150
-		if (property_exists($this->iter, 'err')) {
151
-			return $this->iter->err;
152
-		}
153
-
154
-		return false;
155
-	}
156
-
157
-	public function __construct(Iterator $iter, $command, $info) {
158
-		parent::__construct($iter);
159
-		parent::rewind(); // remettre a la premiere position (bug? connu de FilterIterator)
160
-
161
-		// recuperer l'iterateur transmis
162
-		$this->iter = $this->getInnerIterator();
163
-		$this->command = $command;
164
-		$this->info = $info;
165
-		$this->pos = 0;
166
-		$this->fetched = 0;
167
-
168
-		// chercher la liste des champs a retourner par
169
-		// fetch si l'objet ne les calcule pas tout seul
170
-		if (!method_exists($this->iter, 'fetch')) {
171
-			$this->calculer_select();
172
-			$this->calculer_filtres();
173
-		}
174
-
175
-		// emptyIterator critere {si} faux n'a pas d'erreur !
176
-		if (isset($this->iter->err)) {
177
-			$this->err = $this->iter->err;
178
-		}
179
-
180
-		// pas d'init a priori, le calcul ne sera fait qu'en cas de besoin (provoque une double requete souvent inutile en sqlite)
181
-		//$this->total = $this->count();
182
-	}
183
-
184
-
185
-	// calcule les elements a retournes par fetch()
186
-	// enleve les elements inutiles du select()
187
-	//
188
-	private function calculer_select() {
189
-		if ($select = &$this->command['select']) {
190
-			foreach ($select as $s) {
191
-				// /!\ $s = '.nom'
192
-				if ($s[0] == '.') {
193
-					$s = substr($s, 1);
194
-				}
195
-				$this->select[] = $s;
196
-			}
197
-		}
198
-	}
199
-
200
-	// recuperer la valeur d'une balise #X
201
-	// en fonction des methodes
202
-	// et proprietes disponibles
203
-	public function get_select($nom) {
204
-		if (
205
-			is_object($this->iter)
206
-			and method_exists($this->iter, $nom)
207
-		) {
208
-			try {
209
-				return $this->iter->$nom();
210
-			} catch (Exception $e) {
211
-				// #GETCHILDREN sur un fichier de DirectoryIterator ...
212
-				spip_log("Methode $nom en echec sur " . get_class($this->iter));
213
-				spip_log("Cela peut être normal : retour d'une ligne de resultat ne pouvant pas calculer cette methode");
214
-
215
-				return '';
216
-			}
217
-		}
218
-		/*
101
+    private $iter;
102
+
103
+    /**
104
+     * Conditions de filtrage
105
+     * ie criteres de selection
106
+     *
107
+     * @var array
108
+     */
109
+    protected $filtre = [];
110
+
111
+    /**
112
+     * Fonction de filtrage compilee a partir des criteres de filtre
113
+     *
114
+     * @var string
115
+     */
116
+    protected $func_filtre = null;
117
+
118
+    /**
119
+     * Critere {offset, limit}
120
+     *
121
+     * @var int
122
+     * @var int
123
+     */
124
+    protected $offset = null;
125
+    protected $limit = null;
126
+
127
+    /**
128
+     * nombre d'elements recuperes depuis la position 0,
129
+     * en tenant compte des filtres
130
+     *
131
+     * @var int
132
+     */
133
+    protected $fetched = 0;
134
+
135
+    /**
136
+     * Y a t'il une erreur ?
137
+     *
138
+     * @var bool
139
+     **/
140
+    protected $err = false;
141
+
142
+    /**
143
+     * Drapeau a activer en cas d'echec
144
+     * (select SQL errone, non chargement des DATA, etc)
145
+     */
146
+    public function err() {
147
+        if (method_exists($this->iter, 'err')) {
148
+            return $this->iter->err();
149
+        }
150
+        if (property_exists($this->iter, 'err')) {
151
+            return $this->iter->err;
152
+        }
153
+
154
+        return false;
155
+    }
156
+
157
+    public function __construct(Iterator $iter, $command, $info) {
158
+        parent::__construct($iter);
159
+        parent::rewind(); // remettre a la premiere position (bug? connu de FilterIterator)
160
+
161
+        // recuperer l'iterateur transmis
162
+        $this->iter = $this->getInnerIterator();
163
+        $this->command = $command;
164
+        $this->info = $info;
165
+        $this->pos = 0;
166
+        $this->fetched = 0;
167
+
168
+        // chercher la liste des champs a retourner par
169
+        // fetch si l'objet ne les calcule pas tout seul
170
+        if (!method_exists($this->iter, 'fetch')) {
171
+            $this->calculer_select();
172
+            $this->calculer_filtres();
173
+        }
174
+
175
+        // emptyIterator critere {si} faux n'a pas d'erreur !
176
+        if (isset($this->iter->err)) {
177
+            $this->err = $this->iter->err;
178
+        }
179
+
180
+        // pas d'init a priori, le calcul ne sera fait qu'en cas de besoin (provoque une double requete souvent inutile en sqlite)
181
+        //$this->total = $this->count();
182
+    }
183
+
184
+
185
+    // calcule les elements a retournes par fetch()
186
+    // enleve les elements inutiles du select()
187
+    //
188
+    private function calculer_select() {
189
+        if ($select = &$this->command['select']) {
190
+            foreach ($select as $s) {
191
+                // /!\ $s = '.nom'
192
+                if ($s[0] == '.') {
193
+                    $s = substr($s, 1);
194
+                }
195
+                $this->select[] = $s;
196
+            }
197
+        }
198
+    }
199
+
200
+    // recuperer la valeur d'une balise #X
201
+    // en fonction des methodes
202
+    // et proprietes disponibles
203
+    public function get_select($nom) {
204
+        if (
205
+            is_object($this->iter)
206
+            and method_exists($this->iter, $nom)
207
+        ) {
208
+            try {
209
+                return $this->iter->$nom();
210
+            } catch (Exception $e) {
211
+                // #GETCHILDREN sur un fichier de DirectoryIterator ...
212
+                spip_log("Methode $nom en echec sur " . get_class($this->iter));
213
+                spip_log("Cela peut être normal : retour d'une ligne de resultat ne pouvant pas calculer cette methode");
214
+
215
+                return '';
216
+            }
217
+        }
218
+        /*
219 219
 		if (property_exists($this->iter, $nom)) {
220 220
 			return $this->iter->$nom;
221 221
 		}*/
222
-		// cle et valeur par defaut
223
-		// ICI PLANTAGE SI ON NE CONTROLE PAS $nom
224
-		if (
225
-			in_array($nom, ['cle', 'valeur'])
226
-			and method_exists($this, $nom)
227
-		) {
228
-			return $this->$nom();
229
-		}
230
-
231
-		// Par defaut chercher en xpath dans la valeur()
232
-		return table_valeur($this->valeur(), $nom, null);
233
-	}
234
-
235
-
236
-	private function calculer_filtres() {
237
-
238
-		// Issu de calculer_select() de public/composer L.519
239
-		// TODO: externaliser...
240
-		//
241
-		// retirer les criteres vides:
242
-		// {X ?} avec X absent de l'URL
243
-		// {par #ENV{X}} avec X absent de l'URL
244
-		// IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
245
-		if ($where = &$this->command['where']) {
246
-			foreach ($where as $k => $v) {
247
-				if (is_array($v)) {
248
-					if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
249
-						$op = false;
250
-					} elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
251
-						$op = false;
252
-					} else {
253
-						$op = $v[0] ? $v[0] : $v;
254
-					}
255
-				} else {
256
-					$op = $v;
257
-				}
258
-				if ((!$op) or ($op == 1) or ($op == '0=0')) {
259
-					unset($where[$k]);
260
-				}
261
-				// traiter {cle IN a,b} ou {valeur !IN a,b}
262
-				if (preg_match(',^\(([\w/]+)(\s+NOT)?\s+IN\s+(\(.*\))\)$,', $op, $regs)) {
263
-					$this->ajouter_filtre($regs[1], 'IN', $regs[3], $regs[2]);
264
-					unset($op, $where[$k]);
265
-				}
266
-			}
267
-			foreach ($where as $k => $v) {
268
-				// 3 possibilites : count($v) =
269
-				// * 1 : {x y} ; on recoit $v[0] = y
270
-				// * 2 : {x !op y} ; on recoit $v[0] = 'NOT', $v[1] = array() // array du type {x op y}
271
-				// * 3 : {x op y} ; on recoit $v[0] = 'op', $v[1] = x, $v[2] = y
272
-
273
-				// 1 : forcement traite par un critere, on passe
274
-				if (!$v or count($v) == 1) {
275
-					continue;
276
-				}
277
-				if (count($v) == 2 and is_array($v[1])) {
278
-					$this->ajouter_filtre($v[1][1], $v[1][0], $v[1][2], 'NOT');
279
-				}
280
-				if (count($v) == 3) {
281
-					$this->ajouter_filtre($v[1], $v[0], $v[2]);
282
-				}
283
-			}
284
-		}
285
-
286
-		// critere {2,7}
287
-		if (isset($this->command['limit']) and $this->command['limit']) {
288
-			$limit = explode(',', $this->command['limit']);
289
-			$this->offset = $limit[0];
290
-			$this->limit = $limit[1];
291
-		}
292
-
293
-		// Creer la fonction de filtrage sur $this
294
-		if ($this->filtre) {
295
-			$filtres = 'return (' . join(') AND (', $this->filtre) . ');';
296
-			$this->func_filtre = function () use ($filtres) {
297
-				return eval($filtres);
298
-			};
299
-		}
300
-	}
301
-
302
-
303
-	protected function ajouter_filtre($cle, $op, $valeur, $not = false) {
304
-		if (method_exists($this->iter, 'exception_des_criteres')) {
305
-			if (in_array($cle, $this->iter->exception_des_criteres())) {
306
-				return;
307
-			}
308
-		}
309
-		// TODO: analyser le filtre pour refuser ce qu'on ne sait pas traiter ?
310
-		# mais c'est normalement deja opere par calculer_critere_infixe()
311
-		# qui regarde la description 'desc' (en casse reelle d'ailleurs : {isDir=1}
312
-		# ne sera pas vu si l'on a defini desc['field']['isdir'] pour que #ISDIR soit present.
313
-		# il faudrait peut etre definir les 2 champs isDir et isdir... a reflechir...
314
-
315
-		# if (!in_array($cle, array('cle', 'valeur')))
316
-		#	return;
317
-
318
-		$a = '$this->get_select(\'' . $cle . '\')';
319
-
320
-		$filtre = '';
321
-
322
-		if ($op == 'REGEXP') {
323
-			$filtre = 'filtrer("match", ' . $a . ', ' . str_replace('\"', '"', $valeur) . ')';
324
-			$op = '';
325
-		} else {
326
-			if ($op == 'LIKE') {
327
-				$valeur = str_replace(['\"', '_', '%'], ['"', '.', '.*'], preg_quote($valeur));
328
-				$filtre = 'filtrer("match", ' . $a . ', ' . $valeur . ')';
329
-				$op = '';
330
-			} else {
331
-				if ($op == '=') {
332
-					$op = '==';
333
-				} else {
334
-					if ($op == 'IN') {
335
-						$filtre = 'in_array(' . $a . ', array' . $valeur . ')';
336
-						$op = '';
337
-					} else {
338
-						if (!in_array($op, ['<', '<=', '>', '>='])) {
339
-							spip_log('operateur non reconnu ' . $op); // [todo] mettre une erreur de squelette
340
-							$op = '';
341
-						}
342
-					}
343
-				}
344
-			}
345
-		}
346
-
347
-		if ($op) {
348
-			$filtre = $a . $op . str_replace('\"', '"', $valeur);
349
-		}
350
-
351
-		if ($not) {
352
-			$filtre = "!($filtre)";
353
-		}
354
-
355
-		if ($filtre) {
356
-			$this->filtre[] = $filtre;
357
-		}
358
-	}
359
-
360
-
361
-	public function next() {
362
-		$this->pos++;
363
-		parent::next();
364
-	}
365
-
366
-	/**
367
-	 * revient au depart
368
-	 *
369
-	 * @return void
370
-	 */
371
-	public function rewind() {
372
-		$this->pos = 0;
373
-		$this->fetched = 0;
374
-		parent::rewind();
375
-	}
376
-
377
-
378
-	# Extension SPIP des iterateurs PHP
379
-	/**
380
-	 * type de l'iterateur
381
-	 *
382
-	 * @var string
383
-	 */
384
-	protected $type;
385
-
386
-	/**
387
-	 * parametres de l'iterateur
388
-	 *
389
-	 * @var array
390
-	 */
391
-	protected $command;
392
-
393
-	/**
394
-	 * infos de compilateur
395
-	 *
396
-	 * @var array
397
-	 */
398
-	protected $info;
399
-
400
-	/**
401
-	 * position courante de l'iterateur
402
-	 *
403
-	 * @var int
404
-	 */
405
-	protected $pos = null;
406
-
407
-	/**
408
-	 * nombre total resultats dans l'iterateur
409
-	 *
410
-	 * @var int
411
-	 */
412
-	protected $total = null;
413
-
414
-	/**
415
-	 * nombre maximal de recherche pour $total
416
-	 * si l'iterateur n'implemente pas de fonction specifique
417
-	 */
418
-	protected $max = 100000;
419
-
420
-
421
-	/**
422
-	 * Liste des champs a inserer dans les $row
423
-	 * retournes par ->fetch()
424
-	 */
425
-	protected $select = [];
426
-
427
-
428
-	/**
429
-	 * aller a la position absolue n,
430
-	 * comptee depuis le debut
431
-	 *
432
-	 * @param int $n
433
-	 *   absolute pos
434
-	 * @param string $continue
435
-	 *   param for sql_ api
436
-	 * @return bool
437
-	 *   success or fail if not implemented
438
-	 */
439
-	public function seek($n = 0, $continue = null) {
440
-		if ($this->func_filtre or !method_exists($this->iter, 'seek') or !$this->iter->seek($n)) {
441
-			$this->seek_loop($n);
442
-		}
443
-		$this->pos = $n;
444
-		$this->fetched = $n;
445
-
446
-		return true;
447
-	}
448
-
449
-	/*
222
+        // cle et valeur par defaut
223
+        // ICI PLANTAGE SI ON NE CONTROLE PAS $nom
224
+        if (
225
+            in_array($nom, ['cle', 'valeur'])
226
+            and method_exists($this, $nom)
227
+        ) {
228
+            return $this->$nom();
229
+        }
230
+
231
+        // Par defaut chercher en xpath dans la valeur()
232
+        return table_valeur($this->valeur(), $nom, null);
233
+    }
234
+
235
+
236
+    private function calculer_filtres() {
237
+
238
+        // Issu de calculer_select() de public/composer L.519
239
+        // TODO: externaliser...
240
+        //
241
+        // retirer les criteres vides:
242
+        // {X ?} avec X absent de l'URL
243
+        // {par #ENV{X}} avec X absent de l'URL
244
+        // IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
245
+        if ($where = &$this->command['where']) {
246
+            foreach ($where as $k => $v) {
247
+                if (is_array($v)) {
248
+                    if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
249
+                        $op = false;
250
+                    } elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
251
+                        $op = false;
252
+                    } else {
253
+                        $op = $v[0] ? $v[0] : $v;
254
+                    }
255
+                } else {
256
+                    $op = $v;
257
+                }
258
+                if ((!$op) or ($op == 1) or ($op == '0=0')) {
259
+                    unset($where[$k]);
260
+                }
261
+                // traiter {cle IN a,b} ou {valeur !IN a,b}
262
+                if (preg_match(',^\(([\w/]+)(\s+NOT)?\s+IN\s+(\(.*\))\)$,', $op, $regs)) {
263
+                    $this->ajouter_filtre($regs[1], 'IN', $regs[3], $regs[2]);
264
+                    unset($op, $where[$k]);
265
+                }
266
+            }
267
+            foreach ($where as $k => $v) {
268
+                // 3 possibilites : count($v) =
269
+                // * 1 : {x y} ; on recoit $v[0] = y
270
+                // * 2 : {x !op y} ; on recoit $v[0] = 'NOT', $v[1] = array() // array du type {x op y}
271
+                // * 3 : {x op y} ; on recoit $v[0] = 'op', $v[1] = x, $v[2] = y
272
+
273
+                // 1 : forcement traite par un critere, on passe
274
+                if (!$v or count($v) == 1) {
275
+                    continue;
276
+                }
277
+                if (count($v) == 2 and is_array($v[1])) {
278
+                    $this->ajouter_filtre($v[1][1], $v[1][0], $v[1][2], 'NOT');
279
+                }
280
+                if (count($v) == 3) {
281
+                    $this->ajouter_filtre($v[1], $v[0], $v[2]);
282
+                }
283
+            }
284
+        }
285
+
286
+        // critere {2,7}
287
+        if (isset($this->command['limit']) and $this->command['limit']) {
288
+            $limit = explode(',', $this->command['limit']);
289
+            $this->offset = $limit[0];
290
+            $this->limit = $limit[1];
291
+        }
292
+
293
+        // Creer la fonction de filtrage sur $this
294
+        if ($this->filtre) {
295
+            $filtres = 'return (' . join(') AND (', $this->filtre) . ');';
296
+            $this->func_filtre = function () use ($filtres) {
297
+                return eval($filtres);
298
+            };
299
+        }
300
+    }
301
+
302
+
303
+    protected function ajouter_filtre($cle, $op, $valeur, $not = false) {
304
+        if (method_exists($this->iter, 'exception_des_criteres')) {
305
+            if (in_array($cle, $this->iter->exception_des_criteres())) {
306
+                return;
307
+            }
308
+        }
309
+        // TODO: analyser le filtre pour refuser ce qu'on ne sait pas traiter ?
310
+        # mais c'est normalement deja opere par calculer_critere_infixe()
311
+        # qui regarde la description 'desc' (en casse reelle d'ailleurs : {isDir=1}
312
+        # ne sera pas vu si l'on a defini desc['field']['isdir'] pour que #ISDIR soit present.
313
+        # il faudrait peut etre definir les 2 champs isDir et isdir... a reflechir...
314
+
315
+        # if (!in_array($cle, array('cle', 'valeur')))
316
+        #	return;
317
+
318
+        $a = '$this->get_select(\'' . $cle . '\')';
319
+
320
+        $filtre = '';
321
+
322
+        if ($op == 'REGEXP') {
323
+            $filtre = 'filtrer("match", ' . $a . ', ' . str_replace('\"', '"', $valeur) . ')';
324
+            $op = '';
325
+        } else {
326
+            if ($op == 'LIKE') {
327
+                $valeur = str_replace(['\"', '_', '%'], ['"', '.', '.*'], preg_quote($valeur));
328
+                $filtre = 'filtrer("match", ' . $a . ', ' . $valeur . ')';
329
+                $op = '';
330
+            } else {
331
+                if ($op == '=') {
332
+                    $op = '==';
333
+                } else {
334
+                    if ($op == 'IN') {
335
+                        $filtre = 'in_array(' . $a . ', array' . $valeur . ')';
336
+                        $op = '';
337
+                    } else {
338
+                        if (!in_array($op, ['<', '<=', '>', '>='])) {
339
+                            spip_log('operateur non reconnu ' . $op); // [todo] mettre une erreur de squelette
340
+                            $op = '';
341
+                        }
342
+                    }
343
+                }
344
+            }
345
+        }
346
+
347
+        if ($op) {
348
+            $filtre = $a . $op . str_replace('\"', '"', $valeur);
349
+        }
350
+
351
+        if ($not) {
352
+            $filtre = "!($filtre)";
353
+        }
354
+
355
+        if ($filtre) {
356
+            $this->filtre[] = $filtre;
357
+        }
358
+    }
359
+
360
+
361
+    public function next() {
362
+        $this->pos++;
363
+        parent::next();
364
+    }
365
+
366
+    /**
367
+     * revient au depart
368
+     *
369
+     * @return void
370
+     */
371
+    public function rewind() {
372
+        $this->pos = 0;
373
+        $this->fetched = 0;
374
+        parent::rewind();
375
+    }
376
+
377
+
378
+    # Extension SPIP des iterateurs PHP
379
+    /**
380
+     * type de l'iterateur
381
+     *
382
+     * @var string
383
+     */
384
+    protected $type;
385
+
386
+    /**
387
+     * parametres de l'iterateur
388
+     *
389
+     * @var array
390
+     */
391
+    protected $command;
392
+
393
+    /**
394
+     * infos de compilateur
395
+     *
396
+     * @var array
397
+     */
398
+    protected $info;
399
+
400
+    /**
401
+     * position courante de l'iterateur
402
+     *
403
+     * @var int
404
+     */
405
+    protected $pos = null;
406
+
407
+    /**
408
+     * nombre total resultats dans l'iterateur
409
+     *
410
+     * @var int
411
+     */
412
+    protected $total = null;
413
+
414
+    /**
415
+     * nombre maximal de recherche pour $total
416
+     * si l'iterateur n'implemente pas de fonction specifique
417
+     */
418
+    protected $max = 100000;
419
+
420
+
421
+    /**
422
+     * Liste des champs a inserer dans les $row
423
+     * retournes par ->fetch()
424
+     */
425
+    protected $select = [];
426
+
427
+
428
+    /**
429
+     * aller a la position absolue n,
430
+     * comptee depuis le debut
431
+     *
432
+     * @param int $n
433
+     *   absolute pos
434
+     * @param string $continue
435
+     *   param for sql_ api
436
+     * @return bool
437
+     *   success or fail if not implemented
438
+     */
439
+    public function seek($n = 0, $continue = null) {
440
+        if ($this->func_filtre or !method_exists($this->iter, 'seek') or !$this->iter->seek($n)) {
441
+            $this->seek_loop($n);
442
+        }
443
+        $this->pos = $n;
444
+        $this->fetched = $n;
445
+
446
+        return true;
447
+    }
448
+
449
+    /*
450 450
 	 * aller a la position $n en parcourant
451 451
 	 * un par un tous les elements
452 452
 	 */
453
-	private function seek_loop($n) {
454
-		if ($this->pos > $n) {
455
-			$this->rewind();
456
-		}
457
-
458
-		while ($this->pos < $n and $this->valid()) {
459
-			$this->next();
460
-		}
461
-
462
-		return true;
463
-	}
464
-
465
-	/**
466
-	 * Avancer de $saut pas
467
-	 *
468
-	 * @param  $saut
469
-	 * @param  $max
470
-	 * @return int
471
-	 */
472
-	public function skip($saut, $max = null) {
473
-		// pas de saut en arriere autorise pour cette fonction
474
-		if (($saut = intval($saut)) <= 0) {
475
-			return $this->pos;
476
-		}
477
-		$seek = $this->pos + $saut;
478
-		// si le saut fait depasser le maxi, on libere la resource
479
-		// et on sort
480
-		if (is_null($max)) {
481
-			$max = $this->count();
482
-		}
483
-
484
-		if ($seek >= $max or $seek >= $this->count()) {
485
-			// sortie plus rapide que de faire next() jusqu'a la fin !
486
-			$this->free();
487
-
488
-			return $max;
489
-		}
490
-
491
-		$this->seek($seek);
492
-
493
-		return $this->pos;
494
-	}
495
-
496
-	/**
497
-	 * Renvoyer un tableau des donnees correspondantes
498
-	 * a la position courante de l'iterateur
499
-	 * en controlant si on respecte le filtre
500
-	 * Appliquer aussi le critere {offset,limit}
501
-	 *
502
-	 * @return array|bool
503
-	 */
504
-	public function fetch() {
505
-		if (method_exists($this->iter, 'fetch')) {
506
-			return $this->iter->fetch();
507
-		} else {
508
-			while (
509
-				$this->valid()
510
-				and (
511
-					!$this->accept()
512
-					or (isset($this->offset) and $this->fetched++ < $this->offset)
513
-				)
514
-			) {
515
-				$this->next();
516
-			}
517
-
518
-			if (!$this->valid()) {
519
-				return false;
520
-			}
521
-
522
-			if (
523
-				isset($this->limit)
524
-				and $this->fetched > $this->offset + $this->limit
525
-			) {
526
-				return false;
527
-			}
528
-
529
-			$r = [];
530
-			foreach ($this->select as $nom) {
531
-				$r[$nom] = $this->get_select($nom);
532
-			}
533
-			$this->next();
534
-
535
-			return $r;
536
-		}
537
-	}
538
-
539
-	// retourner la cle pour #CLE
540
-	public function cle() {
541
-		return $this->key();
542
-	}
543
-
544
-	// retourner la valeur pour #VALEUR
545
-	public function valeur() {
546
-		return $this->current();
547
-	}
548
-
549
-	/**
550
-	 * Accepte-t-on l'entree courante lue ?
551
-	 * On execute les filtres pour le savoir.
552
-	 **/
553
-	public function accept() {
554
-		if ($f = $this->func_filtre) {
555
-			return $f();
556
-		}
557
-
558
-		return true;
559
-	}
560
-
561
-	/**
562
-	 * liberer la ressource
563
-	 *
564
-	 * @return bool
565
-	 */
566
-	public function free() {
567
-		if (method_exists($this->iter, 'free')) {
568
-			$this->iter->free();
569
-		}
570
-		$this->pos = $this->total = 0;
571
-
572
-		return true;
573
-	}
574
-
575
-	/**
576
-	 * Compter le nombre total de resultats
577
-	 * pour #TOTAL_BOUCLE
578
-	 *
579
-	 * @return int
580
-	 */
581
-	public function count() {
582
-		if (is_null($this->total)) {
583
-			if (
584
-				method_exists($this->iter, 'count')
585
-				and !$this->func_filtre
586
-			) {
587
-				return $this->total = $this->iter->count();
588
-			} else {
589
-				// compter les lignes et rembobiner
590
-				$total = 0;
591
-				$pos = $this->pos; // sauver la position
592
-				$this->rewind();
593
-				while ($this->fetch() and $total < $this->max) {
594
-					$total++;
595
-				}
596
-				$this->seek($pos);
597
-				$this->total = $total;
598
-			}
599
-		}
600
-
601
-		return $this->total;
602
-	}
453
+    private function seek_loop($n) {
454
+        if ($this->pos > $n) {
455
+            $this->rewind();
456
+        }
457
+
458
+        while ($this->pos < $n and $this->valid()) {
459
+            $this->next();
460
+        }
461
+
462
+        return true;
463
+    }
464
+
465
+    /**
466
+     * Avancer de $saut pas
467
+     *
468
+     * @param  $saut
469
+     * @param  $max
470
+     * @return int
471
+     */
472
+    public function skip($saut, $max = null) {
473
+        // pas de saut en arriere autorise pour cette fonction
474
+        if (($saut = intval($saut)) <= 0) {
475
+            return $this->pos;
476
+        }
477
+        $seek = $this->pos + $saut;
478
+        // si le saut fait depasser le maxi, on libere la resource
479
+        // et on sort
480
+        if (is_null($max)) {
481
+            $max = $this->count();
482
+        }
483
+
484
+        if ($seek >= $max or $seek >= $this->count()) {
485
+            // sortie plus rapide que de faire next() jusqu'a la fin !
486
+            $this->free();
487
+
488
+            return $max;
489
+        }
490
+
491
+        $this->seek($seek);
492
+
493
+        return $this->pos;
494
+    }
495
+
496
+    /**
497
+     * Renvoyer un tableau des donnees correspondantes
498
+     * a la position courante de l'iterateur
499
+     * en controlant si on respecte le filtre
500
+     * Appliquer aussi le critere {offset,limit}
501
+     *
502
+     * @return array|bool
503
+     */
504
+    public function fetch() {
505
+        if (method_exists($this->iter, 'fetch')) {
506
+            return $this->iter->fetch();
507
+        } else {
508
+            while (
509
+                $this->valid()
510
+                and (
511
+                    !$this->accept()
512
+                    or (isset($this->offset) and $this->fetched++ < $this->offset)
513
+                )
514
+            ) {
515
+                $this->next();
516
+            }
517
+
518
+            if (!$this->valid()) {
519
+                return false;
520
+            }
521
+
522
+            if (
523
+                isset($this->limit)
524
+                and $this->fetched > $this->offset + $this->limit
525
+            ) {
526
+                return false;
527
+            }
528
+
529
+            $r = [];
530
+            foreach ($this->select as $nom) {
531
+                $r[$nom] = $this->get_select($nom);
532
+            }
533
+            $this->next();
534
+
535
+            return $r;
536
+        }
537
+    }
538
+
539
+    // retourner la cle pour #CLE
540
+    public function cle() {
541
+        return $this->key();
542
+    }
543
+
544
+    // retourner la valeur pour #VALEUR
545
+    public function valeur() {
546
+        return $this->current();
547
+    }
548
+
549
+    /**
550
+     * Accepte-t-on l'entree courante lue ?
551
+     * On execute les filtres pour le savoir.
552
+     **/
553
+    public function accept() {
554
+        if ($f = $this->func_filtre) {
555
+            return $f();
556
+        }
557
+
558
+        return true;
559
+    }
560
+
561
+    /**
562
+     * liberer la ressource
563
+     *
564
+     * @return bool
565
+     */
566
+    public function free() {
567
+        if (method_exists($this->iter, 'free')) {
568
+            $this->iter->free();
569
+        }
570
+        $this->pos = $this->total = 0;
571
+
572
+        return true;
573
+    }
574
+
575
+    /**
576
+     * Compter le nombre total de resultats
577
+     * pour #TOTAL_BOUCLE
578
+     *
579
+     * @return int
580
+     */
581
+    public function count() {
582
+        if (is_null($this->total)) {
583
+            if (
584
+                method_exists($this->iter, 'count')
585
+                and !$this->func_filtre
586
+            ) {
587
+                return $this->total = $this->iter->count();
588
+            } else {
589
+                // compter les lignes et rembobiner
590
+                $total = 0;
591
+                $pos = $this->pos; // sauver la position
592
+                $this->rewind();
593
+                while ($this->fetch() and $total < $this->max) {
594
+                    $total++;
595
+                }
596
+                $this->seek($pos);
597
+                $this->total = $total;
598
+            }
599
+        }
600
+
601
+        return $this->total;
602
+    }
603 603
 }
Please login to merge, or discard this patch.
Spacing   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -78,10 +78,10 @@  discard block
 block discarded – undo
78 78
 			// chercher la classe d'iterateur
79 79
 			// IterateurXXX
80 80
 			// definie dans le fichier iterateurs/xxx.php
81
-			$class = 'Iterateur' . $iterateur;
81
+			$class = 'Iterateur'.$iterateur;
82 82
 			if (!class_exists($class)) {
83 83
 				if (
84
-					!include_spip('iterateur/' . strtolower($iterateur))
84
+					!include_spip('iterateur/'.strtolower($iterateur))
85 85
 					or !class_exists($class)
86 86
 				) {
87 87
 					die("Iterateur $iterateur non trouv&#233;");
@@ -209,7 +209,7 @@  discard block
 block discarded – undo
209 209
 				return $this->iter->$nom();
210 210
 			} catch (Exception $e) {
211 211
 				// #GETCHILDREN sur un fichier de DirectoryIterator ...
212
-				spip_log("Methode $nom en echec sur " . get_class($this->iter));
212
+				spip_log("Methode $nom en echec sur ".get_class($this->iter));
213 213
 				spip_log("Cela peut être normal : retour d'une ligne de resultat ne pouvant pas calculer cette methode");
214 214
 
215 215
 				return '';
@@ -292,8 +292,8 @@  discard block
 block discarded – undo
292 292
 
293 293
 		// Creer la fonction de filtrage sur $this
294 294
 		if ($this->filtre) {
295
-			$filtres = 'return (' . join(') AND (', $this->filtre) . ');';
296
-			$this->func_filtre = function () use ($filtres) {
295
+			$filtres = 'return ('.join(') AND (', $this->filtre).');';
296
+			$this->func_filtre = function() use ($filtres) {
297 297
 				return eval($filtres);
298 298
 			};
299 299
 		}
@@ -315,28 +315,28 @@  discard block
 block discarded – undo
315 315
 		# if (!in_array($cle, array('cle', 'valeur')))
316 316
 		#	return;
317 317
 
318
-		$a = '$this->get_select(\'' . $cle . '\')';
318
+		$a = '$this->get_select(\''.$cle.'\')';
319 319
 
320 320
 		$filtre = '';
321 321
 
322 322
 		if ($op == 'REGEXP') {
323
-			$filtre = 'filtrer("match", ' . $a . ', ' . str_replace('\"', '"', $valeur) . ')';
323
+			$filtre = 'filtrer("match", '.$a.', '.str_replace('\"', '"', $valeur).')';
324 324
 			$op = '';
325 325
 		} else {
326 326
 			if ($op == 'LIKE') {
327 327
 				$valeur = str_replace(['\"', '_', '%'], ['"', '.', '.*'], preg_quote($valeur));
328
-				$filtre = 'filtrer("match", ' . $a . ', ' . $valeur . ')';
328
+				$filtre = 'filtrer("match", '.$a.', '.$valeur.')';
329 329
 				$op = '';
330 330
 			} else {
331 331
 				if ($op == '=') {
332 332
 					$op = '==';
333 333
 				} else {
334 334
 					if ($op == 'IN') {
335
-						$filtre = 'in_array(' . $a . ', array' . $valeur . ')';
335
+						$filtre = 'in_array('.$a.', array'.$valeur.')';
336 336
 						$op = '';
337 337
 					} else {
338 338
 						if (!in_array($op, ['<', '<=', '>', '>='])) {
339
-							spip_log('operateur non reconnu ' . $op); // [todo] mettre une erreur de squelette
339
+							spip_log('operateur non reconnu '.$op); // [todo] mettre une erreur de squelette
340 340
 							$op = '';
341 341
 						}
342 342
 					}
@@ -345,7 +345,7 @@  discard block
 block discarded – undo
345 345
 		}
346 346
 
347 347
 		if ($op) {
348
-			$filtre = $a . $op . str_replace('\"', '"', $valeur);
348
+			$filtre = $a.$op.str_replace('\"', '"', $valeur);
349 349
 		}
350 350
 
351 351
 		if ($not) {
Please login to merge, or discard this patch.
ecrire/public/tracer.php 2 patches
Indentation   +170 added lines, -170 removed lines patch added patch discarded remove patch
@@ -11,190 +11,190 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 // https://code.spip.net/@trace_query_start
18 18
 function trace_query_start() {
19
-	static $trace = '?';
20
-	if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) {
21
-		if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) {
22
-			$trace = true;
23
-		}
24
-		else {
25
-			if (empty($GLOBALS['visiteur_session'])) {
26
-				// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
27
-				// car ici on ne sait pas si c'est un hit anonyme
28
-				// ou une requete SQL faite avant chargement de la session
29
-				$trace = (!empty($_GET['var_profile']) ? '?' : false);
30
-			}
31
-			else {
32
-				include_spip('inc/autoriser');
33
-				// gare au bouclage sur calcul de droits au premier appel
34
-				// A fortiori quand on demande une trace
35
-				$trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
36
-				$trace = (!empty($_GET['var_profile']) and autoriser('debug'));
37
-			}
38
-		}
39
-	}
40
-
41
-	return $trace ? microtime() : 0;
19
+    static $trace = '?';
20
+    if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) {
21
+        if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) {
22
+            $trace = true;
23
+        }
24
+        else {
25
+            if (empty($GLOBALS['visiteur_session'])) {
26
+                // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
27
+                // car ici on ne sait pas si c'est un hit anonyme
28
+                // ou une requete SQL faite avant chargement de la session
29
+                $trace = (!empty($_GET['var_profile']) ? '?' : false);
30
+            }
31
+            else {
32
+                include_spip('inc/autoriser');
33
+                // gare au bouclage sur calcul de droits au premier appel
34
+                // A fortiori quand on demande une trace
35
+                $trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
36
+                $trace = (!empty($_GET['var_profile']) and autoriser('debug'));
37
+            }
38
+        }
39
+    }
40
+
41
+    return $trace ? microtime() : 0;
42 42
 }
43 43
 
44 44
 // https://code.spip.net/@trace_query_end
45 45
 function trace_query_end($query, $start, $result, $erreur, $serveur = '') {
46
-	static $trace = '?';
47
-	if ($trace === '?') {
48
-		if (empty($GLOBALS['visiteur_session'])) {
49
-			// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
50
-			// car ici on ne sait pas si c'est un hit anonyme
51
-			// ou une requete SQL faite avant chargement de la session
52
-			$trace = (!empty($_GET['var_profile']) ? '?' : false);
53
-		}
54
-		else {
55
-			include_spip('inc/autoriser');
56
-			// gare au bouclage sur calcul de droits au premier appel
57
-			// A fortiori quand on demande une trace
58
-			$trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
59
-			$trace = (!empty($_GET['var_profile']) and autoriser('debug'));
60
-		}
61
-	}
62
-	if ($start) {
63
-		$end = microtime();
64
-		list($usec, $sec) = explode(' ', $start);
65
-		list($usec2, $sec2) = explode(' ', $end);
66
-		$dt = $sec2 + $usec2 - $sec - $usec;
67
-		pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]);
68
-		if ($trace) {
69
-			trace_query_chrono($dt, $query, $result, $serveur);
70
-		}
71
-	}
72
-	// tracer les erreurs, sauf pour select, c'est fait dans abstract_sql
73
-	if ($trace and $erreur and !preg_match('/^select\b/i', $query)) {
74
-		erreur_squelette([sql_errno($serveur), $erreur, $query]);
75
-	}
76
-
77
-	return $result;
46
+    static $trace = '?';
47
+    if ($trace === '?') {
48
+        if (empty($GLOBALS['visiteur_session'])) {
49
+            // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
50
+            // car ici on ne sait pas si c'est un hit anonyme
51
+            // ou une requete SQL faite avant chargement de la session
52
+            $trace = (!empty($_GET['var_profile']) ? '?' : false);
53
+        }
54
+        else {
55
+            include_spip('inc/autoriser');
56
+            // gare au bouclage sur calcul de droits au premier appel
57
+            // A fortiori quand on demande une trace
58
+            $trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
59
+            $trace = (!empty($_GET['var_profile']) and autoriser('debug'));
60
+        }
61
+    }
62
+    if ($start) {
63
+        $end = microtime();
64
+        list($usec, $sec) = explode(' ', $start);
65
+        list($usec2, $sec2) = explode(' ', $end);
66
+        $dt = $sec2 + $usec2 - $sec - $usec;
67
+        pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]);
68
+        if ($trace) {
69
+            trace_query_chrono($dt, $query, $result, $serveur);
70
+        }
71
+    }
72
+    // tracer les erreurs, sauf pour select, c'est fait dans abstract_sql
73
+    if ($trace and $erreur and !preg_match('/^select\b/i', $query)) {
74
+        erreur_squelette([sql_errno($serveur), $erreur, $query]);
75
+    }
76
+
77
+    return $result;
78 78
 }
79 79
 
80 80
 // https://code.spip.net/@trace_query_chrono
81 81
 function trace_query_chrono($dt, $query, $result, $serveur = '') {
82
-	include_spip('inc/filtres_mini');
83
-	static $tt = 0, $nb = 0;
84
-
85
-	$x = _request('var_mode_objet');
86
-	if (isset($GLOBALS['debug']['aucasou'])) {
87
-		list(, $boucle, $serveur, $contexte) = $GLOBALS['debug']['aucasou'];
88
-		if ($x and !preg_match("/$boucle\$/", $x)) {
89
-			return;
90
-		}
91
-		if ($serveur) {
92
-			$boucle .= " ($serveur)";
93
-		}
94
-		$boucle = "<b>$boucle</b>";
95
-	} else {
96
-		if ($x) {
97
-			return;
98
-		}
99
-		$boucle = $contexte = '';
100
-	}
101
-
102
-	$tt += $dt;
103
-	$nb++;
104
-
105
-	$q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query));
106
-	$e = sql_explain($query, $serveur);
107
-	$r = str_replace('Resource id ', '', (is_object($result) ? get_class($result) : $result));
108
-	$GLOBALS['tableau_des_temps'][] = [$dt, $nb, $boucle, $q, $e, $r, $contexte];
82
+    include_spip('inc/filtres_mini');
83
+    static $tt = 0, $nb = 0;
84
+
85
+    $x = _request('var_mode_objet');
86
+    if (isset($GLOBALS['debug']['aucasou'])) {
87
+        list(, $boucle, $serveur, $contexte) = $GLOBALS['debug']['aucasou'];
88
+        if ($x and !preg_match("/$boucle\$/", $x)) {
89
+            return;
90
+        }
91
+        if ($serveur) {
92
+            $boucle .= " ($serveur)";
93
+        }
94
+        $boucle = "<b>$boucle</b>";
95
+    } else {
96
+        if ($x) {
97
+            return;
98
+        }
99
+        $boucle = $contexte = '';
100
+    }
101
+
102
+    $tt += $dt;
103
+    $nb++;
104
+
105
+    $q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query));
106
+    $e = sql_explain($query, $serveur);
107
+    $r = str_replace('Resource id ', '', (is_object($result) ? get_class($result) : $result));
108
+    $GLOBALS['tableau_des_temps'][] = [$dt, $nb, $boucle, $q, $e, $r, $contexte];
109 109
 }
110 110
 
111 111
 
112 112
 function chrono_requete($temps) {
113
-	$total = 0;
114
-	$hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
115
-	$t = $q = $n = $d = [];
116
-	// Totaliser les temps et completer le Explain
117
-	foreach ($temps as $key => $v) {
118
-		list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v;
119
-		if (is_array($contexte)) {
120
-			$k = ($contexte[0] . " $boucle");
121
-			include_spip('public/compiler');
122
-			$env = reconstruire_contexte_compil($contexte);
123
-		} else {
124
-			$k = $env = $boucle;
125
-		}
126
-
127
-		$total += $dt;
128
-		$t[$key] = $dt;
129
-		$q[$key] = $nb;
130
-		if (!isset($d[$k])) {
131
-			$d[$k] = 0;
132
-			$n[$k] = 0;
133
-		}
134
-		$d[$k] += $dt;
135
-		++$n[$k];
136
-
137
-		if (!is_array($explain)) {
138
-			$explain = [];
139
-		}
140
-		foreach ($explain as $j => $v) {
141
-			$explain[$j] = "<tr><th>$j</th><td>"
142
-				. str_replace(';', '<br />', $v)
143
-				. '</td></tr>';
144
-		}
145
-		$e = "<table class='explain'>"
146
-			. '<caption>'
147
-			. $query
148
-			. '</caption>'
149
-			. "<tr><th>Time</th><td>$dt</td></tr>"
150
-			. "<tr><th>Order</th><td>$nb</td></tr>"
151
-			. "<tr><th>Res</th><td>$res</td></tr>"
152
-			. join('', $explain)
153
-			. '</table>';
154
-
155
-		$temps[$key] = [$e, $env, $k];
156
-	}
157
-	// Trier par temps d'execution decroissant
158
-	array_multisort($t, SORT_DESC, $q, $temps);
159
-	arsort($d);
160
-	$i = 1;
161
-	$t = [];
162
-	// Fabriquer les liens de navigations dans le tableau des temps
163
-	foreach ($temps as $k => $v) {
164
-		$titre = strip_tags($v[2]);
165
-		$href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
166
-		$href = str_replace("\\'", '&#39;', $href);
167
-
168
-		if (!isset($t[$v[2]])) {
169
-			$t[$v[2]] = [];
170
-		}
171
-		$t[$v[2]][] = "<span class='spip-debug-arg'> "
172
-			. "<a title='$titre' href='$href'>$i</a>"
173
-			. '</span>'
174
-			. ((count($t[$v[2]]) % 10 == 9) ? '<br />' : '');
175
-		$i++;
176
-	}
177
-
178
-	if ($d['']) {
179
-		$d[$hors] = $d[''];
180
-		$n[$hors] = $n[''];
181
-		$t[$hors] = $t[''];
182
-	}
183
-	unset($d['']);
184
-	// Fabriquer le tableau des liens de navigation dans le grand tableau
185
-	foreach ($d as $k => $v) {
186
-		$d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
187
-			. join('', $t[$k]);
188
-	}
189
-
190
-	$navigation = [
191
-		_T('zbug_statistiques'),
192
-		'<tr><td>'
193
-		. join("</td></tr>\n<tr><td>", $d)
194
-		. "</td></tr>\n"
195
-		. (# _request('var_mode_objet') ? '' :
196
-		('<tr><td>' . count($temps) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
197
-	];
198
-
199
-	return [$temps, $navigation];
113
+    $total = 0;
114
+    $hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
115
+    $t = $q = $n = $d = [];
116
+    // Totaliser les temps et completer le Explain
117
+    foreach ($temps as $key => $v) {
118
+        list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v;
119
+        if (is_array($contexte)) {
120
+            $k = ($contexte[0] . " $boucle");
121
+            include_spip('public/compiler');
122
+            $env = reconstruire_contexte_compil($contexte);
123
+        } else {
124
+            $k = $env = $boucle;
125
+        }
126
+
127
+        $total += $dt;
128
+        $t[$key] = $dt;
129
+        $q[$key] = $nb;
130
+        if (!isset($d[$k])) {
131
+            $d[$k] = 0;
132
+            $n[$k] = 0;
133
+        }
134
+        $d[$k] += $dt;
135
+        ++$n[$k];
136
+
137
+        if (!is_array($explain)) {
138
+            $explain = [];
139
+        }
140
+        foreach ($explain as $j => $v) {
141
+            $explain[$j] = "<tr><th>$j</th><td>"
142
+                . str_replace(';', '<br />', $v)
143
+                . '</td></tr>';
144
+        }
145
+        $e = "<table class='explain'>"
146
+            . '<caption>'
147
+            . $query
148
+            . '</caption>'
149
+            . "<tr><th>Time</th><td>$dt</td></tr>"
150
+            . "<tr><th>Order</th><td>$nb</td></tr>"
151
+            . "<tr><th>Res</th><td>$res</td></tr>"
152
+            . join('', $explain)
153
+            . '</table>';
154
+
155
+        $temps[$key] = [$e, $env, $k];
156
+    }
157
+    // Trier par temps d'execution decroissant
158
+    array_multisort($t, SORT_DESC, $q, $temps);
159
+    arsort($d);
160
+    $i = 1;
161
+    $t = [];
162
+    // Fabriquer les liens de navigations dans le tableau des temps
163
+    foreach ($temps as $k => $v) {
164
+        $titre = strip_tags($v[2]);
165
+        $href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
166
+        $href = str_replace("\\'", '&#39;', $href);
167
+
168
+        if (!isset($t[$v[2]])) {
169
+            $t[$v[2]] = [];
170
+        }
171
+        $t[$v[2]][] = "<span class='spip-debug-arg'> "
172
+            . "<a title='$titre' href='$href'>$i</a>"
173
+            . '</span>'
174
+            . ((count($t[$v[2]]) % 10 == 9) ? '<br />' : '');
175
+        $i++;
176
+    }
177
+
178
+    if ($d['']) {
179
+        $d[$hors] = $d[''];
180
+        $n[$hors] = $n[''];
181
+        $t[$hors] = $t[''];
182
+    }
183
+    unset($d['']);
184
+    // Fabriquer le tableau des liens de navigation dans le grand tableau
185
+    foreach ($d as $k => $v) {
186
+        $d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
187
+            . join('', $t[$k]);
188
+    }
189
+
190
+    $navigation = [
191
+        _T('zbug_statistiques'),
192
+        '<tr><td>'
193
+        . join("</td></tr>\n<tr><td>", $d)
194
+        . "</td></tr>\n"
195
+        . (# _request('var_mode_objet') ? '' :
196
+        ('<tr><td>' . count($temps) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
197
+    ];
198
+
199
+    return [$temps, $navigation];
200 200
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -111,13 +111,13 @@  discard block
 block discarded – undo
111 111
 
112 112
 function chrono_requete($temps) {
113 113
 	$total = 0;
114
-	$hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
114
+	$hors = '<i>'._T('zbug_hors_compilation').'</i>';
115 115
 	$t = $q = $n = $d = [];
116 116
 	// Totaliser les temps et completer le Explain
117 117
 	foreach ($temps as $key => $v) {
118 118
 		list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v;
119 119
 		if (is_array($contexte)) {
120
-			$k = ($contexte[0] . " $boucle");
120
+			$k = ($contexte[0]." $boucle");
121 121
 			include_spip('public/compiler');
122 122
 			$env = reconstruire_contexte_compil($contexte);
123 123
 		} else {
@@ -162,7 +162,7 @@  discard block
 block discarded – undo
162 162
 	// Fabriquer les liens de navigations dans le tableau des temps
163 163
 	foreach ($temps as $k => $v) {
164 164
 		$titre = strip_tags($v[2]);
165
-		$href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
165
+		$href = quote_amp($GLOBALS['REQUEST_URI'])."#req$i";
166 166
 		$href = str_replace("\\'", '&#39;', $href);
167 167
 
168 168
 		if (!isset($t[$v[2]])) {
@@ -183,7 +183,7 @@  discard block
 block discarded – undo
183 183
 	unset($d['']);
184 184
 	// Fabriquer le tableau des liens de navigation dans le grand tableau
185 185
 	foreach ($d as $k => $v) {
186
-		$d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
186
+		$d[$k] = $n[$k]."</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
187 187
 			. join('', $t[$k]);
188 188
 	}
189 189
 
@@ -193,7 +193,7 @@  discard block
 block discarded – undo
193 193
 		. join("</td></tr>\n<tr><td>", $d)
194 194
 		. "</td></tr>\n"
195 195
 		. (# _request('var_mode_objet') ? '' :
196
-		('<tr><td>' . count($temps) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
196
+		('<tr><td>'.count($temps).'</td><td>'._T('info_total').'</td><td class="time">'.$total.'</td><td></td></tr>'))
197 197
 	];
198 198
 
199 199
 	return [$temps, $navigation];
Please login to merge, or discard this patch.
ecrire/public/jointures.php 2 patches
Indentation   +395 added lines, -395 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
 
@@ -33,11 +33,11 @@  discard block
 block discarded – undo
33 33
  *     Chaine sinon : le nom du champ (non décomposable donc)
34 34
  */
35 35
 function decompose_champ_id_objet($champ) {
36
-	if (($champ !== 'id_objet') and preg_match(',^id_([a-z_]+)$,', $champ, $regs)) {
37
-		return ['id_objet', 'objet', objet_type($champ)];
38
-	}
36
+    if (($champ !== 'id_objet') and preg_match(',^id_([a-z_]+)$,', $champ, $regs)) {
37
+        return ['id_objet', 'objet', objet_type($champ)];
38
+    }
39 39
 
40
-	return $champ;
40
+    return $champ;
41 41
 }
42 42
 
43 43
 /**
@@ -56,21 +56,21 @@  discard block
 block discarded – undo
56 56
  *     - array(id_objet, objet), si le champ n'existe pas mais qu'on peut décomposer
57 57
  */
58 58
 function trouver_champs_decomposes($champ, $desc) {
59
-	if (
60
-		!is_array($desc) // on ne se risque pas en conjectures si on ne connait pas la table
61
-		or array_key_exists($champ, $desc['field'])
62
-	) {
63
-		return [$champ];
64
-	}
65
-	// si le champ se décompose, tester que les colonnes décomposées sont présentes
66
-	if (is_array($decompose = decompose_champ_id_objet($champ))) {
67
-		array_pop($decompose);
68
-		if (count(array_intersect($decompose, array_keys($desc['field']))) == count($decompose)) {
69
-			return $decompose;
70
-		}
71
-	}
72
-
73
-	return [$champ];
59
+    if (
60
+        !is_array($desc) // on ne se risque pas en conjectures si on ne connait pas la table
61
+        or array_key_exists($champ, $desc['field'])
62
+    ) {
63
+        return [$champ];
64
+    }
65
+    // si le champ se décompose, tester que les colonnes décomposées sont présentes
66
+    if (is_array($decompose = decompose_champ_id_objet($champ))) {
67
+        array_pop($decompose);
68
+        if (count(array_intersect($decompose, array_keys($desc['field']))) == count($decompose)) {
69
+            return $decompose;
70
+        }
71
+    }
72
+
73
+    return [$champ];
74 74
 }
75 75
 
76 76
 
@@ -100,23 +100,23 @@  discard block
 block discarded – undo
100 100
  *     Alias de la table de jointure (Lx)
101 101
  */
102 102
 function calculer_jointure(&$boucle, $depart, $arrivee, $col = '', $cond = false, $max_liens = 5) {
103
-	// les jointures minimales sont optimales :
104
-	// on contraint le nombre d'etapes en l'augmentant
105
-	// jusqu'a ce qu'on trouve une jointure ou qu'on atteigne la limite maxi
106
-	$max = 1;
107
-	$res = false;
108
-	$milieu_exclus = ($col ? $col : []);
109
-	while ($max <= $max_liens and !$res) {
110
-		$res = calculer_chaine_jointures($boucle, $depart, $arrivee, [], $milieu_exclus, $max);
111
-		$max++;
112
-	}
113
-	if (!$res) {
114
-		return '';
115
-	}
116
-
117
-	list($nom, $desc) = $depart;
118
-
119
-	return fabrique_jointures($boucle, $res, $cond, $desc, $nom, $col);
103
+    // les jointures minimales sont optimales :
104
+    // on contraint le nombre d'etapes en l'augmentant
105
+    // jusqu'a ce qu'on trouve une jointure ou qu'on atteigne la limite maxi
106
+    $max = 1;
107
+    $res = false;
108
+    $milieu_exclus = ($col ? $col : []);
109
+    while ($max <= $max_liens and !$res) {
110
+        $res = calculer_chaine_jointures($boucle, $depart, $arrivee, [], $milieu_exclus, $max);
111
+        $max++;
112
+    }
113
+    if (!$res) {
114
+        return '';
115
+    }
116
+
117
+    list($nom, $desc) = $depart;
118
+
119
+    return fabrique_jointures($boucle, $res, $cond, $desc, $nom, $col);
120 120
 }
121 121
 
122 122
 /**
@@ -155,79 +155,79 @@  discard block
 block discarded – undo
155 155
  *     Alias de la table de jointure (Lx)
156 156
  */
157 157
 function fabrique_jointures(&$boucle, $res, $cond = false, $desc = [], $nom = '', $col = '', $echap = true) {
158
-	static $num = [];
159
-	$id_table = '';
160
-	$cpt = &$num[$boucle->descr['nom']][$boucle->descr['gram']][$boucle->id_boucle];
161
-	foreach ($res as $cle => $r) {
162
-		list($d, $a, $j) = $r;
163
-		if (!$id_table) {
164
-			$id_table = $d;
165
-		}
166
-		$n = ++$cpt;
167
-		if (is_array($j)) { // c'est un lien sur un champ du type id_objet,objet,'article'
168
-			list($j1, $j2, $obj, $type) = $j;
169
-			// trouver de quel cote est (id_objet,objet)
170
-			if ($j1 == "id_$obj") {
171
-				$obj = "$id_table.$obj";
172
-			} else {
173
-				$obj = "L$n.$obj";
174
-			}
175
-			// le where complementaire est envoye dans la jointure et dans le where
176
-			// on utilise une clé qui le relie a la jointure pour que l'optimiseur
177
-			// sache qu'il peut enlever ce where si il enleve la jointure
178
-			$boucle->where["JOIN-L$n"] =
179
-				$echap ?
180
-					["'='","'$obj'","sql_quote('$type')"]
181
-					:
182
-					['=',"$obj",sql_quote($type)];
183
-			$boucle->join["L$n"] =
184
-				$echap ?
185
-					["'$id_table'", "'$j2'", "'$j1'", "'$obj='.sql_quote('$type')"]
186
-					:
187
-					[$id_table, $j2, $j1, "$obj=" . sql_quote($type)];
188
-		} else {
189
-			$boucle->join["L$n"] = $echap ? ["'$id_table'", "'$j'"] : [$id_table, $j];
190
-		}
191
-		$boucle->from[$id_table = "L$n"] = $a[0];
192
-	}
193
-
194
-
195
-	// pas besoin de group by
196
-	// (cf http://article.gmane.org/gmane.comp.web.spip.devel/30555)
197
-	// si une seule jointure et sur une table avec primary key formee
198
-	// de l'index principal et de l'index de jointure (non conditionnel! [6031])
199
-	// et operateur d'egalite (https://core.spip.net/issues/477)
200
-
201
-	if ($pk = (isset($a[1]) && (count($boucle->from) == 2) && !$cond)) {
202
-		$pk = nogroupby_if($desc, $a[1], $col);
203
-	}
204
-
205
-	// pas de group by
206
-	// si une seule jointure
207
-	// et si l'index de jointure est une primary key a l'arrivee !
208
-	if (
209
-		!$pk
210
-		and (count($boucle->from) == 2)
211
-		and isset($a[1]['key']['PRIMARY KEY'])
212
-		and ($j == $a[1]['key']['PRIMARY KEY'])
213
-	) {
214
-		$pk = true;
215
-	}
216
-
217
-	// la clause Group by est en conflit avec ORDER BY, a completer
218
-	$groups = liste_champs_jointures($nom, $desc, true);
219
-	if (!$pk) {
220
-		foreach ($groups as $id_prim) {
221
-			$id_field = $nom . '.' . $id_prim;
222
-			if (!in_array($id_field, $boucle->group)) {
223
-				$boucle->group[] = $id_field;
224
-			}
225
-		}
226
-	}
227
-
228
-	$boucle->modificateur['lien'] = true;
229
-
230
-	return "L$n";
158
+    static $num = [];
159
+    $id_table = '';
160
+    $cpt = &$num[$boucle->descr['nom']][$boucle->descr['gram']][$boucle->id_boucle];
161
+    foreach ($res as $cle => $r) {
162
+        list($d, $a, $j) = $r;
163
+        if (!$id_table) {
164
+            $id_table = $d;
165
+        }
166
+        $n = ++$cpt;
167
+        if (is_array($j)) { // c'est un lien sur un champ du type id_objet,objet,'article'
168
+            list($j1, $j2, $obj, $type) = $j;
169
+            // trouver de quel cote est (id_objet,objet)
170
+            if ($j1 == "id_$obj") {
171
+                $obj = "$id_table.$obj";
172
+            } else {
173
+                $obj = "L$n.$obj";
174
+            }
175
+            // le where complementaire est envoye dans la jointure et dans le where
176
+            // on utilise une clé qui le relie a la jointure pour que l'optimiseur
177
+            // sache qu'il peut enlever ce where si il enleve la jointure
178
+            $boucle->where["JOIN-L$n"] =
179
+                $echap ?
180
+                    ["'='","'$obj'","sql_quote('$type')"]
181
+                    :
182
+                    ['=',"$obj",sql_quote($type)];
183
+            $boucle->join["L$n"] =
184
+                $echap ?
185
+                    ["'$id_table'", "'$j2'", "'$j1'", "'$obj='.sql_quote('$type')"]
186
+                    :
187
+                    [$id_table, $j2, $j1, "$obj=" . sql_quote($type)];
188
+        } else {
189
+            $boucle->join["L$n"] = $echap ? ["'$id_table'", "'$j'"] : [$id_table, $j];
190
+        }
191
+        $boucle->from[$id_table = "L$n"] = $a[0];
192
+    }
193
+
194
+
195
+    // pas besoin de group by
196
+    // (cf http://article.gmane.org/gmane.comp.web.spip.devel/30555)
197
+    // si une seule jointure et sur une table avec primary key formee
198
+    // de l'index principal et de l'index de jointure (non conditionnel! [6031])
199
+    // et operateur d'egalite (https://core.spip.net/issues/477)
200
+
201
+    if ($pk = (isset($a[1]) && (count($boucle->from) == 2) && !$cond)) {
202
+        $pk = nogroupby_if($desc, $a[1], $col);
203
+    }
204
+
205
+    // pas de group by
206
+    // si une seule jointure
207
+    // et si l'index de jointure est une primary key a l'arrivee !
208
+    if (
209
+        !$pk
210
+        and (count($boucle->from) == 2)
211
+        and isset($a[1]['key']['PRIMARY KEY'])
212
+        and ($j == $a[1]['key']['PRIMARY KEY'])
213
+    ) {
214
+        $pk = true;
215
+    }
216
+
217
+    // la clause Group by est en conflit avec ORDER BY, a completer
218
+    $groups = liste_champs_jointures($nom, $desc, true);
219
+    if (!$pk) {
220
+        foreach ($groups as $id_prim) {
221
+            $id_field = $nom . '.' . $id_prim;
222
+            if (!in_array($id_field, $boucle->group)) {
223
+                $boucle->group[] = $id_field;
224
+            }
225
+        }
226
+    }
227
+
228
+    $boucle->modificateur['lien'] = true;
229
+
230
+    return "L$n";
231 231
 }
232 232
 
233 233
 /**
@@ -242,16 +242,16 @@  discard block
 block discarded – undo
242 242
  * @return bool
243 243
  */
244 244
 function nogroupby_if($depart, $arrivee, $col) {
245
-	$pk = $arrivee['key']['PRIMARY KEY'];
246
-	if (!$pk) {
247
-		return false;
248
-	}
249
-	$id_primary = $depart['key']['PRIMARY KEY'];
250
-	if (is_array($col)) {
251
-		$col = implode(', *', $col);
252
-	} // cas id_objet, objet
253
-	return (preg_match("/^$id_primary, *$col$/", $pk) or
254
-		preg_match("/^$col, *$id_primary$/", $pk));
245
+    $pk = $arrivee['key']['PRIMARY KEY'];
246
+    if (!$pk) {
247
+        return false;
248
+    }
249
+    $id_primary = $depart['key']['PRIMARY KEY'];
250
+    if (is_array($col)) {
251
+        $col = implode(', *', $col);
252
+    } // cas id_objet, objet
253
+    return (preg_match("/^$id_primary, *$col$/", $pk) or
254
+        preg_match("/^$col, *$id_primary$/", $pk));
255 255
 }
256 256
 
257 257
 /**
@@ -269,46 +269,46 @@  discard block
 block discarded – undo
269 269
  */
270 270
 function liste_champs_jointures($nom, $desc, $primary = false) {
271 271
 
272
-	static $nojoin = ['idx', 'maj', 'date', 'statut'];
272
+    static $nojoin = ['idx', 'maj', 'date', 'statut'];
273 273
 
274
-	// si cle primaire demandee, la privilegier
275
-	if ($primary && isset($desc['key']['PRIMARY KEY'])) {
276
-		return split_key($desc['key']['PRIMARY KEY']);
277
-	}
274
+    // si cle primaire demandee, la privilegier
275
+    if ($primary && isset($desc['key']['PRIMARY KEY'])) {
276
+        return split_key($desc['key']['PRIMARY KEY']);
277
+    }
278 278
 
279
-	// les champs declares explicitement pour les jointures
280
-	if (isset($desc['join'])) {
281
-		return $desc['join'];
282
-	}
283
-	/*elseif (isset($GLOBALS['tables_principales'][$nom]['join'])) return $GLOBALS['tables_principales'][$nom]['join'];
279
+    // les champs declares explicitement pour les jointures
280
+    if (isset($desc['join'])) {
281
+        return $desc['join'];
282
+    }
283
+    /*elseif (isset($GLOBALS['tables_principales'][$nom]['join'])) return $GLOBALS['tables_principales'][$nom]['join'];
284 284
 	elseif (isset($GLOBALS['tables_auxiliaires'][$nom]['join'])) return $GLOBALS['tables_auxiliaires'][$nom]['join'];*/
285 285
 
286
-	// si pas de cle, c'est fichu
287
-	if (!isset($desc['key'])) {
288
-		return [];
289
-	}
290
-
291
-	// si cle primaire
292
-	if (isset($desc['key']['PRIMARY KEY'])) {
293
-		return split_key($desc['key']['PRIMARY KEY']);
294
-	}
295
-
296
-	// ici on se rabat sur les cles secondaires,
297
-	// en eliminant celles qui sont pas pertinentes (idx, maj)
298
-	// si jamais le resultat n'est pas pertinent pour une table donnee,
299
-	// il faut declarer explicitement le champ 'join' de sa description
300
-
301
-	$join = [];
302
-	foreach ($desc['key'] as $v) {
303
-		$join = split_key($v, $join);
304
-	}
305
-	foreach ($join as $k) {
306
-		if (in_array($k, $nojoin)) {
307
-			unset($join[$k]);
308
-		}
309
-	}
310
-
311
-	return $join;
286
+    // si pas de cle, c'est fichu
287
+    if (!isset($desc['key'])) {
288
+        return [];
289
+    }
290
+
291
+    // si cle primaire
292
+    if (isset($desc['key']['PRIMARY KEY'])) {
293
+        return split_key($desc['key']['PRIMARY KEY']);
294
+    }
295
+
296
+    // ici on se rabat sur les cles secondaires,
297
+    // en eliminant celles qui sont pas pertinentes (idx, maj)
298
+    // si jamais le resultat n'est pas pertinent pour une table donnee,
299
+    // il faut declarer explicitement le champ 'join' de sa description
300
+
301
+    $join = [];
302
+    foreach ($desc['key'] as $v) {
303
+        $join = split_key($v, $join);
304
+    }
305
+    foreach ($join as $k) {
306
+        if (in_array($k, $nojoin)) {
307
+            unset($join[$k]);
308
+        }
309
+    }
310
+
311
+    return $join;
312 312
 }
313 313
 
314 314
 /**
@@ -319,14 +319,14 @@  discard block
 block discarded – undo
319 319
  * @return array
320 320
  */
321 321
 function split_key($v, $join = []) {
322
-	foreach (preg_split('/,\s*/', $v) as $k) {
323
-		if (strpos($k, '(') !== false) {
324
-			$k = explode('(', $k);
325
-			$k = trim(reset($k));
326
-		}
327
-		$join[$k] = $k;
328
-	}
329
-	return $join;
322
+    foreach (preg_split('/,\s*/', $v) as $k) {
323
+        if (strpos($k, '(') !== false) {
324
+            $k = explode('(', $k);
325
+            $k = trim(reset($k));
326
+        }
327
+        $join[$k] = $k;
328
+    }
329
+    return $join;
330 330
 }
331 331
 
332 332
 /**
@@ -349,135 +349,135 @@  discard block
 block discarded – undo
349 349
  * @return array
350 350
  */
351 351
 function calculer_chaine_jointures(
352
-	&$boucle,
353
-	$depart,
354
-	$arrivee,
355
-	$vu = [],
356
-	$milieu_exclus = [],
357
-	$max_liens = 5
352
+    &$boucle,
353
+    $depart,
354
+    $arrivee,
355
+    $vu = [],
356
+    $milieu_exclus = [],
357
+    $max_liens = 5
358 358
 ) {
359
-	static $trouver_table;
360
-	if (!$trouver_table) {
361
-		$trouver_table = charger_fonction('trouver_table', 'base');
362
-	}
363
-
364
-	if (is_string($milieu_exclus)) {
365
-		$milieu_exclus = [$milieu_exclus];
366
-	}
367
-	// quand on a exclus id_objet comme cle de jointure, il faut aussi exclure objet
368
-	// faire une jointure sur objet tout seul n'a pas de sens
369
-	if (in_array('id_objet', $milieu_exclus) and !in_array('objet', $milieu_exclus)) {
370
-		$milieu_exclus[] = 'objet';
371
-	}
372
-
373
-	list($dnom, $ddesc) = $depart;
374
-	list($anom, $adesc) = $arrivee;
375
-	if (!count($vu)) {
376
-		$vu[] = $dnom; // ne pas oublier la table de depart
377
-		$vu[] = $anom; // ne pas oublier la table d'arrivee
378
-	}
379
-
380
-	$akeys = [];
381
-	foreach ($adesc['key'] as $k) {
382
-		// respecter l'ordre de $adesc['key'] pour ne pas avoir id_trad en premier entre autres...
383
-		$akeys = array_merge($akeys, preg_split('/,\s*/', $k));
384
-	}
385
-
386
-	// enlever les cles d'arrivee exclues par l'appel
387
-	$akeys = array_diff($akeys, $milieu_exclus);
388
-
389
-	// cles candidates au depart
390
-	$keys = liste_champs_jointures($dnom, $ddesc);
391
-	// enlever les cles dde depart exclues par l'appel
392
-	$keys = array_diff($keys, $milieu_exclus);
393
-
394
-	$v = !$keys ? false : array_intersect(array_values($keys), $akeys);
395
-
396
-	if ($v) {
397
-		return [[$dnom, [$adesc['table'], $adesc], array_shift($v)]];
398
-	}
399
-
400
-	// regarder si l'on a (id_objet,objet) au depart et si on peut le mapper sur un id_xx
401
-	if (count(array_intersect(['id_objet', 'objet'], $keys)) == 2) {
402
-		// regarder si l'une des cles d'arrivee peut se decomposer en
403
-		// id_objet,objet
404
-		// si oui on la prend
405
-		foreach ($akeys as $key) {
406
-			$v = decompose_champ_id_objet($key);
407
-			if (is_array($v)) {
408
-				$objet = array_shift($v); // objet,'article'
409
-				array_unshift($v, $key); // id_article,objet,'article'
410
-				array_unshift($v, $objet); // id_objet,id_article,objet,'article'
411
-				return [[$dnom, [$adesc['table'], $adesc], $v]];
412
-			}
413
-		}
414
-	} else {
415
-		// regarder si l'une des cles de depart peut se decomposer en
416
-		// id_objet,objet a l'arrivee
417
-		// si oui on la prend
418
-		foreach ($keys as $key) {
419
-			if (count($v = trouver_champs_decomposes($key, $adesc)) > 1) {
420
-				if (count($v) == count(array_intersect($v, $akeys))) {
421
-					$v = decompose_champ_id_objet($key); // id_objet,objet,'article'
422
-					array_unshift($v, $key); // id_article,id_objet,objet,'article'
423
-					return [[$dnom, [$adesc['table'], $adesc], $v]];
424
-				}
425
-			}
426
-		}
427
-	}
428
-	// si l'on voulait une jointure direct, c'est rate !
429
-	if ($max_liens <= 1) {
430
-		return [];
431
-	}
432
-
433
-	// sinon essayer de passer par une autre table
434
-	$new = $vu;
435
-	foreach ($boucle->jointures as $v) {
436
-		if (
437
-			$v
438
-			and !in_array($v, $vu)
439
-			and $def = $trouver_table($v, $boucle->sql_serveur)
440
-			and !in_array($def['table_sql'], $vu)
441
-		) {
442
-			// ne pas tester les cles qui sont exclues a l'appel
443
-			// ie la cle de la jointure precedente
444
-			$test_cles = $milieu_exclus;
445
-			$new[] = $v;
446
-			$max_iter = 50; // securite
447
-			while (
448
-				count($jointure_directe_possible = calculer_chaine_jointures(
449
-					$boucle,
450
-					$depart,
451
-					[$v, $def],
452
-					$vu,
453
-					$test_cles,
454
-					1
455
-				))
456
-				and $max_iter--
457
-			) {
458
-				$jointure_directe_possible = reset($jointure_directe_possible);
459
-				$milieu = end($jointure_directe_possible);
460
-				$exclure_fin = $milieu_exclus;
461
-				if (is_string($milieu)) {
462
-					$exclure_fin[] = $milieu;
463
-					$test_cles[] = $milieu;
464
-				} else {
465
-					$exclure_fin = array_merge($exclure_fin, $milieu);
466
-					$test_cles = array_merge($test_cles, $milieu);
467
-				}
468
-				// essayer de rejoindre l'arrivee a partir de cette etape intermediaire
469
-				// sans repasser par la meme cle milieu, ni une cle deja vue !
470
-				$r = calculer_chaine_jointures($boucle, [$v, $def], $arrivee, $new, $exclure_fin, $max_liens - 1);
471
-				if ($r) {
472
-					array_unshift($r, $jointure_directe_possible);
473
-
474
-					return $r;
475
-				}
476
-			}
477
-		}
478
-	}
479
-
480
-	return [];
359
+    static $trouver_table;
360
+    if (!$trouver_table) {
361
+        $trouver_table = charger_fonction('trouver_table', 'base');
362
+    }
363
+
364
+    if (is_string($milieu_exclus)) {
365
+        $milieu_exclus = [$milieu_exclus];
366
+    }
367
+    // quand on a exclus id_objet comme cle de jointure, il faut aussi exclure objet
368
+    // faire une jointure sur objet tout seul n'a pas de sens
369
+    if (in_array('id_objet', $milieu_exclus) and !in_array('objet', $milieu_exclus)) {
370
+        $milieu_exclus[] = 'objet';
371
+    }
372
+
373
+    list($dnom, $ddesc) = $depart;
374
+    list($anom, $adesc) = $arrivee;
375
+    if (!count($vu)) {
376
+        $vu[] = $dnom; // ne pas oublier la table de depart
377
+        $vu[] = $anom; // ne pas oublier la table d'arrivee
378
+    }
379
+
380
+    $akeys = [];
381
+    foreach ($adesc['key'] as $k) {
382
+        // respecter l'ordre de $adesc['key'] pour ne pas avoir id_trad en premier entre autres...
383
+        $akeys = array_merge($akeys, preg_split('/,\s*/', $k));
384
+    }
385
+
386
+    // enlever les cles d'arrivee exclues par l'appel
387
+    $akeys = array_diff($akeys, $milieu_exclus);
388
+
389
+    // cles candidates au depart
390
+    $keys = liste_champs_jointures($dnom, $ddesc);
391
+    // enlever les cles dde depart exclues par l'appel
392
+    $keys = array_diff($keys, $milieu_exclus);
393
+
394
+    $v = !$keys ? false : array_intersect(array_values($keys), $akeys);
395
+
396
+    if ($v) {
397
+        return [[$dnom, [$adesc['table'], $adesc], array_shift($v)]];
398
+    }
399
+
400
+    // regarder si l'on a (id_objet,objet) au depart et si on peut le mapper sur un id_xx
401
+    if (count(array_intersect(['id_objet', 'objet'], $keys)) == 2) {
402
+        // regarder si l'une des cles d'arrivee peut se decomposer en
403
+        // id_objet,objet
404
+        // si oui on la prend
405
+        foreach ($akeys as $key) {
406
+            $v = decompose_champ_id_objet($key);
407
+            if (is_array($v)) {
408
+                $objet = array_shift($v); // objet,'article'
409
+                array_unshift($v, $key); // id_article,objet,'article'
410
+                array_unshift($v, $objet); // id_objet,id_article,objet,'article'
411
+                return [[$dnom, [$adesc['table'], $adesc], $v]];
412
+            }
413
+        }
414
+    } else {
415
+        // regarder si l'une des cles de depart peut se decomposer en
416
+        // id_objet,objet a l'arrivee
417
+        // si oui on la prend
418
+        foreach ($keys as $key) {
419
+            if (count($v = trouver_champs_decomposes($key, $adesc)) > 1) {
420
+                if (count($v) == count(array_intersect($v, $akeys))) {
421
+                    $v = decompose_champ_id_objet($key); // id_objet,objet,'article'
422
+                    array_unshift($v, $key); // id_article,id_objet,objet,'article'
423
+                    return [[$dnom, [$adesc['table'], $adesc], $v]];
424
+                }
425
+            }
426
+        }
427
+    }
428
+    // si l'on voulait une jointure direct, c'est rate !
429
+    if ($max_liens <= 1) {
430
+        return [];
431
+    }
432
+
433
+    // sinon essayer de passer par une autre table
434
+    $new = $vu;
435
+    foreach ($boucle->jointures as $v) {
436
+        if (
437
+            $v
438
+            and !in_array($v, $vu)
439
+            and $def = $trouver_table($v, $boucle->sql_serveur)
440
+            and !in_array($def['table_sql'], $vu)
441
+        ) {
442
+            // ne pas tester les cles qui sont exclues a l'appel
443
+            // ie la cle de la jointure precedente
444
+            $test_cles = $milieu_exclus;
445
+            $new[] = $v;
446
+            $max_iter = 50; // securite
447
+            while (
448
+                count($jointure_directe_possible = calculer_chaine_jointures(
449
+                    $boucle,
450
+                    $depart,
451
+                    [$v, $def],
452
+                    $vu,
453
+                    $test_cles,
454
+                    1
455
+                ))
456
+                and $max_iter--
457
+            ) {
458
+                $jointure_directe_possible = reset($jointure_directe_possible);
459
+                $milieu = end($jointure_directe_possible);
460
+                $exclure_fin = $milieu_exclus;
461
+                if (is_string($milieu)) {
462
+                    $exclure_fin[] = $milieu;
463
+                    $test_cles[] = $milieu;
464
+                } else {
465
+                    $exclure_fin = array_merge($exclure_fin, $milieu);
466
+                    $test_cles = array_merge($test_cles, $milieu);
467
+                }
468
+                // essayer de rejoindre l'arrivee a partir de cette etape intermediaire
469
+                // sans repasser par la meme cle milieu, ni une cle deja vue !
470
+                $r = calculer_chaine_jointures($boucle, [$v, $def], $arrivee, $new, $exclure_fin, $max_liens - 1);
471
+                if ($r) {
472
+                    array_unshift($r, $jointure_directe_possible);
473
+
474
+                    return $r;
475
+                }
476
+            }
477
+        }
478
+    }
479
+
480
+    return [];
481 481
 }
482 482
 
483 483
 /**
@@ -488,18 +488,18 @@  discard block
 block discarded – undo
488 488
  * @return array
489 489
  */
490 490
 function trouver_cles_table($keys) {
491
-	$res = [];
492
-	foreach ($keys as $v) {
493
-		if (!strpos($v, ',')) {
494
-			$res[$v] = 1;
495
-		} else {
496
-			foreach (preg_split('/\s*,\s*/', $v) as $k) {
497
-				$res[$k] = 1;
498
-			}
499
-		}
500
-	}
501
-
502
-	return array_keys($res);
491
+    $res = [];
492
+    foreach ($keys as $v) {
493
+        if (!strpos($v, ',')) {
494
+            $res[$v] = 1;
495
+        } else {
496
+            foreach (preg_split('/\s*,\s*/', $v) as $k) {
497
+                $res[$k] = 1;
498
+            }
499
+        }
500
+    }
501
+
502
+    return array_keys($res);
503 503
 }
504 504
 
505 505
 
@@ -526,34 +526,34 @@  discard block
 block discarded – undo
526 526
  *     - 'alias' : alias utilisé pour la table (si pertinent. ie: avec `$boucle->from` transmis par exemple)
527 527
  */
528 528
 function chercher_champ_dans_tables($cle, $tables, $connect, $checkarrivee = false) {
529
-	static $trouver_table = '';
530
-	if (!$trouver_table) {
531
-		$trouver_table = charger_fonction('trouver_table', 'base');
532
-	}
533
-
534
-	if (!is_array($cle)) {
535
-		$cle = [$cle];
536
-	}
537
-
538
-	foreach ($tables as $k => $table) {
539
-		if ($table && $desc = $trouver_table($table, $connect)) {
540
-			if (
541
-				isset($desc['field'])
542
-				// verifier que toutes les cles cherchees sont la
543
-				and (count(array_intersect($cle, array_keys($desc['field']))) == count($cle))
544
-				// si on sait ou on veut arriver, il faut que ca colle
545
-				and ($checkarrivee == false || $checkarrivee == $desc['table'])
546
-			) {
547
-				return [
548
-					'desc' => $desc,
549
-					'table' => $desc['table'],
550
-					'alias' => $k,
551
-				];
552
-			}
553
-		}
554
-	}
555
-
556
-	return false;
529
+    static $trouver_table = '';
530
+    if (!$trouver_table) {
531
+        $trouver_table = charger_fonction('trouver_table', 'base');
532
+    }
533
+
534
+    if (!is_array($cle)) {
535
+        $cle = [$cle];
536
+    }
537
+
538
+    foreach ($tables as $k => $table) {
539
+        if ($table && $desc = $trouver_table($table, $connect)) {
540
+            if (
541
+                isset($desc['field'])
542
+                // verifier que toutes les cles cherchees sont la
543
+                and (count(array_intersect($cle, array_keys($desc['field']))) == count($cle))
544
+                // si on sait ou on veut arriver, il faut que ca colle
545
+                and ($checkarrivee == false || $checkarrivee == $desc['table'])
546
+            ) {
547
+                return [
548
+                    'desc' => $desc,
549
+                    'table' => $desc['table'],
550
+                    'alias' => $k,
551
+                ];
552
+            }
553
+        }
554
+    }
555
+
556
+    return false;
557 557
 }
558 558
 
559 559
 /**
@@ -579,52 +579,52 @@  discard block
 block discarded – undo
579 579
  */
580 580
 function trouver_champ_exterieur($cle, $joints, &$boucle, $checkarrivee = false) {
581 581
 
582
-	// support de la recherche multi champ :
583
-	// si en seconde etape on a decompose le champ id_xx en id_objet,objet
584
-	// on reentre ici soit en cherchant une table les 2 champs id_objet,objet
585
-	// soit une table avec les 3 champs id_xx, id_objet, objet
586
-	if (!is_array($cle)) {
587
-		$cle = [$cle];
588
-	}
589
-
590
-	if ($infos = chercher_champ_dans_tables($cle, $joints, $boucle->sql_serveur, $checkarrivee)) {
591
-		return [$infos['table'], $infos['desc'], $cle];
592
-	}
593
-
594
-	// au premier coup, on essaye de decomposer, si possible
595
-	if (
596
-		count($cle) == 1
597
-		and $c = reset($cle)
598
-		and is_array($decompose = decompose_champ_id_objet($c))
599
-	) {
600
-		$desc = $boucle->show;
601
-
602
-		// cas 1 : la cle id_xx est dans la table de depart
603
-		// -> on cherche uniquement id_objet,objet a l'arrivee
604
-		if (isset($desc['field'][$c])) {
605
-			$cle = [];
606
-			$cle[] = array_shift($decompose); // id_objet
607
-			$cle[] = array_shift($decompose); // objet
608
-			return trouver_champ_exterieur($cle, $joints, $boucle, $checkarrivee);
609
-		}
610
-		// cas 2 : la cle id_xx n'est pas dans la table de depart
611
-		// -> il faut trouver une cle de depart zzz telle que
612
-		// id_objet,objet,zzz soit a l'arrivee
613
-		else {
614
-			$depart = liste_champs_jointures((isset($desc['table']) ? $desc['table'] : ''), $desc);
615
-			foreach ($depart as $d) {
616
-				$cle = [];
617
-				$cle[] = array_shift($decompose); // id_objet
618
-				$cle[] = array_shift($decompose); // objet
619
-				$cle[] = $d;
620
-				if ($ext = trouver_champ_exterieur($cle, $joints, $boucle, $checkarrivee)) {
621
-					return $ext;
622
-				}
623
-			}
624
-		}
625
-	}
626
-
627
-	return '';
582
+    // support de la recherche multi champ :
583
+    // si en seconde etape on a decompose le champ id_xx en id_objet,objet
584
+    // on reentre ici soit en cherchant une table les 2 champs id_objet,objet
585
+    // soit une table avec les 3 champs id_xx, id_objet, objet
586
+    if (!is_array($cle)) {
587
+        $cle = [$cle];
588
+    }
589
+
590
+    if ($infos = chercher_champ_dans_tables($cle, $joints, $boucle->sql_serveur, $checkarrivee)) {
591
+        return [$infos['table'], $infos['desc'], $cle];
592
+    }
593
+
594
+    // au premier coup, on essaye de decomposer, si possible
595
+    if (
596
+        count($cle) == 1
597
+        and $c = reset($cle)
598
+        and is_array($decompose = decompose_champ_id_objet($c))
599
+    ) {
600
+        $desc = $boucle->show;
601
+
602
+        // cas 1 : la cle id_xx est dans la table de depart
603
+        // -> on cherche uniquement id_objet,objet a l'arrivee
604
+        if (isset($desc['field'][$c])) {
605
+            $cle = [];
606
+            $cle[] = array_shift($decompose); // id_objet
607
+            $cle[] = array_shift($decompose); // objet
608
+            return trouver_champ_exterieur($cle, $joints, $boucle, $checkarrivee);
609
+        }
610
+        // cas 2 : la cle id_xx n'est pas dans la table de depart
611
+        // -> il faut trouver une cle de depart zzz telle que
612
+        // id_objet,objet,zzz soit a l'arrivee
613
+        else {
614
+            $depart = liste_champs_jointures((isset($desc['table']) ? $desc['table'] : ''), $desc);
615
+            foreach ($depart as $d) {
616
+                $cle = [];
617
+                $cle[] = array_shift($decompose); // id_objet
618
+                $cle[] = array_shift($decompose); // objet
619
+                $cle[] = $d;
620
+                if ($ext = trouver_champ_exterieur($cle, $joints, $boucle, $checkarrivee)) {
621
+                    return $ext;
622
+                }
623
+            }
624
+        }
625
+    }
626
+
627
+    return '';
628 628
 }
629 629
 
630 630
 /**
@@ -656,21 +656,21 @@  discard block
 block discarded – undo
656 656
  * @return string
657 657
  */
658 658
 function trouver_jointure_champ($champ, &$boucle, $jointures = false, $cond = false, $checkarrivee = false) {
659
-	if ($jointures === false) {
660
-		$jointures = $boucle->jointures;
661
-	}
662
-	// TODO : aberration, on utilise $jointures pour trouver le champ
663
-	// mais pas poour construire la jointure ensuite
664
-	$arrivee = trouver_champ_exterieur($champ, $jointures, $boucle, $checkarrivee);
665
-	if ($arrivee) {
666
-		$desc = $boucle->show;
667
-		array_pop($arrivee); // enlever la cle en 3eme argument
668
-		$cle = calculer_jointure($boucle, [$desc['id_table'], $desc], $arrivee, '', $cond);
669
-		if ($cle) {
670
-			return $cle;
671
-		}
672
-	}
673
-	spip_log("trouver_jointure_champ: $champ inconnu");
674
-
675
-	return '';
659
+    if ($jointures === false) {
660
+        $jointures = $boucle->jointures;
661
+    }
662
+    // TODO : aberration, on utilise $jointures pour trouver le champ
663
+    // mais pas poour construire la jointure ensuite
664
+    $arrivee = trouver_champ_exterieur($champ, $jointures, $boucle, $checkarrivee);
665
+    if ($arrivee) {
666
+        $desc = $boucle->show;
667
+        array_pop($arrivee); // enlever la cle en 3eme argument
668
+        $cle = calculer_jointure($boucle, [$desc['id_table'], $desc], $arrivee, '', $cond);
669
+        if ($cle) {
670
+            return $cle;
671
+        }
672
+    }
673
+    spip_log("trouver_jointure_champ: $champ inconnu");
674
+
675
+    return '';
676 676
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -177,14 +177,14 @@  discard block
 block discarded – undo
177 177
 			// sache qu'il peut enlever ce where si il enleve la jointure
178 178
 			$boucle->where["JOIN-L$n"] =
179 179
 				$echap ?
180
-					["'='","'$obj'","sql_quote('$type')"]
180
+					["'='", "'$obj'", "sql_quote('$type')"]
181 181
 					:
182
-					['=',"$obj",sql_quote($type)];
182
+					['=', "$obj", sql_quote($type)];
183 183
 			$boucle->join["L$n"] =
184 184
 				$echap ?
185 185
 					["'$id_table'", "'$j2'", "'$j1'", "'$obj='.sql_quote('$type')"]
186 186
 					:
187
-					[$id_table, $j2, $j1, "$obj=" . sql_quote($type)];
187
+					[$id_table, $j2, $j1, "$obj=".sql_quote($type)];
188 188
 		} else {
189 189
 			$boucle->join["L$n"] = $echap ? ["'$id_table'", "'$j'"] : [$id_table, $j];
190 190
 		}
@@ -218,7 +218,7 @@  discard block
 block discarded – undo
218 218
 	$groups = liste_champs_jointures($nom, $desc, true);
219 219
 	if (!$pk) {
220 220
 		foreach ($groups as $id_prim) {
221
-			$id_field = $nom . '.' . $id_prim;
221
+			$id_field = $nom.'.'.$id_prim;
222 222
 			if (!in_array($id_field, $boucle->group)) {
223 223
 				$boucle->group[] = $id_field;
224 224
 			}
Please login to merge, or discard this patch.
ecrire/public/aiguiller.php 2 patches
Indentation   +269 added lines, -269 removed lines patch added patch discarded remove patch
@@ -11,164 +11,164 @@  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
 function securiser_redirect_action($redirect) {
18
-	// cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect
19
-	if (strpos($redirect, '%') !== false) {
20
-		$r2 = urldecode($redirect);
21
-		if (($r3 = securiser_redirect_action($r2)) !== $r2) {
22
-			return $r3;
23
-		}
24
-	}
25
-	if (
26
-		(tester_url_absolue($redirect) or preg_match(',^\w+:,', trim($redirect)))
27
-		and !defined('_AUTORISER_ACTION_ABS_REDIRECT')
28
-	) {
29
-		// si l'url est une url du site, on la laisse passer sans rien faire
30
-		// c'est encore le plus simple
31
-		$base = $GLOBALS['meta']['adresse_site'] . '/';
32
-		if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
33
-			return $redirect;
34
-		}
35
-		$base = url_de_base();
36
-		if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
37
-			return $redirect;
38
-		}
18
+    // cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect
19
+    if (strpos($redirect, '%') !== false) {
20
+        $r2 = urldecode($redirect);
21
+        if (($r3 = securiser_redirect_action($r2)) !== $r2) {
22
+            return $r3;
23
+        }
24
+    }
25
+    if (
26
+        (tester_url_absolue($redirect) or preg_match(',^\w+:,', trim($redirect)))
27
+        and !defined('_AUTORISER_ACTION_ABS_REDIRECT')
28
+    ) {
29
+        // si l'url est une url du site, on la laisse passer sans rien faire
30
+        // c'est encore le plus simple
31
+        $base = $GLOBALS['meta']['adresse_site'] . '/';
32
+        if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
33
+            return $redirect;
34
+        }
35
+        $base = url_de_base();
36
+        if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
37
+            return $redirect;
38
+        }
39 39
 
40
-		return '';
41
-	}
40
+        return '';
41
+    }
42 42
 
43
-	return $redirect;
43
+    return $redirect;
44 44
 }
45 45
 
46 46
 // https://code.spip.net/@traiter_appels_actions
47 47
 function traiter_appels_actions() {
48
-	// cas de l'appel qui renvoie une redirection (302) ou rien (204)
49
-	if ($action = _request('action')) {
50
-		include_spip('base/abstract_sql'); // chargement systematique pour les actions
51
-		include_spip('inc/autoriser');
52
-		include_spip('inc/headers');
53
-		include_spip('inc/actions');
54
-		// des actions peuvent appeler _T
55
-		if (!isset($GLOBALS['spip_lang'])) {
56
-			include_spip('inc/lang');
57
-			utiliser_langue_visiteur();
58
-		}
59
-		// si l'action est provoque par un hit {ajax}
60
-		// il faut transmettre l'env ajax au redirect
61
-		// on le met avant dans la query string au cas ou l'action fait elle meme sa redirection
62
-		if (
63
-			($v = _request('var_ajax'))
64
-			and ($v !== 'form')
65
-			and ($args = _request('var_ajax_env'))
66
-			and ($url = _request('redirect'))
67
-		) {
68
-			$url = parametre_url($url, 'var_ajax', $v, '&');
69
-			$url = parametre_url($url, 'var_ajax_env', $args, '&');
70
-			set_request('redirect', $url);
71
-		} else {
72
-			if (_request('redirect')) {
73
-				set_request('redirect', securiser_redirect_action(_request('redirect')));
74
-			}
75
-		}
76
-		$var_f = charger_fonction($action, 'action');
77
-		$var_f();
78
-		if (!isset($GLOBALS['redirect'])) {
79
-			$GLOBALS['redirect'] = _request('redirect');
80
-			if ($_SERVER['REQUEST_METHOD'] == 'POST') {
81
-				$GLOBALS['redirect'] = urldecode($GLOBALS['redirect']);
82
-			}
83
-			$GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']);
84
-		}
85
-		if ($url = $GLOBALS['redirect']) {
86
-			// si l'action est provoque par un hit {ajax}
87
-			// il faut transmettre l'env ajax au redirect
88
-			// qui a pu etre defini par l'action
89
-			if (
90
-				($v = _request('var_ajax'))
91
-				and ($v !== 'form')
92
-				and ($args = _request('var_ajax_env'))
93
-			) {
94
-				$url = parametre_url($url, 'var_ajax', $v, '&');
95
-				$url = parametre_url($url, 'var_ajax_env', $args, '&');
96
-				// passer l'ancre en variable pour pouvoir la gerer cote serveur
97
-				$url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url);
98
-			}
99
-			$url = str_replace('&amp;', '&', $url); // les redirections se font en &, pas en en &amp;
100
-			redirige_par_entete($url);
101
-		}
48
+    // cas de l'appel qui renvoie une redirection (302) ou rien (204)
49
+    if ($action = _request('action')) {
50
+        include_spip('base/abstract_sql'); // chargement systematique pour les actions
51
+        include_spip('inc/autoriser');
52
+        include_spip('inc/headers');
53
+        include_spip('inc/actions');
54
+        // des actions peuvent appeler _T
55
+        if (!isset($GLOBALS['spip_lang'])) {
56
+            include_spip('inc/lang');
57
+            utiliser_langue_visiteur();
58
+        }
59
+        // si l'action est provoque par un hit {ajax}
60
+        // il faut transmettre l'env ajax au redirect
61
+        // on le met avant dans la query string au cas ou l'action fait elle meme sa redirection
62
+        if (
63
+            ($v = _request('var_ajax'))
64
+            and ($v !== 'form')
65
+            and ($args = _request('var_ajax_env'))
66
+            and ($url = _request('redirect'))
67
+        ) {
68
+            $url = parametre_url($url, 'var_ajax', $v, '&');
69
+            $url = parametre_url($url, 'var_ajax_env', $args, '&');
70
+            set_request('redirect', $url);
71
+        } else {
72
+            if (_request('redirect')) {
73
+                set_request('redirect', securiser_redirect_action(_request('redirect')));
74
+            }
75
+        }
76
+        $var_f = charger_fonction($action, 'action');
77
+        $var_f();
78
+        if (!isset($GLOBALS['redirect'])) {
79
+            $GLOBALS['redirect'] = _request('redirect');
80
+            if ($_SERVER['REQUEST_METHOD'] == 'POST') {
81
+                $GLOBALS['redirect'] = urldecode($GLOBALS['redirect']);
82
+            }
83
+            $GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']);
84
+        }
85
+        if ($url = $GLOBALS['redirect']) {
86
+            // si l'action est provoque par un hit {ajax}
87
+            // il faut transmettre l'env ajax au redirect
88
+            // qui a pu etre defini par l'action
89
+            if (
90
+                ($v = _request('var_ajax'))
91
+                and ($v !== 'form')
92
+                and ($args = _request('var_ajax_env'))
93
+            ) {
94
+                $url = parametre_url($url, 'var_ajax', $v, '&');
95
+                $url = parametre_url($url, 'var_ajax_env', $args, '&');
96
+                // passer l'ancre en variable pour pouvoir la gerer cote serveur
97
+                $url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url);
98
+            }
99
+            $url = str_replace('&amp;', '&', $url); // les redirections se font en &, pas en en &amp;
100
+            redirige_par_entete($url);
101
+        }
102 102
 
103
-		// attention : avec zlib.output_compression=1 on a vu des cas de ob_get_length() qui renvoi 0
104
-		// et du coup en renvoi un status 204 a tort (vu sur le menu rubriques notamment)
105
-		if (
106
-			!headers_sent()
107
-			and !ob_get_length()
108
-		) {
109
-			http_status(204);
110
-		} // No Content
111
-		return true;
112
-	}
103
+        // attention : avec zlib.output_compression=1 on a vu des cas de ob_get_length() qui renvoi 0
104
+        // et du coup en renvoi un status 204 a tort (vu sur le menu rubriques notamment)
105
+        if (
106
+            !headers_sent()
107
+            and !ob_get_length()
108
+        ) {
109
+            http_status(204);
110
+        } // No Content
111
+        return true;
112
+    }
113 113
 
114
-	return false;
114
+    return false;
115 115
 }
116 116
 
117 117
 
118 118
 // https://code.spip.net/@refuser_traiter_formulaire_ajax
119 119
 function refuser_traiter_formulaire_ajax() {
120
-	if (
121
-		$v = _request('var_ajax')
122
-		and $v == 'form'
123
-		and $form = _request('formulaire_action')
124
-		and $args = _request('formulaire_action_args')
125
-		and decoder_contexte_ajax($args, $form) !== false
126
-	) {
127
-		// on est bien dans le contexte de traitement d'un formulaire en ajax
128
-		// mais traiter ne veut pas
129
-		// on le dit a la page qui va resumbit
130
-		// sans ajax
131
-		include_spip('inc/actions');
132
-		ajax_retour('noajax', false);
133
-		exit;
134
-	}
120
+    if (
121
+        $v = _request('var_ajax')
122
+        and $v == 'form'
123
+        and $form = _request('formulaire_action')
124
+        and $args = _request('formulaire_action_args')
125
+        and decoder_contexte_ajax($args, $form) !== false
126
+    ) {
127
+        // on est bien dans le contexte de traitement d'un formulaire en ajax
128
+        // mais traiter ne veut pas
129
+        // on le dit a la page qui va resumbit
130
+        // sans ajax
131
+        include_spip('inc/actions');
132
+        ajax_retour('noajax', false);
133
+        exit;
134
+    }
135 135
 }
136 136
 
137 137
 // https://code.spip.net/@traiter_appels_inclusions_ajax
138 138
 function traiter_appels_inclusions_ajax() {
139
-	// traiter les appels de bloc ajax (ex: pagination)
140
-	if (
141
-		$v = _request('var_ajax')
142
-		and $v !== 'form'
143
-		and $args = _request('var_ajax_env')
144
-	) {
145
-		include_spip('inc/filtres');
146
-		include_spip('inc/actions');
147
-		if (
148
-			$args = decoder_contexte_ajax($args)
149
-			and $fond = $args['fond']
150
-		) {
151
-			include_spip('public/assembler');
152
-			$contexte = calculer_contexte();
153
-			$contexte = array_merge($args, $contexte);
154
-			$page = recuperer_fond($fond, $contexte, ['trim' => false]);
155
-			$texte = $page;
156
-			if ($ancre = _request('var_ajax_ancre')) {
157
-				// pas n'importe quoi quand meme dans la variable !
158
-				$ancre = str_replace(['<', '"', "'"], ['&lt;', '&quot;', ''], $ancre);
159
-				$texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte;
160
-			}
161
-		} else {
162
-			include_spip('inc/headers');
163
-			http_status(400);
164
-			$texte = _L('signature ajax bloc incorrecte');
165
-		}
166
-		ajax_retour($texte, false);
139
+    // traiter les appels de bloc ajax (ex: pagination)
140
+    if (
141
+        $v = _request('var_ajax')
142
+        and $v !== 'form'
143
+        and $args = _request('var_ajax_env')
144
+    ) {
145
+        include_spip('inc/filtres');
146
+        include_spip('inc/actions');
147
+        if (
148
+            $args = decoder_contexte_ajax($args)
149
+            and $fond = $args['fond']
150
+        ) {
151
+            include_spip('public/assembler');
152
+            $contexte = calculer_contexte();
153
+            $contexte = array_merge($args, $contexte);
154
+            $page = recuperer_fond($fond, $contexte, ['trim' => false]);
155
+            $texte = $page;
156
+            if ($ancre = _request('var_ajax_ancre')) {
157
+                // pas n'importe quoi quand meme dans la variable !
158
+                $ancre = str_replace(['<', '"', "'"], ['&lt;', '&quot;', ''], $ancre);
159
+                $texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte;
160
+            }
161
+        } else {
162
+            include_spip('inc/headers');
163
+            http_status(400);
164
+            $texte = _L('signature ajax bloc incorrecte');
165
+        }
166
+        ajax_retour($texte, false);
167 167
 
168
-		return true; // on a fini le hit
169
-	}
168
+        return true; // on a fini le hit
169
+    }
170 170
 
171
-	return false;
171
+    return false;
172 172
 }
173 173
 
174 174
 // au 1er appel, traite les formulaires dynamiques charger/verifier/traiter
@@ -177,152 +177,152 @@  discard block
 block discarded – undo
177 177
 
178 178
 // https://code.spip.net/@traiter_formulaires_dynamiques
179 179
 function traiter_formulaires_dynamiques($get = false) {
180
-	static $post = [];
181
-	static $done = false;
180
+    static $post = [];
181
+    static $done = false;
182 182
 
183
-	if ($get) {
184
-		return $post;
185
-	}
186
-	if ($done) {
187
-		return false;
188
-	}
189
-	$done = true;
183
+    if ($get) {
184
+        return $post;
185
+    }
186
+    if ($done) {
187
+        return false;
188
+    }
189
+    $done = true;
190 190
 
191
-	if (
192
-		!($form = _request('formulaire_action')
193
-		and $args = _request('formulaire_action_args'))
194
-	) {
195
-		return false;
196
-	} // le hit peut continuer normalement
191
+    if (
192
+        !($form = _request('formulaire_action')
193
+        and $args = _request('formulaire_action_args'))
194
+    ) {
195
+        return false;
196
+    } // le hit peut continuer normalement
197 197
 
198
-	include_spip('inc/filtres');
199
-	if (($args = decoder_contexte_ajax($args, $form)) === false) {
200
-		spip_log("signature ajax form incorrecte : $form");
198
+    include_spip('inc/filtres');
199
+    if (($args = decoder_contexte_ajax($args, $form)) === false) {
200
+        spip_log("signature ajax form incorrecte : $form");
201 201
 
202
-		return false; // continuons le hit comme si de rien etait
203
-	} else {
204
-		include_spip('inc/lang');
205
-		// sauvegarder la lang en cours
206
-		$old_lang = $GLOBALS['spip_lang'];
207
-		// changer la langue avec celle qui a cours dans le formulaire
208
-		// on la depile de $args car c'est un argument implicite masque
209
-		changer_langue(array_shift($args));
202
+        return false; // continuons le hit comme si de rien etait
203
+    } else {
204
+        include_spip('inc/lang');
205
+        // sauvegarder la lang en cours
206
+        $old_lang = $GLOBALS['spip_lang'];
207
+        // changer la langue avec celle qui a cours dans le formulaire
208
+        // on la depile de $args car c'est un argument implicite masque
209
+        changer_langue(array_shift($args));
210 210
 
211 211
 
212
-		// inclure mes_fonctions et autres filtres avant verifier/traiter
213
-		include_fichiers_fonctions();
214
-		// ainsi que l'API SQL bien utile dans verifier/traiter
215
-		include_spip('base/abstract_sql');
212
+        // inclure mes_fonctions et autres filtres avant verifier/traiter
213
+        include_fichiers_fonctions();
214
+        // ainsi que l'API SQL bien utile dans verifier/traiter
215
+        include_spip('base/abstract_sql');
216 216
 
217
-		/**
218
-		 * Pipeline exécuté lors de la soumission d'un formulaire,
219
-		 * mais avant l'appel de la fonction de vérification.
220
-		 */
221
-		pipeline(
222
-			'formulaire_receptionner',
223
-			[
224
-				'args' => ['form' => $form, 'args' => $args],
225
-				'data' => null,
226
-			]
227
-		);
217
+        /**
218
+         * Pipeline exécuté lors de la soumission d'un formulaire,
219
+         * mais avant l'appel de la fonction de vérification.
220
+         */
221
+        pipeline(
222
+            'formulaire_receptionner',
223
+            [
224
+                'args' => ['form' => $form, 'args' => $args],
225
+                'data' => null,
226
+            ]
227
+        );
228 228
 
229
-		$verifier = charger_fonction('verifier', "formulaires/$form/", true);
230
-		$post["erreurs_$form"] = pipeline(
231
-			'formulaire_verifier',
232
-			[
233
-				'args' => ['form' => $form, 'args' => $args],
234
-				'data' => $verifier ? call_user_func_array($verifier, $args) : []
235
-			]
236
-		);
237
-		// prise en charge CVT multi etape si besoin
238
-		if (_request('cvtm_prev_post')) {
239
-			include_spip('inc/cvt_multietapes');
240
-			$post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes(
241
-				['form' => $form, 'args' => $args],
242
-				$post["erreurs_$form"]
243
-			);
244
-		}
229
+        $verifier = charger_fonction('verifier', "formulaires/$form/", true);
230
+        $post["erreurs_$form"] = pipeline(
231
+            'formulaire_verifier',
232
+            [
233
+                'args' => ['form' => $form, 'args' => $args],
234
+                'data' => $verifier ? call_user_func_array($verifier, $args) : []
235
+            ]
236
+        );
237
+        // prise en charge CVT multi etape si besoin
238
+        if (_request('cvtm_prev_post')) {
239
+            include_spip('inc/cvt_multietapes');
240
+            $post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes(
241
+                ['form' => $form, 'args' => $args],
242
+                $post["erreurs_$form"]
243
+            );
244
+        }
245 245
 
246
-		// accessibilite : si des erreurs mais pas de message general l'ajouter
247
-		if ((isset($post["erreurs_$form"]) and count($post["erreurs_$form"])) and !isset($post["erreurs_$form"]['message_erreur'])) {
248
-			$post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(
249
-				count($post["erreurs_$form"]),
250
-				'avis_1_erreur_saisie',
251
-				'avis_nb_erreurs_saisie'
252
-			);
253
-		}
246
+        // accessibilite : si des erreurs mais pas de message general l'ajouter
247
+        if ((isset($post["erreurs_$form"]) and count($post["erreurs_$form"])) and !isset($post["erreurs_$form"]['message_erreur'])) {
248
+            $post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(
249
+                count($post["erreurs_$form"]),
250
+                'avis_1_erreur_saisie',
251
+                'avis_nb_erreurs_saisie'
252
+            );
253
+        }
254 254
 
255
-		// si on ne demandait qu'une verif json
256
-		if (_request('formulaire_action_verifier_json')) {
257
-			include_spip('inc/json');
258
-			include_spip('inc/actions');
259
-			ajax_retour(json_encode($post["erreurs_$form"]), 'text/plain');
255
+        // si on ne demandait qu'une verif json
256
+        if (_request('formulaire_action_verifier_json')) {
257
+            include_spip('inc/json');
258
+            include_spip('inc/actions');
259
+            ajax_retour(json_encode($post["erreurs_$form"]), 'text/plain');
260 260
 
261
-			return true; // on a fini le hit
262
-		}
263
-		$retour = '';
264
-		if (isset($post["erreurs_$form"]) and (count($post["erreurs_$form"]) == 0)) {
265
-			$rev = '';
266
-			if ($traiter = charger_fonction('traiter', "formulaires/$form/", true)) {
267
-				$rev = call_user_func_array($traiter, $args);
268
-			}
261
+            return true; // on a fini le hit
262
+        }
263
+        $retour = '';
264
+        if (isset($post["erreurs_$form"]) and (count($post["erreurs_$form"]) == 0)) {
265
+            $rev = '';
266
+            if ($traiter = charger_fonction('traiter', "formulaires/$form/", true)) {
267
+                $rev = call_user_func_array($traiter, $args);
268
+            }
269 269
 
270
-			$rev = pipeline(
271
-				'formulaire_traiter',
272
-				[
273
-					'args' => ['form' => $form, 'args' => $args],
274
-					'data' => $rev
275
-				]
276
-			);
277
-			// le retour de traiter est
278
-			// un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx)
279
-			// il permet le pipelinage, en particulier
280
-			// en y passant l'id de l'objet cree/modifie
281
-			// si message_erreur est present, on considere que le traitement a echoue
282
-			$post["message_ok_$form"] = '';
283
-			// on peut avoir message_ok et message_erreur
284
-			if (isset($rev['message_ok'])) {
285
-				$post["message_ok_$form"] = $rev['message_ok'];
286
-			}
270
+            $rev = pipeline(
271
+                'formulaire_traiter',
272
+                [
273
+                    'args' => ['form' => $form, 'args' => $args],
274
+                    'data' => $rev
275
+                ]
276
+            );
277
+            // le retour de traiter est
278
+            // un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx)
279
+            // il permet le pipelinage, en particulier
280
+            // en y passant l'id de l'objet cree/modifie
281
+            // si message_erreur est present, on considere que le traitement a echoue
282
+            $post["message_ok_$form"] = '';
283
+            // on peut avoir message_ok et message_erreur
284
+            if (isset($rev['message_ok'])) {
285
+                $post["message_ok_$form"] = $rev['message_ok'];
286
+            }
287 287
 
288
-			// verifier si traiter n'a pas echoue avec une erreur :
289
-			if (isset($rev['message_erreur'])) {
290
-				$post["erreurs_$form"]['message_erreur'] = $rev['message_erreur'];
291
-				// si il y a une erreur on ne redirige pas
292
-			} else {
293
-				// sinon faire ce qu'il faut :
294
-				if (isset($rev['editable'])) {
295
-					$post["editable_$form"] = $rev['editable'];
296
-				}
297
-				// si une redirection est demandee, appeler redirigae_formulaire qui choisira
298
-				// le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue)
299
-				if (isset($rev['redirect']) and $rev['redirect']) {
300
-					include_spip('inc/headers');
301
-					list($masque, $message) = redirige_formulaire($rev['redirect'], '', 'ajaxform');
302
-					$post["message_ok_$form"] .= $message;
303
-					$retour .= $masque;
304
-				}
305
-			}
306
-		}
307
-		// si le formulaire a ete soumis en ajax, on le renvoie direct !
308
-		if (_request('var_ajax')) {
309
-			if (find_in_path('formulaire_.php', 'balise/', true)) {
310
-				include_spip('inc/actions');
311
-				include_spip('public/assembler');
312
-				array_unshift($args, $form);
313
-				$retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn', $args), false);
314
-				// on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
315
-				// sans cela le formulaire n'est pas actif apres le hit ajax
316
-				// la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
317
-				$retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
318
-				ajax_retour($retour, false);
288
+            // verifier si traiter n'a pas echoue avec une erreur :
289
+            if (isset($rev['message_erreur'])) {
290
+                $post["erreurs_$form"]['message_erreur'] = $rev['message_erreur'];
291
+                // si il y a une erreur on ne redirige pas
292
+            } else {
293
+                // sinon faire ce qu'il faut :
294
+                if (isset($rev['editable'])) {
295
+                    $post["editable_$form"] = $rev['editable'];
296
+                }
297
+                // si une redirection est demandee, appeler redirigae_formulaire qui choisira
298
+                // le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue)
299
+                if (isset($rev['redirect']) and $rev['redirect']) {
300
+                    include_spip('inc/headers');
301
+                    list($masque, $message) = redirige_formulaire($rev['redirect'], '', 'ajaxform');
302
+                    $post["message_ok_$form"] .= $message;
303
+                    $retour .= $masque;
304
+                }
305
+            }
306
+        }
307
+        // si le formulaire a ete soumis en ajax, on le renvoie direct !
308
+        if (_request('var_ajax')) {
309
+            if (find_in_path('formulaire_.php', 'balise/', true)) {
310
+                include_spip('inc/actions');
311
+                include_spip('public/assembler');
312
+                array_unshift($args, $form);
313
+                $retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn', $args), false);
314
+                // on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
315
+                // sans cela le formulaire n'est pas actif apres le hit ajax
316
+                // la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
317
+                $retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
318
+                ajax_retour($retour, false);
319 319
 
320
-				return true; // on a fini le hit
321
-			}
322
-		}
323
-		// restaurer la lang en cours
324
-		changer_langue($old_lang);
325
-	}
320
+                return true; // on a fini le hit
321
+            }
322
+        }
323
+        // restaurer la lang en cours
324
+        changer_langue($old_lang);
325
+    }
326 326
 
327
-	return false; // le hit peut continuer normalement
327
+    return false; // le hit peut continuer normalement
328 328
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -28,7 +28,7 @@  discard block
 block discarded – undo
28 28
 	) {
29 29
 		// si l'url est une url du site, on la laisse passer sans rien faire
30 30
 		// c'est encore le plus simple
31
-		$base = $GLOBALS['meta']['adresse_site'] . '/';
31
+		$base = $GLOBALS['meta']['adresse_site'].'/';
32 32
 		if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) {
33 33
 			return $redirect;
34 34
 		}
@@ -156,7 +156,7 @@  discard block
 block discarded – undo
156 156
 			if ($ancre = _request('var_ajax_ancre')) {
157 157
 				// pas n'importe quoi quand meme dans la variable !
158 158
 				$ancre = str_replace(['<', '"', "'"], ['&lt;', '&quot;', ''], $ancre);
159
-				$texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte;
159
+				$texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>".$texte;
160 160
 			}
161 161
 		} else {
162 162
 			include_spip('inc/headers');
@@ -314,7 +314,7 @@  discard block
 block discarded – undo
314 314
 				// on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7
315 315
 				// sans cela le formulaire n'est pas actif apres le hit ajax
316 316
 				// la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe
317
-				$retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour;
317
+				$retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>".$retour;
318 318
 				ajax_retour($retour, false);
319 319
 
320 320
 				return true; // on a fini le hit
Please login to merge, or discard this patch.
ecrire/public/debusquer.php 2 patches
Indentation   +682 added lines, -682 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('public/decompiler');
@@ -66,136 +66,136 @@  discard block
 block discarded – undo
66 66
  *     - string si $message à false.
67 67
  **/
68 68
 function public_debusquer_dist($message = '', $lieu = '', $opt = []) {
69
-	static $tableau_des_erreurs = [];
70
-
71
-	// Pour des tests unitaires, pouvoir récupérer les erreurs générées
72
-	if (isset($opt['erreurs'])) {
73
-		if ($opt['erreurs'] == 'get') {
74
-			return $tableau_des_erreurs;
75
-		}
76
-		if ($opt['erreurs'] == 'reset') {
77
-			$tableau_des_erreurs = [];
78
-
79
-			return true;
80
-		}
81
-	}
82
-
83
-	// Erreur ou appel final ?
84
-	if ($message) {
85
-		$message = debusquer_compose_message($message);
86
-		$tableau_des_erreurs[] = [$message, $lieu];
87
-		set_request('var_mode', 'debug');
88
-		$GLOBALS['bouton_admin_debug'] = true;
89
-		// Permettre a la compil de continuer
90
-		if (is_object($lieu) and (!isset($lieu->code) or !$lieu->code)) {
91
-			$lieu->code = "''";
92
-		}
93
-		// forcer l'appel au debusqueur en cas de boucles infernales
94
-		$urgence = (_DEBUG_MAX_SQUELETTE_ERREURS and count($tableau_des_erreurs) > _DEBUG_MAX_SQUELETTE_ERREURS);
95
-		if (!$urgence) {
96
-			return;
97
-		}
98
-	}
99
-	if (empty($GLOBALS['debug_objets']['principal'])) {
100
-		// espace public ?
101
-		if (isset($GLOBALS['fond'])) {
102
-			$GLOBALS['debug_objets']['principal'] = $GLOBALS['fond'];
103
-		}
104
-	}
105
-
106
-	include_spip('inc/autoriser');
107
-	if (!autoriser('debug')) {
108
-		return;
109
-	}
110
-	include_spip('inc/headers');
111
-	include_spip('inc/filtres');
112
-
113
-	// en cas de squelette inclus,  virer le code de l'incluant:
114
-	// - il contient souvent une Div restreignant la largeur a 3 fois rien
115
-	// - ca fait 2 headers !
116
-	// sauf si l'on se trouve deja dans un flux compresse (plugin compresseur
117
-	// actif par exemple)
118
-	if (
119
-		ob_get_length()
120
-		and
121
-		!in_array('ob_gzhandler', ob_get_status())
122
-	) {
123
-		ob_end_clean();
124
-	}
125
-
126
-	lang_select($GLOBALS['visiteur_session']['lang']);
127
-	$fonc = _request('var_mode_objet');
128
-	$mode = _request('var_mode_affiche');
129
-	$self = str_replace("\\'", '&#39;', self());
130
-	$self = parametre_url($self, 'var_mode', 'debug');
131
-
132
-	$res = debusquer_bandeau($tableau_des_erreurs)
133
-		. '<br />'
134
-		. debusquer_squelette($fonc, $mode, $self);
135
-
136
-	if (!_DIR_RESTREINT or headers_sent()) {
137
-		return $res;
138
-	}
139
-	if ($tableau_des_erreurs) {
140
-		http_status(503);
141
-	}
142
-
143
-	http_no_cache();
144
-	if (isset($_GET['var_profile'])) {
145
-		$titre = parametre_url($GLOBALS['REQUEST_URI'], 'var_profile', '');
146
-		$titre = parametre_url($titre, 'var_mode', '');
147
-	} else {
148
-		if (!$fonc) {
149
-			$fonc = $GLOBALS['debug_objets']['principal'];
150
-		}
151
-		$titre = !$mode ? $fonc : ($mode . (isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' ' . $GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
152
-	}
153
-	if ($message === false) {
154
-		lang_select();
155
-
156
-		return debusquer_entete($titre, $res);
157
-	} else {
158
-		echo debusquer_entete($titre, $res);
159
-	}
160
-	exit;
69
+    static $tableau_des_erreurs = [];
70
+
71
+    // Pour des tests unitaires, pouvoir récupérer les erreurs générées
72
+    if (isset($opt['erreurs'])) {
73
+        if ($opt['erreurs'] == 'get') {
74
+            return $tableau_des_erreurs;
75
+        }
76
+        if ($opt['erreurs'] == 'reset') {
77
+            $tableau_des_erreurs = [];
78
+
79
+            return true;
80
+        }
81
+    }
82
+
83
+    // Erreur ou appel final ?
84
+    if ($message) {
85
+        $message = debusquer_compose_message($message);
86
+        $tableau_des_erreurs[] = [$message, $lieu];
87
+        set_request('var_mode', 'debug');
88
+        $GLOBALS['bouton_admin_debug'] = true;
89
+        // Permettre a la compil de continuer
90
+        if (is_object($lieu) and (!isset($lieu->code) or !$lieu->code)) {
91
+            $lieu->code = "''";
92
+        }
93
+        // forcer l'appel au debusqueur en cas de boucles infernales
94
+        $urgence = (_DEBUG_MAX_SQUELETTE_ERREURS and count($tableau_des_erreurs) > _DEBUG_MAX_SQUELETTE_ERREURS);
95
+        if (!$urgence) {
96
+            return;
97
+        }
98
+    }
99
+    if (empty($GLOBALS['debug_objets']['principal'])) {
100
+        // espace public ?
101
+        if (isset($GLOBALS['fond'])) {
102
+            $GLOBALS['debug_objets']['principal'] = $GLOBALS['fond'];
103
+        }
104
+    }
105
+
106
+    include_spip('inc/autoriser');
107
+    if (!autoriser('debug')) {
108
+        return;
109
+    }
110
+    include_spip('inc/headers');
111
+    include_spip('inc/filtres');
112
+
113
+    // en cas de squelette inclus,  virer le code de l'incluant:
114
+    // - il contient souvent une Div restreignant la largeur a 3 fois rien
115
+    // - ca fait 2 headers !
116
+    // sauf si l'on se trouve deja dans un flux compresse (plugin compresseur
117
+    // actif par exemple)
118
+    if (
119
+        ob_get_length()
120
+        and
121
+        !in_array('ob_gzhandler', ob_get_status())
122
+    ) {
123
+        ob_end_clean();
124
+    }
125
+
126
+    lang_select($GLOBALS['visiteur_session']['lang']);
127
+    $fonc = _request('var_mode_objet');
128
+    $mode = _request('var_mode_affiche');
129
+    $self = str_replace("\\'", '&#39;', self());
130
+    $self = parametre_url($self, 'var_mode', 'debug');
131
+
132
+    $res = debusquer_bandeau($tableau_des_erreurs)
133
+        . '<br />'
134
+        . debusquer_squelette($fonc, $mode, $self);
135
+
136
+    if (!_DIR_RESTREINT or headers_sent()) {
137
+        return $res;
138
+    }
139
+    if ($tableau_des_erreurs) {
140
+        http_status(503);
141
+    }
142
+
143
+    http_no_cache();
144
+    if (isset($_GET['var_profile'])) {
145
+        $titre = parametre_url($GLOBALS['REQUEST_URI'], 'var_profile', '');
146
+        $titre = parametre_url($titre, 'var_mode', '');
147
+    } else {
148
+        if (!$fonc) {
149
+            $fonc = $GLOBALS['debug_objets']['principal'];
150
+        }
151
+        $titre = !$mode ? $fonc : ($mode . (isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' ' . $GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
152
+    }
153
+    if ($message === false) {
154
+        lang_select();
155
+
156
+        return debusquer_entete($titre, $res);
157
+    } else {
158
+        echo debusquer_entete($titre, $res);
159
+    }
160
+    exit;
161 161
 }
162 162
 
163 163
 function debusquer_compose_message($msg) {
164
-	if (is_array($msg)) {
165
-		// si c'est un texte, c'est une traduction a faire, mais
166
-		// sqlite renvoit aussi des erreurs alpha num (mais avec 3 arguments)
167
-		if (!is_numeric($msg[0]) and count($msg) == 2) {
168
-			// message avec argument: instancier
169
-			$msg = _T($msg[0], $msg[1], 'spip-debug-arg');
170
-		} else {
171
-			// message SQL: interpreter
172
-			$msg = debusquer_requete($msg);
173
-		}
174
-	}
175
-	// FIXME: le fond n'est pas la si on n'est pas dans un squelette
176
-	// cela dit, ca serait bien d'indiquer tout de meme d'ou vient l'erreur
177
-	$fond = isset($GLOBALS['fond']) ? $GLOBALS['fond'] : '';
178
-	// une erreur critique sort $message en array
179
-	$debug = is_array($msg) ? $msg[1] : $msg;
180
-	spip_log('Debug: ' . $debug . ' (' . $fond . ')');
181
-
182
-	return $msg;
164
+    if (is_array($msg)) {
165
+        // si c'est un texte, c'est une traduction a faire, mais
166
+        // sqlite renvoit aussi des erreurs alpha num (mais avec 3 arguments)
167
+        if (!is_numeric($msg[0]) and count($msg) == 2) {
168
+            // message avec argument: instancier
169
+            $msg = _T($msg[0], $msg[1], 'spip-debug-arg');
170
+        } else {
171
+            // message SQL: interpreter
172
+            $msg = debusquer_requete($msg);
173
+        }
174
+    }
175
+    // FIXME: le fond n'est pas la si on n'est pas dans un squelette
176
+    // cela dit, ca serait bien d'indiquer tout de meme d'ou vient l'erreur
177
+    $fond = isset($GLOBALS['fond']) ? $GLOBALS['fond'] : '';
178
+    // une erreur critique sort $message en array
179
+    $debug = is_array($msg) ? $msg[1] : $msg;
180
+    spip_log('Debug: ' . $debug . ' (' . $fond . ')');
181
+
182
+    return $msg;
183 183
 }
184 184
 
185 185
 function debusquer_bandeau($erreurs) {
186 186
 
187
-	if (!empty($erreurs)) {
188
-		$n = [count($erreurs) . ' ' . _T('zbug_erreur_squelette')];
187
+    if (!empty($erreurs)) {
188
+        $n = [count($erreurs) . ' ' . _T('zbug_erreur_squelette')];
189 189
 
190
-		return debusquer_navigation($erreurs, $n);
191
-	} elseif (!empty($GLOBALS['tableau_des_temps'])) {
192
-		include_spip('public/tracer');
193
-		list($temps, $nav) = chrono_requete($GLOBALS['tableau_des_temps']);
190
+        return debusquer_navigation($erreurs, $n);
191
+    } elseif (!empty($GLOBALS['tableau_des_temps'])) {
192
+        include_spip('public/tracer');
193
+        list($temps, $nav) = chrono_requete($GLOBALS['tableau_des_temps']);
194 194
 
195
-		return debusquer_navigation($temps, $nav, 'debug-profile');
196
-	} else {
197
-		return '';
198
-	}
195
+        return debusquer_navigation($temps, $nav, 'debug-profile');
196
+    } else {
197
+        return '';
198
+    }
199 199
 }
200 200
 
201 201
 /**
@@ -205,42 +205,42 @@  discard block
 block discarded – undo
205 205
  * @return string Code HTML
206 206
  **/
207 207
 function debusquer_contexte($env) {
208
-	if (is_string($env) and is_array($env_tab = @unserialize($env))) {
209
-		$env = $env_tab;
210
-	}
211
-
212
-	if (!$env) {
213
-		return '';
214
-	}
215
-	$res = '';
216
-	foreach ($env as $nom => $valeur) {
217
-		if (is_array($valeur)) {
218
-			$valeur_simple = [];
219
-			foreach ($valeur as $v) {
220
-				if (is_array($v)) {
221
-					$valeur_simple[] = 'array:' . count($v);
222
-				} elseif (is_object($v)) {
223
-					$valeur_simple[] = get_class($v);
224
-				} elseif (is_string($v)) {
225
-					$valeur_simple[] = "'" . $v . "'";
226
-				} else {
227
-					$valeur_simple[] = $v;
228
-				}
229
-			}
230
-			$n = count($valeur);
231
-			$valeur = (($n > 3) ? 'array:' . $n . ' ' : '');
232
-			$valeur .= '[' . join(', ', $valeur_simple) . ']';
233
-		} elseif (is_object($valeur)) {
234
-			$valeur = get_class($valeur);
235
-		} elseif (is_string($valeur)) {
236
-			$valeur = "'" . $valeur . "'";
237
-		}
238
-		$res .= "\n<tr><td><strong>" . nl2br(entites_html($nom))
239
-			. '</strong></td><td>:&nbsp;' . nl2br(entites_html($valeur))
240
-			. "</td></tr>\n";
241
-	}
242
-
243
-	return "<div class='spip-env'><fieldset><legend onclick=\"this.parentElement.classList.toggle('expanded');\">#ENV</legend>\n<div><table>$res</table></div></fieldset></div>\n";
208
+    if (is_string($env) and is_array($env_tab = @unserialize($env))) {
209
+        $env = $env_tab;
210
+    }
211
+
212
+    if (!$env) {
213
+        return '';
214
+    }
215
+    $res = '';
216
+    foreach ($env as $nom => $valeur) {
217
+        if (is_array($valeur)) {
218
+            $valeur_simple = [];
219
+            foreach ($valeur as $v) {
220
+                if (is_array($v)) {
221
+                    $valeur_simple[] = 'array:' . count($v);
222
+                } elseif (is_object($v)) {
223
+                    $valeur_simple[] = get_class($v);
224
+                } elseif (is_string($v)) {
225
+                    $valeur_simple[] = "'" . $v . "'";
226
+                } else {
227
+                    $valeur_simple[] = $v;
228
+                }
229
+            }
230
+            $n = count($valeur);
231
+            $valeur = (($n > 3) ? 'array:' . $n . ' ' : '');
232
+            $valeur .= '[' . join(', ', $valeur_simple) . ']';
233
+        } elseif (is_object($valeur)) {
234
+            $valeur = get_class($valeur);
235
+        } elseif (is_string($valeur)) {
236
+            $valeur = "'" . $valeur . "'";
237
+        }
238
+        $res .= "\n<tr><td><strong>" . nl2br(entites_html($nom))
239
+            . '</strong></td><td>:&nbsp;' . nl2br(entites_html($valeur))
240
+            . "</td></tr>\n";
241
+    }
242
+
243
+    return "<div class='spip-env'><fieldset><legend onclick=\"this.parentElement.classList.toggle('expanded');\">#ENV</legend>\n<div><table>$res</table></div></fieldset></div>\n";
244 244
 }
245 245
 
246 246
 // Affichage du tableau des erreurs ou des temps de calcul
@@ -248,66 +248,66 @@  discard block
 block discarded – undo
248 248
 
249 249
 function debusquer_navigation($tableau, $caption = [], $id = 'debug-nav') {
250 250
 
251
-	if (_request('exec') == 'valider_xml') {
252
-		return '';
253
-	}
254
-	$GLOBALS['bouton_admin_debug'] = true;
255
-	$res = '';
256
-	$href = quote_amp(parametre_url($GLOBALS['REQUEST_URI'], 'var_mode', 'debug'));
257
-	foreach ($tableau as $i => $err) {
258
-		$boucle = $ligne = $skel = '';
259
-		list($msg, $lieu) = $err;
260
-		if (is_object($lieu)) {
261
-			$ligne = $lieu->ligne;
262
-			$boucle = $lieu->id_boucle ? $lieu->id_boucle : '';
263
-			if (isset($lieu->descr['nom'])) {
264
-				$nom_code = $lieu->descr['nom'];
265
-				$skel = $lieu->descr['sourcefile'];
266
-				$h2 = parametre_url($href, 'var_mode_objet', $nom_code);
267
-				$h3 = parametre_url($h2, 'var_mode_affiche', 'squelette') . '#L' . $ligne;
268
-				$skel = "<a href='$h3'><b>$skel</b></a>";
269
-				if ($boucle) {
270
-					$h3 = parametre_url($h2 . $boucle, 'var_mode_affiche', 'boucle');
271
-					$boucle = "<a href='$h3'><b>$boucle</b></a>";
272
-				}
273
-			}
274
-		}
275
-
276
-		$j = ($i + 1);
277
-		$res .= "<tr id='req$j'><td style='text-align: right'>"
278
-			. $j
279
-			. "&nbsp;</td><td style='text-align: left'>"
280
-			. (is_array($msg) ? implode('', $msg) : $msg)
281
-			. "</td><td style='text-align: left'>"
282
-			. ($skel ? $skel : '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
283
-			. "</td><td class='spip-debug-arg' style='text-align: left'>"
284
-			. ($boucle ? $boucle : '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
285
-			. "</td><td style='text-align: right'>"
286
-			. $ligne
287
-			. "</td></tr>\n";
288
-	}
289
-
290
-	return "\n<table id='$id'>"
291
-	. "<caption onclick=\"x = document.getElementById('$id'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\">"
292
-	. $caption[0]
251
+    if (_request('exec') == 'valider_xml') {
252
+        return '';
253
+    }
254
+    $GLOBALS['bouton_admin_debug'] = true;
255
+    $res = '';
256
+    $href = quote_amp(parametre_url($GLOBALS['REQUEST_URI'], 'var_mode', 'debug'));
257
+    foreach ($tableau as $i => $err) {
258
+        $boucle = $ligne = $skel = '';
259
+        list($msg, $lieu) = $err;
260
+        if (is_object($lieu)) {
261
+            $ligne = $lieu->ligne;
262
+            $boucle = $lieu->id_boucle ? $lieu->id_boucle : '';
263
+            if (isset($lieu->descr['nom'])) {
264
+                $nom_code = $lieu->descr['nom'];
265
+                $skel = $lieu->descr['sourcefile'];
266
+                $h2 = parametre_url($href, 'var_mode_objet', $nom_code);
267
+                $h3 = parametre_url($h2, 'var_mode_affiche', 'squelette') . '#L' . $ligne;
268
+                $skel = "<a href='$h3'><b>$skel</b></a>";
269
+                if ($boucle) {
270
+                    $h3 = parametre_url($h2 . $boucle, 'var_mode_affiche', 'boucle');
271
+                    $boucle = "<a href='$h3'><b>$boucle</b></a>";
272
+                }
273
+            }
274
+        }
275
+
276
+        $j = ($i + 1);
277
+        $res .= "<tr id='req$j'><td style='text-align: right'>"
278
+            . $j
279
+            . "&nbsp;</td><td style='text-align: left'>"
280
+            . (is_array($msg) ? implode('', $msg) : $msg)
281
+            . "</td><td style='text-align: left'>"
282
+            . ($skel ? $skel : '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
283
+            . "</td><td class='spip-debug-arg' style='text-align: left'>"
284
+            . ($boucle ? $boucle : '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
285
+            . "</td><td style='text-align: right'>"
286
+            . $ligne
287
+            . "</td></tr>\n";
288
+    }
289
+
290
+    return "\n<table id='$id'>"
291
+    . "<caption onclick=\"x = document.getElementById('$id'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\">"
292
+    . $caption[0]
293 293
 ## aide locale courte a ecrire, avec lien vers une grosse page de documentation
294 294
 #		aider('erreur_compilation'),
295
-	. '</caption>'
296
-	//  fausse caption du chrono (mais vraie nav)
297
-	. (!empty($caption[1]) ? $caption[1] : '')
298
-	. '<tr><th>'
299
-	. _T('numero')
300
-	. '</th><th>'
301
-	. _T('public:message')
302
-	. '</th><th>'
303
-	. _T('squelette')
304
-	. '</th><th>'
305
-	. _T('zbug_boucle')
306
-	. '</th><th>'
307
-	. _T('ligne')
308
-	. '</th></tr>'
309
-	. $res
310
-	. '</table>';
295
+    . '</caption>'
296
+    //  fausse caption du chrono (mais vraie nav)
297
+    . (!empty($caption[1]) ? $caption[1] : '')
298
+    . '<tr><th>'
299
+    . _T('numero')
300
+    . '</th><th>'
301
+    . _T('public:message')
302
+    . '</th><th>'
303
+    . _T('squelette')
304
+    . '</th><th>'
305
+    . _T('zbug_boucle')
306
+    . '</th><th>'
307
+    . _T('ligne')
308
+    . '</th></tr>'
309
+    . $res
310
+    . '</table>';
311 311
 }
312 312
 
313 313
 
@@ -327,124 +327,124 @@  discard block
 block discarded – undo
327 327
  *    ou un tableau si l'erreur est critique
328 328
  **/
329 329
 function debusquer_requete($message) {
330
-	list($errno, $msg, $query) = $message;
331
-
332
-	// FIXME: ces écritures mélangent divers syntaxe des moteurs SQL
333
-	// il serait plus prudent certainement d'avoir une fonction d'analyse par moteur
334
-	if (preg_match(',err(no|code):?[[:space:]]*([0-9]+),i', $msg, $regs)) {
335
-		$errno = $regs[2];
336
-	} elseif (
337
-		is_numeric($errno) and ($errno == 1030 or $errno <= 1026)
338
-		and preg_match(',[^[:alnum:]]([0-9]+)[^[:alnum:]],', $msg, $regs)
339
-	) {
340
-		$errno = $regs[1];
341
-	}
342
-
343
-	// Erreur systeme
344
-	if (is_numeric($errno) and $errno > 0 and $errno < 200) {
345
-		$retour = '<tt><br /><br /><blink>'
346
-			. _T('info_erreur_systeme', ['errsys' => $errno])
347
-			. "</blink><br />\n<b>"
348
-			. _T(
349
-				'info_erreur_systeme2',
350
-				['script' => generer_url_ecrire('base_repair')]
351
-			)
352
-			. '</b><br />';
353
-		spip_log("Erreur systeme $errno");
354
-
355
-		return [$retour, ''];
356
-	}
357
-
358
-	// Requete erronee
359
-	$err = '<b>' . _T('avis_erreur_mysql') . " $errno</b><br /><tt>\n"
360
-		. spip_htmlspecialchars($msg)
361
-		. "\n<br /><span style='color: red'><b>"
362
-		. spip_htmlspecialchars($query)
363
-		. '</b></span></tt><br />';
364
-
365
-	//. aider('erreur_mysql');
366
-
367
-	return $err;
330
+    list($errno, $msg, $query) = $message;
331
+
332
+    // FIXME: ces écritures mélangent divers syntaxe des moteurs SQL
333
+    // il serait plus prudent certainement d'avoir une fonction d'analyse par moteur
334
+    if (preg_match(',err(no|code):?[[:space:]]*([0-9]+),i', $msg, $regs)) {
335
+        $errno = $regs[2];
336
+    } elseif (
337
+        is_numeric($errno) and ($errno == 1030 or $errno <= 1026)
338
+        and preg_match(',[^[:alnum:]]([0-9]+)[^[:alnum:]],', $msg, $regs)
339
+    ) {
340
+        $errno = $regs[1];
341
+    }
342
+
343
+    // Erreur systeme
344
+    if (is_numeric($errno) and $errno > 0 and $errno < 200) {
345
+        $retour = '<tt><br /><br /><blink>'
346
+            . _T('info_erreur_systeme', ['errsys' => $errno])
347
+            . "</blink><br />\n<b>"
348
+            . _T(
349
+                'info_erreur_systeme2',
350
+                ['script' => generer_url_ecrire('base_repair')]
351
+            )
352
+            . '</b><br />';
353
+        spip_log("Erreur systeme $errno");
354
+
355
+        return [$retour, ''];
356
+    }
357
+
358
+    // Requete erronee
359
+    $err = '<b>' . _T('avis_erreur_mysql') . " $errno</b><br /><tt>\n"
360
+        . spip_htmlspecialchars($msg)
361
+        . "\n<br /><span style='color: red'><b>"
362
+        . spip_htmlspecialchars($query)
363
+        . '</b></span></tt><br />';
364
+
365
+    //. aider('erreur_mysql');
366
+
367
+    return $err;
368 368
 }
369 369
 
370 370
 
371 371
 // https://code.spip.net/@trouve_boucle_debug
372 372
 function trouve_boucle_debug($n, $nom, $debut = 0, $boucle = '') {
373 373
 
374
-	$id = $nom . $boucle;
375
-	if (is_array($GLOBALS['debug_objets']['sequence'][$id])) {
376
-		foreach ($GLOBALS['debug_objets']['sequence'][$id] as $v) {
377
-			if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r)) {
378
-				$y = substr_count($v[0], "\n");
379
-			} else {
380
-				if ($v[1][0] == '#') { // balise dynamique
381
-				$incl = $GLOBALS['debug_objets']['resultat'][$v[2]];
382
-				} else // inclusion
383
-				{
384
-					$incl = $GLOBALS['debug_objets']['squelette'][trouve_squelette_inclus($v[0])];
385
-				}
386
-				$y = substr_count($incl, "\n")
387
-					+ substr_count($r[1], "\n")
388
-					+ substr_count($r[3], "\n");
389
-			}
390
-			if ($n <= ($y + $debut)) {
391
-				if ($v[1][0] == '?') {
392
-					return trouve_boucle_debug($n, $nom, $debut, substr($v[1], 1));
393
-				} elseif ($v[1][0] == '!') {
394
-					if ($incl = trouve_squelette_inclus($v[1])) {
395
-						return trouve_boucle_debug($n, $incl, $debut);
396
-					}
397
-				}
398
-
399
-				return [$nom, $boucle, $v[2] - 1 + $n - $debut];
400
-			}
401
-			$debut += $y;
402
-		}
403
-	}
404
-
405
-	return [$nom, $boucle, $n - $debut];
374
+    $id = $nom . $boucle;
375
+    if (is_array($GLOBALS['debug_objets']['sequence'][$id])) {
376
+        foreach ($GLOBALS['debug_objets']['sequence'][$id] as $v) {
377
+            if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r)) {
378
+                $y = substr_count($v[0], "\n");
379
+            } else {
380
+                if ($v[1][0] == '#') { // balise dynamique
381
+                $incl = $GLOBALS['debug_objets']['resultat'][$v[2]];
382
+                } else // inclusion
383
+                {
384
+                    $incl = $GLOBALS['debug_objets']['squelette'][trouve_squelette_inclus($v[0])];
385
+                }
386
+                $y = substr_count($incl, "\n")
387
+                    + substr_count($r[1], "\n")
388
+                    + substr_count($r[3], "\n");
389
+            }
390
+            if ($n <= ($y + $debut)) {
391
+                if ($v[1][0] == '?') {
392
+                    return trouve_boucle_debug($n, $nom, $debut, substr($v[1], 1));
393
+                } elseif ($v[1][0] == '!') {
394
+                    if ($incl = trouve_squelette_inclus($v[1])) {
395
+                        return trouve_boucle_debug($n, $incl, $debut);
396
+                    }
397
+                }
398
+
399
+                return [$nom, $boucle, $v[2] - 1 + $n - $debut];
400
+            }
401
+            $debut += $y;
402
+        }
403
+    }
404
+
405
+    return [$nom, $boucle, $n - $debut];
406 406
 }
407 407
 
408 408
 // https://code.spip.net/@trouve_squelette_inclus
409 409
 function trouve_squelette_inclus($script) {
410 410
 
411
-	preg_match('/include\(.(.*).php3?.\);/', $script, $reg);
412
-	// si le script X.php n'est pas ecrire/public.php
413
-	// on suppose qu'il prend le squelette X.html (pas sur, mais y a pas mieux)
414
-	if ($reg[1] == 'ecrire/public') { // si c'est bien ecrire/public on cherche le param 'fond'
415
-	if (!preg_match("/'fond' => '([^']*)'/", $script, $reg)) { // a defaut on cherche le param 'page'
416
-		if (!preg_match("/'param' => '([^']*)'/", $script, $reg)) {
417
-				$reg[1] = 'inconnu';
418
-		}
419
-	}
420
-	}
421
-	$incl = ',' . $reg[1] . '[.]\w$,';
422
-
423
-	foreach ($GLOBALS['debug_objets']['sourcefile'] as $k => $v) {
424
-		if (preg_match($incl, $v)) {
425
-			return $k;
426
-		}
427
-	}
428
-
429
-	return '';
411
+    preg_match('/include\(.(.*).php3?.\);/', $script, $reg);
412
+    // si le script X.php n'est pas ecrire/public.php
413
+    // on suppose qu'il prend le squelette X.html (pas sur, mais y a pas mieux)
414
+    if ($reg[1] == 'ecrire/public') { // si c'est bien ecrire/public on cherche le param 'fond'
415
+    if (!preg_match("/'fond' => '([^']*)'/", $script, $reg)) { // a defaut on cherche le param 'page'
416
+        if (!preg_match("/'param' => '([^']*)'/", $script, $reg)) {
417
+                $reg[1] = 'inconnu';
418
+        }
419
+    }
420
+    }
421
+    $incl = ',' . $reg[1] . '[.]\w$,';
422
+
423
+    foreach ($GLOBALS['debug_objets']['sourcefile'] as $k => $v) {
424
+        if (preg_match($incl, $v)) {
425
+            return $k;
426
+        }
427
+    }
428
+
429
+    return '';
430 430
 }
431 431
 
432 432
 // https://code.spip.net/@reference_boucle_debug
433 433
 function reference_boucle_debug($n, $nom, $self) {
434
-	list($skel, $boucle, $ligne) = trouve_boucle_debug($n, $nom);
435
-
436
-	if (!$boucle) {
437
-		return !$ligne ? '' :
438
-			(' (' .
439
-				(($nom != $skel) ? _T('squelette_inclus_ligne') :
440
-					_T('squelette_ligne')) .
441
-				" <a href='$self&amp;var_mode_objet=$skel&amp;var_mode_affiche=squelette&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
442
-	} else {
443
-		$self .= "&amp;var_mode_objet=$skel$boucle&amp;var_mode_affiche=boucle";
444
-
445
-		return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" :
446
-			" (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
447
-	}
434
+    list($skel, $boucle, $ligne) = trouve_boucle_debug($n, $nom);
435
+
436
+    if (!$boucle) {
437
+        return !$ligne ? '' :
438
+            (' (' .
439
+                (($nom != $skel) ? _T('squelette_inclus_ligne') :
440
+                    _T('squelette_ligne')) .
441
+                " <a href='$self&amp;var_mode_objet=$skel&amp;var_mode_affiche=squelette&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
442
+    } else {
443
+        $self .= "&amp;var_mode_objet=$skel$boucle&amp;var_mode_affiche=boucle";
444
+
445
+        return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" :
446
+            " (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
447
+    }
448 448
 }
449 449
 
450 450
 // affiche un texte avec numero de ligne et ancre.
@@ -452,397 +452,397 @@  discard block
 block discarded – undo
452 452
 // https://code.spip.net/@ancre_texte
453 453
 function ancre_texte($texte, $fautifs = [], $nocpt = false) {
454 454
 
455
-	$var_mode_ligne = _request('var_mode_ligne');
456
-	if ($var_mode_ligne) {
457
-		$fautifs[] = [$var_mode_ligne];
458
-	}
459
-	$res = '';
460
-
461
-	$s = highlight_string($texte, true);
462
-	if (substr($s, 0, 6) == '<code>') {
463
-		$s = substr($s, 6);
464
-		$res = '<code>';
465
-	}
466
-
467
-	$s = preg_replace(
468
-		',<(\w[^<>]*)>([^<]*)<br />([^<]*)</\1>,',
469
-		'<\1>\2</\1><br />' . "\n" . '<\1>\3</\1>',
470
-		$s
471
-	);
472
-
473
-
474
-	$tableau = explode('<br />', $s);
475
-
476
-	$format = "<span style='float:left;display:block;width:50px;height:1px'><a id='L%d' style='background-color: white; visibility: " . ($nocpt ? 'hidden' : 'visible') . ";%s' href='#T%s' title=\"%s\">%0" . strval(@strlen(count($tableau))) . "d</a></span> %s<br />\n";
477
-
478
-	$format10 = str_replace('white', 'lightgrey', $format);
479
-	$formaterr = 'color: red;';
480
-	$i = 1;
481
-	$flignes = [];
482
-	$loc = [0, 0];
483
-	foreach ($fautifs as $lc) {
484
-		if (is_array($lc)) {
485
-			$l = array_shift($lc);
486
-			$flignes[$l] = $lc;
487
-		} else {
488
-			$flignes[$lc] = $loc;
489
-		}
490
-	}
491
-
492
-	$ancre = md5($texte);
493
-	foreach ($tableau as $ligne) {
494
-		if (isset($flignes[$i])) {
495
-			$ligne = str_replace('&nbsp;', ' ', $ligne);
496
-			$indexmesg = $flignes[$i][1];
497
-			$err = textebrut($flignes[$i][2]);
498
-			// tentative de pointer sur la colonne fautive;
499
-			// marche pas car highlight_string rajoute des entites. A revoir.
500
-			// $m = $flignes[$i][0];
501
-			// $ligne = substr($ligne, 0, $m-1) .
502
-			// sprintf($formaterr, substr($ligne,$m));
503
-			$bg = $formaterr;
504
-		} else {
505
-			$indexmesg = $ancre;
506
-			$err = $bg = '';
507
-		}
508
-		$res .= sprintf((($i % 10) ? $format : $format10), $i, $bg, $indexmesg, $err, $i, $ligne);
509
-		$i++;
510
-	}
511
-
512
-	return "<div id='T$ancre'>"
513
-	. '<div onclick="'
514
-	. "jQuery(this).parent().find('a').toggle();"
515
-	. '" title="'
516
-	. _T('masquer_colonne')
517
-	. '" style="cursor: pointer;">'
518
-	. ($nocpt ? '' : _T('info_numero_abbreviation'))
519
-	. '</div>
455
+    $var_mode_ligne = _request('var_mode_ligne');
456
+    if ($var_mode_ligne) {
457
+        $fautifs[] = [$var_mode_ligne];
458
+    }
459
+    $res = '';
460
+
461
+    $s = highlight_string($texte, true);
462
+    if (substr($s, 0, 6) == '<code>') {
463
+        $s = substr($s, 6);
464
+        $res = '<code>';
465
+    }
466
+
467
+    $s = preg_replace(
468
+        ',<(\w[^<>]*)>([^<]*)<br />([^<]*)</\1>,',
469
+        '<\1>\2</\1><br />' . "\n" . '<\1>\3</\1>',
470
+        $s
471
+    );
472
+
473
+
474
+    $tableau = explode('<br />', $s);
475
+
476
+    $format = "<span style='float:left;display:block;width:50px;height:1px'><a id='L%d' style='background-color: white; visibility: " . ($nocpt ? 'hidden' : 'visible') . ";%s' href='#T%s' title=\"%s\">%0" . strval(@strlen(count($tableau))) . "d</a></span> %s<br />\n";
477
+
478
+    $format10 = str_replace('white', 'lightgrey', $format);
479
+    $formaterr = 'color: red;';
480
+    $i = 1;
481
+    $flignes = [];
482
+    $loc = [0, 0];
483
+    foreach ($fautifs as $lc) {
484
+        if (is_array($lc)) {
485
+            $l = array_shift($lc);
486
+            $flignes[$l] = $lc;
487
+        } else {
488
+            $flignes[$lc] = $loc;
489
+        }
490
+    }
491
+
492
+    $ancre = md5($texte);
493
+    foreach ($tableau as $ligne) {
494
+        if (isset($flignes[$i])) {
495
+            $ligne = str_replace('&nbsp;', ' ', $ligne);
496
+            $indexmesg = $flignes[$i][1];
497
+            $err = textebrut($flignes[$i][2]);
498
+            // tentative de pointer sur la colonne fautive;
499
+            // marche pas car highlight_string rajoute des entites. A revoir.
500
+            // $m = $flignes[$i][0];
501
+            // $ligne = substr($ligne, 0, $m-1) .
502
+            // sprintf($formaterr, substr($ligne,$m));
503
+            $bg = $formaterr;
504
+        } else {
505
+            $indexmesg = $ancre;
506
+            $err = $bg = '';
507
+        }
508
+        $res .= sprintf((($i % 10) ? $format : $format10), $i, $bg, $indexmesg, $err, $i, $ligne);
509
+        $i++;
510
+    }
511
+
512
+    return "<div id='T$ancre'>"
513
+    . '<div onclick="'
514
+    . "jQuery(this).parent().find('a').toggle();"
515
+    . '" title="'
516
+    . _T('masquer_colonne')
517
+    . '" style="cursor: pointer;">'
518
+    . ($nocpt ? '' : _T('info_numero_abbreviation'))
519
+    . '</div>
520 520
 	' . $res . "</div>\n";
521 521
 }
522 522
 
523 523
 // l'environnement graphique du debuggueur
524 524
 
525 525
 function debusquer_squelette($fonc, $mode, $self) {
526
-	$texte = '';
527
-
528
-	if ($mode !== 'validation') {
529
-		if (isset($GLOBALS['debug_objets']['sourcefile']) and $GLOBALS['debug_objets']['sourcefile']) {
530
-			$res = "<div id='spip-boucles'>\n"
531
-				. debusquer_navigation_squelettes($self)
532
-				. '</div>';
533
-		} else {
534
-			$res = '';
535
-		}
536
-		if ($fonc) {
537
-			$id = " id='$fonc'";
538
-			if (!empty($GLOBALS['debug_objets'][$mode][$fonc])) {
539
-				list($legend, $texte, $res2) = debusquer_source($fonc, $mode);
540
-				$texte .= $res2;
541
-			} elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc . 'tout'])) {
542
-				$legend = _T('zbug_' . $mode);
543
-				$texte = $GLOBALS['debug_objets'][$mode][$fonc . 'tout'];
544
-				$texte = ancre_texte($texte, ['', '']);
545
-			}
546
-		} else {
547
-			if (strlen(trim($res))) {
548
-				return "<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res</div>";
549
-			} else {
550
-				// cas de l'appel sur erreur: montre la page
551
-				return isset($GLOBALS['debug_objets']['resultat']['tout'])
552
-					? $GLOBALS['debug_objets']['resultat']['tout']
553
-					: '';
554
-			}
555
-		}
556
-	} else {
557
-		$valider = charger_fonction('valider', 'xml');
558
-		$val = $valider($GLOBALS['debug_objets']['validation'][$fonc . 'tout']);
559
-		// Si erreur, signaler leur nombre dans le formulaire admin
560
-		$GLOBALS['debug_objets']['validation'] = $val->err ? count($val->err) : '';
561
-		list($texte, $err) = emboite_texte($val, $fonc, $self);
562
-		if ($err === false) {
563
-			$err = _T('impossible');
564
-		} elseif ($err === true) {
565
-			$err = _T('correcte');
566
-		} else {
567
-			$err = ": $err";
568
-		}
569
-		$legend = _T('validation') . ' ' . $err;
570
-		$res = $id = '';
571
-	}
572
-
573
-	return !trim($texte) ? '' : (
574
-		"<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res"
575
-		. "<div id='debug_boucle'><fieldset$id><legend>"
576
-		. "<a href='" . $self . '#f_' . substr($fonc, 0, 37) . "'> &#8593; "
577
-		. ($legend ? $legend : $mode)
578
-		. '</a></legend>'
579
-		. $texte
580
-		. '</fieldset></div>'
581
-		. '</div>');
526
+    $texte = '';
527
+
528
+    if ($mode !== 'validation') {
529
+        if (isset($GLOBALS['debug_objets']['sourcefile']) and $GLOBALS['debug_objets']['sourcefile']) {
530
+            $res = "<div id='spip-boucles'>\n"
531
+                . debusquer_navigation_squelettes($self)
532
+                . '</div>';
533
+        } else {
534
+            $res = '';
535
+        }
536
+        if ($fonc) {
537
+            $id = " id='$fonc'";
538
+            if (!empty($GLOBALS['debug_objets'][$mode][$fonc])) {
539
+                list($legend, $texte, $res2) = debusquer_source($fonc, $mode);
540
+                $texte .= $res2;
541
+            } elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc . 'tout'])) {
542
+                $legend = _T('zbug_' . $mode);
543
+                $texte = $GLOBALS['debug_objets'][$mode][$fonc . 'tout'];
544
+                $texte = ancre_texte($texte, ['', '']);
545
+            }
546
+        } else {
547
+            if (strlen(trim($res))) {
548
+                return "<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res</div>";
549
+            } else {
550
+                // cas de l'appel sur erreur: montre la page
551
+                return isset($GLOBALS['debug_objets']['resultat']['tout'])
552
+                    ? $GLOBALS['debug_objets']['resultat']['tout']
553
+                    : '';
554
+            }
555
+        }
556
+    } else {
557
+        $valider = charger_fonction('valider', 'xml');
558
+        $val = $valider($GLOBALS['debug_objets']['validation'][$fonc . 'tout']);
559
+        // Si erreur, signaler leur nombre dans le formulaire admin
560
+        $GLOBALS['debug_objets']['validation'] = $val->err ? count($val->err) : '';
561
+        list($texte, $err) = emboite_texte($val, $fonc, $self);
562
+        if ($err === false) {
563
+            $err = _T('impossible');
564
+        } elseif ($err === true) {
565
+            $err = _T('correcte');
566
+        } else {
567
+            $err = ": $err";
568
+        }
569
+        $legend = _T('validation') . ' ' . $err;
570
+        $res = $id = '';
571
+    }
572
+
573
+    return !trim($texte) ? '' : (
574
+        "<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res"
575
+        . "<div id='debug_boucle'><fieldset$id><legend>"
576
+        . "<a href='" . $self . '#f_' . substr($fonc, 0, 37) . "'> &#8593; "
577
+        . ($legend ? $legend : $mode)
578
+        . '</a></legend>'
579
+        . $texte
580
+        . '</fieldset></div>'
581
+        . '</div>');
582 582
 }
583 583
 
584 584
 
585 585
 // https://code.spip.net/@emboite_texte
586 586
 function emboite_texte($res, $fonc = '', $self = '') {
587
-	$errs = $res->err;
588
-	$texte = $res->entete . ($errs ? '' : $res->page);
589
-
590
-	if (!$texte and !$errs) {
591
-		return [ancre_texte('', ['', '']), false];
592
-	}
593
-	if (!$errs) {
594
-		return [ancre_texte($texte, ['', '']), true];
595
-	}
596
-
597
-	if (!isset($GLOBALS['debug_objets'])) {
598
-		$colors = ['#e0e0f0', '#f8f8ff'];
599
-		$encore = count_occ($errs);
600
-		$encore2 = [];
601
-		$fautifs = [];
602
-
603
-		$err = '<tr><th>'
604
-			. _T('numero')
605
-			. '</th><th>'
606
-			. _T('occurence')
607
-			. '</th><th>'
608
-			. _T('ligne')
609
-			. '</th><th>'
610
-			. _T('colonne')
611
-			. '</th><th>'
612
-			. _T('erreur')
613
-			. '</th></tr>';
614
-
615
-		$i = 0;
616
-		$style = "style='text-align: right; padding-right: 5px'";
617
-		foreach ($errs as $r) {
618
-			$i++;
619
-			list($msg, $ligne, $col) = $r;
620
-			#spip_log("$r = list($msg, $ligne, $col");
621
-			if (isset($encore2[$msg])) {
622
-				$ref = ++$encore2[$msg];
623
-			} else {
624
-				$encore2[$msg] = $ref = 1;
625
-			}
626
-			$err .= "<tr  style='background-color: "
627
-				. $colors[$i % 2]
628
-				. "'><td $style><a href='#debut_err'>"
629
-				. $i
630
-				. "</a></td><td $style>"
631
-				. "$ref/$encore[$msg]</td>"
632
-				. "<td $style><a href='#L"
633
-				. $ligne
634
-				. "' id='T$i'>"
635
-				. $ligne
636
-				. "</a></td><td $style>"
637
-				. $col
638
-				. "</td><td>$msg</td></tr>\n";
639
-			$fautifs[] = [$ligne, $col, $i, $msg];
640
-		}
641
-		$err = "<h2 style='text-align: center'>"
642
-			. $i
643
-			. "<a href='#fin_err'>"
644
-			. ' ' . _T('erreur_texte')
645
-			. "</a></h2><table id='debut_err' style='width: 100%'>"
646
-			. $err
647
-			. " </table><a id='fin_err'></a>";
648
-
649
-		return [ancre_texte($texte, $fautifs), $err];
650
-	} else {
651
-		list($msg, $fermant, $ouvrant) = $errs[0];
652
-		$rf = reference_boucle_debug($fermant, $fonc, $self);
653
-		$ro = reference_boucle_debug($ouvrant, $fonc, $self);
654
-		$err = $msg .
655
-			"<a href='#L" . $fermant . "'>$fermant</a>$rf<br />" .
656
-			"<a href='#L" . $ouvrant . "'>$ouvrant</a>$ro";
657
-
658
-		return [ancre_texte($texte, [[$ouvrant], [$fermant]]), $err];
659
-	}
587
+    $errs = $res->err;
588
+    $texte = $res->entete . ($errs ? '' : $res->page);
589
+
590
+    if (!$texte and !$errs) {
591
+        return [ancre_texte('', ['', '']), false];
592
+    }
593
+    if (!$errs) {
594
+        return [ancre_texte($texte, ['', '']), true];
595
+    }
596
+
597
+    if (!isset($GLOBALS['debug_objets'])) {
598
+        $colors = ['#e0e0f0', '#f8f8ff'];
599
+        $encore = count_occ($errs);
600
+        $encore2 = [];
601
+        $fautifs = [];
602
+
603
+        $err = '<tr><th>'
604
+            . _T('numero')
605
+            . '</th><th>'
606
+            . _T('occurence')
607
+            . '</th><th>'
608
+            . _T('ligne')
609
+            . '</th><th>'
610
+            . _T('colonne')
611
+            . '</th><th>'
612
+            . _T('erreur')
613
+            . '</th></tr>';
614
+
615
+        $i = 0;
616
+        $style = "style='text-align: right; padding-right: 5px'";
617
+        foreach ($errs as $r) {
618
+            $i++;
619
+            list($msg, $ligne, $col) = $r;
620
+            #spip_log("$r = list($msg, $ligne, $col");
621
+            if (isset($encore2[$msg])) {
622
+                $ref = ++$encore2[$msg];
623
+            } else {
624
+                $encore2[$msg] = $ref = 1;
625
+            }
626
+            $err .= "<tr  style='background-color: "
627
+                . $colors[$i % 2]
628
+                . "'><td $style><a href='#debut_err'>"
629
+                . $i
630
+                . "</a></td><td $style>"
631
+                . "$ref/$encore[$msg]</td>"
632
+                . "<td $style><a href='#L"
633
+                . $ligne
634
+                . "' id='T$i'>"
635
+                . $ligne
636
+                . "</a></td><td $style>"
637
+                . $col
638
+                . "</td><td>$msg</td></tr>\n";
639
+            $fautifs[] = [$ligne, $col, $i, $msg];
640
+        }
641
+        $err = "<h2 style='text-align: center'>"
642
+            . $i
643
+            . "<a href='#fin_err'>"
644
+            . ' ' . _T('erreur_texte')
645
+            . "</a></h2><table id='debut_err' style='width: 100%'>"
646
+            . $err
647
+            . " </table><a id='fin_err'></a>";
648
+
649
+        return [ancre_texte($texte, $fautifs), $err];
650
+    } else {
651
+        list($msg, $fermant, $ouvrant) = $errs[0];
652
+        $rf = reference_boucle_debug($fermant, $fonc, $self);
653
+        $ro = reference_boucle_debug($ouvrant, $fonc, $self);
654
+        $err = $msg .
655
+            "<a href='#L" . $fermant . "'>$fermant</a>$rf<br />" .
656
+            "<a href='#L" . $ouvrant . "'>$ouvrant</a>$ro";
657
+
658
+        return [ancre_texte($texte, [[$ouvrant], [$fermant]]), $err];
659
+    }
660 660
 }
661 661
 
662 662
 // https://code.spip.net/@count_occ
663 663
 function count_occ($regs) {
664
-	$encore = [];
665
-	foreach ($regs as $r) {
666
-		if (isset($encore[$r[0]])) {
667
-			$encore[$r[0]]++;
668
-		} else {
669
-			$encore[$r[0]] = 1;
670
-		}
671
-	}
672
-
673
-	return $encore;
664
+    $encore = [];
665
+    foreach ($regs as $r) {
666
+        if (isset($encore[$r[0]])) {
667
+            $encore[$r[0]]++;
668
+        } else {
669
+            $encore[$r[0]] = 1;
670
+        }
671
+    }
672
+
673
+    return $encore;
674 674
 }
675 675
 
676 676
 function debusquer_navigation_squelettes($self) {
677 677
 
678
-	$res = '';
679
-	$boucles = !empty($GLOBALS['debug_objets']['boucle']) ? $GLOBALS['debug_objets']['boucle'] : '';
680
-	$contexte = $GLOBALS['debug_objets']['contexte'];
681
-	$t_skel = _T('squelette');
682
-	foreach ($GLOBALS['debug_objets']['sourcefile'] as $nom => $sourcefile) {
683
-		$self2 = parametre_url($self, 'var_mode_objet', $nom);
684
-		$nav = !$boucles ? '' : debusquer_navigation_boucles($boucles, $nom, $self, $sourcefile);
685
-		$temps = !isset($GLOBALS['debug_objets']['profile'][$sourcefile]) ? '' : _T(
686
-			'zbug_profile',
687
-			['time' => $GLOBALS['debug_objets']['profile'][$sourcefile]]
688
-		);
689
-
690
-		$res .= "<fieldset id='f_" . $nom . "'><legend>"
691
-			. $t_skel
692
-			. ' '
693
-			. $sourcefile
694
-			. "&nbsp;:\n<a href='$self2&amp;var_mode_affiche=squelette#f_$nom'>"
695
-			. $t_skel
696
-			. "</a>\n<a href='$self2&amp;var_mode_affiche=resultat#f_$nom'>"
697
-			. _T('zbug_resultat')
698
-			. "</a>\n<a href='$self2&amp;var_mode_affiche=code#f_$nom'>"
699
-			. _T('zbug_code')
700
-			. "</a>\n<a href='"
701
-			. str_replace('var_mode=debug', 'var_profile=1&amp;var_mode=recalcul', $self)
702
-			. "'>"
703
-			. _T('zbug_calcul')
704
-			. '</a></legend>'
705
-			. (!$temps ? '' : ("\n<span style='display:block;float:" . $GLOBALS['spip_lang_right'] . "'>$temps</span><br />"))
706
-			. debusquer_contexte($contexte[$sourcefile])
707
-		. (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
708
-		. "</fieldset>\n";
709
-	}
710
-
711
-	return $res;
678
+    $res = '';
679
+    $boucles = !empty($GLOBALS['debug_objets']['boucle']) ? $GLOBALS['debug_objets']['boucle'] : '';
680
+    $contexte = $GLOBALS['debug_objets']['contexte'];
681
+    $t_skel = _T('squelette');
682
+    foreach ($GLOBALS['debug_objets']['sourcefile'] as $nom => $sourcefile) {
683
+        $self2 = parametre_url($self, 'var_mode_objet', $nom);
684
+        $nav = !$boucles ? '' : debusquer_navigation_boucles($boucles, $nom, $self, $sourcefile);
685
+        $temps = !isset($GLOBALS['debug_objets']['profile'][$sourcefile]) ? '' : _T(
686
+            'zbug_profile',
687
+            ['time' => $GLOBALS['debug_objets']['profile'][$sourcefile]]
688
+        );
689
+
690
+        $res .= "<fieldset id='f_" . $nom . "'><legend>"
691
+            . $t_skel
692
+            . ' '
693
+            . $sourcefile
694
+            . "&nbsp;:\n<a href='$self2&amp;var_mode_affiche=squelette#f_$nom'>"
695
+            . $t_skel
696
+            . "</a>\n<a href='$self2&amp;var_mode_affiche=resultat#f_$nom'>"
697
+            . _T('zbug_resultat')
698
+            . "</a>\n<a href='$self2&amp;var_mode_affiche=code#f_$nom'>"
699
+            . _T('zbug_code')
700
+            . "</a>\n<a href='"
701
+            . str_replace('var_mode=debug', 'var_profile=1&amp;var_mode=recalcul', $self)
702
+            . "'>"
703
+            . _T('zbug_calcul')
704
+            . '</a></legend>'
705
+            . (!$temps ? '' : ("\n<span style='display:block;float:" . $GLOBALS['spip_lang_right'] . "'>$temps</span><br />"))
706
+            . debusquer_contexte($contexte[$sourcefile])
707
+        . (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
708
+        . "</fieldset>\n";
709
+    }
710
+
711
+    return $res;
712 712
 }
713 713
 
714 714
 function debusquer_navigation_boucles($boucles, $nom_skel, $self, $nom_source) {
715
-	$i = 0;
716
-	$res = '';
717
-	$var_mode_objet = _request('var_mode_objet');
718
-	$gram = preg_match('/[.](\w+)$/', $nom_source, $r) ? $r[1] : '';
719
-
720
-	foreach ($boucles as $objet => $boucle) {
721
-		if (substr($objet, 0, strlen($nom_skel)) == $nom_skel) {
722
-			$i++;
723
-			$nom = $boucle->id_boucle;
724
-			$req = $boucle->type_requete;
725
-			$crit = public_decompiler($boucle, $gram, 0, 'criteres');
726
-			$self2 = $self . '&amp;var_mode_objet=' . $objet;
727
-
728
-			$res .= "\n<tr style='background-color: " .
729
-				($i % 2 ? '#e0e0f0' : '#f8f8ff') .
730
-				"'><td  align='right'>$i</td><td>\n" .
731
-				"<a  class='debug_link_boucle' href='" .
732
-				$self2 .
733
-				"&amp;var_mode_affiche=boucle#f_$nom_skel'>" .
734
-				_T('zbug_boucle') .
735
-				"</a></td><td>\n<a class='debug_link_boucle' href='" .
736
-				$self2 .
737
-				"&amp;var_mode_affiche=resultat#f_$nom_skel'>" .
738
-				_T('zbug_resultat') .
739
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
740
-				$self2 .
741
-				"&amp;var_mode_affiche=code#f_$nom_skel'>" .
742
-				_T('zbug_code') .
743
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
744
-				str_replace('var_mode=', 'var_profile=', $self2) .
745
-				"'>" .
746
-				_T('zbug_calcul') .
747
-				"</a></td><td>\n" .
748
-				(($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom) .
749
-				"</td><td>\n" .
750
-				$req .
751
-				"</td><td>\n" .
752
-				spip_htmlspecialchars($crit) .
753
-				'</td></tr>';
754
-		}
755
-	}
756
-
757
-	return $res;
715
+    $i = 0;
716
+    $res = '';
717
+    $var_mode_objet = _request('var_mode_objet');
718
+    $gram = preg_match('/[.](\w+)$/', $nom_source, $r) ? $r[1] : '';
719
+
720
+    foreach ($boucles as $objet => $boucle) {
721
+        if (substr($objet, 0, strlen($nom_skel)) == $nom_skel) {
722
+            $i++;
723
+            $nom = $boucle->id_boucle;
724
+            $req = $boucle->type_requete;
725
+            $crit = public_decompiler($boucle, $gram, 0, 'criteres');
726
+            $self2 = $self . '&amp;var_mode_objet=' . $objet;
727
+
728
+            $res .= "\n<tr style='background-color: " .
729
+                ($i % 2 ? '#e0e0f0' : '#f8f8ff') .
730
+                "'><td  align='right'>$i</td><td>\n" .
731
+                "<a  class='debug_link_boucle' href='" .
732
+                $self2 .
733
+                "&amp;var_mode_affiche=boucle#f_$nom_skel'>" .
734
+                _T('zbug_boucle') .
735
+                "</a></td><td>\n<a class='debug_link_boucle' href='" .
736
+                $self2 .
737
+                "&amp;var_mode_affiche=resultat#f_$nom_skel'>" .
738
+                _T('zbug_resultat') .
739
+                "</a></td><td>\n<a class='debug_link_resultat' href='" .
740
+                $self2 .
741
+                "&amp;var_mode_affiche=code#f_$nom_skel'>" .
742
+                _T('zbug_code') .
743
+                "</a></td><td>\n<a class='debug_link_resultat' href='" .
744
+                str_replace('var_mode=', 'var_profile=', $self2) .
745
+                "'>" .
746
+                _T('zbug_calcul') .
747
+                "</a></td><td>\n" .
748
+                (($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom) .
749
+                "</td><td>\n" .
750
+                $req .
751
+                "</td><td>\n" .
752
+                spip_htmlspecialchars($crit) .
753
+                '</td></tr>';
754
+        }
755
+    }
756
+
757
+    return $res;
758 758
 }
759 759
 
760 760
 function debusquer_source($objet, $affiche) {
761
-	$quoi = $GLOBALS['debug_objets'][$affiche][$objet];
762
-	if (!empty($GLOBALS['debug_objets']['boucle'][$objet]->id_boucle)) {
763
-		$nom = $GLOBALS['debug_objets']['boucle'][$objet]->id_boucle;
764
-	} else {
765
-		$nom = $GLOBALS['debug_objets']['sourcefile'][$objet];
766
-	}
767
-	$res2 = '';
768
-
769
-	if ($affiche == 'resultat') {
770
-		$legend = $nom;
771
-		$req = $GLOBALS['debug_objets']['requete'][$objet];
772
-		if (function_exists('_mysql_traite_query')) {
773
-			$c = strtolower(_request('connect'));
774
-			$c = $GLOBALS['connexions'][$c ? $c : 0]['prefixe'];
775
-			$req = _mysql_traite_query($req, '', $c);
776
-		}
777
-		//  permettre le copier/coller facile
778
-		// $res = ancre_texte($req, array(), true);
779
-		$res = "<div id='T" . md5($req) . "'>\n<pre>\n" . $req . "</pre>\n</div>\n";
780
-		//  formatage et affichage des resultats bruts de la requete
781
-		$ress_req = spip_query($req);
782
-		$brut_sql = '';
783
-		$num = 1;
784
-		//  eviter l'affichage de milliers de lignes
785
-		//  personnalisation possible dans mes_options
786
-		$max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
787
-		while ($retours_sql = sql_fetch($ress_req)) {
788
-			if ($num <= $max_aff) {
789
-				$brut_sql .= '<h3>' . ($num == 1 ? $num . ' sur ' . sql_count($ress_req) : $num) . '</h3>';
790
-				$brut_sql .= '<p>';
791
-				foreach ($retours_sql as $key => $val) {
792
-					$brut_sql .= '<strong>' . $key . '</strong> => ' . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
793
-				}
794
-				$brut_sql .= '</p>';
795
-			}
796
-			$num++;
797
-		}
798
-		$res2 = interdire_scripts($brut_sql);
799
-		foreach ($quoi as $view) {
800
-			//  ne pas afficher les $contexte_inclus
801
-			$view = preg_replace(',<\?php.+\?[>],Uims', '', $view);
802
-			if ($view) {
803
-				$res2 .= "\n<br /><fieldset>" . interdire_scripts($view) . '</fieldset>';
804
-			}
805
-		}
806
-	} elseif ($affiche == 'code') {
807
-		$legend = $nom;
808
-		$res = ancre_texte('<' . "?php\n" . $quoi . "\n?" . '>');
809
-	} elseif ($affiche == 'boucle') {
810
-		$legend = _T('zbug_boucle') . ' ' . $nom;
811
-		// Le compilateur prefixe le nom des boucles par l'extension du fichier source.
812
-		$gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
813
-		$res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
814
-	} elseif ($affiche == 'squelette') {
815
-		$legend = $GLOBALS['debug_objets']['sourcefile'][$objet];
816
-		$res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]);
817
-	}
818
-
819
-	return [$legend, $res, $res2];
761
+    $quoi = $GLOBALS['debug_objets'][$affiche][$objet];
762
+    if (!empty($GLOBALS['debug_objets']['boucle'][$objet]->id_boucle)) {
763
+        $nom = $GLOBALS['debug_objets']['boucle'][$objet]->id_boucle;
764
+    } else {
765
+        $nom = $GLOBALS['debug_objets']['sourcefile'][$objet];
766
+    }
767
+    $res2 = '';
768
+
769
+    if ($affiche == 'resultat') {
770
+        $legend = $nom;
771
+        $req = $GLOBALS['debug_objets']['requete'][$objet];
772
+        if (function_exists('_mysql_traite_query')) {
773
+            $c = strtolower(_request('connect'));
774
+            $c = $GLOBALS['connexions'][$c ? $c : 0]['prefixe'];
775
+            $req = _mysql_traite_query($req, '', $c);
776
+        }
777
+        //  permettre le copier/coller facile
778
+        // $res = ancre_texte($req, array(), true);
779
+        $res = "<div id='T" . md5($req) . "'>\n<pre>\n" . $req . "</pre>\n</div>\n";
780
+        //  formatage et affichage des resultats bruts de la requete
781
+        $ress_req = spip_query($req);
782
+        $brut_sql = '';
783
+        $num = 1;
784
+        //  eviter l'affichage de milliers de lignes
785
+        //  personnalisation possible dans mes_options
786
+        $max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
787
+        while ($retours_sql = sql_fetch($ress_req)) {
788
+            if ($num <= $max_aff) {
789
+                $brut_sql .= '<h3>' . ($num == 1 ? $num . ' sur ' . sql_count($ress_req) : $num) . '</h3>';
790
+                $brut_sql .= '<p>';
791
+                foreach ($retours_sql as $key => $val) {
792
+                    $brut_sql .= '<strong>' . $key . '</strong> => ' . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
793
+                }
794
+                $brut_sql .= '</p>';
795
+            }
796
+            $num++;
797
+        }
798
+        $res2 = interdire_scripts($brut_sql);
799
+        foreach ($quoi as $view) {
800
+            //  ne pas afficher les $contexte_inclus
801
+            $view = preg_replace(',<\?php.+\?[>],Uims', '', $view);
802
+            if ($view) {
803
+                $res2 .= "\n<br /><fieldset>" . interdire_scripts($view) . '</fieldset>';
804
+            }
805
+        }
806
+    } elseif ($affiche == 'code') {
807
+        $legend = $nom;
808
+        $res = ancre_texte('<' . "?php\n" . $quoi . "\n?" . '>');
809
+    } elseif ($affiche == 'boucle') {
810
+        $legend = _T('zbug_boucle') . ' ' . $nom;
811
+        // Le compilateur prefixe le nom des boucles par l'extension du fichier source.
812
+        $gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
813
+        $res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
814
+    } elseif ($affiche == 'squelette') {
815
+        $legend = $GLOBALS['debug_objets']['sourcefile'][$objet];
816
+        $res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]);
817
+    }
818
+
819
+    return [$legend, $res, $res2];
820 820
 }
821 821
 
822 822
 // https://code.spip.net/@debusquer_entete
823 823
 function debusquer_entete($titre, $corps) {
824 824
 
825
-	include_spip('balise/formulaire_admin');
826
-	include_spip('public/assembler'); // pour inclure_balise_dynamique
827
-	include_spip('inc/texte'); // pour corriger_typo
828
-
829
-	return _DOCTYPE_ECRIRE .
830
-	html_lang_attributes() .
831
-	"<head>\n<title>" .
832
-	('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
833
-		_T('admin_debug') . ' ' . $titre . ' (' .
834
-		supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
835
-	")</title>\n" .
836
-	"<meta http-equiv='Content-Type' content='text/html" .
837
-	(($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
838
-	"' />\n" .
839
-	http_script('', 'jquery.js')
840
-	. "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
841
-	. "' type='text/css' />" .
842
-	"</head>\n" .
843
-	"<body style='margin:0 10px;'>\n" .
844
-	"<div id='spip-debug-header'>" .
845
-	$corps .
846
-	inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false) .
847
-	'</div></body></html>';
825
+    include_spip('balise/formulaire_admin');
826
+    include_spip('public/assembler'); // pour inclure_balise_dynamique
827
+    include_spip('inc/texte'); // pour corriger_typo
828
+
829
+    return _DOCTYPE_ECRIRE .
830
+    html_lang_attributes() .
831
+    "<head>\n<title>" .
832
+    ('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
833
+        _T('admin_debug') . ' ' . $titre . ' (' .
834
+        supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
835
+    ")</title>\n" .
836
+    "<meta http-equiv='Content-Type' content='text/html" .
837
+    (($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
838
+    "' />\n" .
839
+    http_script('', 'jquery.js')
840
+    . "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
841
+    . "' type='text/css' />" .
842
+    "</head>\n" .
843
+    "<body style='margin:0 10px;'>\n" .
844
+    "<div id='spip-debug-header'>" .
845
+    $corps .
846
+    inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false) .
847
+    '</div></body></html>';
848 848
 }
Please login to merge, or discard this patch.
Spacing   +86 added lines, -89 removed lines patch added patch discarded remove patch
@@ -148,7 +148,7 @@  discard block
 block discarded – undo
148 148
 		if (!$fonc) {
149 149
 			$fonc = $GLOBALS['debug_objets']['principal'];
150 150
 		}
151
-		$titre = !$mode ? $fonc : ($mode . (isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' ' . $GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
151
+		$titre = !$mode ? $fonc : ($mode.(isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' '.$GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
152 152
 	}
153 153
 	if ($message === false) {
154 154
 		lang_select();
@@ -177,7 +177,7 @@  discard block
 block discarded – undo
177 177
 	$fond = isset($GLOBALS['fond']) ? $GLOBALS['fond'] : '';
178 178
 	// une erreur critique sort $message en array
179 179
 	$debug = is_array($msg) ? $msg[1] : $msg;
180
-	spip_log('Debug: ' . $debug . ' (' . $fond . ')');
180
+	spip_log('Debug: '.$debug.' ('.$fond.')');
181 181
 
182 182
 	return $msg;
183 183
 }
@@ -185,7 +185,7 @@  discard block
 block discarded – undo
185 185
 function debusquer_bandeau($erreurs) {
186 186
 
187 187
 	if (!empty($erreurs)) {
188
-		$n = [count($erreurs) . ' ' . _T('zbug_erreur_squelette')];
188
+		$n = [count($erreurs).' '._T('zbug_erreur_squelette')];
189 189
 
190 190
 		return debusquer_navigation($erreurs, $n);
191 191
 	} elseif (!empty($GLOBALS['tableau_des_temps'])) {
@@ -218,25 +218,25 @@  discard block
 block discarded – undo
218 218
 			$valeur_simple = [];
219 219
 			foreach ($valeur as $v) {
220 220
 				if (is_array($v)) {
221
-					$valeur_simple[] = 'array:' . count($v);
221
+					$valeur_simple[] = 'array:'.count($v);
222 222
 				} elseif (is_object($v)) {
223 223
 					$valeur_simple[] = get_class($v);
224 224
 				} elseif (is_string($v)) {
225
-					$valeur_simple[] = "'" . $v . "'";
225
+					$valeur_simple[] = "'".$v."'";
226 226
 				} else {
227 227
 					$valeur_simple[] = $v;
228 228
 				}
229 229
 			}
230 230
 			$n = count($valeur);
231
-			$valeur = (($n > 3) ? 'array:' . $n . ' ' : '');
232
-			$valeur .= '[' . join(', ', $valeur_simple) . ']';
231
+			$valeur = (($n > 3) ? 'array:'.$n.' ' : '');
232
+			$valeur .= '['.join(', ', $valeur_simple).']';
233 233
 		} elseif (is_object($valeur)) {
234 234
 			$valeur = get_class($valeur);
235 235
 		} elseif (is_string($valeur)) {
236
-			$valeur = "'" . $valeur . "'";
236
+			$valeur = "'".$valeur."'";
237 237
 		}
238
-		$res .= "\n<tr><td><strong>" . nl2br(entites_html($nom))
239
-			. '</strong></td><td>:&nbsp;' . nl2br(entites_html($valeur))
238
+		$res .= "\n<tr><td><strong>".nl2br(entites_html($nom))
239
+			. '</strong></td><td>:&nbsp;'.nl2br(entites_html($valeur))
240 240
 			. "</td></tr>\n";
241 241
 	}
242 242
 
@@ -264,10 +264,10 @@  discard block
 block discarded – undo
264 264
 				$nom_code = $lieu->descr['nom'];
265 265
 				$skel = $lieu->descr['sourcefile'];
266 266
 				$h2 = parametre_url($href, 'var_mode_objet', $nom_code);
267
-				$h3 = parametre_url($h2, 'var_mode_affiche', 'squelette') . '#L' . $ligne;
267
+				$h3 = parametre_url($h2, 'var_mode_affiche', 'squelette').'#L'.$ligne;
268 268
 				$skel = "<a href='$h3'><b>$skel</b></a>";
269 269
 				if ($boucle) {
270
-					$h3 = parametre_url($h2 . $boucle, 'var_mode_affiche', 'boucle');
270
+					$h3 = parametre_url($h2.$boucle, 'var_mode_affiche', 'boucle');
271 271
 					$boucle = "<a href='$h3'><b>$boucle</b></a>";
272 272
 				}
273 273
 			}
@@ -356,7 +356,7 @@  discard block
 block discarded – undo
356 356
 	}
357 357
 
358 358
 	// Requete erronee
359
-	$err = '<b>' . _T('avis_erreur_mysql') . " $errno</b><br /><tt>\n"
359
+	$err = '<b>'._T('avis_erreur_mysql')." $errno</b><br /><tt>\n"
360 360
 		. spip_htmlspecialchars($msg)
361 361
 		. "\n<br /><span style='color: red'><b>"
362 362
 		. spip_htmlspecialchars($query)
@@ -371,7 +371,7 @@  discard block
 block discarded – undo
371 371
 // https://code.spip.net/@trouve_boucle_debug
372 372
 function trouve_boucle_debug($n, $nom, $debut = 0, $boucle = '') {
373 373
 
374
-	$id = $nom . $boucle;
374
+	$id = $nom.$boucle;
375 375
 	if (is_array($GLOBALS['debug_objets']['sequence'][$id])) {
376 376
 		foreach ($GLOBALS['debug_objets']['sequence'][$id] as $v) {
377 377
 			if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r)) {
@@ -418,7 +418,7 @@  discard block
 block discarded – undo
418 418
 		}
419 419
 	}
420 420
 	}
421
-	$incl = ',' . $reg[1] . '[.]\w$,';
421
+	$incl = ','.$reg[1].'[.]\w$,';
422 422
 
423 423
 	foreach ($GLOBALS['debug_objets']['sourcefile'] as $k => $v) {
424 424
 		if (preg_match($incl, $v)) {
@@ -434,16 +434,13 @@  discard block
 block discarded – undo
434 434
 	list($skel, $boucle, $ligne) = trouve_boucle_debug($n, $nom);
435 435
 
436 436
 	if (!$boucle) {
437
-		return !$ligne ? '' :
438
-			(' (' .
439
-				(($nom != $skel) ? _T('squelette_inclus_ligne') :
440
-					_T('squelette_ligne')) .
437
+		return !$ligne ? '' : (' ('.
438
+				(($nom != $skel) ? _T('squelette_inclus_ligne') : _T('squelette_ligne')).
441 439
 				" <a href='$self&amp;var_mode_objet=$skel&amp;var_mode_affiche=squelette&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
442 440
 	} else {
443 441
 		$self .= "&amp;var_mode_objet=$skel$boucle&amp;var_mode_affiche=boucle";
444 442
 
445
-		return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" :
446
-			" (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
443
+		return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" : " (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
447 444
 	}
448 445
 }
449 446
 
@@ -466,14 +463,14 @@  discard block
 block discarded – undo
466 463
 
467 464
 	$s = preg_replace(
468 465
 		',<(\w[^<>]*)>([^<]*)<br />([^<]*)</\1>,',
469
-		'<\1>\2</\1><br />' . "\n" . '<\1>\3</\1>',
466
+		'<\1>\2</\1><br />'."\n".'<\1>\3</\1>',
470 467
 		$s
471 468
 	);
472 469
 
473 470
 
474 471
 	$tableau = explode('<br />', $s);
475 472
 
476
-	$format = "<span style='float:left;display:block;width:50px;height:1px'><a id='L%d' style='background-color: white; visibility: " . ($nocpt ? 'hidden' : 'visible') . ";%s' href='#T%s' title=\"%s\">%0" . strval(@strlen(count($tableau))) . "d</a></span> %s<br />\n";
473
+	$format = "<span style='float:left;display:block;width:50px;height:1px'><a id='L%d' style='background-color: white; visibility: ".($nocpt ? 'hidden' : 'visible').";%s' href='#T%s' title=\"%s\">%0".strval(@strlen(count($tableau)))."d</a></span> %s<br />\n";
477 474
 
478 475
 	$format10 = str_replace('white', 'lightgrey', $format);
479 476
 	$formaterr = 'color: red;';
@@ -517,7 +514,7 @@  discard block
 block discarded – undo
517 514
 	. '" style="cursor: pointer;">'
518 515
 	. ($nocpt ? '' : _T('info_numero_abbreviation'))
519 516
 	. '</div>
520
-	' . $res . "</div>\n";
517
+	' . $res."</div>\n";
521 518
 }
522 519
 
523 520
 // l'environnement graphique du debuggueur
@@ -538,14 +535,14 @@  discard block
 block discarded – undo
538 535
 			if (!empty($GLOBALS['debug_objets'][$mode][$fonc])) {
539 536
 				list($legend, $texte, $res2) = debusquer_source($fonc, $mode);
540 537
 				$texte .= $res2;
541
-			} elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc . 'tout'])) {
542
-				$legend = _T('zbug_' . $mode);
543
-				$texte = $GLOBALS['debug_objets'][$mode][$fonc . 'tout'];
538
+			} elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc.'tout'])) {
539
+				$legend = _T('zbug_'.$mode);
540
+				$texte = $GLOBALS['debug_objets'][$mode][$fonc.'tout'];
544 541
 				$texte = ancre_texte($texte, ['', '']);
545 542
 			}
546 543
 		} else {
547 544
 			if (strlen(trim($res))) {
548
-				return "<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res</div>";
545
+				return "<img src='".chemin_image('debug-xx.svg')."' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res</div>";
549 546
 			} else {
550 547
 				// cas de l'appel sur erreur: montre la page
551 548
 				return isset($GLOBALS['debug_objets']['resultat']['tout'])
@@ -555,7 +552,7 @@  discard block
 block discarded – undo
555 552
 		}
556 553
 	} else {
557 554
 		$valider = charger_fonction('valider', 'xml');
558
-		$val = $valider($GLOBALS['debug_objets']['validation'][$fonc . 'tout']);
555
+		$val = $valider($GLOBALS['debug_objets']['validation'][$fonc.'tout']);
559 556
 		// Si erreur, signaler leur nombre dans le formulaire admin
560 557
 		$GLOBALS['debug_objets']['validation'] = $val->err ? count($val->err) : '';
561 558
 		list($texte, $err) = emboite_texte($val, $fonc, $self);
@@ -566,14 +563,14 @@  discard block
 block discarded – undo
566 563
 		} else {
567 564
 			$err = ": $err";
568 565
 		}
569
-		$legend = _T('validation') . ' ' . $err;
566
+		$legend = _T('validation').' '.$err;
570 567
 		$res = $id = '';
571 568
 	}
572 569
 
573 570
 	return !trim($texte) ? '' : (
574
-		"<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res"
571
+		"<img src='".chemin_image('debug-xx.svg')."' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res"
575 572
 		. "<div id='debug_boucle'><fieldset$id><legend>"
576
-		. "<a href='" . $self . '#f_' . substr($fonc, 0, 37) . "'> &#8593; "
573
+		. "<a href='".$self.'#f_'.substr($fonc, 0, 37)."'> &#8593; "
577 574
 		. ($legend ? $legend : $mode)
578 575
 		. '</a></legend>'
579 576
 		. $texte
@@ -585,7 +582,7 @@  discard block
 block discarded – undo
585 582
 // https://code.spip.net/@emboite_texte
586 583
 function emboite_texte($res, $fonc = '', $self = '') {
587 584
 	$errs = $res->err;
588
-	$texte = $res->entete . ($errs ? '' : $res->page);
585
+	$texte = $res->entete.($errs ? '' : $res->page);
589 586
 
590 587
 	if (!$texte and !$errs) {
591 588
 		return [ancre_texte('', ['', '']), false];
@@ -641,7 +638,7 @@  discard block
 block discarded – undo
641 638
 		$err = "<h2 style='text-align: center'>"
642 639
 			. $i
643 640
 			. "<a href='#fin_err'>"
644
-			. ' ' . _T('erreur_texte')
641
+			. ' '._T('erreur_texte')
645 642
 			. "</a></h2><table id='debut_err' style='width: 100%'>"
646 643
 			. $err
647 644
 			. " </table><a id='fin_err'></a>";
@@ -651,9 +648,9 @@  discard block
 block discarded – undo
651 648
 		list($msg, $fermant, $ouvrant) = $errs[0];
652 649
 		$rf = reference_boucle_debug($fermant, $fonc, $self);
653 650
 		$ro = reference_boucle_debug($ouvrant, $fonc, $self);
654
-		$err = $msg .
655
-			"<a href='#L" . $fermant . "'>$fermant</a>$rf<br />" .
656
-			"<a href='#L" . $ouvrant . "'>$ouvrant</a>$ro";
651
+		$err = $msg.
652
+			"<a href='#L".$fermant."'>$fermant</a>$rf<br />".
653
+			"<a href='#L".$ouvrant."'>$ouvrant</a>$ro";
657 654
 
658 655
 		return [ancre_texte($texte, [[$ouvrant], [$fermant]]), $err];
659 656
 	}
@@ -687,7 +684,7 @@  discard block
 block discarded – undo
687 684
 			['time' => $GLOBALS['debug_objets']['profile'][$sourcefile]]
688 685
 		);
689 686
 
690
-		$res .= "<fieldset id='f_" . $nom . "'><legend>"
687
+		$res .= "<fieldset id='f_".$nom."'><legend>"
691 688
 			. $t_skel
692 689
 			. ' '
693 690
 			. $sourcefile
@@ -702,7 +699,7 @@  discard block
 block discarded – undo
702 699
 			. "'>"
703 700
 			. _T('zbug_calcul')
704 701
 			. '</a></legend>'
705
-			. (!$temps ? '' : ("\n<span style='display:block;float:" . $GLOBALS['spip_lang_right'] . "'>$temps</span><br />"))
702
+			. (!$temps ? '' : ("\n<span style='display:block;float:".$GLOBALS['spip_lang_right']."'>$temps</span><br />"))
706 703
 			. debusquer_contexte($contexte[$sourcefile])
707 704
 		. (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
708 705
 		. "</fieldset>\n";
@@ -723,33 +720,33 @@  discard block
 block discarded – undo
723 720
 			$nom = $boucle->id_boucle;
724 721
 			$req = $boucle->type_requete;
725 722
 			$crit = public_decompiler($boucle, $gram, 0, 'criteres');
726
-			$self2 = $self . '&amp;var_mode_objet=' . $objet;
727
-
728
-			$res .= "\n<tr style='background-color: " .
729
-				($i % 2 ? '#e0e0f0' : '#f8f8ff') .
730
-				"'><td  align='right'>$i</td><td>\n" .
731
-				"<a  class='debug_link_boucle' href='" .
732
-				$self2 .
733
-				"&amp;var_mode_affiche=boucle#f_$nom_skel'>" .
734
-				_T('zbug_boucle') .
735
-				"</a></td><td>\n<a class='debug_link_boucle' href='" .
736
-				$self2 .
737
-				"&amp;var_mode_affiche=resultat#f_$nom_skel'>" .
738
-				_T('zbug_resultat') .
739
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
740
-				$self2 .
741
-				"&amp;var_mode_affiche=code#f_$nom_skel'>" .
742
-				_T('zbug_code') .
743
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
744
-				str_replace('var_mode=', 'var_profile=', $self2) .
745
-				"'>" .
746
-				_T('zbug_calcul') .
747
-				"</a></td><td>\n" .
748
-				(($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom) .
749
-				"</td><td>\n" .
750
-				$req .
751
-				"</td><td>\n" .
752
-				spip_htmlspecialchars($crit) .
723
+			$self2 = $self.'&amp;var_mode_objet='.$objet;
724
+
725
+			$res .= "\n<tr style='background-color: ".
726
+				($i % 2 ? '#e0e0f0' : '#f8f8ff').
727
+				"'><td  align='right'>$i</td><td>\n".
728
+				"<a  class='debug_link_boucle' href='".
729
+				$self2.
730
+				"&amp;var_mode_affiche=boucle#f_$nom_skel'>".
731
+				_T('zbug_boucle').
732
+				"</a></td><td>\n<a class='debug_link_boucle' href='".
733
+				$self2.
734
+				"&amp;var_mode_affiche=resultat#f_$nom_skel'>".
735
+				_T('zbug_resultat').
736
+				"</a></td><td>\n<a class='debug_link_resultat' href='".
737
+				$self2.
738
+				"&amp;var_mode_affiche=code#f_$nom_skel'>".
739
+				_T('zbug_code').
740
+				"</a></td><td>\n<a class='debug_link_resultat' href='".
741
+				str_replace('var_mode=', 'var_profile=', $self2).
742
+				"'>".
743
+				_T('zbug_calcul').
744
+				"</a></td><td>\n".
745
+				(($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom).
746
+				"</td><td>\n".
747
+				$req.
748
+				"</td><td>\n".
749
+				spip_htmlspecialchars($crit).
753 750
 				'</td></tr>';
754 751
 		}
755 752
 	}
@@ -776,7 +773,7 @@  discard block
 block discarded – undo
776 773
 		}
777 774
 		//  permettre le copier/coller facile
778 775
 		// $res = ancre_texte($req, array(), true);
779
-		$res = "<div id='T" . md5($req) . "'>\n<pre>\n" . $req . "</pre>\n</div>\n";
776
+		$res = "<div id='T".md5($req)."'>\n<pre>\n".$req."</pre>\n</div>\n";
780 777
 		//  formatage et affichage des resultats bruts de la requete
781 778
 		$ress_req = spip_query($req);
782 779
 		$brut_sql = '';
@@ -786,10 +783,10 @@  discard block
 block discarded – undo
786 783
 		$max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
787 784
 		while ($retours_sql = sql_fetch($ress_req)) {
788 785
 			if ($num <= $max_aff) {
789
-				$brut_sql .= '<h3>' . ($num == 1 ? $num . ' sur ' . sql_count($ress_req) : $num) . '</h3>';
786
+				$brut_sql .= '<h3>'.($num == 1 ? $num.' sur '.sql_count($ress_req) : $num).'</h3>';
790 787
 				$brut_sql .= '<p>';
791 788
 				foreach ($retours_sql as $key => $val) {
792
-					$brut_sql .= '<strong>' . $key . '</strong> => ' . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
789
+					$brut_sql .= '<strong>'.$key.'</strong> => '.spip_htmlspecialchars(couper($val, 150))."<br />\n";
793 790
 				}
794 791
 				$brut_sql .= '</p>';
795 792
 			}
@@ -800,14 +797,14 @@  discard block
 block discarded – undo
800 797
 			//  ne pas afficher les $contexte_inclus
801 798
 			$view = preg_replace(',<\?php.+\?[>],Uims', '', $view);
802 799
 			if ($view) {
803
-				$res2 .= "\n<br /><fieldset>" . interdire_scripts($view) . '</fieldset>';
800
+				$res2 .= "\n<br /><fieldset>".interdire_scripts($view).'</fieldset>';
804 801
 			}
805 802
 		}
806 803
 	} elseif ($affiche == 'code') {
807 804
 		$legend = $nom;
808
-		$res = ancre_texte('<' . "?php\n" . $quoi . "\n?" . '>');
805
+		$res = ancre_texte('<'."?php\n".$quoi."\n?".'>');
809 806
 	} elseif ($affiche == 'boucle') {
810
-		$legend = _T('zbug_boucle') . ' ' . $nom;
807
+		$legend = _T('zbug_boucle').' '.$nom;
811 808
 		// Le compilateur prefixe le nom des boucles par l'extension du fichier source.
812 809
 		$gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
813 810
 		$res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
@@ -826,23 +823,23 @@  discard block
 block discarded – undo
826 823
 	include_spip('public/assembler'); // pour inclure_balise_dynamique
827 824
 	include_spip('inc/texte'); // pour corriger_typo
828 825
 
829
-	return _DOCTYPE_ECRIRE .
830
-	html_lang_attributes() .
831
-	"<head>\n<title>" .
832
-	('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
833
-		_T('admin_debug') . ' ' . $titre . ' (' .
834
-		supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
835
-	")</title>\n" .
836
-	"<meta http-equiv='Content-Type' content='text/html" .
837
-	(($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
838
-	"' />\n" .
826
+	return _DOCTYPE_ECRIRE.
827
+	html_lang_attributes().
828
+	"<head>\n<title>".
829
+	('SPIP '.$GLOBALS['spip_version_affichee'].' '.
830
+		_T('admin_debug').' '.$titre.' ('.
831
+		supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))).
832
+	")</title>\n".
833
+	"<meta http-equiv='Content-Type' content='text/html".
834
+	(($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '').
835
+	"' />\n".
839 836
 	http_script('', 'jquery.js')
840
-	. "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
841
-	. "' type='text/css' />" .
842
-	"</head>\n" .
843
-	"<body style='margin:0 10px;'>\n" .
844
-	"<div id='spip-debug-header'>" .
845
-	$corps .
846
-	inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false) .
837
+	. "<link rel='stylesheet' href='".url_absolue(find_in_path('spip_admin.css'))
838
+	. "' type='text/css' />".
839
+	"</head>\n".
840
+	"<body style='margin:0 10px;'>\n".
841
+	"<div id='spip-debug-header'>".
842
+	$corps.
843
+	inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false).
847 844
 	'</div></body></html>';
848 845
 }
Please login to merge, or discard this patch.