Subversion Repositories eFlore/Applications.cel

Rev

Rev 483 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 483 Rev 540
Line 3... Line 3...
3
// In : utf8
3
// In : utf8
4
// Out : utf8
4
// Out : utf8
Line 5... Line 5...
5
 
5
 
-
 
6
 
Line 6... Line 7...
6
 
7
// TODO : traiter image multilignes
Line 7... Line 8...
7
// TODO : traiter image multilignes
8
// TODO : doublons
8
 
9
 
Line 31... Line 32...
31
define('LONGITUDE','longitude'); // En decimal systeme WGS84 
32
define('LONGITUDE','longitude'); // En decimal systeme WGS84 
32
define('NOTES','notes'); // Texte libre
33
define('NOTES','notes'); // Texte libre
33
define('DATEOBS','date'); // date au format jj/mm/aaaa
34
define('DATEOBS','date'); // date au format jj/mm/aaaa
34
define('ESPECE','espece'); // texte libre, nom latin, ou code nomenclatural (format BDNFFnn999999)
35
define('ESPECE','espece'); // texte libre, nom latin, ou code nomenclatural (format BDNFFnn999999)
35
define('IMAGE','image'); //  nom des fichiers images préalablement uploadés sur le CEL séparés par des "/"
36
define('IMAGE','image'); //  nom des fichiers images préalablement uploadés sur le CEL séparés par des "/"
-
 
37
define('DEPARTEMENT','departement'); //  Texte libre
-
 
38
 
Line 36... Line 39...
36
 
39
 
37
// Resultat de l'analyse d'une ligne
40
// Resultat de l'analyse d'une ligne
38
define('LIGNE_VIDE',1); //  
41
define('LIGNE_VIDE',1); //  
39
define('LIGNE_NORMALE',2); //  
42
define('LIGNE_NORMALE',2); //  
Line 40... Line 43...
40
define('LIGNE_IMAGE_SEULEMENT',3); //  
43
define('LIGNE_IMAGE_SEULEMENT',3); //  
41
 
44
 
42
include_once('Decoupage.class.php'); // TODO : Autoload
-
 
43
include_once('DecoupageNomLatin.class.php');
-
 
Line 44... Line 45...
44
 
45
// Parser de Nom
Line 45... Line 46...
45
// Element constituant une observation 
46
include('NameParser.php');
Line 46... Line 47...
46
 
47
 
47
Class InventoryImportExcel extends DBAccessor  {
-
 
Line 48... Line 48...
48
 
48
Class InventoryImportExcel extends DBAccessor  {
49
// Element constituant une observation 
49
 
Line 50... Line 50...
50
 
50
// Element constituant une observation 
51
	var $format_observation=array(COMMUNE ,LIEUDIT ,STATION ,MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,IMAGE );
-
 
52
 
51
 
Line -... Line 52...
-
 
52
	var $format_observation=array(COMMUNE ,LIEUDIT ,STATION , DEPARTEMENT, MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,IMAGE );
-
 
53
 
-
 
54
// Fichier configuration
53
 
55
	var $config;
54
// Fichier configuration
56
 
55
	var $config;
57
// Encapsulation classe lecture fichier excel
56
 
58
	var $extendExcelReader;
Line 57... Line 59...
57
// Encapsulation classe lecture fichier excel
59
 
58
 
60
// Dernier numero d'ordre utilise
Line 59... Line 61...
59
	var $extendExcelReader;
61
	var $dernier_ordre=1;
60
 
62
 
-
 
63
/**
-
 
64
 Constructeur
-
 
65
**/
-
 
66
	function InventoryImportExcel($config) {
61
/**
67
 
Line 62... Line 68...
62
 Constructeur
68
		$this->config=$config;
63
**/
69
		// Pas d'heritage multiple en php :(
64
	function InventoryImportExcel($config) {
70
 
65
 
71
		$this->extendExcelReader = new ExcelReader();
Line 66... Line 72...
66
		$this->config=$config;
72
		$this->extendExcelReader->initExcelReader();
Line 67... Line -...
67
		// Pas d'heritage multiple en php :(
-
 
68
 
73
 
69
		$this->extendExcelReader = new ExcelReader();
74
/* Recherche dernier numero d'ordre utilise : pas de mise a jour concurente a priori */
Line 70... Line 75...
70
		$this->extendExcelReader->initExcelReader();
75
 
71
	}
-
 
72
 
76
 
73
/**
77
	}
Line 74... Line 78...
74
 Sur post
78
 
Line 75... Line 79...
75
**/
79
/**
Line 99... Line 103...
99
 
103
 
100
		if ($rowcount<=1) { // TODO : retour erreur
104
		if ($rowcount<=1) { // TODO : retour erreur
101
			print "Tableau vide";
105
			print "Tableau vide";
102
			exit;
106
			exit;
103
		}
107
		}
-
 
108
 
104
 
109
// Chargement tableau 
105
	        for($row=1;$row<=$rowcount;$row++) 
110
        for($row=1;$row<=$rowcount;$row++) 
106
        	        for($col=1;$col<=$colcount;$col++) 
111
            for($col=1;$col<=$colcount;$col++) 
Line 107... Line 112...
107
                	        $arr[$col][$row] = $data->val($row,$col,0);
112
                $arr[$col][$row] = $data->val($row,$col,0); // Attention, inversion voulue
Line 108... Line 113...
108
 
113
 
Line 109... Line 114...
109
 
114
 
Line 110... Line 115...
110
                        
115
                        
111
// 1 : Traitement colonnes 
116
// 1 : Traitement intitules
-
 
117
 
-
 
118
		$line = array();
-
 
119
 
112
 
120
/* Les colonnes ne sont pas forcemment dans l'ordre  : on les extrait pour traitement futur  */
113
		$line = array();
121
 
114
 
122
        for($col=1;$col<=$colcount;$col++) {
115
/* Les colonnes ne sont pas forcemment dans l'ordre  : on les extrait pour traitement futur  */
123
            $colonne=strtolower($arr[$col][1]);
116
 
124
            $colonne=trim($colonne);
-
 
125
            $colonne=cp1252_to_utf8($colonne);
117
                for($col=1;$col<=$colcount;$col++) {
126
            $colonne=remove_accent($colonne);
118
			$colonne=strtolower($arr[$col][1]);
127
            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
128
                case COMMUNE:
120
				case COMMUNE:
129
                case LIEUDIT:
121
				case LIEUDIT:
130
                case STATION:
122
				case STATION:
131
                case MILIEU:
123
				case MILIEU:
132
                case DEPARTEMENT:
124
				case LATITUDE:
133
                case LATITUDE:
125
				case LONGITUDE:
134
                case LONGITUDE:
-
 
135
                case NOTES:
-
 
136
                case DATEOBS:
-
 
137
                case ESPECE:
126
				case NOTES:
138
                case IMAGE:
Line 127... Line -...
127
				case DATEOBS:
-
 
128
				case ESPECE:
-
 
Line 129... Line -...
129
				case IMAGE:
-
 
130
					$selection=array_values($arr[$col]);
139
                    $selection=array_values($arr[$col]);
131
					array_shift($selection); // On ne garde pas la premiere ligne, qui contient les intitules
140
                    array_shift($selection); // On ne garde pas la premiere ligne, qui contient les intitules
132
					$line[$colonne]=$selection;
141
                    $line[$colonne]=$selection;
133
					break;
142
                    break;
-
 
143
 
134
 
144
            }
135
			}
145
        } 
136
		} 
146
 
137
 
147
 
138
	/*	
148
//	print_r($line[COMMUNE]);
139
		print_r($line[COMMUNE]);
149
//		print_r($line[LIEUDIT]);
140
		print_r($line[LIEUDIT]);
150
//		print_r($line[STATION]);
Line 141... Line 151...
141
		print_r($line[STATION]);
151
//		print_r($line[MILIEU]);
Line 142... Line 152...
142
		print_r($line[MILIEU]);
152
//		print_r($line[DEPARTEMENT]);
-
 
153
//		print_r($line[LATITUDE]);
-
 
154
//		print_r($line[LONGITUDE]);
-
 
155
//		print_r($line[NOTES]);
-
 
156
//		print_r($line[DATEOBS]);
-
 
157
//		print_r($line[ESPECE]);
-
 
158
//		print_r($line[IMAGE]);
-
 
159
	
-
 
160
 
-
 
161
// 1 : Traitement lignes
-
 
162
 
-
 
163
		$cpt_obs=0;
-
 
164
 
-
 
165
 
-
 
166
        /* Recherche dernier numero d'ordre utilise : pas de mise a jour concurente a priori */
-
 
167
 
-
 
168
 
-
 
169
        $DB=$this->connectDB($this->config,'database_cel'); 
143
		print_r($line[LATITUDE]);
170
        $query="SELECT MAX(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($pairs['utilisateur'])."' ";
144
		print_r($line[LONGITUDE]);
171
 
145
		print_r($line[NOTES]);
172
        $res =& $DB->query($query);
146
		print_r($line[DATEOBS]);
173
        if (DB::isError($res)) {
147
		print_r($line[ESPECE]);
174
            die($res->getMessage());
148
		print_r($line[IMAGE]);
175
        }
149
	*/
176
 
150
 
177
        while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
151
// 1 : Traitement lignes
178
            $this->dernier_ordre=$row['ordre']; // 1  par defaut
152
 
179
        }
