Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1795 Rev 1817
Line 1... Line 1...
1
<?php
1
<?php
-
 
2
// declare(encoding='UTF-8');
2
/**
3
/**
3
 * Classe principale de chargement des sous-services de Protocoles.
4
 * Classe principale de chargement des sous-services de Protocoles.
4
 *
5
 *
-
 
6
 * Urls possibles :
-
 
7
 * http://localhost/service:del:0.1/protocoles => tous les protocoles
-
 
8
 *
5
 * @category   DEL
9
 * @category   DEL
6
 * @package    Services
10
 * @package    Services
7
 * @subpackage Protocoles
11
 * @subpackage Protocoles
8
 * @version    0.1
12
 * @version    0.1
9
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
13
 * @author     Mathias CHOUET <mathias@tela-botanica.org>
Line 13... Line 17...
13
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
17
 * @license    CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
14
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
18
 * @copyright  1999-2014 Tela Botanica <accueil@tela-botanica.org>
15
 */
19
 */
16
class Protocoles extends RestService {
20
class Protocoles extends RestService {
Line 17... Line -...
17
 
-
 
18
 
-
 
19
	/*
-
 
20
	* url possibles :
-
 
21
	* http://localhost/del/services/0.1/observations/ => toutes les observations (infos obs, infos images, infos propositions, infos nb commentaires)
-
 
22
	* http://localhost/del/services/0.1/observations/#id => une observation donnée et ses images, SANS LES propositions & nombre de commentaire
-
 
23
	* */
-
 
24
 
21
 
25
	private $parametres = array();
22
	private $parametres = array();
26
	private $ressources = array();
23
	private $ressources = array();
27
	private $methode = null;
24
	private $methode = null;
28
	private $projetNom = array();
25
	private $serviceNom = 'protocoles';
29
	private $serviceNom = array();
26
	private $sousServiceNom = null;
Line 30... Line 27...
30
	private $cheminCourant = null;
27
	private $cheminCourant = null;
Line 31... Line 28...
31
 
28
 
Line 38... Line 35...
38
		$this->cheminCourant = dirname(__FILE__).DS;
35
		$this->cheminCourant = dirname(__FILE__).DS;
39
	}
36
	}
Line 40... Line 37...
40
 
37
 
