Subversion Repositories eFlore/Applications.cel

Rev

Rev 427 | Rev 542 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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