Subversion Repositories Applications.referentiel

Rev

Rev 284 | Rev 290 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 284 Rev 285
Line 172... Line 172...
172
		}
172
		}
173
		return $info;
173
		return $info;
Line 174... Line 174...
174
		
174
		
Line -... Line 175...
-
 
175
	}
-
 
176
	
-
 
177
	/**
-
 
178
	 *  Récupérer le nombre de taxons d'une classifiation (infra ou supra)
-
 
179
	 * Appelée avec les paramètres d'url suivant :
-
 
180
	* /Recherche/NombreClassif/_
-
 
181
	* ou les _ représentent dans l'ordre : référentiel, mots, paramétres avancés
-
 
182
	* Si un des paramètres est absent, il prendre la valeur *
-
 
183
	*/
-
 
184
	public function getElementNombreClassif($param) {
-
 
185
		// Initialisation des variables
-
 
186
		$info = array();
-
 
187
	
-
 
188
		// Pré traitement des paramètres
-
 
189
		$p = $this->pretraiterParametresUrl($param);
-
 
190
		$referentiel = substr($p['ref'], 2, -2);
-
 
191
	
-
 
192
		$requete = '';
-
 
193
		if (isset($p['classif'])) {
-
 
194
			if (!isset($p['nn'])) {
-
 
195
				$p['rg'] = 180;	
-
 
196
			}
-
 
197
			
-
 
198
			if ($p['classif'] == 'infra') {
-
 
199
				$requete = 'SELECT COUNT(num_nom) as nbr '.
-
 
200
						   'FROM '.$referentiel.' '.
-
 
201
						   'WHERE num_tax_sup IN '.
-
 
202
				           '(SELECT num_nom '.
-
 
203
						   'FROM '.$referentiel.$this->construireWhere($p).') ';
-
 
204
			} else {
-
 
205
				$requete = 'SELECT count(distinct num_tax_sup) as nbr '.
-
 
206
						'FROM '.$referentiel.$this->construireWhere($p).' ';
-
 
207
				
-
 
208
			}
-
 
209
				
-
 
210
		} else {
-
 
211
			// Construction de la requête
-
 
212
			// Il est important de compter le nombre de taxons pour l'affichage
-
 
213
			$requete = 	'SELECT count(DISTINCT num_nom_retenu) as nbr FROM '.$referentiel.$this->construireWhere($p).';';
-
 
214
		}
-
 
215
	
-
 
216
		// Récupération des résultats
-
 
217
		try {
-
 
218
			$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
-
 
219
		if ($donnees === false) {
-
 
220
			$this->messages[] = "La requête a retourné aucun résultat.";
-
 
221
			} else {
-
 
222
			$info = $donnees['nbr'];
-
 
223
			
-
 
224
		}
-
 
225
		} catch (PDOException $e) {
-
 
226
		$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
-
 
227
		}
-
 
228
	
-
 
229
		return $info;
-
 
230
		}
-
 
231
	
-
 
232
	/** 
-
 
233
	 * Récupérer la classification d'un taxon donné (ses enfants ou parents)
-
 
234
	 * Appelée avec les paramêtres d'url suivant :
-
 
235
	* /Recherche/Hierarchie/_
-
 
236
	* ou les _ représentent dans l'ordre : référentiel, mots, paramétres avancés (dont classif est le sens de la requête infra ou supra)
-
 
237
	* Si un des paramètres est absent, il prendre la valeur *
-
 
238
	*/
-
 
