Subversion Repositories Applications.gtt

Rev

Rev 10 | Go to most recent revision | Blame | Last modification | View Log | RSS feed

<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 5.0.4                                                                                    |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2005 Tela Botanica (accueil@tela-botanica.org)                                         |
// +------------------------------------------------------------------------------------------------------+
// | This file is part of eFlore-Debogage.                                                                |
// |                                                                                                      |
// | Foobar is free software; you can redistribute it and/or modify                                       |
// | it under the terms of the GNU General Public License as published by                                 |
// | the Free Software Foundation; either version 2 of the License, or                                    |
// | (at your option) any later version.                                                                  |
// |                                                                                                      |
// | Foobar is distributed in the hope that it will be useful,                                            |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                        |
// | GNU General Public License for more details.                                                         |
// |                                                                                                      |
// | You should have received a copy of the GNU General Public License                                    |
// | along with Foobar; if not, write to the Free Software                                                |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: GestionnaireErreur.class.php,v 1.1 2005/11/15 17:33:49 jp_milcent Exp $
/**
* Classe de gestion des erreurs.
*
*
*
*@package eFlore
*@subpackage Debogage
//Auteur original :
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
//Autres auteurs :
*@author        aucun
*@copyright     Tela-Botanica 2000-2005
*@version       $Revision: 1.1 $ $Date: 2005/11/15 17:33:49 $
// +------------------------------------------------------------------------------------------------------+
*/

// +------------------------------------------------------------------------------------------------------+
// |                                            ENTETE du PROGRAMME                                       |
// +------------------------------------------------------------------------------------------------------+


// +------------------------------------------------------------------------------------------------------+
// |                                            CORPS du PROGRAMME                                        |
// +------------------------------------------------------------------------------------------------------+


/**
 * Classe GestionnaireErreur
 *
 * Gérer les erreurs PHP et SQL.
 */
class GestionnaireErreur {
        /*** Attributes: ***/

        /**
        * Contient la liste des erreurs.
        * @access private
        */
        private $erreurs;

        /**
        * Permet de savoir si on veut faire apparaître ou pas le contexte de l'erreur,
        * c'est à dire le contenu des variables.
        * @access private
        */
        private $contexte;

        /**
        * Permet de savoir si on veut faire apparaître ou pas les erreurs Pear.
        * @access private
        */
        private $pear;

        /**
        * Chaine de caractères permettant d'identifier les erreurs de la bibliothèque Pear.
        * @access private
        */
        private $pear_chaine;

        /**
        * Contient le niveau d'erreur courrant. Celui que l'on donne à la fonction
        * error_reporting().
        * @access private
        */
        private $niveau_erreur_courrant;

        /*** Constructeur: ***/

        /**
        * Construit le gestionnaire d'erreur.
        *
        * @return void
        * @access public
        */
        public function __construct($bool_contexte = false, $int_niveau = 2048, $bool_pear = false, $str_pear = '')
        {
                $this->erreurs = array();
                $this->setContexte($bool_contexte);
                $this->setNiveauErreurCourrant($int_niveau);
                $this->setPear($bool_pear);
                $this->setPearChaine($str_pear);
                set_error_handler(array($this, 'gererErreur'));
        } // end of member function __construct


        /*** Destructeur: ***/
        public function __destruct()
        {
                echo $this->retournerErreur();
        }

        /*** Accesseurs: ***/

        /**
        * Récupère le tableau des erreurs.
        *
        * @return array
        * @access public
        */
        public function getErreur()
        {
                return $this->erreurs;
        }

        /**
        * Ajoute une erreur à la liste.
        *
        * @param array une_erreur
        * @return void
        * @access public
        */
        public function setErreur($une_erreur)
        {
                $tab_erreurs =& $this->getErreur();
                array_push($tab_erreurs, $une_erreur);
        }

        /**
        * Récupère la valeur du contexte.
        *
        * @return boolean
        * @access public
        */
        public function getContexte()
        {
                return $this->contexte;
        }

        /**
        * Définit si oui ou non le contexte sera affiché.
        *
        * @param boolean un_contexte
        * @return  void
        * @access public
        */
        public function setContexte( $un_contexte )
        {
                $this->contexte = $un_contexte;
        }

        /**
        * Récupère la valeur de l'attribut Pear.
        *
        * @return boolean true pour afficher les erreurs Pear sinon false.
        * @access public
        */
        public function getPear()
        {
                return $this->pear;
        }

        /**
        * Définit si oui ou non les erreurs Pear seront affichées.
        *
        * @param boolean true pour afficher les erreurs Pear sinon false.
        * @return  void
        * @access public
        */
        public function setPear( $p )
        {
                $this->pear = $p;
        }

        /**
        * Récupère la valeur de l'attribut pear_chaine.
        *
        * @return string la chaine de caractère identifiant les erreurs Pear.
        * @access public
        */
        public function getPearChaine()
        {
                return $this->pear_chaine;
        }

        /**
        * Définit la chaine de caractère identifiant les erreurs Pear.
        *
        * @param string la chaine de caractère identifiant les erreurs Pear.
        * @return  void
        * @access public
        */
        public function setPearChaine( $pc )
        {
                $this->pear_chaine = $pc;
        }


        /**
        * Récupère le niveau d'erreur courrant.
        *
        * @return int le niveau d'erreur courrant.
        * @access public
        */
        public function getNiveauErreurCourrant()
        {
                return (int)$this->niveau_erreur_courrant;
        }

