Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
420 jpm 1
<?php
2
// In : utf8 url_encoded (get et post)
3
// Out : utf8
4
/**
5
 * La classe Widget analyser l'url et chage le widget correspondant.
6
 * Format d'url :
7
 * /widget/nom_du_widget?parametres1=ma_valeur1&parametre2=ma_valeur2
8
 * Les widget sont dans des dossiers en minuscule correspondant au nom de la classe du widget.
9
 * Exemple : /widget/carto avec la classe Carto.php dans le dossier carto.
10
 *
11
 *
12
 * @author jpm
13
 *
14
 */
15
class Widget {
16
 
17
 	/** Les paramètres de configuration extrait du fichier .ini */
18
    private static $config;
19
 
20
	/** Le nom du widget demandé. */
21
	private $widget = null;
22
 
23
	/** Les paramètres de l'url $_GET nettoyés. */
24
	private $parametres = null;
25
 
26
	/**
27
	 * Constructeur.
28
	 * Parse le fichier de configuraion "widget.ini" et parse l'url à la recherche du widget demandé.
29
	 * @param str iniFile Configuration file to use
30
	 */
31
	public function __construct($fichier_ini = 'widget.ini.php') {
32
		// Chargement de la configuration
33
		self::$config = parse_ini_file($fichier_ini, TRUE);
34
 
35
		// Gestion de la mémoire maximum allouée aux services
36
		ini_set('memory_limit', self::$config['parametres']['limiteMemoire']);
37
 
38
		// Gestion des erreurs
39
		error_reporting(self::$config['parametres']['erreurNiveau']);
40
 
41
		// Enregistrement de la méthode gérant l'autoload des classes
42
		spl_autoload_register(array('Widget', 'chargerClasse'));
43
 
44
		if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['QUERY_STRING'])) {
45
			$url_morceaux = $this->parserUrl();
46
			if (isset($url_morceaux[0])) {
47
				$this->widget = $url_morceaux[0];
48
			}
49
 
50
			// Nettoyage du $_GET (sécurité)
51
			$this->collecterParametres();
52
		} else {
53
			$e = 'Les widget nécessite les variables serveurs suivantes pour fonctionner : REQUEST_URI et QUERY_STRING.';
54
			trigger_error($e, E_USER_ERROR);
55
		}
56
	}
57
 
58
	private function parserUrl() {
59
		if (strlen($_SERVER['QUERY_STRING']) == 0) {
60
			$len = strlen($_SERVER['REQUEST_URI']);
61
		} else {
62
			$len = -(strlen($_SERVER['QUERY_STRING']) + 1);
63
		}
64
		$url = substr($_SERVER['REQUEST_URI'], strlen(self::$config['parametres']['baseURL']), $len);
65
		$url_morceaux = explode('/', $url);
66
		return $url_morceaux;
67
	}
68
 
69
	private function collecterParametres() {
70
		if (isset($_GET) && $_GET != '') {
71
			$this->nettoyerGet();
72
			$this->parametres = $_GET;
73
		}
74
	}
75
 
76
	private function nettoyerGet() {
77
		foreach ($_GET as $cle => $valeur) {
78
			$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
79
			$_GET[$cle] = strip_tags(str_replace($verifier, '', $valeur));
80
		}
81
	}
82
 
83
	/**
84
	* La méthode __autoload() charge dynamiquement les classes trouvées dans le code.
85
	* Cette fonction est appelée par php5 quand il trouve une instanciation de classe dans le code.
86
	*
87
	*@param string le nom de la classe appelée.
88
	*@return void le fichier contenant la classe doit être inclu par la fonction.
89
	*/
90
	public static function chargerClasse($classe) {
91
		if (class_exists($classe)) {
92
			return null;
93
		}
94
 
95
		$chemins = array('', self::$config['parametres']['bibliothequeDossier']);
96
		foreach ($chemins as $chemin) {
97
			$chemin = $chemin.$classe.'.php';
98
			if (file_exists($chemin)) {
99
				require_once $chemin;
100
			}
101
		}
102
	}
103
 
104
 
105
	/**
106
	 * Execute the request.
107
	 */
108
	function executer() {
109
		if (!is_null($this->widget)) {
110
			$classe_widget = ucfirst($this->widget);
111
			$fichier_widget = self::$config['parametres']['widgetDossier'].strtolower($this->widget).DIRECTORY_SEPARATOR.$classe_widget.'.php';
112
			if (file_exists($fichier_widget))  {
113
				include_once $fichier_widget;
114
				if (class_exists($classe_widget)) {
115
					$widget = new $classe_widget(self::$config, $this->parametres);
116
					$widget->executer();
117
				}
118
			}
119
		}
120
	}
121
}
122
?>