Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 1124 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1124 Rev 1216
1
<?php
1
<?php
2
/**
2
/**
3
* Description :
3
* Description :
4
* Classe Observations.php permettant de fournir des informations sur les observations.
4
* Classe Observations.php permettant de fournir des informations sur les observations.
5
* Si l'url finit par /observations on retourne une liste d'observations (seulement les 100 premières par défaut) :
5
* Si l'url finit par /observations on retourne une liste d'observations (seulement les 100 premières par défaut) :
6
* espèce, lieu, date, observateur.
6
* espèce, lieu, date, observateur.
7
* L'url peut contenir des paramètres optionnels passés après le ? : /observations?param1=val1&param2=val2&...
7
* L'url peut contenir des paramètres optionnels passés après le ? : /observations?param1=val1&param2=val2&...
8
* 
8
* 
9
* Les paramètres de requête disponibles sont : masque, masque.type (type d'observation : chorologie), 
9
* Les paramètres de requête disponibles sont : masque, masque.type (type d'observation : chorologie), 
10
* masque.date_observation (date d'observation), masque.station (département), masque.determination (nom scientifique de l'espèce)
10
* masque.date_observation (date d'observation), masque.station (département), masque.determination (nom scientifique de l'espèce)
11
* masque.observateur (prénom, nom), masque.nn (identifiant du nom), recherche, distinct, retour.format, 
11
* masque.observateur (prénom, nom), masque.nn (identifiant du nom), recherche, distinct, retour.format, 
12
* navigation.depart et navigation.limite.
12
* navigation.depart et navigation.limite.
13
* 
13
* 
14
* Encodage en entrée : utf8
14
* Encodage en entrée : utf8
15
* Encodage en sortie : utf8
15
* Encodage en sortie : utf8
16
* @package framework-v3
16
* @package framework-v3
17
* @author Delphine Cauquil <delphine@tela-botanica.org> 
17
* @author Delphine Cauquil <delphine@tela-botanica.org> 
18
* @author Jennifer Dhé <jennifer.dhe@tela-botanica.org>
18
* @author Jennifer Dhé <jennifer.dhe@tela-botanica.org>
19
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
19
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
20
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
20
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
21
* @version 1.0
21
* @version 1.0
22
* @copyright 1999-${year} Tela Botanica (accueil@tela-botanica.org)
22
* @copyright 1999-${year} Tela Botanica (accueil@tela-botanica.org)
23
*/
23
*/
24
 
24
 
25
class Observations extends Commun {
25
class Observations extends Commun {
26
	
26
	
27
	protected $serviceNom = 'observations';
27
	protected $serviceNom = 'observations';
28
	
28
	
29
	/** Stockage des paramétres */
29
	/** Stockage des paramétres */
30
	protected $table_param = array();
30
	protected $table_param = array();
31
	/** Valeur du paramètre de requete recherche : 
31
	/** Valeur du paramètre de requete recherche : 
32
	 *  - stricte : le masque est passé tel quel à l'opérateur LIKE. 
32
	 *  - stricte : le masque est passé tel quel à l'opérateur LIKE. 
33
	 *  - etendue : ajout automatique du signe % à la place des espaces et en fin de masque avec utilisation de LIKE. 
33
	 *  - etendue : ajout automatique du signe % à la place des espaces et en fin de masque avec utilisation de LIKE. 
34
	 *  - floue : recherche tolérante vis-à-vis d'approximations ou d'erreurs (fautes d'orthographe par exemple) */
34
	 *  - floue : recherche tolérante vis-à-vis d'approximations ou d'erreurs (fautes d'orthographe par exemple) */
35
	protected $recherche = 'stricte';
35
	protected $recherche = 'stricte';
36
	/** Valeur du paramètre de requete distinct (=0|1)
36
	/** Valeur du paramètre de requete distinct (=0|1)
37
	 * Indique que l'on veut les noms distincts (par défaut tous les noms, même semblable, sont renvoyés)	 */
37
	 * Indique que l'on veut les noms distincts (par défaut tous les noms, même semblable, sont renvoyés)	 */
38
	protected $distinct = null;
38
	protected $distinct = null;
39
	protected $retour_format = 'max';
39
	protected $retour_format = 'max';
40
	protected $presenceChorologie = '';
40
	protected $presenceChorologie = '';
41
	
41
	
42
	/** Variables constituant les parametres de la requete SQL (champ, condition, group by, limit) remplie 
42
	/** Variables constituant les parametres de la requete SQL (champ, condition, group by, limit) remplie 
43
	 * selon ressources et paramètres	 */
43
	 * selon ressources et paramètres	 */
44
	protected $requete_champ = ' id, num_nom, nom_sci ';
44
	protected $requete_champ = ' id, num_nom, nom_sci ';
45
	protected $requete_condition = array();
45
	protected $requete_condition = array();
46
	/** Une observation est défini par départ qui correspont à un num_nom et dept qui correspond à un departement	 */
46
	/** Une observation est défini par départ qui correspont à un num_nom et dept qui correspond à un departement	 */
47
	protected $limite_requete 	 = array( 
47
	protected $limite_requete 	 = array( 
48
		'depart' => 0, 
48
		'depart' => 0, 
49
		'dept' => 01,
49
		'dept' => 01,
50
		'limite' => 20
50
		'limite' => 20
51
	);
51
	);
52
	
52
	
53
	/**
53
	/**
54
	 * Permet de stocker la requete formulée : 
54
	 * Permet de stocker la requete formulée : 
55
	 *   - noms | noms/#id | noms/#id/#champ+#champ
55
	 *   - noms | noms/#id | noms/#id/#champ+#champ
56
	 *   - noms/#id/relations | noms/#id/relations/synonymie | noms/#id/relations/homonymie | noms/#id/relations/flores
56
	 *   - noms/#id/relations | noms/#id/relations/synonymie | noms/#id/relations/homonymie | noms/#id/relations/flores
57
	 *   - noms/stats/rangs | noms/stats/annees | noms/stats/initiales 
57
	 *   - noms/stats/rangs | noms/stats/annees | noms/stats/initiales 
58
	 * Est remplit au cours de l'analyse des ressources (traiterRessources()). 
58
	 * Est remplit au cours de l'analyse des ressources (traiterRessources()). 
59
	 * Est utilisée principalement pr déterminer le format du tableau à retourner.
59
	 * Est utilisée principalement pr déterminer le format du tableau à retourner.
60
	 */
60
	 */
61
	protected $format_reponse = 'observations';
61
	protected $format_reponse = 'observations';
62
 
62
 
63
// +-------------------------------------------------------------------------------------------------------------------+	
63
// +-------------------------------------------------------------------------------------------------------------------+	
64
	public function consulter($ressources, $parametres) {
64
	public function consulter($ressources, $parametres) {
65
		$this->parametres = $parametres;
65
		$this->parametres = $parametres;
66
		$this->traiterVersionProjet($ressources);
66
		$this->traiterVersionProjet($ressources);
67
		$this->traiterRessources($ressources);
67
		$this->traiterRessources($ressources);
68
		$resultat_formate = '';
68
		$resultat_formate = '';
69
		
69
		
70
		if ($this->corps_http == '' && $this->entete_http == '') {
70
		if ($this->corps_http == '' && $this->entete_http == '') {
71
			foreach ($this->table_version as $version) {
71
			foreach ($this->table_version as $version) {
72
				$this->table = $version; //on stocke le nom de la table correspondant à la version du projet en cours
72
				$this->table = $version; //on stocke le nom de la table correspondant à la version du projet en cours
73
				$this->traiterParametres($parametres);
73
				$this->traiterParametres($parametres);
74
				$requete = $this->assemblerLaRequete(); //print_r($requete);
74
				$requete = $this->assemblerLaRequete(); //print_r($requete);exit;
75
				$resultat = $this->getBdd()->recupererTous($requete);
75
				$resultat = $this->getBdd()->recupererTous($requete);
76
				$res_version = $this->testerResultat($resultat, $requete);
76
				$res_version = $this->testerResultat($resultat, $requete);
77
			}
77
			}
78
			if ($this->corps_http == '' && $this->entete_http == '') {
78
			if ($this->corps_http == '' && $this->entete_http == '') {
79
				if (isset($res_version)) {
79
				if (isset($res_version)) {
80
					$resultat_formate = $res_version;
80
					$resultat_formate = $res_version;
81
				}
81
				}
82
			}
82
			}
83
		} 
83
		} 
-
 
84
		return $resultat_formate; 
-
 
85
	}
-
 
86
	
-
 
87
	public function modifier($ressources, $parametres) {		
-
 
88
		$resultat_formate = '';
-
 
89
		extract($parametres);
-
 
90
		if ($this->corps_http == '' && $this->entete_http == '') {
-
 
91
			$requete = "SELECT `$dept` FROM `chorodep_v2014_08` WHERE `num_nom` = $num_nom ";
-
 
92
			$resultat = $this->getBdd()->recupererTous($requete);
-
 
93
			if ($resultat = array()) {
-
 
94
				
-
 
95
				
-
 
96
				
-
 
97
				$requete = 'INSERT INTO `chorodep_v2014_08`(`id`, `rang`, `catminat`, `indication_phytosocio_caracteristique`, `num_tax`, `num_nom`, `nom_sci`, `chorologie`, `01`, `02`, `03`, `04`, `06`, `07`, `08`, `09`, `10`, `11`, `12`, `67`, `13`, `14`, `15`, `16`, `17`, `18`, `19`, `20`, `21`, `22`, `23`, `79`, `24`, `25`, `26`, `91`, `27`, `28`, `29`, `30`, `32`, `33`, `31`, `43`, `52`, `05`, `70`, `74`, `65`, `87`, `68`, `92`, `34`, `35`, `36`, `37`, `38`, `39`, `40`, `42`, `44`, `45`, `41`, `46`, `47`, `48`, `49`, `50`, `51`, `53`, `54`, `55`, `56`, `57`, `58`, `59`, `60`, `61`, `75`, `62`, `63`, `66`, `64`, `69`, `71`, `72`, `73`, `77`, `76`, `93`, `80`, `81`, `82`, `90`, `94`, `95`, `83`, `84`, `85`, `86`, `88`, `89`, `78`, `freq_abs`, `freq_rel`, `rare_nat`) 
-
 
98
						VALUES ("","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","") ';
-
 
99
			} else {
-
 
100
				$requete = "UPDATE `chorodep_v2014_08` 
-
 
101
					SET `$dept` = (SELECT `code` FROM chorodep_ontologies WHERE `id`= $statut)
-
 
102
					 WHERE num_nom = '$num_nom'";
-
 
103
				$resultat = $this->getBdd()->executer($requete);
-
 
104
			}
-
 
105
			print_r($resultat);
-
 
106
			
-
 
107
			
-
 
108
		} 
84
		return $resultat_formate; 
109
		return $resultat_formate; 
85
	}
110
	}
86
	
111
	
87
	public function testerResultat($resultat, $requete) {
112
	public function testerResultat($resultat, $requete) {
88
		if ($resultat == '') { //cas ou la requete comporte des erreurs
113
		if ($resultat == '') { //cas ou la requete comporte des erreurs
89
			$s = 'La requête SQL resultat formée comporte une erreur !!';
114
			$s = 'La requête SQL resultat formée comporte une erreur !!';
90
			Debug::printr($requete);
115
			Debug::printr($requete);
91
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $s);
116
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $s);
92
		} elseif ($resultat) {
117
		} elseif ($resultat) {
93
			if (count($this->table_version) > 1) {
118
			if (count($this->table_version) > 1) {
94
				$res_version[$version] = $this->retournerResultatFormate($resultat);
119
				$res_version[$version] = $this->retournerResultatFormate($resultat);
95
			} else {
120
			} else {
96
				$res_version = $this->retournerResultatFormate($resultat);
121
				$res_version = $this->retournerResultatFormate($resultat);
97
			}
122
			}
98
		} else {
123
		} else {
99
			if ($this->format_reponse == 'zone-geo/id/relations') { 
124
			if ($this->format_reponse == 'zone-geo/id/relations') { 
100
			//si aucune relations n'existe, la valeur null est retournée
125
			//si aucune relations n'existe, la valeur null est retournée
101
				$res_version = null;
126
				$res_version = null;
102
			} else {
127
			} else {
103
				$d = 'Données recherchées introuvables dans la base'.$requete;
128
				$d = 'Données recherchées introuvables dans la base'.$requete;
104
				$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $d);
129
				$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $d);
105
				Debug::printr($requete);
130
				Debug::printr($requete);
106
			}
131
			}
107
		}
132
		}
108
		return $res_version;
133
		return $res_version;
109
	}