153
		$cpt_obs=0;
180
 
154
		for ($i=0;$i<=$rowcount-1;$i++) {
181
		for ($i=0;$i<=$rowcount-1;$i++) {
155
			// On saute les lignes vides du debut et les lignes contenant des information sur image uniquement
182
			// 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)) {
183
			while ((in_array($retour_analyse=$this->analyserLigne($line,$i),array(LIGNE_IMAGE_SEULEMENT, LIGNE_VIDE))) && ($i<=$rowcount)) {
157
				if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
184
				if  ($retour_analyse==LIGNE_IMAGE_SEULEMENT) {
158
	//				print "image non rattachee a une observation";
185
	//				print "image non rattachee a une observation";
159
				}
186
				}
160
				else {
187
				else {
Line 180... Line 207...
180
				}	
207
				}	
181
			}
208
			}
Line 182... Line 209...
182
			
209
			
-
 
210
	
183
	
211
		}
Line 184... Line 212...
184
		}
212
		//print $cpt_obs ." nouvelle(s) observation(s) !";
Line 185... Line 213...
185
		print $cpt_obs;
213
		print $cpt_obs ;
186
 
214
 
Line 213... Line 241...
213
	}
241
	}
Line 214... Line 242...
214
	
242
	
Line 215... Line 243...
215
 
243
 
216
}
244
}
217
 
245
 
