Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 735 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 735 Rev 792
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) {