Subversion Repositories eFlore/Applications.del

Rev

Rev 1462 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1462 Rev 1795
Line 1... Line 1...
1
<?php
1
<?php
-
 
2
// declare(encoding='UTF-8');
2
/**
3
/**
-
 
4
 * Classe principale de chargement des sous-service "mots-clés" de DEL.
-
 
5
 *
3
* Description :
6
 * URLs possibles :
-
 
7
 * GET
-
 
8
 * http://localhost/del/services/0.1/mots-cles?image=#id&auteur.id=#id => les différents mots-clés des images en fonction des paramètres.
-
 
9
 * PUT
-
 
10
 * http://localhost/del/services/0.1/mots-cles?image=#id&auteur.id=#id&mot_cle=motCle1,motCle2,... => Ajoute différents mots-clés pour une image d'un utilisateur
-
 
11
 * DELETE
4
* Classe principale de chargement des services d'eFlore.
12
 * http://localhost/del/services/0.1/mots-cles?image=#id&auteur.id=#id => les différents mots-clés des images en fonction des paramètres.
5
*
13
 *
6
* Encodage en entrée : utf8
14
 * @category   DEL
7
* Encodage en sortie : utf8
15
 * @package    Services
8
* @package del
16
 * @subpackage MotsCles
-
 
17
 * @version    0.1
-
 
18
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
-
 
19
 * @author     Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
20
 * @author     Aurelien PERONNET <aurelien@tela-botanica.org>
10
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
21
 * @license    GPL v3 <http://www.gnu.org/licenses/gpl.txt>
11
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
22
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
12
* @version 0.1
-
 
13
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
23
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
14
*/
24
 */
