Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 449 Rev 480
1
<?php
1
<?php
2
 
2
 
3
// In : utf8
3
// In : utf8
4
// Out : utf8
4
// Out : utf8
-
 
5
 
-
 
6
/*
-
 
7
 
-
 
8
Octobre 2010 David Delon.
-
 
9
Import d'observations dans le carnet en ligne à partir d'un fichier excel chargé par l'utilisateur
-
 
10
et liaison d'images déjà chargee aux observations ainsi crées.
-
 
11
 
5
 
12
Nom des colonnes imposé, mais présence de toutes les colonnes non obligatoires, ordre non imposé
-
 
13
Aucune valeur dans les colonnes n'est obligatoire
-
 
14
Pour une ligne donnée, si tous les champs vides on ne fait rien, ou si seul le champ image est présent.
-
 
15
Si la seule différence entre deux lignes est la valeur de la colonne image, on considère que c'est la même observation à laquelle on associe plusieurs images.
6
// Import depuis une feuille de calcul
-
 
7
 
16
Si au moins deux lignes (ou plus) sont complètement identiques on prend en compte une seule ligne (les doublons sont éliminés).
8
// Test fonction d'import
-
 
9
// Import de base
-
 
10
// TODO : soigner les controles ...
17
 
11
// Scenario avance
18
*/
12
 
19
 
13
 
20
 
14
// Nom des colonnes 
21
// Nom des colonnes
15
 
22
 
16
define('COMMUNE','commune'); // soit un nom de commune, soit un code INSEE (5 chiffres), ou "nom de commune (numero departement)"
23
define('COMMUNE','commune'); // soit un nom de commune, soit un code INSEE (5 chiffres), ou "nom de commune (numero departement)"
17
define('LIEUDIT','lieu-dit'); // Texte libre
24
define('LIEUDIT','lieu-dit'); // Texte libre
18
define('STATION','station'); // Texte libre
25
define('STATION','station'); // Texte libre
19
define('MILIEU','milieu'); // Texte libre
26
define('MILIEU','milieu'); // Texte libre
20
define('LATITUDE','latitude'); // En decimal systeme WGS84
27
define('LATITUDE','latitude'); // En decimal systeme WGS84
21
define('LONGITUDE','longitude'); // En decimal systeme WGS84 
28
define('LONGITUDE','longitude'); // En decimal systeme WGS84 
22
define('NOTES','notes'); // Texte libre
29
define('NOTES','notes'); // Texte libre
23
define('DATEOBS','date'); // date au format jj/mm/aaaa
30
define('DATEOBS','date'); // date au format jj/mm/aaaa
24
define('ESPECE','espece'); // texte libre, nom latin, ou code nomenclatural (format BDNFFnn999999)
31
define('ESPECE','espece'); // texte libre, nom latin, ou code nomenclatural (format BDNFFnn999999)
25
define('IMAGE','image'); //  nom des fichiers images préalablement uploadés sur le CEL séparés par des "/"
32
define('IMAGE','image'); //  nom des fichiers images préalablement uploadés sur le CEL séparés par des "/"
26
 
33
 
27
// Resultat analyse ligne // TODO : Classe ?
34
// Resultat de l'analyse d'une ligne
28
define('LIGNE_VIDE',1); //  
35
define('LIGNE_VIDE',1); //  
29
define('LIGNE_NORMALE',2); //  
36
define('LIGNE_NORMALE',2); //  
30
define('LIGNE_IMAGE_SEULEMENT',3); //  
37
define('LIGNE_IMAGE_SEULEMENT',3); //  
31
 
38
 
32
include_once('Decoupage.class.php'); // TODO : Autoload
39
include_once('Decoupage.class.php'); // TODO : Autoload
33
include_once('DecoupageNomLatin.class.php');
40
include_once('DecoupageNomLatin.class.php');
34
 
41
 
35
// Element constituant une observation 
42
// Element constituant une observation 
36
 
43
 
