Subversion Repositories eFlore/Applications.del

Rev

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

Rev 758 Rev 782
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 Images extends RestService {
17
class Images extends RestService {
18
 
18
 
19
	
19
	
20
	/*
20
	/*
21
	 * url possibles : 
21
	 * url possibles : 
22
	 * http://localhost/del/services/0.1/images/ => toutes les images, appel à la classe ListeImages
22
	 * http://localhost/del/services/0.1/images/ => toutes les images, appel à la classe ListeImages
23
	 * http://localhost/del/services/0.1/images/#id => une image donnée => non utilisé sur DEL pour l'instant
23
	 * http://localhost/del/services/0.1/images/#id => une image donnée => non utilisé sur DEL pour l'instant
24
	 * http://localhost/del/services/0.1/images/#id/votes/ => tous les votes d'une image classés par protocole
24
	 * http://localhost/del/services/0.1/images/#id/votes/ => tous les votes d'une image classés par protocole
25
	 * http://localhost/del/services/0.1/images/#id/votes/protocole/#id => tous les votes d'une image et d'un protocole donné
25
	 * http://localhost/del/services/0.1/images/#id/votes/protocole/#id => tous les votes d'une image et d'un protocole donné
26
	 * http://localhost/del/services/0.1/images/#id/votes/#id => un vote donné pour une image donnée.
26
	 * http://localhost/del/services/0.1/images/#id/votes/#id => un vote donné pour une image donnée.
27
	 * */
27
	 * */
28
	
28
	
29
	private $parametres = array();
29
	private $parametres = array();
30
	private $ressources = array();
30
	private $ressources = array();
-
 
31
	private $methode = null;
31
	private $projetNom = array();
32
	private $projetNom = array();
32
	private $serviceNom = array();
33
	private $serviceNom = array();
33
	private $cheminCourant = null;
34
	private $cheminCourant = null;
34
 
35
 
35
	private $conteneur;
36
	private $conteneur;
36
	
37
	
37
	/** Indique si oui (true) ou non (false), on veut utiliser les paramètres bruts. */
38
	/** Indique si oui (true) ou non (false), on veut utiliser les paramètres bruts. */
38
	protected $utilisationParametresBruts = true;
39
	protected $utilisationParametresBruts = true;
39
 
40
 
40
	public function __construct() {
41
	public function __construct() {
41
		$this->cheminCourant = dirname(__FILE__).DS;
42
		$this->cheminCourant = dirname(__FILE__).DS;
42
	}
43
	}
43
 
44
 
44
	public function consulter($ressources, $parametres) {
45
	public function consulter($ressources, $parametres) {
45
		
-
 
-
 
46
		$this->methode = 'consulter';
46
		$resultat = '';
47
		$resultat = '';
47
		$reponseHttp = new ReponseHttp();
48
		$reponseHttp = new ReponseHttp();
48
		try {
49
		try {
49
			$this->initialiserRessourcesEtParametres($ressources, $parametres);
50
			$this->initialiserRessourcesEtParametres($ressources, $parametres);
50
			$this->conteneur = new Conteneur($this->parametres);
51
			$this->conteneur = new Conteneur($this->parametres);
51
			$resultat = $this->traiterRessources();
52
			$resultat = $this->traiterRessources();
52
			$reponseHttp->setResultatService($resultat);
53
			$reponseHttp->setResultatService($resultat);
53
		} catch (Exception $e) {
54
		} catch (Exception $e) {
54
			$reponseHttp->ajouterErreur($e);
55
			$reponseHttp->ajouterErreur($e);
55
		}
56
		}
56
		$reponseHttp->emettreLesEntetes();
57
		$reponseHttp->emettreLesEntetes();
57
		$corps = $reponseHttp->getCorps();
58
		$corps = $reponseHttp->getCorps();
58
		return $corps;
59
		return $corps;
59
	}
60
	}
-
 
61
	
-
 
62
	public function ajouter($ressources, $requeteDonnees) {
-
 
63
		$this->methode = 'ajouter';
-
 
64
		$resultat = '';
-
 
65
		try {
-
 
66
			$this->initialiserRessourcesEtParametres($ressources, $requeteDonnees);
-
 
67
			$this->conteneur = new Conteneur($this->parametres);
-
 
68
			$resultat = $this->traiterRessources();
-
 
69
		} catch (Exception $e) {
-
 
70
			$reponseHttp->ajouterErreur($e);
-
 
71
		}
-
 
72
	}
60
 
73
 
61
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
74
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
62
		$this->ressources = $ressources;
75
		$this->ressources = $ressources;
63
		$this->parametres = $parametres;
76
		$this->parametres = $parametres;
64
	}
77
	}
65
 
78
 
66
	private function traiterRessources() {
79
	private function traiterRessources() {
67
		$retour = '';
80
		$retour = '';
68
		$this->initialiserProjet();
81
		$this->initialiserProjet();
69
		if ($this->avoirRessourceService()) {
82
		if ($this->avoirRessourceService()) {
70
			$retour = $this->initialiserService();
83
			$retour = $this->initialiserService();
71
		}
84
		}
72
		return $retour;
85
		return $retour;
73
	}
86
	}
