Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 6 Rev 13
1
<?php
1
<?php
2
/**
2
/**
3
* Description :
3
* Description :
4
* Classe Langues.php fournit des informations sur ensemble structuré des termes et concepts représentant les éléments
4
* Classe Langues.php fournit des informations sur ensemble structuré des termes et concepts représentant les éléments
5
* d'un domaine de connaissances .
5
* d'un domaine de connaissances .
6
* Le but étant de fournir un ensemble minimal d'information comprenant :
6
* Le but étant de fournir un ensemble minimal d'information comprenant :
7
* un identifiant (numérique ou alphanumérique sous forme de ChatMot si possible), un nom, une region et
7
* un identifiant (numérique ou alphanumérique sous forme de ChatMot si possible), un nom, une region et
8
* éventuellement une relation hiérarchique avec un autre terme (=classe).
8
* éventuellement une relation hiérarchique avec un autre terme (=classe).
9
* Si l'url finit par /langues on retourne une liste de termes (seulement les 100 premières par défaut).
9
* Si l'url finit par /langues on retourne une liste de termes (seulement les 100 premières par défaut).
10
* L'url peut contenir des paramètres optionnels passés après le ? : /observations?param1=val1&param2=val2&...
10
* L'url peut contenir des paramètres optionnels passés après le ? : /observations?param1=val1&param2=val2&...
11
*
11
*
12
* Les paramètres de requête disponibles sont : masque, masque.code, masque.nom, masque.region , recherche,
12
* Les paramètres de requête disponibles sont : masque, masque.code, masque.nom, masque.region , recherche,
13
* distinct, retour.format, navigation.depart et navigation.limite.
13
* distinct, retour.format, navigation.depart et navigation.limite.
14
*
14
*
15
* Encodage en entrée : utf8
15
* Encodage en entrée : utf8
16
* Encodage en sortie : utf8
16
* Encodage en sortie : utf8
17
* @package framework-v3
17
* @package framework-v3
18
* @author Delphine Cauquil <delphine@tela-botanica.org>
18
* @author Delphine Cauquil <delphine@tela-botanica.org>
19
* @author Jennifer Dhé <jennifer.dhe@tela-botanica.org>
19
* @author Jennifer Dhé <jennifer.dhe@tela-botanica.org>
20
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
20
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
21
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
21
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
22
* @version 1.0
22
* @version 1.0
23
* @copyright 1999-${year} Tela Botanica (accueil@tela-botanica.org)
23
* @copyright 1999-${year} Tela Botanica (accueil@tela-botanica.org)
24
*/
24
*/
25
 
25
 
