/trunk/services/modules/0.2/fournier/NomDetails.php |
---|
New file |
0,0 → 1,88 |
<?php |
class NomDetails { |
private $parametres = null; |
private $ressources = null; |
private $bdd = null; |
private $detailsHrefTpl = null; |
private $ontologieHrefTpl = null; |
private $nom = array(); |
private $champsProjet = array(); |
public function __construct(Ressources $ressources, Parametres $parametres, Bdd $bdd) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->bdd = $bdd; |
} |
public function setChampsProjets($champsProjet) { |
$this->champsProjet = $champsProjet; |
} |
public function setDetailsHrefTpl($tpl) { |
$this->detailsHrefTpl = $tpl; |
} |
public function setOntologieHrefTpl($tpl) { |
$this->ontologieHrefTpl = $tpl; |
} |
public function consulter() { |
$infos = $this->rechercherInfosNom(); |
$retour = $this->formaterDetails($infos); |
return $retour; |
} |
private function rechercherInfosNom() { |
$detailsId = $this->ressources->getDetailsId(); |
$detailsId = $this->bdd->proteger($detailsId); |
$requete = |
'SELECT ns.*, '. |
' nr.nom_sci AS nr_nom_sci, nb.nom_sci AS nb_nom_sci '. |
'FROM fournier_v1_00 AS ns '. |
' LEFT JOIN bdtfx_v1_01 AS nr ON (ns.num_nom_retenu = nr.num_nom) '. |
' LEFT JOIN bdtfx_v1_01 AS nb ON (ns.basionyme = nb.num_nom) '. |
"WHERE ns.num_nom = $detailsId "; |
$resultats = $this->bdd->recuperer($requete); |
return $resultats; |
} |
private function formaterDetails($infos) { |
$nomAFormater = new NomDO($infos); |
$nomDeco = new NomDecorateur($nomAFormater); |
$nomDeco->ajouterId(); |
$nomDeco->ajouterIntitule(); |
$retenuDeco = new NomRetenuDecorateur($nomDeco, $this->detailsHrefTpl); |
$retenuDeco->ajouterRetenu(); |
$retenuDeco->ajouterId(); |
$retenuDeco->ajouterIntitule(); |
$retenuDeco->ajouterHref(); |
$rangDeco = new NomRangDecorateur($nomDeco, $this->bdd, $this->ontologieHrefTpl); |
$rangDeco->ajouterCode(); |
$rangDeco->ajouterIntitule(); |
$rangDeco->ajouterHref(); |
$compoDeco = new NomCompoDecorateur($nomDeco); |
$compoDeco->ajouterCompo(); |
$nomDeco->ajouterAuteur(); |
$nomDeco->ajouterAnnee(); |
$nomDeco->ajouterBiblio(); |
$nomDeco->ajouterAddendum(); |
$nomDeco->ajouterNotes(); |
$basioDeco = new NomBasionymeDecorateur($nomDeco, $this->detailsHrefTpl); |
$basioDeco->ajouterId(); |
$basioDeco->ajouterIntitule(); |
$basioDeco->ajouterHref(); |
$projetDeco = new NomChampsProjetDecorateur($nomDeco, $this->champsProjet); |
$projetDeco->ajouterChampsSupplementaires(); |
return $nomDeco->getNomFormate(); |
} |
} |
?> |
/trunk/services/modules/0.2/fournier/NomsListe.php |
---|
New file |
0,0 → 1,267 |
<?php |
class NomsListe { |
private $parametres = null; |
private $ressources = null; |
private $bdd = null; |
private $listeUrl = null; |
private $detailsHrefTpl = null; |
private $nbreTotalNoms = 0; |
private $noms = array(); |
public function __construct(Ressources $ressources, Parametres $parametres, Bdd $bdd) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->bdd = $bdd; |
} |
public function setDetailsHrefTpl($tpl) { |
$this->detailsHrefTpl = $tpl; |
} |
public function setListeUrl($url) { |
$this->listeUrl = $url; |
} |
public function consulter() { |
$this->noms = $this->rechercher(); |
$this->nbreNomsTotal = $this->recupererNombreNomsTotal(); |
$this->trierNoms(); |
$retour = $this->construireTableauRetour(); |
return $retour; |
} |
private function rechercher() { |
$resultats = array(); |
$recherche = $this->parametres->get('recherche'); |
if ($recherche == 'stricte') { |
$resultats = $this->rechercherStricte(); |
} else if ($recherche == 'etendue') { |
$resultats = $this->rechercherEtendue(); |
} else if ($recherche == 'floue') { |
$resultats = $this->rechercherFloue(); |
} |
return $resultats; |
} |
private function rechercherStricte() { |
$conditions = array(); |
if ($masque = $this->parametres->getMasquePourBdd()) { |
$conditions[] = "nom_sci = $masque"; |
} |
if ($masqueSg = $this->parametres->getMasquePourBdd('sg')) { |
$conditions[] = "nom_supra_generique = $masqueSg"; |
} |
if ($masqueGen = $this->parametres->getMasquePourBdd('gen')) { |
$conditions[] = "genre = $masqueGen"; |
} |
if ($masqueSp = $this->parametres->getMasquePourBdd('sp')) { |
$conditions[] = "epithete_sp = $masqueSp"; |
} |
$requete = 'SELECT SQL_CALC_FOUND_ROWS '. |
' num_nom, nom_sci, num_nom_retenu '. |
'FROM fournier_v1_00 '. |
(count($conditions) > 0 ? 'WHERE ' : ''). |
implode(' AND ', $conditions). |
'ORDER BY nom_sci ASC '. |
'LIMIT 0,100'; |
$resultats = $this->bdd->recupererTous($requete); |
return $resultats; |
} |
private function rechercherEtendue() { |
$conditions = array(); |
if ($masque = $this->parametres->getMasquePourBdd()) { |
$conditions[] = "nom_sci LIKE $masque"; |
} |
if ($masqueSg = $this->parametres->getMasquePourBdd('sg')) { |
$conditions[] = "nom_supra_generique LIKE $masqueSg"; |
} |
if ($masqueGen = $this->parametres->getMasquePourBdd('gen')) { |
$conditions[] = "genre LIKE $masqueGen"; |
} |
if ($masqueSp = $this->parametres->getMasquePourBdd('sp')) { |
$conditions[] = "epithete_sp LIKE $masqueSp"; |
} |
$requete = 'SELECT SQL_CALC_FOUND_ROWS '. |
' num_nom, nom_sci, num_nom_retenu '. |
'FROM fournier_v1_00 '. |
(count($conditions) > 0 ? 'WHERE ' : ''). |
implode(' AND ', $conditions). |
'ORDER BY nom_sci ASC '. |
'LIMIT 0,100'; |
$resultats = $this->bdd->recupererTous($requete); |
return $resultats; |
} |
private function rechercherFloue() { |
$masque = $this->parametres->getMasquePourBdd(); |
$requete = 'SELECT SQL_CALC_FOUND_ROWS '. |
' num_nom, nom_sci, num_nom_retenu '. |
'FROM fournier_v1_00 '. |
($masque ? 'WHERE '. |
" (SOUNDEX(nom_sci) = SOUNDEX($masque)) ". |
" OR (SOUNDEX(REVERSE(nom_sci)) = SOUNDEX(REVERSE($masque))) " : ''). |
'ORDER BY nom_sci ASC '. |
'LIMIT 0,100'; |
$resultats = $this->bdd->recupererTous($requete); |
return $resultats; |
} |
private function recupererNombreNomsTotal() { |
$requete = 'SELECT FOUND_ROWS() AS nbre'; |
$nombre = $this->bdd->recuperer($requete); |
return (int) $nombre['nbre']; |
} |
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($nom) { |
$nomFormate = array(); |
$nomformate['nom_sci'] = $nom['nom_sci']; |
$nomformate['retenu'] = ($nom['num_nom'] == $nom['num_nom_retenu']) ? true : false; |
$nomformate['href'] = $this->formaterHref($nom); |
return $nomformate; |
} |
private function formaterHref($nom) { |
$href = sprintf($this->detailsHrefTpl, $nom['num_nom']); |
return $href; |
} |
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/modules/0.2/fournier/TaxonsListe.php |
---|
New file |
0,0 → 1,243 |
<?php |
class TaxonsListe { |
private $parametres = null; |
private $ressources = null; |
private $bdd = null; |
private $nbreTotalNoms = 0; |
private $noms = array(); |
public function __construct(Ressources $ressources, Parametres $parametres, Bdd $bdd) { |
$this->ressources = $ressources; |
$this->parametres = $parametres; |
$this->bdd = $bdd; |
} |
public function consulter() { |
$this->noms = $this->rechercher(); |
$this->nbreNomsTotal = $this->recupererNombreNomsTotal(); |
$this->trierNoms(); |
$retour = $this->construireTableauRetour(); |
return $retour; |
} |
private function rechercher() { |
$resultats = array(); |
$recherche = $this->parametres->get('recherche'); |
if ($recherche == 'stricte') { |
$resultats = $this->rechercherStricte(); |
} else if ($recherche == 'etendue') { |
$resultats = $this->rechercherEtendue(); |
} else if ($recherche == 'floue') { |
$resultats = $this->rechercherFloue(); |
} |
return $resultats; |
} |
private function rechercherStricte() { |
$conditions = array(); |
if ($masque = $this->parametres->getMasquePourBdd()) { |
$conditions[] = "nom_sci = $masque"; |
} |
if ($masqueSg = $this->parametres->getMasquePourBdd('sg')) { |
$conditions[] = "nom_supra_generique = $masqueSg"; |
} |
if ($masqueGen = $this->parametres->getMasquePourBdd('gen')) { |
$conditions[] = "genre = $masqueGen"; |
} |
if ($masqueSp = $this->parametres->getMasquePourBdd('sp')) { |
$conditions[] = "epithete_sp = $masqueSp"; |
} |
$requete = 'SELECT SQL_CALC_FOUND_ROWS '. |
' num_nom, nom_sci '. |
'FROM fournier_v1_00 '. |
'WHERE num_nom = num_nom_retenu '. |
implode(' AND ', $conditions). |
'ORDER BY nom_sci ASC '. |
'LIMIT 0,100'; |
$resultats = $this->bdd->recupererTous($requete); |
return $resultats; |
} |
private function rechercherEtendue() { |
$conditions = array(); |
if ($masque = $this->parametres->getMasquePourBdd()) { |
$conditions[] = "nom_sci LIKE $masque"; |
} |
if ($masqueSg = $this->parametres->getMasquePourBdd('sg')) { |
$conditions[] = "nom_supra_generique LIKE $masqueSg"; |
} |
if ($masqueGen = $this->parametres->getMasquePourBdd('gen')) { |
$conditions[] = "genre LIKE $masqueGen"; |
} |
if ($masqueSp = $this->parametres->getMasquePourBdd('sp')) { |
$conditions[] = "epithete_sp LIKE $masqueSp"; |
} |
$requete = 'SELECT SQL_CALC_FOUND_ROWS '. |
' num_nom, nom_sci, num_nom_retenu '. |
'FROM fournier_v1_00 '. |
'WHERE num_nom = num_nom_retenu '. |
implode(' AND ', $conditions). |
'ORDER BY nom_sci ASC '. |
'LIMIT 0,100'; |
$resultats = $this->bdd->recupererTous($requete); |
return $resultats; |
} |
private function rechercherFloue() { |
$masque = $this->parametres->getMasquePourBdd(); |
$requete = 'SELECT SQL_CALC_FOUND_ROWS '. |
' num_nom, nom_sci, num_nom_retenu '. |
'FROM fournier_v1_00 '. |
'WHERE num_nom = num_nom_retenu '. |
($masque ? 'AND '. |
" (SOUNDEX(nom_sci) = SOUNDEX($masque)) ". |
" OR (SOUNDEX(REVERSE(nom_sci)) = SOUNDEX(REVERSE($masque))) " : ''). |
'ORDER BY nom_sci ASC '. |
'LIMIT 0,100'; |
$resultats = $this->bdd->recupererTous($requete); |
return $resultats; |
} |
private function recupererNombreNomsTotal() { |
$requete = 'SELECT FOUND_ROWS() AS nbre'; |
$nombre = $this->bdd->recuperer($requete); |
return (int) $nombre['nbre']; |
} |
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($nom) { |
$nomFormate = array(); |
$nomformate['nom_sci'] = $nom['nom_sci']; |
$nomformate['retenu'] = ($nom['num_nom'] == $nom['num_nom_retenu']) ? true : false; |
$nomformate['href'] = $this->formaterHref($nom); |
return $nomformate; |
} |
private function formaterHref($nom) { |
$squelette = 'http://localhost/service:nel:0.1/fournier/taxons/%s'; |
$href = sprintf($squelette, $nom['num_nom_retenu']); |
return $href; |
} |
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 = 'http://localhost/service:nel:0.1/fournier/taxons?navigation.depart=%s&navigation.limite=%s'; |
$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 = 'http://localhost/service:nel:0.1/fournier/taxons?navigation.depart=%s&navigation.limite=%s'; |
$href = sprintf($squelette, $departSuivant, $limite); |
} |
return $href; |
} |
} |
?> |