/trunk/framework/Application.php |
---|
3,31 → 3,41 |
/** |
* Classe fournissant des informations au Framework sur l'application. |
* |
* PHP version 5 |
* |
* @category Debogage |
* @package Framework |
// Auteur principal : |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
// Autres auteurs : |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version $$Id$$ |
* @copyright 1999-2009 Tela Botanica (accueil@tela-botanica.org) |
* @category PHP 5.2 |
* @package Framework |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version SVN : $Id$ |
* @link /doc/framework/ |
*/ |
class Application { |
/** |
* tableau d'informations sur l'application |
* Tableau d'informations sur l'application |
*/ |
private static $info = null; |
/** |
* chemin de base de l'application |
* Chemin de base de l'application |
*/ |
private static $chemin = null; |
/** |
* Modificateur pour le chemin de base |
* Initialise différentes classes du Framework nécessaires pour le fonctionnement de l'application. |
* Ces classes sont ensuites controlées via les fichiers de config.ini. |
* Elle est appelée automatiquement suite à la définition du chemin de l'application via Application::setChemin(). |
*/ |
private static function initialiser() { |
// Instanciation du gestionnaire d'exception |
GestionnaireException::getInstance(); |
// Instanciation du gestionnaire de logs |
Log::getInstance(); |
} |
/** |
* Permet d'indiquer le chemin de base de l'Application. |
* Cette méthode doit obligatoirement être utilisée par l'application pour que le Framework fonctionne correctement. |
* @param string $chemin_fichier_principal chemin de base |
*/ |
public static function setChemin($chemin_fichier_principal) { |
36,6 → 46,7 |
trigger_error("Le fichier indiqué n'existe pas. Utilisez __FILE__ dans la méthode set().", E_USER_ERROR); |
} else { |
self::$chemin = dirname($chemin_fichier_principal).DS; |
self::initialiser(); |
} |
} else { |
trigger_error("Le chemin de l'application a déjà été enregistré auprès du Framework", E_USER_WARNING); |
/trunk/framework/config.defaut.ini |
---|
21,6 → 21,10 |
; Débogage |
; Indique si oui ou non on veut afficher le débogage. |
fw_debogage = true |
; Indique sous quelle forme les méssages de débogage doivent s'afficher : |
; - Debug::MODE_ECHO : le message est affiché en utilisant echo |
; - Debug::MODE_NOTICE : le message est affiché en utilisant une erreur de type notice |
fw_debogage_mode = "php:Debug::MODE_ECHO" |
; Indique si oui ou non on veut afficher le contexte de débogage. |
fw_debogage_contexte = false |
; Niveau d'erreur à employer pour le code PHP. Voir le manuel de PHP pour les différents niveaux disponibles. |
/trunk/framework/Chronometre.php |
---|
1,32 → 1,27 |
<?php |
// declare(encoding='UTF-8'); |
/** Classe Chronometre() - Permet de stocker et d'afficher |
* les temps d'éxécution de script. |
/** Classe Chronometre() - Permet de stocker et d'afficher les temps d'éxécution de script. |
* |
* Cette classe permet de réaliser un ensemble |
* de mesure de temps prises à |
* différents endroits d'un script. |
* Ces mesures peuvent ensuite être affichées au |
* sein d'un tableau XHTML. |
* Cette classe permet de réaliser un ensemble de mesure de temps prises à différents endroits d'un script. |
* Ces mesures peuvent ensuite être affichées au sein d'un tableau XHTML. |
* |
* |
* PHP Version 5 |
* |
* @category PHP |
* @package Framework |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright 2009 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @version Release: <package_version> |
* @link /doc/framework/ |
* @category PHP 5.2 |
* @package Framework |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version SVN : $Id$ |
* @link /doc/framework/ |
*/ |
class Chronometre { |
/*** Attributs : ***/ |
private $_temps = array(); |
private static $instance = null; |
private static $temps = array(); |
/** Constructeur : **/ |
public function __construct() { |
$this->setTemps(array('depart' => microtime())); |
private function __construct() { |
self::setTemps('depart', microtime()); |
} |
/** Accesseurs : |
35,12 → 30,12 |
* |
* @return int le temps écoulé |
*/ |
public function getTemps($cle = null) { |
private static function getTemps($cle = null) { |
$temps = ''; |
if (!is_null($cle)) { |
$temps = $this->_temps[$cle]; |
$temps = self::$temps[$cle]; |
} else { |
$temps = $this->_temps; |
$temps = self::$temps; |
} |
return $temps; |
} |
51,39 → 46,46 |
* |
* @return null |
*/ |
public function setTemps($moment = array ()) { |
array_push($this->_temps, $moment); |
private static function setTemps($cle, $moment) { |
array_push(self::$temps, array($cle => $moment)); |
} |
/*** Méthodes : ***/ |
/** Méthode afficherChrono() - |
/** |
* Effectue un chronometrage. |
* |
* @param string le nom du point de chronométrage |
* @return null |
*/ |
public static function chrono($cle) { |
$moment = microtime(); |
self::verifierCreationInstance(); |
self::setTemps($cle, $moment); |
} |
/** |
* Permet d'afficher les temps d'éxécution de différentes parties d'un script. |
* |
* Cette fonction permet d'afficher un ensemble de |
* mesure de temps prises à différents endroits d'un script. |
* Ces mesures sont affichées au sein d'un tableau XHTML |
* dont on peut controler l'indentation des balises. |
* Pour un site en production, il suffit d'ajouter un style |
* #chrono {display:none;} dans la css. De cette façon, |
* le tableau ne s'affichera pas. Le webmaster lui pourra |
* rajouter sa propre feuille de style affichant le tableau. |
* Cette fonction permet d'afficher un ensemble de mesure de temps prises à différents endroits d'un script. |
* Ces mesures sont affichées au sein d'un tableau XHTML dont on peut controler l'indentation des balises. |
* Pour un site en production, il suffit d'ajouter un style #chrono {display:none;} dans la css. |
* De cette façon, le tableau ne s'affichera pas. Le webmaster lui pourra rajouter sa propre feuille de style |
* affichant le tableau. |
* Le développeur initial de cette fonction est Loic d'Anterroches. |
* Elle a été modifiée par Jean-Pascal Milcent. |
* Elle utilise une variable gobale : $_CHRONO_ |
* |
* @author Loic d'Anterroches |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* |
* @param int $indentation_origine l'indentation de base. |
* @param int $indentation le pas d'indentation. |
* @return string la chaine XHTML de mesure des temps. |
*/ |
public function afficherChrono($indentation_origine = 8, $indentation = 4) { |
public static function afficherChrono($indentation_origine = 8, $indentation = 4) { |
self::verifierCreationInstance(); |
// Création du chrono de fin |
$GLOBALS['_SCRIPT_']['chrono']->setTemps(array ( |
'fin' => microtime() |
)); |
self::setTemps('fin', microtime()); |
// Début création de l'affichage |
$sortie = str_repeat(' ', $indentation_origine) . |
105,13 → 107,13 |
$total_tps_ecoule = 0; |
// Récupération de la premiére mesure |
$tab_depart = & $this->getTemps(0); |
$tab_depart = self::getTemps(0); |
list ($usec, $sec) = explode(' ', $tab_depart['depart']); |
// Ce temps correspond à tps_fin |
$tps_debut = ((float) $usec + (float) $sec); |
foreach ($this->getTemps() as $tab_temps) { |
foreach (self::getTemps() as $tab_temps) { |
foreach ($tab_temps as $cle => $valeur) { |
list ($usec, $sec) = explode(' ', $valeur); |
$tps_fin = ((float) $usec + (float) $sec); |
148,5 → 150,14 |
return $sortie; |
} |
/** |
* Vérifie si l'instance de classe à été crée, si non la crée |
*/ |
private static function verifierCreationInstance() { |
if (empty(self::$instance)) { |
self::$instance = new Chronometre(); |
} |
} |
} |
?> |
/trunk/framework/Config.php |
---|
5,15 → 5,14 |
* Elle offre l'accès en lecture seule aux paramètres de config. |
* C'est une Singleton. |
* |
* PHP Version 5 |
* |
* @category PHP |
* @package Framework |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright 2009 Tela-Botanica |
* @license GPL-v3 et CECILL-v2 |
* @version SVN: <svn_id> |
* @link /doc/framework/ |
* @category PHP 5.2 |
* @package Framework |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version SVN : $Id$ |
* @link /doc/framework/ |
*/ |
class Config { |
167,7 → 166,7 |
* @return array le tableau analysé |
*/ |
private static function analyserTableauIni($config = array()) { |
foreach ($config as $cle => $valeur) { |
foreach ($config as $cle => &$valeur) { |
if (is_array($valeur)) { |
$config[$cle] = self::analyserTableauIni($valeur); |
} else { |
/trunk/framework/Debug.php |
---|
5,20 → 5,20 |
* L'affichage et l'utilisation de ces fonctions sont améliorés via cette classe. |
* Cette classe est inspirée de la classe Zend_Debug. |
* |
* PHP version 5 |
* |
* @category Debogage |
* @package Framework |
// Auteur principal : |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
// Autres auteurs : |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @version $$Id$$ |
* @copyright 1999-2009 Tela Botanica (accueil@tela-botanica.org) |
* @category PHP 5.2 |
* @package Framework |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3 |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 |
* @version SVN : $Id$ |
* @link /doc/framework/ |
*/ |
class Debug { |
const MODE_ECHO = 'echo'; |
const MODE_NOTICE = 'e_user_notice'; |
/** |
* mode de php (cli ou sapi) |
*/ |
42,7 → 42,7 |
* @param boolean $echo si true on affiche le résultat, si false on ne renvoie que la chaine sans l'afficher |
* @return string la chaine à afficher representant le dump ou null si echo |
*/ |
public static function dump($variable, $mot_cle = null, $echo = true) { |
public static function dump($variable, $mot_cle = null, $echo = false) { |
// var_dump de la variable dans un buffer et récupération de la sortie |
ob_start(); |
var_dump($variable); |
56,13 → 56,13 |
} |
/** |
* Equivalent de print_r |
* Equivalent de print_r. |
* @param mixed $variable la variable à afficher |
* @param string $mot_cle le mot cle à associer |
* @param boolean $echo faire un echo ou non |
* @return string la chaine contenant la variable printée ou null si echo |
*/ |
public static function printr($variable, $mot_cle = null, $echo = true) { |
public static function printr($variable, $mot_cle = null, $echo = false) { |
// Récupération de la sortie |
$sortie = print_r($variable, true); |
85,10 → 85,14 |
$sortie = self::traiterSortieSuivantMode($mot_cle, $sortie); |
// Affichage et/ou retour |
self::verifierParametresConfig(); |
if (Config::get('fw_debogage') == true) { |
if ($echo) { |
if ($echo === true || Config::get('fw_debogage_mode') == self::MODE_ECHO) { |
echo $sortie; |
return null; |
} else if (Config::get('fw_debogage_mode') == self::MODE_NOTICE) { |
trigger_error($sortie, E_USER_NOTICE); |
return null; |
} else { |
return $sortie; |
} |
119,5 → 123,23 |
} |
return $sortie; |
} |
/** |
* Vérifie que tous les paramêtres de config nécessaires au fonctionnement de cette classe existe dans les fichiers |
* de configurations. |
*/ |
private static function verifierParametresConfig() { |
$ok = true; |
$parametres = array('fw_debogage', 'fw_debogage_mode'); |
foreach ($parametres as $param) { |
if (is_null(Config::get($param))) { |
$classe = get_class(); |
$m = "L'utilisation de la classe $classe nécessite de définir '$param' dans un fichier de configuration."; |
trigger_error($m, E_USER_WARNING); |
$ok = false; |
} |
} |
return $ok; |
} |
} |
?> |
/trunk/framework/I18n.php |
---|
146,12 → 146,62 |
private static function chargerFichierIni($fichier_ini, $langue) { |
self::$traductions[$langue] = false; |
if (file_exists($fichier_ini)) { |
self::$traductions[$langue] = parse_ini_file($fichier_ini, true); |
$ini = parse_ini_file($fichier_ini, true); |
Debug::printr($ini, 'Avant :'); |
$ini = self::analyserTableauIni($ini); |
Debug::printr($ini, 'Aprés :'); |
self::$traductions[$langue] = $ini; |
} |
return (self::$traductions[$langue] === false) ? false : true; |
} |
/** |
* Analyse un tableau de traductions pour évaluer les clés. |
* @param array $i18n le tableau de traductions |
* @return array le tableau analysé et modifié si nécessaire. |
*/ |
private static function analyserTableauIni($i18n = array()) { |
//ATTENTION : il est important de passer la valeur par référence car nous la modifions dynamiquement dans la boucle |
foreach ($i18n as $cle => &$valeur) { |
if (is_array($valeur)) { |
$i18n[$cle] = self::analyserTableauIni($valeur); |
} else { |
$i18n = self::evaluerCle($i18n, $cle, $valeur); |
} |
} |
return $i18n; |
} |
/** |
* Dans le cas des chaines de traduction à sous clé (ex.: cle.souscle), cette méthode |
* évalue les valeurs correspondantes et créée les sous tableaux associés. |
* @param array $i18n tableau de traductions (par référence) |
* @param string $cle la cle dans le tableau |
* @param string $valeur la valeur à affecter |
*/ |
private static function evaluerCle($i18n, $cle, $valeur) { |
if (strpos($cle, '.') !== false) { |
unset($i18n[$cle]); |
$pieces = explode('.', $cle, 2); |
if (strlen($pieces[0]) && strlen($pieces[1])) { |
if (isset($i18n[$pieces[0]]) && !is_array($i18n[$pieces[0]])) { |
$m = "Ne peut pas créer de sous-clé pour '{$pieces[0]}' car la clé existe déjà"; |
trigger_error($m, E_USER_WARNING); |
} else { |
$i18n[$pieces[0]][$pieces[1]] = $valeur; |
$i18n[$pieces[0]] = self::evaluerCle($i18n[$pieces[0]], $pieces[1], $valeur); |
} |
} else { |
$m = "Clé invalide '$cle'"; |
trigger_error($m, E_USER_WARNING); |
} |
} else { |
$i18n[$cle] = $valeur; |
} |
return $i18n; |
} |
/** |
* Cherche l'information sur la langue demandée par l'application |
*/ |
private static function trouverLangue() { |