134
	}
110
	
135
	
111
	public function assemblerLaRequete() {
136
	public function assemblerLaRequete() {
112
		$requete = "SELECT ".$this->formerRequeteChamp().
137
		$requete = "SELECT ".$this->formerRequeteChamp().
113
			" FROM ".$this->table.$this->formerRequeteCondition().
138
			" FROM ".$this->table.$this->formerRequeteCondition().
114
			' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];//echo $requete;
139
			' LIMIT '.$this->limite_requete['depart'].', '.$this->limite_requete['limite'];//echo $requete;
115
		return $requete;
140
		return $requete;
116
	}
141
	}
117
	
142
	
118
	public function formerRequeteChamp() {
143
	public function formerRequeteChamp() {
119
		if (!isset($this->table_ressources)) {
144
		if (!isset($this->table_ressources)) {
120
			if (!isset($this->table_param['masque_station']) && !isset($this->table_param['masque_contributeur']) ) {
145
			if (!isset($this->table_param['masque_station']) && !isset($this->table_param['masque_contributeur']) ) {
121
				$champ = ' * ';
146
				$champ = ' * ';
122
			} else {
147
			} else {
123
				$champ = $this->requete_champ;
148
				$champ = $this->requete_champ;
124
			}
149
			}
125
		} else {
150
		} else {
126
			$champ = $this->requete_champ;
151
			$champ = $this->requete_champ;
127
		}
152
		}
128
		return $champ;
153
		return $champ;
129
	}
154
	}
130
	
155
	
131
	public  function formerRequeteCondition() {
156
	public  function formerRequeteCondition() {
132
		$condition = '';
157
		$condition = '';
133
		if ($this->requete_condition != null) { 
158
		if ($this->requete_condition != null) { 
134
			$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
159
			$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
135
		} 
160
		} 
136
		return $condition;
161
		return $condition;
137
	}
162
	}
138
	
163
	
139
// +-------------------------------------------------------------------------------------------------------------------+	
164
// +-------------------------------------------------------------------------------------------------------------------+	
140
	public function traiterRessources(&$ressources) {
165
	public function traiterRessources(&$ressources) {
141
		if (isset($ressources) && !empty($ressources)) {
166
		if (isset($ressources) && !empty($ressources)) {
142
			$this->table_ressources = $ressources;
167
			$this->table_ressources = $ressources;
143
			if (isset($this->table_ressources[0]) && !empty($this->table_ressources[0])) {
168
			if (isset($this->table_ressources[0]) && !empty($this->table_ressources[0])) {
144
				$this->traiterRessourceId();
169
				$this->traiterRessourceId();
145
				if (isset($this->table_ressources[1]) && !empty($this->table_ressources[1])) {
170
				if (isset($this->table_ressources[1]) && !empty($this->table_ressources[1])) {
146
					$this->traiterRessourceChamp;
171
					$this->traiterRessourceChamp;
147
				}
172
				}
148
			} 
173
			} 
149
		}
174
		}
150
	}
175
	}
151
	
176
	
152
	public function traiterRessourceId() {
177
	public function traiterRessourceId() {
153
		//requete : /observations/#num_nom:#dept (ex : /observations/10:34)
178
		//requete : /observations/#num_nom:#dept (ex : /observations/10:34)
154
		if (preg_match('/^([0-9]*):([0-9]{2})$/', $this->table_ressources[0], $conditions)) {
179
		if (preg_match('/^([0-9]*):([0-9]{2})$/', $this->table_ressources[0], $conditions)) {
155
			$this->requete_condition[] = ' num_nom = '.$this->getBdd()->proteger($conditions[1]).' AND `'.$conditions[2]."` != '' ";
180
			$this->requete_condition[] = ' num_nom = '.$this->getBdd()->proteger($conditions[1]).' AND `'.$conditions[2]."` != '' ";
156
			$this->requete_champ .= ' ,catminat, rang, num_tax, freq_abs, freq_rel, rare_nat, `'.$conditions[2].'`';
181
			$this->requete_champ .= ' ,catminat, rang, num_tax, freq_abs, freq_rel, rare_nat, `'.$conditions[2].'`';
157
			$this->format_reponse .= '/id';
182
			$this->format_reponse .= '/id';
158
			
183
			
159
		//requete : /observations/nom:#dept (ex : /observations/coquelicot:30)
184
		//requete : /observations/nom:#dept (ex : /observations/coquelicot:30)
160
		} elseif (preg_match('/^(.*):([0-9]{2})$/', $this->table_ressources[0], $conditions)) {
185
		} elseif (preg_match('/^(.*):([0-9]{2})$/', $this->table_ressources[0], $conditions)) {
161
			$this->requete_condition[] = ' nom_sci like '.$this->getBdd()->proteger($conditions[1].'%').' AND `'.$conditions[2]."` != '' ";
186
			$this->requete_condition[] = ' nom_sci like '.$this->getBdd()->proteger($conditions[1].'%').' AND `'.$conditions[2]."` != '' ";
162
			$this->requete_champ .= ' ,catminat, rang, num_tax, freq_abs, freq_rel, rare_nat, `'.$conditions[2].'`';
187
			$this->requete_champ .= ' ,catminat, rang, num_tax, freq_abs, freq_rel, rare_nat, `'.$conditions[2].'`';
163
			$this->format_reponse .= '/id';
188
			$this->format_reponse .= '/id';
164
		//requete : /observations/num_nom:#num_nom (ex : /observations/num_nom:290) ??
189
		//requete : /observations/num_nom:#num_nom (ex : /observations/num_nom:290) ??
165
		} elseif (strrpos($this->table_ressources[0], ':') !== false) {
190
		} elseif (strrpos($this->table_ressources[0], ':') !== false) {
166
				
191
				
167
		} else {
192
		} else {
168
			$r = 'Erreur dans les ressources de votre requête : </br> La ressource " '.$this->table_ressources[0].
193
			$r = 'Erreur dans les ressources de votre requête : </br> La ressource " '.$this->table_ressources[0].
169
				' " n\'existe pas.';
194
				' " n\'existe pas.';
170
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $r);	
195
			$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $r);	
171
		}
196
		}