239
	public function getElementClassification($param) {
-
 
240
		
-
 
241
		$resultats = array();
-
 
242
		
-
 
243
		try {
-
 
244
			$p = $this->pretraiterParametresUrl($param);
-
 
245
			$referentiel = substr($p['ref'], 2, -2);
-
 
246
			$classif = $p['classif'];
-
 
247
			
-
 
248
			//Si on ne recherche pas sur un numéro taxonomique, on veut ne trouver que les familles
-
 
249
			if (!isset($p['nn'])) {
-
 
250
				$p['rg'] = 180;
-
 
251
			}
-
 
252
			
-
 
253
			// Récupérer les informations du nom sélectionné
-
 
254
			$requete = 	(($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').
-
 
255
						' num_nom, nom_sci, auteur, annee, biblio_origine, nom_addendum,'.
-
 
256
						' num_nom_retenu, presence, exclure_taxref, num_tax_sup'.
-
 
257
						' FROM '.$referentiel.$this->construireWhere($p).
-
 
258
						' ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'nom_sci ASC');
-
 
259
						
-
 
260
			$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
-
 
261
			
-
 
262
			if ($donnees === false) {
-
 
263
				$this->messages[] = "La requête a retourné aucun résultat : $requete";
-
 
264
			} else {
-
 
265
					
-
 
266
				if ($classif == 'infra') {
-
 
267
					$resultats = $this->trouverInfra($referentiel, $donnees);
-
 
268
				} else {
-
 
269
					$resultats = $this->trouverSupra($referentiel, $donnees);
-
 
270
				}
-
 
271
			}
-
 
272
		} catch (PDOException $e) {
-
 
273
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()).$requete;
-
 
274
		}
-
 
275
		return $resultats;
-
 
276
	}
-
 
277
	
-
 
278
	/**
-
 
279
	 * Parcourir les données passées en paramètre pour trouver les taxons inférieurs
-
 
280
	 * @param $referentiel String le référentiel pour la requête
-
 
281
	 * @param $donnees Array un tableau de résultats contenant des lignes taxons
-
 
282
	 * @return un tableau de résultats contenant les taxons inférieurs
-
 
283
	 * */
-
 
284
	public function trouverInfra($referentiel, $donnees) {
-
 
285
		$donneesInfras = array();
-
 
286
		foreach ($donnees as $taxon) {
-
 
287
			
-
 
288
			$resultats = array();
-
 
289
			$requete =  'SELECT DISTINCT '.
-
 
290
					' num_nom, nom_sci, auteur, annee, biblio_origine, nom_addendum,'.
-
 
291
					' num_nom_retenu, presence, exclure_taxref'.
-
 
292
					' FROM '.$referentiel.
-
 
293
					' WHERE num_tax_sup = '.$taxon['num_nom'].' '.
-
 
294
					' ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'nom_sci ASC').' '.
-
 
295
					"LIMIT $this->start, $this->limit ";
-
 
296
				
-
 
297
			$donneesInfras = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
-
 
298
			
-
 
299
			if ($donneesInfras !== false) {
-
 
300
				$resultats = array_merge($resultats, $donneesInfras);
-
 
301
			}
-
 
302
		}
-
 
303
		
-
 
304
		return $donneesInfras;
-
 
305
	}
-
 
306
	
-
 
307
	/**
-
 
308
	 * Parcourir les données passées en paramètre pour trouver les taxons supérieurs
-
 
309
	 * @param $referentiel String le référentiel pour la requête
-
 
310
	 * @param $donnees Array un tableau de résultats contenant des lignes taxons
-
 
311
	 * @return un tableau de résultats contenant les taxons supérieurs
-
 
312
	 * */
-
 
313
	public function trouverSupra($referentiel, $donnees) {
-
 
314
			$resultats = array();
-
 
315
			$numNomSup = array();
-
 
316
					
-
 
317
			foreach ($donnees as $taxon) {
-
 
318
				$numNomSup[] = $taxon['num_tax_sup'];
-
 
319
			}
-
 
320
			
-
 
321
			// Récupérer les taxons supérieurs :
-
 
322
			$requete = 'SELECT DISTINCT '.
-
 
323
					' num_nom, nom_sci, auteur, annee, biblio_origine, nom_addendum,'.
-
 
324
					' num_nom_retenu, presence, exclure_taxref, num_tax_sup'.
-
 
325
					' FROM '.$referentiel.
-
 
326
					' WHERE num_nom IN ('.implode(',', $numNomSup).') '.
-
 
327
					' ORDER BY '.((!is_null($this->orderby)) ? $this->orderby  : 'nom_sci ASC').' '.
-
 
328
					"LIMIT $this->start, $this->limit ";
-
 
329
			
-
 
330
			$donneesSupras = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
-
 
331
				
-
 
332
			if ($donneesSupras !== false) {
-
 
333
				$resultats = $donneesSupras;
-
 
334
			}
-
 
335
			
-
 
336
			return $resultats;
175
	}
337
	}
176
	
338
	
177
	/* Méthode pour récupérer une liste de noms retenus
339
	/* Méthode pour récupérer une liste de noms retenus
178
	 */
340
	 */
179
	public function getNomRetenu($param) {
341
	public function getNomRetenu($param) {
Line 222... Line 384...
222
			'nn' => 'int',
384
			'nn' => 'int',
223
			'bib' => 'str',
385
			'bib' => 'str',
224
			'nr' => 'bool',
386
			'nr' => 'bool',
225
			'tax' => 'bool',
387
			'tax' => 'bool',
226
			'pre' => 'bool',
388
			'pre' => 'bool',
227
			'taxref' => 'bool');
389
			'taxref' => 'bool',
-
 
390
			'classif' => '',
-
 
391
			'rg' => 'int');
Line 228... Line 392...
228
		
392
		
229
		$p = $this->traiterParametresUrl(array_keys($params_passes), $param, false);
393
		$p = $this->traiterParametresUrl(array_keys($params_passes), $param, false);
230
		//$this->debug[] = $param;
394
		//$this->debug[] = $param;
231
		foreach ($params_passes as $param_passe => $type) {
395
		foreach ($params_passes as $param_passe => $type) {
Line 372... Line 536...
372
		if (isset($p['taxref'])) {
536
		if (isset($p['taxref'])) {
373
			$where .= "AND exclure_taxref =";
537
			$where .= "AND exclure_taxref =";
374
			$where .= ($p['taxref'] == true) ? " 0 " : " 1 ";
538
			$where .= ($p['taxref'] == true) ? " 0 " : " 1 ";
375
		}
539
		}
Line -... Line 540...
-
 
540
		
-
 
541
		if (isset($p['rg'])) {
-
 
542
			$where .= "AND rang = $p[rg] ";
-
 
543
		}
Line 376... Line 544...
376
		
544
		
Line 377... Line 545...
377
		
545