Subversion Repositories Applications.framework

Rev

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

<?php
//declare(encoding='UTF-8');
/**
* PHP Version 5
*
* @category  PHP
* @package   framework
* @author    aurelien <aurelien@tela-botanica.org>
* @copyright 2009 Tela-Botanica
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version   SVN: <svn_id>
* @link      /doc/framework/
*/

class Log {

    /**
     * Tableau associatif stockant les descripteurs de fichiers
     */
    private static $fichiersLog = array();

    /**
     * Chemin de base du dossier log de l'application
     */
    private static $cheminLogs = '';

    /**
     * Booleen indiquant si l'on peut correctement écrire dans les fichiers de logs
     */
     private static $droitLogger = true;

    /**
     * Zone horaire (pour éviter des avertissements dans les dates)
     */
    private static $timeZone = '';

    /**
     * séparateur de chemin
     */
    private static $sd = DIRECTORY_SEPARATOR;

    /**
     * La classe registre se contient elle-même, (pour le pattern singleton)
     */
    private static $log;

    /**
     * Constructeur par défaut, privé, car on accède à la classe par le getInstance
     */
    private function __construct() {
       self::$sd = Config::get('ds');
       self::$cheminLogs = Config::get('chemin_logs');
       self::$timeZone = Config::get('fw_timezone');

       // gestion de la timezone pour éviter des erreurs
       if(function_exists("date_default_timezone_set") and function_exists("date_default_timezone_get")) {
           date_default_timezone_set(self::$timeZone);
       }
    }

    /**
     * Fonction qui renvoie l'instance de classe en assurant son unicité, c'est l'unique méthode qui doit être
     * utilisée pour récupérer l'objet Registre
     */
    public static function getInstance() {
        if (self::$log instanceof Log) {
            return self::$log;
        }
        self::$log = new Log();
        return self::$log;
    }

    public static function ajouterEntree($nomFichier,$entree,$mode='a+') {
        if(self::$droitLogger) {
            $date = "\n"."\n".date('d m Y H:i')."\n" ;

            // si le fichier est déjà dans le tableau et qu'on peut y écrire
            if(in_array($nomFichier,self::$fichiersLog)) {
                if(is_writable(self::$fichiersLog[$nomFichier])) {
                   fwrite(self::$fichiersLog[$nomFichier],$date.$entree);
                } else {
                        self::desactiverEcriture();
                }
            } else {
                if($fp = fopen(self::$cheminLogs.$nomFichier,'a+') && is_writable($fp)) {
                        self::$fichiersLog[$nomFichier] = $fp;
                    fwrite(self::$fichiersLog[$nomFichier],$date.$entree);
                } else {
                    self::desactiverEcriture();
                }
            }
        }
    }

    public static function viderLog($nomFichier) {
        if(self::verifierPresenceFichier($nomFichier)) {
            ajouterEntree($nomFichier,'','w');
        }
    }

    public static function verifierPresenceFichier($nomFichier) {
        if(in_array($nomFichier,self::$fichiersLog)) {
            return true;
        }
        return false;
    }

    private static function desactiverEcriture() {
        self::$droitLogger = false;
        $message = 'Impossible d\'écrire dans le fichier de log spécifié, Vérifiez les droits du dossier de logs et du fichier';
        $e = new ErrorException($message,0,E_USER_WARNING,__FILE__,__LINE__);
        GestionnaireException::gererException($e);
    }

    public function __destruct() {
        foreach(self::$fichiersLog as $nomFichier => $fp) {
                fclose($fp);
        }
    }
}
?>