37
Class InventoryImportExcel extends DBAccessor  {
44
Class InventoryImportExcel extends DBAccessor  {
38
 
45
 
39
// Element constituant une observation 
46
// Element constituant une observation 
40
 
47
 
41
	var $format_observation=array(COMMUNE ,LIEUDIT ,STATION ,MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,IMAGE );
48
	var $format_observation=array(COMMUNE ,LIEUDIT ,STATION ,MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,IMAGE );
-
 
49
 
-
 
50
 
-
 
51
// Fichier configuration
42
	var $config;
52
	var $config;
-
 
53
 
-
 
54
// Encapsulation classe lecture fichier excel
-
 
55
 
43
	var $extendExcelReader;
56
	var $extendExcelReader;
-
 
57
 
-
 
58
/**
-
 
59
 Constructeur
44
 
60
**/
45
	function InventoryImportExcel($config) {
61
	function InventoryImportExcel($config) {
46
 
62
 
47
		$this->config=$config;
63
		$this->config=$config;
48
		// Pas d'heritage multiple en php :(
64
		// Pas d'heritage multiple en php :(
49
 
65
 
50
		$this->extendExcelReader = new ExcelReader();
66
		$this->extendExcelReader = new ExcelReader();
51
		$this->extendExcelReader->initExcelReader();
67
		$this->extendExcelReader->initExcelReader();
52
	}
68
	}
-
 
69
 
-
 
70
/**
53
 
71
 Sur post
54
 
72
**/
55
	function createElement($pairs) {
-
 
-
 
73
	function createElement($pairs) {
-
 
74
 
56
 
75
 
57
		// uid[0] : utilisateur obligatoire
76
		$pairs['utilisateur']=$_POST['identifiant'];
-
 
77
			
58
 
78
 
59
			
79
		session_start();
60
		session_start();
80
                $this->controleUtilisateur($pairs['utilisateur']);
61
                $this->controleUtilisateur($pairs['identifiant']);
81
 
62
 
82
 
63
                foreach($_FILES as $file) { // FIXME : est necessaire
83
		foreach($_FILES as $file) { // C'est le plus simple
64
 
84
 
65
                        $infos_fichier = $file ;
85
                        $infos_fichier = $file ;
66
                }
86
                }
67
 
87
 
68
 
88
 
69
// Chargement tableau en memoire FIXME : limiter le nombre de ligne ?
89
// Chargement tableau en memoire
70
 
-
 
71
		$data = new Spreadsheet_Excel_Reader($infos_fichier['tmp_name'], false); // false : pour menager la memoire.
90
 
-
 
91
		$data = new Spreadsheet_Excel_Reader($infos_fichier['tmp_name'], false); // false : pour menager la memoire.
72
 
92
		$arr = array();
73
		$arr = array();
93
 
74
		$rowcount=$data->rowcount(0);
94
		$rowcount=$data->rowcount(0);
75
		$colcount=$data->colcount(0);
95
		$colcount=$data->colcount(0);
76
 
96
 
77
		if ($rowcount<=1) { // TODO : retour erreur
97
		if ($rowcount<=1) { // TODO : retour erreur
78
			print "Tableau vide";
98
			print "Tableau vide";
79
			exit;
99
			exit;
80
		}
100
		}
81
 
101
 
82
	        for($row=1;$row<=$rowcount;$row++) 
102
	        for($row=1;$row<=$rowcount;$row++) 
83
        	        for($col=1;$col<=$colcount;$col++) 
103
        	        for($col=1;$col<=$colcount;$col++) 
84
                	        $arr[$col][$row] = $data->val($row,$col,0);
104
                	        $arr[$col][$row] = $data->val($row,$col,0);
85
 
105
 
86
 
-
 
87
		//print_r($arr);
106
 
88
                        
107
                        
89
// 1 : Traitement colonnes 
108
// 1 : Traitement colonnes 
90
 
109
 
91
		$line = array();
110
		$line = array();
92
 
111
 
93
/* Les colonnes ne sont pas forcemment dans l'ordre  : on les extrait pour traitement futur  */
112
/* Les colonnes ne sont pas forcemment dans l'ordre  : on les extrait pour traitement futur  */
94
 
113
 
95
                for($col=1;$col<=$colcount;$col++) {
114
                for($col=1;$col<=$colcount;$col++) {
96
			$colonne=strtolower($arr[$col][1]);
115
			$colonne=strtolower($arr[$col][1]);
97
			switch ($colonne) {  // On ne garde que les colonnes que l'on souhaite traiter
116
			switch ($colonne) {  // On ne garde que les colonnes que l'on souhaite traiter
98
				case COMMUNE:
117
				case COMMUNE:
99
				case LIEUDIT:
118
				case LIEUDIT:
100
				case STATION:
119
				case STATION:
101
				case MILIEU:
120
				case MILIEU:
102
				case LATITUDE:
121
				case LATITUDE:
103
				case LONGITUDE:
122
				case LONGITUDE:
104
				case NOTES:
123
				case NOTES:
105
				case DATEOBS:
124
				case DATEOBS:
106
				case ESPECE:
125
				case ESPECE:
107
				case IMAGE:
126
				case IMAGE:
108
					$selection=array_values($arr[$col]);
127
					$selection=array_values($arr[$col]);
109
					array_shift($selection); // On ne garde pas la premiere ligne, qui contient les intitules
128
					array_shift($selection); // On ne garde pas la premiere ligne, qui contient les intitules
110
					$line[$colonne]=$selection;
129
					$line[$colonne]=$selection;
111
					break;
130
					break;
112
 
131
 
113
			}
132
			}
114
		} 
133
		} 
115
 
134
 
116
	/*	
135
	/*	
117
		print_r($line[COMMUNE]);
136
		print_r($line[COMMUNE]);
118
		print_r($line[LIEUDIT]);
137
		print_r($line[LIEUDIT]);
119
		print_r($line[STATION]);
138
		print_r($line[STATION]);
120
		print_r($line[MILIEU]);
139
		print_r($line[MILIEU]);
121
		print_r($line[LATITUDE]);
140
		print_r($line[LATITUDE]);
122
		print_r($line[LONGITUDE]);
141
		print_r($line[LONGITUDE]);
123
		print_r($line[NOTES]);
142
		print_r($line[NOTES]);
124
		print_r($line[DATEOBS]);
143
		print_r($line[DATEOBS]);
125
		print_r($line[ESPECE]);
144
		print_r($line[ESPECE]);
126
		print_r($line[IMAGE]);
145
		print_r($line[IMAGE]);
127
	*/
146
	*/
128
 
147
 
129
// 1 : Traitement lignes
148
// 1 : Traitement lignes
130
 
149
 
131
		for ($i=0;$i<=$colcount-1;$i++) {
150
		for ($i=0;$i<=$rowcount-1;$i++) {
132
			// On saute les lignes vides 
151
			// On saute les lignes vides du debut et les lignes contenant des information sur image uniquement
-
 
152
			while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) {
-
 
153
				if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
-
 
154
	//				print "image non rattachee a une observation";
-
 
155
				}
133
			while (($this->analyserLigne($line,$i)==LIGNE_VIDE) && ($i<=$colcount)) {
156
				else {
-
 
157
	//				print "vide";
134
				print "vide";
158
				}
135
				$i++;
159
				$i++;
136
			}
160
			}
137
			while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$colcount)) {
161
			while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$rowcount)) {
138
				$this->traiterLigne($line,$i);
162
				$ordre=$this->traiterLigne($line,$i,$pairs['utilisateur']);
-
 
163
				$i++;
139
				$i++;
164
				// On saute les lignes vide ou on traite les lignes suivantes contenant des informations sur image seulement
140
				while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$colcount)) {
165
				while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) {
141
					if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
166
					if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
142
						$this->traiterLigneComplement($line,$i);
167
						$this->traiterLigneComplement($line,$i,$pairs['utilisateur'],$ordre); // images supplementaires
143
					}
168
					}
144
					else {
169
					else {
145
						print "vide";
170
	//					print "vide";
146
					}
171
					}
147
					$i++;
172
					$i++;
148
				}	
173
				}	
149
			}
174
			}
150
			
-
 
151
			// Cas special : seul l'image est presente
175
			
152
	
176
	
