Subversion Repositories Applications.referentiel

Rev

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

Rev 71 Rev 72
1
<?php
1
<?php
2
/**
2
/**
3
 * Service fournissant des informations sur les référentiels répondant aux critères de recherche
3
 * Service fournissant des informations sur les référentiels répondant aux critères de recherche
4
 * fournis en paramètre.
4
 * fournis en paramètre.
5
 * Encodage en entrée : utf8
5
 * Encodage en entrée : utf8
6
 * Encodage en sortie : utf8
6
 * Encodage en sortie : utf8
7
 * 
-
 
-
 
7
 * @author		Delphine CAUQUIL <delphine@tela-botanica.org>
8
 * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
8
 * @author 		Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
9
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
10
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
11
 * @version $Id$
11
 * @version		$Id$
12
 * @copyright	2010 Tela-Botanica
12
 * @copyright	2010 Tela-Botanica
13
 */
13
 */
-
 
14
 
14
class Recherche extends Ref {
15
class Recherche extends Ref {
15
 
16
 
16
	/**
17
	/**
17
	 * Méthode principale appelée avec une requête de type GET.
18
	 * Méthode principale appelée avec une requête de type GET.
18
	 * Elle sert d'aiguilleur pour appeller la méthode correspondant au type de recherche passé en paramêtre.
19
	 * Elle sert d'aiguilleur pour appeller la méthode correspondant au type de recherche passé en paramêtre.
19
	 */
20
	 */
20
	public function getElement($param = array()) {
21
	public function getElement($param = array()) {
21
		// Initialisation des variables
22
		// Initialisation des variables
22
		$info = array();
23
		$info = array();
23
				
24
				
24
		// Nour recherchons le type de requête demandé
25
		// Nous recherchons le type de requête demandé
25
		$type = $param[0];
26
		$type = $param[0];
26
				 
27
				 
27
		$methode = 'getElement'.$type;
28
		$methode = 'getElement'.$type;
28
		if (method_exists($this, $methode)) {
29
		if (method_exists($this, $methode)) {
29
			array_shift($param);
30
			array_shift($param);
30
			$info = $this->$methode($param);
31
			$info = $this->$methode($param);
31
		} else {
32
		} else {
32
			$this->messages[] = "Le type de recherche demandé '$type' n'est pas disponible.";
33
			$this->messages[] = "Le type de recherche demandé '$type' n'est pas disponible.";
33
		}
34
		}
34
		
35
		
35
		// Envoie sur la sortie standard
36
		// Envoie sur la sortie standard
36
		$this->envoyer($info);
37
		$this->envoyer($info);
37
	}
38
	}
38
	
39
	
-
 
40
/* Méthode pour récupérer le nombre de taxons répondant à la requête
-
 
41
	 * Appelée avec les paramètres d'url suivant :
-
 
42
	 * /Recherche/Nombre/_
-
 
43
	 * ou les _ représentent dans l'ordre : référentiel, mots, paramétres avancés
-
 
44
	 * Si un des paramètres est absent, il prendre la valeur *
-
 
45
	 */
-
 
46
	public function getElementNombre($param) {
-
 
47
		// Initialisation des variables
-
 
48
		$info = array();
-
 
49
				
-
 
50
		// Pré traitement des paramètres
-
 
51
		$p = $this->pretraiterParametresUrl($param);
-
 
52
		$referentiel = substr($p['ref'], 2, -2); 
-
 
53
 
-
 
54
		// Construction de la requête
-
 
55
		// Il est important de compter le nombre de taxons pour l'affichage
-
 
56
		$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' COUNT(num_nom) AS nbre FROM '.$referentiel.
-
 
57
					$this->construireWhere($p).' ';
-
 
58
 
-
 
59
		// Récupération des résultats
-
 
60
		try {
-
 
61
			$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
-
 
62
			if ($donnees === false) {
-
 
63
				$this->messages[] = "La requête a retourné aucun résultat.";
-
 
64
			} else {
-
 
65
				$info = $donnees['nbre'];
-
 
66
			}
-
 
67
		} catch (PDOException $e) {
-
 
68
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
-
 
69
		}
39
 	/* Méthode pour récupérer une liste d'information sur les collections et/ou structures en fonction de mots et de
70
 
-
 
71
		return $info;
-
 
72
	}
-
 
73
	
40
 	 * restrictions.
74
 	/* Méthode pour récupérer une liste de taxons
41
	 * Appelée avec les paramêtres d'url suivant :
75
	 * Appelée avec les paramêtres d'url suivant :
42
	 * /CoelRecherche/ParDefaut/_
76
	 * /Recherche/ParDefaut/_
43
	 * ou les _ représentent dans l'ordre : mots
77
	 * ou les _ représentent dans l'ordre : référentiel, mots, paramétres avancés
44
	 * Si un des paramêtres est abscent, il prendre la valeur *
78
	 * Si un des paramètres est absent, il prendre la valeur *
45
	 */
79
	 */
46
	public function getElementParDefaut($param) {
80
	public function getElementParDefaut($param) {
47
		// Initialisation des variables
81
		// Initialisation des variables
48
		$info = array();
82
		$info = array();
49
				
83
				
50
		// Pré traitement des paramêtres
84
		// Pré traitement des paramètres
51
		$p = $this->pretraiterParametresUrl($param);
85
		$p = $this->pretraiterParametresUrl($param);
52
		$referentiel = substr($p['ref'], 2, -2); 
86
		$referentiel = substr($p['ref'], 2, -2); 
53
		
87
		
54
		// Construction de la requête
-
 
55
		if (isset($p['tax']) && $p['tax'] == true) {
-
 
56
			$requete_synonyme =	'SELECT DISTINCT num_nom_retenu FROM '.$referentiel.
-
 
57
					$this->construireFromEtWhere($p).';';
-
 
58
			try {
-
 
59
				$info = '';
-
 
60
				$donnees_synonyme = $this->bdd->query($requete_synonyme)->fetchAll(PDO::FETCH_ASSOC);
-
 
61
				
-
 
62
				if ($donnees_synonyme === false) {
-
 
63
					$this->messages[] = "La requête a retourné aucun résultat.";
-
 
64
				} else{
-
 
65
					$liste_nom = '';
-
 
66
					foreach ($donnees_synonyme as $donnees_syn) {
-
 
67
						if ($donnees_syn['num_nom_retenu'] != '') {
-
 
68
							$liste_nom .= (!empty($liste_nom) ? ', ' : '').'"'.$donnees_syn['num_nom_retenu'].'"';
-
 
69
						}
-
 
70
					}
-
 
71
					
-
 
72
					$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' num_nom, nom_complet, auteur, annee, '.
-
 
73
					'biblio_origine, nom_addendum, num_nom_retenu FROM '.$referentiel.' WHERE num_nom_retenu IN ('.$liste_nom.') '.
-
 
74
					'ORDER BY num_nom_retenu '."LIMIT $this->start, $this->limit ";
-
 
75
					$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
-
 
76
					$info = $donnees;
-
 
77
				}
-
 
78
			} catch (PDOException $e) {
-
 
79
				$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
-
 
80
			}
-
 
81
			return $info;
-
 
82
			
-
 
83
			
-
 
84
		} else {		
88
		// Construction de la requête		
85
			$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' num_nom, nom_complet, auteur, annee, '.
89
		$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' num_nom, nom_complet, auteur, annee, '.
86
					'biblio_origine, nom_addendum, num_nom_retenu FROM '.$referentiel.
-
 
87
					$this->construireFromEtWhere($p).
90
				'biblio_origine, nom_addendum, num_nom_retenu FROM '.$referentiel.$this->construireWhere($p).
88
					'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'num_nom ASC, nom_complet ASC').' '.
91
				'ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'num_nom ASC, nom_complet ASC').' '.
89
					"LIMIT $this->start, $this->limit ";
92
				"LIMIT $this->start, $this->limit ";
90
					
93
					
91
			// Récupération des résultats
94
		// Récupération des résultats
92
			try {
95
		try {
93
				$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
96
			$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
94
				if ($donnees === false) {
97
			if ($donnees === false) {
95
					$this->messages[] = "La requête a retourné aucun résultat.";
98
				$this->messages[] = "La requête a retourné aucun résultat.";
96
				} else {
-
 
97
					$info = $donnees;
-
 
98
				}
-
 
99
			} catch (PDOException $e) {
99
			} else {
100
				$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
100
				$info = $donnees;
-
 
101
			}
101
			}
102
		} catch (PDOException $e) {
-
 
103
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
102
			return $info;
104
		}
-
 
105
		return $info;
103
		}
106
	}
104
	}
-
 
105
	
107
	
106
	/* Méthode pour récupérer une liste d'information sur les collections et/ou structures en fonction de mots et de
108
	
107
 	 * restrictions.
109
	/* Méthode pour récupérer le nombre de taxons répondant à une requête sur la synonymie
108
	 * Appelée avec les paramêtres d'url suivant :
110
	 * Appelée avec les paramètres d'url suivant :
109
	 * /CoelRecherche/ParDefaut/_
111
	 * /Recherche/Nombre/_
110
	 * ou les _ représentent dans l'ordre : mots
112
	 * ou les _ représentent dans l'ordre : référentiel, mots, paramétres avancés
111
	 * Si un des paramêtres est abscent, il prendre la valeur *
113
	 * Si un des paramètres est absent, il prendre la valeur *
112
	 */
114
	 */
113
	public function getElementNombre($param) {
115
	public function getElementNombreTaxon($param) {
114
		// Initialisation des variables
116
		// Initialisation des variables
115
		$info = array();
117
		$info = array();
116
				
118
				
117
		// Pré traitement des paramêtres
119
		// Pré traitement des paramètres
118
		$p = $this->pretraiterParametresUrl($param);
120
		$p = $this->pretraiterParametresUrl($param);
119
		$referentiel = substr($p['ref'], 2, -2); 
121
		$referentiel = substr($p['ref'], 2, -2); 
-
 
122
 
120
 
123
		
121
		// Construction de la requête
124
		// Construction de la requête
122
		// Il est important de compter le nombre d'association structure-collection différentes pour obtenir le bon nombre
125
		// Il est important de compter le nombre de taxons pour l'affichage
123
		$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' COUNT(num_nom) AS nbre FROM '.$referentiel.
-
 
124
					$this->construireFromEtWhere($p).' ';
126
		$requete = 	'SELECT count(DISTINCT num_nom_retenu) as nbr FROM '.$referentiel.$this->construireWhere($p).';';
125
 
127
 
126
		// Récupération des résultats
128
		// Récupération des résultats
127
		try {
129
		try {
128
			$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
130
			$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
129
			if ($donnees === false) {
131
			if ($donnees === false) {
130
				$this->messages[] = "La requête a retourné aucun résultat.";
132
				$this->messages[] = "La requête a retourné aucun résultat.";
131
			} else {
133
			} else {
132
				$info = $donnees['nbre'];
134
				$info = $donnees['nbr'];
133
			}
135
			}
134
		} catch (PDOException $e) {
136
		} catch (PDOException $e) {
135
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
137
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
136
		}
138
		}
137
 
139
 
138
		return $info;
140
		return $info;
139
	}
141
	}
-
 
142
	
-
 
143
 	/* Méthode pour récupérer une liste de taxons
-
 
144
	 * Appelée avec les paramêtres d'url suivant :
-
 
145
	 * /Recherche/ParDefaut/_
-
 
146
	 * ou les _ représentent dans l'ordre : référentiel, mots, paramétres avancés
-
 
147
	 * Si un des paramètres est absent, il prendre la valeur *
-
 
148
	 */
-
 
149
	public function getElementParTaxon($param) {
-
 
150
		// Initialisation des variables
-
 
151
		$info = array();
-
 
152
				
-
 
153
		// Pré traitement des paramètres
-
 
154
		$p = $this->pretraiterParametresUrl($param);
-
 
155
		$referentiel = substr($p['ref'], 2, -2); 
-
 
156
		
-
 
157
		$liste_nom = $this->getNomRetenu($param);
-
 
158
		// Construction de la requête
-
 
159
		// si recherche des synonymes
-
 
160
		$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').' num_nom, nom_complet, auteur, annee, '.
-
 
161
					'biblio_origine, nom_addendum, num_nom_retenu FROM '.$referentiel.' WHERE num_nom_retenu IN ('
-
 
162
					.$liste_nom.') ORDER BY num_nom ASC ';
-
 
163
		try {
-
 
164
			$info = '';
-
 
165
				$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
-
 
166
				$info = $donnees;
-
 
167
		} catch (PDOException $e) {
-
 
168
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
-
 
169
		}
-
 
170
		return $info;
-
 
171
	}
-
 
172
	
-
 
173
	/* Méthode pour récupérer une liste de noms retenus
-
 
174
	 */
-
 
175
	public function getNomRetenu($param) {
-
 
176
		// Initialisation des variables
-
 
177
		$info = array();
-
 
178
				
-
 
179
		// Pré traitement des paramètres
-
 
180
		$p = $this->pretraiterParametresUrl($param);
-
 
181
		$referentiel = substr($p['ref'], 2, -2); 
-
 
182
		
-
 
183
		// Construction de la requête
-
 
184
		// si recherche des synonymes
-
 
185
		$requete_nom_retenu =	'SELECT DISTINCT num_nom_retenu FROM '.$referentiel.$this->construireWhere($p)
-
 
186
			."ORDER BY num_nom ASC LIMIT $this->start, $this->limit ".';';
-
 
187
		try {
-
 
188
			$info = '';
-
 
189
			$donnees_nom_retenu = $this->bdd->query($requete_nom_retenu)->fetchAll(PDO::FETCH_ASSOC);
-
 
190
 
-
 
191
			if ($donnees_nom_retenu === false) {
-
 
192
				$this->messages[] = "La requête n'a retourné aucun résultat.";
-
 
193
			} else {
-
 
194
				$liste_nom = '';
-
 
195
				foreach ($donnees_nom_retenu as $donnees_nom) {
-
 
196
					if ($donnees_nom['num_nom_retenu'] != '') {
-
 
197
						$liste_nom .= (!empty($liste_nom) ? ', ' : '').'"'.$donnees_nom['num_nom_retenu'].'"';
-
 
198
					}
-
 
199
				}
-
 
200
				$info = $liste_nom;
-
 
201
			}
-
 
202
		} catch (PDOException $e) {
-
 
203
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
-
 
204
		}
-
 
205
		return $info;
-
 
206
	}
140
	
207
	
141
	private function pretraiterParametresUrl($param) {
208
	private function pretraiterParametresUrl($param) {
142
		// Tableau des paramêtres qui peuvent être passés dans l'url
209
		// Tableau des paramètres qui peuvent être passés dans l'url
143
		$params_passes = array('ref' => 'str',
210
		$params_passes = array('ref' => 'str',
144
			'mots' => 'str',
211
			'mots' => 'str',
145
			'sg' => 'str', 
212
			'sg' => 'str', 
146
			'gen' => 'str', 
213
			'gen' => 'str', 
147
			'sp' => 'str',
214
			'sp' => 'str',
148
			'ssp' => 'str',
215
			'ssp' => 'str',
149
			'au' => 'str',
216
			'au' => 'str',
150
			'an' => 'str',
217
			'an' => 'str',
151
			'nn' => 'int',
218
			'nn' => 'int',
152
			'bib' => 'str',
219
			'bib' => 'str',
153
			'nr' => 'bool',
220
			'nr' => 'bool',
154
			'tax' => 'bool');
221
			'tax' => 'bool');
155
		
222
		
156
		$p = $this->traiterParametresUrl(array_keys($params_passes), $param, false);
223
		$p = $this->traiterParametresUrl(array_keys($params_passes), $param, false);
157
		$this->debug[] = $param;
224
		$this->debug[] = $param;
158
		foreach ($params_passes as $param_passe => $type) {
225
		foreach ($params_passes as $param_passe => $type) {
159
			if (isset($p[$param_passe])) {
226
			if (isset($p[$param_passe])) {
160
				// Suppression des éventuels espaces en début et fin de chaine
227
				// Suppression des éventuels espaces en début et fin de chaine
161
				$valeur = trim($p[$param_passe]);
228
				$valeur = trim($p[$param_passe]);
162
				
229
				
163
				// Type de paramêtre chaine
230
				// Type de paramètre chaine
164
				if ($type == 'str') {
231
				if ($type == 'str') {
165
					// Suppression des slash
232
					// Suppression des slash
166
					$valeur = stripslashes($valeur);
233
					$valeur = stripslashes($valeur);
167
					
234
					
168
					// Utilisation d'une recherche de chaîne exacte
235
					// Utilisation d'une recherche de chaîne exacte
169
					if (preg_match('/^"(.*)"$/', $valeur, $match)) {
236
					if (preg_match('/^"(.*)"$/', $valeur, $match)) {
170
						$valeur = '%'.$match[1].'%';
237
						$valeur = '%'.$match[1].'%';
171
					} else {
238
					} else {
172
						// Recherche de mots non liés
239
						// Recherche de mots non liés
173
						$mots = explode(' ', $valeur);
240
						$mots = explode(' ', $valeur);
174
						$valeur = '%'.implode ('%', $mots).'%';
241
						$valeur = '%'.implode ('%', $mots).'%';
175
					}
242
					}
176
					// Mise en place des quotes pour l'intérogation dans la bdd
243
					// Mise en place des quotes pour l'interrogation dans la bdd
177
					$valeur = $this->bdd->quote($valeur);
244
					$valeur = $this->bdd->quote($valeur);
178
				}
245
				}
179
				// Type de paramêtre booléen
246
				// Type de paramètre booléen
180
				if ($type == 'bool') {
247
				if ($type == 'bool') {
181
					if (preg_match('/^[0]$/', $valeur)) {
248
					if (preg_match('/^[0]$/', $valeur)) {
182
						$valeur = false;
249
						$valeur = false;
183
					} else if (preg_match('/^[1]$/', $valeur)) {
250
					} else if (preg_match('/^[1]$/', $valeur)) {
184
						$valeur = true;
251
						$valeur = true;
185
					} else {
252
					} else {
186
						$this->messages[] = "Le paramêtre '$param_passe' attend une valeur de type 0 ou 1 et non '$valeur'.";
253
						$this->messages[] = "Le paramètre '$param_passe' attend une valeur de type 0 ou 1 et non '$valeur'.";
187
						$valeur = null;
254
						$valeur = null;
188
					}
255
					}
189
					
256
					
190
				}
257
				}
191
				// Type de paramêtre entier
258
				// Type de paramètre entier
192
				if ($type == 'int') {
259
				if ($type == 'int') {
193
					if (!preg_match('/^(?:[0-9]+,\s*)*[0-9]+$/', $valeur)) {
260
					if (!preg_match('/^(?:[0-9]+,\s*)*[0-9]+$/', $valeur)) {
194
						$this->messages[] = "Le paramêtre '$param_passe' attend une ou plusieurs valeurs de type entiers ".
261
						$this->messages[] = "Le paramètre '$param_passe' attend une ou plusieurs valeurs de type entiers ".
195
							"séparés par des virgules et non '$valeur'.";
262
							"séparés par des virgules et non '$valeur'.";
196
						$valeur = null;
263
						$valeur = null;
197
					}
264
					}
198
				}
265
				}
199
				
266
				
200
				$p[$param_passe] = $valeur;
267
				$p[$param_passe] = $valeur;
201
			}
268
			}
202
		}
269
		}
203
		
270
		
204
		return $p;
271
		return $p;
205
	}
272
	}
206
	
273
	
207
	private function construireFromEtWhere($p) {
274
	private function construireWhere($p) {
208
		// Initialisation de variables
-
 
209
		$from_et_where = '';
-
 
210
		//$from = "FROM ".$p['ref']." ";
275
		// Initialisation de variables
211
		$where = ' WHERE ';
276
		$where = ' WHERE ';
212
		
277
		
213
		// Construire from et where en fonction des paramêtres 
278
		// Construire where en fonction des paramêtres 
214
		if (isset($p['mots'])) {
279
		if (isset($p['mots'])) {
215
			$where .= 'AND ('.	
280
			$where .= 'AND ('.	
216
				" num_nom LIKE {$p['mots']} ".
281
				" num_nom LIKE {$p['mots']} ".
217
				" OR num_nom_retenu LIKE {$p['mots']} ".
282
				" OR num_nom_retenu LIKE {$p['mots']} ".
218
				" OR num_tax_sup LIKE {$p['mots']} ".
283
				" OR num_tax_sup LIKE {$p['mots']} ".
219
				" OR rang LIKE {$p['mots']} ".
284
				" OR rang LIKE {$p['mots']} ".
220
				" OR nom_complet LIKE {$p['mots']} ".
285
				" OR nom_complet LIKE {$p['mots']} ".
221
				" OR nom_supra_generique LIKE {$p['mots']} ".
286
				" OR nom_supra_generique LIKE {$p['mots']} ".
222
				" OR genre LIKE {$p['mots']} ".
287
				" OR genre LIKE {$p['mots']} ".
223
				" OR epithete_infra_generique LIKE {$p['mots']} ".
288
				" OR epithete_infra_generique LIKE {$p['mots']} ".
224
				" OR epithete_sp LIKE {$p['mots']} ".
289
				" OR epithete_sp LIKE {$p['mots']} ".
225
				" OR type_epithete LIKE {$p['mots']} ".
290
				" OR type_epithete LIKE {$p['mots']} ".
226
				" OR epithete_infra_sp LIKE {$p['mots']} ".
291
				" OR epithete_infra_sp LIKE {$p['mots']} ".
227
				" OR cultivar_groupe LIKE {$p['mots']} ".
292
				" OR cultivar_groupe LIKE {$p['mots']} ".
228
				" OR cultivar LIKE {$p['mots']} ".
293
				" OR cultivar LIKE {$p['mots']} ".
229
				" OR nom_commercial LIKE {$p['mots']} ".
294
				" OR nom_commercial LIKE {$p['mots']} ".
230
				" OR auteur LIKE {$p['mots']} ".
295
				" OR auteur LIKE {$p['mots']} ".
231
				" OR annee LIKE {$p['mots']} ".
296
				" OR annee LIKE {$p['mots']} ".
232
				" OR biblio_origine LIKE {$p['mots']} ".
297
				" OR biblio_origine LIKE {$p['mots']} ".
233
				" OR notes LIKE {$p['mots']} ".
298
				" OR notes LIKE {$p['mots']} ".
234
				" OR nom_addendum LIKE {$p['mots']} ".
299
				" OR nom_addendum LIKE {$p['mots']} ".
235
				" OR homonyme LIKE {$p['mots']} ".
300
				" OR homonyme LIKE {$p['mots']} ".
236
				" OR basionyme LIKE {$p['mots']} ".
301
				" OR basionyme LIKE {$p['mots']} ".
237
				" OR synonyme_proparte LIKE {$p['mots']} ".
302
				" OR synonyme_proparte LIKE {$p['mots']} ".
238
				" OR synonyme_douteux LIKE {$p['mots']} ".
303
				" OR synonyme_douteux LIKE {$p['mots']} ".
239
				" OR synonyme_mal_applique LIKE {$p['mots']} ".
304
				" OR synonyme_mal_applique LIKE {$p['mots']} ".
240
				" OR synonyme_orthographique LIKE {$p['mots']} ".
305
				" OR synonyme_orthographique LIKE {$p['mots']} ".
241
				" OR biblio_statut LIKE {$p['mots']} ".
306
				" OR biblio_statut LIKE {$p['mots']} ".
242
				" OR hybride_parent_01 LIKE {$p['mots']} ".
307
				" OR hybride_parent_01 LIKE {$p['mots']} ".
243
				" OR hybride_parent_01_notes LIKE {$p['mots']} ".
308
				" OR hybride_parent_01_notes LIKE {$p['mots']} ".
244
				" OR hybride_parent_02 LIKE {$p['mots']} ".
309
				" OR hybride_parent_02 LIKE {$p['mots']} ".
245
				" OR hybride_parent_02_notes LIKE {$p['mots']} ".
310
				" OR hybride_parent_02_notes LIKE {$p['mots']} ".
246
				" OR nom_francais LIKE {$p['mots']} ".
311
				" OR nom_francais LIKE {$p['mots']} ".
247
				" OR presence LIKE {$p['mots']} ".
312
				" OR presence LIKE {$p['mots']} ".
248
				" OR statut_origine LIKE {$p['mots']} ".
313
				" OR statut_origine LIKE {$p['mots']} ".
249
				" OR statut_introduction LIKE {$p['mots']} ".
314
				" OR statut_introduction LIKE {$p['mots']} ".
250
				" OR statut_culture LIKE {$p['mots']} ".
315
				" OR statut_culture LIKE {$p['mots']} ".
251
				') ';
316
				') ';
252
		}
317
		}
253
		if (isset($p['sg'])) {
318
		if (isset($p['sg'])) {
254
			$where .= "AND nom_supra_generique LIKE {$p['sg']} ";
319
			$where .= "AND nom_supra_generique LIKE {$p['sg']} ";
255
		}
320
		}
256
		if (isset($p['gen'])) {
321
		if (isset($p['gen'])) {
257
			$where .= "AND genre LIKE ({$p['gen']}) ";
322
			$where .= "AND genre LIKE ({$p['gen']}) ";
258
		}
323
		}
259
		if (isset($p['sp'])) {
324
		if (isset($p['sp'])) {
260
			$where .= "AND epithete_sp LIKE {$p['sp']} ";
325
			$where .= "AND epithete_sp LIKE {$p['sp']} ";
261
		}
326
		}
262
		if (isset($p['ssp'])) {
327
		if (isset($p['ssp'])) {
263
			$where .= "AND epithete_sp LIKE {$p['sp']} ";
328
			$where .= "AND epithete_infra_sp LIKE {$p['ssp']} ";
264
		}
329
		}
265
		if (isset($p['au'])) {
330
		if (isset($p['au'])) {
266
			$where .= "AND auteur LIKE {$p['au']} ";
331
			$where .= "AND auteur LIKE {$p['au']} ";
267
		}
332
		}
268
		if (isset($p['an'])) {
333
		if (isset($p['an'])) {
269
			$where .= "AND annee LIKE ({$p['an']}) ";
334
			$where .= "AND annee LIKE ({$p['an']}) ";
270
		}
335
		}
271
		if (isset($p['nn'])) {
336
		if (isset($p['nn'])) {
272
			$where .= "AND num_nom LIKE ({$p['nn']}) ";
337
			$where .= "AND num_nom LIKE ({$p['nn']}) ";
273
		}	
338
		}	
274
		if (isset($p['bib'])) {
339
		if (isset($p['bib'])) {
275
			$where .= "AND biblio_origine LIKE ({$p['bib']}) ";
340
			$where .= "AND biblio_origine LIKE ({$p['bib']}) ";
276
		}
341
		}
277
		if (isset($p['nr']) && $p['nr'] == true) {
342
		if (isset($p['nr']) && $p['nr'] == true) {
278
			$where .= "AND num_nom_retenu = num_nom ";
343
			$where .= "AND num_nom_retenu = num_nom ";
279
		}
344
		}
280
		
345
		
281
		
346
		
282
		$where = str_replace('WHERE AND', ' WHERE ', $where);
347
		$where = str_replace('WHERE AND', ' WHERE ', $where);
283
		
348
		
284
		
349
		
285
		// Retour du From et Where associé
350
		// Retour du Where associé
286
		if (count($p) == 0) {
351
		if (count($p) == 0) {
287
			$from_et_where = "";
-
 
288
			//$from_et_where = $from;
-
 
289
		} else {
-
 
290
			$from_et_where = $where;//$from.$where;
352
			$where = "";
291
		}
353
		}
292
		return $from_et_where;
354
		return $where;
293
	}
355
	}
294
}
356
}
295
?>
357
?>