172
	}
197
	}
173
	
198
	
174
// +-------------------------------------------------------------------------------------------------------------------+	
199
// +-------------------------------------------------------------------------------------------------------------------+	
175
	public function traiterParametres($parametres) {
200
	public function traiterParametres($parametres) {
176
		if (isset($parametres) && !empty($parametres)) {
201
		if (isset($parametres) && !empty($parametres)) {
177
			$this->table_param = $parametres;
202
			$this->table_param = $parametres;
178
			
203
			
179
			if (isset($parametres['recherche']) && $parametres['recherche'] != '') {
204
			if (isset($parametres['recherche']) && $parametres['recherche'] != '') {
180
				$this->recherche = $parametres['recherche']; 
205
				$this->recherche = $parametres['recherche']; 
181
			}
206
			}
182
			foreach ($parametres as $param => $valeur) {				
207
			foreach ($parametres as $param => $valeur) {				
183
				switch ($param) {
208
				switch ($param) {
184
					case 'masque' 				: $this->ajouterLeFiltreMasque($valeur);						break;
209
					case 'masque' 				: $this->ajouterLeFiltreMasque($valeur);						break;
185
					case 'masque.date.observation' : 															break;
210
					case 'masque.date.observation' : 															break;
186
					case 'masque.station'		: $this->limite_requete['dept'] = $valeur;
211
					case 'masque.station'		: $this->limite_requete['dept'] = $valeur;
187
													$this->ajouterUnFiltre('station', $valeur);					break;
212
													$this->ajouterUnFiltre('station', $valeur);					break;
188
					case 'masque.departement'		:
213
					case 'masque.departement'		:
189
													$this->ajouterUnFiltre("`".$valeur."`", '1');					break;
214
													$this->ajouterUnFiltre("`".$valeur."`", '1');					break;
190
					case 'masque.determination'	: $this->ajouterUnFiltre('nom_sci', $valeur);					break;
215
					case 'masque.determination'	: $this->ajouterUnFiltre('nom_sci', $valeur);					break;
191
					case 'masque.determination.nn' : 
216
					case 'masque.determination.nn' : 
192
							$this->requete_condition[] = '`num_nom` = '.$this->getBdd()->proteger($valeur);		break;
217
							$this->requete_condition[] = '`num_nom` = '.$this->getBdd()->proteger($valeur);		break;
193
					case 'masque.determination.nt' :
218
					case 'masque.determination.nt' :
194
						$this->requete_condition[] = '`num_tax` = '.$this->getBdd()->proteger($valeur);		break;				case 'masque.observateur'	: $this->ajouterLeFiltreContributeur($valeur);					break;
219
						$this->requete_condition[] = '`num_tax` = '.$this->getBdd()->proteger($valeur);		break;				case 'masque.observateur'	: $this->ajouterLeFiltreContributeur($valeur);					break;
195
					case 'masque.valeur' 		: $this->presenceChorologie = $valeur;							break;
220
					case 'masque.valeur' 		: $this->presenceChorologie = $valeur;							break;
196
					case 'retour.format'		: $this->retour_format = $valeur;								break;
221
					case 'retour.format'		: $this->retour_format = $valeur;								break;
197
					case 'navigation.depart'	: $this->ajouterLimiteDepart($valeur);							break;
222
					case 'navigation.depart'	: $this->ajouterLimiteDepart($valeur);							break;
198
					case 'navigation.limite'	: if ($valeur !== '') $this->limite_requete['limite'] = $valeur;	break;
223
					case 'navigation.limite'	: if ($valeur !== '') $this->limite_requete['limite'] = $valeur;	break;
199
					case 'recherche'			: 																break;
224
					case 'recherche'			: 																break;
200
					case 'version.projet'		: 																break;
225
					case 'version.projet'		: 																break;
201
					default						:  $p = 'Erreur dans les paramètres de recherche de votre requête : '.
226
					default						:  $p = 'Erreur dans les paramètres de recherche de votre requête : '.
202
													'</br> Le paramètre " '.$param.' " n\'existe pas.';
227
													'</br> Le paramètre " '.$param.' " n\'existe pas.';
203
												$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $p); break;
228
												$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $p); break;
204
				}
229
				}
205
			}
230
			}
206
		}
231
		}
207
	}
232
	}
208
	
233
	
209
	/** fonction d'ajout dans la requete SQL des conditions (WHERE ...) en fonctions des parametres demandés
234
	/** fonction d'ajout dans la requete SQL des conditions (WHERE ...) en fonctions des parametres demandés
210
	 * @param $nom_champ
235
	 * @param $nom_champ
211
	 * @param $valeur
236
	 * @param $valeur
212
	 * @param $masque
237
	 * @param $masque
213
	 */
238
	 */
214
	public function ajouterUnFiltre($nom_champ, $valeur) {
239
	public function ajouterUnFiltre($nom_champ, $valeur) {
215
		if ($nom_champ == 'station') {
240
		if ($nom_champ == 'station') {
216
			if (!preg_match('/^\s*([0-9]{2})\s*$/', $valeur, $colonne)) { // si le nom est passé
241
			if (!preg_match('/^\s*([0-9]{2})\s*$/', $valeur, $colonne)) { // si le nom est passé
217
				$this->requete_condition[] = '1';
242
				$this->requete_condition[] = '1';
218
			} else {
243
			} else {
219
				$this->requete_condition[] = '`'.$valeur."` != '' ";
244
				$this->requete_condition[] = '`'.$valeur."` != '' ";
220
				$this->requete_champ .= ', `'.$valeur.'` ';
245
				$this->requete_champ .= ', `'.$valeur.'` ';
221
			}
246
			}
222
		} else { 
247
		} else { 
223
		// recherche floue
248
		// recherche floue
224
			if ($this->recherche == 'floue') {//ajout_soundex
249
			if ($this->recherche == 'floue') {//ajout_soundex
225
				$this->requete_condition[] = '(SOUNDEX('.$nom_champ.') = SOUNDEX(\''.$valeur.'\')'
250
				$this->requete_condition[] = '(SOUNDEX('.$nom_champ.') = SOUNDEX(\''.$valeur.'\')'
226
					.' OR SOUNDEX(REVERSE('.$nom_champ.')) = SOUNDEX(REVERSE(\''.$valeur.'\'))) ';
251
					.' OR SOUNDEX(REVERSE('.$nom_champ.')) = SOUNDEX(REVERSE(\''.$valeur.'\'))) ';
227
		// recherche étendue
252
		// recherche étendue
228
			} elseif ($this->recherche == 'etendue') {
253
			} elseif ($this->recherche == 'etendue') {
229
				$valeur = str_replace(' ','%', $valeur);
254
				$valeur = str_replace(' ','%', $valeur);
230
				$valeur .= '%';
255
				$valeur .= '%';
231
			}
256
			}
232
		// recherche stricte
257
		// recherche stricte
233
			$this->requete_condition[] = $nom_champ.' LIKE '.$this->getBdd()->proteger($valeur);
258
			$this->requete_condition[] = $nom_champ.' LIKE '.$this->getBdd()->proteger($valeur);
234
		}
259
		}
235
	}
260
	}
236
	
261
	
237
	/** fonction d'ajout dans la requete SQL des conditions (WHERE ...) quand le paramètre passé est masque
262
	/** fonction d'ajout dans la requete SQL des conditions (WHERE ...) quand le paramètre passé est masque
238
	 * @param $valeur
263
	 * @param $valeur
239
	 */
264
	 */
240
	public function ajouterLeFiltreMasque($valeur) {
265
	public function ajouterLeFiltreMasque($valeur) {
241
		$this->ajouterUnfiltre('station', $valeur);
266
		$this->ajouterUnfiltre('station', $valeur);
242
		$condition = '(( '.array_pop($this->requete_condition);
267
		$condition = '(( '.array_pop($this->requete_condition);
243
		$this->ajouterUnfiltre('num_nom', $valeur);
268
		$this->ajouterUnfiltre('num_nom', $valeur);
244
		$condition .= ' ) OR ('.array_pop($this->requete_condition);
269
		$condition .= ' ) OR ('.array_pop($this->requete_condition);
245
		$condition = str_replace('( 1 ) OR', '', $condition); // si la valeur passée est une varchar supprime le filtre station
270
		$condition = str_replace('( 1 ) OR', '', $condition); // si la valeur passée est une varchar supprime le filtre station
246
		$this->ajouterUnfiltre('nom_sci', $valeur);
271
		$this->ajouterUnfiltre('nom_sci', $valeur);
247
		$this->requete_condition[] = $condition.' ) OR ('.array_pop($this->requete_condition).' )) ';
272
		$this->requete_condition[] = $condition.' ) OR ('.array_pop($this->requete_condition).' )) ';
248
	}
273
	}
