Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 613 | Rev 678 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 613 Rev 640
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
* Classe implémentant l'API d'eFlore concernant les statuts de protection
4
* Classe implémentant l'API d'eFlore concernant les statuts de protection
5
*
5
*
6
* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=EfloreApi01Status
6
* @see http://www.tela-botanica.org/wikini/eflore/wakka.php?wiki=EfloreApi01Status
7
*
7
*
8
* @package eFlore/services
8
* @package eFlore/services
9
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
9
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
10
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
10
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
11
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
11
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
12
* @version 1.0
12
* @version 1.0
13
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
13
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
14
*/
14
*/
15
// TODO : Config et Outils sont des classes statiques qui doivent poser des pb pour les tests...
15
// TODO : Config et Outils sont des classes statiques qui doivent poser des pb pour les tests...
16
class Statuts extends Commun {
16
class Statuts extends Commun {
17
 
17
 
18
	protected $parametres = array();
18
	protected $parametres = array();
19
	protected $ressources = array();
19
	protected $ressources = array();
20
	
20
	
21
	private $bdd;
21
	private $bdd;
22
	private $retour_format = 'complet';
22
	private $retour_format = 'complet';
23
	private $retours_formats_autorises = array('complet','zone_geo');
23
	private $retours_formats_autorises = array('complet','zone_geo');
24
	protected $table_version = null;
24
	protected $table_version = null;
25
	
25
	
26
 
26
 
27
	public function __construct($config = null) {
27
	public function __construct($config = null) {
28
		$this->config = $config;
28
		$this->config = $config;
29
		$this->bdd = $this->getBdd();
29
		$this->bdd = $this->getBdd();
30
		$this->table_version = Config::get('table_version');
30
		$this->table_version = Config::get('table_version');
31
	}
31
	}
32
	
32
	
33
	public function consulter($ressources, $parametres) {
33
	public function consulter($ressources, $parametres) {
34
 
34
 
35
		$this->parametres = $parametres;
35
		$this->parametres = $parametres;
36
		$this->ressources = $ressources;
36
		$this->ressources = $ressources;
37
 
37
 
38
		$this->affecterParametresParDefaut();
38
		$this->affecterParametresParDefaut();
39
		$this->verifierParametres();
39
		$this->verifierParametres();
40
 
40
 
41
		$resultat = new ResultatService();
41
		$resultat = new ResultatService();
42
		$resultat->corps = $this->obtenirStatuts();
42
		$resultat->corps = $this->obtenirStatuts();
43
 
43
 
44
		return $resultat;
44
		return $resultat;
45
	}
45
	}
46
//+---------------------------FONCTION D'ANALYSE DES PARAMETRES---------------------------------------------------------+
46
//+---------------------------FONCTION D'ANALYSE DES PARAMETRES---------------------------------------------------------+
47
 
47
 
48
	private function affecterParametresParDefaut() {
48
	private function affecterParametresParDefaut() {
49
		$this->retour_format = isset($this->parametres['retour.format']) ? $this->parametres['retour.format'] : $this->retour_format;
49
		$this->retour_format = isset($this->parametres['retour.format']) ? $this->parametres['retour.format'] : $this->retour_format;
50
	}
50
	}
51
	
51
	
52
	private function verifierParametres() {
52
	private function verifierParametres() {
53
		$erreurs = array();
53
		$erreurs = array();
54
		
54
		
55
		if (empty($this->parametres['masque.nn'])) {
55
		if (empty($this->parametres['masque.nn'])) {
56
			$erreurs[] = 'renseignez une valeur pour masque.nn';
56
			$erreurs[] = 'renseignez une valeur pour masque.nn';
57
		}
57
		}
58
		
58
		
59
		if(!is_numeric($this->parametres['masque.nn'])) {
59
		if(!is_numeric($this->parametres['masque.nn'])) {
60
			$erreurs[] = 'la valeur pour masque.nn doit être un entier';
60
			$erreurs[] = 'la valeur pour masque.nn doit être un entier';
61
		}
61
		}
62
		
62
		
63
		if(!in_array($this->retour_format, $this->retours_formats_autorises)) {
63
		if(!in_array($this->retour_format, $this->retours_formats_autorises)) {
64
			$erreurs[] = 'la valeur '.$this->retour_format.' est inconnue';
64
			$erreurs[] = 'la valeur '.$this->retour_format.' est inconnue';
65
		}
65
		}
66
		
66
		
67
		if (count($erreurs) > 0) {
67
		if (count($erreurs) > 0) {
68
			$message = implode('<br />', $erreurs);
68
			$message = implode('<br />', $erreurs);
69
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
69
			$code = RestServeur::HTTP_CODE_MAUVAISE_REQUETE;
70
			throw new Exception($message, $code);
70
			throw new Exception($message, $code);
71
		}
71
		}
72
	}
72
	}
73
	
73
	
74
//+---------------------------FONCTIONS DE REQUETE---------------------------------------------------------+
74
//+---------------------------FONCTIONS DE REQUETE---------------------------------------------------------+
75
 
75
 
76
	private function obtenirLois(Array $id_lois) {
76
	private function obtenirLois(Array $id_lois) {
77
		$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois);
77
		$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois);
78
		$requete = "SELECT * FROM sptb_lois_v".$this->table_version.' '.
78
		$requete = "SELECT * FROM sptb_lois_v".$this->table_version.' '.
79
		           "WHERE id IN (".implode(',',$id_lois).") ";   
79
		           "WHERE id IN (".implode(',',$id_lois).") ";   
80
		return $this->bdd->recupererTous($requete);
80
		return $this->bdd->recupererTous($requete);
81
	}
81
	}