218
function traiterLigne($line,$i,$utilisateur) { // Controle donnee et insertion
246
function traiterLigne($line,$i,$utilisateur,$DB) { // Controle donnee et insertion
219
	$info_image=array();
247
	$info_image=array();
220
	foreach ($this->format_observation as $colonne) {
248
	foreach ($this->format_observation as $colonne) {
Line 230... Line 258...
230
					$info_station=$this->traiterStation($line[STATION][$i]);
258
					$info_station=$this->traiterStation($line[STATION][$i]);
231
					break;
259
					break;
232
				case MILIEU:
260
				case MILIEU:
233
					$info_milieu=$this->traiterMilieu($line[MILIEU][$i]);
261
					$info_milieu=$this->traiterMilieu($line[MILIEU][$i]);
234
					break;
262
					break;
-
 
263
                case DEPARTEMENT:
-
 
264
					$info_commune['code']=$this->traiterDepartement($line[DEPARTEMENT][$i]);
-
 
265
					break;
235
				case LATITUDE:
266
				case LATITUDE:
236
					$info_latitude=$this->traiterLatitude($line[LATITUDE][$i]);
267
					$info_latitude=$this->traiterLatitude($line[LATITUDE][$i]);
237
					break;
268
					break;
238
				case LONGITUDE:
269
				case LONGITUDE:
239
					$info_longitude=$this->traiterLongitude($line[LONGITUDE][$i]);
270
					$info_longitude=$this->traiterLongitude($line[LONGITUDE][$i]);
Line 244... Line 275...
244
				case DATEOBS:
275
				case DATEOBS:
245
					$info_dateobs=$this->traiterDateObs($line[DATEOBS][$i]);
276
					$info_dateobs=$this->traiterDateObs($line[DATEOBS][$i]);
246
					break;
277
					break;
247
				case ESPECE:
278
				case ESPECE:
248
					$info_espece=$this->traiterEspece($line[ESPECE][$i]);
279
					$info_espece=$this->traiterEspece($line[ESPECE][$i]);
249
					if (isset($info_espece['en_id_nom']) && $info_espece['en_id_nom']!='') {
280
                    if (isset($info_espece['en_id_nom']) && $info_espece['en_id_nom']!='') {
250
						$complement=$this->rechercherInformationsComplementaires($info_espece['en_id_nom']);
281
                        $complement=$this->rechercherInformationsComplementaires($info_espece['en_id_nom']);
251
						$info_espece['nom_ret']=$complement['Nom_Retenu'];
282
                        $info_espece['nom_ret']=$complement['Nom_Retenu'];
252
	        	                        $info_espece['num_nom_ret']=$complement['Num_Nom_Retenu'];
283
                        $info_espece['num_nom_ret']=$complement['Num_Nom_Retenu'];
253
        	        	                $info_espece['num_taxon']=$complement['Num_Taxon'];
284
                        $info_espece['num_taxon']=$complement['Num_Taxon'];
254
                	        	        $info_espece['famille']=$complement['Famille'];
285
                        $info_espece['famille']=$complement['Famille'];
255
					}
286
                    }
256
 
-
 
257
 
-
 
258
					break;
287
                    break;
259
				case IMAGE:
288
				case IMAGE:
260
					$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur
289
					$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur
261
					break;
290
					break;
262
			}
291
			}
263
		}
292
		}
Line 274... Line 303...
274
					$info_station="000null";
303
					$info_station="000null";
275
					break;
304
					break;
276
				case MILIEU:
305
				case MILIEU:
277
					$info_milieu="000null";
306
					$info_milieu="000null";
278
					break;
307
					break;
-
 
308
				case DEPARTEMENT:
-
 
309
					$info_commune['code']="000null";
-
 
310
					break;
279
				case LATITUDE:
311
				case LATITUDE:
280
					$info_latitude="000null";
312
					$info_latitude="000null";
281
					break;
313
					break;
282
				case LONGITUDE:
314
				case LONGITUDE:
283
					$info_longitude="000null";
315
					$info_longitude="000null";
Line 286... Line 318...
286
			}
318
			}
Line 287... Line 319...
287
 
319
 
288
		}
320
		}
Line 289... Line -...
289
	}
-
 
290
 
-
 
291
                // Dernier numero d'ordre utilise :
-
 
292
 
-
 
293
                $DB=$this->connectDB($this->config,'database_cel'); // TODO / a garder en memoire pour eviter appels mutliples
-
 
294
                $query="SELECT MAX(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($utilisateur)."' ";
-
 
295
 
-
 
296
                $res =& $DB->query($query);
-
 
297
                if (DB::isError($res)) {
-
 
298
                        die($res->getMessage());
-
 
299
                }
-
 
300
                $ordre=1;
-
 
301
 
321
	}
302
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
-
 
Line 303... Line 322...
303
                    $ordre=$row['ordre']+1;
322
 
304
                }
323
                $this->dernier_ordre++;
Line 305... Line -...
305
 
-
 
306
                list($jour,$mois,$annee)=split("/",$info_dateobs);
324
 
307
                $info_dateobs=$annee."-".$mois."-".$jour." 0:0:0";
325
                list($jour,$mois,$annee)=split("/",$info_dateobs);
308
 
326
                $info_dateobs=$annee."-".$mois."-".$jour." 0:0:0";
309
 
327
 
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) " .
328
                $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) " .
311
                " VALUES('".$DB->escapeSimple($utilisateur)."','".
329
                    " VALUES('".$DB->escapeSimple($utilisateur)."','".
312
                $DB->escapeSimple($ordre)."','".
330
                    $DB->escapeSimple($this->dernier_ordre)."','".
313
                $DB->escapeSimple($info_espece['nom_sel'])."','".
331
                    $DB->escapeSimple($info_espece['nom_sel'])."','".
314
                $DB->escapeSimple($info_espece['en_id_nom'])."','".
332
                    $DB->escapeSimple($info_espece['en_id_nom'])."','".
315
                $DB->escapeSimple($info_espece['nom_ret'])."','".
333
                    $DB->escapeSimple($info_espece['nom_ret'])."','".
316
                $DB->escapeSimple($info_espece['num_nom_ret'])."','".
334
                    $DB->escapeSimple($info_espece['num_nom_ret'])."','".
317
                $DB->escapeSimple($info_espece['num_taxon'])."','".
335
                    $DB->escapeSimple($info_espece['num_taxon'])."','".
318
                $DB->escapeSimple($info_espece['famille'])."','".
336
                    $DB->escapeSimple($info_espece['famille'])."','".
319
                $DB->escapeSimple($info_commune['name'])."','".
337
                    $DB->escapeSimple($info_commune['name'])."','".
320
                $DB->escapeSimple($info_commune['code'])."','".
338
                    $DB->escapeSimple($info_commune['code'])."','".
321
                $DB->escapeSimple($info_dateobs)."','".
339
                    $DB->escapeSimple($info_dateobs)."','".
322
                $DB->escapeSimple($info_lieudit)."','".
340
                    $DB->escapeSimple($info_lieudit)."','".
323
                $DB->escapeSimple($info_station)."','".
341
                    $DB->escapeSimple($info_station)."','".
324
                $DB->escapeSimple($info_milieu)."','".
342
                    $DB->escapeSimple($info_milieu)."','".
325
                $DB->escapeSimple($info_notes)."',".
-
 
326
                "now() , now(),'".
343
                    $DB->escapeSimple($info_notes)."',".
Line 327... Line 344...
327
                $DB->escapeSimple($info_latitude)."','".
344
                    "now() , now(),'".
