Subversion Repositories Applications.framework

Rev

Rev 216 | Rev 241 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 216 Rev 232
Line 2... Line 2...
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Classe de gestion des exceptions.
4
 * Classe de gestion des exceptions.
5
 * C'est un Singleton.
5
 * C'est un Singleton.
6
 *
6
 *
7
 * PHP Version 5
-
 
8
 *
-
 
9
 * @category  Class
7
 * @category	PHP 5.2
10
 * @package   Framework
8
 * @package	Framework
11
 * @author	aurelien <aurelien@tela-botanica.org>
9
 * @author		Aurélien PERONNET <aurelien@tela-botanica.org>
12
 * @copyright 2009 Tela-Botanica
10
 * @copyright	Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
13
 * @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
14
 * @license   http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
12
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
15
 * @version   SVN: $$Id: GestionnaireException.php 216 2010-11-10 11:29:59Z jpm $$
13
 * @version	$Id: GestionnaireException.php 232 2010-11-19 17:12:58Z jpm $$
16
 * @link	  /doc/framework/
14
 * @link		/doc/framework/
17
 *
15
 *
18
 */
16
 */
19
class GestionnaireException {
17
class GestionnaireException {
Line 20... Line 18...
20
	
18
	
Line 52... Line 50...
52
		self::$contexte = Config::get('fw_debogage_contexte');
50
		self::$contexte = Config::get('fw_debogage_contexte');
53
		self::$logger = Config::get('fw_log_debogage');
51
		self::$logger = Config::get('fw_log_debogage');
54
		self::$afficher = Config::get('fw_debogage');
52
		self::$afficher = Config::get('fw_debogage');
55
	}
53
	}
Line -... Line 54...
-
 
54
	
-
 
55
	/**
-
 
56
	 * Renvoie le nombre d'exceptions et d'erreurs levées.
-
 
57
	 * @see getExceptions() pour obtenir les exceptions formatées.
-
 
58
	 * @since 0.3 
-
 
59
	 * @return int le nombre d'exception actuellement levées
-
 
60
	 */
-
 
61
	public static function getExceptionsNbre() {
-
 
62
		return count(self::$exceptions);
-
 
63
	}
-
 
64
	
56
	
65
	/** 
-
 
66
	 * Renvoie le booleen définissant si l'on affiche le contexte ou non 
-
 
67
	 * @return bool true si on affiche le contexte sinon false. 
57
	/** Renvoie le booleen définissant si l'on affiche le contexte ou non */
68
	 */
58
	public static function getContexte() {
69
	public static function getContexte() {
59
		return self::$contexte;
70
		return self::$contexte;
Line 60... Line 71...
60
	}
71
	}
Line 96... Line 107...
96
		}
107
		}
97
		return null;
108
		return null;
98
	}
109
	}
Line 99... Line 110...
99
 
110
 
-
 
111
	/**
-
 
112
	 * Renvoie les exceptions au format (X)HTML ou bien au format texte suivant le mode d'utilisation de PHP.
-
 
113
	 * @since 0.3
100
	/**
114
	 * @deprecated
101
	 * Renvoie les exceptions au format (X)HTML
115
	 * @see getExceptionsFormatees()
102
	 * ou bien au format texte suivant le mode d'utilisation de PHP
116
	 * @return string les exceptions formatées en texte ou (X)HTML.
103
	 */
117
	 */
-
 
118
	public static function getExceptions() {
-
 
119
		return self::getExceptionsFormatees();
-
 
120
	}
-
 
121
	
-
 
122
	/**
-
 
123
	 * Renvoie les exceptions au format (X)HTML ou bien au format texte suivant le mode d'utilisation de PHP.
-
 
124
	 * @since 0.3
-
 
125
	 * @return string les exceptions formatées en texte ou (X)HTML.
-
 
126
	 */
104
	public static function getExceptions() {
127
	public static function getExceptionsFormatees() {
-
 
128
		$retour = '';
105
		$retour = '';
129
		if (self::getExceptionsNbre() > 0) {
106
		foreach (self::$exceptions as $cle => $e) {
130
			foreach (self::$exceptions as $cle => $e) {
107
			switch (self::$mode) {
131
				switch (self::$mode) {
108
				case self::MODE_CLI :
132
					case self::MODE_CLI :
-
 
133
						$retour .= self::formaterExceptionTxt($e);
-
 
134
						break;
109
					$retour .= $e->getMessage()."\n";
135
					default:
-
 
136
						$retour .= self::formaterExceptionXhtml($e);
110
					$retour .= 'Fichier : '.$e->getFile()."\n";
137
				}
111
					$retour .= 'Ligne : '.$e->getLine()."\n";
138
				// Nous vidons le tableau des exceptions au fur et à mesure pour éviter le réaffichage avec le destructeur.
112
					if (self::getContexte()) {
-
 
113
						$retour .= 'Contexte : '."\n".print_r($e->getTraceAsString(), true)."\n";
139
				unset(self::$exceptions[$cle]);
114
					}
140
			}
115
					break;
141
		}
-
 
142
		return $retour;
-
 
143
	}
-
 
144
	
116
				default:
145
	/**
117
					$retour .= '<div class="debogage">'."\n";
146
	 * Renvoie le tableau d'objets Exception générées par le script PHP triées du niveau de sévérité le plus élevé au moins élevé.
-
 
147
	 * Format du tableau :
118
					$retour .= $e->getMessage()."\n";
148
	 * array{sévérité_1 = array{Exception1, Exception2, Exception3,...}, sévérité_1 =  array{Exception1, Exception2, ...}, ...};
-
 
149
	 * ATTENTION : si vous utilisez cette méthode, c'est à vous de gérer l'affichage des Exceptions. Le gestionnaire d'exception
-
 
150
	 * n'enverra plus rien au navigateur ou à la console.
119
					$retour .= '<span class="debogage_fichier">'.'Fichier : '.$e->getFile().'</span>'."\n";
151
	 * @since 0.3
-
 
152
	 * @return array le tableau trié d'objet Exception.
120
					$retour .= '<span class="debogage_ligne">'.'Ligne : '.$e->getLine().'</span>'."\n";
153
	 */
121
					if (self::getContexte()) {
154
	public static function getExceptionsTriees() {
-
 
155
		$retour = array();
122
						$retour .= '<pre>'."\n";
156
		if (self::getExceptionsNbre() > 0) {
123
						$retour .= '<strong>Contexte : </strong>'."\n".print_r($e->getTraceAsString(), true)."\n";
157
			foreach (self::$exceptions as $cle => $e) {
124
						$retour .= '</pre>'."\n";
-
 
-
 
158
				$retour[$e->getSeverity()][] = $e;
125
					}
159
				// Nous vidons le tableau des exceptions au fur et à mesure pour éviter le réaffichage avec le destructeur.
126
					$retour .= '</div>'."\n";
160
				unset(self::$exceptions[$cle]);
127
			}
-
 
128
			// Nous vidons le tableau des exceptions au fur et à mesure
161
			}
129
			unset(self::$exceptions[$cle]);
162
			ksort($retour);
130
		}
163
		}
131
		return $retour;
164
		return $retour;
Line 132... Line 165...
132
	}
165
	}
