[SPIP] ~maj v3.0.14-->v3.0.17
[ptitvelo/web/www.git] / www / ecrire / public / debusquer.php
index 42579c3..1fb6dd8 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2012                                                *
+ *  Copyright (c) 2001-2014                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -13,6 +13,7 @@
 if (!defined('_ECRIRE_INC_VERSION')) return;
 
 include_spip('public/decompiler');
+include_spip('inc/filtres_mini');
 
 // Le debusqueur repose sur la globale debug_objets,
 // affectee par le compilateur et le code produit par celui-ci.
@@ -35,21 +36,49 @@ include_spip('public/decompiler');
  *
  * Sert pour les tests unitaires
  */
-define('_DEBUG_MAX_SQUELETTE_ERREURS', 9);
+defined('_DEBUG_MAX_SQUELETTE_ERREURS') || define('_DEBUG_MAX_SQUELETTE_ERREURS', 9);
 
-//
-// Point d'entree general, 
-// pour les appels involontaires ($message non vide => erreur)
-// et volontaires (var_mode et var_profile) 
-// Si pas d'autorisation, les erreurs ne sont pas affichees
-// (mais seront dans les logs)
-// Si l'erreur vient de SPIP,  en parler sur spip@rezo.net
 
-function public_debusquer_dist($message = '', $lieu = ''){
+/**
+ * Point d'entrée pour les erreurs de compilation
+ *
+ * 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
+ *     - vide pour afficher les messages d'erreurs
+ * @param string|Contexte $lieu
+ *     Contexte : lieu d'origine de l'erreur
+ * @param array $opt
+ *     Options pour debug ou tests unitaires
+ *     - 'erreurs' = 'get' : Retourne le tableau des 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;
        static $tableau_des_erreurs = array();
 
+       // Pour des tests unitaires, pouvoir récupérer les erreurs générées
+       if (isset($opt['erreurs'])) {
+               if ($opt['erreurs'] == 'get') {
+                       return $tableau_des_erreurs;
+               }
+               if ($opt['erreurs'] == 'reset') {
+                       $tableau_des_erreurs = array();
+                       return true;
+               }
+       }
+
        // Erreur ou appel final ?
        if ($message){
                $message = debusquer_compose_message($message);
@@ -138,7 +167,7 @@ function debusquer_compose_message($msg){
 function debusquer_bandeau($erreurs){
 
        if (!empty($erreurs)){
-               $n = count($erreurs) . ' ' . _T('zbug_erreur_squelette');
+               $n = array(count($erreurs) . ' ' . _T('zbug_erreur_squelette'));
                return debusquer_navigation($erreurs, $n);
        }
        elseif (!empty($GLOBALS['tableau_des_temps'])) {
@@ -170,7 +199,7 @@ 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 = '', $id = 'debug-nav'){
+function debusquer_navigation($tableau, $caption = array(), $id = 'debug-nav'){
 
        if (_request('exec')=='valider_xml') return '';
        $GLOBALS['bouton_admin_debug'] = true;
@@ -211,15 +240,17 @@ function debusquer_navigation($tableau, $caption = '', $id = 'debug-nav'){
        }
 
        return "\n<table id='$id'>"
-               . "<caption>"
-               . $caption
+               . "<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('message')
+               . _T('public:message')
                . "</th><th>"
                . _T('squelette')
                . "</th><th>"
@@ -275,9 +306,9 @@ function debusquer_requete($message){
 
        // Requete erronee
        $err = "<b>" . _T('avis_erreur_mysql') . " $errno</b><br /><tt>\n"
-               . htmlspecialchars($msg)
+               . spip_htmlspecialchars($msg)
                . "\n<br /><span style='color: red'><b>"
-               . htmlspecialchars($query)
+               . spip_htmlspecialchars($query)
                . "</b></span></tt><br />";
        //. aide('erreur_mysql');
 
@@ -364,15 +395,12 @@ function reference_boucle_debug($n, $nom, $self){
 
 // http://doc.spip.org/@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);
        $res = '';
 
-       $s = highlight_string(str_replace('</script>', '</@@@@@>', $texte), true);
-
-       $s = str_replace('/@@@@@', '/script', // bug de highlight_string
-               str_replace('</font>', '</span>',
-                       str_replace('<font color="', '<span style="color: ', $s)));
+       $s = highlight_string($texte, true);
        if (substr($s, 0, 6)=='<code>'){
                $s = substr($s, 6);
                $res = '<code>';
@@ -407,8 +435,8 @@ function ancre_texte($texte, $fautifs = array(), $nocpt = false){
                        // tentative de pointer sur la colonne fautive;
                        // marche pas car highlight_string rajoute des entites. A revoir.
                        // $m = $flignes[$i][0];
-                       //  $ligne = substr($ligne, 0, $m-1) .
-                       //  sprintf($formaterr, substr($ligne,$m));
+                       // $ligne = substr($ligne, 0, $m-1) .
+                       // sprintf($formaterr, substr($ligne,$m));
                        $bg = $formaterr;
                } else {
                        $indexmesg = $ancre;
@@ -419,8 +447,8 @@ function ancre_texte($texte, $fautifs = array(), $nocpt = false){
        }
 
        return "<div id='T$ancre'>"
-               . '<div onclick="javascript:'
-               . "\$(this).parent().find('a').toggle();"
+               . '<div onclick="'
+               . "jQuery(this).parent().find('a').toggle();"
                . '" title="'
                . _T('masquer_colonne')
                . '" style="cursor: pointer;">'
@@ -456,7 +484,7 @@ function debusquer_squelette($fonc, $mode, $self){
                }
                else
                        return strlen(trim($res))
-                       ? "<div id='spip-debug'>$res</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>"
                        // cas de l'appel sur erreur: montre la page
                        : $GLOBALS['debug_objets']['resultat']['tout'];
        }
@@ -476,7 +504,7 @@ function debusquer_squelette($fonc, $mode, $self){
                $res = $id = '';
        }
        return !trim($texte) ? '' : (
-               "<div id='spip-debug'>$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 id='debug_boucle'><fieldset$id><legend>"
                        . "<a href='".$self."#f_".substr($fonc, 0, 37)."'> &#8593; "
                        . ($legend ? $legend : $mode)
@@ -647,7 +675,7 @@ function debusquer_navigation_boucles($boucles, $nom_skel, $self, $nom_source){
                                "</td><td>\n" .
                                $req .
                                "</td><td>\n" .
-                               $crit .
+                               spip_htmlspecialchars($crit) .
                                "</td></tr>";
                }
        }
@@ -682,7 +710,7 @@ function debusquer_source($objet, $affiche){
                                $brut_sql .= "<h3>" . ($num==1 ? $num . " sur " . sql_count($ress_req) : $num) . "</h3>";
                                $brut_sql .= "<p>";
                                foreach ($retours_sql as $key => $val){
-                                       $brut_sql .= "<strong>" . $key . "</strong> => " . htmlspecialchars(couper($val, 150)) . "<br />\n";
+                                       $brut_sql .= "<strong>" . $key . "</strong> => " . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
                                }
                                $brut_sql .= "</p>";
                        }
@@ -738,10 +766,7 @@ function debusquer_entete($titre, $corps){
                . "' type='text/css' />" .
                "</head>\n" .
                "<body style='margin:0 10px;'>\n" .
-               "<div id='spip-debug-hide' style='position: absolute; top: 0px; z-index: 1000; right:0px;'>" .
-               "<a href='#' onClick=\"x = document.getElementById('spip-debug-header'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = ''); return false;\"> + / - </a>" .
-               "</div>" .
-               "<div id='spip-debug-header' style='position: absolute; top: 22px; z-index: 1000;height:97%;left:0px;right:10px;'>" .
+               "<div id='spip-debug-header'>" .
                $corps .
                inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $debug_objets), false) .
                '</div></body></html>';