74
	
87
	
75
 
88
 
76
	/*------------------------------------------------------------------------------------------------------------------
89
	/*------------------------------------------------------------------------------------------------------------------
77
										CONFIGURATION DU PROJET
90
										CONFIGURATION DU PROJET
78
	------------------------------------------------------------------------------------------------------------------*/
91
	------------------------------------------------------------------------------------------------------------------*/
79
	private function initialiserProjet() {
92
	private function initialiserProjet() {
80
		$this->chargerNomDuProjet();
93
		$this->chargerNomDuProjet();
81
		$this->chargerConfigProjet();
94
		$this->chargerConfigProjet();
82
 
95
 
83
	}
96
	}
84
 
97
 
85
	private function chargerNomDuProjet() {
98
	private function chargerNomDuProjet() {
86
		$this->projetNom = 'images';
99
		$this->projetNom = 'images';
87
	}
100
	}
88
 
101
 
89
	private function chargerConfigProjet() {
102
	private function chargerConfigProjet() {
90
		$projet = $this->projetNom;
103
		$projet = $this->projetNom;
91
		$chemin = Config::get('chemin_configurations')."config_$projet.ini";
104
		$chemin = Config::get('chemin_configurations')."config_$projet.ini";
92
		Config::charger($chemin);
105
		Config::charger($chemin);
93
	}
106
	}
94
 
107
 
95
	/*------------------------------------------------------------------------------------------------------------------
108
	/*------------------------------------------------------------------------------------------------------------------
96
								CONFIGURATION DU SERVICE
109
								CONFIGURATION DU SERVICE
97
	------------------------------------------------------------------------------------------------------------------*/
110
	------------------------------------------------------------------------------------------------------------------*/
98
	private function avoirRessourceService() {
111
	private function avoirRessourceService() {
99
		/*
112
		/*
100
		* url possibles :
113
		* url possibles :
101
		* http://localhost/del/services/0.1/images/ => toutes les images, appel à la classe ListeImages
114
		* http://localhost/del/services/0.1/images/ => toutes les images, appel à la classe ListeImages
102
		* http://localhost/del/services/0.1/images/#id => une image donnée => non utilisé sur DEL pour l'instant
115
		* http://localhost/del/services/0.1/images/#id => une image donnée => non utilisé sur DEL pour l'instant
103
		* http://localhost/del/services/0.1/images/#id/votes/ => tous les votes d'une image classés par protocole
116
		* http://localhost/del/services/0.1/images/#id/votes/ => tous les votes d'une image classés par protocole
104
		* http://localhost/del/services/0.1/images/#id/votes/protocole/#id => tous les votes d'une image et d'un protocole donné
117
		* http://localhost/del/services/0.1/images/#id/votes/protocole/#id => tous les votes d'une image et d'un protocole donné
105
		* http://localhost/del/services/0.1/images/#id/votes/#id => un vote donné pour une image donnée.
118
		* http://localhost/del/services/0.1/images/#id/votes/#id => un vote donné pour une image donnée.
106
		* */
119
		* */
107
		$presenceRessourceService = false;
120
		$presenceRessourceService = false;
108
		if (isset($this->ressources[0])) {
121
		if (isset($this->ressources[0])) {
109
			if ($this->etreRessourceIdentifiant(0)) {
122
			if ($this->etreRessourceIdentifiant(0)) {
110
				if (isset($this->ressources[1])) {
123
				if (isset($this->ressources[1])) {
111
					$presenceRessourceService = $this->avoirRessourceSousService();
124
					$presenceRessourceService = $this->avoirRessourceSousService();
112
				} else {
125
				} else {
113
					$this->editerMessageErreurRessource();
126
					$this->editerMessageErreurRessource();
114
				}
127
				}
115
			}
128
			}
116
		} else {
129
		} else {
117
			$presenceRessourceService = true;
130
			$presenceRessourceService = true;
118
			$this->serviceNom = 'liste-images';
131
			$this->serviceNom = 'liste-images';
119
		}
132
		}
120
		return $presenceRessourceService;
133
		return $presenceRessourceService;
121
	}
134
	}
122
	
135
	
123
	private function avoirRessourceSousService() {
136
	private function avoirRessourceSousService() {
124
		$presenceRessourceService = false;
137
		$presenceRessourceService = false;
125
		if (sizeof($this->ressources) == 2) {
138
		if (sizeof($this->ressources) == 2) {
126
			if ($this->ressources[1] == 'votes') {
139
			if ($this->ressources[1] == 'votes') {
127
				$presenceRessourceService = true;
140
				$presenceRessourceService = true;
128
				$this->serviceNom = 'votes-image';
141
				$this->serviceNom = 'votes-image';
129
			} else {
142
			} else {
130
				$this->editerMessageErreurRessource();
143
				$this->editerMessageErreurRessource();
131
			}
144
			}
132
		} else {
145
		} else {
133
			if (isset($this->ressources[2]) && $this->etreRessourceIdentifiant(2)) {
146
			if (isset($this->ressources[2]) && $this->etreRessourceIdentifiant(2)) {
134
				$presenceRessourceService = true;
147
				$presenceRessourceService = true;
135
				$this->serviceNom = 'vote-image';
148
				$this->serviceNom = 'vote-image';
136
			} else {
149
			} else {
137
				$this->editerMessageErreurRessource();
150
				$this->editerMessageErreurRessource();
138
			}
151
			}
139
		}
152
		}
140
		return $presenceRessourceService;
153
		return $presenceRessourceService;
141
	}
154
	}
