Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 1012 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1012 Rev 1217
1
<?php
1
<?php
2
/**
2
/**
3
* Description :
3
* Description :
4
* Classe principale de chargement des services d'eFlore.
4
* Classe principale de chargement des services d'eFlore.
5
*
5
*
6
* Encodage en entrée : utf8
6
* Encodage en entrée : utf8
7
* Encodage en sortie : utf8
7
* Encodage en sortie : utf8
8
* @package eflore-projets
8
* @package eflore-projets
9
* @author Jennifer DHÉ <jennifer.dhe@tela-botanica.org>
9
* @author Jennifer DHÉ <jennifer.dhe@tela-botanica.org>
10
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
10
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
11
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
12
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
13
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
13
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
14
* @version 0.1
14
* @version 0.1
15
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
15
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
16
*/
16
*/
17
class Projets extends RestService {
17
class Projets extends RestService {
18
 
18
 
19
	/** Contients les paramètres.*/
19
	/** Contients les paramètres.*/
20
	private $parametres = array();
20
	private $parametres = array();
21
	/** Contients les ressources.*/
21
	/** Contients les ressources.*/
22
	private $ressources = array();
22
	private $ressources = array();
23
 
23
 
24
	/** Nom du projet courrant. */
24
	/** Nom du projet courrant. */
25
	private $projetNom = array();
25
	private $projetNom = array();
26
	/** Nom du service demandé. */
26
	/** Nom du service demandé. */
27
	private $serviceNom = array();
27
	private $serviceNom = array();
28
	/** Chemin vers le dossier courrant. */
28
	/** Chemin vers le dossier courrant. */
29
	private $cheminCourrant = null;
29
	private $cheminCourrant = null;
30
	private $classe = null;
30
	private $classe = null;
-
 
31
	
-
 
32
	private $methode = "consulter";
31
 
33
 
32
	private $cache;
34
	private $cache;
33
 
35
 
34
	/** Indique si oui (true) ou non (false), on veut utiliser les paramètres brutes. */
36
	/** Indique si oui (true) ou non (false), on veut utiliser les paramètres brutes. */
35
	protected $utilisationParametresBruts = true;
37
	protected $utilisationParametresBruts = true;
36
 
38
 
37
	public function __construct() {
39
	public function __construct() {
38
		$this->cheminCourrant = dirname(__FILE__).DS;
40
		$this->cheminCourrant = dirname(__FILE__).DS;
39
	}
41
	}
40
 
42
 
41
	public function consulter($ressources, $parametres) {
43
	public function consulter($ressources, $parametres) {
42
		$resultat = '';
44
		$resultat = '';
43
		$reponseHttp = new ReponseHttp();
45
		$reponseHttp = new ReponseHttp();
44
		try {
46
		try {
45
			$this->initialiserRessourcesEtParametres($ressources, $parametres);
47
			$this->initialiserRessourcesEtParametres($ressources, $parametres);
46
			$resultat = $this->traiterRessources();
48
			$resultat = $this->traiterRessources();
47
			$reponseHttp->setResultatService($resultat);
49
			$reponseHttp->setResultatService($resultat);
48
		} catch (Exception $e) {
50
		} catch (Exception $e) {
49
			$reponseHttp->ajouterErreur($e);
51
			$reponseHttp->ajouterErreur($e);
50
		}
52
		}
51
		if(strpos($_SERVER['SCRIPT_NAME'], 'phpunit') === FALSE) $reponseHttp->emettreLesEntetes();
53
		if(strpos($_SERVER['SCRIPT_NAME'], 'phpunit') === FALSE) $reponseHttp->emettreLesEntetes();
52
		$corps = $reponseHttp->getCorps();
54
		$corps = $reponseHttp->getCorps();
53
		return $corps;
55
		return $corps;
54
	}
56
	}
-
 
57
	
-
 
58
	public function modifier($ressources, $parametres) {
-
 
59
		$resultat = '';
-
 
60
		$reponseHttp = new ReponseHttp();
-
 
61
		$this->methode = "modifier";
-
 
62
		try {
-
 
63
			$this->initialiserRessourcesEtParametres($ressources, $parametres);
-
 
64
			$resultat = $this->traiterRessources();
-
 
65
			$reponseHttp->setResultatService($resultat);
-
 
66
		} catch (Exception $e) {
-
 
67
			$reponseHttp->ajouterErreur($e);
-
 
68
		}
-
 
69
		if(strpos($_SERVER['SCRIPT_NAME'], 'phpunit') === FALSE) $reponseHttp->emettreLesEntetes();
-
 
70
		$corps = $reponseHttp->getCorps();
-
 
71
		return $corps;
-
 
72
	}
-
 
73
	
-
 
74
	public function ajouter($ressources, $parametres) {
-
 
75
		$resultat = '';
-
 
76
		$reponseHttp = new ReponseHttp();
-
 
77
		$this->methode = "ajouter";
-
 
78
		try {
-
 
79
			$this->initialiserRessourcesEtParametres($ressources, $parametres);
-
 
80
			$resultat = $this->traiterRessources();
-
 
81
			$reponseHttp->setResultatService($resultat);
-
 
82
		} catch (Exception $e) {
-
 
83
			$reponseHttp->ajouterErreur($e);
-
 
84
		}
-
 
85
		if(strpos($_SERVER['SCRIPT_NAME'], 'phpunit') === FALSE) $reponseHttp->emettreLesEntetes();
-
 
86
		$corps = $reponseHttp->getCorps();
-
 
87
		return $corps;
-
 
88
	}
55
 
89
 
56
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
90
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
57
		$this->ressources = $ressources;
91
		$this->ressources = $ressources;
58
		$this->parametres = $parametres;
92
		$this->parametres = $parametres;
59
	}
93
	}
