Subversion Repositories eFlore/Applications.moissonnage

Rev

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

Rev 20 Rev 26
Line 1... Line 1...
1
<?php
1
<?php
Line 2... Line 2...
2
 
2
 
Line 3... Line 3...
3
 
3
 
4
class Moissonnage extends RestService {
4
class Projets extends RestService {
Line 5... Line 5...
5
 
5
 
6
	
-
 
7
	private $parametres = array();
-
 
8
	private $ressources = array();
-
 
9
	
-
 
10
	private $squeletteDossier = '';
6
	
Line 11... Line 7...
11
	
7
	private $parametres = array();
12
	private $nomService = '';
8
	private $ressources = array();
13
	private $nomSource = '';
9
	
Line 14... Line 10...
14
	
10
	private $squeletteDossier = '';
15
	private $cache;
11
	private $cache;
Line 41... Line 37...
41
	}
37
	}
Line 42... Line 38...
42
	
38
	
43
	private function traiterRessources() {
39
	private function traiterRessources() {
44
		$retour = '';
40
		$retour = '';
45
		if ($this->avoirRessources()) {
-
 
46
			if ($this->avoirRessourceSource()) {
-
 
47
				$this->initialiserSource();
41
		if ($this->avoirRessources()) {
48
			if ($this->avoirRessourceService()) {
42
			if ($this->avoirRessourceService()) {
49
					$retour = $this->initialiserService();
-
 
50
				}
43
				$retour = $this->initialiserService();
51
			}
44
			}
52
		}
45
		}
53
		return $retour;
46
		return $retour;
Line 58... Line 51...
58
		if (isset($this->ressources) && count($this->ressources) > 0) {
51
		if (isset($this->ressources) && count($this->ressources) > 0) {
59
			$presenceDeRessources = true;
52
			$presenceDeRessources = true;
60
		} else {
53
		} else {
61
			$message = "Accès au service refusé : aucune ressource indiquée.\n"
54
			$message = "Accès au service refusé : aucune ressource indiquée.\n"
62
				. "Veuillez indiquer au moins une source de données à interroger"
55
				. "Veuillez indiquer au moins une source de données à interroger"
63
				. " et le type informations a renvoyer.";
56
				. " et le type d'informations a renvoyer.";
64
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
57
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
65
			throw new Exception($message, $code);
58
			throw new Exception($message, $code);
66
		}
59
		}
67
		return $presenceDeRessources;
60
		return $presenceDeRessources;
68
	}
61
	}
Line 69... Line -...
69
	
-
 
70
	private function avoirRessourceSource() {
-
 
71
		$presenceRessourceDemandee = false;
-
 
72
		$source = $this->ressources[0];
-
 
73
		$sourcesDispo = $this->recupererTableauConfig('sourcesDispo');
-
 
74
		if (in_array($source, $sourcesDispo)) {
-
 
75
			$presenceRessourceDemandee = true;
-
 
76
		} else {
-
 
77
			$message = "La source de données '{$source}' n'est pas référencée dans nos services.\n"
-
 
78
				. "Les sources disponibles sont les suivantes : " . implode(', ', $sourcesDispo) . ".\n";
-
 
79
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
-
 
80
			throw new Exception($message, $code);
-
 
81
		}
-
 
82
		return $presenceRessourceDemandee;
-
 
83
	}
-
 
84
	
62
	
85
	private function recupererTableauConfig($parametres) {
63
	private function chargerConfiguration($nomParametre) {
86
		$tableau = array();
64
		$tableau = array();
87
		$tableauPartiel = explode(',', Config::get($parametres));
65
		$tableauPartiel = explode(',', Config::get($nomParametre));
88
		$tableauPartiel = array_map('trim', $tableauPartiel);
66
		$tableauPartiel = array_map('trim', $tableauPartiel);
89
		foreach ($tableauPartiel as $champ) {
67
		foreach ($tableauPartiel as $champ) {
90
			if (strpos($champ, '=') === false) {
68
			if (strpos($champ, '=') === false) {
91
				$tableau[] = $champ;
69
				$tableau[] = $champ;
Line 97... Line 75...
97
			}
75
			}
98
		}
76
		}
99
		return $tableau;
77
		return $tableau;
100
	}
78
	}