15
class MotsCles extends RestService {
25
class MotsCles extends RestService {
Line 16... Line -...
16
 
-
 
17
	
-
 
18
	/*
-
 
19
	 * url possibles : 
-
 
20
	 * http://localhost/del/services/0.1/motscles/#id =>  les mots clés associés à une image donnée
-
 
21
	 * */
-
 
22
	
26
 
23
	private $parametres = array();
27
	private $parametres = array();
24
	private $ressources = array();
28
	private $ressources = array();
25
	private $methode = null;
29
	private $methode = null;
26
	private $projetNom = array();
30
	private $serviceNom = 'mots_cles';
27
	private $serviceNom = array();
31
	private $sousServiceNom = null;
Line 28... Line 32...
28
	private $cheminCourant = null;
32
	private $cheminCourant = null;
29
 
33
 
30
	private $conteneur;
34
	private $conteneur;
31
	
35
 
Line 32... Line 36...
32
	/** Indique si oui (true) ou non (false), on veut utiliser les paramètres bruts. */
36
	/** Indique si oui (true) ou non (false), on veut utiliser les paramètres bruts. */
33
	protected $utilisationParametresBruts = true;
37
	protected $utilisationParametresBruts = true;
34
 
38
 
Line 35... Line 39...
35
	public function __construct() {
39
	public function __construct() {
36
		$this->cheminCourant = dirname(__FILE__).DS;
40
		$this->cheminCourant = dirname(__FILE__).DS;
37
	}
-
 
38
 
-
 
39
	public function consulter($ressources, $parametres) {
-
 
40
		$this->methode = 'consulter';
41
	}
41
		$resultat = '';
-
 
42
		$reponseHttp = new ReponseHttp();
42
 
43
		try {
-
 
44
			$this->initialiserRessourcesEtParametres($ressources, $parametres);
-
 
45
			$this->conteneur = new Conteneur($this->parametres);
-
 
46
			$resultat = $this->traiterRessources();
-
 
47
			$reponseHttp->setResultatService($resultat);
-
 
48
		} catch (Exception $e) {
-
 
49
			$reponseHttp->ajouterErreur($e);
-
 
50
		}
43
	public function consulter($ressources, $parametres) {
51
		$reponseHttp->emettreLesEntetes();
44
		$this->methode = 'consulter';
52
		$corps = $reponseHttp->getCorps();
45
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
53
		return $corps;
46
		return $this->executerService();
54
	}
-
 
55
	
-
 
56
	public function ajouter($ressources, $parametres) {
-
 
57
		$this->methode = 'ajouter';
-
 
58
		$resultat = '';
47
	}
59
		$reponseHttp = new ReponseHttp();
-
 
60
		
48
 
61
		try {
-
 
62
			$this->initialiserRessourcesEtParametres($ressources, $parametres);
-
 
63
			$this->conteneur = new Conteneur($this->parametres);
-
 
64
			$resultat = $this->traiterRessources();
-
 
65
			$reponseHttp->setResultatService($resultat);
-
 
66
		} catch (Exception $e) {
-
 
67
			$reponseHttp->ajouterErreur($e);
49
	public function ajouter($ressources, $requeteDonnees) {
68
		}
50
		$this->methode = 'ajouter';
69
		$corps = $reponseHttp->getCorps();
51
		$this->initialiserRessourcesEtParametres($ressources, $requeteDonnees);
70
		return $corps;
52
		return $this->executerService();
-
 
53
	}
-
 
54
 
-
 
55
	public function supprimer($ressources) {
-
 
56
		$this->methode = 'supprimer';
-
 
57
		$this->initialiserRessourcesEtParametres($ressources);
-
 
58
		return $this->executerService();
-
 
59
	}
-
 
60
 
-
 
61
	private function initialiserRessourcesEtParametres($ressources, $parametres = array()) {
-
 
62
		$this->ressources = $ressources;
71
	}
63
		$this->parametres = $parametres;
72
	
64
	}
73
	public function supprimer($ressources) {
65
 
74
		$this->methode = 'supprimer';
-
 
75
		$resultat = '';
66
	private function executerService() {
76
		$reponseHttp = new ReponseHttp();
67
		$resultat = '';
77
		try {
68
		$reponseHttp = new ReponseHttp();
78
			$this->ressources = $ressources;
69
		try {
79
			$this->conteneur = new Conteneur();
70
			$this->conteneur = new Conteneur($this->parametres);
80
			$resultat = $this->traiterRessources();
-
 
81
			$reponseHttp->setResultatService($resultat);
-
 
82
		} catch (Exception $e) {
71
			$resultat = $this->traiterRessources();
83
			$reponseHttp->ajouterErreur($e);
-
 
84
			$reponseHttp->emettreLesEntetes();
-
 
85
			echo $reponseHttp->getCorps();
72
			$reponseHttp->setResultatService($resultat);
86
		}
-
 
87
	}
-
 
88
	
-
 
89
	public function modifier($ressources, $requeteDonnees) {
-
 
90
		
73
		} catch (Exception $e) {
91
	}
74
			$reponseHttp->ajouterErreur($e);
92
 
75
		}
Line 93... Line 76...
93
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
76
		$reponseHttp->emettreLesEntetes();
94
		$this->ressources = $ressources;
-
 
95
		$this->parametres = $parametres;
77
		$corps = $reponseHttp->getCorps();
96
	}
78
		return $corps;
97
 
79
	}
98
	private function traiterRessources() {
80
 
99
		$retour = '';
-
 
100
		$this->initialiserProjet();
-
 
101
		$retour = $this->initialiserService();
-
 
102
		return $retour;
-
 
103
	}
-
 
104
	
-
 
105
 
-
 
106
	/*------------------------------------------------------------------------------------------------------------------
-
 
107
										CONFIGURATION DU PROJET
-
 
108
	------------------------------------------------------------------------------------------------------------------*/
-
 
Line 109... Line 81...
109
	private function initialiserProjet() {
81
	private function traiterRessources() {
110
		$this->chargerNomDuProjet();
82
		$this->analyserRessources();
111
		$this->chargerConfigProjet();
-
 
112
 
-
 
113
	}
83
		$retour = $this->initialiserService();
114
 
-
 
115
	private function chargerNomDuProjet() {
84
		return $retour;
116
		$this->projetNom = 'motscles';
-
 
117
	}
85
	}
118
 
-
 
119
	private function chargerConfigProjet() {
-
 
120
		$projet = $this->projetNom;
-
 
121
		$chemin = Config::get('chemin_configurations')."config_mots_cles.ini";
-
 
122
		Config::charger($chemin);
-
 
123
	}
-
 
124
 
86
 
125
	/*------------------------------------------------------------------------------------------------------------------
87
	private function analyserRessources() {
126
								CONFIGURATION DU SERVICE
88
		if ($this->methode == 'consulter') {
-
 
89
			if (!isset($this->ressources) || empty($this->ressources)) {
127
	------------------------------------------------------------------------------------------------------------------*/
90
				$this->sousServiceNom = 'liste-mots-cles';
-
 
91
			}
128
	private function chargerNomService() {
92
		} else if ($this->methode == 'ajouter') {
129
		// si la méthode est POST, on ajouter un commentaire
93
			$this->sousServiceNom = 'ajouter-mot-cle';
130
		if ($this->methode == 'ajouter') {
-
 
131
			$this->serviceNom = 'ajouter-mot-cle';
-
 
132
		} else if ($this->methode == 'supprimer') {
94
		} else if ($this->methode == 'supprimer') {
133
			$this->serviceNom = 'supprimer-mot-cle';
-
 
134
		}
-
 
135
		else {
-
 
136
			//S'il n'y a pas de ressources => tous les commentaires
-
 
137
			if (!isset($this->ressources) || empty($this->ressources)) {
-
 
138
				$this->serviceNom = 'liste-mots-cles';
-
 
139
			} else {
95
			if (isset($this->ressources[0]) && count($this->ressources) == 1 && is_numeric($this->ressources[0])) {
140
				if (!is_numeric($this->ressources[0])) {
-
 
141
					$message = "La première ressource doit être un identifiant";
-
 
142
					$code = RestServeur::HTTP_CODE_ERREUR;
96
				$this->sousServiceNom = 'supprimer-mot-cle';
143
					throw new Exception($message, $code);
97
			}
144
				} else {
98
		}
145
					$this->serviceNom = 'consulter-mots-cles';
99
 
146
				}
100
		if ($this->sousServiceNom == null) {
-
 
101
			$this->lancerMessageErreurRessource();
147
			}			
102
		}
-
 
103
	}
