* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) * @license GNU-GPL-v3 * @license CECILL-v2 */ class Debug { const MODE_ECHO = 'echo'; const MODE_NOTICE = 'e_user_notice'; /** * mode de php (cli ou sapi) */ protected static $mode = null; /** * Accesseur pour le mode * @return string le mode de php */ public static function getMode() { if (self::$mode === null) { self::$mode = PHP_SAPI; } return self::$mode; } /** * Equivalent de var_dump * @param mixed $variable la variable à dumper * @param string $mot_cle le mot cle à associer à la variable * @param boolean $echo si true on affiche le résultat, si false on ne renvoie que la chaine sans l'afficher * @return string la chaine à afficher representant le dump ou null si echo */ public static function dump($variable, $mot_cle = null, $echo = false) { // var_dump de la variable dans un buffer et récupération de la sortie ob_start(); var_dump($variable); $sortie = ob_get_clean(); // Pré-traitement de la sortie $sortie = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $sortie); // Traitement général du débogage return self::traiterDebogage($mot_cle, $sortie, $echo); } /** * Equivalent de print_r. * @param mixed $variable la variable à afficher * @param string $mot_cle le mot cle à associer * @param boolean $echo faire un echo ou non * @return string la chaine contenant la variable printée ou null si echo */ public static function printr($variable, $mot_cle = null, $echo = false) { // Récupération de la sortie $sortie = print_r($variable, true); // Traitement général du débogage return self::traiterDebogage($mot_cle, $sortie, $echo); } /** * Traite une chaine de débogage et les mots clés associés * @param string $mot_cle le mot à associer à la chaine * @param string $sortie le chaine de debogage * @param boolean $echo faire un echo du resultat ou non * @return string la chaine de debogage formatée ou bien null si echo */ private static function traiterDebogage($mot_cle, $sortie, $echo) { // Formate le mot-clé $mot_cle = self::formaterMotCle($mot_cle); // Traitement de la sortie $sortie = self::traiterSortieSuivantMode($mot_cle, $sortie); // Affichage et/ou retour self::verifierParametresConfig(); if (Config::get('fw_debogage') == true) { if ($echo === true || Config::get('fw_debogage_mode') == self::MODE_ECHO) { echo $sortie; return null; } else if (Config::get('fw_debogage_mode') == self::MODE_NOTICE) { trigger_error($sortie, E_USER_NOTICE); return null; } else { return $sortie; } } } /** * formate un mot clé donné * @param string $mot_cle le mot clé à formaté * @return string le mot clé formaté ou bien un chaine vide le mot clé est null ou vide */ private static function formaterMotCle($mot_cle) { return ($mot_cle === null) ? '' : rtrim($mot_cle).' '; } /** * traite la sortie de la chaine de débogage suivant le mode de php * @param string $mot_cle le mot clé associé à la chaine * @param string $sortie la chaine de débogage * @return string la sortie formatée pour le mode en cours */ private static function traiterSortieSuivantMode($mot_cle, $sortie) { $corps = $mot_cle.PHP_EOL.$sortie; if (self::getMode() == 'cli') { $sortie = PHP_EOL.$corps.PHP_EOL; } else { $sortie = '
'.$corps.'
'; } return $sortie; } /** * Vérifie que tous les paramêtres de config nécessaires au fonctionnement de cette classe existe dans les fichiers * de configurations. */ private static function verifierParametresConfig() { $ok = true; $parametres = array('fw_debogage', 'fw_debogage_mode'); foreach ($parametres as $param) { if (is_null(Config::get($param))) { $classe = get_class(); $m = "L'utilisation de la classe $classe nécessite de définir '$param' dans un fichier de configuration."; trigger_error($m, E_USER_WARNING); $ok = false; } } return $ok; } } ?>