142
	
155
	
143
	private function editerMessageErreurRessource() {
156
	private function editerMessageErreurRessource() {
144
		$message = "Le service demandé '".$this->projetNom.'/'.implode('/', $this->ressources).
157
		$message = "Le service demandé '".$this->projetNom.'/'.implode('/', $this->ressources).
145
					"' n'est pas disponible pour le projet ".$this->projetNom." !\n".
158
					"' n'est pas disponible pour le projet ".$this->projetNom." !\n".
146
					"Les services disponibles sont : images, images/#id/votes, images/#id/vote/#id_vote";
159
					"Les services disponibles sont : images, images/#id/votes, images/#id/vote/#id_vote";
147
		$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
160
		$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
148
		throw new Exception($message, $code);
161
		throw new Exception($message, $code);
149
	}
162
	}
150
	
163
	
151
	private function etreRessourceIdentifiant($num) {
164
	private function etreRessourceIdentifiant($num) {
152
		$presenceId = false;
165
		$presenceId = false;
153
		if (is_numeric($this->ressources[$num])) {
166
		if (is_numeric($this->ressources[$num])) {
154
			$presenceId = true;
167
			$presenceId = true;
155
		} else {
168
		} else {
156
			$message = "Le service demandé '$service' nécessite d'avoir un identifiant d'image valide";
169
			$message = "Le service demandé '$service' nécessite d'avoir un identifiant d'image valide";
157
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
170
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
158
			throw new Exception($message, $code);
171
			throw new Exception($message, $code);
159
		}
172
		}
160
		return $presenceId;
173
		return $presenceId;
161
	}
174
	}
162
 
175
 
163
	private function initialiserService() {
176
	private function initialiserService() {
164
		//$this->chargerNomDuService();
177
		//$this->chargerNomDuService();
165
		
178
		
166
		$classe = $this->obtenirNomClasseService($this->serviceNom);
179
		$classe = $this->obtenirNomClasseService($this->serviceNom);
167
		$chemins = array();
180
		$chemins = array();
168
		$chemins[] = $this->cheminCourant.$this->projetNom.DS.$classe.'.php';
181
		$chemins[] = $this->cheminCourant.$this->projetNom.DS.$classe.'.php';
169
		$chemins[] = $this->cheminCourant.'commun'.DS.$classe.'.php';
182
		$chemins[] = $this->cheminCourant.'commun'.DS.$classe.'.php';
170
		$retour = '';
183
		$retour = '';
171
		$service = null;
184
		$service = null;
172
		foreach ($chemins as $chemin) {
185
		foreach ($chemins as $chemin) {
173
			if (file_exists($chemin)) {
186
			if (file_exists($chemin)) {
174
				$this->conteneur->chargerConfiguration('config_'.$this->projetNom.'.ini');
187
				$this->conteneur->chargerConfiguration('config_'.$this->projetNom.'.ini');
175
				require_once $chemin;
188
				require_once $chemin;
176
				$service = new $classe($this->conteneur);
189
				$service = new $classe($this->conteneur);
-
 
190
				if ($this->methode == 'consulter') {
177
				$retour = $service->consulter($this->ressources, $this->parametres);
191
					$retour = $service->consulter($this->ressources, $this->parametres);
-
 
192
				} elseif ($this->methode == 'ajouter') {
-
 
193
					$retour = $service->ajouter($this->ressources, $this->parametres);
-
 
194
				}
178
			}
195
			}
179
		}
196
		}
180
		
197
		
181
		if (is_null($service)) {
198
		if (is_null($service)) {
182
			$message = "Le service demandé '{$this->serviceNom}' n'existe pas dans le projet {$this->projetNom} !";
199
			$message = "Le service demandé '{$this->serviceNom}' n'existe pas dans le projet {$this->projetNom} !";
183
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
200
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
184
			throw new Exception($message, $code);
201
			throw new Exception($message, $code);
185
		}
202
		}
186
		return $retour;
203
		return $retour;
187
	}
204
	}
188
 
205
 
189
	private function obtenirNomClasseService($mot) {
206
	private function obtenirNomClasseService($mot) {
190
		$classeNom = str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
207
		$classeNom = str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
191
		return $classeNom;
208
		return $classeNom;
192
	}
209
	}
193
 
210
 
194
 
211
 
195
}
212
}
196
?>
213
?>