60
 
94
 
61
	private function traiterRessources() {
95
	private function traiterRessources() {
62
		$retour = '';
96
		$retour = '';
63
		if ($this->avoirRessources()) {
97
		if ($this->avoirRessources()) {
64
			if ($this->avoirRessourceProjet()) {
98
			if ($this->avoirRessourceProjet()) {
65
				$this->chargerNomDuService(); // défini $this->serviceNom
99
				$this->chargerNomDuService(); // défini $this->serviceNom
66
				$this->initialiserProjet(); // autoload defined here
100
				$this->initialiserProjet(); // autoload defined here
67
				if ($this->avoirRessourceService()) {
101
				if ($this->avoirRessourceService()) {
68
					$this->classe = self::debusquerClasse($this->projetNom, $this->serviceNom);
102
					$this->classe = self::debusquerClasse($this->projetNom, $this->serviceNom);
69
					$retour = $this->initialiserService();
103
					$retour = $this->initialiserService();
70
				}
104
				}
71
			}
105
			}
72
		}
106
		}
73
		return $retour;
107
		return $retour;
74
	}
108
	}
75
 
109
 
76
	private function avoirRessources() {
110
	private function avoirRessources() {
77
		$presenceDeRessources = false;
111
		$presenceDeRessources = false;
78
		if (isset($this->ressources) && count($this->ressources) > 0) {
112
		if (isset($this->ressources) && count($this->ressources) > 0) {
79
			$presenceDeRessources = true;
113
			$presenceDeRessources = true;
80
		} else {
114
		} else {
81
			$message = "Aucune ressource n'a été indiquée.\n".
115
			$message = "Aucune ressource n'a été indiquée.\n".
82
				"Veuillez indiquer au moins un code de projet et un type de service.";
116
				"Veuillez indiquer au moins un code de projet et un type de service.";
83
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
117
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
84
			throw new Exception($message, $code);
118
			throw new Exception($message, $code);
85
		}
119
		}
86
		return $presenceDeRessources;
120
		return $presenceDeRessources;
87
	}
121
	}