41
	public function consulter($ressources, $parametres) {
38
	public function consulter($ressources, $parametres) {
-
 
39
		$this->methode = 'consulter';
-
 
40
		$this->initialiserRessourcesEtParametres($ressources, $parametres);
-
 
41
		return $this->executerService();
-
 
42
	}
-
 
43
 
42
		$this->methode = 'consulter';
44
	private function initialiserRessourcesEtParametres($ressources, $parametres = array()) {
-
 
45
		$this->ressources = $ressources;
-
 
46
		$this->parametres = $parametres;
-
 
47
	}
-
 
48
 
43
		$resultat = '';
49
	private function executerService() {
44
		$reponseHttp = new ReponseHttp();
50
		$reponseHttp = new ReponseHttp();
45
		try {
-
 
46
			$this->initialiserRessourcesEtParametres($ressources, $parametres);
51
		try {
47
			$this->conteneur = new Conteneur($this->parametres);
52
			$this->conteneur = new Conteneur($this->parametres);
48
			$resultat = $this->traiterRessources();
53
			$resultat = $this->traiterRessources();
49
			$reponseHttp->setResultatService($resultat);
54
			$reponseHttp->setResultatService($resultat);
50
		} catch (Exception $e) {
55
		} catch (Exception $e) {
Line 53... Line 58...
53
		$reponseHttp->emettreLesEntetes();
58
		$reponseHttp->emettreLesEntetes();
54
		$corps = $reponseHttp->getCorps();
59
		$corps = $reponseHttp->getCorps();
55
		return $corps;
60
		return $corps;
56
	}
61
	}
Line 57... Line -...
57
 
-
 
58
	public function ajouter($ressources, $requeteDonnees) {
-
 
59
		$this->methode = 'ajouter';
-
 
60
		$resultat = '';
-
 
61
		try {
-
 
62
			$this->initialiserRessourcesEtParametres($ressources, $requeteDonnees);
-
 
63
			$this->conteneur = new Conteneur($this->parametres);
-
 
64
			$resultat = $this->traiterRessources();
-
 
65
		} catch (Exception $e) {
-
 
66
			$reponseHttp->ajouterErreur($e);
-
 
67
		}
-
 
68
	}
-
 
69
 
-
 
70
	private function initialiserRessourcesEtParametres($ressources, $parametres) {
-
 
71
		$this->ressources = $ressources;
-
 
72
		$this->parametres = $parametres;
-
 
73
	}
-
 
74
 
62
 
75
	private function traiterRessources() {
-
 
76
		$retour = '';
63
	private function traiterRessources() {
77
		$this->initialiserProjet();
-
 
78
		if ($this->avoirRessourceService()) {
64
		$this->analyserRessources();
79
			$retour = $this->initialiserService();
-
 
80
		}
65
		$retour = $this->initialiserService();
81
		return $retour;
66
		return $retour;
Line 82... Line -...
82
	}
-
 
83
 
-
 
84
	private function avoirRessourceIdentifiant($num) {
-
 
85
		$presenceId = false;
-
 
86
			if (is_numeric($this->ressources[$num])) {
-
 
87
				$presenceId = true;
-
 
88
			} else {
-
 
89
				$message = "Le service demandé '$service' nécessite d'avoir un identifiant d'image valide";
-
 
90
				$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
-
 
91
				throw new Exception($message, $code);
-
 
92
			}
-
 
93
		return $presenceId;
-
 
94
	}
-
 
95
	/*------------------------------------------------------------------------------------------------------------------
-
 
96
										CONFIGURATION DU PROJET
-
 
97
	------------------------------------------------------------------------------------------------------------------*/
-
 
98
	private function initialiserProjet() {
-
 
99
		$this->chargerNomDuProjet();
-
 
100
		$this->chargerConfigProjet();
-
 
101
 
-
 
102
	}
-
 
103
 
-
 
104
	private function chargerNomDuProjet() {
-
 
105
		$this->projetNom = 'protocoles';
-
 
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
	/*------------------------------------------------------------------------------------------------------------------
-
 
115
								CONFIGURATION DU SERVICE
67
	}
116
	------------------------------------------------------------------------------------------------------------------*/
-
 
117
	private function avoirRessourceService() {
-
 
118
		/*
-
 
119
		* url possibles :
-
 
120
		* http://localhost/del/services/0.1/observations/ => toutes les observations (infos obs, infos images, infos propositions, infos nb commentaires)
-
 
121
		* http://localhost/del/services/0.1/observations/#id => une observation donnée et ses images, SANS LES propositions & nombre de commentaire
-
 
122
		* */
-
 
123
		$presenceRessourceService = false;
68
 
124
		if (isset($this->ressources[0])) {
69
	private function analyserRessources() {
125
			if ($this->avoirRessourceIdentifiant(0)) {
-
 
126
				if (sizeof($this->ressources) == 1) {
70
		if ($this->methode == 'consulter') {
127
					$presenceRessourceService = true;
-
 
128
					$this->serviceNom = 'observation';
-
 
129
				} else {
-
 
130
					if (isset($this->ressources[1])) {
-
 
131
						$presenceRessourceService = $this->avoirRessourceSousService();
-
 
132
					}
71
			if (count($this->ressources) == 0) {
133
				}
-
 
134
			}
-
 
135
		} else {
-
 
136
			$presenceRessourceService = true;
72
				$this->sousServiceNom = 'liste-protocoles';
-
 
73
			}
137
			$this->serviceNom = 'liste-protocoles';
74
		}
-
 
75
		if ($this->sousServiceNom == null) {
138
		}
76
			$this->lancerMessageErreurRessource();
Line 139... Line 77...
139
		return $presenceRessourceService;
77
		}
140
	}
-
 
141
 
78
	}
142
	private function avoirRessourceSousService() {
79
 
143
		$presenceRessourceService = false;
-
 
144
		$servicesDispo = Outils::recupererTableauConfig('servicesDispo');
80
	private function lancerMessageErreurRessource() {
145
		if ($this->avoirRessourceIdentifiant(1)) {
81
		$ressource = $this->sousServiceNom.'/'.implode('/', $this->ressources);
146
			$service = $this->ressources[2];
-
 
147
			if (in_array($service, $servicesDispo)) {
-
 
148
				$presenceRessourceService = true;
-
 
149
				$this->serviceNom = 'vote-observation';
82
		$message = "La ressource demandée '$ressource' ".
150
			} else {
83
			"n'est pas disponible pour le service ".$this->serviceNom." !\n".
151
				$message = "Le service demandé '$service' n'est pas disponible pour le projet {$this->projetNom} !\n".
84
			"Les URLs disponibles sont : \n".
152
							"Les services disponibles sont : ".implode(', ', $servicesDispo);
-
 
153
				$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
-
 
154
				throw new Exception($message, $code);
-
 
155
			}
85
			" - en GET : protocoles (paramètres : aucun) \n";
Line 156... Line 86...
156
		}
86
		$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
157
		return $presenceRessourceService;
-
 
158
	}
-
 
159
 
87
		throw new Exception($message, $code);
160
	private function initialiserService() {
88
	}
161
		//$this->chargerNomDuService();
89
 
162
 
90
	private function initialiserService() {
163
		$classe = $this->obtenirNomClasseService($this->serviceNom);
91
		$classe = $this->obtenirNomClasseService($this->sousServiceNom);
164
		$chemins = array();
92
		$chemins = array();
-
 
93
		$chemins[] = $this->cheminCourant.$this->serviceNom.DS.$classe.'.php';
165
		$chemins[] = $this->cheminCourant.$this->projetNom.DS.$classe.'.php';
94
		$chemins[] = $this->cheminCourant.'commun'.DS.$classe.'.php';
166
		$chemins[] = $this->cheminCourant.'commun'.DS.$classe.'.php';
95
		$retour = '';
167
		$retour = '';
-
 
168
		$service = null;
96
		$service = null;
169
		foreach ($chemins as $chemin) {
97
 
170
			if (file_exists($chemin)) {
98
		foreach ($chemins as $chemin) {
171
				$this->conteneur->chargerConfiguration('config_'.$this->projetNom.'.ini');
99
			if (file_exists($chemin)) {
-
 
100
				require_once $chemin;
-
 
101
				$service = new $classe($this->conteneur);
172
				require_once $chemin;
102
				if ($this->methode == 'consulter') {
-
 
103
					$retour = $service->consulter();
173
				$service = new $classe($this->conteneur);
104
				} else {
174
				if ($this->methode == 'consulter') {
105
					$message = "Le sous-service '{$this->sousServiceNom}' du service '{$this->serviceNom}' ".
175
					$retour = $service->consulter($this->ressources, $this->parametres);
106
						"ne possède pas de méthode '{$this->methode}' !";
176
				} elseif ($this->methode == 'ajouter') {
107
					$code = RestServeur::HTTP_NON_IMPLEMENTE;
Line 177... Line 108...
177
					$retour = $service->ajouter($this->ressources, $this->parametres);
108
					throw new Exception($message, $code);
-
 
109
				}
178
				}
110
			}
-
 
111
		}
179
			}
112
 
180
		}
113
		if (is_null($service)) {
181
 
114
			$ressource = $this->sousServiceNom.'/'.implode('/', $this->ressources);
182
		if (is_null($service)) {
115
			$message = "Le classe '$classe' correspondant à la ressource '$ressource' ".
183
			$message = "Le service demandé '{$this->serviceNom}' n'existe pas dans le projet {$this->projetNom} !";
116
				"est introuvable par le service '{$this->serviceNom}' !";
Line 184... Line 117...
184
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
117
			$code = RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE;
185
			throw new Exception($message, $code);
118
			throw new Exception($message, $code);
186
		}
119
		}
187
		return $retour;
120
		return $retour;
188
	}
-
 
189
 
-
 
190
	private function obtenirNomClasseService($mot) {
121
	}
-
 
122
 
191
		$classeNom = str_replace(' ', '', ucwords(strtolower(str_replace('-', ' ', $mot))));
123
	private function obtenirNomClasseService($mot) {