82
	
82
	
83
	private function obtenirLoisZoneGeo(Array $id_lois) {
83
	private function obtenirLoisZoneGeo(Array $id_lois) {
84
		$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois);
84
		$id_lois = array_map(array($this->bdd, 'proteger'), $id_lois);
85
		$requete = "SELECT DISTINCT zone_application, code_zone_application FROM sptb_lois_v".$this->table_version.' '.
85
		$requete = "SELECT DISTINCT zone_application, code_zone_application FROM sptb_lois_v".$this->table_version.' '.
86
			           "WHERE id IN (".implode(',',$id_lois).") ";   
86
			           "WHERE id IN (".implode(',',$id_lois).") ";   
87
		return $this->bdd->recupererTous($requete);
87
		return $this->bdd->recupererTous($requete);
88
	}
88
	}
89
	
89
	
90
	private function obtenirStatuts() {		
90
	private function obtenirStatuts() {	
-
 
91
		$nn_demande = $this->parametres['masque.nn'];
-
 
92
		
-
 
93
		$conditions_taxons = array();
-
 
94
		$conditions_taxons = $this->obtenirNumNomTaxonsSuperieurs($nn_demande);
-
 
95
		$conditions_taxons[] = $this->bdd->proteger($nn_demande);
-
 
96
		
91
		$requete = "SELECT * FROM sptb_especes_v".$this->table_version.' '.
97
		$requete = "SELECT * FROM sptb_especes_v".$this->table_version.' '.
92
		           "WHERE ".
98
		           "WHERE num_nom_retenu IN (".implode(', ', $conditions_taxons).") OR ".
93
		           "num_nom = ".$this->bdd->proteger($this->parametres['masque.nn'])."";
99
				   "num_nom IN (".implode(', ', $conditions_taxons).") ";
94
		
100
				
95
		$statuts = $this->bdd->recuperer($requete);
101
		$statuts = $this->bdd->recuperer($requete);
96
		$statuts = $this->formaterRetour($statuts);
102
		$statuts = $this->formaterRetour($statuts);
97
		return $statuts;           
103
		return $statuts;           
98
	}
104
	}
-
 
105
	
-
 
106
	private function obtenirNumNomTaxonsSuperieurs($nn_demande) {
-
 
107
		$nn_taxons_sup = array();
-
 
108
		// TODO: ceci ramène trop de champs alors que l'on a besoin que du numéro nomenclatural
-
 
109
		// et il y a peut-être un meilleur moyen que ramener la hierarchie des taxons supérieurs
-
 
110
		// mais pour le moment ça marche et c'est assez rapide
-
 
111
		$url = $this->ajouterHrefAutreProjet('taxons', $nn_demande, '/relations/superieurs','bdtfx');
-
 
112
		$classification = $this->consulterHref($url);
-
 
113
		$classification = is_object($classification) ? get_object_vars($classification) : array();
-
 
114
		
-
 
115
		if(isset($classification[$nn_demande])) {
-
 
116
			$classification_nn_demande = get_object_vars($classification[$nn_demande]);
-
 
117
			$tab_nn_demandes = array_keys($classification_nn_demande);
-
 
118
			$nn_taxons_sup = array_map(array($this->bdd,'proteger'), $tab_nn_demandes);
-
 
119
		}	
-
 
120
		return $nn_taxons_sup;
-
 
121
	}
