Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1794 Rev 1795
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Le conteneur encapsule l'instanciation des classes ainsi que la récupération des paramètres depuis l'url ou
4
 * Le conteneur encapsule l'instanciation des classes ainsi que la récupération des paramètres depuis l'url ou
5
 * les fichiers de configuration
5
 * les fichiers de configuration
6
 *
6
 *
7
 * @category DEL
7
 * @category DEL
8
 * @package Bibliotheque
8
 * @package Bibliotheque
9
 * @version 0.1
9
 * @version 0.1
10
 * @author Mathias CHOUET <mathias@tela-botanica.org>
10
 * @author Mathias CHOUET <mathias@tela-botanica.org>
11
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
 * @author Aurelien PERONNET <aurelien@tela-botanica.org>
12
 * @author Aurelien PERONNET <aurelien@tela-botanica.org>
13
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
13
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
14
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
14
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
15
 * @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
15
 * @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org>
16
 */
16
 */
17
//TODO : initialiser tous les objets dans le conteneur
17
//TODO : initialiser tous les objets dans le conteneur
18
//TODO : créer un tableau de partage
18
//TODO : créer un tableau de partage
19
class Conteneur {
19
class Conteneur {
20
 
20
 
21
	protected $parametres;
21
	protected $parametres;
22
	protected $parametresUrl;
-
 
23
	protected $partages = array();
22
	protected $partages = array();
-
 
23
 
-
 
24
	protected $parametresUrl;
-
 
25
	protected $serviceNom;
24
 
26
 
25
	/**
27
	/**
26
	 * Constructeur de la classe
28
	 * Constructeur de la classe
27
	 * @param Array $parametres (optionnel) les paramètres additionnels à ajouter à ceux des fichiers de config
29
	 * @param Array $parametres (optionnel) les paramètres additionnels à ajouter à ceux des fichiers de config
28
	 * */
30
	 * */
29
	public function __construct(array $parametres = null) {
31
	public function __construct(array $parametres = null) {
30
		$this->parametres = is_null($parametres) ? array() : $parametres;
32
		$this->parametres = is_null($parametres) ? array() : $parametres;
-
 
33
 
31
		// TODO [2014-05-13 - JPM]: améliorer la gestion des paramètres d'URL fournis au conteneur.
34
		// Récupération du contexte courrant et configuration du conteneur
32
		// Ce conteneur conscidère que les paramètres fournis à son constructeur correspondent aux paramètres de l'URL (GET ou POST)...
-
 
33
		// Ce n'est pas vraiment générique.
35
		$contexte = $this->getContexte();
34
		$this->parametresUrl = $this->parametres;
36
		$this->parametresUrl = $contexte->getQS();
-
 
37
		$this->serviceNom = $contexte->getRessource(1);
35
	}
38
	}
36
 
39
 
37
	/**
40
	/**
38
	 * Obtenir un paramètre depuis le tableau de paramètres ou depuis le fichier de config
41
	 * Obtenir un paramètre depuis le tableau de paramètres ou depuis le fichier de config
39
	 * @param String $cle le nom du paramètre
42
	 * @param String $cle le nom du paramètre
40
	 * @return la valeur du paramètre
43
	 * @return la valeur du paramètre
41
	 * */
44
	 * */
42
	public function getParametre($cle) {
45
	public function getParametre($cle) {
43
		$valeur = isset($this->parametres[$cle]) ? $this->parametres[$cle] : Config::get($cle);
46
		$valeur = isset($this->parametres[$cle]) ? $this->parametres[$cle] : Config::get($cle);
44
		return $valeur;
47
		return $valeur;
45
	}
48
	}
46
 
49
 
47
	/**
50
	/**
48
	 * Obtenir un paramètre depuis le tableau de paramètres ou depuis le fichier de config
51
	 * Obtenir un paramètre depuis le tableau de paramètres ou depuis le fichier de config
49
	 * et le transformer en tableau s'il est de la forme : "cle=valeur,cle=valeur,..."
52
	 * et le transformer en tableau s'il est de la forme : "cle=valeur,cle=valeur,..."
50
	 * @param String $cle le nom du paramètre
53
	 * @param String $cle le nom du paramètre
51
	 * @return la valeur du paramètre
54
	 * @return la valeur du paramètre
52
	 */
55
	 */
53
	public function getParametreTableau($cle) {
56
	public function getParametreTableau($cle) {
54
		$tableau = array();
57
		$tableau = array();
55
		$parametre = $this->getParametre($cle);
58
		$parametre = $this->getParametre($cle);
56
		if (empty($parametre) === false) {
59
		if (empty($parametre) === false) {
57
			$tableauPartiel = explode(',', $parametre);
60
			$tableauPartiel = explode(',', $parametre);
58
			foreach ($tableauPartiel as $champ) {
61
			foreach ($tableauPartiel as $champ) {
59
				if (strpos($champ, '=') === false) {
62
				if (strpos($champ, '=') === false) {
60
					$tableau[] = trim($champ);
63
					$tableau[] = trim($champ);
61
				} else {
64
				} else {
62
					list($cle, $val) = explode('=', $champ);
65
					list($cle, $val) = explode('=', $champ);
63
					$tableau[trim($cle)] = trim($val);
66
					$tableau[trim($cle)] = trim($val);
64
				}
67
				}
65
			}
68
			}
66
		}
69
		}
67
		return $tableau;
70
		return $tableau;
68
	}
71
	}
69
 
72
 
70
	/**
73
	/**
71
	 * Enregistrer la valeur d'un paramètre
74
	 * Enregistrer la valeur d'un paramètre
72
	 * */
75
	 * */
73
	public function setParametre($cle, $valeur) {
76
	public function setParametre($cle, $valeur) {
74
		$this->parametres[$cle] = $valeur;
77
		$this->parametres[$cle] = $valeur;
75
	}
78
	}
76
 
79
 
77
	//--------------------------------------------------------------------------------------------------------
80
	//--------------------------------------------------------------------------------------------------------
78
	// TODO : Supprimer le chargement de configuration présent dans des fichiers séparés.
81
	// TODO : Supprimer le chargement de configuration présent dans des fichiers séparés.
79
	/**
82
	/**
80
	 * Charger la configuration depuis un fichier .ini.
83
	 * Charger la configuration depuis un fichier .ini.
81
	 *
84
	 *
82
	 * @param String $fichier le nom du fichier de configuration
85
	 * @param String $fichier le nom du fichier de configuration
83
	 * */
86
	 * */
84
	public function chargerConfiguration($fichier) {
87
	public function chargerConfiguration($fichier) {
85
		$cheminConfigurations = Config::get('chemin_configurations');
88
		$cheminConfigurations = Config::get('chemin_configurations');
86
		if ($cheminConfigurations == null || $cheminConfigurations == '') {
89
		if ($cheminConfigurations == null || $cheminConfigurations == '') {
87
			$message = "Le parametre de configuration 'chemin_configurations' n'est pas défini.";
90
			$message = "Le parametre de configuration 'chemin_configurations' n'est pas défini.";
88
			$code = RestServeur::HTTP_CODE_ERREUR;
91
			$code = RestServeur::HTTP_CODE_ERREUR;
89
			throw new Exception($message, $code);
92
			throw new Exception($message, $code);
90
		}
93
		}
91
 
94
 
92
		$cheminConfigService = $cheminConfigurations.DS.$fichier;
95
		$cheminConfigService = $cheminConfigurations.$fichier;
-
 
96
		if (file_exists($cheminConfigService) === false) {
93
		if (file_exists($cheminConfigService) === false) {
97
			$nomClasse = get_class($this);
94
			$message = "Le fichier de configuration du service est introuvable : $cheminConfigService ";
98
			$message = "Classe $nomClasse : le fichier de configuration du service est introuvable : $cheminConfigService ";
95
			$code = RestServeur::HTTP_CODE_ERREUR;
99
			$code = RestServeur::HTTP_CODE_ERREUR;
96
			throw new Exception($message, $code);
100
			throw new Exception($message, $code);
97
		}
101
		}
98
 
102
 
99
		Config::charger($cheminConfigService);
103
		Config::charger($cheminConfigService);
100
	}
104
	}
101
 
105
 
102
	public function getBdd() {
106
	public function getBdd() {
103
		if (!isset($this->partages['Bdd'])){
107
		if (!isset($this->partages['Bdd'])){
104
			$this->partages['Bdd'] = new Bdd();
108
			$this->partages['Bdd'] = new Bdd();
105
		}
109
		}
106
		return $this->partages['Bdd'];
110
		return $this->partages['Bdd'];
107
	}
111
	}
108
 
112
 
109
	public function getRestClient() {
113
	public function getRestClient() {
110
		if (!isset($this->partages['restClient'])){
114
		if (!isset($this->partages['restClient'])){
111
			$this->partages['restClient'] = new RestClient();
115
			$this->partages['restClient'] = new RestClient();
112
		}
116
		}
113
		return $this->partages['restClient'];
117
		return $this->partages['restClient'];
114
	}
118
	}
115
 
119
 
116
	public function getUrl($base) {
120
	public function getUrl($base) {
117
		return new Url($base);
121
		return new Url($base);
118
	}
122
	}
-
 
123
 
-
 
124
	public function getUrlService() {
-
 
125
		return $this->getUrl($this->getParametre($this->serviceNom.'.url_service'));
-
 
126
	}
119
 
127
 
120
	public function getControleAcces() {
128
	public function getControleAcces() {
121
		if (!isset($this->partages['controleAcces'])) {
129
		if (!isset($this->partages['controleAcces'])) {
122
			$this->partages['controleAcces'] = new ControleAcces($this);
130
			$this->partages['controleAcces'] = new ControleAcces($this);
123
		}
131
		}
124
		return $this->partages['controleAcces'];
132
		return $this->partages['controleAcces'];
125
	}
133
	}
126
 
134
 
127
	public function getNavigation() {
135
	public function getNavigation() {
128
		if (!isset($this->partages['navigation'])) {
136
		if (!isset($this->partages['navigation'])) {
129
			$this->partages['navigation'] = new Navigation($this, $this->parametresUrl);
137
			$this->partages['navigation'] = new Navigation($this, $this->parametresUrl);
130
		}
138
		}
131
		return $this->partages['navigation'];
139
		return $this->partages['navigation'];
132
	}
140
	}
133
 
141
 
134
	public function getMasque() {
142
	public function getMasque() {
135
		if (!isset($this->partages['masque'])) {
143
		if (!isset($this->partages['masque'])) {
136
			$this->partages['masque'] = new Masque($this->getparametre('masques_possibles'), $this->parametresUrl);
144
			$this->partages['masque'] = new Masque($this->getparametre($this->serviceNom.'.masques_possibles'), $this->parametresUrl);
137
		}
145
		}
138
		return $this->partages['masque'];
146
		return $this->partages['masque'];
139
	}
147
	}
-
 
148
 
-
 
149
	public function getContexte() {
-
 
150
		if (!isset($this->partages['contexte'])) {
-
 
151
			$this->partages['contexte'] = new Contexte($this, $_SERVER, $_GET, $_POST, $_SESSION, $_COOKIE);
-
 
152
		}
-
 
153
		return $this->partages['contexte'];
-
 
154
	}
-
 
155
 
-
 
156
	public function getUtilisateur() {
-
 
157
		if (!isset($this->partages['utilisateur'])) {
-
 
158
			$this->partages['utilisateur'] = new GestionUtilisateur($this);
-
 
159
		}
-
 
160
		return $this->partages['utilisateur'];
-
 
161
	}
140
}
162
}
141
163