88
 
122
 
89
	private function avoirRessourceProjet() {
123
	private function avoirRessourceProjet() {
90
		$presenceRessourceProjet = false;
124
		$presenceRessourceProjet = false;
91
		$projet = $this->ressources[0];
125
		$projet = $this->ressources[0];
92
		$projetsDispo = Outils::recupererTableauConfig('projetsDispo');
126
		$projetsDispo = Outils::recupererTableauConfig('projetsDispo');
93
		if (in_array($projet, $projetsDispo)) {
127
		if (in_array($projet, $projetsDispo)) {
94
			$presenceRessourceProjet = true;
128
			$presenceRessourceProjet = true;
95
		} else {
129
		} else {
96
			$message = "La ressource '$projet' n'indique pas un projet existant.\n".
130
			$message = "La ressource '$projet' n'indique pas un projet existant.\n".
97
				"Les projets existant sont :\n".implode(', ', $projetsDispo);
131
				"Les projets existant sont :\n".implode(', ', $projetsDispo);
98
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
132
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
99
			throw new Exception($message, $code);
133
			throw new Exception($message, $code);
100
		}
134
		}
101
		return $presenceRessourceProjet;
135
		return $presenceRessourceProjet;
102
	}
136
	}
103
 
137
 
104
	private function initialiserProjet() {
138
	private function initialiserProjet() {
105
		$this->chargerNomDuProjet();
139
		$this->chargerNomDuProjet();
106
		$this->chargerConfigProjet();
140
		$this->chargerConfigProjet();
107
 
141
 
108
		// php5.3 : Enregistrement en première position des autoload de la méthode gérant les classes des services
142
		// php5.3 : Enregistrement en première position des autoload de la méthode gérant les classes des services
109
		if (phpversion() < 5.3) {
143
		if (phpversion() < 5.3) {
110
			spl_autoload_register(array($this, 'chargerClasseProjet'));
144
			spl_autoload_register(array($this, 'chargerClasseProjet'));
111
		} else {
145
		} else {
112
			spl_autoload_register(array($this, 'chargerClasseProjet'), true , true);
146
			spl_autoload_register(array($this, 'chargerClasseProjet'), true , true);
113
		}
147
		}
114
	}
148
	}
115
 
149
 
116
	private function chargerNomDuProjet() {
150
	private function chargerNomDuProjet() {
117
		$this->projetNom = $this->ressources[0];
151
		$this->projetNom = $this->ressources[0];
118
	}
152
	}
119
 
153
 
120
	private function chargerConfigProjet() {
154
	private function chargerConfigProjet() {
121
		$projet = $this->projetNom;
155
		$projet = $this->projetNom;
122
		$chemin = Config::get('chemin_configurations')."config_$projet.ini";
156
		$chemin = Config::get('chemin_configurations')."config_$projet.ini";
123
		Config::charger($chemin);
157
		Config::charger($chemin);
124
	}
158
	}
125
 
159
 
