/***************************************************************************\
* 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. *
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.
*
* 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);
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'])) {
// 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;
}
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>"
// 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');
// 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>';
// 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;
}
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;">'
}
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'];
}
$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)."'> ↑ "
. ($legend ? $legend : $mode)
"</td><td>\n" .
$req .
"</td><td>\n" .
- $crit .
+ spip_htmlspecialchars($crit) .
"</td></tr>";
}
}
$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>";
}
. "' 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>';