Line 353... Line 370...
353
 
370
 
Line 354... Line 371...
354
	}
371
	}
Line 355... Line 372...
355
 
372
 
Line 356... Line 373...
356
 
373
 
Line 366... Line 383...
366
 
383
 
367
}
384
}
Line 368... Line -...
368
function traiterCommune($identifiant_commune) {  // Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee
-
 
369
 
385
function traiterCommune($identifiant_commune) {  // Recherche correspondance sur nom, si pas unique, correspondance dep. sinon code insee
Line 370... Line 386...
370
 
386
 
Line 371... Line 387...
371
 
387
 
Line 372... Line 388...
372
        $identifiant_commune=ltrim($identifiant_commune);
388
        $identifiant_commune=trim($identifiant_commune);
Line 373... Line 389...
373
 
389
 
374
        $identifiant_commune=utf8_encode($identifiant_commune); // FIXME : devrait deja etre en utf8 a ce niveau
390
        $identifiant_commune=utf8_encode($identifiant_commune); // FIXME : devrait deja etre en utf8 a ce niveau
375
 
391
 
Line 376... Line 392...
376
	preg_match('/(.*)\((.*)\)/',$identifiant_commune,$elements);
392
	preg_match('/(.*) \(([0-9][0-9]*)\)/',$identifiant_commune,$elements);
Line 377... Line 393...
377
 
393
 
378
        $DB=$this->connectDB($this->config,'database_cel'); // FIXME regarder si opportun ici
394
        $DB=$this->connectDB($this->config,'database_cel'); // FIXME regarder si opportun ici
379
 
395
 
380
	if ($elements[1]) { // departement present
396
	if ($elements[1]) { // commune + departement : montpellier (34)
381
		$nom_commune=$elements[1];
397
		$nom_commune=$elements[1];
382
		$code_commune=$elements[2];
398
		$code_commune=$elements[2];
383
 
399
 
-
 
400
 	        $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)."'";
401
 
385
 
402
	}
386
	}
403
	else { // Code insee seul 
387
	else {
404
        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);
405
        if ($elements[1]) { // code insee  commune
389
		if ($elements[1]) { // code insee  commune
406
            $code_insee_commune=$elements[1];
390
			$code_insee_commune=$elements[1];
407
            $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)."'";
408
        }	
Line 392... Line 409...
392
		}	
409
        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 415... Line 432...
415
 
432
 
Line 416... Line 433...
416
function traiterLieudit($lieudit) { // texte libre
433
function traiterLieudit($lieudit) { // texte libre
Line 417... Line 434...
417
 
434
 
418
	//echo "traitement lieudit";
435
	//echo "traitement lieudit";
Line 419... Line 436...
419
 
436
 
420
	return utf8_encode(ltrim($lieudit));
437
	return utf8_encode(trim($lieudit));
421
}
438
}
422
 
439
 
Line 423... Line 440...
423
function traiterStation($station) { // texte libre
440
function traiterStation($station) { // texte libre
424
//	echo "traitement station";
441
//	echo "traitement station";
425
	return utf8_encode(ltrim($station));
442
	return utf8_encode(trim($station));
-
 
443
}
-
 
444
 
-
 
445
function traiterMilieu($milieu) { // texte libre
-
 
446
//	echo "traitement milieu";
-
 
447
	return utf8_encode(trim($milieu));
426
}
448
}
Line 427... Line 449...
427
 
449
 
428
function traiterMilieu($milieu) { // texte libre
450
function traiterDepartement($departement) { // texte libre
429
//	echo "traitement milieu";
451
//	echo "traitement milieu";
430
	return utf8_encode(ltrim($milieu));
452
	return utf8_encode(trim($departement));
Line 431... Line 453...
431
}
453
}
432
 
454
 
433
function traiterLatitude($latitude) {	//  verifier formal decimal + limite france ? TODO 
455
function traiterLatitude($latitude) {	//  verifier formal decimal + limite france ? TODO 
434
//	echo "traitement latitude";
456
//	echo "traitement latitude";
Line 435... Line 457...
435
	return ltrim($latitude);
457
	return trim($latitude);
436
}
458
}
437
 
459
 
438
function traiterLongitude($longitude) { // verifier format decimal + limite france ? TODO 
460
function traiterLongitude($longitude) { // verifier format decimal + limite france ? TODO 
Line 439... Line 461...
439
//	echo "traitement longitude";
461
//	echo "traitement longitude";
440
	return ltrim($longitude);
462
	return trim($longitude);
441
}
463
}
442
 
464
 
Line 443... Line 465...
443
function traiterNotes($notes) { // texte libre
465
function traiterNotes($notes) { // texte libre
Line 444... Line 466...
444
//	echo "traitement notes";
466
//	echo "traitement notes";
445
	return utf8_encode(ltrim($notes));
467
	return utf8_encode(trim($notes));
Line 446... Line 468...
446
}
468
}
Line 447... Line 469...
447
 
469
 
448
function traiterDateObs($dateobs) { // verifier jj/mm/aaaa sinon date vide TODO 
470
function traiterDateObs($dateobs) { // verifier jj/mm/aaaa sinon date vide TODO 
449
//	echo "traitement dateobs";
471
//	echo "traitement dateobs";
Line 450... Line 472...
450
	return ltrim($dateobs);
472
	return trim($dateobs);
451
}
473
}
452
 
474
 
453
function traiterEspece($identifiant_espece) {  // texte libre, nom scientifique , ou code nomenclatural (format BDNFFnn999999)
475
function traiterEspece($identifiant_espece) {  // texte libre, nom scientifique , ou code nomenclatural (format BDNFFnn999999) ou code taxonomique (format BDNFFnt999999)
454
 
476
 
455
//	echo "traitement  espece";
477
//	echo "traitement  espece";
456
        $identifiant_espece=ltrim($identifiant_espece);
478
        $identifiant_espece=trim($identifiant_espece);
457
 
479
 
458
        $identifiant_espece=utf8_encode($identifiant_espece); // FIXME : devrait deja etre en utf8 a ce niveau
480
        $identifiant_espece=utf8_encode($identifiant_espece); // FIXME : devrait deja etre en utf8 a ce niveau
459
 
481
 
460
	preg_match('/BDNFFnn([0-9][0-9]*)/',$identifiant_espece,$elements);
482
	    preg_match('/BDNFFnn([0-9][0-9]*)/',$identifiant_espece,$elements);
461
 
483
	
462
		if ($elements[1]) { // Numero nomenclatural 
484
		if ($elements[1]) { // Numero nomenclatural 
463
 
485
 
464
 
486
 
465
// Recherche du nom associe
487
            // Recherche du nom associe
466
                        $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
488
            $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
467
                                      $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
489
            $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
468
                                        "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
490
                "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
469
                                        " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
491
                " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
470
                                        " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
492
                " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
471
                                        " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
493
                " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
472
                                        " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
-
 
473
                                        " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
-
 
474
                                        "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
Line 475... Line -...
475
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
476
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
494
                " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
477
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
Line 478... Line -...
478
				     	" WHERE a.esn_id_nom= '".$elements[1]. "'".
-
 
479
					" AND a.esn_id_version_projet_taxon = 25 ".
-
 
Line -... Line 495...
-
 
495
                " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom a,  " .
-
 
496
                " eflore_naturaliste_intitule_abreviation AS auteur_bex ".
480
				    	" AND en_ce_rang = enrg_id_rang" .
497
                " , eflore_naturaliste_intitule_abreviation AS auteur_b ".
Line 481... Line 498...
481
				     	" AND en_id_nom = a.esn_id_nom" .
498
                " , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
-
 
499
                " , eflore_naturaliste_intitule_abreviation AS auteur_m ".
Line -... Line 500...
-
 
500
                " WHERE a.esn_id_nom= '".$elements[1]. "'".
Line 482... Line 501...
482
				     	" AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
501
                " AND a.esn_id_version_projet_taxon = 25 ".
483
				        " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
502
                " AND en_ce_rang = enrg_id_rang" .
Line 484... Line -...
484
		                        " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
-
 
485
                   		        " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
-
 
486
                                        " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
487
		
-
 
488
				    	$res =& $DB->query($query);
-
 
489
 
-
 
490
 
-
 
491
					if (DB::isError($res)) {
-
 
492
						die($res->getMessage());
-
 
493
					}
-
 
494
 
-
 
495
					$row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
496
		 			return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$elements[1]);
-
 
497
 
-
 
498
		}
503
                " AND en_id_nom = a.esn_id_nom" .
499
 
-
 
500
		else { // Nom scientifique
-
 
501
 
504
                " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
502
 
-
 
503
			$decoupageNomLatin=new DecoupageNomLatin();
-
 
504
			$nom_latin_decoupe=$decoupageNomLatin->decouper($identifiant_espece);
-
 
505
			
-
 
506
/*
-
 
507
 
-
 
508
    [nom_genre] => Acer
-
 
509
    [nom_sp] => monspessulanum
-
 
510
    [auteur_sp] => 
-
 
511
    [nom_complement] => 
-
 
512
    [type_infrasp] => 
-
 
513
    [nom_infrasp] => 
-
 
514
    [num_nomenc] => 
505
                " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
515
    [num_taxo] => 
-
 
516
    [rang_taxonomique] => 250
-
 
517
    [nom_courant] => monspessulanum
-
 
Line -... Line 506...
-
 
506
                " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
-
 
507
                " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
-
 
508
                " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
509
 
-
 
510
            $res =& $DB->query($query);
-
 
511
 
-
 
512
 
-
 
513
            if (DB::isError($res)) {
-
 
514
                die($res->getMessage());
-
 
515
            }
-
 
516
 
-
 
517
            $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
518
            return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$elements[1]);
-
 
519
 
-
 
520
		}
-
 
521
 
-
 
522
		else { //  Numero taxonomique ou nom scientifique
-
 
523
	        preg_match('/BDNFFnt([0-9][0-9]*)/',$identifiant_espece,$elements);
-
 
524
			
-
 
525
		    if ($elements[1]) { // Numero taxonomique
-
 
526
    
518
    [nom_superieur] => Acer
527
                $DB=$this->connectDB($this->config);
Line 519... Line -...
519
    [agg] => 
-
 
520
    [nom_complet] => Acer monspessulanum
-
 
521
 
-
 
522
/*
-
 
523
 
-
 
524
  [nom_genre] => Acer
-
 
525
    [nom_sp] => monspessulanum
-
 
526
    [auteur_sp] => 
-
 
527
    [nom_complement] => 
528
 
Line -... Line 529...
-
 
529
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
530
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
531
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
Line 528... Line -...
528
    [type_infrasp] => subsp.
-
 
-
 
532
                    " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
-
 
533
                    " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
Line 529... Line -...
529
    [nom_infrasp] => monspessulanum
-
 
Line 530... Line 534...
530
    [num_nomenc] => 
534
                    " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
531
    [num_taxo] => 
-
 
532
    [rang_taxonomique] => 280
-
 
Line -... Line 535...
-
 
535
                    " FROM eflore_nom, eflore_nom_rang," .
-
 
536
                    "     eflore_naturaliste_intitule_abreviation AS auteur_bex ".
-
 
537
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
-
 
538
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
-
 
539
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
-
 
540
                    " , eflore_selection_nom ".
-
 
541
                    " WHERE esn_id_taxon = '".$elements[1]. "'".
-
 
542
                    " AND esn_id_version_projet_taxon = 25 ".
-
 
543
                    " AND esn_ce_statut=3 ".
-
 
544
                    " AND en_id_nom = esn_id_nom" .
-
 
545
                    " AND en_ce_rang = enrg_id_rang" .
-
 
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 esn_id_version_projet_taxon=en_id_version_projet_nom ";
-
 
551
 
-
 
552
                $res =& $DB->query($query);
-
 
553
 
-
 
554
                if (DB::isError($res)) {
-
 
555
                    die($res->getMessage());
-
 
556
                }
-
 
557
 
-
 
558
                $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
559
                return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$row['en_id_nom']);
-
 
560
 
-
 
561
 
-
 
562
            }
-
 
563
 
-
 
564
            else { // Nom scientifique
-
 
565
                $nameparser=new NameParser();
-
 
566
                $nom_latin_decoupe=$nameparser->parse($identifiant_espece);
533
    [nom_courant] => monspessulanum
567
 
-
 
568
//print_r($nom_latin_decoupe);
-
 
569
                    $DB=$this->connectDB($this->config); // FIXME regarder si opportun ici
-
 
570
 
Line 534... Line -...
534
    [nom_superieur] => monspessulanum
-
 
535
    [agg] => 
-
 
536
    [nom_complet] => Acer monspessulanum subsp. monspessulanum
-
 
537
 
-
 
538
*/
-
 
539
 
-
 
540
 
-
 
541
        		$DB=$this->connectDB($this->config); // FIXME regarder si opportun ici
-
 
542
 
-
 
543
                      	$query="SELECT DISTINCT en_id_nom" .
-
 
544
                                        " FROM eflore_nom, eflore_nom_rang " .
-
 
545
                                        " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['nom_genre'])."' " .
-
 
546
                                        " AND en_ce_rang = '".$DB->escapeSimple($nom_latin_decoupe['rang_taxonomique'])."' " ;
-
 
547
					if (isset($nom_latin_decoupe['nom_infrasp']) && $nom_latin_decoupe['nom_infrasp']!="") {
571
                        // requete sous espece (on privilegie les noms retenu cf tri par esn_ce_statut) 
548
						$query.=" AND en_epithete_infra_specifique = '".$DB->escapeSimple($nom_latin_decoupe['nom_infrasp'])."' " ;
-
 
549
					}
-
 
550
                                        $query.=" AND en_epithete_espece =  '".$DB->escapeSimple($nom_latin_decoupe['nom_sp'])."' AND en_ce_rang = enrg_id_rang " .
-
 
551
                                        " LIMIT 1";
-
 
552
 
-
 
553
 
-
 
554
			}
-
 
555
 
-
 
556
			$res =& $DB->query($query);
-
 
Line -... Line 572...
-
 
572
                        if (isset($nom_latin_decoupe['infra']) && $nom_latin_decoupe['infra']!="") {
-
 
573
                            $query="SELECT DISTINCT en_id_nom, esn_ce_statut" .
-
 
574
                                            " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom " .
-
 
575
                                            " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['genus'])."' " .
-
 
576
                                            " AND enrg_abreviation_rang = '".$DB->escapeSimple($nom_latin_decoupe['infra_type'])."' " .
-
 
577
                                            " AND en_epithete_infra_specifique = '".$DB->escapeSimple($nom_latin_decoupe['infra'])."' " .
-
 
578
                                            " AND esn_id_nom= en_id_nom ".
-
 
579
                                            " AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
-
 
580
                                            " AND en_epithete_espece =  '".$DB->escapeSimple($nom_latin_decoupe['species'])."' AND en_ce_rang = enrg_id_rang " .
-
 
581
                                            " ORDER BY esn_ce_statut ".
-
 
582
                                            " LIMIT 1";
-
 
583
                        }
-
 
584
                        else { // espece  (on privilegie les noms retenu cf tri par esn_ce_statut)
-
 
585
                             $query="SELECT DISTINCT en_id_nom, esn_ce_statut" .
-
 
586
                                            " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom " .
-
 
587
                                            " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['genus'])."' " .
-
 
588
                                            " AND enrg_abreviation_rang = 'sp.' " .
-
 
589
                                            " AND esn_id_nom= en_id_nom ".
-
 
590
                                            " AND esn_id_version_projet_taxon=en_id_version_projet_nom " .
-
 
591
                                            " AND en_epithete_espece =  '".$DB->escapeSimple($nom_latin_decoupe['species'])."' AND en_ce_rang = enrg_id_rang " .
-
 
592
                                            " ORDER BY esn_ce_statut ".
-
 
593
                                            " LIMIT 1";
-
 
594
                        
Line 557... Line -...
557
 
-
 
558
			if (DB::isError($res)) {
-
 
559
				 die($res->getMessage());
-
 
Line 560... Line 595...
560
			}
595
                        }
561
 
596
                $res =& $DB->query($query);
-
 
597
                if (DB::isError($res)) {
Line -... Line 598...
-
 
598
                     die($res->getMessage());
-
 
599
                }
-
 
600
 
-
 
601
                $id_nom=$res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
602
 
-
 
603
                // Recherche du nom associe
-
 
604
                $DB=$this->connectDB($this->config); // FIXME : gerer cache de connection
Line -... Line 605...
-
 
605
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
-
 
606
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
Line 562... Line 607...
562
			$id_nom=$res->fetchrow(DB_FETCHMODE_ASSOC);
607
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
Line 624... Line 669...
624
	return $row;
669
	return $row;
Line 625... Line 670...
625
 
670
 
Line 626... Line -...
626
 
-
 
627
}
-
 
628
 
-
 
629
 
671
 
Line 630... Line 672...
630
// utilitaire : FIXME mutualiser avec autres scripts
672
}
Line 631... Line 673...
631
 
673
 
632
       function rechercherInformationsComplementaires($numNom) {
674
       function rechercherInformationsComplementaires($numNom) { // Num taxon, Num retenu ...
633
 
675
 
634
                $DB=$this->connectDB($this->config);
676
                $DB=$this->connectDB($this->config);
635
 
677
 
636
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
678
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
637
                                                        "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
679
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
638
                                        " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
680
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
639
                                        " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
681
                    " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
640
                                        " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
682
                    " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
641
                             " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, b.esn_id_taxon, b.esn_id_nom" .
683
                    " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, b.esn_id_taxon, b.esn_id_nom" .
642
                             " FROM eflore_nom, eflore_nom_rang," .
684
                    " FROM eflore_nom, eflore_nom_rang," .
643
                                                "         eflore_naturaliste_intitule_abreviation AS auteur_bex ".
685
                    "     eflore_naturaliste_intitule_abreviation AS auteur_bex ".
644
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
686
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_b ".
645
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
687
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_mex ".
646
                                        "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
688
                    "   , eflore_naturaliste_intitule_abreviation AS auteur_m ".
647
                             " ,eflore_selection_nom a, eflore_selection_nom b".
689
                    " ,eflore_selection_nom a, eflore_selection_nom b".
648
                             " WHERE a.esn_id_nom= ".$numNom.
690
                    " WHERE a.esn_id_nom= ".$numNom.
649
                             " AND a.esn_id_version_projet_taxon = 25 ".
691
                    " AND a.esn_id_version_projet_taxon = 25 ".
650
                             " AND a.esn_id_taxon=b.esn_id_taxon ".
692
                    " AND a.esn_id_taxon=b.esn_id_taxon ".
651
                             " AND b.esn_ce_statut=3 ".
693
                    " AND b.esn_ce_statut=3 ".
652
                             " AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
694
                    " AND a.esn_id_version_projet_taxon=b.esn_id_version_projet_taxon" .
653
                             " AND en_ce_rang = enrg_id_rang" .
695
                    " AND en_ce_rang = enrg_id_rang" .
654
                             " AND en_id_nom = b.esn_id_nom" .
696
                    " AND en_id_nom = b.esn_id_nom" .
Line 655... Line 697...
655
                             " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
697
                    " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
Line 656... Line 698...
656
                         " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
698
                    " AND en_ce_auteur_basio = auteur_b.enaia_id_intitule_naturaliste_abrege  ".
657
                         " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
699
                    " AND en_ce_auteur_modif_ex = auteur_mex.enaia_id_intitule_naturaliste_abrege ".
658
                     " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
700
                    " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
Line 659... Line 701...
659
                             " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
701
                    " AND a.esn_id_version_projet_taxon=en_id_version_projet_nom ";
660
 
-
 
Line 661... Line 702...
661
 
702
 
Line 662... Line 703...
662
           $res =& $DB->query($query);
703
 
663
 
704
                $res =& $DB->query($query);
-
 
705
 
-
 
706
 
664
 
707
 
665
 
708
                if (DB::isError($res)) {
666
        if (DB::isError($res)) {
709
                    die($res->getMessage());
667
                die($res->getMessage());
710
                }
668
        }
711
 
669
 
712
                // Nom retenu, Num Nomenclatural nom retenu, Num Taxon,
670
                // Nom retenu, Num Nomen nom retenu, Num Taxon,
713
 
671
                                                                                // Famille
714
                $value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>"");
672
 
715
 
673
                $value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>"");
-
 
674
 
-
 
Line -... Line 716...
-
 
716
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
675
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
717
                    $fam=$this->rechercherFamille($row['esn_id_taxon'],$DB);
Line 676... Line 718...
676
                        $fam=$this->rechercherFamille($row['esn_id_taxon'],$DB);
718
 
Line 677... Line 719...
677
                while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) {
719
                    // Recherche Famille 
Line 725... Line 767...
725
 }