153
		}
177
		}
154
 
178
 
155
	}
179
	}
156
 
180
 
157
function analyserLigne($line,$i) {
181
function analyserLigne($line,$i) {
158
	$ligne_vide=true;
182
	$ligne_vide=true;
159
	$ligne_image_seulement=true;
183
	$ligne_image_seulement=true;
160
	$ligne_normale=true;
184
	$ligne_normale=true;
161
	foreach ($this->format_observation as $colonne) {
185
	foreach ($this->format_observation as $colonne) {
162
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
186
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
163
			if ($colonne!=IMAGE) {
187
			if ($colonne!=IMAGE) {
164
				$ligne_image_seulement=false;
188
				$ligne_image_seulement=false;
165
				$ligne_vide=false;
189
				$ligne_vide=false;
166
				break;
190
				break;
167
			}		
191
			}		
168
			$ligne_vide=false;
192
			$ligne_vide=false;
169
		}
193
		}
170
	}
194
	}
171
	if ($ligne_vide) {
195
	if ($ligne_vide) {
172
		return LIGNE_VIDE;
196
		return LIGNE_VIDE;
173
	}
197
	}
174
	else {
198
	else {
175
		if ($ligne_image_seulement) {
199
		if ($ligne_image_seulement) {
176
			return LIGNE_IMAGE_SEULEMENT;
200
			return LIGNE_IMAGE_SEULEMENT;
177
		}
201
		}
178
		else {
202
		else {
179
			return LIGNE_NORMALE;
203
			return LIGNE_NORMALE;
180
		}
204
		}
181
	}
205
	}
182
	
206
	
183
 
207
 
184
}
208
}
185
 
209
 
-
 
210
function traiterLigne($line,$i,$utilisateur) { // Controle donnee et insertion
186
function traiterLigne($line,$i) {
211
	$info_image=array();
187
	foreach ($this->format_observation as $colonne) {
212
	foreach ($this->format_observation as $colonne) {
188
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
213
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
189
			switch ($colonne) {  // On ne garde que les colonnes que l'on souhaite traiter
214
			switch ($colonne) {  // On ne garde que les colonnes que l'on souhaite traiter
190
				case COMMUNE:
215
				case COMMUNE:
191
					$info_commune=$this->traiterCommune($line[COMMUNE][$i]);
216
					$info_commune=$this->traiterCommune($line[COMMUNE][$i]);
192
					echo $info_commune['name'];	
-
 
193
					echo $info_commune['code'];	
-
 
194
					break;
217
					break;
195
				case LIEUDIT:
218
				case LIEUDIT:
196
					$this->traiterLieudit($line[LIEUDIT][$i]);
219
					$info_lieudit=$this->traiterLieudit($line[LIEUDIT][$i]);
197
					break;
220
					break;
198
				case STATION:
221
				case STATION:
199
					$this->traiterStation($line[STATION][$i]);
222
					$info_station=$this->traiterStation($line[STATION][$i]);
200
					break;
223
					break;
201
				case MILIEU:
224
				case MILIEU:
202
					$this->traiterMilieu($line[MILIEU][$i]);
225
					$info_milieu=$this->traiterMilieu($line[MILIEU][$i]);
203
					break;
226
					break;
204
				case LATITUDE:
227
				case LATITUDE:
205
					$this->traiterLatitude($line[LATITUDE][$i]);
228
					$info_latitude=$this->traiterLatitude($line[LATITUDE][$i]);
206
					break;
229
					break;
207
				case LONGITUDE:
230
				case LONGITUDE:
208
					$this->traiterLongitude($line[LONGITUDE][$i]);
231
					$info_longitude=$this->traiterLongitude($line[LONGITUDE][$i]);
209
					break;
232
					break;
210
				case NOTES:
233
				case NOTES:
211
					$this->traiterNotes($line[NOTES][$i]);
234
					$info_notes=$this->traiterNotes($line[NOTES][$i]);
212
					break;
235
					break;
213
				case DATEOBS:
236
				case DATEOBS:
214
					$this->traiterDateObs($line[DATEOBS][$i]);
237
					$info_dateobs=$this->traiterDateObs($line[DATEOBS][$i]);
215
					break;
238
					break;
216
				case ESPECE:
239
				case ESPECE:
217
					$this->traiterEspece($line[ESPECE][$i]);
240
					$info_espece=$this->traiterEspece($line[ESPECE][$i]);
-
 
241
					if (isset($info_espece['en_id_nom']) && $info_espece['en_id_nom']!='') {
-
 
242
						$complement=$this->rechercherInformationsComplementaires($info_espece['en_id_nom']);
-
 
243
						$info_espece['nom_ret']=$complement['Nom_Retenu'];
-
 
244
	        	                        $info_espece['num_nom_ret']=$complement['Num_Nom_Retenu'];
-
 
245
        	        	                $info_espece['num_taxon']=$complement['Num_Taxon'];
-
 
246
                	        	        $info_espece['famille']=$complement['Famille'];
-
 
247
					}
-
 
248
 
-
 
249
 
218
					break;
250
					break;
219
				case IMAGE:
251
				case IMAGE:
220
					$this->traiterImage($line[IMAGE][$i]);
252
					$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur
221
					break;
253
					break;
222
			}
254
			}
223
			print "\n";
-
 
224
		}
255
		}
-
 
256
		else {	
-
 
257
		 	switch($colonne) {
-
 
258
				case COMMUNE:
-
 
259
					$info_commune['name']="000null";
-
 
260
					$info_commune['code']="000null";
-
 
261
					break;
-
 
262
				case LIEUDIT:
-
 
263
					$info_lieudit="000null";
-
 
264
					break;
-
 
265
				case STATION:
-
 
266
					$info_station="000null";
-
 
267
					break;
-
 
268
				case MILIEU:
-
 
269
					$info_milieu="000null";
-
 
270
					break;
-
 
271
				case LATITUDE:
-
 
272
					$info_latitude="000null";
-
 
273
					break;
-
 
274
				case LONGITUDE:
-
 
275
					$info_longitude="000null";
-
 
276
					break;
-
 
277
 
-
 
278
			}
-
 
279
 
-
 
280
		}
-
 
281
	}
-
 
282
 
-
 
283
                // Dernier numero d'ordre utilise :
-
 
284
 
-
 
285
                $DB=$this->connectDB($this->config,'database_cel'); // TODO / a garder en memoire pour eviter appels mutliples
-
 
286
                $query="SELECT MAX(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($utilisateur)."' ";
-
 
287
 
-
 
288
                $res =& $DB->query($query);
-
 
289
                if (DB::isError($res)) {
-
 
290
                        die($res->getMessage());
-
 
291
                }
-
 
292
                $ordre=0;
-
 
293
 
-
 
294
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
-
 
295
                    $ordre=$row['ordre']+1;
-
 
296
                }
