Line 129... |
Line 129... |
129 |
$codeReftax = $this->parametres->reftaxCourant.'.';
|
129 |
$codeReftax = $this->parametres->reftaxCourant.'.';
|
130 |
$chaine = str_replace($codeReftax, '', $chaine);
|
130 |
$chaine = str_replace($codeReftax, '', $chaine);
|
131 |
return $chaine;
|
131 |
return $chaine;
|
132 |
}
|
132 |
}
|
Line -... |
Line 133... |
- |
|
133 |
|
- |
|
134 |
/**
|
- |
|
135 |
* division ordonnée par
|
- |
|
136 |
* 1 - noms retenus qui commencent par la requete
|
- |
|
137 |
* 2 - requete contenue dans un synonyme dont le nom retenu ne contient pas la requete
|
- |
|
138 |
* 3 - requete contenue dans un hybride retenu
|
- |
|
139 |
* 4 - requete contenue dans un nom retenu mais pas au début
|
- |
|
140 |
* 5 - requete contenue dans un nom sans correspondance
|
- |
|
141 |
*
|
133 |
|
142 |
*/
|
- |
|
143 |
private function diviserResultats() {
|
134 |
private function extraireInfosNomsPourTplDetermination() {
|
144 |
$tri = array();
|
135 |
$nomsSansCorrespondance = array();
|
145 |
$sansCorres = array();
|
136 |
$nomsAvecCorrespondance = array();
|
146 |
$synonymes = array();
|
137 |
$synonymesAvecCorrespondance = array();
|
147 |
$retenus = array();
|
138 |
foreach ($this->noms as $idNomCourant => $nom) {
|
148 |
foreach ($this->noms as $cle => $valeurs) {
|
139 |
if ($nom['retenu'] == 'true') {
|
149 |
if ($valeurs['nom_retenu.libelle'] == null) {//sans correspondances
|
140 |
$nomRetenu = array();
|
150 |
$sansCorres[$cle] = $valeurs['nom_sci'];
|
141 |
$nomRetenu['nomSciRetenu'] = $nom['nom_sci'];
|
- |
|
142 |
$nomRetenu['urlFiche'] = $this->urls->obtenirUrlFiche($idNomCourant, $this->parametres->typeNom, $this->parametres->masqueRecherche);
|
151 |
} elseif ($valeurs['retenu'] == 'true') { // retenus
|
143 |
$nomsAvecCorrespondance[$idNomCourant] = $nomRetenu;
|
152 |
if (preg_match('/ x |x /',$valeurs['nom_sci'] ) ) {
|
- |
|
153 |
//hybrides
|
- |
|
154 |
$retenus[2][$cle] = $this->retournerInfosNomRetenu($cle,$valeurs['nom_sci'], $valeurs['rang.libelle']);
|
144 |
} else {
|
155 |
} elseif (preg_match('/^'.strtolower($this->parametres->masqueRecherche).' |^'.strtolower($this->parametres->masqueRecherche).'$/', strtolower($valeurs['nom_sci']) ) ) {
|
145 |
if ($nom['nom_retenu.libelle'] == null) {
|
156 |
//commence par
|
146 |
$nomsSansCorrespondance[$idNomCourant] = $nom['nom_sci'];
|
157 |
$retenus[0][$cle] = $this->retournerInfosNomRetenu($cle,$valeurs['nom_sci'], $valeurs['rang.libelle']);
|
147 |
} else {
|
- |
|
148 |
$idNomRetenu = $nom['nom_retenu.id'];
|
- |
|
149 |
if (array_key_exists($nom['nom_retenu.id'], $nomsAvecCorrespondance) == false) {
|
- |
|
150 |
$nomRetenu = array();
|
- |
|
151 |
$nomRetenu['nomSciRetenu'] = $nom['nom_retenu.libelle'];
|
- |
|
152 |
$nomRetenu['urlFiche'] = $this->urls->obtenirUrlFiche($idNomRetenu, $this->parametres->typeNom, $this->parametres->masqueRecherche, $nom['nom_retenu.libelle']);
|
- |
|
153 |
$nomsAvecCorrespondance[$idNomRetenu] = $nomRetenu;
|
- |
|
154 |
}
|
158 |
} else {
|
155 |
$synonyme = array();
|
- |
|
156 |
$synonyme['nn'] = $idNomCourant;
|
- |
|
157 |
$synonyme['nomSci'] = $nom['nom_sci'];
|
159 |
//contient
|
158 |
$synonyme['urlFiche'] = $this->urls->obtenirUrlFiche($idNomCourant, $this->parametres->typeNom, $this->parametres->masqueRecherche, $nom['nom_retenu.libelle']);
|
- |
|
159 |
$synonymesAvecCorrespondance[$idNomRetenu][] = $synonyme;
|
160 |
$retenus[3][$cle] = $this->retournerInfosNomRetenu($cle,$valeurs['nom_sci'], $valeurs['rang.libelle']);
|
- |
|
161 |
}
|
- |
|
162 |
} else {//synonymes
|
- |
|
163 |
$idNomRetenu = $valeurs['nom_retenu.id'];
|
- |
|
164 |
if (preg_match('/'.strtolower($this->parametres->masqueRecherche).'/', strtolower($valeurs['nom_retenu.libelle'])) == 0) {
|
- |
|
165 |
//synonymes dont le nom retenu ne contient pas la requête
|
- |
|
166 |
$retenus[1][$idNomRetenu] = $this->retournerInfosNomRetenu($cle,$valeurs['nom_retenu.libelle'], $valeurs['rang.libelle']);
|
- |
|
167 |
$this->infosPourTpl['taxons'][$idNomRetenu] = $valeurs['num_taxonomique']; //num taxon pour images coste
|
- |
|
168 |
}
|
160 |
}
|
169 |
$synonymes[$idNomRetenu][] = $this->retournerInfosSynonyme($cle, $valeurs);
|
161 |
}
|
170 |
}
|
- |
|
171 |
}
|
- |
|
172 |
ksort($retenus);
|
- |
|
173 |
$tri['retenus'] = $retenus;
|
- |
|
174 |
$tri['synonymes'] = $synonymes;
|
- |
|
175 |
$tri['sansCorres'] = $sansCorres;
|
- |
|
176 |
return $tri;
|
162 |
}
|
177 |
}
|
- |
|
178 |
|
- |
|
179 |
private function retournerInfosNomRetenu($cle, $nom_sci, $rang) {
|
- |
|
180 |
$infos = array();
|
- |
|
181 |
$infos['nomSciRetenu'] = $nom_sci;
|
- |
|
182 |
$infos['urlFiche'] = $this->urls->obtenirUrlFiche($cle, $this->parametres->typeNom, strtolower($this->parametres->masqueRecherche), $nom_sci);
|
- |
|
183 |
$infos['rang'] = $rang;
|
- |
|
184 |
return $infos;
|
- |
|
185 |
}
|
- |
|
186 |
|
- |
|
187 |
|
- |
|
188 |
private function retournerInfosSynonyme($cle, $valeurs) {
|
- |
|
189 |
$infos = array();
|
- |
|
190 |
$infos['nn'] = $cle;
|
- |
|
191 |
$infos['nomSci'] = $valeurs['nom_sci'];
|
- |
|
192 |
$infos['urlFiche'] = $this->urls->obtenirUrlFiche($cle, $this->parametres->typeNom, $this->parametres->masqueRecherche, $valeurs['nom_retenu.libelle']);
|
- |
|
193 |
return $infos;
|
- |
|
194 |
}
|
- |
|
195 |
|
- |
|
196 |
private function classerAlphabetiquement($champs, $valeurs) {
|
- |
|
197 |
$this->trieur->setTableau($valeurs);
|
- |
|
198 |
$this->trieur->setChampsEtOrdres(array($champs => SORT_NATURAL));
|
- |
|
199 |
return $this->trieur->trier();
|
- |
|
200 |
}
|
- |
|
201 |
|
- |
|
202 |
|
- |
|
203 |
private function extraireInfosNomsPourTplDetermination() {
|
163 |
|
204 |
$tri = $this->diviserResultats();
|
164 |
$this->infosPourTpl['nomsSansCorrespondance'] = (count($nomsSansCorrespondance) > 0) ? $nomsSansCorrespondance : false;
|
205 |
$this->infosPourTpl['nomsSansCorrespondance'] = isset($tri['sansCorres']) ? $tri['sansCorres'] : false;
|
165 |
$this->infosPourTpl['noms'] = (count($nomsAvecCorrespondance) > 0) ? $nomsAvecCorrespondance : false;
|
206 |
$this->infosPourTpl['noms'] = isset($tri['retenus']) ? $tri['retenus'] : false;
|
- |
|
207 |
$this->infosPourTpl['synonymes'] = isset($tri['synonymes'] ) ? $tri['synonymes'] : false;
|
- |
|
208 |
|
- |
|
209 |
}
|
- |
|
210 |
|
- |
|
211 |
private function donnerNombreResultatRetenus() {
|
- |
|
212 |
$nbre = 0;
|
- |
|
213 |
foreach ($this->infosPourTpl['noms'] as $lignes) {
|
- |
|
214 |
$nbre += count($lignes);
|
- |
|
215 |
if ($nbre >= 3 ) {
|
- |
|
216 |
break;
|
- |
|
217 |
}
|
- |
|
218 |
}
|
166 |
$this->infosPourTpl['synonymes'] = (count($synonymesAvecCorrespondance) > 0) ? $synonymesAvecCorrespondance : false;
|
219 |
return $nbre;
|
Line 167... |
Line 220... |
167 |
}
|
220 |
}
|
- |
|
221 |
|
- |
|
222 |
public function trier() {
|
- |
|
223 |
if ($this->donnerNombreResultatRetenus() <= 3) { // classement par score
|
- |
|
224 |
$nomsRetenus = array();
|
- |
|
225 |
foreach ($this->infosPourTpl['noms'] as $categorie) { //ote la division des retenus
|
168 |
|
226 |
$nomsRetenus += $categorie;
|
169 |
public function trier() {
|
227 |
}
|
170 |
$this->ajouterAuxNomsScoreSimilariteAvec($this->parametres->masqueRecherche);
|
228 |
$this->ajouterAuxNomsScoreSimilariteAvec($this->parametres->masqueRecherche);
|
171 |
$this->trieur->setTableau($this->infosPourTpl['noms']);
|
229 |
$this->trieur->setTableau($nomsRetenus);
|
- |
|
230 |
$this->trieur->setChampsEtOrdres(array('score' => SORT_DESC));
|
- |
|
231 |
$this->infosPourTpl['noms'] = $this->trieur->trier();
|
- |
|
232 |
$this->infosPourTpl['nomsSansCorrespondance'] =
|
- |
|
233 |
$this->classerAlphabetiquement('nomSciRetenu', $this->infosPourTpl['nomsSansCorrespondance'] );
|
- |
|
234 |
} else { // classement alphabétique
|
- |
|
235 |
$nomsRetenus = array();
|
- |
|
236 |
foreach ($this->infosPourTpl['noms'] as $categorie => $valeurs ) { //classement alpha par groupes
|
- |
|
237 |
$nomsRetenus += $this->classerAlphabetiquement('nomSciRetenu', $valeurs);
|
- |
|
238 |
}
|
- |
|
239 |
$this->infosPourTpl['noms'] = $nomsRetenus;
|
- |
|
240 |
$this->infosPourTpl['nomsSansCorrespondance'] =
|
- |
|
241 |
$this->classerAlphabetiquement('nomSciRetenu', $this->infosPourTpl['nomsSansCorrespondance'] );
|
172 |
$this->trieur->setChampsEtOrdres(array('score' => SORT_DESC));
|
242 |
}
|
- |
|
243 |
|
- |
|
244 |
}
|
- |
|
245 |
|
Line 173... |
Line 246... |
173 |
$this->infosPourTpl['noms'] = $this->trieur->trier();
|
246 |
|
174 |
}
|
247 |
|
175 |
|
248 |
|
176 |
private function ajouterAuxNomsScoreSimilariteAvec($masque) {
|
249 |
private function ajouterAuxNomsScoreSimilariteAvec($masque) {
|