Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 1107 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1107 Rev 1241
Line 41... Line 41...
41
	protected $limite_requete = array(
41
	protected $limite_requete = array(
42
		'depart' => 0,
42
		'depart' => 0,
43
		'limite' => 100
43
		'limite' => 100
44
	);
44
	);
Line -... Line 45...
-
 
45
	
-
 
46
	/**
-
 
47
	 * Vrai tri SQL
45
	
48
	 */
46
	protected $champ_tri = 'code_langue';
49
	protected $tri;
Line 47... Line 50...
47
	protected $direction_tri = 'asc';
50
	protected $tri_ordre = 'asc';
48
	
51
	
49
	/**
52
	/**
50
	 * Indique les champs supplémentaires à retourner
53
	 * Indique les champs supplémentaires à retourner
Line 91... Line 94...
91
						$this->ajouterFiltreMasque('nom_vernaculaire', $valeur);
94
						$this->ajouterFiltreMasque('nom_vernaculaire', $valeur);
92
						break;
95
						break;
93
					case 'masque.nt' :
96
					case 'masque.nt' :
94
						$this->ajouterFiltreMasque('num_taxon', $valeur);
97
						$this->ajouterFiltreMasque('num_taxon', $valeur);
95
						break;
98
						break;
-
 
99
					case 'masque.nn' :
-
 
100
						$this->ajouterFiltreMasque('num_nom', $valeur);
-
 
101
						break;
96
					case 'masque.nv' :
102
					case 'masque.nv' :
97
						$this->ajouterFiltreMasque('nom_vernaculaire', $valeur);
103
						$this->ajouterFiltreMasque('nom_vernaculaire', $valeur);
98
						break;
104
						break;
99
					case 'masque.lg' :
105
					case 'masque.lg' :
100
						$this->ajouterFiltreMasque('code_langue', $valeur);
106
						$this->ajouterFiltreMasque('code_langue', $valeur);
Line 103... Line 109...
103
						$this->ajouterFiltreMasque('num_statut', $valeur);
109
						$this->ajouterFiltreMasque('num_statut', $valeur);
104
						break;
110
						break;
105
					case 'retour.format' :
111
					case 'retour.format' :
106
						$this->retour_format = $valeur;
112
						$this->retour_format = $valeur;
107
						break;
113
						break;
-
 
114
					case 'retour.tri' :
-
 
115
						$this->tri = $valeur;
-
 
116
						break;
108
					case 'navigation.depart' :
117
					case 'navigation.depart' :
109
						$this->limite_requete['depart'] = $valeur;
118
						$this->limite_requete['depart'] = $valeur;
110
						break;
119
						break;
111
					case 'navigation.limite' :
120
					case 'navigation.limite' :
112
						$this->limite_requete['limite'] = $valeur;
121
						$this->limite_requete['limite'] = $valeur;
Line 126... Line 135...
126
			}
135
			}
127
		}
136
		}
128
	}
137
	}
Line 129... Line 138...
129
 
138
 
130
	public function ajouterFiltreMasque($nom_champ, $valeur) {
139
	public function ajouterFiltreMasque($nom_champ, $valeur) {
131
		if ($nom_champ == 'num_taxon') { // si il s'agit d'un chiffre
140
		if ($nom_champ == 'num_taxon' || $nom_champ == 'num_nom') { // si il s'agit d'un chiffre
132
			$this->requete_condition[] = $nom_champ.' = '.$this->getBdd()->proteger($valeur);
141
			$this->requete_condition[] = $nom_champ.' = '.$this->getBdd()->proteger($valeur);
133
		} else {
142
		} else {
134
			if ($this->recherche == 'floue') {
143
			if ($this->recherche == 'floue') {
135
				$this->requete_condition[] = '(SOUNDEX('.$nom_champ.') = SOUNDEX(\''.$valeur.'\')'
144
				$this->requete_condition[] = '(SOUNDEX('.$nom_champ.') = SOUNDEX(\''.$valeur.'\')'
Line 201... Line 210...
201
	//+------------------------------------------------------------------------------------------------------+
210
	//+------------------------------------------------------------------------------------------------------+
202
	public function assemblerLaRequete() {
211
	public function assemblerLaRequete() {
203
		$requete = ' SELECT '.$this->formerRequeteChamp().
212
		$requete = ' SELECT '.$this->formerRequeteChamp().
204
					' FROM '.$this->table
213
					' FROM '.$this->table
205
					.$this->formerRequeteCondition()
214
					.$this->formerRequeteCondition()
-
 
215
					.'ORDER BY nom_vernaculaire ASC'
206
					.$this->formerRequeteLimite();
216
					.$this->formerRequeteLimite();
207
		return $requete;
217
		return $requete;
208
	}
218
	}
Line 209... Line 219...
209
 
219
 
Line 296... Line 306...
296
						case 'nom_vernaculaire'	: $this->table_retour['nom'] = $valeur;			break;
306
						case 'nom_vernaculaire'	: $this->table_retour['nom'] = $valeur;			break;
297
						default					:												break;
307
						default					:												break;
298
					}
308
					}
299
				}
309
				}
300
			}
310
			}
301
		    if ($this->retour_format == 'max') $this->table_retour['href'] = $this->ajouterHref('noms-vernaculaires', $num);
311
			if ($this->retour_format == 'max') $this->table_retour['href'] = $this->ajouterHref('noms-vernaculaires', $num);
302
			$resultat_json[$num] = $this->table_retour;
312
			$resultat_json[$num] = $this->table_retour;
303
			$this->table_retour = array();
313
			$this->table_retour = array();
304
		}
314
		}
305
		return  $resultat_json;
315
		return  $resultat_json;
306
	}
316
	}
Line 370... Line 380...
370
			$resultat_json[$tab['id']]['nom_vernaculaire'] = $tab['nom_vernaculaire'];
380
			$resultat_json[$tab['id']]['nom_vernaculaire'] = $tab['nom_vernaculaire'];
371
			$resultat_json[$tab['id']]['code_langue'] = $tab['code_langue'];
381
			$resultat_json[$tab['id']]['code_langue'] = $tab['code_langue'];
372
			$resultat_json[$tab['id']]['taxon.code'] = 'bdtfx.nt:'.$tab['num_taxon'];
382
			$resultat_json[$tab['id']]['taxon.code'] = 'bdtfx.nt:'.$tab['num_taxon'];
373
			if ($this->retour_format == 'max') {
383
			if ($this->retour_format == 'max') {
374
				$resultat_json[$tab['id']]['num_taxon'] = $tab['num_taxon'];
384
				$resultat_json[$tab['id']]['num_taxon'] = $tab['num_taxon'];
375
				$resultat_json[$tab['id']]['nom_retenu.code'] = $tab['num_taxon'];
-
 
376
				$resultat_json[$tab['id']]['taxon'] = $tab['num_taxon'];
385
				$resultat_json[$tab['id']]['taxon'] = $tab['num_taxon'];
377
				$this->taxons[] = $tab['num_taxon']; // utilisé pour chercher les noms latins plus bas
386
				$this->taxons[] = $tab['num_taxon']; // utilisé pour chercher les noms latins plus bas
378
				$resultat_json[$tab['id']]['href'] = $this->ajouterHref('noms-vernaculaires', $tab['id']);
387
				$resultat_json[$tab['id']]['href'] = $this->ajouterHref('noms-vernaculaires', $tab['id']);
Line 379... Line 388...
379
				
388
				
380
				if($this->champs_supp != array()) {
389
				if($this->champs_supp != array()) {
381
					$resultat_json[$tab['id']] = $this->ajouterChampsOntologieLigneResultat($tab);
390
					$resultat_json[$tab['id']] = $this->ajouterChampsOntologieLigneResultat($tab);
382
				}
391
				}
383
			}
392
			}
Line 384... Line -...
384
		}
-
 
385
				
-
 
386
		if ($this->retour_format == 'max') {
-
 
387
			// On est obligé de faire un deuxième boucle pour demander tous les taxons présents en une 
-
 
388
			// fois et les attribuer aux noms car c'est beaucoup plus rapide
-
 
389
			$noms_sci = $this->recupererNomTaxons();
-
 
390
			foreach ($resultat_json as $num_nom => &$tab) {
-
 
391
				$tab = $this->ajouterTaxonsAttributionsLigneResultat($tab, $noms_sci);
-
 
392
				if($tab == null) {
-
 
393
					unset($resultat_json[$num_nom]);
-
 
394
				}
-
 
Line 395... Line -...
395
			}
-
 
-
 
393
		}
-
 
394
				
396
		}
395
		
397
		
396
		
398
		uasort($resultat_json, array($this,'trierLigneTableau'));
397
		
Line 399... Line 398...
399
		$table_retour_json['resultat'] = $resultat_json;
398
		$table_retour_json['resultat'] = $resultat_json;
Line 446... Line 445...
446
			$ligne_tableau_resultat = null;
445
			$ligne_tableau_resultat = null;
447
		}
446
		}
448
		return $ligne_tableau_resultat;
447
		return $ligne_tableau_resultat;
449
	}
448
	}
Line 450... Line -...
450
	
-
 
451
	private function trierLigneTableau($a, $b) {
-
 
452
		$retour = 0;
449
	
453
		
-
 
454
		if ($a[$this->champ_tri] == $b[$this->champ_tri]) {
-
 
455
			$retour = 0;
-
 
456
		}
-
 
457
				
-
 
458
		if($this->champ_tri == 'code_langue') {
-
 
459
			if ($a[$this->champ_tri] == 'fra' && $b[$this->champ_tri] != 'fra') {
-
 
460
				$retour = ($this->direction_tri == 'asc') ? -1 : 1;
-
 
461
			} else if ($a[$this->champ_tri] != 'fra' && $b[$this->champ_tri] == 'fra') {
-
 
462
				$retour = ($this->direction_tri == 'asc') ? 1 : -1;
-
 
463
			} else {
-
 
464
				$retour = $this->comparerChaineSelonDirectionTri($a[$this->champ_tri], $b[$this->champ_tri]);
-
 
465
			}
-
 
466
		} else {
-
 
467
			$retour = $this->comparerChaineSelonDirectionTri($a[$this->champ_tri], $b[$this->champ_tri]);
-
 
468
		}
-
 
469
		return $retour;
-
 
470
	}
-
 
471
	
-
 
472
	private function comparerChaineSelonDirectionTri($a, $b) {
-
 
473
		if($this->direction_tri == 'asc') {
-
 
474
			return ($a < $b) ? -1 : 1;
-
 
475
		} else {
-
 
476
			return ($a > $b) ? -1 : 1;
-
 
477
		}
-
 
Line 478... Line 450...
478
	}
450
 
479
	
451
	
480
	// formatage de la reponse /id ss la forme
452
	// formatage de la reponse /id ss la forme
481
	// id, nom_vernaculaire, attributions
453
	// id, nom_vernaculaire, attributions
Line 498... Line 470...
498
					$this->afficherDonnees($key, $valeur, $langue, $num_nom);
470
					$this->afficherDonnees($key, $valeur, $langue, $num_nom);
499
				}
471
				}
500
			}
472
			}
Line 501... Line 473...
501
			
473
			
502
		}
474
		}
503
		if ($this->retour_format == 'max') $this->afficherTaxons(); // va chercher les noms de tous les taxons
475
		//if ($this->retour_format == 'max') $this->afficherTaxons(); // va chercher les noms de tous les taxons
504
		unset($this->table_retour['href']);
476
		unset($this->table_retour['href']);
505
		return $this->table_retour;
477
		return $this->table_retour;
Line 506... Line 478...
506
	}
478
	}
Line 556... Line 528...
556
			$this->signification_code[$url] = $valeur;
528
			$this->signification_code[$url] = $valeur;
557
		}
529
		}
558
		return $valeur;
530
		return $valeur;
559
	}
531
	}
Line 560... Line -...
560
 
-
 
561
	public function afficherTaxons() {
-
 
562
		$resultat = $this->recupererNomTaxons();
-
 
563
		foreach ($this->table_retour['attributions'] as $code_langue=>$langue) {
-
 
564
			foreach ($langue as $num_nom=>$taxon) {
-
 
565
				$num_tax = ltrim($taxon['taxon.code'], 'bdtfx.nt:');
-
 
566
				if (isset($resultat[$num_tax])) {
-
 
567
					$this->table_retour['attributions'][$code_langue][$num_nom]['nom_retenu.code'] = $resultat[$num_tax]['id'];
-
 
568
					$this->table_retour['attributions'][$code_langue][$num_nom]['taxon'] = $resultat[$num_tax]['nom_sci'];
-
 
569
				}
-
 
570
			}
-
 
571
		}
-
 
572
	}
532
 
573
	
-
 
574
	public function recupererNomTaxons() {
-
 
575
		$taxons = array_unique($this->taxons);
-
 
576
		$url = Config::get('url_service_base').'bdtfx/taxons?navigation.limite=500&ns.structure=au&masque.nt='.implode(',', $taxons);
-
 
577
		$res = $this->consulterHref($url);
-
 
578
		foreach ($res->resultat as $id=>$taxon) {
-
 
579
			$resultat[$taxon->num_taxonomique]['id'] = 'bdtfx.nn:'.$id;
-
 
580
			$resultat[$taxon->num_taxonomique]['nom_sci'] = $taxon->nom_sci_complet;
-
 
581
		}
-
 
582
		return $resultat;
-
 
Line 583... Line 533...
583
	}
533
 
584
 
534
 
585
	public function formaterNomsVernaculairesIdChamp($resultat) {
535
	public function formaterNomsVernaculairesIdChamp($resultat) {
586
		$this->table_retour['id'] = $this->ressources[0];
536
		$this->table_retour['id'] = $this->ressources[0];