Rev 206 | Blame | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Classe fournissant des informations au Framework sur l'application.** @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: Application.php 208 2010-11-03 09:42:54Z gduche $* @link /doc/framework/*/class Application {/** Variable statique indiquant que les tableaux _GET et _POST ont déjà été encodé au format de l'appli. */private static $encodage = false;/*** Tableau d'informations sur l'application*/private static $info = null;/*** Chemin de base de l'application*/private static $chemin = null;/*** 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() {// Initialiser les arguments des urlsself::initialiserUrl();// Configuration du gestionnaire d'exceptionGestionnaireException::configurer();// Configuration du gestionnaire de logs//Log::configurer();self::verifierEtReencoderTableauRequete();}/*** Initialise le format des urls.*/private static function initialiserUrl() {ini_set('arg_separator.input', Config::get('fw_url_arg_separateur_entree'));ini_set('arg_separator.output', Config::get('fw_url_arg_separateur_sortie'));}/*** 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) {if (self::$chemin === null) {if (!file_exists($chemin_fichier_principal)) {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);}}/*** accesseur pour le chemin* @return string le chemin*/public static function getChemin() {return self::$chemin;}/** Le tableau des informations sur l'application possède les clés suivantes :* - nom : nom de l'application* - abr : abréviation de l'application* - encodage : encodage de l'application (ISO-8859-15, UTF-8...)** @param array $info tableau fournissant des informations sur l'application* @return void*/public static function setInfo($info) {if (self::$info === null) {self::$info = $info;} else {trigger_error("Le informations de l'application ont déjà été enregistrées auprès du Framework", E_USER_WARNING);}}/*** accesseur pour le tableau d'infos* @param string $cle la clé à laquelle on veut accéder*/public static function getInfo($cle = null) {if ($cle !== null) {if (isset(self::$info[$cle])) {return self::$info[$cle];}} else {return self::$info;}}/*** Procédure vérifiant l'encodage des tableaux $_GET et $_POST et les transcodant dans l'encodage de l'application*/protected static function verifierEtReencoderTableauRequete() {if (self::$encodage == false && Config::get('sortie_encodage') != Config::get('appli_encodage')) {$_POST = self::encoderTableau($_POST, Config::get('appli_encodage'), Config::get('sortie_encodage'));$_GET = self::encoderTableau($_GET, Config::get('appli_encodage'), Config::get('sortie_encodage'));// traitement des magic quotesself::verifierEtTraiterSlashTableauRequete();self::$encodage = true;}}/*** Procédure vérifiant l'activation des magic quotes et remplacant les slash dans les tableaux de requete*/private static function verifierEtTraiterSlashTableauRequete() {if ( get_magic_quotes_gpc() ) {if (!function_exists('stripslashes_deep')) {function stripslashes_deep( $value ) {return ( is_array($value) )? array_map('stripslashes_deep', $value): stripslashes($value);} // end of 'stripslashes_deep()'$_GET = array_map('stripslashes_deep', $_GET);$_POST = array_map('stripslashes_deep', $_POST);$_COOKIE = array_map('stripslashes_deep', $_COOKIE);}}}/*** Fonction récursive transcodant toutes les valeurs d'un tableau de leur encodage d'entrée vers un encodage de sortie donné* @param $tableau Array Un tableau de données à encoder* @param $encodage_sortie String l'encodage vers lequel on doit transcoder* @param $encodage_entree String l'encodage original des chaines du tableau (optionnel)* @return Array Le tableau encodé dans l'encodage de sortie**/final static protected function encoderTableau($tableau, $encodage_sortie, $encodage_entree = null) {if (is_array($tableau)) {foreach ($tableau as $cle => $valeur) {if (is_array($valeur)) {$tableau[$cle] = self::encoderTableau($valeur, $encodage_sortie, $encodage_entree);} else {$tableau[$cle] = mb_convert_encoding($valeur, $encodage_sortie, $encodage_entree);}}}return $tableau;}}