Subversion Repositories eFlore/Applications.del

Rev

Rev 1794 | Rev 1806 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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