-
 
297
 
-
 
298
                list($jour,$mois,$annee)=split("/",$info_dateobs);
-
 
299
                $info_dateobs=$annee."-".$mois."-".$jour." 0:0:0";
-
 
300
 
-
 
301
 
-
 
302
	 $query  = "INSERT INTO cel_inventory (identifiant,ordre,nom_sel,num_nom_sel,nom_ret,num_nom_ret,num_taxon,famille,location,id_location,date_observation,lieudit,station, milieu, commentaire, date_creation,date_modification,coord_x,coord_y) " .
-
 
303
                " VALUES('".$DB->escapeSimple($utilisateur)."','".
-
 
304
                $DB->escapeSimple($ordre)."','".
-
 
305
                $DB->escapeSimple($info_espece['nom_sel'])."','".
-
 
306
                $DB->escapeSimple($info_espece['en_id_nom'])."','".
-
 
307
                $DB->escapeSimple($info_espece['nom_ret'])."','".
-
 
308
                $DB->escapeSimple($info_espece['num_nom_ret'])."','".
-
 
309
                $DB->escapeSimple($info_espece['num_taxon'])."','".
-
 
310
                $DB->escapeSimple($info_espece['famille'])."','".
-
 
311
                $DB->escapeSimple($info_commune['name'])."','".
-
 
312
                $DB->escapeSimple($info_commune['code'])."','".
-
 
313
                $DB->escapeSimple($info_dateobs)."','".
-
 
314
                $DB->escapeSimple($info_lieudit)."','".
-
 
315
                $DB->escapeSimple($info_station)."','".
-
 
316
                $DB->escapeSimple($info_milieu)."','".
-
 
317
                $DB->escapeSimple($info_notes)."',".
-
 
318
                "now() , now(),'".
-
 
319
                $DB->escapeSimple($info_latitude)."','".
-
 
320
                $DB->escapeSimple($info_longitude)."')";
-
 
321
//		print $query;
-
 
322
//		print "\n";
-
 
323
 
-
 
324
 
-
 
325
		   $res =& $DB->query($query);
-
 
326
 
-
 
327
                if (PEAR::isError($res)) {
-
 
328
                        return false;
-
 
329
                }
-
 
330
		
-
 
331
 
-
 
332
	// creation lien image
-
 
333
	foreach ($info_image as $pic) {
-
 
334
 
-
 
335
		$query = 'INSERT INTO cel_obs_images (coi_ce_image, coi_ce_utilisateur, coi_ce_observation) VALUES ("'.$DB->escapeSimple($pic['ci_id_image']).'","'.$DB->escapeSimple($utilisateur).'",    "'.$DB->escapeSimple($ordre).'") ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ;	
-
 
336
	
-
 
337
//print $query;
-
 
338
 
-
 
339
		$res =& $DB->query($query);
-
 
340
 
-
 
341
                if (PEAR::isError($res)) {
-
 
342
                        return false;
-
 
343
                }
-
 
344
		
-
 
345
 
225
	}
346
	}
-
 
347
 
-
 
348
 
-
 
349
 
-
 
350
		return $ordre;
-
 
351
 
226
 
352
 
227
}
353
}
228
 
-
 
-
 
354
 
229
function traiterLigneComplement($line,$i) {
355
function traiterLigneComplement($line,$i,$utilisateur) {
230
	$this->traiterImage($line[IMAGE][$i]);
356
 
231
	print "\n";
357
// TODO
232
 
358
 
233
}
359
}
234
function traiterCommune($identifiant_commune) {  // Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee
360
function traiterCommune($identifiant_commune) {  // Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee
235
 
361
 
236
 
-
 
237
	echo "traitement commune";
362
 
238
 
363
 
239
        $identifiant_commune=ltrim($identifiant_commune);
364
        $identifiant_commune=ltrim($identifiant_commune);
240
 
365
 
241
        $identifiant_commune=utf8_encode($identifiant_commune); // FIXME : devrait deja etre en utf8 a ce niveau
366
        $identifiant_commune=utf8_encode($identifiant_commune); // FIXME : devrait deja etre en utf8 a ce niveau
242
 
367
 
243
	preg_match('/(.*)\((.*)\)/',$identifiant_commune,$elements);
368
	preg_match('/(.*)\((.*)\)/',$identifiant_commune,$elements);
244
 
369
 
245
        $DB=$this->connectDB($this->config,'database_cel'); // FIXME regarder si opportun ici
370
        $DB=$this->connectDB($this->config,'database_cel'); // FIXME regarder si opportun ici
246
 
371
 
247
	if ($elements[1]) { // departement present
372
	if ($elements[1]) { // departement present
248
		$nom_commune=$elements[1];
373
		$nom_commune=$elements[1];
249
		$code_commune=$elements[2];
374
		$code_commune=$elements[2];
250
 
375
 
251
 	        $query="SELECT DISTINCT name, code  FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."%' AND code ='".$DB->escapeSimple($code_commune)."'";
376
 	        $query="SELECT DISTINCT name, code  FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."' AND code ='".$DB->escapeSimple($code_commune)."'";
252
 
377
 
253
	}
378
	}
254
	else {
379
	else {
255
		preg_match('/([0-9][0-9])|(2A[0-9][0-9]*)|(2B[0-9][0-9]*)/',$identifiant_commune,$elements);
380
		preg_match('/([0-9][0-9])|(2A[0-9][0-9]*)|(2B[0-9][0-9]*)/',$identifiant_commune,$elements);
256
		if ($elements[1]) { // code insee  commune
381
		if ($elements[1]) { // code insee  commune
257
			$code_insee_commune=$elements[1];
382
			$code_insee_commune=$elements[1];
258
 	        	$query="SELECT DISTINCT name, code  FROM locations WHERE insee_code ='".$DB->escapeSimple($code_insee_commune)."'";
383
 	        	$query="SELECT DISTINCT name, code  FROM locations WHERE insee_code ='".$DB->escapeSimple($code_insee_commune)."'";
259
		}	
384
		}	
260
		else {
385
		else {
261
		preg_match('/(.*)/',$identifiant_commune,$elements);
386
		preg_match('/(.*)/',$identifiant_commune,$elements);
262
			if ($elements[1]) { // commune 
387
			if ($elements[1]) { // commune 
263
				$nom_commune=$elements[1];
388
				$nom_commune=$elements[1];
264
	 	        	$query="SELECT DISTINCT name, code  FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."'";
389
	 	        	$query="SELECT DISTINCT name, code  FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."'";
265
			}
390
			}
266
		}
391
		}
267
	}
392
	}
268
 
393
 
269
	
394
	
270
	$res =& $DB->query($query);
395
	$res =& $DB->query($query);
271
 
396
 
272
        if (DB::isError($res)) {
397
        if (DB::isError($res)) {
273
		 die($res->getMessage());
398
		 die($res->getMessage());
274
	}
399
	}
275
 
400
 
276
	return $res->fetchrow(DB_FETCHMODE_ASSOC);
401
	return $res->fetchrow(DB_FETCHMODE_ASSOC);
277
 
402
 
278
	
403
	
279
 
404
 
280
 
405
 
281
}
406
}
282
 
