Subversion Repositories eFlore/Projets.eflore-projets

Rev

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

Rev 413 Rev 414
1
<?php
1
<?php
2
 
2
 
3
/**
3
/**
4
* Classe Informations.php permet de faire des requetes de baseflor en fonction d'un référentiel
4
* Classe Informations.php permet de faire des requetes de baseflor en fonction d'un référentiel
5
*( BDTFX, BDAFX, BDBFX ) et d'un numéro nomenclatural ( différent de 0 ). 
5
*( BDTFX, BDAFX, BDBFX ) et d'un numéro nomenclatural ( différent de 0 ). 
6
*  fin d'url possibles :
6
*  fin d'url possibles :
7
*  /informations/#bdnt.nn:#num_nomen --> retourne tous les champs pour un BDNT et un num_nomen
7
*  /informations/#bdnt.nn:#num_nomen --> retourne tous les champs pour un BDNT et un num_nomen
8
*  /informations/#bdnt.nn:#num_nomen?test=description --> retourne champs description pour un BDNT et un num_nomen
8
*  /informations/#bdnt.nn:#num_nomen?test=description --> retourne champs description pour un BDNT et un num_nomen
9
*  /informations/#bdnt.nn:#num_nomen?test=ecologie --> retourne champs ecologiques pour un BDNT et un num_nomen
9
*  /informations/#bdnt.nn:#num_nomen?test=ecologie --> retourne champs ecologiques pour un BDNT et un num_nomen
10
*  /informations --> retourne les 10 premiers résultats
10
*  /informations --> retourne les 10 premiers résultats
11
*  /informations?navigation.limite=..&navigation.depart=.. --> retourne les 10 premiers résultats avec limites
11
*  /informations?navigation.limite=..&navigation.depart=.. --> retourne les 10 premiers résultats avec limites
12
*
12
*
13
* Encodage en entrée : utf8
13
* Encodage en entrée : utf8
14
* Encodage en sortie : utf8
14
* Encodage en sortie : utf8
15
* @package eflore-projets
15
* @package eflore-projets
16
* @author Mathilde SALTHUN-LASSALLE <mathilde@tela-botanica.org>
16
* @author Mathilde SALTHUN-LASSALLE <mathilde@tela-botanica.org>
17
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
17
* @author Delphine CAUQUIL <delphine@tela-botanica.org>
18
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
18
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
19
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
19
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
20
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
20
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
21
* @version 1.0
21
* @version 1.0
22
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
22
* @copyright 1999-2011 Tela Botanica (accueil@tela-botanica.org)
23
*/
23
*/
24
 
24
 
