Subversion Repositories eFlore/Applications.del

Rev

Details | Last modification | View Log | RSS feed

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