Completed
Push — master ( 33707d...144e31 )
by cam
58s
created
ecrire/public/debusquer.php 1 patch
Indentation   +669 added lines, -669 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');
@@ -68,124 +68,124 @@  discard block
 block discarded – undo
68 68
  *     - true si $opt 'erreurs' = 'reset'
69 69
  **/
70 70
 function public_debusquer_dist($message = '', $lieu = '', $opt = []) {
71
-	static $tableau_des_erreurs = [];
72
-
73
-	// Pour des tests unitaires, pouvoir récupérer les erreurs générées
74
-	if (isset($opt['erreurs'])) {
75
-		if ($opt['erreurs'] == 'get') {
76
-			return $tableau_des_erreurs;
77
-		}
78
-		if ($opt['erreurs'] == 'reset') {
79
-			$tableau_des_erreurs = [];
80
-
81
-			return true;
82
-		}
83
-	}
84
-
85
-	// Erreur ou appel final ?
86
-	if ($message) {
87
-		$message = debusquer_compose_message($message);
88
-		$tableau_des_erreurs[] = [$message, $lieu];
89
-		set_request('var_mode', 'debug');
90
-		$GLOBALS['bouton_admin_debug'] = true;
91
-		// Permettre a la compil de continuer
92
-		if (is_object($lieu) and (!isset($lieu->code) or !$lieu->code)) {
93
-			$lieu->code = "''";
94
-		}
95
-		// forcer l'appel au debusqueur en cas de boucles infernales
96
-		$urgence = (_DEBUG_MAX_SQUELETTE_ERREURS and (is_countable($tableau_des_erreurs) ? count($tableau_des_erreurs) : 0) > _DEBUG_MAX_SQUELETTE_ERREURS);
97
-		if (!$urgence) {
98
-			return;
99
-		}
100
-	}
101
-	if (empty($GLOBALS['debug_objets']['principal'])) {
102
-		// espace public ?
103
-		if (isset($GLOBALS['fond'])) {
104
-			$GLOBALS['debug_objets']['principal'] = $GLOBALS['fond'];
105
-		}
106
-	}
107
-
108
-	include_spip('inc/autoriser');
109
-	if (!autoriser('debug')) {
110
-		return;
111
-	}
112
-	include_spip('inc/headers');
113
-	include_spip('inc/filtres');
114
-
115
-	lang_select($GLOBALS['visiteur_session']['lang']);
116
-	$fonc = preg_replace(",\W,", "_", _request('var_mode_objet') ?? '');
117
-	$mode = preg_replace(",\W,", "_", _request('var_mode_affiche') ?? '');
118
-
119
-	$self = str_replace("\\'", ''', self());
120
-	$self = parametre_url($self, 'var_mode', 'debug');
121
-
122
-	$res = debusquer_bandeau($tableau_des_erreurs)
123
-		. '<br />'
124
-		. debusquer_squelette($fonc, $mode, $self);
125
-
126
-	if (!_DIR_RESTREINT or headers_sent()) {
127
-		return $res;
128
-	}
129
-	if ($tableau_des_erreurs) {
130
-		http_response_code(503);
131
-	}
132
-
133
-	http_no_cache();
134
-	if (isset($_GET['var_profile'])) {
135
-		$titre = parametre_url($GLOBALS['REQUEST_URI'], 'var_profile', '');
136
-		$titre = parametre_url($titre, 'var_mode', '');
137
-	} else {
138
-		if (!$fonc) {
139
-			$fonc = $GLOBALS['debug_objets']['principal'];
140
-		}
141
-		$titre = !$mode ? $fonc : ($mode . (isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' ' . $GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
142
-	}
143
-	if ($message === false) {
144
-		lang_select();
145
-
146
-		return debusquer_entete($titre, $res);
147
-	} else {
148
-		echo debusquer_entete($titre, $res);
149
-	}
150
-	exit;
71
+    static $tableau_des_erreurs = [];
72
+
73
+    // Pour des tests unitaires, pouvoir récupérer les erreurs générées
74
+    if (isset($opt['erreurs'])) {
75
+        if ($opt['erreurs'] == 'get') {
76
+            return $tableau_des_erreurs;
77
+        }
78
+        if ($opt['erreurs'] == 'reset') {
79
+            $tableau_des_erreurs = [];
80
+
81
+            return true;
82
+        }
83
+    }
84
+
85
+    // Erreur ou appel final ?
86
+    if ($message) {
87
+        $message = debusquer_compose_message($message);
88
+        $tableau_des_erreurs[] = [$message, $lieu];
89
+        set_request('var_mode', 'debug');
90
+        $GLOBALS['bouton_admin_debug'] = true;
91
+        // Permettre a la compil de continuer
92
+        if (is_object($lieu) and (!isset($lieu->code) or !$lieu->code)) {
93
+            $lieu->code = "''";
94
+        }
95
+        // forcer l'appel au debusqueur en cas de boucles infernales
96
+        $urgence = (_DEBUG_MAX_SQUELETTE_ERREURS and (is_countable($tableau_des_erreurs) ? count($tableau_des_erreurs) : 0) > _DEBUG_MAX_SQUELETTE_ERREURS);
97
+        if (!$urgence) {
98
+            return;
99
+        }
100
+    }
101
+    if (empty($GLOBALS['debug_objets']['principal'])) {
102
+        // espace public ?
103
+        if (isset($GLOBALS['fond'])) {
104
+            $GLOBALS['debug_objets']['principal'] = $GLOBALS['fond'];
105
+        }
106
+    }
107
+
108
+    include_spip('inc/autoriser');
109
+    if (!autoriser('debug')) {
110
+        return;
111
+    }
112
+    include_spip('inc/headers');
113
+    include_spip('inc/filtres');
114
+
115
+    lang_select($GLOBALS['visiteur_session']['lang']);
116
+    $fonc = preg_replace(",\W,", "_", _request('var_mode_objet') ?? '');
117
+    $mode = preg_replace(",\W,", "_", _request('var_mode_affiche') ?? '');
118
+
119
+    $self = str_replace("\\'", '&#39;', self());
120
+    $self = parametre_url($self, 'var_mode', 'debug');
121
+
122
+    $res = debusquer_bandeau($tableau_des_erreurs)
123
+        . '<br />'
124
+        . debusquer_squelette($fonc, $mode, $self);
125
+
126
+    if (!_DIR_RESTREINT or headers_sent()) {
127
+        return $res;
128
+    }
129
+    if ($tableau_des_erreurs) {
130
+        http_response_code(503);
131
+    }
132
+
133
+    http_no_cache();
134
+    if (isset($_GET['var_profile'])) {
135
+        $titre = parametre_url($GLOBALS['REQUEST_URI'], 'var_profile', '');
136
+        $titre = parametre_url($titre, 'var_mode', '');
137
+    } else {
138
+        if (!$fonc) {
139
+            $fonc = $GLOBALS['debug_objets']['principal'];
140
+        }
141
+        $titre = !$mode ? $fonc : ($mode . (isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' ' . $GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
142
+    }
143
+    if ($message === false) {
144
+        lang_select();
145
+
146
+        return debusquer_entete($titre, $res);
147
+    } else {
148
+        echo debusquer_entete($titre, $res);
149
+    }
150
+    exit;
151 151
 }
152 152
 
153 153
 function debusquer_compose_message($msg) {
154
-	if (is_array($msg)) {
155
-		// si c'est un texte, c'est une traduction a faire, mais
156
-		// sqlite renvoit aussi des erreurs alpha num (mais avec 3 arguments)
157
-		if (!is_numeric($msg[0]) and count($msg) == 2) {
158
-			// message avec argument: instancier
159
-			$msg = _T($msg[0], $msg[1], 'spip-debug-arg');
160
-		} else {
161
-			// message SQL: interpreter
162
-			$msg = debusquer_requete($msg);
163
-		}
164
-	}
165
-	// FIXME: le fond n'est pas la si on n'est pas dans un squelette
166
-	// cela dit, ca serait bien d'indiquer tout de meme d'ou vient l'erreur
167
-	$fond = $GLOBALS['fond'] ?? '';
168
-	// une erreur critique sort $message en array
169
-	$debug = is_array($msg) ? $msg[1] : $msg;
170
-	spip_log('Debug: ' . $debug . ' (' . $fond . ')');
171
-
172
-	return $msg;
154
+    if (is_array($msg)) {
155
+        // si c'est un texte, c'est une traduction a faire, mais
156
+        // sqlite renvoit aussi des erreurs alpha num (mais avec 3 arguments)
157
+        if (!is_numeric($msg[0]) and count($msg) == 2) {
158
+            // message avec argument: instancier
159
+            $msg = _T($msg[0], $msg[1], 'spip-debug-arg');
160
+        } else {
161
+            // message SQL: interpreter
162
+            $msg = debusquer_requete($msg);
163
+        }
164
+    }
165
+    // FIXME: le fond n'est pas la si on n'est pas dans un squelette
166
+    // cela dit, ca serait bien d'indiquer tout de meme d'ou vient l'erreur
167
+    $fond = $GLOBALS['fond'] ?? '';
168
+    // une erreur critique sort $message en array
169
+    $debug = is_array($msg) ? $msg[1] : $msg;
170
+    spip_log('Debug: ' . $debug . ' (' . $fond . ')');
171
+
172
+    return $msg;
173 173
 }
174 174
 
175 175
 function debusquer_bandeau($erreurs) {
176 176
 
177
-	if (!empty($erreurs)) {
178
-		$n = [(is_countable($erreurs) ? count($erreurs) : 0) . ' ' . _T('zbug_erreur_squelette')];
177
+    if (!empty($erreurs)) {
178
+        $n = [(is_countable($erreurs) ? count($erreurs) : 0) . ' ' . _T('zbug_erreur_squelette')];
179 179
 
180
-		return debusquer_navigation($erreurs, $n);
181
-	} elseif (!empty($GLOBALS['tableau_des_temps'])) {
182
-		include_spip('public/tracer');
183
-		[$temps, $nav] = chrono_requete($GLOBALS['tableau_des_temps']);
180
+        return debusquer_navigation($erreurs, $n);
181
+    } elseif (!empty($GLOBALS['tableau_des_temps'])) {
182
+        include_spip('public/tracer');
183
+        [$temps, $nav] = chrono_requete($GLOBALS['tableau_des_temps']);
184 184
 
185
-		return debusquer_navigation($temps, $nav, 'debug-profile');
186
-	} else {
187
-		return '';
188
-	}
185
+        return debusquer_navigation($temps, $nav, 'debug-profile');
186
+    } else {
187
+        return '';
188
+    }
189 189
 }
190 190
 
191 191
 /**
@@ -195,42 +195,42 @@  discard block
 block discarded – undo
195 195
  * @return string Code HTML
196 196
  **/
197 197
 function debusquer_contexte($env) {
198
-	if (is_string($env) and is_array($env_tab = @unserialize($env))) {
199
-		$env = $env_tab;
200
-	}
201
-
202
-	if (!$env) {
203
-		return '';
204
-	}
205
-	$res = '';
206
-	foreach ($env as $nom => $valeur) {
207
-		if (is_array($valeur)) {
208
-			$valeur_simple = [];
209
-			foreach ($valeur as $v) {
210
-				if (is_array($v)) {
211
-					$valeur_simple[] = 'array:' . count($v);
212
-				} elseif (is_object($v)) {
213
-					$valeur_simple[] = get_class($v);
214
-				} elseif (is_string($v)) {
215
-					$valeur_simple[] = "'" . $v . "'";
216
-				} else {
217
-					$valeur_simple[] = $v;
218
-				}
219
-			}
220
-			$n = count($valeur);
221
-			$valeur = (($n > 3) ? 'array:' . $n . ' ' : '');
222
-			$valeur .= '[' . join(', ', $valeur_simple) . ']';
223
-		} elseif (is_object($valeur)) {
224
-			$valeur = get_class($valeur);
225
-		} elseif (is_string($valeur)) {
226
-			$valeur = "'" . $valeur . "'";
227
-		}
228
-		$res .= "\n<tr><td><strong>" . nl2br((string) entites_html($nom))
229
-			. '</strong></td><td>:&nbsp;' . nl2br((string) entites_html($valeur))
230
-			. "</td></tr>\n";
231
-	}
232
-
233
-	return "<div class='spip-env'><fieldset><legend onclick=\"this.parentElement.classList.toggle('expanded');\">#ENV</legend>\n<div><table>$res</table></div></fieldset></div>\n";
198
+    if (is_string($env) and is_array($env_tab = @unserialize($env))) {
199
+        $env = $env_tab;
200
+    }
201
+
202
+    if (!$env) {
203
+        return '';
204
+    }
205
+    $res = '';
206
+    foreach ($env as $nom => $valeur) {
207
+        if (is_array($valeur)) {
208
+            $valeur_simple = [];
209
+            foreach ($valeur as $v) {
210
+                if (is_array($v)) {
211
+                    $valeur_simple[] = 'array:' . count($v);
212
+                } elseif (is_object($v)) {
213
+                    $valeur_simple[] = get_class($v);
214
+                } elseif (is_string($v)) {
215
+                    $valeur_simple[] = "'" . $v . "'";
216
+                } else {
217
+                    $valeur_simple[] = $v;
218
+                }
219
+            }
220
+            $n = count($valeur);
221
+            $valeur = (($n > 3) ? 'array:' . $n . ' ' : '');
222
+            $valeur .= '[' . join(', ', $valeur_simple) . ']';
223
+        } elseif (is_object($valeur)) {
224
+            $valeur = get_class($valeur);
225
+        } elseif (is_string($valeur)) {
226
+            $valeur = "'" . $valeur . "'";
227
+        }
228
+        $res .= "\n<tr><td><strong>" . nl2br((string) entites_html($nom))
229
+            . '</strong></td><td>:&nbsp;' . nl2br((string) entites_html($valeur))
230
+            . "</td></tr>\n";
231
+    }
232
+
233
+    return "<div class='spip-env'><fieldset><legend onclick=\"this.parentElement.classList.toggle('expanded');\">#ENV</legend>\n<div><table>$res</table></div></fieldset></div>\n";
234 234
 }
235 235
 
236 236
 // Affichage du tableau des erreurs ou des temps de calcul
@@ -238,66 +238,66 @@  discard block
 block discarded – undo
238 238
 
239 239
 function debusquer_navigation($tableau, $caption = [], $id = 'debug-nav') {
240 240
 
241
-	if (_request('exec') == 'valider_xml') {
242
-		return '';
243
-	}
244
-	$GLOBALS['bouton_admin_debug'] = true;
245
-	$res = '';
246
-	$href = quote_amp(parametre_url($GLOBALS['REQUEST_URI'], 'var_mode', 'debug'));
247
-	foreach ($tableau as $i => $err) {
248
-		$boucle = $ligne = $skel = '';
249
-		[$msg, $lieu] = $err;
250
-		if (is_object($lieu)) {
251
-			$ligne = $lieu->ligne;
252
-			$boucle = !empty($lieu->id_boucle) ? $lieu->id_boucle : '';
253
-			if (isset($lieu->descr['nom'])) {
254
-				$nom_code = $lieu->descr['nom'];
255
-				$skel = $lieu->descr['sourcefile'];
256
-				$h2 = parametre_url($href, 'var_mode_objet', $nom_code);
257
-				$h3 = parametre_url($h2, 'var_mode_affiche', 'squelette') . '#L' . $ligne;
258
-				$skel = "<a href='$h3'><b>$skel</b></a>";
259
-				if ($boucle) {
260
-					$h3 = parametre_url($h2 . $boucle, 'var_mode_affiche', 'boucle');
261
-					$boucle = "<a href='$h3'><b>$boucle</b></a>";
262
-				}
263
-			}
264
-		}
265
-
266
-		$j = ($i + 1);
267
-		$res .= "<tr id='req$j'><td style='text-align: right'>"
268
-			. $j
269
-			. "&nbsp;</td><td style='text-align: left'>"
270
-			. (is_array($msg) ? implode('', $msg) : $msg)
271
-			. "</td><td style='text-align: left'>"
272
-			. ($skel ?: '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
273
-			. "</td><td class='spip-debug-arg' style='text-align: left'>"
274
-			. ($boucle ?: '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
275
-			. "</td><td style='text-align: right'>"
276
-			. $ligne
277
-			. "</td></tr>\n";
278
-	}
279
-
280
-	return "\n<table id='$id'>"
281
-	. "<caption onclick=\"x = document.getElementById('$id'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\">"
282
-	. $caption[0]
241
+    if (_request('exec') == 'valider_xml') {
242
+        return '';
243
+    }
244
+    $GLOBALS['bouton_admin_debug'] = true;
245
+    $res = '';
246
+    $href = quote_amp(parametre_url($GLOBALS['REQUEST_URI'], 'var_mode', 'debug'));
247
+    foreach ($tableau as $i => $err) {
248
+        $boucle = $ligne = $skel = '';
249
+        [$msg, $lieu] = $err;
250
+        if (is_object($lieu)) {
251
+            $ligne = $lieu->ligne;
252
+            $boucle = !empty($lieu->id_boucle) ? $lieu->id_boucle : '';
253
+            if (isset($lieu->descr['nom'])) {
254
+                $nom_code = $lieu->descr['nom'];
255
+                $skel = $lieu->descr['sourcefile'];
256
+                $h2 = parametre_url($href, 'var_mode_objet', $nom_code);
257
+                $h3 = parametre_url($h2, 'var_mode_affiche', 'squelette') . '#L' . $ligne;
258
+                $skel = "<a href='$h3'><b>$skel</b></a>";
259
+                if ($boucle) {
260
+                    $h3 = parametre_url($h2 . $boucle, 'var_mode_affiche', 'boucle');
261
+                    $boucle = "<a href='$h3'><b>$boucle</b></a>";
262
+                }
263
+            }
264
+        }
265
+
266
+        $j = ($i + 1);
267
+        $res .= "<tr id='req$j'><td style='text-align: right'>"
268
+            . $j
269
+            . "&nbsp;</td><td style='text-align: left'>"
270
+            . (is_array($msg) ? implode('', $msg) : $msg)
271
+            . "</td><td style='text-align: left'>"
272
+            . ($skel ?: '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
273
+            . "</td><td class='spip-debug-arg' style='text-align: left'>"
274
+            . ($boucle ?: '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
275
+            . "</td><td style='text-align: right'>"
276
+            . $ligne
277
+            . "</td></tr>\n";
278
+    }
279
+
280
+    return "\n<table id='$id'>"
281
+    . "<caption onclick=\"x = document.getElementById('$id'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\">"
282
+    . $caption[0]
283 283
 ## aide locale courte a ecrire, avec lien vers une grosse page de documentation
284 284
 #		aider('erreur_compilation'),
285
-	. '</caption>'
286
-	//  fausse caption du chrono (mais vraie nav)
287
-	. (!empty($caption[1]) ? $caption[1] : '')
288
-	. '<tr><th>'
289
-	. _T('numero')
290
-	. '</th><th>'
291
-	. _T('public:message')
292
-	. '</th><th>'
293
-	. _T('squelette')
294
-	. '</th><th>'
295
-	. _T('zbug_boucle')
296
-	. '</th><th>'
297
-	. _T('ligne')
298
-	. '</th></tr>'
299
-	. $res
300
-	. '</table>';
285
+    . '</caption>'
286
+    //  fausse caption du chrono (mais vraie nav)
287
+    . (!empty($caption[1]) ? $caption[1] : '')
288
+    . '<tr><th>'
289
+    . _T('numero')
290
+    . '</th><th>'
291
+    . _T('public:message')
292
+    . '</th><th>'
293
+    . _T('squelette')
294
+    . '</th><th>'
295
+    . _T('zbug_boucle')
296
+    . '</th><th>'
297
+    . _T('ligne')
298
+    . '</th></tr>'
299
+    . $res
300
+    . '</table>';
301 301
 }
302 302
 
303 303
 
@@ -317,514 +317,514 @@  discard block
 block discarded – undo
317 317
  *    ou un tableau si l'erreur est critique
318 318
  **/
319 319
 function debusquer_requete($message) {
320
-	[$errno, $msg, $query] = $message;
321
-
322
-	// FIXME: ces écritures mélangent divers syntaxe des moteurs SQL
323
-	// il serait plus prudent certainement d'avoir une fonction d'analyse par moteur
324
-	if (preg_match(',err(no|code):?[[:space:]]*([0-9]+),i', $msg, $regs)) {
325
-		$errno = $regs[2];
326
-	} elseif (
327
-		is_numeric($errno) and ($errno == 1030 or $errno <= 1026)
328
-		and preg_match(',[^[:alnum:]]([0-9]+)[^[:alnum:]],', $msg, $regs)
329
-	) {
330
-		$errno = $regs[1];
331
-	}
332
-
333
-	// Erreur systeme
334
-	if (is_numeric($errno) and $errno > 0 and $errno < 200) {
335
-		$retour = '<tt><br /><br /><blink>'
336
-			. _T('info_erreur_systeme', ['errsys' => $errno])
337
-			. "</blink><br />\n<b>"
338
-			. _T(
339
-				'info_erreur_systeme2',
340
-				['script' => generer_url_ecrire('base_repair')]
341
-			)
342
-			. '</b><br />';
343
-		spip_log("Erreur systeme $errno");
344
-
345
-		return [$retour, ''];
346
-	}
347
-
348
-	// Requete erronee
349
-	$err = '<b>' . _T('avis_erreur_mysql') . " $errno</b><br /><tt>\n"
350
-		. spip_htmlspecialchars($msg)
351
-		. "\n<br /><span style='color: red'><b>"
352
-		. spip_htmlspecialchars($query)
353
-		. '</b></span></tt><br />';
354
-
355
-	//. aider('erreur_mysql');
356
-
357
-	return $err;
320
+    [$errno, $msg, $query] = $message;
321
+
322
+    // FIXME: ces écritures mélangent divers syntaxe des moteurs SQL
323
+    // il serait plus prudent certainement d'avoir une fonction d'analyse par moteur
324
+    if (preg_match(',err(no|code):?[[:space:]]*([0-9]+),i', $msg, $regs)) {
325
+        $errno = $regs[2];
326
+    } elseif (
327
+        is_numeric($errno) and ($errno == 1030 or $errno <= 1026)
328
+        and preg_match(',[^[:alnum:]]([0-9]+)[^[:alnum:]],', $msg, $regs)
329
+    ) {
330
+        $errno = $regs[1];
331
+    }
332
+
333
+    // Erreur systeme
334
+    if (is_numeric($errno) and $errno > 0 and $errno < 200) {
335
+        $retour = '<tt><br /><br /><blink>'
336
+            . _T('info_erreur_systeme', ['errsys' => $errno])
337
+            . "</blink><br />\n<b>"
338
+            . _T(
339
+                'info_erreur_systeme2',
340
+                ['script' => generer_url_ecrire('base_repair')]
341
+            )
342
+            . '</b><br />';
343
+        spip_log("Erreur systeme $errno");
344
+
345
+        return [$retour, ''];
346
+    }
347
+
348
+    // Requete erronee
349
+    $err = '<b>' . _T('avis_erreur_mysql') . " $errno</b><br /><tt>\n"
350
+        . spip_htmlspecialchars($msg)
351
+        . "\n<br /><span style='color: red'><b>"
352
+        . spip_htmlspecialchars($query)
353
+        . '</b></span></tt><br />';
354
+
355
+    //. aider('erreur_mysql');
356
+
357
+    return $err;
358 358
 }
359 359
 
360 360
 
361 361
 function trouve_boucle_debug($n, $nom, $debut = 0, $boucle = '') {
362 362
 
363
-	$id = $nom . $boucle;
364
-	if (is_array($GLOBALS['debug_objets']['sequence'][$id])) {
365
-		foreach ($GLOBALS['debug_objets']['sequence'][$id] as $v) {
366
-			if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r)) {
367
-				$y = substr_count($v[0], "\n");
368
-			} else {
369
-				if ($v[1][0] == '#') { // balise dynamique
370
-				$incl = $GLOBALS['debug_objets']['resultat'][$v[2]];
371
-				} else // inclusion
372
-				{
373
-					$incl = $GLOBALS['debug_objets']['squelette'][trouve_squelette_inclus($v[0])];
374
-				}
375
-				$y = substr_count($incl, "\n")
376
-					+ substr_count($r[1], "\n")
377
-					+ substr_count($r[3], "\n");
378
-			}
379
-			if ($n <= ($y + $debut)) {
380
-				if ($v[1][0] == '?') {
381
-					return trouve_boucle_debug($n, $nom, $debut, substr($v[1], 1));
382
-				} elseif ($v[1][0] == '!') {
383
-					if ($incl = trouve_squelette_inclus($v[1])) {
384
-						return trouve_boucle_debug($n, $incl, $debut);
385
-					}
386
-				}
387
-
388
-				return [$nom, $boucle, $v[2] - 1 + $n - $debut];
389
-			}
390
-			$debut += $y;
391
-		}
392
-	}
393
-
394
-	return [$nom, $boucle, $n - $debut];
363
+    $id = $nom . $boucle;
364
+    if (is_array($GLOBALS['debug_objets']['sequence'][$id])) {
365
+        foreach ($GLOBALS['debug_objets']['sequence'][$id] as $v) {
366
+            if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r)) {
367
+                $y = substr_count($v[0], "\n");
368
+            } else {
369
+                if ($v[1][0] == '#') { // balise dynamique
370
+                $incl = $GLOBALS['debug_objets']['resultat'][$v[2]];
371
+                } else // inclusion
372
+                {
373
+                    $incl = $GLOBALS['debug_objets']['squelette'][trouve_squelette_inclus($v[0])];
374
+                }
375
+                $y = substr_count($incl, "\n")
376
+                    + substr_count($r[1], "\n")
377
+                    + substr_count($r[3], "\n");
378
+            }
379
+            if ($n <= ($y + $debut)) {
380
+                if ($v[1][0] == '?') {
381
+                    return trouve_boucle_debug($n, $nom, $debut, substr($v[1], 1));
382
+                } elseif ($v[1][0] == '!') {
383
+                    if ($incl = trouve_squelette_inclus($v[1])) {
384
+                        return trouve_boucle_debug($n, $incl, $debut);
385
+                    }
386
+                }
387
+
388
+                return [$nom, $boucle, $v[2] - 1 + $n - $debut];
389
+            }
390
+            $debut += $y;
391
+        }
392
+    }
393
+
394
+    return [$nom, $boucle, $n - $debut];
395 395
 }
396 396
 
397 397
 function trouve_squelette_inclus($script) {
398 398
 
399
-	preg_match('/include\(.(.*).php3?.\);/', $script, $reg);
400
-	// si le script X.php n'est pas ecrire/public.php
401
-	// on suppose qu'il prend le squelette X.html (pas sur, mais y a pas mieux)
402
-	if ($reg[1] == 'ecrire/public') { // si c'est bien ecrire/public on cherche le param 'fond'
403
-	if (!preg_match("/'fond' => '([^']*)'/", $script, $reg)) { // a defaut on cherche le param 'page'
404
-		if (!preg_match("/'param' => '([^']*)'/", $script, $reg)) {
405
-				$reg[1] = 'inconnu';
406
-		}
407
-	}
408
-	}
409
-	$incl = ',' . $reg[1] . '[.]\w$,';
410
-
411
-	foreach ($GLOBALS['debug_objets']['sourcefile'] as $k => $v) {
412
-		if (preg_match($incl, $v)) {
413
-			return $k;
414
-		}
415
-	}
416
-
417
-	return '';
399
+    preg_match('/include\(.(.*).php3?.\);/', $script, $reg);
400
+    // si le script X.php n'est pas ecrire/public.php
401
+    // on suppose qu'il prend le squelette X.html (pas sur, mais y a pas mieux)
402
+    if ($reg[1] == 'ecrire/public') { // si c'est bien ecrire/public on cherche le param 'fond'
403
+    if (!preg_match("/'fond' => '([^']*)'/", $script, $reg)) { // a defaut on cherche le param 'page'
404
+        if (!preg_match("/'param' => '([^']*)'/", $script, $reg)) {
405
+                $reg[1] = 'inconnu';
406
+        }
407
+    }
408
+    }
409
+    $incl = ',' . $reg[1] . '[.]\w$,';
410
+
411
+    foreach ($GLOBALS['debug_objets']['sourcefile'] as $k => $v) {
412
+        if (preg_match($incl, $v)) {
413
+            return $k;
414
+        }
415
+    }
416
+
417
+    return '';
418 418
 }
419 419
 
420 420
 function reference_boucle_debug($n, $nom, $self) {
421
-	[$skel, $boucle, $ligne] = trouve_boucle_debug($n, $nom);
422
-
423
-	if (!$boucle) {
424
-		return !$ligne ? '' :
425
-			(' (' .
426
-				(($nom != $skel) ? _T('squelette_inclus_ligne') :
427
-					_T('squelette_ligne')) .
428
-				" <a href='$self&amp;var_mode_objet=$skel&amp;var_mode_affiche=squelette&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
429
-	} else {
430
-		$self .= "&amp;var_mode_objet=$skel$boucle&amp;var_mode_affiche=boucle";
431
-
432
-		return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" :
433
-			" (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
434
-	}
421
+    [$skel, $boucle, $ligne] = trouve_boucle_debug($n, $nom);
422
+
423
+    if (!$boucle) {
424
+        return !$ligne ? '' :
425
+            (' (' .
426
+                (($nom != $skel) ? _T('squelette_inclus_ligne') :
427
+                    _T('squelette_ligne')) .
428
+                " <a href='$self&amp;var_mode_objet=$skel&amp;var_mode_affiche=squelette&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
429
+    } else {
430
+        $self .= "&amp;var_mode_objet=$skel$boucle&amp;var_mode_affiche=boucle";
431
+
432
+        return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" :
433
+            " (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
434
+    }
435 435
 }
436 436
 
437 437
 // affiche un texte avec numero de ligne et ancre.
438 438
 
439 439
 function ancre_texte($texte, $fautifs = [], $nocpt = false) {
440 440
 
441
-	$var_mode_ligne = _request('var_mode_ligne');
442
-	if ($var_mode_ligne) {
443
-		$fautifs[] = [$var_mode_ligne];
444
-	}
445
-	$res = '';
446
-
447
-	$s = highlight_string($texte, true);
448
-	if (substr($s, 0, 6) == '<code>') {
449
-		$s = substr($s, 6);
450
-		$res = '<code>';
451
-	}
452
-
453
-	$s = preg_replace(
454
-		',<(\w[^<>]*)>([^<]*)<br />([^<]*)</\1>,',
455
-		'<\1>\2</\1><br />' . "\n" . '<\1>\3</\1>',
456
-		$s
457
-	);
458
-
459
-
460
-	$tableau = explode('<br />', $s);
461
-
462
-	$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";
463
-
464
-	$format10 = str_replace('white', 'lightgrey', $format);
465
-	$formaterr = 'color: red;';
466
-	$i = 1;
467
-	$flignes = [];
468
-	$loc = [0, 0];
469
-	foreach ($fautifs as $lc) {
470
-		if (is_array($lc)) {
471
-			$l = array_shift($lc);
472
-			$flignes[$l] = $lc;
473
-		} else {
474
-			$flignes[$lc] = $loc;
475
-		}
476
-	}
477
-
478
-	$ancre = md5($texte);
479
-	foreach ($tableau as $ligne) {
480
-		if (isset($flignes[$i])) {
481
-			$ligne = str_replace('&nbsp;', ' ', $ligne);
482
-			$indexmesg = $flignes[$i][1];
483
-			$err = textebrut($flignes[$i][2]);
484
-			// tentative de pointer sur la colonne fautive;
485
-			// marche pas car highlight_string rajoute des entites. A revoir.
486
-			// $m = $flignes[$i][0];
487
-			// $ligne = substr($ligne, 0, $m-1) .
488
-			// sprintf($formaterr, substr($ligne,$m));
489
-			$bg = $formaterr;
490
-		} else {
491
-			$indexmesg = $ancre;
492
-			$err = $bg = '';
493
-		}
494
-		$res .= sprintf((($i % 10) ? $format : $format10), $i, $bg, $indexmesg, $err, $i, $ligne);
495
-		$i++;
496
-	}
497
-
498
-	return "<div id='T$ancre'>"
499
-	. '<div onclick="'
500
-	. "jQuery(this).parent().find('a').toggle();"
501
-	. '" title="'
502
-	. _T('masquer_colonne')
503
-	. '" style="cursor: pointer;">'
504
-	. ($nocpt ? '' : _T('info_numero_abbreviation'))
505
-	. '</div>
441
+    $var_mode_ligne = _request('var_mode_ligne');
442
+    if ($var_mode_ligne) {
443
+        $fautifs[] = [$var_mode_ligne];
444
+    }
445
+    $res = '';
446
+
447
+    $s = highlight_string($texte, true);
448
+    if (substr($s, 0, 6) == '<code>') {
449
+        $s = substr($s, 6);
450
+        $res = '<code>';
451
+    }
452
+
453
+    $s = preg_replace(
454
+        ',<(\w[^<>]*)>([^<]*)<br />([^<]*)</\1>,',
455
+        '<\1>\2</\1><br />' . "\n" . '<\1>\3</\1>',
456
+        $s
457
+    );
458
+
459
+
460
+    $tableau = explode('<br />', $s);
461
+
462
+    $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";
463
+
464
+    $format10 = str_replace('white', 'lightgrey', $format);
465
+    $formaterr = 'color: red;';
466
+    $i = 1;
467
+    $flignes = [];
468
+    $loc = [0, 0];
469
+    foreach ($fautifs as $lc) {
470
+        if (is_array($lc)) {
471
+            $l = array_shift($lc);
472
+            $flignes[$l] = $lc;
473
+        } else {
474
+            $flignes[$lc] = $loc;
475
+        }
476
+    }
477
+
478
+    $ancre = md5($texte);
479
+    foreach ($tableau as $ligne) {
480
+        if (isset($flignes[$i])) {
481
+            $ligne = str_replace('&nbsp;', ' ', $ligne);
482
+            $indexmesg = $flignes[$i][1];
483
+            $err = textebrut($flignes[$i][2]);
484
+            // tentative de pointer sur la colonne fautive;
485
+            // marche pas car highlight_string rajoute des entites. A revoir.
486
+            // $m = $flignes[$i][0];
487
+            // $ligne = substr($ligne, 0, $m-1) .
488
+            // sprintf($formaterr, substr($ligne,$m));
489
+            $bg = $formaterr;
490
+        } else {
491
+            $indexmesg = $ancre;
492
+            $err = $bg = '';
493
+        }
494
+        $res .= sprintf((($i % 10) ? $format : $format10), $i, $bg, $indexmesg, $err, $i, $ligne);
495
+        $i++;
496
+    }
497
+
498
+    return "<div id='T$ancre'>"
499
+    . '<div onclick="'
500
+    . "jQuery(this).parent().find('a').toggle();"
501
+    . '" title="'
502
+    . _T('masquer_colonne')
503
+    . '" style="cursor: pointer;">'
504
+    . ($nocpt ? '' : _T('info_numero_abbreviation'))
505
+    . '</div>
506 506
 	' . $res . "</div>\n";
507 507
 }
508 508
 
509 509
 // l'environnement graphique du debuggueur
510 510
 
511 511
 function debusquer_squelette($fonc, $mode, $self) {
512
-	$legend = null;
513
-	$texte = '';
514
-
515
-	if ($mode !== 'validation') {
516
-		if (isset($GLOBALS['debug_objets']['sourcefile']) and $GLOBALS['debug_objets']['sourcefile']) {
517
-			$res = "<div id='spip-boucles'>\n"
518
-				. debusquer_navigation_squelettes($self)
519
-				. '</div>';
520
-		} else {
521
-			$res = '';
522
-		}
523
-		if ($fonc) {
524
-			$id = " id='$fonc'";
525
-			if (!empty($GLOBALS['debug_objets'][$mode][$fonc])) {
526
-				[$legend, $texte, $res2] = debusquer_source($fonc, $mode);
527
-				$texte .= $res2;
528
-			} elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc . 'tout'])) {
529
-				$legend = _T('zbug_' . $mode);
530
-				$texte = $GLOBALS['debug_objets'][$mode][$fonc . 'tout'];
531
-				$texte = ancre_texte($texte, ['', '']);
532
-			}
533
-		} else {
534
-			if (strlen(trim($res))) {
535
-				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>";
536
-			} else {
537
-				// cas de l'appel sur erreur: montre la page
538
-				return $GLOBALS['debug_objets']['resultat']['tout'] ?? '';
539
-			}
540
-		}
541
-	} else {
542
-		$valider = charger_fonction('valider', 'xml');
543
-		$val = $valider($GLOBALS['debug_objets']['validation'][$fonc . 'tout']);
544
-		// Si erreur, signaler leur nombre dans le formulaire admin
545
-		$GLOBALS['debug_objets']['validation'] = $val->err ? count($val->err) : '';
546
-		[$texte, $err] = emboite_texte($val, $fonc, $self);
547
-		if ($err === false) {
548
-			$err = _T('impossible');
549
-		} elseif ($err === true) {
550
-			$err = _T('correcte');
551
-		} else {
552
-			$err = ": $err";
553
-		}
554
-		$legend = _T('validation') . ' ' . $err;
555
-		$res = $id = '';
556
-	}
557
-
558
-	return !trim($texte) ? '' : (
559
-		"<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"
560
-		. "<div id='debug_boucle'><fieldset$id><legend>"
561
-		. "<a href='" . $self . '#f_' . substr($fonc, 0, 37) . "'> &#8593; "
562
-		. ($legend ?: $mode)
563
-		. '</a></legend>'
564
-		. $texte
565
-		. '</fieldset></div>'
566
-		. '</div>');
512
+    $legend = null;
513
+    $texte = '';
514
+
515
+    if ($mode !== 'validation') {
516
+        if (isset($GLOBALS['debug_objets']['sourcefile']) and $GLOBALS['debug_objets']['sourcefile']) {
517
+            $res = "<div id='spip-boucles'>\n"
518
+                . debusquer_navigation_squelettes($self)
519
+                . '</div>';
520
+        } else {
521
+            $res = '';
522
+        }
523
+        if ($fonc) {
524
+            $id = " id='$fonc'";
525
+            if (!empty($GLOBALS['debug_objets'][$mode][$fonc])) {
526
+                [$legend, $texte, $res2] = debusquer_source($fonc, $mode);
527
+                $texte .= $res2;
528
+            } elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc . 'tout'])) {
529
+                $legend = _T('zbug_' . $mode);
530
+                $texte = $GLOBALS['debug_objets'][$mode][$fonc . 'tout'];
531
+                $texte = ancre_texte($texte, ['', '']);
532
+            }
533
+        } else {
534
+            if (strlen(trim($res))) {
535
+                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>";
536
+            } else {
537
+                // cas de l'appel sur erreur: montre la page
538
+                return $GLOBALS['debug_objets']['resultat']['tout'] ?? '';
539
+            }
540
+        }
541
+    } else {
542
+        $valider = charger_fonction('valider', 'xml');
543
+        $val = $valider($GLOBALS['debug_objets']['validation'][$fonc . 'tout']);
544
+        // Si erreur, signaler leur nombre dans le formulaire admin
545
+        $GLOBALS['debug_objets']['validation'] = $val->err ? count($val->err) : '';
546
+        [$texte, $err] = emboite_texte($val, $fonc, $self);
547
+        if ($err === false) {
548
+            $err = _T('impossible');
549
+        } elseif ($err === true) {
550
+            $err = _T('correcte');
551
+        } else {
552
+            $err = ": $err";
553
+        }
554
+        $legend = _T('validation') . ' ' . $err;
555
+        $res = $id = '';
556
+    }
557
+
558
+    return !trim($texte) ? '' : (
559
+        "<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"
560
+        . "<div id='debug_boucle'><fieldset$id><legend>"
561
+        . "<a href='" . $self . '#f_' . substr($fonc, 0, 37) . "'> &#8593; "
562
+        . ($legend ?: $mode)
563
+        . '</a></legend>'
564
+        . $texte
565
+        . '</fieldset></div>'
566
+        . '</div>');
567 567
 }
568 568
 
569 569
 
570 570
 function emboite_texte($res, $fonc = '', $self = '') {
571
-	$errs = $res->err;
572
-	$texte = $res->entete . ($errs ? '' : $res->page);
573
-
574
-	if (!$texte and !$errs) {
575
-		return [ancre_texte('', ['', '']), false];
576
-	}
577
-	if (!$errs) {
578
-		return [ancre_texte($texte, ['', '']), true];
579
-	}
580
-
581
-	if (!isset($GLOBALS['debug_objets'])) {
582
-		$colors = ['#e0e0f0', '#f8f8ff'];
583
-		$encore = count_occ($errs);
584
-		$encore2 = [];
585
-		$fautifs = [];
586
-
587
-		$err = '<tr><th>'
588
-			. _T('numero')
589
-			. '</th><th>'
590
-			. _T('occurence')
591
-			. '</th><th>'
592
-			. _T('ligne')
593
-			. '</th><th>'
594
-			. _T('colonne')
595
-			. '</th><th>'
596
-			. _T('erreur')
597
-			. '</th></tr>';
598
-
599
-		$i = 0;
600
-		$style = "style='text-align: right; padding-right: 5px'";
601
-		foreach ($errs as $r) {
602
-			$i++;
603
-			[$msg, $ligne, $col] = $r;
604
-			#spip_log("$r = list($msg, $ligne, $col");
605
-			if (isset($encore2[$msg])) {
606
-				$ref = ++$encore2[$msg];
607
-			} else {
608
-				$encore2[$msg] = $ref = 1;
609
-			}
610
-			$err .= "<tr  style='background-color: "
611
-				. $colors[$i % 2]
612
-				. "'><td $style><a href='#debut_err'>"
613
-				. $i
614
-				. "</a></td><td $style>"
615
-				. "$ref/$encore[$msg]</td>"
616
-				. "<td $style><a href='#L"
617
-				. $ligne
618
-				. "' id='T$i'>"
619
-				. $ligne
620
-				. "</a></td><td $style>"
621
-				. $col
622
-				. "</td><td>$msg</td></tr>\n";
623
-			$fautifs[] = [$ligne, $col, $i, $msg];
624
-		}
625
-		$err = "<h2 style='text-align: center'>"
626
-			. $i
627
-			. "<a href='#fin_err'>"
628
-			. ' ' . _T('erreur_texte')
629
-			. "</a></h2><table id='debut_err' style='width: 100%'>"
630
-			. $err
631
-			. " </table><a id='fin_err'></a>";
632
-
633
-		return [ancre_texte($texte, $fautifs), $err];
634
-	} else {
635
-		[$msg, $fermant, $ouvrant] = $errs[0];
636
-		$rf = reference_boucle_debug($fermant, $fonc, $self);
637
-		$ro = reference_boucle_debug($ouvrant, $fonc, $self);
638
-		$err = $msg .
639
-			"<a href='#L" . $fermant . "'>$fermant</a>$rf<br />" .
640
-			"<a href='#L" . $ouvrant . "'>$ouvrant</a>$ro";
641
-
642
-		return [ancre_texte($texte, [[$ouvrant], [$fermant]]), $err];
643
-	}
571
+    $errs = $res->err;
572
+    $texte = $res->entete . ($errs ? '' : $res->page);
573
+
574
+    if (!$texte and !$errs) {
575
+        return [ancre_texte('', ['', '']), false];
576
+    }
577
+    if (!$errs) {
578
+        return [ancre_texte($texte, ['', '']), true];
579
+    }
580
+
581
+    if (!isset($GLOBALS['debug_objets'])) {
582
+        $colors = ['#e0e0f0', '#f8f8ff'];
583
+        $encore = count_occ($errs);
584
+        $encore2 = [];
585
+        $fautifs = [];
586
+
587
+        $err = '<tr><th>'
588
+            . _T('numero')
589
+            . '</th><th>'
590
+            . _T('occurence')
591
+            . '</th><th>'
592
+            . _T('ligne')
593
+            . '</th><th>'
594
+            . _T('colonne')
595
+            . '</th><th>'
596
+            . _T('erreur')
597
+            . '</th></tr>';
598
+
599
+        $i = 0;
600
+        $style = "style='text-align: right; padding-right: 5px'";
601
+        foreach ($errs as $r) {
602
+            $i++;
603
+            [$msg, $ligne, $col] = $r;
604
+            #spip_log("$r = list($msg, $ligne, $col");
605
+            if (isset($encore2[$msg])) {
606
+                $ref = ++$encore2[$msg];
607
+            } else {
608
+                $encore2[$msg] = $ref = 1;
609
+            }
610
+            $err .= "<tr  style='background-color: "
611
+                . $colors[$i % 2]
612
+                . "'><td $style><a href='#debut_err'>"
613
+                . $i
614
+                . "</a></td><td $style>"
615
+                . "$ref/$encore[$msg]</td>"
616
+                . "<td $style><a href='#L"
617
+                . $ligne
618
+                . "' id='T$i'>"
619
+                . $ligne
620
+                . "</a></td><td $style>"
621
+                . $col
622
+                . "</td><td>$msg</td></tr>\n";
623
+            $fautifs[] = [$ligne, $col, $i, $msg];
624
+        }
625
+        $err = "<h2 style='text-align: center'>"
626
+            . $i
627
+            . "<a href='#fin_err'>"
628
+            . ' ' . _T('erreur_texte')
629
+            . "</a></h2><table id='debut_err' style='width: 100%'>"
630
+            . $err
631
+            . " </table><a id='fin_err'></a>";
632
+
633
+        return [ancre_texte($texte, $fautifs), $err];
634
+    } else {
635
+        [$msg, $fermant, $ouvrant] = $errs[0];
636
+        $rf = reference_boucle_debug($fermant, $fonc, $self);
637
+        $ro = reference_boucle_debug($ouvrant, $fonc, $self);
638
+        $err = $msg .
639
+            "<a href='#L" . $fermant . "'>$fermant</a>$rf<br />" .
640
+            "<a href='#L" . $ouvrant . "'>$ouvrant</a>$ro";
641
+
642
+        return [ancre_texte($texte, [[$ouvrant], [$fermant]]), $err];
643
+    }
644 644
 }
645 645
 
646 646
 function count_occ($regs) {
647
-	$encore = [];
648
-	foreach ($regs as $r) {
649
-		if (isset($encore[$r[0]])) {
650
-			$encore[$r[0]]++;
651
-		} else {
652
-			$encore[$r[0]] = 1;
653
-		}
654
-	}
655
-
656
-	return $encore;
647
+    $encore = [];
648
+    foreach ($regs as $r) {
649
+        if (isset($encore[$r[0]])) {
650
+            $encore[$r[0]]++;
651
+        } else {
652
+            $encore[$r[0]] = 1;
653
+        }
654
+    }
655
+
656
+    return $encore;
657 657
 }
658 658
 
659 659
 function debusquer_navigation_squelettes($self) {
660 660
 
661
-	$res = '';
662
-	$boucles = !empty($GLOBALS['debug_objets']['boucle']) ? $GLOBALS['debug_objets']['boucle'] : '';
663
-	$contexte = $GLOBALS['debug_objets']['contexte'];
664
-	$t_skel = _T('squelette');
665
-	foreach ($GLOBALS['debug_objets']['sourcefile'] as $nom => $sourcefile) {
666
-		$self2 = parametre_url($self, 'var_mode_objet', $nom);
667
-		$nav = !$boucles ? '' : debusquer_navigation_boucles($boucles, $nom, $self, $sourcefile);
668
-		$temps = !isset($GLOBALS['debug_objets']['profile'][$sourcefile]) ? '' : _T(
669
-			'zbug_profile',
670
-			['time' => $GLOBALS['debug_objets']['profile'][$sourcefile]]
671
-		);
672
-
673
-		$res .= "<fieldset id='f_" . $nom . "'><legend>"
674
-			. $t_skel
675
-			. ' '
676
-			. $sourcefile
677
-			. "&nbsp;:\n<a href='$self2&amp;var_mode_affiche=squelette#f_$nom'>"
678
-			. $t_skel
679
-			. "</a>\n<a href='$self2&amp;var_mode_affiche=resultat#f_$nom'>"
680
-			. _T('zbug_resultat')
681
-			. "</a>\n<a href='$self2&amp;var_mode_affiche=code#f_$nom'>"
682
-			. _T('zbug_code')
683
-			. "</a>\n<a href='"
684
-			. str_replace('var_mode=debug', 'var_profile=1&amp;var_mode=recalcul', $self)
685
-			. "'>"
686
-			. _T('zbug_calcul')
687
-			. '</a></legend>'
688
-			. (!$temps ? '' : ("\n<span style='display:block;float:" . $GLOBALS['spip_lang_right'] . "'>$temps</span><br />"))
689
-			. debusquer_contexte($contexte[$sourcefile])
690
-		. (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
691
-		. "</fieldset>\n";
692
-	}
693
-
694
-	return $res;
661
+    $res = '';
662
+    $boucles = !empty($GLOBALS['debug_objets']['boucle']) ? $GLOBALS['debug_objets']['boucle'] : '';
663
+    $contexte = $GLOBALS['debug_objets']['contexte'];
664
+    $t_skel = _T('squelette');
665
+    foreach ($GLOBALS['debug_objets']['sourcefile'] as $nom => $sourcefile) {
666
+        $self2 = parametre_url($self, 'var_mode_objet', $nom);
667
+        $nav = !$boucles ? '' : debusquer_navigation_boucles($boucles, $nom, $self, $sourcefile);
668
+        $temps = !isset($GLOBALS['debug_objets']['profile'][$sourcefile]) ? '' : _T(
669
+            'zbug_profile',
670
+            ['time' => $GLOBALS['debug_objets']['profile'][$sourcefile]]
671
+        );
672
+
673
+        $res .= "<fieldset id='f_" . $nom . "'><legend>"
674
+            . $t_skel
675
+            . ' '
676
+            . $sourcefile
677
+            . "&nbsp;:\n<a href='$self2&amp;var_mode_affiche=squelette#f_$nom'>"
678
+            . $t_skel
679
+            . "</a>\n<a href='$self2&amp;var_mode_affiche=resultat#f_$nom'>"
680
+            . _T('zbug_resultat')
681
+            . "</a>\n<a href='$self2&amp;var_mode_affiche=code#f_$nom'>"
682
+            . _T('zbug_code')
683
+            . "</a>\n<a href='"
684
+            . str_replace('var_mode=debug', 'var_profile=1&amp;var_mode=recalcul', $self)
685
+            . "'>"
686
+            . _T('zbug_calcul')
687
+            . '</a></legend>'
688
+            . (!$temps ? '' : ("\n<span style='display:block;float:" . $GLOBALS['spip_lang_right'] . "'>$temps</span><br />"))
689
+            . debusquer_contexte($contexte[$sourcefile])
690
+        . (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
691
+        . "</fieldset>\n";
692
+    }
693
+
694
+    return $res;
695 695
 }
696 696
 
697 697
 function debusquer_navigation_boucles($boucles, $nom_skel, $self, $nom_source) {
698
-	$i = 0;
699
-	$res = '';
700
-	$var_mode_objet = _request('var_mode_objet');
701
-	$gram = preg_match('/[.](\w+)$/', $nom_source, $r) ? $r[1] : '';
702
-
703
-	foreach ($boucles as $objet => $boucle) {
704
-		if (substr($objet, 0, strlen($nom_skel)) == $nom_skel) {
705
-			$i++;
706
-			$nom = $boucle->id_boucle;
707
-			$req = $boucle->type_requete;
708
-			$crit = public_decompiler($boucle, $gram, 0, 'criteres');
709
-			$self2 = $self . '&amp;var_mode_objet=' . $objet;
710
-
711
-			$res .= "\n<tr style='background-color: " .
712
-				($i % 2 ? '#e0e0f0' : '#f8f8ff') .
713
-				"'><td  align='right'>$i</td><td>\n" .
714
-				"<a  class='debug_link_boucle' href='" .
715
-				$self2 .
716
-				"&amp;var_mode_affiche=boucle#f_$nom_skel'>" .
717
-				_T('zbug_boucle') .
718
-				"</a></td><td>\n<a class='debug_link_boucle' href='" .
719
-				$self2 .
720
-				"&amp;var_mode_affiche=resultat#f_$nom_skel'>" .
721
-				_T('zbug_resultat') .
722
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
723
-				$self2 .
724
-				"&amp;var_mode_affiche=code#f_$nom_skel'>" .
725
-				_T('zbug_code') .
726
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
727
-				str_replace('var_mode=', 'var_profile=', $self2) .
728
-				"'>" .
729
-				_T('zbug_calcul') .
730
-				"</a></td><td>\n" .
731
-				(($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom) .
732
-				"</td><td>\n" .
733
-				$req .
734
-				"</td><td>\n" .
735
-				spip_htmlspecialchars($crit) .
736
-				'</td></tr>';
737
-		}
738
-	}
739
-
740
-	return $res;
698
+    $i = 0;
699
+    $res = '';
700
+    $var_mode_objet = _request('var_mode_objet');
701
+    $gram = preg_match('/[.](\w+)$/', $nom_source, $r) ? $r[1] : '';
702
+
703
+    foreach ($boucles as $objet => $boucle) {
704
+        if (substr($objet, 0, strlen($nom_skel)) == $nom_skel) {
705
+            $i++;
706
+            $nom = $boucle->id_boucle;
707
+            $req = $boucle->type_requete;
708
+            $crit = public_decompiler($boucle, $gram, 0, 'criteres');
709
+            $self2 = $self . '&amp;var_mode_objet=' . $objet;
710
+
711
+            $res .= "\n<tr style='background-color: " .
712
+                ($i % 2 ? '#e0e0f0' : '#f8f8ff') .
713
+                "'><td  align='right'>$i</td><td>\n" .
714
+                "<a  class='debug_link_boucle' href='" .
715
+                $self2 .
716
+                "&amp;var_mode_affiche=boucle#f_$nom_skel'>" .
717
+                _T('zbug_boucle') .
718
+                "</a></td><td>\n<a class='debug_link_boucle' href='" .
719
+                $self2 .
720
+                "&amp;var_mode_affiche=resultat#f_$nom_skel'>" .
721
+                _T('zbug_resultat') .
722
+                "</a></td><td>\n<a class='debug_link_resultat' href='" .
723
+                $self2 .
724
+                "&amp;var_mode_affiche=code#f_$nom_skel'>" .
725
+                _T('zbug_code') .
726
+                "</a></td><td>\n<a class='debug_link_resultat' href='" .
727
+                str_replace('var_mode=', 'var_profile=', $self2) .
728
+                "'>" .
729
+                _T('zbug_calcul') .
730
+                "</a></td><td>\n" .
731
+                (($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom) .
732
+                "</td><td>\n" .
733
+                $req .
734
+                "</td><td>\n" .
735
+                spip_htmlspecialchars($crit) .
736
+                '</td></tr>';
737
+        }
738
+    }
739
+
740
+    return $res;
741 741
 }
742 742
 
743 743
 function debusquer_source($objet, $affiche) {
744
-	$quoi = $GLOBALS['debug_objets'][$affiche][$objet];
745
-	if (!empty($GLOBALS['debug_objets']['boucle'][$objet]->id_boucle)) {
746
-		$nom = $GLOBALS['debug_objets']['boucle'][$objet]->id_boucle;
747
-	} else {
748
-		$nom = $GLOBALS['debug_objets']['sourcefile'][$objet];
749
-	}
750
-	$res2 = '';
751
-
752
-	if ($affiche == 'resultat') {
753
-		$legend = $nom;
754
-		$req = $GLOBALS['debug_objets']['requete'][$objet];
755
-		if (function_exists('_mysql_traite_query')) {
756
-			$c = strtolower(_request('connect') ?? '');
757
-			$c = $GLOBALS['connexions'][$c ?: 0]['prefixe'];
758
-			$req = _mysql_traite_query($req, '', $c);
759
-		}
760
-		//  permettre le copier/coller facile
761
-		// $res = ancre_texte($req, array(), true);
762
-		$res = "<div id='T" . md5($req) . "'>\n<pre>\n" . $req . "</pre>\n</div>\n";
763
-		//  formatage et affichage des resultats bruts de la requete
764
-		$ress_req = spip_query($req);
765
-		$brut_sql = '';
766
-		$num = 1;
767
-		//  eviter l'affichage de milliers de lignes
768
-		//  personnalisation possible dans mes_options
769
-		$max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
770
-		while ($retours_sql = sql_fetch($ress_req)) {
771
-			if ($num <= $max_aff) {
772
-				$brut_sql .= '<h3>' . ($num == 1 ? $num . ' sur ' . sql_count($ress_req) : $num) . '</h3>';
773
-				$brut_sql .= '<p>';
774
-				foreach ($retours_sql as $key => $val) {
775
-					$brut_sql .= '<strong>' . $key . '</strong> => ' . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
776
-				}
777
-				$brut_sql .= '</p>';
778
-			}
779
-			$num++;
780
-		}
781
-		$res2 = interdire_scripts($brut_sql);
782
-		foreach ($quoi as $view) {
783
-			//  ne pas afficher les $contexte_inclus
784
-			$view = preg_replace(',<\?php.+\?[>],Uims', '', $view);
785
-			if ($view) {
786
-				$res2 .= "\n<br /><fieldset>" . interdire_scripts($view) . '</fieldset>';
787
-			}
788
-		}
789
-	} elseif ($affiche == 'code') {
790
-		$legend = $nom;
791
-		$res = ancre_texte('<' . "?php\n" . $quoi . "\n?" . '>');
792
-	} elseif ($affiche == 'boucle') {
793
-		$legend = _T('zbug_boucle') . ' ' . $nom;
794
-		// Le compilateur prefixe le nom des boucles par l'extension du fichier source.
795
-		$gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
796
-		$res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
797
-	} elseif ($affiche == 'squelette') {
798
-		$legend = $GLOBALS['debug_objets']['sourcefile'][$objet];
799
-		$res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]);
800
-	}
801
-
802
-	return [$legend, $res, $res2];
744
+    $quoi = $GLOBALS['debug_objets'][$affiche][$objet];
745
+    if (!empty($GLOBALS['debug_objets']['boucle'][$objet]->id_boucle)) {
746
+        $nom = $GLOBALS['debug_objets']['boucle'][$objet]->id_boucle;
747
+    } else {
748
+        $nom = $GLOBALS['debug_objets']['sourcefile'][$objet];
749
+    }
750
+    $res2 = '';
751
+
752
+    if ($affiche == 'resultat') {
753
+        $legend = $nom;
754
+        $req = $GLOBALS['debug_objets']['requete'][$objet];
755
+        if (function_exists('_mysql_traite_query')) {
756
+            $c = strtolower(_request('connect') ?? '');
757
+            $c = $GLOBALS['connexions'][$c ?: 0]['prefixe'];
758
+            $req = _mysql_traite_query($req, '', $c);
759
+        }
760
+        //  permettre le copier/coller facile
761
+        // $res = ancre_texte($req, array(), true);
762
+        $res = "<div id='T" . md5($req) . "'>\n<pre>\n" . $req . "</pre>\n</div>\n";
763
+        //  formatage et affichage des resultats bruts de la requete
764
+        $ress_req = spip_query($req);
765
+        $brut_sql = '';
766
+        $num = 1;
767
+        //  eviter l'affichage de milliers de lignes
768
+        //  personnalisation possible dans mes_options
769
+        $max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
770
+        while ($retours_sql = sql_fetch($ress_req)) {
771
+            if ($num <= $max_aff) {
772
+                $brut_sql .= '<h3>' . ($num == 1 ? $num . ' sur ' . sql_count($ress_req) : $num) . '</h3>';
773
+                $brut_sql .= '<p>';
774
+                foreach ($retours_sql as $key => $val) {
775
+                    $brut_sql .= '<strong>' . $key . '</strong> => ' . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
776
+                }
777
+                $brut_sql .= '</p>';
778
+            }
779
+            $num++;
780
+        }
781
+        $res2 = interdire_scripts($brut_sql);
782
+        foreach ($quoi as $view) {
783
+            //  ne pas afficher les $contexte_inclus
784
+            $view = preg_replace(',<\?php.+\?[>],Uims', '', $view);
785
+            if ($view) {
786
+                $res2 .= "\n<br /><fieldset>" . interdire_scripts($view) . '</fieldset>';
787
+            }
788
+        }
789
+    } elseif ($affiche == 'code') {
790
+        $legend = $nom;
791
+        $res = ancre_texte('<' . "?php\n" . $quoi . "\n?" . '>');
792
+    } elseif ($affiche == 'boucle') {
793
+        $legend = _T('zbug_boucle') . ' ' . $nom;
794
+        // Le compilateur prefixe le nom des boucles par l'extension du fichier source.
795
+        $gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
796
+        $res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
797
+    } elseif ($affiche == 'squelette') {
798
+        $legend = $GLOBALS['debug_objets']['sourcefile'][$objet];
799
+        $res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]);
800
+    }
801
+
802
+    return [$legend, $res, $res2];
803 803
 }
804 804
 
805 805
 function debusquer_entete($titre, $corps) {
806 806
 
807
-	include_spip('balise/formulaire_admin');
808
-	include_spip('public/assembler'); // pour inclure_balise_dynamique
809
-	include_spip('inc/texte'); // pour corriger_typo
810
-
811
-	return _DOCTYPE_ECRIRE .
812
-	html_lang_attributes() .
813
-	"<head>\n<title>" .
814
-	('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
815
-		_T('admin_debug') . ' ' . spip_htmlspecialchars($titre) . ' (' .
816
-		supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
817
-	")</title>\n" .
818
-	"<meta http-equiv='Content-Type' content='text/html" .
819
-	(($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
820
-	"' />\n" .
821
-	http_script('', 'jquery.js')
822
-	. "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
823
-	. "' type='text/css' />" .
824
-	"</head>\n" .
825
-	"<body style='margin:0 10px;'>\n" .
826
-	"<div id='spip-debug-header'>" .
827
-	$corps .
828
-	inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false) .
829
-	'</div></body></html>';
807
+    include_spip('balise/formulaire_admin');
808
+    include_spip('public/assembler'); // pour inclure_balise_dynamique
809
+    include_spip('inc/texte'); // pour corriger_typo
810
+
811
+    return _DOCTYPE_ECRIRE .
812
+    html_lang_attributes() .
813
+    "<head>\n<title>" .
814
+    ('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
815
+        _T('admin_debug') . ' ' . spip_htmlspecialchars($titre) . ' (' .
816
+        supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
817
+    ")</title>\n" .
818
+    "<meta http-equiv='Content-Type' content='text/html" .
819
+    (($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
820
+    "' />\n" .
821
+    http_script('', 'jquery.js')
822
+    . "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
823
+    . "' type='text/css' />" .
824
+    "</head>\n" .
825
+    "<body style='margin:0 10px;'>\n" .
826
+    "<div id='spip-debug-header'>" .
827
+    $corps .
828
+    inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false) .
829
+    '</div></body></html>';
830 830
 }
Please login to merge, or discard this patch.