Subversion Repositories Applications.referentiel

Compare Revisions

No changes between revisions

Ignore whitespace Rev 284 → Rev 285

/trunk/interfaces/squelettes/moteur.tpl.html
149,6 → 149,21
<a href="<?=Recherche::getUrlRecherche('acer taxref:0', $url_referentiel)?>">acer taxref:0</a>
</td>
</tr>
<tr>
<td>classif:[infra|supra]</td>
<td>Afficher les taxon inférieurs (-) ou supérieurs (+)</td>
<td><a href="<?=Recherche::getUrlRecherche('nn:182 classif:infra', $url_referentiel)?>">nn:182 classif:infra</a>,<br />
<a href="<?=Recherche::getUrlRecherche('nn:182 classif:supra', $url_referentiel)?>">nn:182 classif:supra</a>,<br />
<a href="<?=Recherche::getUrlRecherche('fabaceae classif:infra', $url_referentiel)?>">fabaceae classif:infra</a>
</td>
</tr>
<tr>
<td>rg:</td>
<td>Rang</td>
<td><a href="<?=Recherche::getUrlRecherche('rg:180', $url_referentiel)?>">rg:180</a>
</td>
</tr>
</tbody>
</table>
<p>
/trunk/interfaces/squelettes/resultat_recherche.tpl.html
33,7 → 33,16
<td><a href="<?=Recherche::getUrlFicheTaxon($resultat)?>"><?=$resultat['num_nom_retenu']?></a></td>
<td><a href="<?=Recherche::getUrlFicheTaxon($resultat)?>"><?=$resultat['nom_sci']?></a>
<? if ($resultat['nom_sci'] != '') : ?>
<a href="<?=Recherche::getUrlRecherche($resultat['nom_sci'], $referentiel)?>">
<a class="droite" href="<?=Recherche::getUrlRecherche('nn:'.$resultat['num_nom']." classif:infra", $referentiel)?>">
<img src="./interfaces/squelettes/css/referentiel/images/inframoins.png" alt="Voir les taxons inférieurs"/>
</a>
<a class="droite" href="<?=Recherche::getUrlRecherche('nn:'.$resultat['num_nom']." classif:supra", $referentiel)?>">
<img src="./interfaces/squelettes/css/referentiel/images/infraplus.png" alt="Voir les taxons supérieurs"/>
</a>
<a class="droite" href="<?=Recherche::getUrlRecherche($resultat['nom_sci'], $referentiel)?>">
<img src="./interfaces/squelettes/css/referentiel/images/data_query.png" alt="rechercher"/>
</a>
<? endif; ?>
/trunk/interfaces/squelettes/css/referentiel/images/infraplus.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/interfaces/squelettes/css/referentiel/images/infraplus.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/interfaces/squelettes/css/referentiel/images/inframoins.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/interfaces/squelettes/css/referentiel/images/inframoins.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/interfaces/squelettes/css/referentiel/referentiel.css
545,4 → 545,8
.ref-onglets{
margin:0;/*Pour IE*/
padding:0;/*Pour IE*/
height:auto !important;height:100%;/*Pour IE*/}
height:auto !important;height:100%;/*Pour IE*/}
.droite {
float:right;
}
/trunk/interfaces/controleurs/Recherche.php
139,6 → 139,13
// requête spéciale de recherche de tous les synonymes et du nom retenu d'un paramétre
if (isset($parametres['tax']) && ($parametres['tax'] == 1)) {
$resultat = $this->chercherSynonymes($rechercheDao, $parametres);
} else if (isset($parametres['classif'])) {
$this->chargerTableauManuel('presence');
$donnees['valeur_presence'] = $this->tableau_manuel['presence'];
$donnees['referentiel'] = $this->referentiel;
$donnees['fragmenteur'] = $this->gererFragmenteur($rechercheDao, $parametres, 'NombreClassif');
$donnees['resultats'] = $rechercheDao->chercher('Classification', $parametres);
$resultat = $this->getVue('resultat_recherche', $donnees);
} else {
$this->chargerTableauManuel('presence');
$donnees['valeur_presence'] = $this->tableau_manuel['presence'];
195,7 → 202,7
$parametres = array('mots' => '');
$cle_precedente = null;
foreach ($mots as $mot) {
if (preg_match('/^(sg|gen|sp|ssp|au|an|nn|bib|nr|tax|pre|taxref):(.*)$/', $mot, $match)) {
if (preg_match('/^(sg|gen|sp|ssp|au|an|nn|bib|nr|tax|pre|taxref|classif|rg):(.*)$/', $mot, $match)) {
$cle = $match[1];
$cle_precedente = $cle;
$valeur = $match[2];
/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);
/trunk/bibliotheque/dao/RechercheDao.php
43,7 → 43,7
private function construireUrlRecherche($type, $parametres, $limitation = true) {
$url = $this->url_jrest.self::SERVICE.'/'.$type;
$params_a_passer = array('ref', 'mots', 'sg', 'gen', 'sp', 'ssp', 'au', 'an', 'nn', 'bib', 'nr', 'tax', 'pre', 'taxref');
$params_a_passer = array('ref', 'mots', 'sg', 'gen', 'sp', 'ssp', 'au', 'an', 'nn', 'bib', 'nr', 'tax', 'pre', 'taxref', 'classif', 'rg');
foreach ($params_a_passer as $param_cle) {
if (isset($parametres[$param_cle]) && $parametres[$param_cle] != '') {
$valeur = urlencode(trim($parametres[$param_cle]));