        /**
        * Définit le niveau d'erreur courrant.
        *
        * @param int un niveau d'erreur.
        * @return void
        * @access public
        */
        public function setNiveauErreurCourrant($niveau)
        {
                $this->niveau_erreur_courrant = $niveau;
        }

        /*** Méthodes : ***/

        /**
        *
        * @param int niveau
        * @param string message
        * @param string fichier
        * @param int ligne
        * @param boolean contexte
        * @return void
        * @access public
        */
        public function gererErreur( $niveau,  $message,  $fichier,  $ligne,  $contexte )
        {
                $aso_erreur = array();
                // Nous vérifions si nous affichons ou pas l'erreur en fonction du niveau demandé
                if ( $niveau <= $this->getNiveauErreurCourrant() ) {
                        $aso_erreur['niveau'] = $niveau;
                        $aso_erreur['message'] = $message;
                        $aso_erreur['fichier'] = $fichier;
                        $aso_erreur['ligne'] = $ligne;
                        if ($this->getContexte()) {
                                $aso_erreur['contexte'] = $contexte;
                        }
                        $this->setErreur($aso_erreur);
                }

                // Si nous avons à faire à une erreur et non à un warning ou une notice, nous arrêtons l'exécution du script
                if ($niveau == E_USER_ERROR) {
                        echo    $this->retournerErreur();
                        exit(1);
                }
        } // end of member function gererErreur

        /**
         * Retourne l'erreur PHP formatée en XHTML.
         *
         * @return string
         * @access public
         */
        public function retournerErreur()
        {
                $retour = '';
                $erreur_pear_nbre = 0;
                foreach($this->getErreur() as $aso_erreur) {
                        if ('<!-- BEGIN sql -->' == substr($aso_erreur['message'], 0, 18)) {
                                $retour .= $aso_erreur['message'];
                                continue;
                        }
                        // Nous testons les erreurs PEAR pour ne pas en tenir compte
                        if (!$this->getPear() && stristr($aso_erreur['fichier'], $this->getPearChaine())) {
                                $erreur_pear_nbre++;
                        } else {
                                $retour .= '<p class="attention">'."\n";
                                $retour .= '<strong>ERREUR</strong><br />'."\n";
                                $retour .= '<strong>Niveau : </strong>'.$aso_erreur['niveau'].'<br />'."\n";
                                $retour .= '<strong>Message : </strong>'.$aso_erreur['message'].'<br />'."\n";
                                $retour .= '<strong>Fichier : </strong>'.$aso_erreur['fichier'].'<br />'."\n";
                                $retour .= '<strong>Ligne : </strong>'.$aso_erreur['ligne'].'<br />'."\n";
                                if ($this->getContexte()) {
                                        $retour .= '<pre>'."\n";
                                        $retour .= '<stong>Contexte : </stong>'."\n".print_r($aso_erreur['contexte'], true)."\n";
                                        $retour .= '</pre>'."\n";
                                }
                                $retour .= '</p>'."\n";
                        }
                }
                if ($erreur_pear_nbre != 0) {
                        $retour .= '<p class="attention"><strong>Nombre d\'erreurs PEAR : </strong>'.$erreur_pear_nbre.'</p>'."\n";
                }
                return $retour;
        } // end of member function retournerErreur

        /**
        * Retourne l'erreur SQL formatée.
        *
        * @param string fichier
        * @param int ligne
        * @param string message
        * @param string requete
        * @param string autres
        * @return string
        * @static
        * @access public
        */
        public static function retournerErreurSql( $fichier,  $methode,  $message,  $requete = NULL,  $autres = NULL )
        {
                $retour = '<!-- BEGIN sql -->';
                $retour .= '<div id="zone_erreur">'."\n";
                $retour .= '<h1 > ERREUR SQL </h1><br />'."\n";
                $retour .= '<dl>'."\n";
                $retour .= '<dt> Fichier : </dt> ';
                $retour .= '<dd> '.$fichier.'</dd>'."\n";

                $retour .= '<dt> Méthode : </dt> ';
                $retour .= '<dd> '.$methode.'</dd>'."\n";

                $retour .= '<dt> Message erreur : </dt> ';
                $retour .= '<dd> '.$message.'</dd>'."\n";

                if (!is_null($requete)) {
                        $retour .= '<dt> Requete : </dt> ';
                        $retour .= '<dd> '.$requete.' </dd>'."\n";
        }

                if (!is_null($autres)) {
                        $retour .= '<dt> Autres infos : </dt> ';
                        $retour .= '<dd> '.$autres.' </dd>'."\n";
                }
                $retour .= '</dl>'."\n";
                $retour .= '</div>'."\n";
                $retour .= '<!-- END sql -->'."\n";

                return $retour;
        } // end of member function retournerErreurSql

        /**
        * Retourne l'erreur SQL formatée selon le format demandé.
        *
        * @param string fichier
        * @param int ligne
        * @param string message
        * @param string format : txt.
        * @return string
        * @static
        * @access public
        */
        public static function formaterMessageErreur( $message, $fichier = null,  $ligne = null,  $format = 'txt' )
        {
                $retour = '';
                if ($format == 'txt') {
                        $retour .= "\n";
                        if (!is_null($fichier)) {
                                $retour .= "\t".'Fichier : '.$fichier."\n";
                        }
                        if (!is_null($ligne)) {
                                $retour .= "\t".'Ligne : '.$ligne."\n";
                        }
                        $retour .= "\t".'Message : '.$message."\n";
                }
                return $retour;
        }
}

/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log$
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>