25
class Informations extends Commun{
25
class Informations extends Commun{
26
	
26
	
27
	protected $table="";
27
	protected $table="";
28
	private $requete_condition = "";
28
	private $requete_condition = "";
29
	/** Permet de stocker la requete formulée:  /informations/bdnt.nn |  */
29
	/** Permet de stocker la requete formulée:  /informations/bdnt.nn |  */
30
	private $format_reponse = 'informations';
30
	private $format_reponse = 'informations';
31
	private $total_resultat;
31
	private $total_resultat;
32
	private $retour_format = 'max';
32
	private $retour_format = 'max';
33
	protected $limite_requete = array( 'depart' => 0, 'limite' => 10);
33
	protected $limite_requete = array( 'depart' => 0, 'limite' => 10);
34
	private $champs_recherches = '*';
34
	private $champs_recherches = '*';
35
	private $champs_ontologiques =  array ('ve_lumiere' => 'VEL', 've_temperature' => 'VET', 
35
	private $champs_ontologiques =  array ('ve_lumiere' => 'VEL', 've_temperature' => 'VET', 
36
											've_continentalite' => 'VEC', 've_humidite_atmos' => 'VEHA',
36
											've_continentalite' => 'VEC', 've_humidite_atmos' => 'VEHA',
37
											've_humidite_edaph' => 'VEHE', 've_reaction_sol' => 'VER' ,
37
											've_humidite_edaph' => 'VEHE', 've_reaction_sol' => 'VER' ,
38
											've_nutriments_sol' => 'VEN', 've_salinite'=> 'VES' , 
38
											've_nutriments_sol' => 'VEN', 've_salinite'=> 'VES' , 
39
											've_texture_sol' => 'VETX', 've_mat_org_sol' => 'VEMO');
39
											've_texture_sol' => 'VETX', 've_mat_org_sol' => 'VEMO');
40
 
40
 
41
//+--------------------------traitement ressources ou paramètres  -------------------------------------------+	
41
//+--------------------------traitement ressources ou paramètres  -------------------------------------------+	
42
	public function traiterParametres() {
42
	public function traiterParametres() {
43
		if (isset($this->parametres) && !empty($this->parametres)) {
43
		if (isset($this->parametres) && !empty($this->parametres)) {
44
			foreach ($this->parametres as $param => $valeur) {
44
			foreach ($this->parametres as $param => $valeur) {
45
				switch ($param) {
45
				switch ($param) {
46
					case 'navigation.depart'  : 
46
					case 'navigation.depart'  : 
47
						 $this->limite_requete['depart'] = $valeur;	 break;
47
						 $this->limite_requete['depart'] = $valeur;	 break;
48
					case 'navigation.limite'  :  $this->limite_requete['limite'] = $valeur;	  break;
48
					case 'navigation.limite'  :  $this->limite_requete['limite'] = $valeur;	  break;
49
					case 'test'  : 
49
					case 'test'  : 
50
						if ($valeur == "description") {
50
						if ($valeur == "description") {
51
							$this->champs_recherches="cle, chorologie, inflorescence, sexualite, ordre_maturation, "
51
							$this->champs_recherches="cle, chorologie, inflorescence, sexualite, ordre_maturation, "
52
							."pollinisation, fruit, dissemination, couleur_fleur, macule, floraison, type_bio, "
52
							."pollinisation, fruit, dissemination, couleur_fleur, macule, floraison, type_bio, "
53
						 	."form_vegetale ";	
53
						 	."form_vegetale ";	
54
						}elseif ($valeur == "ecologie"){
54
						}elseif ($valeur == "ecologie"){
55
							$this->champs_recherches="cle, ve_lumiere , ve_temperature, ve_continentalite, 
55
							$this->champs_recherches="cle, ve_lumiere , ve_temperature, ve_continentalite, 
56
							ve_humidite_atmos, ve_humidite_edaph, ve_reaction_sol, ve_nutriments_sol, ve_salinite,
56
							ve_humidite_atmos, ve_humidite_edaph, ve_reaction_sol, ve_nutriments_sol, ve_salinite,
57
							ve_texture_sol, ve_mat_org_sol ";
57
							ve_texture_sol, ve_mat_org_sol ";
58
						}else {
58
						}else {
59
							$e = 'Valeur de paramètre inconnue  pour \'test\'. ';
59
							$e = 'Valeur de paramètre inconnue  pour \'test\'. ';
60
							$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);
60
							$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);
61
						}
61
						}
62
						break;
62
						break;
63
					case 'retour.format'  :
63
					case 'retour.format'  :
64
						$this->retour_format = $valeur;
64
						$this->retour_format = $valeur;
65
						break;
65
						break;
66
					default :
66
					default :
67
						$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " '
67
						$e = 'Erreur dans les parametres de votre requête : </br> Le paramètre " '
68
							.$param.' " n\'existe pas.';
68
							.$param.' " n\'existe pas.';
69
						$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);	break;
69
						$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);	break;
70
				}
70
				}
71
			}
71
			}
72
		}
72
		}
73
	}
73
	}
74
 
74
 