249
	
274
	
250
	/** fonction d'ajout dans la requete SQL des conditions (WHERE ...) quand le paramètre passé est masque.contributeur
275
	/** fonction d'ajout dans la requete SQL des conditions (WHERE ...) quand le paramètre passé est masque.contributeur
251
	 * @param $valeur
276
	 * @param $valeur
252
	 */
277
	 */
253
	public function ajouterLeFiltreContributeur($valeur) {
278
	public function ajouterLeFiltreContributeur($valeur) {
254
		$requete_contr = $this->creerRequeteContributeur($valeur);
279
		$requete_contr = $this->creerRequeteContributeur($valeur);
255
		$res = $this->getBdd()->recupererTous($requete_contr);
280
		$res = $this->getBdd()->recupererTous($requete_contr);
256
		if ($res == '') { //cas ou la requete comporte des erreurs
281
		if ($res == '') { //cas ou la requete comporte des erreurs
257
			$c = 'La requête SQL formée comporte une erreur !!';
282
			$c = 'La requête SQL formée comporte une erreur !!';
258
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $c);
283
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $c);
259
			Debug::printr($requete_contr);
284
			Debug::printr($requete_contr);
260
		} elseif ($res) {
285
		} elseif ($res) {
261
			unset($res[0]['id'],$res[0]['nom'],$res[0]['prenom'],$res[0]['courriel']);
286
			unset($res[0]['id'],$res[0]['nom'],$res[0]['prenom'],$res[0]['courriel']);
262
			// si il y a un masque station et que le contributeur n'a pas de données dans ce dept
287
			// si il y a un masque station et que le contributeur n'a pas de données dans ce dept
263
			if (isset($this->table_param['masque_station']) && isset($res[0][$this->table_param['masque_station']])) {
288
			if (isset($this->table_param['masque_station']) && isset($res[0][$this->table_param['masque_station']])) {
264
				if ($res[0][$this->table_param['masque_station']] != 1) {
289
				if ($res[0][$this->table_param['masque_station']] != 1) {
265
					$d = "Les données recherchées sont introuvables pour l'observateur ".$valeur." dans le département "
290
					$d = "Les données recherchées sont introuvables pour l'observateur ".$valeur." dans le département "
266
						.$this->table_param['masque_station'];
291
						.$this->table_param['masque_station'];
267
					$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $d);
292
					$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $d);
268
				}
293
				}
269
			} else {
294
			} else {
270
				foreach ($res[0] as $dept=>$presence) {
295
				foreach ($res[0] as $dept=>$presence) {
271
					if ($presence == 1) {
296
					if ($presence == 1) {
272
						$this->ajouterUnfiltre('station', $dept);
297
						$this->ajouterUnfiltre('station', $dept);
273
						$requete_condition[] = array_pop($this->requete_condition); // recupere le filtre créé précédement
298
						$requete_condition[] = array_pop($this->requete_condition); // recupere le filtre créé précédement
274
					}
299
					}
275
				}
300
				}
276
				$this->requete_condition[] = '(( '.implode(' ) OR ( ', $requete_condition).' ))'; // créé un filtre sur les dept
301
				$this->requete_condition[] = '(( '.implode(' ) OR ( ', $requete_condition).' ))'; // créé un filtre sur les dept
277
			}
302
			}
278
		} else {
303
		} else {
279
			$i = "Les données recherchées sont introuvables pour l'observateur ".$valeur;
304
			$i = "Les données recherchées sont introuvables pour l'observateur ".$valeur;
280
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $i);
305
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $i);
281
		}	
306
		}	
282
	}
307
	}
283
	
308
	
284
	public function creerRequeteContributeur($valeur) {
309
	public function creerRequeteContributeur($valeur) {
285
		$condition = '';
310
		$condition = '';
286
		if (preg_match('/(.*@[a-z]+\.[a-z]{2,3})/', $valeur, $match)) {// cherche sur le mail
311
		if (preg_match('/(.*@[a-z]+\.[a-z]{2,3})/', $valeur, $match)) {// cherche sur le mail
287
			$condition = 'courriel = '.$this->getBdd()->proteger($match[1]);
312
			$condition = 'courriel = '.$this->getBdd()->proteger($match[1]);
288
		} elseif (preg_match('/^(\w+)\s+(\w+)$/', $valeur, $match)) {// cherche sur les nom prenom
313
		} elseif (preg_match('/^(\w+)\s+(\w+)$/', $valeur, $match)) {// cherche sur les nom prenom
289
			$condition = ' ((nom = '.$this->getBdd()->proteger($match[1]).' OR prenom = '.$this->getBdd()->proteger($match[1]).
314
			$condition = ' ((nom = '.$this->getBdd()->proteger($match[1]).' OR prenom = '.$this->getBdd()->proteger($match[1]).
290
				' ) AND (nom = '.$this->getBdd()->proteger($match[2]).' OR prenom = '.$this->getBdd()->proteger($match[2]).'))'.
315
				' ) AND (nom = '.$this->getBdd()->proteger($match[2]).' OR prenom = '.$this->getBdd()->proteger($match[2]).'))'.
291
				' OR ( nom LIKE '.$this->getBdd()->proteger($valeur.'%').')';
316
				' OR ( nom LIKE '.$this->getBdd()->proteger($valeur.'%').')';
292
		} else {// cherche si nom association
317
		} else {// cherche si nom association
293
			$condition = 'nom LIKE '.$this->getBdd()->proteger($valeur.'%');
318
			$condition = 'nom LIKE '.$this->getBdd()->proteger($valeur.'%');
294
		}
319
		}
295
		list($table, $version) = explode('_v',$this->table);
320
		list($table, $version) = explode('_v',$this->table);
296
		$requete_contr = "SELECT * FROM chorodep_contributeurs_v$version WHERE ".$condition;
321
		$requete_contr = "SELECT * FROM chorodep_contributeurs_v$version WHERE ".$condition;
297
	}
322
	}
298
 
323
 
299
	/**
324
	/**
300
	 * @param type $id un offset ou une combinaison de la forme "num_nom:departement"
325
	 * @param type $id un offset ou une combinaison de la forme "num_nom:departement"
301
	 */
326
	 */
302
	public function ajouterLimiteDepart($id) {
327
	public function ajouterLimiteDepart($id) {
303
		if ($id !== '') {
328
		if ($id !== '') {
304
			// $id est de la forme nn:dept - wtf ? en plus ça marche pas, le lien
329
			// $id est de la forme nn:dept - wtf ? en plus ça marche pas, le lien
305
			// "href.suivant" génère du caca d'oie
330
			// "href.suivant" génère du caca d'oie
306
			$d = explode(":", $id);
331
			$d = explode(":", $id);
307
			if (count($d) == 2) {
332
			if (count($d) == 2) {
308
				$this->limite_requete['depart'] = 0;
333
				$this->limite_requete['depart'] = 0;
309
				$this->limite_requete['dept'] = $d[1];
334
				$this->limite_requete['dept'] = $d[1];
310
				if (!isset($this->parametres['masque.determination.nn'])) {
335
				if (!isset($this->parametres['masque.determination.nn'])) {
311
					$requete_condition = (is_numeric($d[0])) ? '`num_nom` = '.$d[0]  : '`nom_sci` like "'.urldecode($d[0]).'%"';
336
					$requete_condition = (is_numeric($d[0])) ? '`num_nom` = '.$d[0]  : '`nom_sci` like "'.urldecode($d[0]).'%"';
312
					$requete = "SELECT id FROM $this->table WHERE ".$requete_condition;
337
					$requete = "SELECT id FROM $this->table WHERE ".$requete_condition;
313
					$res = $this->getBdd()->recuperer($requete);
338
					$res = $this->getBdd()->recuperer($requete);
314
					if ($res == '') { //cas ou la requete comporte des erreurs
339
					if ($res == '') { //cas ou la requete comporte des erreurs
315
						$r = 'La requête SQL formée comporte une erreur !!';
340
						$r = 'La requête SQL formée comporte une erreur !!';
316
						$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
341
						$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
317
						Debug::printr($requete);
342
						Debug::printr($requete);
318
					} elseif ($res) {
343
					} elseif ($res) {
319
						$this->limite_requete['depart'] = $res['id'] - 1;
344
						$this->limite_requete['depart'] = $res['id'] - 1;
320
					} else {
345
					} else {
321
						$i = "Les données recherchées sont introuvables";
346
						$i = "Les données recherchées sont introuvables";
322
						$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $i);
347
						$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $i);
323
					}
348
					}
324
				}
349
				}
325
			} else {
350
			} else {
326
				// $id est un simple offset
351
				// $id est un simple offset
327
				$this->limite_requete['depart'] = $id;
352
				$this->limite_requete['depart'] = $id;
328
			}
353
			}
329
		}
354
		}
330
	}
355
	}
331
	
356
	