126
	/*
160
	/*
127
	  1) jusqu'à présent:
161
	  1) jusqu'à présent:
128
	  * le principe pour URL = a/b est: de charger
162
	  * le principe pour URL = a/b est: de charger
129
	  * require_once($chemin/a/ucfirst(c).php)
163
	  * require_once($chemin/a/ucfirst(c).php)
130
	  * new ucfirst(c); ucfirst(c)->consulter()
164
	  * new ucfirst(c); ucfirst(c)->consulter()
131
	  * sachant que ucfirst(c).php et la classe ucfirst(c) apparaîssent à de multiples emplacements (selon a)
165
	  * sachant que ucfirst(c).php et la classe ucfirst(c) apparaîssent à de multiples emplacements (selon a)
132
 
166
 
133
	  1") Beurk... (php-className conflicts en PHP 5.2)
167
	  1") Beurk... (php-className conflicts en PHP 5.2)
134
 
168
 
135
	  Ici nous faisons des cas particuliers pour Ontologies, mais en suivant ce principe, sont affectés:
169
	  Ici nous faisons des cas particuliers pour Ontologies, mais en suivant ce principe, sont affectés:
136
	  Images, Informations, InformationsTaxonsSup,
170
	  Images, Informations, InformationsTaxonsSup,
137
	  LegendeCartes, NomCommune, Noms, NomsVernaculaires, Projets, Statuts,
171
	  LegendeCartes, NomCommune, Noms, NomsVernaculaires, Projets, Statuts,
138
	  Taxons, TaxonsCartes, Textes, ZoneGeo
172
	  Taxons, TaxonsCartes, Textes, ZoneGeo
139
 
173
 
140
	  cf:
174
	  cf:
141
	  $ grep -r '^[cC]lass '|grep -F '.php:'|egrep -w " \($(grep -rh '^[cC]lass '|awk '{print $2}'|sort|uniq -d|tr "\n" '|')\) " \
175
	  $ grep -r '^[cC]lass '|grep -F '.php:'|egrep -w " \($(grep -rh '^[cC]lass '|awk '{print $2}'|sort|uniq -d|tr "\n" '|')\) " \
142
	  |sort -k2
176
	  |sort -k2
143
 
177
 
144
	  PS: "Using two class with the same name"
178
	  PS: "Using two class with the same name"
145
	  http://stackoverflow.com/questions/4555186/using-two-class-with-the-same-name
179
	  http://stackoverflow.com/questions/4555186/using-two-class-with-the-same-name
146
	  > Stop.
180
	  > Stop.
147
	  > Whatever you are doing is wrong. Backup. Re-evaluate what you are doing and why.
181
	  > Whatever you are doing is wrong. Backup. Re-evaluate what you are doing and why.
148
	*/
182
	*/
149
	private static function debusquerClasse($p, $s) {
183
	private static function debusquerClasse($p, $s) {
150
		if($s == 'ontologies') {
184
		if($s == 'ontologies') {
151
			switch($p) {
185
			switch($p) {
152
			case 'baseflor':
186
			case 'baseflor':
153
				return 'BaseFloreOntologies';
187
				return 'BaseFloreOntologies';
154
			case 'eflore':
188
			case 'eflore':
155
				return 'EfloreOntologies';
189
				return 'EfloreOntologies';
156
			case 'chorodep':
190
			case 'chorodep':
157
				return 'ChorodepOntologies';
191
				return 'ChorodepOntologies';
158
			case 'baseveg':
192
			case 'baseveg':
159
				return 'BasevegOntologies';
193
				return 'BasevegOntologies';
160
			case 'moissonnage':
194
			case 'moissonnage':
161
				return 'MoissonnageOntologies';
195
				return 'MoissonnageOntologies';
162
			case 'commun':
196
			case 'commun':
163
				return 'Ontologies';
197
				return 'Ontologies';
164
			}
198
			}
165
		}
199
		}
166
 
200
 
167
		if($s == 'cartes') {
201
		if($s == 'cartes') {
168
			switch($p) {
202
			switch($p) {
169
			case 'bdtxa':
203
			case 'bdtxa':
170
				return 'BdtxaCartes';
204
				return 'BdtxaCartes';
171
			case 'eflore':
205
			case 'eflore':
172
				return 'EfloreCartes';
206
				return 'EfloreCartes';
173
			case 'chorodep':
207
			case 'chorodep':
174
				return 'ChorodepCartes';
208
				return 'ChorodepCartes';
175
			case 'moissonnage':
209
			case 'moissonnage':
176
				return 'MoissonnageCartes';
210
				return 'MoissonnageCartes';
177
			case 'sophy':
211
			case 'sophy':
178
				return 'SophyCartes';
212
				return 'SophyCartes';
179
			}
213
			}
180
		}
214
		}
181
 
215
 
182
		return NULL;
216
		return NULL;
183
	}
217
	}
184
 
218
 