75
	public function traiterRessources() {
75
	public function traiterRessources() {
76
		if (isset($this->ressources) && !empty($this->ressources[0])) {
76
		if (isset($this->ressources) && !empty($this->ressources[0])) {
77
			if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[0], $retour)==1){
77
			if(preg_match('/^(.+)\.nn:([0-9]+)$/', $this->ressources[0], $retour)==1){
78
				switch ($retour[1]) {
78
				switch ($retour[1]) {
79
					case 'bdtfx' :
79
					case 'bdtfx' :
80
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDTFX' ";
80
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDTFX' ";
81
						 
81
						 
82
						break;
82
						break;
83
					case  'bdafx' :
83
					case  'bdafx' :
84
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDAFX' "; 
84
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDAFX' "; 
85
						break;
85
						break;
86
					case  'bdbfx' :
86
					case  'bdbfx' :
87
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDBFX' "; 
87
						$this->requete_condition[] = "num_nomen = ".$retour[2]." AND BDNT = 'BDBFX' "; 
88
						break;
88
						break;
89
					default :
89
					default :
90
						$e = 'Erreur dans l\'url de votre requête : </br> La ressource " '
90
						$e = 'Erreur dans l\'url de votre requête : </br> La ressource " '
91
							.$retour[1].' " n\'existe pas.';
91
							.$retour[1].' " n\'existe pas.';
92
						$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);	
92
						$this->renvoyerErreur(RestServeur::HTTP_CODE_MAUVAISE_REQUETE, $e);	
93
						break;
93
						break;
94
				}	
94
				}	
95
				
95
				
96
			}
96
			}
97
		} else {
97
		} else {
98
			$this->champs_recherches=" cle, catminat_code, BDNT, num_taxon, num_nomen ";
98
			$this->champs_recherches=" cle, catminat_code, BDNT, num_taxon, num_nomen ";
99
		}
99
		}
100
	}
100
	}
101
	
101
	
102
//+--------------------------formatages de resultats  -------------------------------------------+
102
//+--------------------------formatages de resultats  -------------------------------------------+
103
	public function retournerResultatFormate($resultat) {
103
	public function retournerResultatFormate($resultat) {
104
		if ((count($this->ressources)) == 0) {
104
		if ((count($this->ressources)) == 0) {
105
			$table_retour_json['resultat'] = $this->formaterResultatsInformations($resultat);
105
			$table_retour_json['resultat'] = $this->formaterResultatsInformations($resultat);
106
		} else {
106
		} else {
107
			$table_retour_json = $this->formaterResultatsInformationsBDNTnn($resultat);
107
			$table_retour_json = $this->formaterResultatsInformationsBDNTnn($resultat);
108
		}
108
		}
109
		return $table_retour_json;
109
		return $table_retour_json;
110
	}
110
	}
111
	
111
	
