15,7 → 15,8 |
class Recherche extends AppliControleur { |
|
private $chaine_recherche = null; |
private static $url_exemple = null; |
private static $url_recherche = null; |
private static $url_fiche_taxon = null; |
private $referentiel = null; |
private $donnees_par_page; |
private $donnees_par_page_choix; |
43,7 → 44,8 |
$donnees['url_referentiel'] = $this->referentiel; |
$donnees['url_module'] = 'Recherche'; |
$donnees['url_action'] = 'rechercher'; |
self::$url_exemple = $this->obtenirUrlRecherche('bdnff','%s'); |
self::$url_recherche = $this->obtenirUrlRecherche('%s','%s'); |
self::$url_fiche_taxon = $this->obtenirUrlFicheTaxon($this->referentiel, '%s', '%s', '%s'); |
|
// Gestion du squelette et de la sortie |
$this->setSortie(self::RENDU_TETE, $this->getVue('moteur', $donnees)); |
72,35 → 74,50 |
$_SESSION['ref']['recherche'] = $chaine; |
} |
|
public static function getUrlExemple($chaine) { |
// url pour les exemples du moteur de recherche |
public static function getUrlRecherche($chaine, $referentiel = null) { |
$url = ''; |
if (!is_null(self::$url_exemple)) { |
if ($referentiel == null) $referentiel = $this->referentiel; |
if (!is_null(self::$url_recherche)) { |
// L'utilisation d'urlencode nécessiate de pré-encodé la chaine dans le format de sortie si nécessaire |
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) { |
$chaine = mb_convert_encoding($chaine, Config::get('sortie_encodage'), Config::get('appli_encodage')); |
} |
$chaine = urlencode($chaine); |
$url = sprintf(self::$url_exemple, $chaine); |
$url = sprintf(self::$url_recherche, $referentiel, $chaine); |
} |
return $url; |
} |
|
public static function getUrlFicheTaxon($taxon) { |
$url = ''; |
if (!is_null(self::$url_fiche_taxon)) { |
$url = sprintf(self::$url_fiche_taxon, $taxon['num_nom'], $taxon['num_nom_retenu'], $taxon['nom_complet']); |
} |
return $url; |
} |
|
/** |
* Recherche sur référentiel. |
* @return string la vue correspondante |
*/ |
public function rechercher() { |
// Paramétres de pagination par défault |
$this->donnees_par_page = Config::get('resultat_par_page_defaut'); |
$this->donnees_par_page_choix = Config::get('resultat_par_page_choix'); |
|
$donnees = array(); |
$rechercheDao = new RechercheDao(); |
$parametres = array('mots' => '*'); |
if (isset($_GET['ref'])) { // code du projet courant |
// code du référentiel courant |
if (isset($_GET['ref'])) { |
$this->referentiel = strtolower($_GET['ref']); |
} |
// Gestion des squelettes |
$this->definirCommeModulePrincipal(get_class($this)); |
$this->construireMenu($this->referentiel); |
$this->construireFilAriane($this->referentiel); |
$this->chargerMoteurRecherche($this->referentiel); |
|
// Récupération des paramètres de l'url |
$chaine_de_recherche = $this->obtenirChaineRecherche(); |
113,7 → 130,20 |
$parametres = $this->parserChaineDeRecherche($chaine_de_recherche); |
$parametres['ref'] = $this->referentiel; |
|
// 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 { |
$donnees['fragmenteur'] = $this->gererFragmenteur($rechercheDao, $parametres); |
$donnees['resultats'] = $rechercheDao->chercher('ParDefaut', $parametres); |
$resultat = $this->getVue('resultat_recherche', $donnees); |
} |
|
|
$this->setSortie(self::RENDU_CORPS, $resultat); |
} |
|
private function chercherSynonymes($rechercheDao, $parametres){ |
$this->donnees_par_page = 2; |
$this->donnees_par_page_choix = '1,2,5,10'; |
$donnees['fragmenteur'] = $this->gererFragmenteur($rechercheDao, $parametres, 'NombreTaxon'); |
126,17 → 156,9 |
} |
} |
$resultat = $this->getVue('resultat_recherche_taxon', $donnees); |
} else { |
$donnees['fragmenteur'] = $this->gererFragmenteur($rechercheDao, $parametres); |
$donnees['resultats'] = $rechercheDao->chercher('ParDefaut', $parametres); |
$resultat = $this->getVue('resultat_recherche', $donnees); |
return $resultat; |
} |
|
// Gestion des squelettes |
$this->chargerMoteurRecherche($this->referentiel); |
$this->setSortie(self::RENDU_CORPS, $resultat); |
} |
|
private function gererFragmenteur($rechercheDao, $parametres, $type = 'Nombre') { |
// Gestion du nombre de résultats |
$donnees_total = $rechercheDao->chercherStructureNbre($type, $parametres); |