185
	private function chargerClasseProjet($classe) {
219
	private function chargerClasseProjet($classe) {
186
		if (class_exists($classe)) {
220
		if (class_exists($classe)) {
187
			return null;
221
			return null;
188
		}
222
		}
189
 
223
 
190
		if($this->serviceNom == 'ontologies') {
224
		if($this->serviceNom == 'ontologies') {
191
			$c = NULL;
225
			$c = NULL;
192
			switch($this->projetNom) {
226
			switch($this->projetNom) {
193
			case 'baseflor':
227
			case 'baseflor':
194
				$c = 'BaseFloreOntologies';
228
				$c = 'BaseFloreOntologies';
195
				break;
229
				break;
196
			case 'eflore':
230
			case 'eflore':
197
				$c = 'EfloreOntologies';
231
				$c = 'EfloreOntologies';
198
				break;
232
				break;
199
			case 'chorodep':
233
			case 'chorodep':
200
				$c = 'ChorodepOntologies';
234
				$c = 'ChorodepOntologies';
201
				break;
235
				break;
202
			case 'baseveg':
236
			case 'baseveg':
203
				$c = 'BasevegOntologies';
237
				$c = 'BasevegOntologies';
204
				break;
238
				break;
205
			case 'moissonnage':
239
			case 'moissonnage':
206
				$c = 'MoissonnageOntologies';
240
				$c = 'MoissonnageOntologies';
207
				break;
241
				break;
208
			case 'commun':
242
			case 'commun':
209
				$c = 'Ontologies';
243
				$c = 'Ontologies';
210
				break;
244
				break;
211
			}
245
			}
212
			if($c) {
246
			if($c) {
213
				require_once($this->cheminCourrant . 'commun' . DS . 'Commun.php');
247
				require_once($this->cheminCourrant . 'commun' . DS . 'Commun.php');
214
				require_once($this->cheminCourrant . $this->projetNom . DS . $this->obtenirNomClasseService($this->serviceNom) . '.php');
248
				require_once($this->cheminCourrant . $this->projetNom . DS . $this->obtenirNomClasseService($this->serviceNom) . '.php');
215
				return;
249
				return;
216
			}
250
			}
217
		}
251
		}
218
 
252
 
219
		// problème de class-name conflict. Exemple:
253
		// problème de class-name conflict. Exemple:
220
		// phpunit --verbose --debug --filter 'ChorodepCartesTest::testCarteGenerique|EfloreCartesTest::testCarteGenerale'
254
		// phpunit --verbose --debug --filter 'ChorodepCartesTest::testCarteGenerique|EfloreCartesTest::testCarteGenerale'
221
		if($this->serviceNom == 'cartes') {
255
		if($this->serviceNom == 'cartes') {
222
			$c = NULL;
256
			$c = NULL;
223
			switch($this->projetNom) {
257
			switch($this->projetNom) {
224
			case 'bdtxa':
258
			case 'bdtxa':
225
				$c = 'BdtxaCartes';
259
				$c = 'BdtxaCartes';
226
				break;
260
				break;
227
			case 'eflore':
261
			case 'eflore':
228
				$c = 'EfloreCartes';
262
				$c = 'EfloreCartes';
229
				break;
263
				break;
230
			case 'chorodep':
264
			case 'chorodep':
231
				$c = 'ChorodepCartes';
265
				$c = 'ChorodepCartes';
232
				break;
266
				break;
233
			case 'moissonnage':
267
			case 'moissonnage':
234
				$c = 'MoissonnageCartes';
268
				$c = 'MoissonnageCartes';
235
				break;
269
				break;
236
			case 'sophy':
270
			case 'sophy':
237
				$c = 'SophyCartes';
271
				$c = 'SophyCartes';
238
				break;
272
				break;
239
			}
273
			}
240
			if($c) {
274
			if($c) {
241
				require_once($this->cheminCourrant . 'commun' . DS . 'Commun.php');
275
				require_once($this->cheminCourrant . 'commun' . DS . 'Commun.php');
242
				require_once($this->cheminCourrant . $this->projetNom . DS . $this->obtenirNomClasseService($this->serviceNom) . '.php');
276
				require_once($this->cheminCourrant . $this->projetNom . DS . $this->obtenirNomClasseService($this->serviceNom) . '.php');
243
				return;
277
				return;
244
			}
278
			}
245
		}
279
		}
246
 
280
 
247
		$cheminBiblio = Config::get('chemin_bibliotheque');
281
		$cheminBiblio = Config::get('chemin_bibliotheque');
248
		$chemins = array();
282
		$chemins = array();
249
		$chemins[] = $this->cheminCourrant.$this->projetNom.DS;
283
		$chemins[] = $this->cheminCourrant.$this->projetNom.DS;
250
		$chemins[] = $this->cheminCourrant.'commun'.DS;
284
		$chemins[] = $this->cheminCourrant.'commun'.DS;
251
		$chemins[] = $cheminBiblio;
285
		$chemins[] = $cheminBiblio;
252
		$chemins[] = $cheminBiblio.'robots'.DS;
286
		$chemins[] = $cheminBiblio.'robots'.DS;
253
 
287
 
254
		foreach ($chemins as $chemin) {
288
		foreach ($chemins as $chemin) {
255
			$chemin = $chemin.$classe.'.php';
289
			$chemin = $chemin.$classe.'.php';
256
			if (file_exists($chemin)) {
290
			if (file_exists($chemin)) {
257
				require_once $chemin;
291
				require_once $chemin;
258
				break;
292
				break;
259
			}
293
			}
260
		}
294
		}
261
	}
295
	}
