Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 1130 Rev 1166
Line 121... Line 121...
121
	public function verifierParamChamps($param, $val) {
121
	public function verifierParamChamps($param, $val) {
122
		$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp');
122
		$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp');
123
		$champs_demandes = explode(',', $val);
123
		$champs_demandes = explode(',', $val);
124
		$champs_verifies = array();
124
		$champs_verifies = array();
125
		$champs_api = array_flip($this->champs_api);
125
		$champs_api = array_flip($this->champs_api);
126
		$champs_supp = array('nom_retenu_complet'=>'num_nom_retenu', 'basionyme_complet'=>'basionyme');
126
		$champs_supp = array('nom_retenu_complet'=>'num_nom_retenu', 'num_basionyme_complet'=>'num_basionyme');
127
		$champs_api = array_merge($champs_api, $champs_supp);
127
		$champs_api = array_merge($champs_api, $champs_supp);
128
		foreach ($champs_demandes as $champ) {
128
		foreach ($champs_demandes as $champ) {
129
			if (array_key_exists($champ, $champs_api)) {
129
			if (array_key_exists($champ, $champs_api)) {
130
				$champs_verifies[] = $champs_api[$champ];
130
				$champs_verifies[] = $champs_api[$champ];
131
			}
131
			}
Line 214... Line 214...
214
			}
214
			}
215
		}
215
		}
216
	}
216
	}
Line 217... Line 217...
217
 
217
 
218
	public function traiterRessourceIdSynonymie() {
218
	public function traiterRessourceIdSynonymie() {
219
		// SELECT num_nom, nom_sci, num_nom_retenu, basionyme FROM bdtfx_v2_00 WHERE num_nom = X LIMIT 0,100;
219
		// SELECT num_nom, nom_sci, num_nom_retenu, num_basionyme FROM bdtfx_v2_00 WHERE num_nom = X LIMIT 0,100;
220
		$this->format_reponse .= '/synonymie';
220
		$this->format_reponse .= '/synonymie';
221
		if (strrpos($this->requete_champ, ', basionyme') === false) {
221
		if (strrpos($this->requete_champ, ', num_basionyme') === false) {
222
			$this->requete_champ .= ', basionyme ';
222
			$this->requete_champ .= ', num_basionyme ';
223
		}
223
		}
224
		if (strrpos($this->requete_champ, ', num_type') === false) {
224
		if (strrpos($this->requete_champ, ', num_type') === false) {
225
			$this->requete_champ .= ', num_type ';
225
			$this->requete_champ .= ', num_type ';
-
 
226
		}
226
		}
227
		$this->requete_champ .= ', source_biblio ';
227
		$this->requete_condition[0] = 'num_nom_retenu = '.
228
		$this->requete_condition[0] = 'num_nom_retenu = '.
228
			'(SELECT num_nom_retenu FROM '.$this->table.' WHERE '.$this->requete_condition[0].')';
229
			'(SELECT num_nom_retenu FROM '.$this->table.' WHERE '.$this->requete_condition[0].')';
Line 229... Line 230...
229
	}
230
	}
Line 241... Line 242...
241
			if (preg_match('/^flore_.*$/', $champ)) {
242
			if (preg_match('/^flore_.*$/', $champ)) {
242
				$champ_flores .= ', '.$champ;
243
				$champ_flores .= ', '.$champ;
243
			}
244
			}
244
		}
245
		}
245
		$this->format_reponse .=  '/flores';
246
		$this->format_reponse .=  '/flores';
246
		$this->requete_champ   = 'num_nom'.$champ_flores;
247
		$this->requete_champ   = 'num_nom,num_nom_retenu,nom_sci,flores'.$champ_flores;
-
 
248
		$this->requete_condition = null;
-
 
249
		$this->requete_condition[] = "num_nom_retenu = ".$this->ressources[0]." OR num_nom = ".$this->ressources[0]; 
247
	}
250
	}
Line 248... Line 251...
248
 
251
 