112
	public function formaterResultatsInformationsBDNTnn($resultat){
112
	public function formaterResultatsInformationsBDNTnn($resultat){
113
	$resultat_json=array();
113
	$resultat_json=array();
114
	$resultat_json = $resultat[0];
114
	$resultat_json = $resultat[0];
115
	if ($this->retour_format == 'max'){ 
115
	if ($this->retour_format == 'max'){ 
116
		if ($resultat_json['type_bio'] != ""){
116
		if ($resultat_json['type_bio'] != ""){
117
			$tab_ontologie = $this->recupererOntologiePrTypeBio($resultat_json['type_bio']);
117
			$tab_ontologie = $this->recupererOntologiePrTypeBio($resultat_json['type_bio']);
118
			unset($resultat_json['type_bio']);
118
			unset($resultat_json['type_bio']);
119
			$resultat_json= array_merge($resultat_json,$tab_ontologie);
119
			$resultat_json= array_merge($resultat_json,$tab_ontologie);
120
		}
120
		}
121
		foreach ($this->champs_ontologiques as $cle => $valeur){
121
		foreach ($this->champs_ontologiques as $cle => $valeur){
122
			if ($resultat_json[$cle] != ""){
122
			if ($resultat_json[$cle] != ""){
123
				$tab_ontologie = $this->recupererOntologies($resultat_json[$cle], $cle);
123
				$tab_ontologie = $this->recupererOntologies($resultat_json[$cle], $cle);
124
				unset($resultat_json[$cle]);
124
				unset($resultat_json[$cle]);
125
				$resultat_json= array_merge($resultat_json,$tab_ontologie);
125
				$resultat_json= array_merge($resultat_json,$tab_ontologie);
126
			}
126
			}
127
		}
127
		}
128
		
128
		
129
	}
129
	}
130
	$resultat_json['graphique_climat']['libelle']='climat';
130
	$resultat_json['graphique_climat']['libelle']='climat';
131
	$resultat_json['graphique_climat']['href']=$this->ajouterHref('graphiques/climat', strtolower($resultat_json['BDNT']).'.nn:'.$resultat_json['num_nomen']);
131
	$resultat_json['graphique_climat']['href']=$this->ajouterHref('graphiques/climat', strtolower($resultat_json['BDNT']).'.nn:'.$resultat_json['num_nomen']);
132
	$resultat_json['graphique_sol']['libelle']='sol';
132
	$resultat_json['graphique_sol']['libelle']='sol';
133
	$resultat_json['graphique_sol']['href']=$this->ajouterHref('graphiques/sol', strtolower($resultat_json['BDNT']).'.nn:'.$resultat_json['num_nomen']);
133
	$resultat_json['graphique_sol']['href']=$this->ajouterHref('graphiques/sol', strtolower($resultat_json['BDNT']).'.nn:'.$resultat_json['num_nomen']);
134
	return $resultat_json;
134
	return $resultat_json;
135
	}
135
	}
136
	
136
	
137
	public function formaterResultatsInformations($resultat) {
137
	public function formaterResultatsInformations($resultat) {
138
		$resultat_json=array();
138
		$resultat_json=array();
139
		$resultat_json['entete'] = $this->ajouterEnteteResultat();
139
		$resultat_json['entete'] = $this->ajouterEnteteResultat();
140
		foreach ($resultat as $tab) {
140
		foreach ($resultat as $tab) {
-
 
141
			if ($tab['BDNT'] != 'nc'){
141
			$num = $tab['cle'];
142
				$num = $tab['cle'];
142
			unset($tab['cle']);
143
				unset($tab['cle']);
143
			foreach ($tab as $param => $valeur) {
144
				foreach ($tab as $param => $valeur) {
144
				$resultat_json[$num][$param] = $valeur;
145
					$resultat_json[$num][$param] = $valeur;
-
 
146
				}
-
 
147
				$resultat_json[$num]['href'] = $this->ajouterHref('informations',strtolower($tab['BDNT']).".nn:".$tab['num_nomen']);
145
			}
148
			}
146
			$resultat_json[$num]['href'] = $this->ajouterHref('informations',strtolower($tab['BDNT']).".nn:".$tab['num_nomen']);
-
 
147
		}
149
		}
148
		return $resultat_json;
150
		return $resultat_json;
149
	}
151
	}
150
	
152
	
151
	
153
	
152
	
154
	
153
	public function ajouterEnteteResultat() {
155
	public function ajouterEnteteResultat() {
154
		$entete['depart'] = $this->limite_requete['depart'];
156
		$entete['depart'] = $this->limite_requete['depart'];
155
		$entete['limite'] = $this->limite_requete['limite'];
157
		$entete['limite'] = $this->limite_requete['limite'];
156
		$entete['total']  =  $this->total_resultat;
158
		$entete['total']  =  $this->total_resultat;
157
		$entete['version']  = $this->version_projet;
159
		$entete['version']  = $this->version_projet;
158
		$url = $this->formulerUrl($this->total_resultat, '/informations');
160
		$url = $this->formulerUrl($this->total_resultat, '/informations');
159
		if (isset($url['precedent']) && $url['precedent'] != '') {
161
		if (isset($url['precedent']) && $url['precedent'] != '') {
160
			$entete['href.precedent'] = $url['precedent'];
162
			$entete['href.precedent'] = $url['precedent'];
161
		}
163
		}
162
		if (isset($url['suivant']) && $url['suivant'] != '') {
164
		if (isset($url['suivant']) && $url['suivant'] != '') {
163
			$entete['href.suivant']   = $url['suivant'];
165
			$entete['href.suivant']   = $url['suivant'];
164
		}
166
		}
165
		return $entete;
167
		return $entete;
166
	}
168
	}