332
// +-------------------------------------------------------------------------------------------------------------------+
357
// +-------------------------------------------------------------------------------------------------------------------+
333
	public function retournerResultatFormate($resultat) {
358
	public function retournerResultatFormate($resultat) {
334
		$this->table_retour = array(); // stocke les données générales d'une observation et écrase les données d'un dep
359
		$this->table_retour = array(); // stocke les données générales d'une observation et écrase les données d'un dep
335
		$this->chargerInfosGenerales();
360
		$this->chargerInfosGenerales();
336
		switch ($this->format_reponse) {
361
		switch ($this->format_reponse) {
337
			case 'observations' 		: $reponse = $this->formaterObservations($resultat); 			 break;
362
			case 'observations' 		: $reponse = $this->formaterObservations($resultat); 			 break;
338
			case 'observations/id' 		: $reponse = $this->formaterObservationsId($resultat[0]); 	 break;
363
			case 'observations/id' 		: $reponse = $this->formaterObservationsId($resultat[0]); 	 break;
339
			case 'observations/id/champ': $reponse = $this->formaterObservationsIdChamp($resultat[0]); break;
364
			case 'observations/id/champ': $reponse = $this->formaterObservationsIdChamp($resultat[0]); break;
340
			default : break;
365
			default : break;
341
		}
366
		}
342
		return $reponse;
367
		return $reponse;
343
	}
368
	}
344
	
369
	
345
	
370
	
346
	public function formaterObservations($resultat) {	
371
	public function formaterObservations($resultat) {	
347
		$num = 0; // compte le nombre d'observations pour retourner le nombre d'obs indiqué
372
		$num = 0; // compte le nombre d'observations pour retourner le nombre d'obs indiqué
348
		$depart = false; //le depart du resultat est noté ss forme #ligne:#departement $depart indique le departement est correct
373
		$depart = false; //le depart du resultat est noté ss forme #ligne:#departement $depart indique le departement est correct
349
		//on remplit la table $table_retour_json['resultat']
374
		//on remplit la table $table_retour_json['resultat']
350
		$this->table_retour = array();
375
		$this->table_retour = array();
351
		foreach ($resultat as $tab) {
376
		foreach ($resultat as $tab) {
352
			foreach ($tab as $key => $valeur) {
377
			foreach ($tab as $key => $valeur) {
353
				switch ($key) {
378
				switch ($key) {
354
					case 'id'		: break;
379
					case 'id'		: break;
355
					case 'catminat' : break;
380
					case 'catminat' : break;
356
					case 'rang'		: break;
381
					case 'rang'		: break;
357
					case 'num_tax'	: break;
382
					case 'num_tax'	: break;
358
					case 'freq_abs'	: break;
383
					case 'freq_abs'	: break;
359
					case 'freq_rel'	: break;
384
					case 'freq_rel'	: break;
360
					case 'rare_nat'	: break;
385
					case 'rare_nat'	: break;
361
					case 'num_nom'	: ($valeur == 'nc')? $num_nom = urlencode($tab['nom_sci']) : $num_nom = $valeur ; break;
386
					case 'num_nom'	: ($valeur == 'nc')? $num_nom = urlencode($tab['nom_sci']) : $num_nom = $valeur ; break;
362
					case 'nom_sci'	: $this->table_retour['determination.nom_sci'] = $valeur;	break;
387
					case 'nom_sci'	: $this->table_retour['determination.nom_sci'] = $valeur;	break;
363
					default			: // pour les depts
388
					default			: // pour les depts
364
						if (isset($this->parametres['masque.station'])) {
389
						if (isset($this->parametres['masque.station'])) {
365
							if ($key == $this->parametres['masque.station']) {
390
							if ($key == $this->parametres['masque.station']) {
366
								$id = $num_nom.":".$key;
391
								$id = $num_nom.":".$key;
367
								$this->completerDonnees($key, $valeur, $id);
392
								$this->completerDonnees($key, $valeur, $id);
368
								$resultat_json[$id] = $this->table_retour;
393
								$resultat_json[$id] = $this->table_retour;
369
								$num++;
394
								$num++;
370
							}
395
							}
371
						} else {
396
						} else {
372
							if ($depart == true && $valeur != '') {
397
							if ($depart == true && $valeur != '') {
373
								if (($this->presenceChorologie != '' && $valeur == $this->presenceChorologie) || 
398
								if (($this->presenceChorologie != '' && $valeur == $this->presenceChorologie) || 
374
									($this->presenceChorologie == '' && $valeur != $this->presenceChorologie)) {
399
									($this->presenceChorologie == '' && $valeur != $this->presenceChorologie)) {
375
									$id = $num_nom.":".$key;
400
									$id = $num_nom.":".$key;
376
									$this->completerDonnees($key, $valeur, $id);
401
									$this->completerDonnees($key, $valeur, $id);
377
									$resultat_json[$id] = $this->table_retour;
402
									$resultat_json[$id] = $this->table_retour;
378
									$num++;
403
									$num++;
379
								}
404
								}
380
							}
405
							}
381
							if ($key == $this->limite_requete['dept']) $depart = true;
406
							if ($key == $this->limite_requete['dept']) $depart = true;
382
						}
407
						}
383
						break;
408
						break;
384
				}
409
				}
385
				if ($num == $this->limite_requete['limite']) {
410
				if ($num == $this->limite_requete['limite']) {
386
					break;
411
					break;
387
				}
412
				}
388
			} 
413
			} 
389
			if ($num == $this->limite_requete['limite']) {
414
			if ($num == $this->limite_requete['limite']) {
390
				break;
415
				break;
391
			}
416
			}
392
			$this->table_retour = array();
417
			$this->table_retour = array();
393
		}
418
		}
394
		//on remplit la table $table_retour_json['entete']	
419
		//on remplit la table $table_retour_json['entete']	
395
		// Mode moderne rétrocompatible : les départ sont toujours de simples offsets
420
		// Mode moderne rétrocompatible : les départ sont toujours de simples offsets
396
		if (strpos($this->limite_requete['depart'], ':') === false) {
421
		if (strpos($this->limite_requete['depart'], ':') === false) {
397
			$id = $this->limite_requete['depart'] + $this->limite_requete['limite'];
422
			$id = $this->limite_requete['depart'] + $this->limite_requete['limite'];
398
		}
423
		}
399
		//formuler les urls precedentes et suivantes affichées dans l'entete du resultat
424
		//formuler les urls precedentes et suivantes affichées dans l'entete du resultat
400
		$url = $this->formulerUrlObs($id, $num, '/observations');
425
		$url = $this->formulerUrlObs($id, $num, '/observations');
401
		if ($url['precedent'] != '') { $this->table_entete['href.precedent'] = $url['precedent']; }
426
		if ($url['precedent'] != '') { $this->table_entete['href.precedent'] = $url['precedent']; }
402
		if ($url['suivant']   != '') { $this->table_entete['href.suivant']   = $url['suivant']; }
427
		if ($url['suivant']   != '') { $this->table_entete['href.suivant']   = $url['suivant']; }
403
		$this->table_entete['total']  = $num;
428
		$this->table_entete['total']  = $num;
404
		$table_retour_json['entete'] = $this->table_entete;
429
		$table_retour_json['entete'] = $this->table_entete;
405
		$table_retour_json['resultat'] = $resultat_json; 
430
		$table_retour_json['resultat'] = $resultat_json; 
406
		return $table_retour_json;
431
		return $table_retour_json;
407
	}
432
	}
408
	
433
	
409
	public function completerDonnees($key, $valeur, $id) {
434
	public function completerDonnees($key, $valeur, $id) {
410
		if ($this->retour_format == 'max' ) {
435
		if ($this->retour_format == 'max' ) {
411
			$this->afficherDonneesMax($key, $valeur);
436
			$this->afficherDonneesMax($key, $valeur);
412
			$this->table_retour['href'] = $this->ajouterHref('observations',$id);
437
			$this->table_retour['href'] = $this->ajouterHref('observations',$id);
413
		} else {
438
		} else {
414
			$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
439
			$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
415
			$this->table_retour['valeur.code'] = $valeur;
440
			$this->table_retour['valeur.code'] = $valeur;
416
		}
441
		}
417
	}
442
	}
418
	
443
	