26
class Langues extends Commun {
26
class Langues extends Commun {
27
 
27
 
28
	protected $service = 'langues';
28
	protected $service = 'langues';
29
 
29
 
30
	/**
30
	/**
31
	 * Permet de stocker la requete formulée : /langues | /langues/#id | /langues/#id/champ | /langues/#id/relations
31
	 * Permet de stocker la requete formulée : /langues | /langues/#id | /langues/#id/champ | /langues/#id/relations
32
	 * Est remplit au cours de l'analyse des ressources (traiterRessources()), par défaut, a la valeur du service.
32
	 * Est remplit au cours de l'analyse des ressources (traiterRessources()), par défaut, a la valeur du service.
33
	 * Est utilisée principalement pr déterminer le format du tableau à retourner.	 */
33
	 * Est utilisée principalement pr déterminer le format du tableau à retourner.	 */
34
	protected $format_reponse = 'langues';
34
	protected $format_reponse = 'langues';
35
 
35
 
36
	/** Variables constituant les parametres de la requete SQL (champ, condition, group by, limit) remplie
36
	/** Variables constituant les parametres de la requete SQL (champ, condition, group by, limit) remplie
37
	 * selon ressources et paramètres	 */
37
	 * selon ressources et paramètres	 */
38
	protected $requete_champ = ' * ';
38
	protected $requete_champ = ' * ';
39
	protected $requete_condition = '';
39
	protected $requete_condition = '';
40
	protected $limite_requete 	 = array(
40
	protected $limite_requete 	 = array(
41
		'depart' => 0,
41
		'depart' => 0,
42
		'limite' => 100
42
		'limite' => 100
43
	);
43
	);
44
 
44
 
45
	/** Stockage des ressources et paramétres */
45
	/** Stockage des ressources et paramétres */
46
	protected $table_ressources = array();
46
	protected $table_ressources = array();
47
	protected $table_param = array();
47
	protected $table_param = array();
48
	/**
48
	/**
49
	 * Precise la contenance plus ou moins précise du tableau à retourner :
49
	 * Precise la contenance plus ou moins précise du tableau à retourner :
50
	 *  - min = les données présentes dans la table
50
	 *  - min = les données présentes dans la table
51
	 *  - max = les données de la table + les informations complémentaires (pour les identifiants et les codes)
51
	 *  - max = les données de la table + les informations complémentaires (pour les identifiants et les codes)
52
	 *  - oss = la liste des nom_sci (uniquement pour noms et taxons)
52
	 *  - oss = la liste des nom_sci (uniquement pour noms et taxons)
53
	 */
53
	 */
54
	protected $retour_format = 'max';
54
	protected $retour_format = 'max';
55
	protected $retour_langue = 'fr';
55
	protected $retour_langue = 'fr';
56
	/** Valeur du paramètre de requete recherche :
56
	/** Valeur du paramètre de requete recherche :
57
	 *  - stricte : le masque est passé tel quel à l'opérateur LIKE.
57
	 *  - stricte : le masque est passé tel quel à l'opérateur LIKE.
58
	 *  - etendue : ajout automatique du signe % à la place des espaces et en fin de masque avec utilisation de LIKE.
58
	 *  - etendue : ajout automatique du signe % à la place des espaces et en fin de masque avec utilisation de LIKE.
59
	 *  - floue : recherche tolérante vis-à-vis d'approximations ou d'erreurs (fautes d'orthographe par exemple) */
59
	 *  - floue : recherche tolérante vis-à-vis d'approximations ou d'erreurs (fautes d'orthographe par exemple) */
60
	protected $recherche;
60
	protected $recherche;
61
 
61
 
62
	/** Permet de stocker le tableau de résultat (non encodé en json) */
62
	/** Permet de stocker le tableau de résultat (non encodé en json) */
63
	protected $table_retour = array();
63
	protected $table_retour = array();
64
	/** Stocke le nombre total de résultats de la requete principale. Est calculée lors de l'assemblage de la requete */
64
	/** Stocke le nombre total de résultats de la requete principale. Est calculée lors de l'assemblage de la requete */
65
	protected $total_resultat;
65
	protected $total_resultat;
66
 
66
 
67
// +-------------------------------------------------------------------------------------------------------------------+
67
// +-------------------------------------------------------------------------------------------------------------------+
68
	public function traiterParametres($parametres) {
68
	public function traiterParametres() {
69
		if (isset($parametres) && !empty($parametres)) {
69
		if (isset($this->parametres) && !empty($this->parametres)) {
70
			$this->table_param = $parametres;
70
			$this->table_param = $$this->parametres;
71
 
71
 
72
		//   masque : filtre la liste en fonction d'un masque de recherche portant sur le code, le nom ou la region.
72
		//   masque : filtre la liste en fonction d'un masque de recherche portant sur le code, le nom ou la region.
73
        //   masque.code : filtre uniquement sur le code. masque.nom : filtre uniquement sur le nom.
73
        //   masque.code : filtre uniquement sur le code. masque.nom : filtre uniquement sur le nom.
74
        //   masque.region : filtre uniquement sur la region.
74
        //   masque.region : filtre uniquement sur la region.
75
			if (isset($parametres['recherche']) && $parametres['recherche'] != '') {
75
			if (isset($parametres['recherche']) && $parametres['recherche'] != '') {
76
				$this->recherche = $parametres['recherche'];
76
				$this->recherche = $parametres['recherche'];
77
			}
77
			}
78
 
78
 
79
			foreach ($parametres as $param => $valeur) {
79
			foreach ($parametres as $param => $valeur) {
80
				switch ($param) {
80
				switch ($param) {
-
 
81
					case 'masque' :
81
					case 'masque' 			  :  $this->ajouterLeFiltreMasque('masque', $valeur); 				break;
82
						$this->ajouterLeFiltreMasque('masque', $valeur);
-
 
83
						break;
-
 
84
					case 'masque.code' :
82
					case 'masque_code' 		  :  $this->ajouterLeFiltreMasque('id', $valeur); 				break;
85
						$this->ajouterLeFiltreMasque('id', $valeur);
-
 
86
						break;
-
 
87
					case 'masque.nom' :
83
					case 'masque_nom' 		  :  $this->ajouterLeFiltreMasque('nom', $valeur); 					break;
88
						$this->ajouterLeFiltreMasque('nom', $valeur);
-
 
89
						break;
-
 
90
					case 'retour.langue' :
84
					case 'retour_langue' 	:  $this->retour_langue = $valeur; 			break;
91
						$this->retour_langue = $valeur;break;
-
 
92
					case 'retour.format' :
85
					case 'retour_format' 	  :  $this->retour_format = $valeur;								break;
93
						$this->retour_format = $valeur;
-
 
94
						break;
-
 
95
					case 'navigation.depart' :
86
					case 'navigation_depart'  :  $this->limite_requete['depart'] = $valeur;	  					break;
96
						$this->limite_requete['depart'] = $valeur;
-
 
97
						break;
-
 
98
			        case 'navigation.limite' :
87
			        case 'navigation_limite'  :  $this->limite_requete['limite'] = $valeur;	  					break;
99
			        	$this->limite_requete['limite'] = $valeur;
-
 
100
			        	break;
88
			        case 'recherche'		: 																			break;
101
			        case 'recherche' :
-
 
102
			        	break;
-
 
103
					default :
89
					default					:  $p = 'Erreur dans les paramètres de recherche de votre requête : '.
104
						$p = 'Erreur dans les paramètres de recherche de votre requête : '.
90
												'</br> Le paramètre " '.$param.' " n\'existe pas.';
105
						'</br> Le paramètre " '.$param.' " n\'existe pas.';
91
											$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $p);						break;
106
						$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $p);
92
				}
107
				}
93
			}
108
			}
94
		}
109
		}
95
	}
110
	}
96
 
111
 
97
	public function ajouterLeFiltreMasque($nom_champ, $valeur) {
112
	public function ajouterLeFiltreMasque($nom_champ, $valeur) {
98
		if ($nom_champ == 'id') {
113
		if ($nom_champ == 'id') {
99
			$this->requete_condition[] = $nom_champ.' = '.$this->getBdd()->proteger($valeur);
114
			$this->requete_condition[] = $nom_champ.' = '.$this->getBdd()->proteger($valeur);
100
		} else {
115
		} else {
101
			if ($this->recherche == 'floue') {
116
			if ($this->recherche == 'floue') {
102
				if ($nom_champ == 'masque') {
117
				if ($nom_champ == 'masque') {
103
					$this->requete_condition[] = '( id = '.$this->getBdd()->proteger($valeur)
118
					$this->requete_condition[] = '( id = '.$this->getBdd()->proteger($valeur)
104
						.' OR ( SOUNDEX(nom) = SOUNDEX(\''.$valeur.'\')'
119
						.' OR ( SOUNDEX(nom) = SOUNDEX(\''.$valeur.'\')'
105
						.' OR SOUNDEX(REVERSE(nom)) = SOUNDEX(REVERSE(\''.$valeur.'\')) '
120
						.' OR SOUNDEX(REVERSE(nom)) = SOUNDEX(REVERSE(\''.$valeur.'\')) '
106
						.')) ';
121
						.')) ';
107
				} else {
122
				} else {
108
					$this->requete_condition[] = '(SOUNDEX('.$nom_champ.') = SOUNDEX(\''.$valeur.'\')'
123
					$this->requete_condition[] = '(SOUNDEX('.$nom_champ.') = SOUNDEX(\''.$valeur.'\')'
109
						.' OR SOUNDEX(REVERSE('.$nom_champ.')) = SOUNDEX(REVERSE(\''.$valeur.'\'))) ';
124
						.' OR SOUNDEX(REVERSE('.$nom_champ.')) = SOUNDEX(REVERSE(\''.$valeur.'\'))) ';
110
				}
125
				}
111
			} else {
126
			} else {
112
				if ($this->recherche == 'etendue') {
127
				if ($this->recherche == 'etendue') {
113
					$valeur = str_replace(' ','%', $valeur);
128
					$valeur = str_replace(' ','%', $valeur);
114
					$valeur .= '%';
129
					$valeur .= '%';
115
				}
130
				}
116
 
131
 
117
				if ($nom_champ == 'masque') {
132
				if ($nom_champ == 'masque') {
118
					$this->requete_condition[] = '(dep = '.$this->getBdd()->proteger($valeur)
133
					$this->requete_condition[] = '(dep = '.$this->getBdd()->proteger($valeur)
119
						.' OR nccenr LIKE '.$this->getBdd()->proteger($valeur)
134
						.' OR nccenr LIKE '.$this->getBdd()->proteger($valeur)
120
						.' OR region = '.$this->getBdd()->proteger($valeur).')';
135
						.' OR region = '.$this->getBdd()->proteger($valeur).')';
121
				} else {
136
				} else {
122
					$this->requete_condition[] = $nom_champ.' LIKE '.$this->getBdd()->proteger($valeur);
137
					$this->requete_condition[] = $nom_champ.' LIKE '.$this->getBdd()->proteger($valeur);
123
				}
138
				}
124
			}
139
			}
125
		}
140
		}
126
	}
141
	}
127
 
142
 
128
// +-------------------------------------------------------------------------------------------------------------------+
143
// +-------------------------------------------------------------------------------------------------------------------+
129
	public function traiterRessources(&$ressources) {
144
	public function traiterRessources() {
130
		if (isset($ressources) && !empty($ressources)) {
145
		if (isset($this->ressources) && !empty($this->ressources)) {
131
			$this->table_ressources = $ressources;
146
			$this->table_ressources = $this->ressources;
132
			if (isset($this->table_ressources[0]) && !empty($this->table_ressources[0])) {
147
			if (isset($this->table_ressources[0]) && !empty($this->table_ressources[0])) {
133
				//requete = /langues/#id
148
				//requete = /langues/#id
134
				$this->traiterRessourceId();
149
				$this->traiterRessourceId();
135
				if (isset($this->table_ressources[1]) && !empty($this->table_ressources[1])) {
150
				if (isset($this->table_ressources[1]) && !empty($this->table_ressources[1])) {
136
					//requete = /langues/#id/#champ ou /langues/#id/relations
151
					//requete = /langues/#id/#champ ou /langues/#id/relations
137
					$this->traiterRessourceChampOuRelations();
152
					$this->traiterRessourceChampOuRelations();
138
				}
153
				}
139
			}
154
			}
140
		}
155
		}
141
	}
156
	}
142
 
157
 
143
	public function traiterRessourceId() {
158
	public function traiterRessourceId() {
144
		//requete : /langues/#id (ex : /langues/7)
159
		//requete : /langues/#id (ex : /langues/7)
145
		if (preg_match('/^[a-z]{2}$/', $this->table_ressources[0])) {
160
		if (preg_match('/^[a-z]{2}$/', $this->table_ressources[0])) {
146
			$this->requete_condition[] = ' id = '.$this->getBdd()->proteger($this->table_ressources[0]);
161
			$this->requete_condition[] = ' id = '.$this->getBdd()->proteger($this->table_ressources[0]);
147
			$this->format_reponse .= '/id';
162
			$this->format_reponse .= '/id';
148
		} else {
163
		} else {
149
			$r = 'Erreur dans les ressources de votre requête : </br> La ressource " '.$this->table_ressources[0].
164
			$r = 'Erreur dans les ressources de votre requête : </br> La ressource " '.$this->table_ressources[0].
150
				' " n\'existe pas.';
165
				' " n\'existe pas.';
151
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $r);
166
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $r);
152
		}
167
		}
153
	}