249
	public function traiterRessourceStatsRangs() {
252
	public function traiterRessourceStatsRangs() {
250
		// SELECT count(*) as nombre, rang FROM bdtfx_v2_00 [WHERE rang = 290] GROUP BY rang ORDER BY rang;
253
		// SELECT count(*) as nombre, rang FROM bdtfx_v2_00 [WHERE rang = 290] GROUP BY rang ORDER BY rang;
Line 394... Line 397...
394
				break;
397
				break;
395
			case 'noms/id/relations/homonymie' :
398
			case 'noms/id/relations/homonymie' :
396
				$reponse = $this->formaterIdHomonymie($resultat);
399
				$reponse = $this->formaterIdHomonymie($resultat);
397
				break;
400
				break;
398
			case 'noms/id/relations/flores' : //ds CommunsNomsTaxons
401
			case 'noms/id/relations/flores' : //ds CommunsNomsTaxons
399
				$reponse = $this->formaterIdFlores($resultat[0]);
402
				$reponse = $this->formaterIdFlores($resultat);
400
				break;
403
				break;
401
			case 'noms/stats/annees' : //ds CommunNomsTaxons
404
			case 'noms/stats/annees' : //ds CommunNomsTaxons
402
				$reponse = $this->formaterStatsAnnee($resultat);
405
				$reponse = $this->formaterStatsAnnee($resultat);
403
				break;
406
				break;
404
			case 'noms/stats/rangs' : //ds CommunNomsTaxons
407
			case 'noms/stats/rangs' : //ds CommunNomsTaxons
Line 483... Line 486...
483
        $retour_id_syn['resultat'] = array();
486
        $retour_id_syn['resultat'] = array();
Line 484... Line 487...
484
 
487
 
485
        // résultat contient aussi l'original
488
        // résultat contient aussi l'original
486
        if(count($resultat) > 1) {
489
        if(count($resultat) > 1) {
-
 
490
			//on remplit d'abord l'entete du resultat
-
 
491
			$this->table_retour['id'] = $this->ressources[0];
-
 
492
			$this->afficherEnteteResultat('/'.$this->service.'/'.$this->ressources[0].'/relations/synonymie');
-
 
493
			$retour_id_syn['entete'] = $this->table_retour;
487
			//on remplit d'abord l'entete du resultat
494
			$this->table_retour = array();
488
			foreach ($resultat as $tab) {
495
			foreach ($resultat as $tab) {
489
				//pour chaque basionyme, on recupère le résultat : num_nom, nom_sci, basionyme et num_nom_retenu :
496
				//pour chaque basionyme, on recupère le résultat : num_nom, nom_sci, num_basionyme et num_nom_retenu :
490
				$this->resultat_req = $tab;
497
				$this->resultat_req = $tab;
491
				$num = $tab['num_nom'];
498
				$num = $tab['num_nom'];
492
				$this->afficherNomHrefRetenu($tab, $num);
499
				$this->afficherNomHrefRetenu($tab, $num);
493
				$this->afficherDonnees('basionyme', $tab['basionyme']);
500
				$this->afficherDonnees('num_basionyme', $tab['num_basionyme']);
-
 
501
				$this->afficherDonnees('num_type', $tab['num_type']);
494
				$this->afficherDonnees('num_type', $tab['num_type']);
502
				$this->afficherDonnees('source_biblio', $tab['source_biblio']);
495
				$retour_id_syn['resultat'][$num] = $this->table_retour;
503
				$retour_id_syn['resultat'][$num] = $this->table_retour;
496
				$this->table_retour = array();
504
				$this->table_retour = array();
497
			}
505
			}
498
			if (!isset($retour_id_syn['resultat']) && !in_array('nom_retenu N.D.', $retour_id_syn)) {
506
			if (!isset($retour_id_syn['resultat']) && !in_array('nom_retenu N.D.', $retour_id_syn)) {
Line 527... Line 535...
527
			$retour_id_hom = null;
535
			$retour_id_hom = null;
528
		}
536
		}
529
		return $retour_id_hom;
537
		return $retour_id_hom;
530
	}
538
	}
Line 531... Line -...
531
 
-
 
532
	public function obtenirSynonymesParNumNomAvecInfosFlore($num_nom, $version='1_02') {
-
 
533
 
-
 
534
		$champs_flore = 'flore_bonnier_num, flore_bonnier_rem,'.
-
 
535
						'flore_cnrs_num, flore_cnrs_rem '.
-
 
536
						'flore_fe_num, flore_fe_rem '.
-
 
537
						'flore_coste_num, flore_coste_rem '.
-
 
538
						'flore_fh_num, flore_fh_rem '.
-
 
539
						'flore_fournier_num, flore_fournier_rem';
-
 
540
 
-
 
541
		$requete = 'SELECT num_nom, nom_sci, '.$champs_flore.' '.
-
 
542
						'FROM '.$this->table.' '.
-
 
543
						'WHERE num_nom_retenu = '.
-
 
544
						'('.
-
 
545
						'SELECT num_nom_retenu FROM '.$this->table.' WHERE num_nom = "'.$num_nom.'"'.
-
 
Line 546... Line -...
546
						')';
-
 
547
 
-
 
548
		return $this->getBdd()->recupererTous($requete . ' -- ' . __FILE__ . ':' . __LINE__ );
-
 
549
	}
539
 
550
 
540
 
551
	public function formaterIdFlores($resultat) {
-
 
552
		$this->recupererTableSignification('correspondance_champs,champs_api,champs_comp,noms_projets');
-
 
553
		$this->resultat_req = $resultat;
-
 
554
		$id = array_shift($resultat);
-
 
555
		$reponse['entete']['id'] = $id;
541
	public function formaterIdFlores($synonymes_flores) {//print_r($resultat);
556
		$synonymes_flores = $this->obtenirSynonymesParNumNomAvecInfosFlore($this->ressources[0]);
542
		$this->recupererTableSignification('noms_projets');
557
		if(is_array($synonymes_flores)) {
543
		if (is_array($synonymes_flores)) {//print_r($synonymes_flores);
558
			foreach ($synonymes_flores as $synonyme) {
544
			foreach ($synonymes_flores as $synonyme) {
-
 
545
				if ($synonyme['num_nom'] === $synonyme['num_nom_retenu']) {
-
 
546
					$reponse['entete']['id'] = $synonyme['num_nom'];
-
 
547
				}
-
 
548
				foreach ($this->noms_projets as $flore => $valeur) {
-
 
549
					if (isset($synonyme[$flore.'_num']) && $synonyme[$flore.'_num'] != '') {
-
 
550
						$presence[$valeur] = $flore;
-
 
551
						$this->table_retour[$flore]['type'] = "code";
-
 
552
						$this->afficherInfosFlore($synonyme, $flore, $valeur, '_num');
-
 
553
					} else if (isset($synonyme[$flore.'_page']) && $synonyme[$flore.'_page'] != '') {
-
 
554
						$this->table_retour[$flore]['type'] = "page";
-
 
555
						$this->afficherInfosFlore($synonyme, $flore, $valeur, '_page');						
-
 
556
					} else if (isset($synonyme[$flore]) && $synonyme[$flore] != '') {
-
 
557
						$this->table_retour[$flore]['type'] = "page";
-
 
558
						$this->afficherInfosFlore($synonyme, $flore, $valeur, 'page');
559
				$nom_sci = $synonyme['nom_sci'];
559
					}
-
 
560
				}
560
				$num_nom = $synonyme['num_nom'];
561
				if ($synonyme['flores'] != "") {
-
 
562
					$this->recupererTableSignification('correspondance_flores');
561
				unset($synonyme['nom_sci']);
563
					$flores = explode(',', $synonyme['flores']);
562
				unset($synonyme['num_nom']);
564
					$projet = array_flip($this->noms_projets);
-
 
565
					foreach ($flores as $b =>$code) {
563
				foreach ($synonyme as $flores => $valeur) {
566
						$code = trim($code);
-
 
567
						if (isset($this->correspondance_flores[$code]) && !isset($presence[$this->correspondance_flores[$code]])) {
-
 
568
							$this->table_retour[$projet[$this->correspondance_flores[$code]]]['nom_flore'] = $this->correspondance_flores[$code];
564
					if ($valeur != '' && $valeur != '0') {
569
						}
565
						$this->afficherInfosFlore($synonyme, $flores, $valeur, $nom_sci, $num_nom);
570
						
566
					}
571
					}
567
				}
572
				}
Line 575... Line 580...
575
			$reponse = null;
580
			$reponse = null;
576
		}
581
		}
577
		return $reponse;
582
		return $reponse;
578
	}
583
	}
Line 579... Line -...
579
 
-
 
580
	public function getNomCompletFlore($flore) {
-
 
581
		return Config::get($flore.'_texte');
-
 
Line 582... Line 584...
582
	}
584
 
583
 
585
 
584
	public function afficherInfosFlore(&$resultat, $flores, $valeur, $nom_sci, $num_nom) {
586
	public function afficherInfosFlore($synonyme, $flore, $nom_flore, $type) {
585
		$flore = substr($flores,0,strrpos($flores, '_'));
-
 
586
		$projet = $this->noms_projets[$flore];
-
 
587
 
-
 
588
		//TODO voir si l'on peut factoriser les affectations à la table retour
587
		$statuts = array('R'=> 'nom retenu', 'S' => 'synonyme','r' => 'nom retenu', 'c' => 'cité hors clé', 's' => 'synonyme d’un nom retenu', 'cs' => 'synonyme d’un nom cité hors clé', 'i' => 'nom d’un taxon inclus dans un autre', 'is' => 'syn d’un nom d’un taxon inclus dans un autre');
589
		// et simplifier ce gros pavé
-
 
590
		if (strrpos($flores, 'num') !== false) {
588
		preg_match('/^([0-9]+)(.*)?$/', $synonyme[$flore.$type], $match);
591
			if (preg_match('/^([0-9]+)(?:[.]syn[^a-z]*|(.*))?$/', $valeur, $match)) {
-
 
592
				$this->table_retour[$num_nom][$flore]['id'] = $match[1];
589
		$this->table_retour[$flore]['nom_flore'] = $nom_flore;
593
				if ($projet == 'coste') {
-
 
594
					$this->table_retour[$num_nom][$flore]['href'] = $this->ajouterHrefAutreProjet('noms', 'nn_coste:', $match[1], $projet);
590
		$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['id'] = $match['1'];
595
				}
591
		$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['num_nom'] = $synonyme['num_nom'];
596
				if (isset($match[2]) && $match[2] != '') $this->table_retour[$num_nom][$flore]['cle'] = $match[2];
592
		$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['nom_sci'] = $synonyme['nom_sci'];
597
				$this->table_retour[$num_nom][$flore]['nom_flore'] = $this->getNomCompletFlore($flore);
593
		if (isset($synonyme[$flore.'_rem']) && $synonyme[$flore.'_rem'] != '') {
598
				$this->table_retour[$num_nom][$flore]['nom_sci'] = $nom_sci;
594
			$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['remarques'] = $synonyme[$flore.'_rem'];
599
			}
-
 
600
			if (isset($resultat[$flore.'_rem']) && !empty($resultat[$flore.'_rem'])) {
595
		}
601
				$this->table_retour[$num_nom][$flore]['remarque'] = $resultat[$flore.'_rem'];
-
 
602
				$this->table_retour[$num_nom][$flore]['nom_flore'] = $this->getNomCompletFlore($flore);
-
 
603
				$this->table_retour[$num_nom][$flore]['nom_sci'] = $nom_sci;
596
		if ($flore == flore_coste) {
604
				unset($resultat[$flore.'_rem']);
597
			$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['href'] = $this->ajouterHrefAutreProjet('noms', 'nn_coste:', $match[1], $projet);
605
			}
-
 
606
		} elseif (strrpos($flores,'belge') !== false) {
-
 
607
			if (preg_match('/^([0-9]+) (R|S)?$/', $valeur, $match)) {
598
		}
608
				if (isset($match[2])) $type = ($match[2] == 'R') ? 'taxons' : 'synonyme';
599
		if (isset($statuts[trim($match[2])])) {
609
				$this->table_retour[$num_nom][$flore]['page'] = $match[1];
-
 
610
				$this->table_retour[$num_nom][$flore]['type'] = $type;
600
			$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['statut'] = $statuts[trim($match[2])];
611
				$this->table_retour[$num_nom][$flore]['nom_flore'] = $this->getNomCompletFlore($flore);
-
 
612
				$this->table_retour[$num_nom][$flore]['nom_sci'] = $nom_sci;
601
		} else if(trim($match[2]) != "") {
613
			}
602
			$this->table_retour[$flore]['num'][$synonyme[$flore.$type]]['statut'] = trim($match[2]);
Line 614... Line 603...
614
		}
603
		}