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 |