168
	}
154
 
169
 
155
 
170
 
156
	public function traiterRessourceChampOuRelations() {
171
	public function traiterRessourceChampOuRelations() {
157
		//requete = /langues/#id/relations :
172
		//requete = /langues/#id/relations :
158
		if ($this->table_ressources[1] == 'relations') {
173
		if ($this->table_ressources[1] == 'relations') {
159
			$r = 'Erreur dans les ressources de votre requête : </br> La ressource " '.$this->table_ressources[1].
174
			$r = 'Erreur dans les ressources de votre requête : </br> La ressource " '.$this->table_ressources[1].
160
				' " n\'existe pas.';
175
				' " n\'existe pas.';
161
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $r);
176
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $r);
162
		//requete = /langues/#id/#champ :
177
		//requete = /langues/#id/#champ :
163
		} else {
178
		} else {
164
			$this->format_reponse .= '/champ';
179
			$this->format_reponse .= '/champ';
165
		}
180
		}
166
	}
181
	}
167
 
182
 
168
// +-------------------------------------------------------------------------------------------------------------------+
183
// +-------------------------------------------------------------------------------------------------------------------+
169
	public function assemblerLaRequete() {
184
	public function assemblerLaRequete() {
170
      	$requete = 	' SELECT '.$this->requete_champ.
185
      	$requete = 	' SELECT '.$this->requete_champ.
171
      					' FROM '.$this->table
186
      				' FROM '.$this->table
172
      						.$this->formerRequeteCondition()
187
      				.$this->formerRequeteCondition()
173
      						.$this->formerRequeteLimite();
188
      				.$this->formerRequeteLimite();
174
      	return $requete;
189
      	return $requete;
175
	}
190
	}
