Subversion Repositories Applications.referentiel

Compare Revisions

Ignore whitespace Rev 284 → Rev 285

/trunk/services/modules/Recherche.php
174,6 → 174,168
}
/**
* Récupérer le nombre de taxons d'une classifiation (infra ou supra)
* Appelée avec les paramètres d'url suivant :
* /Recherche/NombreClassif/_
* ou les _ représentent dans l'ordre : référentiel, mots, paramétres avancés
* Si un des paramètres est absent, il prendre la valeur *
*/
public function getElementNombreClassif($param) {
// Initialisation des variables
$info = array();
// Pré traitement des paramètres
$p = $this->pretraiterParametresUrl($param);
$referentiel = substr($p['ref'], 2, -2);
$requete = '';
if (isset($p['classif'])) {
if (!isset($p['nn'])) {
$p['rg'] = 180;
}
if ($p['classif'] == 'infra') {
$requete = 'SELECT COUNT(num_nom) as nbr '.
'FROM '.$referentiel.' '.
'WHERE num_tax_sup IN '.
'(SELECT num_nom '.
'FROM '.$referentiel.$this->construireWhere($p).') ';
} else {
$requete = 'SELECT count(distinct num_tax_sup) as nbr '.
'FROM '.$referentiel.$this->construireWhere($p).' ';
}
} else {
// Construction de la requête
// Il est important de compter le nombre de taxons pour l'affichage
$requete = 'SELECT count(DISTINCT num_nom_retenu) as nbr FROM '.$referentiel.$this->construireWhere($p).';';
}
// Récupération des résultats
try {
$donnees = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
if ($donnees === false) {
$this->messages[] = "La requête a retourné aucun résultat.";
} else {
$info = $donnees['nbr'];
}
} catch (PDOException $e) {
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage());
}
return $info;
}
/**
* Récupérer la classification d'un taxon donné (ses enfants ou parents)
* Appelée avec les paramêtres d'url suivant :
* /Recherche/Hierarchie/_
* 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)
* Si un des paramètres est absent, il prendre la valeur *
*/
public function getElementClassification($param) {
$resultats = array();
try {
$p = $this->pretraiterParametresUrl($param);
$referentiel = substr($p['ref'], 2, -2);
$classif = $p['classif'];
//Si on ne recherche pas sur un numéro taxonomique, on veut ne trouver que les familles
if (!isset($p['nn'])) {
$p['rg'] = 180;
}
// Récupérer les informations du nom sélectionné
$requete = (($this->distinct) ? 'SELECT DISTINCT' : 'SELECT').
' num_nom, nom_sci, auteur, annee, biblio_origine, nom_addendum,'.
' num_nom_retenu, presence, exclure_taxref, num_tax_sup'.
' FROM '.$referentiel.$this->construireWhere($p).
' ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'nom_sci ASC');
$donnees = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
if ($donnees === false) {
$this->messages[] = "La requête a retourné aucun résultat : $requete";
} else {
if ($classif == 'infra') {
$resultats = $this->trouverInfra($referentiel, $donnees);
} else {
$resultats = $this->trouverSupra($referentiel, $donnees);
}
}
} catch (PDOException $e) {
$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage()).$requete;
}
return $resultats;
}
/**
* Parcourir les données passées en paramètre pour trouver les taxons inférieurs
* @param $referentiel String le référentiel pour la requête
* @param $donnees Array un tableau de résultats contenant des lignes taxons
* @return un tableau de résultats contenant les taxons inférieurs
* */
public function trouverInfra($referentiel, $donnees) {
$donneesInfras = array();
foreach ($donnees as $taxon) {
$resultats = array();
$requete = 'SELECT DISTINCT '.
' num_nom, nom_sci, auteur, annee, biblio_origine, nom_addendum,'.
' num_nom_retenu, presence, exclure_taxref'.
' FROM '.$referentiel.
' WHERE num_tax_sup = '.$taxon['num_nom'].' '.
' ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'nom_sci ASC').' '.
"LIMIT $this->start, $this->limit ";
$donneesInfras = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
if ($donneesInfras !== false) {
$resultats = array_merge($resultats, $donneesInfras);
}
}
return $donneesInfras;
}
/**
* Parcourir les données passées en paramètre pour trouver les taxons supérieurs
* @param $referentiel String le référentiel pour la requête
* @param $donnees Array un tableau de résultats contenant des lignes taxons
* @return un tableau de résultats contenant les taxons supérieurs
* */
public function trouverSupra($referentiel, $donnees) {
$resultats = array();
$numNomSup = array();
foreach ($donnees as $taxon) {
$numNomSup[] = $taxon['num_tax_sup'];
}
// Récupérer les taxons supérieurs :
$requete = 'SELECT DISTINCT '.
' num_nom, nom_sci, auteur, annee, biblio_origine, nom_addendum,'.
' num_nom_retenu, presence, exclure_taxref, num_tax_sup'.
' FROM '.$referentiel.
' WHERE num_nom IN ('.implode(',', $numNomSup).') '.
' ORDER BY '.((!is_null($this->orderby)) ? $this->orderby : 'nom_sci ASC').' '.
"LIMIT $this->start, $this->limit ";
$donneesSupras = $this->bdd->query($requete)->fetchAll(PDO::FETCH_ASSOC);
if ($donneesSupras !== false) {
$resultats = $donneesSupras;
}
return $resultats;
}
/* Méthode pour récupérer une liste de noms retenus
*/
public function getNomRetenu($param) {
224,7 → 386,9
'nr' => 'bool',
'tax' => 'bool',
'pre' => 'bool',
'taxref' => 'bool');
'taxref' => 'bool',
'classif' => '',
'rg' => 'int');
$p = $this->traiterParametresUrl(array_keys($params_passes), $param, false);
//$this->debug[] = $param;
374,7 → 538,11
$where .= ($p['taxref'] == true) ? " 0 " : " 1 ";
}
if (isset($p['rg'])) {
$where .= "AND rang = $p[rg] ";
}
$where = str_replace('WHERE AND', ' WHERE ', $where);