Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 941 Rev 1111
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
-
 
3
// declare(tension='220v');
-
 
4
// declare(couleur_du_ciel='bleu');
3
/**
5
/**
4
* Classe implémentant l'API d'eFlore concernant les statuts de protection
6
* Classe implémentant l'API d'eFlore concernant les statuts de protection
5
*
7
*
6
* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=EfloreApi01Status
8
* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=EfloreApi01Status
7
*
9
*
8
* @package eFlore/services
10
* @package eFlore/services
9
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
11
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
-
 
12
 * * @author Mathias CHOUET <mathias@tela-botanica.org>
10
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
13
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
11
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
14
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
12
* @version 1.0
15
* @version 1.0
13
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
16
* @copyright 1999-2014 Tela Botanica (accueil@tela-botanica.org)
14
*/
17
*/
15
// TODO : Config et Outils sont des classes statiques qui doivent poser des pb pour les tests...
18
// TODO : Config et Outils sont des classes statiques qui doivent poser des pb pour les tests...
16
class Statuts extends Commun {
19
class Statuts extends Commun {
17
 
20
 
18
	protected $parametres = array();
21
	protected $parametres = array();
19
	protected $ressources = array();
22
	protected $ressources = array();
20
	
23
 
21
	private $bdd;
24
	private $bdd;
22
	private $retour_format = 'complet';
25
	private $retour_format = 'complet';
23
	private $retours_formats_autorises = array('complet','zone_geo');
26
	private $retours_formats_autorises = array('complet','zone_geo');
24
	
-
 
-
 
27
	protected $nn_demande;
-
 
28
	protected $navigation_depart;
-
 
29
	protected $navigation_limite;
25
 
30
 
26
	public function __construct($config = null) {
31
	public function __construct($config = null) {
27
		$this->config = $config;
32
		$this->config = $config;
28
		$this->bdd = $this->getBdd();
33
		$this->bdd = $this->getBdd();
29
	}
34
	}
30
	
35
 
31
	public function consulter($ressources, $parametres) {
36
	public function consulter($ressources, $parametres) {
32
 
37
 
33
		$this->parametres = $parametres;
38
		$this->parametres = $parametres;
34
		$this->ressources = $ressources;
39
		$this->ressources = $ressources;
35
 
-
 
36
		$this->affecterParametresParDefaut();
40
 
37
		$this->verifierParametres();
41
		$this->affecterParametres();
38
 
42
 
39
		$resultat = new ResultatService();
43
		$resultat = new ResultatService();
40
		$resultat->corps = $this->obtenirStatuts();
44
		$resultat->corps = $this->obtenirStatuts();
41
 
45
 
42
		return $resultat;
46
		return $resultat;
43
	}
47
	}
44
//+---------------------------FONCTION D'ANALYSE DES PARAMETRES---------------------------------------------------------+
-
 
-
 
48
 
45
 
49
	/**
46
	private function affecterParametresParDefaut() {
50
	 * Affecte et vérifie les paramètres
47
		$this->retour_format = isset($this->parametres['retour.format']) ? $this->parametres['retour.format'] : $this->retour_format;
51
	 * @throws Exception
48
	}
-
 
49
	
52
	 */
50
	private function verifierParametres() {
53
	private function affecterParametres() {
51
		$erreurs = array();
54
		$erreurs = array();
52
		
55
 
-
 
56
		if (isset($this->parametres['retour.format'])) {	
53
		if (empty($this->parametres['masque.nn'])) {
57
			if(!in_array($this->retour_format, $this->retours_formats_autorises)) {
-
 
58
				$erreurs[] = 'la valeur '.$this->retour_format.' est inconnue';
-
 
59
			}
54
			$erreurs[] = 'renseignez une valeur pour masque.nn';
60
			$this->retour_format = $this->parametres['retour.format'];
55
		}
-
 
-
 
61
		}
56
		
62
		if (isset($this->parametres['masque.nn']) && ($this->parametres['masque.nn'] != '')) {
57
		if(!is_numeric($this->parametres['masque.nn'])) {
63
			if(!is_numeric($this->parametres['masque.nn'])) {
-
 
64
				$erreurs[] = 'la valeur pour masque.nn doit être un entier';
-
 
65
			}
58
			$erreurs[] = 'la valeur pour masque.nn doit être un entier';
66
			$this->nn_demande = $this->parametres['masque.nn'];
59
		}
-
 
60
		
67
		}
-
 
68
		if (isset($this->parametres['masque.zone']) && ($this->parametres['masque.zone'] != '')) {
61
		if(!in_array($this->retour_format, $this->retours_formats_autorises)) {
69
			if(!is_numeric($this->parametres['masque.zone']) || !($this->parametres['masque.zone'] > 0 && $this->parametres['masque.zone'] <= 64)) {
-
 
70
				$erreurs[] = 'la valeur pour masque.zone doit être un entier compris entre 1 et 64';
-
 
71
			}
62
			$erreurs[] = 'la valeur '.$this->retour_format.' est inconnue';
72
			$this->zone = $this->parametres['masque.zone'];
-
 
73
		}
-
 
74
		if (isset($this->parametres['navigation.depart']) && ($this->parametres['navigation.depart'] != '')) {
-
 
75
			if (!is_numeric($this->parametres['navigation.depart'])) {
-
 
76
				$erreurs[] = 'la valeur pour navigation.depart doit être un entier';
-
 
77
			}
-
 
78
			$this->navigation_depart = max(0, intval($this->parametres['navigation.depart']));
-
 
79
		} else {
-
 
80
			$this->navigation_depart = 0;
-
 
81
		}
-
 
82
		if (isset($this->parametres['navigation.limite']) && ($this->parametres['navigation.limite'] != '')) {
-
 
83
			if (!is_numeric($this->parametres['navigation.limite'])) {
-
 
84
				$erreurs[] = 'la valeur pour navigation.limite doit être un entier';
-
 
85
			}
-
 
86
			$this->navigation_limite = intval($this->parametres['navigation.limite']);
-
 
87
		} else {
-
 
88
			$this->navigation_limite = 100;
63
		}
89
		}
64
		
90
 
65
		if (count($erreurs) > 0) {
91
		if (count($erreurs) > 0) {
66
			$message = implode('<br />', $erreurs);
92
			$message = implode('<br />', $erreurs);
67
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
93
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
68
			throw new Exception($message, $code);
94
			throw new Exception($message, $code);
69
		}
95
		}
70
	}
96
	}
71
	
-
 
72
//+---------------------------FONCTIONS DE REQUETE---------------------------------------------------------+
-
 
73
 
97
 
74
	private function obtenirLois(Array $id_lois) {
98
	private function obtenirLois(Array $id_lois) {
75
		$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois);
99
		$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois);
76
		$requete = "SELECT * FROM ".Config::get('bdd_table_lois').' '.
100
		$requete = "SELECT * FROM ".Config::get('bdd_table_lois').' '.
77
		           "WHERE id IN (".implode(',',$id_lois).") ";   
101
		           "WHERE id IN (".implode(',',$id_lois).") ";   
78
		return $this->bdd->recupererTous($requete);
102
		return $this->bdd->recupererTous($requete);
79
	}
103
	}