176
 
191
 
177
	public  function formerRequeteCondition() {
192
	public  function formerRequeteCondition() {
178
		$condition = '';
193
		$condition = '';
179
		if ($this->requete_condition != null) {
194
		if ($this->requete_condition != null) {
180
			$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
195
			$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
181
		}
196
		}
182
		return $condition;
197
		return $condition;
183
	}
198
	}
184
 
199
 
185
 
200
 
186
	//ajout d'une limite seulement pour les listes (pas plus de 100 resultats retournés pr les requetes
201
	//ajout d'une limite seulement pour les listes (pas plus de 100 resultats retournés pr les requetes
187
	// suivantes : /langues et /langues/#id/relations)
202
	// suivantes : /langues et /langues/#id/relations)
188
	public function formerRequeteLimite() {
203
	public function formerRequeteLimite() {
189
		if (($depart = $this->limite_requete['depart']) > ($this->total_resultat = $this->recupererTotalResultat())) {
204
		if (($depart = $this->limite_requete['depart']) > ($this->total_resultat = $this->recupererTotalResultat())) {
190
			//cas ou la requete presente un navigation.depart supérieur au nb total de resultats.
205
			//cas ou la requete presente un navigation.depart supérieur au nb total de resultats.
191
			$this->limite_requete['depart'] =
206
			$this->limite_requete['depart'] =
192
				(($nb - $this->limite_requete['limite']) < 0) ? 0 : ($nb - $this->limite_requete['limite']);
207
				(($nb - $this->limite_requete['limite']) < 0) ? 0 : ($nb - $this->limite_requete['limite']);
193
			$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];
208
			$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];
194
		} else {
209
		} else {
195
			$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];
210
			$this->requete_limite = ' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];
196
		}