Line 101... Line -...
101
	
-
 
102
	private function initialiserSource() {
-
 
103
		$this->chargerNomSource();
-
 
104
		$this->chargerConfigSource();
-
 
105
	
-
 
106
		// php5.3 : Enregistrement en première position des autoload de la méthode gérant les classes des services
-
 
107
		if (phpversion() < 5.3) {
-
 
108
			spl_autoload_register(array($this, 'chargerClasseSource'));
-
 
109
		} else {
-
 
110
			spl_autoload_register(array($this, 'chargerClasseSource'), true , true);
-
 
111
		}
-
 
112
	}
-
 
113
	
-
 
114
	private function chargerNomSource() {
-
 
115
		$this->nomSource = $this->ressources[0];
-
 
116
	}
-
 
117
	
79
	
118
	private function chargerConfigSource() {
-
 
119
		$source = $this->nomSource;
80
	public static function chargerConfigurationSource($nomSource) {
120
		$chemin = Config::get('chemin_configurations')."config_$source.ini";
81
		$chemin = Config::get('chemin_configurations')."config_$nomSource.ini";
121
		Config::charger($chemin);
82
		Config::charger($chemin);
Line 122... Line 83...
122
	}
83
	}
123
	
84
	
124
	private function chargerClasseSource($classe) {
85
	private function chargerClasse($classe) {
125
		if (class_exists($classe)) {
86
		if (class_exists($classe)) {
-
 
87
			return null;
126
			return null;
88
		}
127
		}
89
		
-
 
90
		$cheminBiblio = Config::get('chemin_bibliotheque');
128
		$cheminBiblio = Config::get('chemin_bibliotheque');
91
		$chemins = array();
129
		$chemins = array();
92
		$chemins[] = $this->squeletteDossier;
130
		$chemins[] = $this->squeletteDossier . $this->nomSource . DIRECTORY_SEPARATOR;
93
		$chemins[] = $this->squeletteDossier.'commun' .DIRECTORY_SEPARATOR;
131
		$chemins[] = $this->squeletteDossier . 'commun' . DIRECTORY_SEPARATOR;
94
		$chemins[] = $this->squeletteDossier.'sources'.DIRECTORY_SEPARATOR;
Line 132... Line 95...
132
		$chemins[] = $cheminBiblio;
95
		$chemins[] = $cheminBiblio;
133
		$chemins[] = $cheminBiblio . 'robots' . DIRECTORY_SEPARATOR;
96
		$chemins[] = $cheminBiblio.'robots'.DIRECTORY_SEPARATOR;
134
		
97
		
135
		foreach ($chemins as $chemin) {
98
		foreach ($chemins as $chemin) {
136
			$chemin = $chemin . $classe . '.php';
99
			$chemin = $chemin.$classe.'.php';
137
			if (file_exists($chemin)) {
100
			if (file_exists($chemin)) {
138
				require_once $chemin;
101
				require_once $chemin;
139
				break;
102
				break;
Line 140... Line 103...
140
			}
103
			}
141
		}
104
		}
142
	}
105
	}
143
	
106
	
144
	private function avoirRessourceService() {
107
	private function avoirRessourceService() {
145
		$presenceRessourceService = false;
108
		$presenceRessourceService = false;
146
		$servicesDispo = $this->recupererTableauConfig('servicesDispo');
109
		$servicesDispo = $this->chargerConfiguration('services_dispo');
147
		if (isset($this->ressources[1])) {
110
		if (isset($this->ressources[0])) {
148
			$service = $this->ressources[1];
111
			$service = $this->ressources[0];
149
			if (in_array($service, $servicesDispo)) {
-
 
150
				$presenceRessourceService = true;
112
			if (in_array($service, $servicesDispo)) {
151
			} else {
113
				$presenceRessourceService = true;
152
				$message = "La service demandé '$service' n'est pas disponible pour le projet "
114
			} else {
153
					. $this->nomSource . " !\n"
115
				$message = "La service demandé '$service' n'est pas disponible !\n"
154
					. "Les services disponibles sont : " . implode(', ', $servicesDispo);
116
					. "Les services disponibles sont : ".implode(', ', $servicesDispo);
155
				$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
117
				$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
156
				throw new Exception($message, $code);
118
				throw new Exception($message, $code);
157
			}
119
			}
158
		} else {
120
		} else {
159
			$message = "Vous n'avez pas indiqué de service pour le projet {$this->nomSource} !\n"
121
			$message = "Vous n'avez pas indiqué de service !\n"
160
				. "Les services disponibles sont : " . implode(', ', $servicesDispo);
122
				. "Les services disponibles sont : ".implode(', ', $servicesDispo);
161
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
123
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
Line 162... Line 124...
162
			throw new Exception($message, $code);
124
			throw new Exception($message, $code);
163
		}
125
		}
164
		return $presenceRessourceService;
126
		return $presenceRessourceService;
165
	}
127
	}