-
 
104
 
148
		}
105
	private function lancerMessageErreurRessource() {
-
 
106
		$ressource = $this->sousServiceNom.'/'.implode('/', $this->ressources);
149
	}
107
		$message = "La ressource demandée '$ressource' ".
150
	
108
			"n'est pas disponible pour le service «".$this->serviceNom."» !\n".
151
	private function editerMessageErreurRessource() {
109
			"Les URLs disponibles sont : \n".
152
		$message = "Le service demandé '".$this->projetNom.'/'.implode('/', $this->ressources).
-
 
153
					"' n'est pas disponible pour le projet ".$this->projetNom." !\n".
-
 
154
					"Les services disponibles sont : images, images/#id/votes, images/#id/vote/#id_vote";
-
 
155
		$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
-
 
156
		throw new Exception($message, $code);
-
 
157
	}
-
 
158
	
-
 
159
	private function etreRessourceIdentifiant($num) {
-
 
160
		$presenceId = false;
-
 
161
		if (is_numeric($this->ressources[$num])) {
-
 
162
			$presenceId = true;
-
 
163
		} else {
-
 
Line 164... Line 110...
164
			$message = "Le service demandé '$service' nécessite d'avoir un identifiant d'image valide";
110
			" - en GET : mots-cles?image=#idImg&auteur.id=#idUtilisateur \n".
165
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
-
 
166
			throw new Exception($message, $code);
-
 
167
		}
111
			" - en PUT : mots-cles?image=#idImg&auteur.id=#idUtilisateur&mots_cles=motCle1,motCle2,...".
168
		return $presenceId;
-
 
169
	}
112
			" - en DELETE : mots-cles/#idMotCle";
170
 
-
 
171
	private function initialiserService() {
-
 
172
		$this->chargerNomService();
113
		$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
173
		
114
		throw new Exception($message, $code);
174
		$classe = $this->obtenirNomClasseService($this->serviceNom);
-
 
175
		$chemins = array();
115
	}
176
		$chemins[] = $this->cheminCourant.$this->projetNom.DS.$classe.'.php';
-
 
177
		$chemins[] = $this->cheminCourant.'commun'.DS.$classe.'.php';
116
 
178
		
117
	private function initialiserService() {
179
		$retour = '';
118
		$classe = $this->obtenirNomClasseService($this->sousServiceNom);
180
		$service = null;
119
		$chemin = $this->cheminCourant.$this->serviceNom.DS.$classe.'.php';
181
		foreach ($chemins as $chemin) {
120
		$retour = '';
182
			if (file_exists($chemin)) {
121
		$service = null;
183
				$this->conteneur->chargerConfiguration('config_mots_cles.ini');
-
 
184
				require_once $chemin;
-
 
185
				$service = new $classe($this->conteneur);
122
		if (file_exists($chemin)) {
186
				if ($this->methode == 'consulter') {
123
			require_once $chemin;
187
					$retour = $service->consulter($this->ressources, $this->parametres);
-
 
188
				} elseif ($this->methode == 'ajouter') {
124
			$service = new $classe($this->conteneur);
189
					$retour = $service->ajouter($this->ressources, $this->parametres);
125
			if ($this->methode == 'consulter') {
190
				} elseif ($this->methode == 'modifier') {
126
				$retour = $service->consulter($this->ressources, $this->parametres);
191
					$retour = $service->modifier($this->ressources, $this->parametres);
127
			} elseif ($this->methode == 'ajouter') {
-
 
128
				$retour = $service->ajouter($this->ressources, $this->parametres);
192
				} elseif ($this->methode == 'supprimer') {
129
			} elseif ($this->methode == 'supprimer') {
-
 
130
				$retour = $service->supprimer($this->ressources);
193
					$retour = $service->supprimer($this->ressources, $this->parametres);
131
			}
194
				}
132
		}
195
			}
133
 
196
		}
134
		if (is_null($service)) {
197
		
135
			$ressource = $this->sousServiceNom.'/'.implode('/', $this->ressources);
Line 198... Line 136...
198
		if (is_null($service)) {
136
			$message = "Le classe '$classe' correspondant à la ressource '$ressource' ".
199
			$message = "Le service demandé '{$this->serviceNom}' n'existe pas dans le projet {$this->projetNom} !";
137
				"n'existe pas dans le service '{$this->serviceNom}' !";
200
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
138
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
201
			throw new Exception($message, $code);
139
			throw new Exception($message, $code);
202
		}
-
 
203
		return $retour;
-
 
204
	}
140
		}
-
 
141
		return $retour;
205
 
142
	}