419
	public function formaterObservationsId($resultat) {
444
	public function formaterObservationsId($resultat) {
420
		foreach ($resultat as $key => $valeur) {
445
		foreach ($resultat as $key => $valeur) {
421
			switch ($key) {
446
			switch ($key) {
422
				case 'id'  		: break;
447
				case 'id'  		: break;
423
				case 'catminat' : if ($this->retour_format == 'max') $this->table_retour['determination.catminat'] = $valeur;	break;	
448
				case 'catminat' : if ($this->retour_format == 'max') $this->table_retour['determination.catminat'] = $valeur;	break;	
424
				case 'rang' 	: $this->table_retour['determination.rang'] = $valeur;					break;
449
				case 'rang' 	: $this->table_retour['determination.rang'] = $valeur;					break;
425
				case 'num_tax' 	: $this->table_retour['determination.num_tax'] = $valeur;				break;
450
				case 'num_tax' 	: $this->table_retour['determination.num_tax'] = $valeur;				break;
426
				case 'freq_abs'	: 																		break;
451
				case 'freq_abs'	: 																		break;
427
				case 'freq_rel'	: 																		break;
452
				case 'freq_rel'	: 																		break;
428
				case 'rare_nat'	: $this->table_retour['determination.rarete_nationale.code'] = $valeur;	break;
453
				case 'rare_nat'	: $this->table_retour['determination.rarete_nationale.code'] = $valeur;	break;
429
				case 'nom_sci'	: $this->table_retour['determination.nom_sci'] = $valeur;				break;
454
				case 'nom_sci'	: $this->table_retour['determination.nom_sci'] = $valeur;				break;
430
				case 'num_nom'	: $this->table_retour['determination.num_nom'] = $valeur;				break;
455
				case 'num_nom'	: $this->table_retour['determination.num_nom'] = $valeur;				break;
431
				default			: 	if ($this->retour_format == 'max') { 
456
				default			: 	if ($this->retour_format == 'max') { 
432
										$this->afficherDonneesMax($key, $valeur, true);
457
										$this->afficherDonneesMax($key, $valeur, true);
433
									} else {
458
									} else {
434
										$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
459
										$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
435
										$this->table_retour['valeur.code'] = $valeur;
460
										$this->table_retour['valeur.code'] = $valeur;
436
									}																	break;
461
									}																	break;
437
			}
462
			}
438
		}
463
		}
439
		return $this->table_retour;
464
		return $this->table_retour;
440
	}
465
	}
441
	
466
	
442
	public function afficherDonneesMax($key, $valeur, $id = false) {
467
	public function afficherDonneesMax($key, $valeur, $id = false) {
443
		if ($key != 20) { //à part la Corse
468
		if ($key != 20) { //à part la Corse
444
			$url_dep = $this->ajouterHrefAutreProjet('zone-geo','',$key, 'insee-d');
469
			$url_dep = $this->ajouterHrefAutreProjet('zone-geo','',$key, 'insee-d');
445
			$dep = $this->consulterHref($url_dep);
470
			$dep = $this->consulterHref($url_dep);
446
			if (isset($dep)) {
471
			if (isset($dep)) {
447
				$this->table_retour['station.departement'] = $dep->nom;
472
				$this->table_retour['station.departement'] = $dep->nom;
448
				$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
473
				$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
449
				$this->table_retour['station.departement.href'] = $url_dep;
474
				$this->table_retour['station.departement.href'] = $url_dep;
450
			} else {
475
			} else {
451
				$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
476
				$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
452
			}
477
			}
453
		} else {
478
		} else {
454
			$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
479
			$this->table_retour['station.departement.code'] = 'INSEE-D.'.$key;
455
		}
480
		}
456
		//double encodage des paramétres contre validation de Apache
481
		//double encodage des paramétres contre validation de Apache
457
		$url_val = $this->ajouterHref('ontologies', 'presenceChorologie:'.urlencode(urlencode($valeur)));
482
		$url_val = $this->ajouterHref('ontologies', 'presenceChorologie:'.urlencode(urlencode($valeur)));
458
		$val = $this->consulterHref($url_val);
483
		$val = $this->consulterHref($url_val);
459
		$this->table_retour['valeur'] = $val->nom;
484
		$this->table_retour['valeur'] = $val->nom;
460
		$this->table_retour['valeur.code'] = $valeur;
485
		$this->table_retour['valeur.code'] = $valeur;
461
		$this->table_retour['valeur.href'] = $url_val; 
486
		$this->table_retour['valeur.href'] = $url_val; 
462
		if ($this->format_reponse == 'observations/id') { // si on est 
487
		if ($this->format_reponse == 'observations/id') { // si on est 
463
			$contr = $this->chargerContributeurs($key);
488
			$contr = $this->chargerContributeurs($key);
464
			if (isset($contr['general'])) {
489
			if (isset($contr['general'])) {
465
				$this->table_retour['contributeur'] = $contr['general'];
490
				$this->table_retour['contributeur'] = $contr['general'];
466
				$this->table_retour['contributeur.details'] = $contr['details'];
491
				$this->table_retour['contributeur.details'] = $contr['details'];
467
			}
492
			}
468
			$source = $this->chargerSources($key);
493
			$source = $this->chargerSources($key);
469
			if (isset($source['general'])) $this->table_retour['sources'] = $source['general'];
494
			if (isset($source['general'])) $this->table_retour['sources'] = $source['general'];
470
			if (isset($source['autres'])) $this->table_retour['sources.autres'] = $source['autres'];
495
			if (isset($source['autres'])) $this->table_retour['sources.autres'] = $source['autres'];
471
		}
496
		}
472
	}
497
	}
473
	
498
	
474
	public function chargerInfosGenerales() {
499
	public function chargerInfosGenerales() {
475
		list($table, $version) = explode('_v',$this->table);
500
		list($table, $version) = explode('_v',$this->table);
476
		$version = str_replace('_', '.', $version);
501
		$version = str_replace('_', '.', $version);
477
		$requete = "SELECT createurs, date_creation FROM chorodep_meta WHERE version = \"$version\";";
502
		$requete = "SELECT createurs, date_creation FROM chorodep_meta WHERE version = \"$version\";";
478
		$resultat = $this->getBdd()->recuperer($requete); //Debug::printr($resultat);
503
		$resultat = $this->getBdd()->recuperer($requete); //Debug::printr($resultat);
479
		
504
		
480
		if ($resultat == '') { //cas ou la requete comporte des erreurs
505
		if ($resultat == '') { //cas ou la requete comporte des erreurs
481
			$r = 'La requête SQL metadonnees formée comporte une erreur !!';
506
			$r = 'La requête SQL metadonnees formée comporte une erreur !!';
482
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
507
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
483
			Debug::printr($requete);
508
			Debug::printr($requete);
484
		} elseif ($resultat) {
509
		} elseif ($resultat) {
485
			$this->table_retour['type'] = 'chorologie';
510
			$this->table_retour['type'] = 'chorologie';
486
			$this->table_retour['date_observation'] = $resultat['date_creation'];
511
			$this->table_retour['date_observation'] = $resultat['date_creation'];
487
			$this->table_retour['observateur.details'] = $this->traiterChampFormateDCSV($resultat['createurs']);
512
			$this->table_retour['observateur.details'] = $this->traiterChampFormateDCSV($resultat['createurs']);
488
		}
513
		}
489
	}
514
	}
490
	
515
	
491
	public function chargerContributeurs($dept) {
516
	public function chargerContributeurs($dept) {
492
		$contributeur = array();
517
		$contributeur = array();
493
		list($table, $version) = explode('_v',$this->table);
518
		list($table, $version) = explode('_v',$this->table);
494
		$requete = "SELECT prenom, nom, courriel FROM chorodep_contributeurs WHERE `$dept` = '1';";
519
		$requete = "SELECT prenom, nom, courriel FROM chorodep_contributeurs WHERE `$dept` = '1';";
495
		$resultat = $this->getBdd()->recupererTous($requete); //Debug::printr($resultat);
520
		$resultat = $this->getBdd()->recupererTous($requete); //Debug::printr($resultat);
496
		
521
		
497
		if ($resultat == '') { //cas ou la requete comporte des erreurs
522
		if ($resultat == '') { //cas ou la requete comporte des erreurs
498
			$r = 'La requête SQL contributeurs formée comporte une erreur !!';
523
			$r = 'La requête SQL contributeurs formée comporte une erreur !!';
499
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
524
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
500
			Debug::printr($requete);
525
			Debug::printr($requete);
501
		} elseif ($resultat) {
526
		} elseif ($resultat) {
502
			$contributeur['general'] = '';
527
			$contributeur['general'] = '';
503
			foreach ($resultat as $res) {
528
			foreach ($resultat as $res) {
504
				$contributeur['general'] .= $res['prenom'].' '.$res['nom'].', ';
529
				$contributeur['general'] .= $res['prenom'].' '.$res['nom'].', ';
505
				foreach ($res as $cle => $valeur) {
530
				foreach ($res as $cle => $valeur) {
506
					if ($valeur == "") {
531
					if ($valeur == "") {
507
						unset($res[$cle]);
532
						unset($res[$cle]);
508
					}
533
					}
509
				}
534
				}
510
				$type = ($res['prenom'] == '') ? 'o' : 'p';
535
				$type = ($res['prenom'] == '') ? 'o' : 'p';
511
				$url = $this->ajouterHrefAutreProjet('ontologies', 'contactType:', $type, 'eflore');
536
				$url = $this->ajouterHrefAutreProjet('ontologies', 'contactType:', $type, 'eflore');
512
				$val = $this->consulterHref($url);
537
				$val = $this->consulterHref($url);
513
				$res['type'] = $val->nom;
538
				$res['type'] = $val->nom;
514
				$res['type.code'] = $type;
539
				$res['type.code'] = $type;
515
				$res['type.href'] = $url;
540
				$res['type.href'] = $url;
516
				$contributeur['details'][] = $res;
541
				$contributeur['details'][] = $res;
517
			}
542
			}
518
		}
543
		}
519
		return $contributeur;
544
		return $contributeur;
520
	}
545
	}
