Subversion Repositories eFlore/Applications.del

Rev

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

Rev Author Line No. Line
702 gduche 1
<?php
2
/**
3
* Description :
4
* Classe principale de chargement des services d'eFlore.
5
*
6
* Encodage en entrée : utf8
7
* Encodage en sortie : utf8
8
* @package eflore-projets
9
* @author Jennifer DHÉ <jennifer.dhe@tela-botanica.org>
10
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
11
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
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>
14
* @version 0.1
15
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
16
*/
746 gduche 17
class Images extends RestService {
702 gduche 18
 
746 gduche 19
 
20
	/*
21
	 * url possibles :
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
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é
26
	 * http://localhost/del/services/0.1/images/#id/votes/#id => un vote donné pour une image donnée.
27
	 * */
28
 
702 gduche 29
	private $parametres = array();
30
	private $ressources = array();
31
	private $projetNom = array();
32
	private $serviceNom = array();
718 gduche 33
	private $cheminCourant = null;
34
 
35
	private $conteneur;
36
 
37
	/** Indique si oui (true) ou non (false), on veut utiliser les paramètres bruts. */
702 gduche 38
	protected $utilisationParametresBruts = true;
39
 
40
	public function __construct() {
718 gduche 41
		$this->cheminCourant = dirname(__FILE__).DS;
702 gduche 42
	}
43
 
44
	public function consulter($ressources, $parametres) {
718 gduche 45
 
702 gduche 46
		$resultat = '';
47
		$reponseHttp = new ReponseHttp();
48
		try {
49
			$this->initialiserRessourcesEtParametres($ressources, $parametres);
718 gduche 50
			$this->conteneur = new Conteneur($this->parametres);
702 gduche 51
			$resultat = $this->traiterRessources();
52
			$reponseHttp->setResultatService($resultat);
53
		} catch (Exception $e) {
54
			$reponseHttp->ajouterErreur($e);
55
		}
56
		$reponseHttp->emettreLesEntetes();
57
		$corps = $reponseHttp->getCorps();
58
		return $corps;
59
	}
60
 
61
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
62
		$this->ressources = $ressources;
63
		$this->parametres = $parametres;
64
	}
65
 
66
	private function traiterRessources() {
67
		$retour = '';
68
		if ($this->avoirRessources()) {
746 gduche 69
			//if ($this->avoirRessourceProjet()) {
702 gduche 70
				$this->initialiserProjet();
71
				if ($this->avoirRessourceService()) {
72
					$retour = $this->initialiserService();
73
				}
746 gduche 74
			//}
702 gduche 75
		}
76
		return $retour;
77
	}
78
 
79
	private function avoirRessources() {
80
		$presenceDeRessources = false;
81
		if (isset($this->ressources) && count($this->ressources) > 0) {
82
			$presenceDeRessources = true;
83
		} else {
84
			$message = "Aucune ressource n'a été indiquée.\n".
85
				"Veuillez indiquer au moins un code de projet et un type de service.";
86
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
87
			throw new Exception($message, $code);
88
		}
89
		return $presenceDeRessources;
90
	}
91
 
92
	private function initialiserProjet() {
93
		$this->chargerNomDuProjet();
94
		$this->chargerConfigProjet();
95
 
96
		// php5.3 : Enregistrement en première position des autoload de la méthode gérant les classes des services
97
		if (phpversion() < 5.3) {
98
			spl_autoload_register(array($this, 'chargerClasseProjet'));
99
		} else {
100
			spl_autoload_register(array($this, 'chargerClasseProjet'), true , true);
101
		}
102
	}
103
 
104
	private function chargerNomDuProjet() {
746 gduche 105
		$this->projetNom = 'images';
702 gduche 106
	}
107
 
108
	private function chargerConfigProjet() {
109
		$projet = $this->projetNom;
110
		$chemin = Config::get('chemin_configurations')."config_$projet.ini";
111
		Config::charger($chemin);
112
	}
113
 
114
	private function chargerClasseProjet($classe) {
115
		if (class_exists($classe)) {
116
			return null;
117
		}
118
 
119
		$cheminBiblio = Config::get('chemin_bibliotheque');
120
		$chemins = array();
718 gduche 121
		$chemins[] = $this->cheminCourant.$this->projetNom.DS;
122
		$chemins[] = $this->cheminCourant.'commun'.DS;
702 gduche 123
		$chemins[] = $cheminBiblio;
124
		$chemins[] = $cheminBiblio.'robots'.DS;
125
 
126
		foreach ($chemins as $chemin) {
127
			$chemin = $chemin.$classe.'.php';
128
			if (file_exists($chemin)) {
129
				require_once $chemin;
130
				break;
131
			}
132
		}
133
	}
134
 
135
	private function avoirRessourceService() {
136
		$presenceRessourceService = false;
137
		$servicesDispo = Outils::recupererTableauConfig('servicesDispo');
718 gduche 138
 
746 gduche 139
		if (isset($this->ressources[0])) {
140
			$service = $this->ressources[0];
702 gduche 141
			if (in_array($service, $servicesDispo)) {
142
				$presenceRessourceService = true;
143
			} else {
144
				$message = "La service demandé '$service' n'est pas disponible pour le projet {$this->projetNom} !\n".
145
					"Les services disponibles sont : ".implode(', ', $servicesDispo);
146
				$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
147
				throw new Exception($message, $code);
148
			}
149
		} else {
150
			$message = "Vous n'avez pas indiqué de service pour le projet {$this->projetNom} !\n".
151
				"Les services disponibles sont : ".implode(', ', $servicesDispo);
152
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
153
			throw new Exception($message, $code);
154
		}
155
		return $presenceRessourceService;
156
	}
157
 
158
	private function initialiserService() {
159
		$this->chargerNomDuService();
746 gduche 160
 
702 gduche 161
		$classe = $this->obtenirNomClasseService($this->serviceNom);
162
		$chemins = array();
718 gduche 163
		$chemins[] = $this->cheminCourant.$this->projetNom.DS.$classe.'.php';
164
		$chemins[] = $this->cheminCourant.'commun'.DS.$classe.'.php';
702 gduche 165
 
166
		$retour = '';
167
		$service = null;
168
		foreach ($chemins as $chemin) {
169
			if (file_exists($chemin)) {
718 gduche 170
				$this->conteneur->chargerConfiguration('config_'.$this->projetNom.'.ini');
724 gduche 171
				$service = new $classe($this->conteneur);
702 gduche 172
				$ressourcesPourService = $this->filtrerRessourcesPourService();
173
				$retour = $service->consulter($ressourcesPourService, $this->parametres);
174
			}
175
		}
746 gduche 176
 
702 gduche 177
		if (is_null($service)) {
178
			$message = "La service demandé '{$this->serviceNom}' n'existe pas dans le projet {$this->projetNom} !";
179
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
180
			throw new Exception($message, $code);
181
		}
182
		return $retour;
183
	}
184
 
185
	private function chargerNomDuService() {
746 gduche 186
		$this->serviceNom = $this->ressources[0];
702 gduche 187
	}
188
 
189
	private function obtenirNomClasseService($mot) {
190
		$classeNom = str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
191
		return $classeNom;
192
	}
193
 
194
	private function filtrerRessourcesPourService() {
195
		$ressourcesPourService = array();
196
		$nbreDeRessources = count($this->ressources);
197
		for ($i = 2; $i < $nbreDeRessources; $i++) {
198
			$ressourcesPourService[] = $this->ressources[$i];
199
		}
200
		return $ressourcesPourService;
201
	}
202
}
203
?>