80
	
104
	
81
	private function obtenirLoisZoneGeo(Array $id_lois) {
105
	private function obtenirLoisZoneGeo(Array $id_lois) {
82
		$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois);
106
		$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois);
83
		$requete = "SELECT DISTINCT zone_application, code_zone_application FROM ".Config::get('bdd_table_lois').' '.
107
		$requete = "SELECT DISTINCT zone_application, code_zone_application FROM ".Config::get('bdd_table_lois').' '.
84
			           "WHERE id IN (".implode(',',$id_lois).") ";   
108
			           "WHERE id IN (".implode(',',$id_lois).") ";   
85
		return $this->bdd->recupererTous($requete);
109
		return $this->bdd->recupererTous($requete);
86
	}
110
	}
87
	
111
	
88
	private function obtenirStatuts() {	
112
	private function obtenirStatuts() {
89
		$nn_demande = $this->parametres['masque.nn'];
-
 
90
		
113
		if ($this->nn_demande != null) {
91
		$conditions_taxons = array();
114
			$conditions_taxons = array();
92
		$conditions_taxons = $this->obtenirNumNomTaxonsSuperieurs(Config::get('referentiel'), $nn_demande);
115
			$conditions_taxons = $this->obtenirNumNomTaxonsSuperieurs(Config::get('referentiel'), $this->nn_demande);
-
 
116
			$conditions_taxons[] = $this->bdd->proteger($this->nn_demande);
93
		$conditions_taxons[] = $this->bdd->proteger($nn_demande);
117
		}
-
 
118
		
94
		
119
		$requete = "SELECT * FROM ".Config::get('bdd_table_especes');
95
		$requete = "SELECT * FROM ".Config::get('bdd_table_especes').' '.
120
		if ($this->nn_demande != null) {
-
 
121
			$requete .= " WHERE num_nom_retenu IN (".implode(', ', $conditions_taxons).") OR "
-
 
122
				. "num_nom IN (".implode(', ', $conditions_taxons).") ";
-
 
123
		}
-
 
124
		// pagination
-
 
125
		$requete .= " LIMIT " . $this->navigation_depart . ", " . $this->navigation_limite;
96
		           "WHERE num_nom_retenu IN (".implode(', ', $conditions_taxons).") OR ".
126
		$requete .= ' -- ' . __FILE__ . ':' . __LINE__;
-
 
127
		//echo "REQ: $requete\n";
-
 
128
				
97
				   "num_nom IN (".implode(', ', $conditions_taxons).") " . ' -- ' . __FILE__ . ':' . __LINE__;
129
		$statuts = $this->bdd->recuperer($requete);
98
				
130
		//echo "STATUTS: " . print_r($statuts, true) . "\n";
99
		$statuts = $this->bdd->recuperer($requete);
131
		//echo "CPT: " . count($statuts) . "\n";
100
		$statuts = $this->formaterRetour($statuts);
132
		$statuts = $this->formaterRetour($statuts);
101
		return $statuts;           
133
		return $statuts;           
102
	}	
134
	}	
