[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / ecrire / public / debusquer.php
index 9fdae9f..13cc85e 100644 (file)
@@ -3,14 +3,16 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2016                                                *
+ *  Copyright (c) 2001-2017                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
-if (!defined('_ECRIRE_INC_VERSION')) return;
+if (!defined('_ECRIRE_INC_VERSION')) {
+       return;
+}
 
 include_spip('public/decompiler');
 include_spip('inc/filtres_mini');
@@ -44,12 +46,12 @@ defined('_DEBUG_MAX_SQUELETTE_ERREURS') || define('_DEBUG_MAX_SQUELETTE_ERREURS'
  *
  * Point d'entrée pour les appels involontaires ($message non vide => erreur)
  *  et volontaires (var_mode et var_profile)
- * 
+ *
  * Si pas d'autorisation, les erreurs ne sont pas affichées
  * (mais seront dans les logs)
  *
  * Si l'erreur vient de SPIP,  en parler sur `spip@rezo.net`
- * 
+ *
  * @param bool|string|array $message
  *     - Message d'erreur (string|array)
  *     - false pour retourner le texte des messages d'erreurs
@@ -62,10 +64,8 @@ defined('_DEBUG_MAX_SQUELETTE_ERREURS') || define('_DEBUG_MAX_SQUELETTE_ERREURS'
  *     - 'erreurs' = 'reset' : Efface le tableau des erreurs
  * @return null|string
  *     - string si $message à false.
-**/
-function public_debusquer_dist($message = '', $lieu = '', $opt = array()){
-       global $visiteur_session;
-       global $debug_objets;
+ **/
+function public_debusquer_dist($message = '', $lieu = '', $opt = array()) {
        static $tableau_des_erreurs = array();
 
        // Pour des tests unitaires, pouvoir récupérer les erreurs générées
@@ -75,28 +75,38 @@ function public_debusquer_dist($message = '', $lieu = '', $opt = array()){
                }
                if ($opt['erreurs'] == 'reset') {
                        $tableau_des_erreurs = array();
+
                        return true;
                }
        }
 
        // Erreur ou appel final ?
-       if ($message){
+       if ($message) {
                $message = debusquer_compose_message($message);
                $tableau_des_erreurs[] = array($message, $lieu);
                set_request('var_mode', 'debug');
                $GLOBALS['bouton_admin_debug'] = true;
                // Permettre a la compil de continuer
-               if (is_object($lieu) AND (!isset($lieu->code) OR !$lieu->code))
+               if (is_object($lieu) and (!isset($lieu->code) or !$lieu->code)) {
                        $lieu->code = "''";
+               }
                // forcer l'appel au debusqueur en cas de boucles infernales
-               $urgence = (_DEBUG_MAX_SQUELETTE_ERREURS AND count($tableau_des_erreurs)>_DEBUG_MAX_SQUELETTE_ERREURS);
-               if (!$urgence) return;
+               $urgence = (_DEBUG_MAX_SQUELETTE_ERREURS and count($tableau_des_erreurs) > _DEBUG_MAX_SQUELETTE_ERREURS);
+               if (!$urgence) {
+                       return;
+               }
+       }
+       if (empty($GLOBALS['debug_objets']['principal'])) {
+               // espace public ?
+               if (isset($GLOBALS['fond'])) {
+                       $GLOBALS['debug_objets']['principal'] = $GLOBALS['fond'];
+               }
        }
-       if (empty($debug_objets['principal']))
-               $debug_objets['principal'] = $GLOBALS['fond'];
 
        include_spip('inc/autoriser');
-       if (!autoriser('debug')) return;
+       if (!autoriser('debug')) {
+               return;
+       }
        include_spip('inc/headers');
        include_spip('inc/filtres');
 
@@ -106,48 +116,54 @@ function public_debusquer_dist($message = '', $lieu = '', $opt = array()){
        // sauf si l'on se trouve deja dans un flux compresse (plugin compresseur
        // actif par exemple)
        if (ob_get_length()
-               AND
+               and
                !in_array('ob_gzhandler', ob_get_status())
-       ){
+       ) {
                ob_end_clean();
        }
 
-       lang_select($visiteur_session['lang']);
+       lang_select($GLOBALS['visiteur_session']['lang']);
        $fonc = _request('var_mode_objet');
        $mode = _request('var_mode_affiche');
        $self = str_replace("\\'", ''', self());
        $self = parametre_url($self, 'var_mode', 'debug');
-       
+
        $res = debusquer_bandeau($tableau_des_erreurs)
                . '<br />'
                . debusquer_squelette($fonc, $mode, $self);
 
-       if (!_DIR_RESTREINT OR headers_sent()) return $res;
-       if ($tableau_des_erreurs) http_status(503);
+       if (!_DIR_RESTREINT or headers_sent()) {
+               return $res;
+       }
+       if ($tableau_des_erreurs) {
+               http_status(503);
+       }
 
        http_no_cache();
-       if (isset($_GET['var_profile'])){
+       if (isset($_GET['var_profile'])) {
                $titre = parametre_url($GLOBALS['REQUEST_URI'], 'var_profile', '');
                $titre = parametre_url($titre, 'var_mode', '');
+       } else {
+               if (!$fonc) {
+                       $fonc = $GLOBALS['debug_objets']['principal'];
+               }
+               $titre = !$mode ? $fonc : ($mode . (isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? " " . $GLOBALS['debug_objets']['sourcefile'][$fonc] : ""));
        }
-       else {
-               if (!$fonc) $fonc = $debug_objets['principal'];
-               $titre = !$mode ? $fonc : ($mode . ' ' . $debug_objets['sourcefile'][$fonc]);
-       }
-       if ($message===false){
+       if ($message === false) {
                lang_select();
+
                return debusquer_entete($titre, $res);
-       }
-       else
+       } else {
                echo debusquer_entete($titre, $res);
+       }
        exit;
 }
 
-function debusquer_compose_message($msg){
-       if (is_array($msg)){
+function debusquer_compose_message($msg) {
+       if (is_array($msg)) {
                // si c'est un texte, c'est une traduction a faire, mais
                // sqlite renvoit aussi des erreurs alpha num (mais avec 3 arguments)
-               if (!is_numeric($msg[0]) AND count($msg)==2) {
+               if (!is_numeric($msg[0]) and count($msg) == 2) {
                        // message avec argument: instancier
                        $msg = _T($msg[0], $msg[1], 'spip-debug-arg');
                } else {
@@ -157,37 +173,54 @@ function debusquer_compose_message($msg){
        }
        // FIXME: le fond n'est pas la si on n'est pas dans un squelette
        // cela dit, ca serait bien d'indiquer tout de meme d'ou vient l'erreur
-       $fond = isset($GLOBALS['fond']) ? $GLOBALS['fond']  : "";
+       $fond = isset($GLOBALS['fond']) ? $GLOBALS['fond'] : "";
        // une erreur critique sort $message en array
        $debug = is_array($msg) ? $msg[1] : $msg;
        spip_log("Debug: " . $debug . " (" . $fond . ")");
+
        return $msg;
 }
 
-function debusquer_bandeau($erreurs){
+function debusquer_bandeau($erreurs) {
 
-       if (!empty($erreurs)){
+       if (!empty($erreurs)) {
                $n = array(count($erreurs) . ' ' . _T('zbug_erreur_squelette'));
+
                return debusquer_navigation($erreurs, $n);
-       }
-       elseif (!empty($GLOBALS['tableau_des_temps'])) {
+       } elseif (!empty($GLOBALS['tableau_des_temps'])) {
                include_spip('public/tracer');
                list($temps, $nav) = chrono_requete($GLOBALS['tableau_des_temps']);
+
                return debusquer_navigation($temps, $nav, 'debug-profile');
-       }
-       else
+       } else {
                return '';
+       }
 }
 
-function debusquer_contexte($env){
+/**
+ * Affiche proprement dans un tableau le contexte d'environnement
+ *
+ * @param array|string $env
+ * @return string Code HTML
+ **/
+function debusquer_contexte($env) {
 
-       if (is_array($env_tab = @unserialize($env))) $env = $env_tab;
+       if (is_array($env_tab = @unserialize($env))) {
+               $env = $env_tab;
+       }
 
-       if (!$env) return '';
+       if (!$env) {
+               return '';
+       }
        $res = "";
-       foreach ($env as $nom => $valeur){
-               if (is_array($valeur))
-                       $valeur = '(' . count($valeur) . ' items) [' . join(',', $valeur) . ']';
+       foreach ($env as $nom => $valeur) {
+               if (is_array($valeur)) {
+                       $valeur_simple = array();
+                       foreach ($valeur as $v) {
+                               $valeur_simple[] = is_array($v) ? 'array(size=' . count($v) . ')' : $v;
+                       }
+                       $valeur = '(' . count($valeur) . ' items) [' . join(',', $valeur_simple) . ']';
+               }
                $res .= "\n<tr><td><strong>" . nl2br(entites_html($nom))
                        . "</strong></td><td>:&nbsp;" . nl2br(entites_html($valeur))
                        . "</td></tr>\n";
@@ -199,36 +232,38 @@ function debusquer_contexte($env){
 // Affichage du tableau des erreurs ou des temps de calcul
 // Cliquer sur les numeros en premiere colonne permet de voir le code
 
-function debusquer_navigation($tableau, $caption = array(), $id = 'debug-nav'){
+function debusquer_navigation($tableau, $caption = array(), $id = 'debug-nav') {
 
-       if (_request('exec')=='valider_xml') return '';
+       if (_request('exec') == 'valider_xml') {
+               return '';
+       }
        $GLOBALS['bouton_admin_debug'] = true;
        $res = '';
        $href = quote_amp(parametre_url($GLOBALS['REQUEST_URI'], 'var_mode', 'debug'));
-       foreach ($tableau as $i => $err){
+       foreach ($tableau as $i => $err) {
                $boucle = $ligne = $skel = '';
                list($msg, $lieu) = $err;
-               if (is_object($lieu)){
+               if (is_object($lieu)) {
                        $ligne = $lieu->ligne;
                        $boucle = $lieu->id_boucle ? $lieu->id_boucle : '';
-                       if (isset($lieu->descr['nom'])){
+                       if (isset($lieu->descr['nom'])) {
                                $nom_code = $lieu->descr['nom'];
                                $skel = $lieu->descr['sourcefile'];
                                $h2 = parametre_url($href, 'var_mode_objet', $nom_code);
                                $h3 = parametre_url($h2, 'var_mode_affiche', 'squelette') . '#L' . $ligne;
                                $skel = "<a href='$h3'><b>$skel</b></a>";
-                               if ($boucle){
+                               if ($boucle) {
                                        $h3 = parametre_url($h2 . $boucle, 'var_mode_affiche', 'boucle');
                                        $boucle = "<a href='$h3'><b>$boucle</b></a>";
                                }
                        }
                }
 
-               $j = ($i+1);
+               $j = ($i + 1);
                $res .= "<tr id='req$j'><td style='text-align: right'>"
                        . $j
                        . "&nbsp;</td><td style='text-align: left'>"
-                       . $msg
+                       . (is_array($msg) ? implode('', $msg) : $msg)
                        . "</td><td style='text-align: left'>"
                        . ($skel ? $skel : "&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;")
                        . "</td><td class='spip-debug-arg' style='text-align: left'>"
@@ -240,60 +275,59 @@ function debusquer_navigation($tableau, $caption = array(), $id = 'debug-nav'){
        }
 
        return "\n<table id='$id'>"
-               . "<caption onclick=\"x = document.getElementById('$id'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\">"
-               . $caption[0]
+       . "<caption onclick=\"x = document.getElementById('$id'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\">"
+       . $caption[0]
 ## aide locale courte a ecrire, avec lien vers une grosse page de documentation
-#              aide('erreur_compilation'),
-               . "</caption>"
-               //  fausse caption du chrono (mais vraie nav)
-               . (!empty($caption[1]) ? $caption[1] : '')
-               . "<tr><th>"
-               . _T('numero')
-               . "</th><th>"
-               . _T('public:message')
-               . "</th><th>"
-               . _T('squelette')
-               . "</th><th>"
-               . _T('zbug_boucle')
-               . "</th><th>"
-               . _T('ligne')
-               . "</th></tr>"
-               . $res
-               . "</table>";
+#              aider('erreur_compilation'),
+       . "</caption>"
+       //  fausse caption du chrono (mais vraie nav)
+       . (!empty($caption[1]) ? $caption[1] : '')
+       . "<tr><th>"
+       . _T('numero')
+       . "</th><th>"
+       . _T('public:message')
+       . "</th><th>"
+       . _T('squelette')
+       . "</th><th>"
+       . _T('zbug_boucle')
+       . "</th><th>"
+       . _T('ligne')
+       . "</th></tr>"
+       . $res
+       . "</table>";
 }
 
 
 /**
- * Retourne le texte d'un message d'erreur de requête 
+ * Retourne le texte d'un message d'erreur de requête
  *
  * Si une boucle cree des soucis, on peut afficher la requete fautive
  * avec son code d'erreur
  *
  * @param array $message
- *             Description du message en 3 éléments :
- *             - numéro d'erreur
- *             - texte de l'erreur
- *             - requête en erreur
+ *    Description du message en 3 éléments :
+ *    - numéro d'erreur
+ *    - texte de l'erreur
+ *    - requête en erreur
  * @return string|array
- *             Retourne le texte de l'erreur a afficher
- *             ou un tableau si l'erreur est critique
-**/
-function debusquer_requete($message){
+ *    Retourne le texte de l'erreur a afficher
+ *    ou un tableau si l'erreur est critique
+ **/
+function debusquer_requete($message) {
        list($errno, $msg, $query) = $message;
 
        // FIXME: ces écritures mélangent divers syntaxe des moteurs SQL
        // il serait plus prudent certainement d'avoir une fonction d'analyse par moteur
-       if (preg_match(',err(no|code):?[[:space:]]*([0-9]+),i', $msg, $regs)){
+       if (preg_match(',err(no|code):?[[:space:]]*([0-9]+),i', $msg, $regs)) {
                $errno = $regs[2];
-       }
-       elseif (is_numeric($errno) and ($errno==1030 OR $errno<=1026)
-               AND preg_match(',[^[:alnum:]]([0-9]+)[^[:alnum:]],', $msg, $regs)
+       } elseif (is_numeric($errno) and ($errno == 1030 or $errno <= 1026)
+               and preg_match(',[^[:alnum:]]([0-9]+)[^[:alnum:]],', $msg, $regs)
        ) {
                $errno = $regs[1];
        }
 
        // Erreur systeme
-       if (is_numeric($errno) and $errno>0 AND $errno<200){
+       if (is_numeric($errno) and $errno > 0 and $errno < 200) {
                $retour = "<tt><br /><br /><blink>"
                        . _T('info_erreur_systeme', array('errsys' => $errno))
                        . "</blink><br />\n<b>"
@@ -301,6 +335,7 @@ function debusquer_requete($message){
                                array('script' => generer_url_ecrire('base_repair')))
                        . '</b><br />';
                spip_log("Erreur systeme $errno");
+
                return array($retour, '');
        }
 
@@ -310,80 +345,89 @@ function debusquer_requete($message){
                . "\n<br /><span style='color: red'><b>"
                . spip_htmlspecialchars($query)
                . "</b></span></tt><br />";
-       //. aide('erreur_mysql');
+
+       //. aider('erreur_mysql');
 
        return $err;
 }
 
 
-
-// http://doc.spip.org/@trouve_boucle_debug
-function trouve_boucle_debug($n, $nom, $debut = 0, $boucle = ""){
-       global $debug_objets;
+// http://code.spip.net/@trouve_boucle_debug
+function trouve_boucle_debug($n, $nom, $debut = 0, $boucle = "") {
 
        $id = $nom . $boucle;
-       if (is_array($debug_objets['sequence'][$id])){
-               foreach ($debug_objets['sequence'][$id] as $v){
+       if (is_array($GLOBALS['debug_objets']['sequence'][$id])) {
+               foreach ($GLOBALS['debug_objets']['sequence'][$id] as $v) {
 
-                       if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r))
+                       if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r)) {
                                $y = substr_count($v[0], "\n");
-                       else {
-                               if ($v[1][0]=='#')
-                                       // balise dynamique
-                                       $incl = $debug_objets['resultat'][$v[2]];
-                               else
-                                       // inclusion
-                                       $incl = $debug_objets['squelette'][trouve_squelette_inclus($v[0])];
+                       } else {
+                               if ($v[1][0] == '#') // balise dynamique
+                               {
+                                       $incl = $GLOBALS['debug_objets']['resultat'][$v[2]];
+                               } else // inclusion
+                               {
+                                       $incl = $GLOBALS['debug_objets']['squelette'][trouve_squelette_inclus($v[0])];
+                               }
                                $y = substr_count($incl, "\n")
-                                       +substr_count($r[1], "\n")
-                                       +substr_count($r[3], "\n");
+                                       + substr_count($r[1], "\n")
+                                       + substr_count($r[3], "\n");
                        }
-                       if ($n<=($y+$debut)){
-                               if ($v[1][0]=='?')
+                       if ($n <= ($y + $debut)) {
+                               if ($v[1][0] == '?') {
                                        return trouve_boucle_debug($n, $nom, $debut, substr($v[1], 1));
-                               elseif ($v[1][0]=='!') {
-                                       if ($incl = trouve_squelette_inclus($v[1]))
+                               } elseif ($v[1][0] == '!') {
+                                       if ($incl = trouve_squelette_inclus($v[1])) {
                                                return trouve_boucle_debug($n, $incl, $debut);
+                                       }
                                }
-                               return array($nom, $boucle, $v[2]-1+$n-$debut);
+
+                               return array($nom, $boucle, $v[2] - 1 + $n - $debut);
                        }
                        $debut += $y;
                }
        }
-       return array($nom, $boucle, $n-$debut);
+
+       return array($nom, $boucle, $n - $debut);
 }
 
-// http://doc.spip.org/@trouve_squelette_inclus
-function trouve_squelette_inclus($script){
-       global $debug_objets;
+// http://code.spip.net/@trouve_squelette_inclus
+function trouve_squelette_inclus($script) {
+
        preg_match('/include\(.(.*).php3?.\);/', $script, $reg);
        // si le script X.php n'est pas ecrire/public.php
        // on suppose qu'il prend le squelette X.html (pas sur, mais y a pas mieux)
-       if ($reg[1]=='ecrire/public')
-               // si c'est bien ecrire/public on cherche le param 'fond'
-               if (!preg_match("/'fond' => '([^']*)'/", $script, $reg))
-                       // a defaut on cherche le param 'page'
-                       if (!preg_match("/'param' => '([^']*)'/", $script, $reg))
+       if ($reg[1] == 'ecrire/public') // si c'est bien ecrire/public on cherche le param 'fond'
+       {
+               if (!preg_match("/'fond' => '([^']*)'/", $script, $reg)) // a defaut on cherche le param 'page'
+               {
+                       if (!preg_match("/'param' => '([^']*)'/", $script, $reg)) {
                                $reg[1] = "inconnu";
+                       }
+               }
+       }
        $incl = ',' . $reg[1] . '[.]\w$,';
 
-       foreach ($debug_objets['sourcefile'] as $k => $v){
-               if (preg_match($incl, $v)) return $k;
+       foreach ($GLOBALS['debug_objets']['sourcefile'] as $k => $v) {
+               if (preg_match($incl, $v)) {
+                       return $k;
+               }
        }
+
        return "";
 }
 
-// http://doc.spip.org/@reference_boucle_debug
-function reference_boucle_debug($n, $nom, $self){
+// http://code.spip.net/@reference_boucle_debug
+function reference_boucle_debug($n, $nom, $self) {
        list($skel, $boucle, $ligne) = trouve_boucle_debug($n, $nom);
 
-       if (!$boucle)
+       if (!$boucle) {
                return !$ligne ? "" :
                        (" (" .
-                               (($nom!=$skel) ? _T('squelette_inclus_ligne') :
+                               (($nom != $skel) ? _T('squelette_inclus_ligne') :
                                        _T('squelette_ligne')) .
                                " <a href='$self&amp;var_mode_objet=$skel&amp;var_mode_affiche=squelette&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
-       else {
+       else {
                $self .= "&amp;var_mode_objet=$skel$boucle&amp;var_mode_affiche=boucle";
 
                return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" :
@@ -393,15 +437,17 @@ function reference_boucle_debug($n, $nom, $self){
 
 // affiche un texte avec numero de ligne et ancre.
 
-// http://doc.spip.org/@ancre_texte
-function ancre_texte($texte, $fautifs = array(), $nocpt = false){
+// http://code.spip.net/@ancre_texte
+function ancre_texte($texte, $fautifs = array(), $nocpt = false) {
 
        $var_mode_ligne = _request('var_mode_ligne');
-       if ($var_mode_ligne) $fautifs[] = array($var_mode_ligne);
+       if ($var_mode_ligne) {
+               $fautifs[] = array($var_mode_ligne);
+       }
        $res = '';
 
        $s = highlight_string($texte, true);
-       if (substr($s, 0, 6)=='<code>'){
+       if (substr($s, 0, 6) == '<code>') {
                $s = substr($s, 6);
                $res = '<code>';
        }
@@ -420,15 +466,18 @@ function ancre_texte($texte, $fautifs = array(), $nocpt = false){
        $i = 1;
        $flignes = array();
        $loc = array(0, 0);
-       foreach ($fautifs as $lc)
-               if (is_array($lc)){
+       foreach ($fautifs as $lc) {
+               if (is_array($lc)) {
                        $l = array_shift($lc);
                        $flignes[$l] = $lc;
-               } else $flignes[$lc] = $loc;
+               } else {
+                       $flignes[$lc] = $loc;
+               }
+       }
 
        $ancre = md5($texte);
-       foreach ($tableau as $ligne){
-               if (isset($flignes[$i])){
+       foreach ($tableau as $ligne) {
+               if (isset($flignes[$i])) {
                        $ligne = str_replace('&nbsp;', ' ', $ligne);
                        $indexmesg = $flignes[$i][1];
                        $err = textebrut($flignes[$i][2]);
@@ -442,90 +491,96 @@ function ancre_texte($texte, $fautifs = array(), $nocpt = false){
                        $indexmesg = $ancre;
                        $err = $bg = '';
                }
-               $res .= sprintf((($i%10) ? $format : $format10), $i, $bg, $indexmesg, $err, $i, $ligne);
+               $res .= sprintf((($i % 10) ? $format : $format10), $i, $bg, $indexmesg, $err, $i, $ligne);
                $i++;
        }
 
        return "<div id='T$ancre'>"
-               . '<div onclick="'
-               . "jQuery(this).parent().find('a').toggle();"
-               . '" title="'
-               . _T('masquer_colonne')
-               . '" style="cursor: pointer;">'
-               . ($nocpt ? '' : _T('info_numero_abbreviation'))
-               . "</div>
+       . '<div onclick="'
+       . "jQuery(this).parent().find('a').toggle();"
+       . '" title="'
+       . _T('masquer_colonne')
+       . '" style="cursor: pointer;">'
+       . ($nocpt ? '' : _T('info_numero_abbreviation'))
+       . "</div>
        " . $res . "</div>\n";
 }
 
 // l'environnement graphique du debuggueur 
 
-function debusquer_squelette($fonc, $mode, $self){
-       global $debug_objets;
+function debusquer_squelette($fonc, $mode, $self) {
+       $texte = '';
 
-       if ($mode!=='validation'){
-               if (isset($debug_objets['sourcefile']) and $debug_objets['sourcefile']){
+       if ($mode !== 'validation') {
+               if (isset($GLOBALS['debug_objets']['sourcefile']) and $GLOBALS['debug_objets']['sourcefile']) {
                        $res = "<div id='spip-boucles'>\n"
                                . debusquer_navigation_squelettes($self)
                                . "</div>";
-               }
-               else
+               } else {
                        $res = '';
-               if ($fonc){
+               }
+               if ($fonc) {
                        $id = " id='$fonc'";
-                       if (!empty($GLOBALS['debug_objets'][$mode][$fonc])){
+                       if (!empty($GLOBALS['debug_objets'][$mode][$fonc])) {
                                list($legend, $texte, $res2) = debusquer_source($fonc, $mode);
                                $texte .= $res2;
-                       }
-                       elseif (!empty($debug_objets[$mode][$fonc . 'tout'])) {
+                       } elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc . 'tout'])) {
                                $legend = _T('zbug_' . $mode);
-                               $texte = $debug_objets[$mode][$fonc . 'tout'];
+                               $texte = $GLOBALS['debug_objets'][$mode][$fonc . 'tout'];
                                $texte = ancre_texte($texte, array('', ''));
                        }
+               } else {
+                       if (strlen(trim($res))) {
+                               return "<img src='" . chemin_image('compat-16.png') . "' 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>";
+                       } else {
+                               // cas de l'appel sur erreur: montre la page
+                               return isset($GLOBALS['debug_objets']['resultat']['tout'])
+                                       ? $GLOBALS['debug_objets']['resultat']['tout']
+                                       : '';
+                       }
                }
-               else
-                       return strlen(trim($res))
-                       ? "<img src='".chemin_image('compat-16.png')."' 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>"
-                       // cas de l'appel sur erreur: montre la page
-                       : $GLOBALS['debug_objets']['resultat']['tout'];
-       }
-       else {
+       } else {
                $valider = charger_fonction('valider', 'xml');
-               $val = $valider($debug_objets['validation'][$fonc . 'tout']);
+               $val = $valider($GLOBALS['debug_objets']['validation'][$fonc . 'tout']);
                // Si erreur, signaler leur nombre dans le formulaire admin
-               $debug_objets['validation'] = $val->err ? count($val->err) : '';
+               $GLOBALS['debug_objets']['validation'] = $val->err ? count($val->err) : '';
                list($texte, $err) = emboite_texte($val, $fonc, $self);
-               if ($err===false)
+               if ($err === false) {
                        $err = _T('impossible');
-               elseif ($err===true)
+               } elseif ($err === true) {
                        $err = _T('correcte');
-               else
+               } else {
                        $err = ": $err";
+               }
                $legend = _T('validation') . ' ' . $err;
                $res = $id = '';
        }
+
        return !trim($texte) ? '' : (
-               "<img src='".chemin_image('compat-16.png')."' 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 id='debug_boucle'><fieldset$id><legend>"
-                       . "<a href='".$self."#f_".substr($fonc, 0, 37)."'> &#8593; "
-                       . ($legend ? $legend : $mode)
-                       . "</a></legend>"
-                       . $texte
-                       . "</fieldset></div>"
-                       . "</div>");
+               "<img src='" . chemin_image('compat-16.png') . "' 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 id='debug_boucle'><fieldset$id><legend>"
+               . "<a href='" . $self . "#f_" . substr($fonc, 0, 37) . "'> &#8593; "
+               . ($legend ? $legend : $mode)
+               . "</a></legend>"
+               . $texte
+               . "</fieldset></div>"
+               . "</div>");
 }
 
 
-// http://doc.spip.org/@emboite_texte
-function emboite_texte($res, $fonc = '', $self = ''){
+// http://code.spip.net/@emboite_texte
+function emboite_texte($res, $fonc = '', $self = '') {
        $errs = $res->err;
        $texte = $res->entete . ($errs ? '' : $res->page);
 
-       if (!$texte and !$errs)
+       if (!$texte and !$errs) {
                return array(ancre_texte('', array('', '')), false);
-       if (!$errs)
+       }
+       if (!$errs) {
                return array(ancre_texte($texte, array('', '')), true);
+       }
 
-       if (!isset($GLOBALS['debug_objets'])){
+       if (!isset($GLOBALS['debug_objets'])) {
 
                $colors = array('#e0e0f0', '#f8f8ff');
                $encore = count_occ($errs);
@@ -546,17 +601,17 @@ function emboite_texte($res, $fonc = '', $self = ''){
 
                $i = 0;
                $style = "style='text-align: right; padding-right: 5px'";
-               foreach ($errs as $r){
+               foreach ($errs as $r) {
                        $i++;
                        list($msg, $ligne, $col) = $r;
                        #spip_log("$r = list($msg, $ligne, $col");
-                       if (isset($encore2[$msg]))
+                       if (isset($encore2[$msg])) {
                                $ref = ++$encore2[$msg];
-                       else {
+                       else {
                                $encore2[$msg] = $ref = 1;
                        }
                        $err .= "<tr  style='background-color: "
-                               . $colors[$i%2]
+                               . $colors[$i % 2]
                                . "'><td $style><a href='#debut_err'>"
                                . $i
                                . "</a></td><td $style>"
@@ -577,44 +632,47 @@ function emboite_texte($res, $fonc = '', $self = ''){
                        . "</a></h2><table id='debut_err' style='width: 100%'>"
                        . $err
                        . " </table><a id='fin_err'></a>";
+
                return array(ancre_texte($texte, $fautifs), $err);
-       }
-       else {
+       } else {
                list($msg, $fermant, $ouvrant) = $errs[0];
                $rf = reference_boucle_debug($fermant, $fonc, $self);
                $ro = reference_boucle_debug($ouvrant, $fonc, $self);
                $err = $msg .
                        "<a href='#L" . $fermant . "'>$fermant</a>$rf<br />" .
                        "<a href='#L" . $ouvrant . "'>$ouvrant</a>$ro";
+
                return array(ancre_texte($texte, array(array($ouvrant), array($fermant))), $err);
        }
 }
 
-// http://doc.spip.org/@count_occ
-function count_occ($regs){
+// http://code.spip.net/@count_occ
+function count_occ($regs) {
        $encore = array();
-       foreach ($regs as $r){
-               if (isset($encore[$r[0]]))
+       foreach ($regs as $r) {
+               if (isset($encore[$r[0]])) {
                        $encore[$r[0]]++;
-               else
+               } else {
                        $encore[$r[0]] = 1;
+               }
        }
+
        return $encore;
 }
 
-function debusquer_navigation_squelettes($self){
-       global $debug_objets, $spip_lang_right;
+function debusquer_navigation_squelettes($self) {
 
        $res = '';
-       $boucles = !empty($debug_objets['boucle']) ? $debug_objets['boucle'] : '';
-       $contexte = $debug_objets['contexte'];
+       $boucles = !empty($GLOBALS['debug_objets']['boucle']) ? $GLOBALS['debug_objets']['boucle'] : '';
+       $contexte = $GLOBALS['debug_objets']['contexte'];
        $t_skel = _T('squelette');
-       foreach ($debug_objets['sourcefile'] as $nom => $sourcefile){
+       foreach ($GLOBALS['debug_objets']['sourcefile'] as $nom => $sourcefile) {
                $self2 = parametre_url($self, 'var_mode_objet', $nom);
                $nav = !$boucles ? '' : debusquer_navigation_boucles($boucles, $nom, $self, $sourcefile);
-               $temps = !isset($debug_objets['profile'][$sourcefile]) ? '' : _T('zbug_profile', array('time' => $debug_objets['profile'][$sourcefile]));
+               $temps = !isset($GLOBALS['debug_objets']['profile'][$sourcefile]) ? '' : _T('zbug_profile',
+                       array('time' => $GLOBALS['debug_objets']['profile'][$sourcefile]));
 
-               $res .= "<fieldset id='f_".$nom."'><legend>"
+               $res .= "<fieldset id='f_" . $nom . "'><legend>"
                        . $t_skel
                        . ' '
                        . $sourcefile
@@ -629,22 +687,23 @@ function debusquer_navigation_squelettes($self){
                        . "'>"
                        . _T('zbug_calcul')
                        . "</a></legend>"
-                       . (!$temps ? '' : ("\n<span style='display:block;float:$spip_lang_right'>$temps</span><br />"))
+                       . (!$temps ? '' : ("\n<span style='display:block;float:" . $GLOBALS['spip_lang_right'] . "'>$temps</span><br />"))
                        . debusquer_contexte($contexte[$sourcefile])
-                       . (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
-                       . "</fieldset>\n";
+               . (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
+               . "</fieldset>\n";
        }
+
        return $res;
 }
 
-function debusquer_navigation_boucles($boucles, $nom_skel, $self, $nom_source){
+function debusquer_navigation_boucles($boucles, $nom_skel, $self, $nom_source) {
        $i = 0;
        $res = '';
        $var_mode_objet = _request('var_mode_objet');
        $gram = preg_match('/[.](\w+)$/', $nom_source, $r) ? $r[1] : '';
 
-       foreach ($boucles as $objet => $boucle){
-               if (substr($objet, 0, strlen($nom_skel))==$nom_skel){
+       foreach ($boucles as $objet => $boucle) {
+               if (substr($objet, 0, strlen($nom_skel)) == $nom_skel) {
                        $i++;
                        $nom = $boucle->id_boucle;
                        $req = $boucle->type_requete;
@@ -652,7 +711,7 @@ function debusquer_navigation_boucles($boucles, $nom_skel, $self, $nom_source){
                        $self2 = $self . "&amp;var_mode_objet=" . $objet;
 
                        $res .= "\n<tr style='background-color: " .
-                               ($i%2 ? '#e0e0f0' : '#f8f8ff') .
+                               ($i % 2 ? '#e0e0f0' : '#f8f8ff') .
                                "'><td  align='right'>$i</td><td>\n" .
                                "<a  class='debug_link_boucle' href='" .
                                $self2 .
@@ -671,7 +730,7 @@ function debusquer_navigation_boucles($boucles, $nom_skel, $self, $nom_source){
                                "'>" .
                                _T('zbug_calcul') .
                                "</a></td><td>\n" .
-                               (($var_mode_objet==$objet) ? "<b>$nom</b>" : $nom) .
+                               (($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom) .
                                "</td><td>\n" .
                                $req .
                                "</td><td>\n" .
@@ -679,21 +738,26 @@ function debusquer_navigation_boucles($boucles, $nom_skel, $self, $nom_source){
                                "</td></tr>";
                }
        }
+
        return $res;
 }
 
-function debusquer_source($objet, $affiche){
+function debusquer_source($objet, $affiche) {
        $quoi = $GLOBALS['debug_objets'][$affiche][$objet];
-       $nom = $GLOBALS['debug_objets']['boucle'][$objet]->id_boucle;
+       if (!empty($GLOBALS['debug_objets']['boucle'][$objet]->id_boucle)) {
+               $nom = $GLOBALS['debug_objets']['boucle'][$objet]->id_boucle;
+       } else {
+               $nom = $GLOBALS['debug_objets']['sourcefile'][$objet];
+       }
        $res2 = "";
 
-       if ($affiche=='resultat'){
+       if ($affiche == 'resultat') {
                $legend = $nom;
                $req = $GLOBALS['debug_objets']['requete'][$objet];
-               if (function_exists('traite_query')){
+               if (function_exists('_mysql_traite_query')) {
                        $c = strtolower(_request('connect'));
                        $c = $GLOBALS['connexions'][$c ? $c : 0]['prefixe'];
-                       $req = traite_query($req, '', $c);
+                       $req = _mysql_traite_query($req, '', $c);
                }
                //  permettre le copier/coller facile
                // $res = ancre_texte($req, array(), true);
@@ -705,11 +769,11 @@ function debusquer_source($objet, $affiche){
                //  eviter l'affichage de milliers de lignes
                //  personnalisation possible dans mes_options
                $max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
-               while ($retours_sql = sql_fetch($ress_req)){
-                       if ($num<=$max_aff){
-                               $brut_sql .= "<h3>" . ($num==1 ? $num . " sur " . sql_count($ress_req) : $num) . "</h3>";
+               while ($retours_sql = sql_fetch($ress_req)) {
+                       if ($num <= $max_aff) {
+                               $brut_sql .= "<h3>" . ($num == 1 ? $num . " sur " . sql_count($ress_req) : $num) . "</h3>";
                                $brut_sql .= "<p>";
-                               foreach ($retours_sql as $key => $val){
+                               foreach ($retours_sql as $key => $val) {
                                        $brut_sql .= "<strong>" . $key . "</strong> => " . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
                                }
                                $brut_sql .= "</p>";
@@ -717,26 +781,23 @@ function debusquer_source($objet, $affiche){
                        $num++;
                }
                $res2 = interdire_scripts($brut_sql);
-               foreach ($quoi as $view){
+               foreach ($quoi as $view) {
                        //  ne pas afficher les $contexte_inclus
                        $view = preg_replace(",<\?php.+\?[>],Uims", "", $view);
-                       if ($view){
+                       if ($view) {
                                $res2 .= "\n<br /><fieldset>" . interdire_scripts($view) . "</fieldset>";
                        }
                }
 
-       }
-       elseif ($affiche=='code'){
+       } elseif ($affiche == 'code') {
                $legend = $nom;
                $res = ancre_texte("<" . "?php\n" . $quoi . "\n?" . ">");
-       }
-       elseif ($affiche=='boucle'){
+       } elseif ($affiche == 'boucle') {
                $legend = _T('zbug_boucle') . ' ' . $nom;
                // Le compilateur prefixe le nom des boucles par l'extension du fichier source.
                $gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
                $res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
-       }
-       elseif ($affiche=='squelette'){
+       } elseif ($affiche == 'squelette') {
                $legend = $GLOBALS['debug_objets']['sourcefile'][$objet];
                $res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]);
        }
@@ -744,32 +805,30 @@ function debusquer_source($objet, $affiche){
        return array($legend, $res, $res2);
 }
 
-// http://doc.spip.org/@debusquer_entete
-function debusquer_entete($titre, $corps){
-       global $debug_objets;
+// http://code.spip.net/@debusquer_entete
+function debusquer_entete($titre, $corps) {
+
        include_spip('balise/formulaire_admin');
        include_spip('public/assembler'); // pour inclure_balise_dynamique
        include_spip('inc/texte'); // pour corriger_typo
 
        return _DOCTYPE_ECRIRE .
-               html_lang_attributes() .
-               "<head>\n<title>" .
-               ('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
-                       _T('admin_debug') . ' ' . $titre . ' (' .
-                       supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
-               ")</title>\n" .
-               "<meta http-equiv='Content-Type' content='text/html" .
-               (($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
-               "' />\n" .
-               http_script('', 'jquery.js')
-               . "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
-               . "' type='text/css' />" .
-               "</head>\n" .
-               "<body style='margin:0 10px;'>\n" .
-               "<div id='spip-debug-header'>" .
-               $corps .
-               inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $debug_objets), false) .
-               '</div></body></html>';
+       html_lang_attributes() .
+       "<head>\n<title>" .
+       ('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
+               _T('admin_debug') . ' ' . $titre . ' (' .
+               supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
+       ")</title>\n" .
+       "<meta http-equiv='Content-Type' content='text/html" .
+       (($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
+       "' />\n" .
+       http_script('', 'jquery.js')
+       . "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
+       . "' type='text/css' />" .
+       "</head>\n" .
+       "<body style='margin:0 10px;'>\n" .
+       "<div id='spip-debug-header'>" .
+       $corps .
+       inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false) .
+       '</div></body></html>';
 }
-
-?>