211
		}
197
		return $this->requete_limite;
212
		return $this->requete_limite;
198
	}
213
	}
199
 
214
 
200
	public function recupererTotalResultat() {
215
	public function recupererTotalResultat() {
201
		//on récupère le nombre total de résultats de la requete (ex : le nombre d'id contenu dans la liste /langues)
216
		//on récupère le nombre total de résultats de la requete (ex : le nombre d'id contenu dans la liste /langues)
202
		$requete = 'SELECT count(*) as nombre FROM '
217
		$requete = 'SELECT count(*) as nombre FROM '.
203
			.$this->table
218
			$this->table.
204
			.$this->formerRequeteCondition();
219
			$this->formerRequeteCondition();
205
		$res = $this->getBdd()->recuperer($requete);
220
		$res = $this->getBdd()->recuperer($requete);
206
 
221
 
207
		if ($res) {
222
		if ($res) {
208
			$total = $res['nombre'];
223
			$total = $res['nombre'];
209
		} else {
224
		} else {
210
			$t = 'Fonction recupererTotalResultat() : <br/>Données introuvables dans la base';
225
			$t = 'Fonction recupererTotalResultat() : <br/>Données introuvables dans la base';
211
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $t);
226
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $t);
212
		}
227
		}
213
		return $total;
228
		return $total;
214
	}
229
	}
215
 
230
 
216
// +-------------------------------------------------------------------------------------------------------------------+
231
// +-------------------------------------------------------------------------------------------------------------------+
217
	// determine en fct du service appelé (/langues | /langues/#id | /langues/#id/champ |
232
	// determine en fct du service appelé (/langues | /langues/#id | /langues/#id/champ |
218
	// /langues/#id/relations) le format du tableau à retourner. Encode en json
233
	// /langues/#id/relations) le format du tableau à retourner. Encode en json