767
 }
Line 726... Line 768...
726
 
768
 
Line 727... Line 769...
727
 
769
 
Line 728... Line 770...
728
function rechercherFamille($taxon,&$DB) {
770
function rechercherFamille($taxon,&$DB) {
729
 
771
 
730
        $row=array();
772
    $row=array();
731
 
773
 
732
        $query="SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ".
774
    $query="SELECT DISTINCT en_ce_rang, etr_id_taxon_2, en_id_nom, en_nom_supra_generique ".
733
        " FROM eflore_taxon_relation, eflore_selection_nom, eflore_nom ".
775
        " FROM eflore_taxon_relation, eflore_selection_nom, eflore_nom ".
734
        " WHERE etr_id_taxon_1 = ".$taxon.
776
        " WHERE etr_id_taxon_1 = ".$taxon.
735
        " AND etr_id_version_projet_taxon_1 = 25 ".
777
        " AND etr_id_version_projet_taxon_1 = 25 ".
736
        " AND etr_id_categorie_taxon = 3 ".
778
        " AND etr_id_categorie_taxon = 3 ".
737
        " AND etr_id_valeur_taxon = 3 ".
779
        " AND etr_id_valeur_taxon = 3 ".
738
        " AND esn_id_taxon =  etr_id_taxon_2 ".
780
        " AND esn_id_taxon =  etr_id_taxon_2 ".
739
        " AND esn_ce_statut = 3 ".
781
        " AND esn_ce_statut = 3 ".
Line 740... Line 782...
740
        " AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 ".
782
        " AND esn_id_version_projet_taxon = etr_id_version_projet_taxon_1 ".
741
        " AND en_id_nom = esn_id_nom ".
783
        " AND en_id_nom = esn_id_nom ".
742
        " AND esn_id_version_projet_taxon=en_id_version_projet_nom  ";
784
        " AND esn_id_version_projet_taxon=en_id_version_projet_nom  ";
Line 743... Line 785...
743
        $res =& $DB->query($query);
785
    $res =& $DB->query($query);
744
 
786
 
745
        if (DB::isError($res)) {
787
    if (DB::isError($res)) {
746
         die($res->getMessage());
788
        die($res->getMessage());
747
        }
789
    }
748
 
790
 
749
        if ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
791
    if ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
Line 750... Line 792...
750
                return $row;
792
        return $row;
Line 751... Line 793...
751
    }
793
    }