521
	
546
	
522
	// prend en paramètre un champ comme createur, contributeur... sous forme p.prenom=ygggg,p.nom=fk;p.prenom=fdfs,p.nom=ek
547
	// prend en paramètre un champ comme createur, contributeur... sous forme p.prenom=ygggg,p.nom=fk;p.prenom=fdfs,p.nom=ek
523
	//retourne un tableau
548
	//retourne un tableau
524
	public function creerPointDetails($resultat) {
549
	public function creerPointDetails($resultat) {
525
		$organismes = explode(';', $resultat);
550
		$organismes = explode(';', $resultat);
526
		$num_org = 1;
551
		$num_org = 1;
527
		$general = '';
552
		$general = '';
528
		foreach ($organismes as $organisme) {
553
		foreach ($organismes as $organisme) {
529
			$infos = explode(',', $organisme);
554
			$infos = explode(',', $organisme);
530
		   	$t = '';
555
		   	$t = '';
531
			$type = '.'; 
556
			$type = '.'; 
532
			
557
			
533
			foreach ($infos as $info) {
558
			foreach ($infos as $info) {
534
				list($key, $val) = explode('=', $info);
559
				list($key, $val) = explode('=', $info);
535
				list($type, $champ) = explode('.', trim($key));
560
				list($type, $champ) = explode('.', trim($key));
536
				if ($type == 'p' && $champ == 'prenom') $general .= $val.' ';
561
				if ($type == 'p' && $champ == 'prenom') $general .= $val.' ';
537
				if (($type == 'p' || $type == 'o') && $champ == 'nom') $general .= $val.' ';
562
				if (($type == 'p' || $type == 'o') && $champ == 'nom') $general .= $val.' ';
538
				$res[$num_org][$champ] = $val;
563
				$res[$num_org][$champ] = $val;
539
				$res[$num_org]['type'] = $type;// à modifier
564
				$res[$num_org]['type'] = $type;// à modifier
540
			}
565
			}
541
			$general = rtrim($general).', ';
566
			$general = rtrim($general).', ';
542
			$num_org ++;
567
			$num_org ++;
543
		}
568
		}
544
		$this->table_retour['observateur'] = rtrim($general, ', ');
569
		$this->table_retour['observateur'] = rtrim($general, ', ');
545
		$this->table_retour['observateur.details'] = $res;
570
		$this->table_retour['observateur.details'] = $res;
546
	}
571
	}
547
	/**
572
	/**
548
	 * Recupère à partir de la valeur du champ les différentes informations séparées par ';' (stocke ds un tableau)
573
	 * Recupère à partir de la valeur du champ les différentes informations séparées par ';' (stocke ds un tableau)
549
	 * pour éditeurs, créateurs, contributeurs,...
574
	 * pour éditeurs, créateurs, contributeurs,...
550
	 * (ex : nom=Tela Botanica,guid=urn:lsid:tela-botanica.org,courriel=accueil@tela-botanica.org,...
575
	 * (ex : nom=Tela Botanica,guid=urn:lsid:tela-botanica.org,courriel=accueil@tela-botanica.org,...
551
	 */ 
576
	 */ 
552
	public function traiterChampFormateDCSV($val) {
577
	public function traiterChampFormateDCSV($val) {
553
		$tab = array(); 
578
		$tab = array(); 
554
		$num_entite = 0;
579
		$num_entite = 0;
555
		$type = '';
580
		$type = '';
556
		
581
		
557
		// découpe chaque participant
582
		// découpe chaque participant
558
		$tab_entites = explode(';', $val);
583
		$tab_entites = explode(';', $val);
559
		foreach ($tab_entites as $entite) {
584
		foreach ($tab_entites as $entite) {
560
			$tab[$num_entite] = array();
585
			$tab[$num_entite] = array();
561
			
586
			
562
			if ($entite != '') {
587
			if ($entite != '') {
563
				// découpe les informations du participant
588
				// découpe les informations du participant
564
				$entite_detail = explode(',', $entite); 
589
				$entite_detail = explode(',', $entite); 
565
				foreach ($entite_detail as $detail) {
590
				foreach ($entite_detail as $detail) {
566
					
591
					
567
					if ($detail != '') {
592
					if ($detail != '') {
568
						if (preg_match('/^([^=]*)\.([^=]+)=([^=]*)$/', $detail, $match)) {
593
						if (preg_match('/^([^=]*)\.([^=]+)=([^=]*)$/', $detail, $match)) {
569
							$tab[$num_entite][$match[2]] = $match[3];
594
							$tab[$num_entite][$match[2]] = $match[3];
570
							if ($match[1] != $type) $type = $match[1];
595
							if ($match[1] != $type) $type = $match[1];
571
						} else {
596
						} else {
572
							$tab[$num_entite][] = $detail;
597
							$tab[$num_entite][] = $detail;
573
						}
598
						}
574
					}
599
					}
575
				}
600
				}
576
				if ($type != '') {
601
				if ($type != '') {
577
					if ($this->retour_format == 'max') {
602
					if ($this->retour_format == 'max') {
578
						
603
						
579
					}
604
					}
580
				}
605
				}
581
			}
606
			}
582
			$num_entite++;
607
			$num_entite++;
583
		}
608
		}
584
		return $tab;
609
		return $tab;
585
	}
610
	}
586
	
611
	
587
	public function chargerSources($dept) {
612
	public function chargerSources($dept) {
588
		$contributeur = array();
613
		$contributeur = array();
589
		$requete = "SELECT biblio FROM chorodep_sources WHERE `$dept` = '1';";
614
		$requete = "SELECT biblio FROM chorodep_sources WHERE `$dept` = '1';";
590
		$resultat = $this->getBdd()->recupererTous($requete); //Debug::printr($resultat);
615
		$resultat = $this->getBdd()->recupererTous($requete); //Debug::printr($resultat);
591
		
616
		
592
		if ($resultat == '') { //cas ou la requete comporte des erreurs
617
		if ($resultat == '') { //cas ou la requete comporte des erreurs
593
			$r = 'La requête SQL sources formée comporte une erreur !!';
618
			$r = 'La requête SQL sources formée comporte une erreur !!';
594
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
619
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $r);
595
			Debug::printr($requete);
620
			Debug::printr($requete);
596
		} elseif ($resultat) {
621
		} elseif ($resultat) {
597
			foreach ($resultat as $cle=>$res) {
622
			foreach ($resultat as $cle=>$res) {
598
				if ($cle == 0) {
623
				if ($cle == 0) {
599
					$contributeur['general'] = $res['biblio'];
624
					$contributeur['general'] = $res['biblio'];
600
				} else {
625
				} else {
601
					$contributeur['autres'][] = $res['biblio'];
626
					$contributeur['autres'][] = $res['biblio'];
602
				}
627
				}
603
			}
628
			}
604
		}
629
		}
605
		return $contributeur;
630
		return $contributeur;
606
	}
631
	}
607
	
632
	
608
	
633
	
609
/*	public function formaterObservationsIdChamp($resultat) {
634
/*	public function formaterObservationsIdChamp($resultat) {
610
		
635
		
611
		//on recupère tous les resultats possibles
636
		//on recupère tous les resultats possibles
612
		$reponse = $this->formaterObservationsId($resultat);
637
		$reponse = $this->formaterObservationsId($resultat);
613
		$this->table_retour = array();
638
		$this->table_retour = array();
614
		
639
		
615
		//on recupère les résultats demandés à partir du tableau de résultat complet
640
		//on recupère les résultats demandés à partir du tableau de résultat complet
616
		$this->table_retour['id'] = $reponse['id'];
641
		$this->table_retour['id'] = $reponse['id'];
617
		$champs = explode(' ', $this->table_ressources[1]);
642
		$champs = explode(' ', $this->table_ressources[1]);
618
		
643
		
619
		foreach ($champs as $champ) {
644
		foreach ($champs as $champ) {
620
			
645
			
621
			if ($this->verifierValiditeChamp($champ, $reponse)) {
646
			if ($this->verifierValiditeChamp($champ, $reponse)) {
622
				
647
				
623
				if (strrpos($champ, '.*') !== false) {
648
				if (strrpos($champ, '.*') !== false) {
624
					$this->afficherPointEtoile($champ, $reponse);
649
					$this->afficherPointEtoile($champ, $reponse);
625
					
650
					
626
				} else {
651
				} else {
627
					if (isset($reponse[$champ])) {
652
					if (isset($reponse[$champ])) {
628
						$this->table_retour[$champ] = $reponse[$champ];
653
						$this->table_retour[$champ] = $reponse[$champ];
629
					} else {
654
					} else {
630
						$this->table_retour[$champ] = null;
655
						$this->table_retour[$champ] = null;
631
					}
656
					}
632
				}
657
				}
633
			} 
658
			} 
634
		}
659
		}
635
		return $this->table_retour;
660
		return $this->table_retour;
636
	}*/
661
	}*/
637
	
662
	
