Subversion Repositories eFlore/Applications.cel

Rev

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

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