Subversion Repositories eFlore/Applications.cel

Rev

Rev 1147 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1147 Rev 1321
Line 1... Line 1...
1
<?php
1
<?php
2
// In : utf8
2
// In : utf8
3
// Out : utf8
3
// Out : utf8
Line 4... Line -...
4
 
-
 
5
 
-
 
6
// TODO : traiter image multilignes
4
 
Line 7... Line 5...
7
// TODO : doublons
5
// TODO : doublons
8
 
-
 
9
/*
6
 
10
 
7
/**
11
Octobre 2010 David Delon.
8
Octobre 2010 David Delon.
Line 12... Line 9...
12
Import d'observations dans le carnet en ligne à partir d'un fichier excel chargé par l'utilisateur
9
Import d'observations dans le carnet en ligne à partir d'un fichier excel chargé par l'utilisateur
13
et liaison d'images déjà chargee aux observations ainsi crées.
10
et liaison d'images déjà chargee aux observations ainsi crées.
14
 
11
 
15
Nom des colonnes imposé, mais présence de toutes les colonnes non obligatoires, ordre non imposé
12
Nom des colonnes imposé, mais présence de toutes les colonnes non obligatoires, ordre non imposé
16
Aucune valeur dans les colonnes n'est obligatoire
13
Aucune valeur dans les colonnes n'est obligatoire
17
Pour une ligne donnée, si tous les champs vides on ne fait rien, ou si seul le champ image est présent.
-
 
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.
14
Pour une ligne donnée, si tous les champs vides on ne fait rien, ou si seul le champ image est présent.
19
Si au moins deux lignes (ou plus) sont complètement identiques on prend en compte une seule ligne (les doublons sont éliminés).
-
 
Line 20... Line 15...
20
 
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.
Line 21... Line 16...
21
*/
16
Si au moins deux lignes (ou plus) sont complètement identiques on prend en compte une seule ligne (les doublons sont éliminés).
22
 
17
**/
Line 40... Line 35...
40
// Resultat de l'analyse d'une ligne
35
// Resultat de l'analyse d'une ligne
41
define('LIGNE_VIDE',1); //  
36
define('LIGNE_VIDE',1); //  
42
define('LIGNE_NORMALE',2); //  
37
define('LIGNE_NORMALE',2); //  
43
define('LIGNE_IMAGE_SEULEMENT',3); //  
38
define('LIGNE_IMAGE_SEULEMENT',3); //  
Line 44... Line -...
44
 
-
 
Line 45... Line 39...
45
class InventoryImportExcel extends Cel  {
39
 
-
 
40
 
Line -... Line 41...
-
 
41
//TODO: refactoriser entièrement cette classe
46
 
42
class InventoryImportExcel extends Cel  {
Line 47... Line -...
47
// Element constituant une observation 
-
 
48
 
-
 
49
	var $format_observation=array(COMMUNE ,LIEUDIT ,STATION , DEPARTEMENT, MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,TRANSMETTRE, IMAGE );
-
 
50
 
43
 
51
// Fichier configuration
44
	// Element constituant une observation 
Line 52... Line 45...
52
	var $config;
45
	var $format_observation=array(COMMUNE ,LIEUDIT ,STATION , DEPARTEMENT, MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,TRANSMETTRE, IMAGE );
53
 
46
 
Line 54... Line 47...
54
// Encapsulation classe lecture fichier excel
47
	// Encapsulation classe lecture fichier excel
Line 55... Line 48...
55
	var $extendExcelReader;
48
	var $extendExcelReader;
56
 
49
 
57
// Dernier numero d'ordre utilise
50
	// Dernier numero d'ordre utilise
58
	var $dernier_ordre=1;
51
	var $dernier_ordre = 1;
Line 59... Line 52...
59
	
52
	
60
	var $cpt_images_liees=0;
53
	var $cpt_images_liees = 0;
61
 
-
 
62
/**
54
 
63
 Constructeur
55
	/**
64
**/
56
	 Constructeur
Line 65... Line 57...
65
	function InventoryImportExcel($config) {
57
	**/
66
 
58
	function InventoryImportExcel($config) {
67
		$this->config=$config;
59
 
68
		// Pas d'heritage multiple en php :(
60
		parent::__construct($config);	
Line 69... Line -...
69
 
-
 
70
		$this->extendExcelReader = new ExcelReader();
-
 
71
		$this->extendExcelReader->initExcelReader();
61
		// Pas d'heritage multiple en php :(
72
	}
62
		$this->extendExcelReader = new ExcelReader();
Line 73... Line 63...
73
 
63
		$this->extendExcelReader->initExcelReader();
74
/**
64
	}
75
 Sur post
65
 
Line 76... Line -...
76
**/
-
 
77
	function createElement($pairs) {
66
	/**
78
 
67
	 Sur post
79
 
68
	**/
Line 80... Line 69...
80
		$pairs['utilisateur']=$_POST['identifiant'];
69
	function createElement($pairs) {
81
		if(!isset($_SESSION)) {session_start();}
70
 
Line 96... Line 85...
96
		if ($rowcount<=1) { // TODO : retour erreur
85
		if ($rowcount<=1) { // TODO : retour erreur
97
			print "Tableau vide";
86
			print "Tableau vide";
98
			exit;
87
			exit;
99
		}
88
		}
Line 100... Line 89...
100
 
89
 
101
// Chargement tableau 
90
		// Chargement tableau 
102
        for($row=1;$row<=$rowcount;$row++) 
91
        for($row=1;$row<=$rowcount;$row++) 
103
            for($col=1;$col<=$colcount;$col++) 
92
            for($col=1;$col<=$colcount;$col++) 
Line 104... Line 93...
104
                $arr[$col][$row] = $data->val($row,$col,0); // Attention, inversion voulue
93
                $arr[$col][$row] = $data->val($row,$col,0); // Attention, inversion voulue
105
              
-
 
106
// 1 : Traitement intitules
94
              
Line 107... Line 95...
107
 
95
		// 1 : Traitement intitules
108
		$line = array();
-
 
109
 
96
		$line = array();
110
/* Les colonnes ne sont pas forcemment dans l'ordre  : on les extrait pour traitement futur  */
97
 
111
 
98
		/* Les colonnes ne sont pas forcemment dans l'ordre  : on les extrait pour traitement futur  */	
112
        for($col=1;$col<=$colcount;$col++) {
99
        for($col=1;$col<=$colcount;$col++) {
113
            $colonne=strtolower($arr[$col][1]);
100
            $colonne=strtolower($arr[$col][1]);
Line 137... Line 124...
137
		// 1 : Traitement lignes
124
		// 1 : Traitement lignes
138
		$cpt_obs=0;
125
		$cpt_obs=0;
139
		$cpt_img=0;
126
		$cpt_img=0;
Line 140... Line 127...
140
 
127
 
141
        /* Recherche dernier numero d'ordre utilise : pas de mise a jour concurente a priori */
-
 
142
        $DB=$this->connectDB($this->config,'database_cel'); 
128
        /* Recherche dernier numero d'ordre utilise : pas de mise a jour concurente a priori */
-
 
129
        $requete = "SELECT MAX(ordre) AS ordre FROM cel_obs WHERE ce_utilisateur = ".$this->proteger($pairs['utilisateur'])." ";
Line 143... Line -...
143
        $query="SELECT MAX(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($pairs['utilisateur'])."' ";
-
 
144
 
-
 
145
        $res =& $DB->query($query);
-
 
146
        if (DB::isError($res)) {
-
 
147
            die($res->getMessage());
-
 
148
        }
130
		$resultat = $this->requeter($requete);
149
 
131
 
150
        while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
132
        if(is_array($resultat) && count($resultat) > 0) {
Line 151... Line 133...
151
            $this->dernier_ordre=$row['ordre']; // 1  par defaut
133
            $this->dernier_ordre = $resultat[0]['ordre']; // 1  par defaut
152
        }
134
        }
153
 
135
 
154
		for ($i=0;$i<=$rowcount-1;$i++) {
136
		for ($i=0;$i<=$rowcount-1;$i++) {
155
			// On saute les eventuelles lignes vides du debut et les lignes contenant des information sur image uniquement
137
			// On saute les eventuelles lignes vides du debut et les lignes contenant des information sur image uniquement
156
			while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) {
138
			while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) {
157
				if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
139
				if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
158
	//				print "image non rattachee a une observation";
140
					// image non rattachée à une observation
159
				}
141
				}
160
				else {
142
				else {
161
	//				print "vide";
143
					// ligne vide
162
				}
144
				}
163
				$i++;
145
				$i++;
164
			}
146
			}
165
			while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$rowcount)) {
147
			while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$rowcount)) {
166
				$ordre=$this->traiterLigne($line,$i,$pairs['utilisateur'],$DB);
148
				$ordre=$this->traiterLigne($line,$i,$pairs['utilisateur']);
167
				if ($ordre>0) {
149
				if ($ordre>0) {
168
					$cpt_obs++; // Compteur d'observations crees
150
					$cpt_obs++; // Compteur d'observations crees
169
				}
151
				}
170
				$i++;
152
				$i++;
171
				// On saute les lignes vide ou on traite les lignes suivantes contenant des informations sur image seulement
153
				// On saute les lignes vide ou on traite les lignes suivantes contenant des informations sur image seulement
172
				while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) {
154
				while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) {
173
					if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
155
					if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
174
						$this->traiterLigneComplement($line,$i,$pairs['utilisateur'],$ordre); // images supplementaires
156
						$this->traiterLigneComplement($line,$i,$pairs['utilisateur'],$ordre); // images supplementaires
175
					}
157
					}
