Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 1840 Rev 1914
Line 38... Line 38...
38
	
38
	
39
	private function formaterUrlsServices($config) {
39
	private function formaterUrlsServices($config) {
40
		$this->url_service_nom = str_replace('{referentiel}', $this->code_referentiel ,$config['eflore']['url_service_nom']);
40
		$this->url_service_nom = str_replace('{referentiel}', $this->code_referentiel ,$config['eflore']['url_service_nom']);
41
		$this->url_service_taxon = str_replace('{referentiel}', $this->code_referentiel ,$config['eflore']['url_service_taxon']);
41
		$this->url_service_taxon = str_replace('{referentiel}', $this->code_referentiel ,$config['eflore']['url_service_taxon']);
-
 
42
		$this->url_service_chorologie_obs = $config['eflore']['url_service_chorologie_obs'];
42
		$this->url_service_chorologie_obs = $config['eflore']['url_service_chorologie_obs'];
43
		$this->config = $config;
Line 43... Line 44...
43
	}
44
	}
Line 44... Line 45...
44
	
45
	
Line 82... Line 83...
82
	}
83
	}
Line 83... Line 84...
83
	
84
	
84
	public function rechercherInformationsComplementairesSurNom($nom_saisi) {
85
	public function rechercherInformationsComplementairesSurNom($nom_saisi) {
85
		$nom_saisi = trim($nom_saisi);
86
		$nom_saisi = trim($nom_saisi);
86
		// Essai de recherche sur le nom saisi tel quel
87
		// Essai de recherche sur le nom saisi tel quel
87
		$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, true);
88
		$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, 'stricte');
-
 
89
		if($liste_genre_espece) return $liste_genre_espece;
88
		if(empty($liste_genre_espece)) {
90
 
89
			// Essai de recherche stricte en tentant de supprimer le nom d'auteur
-
 
90
			$nom_saisi_sans_auteur = self::supprimerAuteur($nom_saisi);
91
		// Essai de recherche stricte en tentant de supprimer le nom d'auteur
91
			if($nom_saisi_sans_auteur) { // ne pas faire la requête sur un mot vide
92
		if( ($nom_saisi_sans_auteur = self::supprimerAuteur($nom_saisi)) ) { // ne pas faire la requête sur un mot vide
92
				$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi_sans_auteur, true);
-
 
93
			}
-
 
94
			if(empty($liste_genre_espece)) {
-
 
95
				// Dernière tentative : essai de recherche étendue
-
 
96
				$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, false);
-
 
97
			}
93
			$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi_sans_auteur, 'stricte');
-
 
94
		}
-
 
95
		if($liste_genre_espece) return $liste_genre_espece;
-
 
96
 
-
 
97
		// avant-dernière tentative : essai de recherche étendue
-
 
98
		$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, 'etendue');
-
 
99
		if($liste_genre_espece) return $liste_genre_espece;
-
 
100
 
-
 
101
		// dernière tentative: concaténation (nom_sci,auteur) (= nom-retenu généré utilisé comme nom_sci)
-
 
102
		$liste_genre_espece = $this->effectuerRequeteUrlRecherche($nom_saisi, 'concat');
98
		}
103
		
99
		return $liste_genre_espece;
104
		return $liste_genre_espece;
Line 100... Line 105...
100
	}
105
	}
101
	
106
	
102
	private function effectuerRequeteUrlRecherche($nom_saisi, $stricte = true) {
107
	private function effectuerRequeteUrlRecherche($nom_saisi, $mode = 'stricte') {
103
		$res = @json_decode(file_get_contents(sprintf('%1$s?masque=%2$s&recherche=%3$s&ns.format=txt&retour.champs=%4$s&navigation.limite=1',
108
		$res = @json_decode(file_get_contents(sprintf('%1$s?masque=%2$s&recherche=%3$s&ns.format=txt&retour.champs=%4$s&navigation.limite=1',
104
													  $this->url_service_nom,
109
													  $this->url_service_nom,
105
													  urlencode($nom_saisi),
110
													  urlencode($nom_saisi),
106
													  ($stricte ? 'stricte' : 'etendue'),
111
													  $mode,
107
													  implode(',', array("id","nom_sci","auteur","nom_retenu.id","famille","num_taxonomique","nom_retenu_complet")))));
112
													  implode(',', array("id","nom_sci","auteur","nom_retenu.id","famille","num_taxonomique","nom_retenu_complet")))));
108
		if(!$res) return NULL;
113
		if(!$res) return NULL;
109
		$resultat = (array)$res->resultat;
114
		$resultat = (array)$res->resultat;
Line 134... Line 139...
134
	
139
	
135
	static function estUnHybride($nom_saisi) {
140
	static function estUnHybride($nom_saisi) {
136
		return strpos($nom_saisi,'x ') === 0;
141
		return strpos($nom_saisi,'x ') === 0;
Line 137... Line 142...
137
	}
142
	}
-
 
143
	
-
 
144
	public function effectuerRequeteInfosComplementairesSurNumNom($num_nom, $ref = NULL) {
-
 
145
		if($ref && isset($this->config['eflore']['api_host'])) {
-
 
146
			return @json_decode(file_get_contents($this->config['eflore']['api_host'] . '/' .
-
 
147
												  $ref . '/' .
-
 
148
												  'noms' . '/' .
-
 
149
												  $num_nom .
-
 
150
												  '?retour.champs=' . implode(',', array('nom_sci,auteur',
-
 
151
																								  'id',
-
 
152
																								  'nom_retenu_complet',
-
 
153
																								  'nom_retenu.id',
-
 
154
																								  'num_taxonomique',
-
 
155
																								  'famille'))));
138
	
156
		}
139
	public function effectuerRequeteInfosComplementairesSurNumNom($num_nom) {
157
		// XXX: compat
Line 140... Line 158...
140
		return @json_decode(file_get_contents($this->url_service_nom.'/'.$num_nom.'?retour.champs=nom_sci,auteur,id,nom_retenu_complet,nom_retenu.id,num_taxonomique,famille'));
158
		return @json_decode(file_get_contents($this->url_service_nom.'/'.$num_nom.'?retour.champs=nom_sci,auteur,id,nom_retenu_complet,nom_retenu.id,num_taxonomique,famille'));
141
	}
159
	}
Line 181... Line 199...
181
 
199
 
182
			if($ref != $this->code_referentiel) {
200
			if($ref != $this->code_referentiel) {
183
				// TODO: ignorer la colonne référentiel, et utiliser le référentiel donné
201
				// TODO: ignorer la colonne référentiel, et utiliser le référentiel donné
184
				// mais il faut alors avertir le service (d'import/modif) d'utiliser le référentiel
202
				// mais il faut alors avertir le service (d'import/modif) d'utiliser le référentiel
-
 
203
				// passé au nom d'espèce
-
 
204
				// Seul le effectuerRequeteInfosComplementairesSurNumNom() le supporte, car c'est encore
185
				// passé au nom d'espèce
205
				// un peu complexe à implémenter proprement pour cause d'attributs de classes.
186
			}
206
			}
187
			// Numero nomenclatural
207
			// Numero nomenclatural
188
			if ($type == 'nn') {
208
			if ($type == 'nn') {
189
				$obj = $this->effectuerRequeteInfosComplementairesSurNumNom($num);
209
				$obj = $this->effectuerRequeteInfosComplementairesSurNumNom($num, $ref);
190
			}
210
			}
191
			// Numero taxonomique
211
			// Numero taxonomique
192
			else {
212
			else {
193
				//TODO: retourner moins de champs grâce au paramètre retour.champs
213
				//TODO: retourner moins de champs grâce au paramètre retour.champs