Subversion Repositories eFlore/Applications.cel

Rev

Rev 483 | Go to most recent revision | Show entire file | Regard 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 100... Line 104...
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
		}
Line -... Line 108...
-
 
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:
Line 133... Line 142...
133
					break;
142
                    break;
Line 134... Line 143...
134
 
143
 
135
			}
144
            }
Line 136... Line 145...
136
		} 
145
        } 
137
 
146
 
138
	/*	
147
 
139
		print_r($line[COMMUNE]);
148
//	print_r($line[COMMUNE]);
140
		print_r($line[LIEUDIT]);
149
//		print_r($line[LIEUDIT]);
-
 
150
//		print_r($line[STATION]);
141
		print_r($line[STATION]);
151
//		print_r($line[MILIEU]);
142
		print_r($line[MILIEU]);
152
//		print_r($line[DEPARTEMENT]);
143
		print_r($line[LATITUDE]);
153
//		print_r($line[LATITUDE]);
144
		print_r($line[LONGITUDE]);
154
//		print_r($line[LONGITUDE]);
145
		print_r($line[NOTES]);
155
//		print_r($line[NOTES]);
146
		print_r($line[DATEOBS]);
156
//		print_r($line[DATEOBS]);
147
		print_r($line[ESPECE]);
157
//		print_r($line[ESPECE]);
Line 148... Line 158...
148
		print_r($line[IMAGE]);
158
//		print_r($line[IMAGE]);
Line 149... Line 159...
149
	*/
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'); 
-
 
170
        $query="SELECT MAX(ordre) AS ordre FROM cel_inventory WHERE identifiant='".$DB->escapeSimple($pairs['utilisateur'])."' ";
-
 
171
 
-
 
172
        $res =& $DB->query($query);
-
 
173
        if (DB::isError($res)) {
-
 
174
            die($res->getMessage());
-
 
175
        }
-
 
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 {
161
	//				print "vide";
188
	//				print "vide";
162
				}
189
				}
163
				$i++;
190
				$i++;
164
			}
191
			}
165
			while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$rowcount)) {
192
			while (($this->analyserLigne($line,$i)==LIGNE_NORMALE) && ($i<=$rowcount)) {
166
				$ordre=$this->traiterLigne($line,$i,$pairs['utilisateur']);
193
				$ordre=$this->traiterLigne($line,$i,$pairs['utilisateur'],$DB);
167
				if ($ordre>0) {
194
				if ($ordre>0) {
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 ;
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 251... Line 282...
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
			}
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'])."','".
Line 324... Line 342...
324
                $DB->escapeSimple($info_milieu)."','".
342
                    $DB->escapeSimple($info_milieu)."','".
325
                $DB->escapeSimple($info_notes)."',".
343
                    $DB->escapeSimple($info_notes)."',".
326
                "now() , now(),'".
344
                    "now() , now(),'".
327
                $DB->escapeSimple($info_latitude)."','".
345
                    $DB->escapeSimple($info_latitude)."','".
328
                $DB->escapeSimple($info_longitude)."')";
346
                    $DB->escapeSimple($info_longitude)."')";
329
//		print $query;
-
 
330
//		print "\n";
347
//		print "\n";
Line 331... Line 348...
331
 
348
 
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];
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
 
Line 495... Line 517...
495
					$row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
517
            $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
496
		 			return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$elements[1]);
518
            return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$elements[1]);
Line 497... Line 519...
497
 
519
 
Line 498... Line 520...
498
		}
520
		}
-
 
521
 
Line -... Line 522...
-
 