176
					else {
158
					else {
177
	//					print "vide";
159
						// print "vide";
178
					}
160
					}
179
					$i++;
-
 
180
				}	
-
 
181
			}
161
					$i++;
182
			
162
				}	
Line 183... Line 163...
183
	
163
			}
184
		}
164
		}
185
		$message = '';
165
		$message = '';
Line 186... Line 166...
186
		
166
		
187
		if($this->cpt_images_liees > 0) {
167
		if($this->cpt_images_liees > 0) {
188
			$message = $this->cpt_images_liees.' images liees pour ';
-
 
189
		}
168
			$message = $this->cpt_images_liees.' images liees pour ';
Line 190... Line 169...
190
		
169
		}
191
		$message .= $cpt_obs;
-
 
192
		print $message;
-
 
193
 
-
 
194
	}
-
 
195
 
-
 
196
function analyserLigne($line,$i) {
-
 
197
	
-
 
198
	$ligne_vide=true;
-
 
Line 199... Line 170...
199
	$ligne_image_seulement=true;
170
		
-
 
171
		$message .= $cpt_obs;
-
 
172
		print $message;
-
 
173
	}
200
	$ligne_normale=true;
174
 
-
 
175
	function analyserLigne($line,$i) {
201
	
176
		
Line 202... Line -...
202
	$ligne_identique_sauf_image = true;
-
 
203
	
177
		$ligne_vide=true;
204
	foreach ($this->format_observation as $colonne) {
178
		$ligne_image_seulement=true;
-
 
179
		$ligne_normale=true;
-
 
180
		
-
 
181
		$ligne_identique_sauf_image = true;
-
 
182
		
-
 
183
		foreach ($this->format_observation as $colonne) {
205
		
184
			
206
		if($i < 1) {
185
			if($i < 1) {
207
			$ligne_identique_sauf_image = false;
186
				$ligne_identique_sauf_image = false;
208
		} else {
187
			} else {
209
			
188
				
210
			if($colonne!= IMAGE && isset($line[$colonne]) && isset($line[$colonne][$i - 1]) && isset($line[$colonne][$i]) 
189
				if($colonne!= IMAGE && isset($line[$colonne]) && isset($line[$colonne][$i - 1]) && isset($line[$colonne][$i]) 
-
 
190
					&& $line[$colonne][$i - 1] != $line[$colonne][$i] && $line[$colonne][$i] != '') {
-
 
191
					$ligne_identique_sauf_image = false;
211
				&& $line[$colonne][$i - 1] != $line[$colonne][$i] && $line[$colonne][$i] != '') {
192
				}
212
				$ligne_identique_sauf_image = false;
193
			} 
213
			}
-
 
214
		} 
194
			
215
		
-
 
216
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
195
			if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
217
			if ($colonne!=IMAGE) {
196
				if ($colonne!=IMAGE) {
218
				$ligne_image_seulement=false;
197
					$ligne_image_seulement=false;
219
				$ligne_vide=false;
-
 
220
			}		
-
 
221
			$ligne_vide=false;
-
 
222
		}		
-
 
223
	}
198
					$ligne_vide=false;
224
	
199
				}		
-
 
200
				$ligne_vide=false;
-
 
201
			}		
-
 
202
		}
-
 
203
		
225
	if ($ligne_vide) {
204
		if ($ligne_vide) {
-
 
205
			return LIGNE_VIDE;
226
		return LIGNE_VIDE;
206
		}
227
	}
207
		else {
228
	else {
-
 
229
		if ($ligne_image_seulement || $ligne_identique_sauf_image) {
-
 
230
			return LIGNE_IMAGE_SEULEMENT;
-
 
Line 231... Line 208...
231
		}
208
			if ($ligne_image_seulement || $ligne_identique_sauf_image) {
232
		else {
-
 
-
 
209
				return LIGNE_IMAGE_SEULEMENT;
233
			return LIGNE_NORMALE;
210
			}
234
		}
211
			else {
-
 
212
				return LIGNE_NORMALE;
-
 
213
			}
-
 
214
		}
-
 
215
	}
-
 
216
 
-
 
217
	function traiterLigne($line,$i,$utilisateur) { 
-
 
218
		// Controle donnee et insertion
235
	}
219
		$info_image=array();
236
	
220
		$info_transmettre = "0";
237
 
221
		$info_espece = array('en_id_nom' => '',
238
}
222
			'nom_sel' => '',
239
 
223
			'nom_ret' => '',
240
function traiterLigne($line,$i,$utilisateur,$DB) { // Controle donnee et insertion
224
			'nom_ret_nn' => '',
241
	
225
			'nt' => '',
242
	$info_image=array();
226
			'famille' => ''
243
	$info_transmettre = "0";
227
		);
244
	
228
		