752
    else {
-
 
753
        $row['en_ce_rang']='fin';
-
 
754
        return $row;
-
 
755
    }
-
 
756
 
-
 
757
}
-
 
758
 
-
 
759
 
-
 
760
function retournerAuteur($rawnom) {
-
 
761
                $auteurs = '';
-
 
762
                $auteur_basio = '';
-
 
Line -... Line 794...
-
 
794
    else {
-
 
795
        $row['en_ce_rang']='fin';
-
 
796
        return $row;
763
                $auteur_modif = '';
797
    }
764
                if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' )  {
798
 
765
                    $auteur_basio .= $rawnom['abreviation_auteur_basio_ex'];
799
}
766
                    if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
800
 
767
                        $auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio'];
801
 
768
                    }
802
function retournerAuteur($rawnom) {
769
                } else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
803
 
770
                    $auteur_basio .= $rawnom['abreviation_auteur_basio'];
804
    $auteurs = '';
Line -... Line 805...
-
 
805
    $auteur_basio = '';
-
 
806
    $auteur_modif = '';
-
 
807
    if (!empty($rawnom['abreviation_auteur_basio_ex']) && $rawnom['abreviation_auteur_basio_ex']!='-' )  {
-
 
808
        $auteur_basio .= $rawnom['abreviation_auteur_basio_ex'];
-
 
809
        if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
-
 
810
            $auteur_basio .= ' ex '.$rawnom['abreviation_auteur_basio'];
-
 
811
        }