638
// +-------------------------------------------------------------------------------------------------------------------+	
663
// +-------------------------------------------------------------------------------------------------------------------+	
639
/**
664
/**
640
	 * Description : 
665
	 * Description : 
641
	 * Est appelée pour former l'url complete des resultats precedants ou suivants.
666
	 * Est appelée pour former l'url complete des resultats precedants ou suivants.
642
	 * @param int : Permet de connaitre le nombre de noms obtenus par la requete
667
	 * @param int : Permet de connaitre le nombre de noms obtenus par la requete
643
	 * @return string Retourne l'url complete des resultats precedents ou suivant sous la forme d'un tableau
668
	 * @return string Retourne l'url complete des resultats precedents ou suivant sous la forme d'un tableau
644
	 */
669
	 */
645
	public function formulerUrlObs($suivant, $total, $id = null) {
670
	public function formulerUrlObs($suivant, $total, $id = null) {
646
		$debut_url = Config::get('url_service').$id.'?';
671
		$debut_url = Config::get('url_service').$id.'?';
647
		//on recrée l'url sans les parametres de navigation qui seront rajouter ci-apres. On les enlève dc de la table des parametres
672
		//on recrée l'url sans les parametres de navigation qui seront rajouter ci-apres. On les enlève dc de la table des parametres
648
		$table_bis = $this->table_param;
673
		$table_bis = $this->table_param;
649
		if (isset($table_bis['navigation.depart'] )) {
674
		if (isset($table_bis['navigation.depart'] )) {
650
			unset($table_bis['navigation.depart']);
675
			unset($table_bis['navigation.depart']);
651
		}
676
		}
652
		if (isset($table_bis['navigation.limite'])) {
677
		if (isset($table_bis['navigation.limite'])) {
653
			unset($table_bis['navigation.limite']);
678
			unset($table_bis['navigation.limite']);
654
		}
679
		}
655
		$parametre_url = http_build_query($table_bis);
680
		$parametre_url = http_build_query($table_bis);
656
		//on recupere les limites
681
		//on recupere les limites
657
		$url['suivant']   = $this->recupererLesLimitesSuivantesObs($suivant, $total);
682
		$url['suivant']   = $this->recupererLesLimitesSuivantesObs($suivant, $total);
658
		$url['precedent'] = $this->recupererLesLimitesPrecedentesObs($suivant);
683
		$url['precedent'] = $this->recupererLesLimitesPrecedentesObs($suivant);
659
		//on reconstitue les deux urls avec leurs limites
684
		//on reconstitue les deux urls avec leurs limites
660
		foreach ($url as $key => $limite) {
685
		foreach ($url as $key => $limite) {
661
			if ($limite != '') {
686
			if ($limite != '') {
662
				if ($parametre_url == '') {
687
				if ($parametre_url == '') {
663
					//si il n'y a aucun parametres, seules les limites sont à ajouter.On enleve dc le signe & du début
688
					//si il n'y a aucun parametres, seules les limites sont à ajouter.On enleve dc le signe & du début
664
					$limite = str_replace('&navigation.depart=', 'navigation.depart=', $limite);
689
					$limite = str_replace('&navigation.depart=', 'navigation.depart=', $limite);
665
					if (strpos($limite, 'navigation.depart') === false) {
690
					if (strpos($limite, 'navigation.depart') === false) {
666
						$limite = str_replace('&navigation.limite=', 'navigation.limite=', $limite);
691
						$limite = str_replace('&navigation.limite=', 'navigation.limite=', $limite);
667
					}
692
					}
668
				}
693
				}
669
				$url_complete = $debut_url.$parametre_url.$limite;
694
				$url_complete = $debut_url.$parametre_url.$limite;
670
				$url[$key] = $url_complete;
695
				$url[$key] = $url_complete;
671
			}
696
			}
672
		}
697
		}
673
		return $url;
698
		return $url;
674
	}
699
	}
675
	
700
	
676
	/**
701
	/**
677
	 * Description : 
702
	 * Description : 
678
	 * Permet de former les limites de la requete retournant les résultats suivants.
703
	 * Permet de former les limites de la requete retournant les résultats suivants.
679
	 * Cette url sera afficher dans l'entete de la reponse retournée en format JSON (retour.format=defaut).
704
	 * Cette url sera afficher dans l'entete de la reponse retournée en format JSON (retour.format=defaut).
680
	 * @param int : $nb_resultat : Permet de connaitre le nombre de résultats obtenus par la requete
705
	 * @param int : $nb_resultat : Permet de connaitre le nombre de résultats obtenus par la requete
681
	 * @return string : la fin de l'url decrivant les limites des resultats suivants. Si aucun résultats ne suient, 
706
	 * @return string : la fin de l'url decrivant les limites des resultats suivants. Si aucun résultats ne suient, 
682
	 * une chaine de caractère vide est retournée
707
	 * une chaine de caractère vide est retournée
683
	 */
708
	 */
684
	public function recupererLesLimitesSuivantesObs($suivant, $total) {
709
	public function recupererLesLimitesSuivantesObs($suivant, $total) {
685
		if ($this->limite_requete['limite'] <= $total) {
710
		if ($this->limite_requete['limite'] <= $total) {
686
			$url_suivante = '&navigation.depart='.$suivant.'&navigation.limite='.$this->limite_requete['limite'];
711
			$url_suivante = '&navigation.depart='.$suivant.'&navigation.limite='.$this->limite_requete['limite'];
687
		} else {
712
		} else {
688
			$url_suivante = '';
713
			$url_suivante = '';
689
		}
714
		}
690
		return $url_suivante;
715
		return $url_suivante;
691
	}
716
	}
692
	
717
	
693
	/**
718
	/**
694
	 * Description : 
719
	 * Description : 
695
	 * Permet de former les limites de la requete retournant les résultats precedents.
720
	 * Permet de former les limites de la requete retournant les résultats precedents.
696
	 * Cette url sera afficher dans l'entete de la taxons/105reponse retournée en format JSON (retour.format=defaut)
721
	 * Cette url sera afficher dans l'entete de la taxons/105reponse retournée en format JSON (retour.format=defaut)
697
	 * @return string : la fin de l'url decrivant les limites des resultats precedents. 
722
	 * @return string : la fin de l'url decrivant les limites des resultats precedents. 
698
	 * Si aucun résultats ne precedent, une chaine de caractère vide est retournée
723
	 * Si aucun résultats ne precedent, une chaine de caractère vide est retournée
699
	 */
724
	 */
700
	public function recupererLesLimitesPrecedentesObs($suivant) {
725
	public function recupererLesLimitesPrecedentesObs($suivant) {
701
		$url_precedente = '';
726
		$url_precedente = '';
702
		// tentative de fonctionnement normal
727
		// tentative de fonctionnement normal
703
		if (strpos($this->limite_requete['depart'], ':') === false && $this->limite_requete['depart'] != 0) {
728
		if (strpos($this->limite_requete['depart'], ':') === false && $this->limite_requete['depart'] != 0) {
704
			$departPrec = max(0, $this->limite_requete['depart'] - $this->limite_requete['limite']);
729
			$departPrec = max(0, $this->limite_requete['depart'] - $this->limite_requete['limite']);
705
			$url_precedente = "&navigation.depart=$departPrec&navigation.limite=" . $this->limite_requete['limite'];
730
			$url_precedente = "&navigation.depart=$departPrec&navigation.limite=" . $this->limite_requete['limite'];
706
		}
731
		}
707
		if (isset($this->table_param['navigation_depart'])) { // si on utilise un parametre de départ
732
		if (isset($this->table_param['navigation_depart'])) { // si on utilise un parametre de départ
708
			// si l'adresse d'appel de la page est inférieur au départ
733
			// si l'adresse d'appel de la page est inférieur au départ
709
			$regex = '/http:\/\/.*\/service:eflore:0.1\/chorodep\/observations\?.*navigation.depart=(.*\:[0-9]*).*/';
734
			$regex = '/http:\/\/.*\/service:eflore:0.1\/chorodep\/observations\?.*navigation.depart=(.*\:[0-9]*).*/';
710
			if (isset($_SERVER['HTTP_REFERER']) && preg_match($regex, $_SERVER['HTTP_REFERER'], $match)) {
735
			if (isset($_SERVER['HTTP_REFERER']) && preg_match($regex, $_SERVER['HTTP_REFERER'], $match)) {
711
				if ($match[1] != $this->table_param['navigation_depart'] && $match[1] != $suivant) {
736
				if ($match[1] != $this->table_param['navigation_depart'] && $match[1] != $suivant) {
712
					$url_precedente = '&navigation.depart='.$match[1].'&navigation.limite='.$this->limite_requete['limite'];
737
					$url_precedente = '&navigation.depart='.$match[1].'&navigation.limite='.$this->limite_requete['limite'];
713
				}
738
				}
714
			} else {
739
			} else {
715
				$url_precedente = '&navigation.limite='.$this->limite_requete['limite'];
740
				$url_precedente = '&navigation.limite='.$this->limite_requete['limite'];
716
			}
741
			}
717
		}
742
		}
718
		return $url_precedente;
743
		return $url_precedente;
719
	}
744
	}
720
 
745
 
721
}
746
}
722
?>
747
?>