245
	foreach ($this->format_observation as $colonne) {
229
		foreach ($this->format_observation as $colonne) {
246
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
230
			if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
247
			switch ($colonne) {  // On ne garde que les colonnes que l'on souhaite traiter
231
				switch ($colonne) {  // On ne garde que les colonnes que l'on souhaite traiter
248
				case COMMUNE:
232
					case COMMUNE:
249
					$info_commune=$this->traiterCommune($line[COMMUNE][$i]);
233
						$info_commune = $this->traiterCommune($line[COMMUNE][$i]);
250
					break;
234
						break;
251
				case LIEUDIT:
235
					case LIEUDIT:
252
					$info_lieudit=$this->traiterLieudit($line[LIEUDIT][$i]);
236
						$info_lieudit = $this->traiterLieudit($line[LIEUDIT][$i]);
253
					break;
237
						break;
254
				case STATION:
238
					case STATION:
255
					$info_station=$this->traiterStation($line[STATION][$i]);
239
						$info_station = $this->traiterStation($line[STATION][$i]);
256
					break;
240
						break;
257
				case MILIEU:
241
					case MILIEU:
258
					$info_milieu=$this->traiterMilieu($line[MILIEU][$i]);
242
						$info_milieu = $this->traiterMilieu($line[MILIEU][$i]);
259
					break;
243
						break;
260
                case DEPARTEMENT:
244
	                case DEPARTEMENT:
261
					$info_commune['code']=$this->traiterDepartement($line[DEPARTEMENT][$i]);
245
						$info_commune['code'] = $this->traiterDepartement($line[DEPARTEMENT][$i]);
262
					break;
246
						break;
263
				case LATITUDE:
247
					case LATITUDE:
264
					$info_latitude=$this->traiterLatitude($line[LATITUDE][$i]);
248
						$info_latitude = $this->traiterLatitude($line[LATITUDE][$i]);
265
					break;
249
						break;
266
				case LONGITUDE:
250
					case LONGITUDE:
267
					$info_longitude=$this->traiterLongitude($line[LONGITUDE][$i]);
251
						$info_longitude = $this->traiterLongitude($line[LONGITUDE][$i]);
268
					break;
252
						break;
269
				case NOTES:
253
					case NOTES:
-
 
254
						$info_notes = $this->traiterNotes($line[NOTES][$i]);
270
					$info_notes=$this->traiterNotes($line[NOTES][$i]);
255
						break;
271
					break;
256
					case DATEOBS:
-
 
257
						$info_dateobs = $this->traiterDateObs($line[DATEOBS][$i]);
-
 
258
						break;
272
				case DATEOBS:
259
					case TRANSMETTRE:
273
					$info_dateobs=$this->traiterDateObs($line[DATEOBS][$i]);
260
						$info_transmettre = $this->traiterTransmettre($line[TRANSMETTRE][$i]);
274
					break;
261
					break;
275
				case TRANSMETTRE:
262
					case ESPECE:
276
					$info_transmettre=$this->traiterTransmettre($line[TRANSMETTRE][$i]);
263
						$chercheur_infos_taxon = new RechercheInfosTaxon($this->config);
-
 
264
						$resultat_recherche_espece = $chercheur_infos_taxon->rechercherInfosSurTexteCodeOuNumTax($line[ESPECE][$i]);
-
 
265
	                    if (isset($resultat_recherche_espece['en_id_nom']) && $resultat_recherche_espece['en_id_nom']!='') {
277
				break;
266
	                    	$info_espece['nom_sel'] = $resultat_recherche_espece['nom_sel'];
278
				case ESPECE:
267
	                    	$info_espece['nom_sel_nn'] = $resultat_recherche_espece['en_id_nom'];
279
					$info_espece=$this->traiterEspece($line[ESPECE][$i]);
268
	                        $complement = $chercheur_infos_taxon->rechercherInformationsComplementairesSurNumNom($resultat_recherche_espece['en_id_nom']);
280
                    if (isset($info_espece['en_id_nom']) && $info_espece['en_id_nom']!='') {
269
	                        $info_espece['nom_ret'] = $complement['Nom_Retenu'];
281
                        $complement=$this->rechercherInformationsComplementaires($info_espece['en_id_nom']);
270
	                        $info_espece['nom_ret_nn'] = $complement['Num_Nom_Retenu'];
-
 
271
	                        $info_espece['nt'] = $complement['Num_Taxon'];
282
                        $info_espece['nom_ret']=$complement['Nom_Retenu'];
272
	                        $info_espece['famille'] = $complement['Famille'];
283
                        $info_espece['num_nom_ret']=$complement['Num_Nom_Retenu'];
-
 
284
                        $info_espece['num_taxon']=$complement['Num_Taxon'];
273
	                    } else {
285
                        $info_espece['famille']=$complement['Famille'];
274
	                    	$info_espece['nom_sel'] = $line[ESPECE][$i];
286
                    }
275
	                    }
287
                    break;
276
	                    break;
288
				case IMAGE:
277
					case IMAGE:
289
					$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur
278
						$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur
290
					break;
279
						break;
291
			}
280
				}
292
		}
281
			}
293
		else {	
282
			else {	
294
		 	switch($colonne) {
283
			 	switch($colonne) {
295
				case COMMUNE:
284
					case COMMUNE:
296
					$info_commune['name']="000null";
285
						$info_commune['nom']="";
-
 
286
						break;
-
 
287
					case LIEUDIT:
-
 
288
						$info_lieudit="";
-
 
289
						break;
-
 
290
					case STATION:
-
 
291
						$info_station="";
-
 
292
						break;
-
 
293
					case MILIEU:
-
 
294
						$info_milieu="";
-
 
295
						break;
-
 
296
					case DEPARTEMENT:
-
 
297
			            if (!isset ($info_commune['code']) || $info_commune['code']=='') {
-
 
298
						    $info_commune['code']="";
-
 
299
	                    }
-
 
300
						break;
-
 
301
					case LATITUDE:
-
 
302
						$info_latitude = "";
297
					break;
303
						break;
298
				case LIEUDIT:
-
 
299
					$info_lieudit="000null";
-
 
300
					break;
-
 
301
				case STATION:
-
 
302
					$info_station="000null";
-
 
303
					break;
-
 
304
				case MILIEU:
-
 
305
					$info_milieu="000null";
-
 
306
					break;
-
 
307
				case DEPARTEMENT:
-
 
308
		            if (!isset ($info_commune['code']) || $info_commune['code']=='') {
-
 
309
					    $info_commune['code']="000null";
-
 
310
                    }
-
 
311
					break;
-
 
312
				case LATITUDE:
-
 
313
					$info_latitude="000null";
-
 
314
					break;
304
					case LONGITUDE:
315
				case LONGITUDE:
-
 
316
					$info_longitude="000null";
305
						$info_longitude = "";
317
					break;
-
 
318
				case NOTES:
306
						break;
319
					$info_notes='';
-
 
320
					break;
-
 
321
				case TRANSMETTRE:
-
 
322
					$info_transmettre = "0";
-
 
323
				break;
-
 
324
 
-
 
325
			}
-
 
326
 
-
 
327
		}
-
 
328
	}
-
 
329
 
-
 
330
                $this->dernier_ordre++;
-
 
331
 
-
 
332
                list($jour,$mois,$annee) = isset($info_dateobs) ? explode("/",$info_dateobs) : array(null,null,null);
-
 
333
                $info_dateobs=$annee."-".$mois."-".$jour." 0:0:0";
-
 
334
                $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, transmission, date_creation,date_modification,coord_x,coord_y) " .
-
 
335
                    " VALUES('".$DB->escapeSimple($utilisateur)."','".
-
 
336
                    $DB->escapeSimple($this->dernier_ordre)."','".
-
 
337
                    $DB->escapeSimple($info_espece['nom_sel'])."','".
-
 
338
                    $DB->escapeSimple($info_espece['en_id_nom'])."','".
-
 