262
 
296
 
263
	private function avoirRessourceService() {
297
	private function avoirRessourceService() {
264
		$presenceRessourceService = false;
298
		$presenceRessourceService = false;
265
		$servicesDispo = Outils::recupererTableauConfig('servicesDispo');
299
		$servicesDispo = Outils::recupererTableauConfig('servicesDispo');
266
		if (isset($this->ressources[1])) {
300
		if (isset($this->ressources[1])) {
267
			$service = $this->ressources[1];
301
			$service = $this->ressources[1];
268
			if (in_array($service, $servicesDispo)) {
302
			if (in_array($service, $servicesDispo)) {
269
				$presenceRessourceService = true;
303
				$presenceRessourceService = true;
270
			} else {
304
			} else {
271
				$message = "Le service demandé '$service' n'est pas disponible pour le projet {$this->projetNom} !\n".
305
				$message = "Le service demandé '$service' n'est pas disponible pour le projet {$this->projetNom} !\n".
272
					"Les services disponibles sont : ".implode(', ', $servicesDispo);
306
					"Les services disponibles sont : ".implode(', ', $servicesDispo);
273
				$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
307
				$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
274
				throw new Exception($message, $code);
308
				throw new Exception($message, $code);
275
			}
309
			}
276
		} else {
310
		} else {
277
			$message = "Vous n'avez pas indiqué de service pour le projet {$this->projetNom} !\n".
311
			$message = "Vous n'avez pas indiqué de service pour le projet {$this->projetNom} !\n".
278
				"Les services disponibles sont : ".implode(', ', $servicesDispo);
312
				"Les services disponibles sont : ".implode(', ', $servicesDispo);
279
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
313
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
280
			throw new Exception($message, $code);
314
			throw new Exception($message, $code);
281
		}
315
		}
282
		return $presenceRessourceService;
316
		return $presenceRessourceService;
283
	}
317
	}
284
 
318
 