167
	
169
	
168
	
170
	
169
//+--------------------------traitement ontologies -------------------------------------------+
171
//+--------------------------traitement ontologies -------------------------------------------+
170
	public function recupererOntologies($valeur, $champs){
172
	public function recupererOntologies($valeur, $champs){
171
		$url = $this->ajouterHref('ontologies',$this->champs_ontologiques[$champs].':'.urlencode(urlencode($valeur)));
173
		$url = $this->ajouterHref('ontologies',$this->champs_ontologiques[$champs].':'.urlencode(urlencode($valeur)));
172
		$val = $this->consulterHref($url);
174
		$val = $this->consulterHref($url);
173
		$resultat_json[$champs.'.libelle'] = $val->nom;
175
		$resultat_json[$champs.'.libelle'] = $val->nom;
174
		$resultat_json[$champs.'.code'] = $valeur;
176
		$resultat_json[$champs.'.code'] = $valeur;
175
		$resultat_json[$champs.'.href'] = $url;
177
		$resultat_json[$champs.'.href'] = $url;
176
		return $resultat_json;
178
		return $resultat_json;
177
	}
179
	}
178
	
180
	
179
	
181
	
180
	
182
	
181
	public function recupererOntologiePrTypeBio($type_a_traiter){
183
	public function recupererOntologiePrTypeBio($type_a_traiter){
182
		$resultat_typeBio = "";
184
		$resultat_typeBio = "";
183
		if ($type_a_traiter != ""){
185
		if ($type_a_traiter != ""){
184
			$resultat_typeBio['type_bio.code'] = $type_a_traiter;
186
			$resultat_typeBio['type_bio.code'] = $type_a_traiter;
185
			$types_prim_sec = $this->separerTypesPrimairesSecondaires($type_a_traiter);
187
			$types_prim_sec = $this->separerTypesPrimairesSecondaires($type_a_traiter);
186
			foreach ($types_prim_sec as $cle => $tb){
188
			foreach ($types_prim_sec as $cle => $tb){
187
				$types_sstypes[$cle]= $this->separerTypes_SousTypes($tb, $cle);
189
				$types_sstypes[$cle]= $this->separerTypes_SousTypes($tb, $cle);
188
			}
190
			}
189
			switch (count($types_sstypes)){
191
			switch (count($types_sstypes)){
190
				case 1 :
192
				case 1 :
191
					$types_sstypes = $types_sstypes['principal'];
193
					$types_sstypes = $types_sstypes['principal'];
192
					break;
194
					break;
193
				case 2 : 
195
				case 2 : 
194
					$types_sstypes = array_merge($types_sstypes['principal'],$types_sstypes['secondaire']);
196
					$types_sstypes = array_merge($types_sstypes['principal'],$types_sstypes['secondaire']);
195
					break;
197
					break;
196
				case 3 : 
198
				case 3 : 
197
					$types_sstypes = array_merge($types_sstypes['principal'],
199
					$types_sstypes = array_merge($types_sstypes['principal'],
198
												$types_sstypes['secondaire'],
200
												$types_sstypes['secondaire'],
199
												$types_sstypes['special']);
201
												$types_sstypes['special']);
200
					break;
202
					break;
201
			  default :
203
			  default :
202
			  	break;
204
			  	break;
203
				 
205
				 
204
			}
206
			}
205
			
207
			
206
			foreach ($types_sstypes as $cle => $tb){
208
			foreach ($types_sstypes as $cle => $tb){
207
				if (($cle == 'type.principal') || ($cle == 'type.secondaire')){
209
				if (($cle == 'type.principal') || ($cle == 'type.secondaire')){
208
					$url = $this->ajouterHref('ontologies','TB:'.urlencode(urlencode($tb)));
210
					$url = $this->ajouterHref('ontologies','TB:'.urlencode(urlencode($tb)));
209
					$val = $this->consulterHref($url);
211
					$val = $this->consulterHref($url);
210
					$libelle[$cle]= $val->nom;
212
					$libelle[$cle]= $val->nom;
211
					$detail[$cle]['libelle'] = $val->nom;
213
					$detail[$cle]['libelle'] = $val->nom;
212
					$detail[$cle]['code'] = $val->code;
214
					$detail[$cle]['code'] = $val->code;
213
					$detail[$cle]['href'] = $url;
215
					$detail[$cle]['href'] = $url;
214
				}
216
				}
215
				if ( ($cle == 'sous_type.principal') || ($cle == 'sous_type.secondaire') || ($cle == 'sous_type.special') ){
217
				if ( ($cle == 'sous_type.principal') || ($cle == 'sous_type.secondaire') || ($cle == 'sous_type.special') ){
216
					$i = 0; 
218
					$i = 0; 
217
					foreach ($tb as $sstypes){
219
					foreach ($tb as $sstypes){
218
						$url = $this->ajouterHref('ontologies','ssTT:'.urlencode(urlencode($sstypes)));
220
						$url = $this->ajouterHref('ontologies','ssTT:'.urlencode(urlencode($sstypes)));
219
						$val = $this->consulterHref($url);
221
						$val = $this->consulterHref($url);
220
						$libelle[$cle]=$val->nom;
222
						$libelle[$cle]=$val->nom;
221
						$detail[$cle][$i]['libelle'] = $val->nom;
223
						$detail[$cle][$i]['libelle'] = $val->nom;
222
						$detail[$cle][$i]['code'] = $val->code;
224
						$detail[$cle][$i]['code'] = $val->code;
223
						$detail[$cle][$i]['href'] = $url;					
225
						$detail[$cle][$i]['href'] = $url;					
224
						$i++;
226
						$i++;
225
					}
227
					}
226
				}
228
				}
227
			}
229
			}
228
		$resultat_typeBio['type_bio.libelle']= $this->formaterTypeBioPrLibelle($libelle);
230
		$resultat_typeBio['type_bio.libelle']= $this->formaterTypeBioPrLibelle($libelle);
229
		$resultat_typeBio['type_bio.detail'] = $detail;
231
		$resultat_typeBio['type_bio.detail'] = $detail;
230
		}
232
		}
231
		return $resultat_typeBio;
233
		return $resultat_typeBio;
232
	}
234
	}