339
                    $DB->escapeSimple($info_espece['nom_ret'])."','".
-
 
340
                    $DB->escapeSimple($info_espece['num_nom_ret'])."','".
-
 
341
                    $DB->escapeSimple($info_espece['num_taxon'])."','".
-
 
342
                    $DB->escapeSimple($info_espece['famille'])."','".
-
 
343
                    $DB->escapeSimple($info_commune['name'])."','".
-
 
344
                    $DB->escapeSimple($info_commune['code'])."','".
-
 
345
                    $DB->escapeSimple($info_dateobs)."','".
-
 
346
                    $DB->escapeSimple($info_lieudit)."','".
-
 
347
                    $DB->escapeSimple($info_station)."','".
-
 
348
                    $DB->escapeSimple($info_milieu)."','".
-
 
349
                    $DB->escapeSimple($info_notes)."','".
-
 
350
                    $DB->escapeSimple($info_transmettre)."',".
-
 
Line 351... Line 307...
351
                    "now() , now(),'".
307
					case NOTES:
-
 
308
						$info_notes='';
-
 
309
						break;
-
 
310
					case TRANSMETTRE:
352
                    $DB->escapeSimple($info_latitude)."','".
311
						$info_transmettre = "0";
353
                    $DB->escapeSimple($info_longitude)."')";
-
 
354
 
312
					break;
355
		   $res =& $DB->query($query);
-
 
-
 
313
				}
356
 
314
			}
357
                if (PEAR::isError($res)) {
-
 
-
 
315
		}
-
 
316
	
-
 
317
        $this->dernier_ordre++;
358
                        return false;
318
        list($jour,$mois,$annee) = isset($info_dateobs) ? explode("/",$info_dateobs) : array(null,null,null);
-
 
319
        $info_dateobs=$annee."-".$mois."-".$jour." 0:0:0";
-
 
320
        $requete  = "INSERT INTO cel_obs (".
-
 
321
	        "ce_utilisateur,ordre,".
-
 
322
	        "nom_sel,nom_sel_nn,nom_ret,nom_ret_nn,nt,famille,".
-
 
323
	        "zone_geo,ce_zone_geo,".
-
 
324
	        "date_observation,".
-
 
325
	        "lieudit,station, milieu, commentaire, transmission, ".
-
 
326
	        "date_creation,date_modification,latitude,longitude) ".
359
                }
327
	        " VALUES(".$this->proteger($utilisateur).",".
360
	
328
	        $this->proteger($this->dernier_ordre).",".
361
	// creation lien image
329
	        $this->proteger($info_espece['nom_sel']).",".
362
	foreach ($info_image as $pic) {
330
	        $this->proteger($info_espece['nom_sel_nn']).",".
363
 
-
 
364
		$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($this->dernier_ordre).'") ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ;	
-
 
365
 
331
	        $this->proteger($info_espece['nom_ret']).",".
366
		$res =& $DB->query($query);
-
 
367
 
-
 
368
                if (PEAR::isError($res)) {
-
 
369
                        return false;
-
 
370
                } else {
332
	        $this->proteger($info_espece['nom_ret_nn']).",".
371
                	$this->cpt_images_liees++;
-
 
-
 
333
	        $this->proteger($info_espece['nt']).",".
372
                }
334
	        $this->proteger($info_espece['famille']).",".
-
 
335
	        $this->proteger($info_commune['nom']).",".
Line 373... Line -...
373
	}
-
 
374
 
336
	        $this->proteger($info_commune['code']).",".
375
		return $this->dernier_ordre;
337
	        $this->proteger($info_dateobs).",".
376
 
338
	        $this->proteger($info_lieudit).",".
377
 
339
	        $this->proteger($info_station).",".
378
}
340
	        $this->proteger($info_milieu).",".
379
 
341
	        $this->proteger($info_notes).",".
380
function traiterLigneComplement($line,$i,$utilisateur, $ordre = null) {
342
	        $this->proteger($info_transmettre).",".
381
 
343
	        "now() , now(),".
382
	$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur
344
	        $this->proteger($info_latitude).",".
383
	
-
 
384
	// creation lien image
345
	        $this->proteger($info_longitude).")";
385
	foreach ($info_image as $pic) {
-
 
386
 
-
 
387
		$DB=$this->connectDB($this->config,'cel_db');
-
 
388
		$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($this->dernier_ordre).'") ON DUPLICATE KEY UPDATE coi_ce_image = coi_ce_image' ;	
-
 
389
 
-
 
390
		$res =& $DB->query($query);
-
 
391
 
-
 
392
    	if (PEAR::isError($res)) {
-
 
393
            return false;
-
 
394
    	} else {
-
 
395
    		$this->cpt_images_liees++;
-
 
396
    	}
-
 
397
	}
-
 
398
}
-
 