407
 
283
function traiterLieudit($lieudit) { // texte libre
408
function traiterLieudit($lieudit) { // texte libre
284
 
409
 
-
 
410
	//echo "traitement lieudit";
285
	echo "traitement lieudit";
411
 
286
	return utf8_encode(ltrim($lieudit));
412
	return utf8_encode(ltrim($lieudit));
287
}
413
}
288
 
414
 
289
function traiterStation($station) { // texte libre
415
function traiterStation($station) { // texte libre
290
	echo "traitement station";
416
//	echo "traitement station";
291
	return utf8_encode(ltrim($station));
417
	return utf8_encode(ltrim($station));
292
}
418
}
293
 
419
 
294
function traiterMilieu($milieu) { // texte libre
420
function traiterMilieu($milieu) { // texte libre
295
	echo "traitement milieu";
421
//	echo "traitement milieu";
296
	return utf8_encode(ltrim($milieu));
422
	return utf8_encode(ltrim($milieu));
297
}
423
}
298
 
424
 
299
function traiterLatitude($latitude) {	//  verifier formal decimal + limite france ? TODO 
425
function traiterLatitude($latitude) {	//  verifier formal decimal + limite france ? TODO 
300
	echo "traitement latitude";
426
//	echo "traitement latitude";
301
	return ltrim($latitude);
427
	return ltrim($latitude);
302
}
428
}
303
 
429
 
304
function traiterLongitude($longitude) { // verifier format decimal + limite france ? TODO 
430
function traiterLongitude($longitude) { // verifier format decimal + limite france ? TODO 
305
	echo "traitement longitude";
431
//	echo "traitement longitude";
306
	return ltrim($longitude);
432
	return ltrim($longitude);
307
}
433
}
308
 
434
 
309
function traiterNotes($notes) { // texte libre
435
function traiterNotes($notes) { // texte libre
310
	echo "traitement notes";
436
//	echo "traitement notes";
311
	return utf8_encode(ltrim($notes));
437
	return utf8_encode(ltrim($notes));
312
}
438
}
313
 
439
 
314
function traiterDateObs($dateobs) { // verifier jj/mm/aaaa sinon date vide TODO 
440
function traiterDateObs($dateobs) { // verifier jj/mm/aaaa sinon date vide TODO 
315
	echo "traitement dateobs";
441
//	echo "traitement dateobs";
316
	return ltrim($notes);
442
	return ltrim($dateobs);
317
}
443
}
318
 
444
 
