/trunk/services/bibliotheque/generique/NomsListeGenerique.php |
---|
New file |
0,0 → 1,188 |
<?php |
class NomsListeGenerique { |
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; |
} |
} |
?> |
/trunk/services/bibliotheque/generique/TaxonsListeGenerique.php |
---|
New file |
0,0 → 1,187 |
<?php |
class 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; |
} |
} |
?> |
/trunk/services/bibliotheque/generique/NomDetailsGenerique.php |
---|
New file |
0,0 → 1,30 |
<?php |
class NomDetailsGenerique { |
private $parametres = null; |
private $ressources = null; |
private $nomDao = null; |
private $nomFormateur = null; |
private $nom = 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 consulter() { |
$this->nom = $this->nomDao->rechercherInfosNom(); |
$retour = $this->formaterDetails(); |
return $retour; |
} |
private function formaterDetails() { |
$this->nomFormateur->setNomAFormater($this->nom); |
$this->nomFormateur->setChampsRetour($this->parametres->getListe('retour.champs')); |
$details = $this->nomFormateur->formaterDetails(); |
return $details; |
} |
} |
?> |