99
	
122
	
100
//+---------------------------FONCTIONS DE FORMATAGE---------------------------------------------------------+
123
//+---------------------------FONCTIONS DE FORMATAGE---------------------------------------------------------+
101
 
124
 
102
	private function formaterRetour($statuts_taxon) {
125
	private function formaterRetour($statuts_taxon) {
103
		switch($this->retour_format) {
126
		switch($this->retour_format) {
104
			case 'zone_geo':
127
			case 'zone_geo':
105
				$retour = $this->formaterStatutsTaxonZoneGeo($statuts_taxon);
128
				$retour = $this->formaterStatutsTaxonZoneGeo($statuts_taxon);
106
			break;
129
			break;
107
					
130
					
108
			case 'complet':
131
			case 'complet':
109
				$retour = $this->formaterStatutsTaxon($statuts_taxon);
132
				$retour = $this->formaterStatutsTaxon($statuts_taxon);
110
			break;
133
			break;
111
					
134
					
112
			default:
135
			default:
113
				$retour = $this->formaterStatutsTaxon();
136
				$retour = $this->formaterStatutsTaxon();
114
			break;
137
			break;
115
		}
138
		}
116
		return $retour;
139
		return $retour;
117
	}
140
	}
118
	
141
	
119
	private function formaterStatutsTaxonZoneGeo($statuts_taxon) {
142
	private function formaterStatutsTaxonZoneGeo($statuts_taxon) {
120
		$lois_statuts = array();
143
		$lois_statuts = array();
121
		foreach ($statuts_taxon as $champ => $statut) {
144
		foreach ($statuts_taxon as $champ => $statut) {
122
			if($statut == "1") {
145
			if($statut == "1") {
123
				$lois_statuts[] = $champ;
146
				$lois_statuts[] = $champ;
124
			}			
147
			}			
125
		}
148
		}
126
		
149
		
127
		$zones_geo_lois = (!empty($lois_statuts)) ? $this->obtenirLoisZoneGeo($lois_statuts) : array();
150
		$zones_geo_lois = (!empty($lois_statuts)) ? $this->obtenirLoisZoneGeo($lois_statuts) : array();
128
		
151
		
129
		return $zones_geo_lois;
152
		return $zones_geo_lois;
130
	}
153
	}
131
	
154
	
132
	private function formaterStatutsTaxon($statuts_taxon) {
155
	private function formaterStatutsTaxon($statuts_taxon) {
133
		$statuts_formates = array();
156
		$statuts_formates = array();
-
 
157
		$lois_statuts = array();
-
 
158
		
-
 
159
		if(is_array($statuts_taxon)) {
134
		unset($statuts_taxon['num_nom']);
160
			unset($statuts_taxon['num_nom']);
-
 
161
			unset($statuts_taxon['num_nom_retenu']);
135
		unset($statuts_taxon['nom_sci']);
162
			unset($statuts_taxon['nom_sci']);
136
		$lois_statuts = array();
-
 
137
		foreach ($statuts_taxon as $champ => $statut) {
163
			foreach ($statuts_taxon as $champ => $statut) {
138
			if($statut == "1") {
164
				if($statut == "1") {
139
				$lois_statuts[] = $champ;
165
					$lois_statuts[] = $champ;
140
			}
166
				}
-
 
167
			}
141
		}
168
		}
142
	
169
	
143
		$statuts_formates = (!empty($lois_statuts)) ? $this->obtenirLois($lois_statuts) : array();
170
		$statuts_formates = (!empty($lois_statuts)) ? $this->obtenirLois($lois_statuts) : array();
144
	
171
	
145
		return $statuts_formates;
172
		return $statuts_formates;
146
	}
173
	}
147
}
174
}
148
?>
175
?>