285
	private function initialiserService() {
319
	private function initialiserService() {
286
		if($this->classe) {
320
		if($this->classe) {
287
			$classe = $this->classe;
321
			$classe = $this->classe;
288
			$service = new $classe($this->getBdd());
322
			$service = new $classe($this->getBdd());
289
			return $service->consulter($this->filtrerRessourcesPourService(), $this->parametres, $this->getBdd());
323
			return $service->consulter($this->filtrerRessourcesPourService(), $this->parametres, $this->getBdd());
290
		}
324
		}
291
		$classe = $this->obtenirNomClasseService($this->serviceNom);
325
		$classe = $this->obtenirNomClasseService($this->serviceNom);
292
		$chemins = array();
326
		$chemins = array();
293
		$chemins[] = $this->cheminCourrant.$this->projetNom.DS.$classe.'.php';
327
		$chemins[] = $this->cheminCourrant.$this->projetNom.DS.$classe.'.php';
294
		$chemins[] = $this->cheminCourrant.'commun'.DS.$classe.'.php';
328
		$chemins[] = $this->cheminCourrant.'commun'.DS.$classe.'.php';
295
 
329
 
296
		$service = null;
330
		$service = null;
297
		foreach ($chemins as $chemin) {
331
		foreach ($chemins as $chemin) {
298
			if (file_exists($chemin)) {
332
			if (file_exists($chemin)) {
299
				$service = new $classe($this->getBdd());
333
				$service = new $classe($this->getBdd());
300
				// Affichage utile lors de PHPUnit pour détecter les conflits d'autoload de classes de même nom
334
				// Affichage utile lors de PHPUnit pour détecter les conflits d'autoload de classes de même nom
301
				// $reflector = new ReflectionClass($classe);
335
				// $reflector = new ReflectionClass($classe);
302
				// printf("===> Projets init classe '%s' depuis '%s', mais provenant de '%s'\n", $classe, $chemin, $reflector->getFileName());
336
				// printf("===> Projets init classe '%s' depuis '%s', mais provenant de '%s'\n", $classe, $chemin, $reflector->getFileName());
303
				$ressourcesPourService = $this->filtrerRessourcesPourService();
337
				$ressourcesPourService = $this->filtrerRessourcesPourService();
-
 
338
				$methode = $this->methode;
304
				return $service->consulter($ressourcesPourService, $this->parametres, $this->getBdd());
339
				return $service->$methode($ressourcesPourService, $this->parametres, $this->getBdd());
305
			}
340
			}
306
		}
341
		}
307
		if (is_null($service)) {
342
		if (is_null($service)) {
308
			$message = "Le service demandé '{$this->serviceNom}' n'existe pas dans le projet {$this->projetNom} !";
343
			$message = "Le service demandé '{$this->serviceNom}' n'existe pas dans le projet {$this->projetNom} !";
309
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
344
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
310
			throw new Exception($message, $code);
345
			throw new Exception($message, $code);
311
		}
346
		}
312
		return NULL;
347
		return NULL;
313
	}
348
	}
314
 
349
 
315
	private function chargerNomDuService() {
350
	private function chargerNomDuService() {
316
		$this->serviceNom = $this->ressources[1];
351
		$this->serviceNom = $this->ressources[1];
317
	}
352
	}
318
 
353
 
319
	private function obtenirNomClasseService($mot) {
354
	private function obtenirNomClasseService($mot) {
320
		return str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
355
		return str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
321
	}
356
	}
322
 
357
 
323
	private function filtrerRessourcesPourService() {
358
	private function filtrerRessourcesPourService() {
324
		$ressourcesPourService = array();
359
		$ressourcesPourService = array();
325
		$nbreDeRessources = count($this->ressources);
360
		$nbreDeRessources = count($this->ressources);
326
		for ($i = 2; $i < $nbreDeRessources; $i++) {
361
		for ($i = 2; $i < $nbreDeRessources; $i++) {
327
			$ressourcesPourService[] = $this->ressources[$i];
362
			$ressourcesPourService[] = $this->ressources[$i];
328
		}
363
		}
329
		return $ressourcesPourService;
364
		return $ressourcesPourService;
330
	}
365
	}
331
}
366
}
332
?>
367
?>