219
	public function retournerResultatFormate($resultat) {
234
	public function retournerResultatFormate($resultat) {
220
		$this->recupererTableConfig('correspondance_champs');
235
		$this->recupererTableConfig('correspondance_champs');
221
		switch ($this->format_reponse) {
236
		switch ($this->format_reponse) {
-
 
237
			case 'langues' :
222
			case 'langues' 				: $reponse = $this->formaterLangues($resultat); 			 break;
238
				$reponse = $this->formaterLangues($resultat);
-
 
239
				break;
-
 
240
			case 'langues/id' :
223
			case 'langues/id' 			: $reponse = $this->formaterLanguesId($resultat[0]); 	 break;
241
				$reponse = $this->formaterLanguesId($resultat[0]);
-
 
242
				break;
-
 
243
			case 'langues/id/champ' :
224
			case 'langues/id/champ' 		: $reponse = $this->formaterLanguesIdChamp($resultat[0]); break;
244
				$reponse = $this->formaterLanguesIdChamp($resultat[0]);
225
			default : break;
245
				break;
226
		}
246
		}
227
		return $reponse;
247
		return $reponse;
228
	}
248
	}
229
 
249
 
230
	public function formaterLangues($resultat) {
250
	public function formaterLangues($resultat) {
231
		//on remplit la table $table_retour_json['entete']
251
		//on remplit la table $table_retour_json['entete']
232
		$this->table_retour['depart'] = $this->limite_requete['depart'];
252
		$this->table_retour['depart'] = $this->limite_requete['depart'];
233
		$this->table_retour['limite'] = $this->limite_requete['limite'];
253
		$this->table_retour['limite'] = $this->limite_requete['limite'];
234
		$this->table_retour['total']  = $this->total_resultat;
254
		$this->table_retour['total']  = $this->total_resultat;
235
		//formuler les urls precedentes et suivantes affichées dans l'entete du resultat
255
		//formuler les urls precedentes et suivantes affichées dans l'entete du resultat
236
		$url = $this->formulerUrl($this->total_resultat, '/langues');
256
		$url = $this->formulerUrl($this->total_resultat, '/langues');
-
 
257
		if (isset($url['precedent']) && $url['precedent'] != '') {
237
		if ($url['precedent'] != '') { $this->table_retour['href.precedent'] = $url['precedent']; }
258
			$this->table_retour['href.precedent'] = $url['precedent'];
-
 
259
		}
-
 
260
		if (isset($url['suivant']) && $url['suivant'] != '') {
238
		if ($url['suivant']   != '') { $this->table_retour['href.suivant']   = $url['suivant']; }
261
			$this->table_retour['href.suivant']   = $url['suivant'];
-
 
262
		}
239
 
263
 
240
		$table_retour_json['entete'] = $this->table_retour;
264
		$table_retour_json['entete'] = $this->table_retour;
241
		$this->table_retour = array();
265
		$this->table_retour = array();
242
		if ($this->retour_langue == 'fr') {$nom = 'nom'; } else {$nom = 'nom_'.$this->retour_langue;}
266
		if ($this->retour_langue == 'fr') {$nom = 'nom'; } else {$nom = 'nom_'.$this->retour_langue;}
243
		if (isset($this->table_param['masque_nom'])) $resultat = $this->trierRechercheFloue($this->table_param['masque_nom'], $resultat, $nom);
267
		if (isset($this->table_param['masque_nom'])) $resultat = $this->trierRechercheFloue($this->table_param['masque_nom'], $resultat, $nom);
244
		//on remplit la table $table_retour_json['resultat']
268
		//on remplit la table $table_retour_json['resultat']
245
		foreach ($resultat as $tab) {
269
		foreach ($resultat as $tab) {
246
			foreach ($tab as $key => $valeur) {
270
			foreach ($tab as $key => $valeur) {
247
				if ($valeur != '') {
271
				if ($valeur != '') {
-
 
272
					//TODO : vérifier d'où venez $id
-
 
273
					if ($key == 'id') {// ATTENTION : au départ valait $id!
248
					if ($key == $id) {
274
						$num = $valeur;
249
						$num = $valeur; $this->table_retour['code'] = $valeur; break;
275
						$this->table_retour['code'] = $valeur;
-
 
276
						break;
250
					} elseif ($key == 'nom_'.$this->retour_langue || ($this->retour_langue == 'fr' && $key == 'nom')) {
277
					} elseif ($key == 'nom_'.$this->retour_langue || ($this->retour_langue == 'fr' && $key == 'nom')) {
251
						$this->table_retour['nom'] = $valeur; break;
278
						$this->table_retour['nom'] = $valeur;
-
 
279
						break;
252
					} else {
280
					} else {
253
						switch ($key) {
281
						switch ($key) {
-
 
282
							case 'id' :
254
							case 'id'  : $num = $valeur; $this->table_retour['code'] = $valeur;	break;
283
								$num = $valeur; $this->table_retour['code'] = $valeur;
-
 
284
								break;
-
 
285
							case 'nom' :
255
							case 'nom' : $this->table_retour['nom'] = $valeur;					break;
286
								$this->table_retour['nom'] = $valeur;
256
							default    : 						 									break;
287
								break;
257
						}
288
						}
258
					}
289
					}
259
				}
290
				}
260
			}
291
			}
261
			if ($this->retour_format == 'max') {
292
			if ($this->retour_format == 'max') {
262
				$this->table_retour['href'] = $this->ajouterHref('langues', $num);
293
				$this->table_retour['href'] = $this->ajouterHref('langues', $num);
263
			}
294
			}
264
			$resultat_json[$num] = $this->table_retour;
295
			$resultat_json[$num] = $this->table_retour;
265
			$this->table_retour = array();
296
			$this->table_retour = array();
266
		}
297
		}
267
		$table_retour_json['resultat'] = $resultat_json;
298
		$table_retour_json['resultat'] = $resultat_json;
268
		return $table_retour_json;
299
		return $table_retour_json;
269
	}
300
	}