399
function traiterCommune($identifiant_commune) {  // Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee
-
 
400
 
-
 
401
    $identifiant_commune=trim($identifiant_commune);
-
 
402
    $identifiant_commune=utf8_encode($identifiant_commune); // FIXME : devrait deja etre en utf8 a ce niveau
-
 
403
 
-
 
404
	preg_match('/(.*) \(([0-9][0-9]*)\)/',$identifiant_commune,$elements);
-
 
405
 
-
 
406
    $DB=$this->connectDB($this->config,'database_cel'); // FIXME regarder si opportun ici
-
 
407
 
346
	
408
	if (isset($elements[1])) { // commune + departement : montpellier (34)
-
 
409
		$nom_commune=$elements[1];
347
		$insertion = $this->executer($requete);
410
		$code_commune=$elements[2];
-
 
411
 	    $query="SELECT DISTINCT name, code  FROM locations WHERE name = '".$DB->escapeSimple($nom_commune)."' AND code ='".$DB->escapeSimple($code_commune)."'";
-
 
412
	}
-
 
413
	else { // Code insee seul 
-
 
414
        preg_match('/([0-9][0-9]*)|(2A[0-9][0-9]*)|(2B[0-9][0-9]*)/',$identifiant_commune,$elements);
-
 
415
        if (isset($elements[1])) { // code insee  commune
-
 
416
            $code_insee_commune=$elements[1];
-
 
417
            $query="SELECT DISTINCT name, code  FROM locations WHERE insee_code ='".$DB->escapeSimple($code_insee_commune)."'";
-
 
418
        }	
-
 
419
        else { // Commune seule (le departement sera recupere dans la colonne departement si elle est presente, on prend le risque ici de retourner une mauvaise
348
		
420
               // Commune
349
		// creation lien image
-
 
350
		foreach ($info_image as $pic) {
-
 
351
	
421
            preg_match('/(.*)/',$identifiant_commune,$elements);
352
			$requete_liaison = 'INSERT INTO cel_obs_images (id_image, id_utilisateur, id_observation ) VALUES ('.$this->proteger($pic['id_image']).','.$this->proteger($utilisateur).', '.$this->proteger($this->dernier_ordre).') ON DUPLICATE KEY UPDATE id_image = id_image ';	
Line -... Line 353...
-
 
353
	
-
 
354
			$liaison = $this->executer($requete_liaison);
-
 
355
            if ($liaison !== false) {
-
 
356
            	$this->cpt_images_liees++;
-
 
357
            } else {
422
            if (isset($elements[1])) { // commune 
358
            	return false;    	
-
 
359
            }
423
                $nom_commune=$elements[1];
360
		}
424
                $nom_commune=trim($nom_commune);
361
	
-
 
362
		return $this->dernier_ordre;
-
 
363
	}
-
 
364
 
-
 
365
	function traiterLigneComplement($line,$i,$utilisateur, $ordre = null) {
425
                $nom_commune=utf8_decode($nom_commune);
366
	
Line -... Line 367...
-
 
367
		$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur	
-
 
368
		// creation lien image
426
                $nom_commune=cp1252_to_utf8($nom_commune);
369
		foreach ($info_image as $pic) {	
-
 
370
			$requete = 'INSERT INTO cel_obs_images (id_image, id_utilisateur, id_observations) VALUES ('.$this->proteger($pic['id_image']).','.$this->proteger($utilisateur).', '.$this->proteger($this->dernier_ordre).') ON DUPLICATE KEY UPDATE id_image = id_image' ;	
-
 
371
			$resultat_liaison = $this->executer($requete);
-
 
372
	    	if ($resultat_liaison !== false) {
-
 
373
	    		$this->cpt_images_liees++;
-
 
374
	    	} else {
-
 
375
	    		return false;
-
 
376
	    	}
-
 
377
		}
-
 
378
	}
-
 
379
	
-
 
380
	function traiterCommune($identifiant_commune) {  
-
 
381
		// Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee
-
 
382
	    $identifiant_commune=trim($identifiant_commune);
-
 
383
	    $identifiant_commune=utf8_encode($identifiant_commune); // FIXME : devrait deja etre en utf8 a ce niveau
-
 
384
	
-
 
385
		preg_match('/(.*) \(([0-9][0-9]*)\)/',$identifiant_commune,$elements);
-
 
386
	
-
 
387
		if (isset($elements[1])) { // commune + departement : montpellier (34)
-
 
388
			$nom_commune=$elements[1];
-
 
389
			$code_commune=$elements[2];
-
 
390
	 	    $requete="SELECT DISTINCT nom, code  FROM cel_zone_geo WHERE nom = ".$this->proteger($nom_commune)." AND code LIKE ".$this->proteger($code_commune.'%');
-
 
391
		}
-
 
392
		else { // Code insee seul 
-
 
393
	        preg_match('/([0-9][0-9]*)|(2A[0-9][0-9]*)|(2B[0-9][0-9]*)/',$identifiant_commune,$elements);
-
 
394
	        if (isset($elements[1])) { // code insee  commune
-
 
395
	            $code_insee_commune=$elements[1];
-
 
396
	            $requete="SELECT DISTINCT nom, code  FROM cel_zones_geo WHERE code = ".$this->proteger($code_insee_commune);
-
 
397
	        }	
-
 
398
	        else { // Commune seule (le departement sera recupere dans la colonne departement si elle est presente, on prend le risque ici de retourner une mauvaise
Line -... Line 399...
-
 
399
	               // Commune
-
 
400
	            preg_match('/(.*)/',$identifiant_commune,$elements);
427
                $nom_commune=remove_accent($nom_commune);
401
	            if (isset($elements[1])) { // commune 
428
                $nom_commune=preg_replace("/ /","%",$nom_commune);
402
	                $nom_commune=$elements[1];
429
                $query="SELECT DISTINCT name, code  FROM locations WHERE name like '".$DB->escapeSimple($nom_commune)."'";
403
	                $nom_commune=trim($nom_commune);
430
            }
404
	                $nom_commune=utf8_decode($nom_commune);
-
 
405
	                $nom_commune=cp1252_to_utf8($nom_commune);
-
 
406
	                $nom_commune=remove_accent($nom_commune);
-
 
407
	                $nom_commune=preg_replace("/ /","%",$nom_commune);
-
 
408
	                $requete="SELECT DISTINCT nom, code  FROM cel_zones_geo WHERE nom like ".$this->proteger($nom_commune.'%');
-
 
409
	            }
431
        }
410
	        }
432
	}
-
 
433
 
-
 
434
	$res =& $DB->query($query);
-
 
435
    if (DB::isError($res)) {
-
 
Line 436... Line 411...
436
		 die($res->getMessage());
411
		}
437
	}
-
 
438
	
-
 
439
	$commune_code = $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
440
	
-
 
441
	// cas de la commune introuvable dans le référentiel
-
 
442
	if(!is_array($commune_code) || count($commune_code) == 0) {
-
 
443
		$commune_code['name'] = fix_latin($identifiant_commune);
-
 
444
		$commune_code['code'] = '000null';
-
 
445
	}
-
 
446
	return $commune_code;
-
 
447
}
-
 
448
 
412
	
449
function traiterLieudit($lieudit) { // texte libre
413
		$resultat_commune = $this->requeter($requete);
450
 
414
		
451
	//echo "traitement lieudit";
415
		// cas de la commune introuvable dans le référentiel
Line 452... Line 416...
452
    $lieudit=fix_latin($lieudit);
416
		if(!is_array($resultat_commune) || count($resultat_commune) == 0) {
-
 
417
			$resultat_commune['nom'] = fix_latin($identifiant_commune);
-
 
418
			$resultat_commune['code'] = 'NULL';
-
 
419
		} else {
-
 
420
			$resultat_commune = $resultat_commune[0];
Line 453... Line 421...
453
	return trim($lieudit);
421
		}
-
 
422
			
454
}
423
		return $resultat_commune;
-
 
424
	}
455
 
425
 
-
 
426
	function traiterLieudit($lieudit) { 
-
 
427
		// texte libre
-
 
428
	    $lieudit=fix_latin($lieudit);
-
 
429
		return trim($lieudit);
-
 
430
	}
-
 
431
 
-
 
432
	function traiterStation($station) { 
-
 
433
		// texte libre
-
 
434
	    $station=fix_latin($station);
-
 
435
		return trim($station);
-
 
436
	}
Line 456... Line 437...
456
function traiterStation($station) { // texte libre
437
 
457
//	echo "traitement station";
438
	function traiterMilieu($milieu) { 
-
 
439
		// texte libre
458
    $station=fix_latin($station);
440
	    $milieu=fix_latin($milieu);
459
	return trim($station);
441
		return trim($milieu);
Line 460... Line 442...
460
}
442
	}
-
 
443
 
461
 