-
 
812
    } else if (!empty($rawnom['abreviation_auteur_basio']) && $rawnom['abreviation_auteur_basio']!='-') {
-
 
813
        $auteur_basio .= $rawnom['abreviation_auteur_basio'];
771
                }
814
    }
772
 
815
 
773
                if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') {
816
    if (!empty($rawnom['abreviation_auteur_modif_ex']) && $rawnom['abreviation_auteur_modif_ex']!='-') {
774
                    $auteur_modif .= $rawnom['abreviation_auteur_modif_ex'];
817
        $auteur_modif .= $rawnom['abreviation_auteur_modif_ex'];
775
                    if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {
818
        if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-') {
Line 776... Line 819...
776
                        $auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif'];
819
            $auteur_modif .= ' ex '.$rawnom['abreviation_auteur_modif'];
777
                    }
820
        }
Line 778... Line 821...
778
                } else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-')  {
821
    } else if (!empty($rawnom['abreviation_auteur_modif']) && $rawnom['abreviation_auteur_modif']!='-')  {
Line -... Line 822...
-
 
822
        $auteur_modif .= $rawnom['abreviation_auteur_modif'];
-
 
823
    }
-
 
824
 
-
 
825
    if (!empty($auteur_modif)) {
-
 
826
        $auteurs = ' ('.$auteur_basio.') '.$auteur_modif;
-
 
827
    } elseif (!empty($auteur_basio)) {
-
 
828
        $auteurs = ' '.$auteur_basio;
-
 
829
    }