270
 
301
 
271
	public function formaterLanguesId($resultat) {
302
	public function formaterLanguesId($resultat) {
272
		foreach ($resultat as $key => $valeur) {
303
		foreach ($resultat as $key => $valeur) {
273
			if ($valeur != '') {
304
			if ($valeur != '') {
274
				$this->afficherDonnees($key, $valeur);
305
				$this->afficherDonnees($key, $valeur);
275
			}
306
			}
276
		}
307
		}
277
		unset($this->table_retour['href']);
308
		unset($this->table_retour['href']);
278
		return $this->table_retour;
309
		return $this->table_retour;
279
	}
310
	}
280
 
311
 
281
 
312
 
282
	public function formaterLanguesIdChamp($resultat) {
313
	public function formaterLanguesIdChamp($resultat) {
283
		//on recupère tous les resultats possibles
314
		//on recupère tous les resultats possibles
284
		$reponse = $this->formaterLanguesId($resultat);
315
		$reponse = $this->formaterLanguesId($resultat);
285
		$this->table_retour = array();
316
		$this->table_retour = array();
286
		//on recupère les résultats demandés à partir du tableau de résultat complet
317
		//on recupère les résultats demandés à partir du tableau de résultat complet
287
		$this->table_retour['id'] = $reponse['code'];
318
		$this->table_retour['id'] = $reponse['code'];
288
		$champs = explode(' ', $this->table_ressources[1]);
319
		$champs = explode(' ', $this->table_ressources[1]);
289
 
320
 
290
		foreach ($champs as $champ) {
321
		foreach ($champs as $champ) {
291
			if ($champ == 'nom') $champ = 'nom.fr';
322
			if ($champ == 'nom') $champ = 'nom.fr';
292
			if ($this->verifierValiditeChamp($champ)) {
323
			if ($this->verifierValiditeChamp($champ)) {
293
				if (strrpos($champ, '.*') !== false) {
324
				if (strrpos($champ, '.*') !== false) {
294
					$this->afficherPointEtoile($champ, $reponse);
325
					$this->afficherPointEtoile($champ, $reponse);
295
 
326
 
296
				} else {
327
				} else {
297
					if (isset($reponse[$champ])) {
328
					if (isset($reponse[$champ])) {
298
						$this->table_retour[$champ] = $reponse[$champ];
329
						$this->table_retour[$champ] = $reponse[$champ];
299
					} else {
330
					} else {
300
						$this->table_retour[$champ] = null;
331
						$this->table_retour[$champ] = null;
301
					}
332
					}
302
				}
333
				}
303
			}
334
			}
304
		}
335
		}
305
		return $this->table_retour;
336
		return $this->table_retour;
306
	}
337
	}
