Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 504 | Rev 514 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 504 Rev 507
1
<?php
1
<?php
2
/**
2
/**
3
* Classe GraphiquesTaxonsSup.php transforme les données écologiques de la table baseflor_rang_sup_ecologie
3
* Classe GraphiquesTaxonsSup.php transforme les données écologiques de la table baseflor_rang_sup_ecologie
4
* en graphique svg
4
* en graphique svg
5
*  graphiques/#typegraphique/#bdnt.nn:#num_nomen --> renvoie un graphique avec les données connues
5
*  graphiques/#typegraphique/#bdnt.nn:#num_nomen --> renvoie un graphique avec les données connues
6
*
6
*
7
*
7
*
8
* @package eflore-projets
8
* @package eflore-projets
9
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
10
* @author Mathilde SALTHUN-LASSALLE <mathilde@tela-botanica.org>
10
* @author Mathilde SALTHUN-LASSALLE <mathilde@tela-botanica.org>
11
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
11
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
12
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
12
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
13
* @version 1.0
13
* @version 1.0
14
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
14
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
15
*/
15
*/
16
 
16
 
17
class GraphiquesTaxonsSup extends CommunGraphiques{
17
class GraphiquesTaxonsSup extends CommunGraphiques{
18
	
18
	
19
 
19
 
20
 
20
 
21
	
21
	
22
	public function definirTable($version){
22
	public function definirTable($version){
23
		$this->table = Config::get('bdd_table_rang_sup')."_v".$version;
23
		$this->table = Config::get('bdd_table_rang_sup')."_v".$version;
24
	}
24
	}
25
	
25
	
26
	//+---- ressources ----+
26
	//+---- ressources ----+
27
	public function traiterReferentieletNum(){
27
	public function traiterReferentieletNum(){
28
		if (!empty($this->ressources[1])) {
28
		if (!empty($this->ressources[1])) {
29
			if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[1], $retour) == 1){
29
			if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[1], $retour) == 1){
30
				switch ($retour[1]) {
30
				switch ($retour[1]) {
31
					case 'bdtfx' : // pour le moment un seul referentiel disponible
31
					case 'bdtfx' : // pour le moment un seul referentiel disponible
32
						$this->requete_condition[]= "num_nomen = ".$retour[2]." AND bdnt = 'bdtfx' ";
32
						$this->requete_condition[]= "num_nomen = ".$retour[2]." AND bdnt = 'bdtfx' ";
33
						break;
33
						break;
34
					default :
34
					default :
35
						$e = 'Erreur dans l\'url de votre requête : </br> La ressource " '
-
 
36
					.$retour[1].' " n\'existe pas.';
35
						$e = "Le référentiel {$retour[1]} n'existe pas.";
37
					throw new Exception( $e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
36
					throw new Exception( $e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
38
					break;
37
					break;
39
				}
38
				}
40
	
39
	
41
			}else {
40
			}else {
42
				$e = 'Erreur dans l\'url de votre requête : </br> La ressource  n\'existe pas.';
41
				$e = "Erreur dans l'url de votre requête :".
-
 
42
				" précisez le référentiel et le numéro nomenclatural sous la forme {bdnt}.nn:{nn}.";
43
				throw new Exception( $e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
43
				throw new Exception( $e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
44
			}
44
			}
45
		} else {
45
		} else {
46
			throw new Exception( "Erreur dans l'url de votre requête :".
46
			throw new Exception( "Erreur dans l'url de votre requête :".
47
							"preciser le référentiel et le numéro nomenclatural sous la forme {bdnt}.nn:{nn}.",
47
							" précisez le référentiel et le numéro nomenclatural sous la forme {bdnt}.nn:{nn}.",
48
			RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
48
			RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
49
		}
49
		}
50
	
50
	
51
	}
51
	}
52
	
52
	
53
	
53
	
54
	
54
	
55
	public function traiterTypeGraphique(){
55
	public function traiterTypeGraphique(){
56
		if (!empty($this->ressources[0])) {
56
		if (!empty($this->ressources[0])) {
57
			switch ($this->ressources[0]) {
57
			switch ($this->ressources[0]) {
58
				case  'climat' :
58
				case  'climat' :
59
					$this->requete_champs = ' ve_lumiere_min, ve_lumiere_max, ve_temperature_min,'.
59
					$this->requete_champs = ' ve_lumiere_min, ve_lumiere_max, ve_temperature_min,'.
60
											' ve_temperature_max, ve_continentalite_min,'.
60
											' ve_temperature_max, ve_continentalite_min,'.
61
											' ve_continentalite_max, ve_humidite_atmos_min,'.
61
											' ve_continentalite_max, ve_humidite_atmos_min,'.
62
											' ve_humidite_atmos_max' ;
62
											' ve_humidite_atmos_max' ;
63
					$this->nomGraphique= 'climat_min_max';
63
					$this->nomGraphique= 'climat_min_max';
64
					break;
64
					break;
65
				case 'sol' :
65
				case 'sol' :
66
					$this->requete_champs = ' ve_humidite_edaph_min , ve_humidite_edaph_max,'.
66
					$this->requete_champs = ' ve_humidite_edaph_min , ve_humidite_edaph_max,'.
67
											' ve_reaction_sol_min, ve_reaction_sol_max, '.
67
											' ve_reaction_sol_min, ve_reaction_sol_max, '.
68
											' ve_nutriments_sol_min, ve_nutriments_sol_max,'.
68
											' ve_nutriments_sol_min, ve_nutriments_sol_max,'.
69
											' ve_salinite_min, ve_salinite_max,'.
69
											' ve_salinite_min, ve_salinite_max,'.
70
											' ve_texture_sol_min, ve_texture_sol_max,'.
70
											' ve_texture_sol_min, ve_texture_sol_max,'.
71
											've_mat_org_sol_min,ve_mat_org_sol_max ' ;
71
											've_mat_org_sol_min,ve_mat_org_sol_max ' ;
72
					$this->nomGraphique = 'sol_min_max';
72
					$this->nomGraphique = 'sol_min_max';
73
					break;
73
					break;
74
				default :
74
				default :
75
					$e = "Erreur dans l'url de votre requête :".
75
					$e = "Erreur dans l'url de votre requête :".
76
					"</br> précisez le graphique -> \"sol\" ou \"climat\".";
76
					"</br> précisez le graphique -> \"sol\" ou \"climat\".";
77
				throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
77
				throw new Exception($e, RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
78
				break;
78
				break;
79
			}
79
			}
80
		}else {
80
		}else {
81
			throw new Exception("Erreur dans l'url de votre requête :".
81
			throw new Exception("Erreur dans l'url de votre requête :".
82
					"</br> precisez le graphique -> \"sol\" ou \"climat\".", RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
82
					"</br> precisez le graphique -> \"sol\" ou \"climat\".", RestServeur::HTTP_CODE_MAUVAISE_REQUETE);
83
		}
83
		}
84
	}
84
	}
85
	
85
	
86
	
86
	
87
	
87
	
88
	
88
	
89
	//+-------------------------- formatage du résultat  -------------------------------------------+
89
	//+-------------------------- formatage du résultat  -------------------------------------------+
90
	
90
	
91
	public function changerValeursSVG(){
91
	public function changerValeursSVG(){
92
		$this->ajouterValeursIntermediaires();
92
		$this->ajouterValeursIntermediaires();
93
		$Dompath = new DOMXPath($this->dom);
93
		$Dompath = new DOMXPath($this->dom);
94
		foreach ($this->valeurs_en_pourcentage as $cle => $val){
94
		foreach ($this->valeurs_en_pourcentage as $cle => $val){
95
				$val = preg_replace('/,/','.', $val);
95
				$val = preg_replace('/,/','.', $val);
96
				$grad_id = array_search($val,$this->graduations_id);
96
				$grad_id = array_search($val,$this->graduations_id);
97
				$champs = preg_replace('/_min|_max|_[0-9]/','', $cle);
97
				$champs = preg_replace('/_min|_max|_[0-9]/','', $cle);
98
				$case = $Dompath->query("//*[@id='".$grad_id."_".$champs."']")->item(0);
98
				$case = $Dompath->query("//*[@id='".$grad_id."_".$champs."']")->item(0);
99
				$case->setAttribute('fill','#EA6624');
99
				$case->setAttribute('fill','#EA6624');
100
				$case->setAttribute('stroke','#EA6624');
100
				$case->setAttribute('stroke','#EA6624');
101
				$this->ajouterInfoAuSurvol($champs,$case);
101
				$this->ajouterInfoAuSurvol($champs,$case);
102
				$changement = true;
102
				$changement = true;
103
		}
103
		}
104
		$svg = $this->dom->getElementsByTagName("svg")->item(0);
104
		$svg = $this->dom->getElementsByTagName("svg")->item(0);
105
		$svg->setAttribute('width',$this->largeurSVG);
105
		$svg->setAttribute('width',$this->largeurSVG);
106
	}
106
	}
107
	
107
	
108
	public function ajouterValeursIntermediaires(){
108
	public function ajouterValeursIntermediaires(){
109
		$champs_ecolo = array_keys($this->champs_ontologiques);
109
		$champs_ecolo = array_keys($this->champs_ontologiques);
110
		foreach ($champs_ecolo as $chps ){
110
		foreach ($champs_ecolo as $chps ){
111
			$min = !empty($this->valeurs_en_pourcentage[$chps.'_min']) ? $this->valeurs_en_pourcentage[$chps.'_min'] : -1;
111
			$min = !empty($this->valeurs_en_pourcentage[$chps.'_min']) ? $this->valeurs_en_pourcentage[$chps.'_min'] : -1;
112
			$max = !empty($this->valeurs_en_pourcentage[$chps.'_max']) ? $this->valeurs_en_pourcentage[$chps.'_max'] : -1;
112
			$max = !empty($this->valeurs_en_pourcentage[$chps.'_max']) ? $this->valeurs_en_pourcentage[$chps.'_max'] : -1;
113
			if ($min < ($max-0.1) ){
113
			if ($min < ($max-0.1) ){
114
				$i = $min + 0.1;
114
				$i = $min + 0.1;
115
				$num = 1;
115
				$num = 1;
116
				for ($i ; $i < $max; $i += 0.1) {
116
				for ($i ; $i < $max; $i += 0.1) {
117
					$this->valeurs_en_pourcentage[$chps.'_'.$num] = $i;
117
					$this->valeurs_en_pourcentage[$chps.'_'.$num] = $i;
118
					$num++;
118
					$num++;
119
				}
119
				}
120
			}
120
			}
121
		}
121
		}
122
	}
122
	}
123
	
123
	
124
	public function ajouterInfoAuSurvol($champs, $case){
124
	public function ajouterInfoAuSurvol($champs, $case){
125
		$min = $this->valeurs_champs[$champs."_min"];
125
		$min = $this->valeurs_champs[$champs."_min"];
126
		$max = $this->valeurs_champs[$champs."_max"];
126
		$max = $this->valeurs_champs[$champs."_max"];
127
		if ($min != $max){
127
		if ($min != $max){
128
			$valeurMin = $this->recupererOntologies($min, $champs );
128
			$valeurMin = $this->recupererOntologies($min, $champs );
129
			$valeurMax = $this->recupererOntologies($max, $champs );
129
			$valeurMax = $this->recupererOntologies($max, $champs );
130
			$valeurMin = $this->traiterIntermediaires($valeurMin->nom, $champs, $champs.'_min');
130
			$valeurMin = $this->traiterIntermediaires($valeurMin->nom, $champs, $champs.'_min');
131
			$valeurMax = $this->traiterIntermediaires($valeurMax->nom, $champs, $champs.'_max');
131
			$valeurMax = $this->traiterIntermediaires($valeurMax->nom, $champs, $champs.'_max');
132
			$case->setAttribute('title',"de $min: $valeurMin à $max: $valeurMax " );
132
			$case->setAttribute('title',"de $min: $valeurMin à $max: $valeurMax " );
133
		} else {
133
		} else {
134
			$valeurMin = $this->recupererOntologies($min, $champs );
134
			$valeurMin = $this->recupererOntologies($min, $champs );
135
			$valeurMin = $this->traiterIntermediaires($valeurMin->nom, $champs, $champs.'_min');
135
			$valeurMin = $this->traiterIntermediaires($valeurMin->nom, $champs, $champs.'_min');
136
			$case->setAttribute('title',"$min: $valeurMin" );
136
			$case->setAttribute('title',"$min: $valeurMin" );
137
		}
137
		}
138
	}
138
	}
139
	
139
	
140
	
140
	
141
}
141
}
142
?>
142
?>