Subversion Repositories eFlore/Applications.eflore-consultation

Compare Revisions

Ignore whitespace Rev 791 → Rev 792

/trunk/modules/resultat/formateurs/nom_scientifique/DeterminationFormateur.php
131,48 → 131,121
return $chaine;
}
 
private function extraireInfosNomsPourTplDetermination() {
$nomsSansCorrespondance = array();
$nomsAvecCorrespondance = array();
$synonymesAvecCorrespondance = array();
foreach ($this->noms as $idNomCourant => $nom) {
if ($nom['retenu'] == 'true') {
$nomRetenu = array();
$nomRetenu['nomSciRetenu'] = $nom['nom_sci'];
$nomRetenu['urlFiche'] = $this->urls->obtenirUrlFiche($idNomCourant, $this->parametres->typeNom, $this->parametres->masqueRecherche);
$nomsAvecCorrespondance[$idNomCourant] = $nomRetenu;
} else {
if ($nom['nom_retenu.libelle'] == null) {
$nomsSansCorrespondance[$idNomCourant] = $nom['nom_sci'];
/**
* division ordonnée par
* 1 - noms retenus qui commencent par la requete
* 2 - requete contenue dans un synonyme dont le nom retenu ne contient pas la requete
* 3 - requete contenue dans un hybride retenu
* 4 - requete contenue dans un nom retenu mais pas au début
* 5 - requete contenue dans un nom sans correspondance
*
*/
private function diviserResultats() {
$tri = array();
$sansCorres = array();
$synonymes = array();
$retenus = array();
foreach ($this->noms as $cle => $valeurs) {
if ($valeurs['nom_retenu.libelle'] == null) {//sans correspondances
$sansCorres[$cle] = $valeurs['nom_sci'];
} elseif ($valeurs['retenu'] == 'true') { // retenus
if (preg_match('/ x |x /',$valeurs['nom_sci'] ) ) {
//hybrides
$retenus[2][$cle] = $this->retournerInfosNomRetenu($cle,$valeurs['nom_sci'], $valeurs['rang.libelle']);
} elseif (preg_match('/^'.strtolower($this->parametres->masqueRecherche).' |^'.strtolower($this->parametres->masqueRecherche).'$/', strtolower($valeurs['nom_sci']) ) ) {
//commence par
$retenus[0][$cle] = $this->retournerInfosNomRetenu($cle,$valeurs['nom_sci'], $valeurs['rang.libelle']);
} else {
$idNomRetenu = $nom['nom_retenu.id'];
if (array_key_exists($nom['nom_retenu.id'], $nomsAvecCorrespondance) == false) {
$nomRetenu = array();
$nomRetenu['nomSciRetenu'] = $nom['nom_retenu.libelle'];
$nomRetenu['urlFiche'] = $this->urls->obtenirUrlFiche($idNomRetenu, $this->parametres->typeNom, $this->parametres->masqueRecherche, $nom['nom_retenu.libelle']);
$nomsAvecCorrespondance[$idNomRetenu] = $nomRetenu;
}
$synonyme = array();
$synonyme['nn'] = $idNomCourant;
$synonyme['nomSci'] = $nom['nom_sci'];
$synonyme['urlFiche'] = $this->urls->obtenirUrlFiche($idNomCourant, $this->parametres->typeNom, $this->parametres->masqueRecherche, $nom['nom_retenu.libelle']);
$synonymesAvecCorrespondance[$idNomRetenu][] = $synonyme;
//contient
$retenus[3][$cle] = $this->retournerInfosNomRetenu($cle,$valeurs['nom_sci'], $valeurs['rang.libelle']);
}
} else {//synonymes
$idNomRetenu = $valeurs['nom_retenu.id'];
if (preg_match('/'.strtolower($this->parametres->masqueRecherche).'/', strtolower($valeurs['nom_retenu.libelle'])) == 0) {
//synonymes dont le nom retenu ne contient pas la requête
$retenus[1][$idNomRetenu] = $this->retournerInfosNomRetenu($cle,$valeurs['nom_retenu.libelle'], $valeurs['rang.libelle']);
$this->infosPourTpl['taxons'][$idNomRetenu] = $valeurs['num_taxonomique']; //num taxon pour images coste
}
$synonymes[$idNomRetenu][] = $this->retournerInfosSynonyme($cle, $valeurs);
}
}
 
$this->infosPourTpl['nomsSansCorrespondance'] = (count($nomsSansCorrespondance) > 0) ? $nomsSansCorrespondance : false;
$this->infosPourTpl['noms'] = (count($nomsAvecCorrespondance) > 0) ? $nomsAvecCorrespondance : false;
$this->infosPourTpl['synonymes'] = (count($synonymesAvecCorrespondance) > 0) ? $synonymesAvecCorrespondance : false;
ksort($retenus);
$tri['retenus'] = $retenus;
$tri['synonymes'] = $synonymes;
$tri['sansCorres'] = $sansCorres;
return $tri;
}
private function retournerInfosNomRetenu($cle, $nom_sci, $rang) {
$infos = array();
$infos['nomSciRetenu'] = $nom_sci;
$infos['urlFiche'] = $this->urls->obtenirUrlFiche($cle, $this->parametres->typeNom, strtolower($this->parametres->masqueRecherche), $nom_sci);
$infos['rang'] = $rang;
return $infos;
}
private function retournerInfosSynonyme($cle, $valeurs) {
$infos = array();
$infos['nn'] = $cle;
$infos['nomSci'] = $valeurs['nom_sci'];
$infos['urlFiche'] = $this->urls->obtenirUrlFiche($cle, $this->parametres->typeNom, $this->parametres->masqueRecherche, $valeurs['nom_retenu.libelle']);
return $infos;
}
private function classerAlphabetiquement($champs, $valeurs) {
$this->trieur->setTableau($valeurs);
$this->trieur->setChampsEtOrdres(array($champs => SORT_NATURAL));
return $this->trieur->trier();
}
private function extraireInfosNomsPourTplDetermination() {
$tri = $this->diviserResultats();
$this->infosPourTpl['nomsSansCorrespondance'] = isset($tri['sansCorres']) ? $tri['sansCorres'] : false;
$this->infosPourTpl['noms'] = isset($tri['retenus']) ? $tri['retenus'] : false;
$this->infosPourTpl['synonymes'] = isset($tri['synonymes'] ) ? $tri['synonymes'] : false;
}
private function donnerNombreResultatRetenus() {
$nbre = 0;
foreach ($this->infosPourTpl['noms'] as $lignes) {
$nbre += count($lignes);
if ($nbre >= 3 ) {
break;
}
}
return $nbre;
}
 
public function trier() {
$this->ajouterAuxNomsScoreSimilariteAvec($this->parametres->masqueRecherche);
$this->trieur->setTableau($this->infosPourTpl['noms']);
$this->trieur->setChampsEtOrdres(array('score' => SORT_DESC));
$this->infosPourTpl['noms'] = $this->trieur->trier();
public function trier() {
if ($this->donnerNombreResultatRetenus() <= 3) { // classement par score
$nomsRetenus = array();
foreach ($this->infosPourTpl['noms'] as $categorie) { //ote la division des retenus
$nomsRetenus += $categorie;
}
$this->ajouterAuxNomsScoreSimilariteAvec($this->parametres->masqueRecherche);
$this->trieur->setTableau($nomsRetenus);
$this->trieur->setChampsEtOrdres(array('score' => SORT_DESC));
$this->infosPourTpl['noms'] = $this->trieur->trier();
$this->infosPourTpl['nomsSansCorrespondance'] =
$this->classerAlphabetiquement('nomSciRetenu', $this->infosPourTpl['nomsSansCorrespondance'] );
} else { // classement alphabétique
$nomsRetenus = array();
foreach ($this->infosPourTpl['noms'] as $categorie => $valeurs ) { //classement alpha par groupes
$nomsRetenus += $this->classerAlphabetiquement('nomSciRetenu', $valeurs);
}
$this->infosPourTpl['noms'] = $nomsRetenus;
$this->infosPourTpl['nomsSansCorrespondance'] =
$this->classerAlphabetiquement('nomSciRetenu', $this->infosPourTpl['nomsSansCorrespondance'] );
}
}
 
 
private function ajouterAuxNomsScoreSimilariteAvec($masque) {
$nom_demande_ss = strtolower($this->manipulateurDeChaine->supprimerAccents($masque));
foreach ($this->infosPourTpl['noms'] as $id => $nom) {