307
 
338
 
308
	public function verifierValiditeChamp($champ) {
339
	public function verifierValiditeChamp($champ) {
309
		preg_match('/^([^.]+)(:?\.([^.]+))?$/', $champ, $match);
340
		preg_match('/^([^.]+)(:?\.([^.]+))?$/', $champ, $match);
310
		$champs_possibles = $this->correspondance_champs;
341
		$champs_possibles = $this->correspondance_champs;
311
		$champs_possibles[] = 'nom';
342
		$champs_possibles[] = 'nom';
312
		$champs_possibles[] = 'iso-639-2';
343
		$champs_possibles[] = 'iso-639-2';
313
		$champs_possibles[] = 'iso-639-3';
344
		$champs_possibles[] = 'iso-639-3';
314
 
345
 
315
		if (in_array($match[1], $champs_possibles)) {
346
		if (in_array($match[1], $champs_possibles)) {
316
			$validite = true;
347
			$validite = true;
317
		} elseif (in_array($match[0], $champs_possibles)) {
348
		} elseif (in_array($match[0], $champs_possibles)) {
318
			$validite = true;
349
			$validite = true;
319
		} else {
350
		} else {
320
			$champs_possibles = implode('</li><li>', $champs_possibles);
351
			$champs_possibles = implode('</li><li>', $champs_possibles);
321
			$c = 'Erreur dans votre requête : </br> Le champ "'.$champ_possibles.'" n\'existe pas. '.
352
			$c = 'Erreur dans votre requête : </br> Le champ "'.$champ_possibles.'" n\'existe pas. '.
322
				'Les champs disponibles sont : <li>'.$champs_possibles.'</li>';
353
				'Les champs disponibles sont : <li>'.$champs_possibles.'</li>';
323
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $c);
354
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $c);
324
		}
355
		}
325
		return $validite;
356
		return $validite;
326
	}
357
	}
327
 
358
 
328
	public function afficherPointEtoile($champ, $reponse) {
359
	public function afficherPointEtoile($champ, $reponse) {
329
		preg_match('/^([^.]+\.)\*$/', $champ, $match);
360
		preg_match('/^([^.]+\.)\*$/', $champ, $match);
330
		foreach ($reponse as $chp => $valeur) {
361
		foreach ($reponse as $chp => $valeur) {
331
			if (strrpos($chp, $match[1]) !== false) {
362
			if (strrpos($chp, $match[1]) !== false) {
332
				if ($valeur != '') {
363
				if ($valeur != '') {
333
					$this->table_retour[$chp] = $valeur;
364
					$this->table_retour[$chp] = $valeur;
334
				} else {
365
				} else {
335
					$this->table_retour[$chp] = null;
366
					$this->table_retour[$chp] = null;
336
				}
367
				}
337
			}
368
			}
338
		}
369
		}
339
	}
370
	}
340
 
371
 
341
	public function afficherDonnees($champ, $valeur) {
372
	public function afficherDonnees($champ, $valeur) {
342
		if ($this->retour_format == 'max') {
373
		if ($this->retour_format == 'max') {
343
			if (strpos($champ, 'iso_639_') !== false) {
374
			if (strpos($champ, 'iso_639_') !== false) {
344
				$projet = substr(str_replace('_', '-', $champ),5);
375
				$projet = substr(str_replace('_', '-', $champ),5);
345
				$this->table_retour[$projet.'.code'] = $valeur;
376
				$this->table_retour[$projet.'.code'] = $valeur;
346
				$this->table_retour[$projet.'.href'] = $this->ajouterHrefAutreProjet('langues', '', $valeur, $projet);
377
				$this->table_retour[$projet.'.href'] = $this->ajouterHrefAutreProjet('langues', '', $valeur, $projet);
347
			} else {
378
			} else {
348
				$this->table_retour[$this->correspondance_champs[$champ]] = $valeur;
379
				$this->table_retour[$this->correspondance_champs[$champ]] = $valeur;
349
			}
380
			}
350
		} else {
381
		} else {
351
			$this->table_retour[$this->correspondance_champs[$champ]] = $valeur;
382
			$this->table_retour[$this->correspondance_champs[$champ]] = $valeur;
352
		}
383
		}
353
	}
384
	}
354
 
385
 
355
}
386
}
356
 
387
 
357
?>
388
?>