166
 
128
 
-
 
129
	private function initialiserService() {
-
 
130
		$nomService = 'commun';
-
 
131
		$classe = $this->obtenirNomClasseService($nomService);
167
	private function initialiserService() {
132
		$chemins = array();
-
 
133
		$chemins[] = $this->squeletteDossier.'commun'.DIRECTORY_SEPARATOR.'Commun.php';
-
 
134
		
-
 
135
		// php5.3 : Enregistrement en première position des autoload de la méthode gérant les classes des services
Line 168... Line 136...
168
		$this->chargerNomDuService();
136
		if (phpversion() < 5.3) {
169
		$classe = $this->obtenirNomClasseService($this->nomService);
137
			spl_autoload_register(array($this, 'chargerClasse'));
170
		$chemins = array();
138
		} else {
171
		$chemins[] = $this->squeletteDossier . $this->nomSource . DS . $classe . '.php';
139
			spl_autoload_register(array($this, 'chargerClasse'), true , true);
172
		$chemins[] = $this->squeletteDossier . 'commun'.DS.$classe.'.php';
140
		}
173
	
141
	
174
		$retour = '';
142
		$retour = '';
175
		$service = null;
143
		$service = null;
176
		foreach ($chemins as $chemin) {
144
		foreach ($chemins as $chemin) {
177
			if (file_exists($chemin)) {
145
			if (file_exists($chemin)) {
178
				$service = new $classe($this->getBdd());
146
				$service = new $classe($this->getBdd());
179
				$ressourcesPourService = $this->filtrerRessourcesPourService();
147
				$ressourcesPourService = $this->filtrerRessourcesPourService();
180
				$this->cache = new CacheMoissonnage($service, $this->nomSource, $this->nomService,
148
				$this->cache = new CacheMoissonnage($service, $nomService,
181
					Config::get('cache'));
149
					Config::get('cache'));
182
				$retour = $this->cache->consulter($ressourcesPourService, $this->parametres);
150
				$retour = $this->cache->consulter($ressourcesPourService, $this->parametres);
183
				if (get_class($retour) == 'Exception') {
151
				if (get_class($retour) == 'Exception') {
184
					throw new Exception($retour->getMessage(), RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
152
					throw new Exception($retour->getMessage(), RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
185
				}
153
				}
186
			}
154
			}
187
		}
155
		}
188
		if (is_null($service)) {
156
		if (is_null($service)) {
Line 189... Line -...
189
			$message = "La service demandé '{$this->nomService}' n'existe pas dans le projet {$this->nomSource} !";
-
 
190
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
-
 
191
			throw new Exception($message, $code);
-
 
192
		}
-
 
193
		return $retour;
157
			$message = "Le service demandé '{$nomService}' n'existe pas !";
194
	}
158
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
195
	
159
			throw new Exception($message, $code);
196
	private function chargerNomDuService() {
160
		}
Line 197... Line 161...
197
		$this->nomService = $this->ressources[1];
161
		return $retour;
198
	}
-
 
199
	
-
 
200
	private function obtenirNomClasseService($mot) {
-
 
201
		$classeNom = str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
-
 
202
		return $classeNom;
-
 
203
	}
162
	}
204
	
163
	
Line 205... Line 164...
205
	private function filtrerRessourcesPourService() {
164
	private function obtenirNomClasseService($mot) {
Line 206... Line 165...
206
		$ressourcesPourService = array();
165
		$classeNom = str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
207
		$nbreDeRessources = count($this->ressources);
166
		return $classeNom;