-
 
830
 
-
 
831
    return $auteurs ;
-
 
832
}
-
 
833
 
-
 
834
 
-
 
835
 
-
 
836
 
-
 
837
}
-
 
838
 
-
 
839
 
-
 
840
function remove_accent($str)
-
 
841
{
-
 
842
  $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î',
-
 
843
             'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß',
-
 
844
             'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î',
-
 
845
             'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā',
-
 
846
             'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ', 'ĉ', 'Ċ', 'ċ', 'Č', 'č', 'Ď', 'ď',
-
 
847
             'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę', 'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ',
-
 
848
             'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī', 'Ĭ', 'ĭ',
-
 
849
             'Į', 'į', 'İ', 'ı', 'IJ', 'ij', 'Ĵ', 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ',
-
 
850
             'ľ', 'Ŀ', 'ŀ', 'Ł', 'ł', 'Ń', 'ń', 'Ņ', 'ņ', 'Ň', 'ň', 'ʼn', 'Ō', 'ō', 'Ŏ',
-
 
851
             'ŏ', 'Ő', 'ő', 'Œ', 'œ', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 'ś', 'Ŝ', 'ŝ',
-
 
852
             'Ş', 'ş', 'Š', 'š', 'Ţ', 'ţ', 'Ť', 'ť', 'Ŧ', 'ŧ', 'Ũ', 'ũ', 'Ū', 'ū', 'Ŭ',
-
 
853
             'ŭ', 'Ů', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Ŵ', 'ŵ', 'Ŷ', 'ŷ', 'Ÿ', 'Ź', 'ź', 'Ż',
-
 
854
             'ż', 'Ž', 'ž', 'ſ', 'ƒ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ǎ', 'ǎ', 'Ǐ', 'ǐ', 'Ǒ', 'ǒ',
-
 
855
             'Ǔ', 'ǔ', 'Ǖ', 'ǖ', 'Ǘ', 'ǘ', 'Ǚ', 'ǚ', 'Ǜ', 'ǜ', 'Ǻ', 'ǻ', 'Ǽ', 'ǽ', 'Ǿ', 'ǿ');
-
 
856
             
-
 
857
  $b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I',
-
 
858
             'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's',
-
 
859
             'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i',
-
 
860
             'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a',
-
 
861
             'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd',
-
 
862
             'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g',
-
 
863
             'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i',
-
 
864
             'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l',
-
 
865
             'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R',
-
 
866
             'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't',
-
 
867
             'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y',
-
 
868
             'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I',
-
 
869
             'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
-
 
870
  return str_replace($a, $b, $str);
-
 
871
}
-
 
872
 
-
 
873
 
-
 
874
function cp1252_to_utf8($str) {
-
 
875
$cp1252_map = array ("\xc2\x80" => "\xe2\x82\xac",
-
 
876
"\xc2\x82" => "\xe2\x80\x9a",
-
 
877
"\xc2\x83" => "\xc6\x92",    
-
 
878
"\xc2\x84" => "\xe2\x80\x9e",
-
 
879
"\xc2\x85" => "\xe2\x80\xa6",
-
 
880
"\xc2\x86" => "\xe2\x80\xa0",
-
 
881
"\xc2\x87" => "\xe2\x80\xa1",
-
 
882
"\xc2\x88" => "\xcb\x86",
-
 
883
"\xc2\x89" => "\xe2\x80\xb0",
-
 
884
"\xc2\x8a" => "\xc5\xa0",
-
 
885
"\xc2\x8b" => "\xe2\x80\xb9",
-
 
886
"\xc2\x8c" => "\xc5\x92",
-
 
887
"\xc2\x8e" => "\xc5\xbd",
Line 779... Line 888...
779
                    $auteur_modif .= $rawnom['abreviation_auteur_modif'];
888
"\xc2\x91" => "\xe2\x80\x98",
780
                }
889
"\xc2\x92" => "\xe2\x80\x99",
781
 
890
"\xc2\x93" => "\xe2\x80\x9c",
782
                if (!empty($auteur_modif)) {
891
"\xc2\x94" => "\xe2\x80\x9d",