Rev 880 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpclass TaxonsListeGenerique {private $parametres = null;private $ressources = null;private $nomDao = null;private $nomFormateur = null;private $listeUrl = null;private $nbreTotalNoms = 0;private $noms = array();public function __construct(Ressources $ressources, Parametres $parametres, NomDAO $nomDao, NomFormateur $nomFormateur) {$this->ressources = $ressources;$this->parametres = $parametres;$this->nomDao = $nomDao;$this->nomFormateur = $nomFormateur;}public function setListeUrl($url) {$this->listeUrl = $url;}public function consulter() {$this->noms = $this->rechercher();$this->nbreNomsTotal = $this->nomDao->recupererNombreNomsTotal();$this->trierNoms();$retour = $this->construireTableauRetour();return $retour;}private function rechercher() {$resultats = array();$recherche = $this->parametres->get('recherche');if ($recherche == 'stricte') {$resultats = $this->nomDao->rechercherStricte();} else if ($recherche == 'etendue') {$resultats = $this->nomDao->rechercherEtendue();} else if ($recherche == 'floue') {$resultats = $this->nomDao->rechercherFloue();}return $resultats;}private function trierNoms() {$recherche = $this->parametres->get('recherche');if ($recherche == 'floue') {$this->trierRechercheFloue();}}public function trierRechercheFloue() {$nomDemande = $this->parametres->get('masque');$nomDemandeSimple = strtolower(Chaine::supprimerAccents($nomDemande));foreach ($this->noms as $id => $nom) {$nomFlouSimple = strtolower(Chaine::supprimerAccents($nom['nom_sci']));// Prime pour la ressemblance globale :$score = 500 - levenshtein($nomFlouSimple, $nomDemandeSimple);// On affine$score += similar_text($nomDemandeSimple, $nomFlouSimple) * 3;$this->noms[$id]['score'] = $score;}$noms = $this->noms;$this->noms = Tableau::trierMD($noms, array('score' => false));//print_r($this->noms);}private function construireTableauRetour() {$retour = array('entete' => array(), 'resultats' => array());$retour['resultats'] = $this->construireResultats();$retour['entete'] = $this->construireEntete();return $retour;}private function construireResultats() {$nomsFormates = array();foreach ($this->noms as $nom) {$id = $nom['num_nom'];$nomsFormates[$id] = $this->formaterNom($nom);}return $nomsFormates;}private function formaterNom($infos) {$nomAFormater = new NomDO($infos);$this->nomFormateur->setNomAFormater($nomAFormater);$this->nomFormateur->setChampsRetour($this->parametres->getListe('retour.champs'));$nom = $this->nomFormateur->formaterListe();return $nom;}private function construireEntete() {$entete = array('masque' => '', 'depart' => 0, 'limite' => 100, 'total' => 0);$entete['masque'] = $this->formaterEnteteMasque();$entete['depart'] = (int) $this->parametres->get('navigation.depart');$entete['limite'] = (int) $this->parametres->get('navigation.limite');$entete['total'] = $this->nbreNomsTotal;if ($hrefPrecedent = $this->formaterEnteteHrefPrecedent()) {$entete['href.precedent'] = $hrefPrecedent;}if ($hrefSuivant = $this->formaterEnteteHrefSuivant()) {$entete['href.suivant'] = $hrefSuivant;}return $entete;}private function formaterEnteteMasque() {$masqueComplet = array();if ($this->parametres->exister('masque')) {$masque = '';$masque .= 'nom_sci='.$this->parametres->get('masque');if ($this->parametres->get('recherche') == 'etendue') {$masque .= '%';}$masqueComplet[] = $masque;}if ($this->parametres->exister('masque.sg')) {$masque = '';$masque .= 'nom_supra_generique='.$this->parametres->get('masque.sg');if ($this->parametres->get('recherche') == 'etendue') {$masque .= '%';}$masqueComplet[] = $masque;}if ($this->parametres->exister('masque.gen')) {$masque = '';$masque .= 'genre='.$this->parametres->get('masque.gen');if ($this->parametres->get('recherche') == 'etendue') {$masque .= '%';}$masqueComplet[] = $masque;}if ($this->parametres->exister('masque.sp')) {$masque = '';$masque .= 'epithete_sp='.$this->parametres->get('masque.sp');if ($this->parametres->get('recherche') == 'etendue') {$masque .= '%';}$masqueComplet[] = $masque;}return implode('&', $masqueComplet);}private function formaterEnteteHrefPrecedent() {$limite = $this->parametres->get('navigation.limite');$departActuel = $this->parametres->get('navigation.depart');$departPrecedent = $departActuel - $limite;$href = null;if ($departPrecedent >= 0) {$squelette = $this->construireTplHrefNavigation();$href = sprintf($squelette, $departPrecedent, $limite);}return $href;}private function formaterEnteteHrefSuivant() {$limite = $this->parametres->get('navigation.limite');$departActuel = $this->parametres->get('navigation.depart');$departSuivant = $departActuel + $limite;$href = null;if ($departSuivant < $this->nbreNomsTotal) {$squelette = $this->construireTplHrefNavigation();$href = sprintf($squelette, $departSuivant, $limite);}return $href;}private function construireTplHrefNavigation() {$requetes = array();$this->parametres->rewind();while (is_null($parametre = $this->parametres->key()) === false) {if (strpos($parametre, 'navigation') === false) {$valeur = $this->parametres->current();$requetes[] = "$parametre=$valeur";}$this->parametres->next();}$requetes[] = "navigation.depart=%s";$requetes[] = "navigation.limite=%s";$tpl = $this->listeUrl.'?'.implode('&', $requetes);return $tpl;}}?>