319
function traiterEspece($identifiant_espece) {  // texte libre, nom scientifique , ou code nomenclatural (format BDNFFnn999999)
445
function traiterEspece($identifiant_espece) {  // texte libre, nom scientifique , ou code nomenclatural (format BDNFFnn999999)
320
 
446
 
321
	echo "traitement  espece";
447
//	echo "traitement  espece";
322
        $identifiant_espece=ltrim($identifiant_espece);
448
        $identifiant_espece=ltrim($identifiant_espece);
323
 
449
 
324
        $identifiant_espece=utf8_encode($identifiant_espece); // FIXME : devrait deja etre en utf8 a ce niveau
450
        $identifiant_espece=utf8_encode($identifiant_espece); // FIXME : devrait deja etre en utf8 a ce niveau
325
 
451
 
326
	preg_match('/BDNFFnn([0-9][0-9]*)/',$identifiant_espece,$elements);
452
	preg_match('/BDNFFnn([0-9][0-9]*)/',$identifiant_espece,$elements);
327
 
453
 
328
		if ($elements[1]) { // Numero nomenclatural 
454
		if ($elements[1]) { // Numero nomenclatural 
329
 
-
 
-
 
455
 
-
 
456
 
330
	 	$DB=$this->connectDB($this->config);
457
// Recherche du nom associe
331
 
458
                        $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
332
                    $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
459
                                      $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
333
                                        "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
460
                                        "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
334
                                        " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
461
                                        " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
335
                                        " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
462
                                        " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
336
                                        " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
463
                                        " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
337
                                        " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
464
                                        " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
338
                                        " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
465
                                        " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
339
                                        "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
466
                                        "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
340
                                            "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
467
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
341
                                            "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
468
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
342
                                            "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
469
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
343
                             " WHERE a.esn_id_nom= '".$elements[1]. "'".
470
				     	" WHERE a.esn_id_nom= '".$elements[1]. "'".
344
                             " AND a.esn_id_version_projet_taxon = 25 ".
471
					" AND a.esn_id_version_projet_taxon = 25 ".
345
                             " AND en_ce_rang = enrg_id_rang" .
472
				    	" AND en_ce_rang = enrg_id_rang" .
346
                             " AND en_id_nom = a.esn_id_nom" .
473
				     	" AND en_id_nom = a.esn_id_nom" .
347
                             " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
474
				     	" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
348
	                     " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
475
				        " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
349
        	             " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
476
		                        " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
350
                	     " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
477
                   		        " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
351
                             " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
478
                                        " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
479
		
-
 
480
				    	$res =& $DB->query($query);
-
 
481
 
-
 
482
 
-
 
483
					if (DB::isError($res)) {
-
 
484
						die($res->getMessage());
-
 
485
					}
-
 
486
 
-
 
487
					$row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
488
		 			return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$elements[1]);
-
 
489
 
352
		}
490
		}
353
 
491
 
354
		else { // Nom scientifique
492
		else { // Nom scientifique
355
 
493
 
356
 
494
 
357
			$decoupageNomLatin=new DecoupageNomLatin();
495
			$decoupageNomLatin=new DecoupageNomLatin();
358
			$nom_latin_decoupe=$decoupageNomLatin->decouper($identifiant_espece);
496
			$nom_latin_decoupe=$decoupageNomLatin->decouper($identifiant_espece);
359
			print_r($nom_latin_decoupe);
-
 
360
			
497
			
361
/*
498
/*
362
 
499
 
363
    [nom_genre] => Acer
500
    [nom_genre] => Acer
364
    [nom_sp] => monspessulanum
501
    [nom_sp] => monspessulanum
365
    [auteur_sp] => 
502
    [auteur_sp] => 
366
    [nom_complement] => 
503
    [nom_complement] => 
367
    [type_infrasp] => 
504
    [type_infrasp] => 
368
    [nom_infrasp] => 
505
    [nom_infrasp] => 
369
    [num_nomenc] => 
506
    [num_nomenc] => 
370
    [num_taxo] => 
507
    [num_taxo] => 
371
    [rang_taxonomique] => 250
508
    [rang_taxonomique] => 250
372
    [nom_courant] => monspessulanum
509
    [nom_courant] => monspessulanum
373
    [nom_superieur] => Acer
510
    [nom_superieur] => Acer
374
    [agg] => 
511
    [agg] => 
375
    [nom_complet] => Acer monspessulanum
512
    [nom_complet] => Acer monspessulanum
376
 
513
 
377
/*
514
/*
378
 
515
 
379
  [nom_genre] => Acer
516
  [nom_genre] => Acer
380
    [nom_sp] => monspessulanum
517
    [nom_sp] => monspessulanum
381
    [auteur_sp] => 
518
    [auteur_sp] => 
382
    [nom_complement] => 
519
    [nom_complement] => 
383
    [type_infrasp] => subsp.
520
    [type_infrasp] => subsp.
384
    [nom_infrasp] => monspessulanum
521
    [nom_infrasp] => monspessulanum
385
    [num_nomenc] => 
522
    [num_nomenc] => 
386
    [num_taxo] => 
523
    [num_taxo] => 
387
    [rang_taxonomique] => 280
524
    [rang_taxonomique] => 280
388
    [nom_courant] => monspessulanum
525
    [nom_courant] => monspessulanum
389
    [nom_superieur] => monspessulanum
526
    [nom_superieur] => monspessulanum
390
    [agg] => 
527
    [agg] => 
391
    [nom_complet] => Acer monspessulanum subsp. monspessulanum
528
    [nom_complet] => Acer monspessulanum subsp. monspessulanum
392
 
529
 
393
*/
530
*/
394
/*
-
 
-
 
531
 
-
 
532
 
-
 
533
        		$DB=$this->connectDB($this->config); // FIXME regarder si opportun ici
-
 
534
 
-
 
535
                      	$query="SELECT DISTINCT en_id_nom" .
-
 
536
                                        " FROM eflore_nom, eflore_nom_rang " .
-
 
537
                                        " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['nom_genre'])."' " .
-
 
538
                                        " AND en_ce_rang = '".$DB->escapeSimple($nom_latin_decoupe['rang_taxonomique'])."' " ;
-
 
539
					if (isset($nom_latin_decoupe['nom_infrasp']) && $nom_latin_decoupe['nom_infrasp']!="") {
-
 
540
						$query.=" AND en_epithete_infra_specifique = '".$DB->escapeSimple($nom_latin_decoupe['nom_infrasp'])."' " ;
-
 
541
					}
-
 
542
                                        $query.=" AND en_epithete_espece =  '".$DB->escapeSimple($nom_latin_decoupe['nom_sp'])."' AND en_ce_rang = enrg_id_rang " .
-
 
543
                                        " LIMIT 1";
-
 
544
 
-
 
545
 
-
 
546
			}
-
 
547
 
-
 
548
			$res =& $DB->query($query);
-
 
549
 
-
 
550
			if (DB::isError($res)) {
-
 
551
				 die($res->getMessage());
-
 
552
			}
-
 
553
 
-
 
554
			$id_nom=$res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
555
 
395
 
556
			// Recherche du nom associe
396
 
557
                        $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
397
                      	$query="SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
558
                                      $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
398
                                        "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
559
                                        "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
399
                                        " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
560
                                        " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
400
                                        " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
561
                                        " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
401
                                        " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
562
                                        " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
402
                                        " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom, esn_ce_statut" .
563
                                        " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
403
                                        " FROM eflore_nom, eflore_nom_rang, " .
564
                                        " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
404
                                        "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
565
                                        "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
405
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
566
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
406
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
567
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
407
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
568
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
408
                                "   , eflore_selection_nom".
569
				     	" WHERE a.esn_id_nom= '".$id_nom['en_id_nom']. "'".
409
                                        " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['nom_genre'])."' " .
570
					" AND a.esn_id_version_projet_taxon = 25 ".
410
                                        " AND en_ce_rang = '".$DB->escapeSimple($nom_latin_decoupe['rang_taxonomique'])."' " .
571
				    	" AND en_ce_rang = enrg_id_rang" .
411
                                        " AND en_epithete_espece =  '".$DB->escapeSimple($nom_latin_decoupe['nom_sp'])."' AND en_ce_rang = enrg_id_rang " .
572
				     	" AND en_id_nom = a.esn_id_nom" .
412
                                        " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
573
				     	" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
413
                                        " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
574
				        " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
414
                                        " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
575
		                        " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
415
                                        " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
576
                   		        " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
416
                                        " AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
577
                                        " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
417
                                        " AND esn_id_nom= en_id_nom ".
578
				$res =& $DB->query($query);
418
                                        " ORDER BY esn_ce_statut, en_ce_rang, en_epithete_espece, en_nom_genre LIMIT 50";
-
 
419
 
579
 
-
 
580
 
-
 
581
					if (DB::isError($res)) {
420
*/
582
						die($res->getMessage());
-
 
583
					}
-
 
584
 
-
 
585
					$row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
586
		 			return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$id_nom['en_id_nom']);
-
 
587
 
-
 
588
 
-
 
589
 
421
			}
