Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 425 | Blame | Last modification | View Log | RSS feed

<?php
class Messages {
        /** Niveau de message de type LOG */
        const MSG_LOG = 0;
        /** Niveau de message de type ERREUR */
        const MSG_ERREUR = 1;
        /** Niveau de message de type AVERTISSEMENT */
        const MSG_AVERTISSEMENT = 2;
        /** Niveau de message de type INFORMATION */
        const MSG_INFO = 3;

        /** Inititulé des différents types de message. */
        private static $msg_niveaux_txt = array('LOG', 'ERREUR','AVERTISSEMENT', 'INFO');
        private $verbosite = '';

        public function __construct($verbosite = 0) {
                $this->verbosite = $verbosite;
        }

        /**
         * Affiche un message d'erreur formaté.
         * Si le paramétre de verbosité (-v) vaut 1 ou plus, le message est écrit dans le fichier de log et afficher dans la console.
         *
         * @param string le message d'erreur avec des %s.
         * @param array le tableau des paramêtres à insérer dans le message d'erreur.
         * @return void.
         */
        public function traiterErreur($message, $tab_arguments = array()) {
                $this->traiterMessage($message, $tab_arguments, self::MSG_ERREUR);
        }

        /**
         * Affiche un message d'avertissement formaté.
         * Si le paramétre de verbosité (-v) vaut 1, le message est écrit dans le fichier de log.
         * Si le paramétre de verbosité (-v) vaut 2 ou plus, le message est écrit dans le fichier de log et afficher dans la console.
         *
         * @param string le message d'erreur avec des %s.
         * @param array le tableau des paramêtres à insérer dans le message d'erreur.
         * @return void.
         */
        public function traiterAvertissement($message, $tab_arguments = array()) {
                $this->traiterMessage($message, $tab_arguments, self::MSG_AVERTISSEMENT);
        }

        /**
         * Retourne un message d'information formaté.
         * Si le paramétre de verbosité (-v) vaut 1 ou 2 , le message est écrit dans le fichier de log.
         * Si le paramétre de verbosité (-v) vaut 3 ou plus, le message est écrit dans le fichier de log et afficher dans la console.
         *
         * @param string le message d'information avec des %s.
         * @param array le tableau des paramêtres à insérer dans le message d'erreur.
         * @return void.
         */
        public function traiterInfo($message, $tab_arguments = array()) {
                $this->traiterMessage($message, $tab_arguments, self::MSG_INFO);
        }

        /**
         * Retourne un message formaté en le stockant dans un fichier de log si nécessaire.
         *
         * @param string le message d'erreur avec des %s.
         * @param array le tableau des paramêtres à insérer dans le message d'erreur.
         * @param int le niveau de verbosité à dépasser pour afficher les messages.
         * @return void.
         */
        private function traiterMessage($message, $tab_arguments, $niveau = self::MSG_LOG) {
                $log = $this->formaterMsg($message, $tab_arguments, $niveau);
                if ($this->verbosite > ($niveau - 1)) {
                        echo $log;
                        if (Config::get('log_script')) {
                                // TODO : lancer le log
                        }
                }
        }

        /**
         * Retourne un message d'information formaté.
         *
         * @param string le message d'information avec des %s.
         * @param array le tableau des paramêtres à insérer dans le message d'erreur.
         * @return string le message d'erreur formaté.
         */
        public function formaterMsg($message, $tab_arguments = array(), $niveau = null) {
                $texte = vsprintf($message, $tab_arguments);
                $prefixe = date('Y-m-j_H:i:s', time());
                $prefixe .= is_null($niveau) ? ' : ' : ' - '.self::getMsgNiveauTxt($niveau).' : ';
                $log = $prefixe.$texte."\n";
                return $log;
        }

        private static function getMsgNiveauTxt($niveau) {
                return self::$msg_niveaux_txt[$niveau];
        }

        /**
         * Utiliser cette méthode dans une boucle pour afficher un message suivi du nombre de tour de boucle effectué.
         * Vous devrez vous même gérer le retour à la ligne à la sortie de la boucle.
         *
         * @param string le message d'information.
         * @param int le nombre de départ à afficher.
         * @return void le message est affiché dans la console.
         */
        public static function afficherAvancement($message, $depart = 0) {
                static $avancement = array();
                if (! array_key_exists($message, $avancement)) {
                        $avancement[$message] = $depart;
                        echo "$message : ";

                        $actuel =& $avancement[$message];
                        echo $actuel++;
                } else {
                        $actuel =& $avancement[$message];

                        // Cas du passage de 99 (= 2 caractères) à 100 (= 3 caractères)
                        $passage = 0;
                        if (strlen((string) ($actuel - 1)) < strlen((string) ($actuel))) {
                                $passage = 1;
                        }

                        echo str_repeat(chr(8), (strlen((string) $actuel) - $passage));
                        echo $actuel++;
                }
        }
}
?>