103
//+---------------------------FONCTIONS DE FORMATAGE---------------------------------------------------------+
135
//+---------------------------FONCTIONS DE FORMATAGE---------------------------------------------------------+
104
 
136
 
105
	private function formaterRetour($statuts_taxon) {
137
	private function formaterRetour($statuts_taxon) {
106
		switch($this->retour_format) {
138
		switch($this->retour_format) {
107
			case 'zone_geo':
139
			case 'zone_geo':
108
				$retour = $this->formaterStatutsTaxonZoneGeo($statuts_taxon);
140
				$retour = $this->formaterStatutsTaxonZoneGeo($statuts_taxon);
109
			break;
141
			break;
110
					
142
					
111
			case 'complet':
143
			case 'complet':
112
				$retour = $this->formaterStatutsTaxon($statuts_taxon);
144
				$retour = $this->formaterStatutsTaxon($statuts_taxon);
113
			break;
145
			break;
114
					
146
					
115
			default:
147
			default:
116
				$retour = $this->formaterStatutsTaxon();
148
				$retour = $this->formaterStatutsTaxon();
117
			break;
149
			break;
118
		}
150
		}
119
		return $retour;
151
		return $retour;
120
	}
152
	}
121
	
153
	
122
	private function formaterStatutsTaxonZoneGeo($statuts_taxon) {
154
	private function formaterStatutsTaxonZoneGeo($statuts_taxon) {
123
		$lois_statuts = array();
155
		$lois_statuts = array();
124
		// cas ou la requête (obtenirStatuts()) ne retourne rien
156
		// cas ou la requête (obtenirStatuts()) ne retourne rien
125
		if(!$statuts_taxon) return array();
157
		if(!$statuts_taxon) return array();
126
 
158
 
127
		foreach ($statuts_taxon as $champ => $statut) {
159
		foreach ($statuts_taxon as $champ => $statut) {
128
			if($statut == "1") {
160
			if($statut == "1") {
129
				$lois_statuts[] = $champ;
161
				$lois_statuts[] = $champ;
130
			}			
162
			}			
131
		}
163
		}
132
		
164
		
133
		$zones_geo_lois = (!empty($lois_statuts)) ? $this->obtenirLoisZoneGeo($lois_statuts) : array();
165
		$zones_geo_lois = (!empty($lois_statuts)) ? $this->obtenirLoisZoneGeo($lois_statuts) : array();
134
		
166
		
135
		return $zones_geo_lois;
167
		return $zones_geo_lois;
136
	}
168
	}
137
	
169
	
138
	private function formaterStatutsTaxon($statuts_taxon) {
170
	private function formaterStatutsTaxon($statuts_taxon) {
139
		$statuts_formates = array();
171
		$statuts_formates = array();
140
		$lois_statuts = array();
172
		$lois_statuts = array();
141
		
173
		
142
		if(is_array($statuts_taxon)) {
174
		if(is_array($statuts_taxon)) {
143
			unset($statuts_taxon['num_nom']);
175
			unset($statuts_taxon['num_nom']);
144
			unset($statuts_taxon['num_nom_retenu']);
176
			unset($statuts_taxon['num_nom_retenu']);
145
			unset($statuts_taxon['nom_sci']);
177
			unset($statuts_taxon['nom_sci']);
146
			foreach ($statuts_taxon as $champ => $statut) {
178
			foreach ($statuts_taxon as $champ => $statut) {
147
				if($statut == "1") {
179
				if($statut == "1") {
148
					$lois_statuts[] = $champ;
180
					$lois_statuts[] = $champ;
149
				}
181
				}
150
			}
182
			}
151
		}
183
		}
152
	
184
	
153
		$statuts_formates = (!empty($lois_statuts)) ? $this->obtenirLois($lois_statuts) : array();
185
		$statuts_formates = (!empty($lois_statuts)) ? $this->obtenirLois($lois_statuts) : array();
154
	
186
	
155
		return $statuts_formates;
187
		return $statuts_formates;
156
	}
188
	}
157
}
189
}
158
?>
190
?>