522
		else { //  Numero taxonomique ou nom scientifique
Line 499... Line 523...
499
 
523
	        preg_match('/BDNFFnt([0-9][0-9]*)/',$identifiant_espece,$elements);
500
		else { // Nom scientifique
-
 
Line -... Line 524...
-
 
524
			
-
 
525
		    if ($elements[1]) { // Numero taxonomique
-
 
526
    
-
 
527
                $DB=$this->connectDB($this->config);
-
 
528
 
-
 
529
                $query = "SELECT DISTINCT en_nom_genre, en_epithete_espece, en_nom_supra_generique, en_epithete_infra_generique,".
501
 
-
 
-
 
530
                    "   auteur_bex.enaia_intitule_abrege AS abreviation_auteur_basio_ex ".
-
 
531
                    " , auteur_b.enaia_intitule_abrege AS abreviation_auteur_basio ".
-
 
532
                    " , auteur_mex.enaia_intitule_abrege AS abreviation_auteur_modif_ex ".
-
 
533
                    " , auteur_m.enaia_intitule_abrege AS abreviation_auteur_modif ".
-
 
534
                    " , en_epithete_espece, en_epithete_infra_specifique, enrg_abreviation_rang, en_id_nom" .
-
 
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" .
Line 502... Line -...
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] => 
546
                    " AND en_ce_auteur_basio_ex = auteur_bex.enaia_id_intitule_naturaliste_abrege ".
Line -... Line 547...
-
 
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 ".
515
    [num_taxo] => 
549
                    " AND en_ce_auteur_modif = auteur_m.enaia_id_intitule_naturaliste_abrege ".
Line 516... Line -...
516
    [rang_taxonomique] => 250
-
 
517
    [nom_courant] => monspessulanum
-
 
518
    [nom_superieur] => Acer
-
 
519
    [agg] => 
-
 
520
    [nom_complet] => Acer monspessulanum
-
 
521
 
-
 
522
/*
-
 
523
 
-
 
524
  [nom_genre] => Acer
-
 
525
    [nom_sp] => monspessulanum
-
 
526
    [auteur_sp] => 
550
                    " AND esn_id_version_projet_taxon=en_id_version_projet_nom ";
527
    [nom_complement] => 
-
 
528
    [type_infrasp] => subsp.
551
 
Line 529... Line -...
529
    [nom_infrasp] => monspessulanum
-
 
Line -... Line 552...
-
 
552
                $res =& $DB->query($query);
-
 
553
 
-
 
554
                if (DB::isError($res)) {
-
 
555
                    die($res->getMessage());
-
 
556
                }
Line -... Line 557...
-
 
557
 
530
    [num_nomenc] => 
558
                $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
Line -... Line 559...
-
 
559
                return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$row['en_id_nom']);
-
 
560
 
531
    [num_taxo] => 
561
 
532
    [rang_taxonomique] => 280
562
            }
533
    [nom_courant] => monspessulanum
563
 
534
    [nom_superieur] => monspessulanum
564
            else { // Nom scientifique
535
    [agg] => 
565
                $nameparser=new NameParser();
-
 
566
                $nom_latin_decoupe=$nameparser->parse($identifiant_espece);
-
 
567
 
536
    [nom_complet] => Acer monspessulanum subsp. monspessulanum
568
//print_r($nom_latin_decoupe);
-
 
569
                    $DB=$this->connectDB($this->config); // FIXME regarder si opportun ici
-
 
570
 
537
 
571
                        // requete sous espece (on privilegie les noms retenu cf tri par esn_ce_statut) 
-
 
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 ".
538
*/
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 " .
539
 
581
                                            " ORDER BY esn_ce_statut ".
Line 540... Line -...
540
 
-
 
541
        		$DB=$this->connectDB($this->config); // FIXME regarder si opportun ici
582
                                            " LIMIT 1";
542
 
-
 
543
                      	$query="SELECT DISTINCT en_id_nom" .
583
                        }
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'])."' " .
584
                        else { // espece  (on privilegie les noms retenu cf tri par esn_ce_statut)
546
                                        " AND en_ce_rang = '".$DB->escapeSimple($nom_latin_decoupe['rang_taxonomique'])."' " ;
585
                             $query="SELECT DISTINCT en_id_nom, esn_ce_statut" .
547
					if (isset($nom_latin_decoupe['nom_infrasp']) && $nom_latin_decoupe['nom_infrasp']!="") {
586
                                            " FROM eflore_nom, eflore_nom_rang, eflore_selection_nom " .
Line 548... Line 587...
548
						$query.=" AND en_epithete_infra_specifique = '".$DB->escapeSimple($nom_latin_decoupe['nom_infrasp'])."' " ;
587
                                            " WHERE en_id_version_projet_nom = '25' AND en_nom_genre = '".$DB->escapeSimple($nom_latin_decoupe['genus'])."' " .
Line 588... Line 627...
588
 
627
 
589
					if (DB::isError($res)) {
628
                if (DB::isError($res)) {
590
						die($res->getMessage());
629
                    die($res->getMessage());
Line -... Line 630...
-
 
630
                }
591
					}
631
 
592
 
632
                if ($res->numRows() > 0 ) {
-
 
633
                    $row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
-
 
634
                    return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$id_nom['en_id_nom']);
-
 
635
                }
-
 
636
                else {
Line -... Line 637...
-
 
637
                    return array("nom_sel"=>$identifiant_espece);
593
					$row =& $res->fetchrow(DB_FETCHMODE_ASSOC);
638
                }
Line 594... Line 639...
594
		 			return array("nom_sel"=>$this->formaterNom($row),"en_id_nom"=>$id_nom['en_id_nom']);
639
 
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 ...
Line 665... Line 707...
665
 
707
 
666
        if (DB::isError($res)) {
708
                if (DB::isError($res)) {
667
                die($res->getMessage());
709
                    die($res->getMessage());
Line 668... Line 710...
668
        }
710
                }
669
 
-
 
Line 670... Line 711...
670
                // Nom retenu, Num Nomen nom retenu, Num Taxon,
711
 
Line 671... Line 712...
671
                                                                                // Famille
712
                // Nom retenu, Num Nomenclatural nom retenu, Num Taxon,
672
 
713
 
-
 
714
                $value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>"");
-
 
715
 
673
                $value=array('Nom_Retenu'=>"",'Num_Nom_Retenu'=>"0",'Num_Taxon'=>"0",'Famille'=>"");
716
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
674
 
717
                    $fam=$this->rechercherFamille($row['esn_id_taxon'],$DB);
675
                while ($row =& $res->fetchrow(DB_FETCHMODE_ASSOC)) {
718
 
676
                        $fam=$this->rechercherFamille($row['esn_id_taxon'],$DB);
719
                    // Recherche Famille 
677
                while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) {
720
                    while (($fam['en_ce_rang']!='fin') && ($fam['en_ce_rang'] !=120)) {
678
                        $fam=$this->rechercherFamille($fam['etr_id_taxon_2'],$DB);
721
                        $fam=$this->rechercherFamille($fam['etr_id_taxon_2'],$DB);
679
                }
722
                    }
680
                if ($fam['en_ce_rang']==120) {
723
                    if ($fam['en_ce_rang']==120) {
681
                        $famille=$fam['en_nom_supra_generique'];
724
                        $famille=$fam['en_nom_supra_generique'];
682
                }
-
 
683
                else {
-
 
Line -... Line 725...
-
 
725
                    }
684
                        $famille="Famille inconnue";
726
                    else {
Line 685... Line 727...
685
                }
727
                        $famille="Famille inconnue";
Line 756... Line 798...
756
 
798
 
Line 757... Line 799...
757
}
799
}
-
 
