Subversion Repositories eFlore/Applications.coel-consultation

Compare Revisions

Ignore whitespace Rev 19 → Rev 20

/trunk/controleurs/Recherche.php
9,7 → 9,7
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $$Id$$
* @version SVN: $Id$
*/
class Recherche extends ColControleur {
31,7 → 31,7
// Gestion des données de la requête
$chaine = $this->obtenirChaineRecherche();
$this->memoriserChaineRecherche($chaine);
$donnees['recherche'] = $chaine;
$donnees['recherche'] = htmlspecialchars(stripslashes($chaine));
// Gestion de l'url
$this->url->setVariableRequete('module', 'Recherche');
65,13 → 65,15
public function rechercher() {
$donnees = array();
$rechercheDao = $this->getModele('RechercheDao');
$parametres = array('mots' => '');
$parametres = array('mots' => '*');
// Récupération des paramêtres de l'url
$chaine_de_recherche = '';
if (isset($_GET['recherche'])) {
$parametres['mots'] = $_GET['recherche'];
$chaine_de_recherche = $_GET['recherche'];
}
 
$parametres = $this->parserChaineDeRecherche($chaine_de_recherche);
// Gestion du nombre de résultats
$donnees_total = $rechercheDao->chercherStructureNbre($parametres);
85,8 → 87,9
 
// Gestion de l'accès aux données
$rechercheDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
$rechercheDao->setDistinction(1);
$resultats = $rechercheDao->chercher($parametres);
Debug::printr($resultats);
// Post-traitement des résultats pour l'affichage
$this->url->setVariableRequete('module', 'Fiche');
foreach ($resultats as $resultat) {
119,6 → 122,53
$this->chargerPiedDePage();
}
private function parserChaineDeRecherche($chaine) {
// Pré-traitement de la chaine de recherche
// Suppression des slash ajouté automatiquement par PHP
$chaine = stripslashes($chaine);
$mots = preg_split('/ /i', $chaine, -1, PREG_SPLIT_NO_EMPTY);
Debug::printr($mots);
$parametres = array('mots' => '');
$cle_precedente = null;
foreach ($mots as $mot) {
if (preg_match('/^(sci|bot|zg|p|pr):(.*)$/', $mot, $match)) {
$cle = $match[1];
$cle_precedente = $cle;
$valeur = $match[2];
$parametres[$cle] = $valeur;
} else if (!is_null($cle_precedente)) {
$parametres[$cle_precedente] .= ' '.$mot;
} else if (is_null($cle_precedente)) {
if (empty($parametres['mots'])) {
$parametres['mots'] = $mot;
} else {
$parametres['mots'] .= ' '.$mot;
}
}
}
Debug::printr($parametres);
$this->remplacerAbreviationParId($parametres);
Debug::printr($parametres);
return $parametres;
}
private function remplacerAbreviationParId(&$parametres) {
// liste 27 : Liste des relations entre une collection et une personne (id:1030)
// liste 80 : Liste des types de collection botanique (id:1083)
$params_a_remplacer = array('bot' => 1083, 'pr' => 1030);
foreach ($params_a_remplacer as $param => $id_liste) {
if (isset($parametres[$param])) {
$liste = Ontologie::getListeTrieeParAbreviation($id_liste);
Debug::printr($liste);
$cle = strtoupper($parametres[$param]);
if (isset($liste[$cle])) {
$parametres[$param] = $liste[$cle]['id'];
}
}
}
}
/**
* Recherche des collections.
* @return string la vue correspondante