233
	
235
	
234
	
236
	
235
	public function formaterTypeBioPrLibelle($info){
237
	public function formaterTypeBioPrLibelle($info){
236
		$libelle = $info['type.principal']." ";
238
		$libelle = $info['type.principal']." ";
237
		$libelle .= isset($info['sous_type.principal']) ? " (".$info['sous_type.principal'].") " : "";
239
		$libelle .= isset($info['sous_type.principal']) ? " (".$info['sous_type.principal'].") " : "";
238
		$libelle .= isset($info['type.secondaire']) ? ", ".$info['type.secondaire']." " : "";
240
		$libelle .= isset($info['type.secondaire']) ? ", ".$info['type.secondaire']." " : "";
239
		$libelle .= isset($info['sous_type.secondaire']) ? "(".$info['sous_type.secondaire'].") " : "";
241
		$libelle .= isset($info['sous_type.secondaire']) ? "(".$info['sous_type.secondaire'].") " : "";
240
		$libelle .= isset($info['sous_type.special']) ? "(".$info['sous_type.special'].") " : "";
242
		$libelle .= isset($info['sous_type.special']) ? "(".$info['sous_type.special'].") " : "";
241
		return $libelle;
243
		return $libelle;
242
	}
244
	}
243
	
245
	
244
 
246
 