444
	function traiterDepartement($departement) { 
462
function traiterMilieu($milieu) { // texte libre
445
		// texte libre
463
//	echo "traitement milieu";
-
 
464
    $milieu=fix_latin($milieu);
-
 
465
	return trim($milieu);
-
 
466
}
-
 
467
 
-
 
468
function traiterDepartement($departement) { // texte libre
-
 
469
 
-
 
470
	if(is_numeric($departement) && strlen($departement) == 5) {
-
 
471
		$departement = substr($departement,0,2);
-
 
472
	}
-
 
473
	
-
 
474
	if(is_numeric($departement) && strlen($departement) == 4) {
-
 
475
		$departement = substr($departement,0,1);
-
 
476
		$departement = "0"+$departement;
-
 
477
	}
-
 
478
 
-
 
479
	if(is_numeric($departement) && $departement <= 9) {
-
 
480
		$departement = "0"+$departement;
-
 
481
	}
-
 
482
	return utf8_encode(trim($departement));
-
 
483
}
-
 
484
 
-
 
485
function traiterLatitude($latitude) {	//  verifier formal decimal + limite france ? TODO 
-
 
486
//	echo "traitement latitude";
-
 
487
	return trim($latitude);
-
 
488
}
-
 
489
 
-
 
Line -... Line 446...
-
 
446
		if(is_numeric($departement) && strlen($departement) == 5) {
490
function traiterLongitude($longitude) { // verifier format decimal + limite france ? TODO 
447
			$departement = substr($departement,0,2);
491
//	echo "traitement longitude";
448
		}
492
	return trim($longitude);
449
		
Line 493... Line 450...
493
}
450
		if(is_numeric($departement) && strlen($departement) == 4) {
494
 
-
 
495
function traiterNotes($notes) { // texte libre
-
 
496
//	echo "traitement notes";
-
 
497
    $notes=remove_accent($notes);
-
 
498
	return utf8_encode(trim($notes));
451
			$departement = substr($departement,0,1);
499
}
452
			$departement = "0"+$departement;
500
 
-
 
501
function traiterDateObs($dateobs) { // verifier jj/mm/aaaa sinon date vide TODO 
453
		}
502
//	echo "traitement dateobs";
454
	
503
	return trim($dateobs);
-
 
Line 504... Line -...
504
}
-
 
505
 
-
 
506
function traiterTransmettre($transmettre) {
-
 
507
	
455
		if(is_numeric($departement) && $departement <= 9) {
508
	$transmission = '0';
-
 
509
	
-
 
510
	if (trim($transmettre) == "1" || trim($transmettre) == "oui") {	
-
 
511
		$transmission = '1';
-
 
512
	}
-
 
513
	
-
 
514
	return $transmission;
-
 
515
}
-
 
516
 
-
 
517
function traiterEspece($identifiant_espece) {  // texte libre, nom scientifique , ou code nomenclatural (format BDNFFnn999999) ou code taxonomique (format BDNFFnt999999)
-
 
518
 
-
 
519
//	echo "traitement  espece";
-
 
520
        $identifiant_espece=trim($identifiant_espece);
-
 
521
 
-
 
522
        $identifiant_espece=utf8_encode($identifiant_espece); // FIXME : devrait deja etre en utf8 a ce niveau
-
 
523
 
456
			$departement = "0"+$departement;
524
	    preg_match('/BDNFFnn([0-9][0-9]*)/',$identifiant_espece,$elements);
-
 
525
	
-
 
526
		if (isset($elements[1])) { // Numero nomenclatural 
-
 
527
 
-
 
528
 
-
 
529
            // Recherche du nom associe
-
 
530
            $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
-
 
531
            $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
532
                "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
533
                " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
457
		}
534
                " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
458
		return utf8_encode(trim($departement));
535
                " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
459
	}
536
                " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
-
 
537
                " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
-
 
538
                " eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
539
                " , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
540
                " , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
460
 
541
                " , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
542
                " WHERE a.esn_id_nom= '".$elements[1]. "'".
-
 
543
                " AND a.esn_id_version_projet_taxon = 25 ".
-
 
544
                " AND en_ce_rang = enrg_id_rang" .
-
 
545
                " AND en_id_nom = a.esn_id_nom" .
-
 
546
                " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
-
 
547
                " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
-
 
548
                " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
-
 
549
                " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
-
 
550
                " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
551
 
-
 
552
            $res =& $DB->query($query);
-
 
553
 
-
 
554
 
-
 
555
            if (DB::isError($res)) {
-
 
556
                die($res->getMessage());
-
 
557
            }
-
 
558
 
-
 
559
            $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
560
            return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$elements[1]);
-
 
561
 
-
 
562
		}
-
 
563
 
-
 
564
		else { //  Numero taxonomique ou nom scientifique
-
 
565
	        preg_match('/BDNFFnt([0-9][0-9]*)/',$identifiant_espece,$elements);
-
 
566
			
-
 
567
		    if (isset($elements[1])) { // Numero taxonomique
-
 
568
    
-
 
569
                $DB=$this->connectDB($this->config);
-
 
570
 
-
 
571
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
572
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
573
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
-
 
574
                    " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
-
 
575
                    " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
-
 
576
                    " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
-
 
577
                    " FROM eflore_nom, eflore_nom_rang," .
-
 
578
                    "     eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
579
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
580
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
-
 
581
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
582
                    " , eflore_selection_nom ".
-
 
583
                    " WHERE esn_id_taxon = '".$elements[1]. "'".
-
 
584
                    " AND esn_id_version_projet_taxon = 25 ".
-
 
585
                    " AND esn_ce_statut=3 ".
-
 
586
                    " AND en_id_nom = esn_id_nom" .
-
 
587
                    " AND en_ce_rang = enrg_id_rang" .
-
 
588
                    " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
-
 
589
                    " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
-
 
590
                    " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
-
 
591
                    " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
-
 
592
                    " AND esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
593
 
-
 
594
                $res =& $DB->query($query);
-
 
595
 
-
 
596
                if (DB::isError($res)) {
-
 
597
                    die($res->getMessage());
-
 
598
                }
-
 
599
 
-
 
600
                $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
601
                return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$row['en_id_nom']);
-
 
602
 
-
 
603
 
-
 
604
            }
-
 
605
 
-
 
606
            else { // Nom scientifique
-
 
607
                $nameparser=new NameParser();
-
 
608
                $nom_latin_decoupe=$nameparser->parse($identifiant_espece);
-
 
609
 
-
 
610
                    $DB=$this->connectDB($this->config); // FIXME regarder si opportun ici
-
 
611
 
-
 
612
                        // requete sous espece (on privilegie les noms retenu cf tri par esn_ce_statut) 
-
 
613
                        if (isset($nom_latin_decoupe['infra']) && $nom_latin_decoupe['infra']!="") {
-
 
614
                            $query="SELECT DISTINCT en_id_nom, esn_ce_statut" .
-
 
615
                                            " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom " .
-
 
616
                                            " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['genus'])."' " .
-
 
617
                                            " AND enrg_abreviation_rang = '".$DB->escapeSimple($nom_latin_decoupe['infra_type'])."' " .
-
 
618
                                            " AND en_epithete_infra_specifique = '".$DB->escapeSimple($nom_latin_decoupe['infra'])."' " .
-
 
619
                                            " AND esn_id_nom= en_id_nom ".
-
 
620
                                            " AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
-
 
621
                                            " AND en_epithete_espece =  '".$DB->escapeSimple($nom_latin_decoupe['species'])."' AND en_ce_rang = enrg_id_rang " .
-
 
622
                                            " ORDER BY esn_ce_statut ".
-
 
623
                                            " LIMIT 1";
-
 
624
                        }
-
 
625
                        else { // espece  (on privilegie les noms retenu cf tri par esn_ce_statut)
-
 
626
                             $query="SELECT DISTINCT en_id_nom, esn_ce_statut" .
-
 
627
                                            " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom " .
-
 
628
                                            " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['genus'])."' " .
-
 
629
                                            " AND enrg_abreviation_rang = 'sp.' " .
-
 
630
                                            " AND esn_id_nom= en_id_nom ".
-
 
631
                                            " AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
-
 
632
                                            " AND en_epithete_espece =  '".$DB->escapeSimple($nom_latin_decoupe['species'])."' AND en_ce_rang = enrg_id_rang " .
-
 
633
                                            " ORDER BY esn_ce_statut ".
-
 
634
                                            " LIMIT 1";
-
 
635
                        
-
 
636
                        }
-
 
637
                $res =& $DB->query($query);
-
 
638
                if (DB::isError($res)) {
-
 
639
                     die($res->getMessage());
-
 
640
                }
-
 
641
 
-
 
642
                $id_nom=$res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
643
 
-
 
644
                // Recherche du nom associe
-
 
645
                $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
-
 
646
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
647
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
648
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
-
 
649
                    " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
-
 
650
                    " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
-
 
651
                    " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
-
 
652
                    " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
-
 
653
                    "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
654
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
655
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
-
 
656
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
657
                    " WHERE a.esn_id_nom= '".$id_nom['en_id_nom']. "'".
-
 
658
                    " AND a.esn_id_version_projet_taxon = 25 ".
-
 
659
                    " AND en_ce_rang = enrg_id_rang" .
-
 
660
                    " AND en_id_nom = a.esn_id_nom" .
-
 
661
                    " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
-
 
662
                    " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
-
 
663
                    " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
-
 
664
                    " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
-
 
665
                    " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
666
                $res =& $DB->query($query);
-
 
667
 
-
 
668
 
-
 
669
                if (DB::isError($res)) {
-
 
670
                    die($res->getMessage());
-
 
671
                }
-
 
672
 
-
 
673
                if ($res->numRows() > 0 ) {
-
 
674
                    $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
461
	function traiterLatitude($latitude) {	
675
                    return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$id_nom['en_id_nom']);
-
 
676
                }
-
 
677
                else {
-
 
678
                    return array("nom_sel"=>$identifiant_espece);
-
 
679
                }
-
 
680
 
-
 
681
 
-
 
682
                }
