Subversion Repositories Applications.gtt

Rev

Rev 10 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
10 jpm 1
<?php
48 jpm 2
/*vim: set expandtab tabstop=4 shiftwidth=4: */
10 jpm 3
// +------------------------------------------------------------------------------------------------------+
4
// | PHP version 5.0.4                                                                                    |
5
// +------------------------------------------------------------------------------------------------------+
6
// | Copyright (C) 2005 Tela Botanica (accueil@tela-botanica.org)                                         |
7
// +------------------------------------------------------------------------------------------------------+
8
// | This file is part of eFlore-Debogage.                                                                |
9
// |                                                                                                      |
10
// | Foobar is free software; you can redistribute it and/or modify                                       |
11
// | it under the terms of the GNU General Public License as published by                                 |
12
// | the Free Software Foundation; either version 2 of the License, or                                    |
13
// | (at your option) any later version.                                                                  |
14
// |                                                                                                      |
15
// | Foobar is distributed in the hope that it will be useful,                                            |
16
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
17
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                        |
18
// | GNU General Public License for more details.                                                         |
19
// |                                                                                                      |
20
// | You should have received a copy of the GNU General Public License                                    |
21
// | along with Foobar; if not, write to the Free Software                                                |
22
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
23
// +------------------------------------------------------------------------------------------------------+
24
// CVS : $Id: GestionnaireErreur.class.php,v 1.1 2005/11/15 17:33:49 jp_milcent Exp $
25
/**
26
* Classe de gestion des erreurs.
27
*
28
*
48 jpm 29
*
10 jpm 30
*@package eFlore
31
*@subpackage Debogage
32
//Auteur original :
33
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
34
//Autres auteurs :
35
*@author        aucun
36
*@copyright     Tela-Botanica 2000-2005
37
*@version       $Revision: 1.1 $ $Date: 2005/11/15 17:33:49 $
38
// +------------------------------------------------------------------------------------------------------+
39
*/
40
 
41
// +------------------------------------------------------------------------------------------------------+
42
// |                                            ENTETE du PROGRAMME                                       |
43
// +------------------------------------------------------------------------------------------------------+
44
 
45
 
46
// +------------------------------------------------------------------------------------------------------+
47
// |                                            CORPS du PROGRAMME                                        |
48
// +------------------------------------------------------------------------------------------------------+
49
 
50
 
51
/**
52
 * Classe GestionnaireErreur
48 jpm 53
 *
10 jpm 54
 * Gérer les erreurs PHP et SQL.
55
 */