245
	public function separerTypesPrimairesSecondaires($type){
247
	public function separerTypesPrimairesSecondaires($type){
246
		$types = array(); 
248
		$types = array(); 
247
		//séparation des principaux et des secondaires
249
		//séparation des principaux et des secondaires
248
		if (( preg_match("/(.+)\((.+)\)\-{0,1}(.+){0,1}/", $type,$retour) == 1  )){
250
		if (( preg_match("/(.+)\((.+)\)\-{0,1}(.+){0,1}/", $type,$retour) == 1  )){
249
			$types['principal'] = $retour[1]; 
251
			$types['principal'] = $retour[1]; 
250
			$types['secondaire'] = $retour[2];
252
			$types['secondaire'] = $retour[2];
251
			if (isset($retour[3])){$types['special'] = $retour[3];}
253
			if (isset($retour[3])){$types['special'] = $retour[3];}
252
		}else {
254
		}else {
253
			$types['principal'] = $type;
255
			$types['principal'] = $type;
254
		}
256
		}
255
		return $types;
257
		return $types;
256
	}
258
	}
257
	
259
	
258
	public function separerTypes_SousTypes($type_a_traiter, $typePrimOuSec){
260
	public function separerTypes_SousTypes($type_a_traiter, $typePrimOuSec){
259
		$types = array();
261
		$types = array();
260
		if(( preg_match("/^([a-zA-Zé]+)\-(.+)$|^([a-zA-Zé]+[^\-])$/", $type_a_traiter, $retour) == 1  )){
262
		if(( preg_match("/^([a-zA-Zé]+)\-(.+)$|^([a-zA-Zé]+[^\-])$/", $type_a_traiter, $retour) == 1  )){
261
    		//recupère le type unique
263
    		//recupère le type unique
262
		
264
		
263
			$type = (isset($retour[3]) && ($typePrimOuSec != 'special') ) ? $retour[3] : $retour[1] ;
265
			$type = (isset($retour[3]) && ($typePrimOuSec != 'special') ) ? $retour[3] : $retour[1] ;
264
			$types['type.'.$typePrimOuSec]= $type;
266
			$types['type.'.$typePrimOuSec]= $type;
265
    		//recupère le ou les sous-types
267
    		//recupère le ou les sous-types
266
    		if ((isset($retour[3]) && ($typePrimOuSec == 'special') )){
268
    		if ((isset($retour[3]) && ($typePrimOuSec == 'special') )){
267
    			$ss_types[0] = (isset($retour[3]) && ($typePrimOuSec == 'special') ) ? $retour[3] : "" ;
269
    			$ss_types[0] = (isset($retour[3]) && ($typePrimOuSec == 'special') ) ? $retour[3] : "" ;
268
    		}elseif(isset($retour[2]) && ($retour[2] != "")){
270
    		}elseif(isset($retour[2]) && ($retour[2] != "")){
269
    			$ss_types[0]= (isset($retour[2]) && ($retour[2] != "") ) ? $retour[2] : "" ;
271
    			$ss_types[0]= (isset($retour[2]) && ($retour[2] != "") ) ? $retour[2] : "" ;
270
    		}
272
    		}
271
     		if (isset($ss_types[0])){
273
     		if (isset($ss_types[0])){
272
    			if (( preg_match("/\-/", $ss_types[0])) == 1 ){
274
    			if (( preg_match("/\-/", $ss_types[0])) == 1 ){
273
    				$ss_types = preg_split("/\-/", $ss_types[0]);
275
    				$ss_types = preg_split("/\-/", $ss_types[0]);
274
    			}
276
    			}
275
				for($i = 0 ; $i < count($ss_types); $i++){
277
				for($i = 0 ; $i < count($ss_types); $i++){
276
    				$types['sous_type.'.$typePrimOuSec][$i] = $ss_types[$i];
278
    				$types['sous_type.'.$typePrimOuSec][$i] = $ss_types[$i];
277
        			}
279
        			}
278
    		}
280
    		}
279
    	}
281
    	}
280
    	
282
    	
281
 		return $types;
283
 		return $types;
282
	}
284
	}