-
 
683
            }
-
 
684
	
-
 
685
 
-
 
686
}
462
		//  verifier formal decimal + limite france ? TODO 
687
 
-
 
688
 
-
 
689
 
-
 
690
function traiterImage($images,$utilisateur) { // recherche id image de ce nom 
-
 
691
 
-
 
692
        $DB=$this->connectDB($this->config,'cel_db');
-
 
693
 
-
 
694
	$liste_images = explode("/",$images) ;
-
 
695
 
-
 
696
	$row =array();
-
 
697
        foreach($liste_images as $image) {
-
 
698
 
-
 
699
		$query="SELECT * FROM cel_images WHERE ci_ce_utilisateur='".$DB->escapeSimple($utilisateur)."' AND ci_nom_original='".$DB->escapeSimple($image)."'";
-
 
700
 
-
 
701
	        $res  =& $DB->query($query);
-
 
702
		$row [] =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
703
 
-
 
704
	        if (DB::isError($res)) {
-
 
705
        	    die($res->getMessage());
-
 
706
	        }
-
 
707
 
-
 
708
	}
-
 
709
	return $row;
-
 
710
 
-
 
711
 
-
 
712
}
-
 
713
 
-
 
714
       function rechercherInformationsComplementaires($numNom) { // Num taxon, Num retenu ...
-
 
715
 
-
 
716
                $DB=$this->connectDB($this->config);
-
 
717
 
-
 
718
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
719
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
720
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
-
 
721
                    " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
-
 
722
                    " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
-
 
723
                    " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, b.esn_id_taxon, b.esn_id_nom" .
-
 
724
                    " FROM eflore_nom, eflore_nom_rang," .
-
 
725
                    "     eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
726
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
727
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
-
 
728
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
729
                    " ,eflore_selection_nom a, eflore_selection_nom b".
-
 
730
                    " WHERE a.esn_id_nom= ".$numNom.
-
 
731
                    " AND a.esn_id_version_projet_taxon = 25 ".
-
 
732
                    " AND a.esn_id_taxon=b.esn_id_taxon ".
-
 
733
                    " AND b.esn_ce_statut=3 ".
-
 
734
                    " AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
-
 
735
                    " AND en_ce_rang = enrg_id_rang" .
-
 
736
                    " AND en_id_nom = b.esn_id_nom" .
-
 
737
                    " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
-
 
738
                    " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
-
 
739
                    " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
-
 
740
                    " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
-
 
741
                    " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
742
 
-
 
743
 
-
 
744
                $res =& $DB->query($query);
-
 
745
 
-
 
746
 
-
 
747
 
-
 
748
                if (DB::isError($res)) {
-
 
749
                    die($res->getMessage());
-
 
750
                }
-
 
751
 
-
 
752
                // Nom retenu, Num Nomenclatural nom retenu, Num Taxon,
-
 
753
 
-
 
754
                $value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>"");
-
 
755
 
-
 
756
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
-
 
757
                    $fam=$this->rechercherFamille($row['esn_id_taxon'],$DB);
-
 
758
 
-
 
759
                    // Recherche Famille 
-
 
760
                    while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) {
-
 
761
                        $fam=$this->rechercherFamille($fam['etr_id_taxon_2'],$DB);
-
 
762
                    }
-
 
763
                    if ($fam['en_ce_rang']==120) {
-
 
764
                        $famille=$fam['en_nom_supra_generique'];
-
 
765
                    }
-
 
766
                    else {
-
 
767
                        $famille="Famille inconnue";
-
 
768
                    }
-
 
769
 
-
 
770
                    $value=array('Nom_Retenu'=>$this->formaterNom($row),'Num_Nom_Retenu'=>$row['esn_id_nom'],'Num_Taxon'=>$row['esn_id_taxon'],'Famille'=>$famille);
-
 
771
                }
-
 
772
 
-
 
773
                return $value;
-
 
774
 
-
 
775
 
-
 
776
 
-
 
777
        }
-
 
778
 
-
 
779
function formaterNom($rawnom) {
-
 
780
 
-
 
781
 
-
 
782
                // Constitution du nom:
-
 
783
                $nom = '';
-
 
784
 
-
 
785
                if ($rawnom['en_nom_supra_generique'] != '') {
-
 
786
                    $nom .= $rawnom['en_nom_supra_generique'];
-
 
787
                } else if ($rawnom['en_epithete_infra_generique'] != '') {
-
 
788
                    $nom .= $rawnom['en_epithete_infra_generique'];
-
 
789
                } else {
-
 
790
                        if ($rawnom['en_nom_genre'] != '') {
-
 
791
                            $nom .=  $rawnom['en_nom_genre'];
-
 
792
                        }
-
 
793
                        if ($rawnom['en_epithete_espece']!= '') {
-
 
794
                            $nom .= ' '.$rawnom['en_epithete_espece'];
-
 
795
                        }
-
 
796
                        if ($rawnom['en_epithete_infra_specifique'] != '') {
-
 
797
                                if (!empty($rawnom['enrg_abreviation_rang'])) {
-
 
798
                                        $nom .= ' '.$rawnom['enrg_abreviation_rang'].'';
-
 
799
                                }
-
 
800
                                $nom .= ' '.$rawnom['en_epithete_infra_specifique'];
-
 
801
                        }
-
 
802
 
-
 
803
                }
-
 
804
 
-
 
805
                return $nom .$this->retournerAuteur($rawnom) ;
-
 
806
 
-
 
807
 }
-
 
808
 
-
 
809
 
-
 
