Subversion Repositories eFlore/Applications.cel

Rev

Rev 1461 | Rev 2995 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1461 Rev 2406
Line 6... Line 6...
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 {
Line 16... Line 16...
16
 
16
 
17
 	/** Les paramètres de configuration extrait du fichier .ini */
17
 	/** Les paramètres de configuration extrait du fichier .ini */
Line 18... Line 18...
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 chemins où l'autoload doit chercher des classes. */
23
	/** Les chemins où l'autoload doit chercher des classes. */
24
	private static $autoload_chemins = array();
24
	private static $autoload_chemins = array();
25
	
25
 
Line 26... Line 26...
26
	/** Les paramètres de l'url $_GET nettoyés. */
26
	/** Les paramètres de l'url $_GET nettoyés. */
27
	private $parametres = null;
27
	private $parametres = null;
Line 32... Line 32...
32
	 * @param str iniFile Configuration file to use
32
	 * @param str iniFile Configuration file to use
33
	 */
33
	 */
34
	public function __construct($fichier_ini = 'widget.ini.php') {
34
	public function __construct($fichier_ini = 'widget.ini.php') {
35
		// Chargement de la configuration
35
		// Chargement de la configuration
36
		self::$config = parse_ini_file($fichier_ini, TRUE);
36
		self::$config = parse_ini_file($fichier_ini, TRUE);
37
		
37
 
38
		// Paramêtres de config dynamiques
38
		// Paramêtres de config dynamiques
39
		self::$config['chemins']['baseURLAbsoluDyn'] = 'http://'.$_SERVER['SERVER_NAME'].self::$config['chemins']['baseURL'].'%s';
39
		self::$config['chemins']['baseURLAbsoluDyn'] = 'http://'.$_SERVER['SERVER_NAME'].self::$config['chemins']['baseURL'].'%s';
40
		
40
 
41
		// Gestion de la mémoire maximum allouée aux services
41
		// Gestion de la mémoire maximum allouée aux services
42
		ini_set('memory_limit', self::$config['parametres']['limiteMemoire']);
42
		ini_set('memory_limit', self::$config['parametres']['limiteMemoire']);
43
		
43
 
44
		// Réglages de PHP
44
		// Réglages de PHP
45
		setlocale(LC_ALL, self::$config['parametres']['locale']);
45
		setlocale(LC_ALL, self::$config['parametres']['locale']);
46
		date_default_timezone_set(self::$config['parametres']['fuseauHoraire']);
46
		date_default_timezone_set(self::$config['parametres']['fuseauHoraire']);
47
		
47
 
48
		// Gestion des erreurs
48
		// Gestion des erreurs
49
		error_reporting(self::$config['parametres']['erreurNiveau']);
49
		error_reporting(self::$config['parametres']['erreurNiveau']);
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
				self::$config['chemins']['widgetCourantDossier'] = self::$config['chemins']['widgetsDossier'].strtolower($this->widget).DIRECTORY_SEPARATOR;
55
				self::$config['chemins']['widgetCourantDossier'] = self::$config['chemins']['widgetsDossier'].strtolower($this->widget).DIRECTORY_SEPARATOR;
56
				$this->chargerWidgetConfig();
56
				$this->chargerWidgetConfig();
57
			}
57
			}
58
			// Chargement des chemins pour l'autoload
58
			// Chargement des chemins pour l'autoload
59
			$this->chargerCheminAutoload();
59
			$this->chargerCheminAutoload();
60
			
60
 
61
			// Enregistrement de la méthode gérant l'autoload des classes
61
			// Enregistrement de la méthode gérant l'autoload des classes
62
			spl_autoload_register(array('Widget', 'chargerClasse'));
62
			spl_autoload_register(array('Widget', 'chargerClasse'));
63
			
63
 
64
			// Nettoyage du $_GET (sécurité)
64
			// Nettoyage du $_GET (sécurité)
65
			$this->collecterParametres();
65
			$this->collecterParametres();
66
		} else {
66
		} else {
67
			$e = 'Les widget nécessite les variables serveurs suivantes pour fonctionner : REQUEST_URI et QUERY_STRING.';
67
			$e = 'Les widget nécessite les variables serveurs suivantes pour fonctionner : REQUEST_URI et QUERY_STRING.';
68
			trigger_error($e, E_USER_ERROR);
68
			trigger_error($e, E_USER_ERROR);
69
		}
69
		}
70
	}
70
	}
71
	
71
 
72
	private function parserUrl() {
72
	private function parserUrl() {
73
		if (strlen($_SERVER['QUERY_STRING']) == 0) {
73
		if (strlen($_SERVER['QUERY_STRING']) == 0) {
74
			$len = strlen($_SERVER['REQUEST_URI']);
74
			$len = strlen($_SERVER['REQUEST_URI']);
75
		} else {
75
		} else {
76
			$len = -(strlen($_SERVER['QUERY_STRING']) + 1);
76
			$len = -(strlen($_SERVER['QUERY_STRING']) + 1);
77
		}
77
		}
78
		$url = substr($_SERVER['REQUEST_URI'], strlen(self::$config['chemins']['baseURL']), $len);
78
		$url = substr($_SERVER['REQUEST_URI'], strlen(self::$config['chemins']['baseURL']), $len);
79
		$url_morceaux = explode('/', $url);
79
		$url_morceaux = explode('/', $url);
80
		return $url_morceaux;
80
		return $url_morceaux;
81
	}
81
	}