283
	
285
	
284
	
286
	
285
//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+
287
//+--------------------------FONCTIONS D'ASSEMBLAGE DE LA REQUETE-------------------------------------------+
286
	
288
	
287
	public function assemblerLaRequete() {
289
	public function assemblerLaRequete() {
288
		$requete = 	' SELECT '.$this->champs_recherches.' FROM '.$this->table.' '
290
		$requete = 	' SELECT '.$this->champs_recherches.' FROM '.$this->table.' '
289
		.$this->retournerRequeteCondition().' '
291
		.$this->retournerRequeteCondition().' '
290
		.$this->delimiterResultatsRequete();
292
		.$this->delimiterResultatsRequete();
291
		return $requete;
293
		return $requete;
292
	}
294
	}
293
	
295
	
294
 
296
 
295
	
297
	
296
	public  function retournerRequeteCondition() {
298
	public  function retournerRequeteCondition() {
297
		$condition = '';
299
		$condition = '';
298
		if ($this->requete_condition !== "") {
300
		if ($this->requete_condition !== "") {
299
			$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
301
			$condition = ' WHERE '.implode(' AND ', $this->requete_condition);
300
		}
302
		}
301
		return $condition;
303
		return $condition;
302
	}
304
	}
303
	
305
	
304
 
306
 
305
	
307
	
306
	public function calculerTotalResultat() {
308
	public function calculerTotalResultat() {
307
		//on récupère le nombre total de résultats de la requete
309
		//on récupère le nombre total de résultats de la requete
308
		$requete = 'SELECT count(*) as nombre FROM '.$this->table.' '
310
		$requete = 'SELECT count(*) as nombre FROM '.$this->table.' '
309
		.$this->retournerRequeteCondition();
311
		.$this->retournerRequeteCondition();
310
		$res = $this->getBdd()->recuperer($requete);
312
		$res = $this->getBdd()->recuperer($requete);
311
		if ($res) {
313
		if ($res) {
312
			$this->total_resultat = $res['nombre'];
314
			$this->total_resultat = $res['nombre'];
313
		} else {
315
		} else {
314
			$this->total_resultat = 0;
316
			$this->total_resultat = 0;
315
			$e = 'Données introuvables dans la base';
317
			$e = 'Données introuvables dans la base';
316
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
318
			$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
317
			Debug::printr($requete);
319
			Debug::printr($requete);
318
		}
320
		}
319
	}
321
	}
320
	
322
	
321
	public function delimiterResultatsRequete() {
323
	public function delimiterResultatsRequete() {
322
		$this->calculerTotalResultat();
324
		$this->calculerTotalResultat();
323
		if ((count($this->ressources)) == 0)  { 
325
		if ((count($this->ressources)) == 0)  { 
324
			if (($this->limite_requete['depart'] <  $this->total_resultat) && 
326
			if (($this->limite_requete['depart'] <  $this->total_resultat) && 
325
				(($this->limite_requete['depart'] + $this->limite_requete['limite'])
327
				(($this->limite_requete['depart'] + $this->limite_requete['limite'])
326
				< $this->total_resultat  )){ 
328
				< $this->total_resultat  )){ 
327
					$this->requete_limite = 'LIMIT '.$this->limite_requete['depart'].', '
329
					$this->requete_limite = 'LIMIT '.$this->limite_requete['depart'].', '
328
					.$this->limite_requete['limite'];
330
					.$this->limite_requete['limite'];
329
			}else {
331
			}else {
330
				$e = 'Données introuvables dans la base. ';
332
				$e = 'Données introuvables dans la base. ';
331
				$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
333
				$this->renvoyerErreur(RestServeur::HTTP_CODE_RESSOURCE_INTROUVABLE, $e);
332
				}
334
				}
333
		}else {
335
		}else {
334
			$this->requete_limite='';
336
			$this->requete_limite='';
335
		}
337
		}
336
		return $this->requete_limite;
338
		return $this->requete_limite;
337
	}
339
	}
338
}
340
}