4 |
david |
1 |
<?php
|
|
|
2 |
|
|
|
3 |
/***************************************************************************\
|
|
|
4 |
* SPIP, Systeme de publication pour l'internet *
|
|
|
5 |
* *
|
|
|
6 |
* Copyright (c) 2001-2005 *
|
|
|
7 |
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
|
|
|
8 |
* *
|
|
|
9 |
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
|
|
|
10 |
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
|
|
|
11 |
\***************************************************************************/
|
|
|
12 |
|
|
|
13 |
|
|
|
14 |
//
|
|
|
15 |
// Ce fichier ne sera execute qu'une fois
|
|
|
16 |
if (defined("_INC_DEBUG_SQL")) return;
|
|
|
17 |
define("_INC_DEBUG_SQL", "1");
|
|
|
18 |
|
|
|
19 |
function afficher_debug_contexte($env) {
|
|
|
20 |
static $n;
|
|
|
21 |
$n++;
|
|
|
22 |
|
|
|
23 |
if (is_array($env_tab = @unserialize($env)))
|
|
|
24 |
$env = $env_tab;
|
|
|
25 |
|
|
|
26 |
$env_texte="";
|
|
|
27 |
if (count($env)>0) {
|
|
|
28 |
$env_texte="<div class='spip-env'>"
|
|
|
29 |
. "<fieldset><legend>#ENV</legend>\n"
|
|
|
30 |
. "<div><table>\n";
|
|
|
31 |
foreach ($env as $nom => $valeur) {
|
|
|
32 |
$env_texte .= "\n<tr><td><strong>".nl2br(entites_html($nom))
|
|
|
33 |
. "</strong></td>";
|
|
|
34 |
$env_texte .= "<td>: ".nl2br(entites_html($valeur))
|
|
|
35 |
. "</td></tr>\n";
|
|
|
36 |
}
|
|
|
37 |
$env_texte .= "\n</table></div>\n";
|
|
|
38 |
$env_texte .= "</fieldset></div>\n";
|
|
|
39 |
}
|
|
|
40 |
return $env_texte;
|
|
|
41 |
}
|
|
|
42 |
|
|
|
43 |
// Si le code php produit des erreurs, on les affiche en surimpression
|
|
|
44 |
// sauf pour un visiteur non admin (lui ne voit rien de special)
|
|
|
45 |
// ajouter &var_mode=debug pour voir les erreurs et en parler sur spip@rezo.net
|
|
|
46 |
function affiche_erreurs_page($tableau_des_erreurs) {
|
|
|
47 |
|
|
|
48 |
$GLOBALS['bouton_admin_debug'] = true;
|
|
|
49 |
$res = '';
|
|
|
50 |
foreach ($tableau_des_erreurs as $err) {
|
|
|
51 |
$res .= "<li>" .$err[0] . ", <small>".$err[1]."</small><br /></li>\n";
|
|
|
52 |
}
|
|
|
53 |
return "\n<div id='spip-debug' style='"
|
|
|
54 |
. "position: absolute; top: 20px; left: 20px; z-index: 1000;"
|
|
|
55 |
. "filter:alpha(opacity=60); -moz-opacity:0.6; opacity: 0.6;"
|
|
|
56 |
. "'><ul><li>"
|
|
|
57 |
. _T('zbug_erreur_squelette')
|
|
|
58 |
## aide locale courte a ecrire, avec lien vers une grosse page de documentation
|
|
|
59 |
# aide('erreur_compilation'),
|
|
|
60 |
. "<br /></li>"
|
|
|
61 |
. "<ul>"
|
|
|
62 |
. $res
|
|
|
63 |
. "</ul></ul></div>";
|
|
|
64 |
}
|
|
|
65 |
|
|
|
66 |
//
|
|
|
67 |
// Si une boucle cree des soucis, on peut afficher la requete fautive
|
|
|
68 |
// avec son code d'erreur
|
|
|
69 |
//
|
|
|
70 |
function erreur_requete_boucle($query, $id_boucle, $type, $errno, $erreur) {
|
|
|
71 |
|
|
|
72 |
$GLOBALS['bouton_admin_debug'] = true;
|
|
|
73 |
|
|
|
74 |
if (eregi('err(no|code):?[[:space:]]*([0-9]+)', $erreur, $regs))
|
|
|
75 |
$errno = $regs[2];
|
|
|
76 |
else if (($errno == 1030 OR $errno <= 1026)
|
|
|
77 |
AND ereg('[^[:alnum:]]([0-9]+)[^[:alnum:]]', $erreur, $regs))
|
|
|
78 |
$errno = $regs[1];
|
|
|
79 |
|
|
|
80 |
// Erreur systeme
|
|
|
81 |
if ($errno > 0 AND $errno < 200) {
|
|
|
82 |
$retour .= "<tt><br /><br /><blink>"
|
|
|
83 |
. _T('info_erreur_systeme', array('errsys'=>$errno))
|
|
|
84 |
. "</blink><br />\n"
|
|
|
85 |
. _T('info_erreur_systeme2');
|
|
|
86 |
spip_log("Erreur systeme $errno");
|
|
|
87 |
}
|
|
|
88 |
// Requete erronee
|
|
|
89 |
else {
|
|
|
90 |
$retour .= "<tt><blink><BOUCLE".$id_boucle.">("
|
|
|
91 |
. $type . ")</blink><br />\n"
|
|
|
92 |
. "<b>"._T('avis_erreur_mysql')."</b><br />\n"
|
|
|
93 |
. htmlspecialchars($query)
|
|
|
94 |
. "\n<br /><font color='red'><b>".htmlspecialchars($erreur)
|
|
|
95 |
. "</b></font><br />"
|
|
|
96 |
. "<blink></BOUCLE".$id_boucle."></blink></tt>\n";
|
|
|
97 |
|
|
|
98 |
include_ecrire('inc_presentation.php3');
|
|
|
99 |
include_ecrire('inc_lang.php3');
|
|
|
100 |
utiliser_langue_visiteur();
|
|
|
101 |
$retour .= aide('erreur_mysql');
|
|
|
102 |
spip_log("Erreur requete $id_boucle (".$GLOBALS['fond'].".html)");
|
|
|
103 |
}
|
|
|
104 |
|
|
|
105 |
erreur_squelette($retour);
|
|
|
106 |
}
|
|
|
107 |
|
|
|
108 |
|
|
|
109 |
//
|
|
|
110 |
// Erreur de syntaxe des squelettes : memoriser le code fautif
|
|
|
111 |
//
|
|
|
112 |
function erreur_squelette($message='', $lieu='') {
|
|
|
113 |
global $tableau_des_erreurs;
|
|
|
114 |
global $auteur_session;
|
|
|
115 |
static $runs;
|
|
|
116 |
|
|
|
117 |
if (is_array($message)) list($message, $lieu) = $message;
|
|
|
118 |
|
|
|
119 |
spip_log("Erreur squelette: $message | $lieu ("
|
|
|
120 |
. $GLOBALS['fond'].".html)");
|
|
|
121 |
$GLOBALS['bouton_admin_debug'] = true;
|
|
|
122 |
$tableau_des_erreurs[] = array($message, $lieu);
|
|
|
123 |
// Eviter les boucles infernales
|
|
|
124 |
if (++$runs > 4) {
|
|
|
125 |
if ($_COOKIE['spip_admin'] OR
|
|
|
126 |
$auteur_session['statut'] == '0minirezo' OR
|
|
|
127 |
($GLOBALS['var_mode'] == 'debug')) {
|
|
|
128 |
echo debut_entete(_T('admin_debug')), '</head><body>',
|
|
|
129 |
affiche_erreurs_page($tableau_des_erreurs);
|
|
|
130 |
exit;
|
|
|
131 |
}
|
|
|
132 |
}
|
|
|
133 |
}
|
|
|
134 |
|
|
|
135 |
//
|
|
|
136 |
// Le debusqueur version 3
|
|
|
137 |
//
|
|
|
138 |
|
|
|
139 |
// appelee a chaque sortie de boucle (inc-compilo) et a chaque requete
|
|
|
140 |
// dans ce derniers cas on n'a pas le nom du squelette
|
|
|
141 |
|
|
|
142 |
function boucle_debug_resultat ($id, $type, $resultat) {
|
|
|
143 |
global $debug_objets;
|
|
|
144 |
|
|
|
145 |
$nom = $debug_objets['courant'];
|
|
|
146 |
|
|
|
147 |
if ($type == 'requete') {
|
|
|
148 |
$debug_objets['requete']["$nom$id"] = $resultat;
|
|
|
149 |
}
|
|
|
150 |
else {
|
|
|
151 |
// ne pas memoriser plus de 3 tours d'une meme boucle
|
|
|
152 |
if (count($debug_objets['resultat']["$nom$id"]) < 3)
|
|
|
153 |
$debug_objets['resultat']["$nom$id"][] = $resultat;
|
|
|
154 |
}
|
|
|
155 |
}
|
|
|
156 |
|
|
|
157 |
// appelee a chaque sortie de sequence (inc-compilo)
|
|
|
158 |
function debug_sequence($id, $nom, $niv, $sequence) {
|
|
|
159 |
global $debug_objets;
|
|
|
160 |
|
|
|
161 |
if (!$niv)
|
|
|
162 |
{
|
|
|
163 |
$debug_objets['sequence'][$nom.$id] = $sequence;
|
|
|
164 |
}
|
|
|
165 |
$res = "";
|
|
|
166 |
foreach($sequence as $v) $res .= $v[2];
|
|
|
167 |
return $res;
|
|
|
168 |
}
|
|
|
169 |
|
|
|
170 |
// appelee a chaque compilation de boucle (inc-compilo)
|
|
|
171 |
function boucle_debug_compile ($id, $nom, $code) {
|
|
|
172 |
global $debug_objets;
|
|
|
173 |
|
|
|
174 |
$debug_objets['code'][$nom.$id] = $code;
|
|
|
175 |
}
|
|
|
176 |
|
|
|
177 |
// appelee a chaque compilation de squelette (inc-compilo)
|
|
|
178 |
function squelette_debug_compile($nom, $sourcefile, $code, $squelette) {
|
|
|
179 |
global $debug_objets;
|
|
|
180 |
|
|
|
181 |
$debug_objets['squelette'][$nom] = $squelette;
|
|
|
182 |
$debug_objets['sourcefile'][$nom] = $sourcefile;
|
|
|
183 |
|
|
|
184 |
if (is_array($GLOBALS['contexte_inclus']))
|
|
|
185 |
$debug_objets['contexte'][$nom] = $GLOBALS['contexte_inclus'];
|
|
|
186 |
else {
|
|
|
187 |
$debug_objets['contexte'][$nom] = $GLOBALS['contexte'];
|
|
|
188 |
if (!isset($debug_objets['principal']))
|
|
|
189 |
$debug_objets['principal'] = $nom;
|
|
|
190 |
}
|
|
|
191 |
}
|
|
|
192 |
|
|
|
193 |
// appelee a chaque analyse syntaxique de squelette
|
|
|
194 |
function boucle_debug ($nom, $id_parent, $id, $type, $crit, $avant, $milieu, $apres, $altern) {
|
|
|
195 |
global $debug_objets;
|
|
|
196 |
$debug_objets['courant'] = $nom;
|
|
|
197 |
$debug_objets['parent'][$nom.$id] = $id_parent;
|
|
|
198 |
$debug_objets['pretty'][$nom.$id] =
|
|
|
199 |
"BOUCLE$id($type)" . htmlspecialchars(
|
|
|
200 |
preg_replace(",[\r\n],", "\\n", $crit));
|
|
|
201 |
// on synthetise avec la syntaxe standard, mais "<//" pose pb
|
|
|
202 |
$debug_objets['boucle'][$nom.$id] =
|
|
|
203 |
(!$avant ? "" : "<B$id>$avant") .
|
|
|
204 |
"<BOUCLE$id($type)$crit>" .
|
|
|
205 |
$milieu .
|
|
|
206 |
"</BOUCLE$id>" .
|
|
|
207 |
(!$apres ? "" : "$apres</B$id>") .
|
|
|
208 |
(!$altern ? "" : "$altern<//B$id>");
|
|
|
209 |
}
|
|
|
210 |
|
|
|
211 |
function trouve_boucle_debug($n, $nom, $debut=0, $boucle = "")
|
|
|
212 |
{
|
|
|
213 |
global $debug_objets;
|
|
|
214 |
|
|
|
215 |
$id = $nom . $boucle;
|
|
|
216 |
foreach($debug_objets['sequence'][$id] as $v) {
|
|
|
217 |
if (!ereg('^(.*)(<\?.*\?>)(.*)$', $v[2],$r))
|
|
|
218 |
$y = substr_count($v[2], "\n");
|
|
|
219 |
else {
|
|
|
220 |
if ($v[1][0] == '#')
|
|
|
221 |
// balise dynamique
|
|
|
222 |
$incl = $debug_objets['resultat'][$v[0]];
|
|
|
223 |
else
|
|
|
224 |
// inclusion
|
|
|
225 |
$incl = $debug_objets['squelette'][trouve_squelette_inclus($v[1])];
|
|
|
226 |
$y = substr_count($incl, "\n")
|
|
|
227 |
+ substr_count($r[1], "\n")
|
|
|
228 |
+ substr_count($r[3], "\n");
|
|
|
229 |
}
|
|
|
230 |
|
|
|
231 |
if ($n <= ($y + $debut)) {
|
|
|
232 |
if ($v[1][0] == '?')
|
|
|
233 |
return trouve_boucle_debug($n, $nom, $debut, substr($v[1],1));
|
|
|
234 |
elseif ($v[1][0] == '!') {
|
|
|
235 |
if ($incl = trouve_squelette_inclus($v[1]))
|
|
|
236 |
return trouve_boucle_debug($n, $incl, $debut);
|
|
|
237 |
}
|
|
|
238 |
return array($nom, $boucle, $v[0]);
|
|
|
239 |
}
|
|
|
240 |
$debut += $y;
|
|
|
241 |
}
|
|
|
242 |
return array($nom, $boucle, $n-$debut);
|
|
|
243 |
}
|
|
|
244 |
|
|
|
245 |
function trouve_squelette_inclus($script)
|
|
|
246 |
{
|
|
|
247 |
global $debug_objets;
|
|
|
248 |
// on suppose que X.php appelle le squelette X.html (a revoir)
|
|
|
249 |
ereg('^.(.*).php?3', $script, $reg);
|
|
|
250 |
$incl = $reg[1] . '.html$';
|
|
|
251 |
foreach($debug_objets['sourcefile'] as $k => $v) {
|
|
|
252 |
if (ereg($incl,$v)) return $k;
|
|
|
253 |
}
|
|
|
254 |
return "";
|
|
|
255 |
}
|
|
|
256 |
|
|
|
257 |
function reference_boucle_debug($n, $nom, $self)
|
|
|
258 |
{
|
|
|
259 |
list($skel, $boucle, $ligne) = trouve_boucle_debug($n, $nom);
|
|
|
260 |
|
|
|
261 |
if (!$boucle)
|
|
|
262 |
return !$ligne ? "" :
|
|
|
263 |
(" (" .
|
|
|
264 |
(($nom != $skel) ? _L("squelette inclus, ligne: ") :
|
|
|
265 |
_L("squelette, ligne: ")) .
|
|
|
266 |
"<a href='$self&var_mode_objet=$skel&var_mode_affiche=squelette&var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
|
|
|
267 |
else {
|
|
|
268 |
$self .= "&var_mode_objet=$skel$boucle&var_mode_affiche=boucle";
|
|
|
269 |
|
|
|
270 |
return !$ligne ? " (boucle <a href='$self#$skel$boucle'>$boucle</a>)" :
|
|
|
271 |
" (boucle $boucle ligne <a href='$self&var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
|
|
|
272 |
}
|
|
|
273 |
}
|
|
|
274 |
|
|
|
275 |
// affiche un texte avec numero de ligne et ancre.
|
|
|
276 |
|
|
|
277 |
function ancre_texte($texte, $fautifs=array())
|
|
|
278 |
{
|
|
|
279 |
global $var_mode_ligne;
|
|
|
280 |
if ($var_mode_ligne) $fautifs[]=$var_mode_ligne;
|
|
|
281 |
ob_start();
|
|
|
282 |
highlight_string($texte);
|
|
|
283 |
$s = ob_get_contents();
|
|
|
284 |
ob_end_clean();
|
|
|
285 |
if (substr($s,0,6) == '<code>') { $s=substr($s,6); echo '<code>';}
|
|
|
286 |
$tableau = explode("<br />", $s);
|
|
|
287 |
$format = "<span style='color: black'>%0".
|
|
|
288 |
strlen(count($tableau)).
|
|
|
289 |
"d </span>";
|
|
|
290 |
$format10=str_replace('black','pink',$format);
|
|
|
291 |
$formaterr="<span style='background-color: pink'>%s</span>";
|
|
|
292 |
$i=1;
|
|
|
293 |
|
|
|
294 |
foreach ($tableau as $ligne) {
|
|
|
295 |
echo "<br />\n<a id='L$i' href='#debug_boucle'>",
|
|
|
296 |
sprintf((($i%10) ? $format :$format10), $i),
|
|
|
297 |
"</a>",
|
|
|
298 |
sprintf(in_array($i, $fautifs) ? $formaterr : '%s',
|
|
|
299 |
$ligne) ;
|
|
|
300 |
$i++;
|
|
|
301 |
}
|
|
|
302 |
}
|
|
|
303 |
|
|
|
304 |
// l'environnement graphique du debuggueur
|
|
|
305 |
function debug_dumpfile ($texte, $fonc, $type) {
|
|
|
306 |
|
|
|
307 |
global $debug_objets, $var_mode_objet, $var_mode_affiche;
|
|
|
308 |
|
|
|
309 |
$debug_objets[$type][$fonc . 'tout'] = $texte;
|
|
|
310 |
if (!$debug_objets['sourcefile']) return;
|
|
|
311 |
if ($texte && ($var_mode_objet != $fonc || $var_mode_affiche != $type))
|
|
|
312 |
return;
|
|
|
313 |
if (!$fonc) $fonc = $debug_objets['principal'];
|
|
|
314 |
$link = new Link;
|
|
|
315 |
$link->delvar('var_mode_affiche');
|
|
|
316 |
$link->delvar('var_mode_objet');
|
|
|
317 |
$link->addvar('var_mode','debug');
|
|
|
318 |
$self = quote_amp($link->getUrl());
|
|
|
319 |
|
|
|
320 |
// en cas de squelette inclus, virer le code de l'incluant:
|
|
|
321 |
// - il contient souvent une Div restreignant la largeur a 3 fois rien
|
|
|
322 |
// - ca fait 2 headers !
|
|
|
323 |
ob_end_clean();
|
|
|
324 |
|
|
|
325 |
@header('Content-Type: text/html; charset='.lire_meta('charset'));
|
|
|
326 |
echo debut_entete('Spip ' . $GLOBALS['spip_version_affichee'] . ' ' .
|
|
|
327 |
_T('admin_debug') . ' ' .
|
|
|
328 |
supprimer_tags(extraire_multi(lire_meta('nom_site')))),
|
|
|
329 |
"<link rel='stylesheet' href='spip_admin.css' type='text/css'>",
|
|
|
330 |
"</head>\n<body style='margin:0 10px;'>",
|
|
|
331 |
"\n<div id='spip-debug' style='position: absolute; top: 22px; z-index: 1000;height:97%;left:10px;right:10px;'><div id='spip-boucles'>\n";
|
|
|
332 |
|
|
|
333 |
if ($var_mode_affiche !== 'validation') {
|
|
|
334 |
foreach ($debug_objets['sourcefile'] as $nom_skel => $sourcefile) {
|
|
|
335 |
echo "<fieldset><legend>",$sourcefile," : ";
|
|
|
336 |
echo "\n<a href='",$self, "&var_mode_objet=$nom_skel&var_mode_affiche=squelette#$nom_skel'>"._T('squelette')."</a>";
|
|
|
337 |
echo "\n<a href='",$self, "&var_mode_objet=$nom_skel&var_mode_affiche=resultat#$nom_skel'>"._T('zbug_resultat')."</a>";
|
|
|
338 |
echo "\n<a href='", $self, "&var_mode_objet=$nom_skel&var_mode_affiche=code#$nom_skel'>"._T('zbug_code')."</a></legend>";
|
|
|
339 |
|
|
|
340 |
if (is_array($contexte = $debug_objets['contexte'][$nom_skel]))
|
|
|
341 |
echo afficher_debug_contexte($contexte);
|
|
|
342 |
|
|
|
343 |
$i = 0;
|
|
|
344 |
$colors = array('#e0e0f0', '#f8f8ff');
|
|
|
345 |
$res = "";
|
|
|
346 |
foreach ($debug_objets['pretty'] as $nom => $pretty)
|
|
|
347 |
if (substr($nom, 0, strlen($nom_skel)) == $nom_skel) {
|
|
|
348 |
$i++;
|
|
|
349 |
$aff = "<".$pretty.">";
|
|
|
350 |
if ($var_mode_objet == $nom)
|
|
|
351 |
$aff = "<b>$aff</b>";
|
|
|
352 |
$res .= "\n<tr bgcolor='" .
|
|
|
353 |
$colors[$i%2] .
|
|
|
354 |
"'><td align='right'>$i</td><td>" .
|
|
|
355 |
"<a class='debug_link_boucle' href='" .
|
|
|
356 |
$self .
|
|
|
357 |
"&var_mode_objet=" .
|
|
|
358 |
$nom .
|
|
|
359 |
"&var_mode_affiche=boucle#$nom_skel'>" .
|
|
|
360 |
_T('zbug_boucle') .
|
|
|
361 |
"</a></td><td><a class='debug_link_boucle' href='" .
|
|
|
362 |
$self .
|
|
|
363 |
"&var_mode_objet=" .
|
|
|
364 |
$nom .
|
|
|
365 |
"&var_mode_affiche=resultat#$nom_skel'>" .
|
|
|
366 |
_T('zbug_resultat') .
|
|
|
367 |
"</a></td><td><a class='debug_link_resultat' href='" .
|
|
|
368 |
$self .
|
|
|
369 |
"&var_mode_objet=" .
|
|
|
370 |
$nom .
|
|
|
371 |
"&var_mode_affiche=code#$nom_skel'>" .
|
|
|
372 |
_T('zbug_code') .
|
|
|
373 |
"</a></td><td>" .
|
|
|
374 |
$aff .
|
|
|
375 |
"</td></tr>";
|
|
|
376 |
}
|
|
|
377 |
if ($res) echo "<table width='100%'>\n$res</table>\n";
|
|
|
378 |
echo "</fieldset>\n";
|
|
|
379 |
}
|
|
|
380 |
echo "</div>\n<a id='$fonc'></a>\n";
|
|
|
381 |
if ($var_mode_objet && ($res = $debug_objets[$var_mode_affiche][$var_mode_objet])) {
|
|
|
382 |
echo "<div id=\"debug_boucle\"><fieldset>";
|
|
|
383 |
if ($var_mode_affiche == 'resultat') {
|
|
|
384 |
echo "<legend>",$debug_objets['pretty'][$var_mode_objet],"</legend>";
|
|
|
385 |
ancre_texte($debug_objets['requete'][$var_mode_objet]);
|
|
|
386 |
foreach ($res as $view)
|
|
|
387 |
if ($view) echo "\n<br /><fieldset>",interdire_scripts($view),"</fieldset>";
|
|
|
388 |
|
|
|
389 |
} else if ($var_mode_affiche == 'code') {
|
|
|
390 |
echo "<legend>",$debug_objets['pretty'][$var_mode_objet],"</legend>";
|
|
|
391 |
ancre_texte("<"."?php\n".$res."\n?".">");
|
|
|
392 |
} else if ($var_mode_affiche == 'boucle') {
|
|
|
393 |
echo "<legend>",$debug_objets['pretty'][$var_mode_objet],"</legend>";
|
|
|
394 |
ancre_texte($res);
|
|
|
395 |
} else if ($var_mode_affiche == 'squelette') {
|
|
|
396 |
echo "<legend>",$debug_objets['sourcefile'][$var_mode_objet],"</legend>";
|
|
|
397 |
ancre_texte($debug_objets['squelette'][$var_mode_objet]);
|
|
|
398 |
}
|
|
|
399 |
echo "</fieldset></div>";
|
|
|
400 |
}
|
|
|
401 |
}
|
|
|
402 |
if ($texte) {
|
|
|
403 |
|
|
|
404 |
$ouvrant = $fermant = $err = "";
|
|
|
405 |
$titre = $GLOBALS['var_mode_affiche'];
|
|
|
406 |
if ($titre != 'validation') {
|
|
|
407 |
$titre = 'zbug_' . $titre;
|
|
|
408 |
}
|
|
|
409 |
else {
|
|
|
410 |
include_ecrire("inc_spip_sax.php");
|
|
|
411 |
$res = spip_sax($texte);
|
|
|
412 |
if (!$res)
|
|
|
413 |
$err = _L("impossible");
|
|
|
414 |
elseif (ereg("^[[:space:]]*([^<][^0-9]*)([0-9]*)(.*[^0-9])([0-9]*)$", $GLOBALS['xhtml_error'], $r)) {
|
|
|
415 |
$fermant = $r[2];
|
|
|
416 |
$ouvrant = $r[4];
|
|
|
417 |
$rf = reference_boucle_debug($fermant, $fonc, $self);
|
|
|
418 |
$ro = reference_boucle_debug($ouvrant, $fonc, $self);
|
|
|
419 |
$err = ": " . $r[1] .
|
|
|
420 |
"<a href='#L" . $r[2] . "'>$r[2]</a>$rf" .
|
|
|
421 |
$r[3] ."<a href='#L" . $r[4] . "'>$r[4]</a>$ro";
|
|
|
422 |
} else {
|
|
|
423 |
$err = _L("correcte");
|
|
|
424 |
$texte = $res;
|
|
|
425 |
}
|
|
|
426 |
}
|
|
|
427 |
echo "<div id=\"debug_boucle\"><fieldset><legend>",
|
|
|
428 |
_T($titre),
|
|
|
429 |
' ',
|
|
|
430 |
$err,
|
|
|
431 |
"</legend>";
|
|
|
432 |
ancre_texte($texte, array($ouvrant, $fermant));
|
|
|
433 |
echo "</fieldset></div>";
|
|
|
434 |
}
|
|
|
435 |
echo "\n</div>";
|
|
|
436 |
echo inclure_balise_dynamique(
|
|
|
437 |
balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $debug_objets)
|
|
|
438 |
);
|
|
|
439 |
echo '</body></html>';
|
|
|
440 |
exit;
|
|
|
441 |
}
|
|
|
442 |
?>
|