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) { |