590
	
422
 
591
 
423
}
592
}
424
 
593
 
425
 
594
 
426
 
595
 
-
 
596
function traiterImage($images,$utilisateur) { // recherche id image de ce nom 
427
function traiterImage($image) { // recherche id image de ce nom et creation table correspondance
597
 
-
 
598
	//echo "traitement  image";
-
 
599
        $DB=$this->connectDB($this->config,'cel_db');
-
 
600
 
-
 
601
	$liste_images = explode("/",$images) ;
-
 
602
 
-
 
603
	$row =array();
-
 
604
        foreach($liste_images as $image) {
-
 
605
 
-
 
606
		$query="SELECT * FROM cel_images WHERE ci_ce_utilisateur='".$DB->escapeSimple($utilisateur)."' AND ci_nom_original='".$DB->escapeSimple($image)."'";
-
 
607
 
-
 
608
	        $res  =& $DB->query($query);
-
 
609
		$row [] =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
610
 
-
 
611
	        if (DB::isError($res)) {
-
 
612
        	    die($res->getMessage());
-
 
613
	        }
-
 
614
 
-
 
615
	}
-
 
616
	return $row;
-
 
617
 
428
	echo "traitement  image";
618
 
429
}
619
}
430
 
620
 
431
 
621
 
432
// utilitaire : FIXME mutualiser avec autres scripts
622
// utilitaire : FIXME mutualiser avec autres scripts
-
 
623
 
-
 
624
       function rechercherInformationsComplementaires($numNom) {
-
 
625
 
-
 
626
                $DB=$this->connectDB($this->config);
-
 
627
 
-
 
628
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
629
                                                        "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
630
                                        " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
-
 
631
                                        " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
-
 
632
                                        " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
-
 
633
                             " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, b.esn_id_taxon, b.esn_id_nom" .
-
 
634
                             " FROM eflore_nom, eflore_nom_rang," .
-
 
635
                                                "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
636
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
637
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
-
 
638
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
639
                             " ,eflore_selection_nom a, eflore_selection_nom b".
-
 
640
                             " WHERE a.esn_id_nom= ".$numNom.
-
 
641
                             " AND a.esn_id_version_projet_taxon = 25 ".
-
 
642
                             " AND a.esn_id_taxon=b.esn_id_taxon ".
-
 
643
                             " AND b.esn_ce_statut=3 ".
-
 
644
                             " AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
-
 
645
                             " AND en_ce_rang = enrg_id_rang" .
-
 
646
                             " AND en_id_nom = b.esn_id_nom" .
-
 
647
                             " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
-
 
648
                         " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
-
 
649
                         " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
-
 
650
                     " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
-
 
651
                             " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
652
 
-
 
653
 
-
 
654
           $res =& $DB->query($query);
-
 
655
 
-
 
656
 
-
 
657
 
-
 
658
        if (DB::isError($res)) {
-
 
659
                die($res->getMessage());
-
 
660
        }
-
 
661
 
-
 
662
                // Nom retenu, Num Nomen nom retenu, Num Taxon,
-
 
663
                                                                                // Famille
-
 
664
 
-
 
665
                $value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>"");
-
 
666
 
-
 
667
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
-
 
668
                        $fam=$this->rechercherFamille($row['esn_id_taxon'],$DB);
-
 
669
                while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) {
-
 
670
                        $fam=$this->rechercherFamille($fam['etr_id_taxon_2'],$DB);
-
 
671
                }
-
 
672
                if ($fam['en_ce_rang']==120) {
-
 
673
                        $famille=$fam['en_nom_supra_generique'];
-
 
674
                }
-
 
675
                else {
-
 
676
                        $famille="Famille inconnue";
-
 
677
                }
-
 
678
                $value=array('Nom_Retenu'=>$this->formaterNom($row),'Num_Nom_Retenu'=>$row['esn_id_nom'],'Num_Taxon'=>$row['esn_id_taxon'],'Famille'=>$famille);
-
 
679
 
-
 
680
 
-
 
681
            }
-
 
682
 
-
 
683
            return $value;
-
 
684
 
-
 
685
 
-
 
686
 
-
 
687
        }
433
 
688
 
-
 