800
 
758
 
801
 
759
 
802
function retournerAuteur($rawnom) {
760
function retournerAuteur($rawnom) {
803
 
761
                $auteurs = '';
804
    $auteurs = '';
762
                $auteur_basio = '';
805
    $auteur_basio = '';
Line 792... Line 835...
792
 
835
 
Line -... Line 836...
-
 
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",
-
 
888
"\xc2\x91" => "\xe2\x80\x98",
-
 
889
"\xc2\x92" => "\xe2\x80\x99",
-
 
890
"\xc2\x93" => "\xe2\x80\x9c",
-
 
891
"\xc2\x94" => "\xe2\x80\x9d",
-
 
892
"\xc2\x95" => "\xe2\x80\xa2",
-
 
893
"\xc2\x96" => "\xe2\x80\x93",
-
 
894
"\xc2\x97" => "\xe2\x80\x94",
-
 
895
 
-
 
896
"\xc2\x98" => "\xcb\x9c",
-
 
897
"\xc2\x99" => "\xe2\x84\xa2",
-
 
898
"\xc2\x9a" => "\xc5\xa1",
-
 
899
"\xc2\x9b" => "\xe2\x80\xba",
-
 
900
"\xc2\x9c" => "\xc5\x93",
-
 
901
"\xc2\x9e" => "\xc5\xbe",
Line 793... Line 902...
793
 
902
"\xc2\x9f" => "\xc5\xb8"
794
}
903
);
795
 
904
return strtr ( utf8_encode ( $str ), $cp1252_map );
796
 
905
}