133
 
166
 
134
	/**
167
	/**
135
	 * Logue une exception donnée sous une forme lisible si self::logger vaut true.
168
	 * Logue une exception donnée sous une forme lisible si self::logger vaut true.
136
	 * @param Exception	$e l'exception à logger
169
	 * @param Exception	$e l'exception à logger
137
	 */
170
	 */
138
	private static function loggerException($e) {
-
 
139
		if (self::$logger) {
-
 
140
			$erreur = '';
-
 
141
			$erreur .= $e->getMessage()."\n";
171
	private static function loggerException(Exception $e) {
142
			$erreur .= 'Fichier : '.$e->getFile()."\n";
-
 
143
			$erreur .= 'Ligne : '.$e->getLine()."\n";
-
 
144
			if (self::getContexte()) {
-
 
145
				$erreur .= 'Contexte : '."\n".print_r($e->getTraceAsString(), true)."\n";
-
 
146
			}
172
		if (self::$logger) {
147
			$erreur .= "\n";
173
			$message = self::formaterExceptionTxt($e);
148
			Log::ajouterEntree('erreurs', $erreur);
174
			Log::ajouterEntree('erreurs', $message);
-
 
175
		}
-
 
176
	}
-
 
177
	
-
 
178
	/**
-
 
179
	 * Formate en texte une exception passée en paramètre.
-
 
180
	 * @since 0.3
-
 
181
	 * @param Exception l'exception à formater.
-
 
182
	 */
-
 
183
	public static function formaterExceptionTxt(Exception $e) {
-
 
184
		$message = '';
-
 
185
		$message .= $e->getMessage()."\n";
-
 
186
		$message .= 'Fichier : '.$e->getFile()."\n";
-
 
187
		$message .= 'Ligne : '.$e->getLine()."\n";
-
 
188
		if (self::getContexte()) {
-
 
189
			$message .= 'Contexte : '."\n".print_r($e->getTraceAsString(), true)."\n";
-
 
190
		}
-
 
191
		$message .= "\n";
-
 
192
		return $message;
-
 
193
	}
-
 
194
	
-
 
195
	/**
-
 
196
	 * Formate en (X)HTML une exception passée en paramètre.
-
 
197
	 * @since 0.3
-
 
198
	 * @param Exception l'exception à formater.
-
 
199
	 */
-
 
200
	public static function formaterExceptionXhtml(Exception $e) {
-
 
201
		$message = '';
-
 
202
		$message .= '<div class="debogage">'."\n";
-
 
203
		$message .= $e->getMessage()."\n";
-
 
204
		$message .= '<span class="debogage_fichier">'.'Fichier : '.$e->getFile().'</span>'."\n";
-
 
205
		$message .= '<span class="debogage_ligne">'.'Ligne : '.$e->getLine().'</span>'."\n";
-
 
206
		if (self::getContexte()) {
-
 
207
			$message .= '<pre>'."\n";
-
 
208
			$message .= '<strong>Contexte : </strong>'."\n".print_r($e->getTraceAsString(), true)."\n";
-
 
209
			$message .= '</pre>'."\n";
-
 
210
		}
-
 
211
		$message .= '</div>'."\n";
149
		}
212
		return $message;
-
 
213
	}
-
 
214
	
-
 
215
	/**
-
 
216
	 * Lors de la destruction de la classe si des exceptions n'ont pas été affichées, et si le débogage est à true, elles sont
150
	}
217
	 * affichées. 
151
 
218
	 */
152
	public function __destruct() {
219
	public function __destruct() {
153
		// Si des erreurs n'ont pas été affichée nous forçons leur affichage
220
		// Si des erreurs n'ont pas été affichée nous forçons leur affichage
154
		if (self::$afficher && count(self::$exceptions) > 0) {
221
		if (self::$afficher && self::getExceptionsNbre() > 0) {
155
			echo self::getExceptions();
222
			echo self::getExceptionsFormatees();
Line 156... Line 223...
156
		}
223
		}
157
	}
224
	}
158
 
225