48 jpm 56
class GestionnaireErreur {
10 jpm 57
	/*** Attributes: ***/
58
 
59
	/**
48 jpm 60
	* Contient la liste des erreurs.
61
	* @access private
62
	*/
10 jpm 63
	private $erreurs;
64
 
65
	/**
48 jpm 66
	* Permet de savoir si on veut faire apparaître ou pas le contexte de l'erreur,
67
	* c'est à dire le contenu des variables.
68
	* @access private
69
	*/
10 jpm 70
	private $contexte;
48 jpm 71
 
10 jpm 72
	/**
48 jpm 73
	* Permet de savoir si on veut faire apparaître ou pas les erreurs Pear.
74
	* @access private
75
	*/
76
	private $pear;
77
 
78
	/**
79
	* Chaine de caractères permettant d'identifier les erreurs de la bibliothèque Pear.
80
	* @access private
81
	*/
82
	private $pear_chaine;
83
 
84
	/**
85
	* Contient le niveau d'erreur courrant. Celui que l'on donne à la fonction
86
	* error_reporting().
87
	* @access private
88
	*/
10 jpm 89
	private $niveau_erreur_courrant;
48 jpm 90
 
10 jpm 91
	/*** Constructeur: ***/
48 jpm 92
 
10 jpm 93
	/**
48 jpm 94
	* Construit le gestionnaire d'erreur.
95
	*
96
	* @return void
97
	* @access public
98
	*/
99
	public function __construct($bool_contexte = false, $int_niveau = 2048, $bool_pear = false, $str_pear = '')
100
	{
10 jpm 101
		$this->erreurs = array();
48 jpm 102
		$this->setContexte($bool_contexte);
103
		$this->setNiveauErreurCourrant($int_niveau);
104
		$this->setPear($bool_pear);
105
		$this->setPearChaine($str_pear);
10 jpm 106
		set_error_handler(array($this, 'gererErreur'));
107
	} // end of member function __construct
48 jpm 108
 
109
 
10 jpm 110
	/*** Destructeur: ***/
111
	public function __destruct()
112
	{
113
		echo $this->retournerErreur();
114
	}
48 jpm 115
 
10 jpm 116
	/*** Accesseurs: ***/
48 jpm 117
 
10 jpm 118
	/**
48 jpm 119
	* Récupère le tableau des erreurs.
120
	*
121
	* @return array
122
	* @access public
123
	*/
124
	public function getErreur()
125
	{
10 jpm 126
		return $this->erreurs;
127
	}
128
 
129
	/**
48 jpm 130
	* Ajoute une erreur à la liste.
131
	*
132
	* @param array une_erreur
133
	* @return void
134
	* @access public
135
	*/
136
	public function setErreur($une_erreur)
137
	{
10 jpm 138
		$tab_erreurs =& $this->getErreur();
139
		array_push($tab_erreurs, $une_erreur);
140
	}
141
 
142
	/**
48 jpm 143
	* Récupère la valeur du contexte.
144
	*
145
	* @return boolean
146
	* @access public
147
	*/
148
	public function getContexte()
149
	{
10 jpm 150
		return $this->contexte;
151
	}
152
 
153
	/**
48 jpm 154
	* Définit si oui ou non le contexte sera affiché.
155
	*
156
	* @param boolean un_contexte
157
	* @return  void
158
	* @access public
159
	*/
160
	public function setContexte( $un_contexte )
161
	{
10 jpm 162
		$this->contexte = $un_contexte;
163
	}
48 jpm 164
 
10 jpm 165
	/**
48 jpm 166
	* Récupère la valeur de l'attribut Pear.
167
	*
168
	* @return boolean true pour afficher les erreurs Pear sinon false.
169
	* @access public
170
	*/
171
	public function getPear()
172
	{
173
		return $this->pear;
174
	}
175
 
176
	/**
177
	* Définit si oui ou non les erreurs Pear seront affichées.
178
	*
179
	* @param boolean true pour afficher les erreurs Pear sinon false.
180
	* @return  void
181
	* @access public
182
	*/
183
	public function setPear( $p )
184
	{
185
		$this->pear = $p;
186
	}
187
 
188
	/**
189
	* Récupère la valeur de l'attribut pear_chaine.
190
	*
191
	* @return string la chaine de caractère identifiant les erreurs Pear.
192
	* @access public
193
	*/
194
	public function getPearChaine()
195
	{
196
		return $this->pear_chaine;
197
	}
198
 
199
	/**
200
	* Définit la chaine de caractère identifiant les erreurs Pear.
201
	*
202
	* @param string la chaine de caractère identifiant les erreurs Pear.
203
	* @return  void
204
	* @access public
205
	*/
206
	public function setPearChaine( $pc )
207
	{
208
		$this->pear_chaine = $pc;
209
	}
210
 
211
 
212
	/**
213
	* Récupère le niveau d'erreur courrant.
214
	*
215
	* @return int le niveau d'erreur courrant.
216
	* @access public
217
	*/
218
	public function getNiveauErreurCourrant()
219
	{
10 jpm 220
		return (int)$this->niveau_erreur_courrant;
221
	}
222
 
223
	/**
48 jpm 224
	* Définit le niveau d'erreur courrant.
225
	*
226
	* @param int un niveau d'erreur.
227
	* @return void
228
	* @access public
229
	*/
230
	public function setNiveauErreurCourrant($niveau)
231
	{
10 jpm 232
		$this->niveau_erreur_courrant = $niveau;
233
	}
48 jpm 234
 
10 jpm 235
	/*** Méthodes : ***/
48 jpm 236
 
10 jpm 237
	/**
48 jpm 238
	*
239
	* @param int niveau
240
	* @param string message
241
	* @param string fichier
242
	* @param int ligne
243
	* @param boolean contexte
244
	* @return void
245
	* @access public
246
	*/
247
	public function gererErreur( $niveau,  $message,  $fichier,  $ligne,  $contexte )
248
	{
10 jpm 249
		$aso_erreur = array();
250
		// Nous vérifions si nous affichons ou pas l'erreur en fonction du niveau demandé
251
		if ( $niveau <= $this->getNiveauErreurCourrant() ) {
252
			$aso_erreur['niveau'] = $niveau;
253
			$aso_erreur['message'] = $message;
254
			$aso_erreur['fichier'] = $fichier;
255
			$aso_erreur['ligne'] = $ligne;
256
			if ($this->getContexte()) {
257
				$aso_erreur['contexte'] = $contexte;
258
			}
259
			$this->setErreur($aso_erreur);
260
		}
48 jpm 261
 
10 jpm 262
		// Si nous avons à faire à une erreur et non à un warning ou une notice, nous arrêtons l'exécution du script
263
		if ($niveau == E_USER_ERROR) {
264
			echo 	$this->retournerErreur();
265
			exit(1);
266
		}
267
	} // end of member function gererErreur
268
 
269
	/**
270
	 * Retourne l'erreur PHP formatée en XHTML.
271
	 *
272
	 * @return string
273
	 * @access public
274
	 */
48 jpm 275
	public function retournerErreur()
276
	{
10 jpm 277
		$retour = '';
48 jpm 278
		$erreur_pear_nbre = 0;
10 jpm 279
		foreach($this->getErreur() as $aso_erreur) {
280
			if ('<!-- BEGIN sql -->' == substr($aso_erreur['message'], 0, 18)) {
281
				$retour .= $aso_erreur['message'];
282
				continue;
283
			}
48 jpm 284
			// Nous testons les erreurs PEAR pour ne pas en tenir compte
285
			if (!$this->getPear() && stristr($aso_erreur['fichier'], $this->getPearChaine())) {
286
				$erreur_pear_nbre++;
287
			} else {
288
				$retour .= '<p class="attention">'."\n";
289
				$retour .= '<strong>ERREUR</strong><br />'."\n";
290
				$retour .= '<strong>Niveau : </strong>'.$aso_erreur['niveau'].'<br />'."\n";
291
				$retour .= '<strong>Message : </strong>'.$aso_erreur['message'].'<br />'."\n";
292
				$retour .= '<strong>Fichier : </strong>'.$aso_erreur['fichier'].'<br />'."\n";
293
				$retour .= '<strong>Ligne : </strong>'.$aso_erreur['ligne'].'<br />'."\n";
294
				if ($this->getContexte()) {
295
					$retour .= '<pre>'."\n";
296
					$retour .= '<stong>Contexte : </stong>'."\n".print_r($aso_erreur['contexte'], true)."\n";
297
					$retour .= '</pre>'."\n";
298
				}
299
				$retour .= '</p>'."\n";
300
			}
10 jpm 301
		}
48 jpm 302
		if ($erreur_pear_nbre != 0) {
303
			$retour .= '<p class="attention"><strong>Nombre d\'erreurs PEAR : </strong>'.$erreur_pear_nbre.'</p>'."\n";
304
		}
10 jpm 305
		return $retour;
306
	} // end of member function retournerErreur
307
 
308
	/**
48 jpm 309
	* Retourne l'erreur SQL formatée.
310
	*
311
	* @param string fichier
312
	* @param int ligne
313
	* @param string message
314
	* @param string requete
315
	* @param string autres
316
	* @return string
317
	* @static
318
	* @access public
319
	*/
320
	public static function retournerErreurSql( $fichier,  $methode,  $message,  $requete = NULL,  $autres = NULL )
321
	{
10 jpm 322
		$retour = '<!-- BEGIN sql -->';
323
		$retour .= '<div id="zone_erreur">'."\n";
324
		$retour .= '<h1 > ERREUR SQL </h1><br />'."\n";
325
		$retour .= '<dl>'."\n";
326
		$retour .= '<dt> Fichier : </dt> ';
327
		$retour .= '<dd> '.$fichier.'</dd>'."\n";
48 jpm 328
 
10 jpm 329
		$retour .= '<dt> Méthode : </dt> ';
330
		$retour .= '<dd> '.$methode.'</dd>'."\n";
48 jpm 331
 
10 jpm 332
		$retour .= '<dt> Message erreur : </dt> ';
333
		$retour .= '<dd> '.$message.'</dd>'."\n";
48 jpm 334
 
10 jpm 335
		if (!is_null($requete)) {
336
			$retour .= '<dt> Requete : </dt> ';
337
			$retour .= '<dd> '.$requete.' </dd>'."\n";
338
    	}
48 jpm 339
 
10 jpm 340
		if (!is_null($autres)) {
341
			$retour .= '<dt> Autres infos : </dt> ';
342
			$retour .= '<dd> '.$autres.' </dd>'."\n";
343
		}
344
		$retour .= '</dl>'."\n";
345
		$retour .= '</div>'."\n";
346
		$retour .= '<!-- END sql -->'."\n";
48 jpm 347
 
10 jpm 348
		return $retour;
349
	} // end of member function retournerErreurSql
48 jpm 350
 
10 jpm 351
	/**
48 jpm 352
	* Retourne l'erreur SQL formatée selon le format demandé.
353
	*
354
	* @param string fichier
355
	* @param int ligne
356
	* @param string message
357
	* @param string format : txt.
358
	* @return string
359
	* @static
360
	* @access public
361
	*/
10 jpm 362
	public static function formaterMessageErreur( $message, $fichier = null,  $ligne = null,  $format = 'txt' )
363
	{
364
		$retour = '';
365
		if ($format == 'txt') {
366
			$retour .= "\n";
367
			if (!is_null($fichier)) {
368
				$retour .= "\t".'Fichier : '.$fichier."\n";
369
			}
370
			if (!is_null($ligne)) {
371
				$retour .= "\t".'Ligne : '.$ligne."\n";
372
			}
373
			$retour .= "\t".'Message : '.$message."\n";
374
		}
375
		return $retour;
376
	}
48 jpm 377
}
10 jpm 378
 
379
/* +--Fin du code ----------------------------------------------------------------------------------------+
380
*
48 jpm 381
* $Log$
10 jpm 382
*
383
* +-- Fin du code ----------------------------------------------------------------------------------------+
384
*/
385
?>