810
function rechercherFamille($taxon,&$DB) {
-
 
811
 
-
 
812
    $row=array();
-
 
813
 
-
 
814
    $query="SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ".
-
 
815
        " FROM eflore_taxon_relation, eflore_selection_nom, eflore_nom ".
-
 
816
        " WHERE etr_id_taxon_1 = ".$taxon.
-
 
817
        " AND etr_id_version_projet_taxon_1 = 25 ".
-
 
818
        " AND etr_id_categorie_taxon = 3 ".
-
 
819
        " AND etr_id_valeur_taxon = 3 ".
-
 
820
        " AND esn_id_taxon =  etr_id_taxon_2 ".
-
 
821
        " AND esn_ce_statut = 3 ".
-
 
822
        " AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 ".
-
 
823
        " AND en_id_nom = esn_id_nom ".
-
 
824
        " AND esn_id_version_projet_taxon=en_id_version_projet_nom  ";
-
 
825
    $res =& $DB->query($query);
-
 
826
 
-
 
827
    if (DB::isError($res)) {
-
 
828
        die($res->getMessage());
-
 
829
    }
-
 
830
 
-
 
831
    if ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
-
 
832
        return $row;
-
 
833
    }
-
 
834
    else {
-
 
835
        $row['en_ce_rang']='fin';
-
 
836
        return $row;
-
 
837
    }
-
 
838
 
-
 
839
}
-
 
840
 
-
 
841
 
-
 
842
function retournerAuteur($rawnom) {
-
 
843
 
-
 
844
    $auteurs = '';
-
 
845
    $auteur_basio = '';
-
 
846
    $auteur_modif = '';
-
 
847
    if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' )  {
-
 
848
        $auteur_basio .= $rawnom['abreviation_auteur_basio_ex'];
-
 
849
        if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
-
 
850
            $auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio'];
-
 
851
        }
-
 
852
    } else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
-
 
853
        $auteur_basio .= $rawnom['abreviation_auteur_basio'];
-
 
Line -... Line 463...
-
 
463
		return trim($latitude);
-
 
464
	}
-
 
465
	
-
 
466
	function traiterLongitude($longitude) { 
-
 
467
		// verifier format decimal + limite france ? TODO 
-
 
468
		return trim($longitude);
-
 
469
	}
-
 
470
	
-
 
471
	function traiterNotes($notes) { 
-
 
472
		// texte libre
-
 
473
	    $notes=remove_accent($notes);
-
 
474
		return utf8_encode(trim($notes));
-
 
475
	}
-
 
476
	
-
 
477
	function traiterDateObs($dateobs) { 
-
 
478
		// verifier jj/mm/aaaa sinon date vide TODO 
-
 
479
		$date = trim($dateobs);
-
 
480
		if(!preg_match("#[0-9]{2}/[0-9]{2}/([0-9]{4}|[0-9]{2})#", $date)) {
-
 
481
			$date = '00/00/0000';
-
 
482
		}
854
    }
483
		return $date;
Line 855... Line 484...
855
 
484
	}
856
    if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') {
485
 
857
        $auteur_modif .= $rawnom['abreviation_auteur_modif_ex'];
486
	function traiterTransmettre($transmettre) {		
Line 947... Line 576...
947
        $instr=$rest;
576
        $instr=$rest;
948
    }
577
    }
949
    return $outstr;
578
    return $outstr;
950
}
579
}
Line 951... Line -...
951
 
-
 
952
 
580
 
953
function remove_accent($str)
-
 
954
{
581
function remove_accent($str) {
955
  $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î',
582
  $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î',
956
             'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß',
583
             'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß',
957
             'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î',
584
             'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î',
958
             'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā',
585
             'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā',
Line 981... Line 608...
981
             'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I',
608
             'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I',
982
             'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
609
             'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
983
  return str_replace($a, $b, $str);
610
  return str_replace($a, $b, $str);
984
}
611
}
Line 985... Line -...
985
 
-
 
986
 
612
 
987
function cp1252_to_utf8($str) {
613
function cp1252_to_utf8($str) {
988
$cp1252_map = array ("\xc2\x80" => "\xe2\x82\xac",
614
	$cp1252_map = array ("\xc2\x80" => "\xe2\x82\xac",
989
"\xc2\x82" => "\xe2\x80\x9a",
615
		"\xc2\x82" => "\xe2\x80\x9a",
990
"\xc2\x83" => "\xc6\x92",    
616
		"\xc2\x83" => "\xc6\x92",    
991
"\xc2\x84" => "\xe2\x80\x9e",
617
		"\xc2\x84" => "\xe2\x80\x9e",
992
"\xc2\x85" => "\xe2\x80\xa6",
618
		"\xc2\x85" => "\xe2\x80\xa6",
993
"\xc2\x86" => "\xe2\x80\xa0",
619
		"\xc2\x86" => "\xe2\x80\xa0",
994
"\xc2\x87" => "\xe2\x80\xa1",
620
		"\xc2\x87" => "\xe2\x80\xa1",
995
"\xc2\x88" => "\xcb\x86",
621
		"\xc2\x88" => "\xcb\x86",
996
"\xc2\x89" => "\xe2\x80\xb0",
622
		"\xc2\x89" => "\xe2\x80\xb0",
997
"\xc2\x8a" => "\xc5\xa0",
623
		"\xc2\x8a" => "\xc5\xa0",
998
"\xc2\x8b" => "\xe2\x80\xb9",
624
		"\xc2\x8b" => "\xe2\x80\xb9",
999
"\xc2\x8c" => "\xc5\x92",
625
		"\xc2\x8c" => "\xc5\x92",
1000
"\xc2\x8e" => "\xc5\xbd",
626
		"\xc2\x8e" => "\xc5\xbd",
1001
"\xc2\x91" => "\xe2\x80\x98",
627
		"\xc2\x91" => "\xe2\x80\x98",
1002
"\xc2\x92" => "\xe2\x80\x99",
628
		"\xc2\x92" => "\xe2\x80\x99",
1003
"\xc2\x93" => "\xe2\x80\x9c",
629
		"\xc2\x93" => "\xe2\x80\x9c",
1004
"\xc2\x94" => "\xe2\x80\x9d",
630
		"\xc2\x94" => "\xe2\x80\x9d",
1005
"\xc2\x95" => "\xe2\x80\xa2",
631
		"\xc2\x95" => "\xe2\x80\xa2",
1006
"\xc2\x96" => "\xe2\x80\x93",
632
		"\xc2\x96" => "\xe2\x80\x93",
1007
"\xc2\x97" => "\xe2\x80\x94",
633
		"\xc2\x97" => "\xe2\x80\x94",
1008
 
634
		
1009
"\xc2\x98" => "\xcb\x9c",
635
		"\xc2\x98" => "\xcb\x9c",
1010
"\xc2\x99" => "\xe2\x84\xa2",
636
		"\xc2\x99" => "\xe2\x84\xa2",
1011
"\xc2\x9a" => "\xc5\xa1",
637
		"\xc2\x9a" => "\xc5\xa1",
1012
"\xc2\x9b" => "\xe2\x80\xba",
638
		"\xc2\x9b" => "\xe2\x80\xba",
1013
"\xc2\x9c" => "\xc5\x93",
639
		"\xc2\x9c" => "\xc5\x93",
1014
"\xc2\x9e" => "\xc5\xbe",
640
		"\xc2\x9e" => "\xc5\xbe",
1015
"\xc2\x9f" => "\xc5\xb8"
641
		"\xc2\x9f" => "\xc5\xb8"
1016
);
642
	);
1017
return strtr ( utf8_encode ( $str ), $cp1252_map );
643
	return strtr(utf8_encode($str), $cp1252_map);
1018
}
-
 
1019
 
-
 
1020
/* +--Fin du code ---------------------------------------------------------------------------------------+
-
 
1021
* $Log$
-
 
1022
*
-
 
1023
*
-
 
1024
*/
-
 
1025
 
-
 
1026
 
644
}
1027
?>
645
?>