82
	
82
 
83
	private function collecterParametres() {
83
	private function collecterParametres() {
84
		if (isset($_GET) && $_GET != '') {
84
		if (isset($_GET) && $_GET != '') {
85
			$this->nettoyerGet();
85
			$this->nettoyerGet();
86
			$this->parametres = $_GET;
86
			$this->parametres = $_GET;
87
		}
87
		}
88
	}
88
	}
89
	
89
 
90
	private function nettoyerGet() {
90
	private function nettoyerGet() {
91
		foreach ($_GET as $cle => $valeur) {
91
		foreach ($_GET as $cle => $valeur) {
92
			$verifier = array('NULL', "\n", "\r", "\\", '"', "\x00", "\x1a", ';');
92
			$verifier = array('NULL', "\n", "\r", "\\", '"', "\x00", "\x1a", ';');
93
			$_GET[$cle] = strip_tags(str_replace($verifier, '', $valeur));
93
			$_GET[$cle] = strip_tags(str_replace($verifier, '', $valeur));
94
		}
94
		}
95
	}
95
	}
96
	
96
 
97
	private function chargerCheminAutoload() {
97
	private function chargerCheminAutoload() {
98
		$chemins_communs = explode(';', self::$config['chemins']['autoload']);
98
		$chemins_communs = explode(';', self::$config['chemins']['autoload']);
99
		$chemins_communs = array_map('trim', $chemins_communs);
99
		$chemins_communs = array_map('trim', $chemins_communs);
100
		array_unshift($chemins_communs, '');
100
		array_unshift($chemins_communs, '');
101
		
101
 
102
		$chemins_widget = array();
102
		$chemins_widget = array();
103
		if (isset(self::$config[$this->widget]['autoload'])) {
103
		if (isset(self::$config[$this->widget]['autoload'])) {
104
			$chemins_widget = explode(';', self::$config[$this->widget]['autoload']);
104
			$chemins_widget = explode(';', self::$config[$this->widget]['autoload']);
105
			foreach ($chemins_widget as $cle => $chemin) {
105
			foreach ($chemins_widget as $cle => $chemin) {
106
				$chemins_widget[$cle] = self::$config['chemins']['widgetCourantDossier'].trim($chemin);
106
				$chemins_widget[$cle] = self::$config['chemins']['widgetCourantDossier'].trim($chemin);
107
			}
107
			}
108
		}
108
		}
109
		
109
 
110
		self::$autoload_chemins = array_merge($chemins_communs, $chemins_widget);
110
		self::$autoload_chemins = array_merge($chemins_communs, $chemins_widget);
111
	}
111
	}
112
	
112
 
113
	/**
113
	/**
114
	* La méthode chargerClasse() charge dynamiquement les classes trouvées dans le code.
114
	* La méthode chargerClasse() charge dynamiquement les classes trouvées dans le code.
115
	* Cette fonction est appelée par php5 quand il trouve une instanciation de classe dans le code.
115
	* Cette fonction est appelée par php5 quand il trouve une instanciation de classe dans le code.
116
	*
116
	*
117
	*@param string le nom de la classe appelée.
117
	*@param string le nom de la classe appelée.
Line 126... Line 126...
126
			if (file_exists($chemin)) {
126
			if (file_exists($chemin)) {
127
				require_once $chemin;
127
				require_once $chemin;
128
			}
128
			}
129
		}
129
		}
130
	}
130
	}
131
	
131
 
132
	
132
 
133
	/**
133
	/**
134
	 * Execute le widget.
134
	 * Execute le widget.
135
	 */
135
	 */
136
	function executer() {
136
	function executer() {
137
		if (!is_null($this->widget)) {
137
		if (!is_null($this->widget)) {
Line 144... Line 144...
144
					$widget->executer();
144
					$widget->executer();
145
				}
145
				}
146
			}
146
			}
147
		}
147
		}
148
	}
148
	}
149
	
149
 
150
	/**
150
	/**
151
	 * Charge le fichier de config spécifique du wiget et fusionne la config avec celle partagés par l'ensemble des widgets.
151
	 * Charge le fichier de config spécifique du wiget et fusionne la config avec celle partagés par l'ensemble des widgets.
152
	 */
152
	 */
153
	private function chargerWidgetConfig() {
153
	private function chargerWidgetConfig() {
154
		$widget_config_ini_fichier = self::$config['chemins']['widgetCourantDossier'].'config.ini';
154
		$widget_config_ini_fichier = self::$config['chemins']['widgetCourantDossier'].'config.ini';
155
		if (file_exists($widget_config_ini_fichier))  {
155
		if (file_exists($widget_config_ini_fichier))  {
156
			$widget_config = parse_ini_file($widget_config_ini_fichier, TRUE);
156
			$widget_config = parse_ini_file($widget_config_ini_fichier, TRUE);
157
			self::$config = array_merge(self::$config, $widget_config);
157
			self::$config = array_merge(self::$config, $widget_config);
158
		}
158
		}
159
	}
159
	}
160
}
-
 
161
?>
-
 
162
160
}
-
 
161
163
162