689
function formaterNom($rawnom) {
-
 
690
 
434
function formaterNom($rawnom) {
691
 
435
                // Constitution du nom:
692
                // Constitution du nom:
436
                $nom = '';
693
                $nom = '';
437
 
694
 
438
                if ($rawnom['en_nom_supra_generique'] != '') {
695
                if ($rawnom['en_nom_supra_generique'] != '') {
439
                    $nom .= $rawnom['en_nom_supra_generique'];
696
                    $nom .= $rawnom['en_nom_supra_generique'];
440
                } else if ($rawnom['en_epithete_infra_generique'] != '') {
697
                } else if ($rawnom['en_epithete_infra_generique'] != '') {
441
                    $nom .= $rawnom['en_epithete_infra_generique'];
698
                    $nom .= $rawnom['en_epithete_infra_generique'];
442
                } else {
699
                } else {
443
                        if ($rawnom['en_nom_genre'] != '') {
700
                        if ($rawnom['en_nom_genre'] != '') {
444
                            $nom .=  $rawnom['en_nom_genre'];
701
                            $nom .=  $rawnom['en_nom_genre'];
445
                        }
702
                        }
446
                        if ($rawnom['en_epithete_espece']!= '') {
703
                        if ($rawnom['en_epithete_espece']!= '') {
447
                            $nom .= ' '.$rawnom['en_epithete_espece'];
704
                            $nom .= ' '.$rawnom['en_epithete_espece'];
448
                        }
705
                        }
449
                        if ($rawnom['en_epithete_infra_specifique'] != '') {
706
                        if ($rawnom['en_epithete_infra_specifique'] != '') {
450
                                if (!empty($rawnom['enrg_abreviation_rang'])) {
707
                                if (!empty($rawnom['enrg_abreviation_rang'])) {
451
                                        $nom .= ' '.$rawnom['enrg_abreviation_rang'].'';
708
                                        $nom .= ' '.$rawnom['enrg_abreviation_rang'].'';
452
                                }
709
                                }
453
                                $nom .= ' '.$rawnom['en_epithete_infra_specifique'];
710
                                $nom .= ' '.$rawnom['en_epithete_infra_specifique'];
454
                        }
711
                        }
455
 
712
 
456
                }
713
                }
-
 
714
 
457
                return $nom.$this->retournerAuteur($rawnom) ;
715
                return $nom .$this->retournerAuteur($rawnom) ;
-
 
716
 
-
 
717
 }
-
 
718
 
-
 
719
 
-
 
720
function rechercherFamille($taxon,&$DB) {
-
 
721
 
-
 
722
        $row=array();
-
 
723
 
-
 
724
        $query="SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ".
-
 
725
        " FROM eflore_taxon_relation, eflore_selection_nom, eflore_nom ".
-
 
726
        " WHERE etr_id_taxon_1 = ".$taxon.
-
 
727
        " AND etr_id_version_projet_taxon_1 = 25 ".
-
 
728
        " AND etr_id_categorie_taxon = 3 ".
-
 
729
        " AND etr_id_valeur_taxon = 3 ".
-
 
730
        " AND esn_id_taxon =  etr_id_taxon_2 ".
-
 
731
        " AND esn_ce_statut = 3 ".
-
 
732
        " AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 ".
-
 
733
        " AND en_id_nom = esn_id_nom ".
-
 
734
        " AND esn_id_version_projet_taxon=en_id_version_projet_nom  ";
-
 
735
        $res =& $DB->query($query);
-
 
736
 
-
 
737
        if (DB::isError($res)) {
-
 
738
         die($res->getMessage());
-
 
739
        }
-
 
740
 
-
 
741
        if ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
-
 
742
                return $row;
-
 
743
    }
-
 
744
    else {
-
 
745
        $row['en_ce_rang']='fin';
-
 
746
        return $row;
-
 
747
    }
-
 
748
 
458
}
749
}
-
 
750
 
459
 
751
 
460
function retournerAuteur($rawnom) {
752
function retournerAuteur($rawnom) {
461
	$auteurs = '';
753
                $auteurs = '';
462
	$auteur_basio = '';
754
                $auteur_basio = '';
463
	$auteur_modif = '';
755
                $auteur_modif = '';
464
	if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' )  {
756
                if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' )  {
465
	    $auteur_basio .= $rawnom['abreviation_auteur_basio_ex'];
757
                    $auteur_basio .= $rawnom['abreviation_auteur_basio_ex'];
466
	    if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
758
                    if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
467
		$auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio'];
759
                        $auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio'];
468
	    }
760
                    }
469
	} else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
761
                } else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
470
	    $auteur_basio .= $rawnom['abreviation_auteur_basio'];
-
 
471
	}
-
 
472
 
-
 
473
	if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') {
-
 
474
	    $auteur_modif .= $rawnom['abreviation_auteur_modif_ex'];
-
 
475
	    if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {
-
 
476
		$auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif'];
762
                    $auteur_basio .= $rawnom['abreviation_auteur_basio'];
477
	    }
-
 
478
	} else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-')  {
-
 
479
	    $auteur_modif .= $rawnom['abreviation_auteur_modif'];
-
 
480
	}
-
 
481
 
-
 
482
	if (!empty($auteur_modif)) {
-
 
483
	    $auteurs = ' ('.$auteur_basio.') '.$auteur_modif;
-
 
484
	} elseif (!empty($auteur_basio)) {
-
 
485
	    $auteurs = ' '.$auteur_basio;
-
 
-
 
763
                }
-
 
764
 
-
 
765
                if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') {
-
 
766
                    $auteur_modif .= $rawnom['abreviation_auteur_modif_ex'];
-
 
767
                    if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {
-
 
768
                        $auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif'];
-
 
769
                    }
-
 
770
                } else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-')  {
-
 
771
                    $auteur_modif .= $rawnom['abreviation_auteur_modif'];
-
 
772
                }
-
 
773
 
-
 
774
                if (!empty($auteur_modif)) {
-
 
775
                    $auteurs = ' ('.$auteur_basio.') '.$auteur_modif;
-
 
776
                } elseif (!empty($auteur_basio)) {
-
 
777
                    $auteurs = ' '.$auteur_basio;
486
	}
778
                }
487
 
779
 
-
 
780
                return $auteurs ;
488
	return $auteurs ;
781
}
489
}
782
 
490
 
783
 
491
 
784
 
492
 
785
 
493
}
786
}
494
 
787
 
495
 
788
 
496
 
789
 
497
/* +--Fin du code ---------------------------------------------------------------------------------------+
790
/* +--Fin du code ---------------------------------------------------------------------------------------+
498
* $Log$
791
* $Log$
499
*
792
*
500
*
793
*
501
*/
794
*/
502
 
795
 
503
 
796
 
504
?>
797
?>