Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 606 Rev 760
Line 33... Line 33...
33
define('NOTES','notes'); // Texte libre
33
define('NOTES','notes'); // Texte libre
34
define('DATEOBS','date'); // date au format jj/mm/aaaa
34
define('DATEOBS','date'); // date au format jj/mm/aaaa
35
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)
36
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
37
define('DEPARTEMENT','departement'); //  Texte libre
-
 
38
define('TRANSMETTRE','transmettre'); //  "1" ou "oui", toute autre valeur (y compris vide) sera consideree comme "non""
Line 38... Line 39...
38
 
39
 
39
 
40
 
40
// Resultat de l'analyse d'une ligne
41
// Resultat de l'analyse d'une ligne
Line 47... Line 48...
47
 
48
 
Line 48... Line 49...
48
Class InventoryImportExcel extends DBAccessor  {
49
Class InventoryImportExcel extends DBAccessor  {
Line 49... Line 50...
49
 
50
 
Line 50... Line 51...
50
// Element constituant une observation 
51
// Element constituant une observation 
51
 
52
 
Line 52... Line 53...
52
	var $format_observation=array(COMMUNE ,LIEUDIT ,STATION , DEPARTEMENT, MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,IMAGE );
53
	var $format_observation=array(COMMUNE ,LIEUDIT ,STATION , DEPARTEMENT, MILIEU ,LATITUDE ,LONGITUDE ,NOTES ,DATEOBS ,ESPECE ,TRANSMETTRE, IMAGE );
53
 
54
 
Line 54... Line 55...
54
// Fichier configuration
55
// Fichier configuration
55
	var $config;
56
	var $config;
-
 
57
 
-
 
58
// Encapsulation classe lecture fichier excel
Line 56... Line 59...
56
 
59
	var $extendExcelReader;
57
// Encapsulation classe lecture fichier excel
60
 
58
	var $extendExcelReader;
61
// Dernier numero d'ordre utilise
59
 
62
	var $dernier_ordre=1;
Line 68... Line 71...
68
		$this->config=$config;
71
		$this->config=$config;
69
		// Pas d'heritage multiple en php :(
72
		// Pas d'heritage multiple en php :(
Line 70... Line 73...
70
 
73
 
71
		$this->extendExcelReader = new ExcelReader();
74
		$this->extendExcelReader = new ExcelReader();
72
		$this->extendExcelReader->initExcelReader();
-
 
73
 
-
 
74
/* Recherche dernier numero d'ordre utilise : pas de mise a jour concurente a priori */
-
 
75
 
-
 
76
 
75
		$this->extendExcelReader->initExcelReader();
Line 77... Line 76...
77
	}
76
	}
78
 
77
 
79
/**
78
/**
Line 92... Line 91...
92
            $infos_fichier = $file ;
91
            $infos_fichier = $file ;
93
        }
92
        }
Line 94... Line 93...
94
 
93
 
95
 
-
 
96
// Chargement tableau en memoire
94
 
97
 
95
// Chargement tableau en memoire
Line 98... Line 96...
98
		$data = new Spreadsheet_Excel_Reader($infos_fichier['tmp_name'], false); // false : pour menager la memoire.
96
		$data = new Spreadsheet_Excel_Reader($infos_fichier['tmp_name'], false); // false : pour menager la memoire.
99
		$arr = array();
97
		$arr = array();
Line 108... Line 106...
108
 
106
 
109
// Chargement tableau 
107
// Chargement tableau 
110
        for($row=1;$row<=$rowcount;$row++) 
108
        for($row=1;$row<=$rowcount;$row++) 
111
            for($col=1;$col<=$colcount;$col++) 
109
            for($col=1;$col<=$colcount;$col++) 
112
                $arr[$col][$row] = $data->val($row,$col,0); // Attention, inversion voulue
-
 
113
 
110
                $arr[$col][$row] = $data->val($row,$col,0); // Attention, inversion voulue
114
 
-
 
115
                        
111
              
Line 116... Line 112...
116
// 1 : Traitement intitules
112
// 1 : Traitement intitules
Line 117... Line 113...
117
 
113
 
Line 133... Line 129...
133
                case LATITUDE:
129
                case LATITUDE:
134
                case LONGITUDE:
130
                case LONGITUDE:
135
                case NOTES:
131
                case NOTES:
136
                case DATEOBS:
132
                case DATEOBS:
137
                case ESPECE:
133
                case ESPECE:
-
 
134
                case TRANSMETTRE:
138
                case IMAGE:
135
                case IMAGE:
139
                    $selection=array_values($arr[$col]);
136
                    $selection=array_values($arr[$col]);
140
                    array_shift($selection); // On ne garde pas la premiere ligne, qui contient les intitules
137
                    array_shift($selection); // On ne garde pas la premiere ligne, qui contient les intitules
141
                    $line[$colonne]=$selection;
138
                    $line[$colonne]=$selection;
142
                    break;
139
                    break;
Line 143... Line 140...
143
 
140
 
144
            }
141
            }
145
        } 
-
 
146
 
142
        } 
147
 
143
 
148
//	print_r($line[COMMUNE]);
144
//	print_r($line[COMMUNE]);
149
//		print_r($line[LIEUDIT]);
145
//		print_r($line[LIEUDIT]);
150
//		print_r($line[STATION]);
146
//		print_r($line[STATION]);
151
//		print_r($line[MILIEU]);
147
//		print_r($line[MILIEU]);
Line 159... Line 155...
159
	
155
	
Line 160... Line 156...
160
 
156
 
-
 
157
// 1 : Traitement lignes
Line 161... Line 158...
161
// 1 : Traitement lignes
158
 
Line 208... Line 205...
208
			}
205
			}
Line 209... Line 206...
209
			
206
			
210
	
207
	
-
 
208
		}
-
 
209
		//print $cpt_obs ." nouvelle(s) observation(s) !";
-
 
210
		$message = '';
-
 
211
		
-
 
212
		if($this->cpt_images_liees > 0) {
-
 
213
			$message = $this->cpt_images_liees.' images liees pour ';
-
 
214
		}
211
		}
215
		
Line 212... Line 216...
212
		//print $cpt_obs ." nouvelle(s) observation(s) !";
216
		$message .= $cpt_obs;
Line 213... Line 217...
213
		print $cpt_obs ;
217
		print $message;
-
 
218
 
214
 
219
	}
215
	}
220
 
216
 
221
function analyserLigne($line,$i) {
-
 
222
	
-
 
223
	$ligne_vide=true;
-
 
224
	$ligne_image_seulement=true;
217
function analyserLigne($line,$i) {
225
	$ligne_normale=true;
-
 
226
	
-
 
227
	$ligne_identique_sauf_image = true;
-
 
228
	
-
 
229
	foreach ($this->format_observation as $colonne) {
-
 
230
		
-
 
231
		if($i < 1) {
-
 
232
			$ligne_identique_sauf_image = false;
-
 
233
		} else {
-
 
234
			
-
 
235
			if($colonne!= IMAGE && $line[$colonne][$i - 1] != $line[$colonne][$i] && $line[$colonne][$i] != '') {
218
	$ligne_vide=true;
236
				$ligne_identique_sauf_image = false;
219
	$ligne_image_seulement=true;
237
			}
220
	$ligne_normale=true;
238
		} 
221
	foreach ($this->format_observation as $colonne) {
239
		
222
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
-
 
223
			if ($colonne!=IMAGE) {
240
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
224
				$ligne_image_seulement=false;
241
			if ($colonne!=IMAGE) {
225
				$ligne_vide=false;
242
				$ligne_image_seulement=false;
226
				break;
243
				$ligne_vide=false;
-
 
244
			}		
227
			}		
245
			$ligne_vide=false;
228
			$ligne_vide=false;
246
		}		
229
		}
247
	}
230
	}
248
	
231
	if ($ligne_vide) {
249
	if ($ligne_vide) {
232
		return LIGNE_VIDE;
250
		return LIGNE_VIDE;
233
	}
251
	}
234
	else {
252
	else {
235
		if ($ligne_image_seulement) {
253
		if ($ligne_image_seulement || $ligne_identique_sauf_image) {
236
			return LIGNE_IMAGE_SEULEMENT;
254
			return LIGNE_IMAGE_SEULEMENT;
Line 242... Line 260...
242
	
260
	
Line 243... Line 261...
243
 
261
 
-
 
262
}
244
}
263
 
-
 
264
function traiterLigne($line,$i,$utilisateur,$DB) { // Controle donnee et insertion
-
 
265
	
245
 
266
	$info_image=array();
246
function traiterLigne($line,$i,$utilisateur,$DB) { // Controle donnee et insertion
267
	$info_transmettre = "0";
247
	$info_image=array();
268
	
248
	foreach ($this->format_observation as $colonne) {
269
	foreach ($this->format_observation as $colonne) {
249
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
270
		if (isset ($line[$colonne][$i]) && $line[$colonne][$i]!='') {
Line 273... Line 294...
273
					$info_notes=$this->traiterNotes($line[NOTES][$i]);
294
					$info_notes=$this->traiterNotes($line[NOTES][$i]);
274
					break;
295
					break;
275
				case DATEOBS:
296
				case DATEOBS:
276
					$info_dateobs=$this->traiterDateObs($line[DATEOBS][$i]);
297
					$info_dateobs=$this->traiterDateObs($line[DATEOBS][$i]);
277
					break;
298
					break;
-
 
299
				case TRANSMETTRE:
-
 
300
					$info_transmettre=$this->traiterTransmettre($line[TRANSMETTRE][$i]);
-
 
301
				break;
278
				case ESPECE:
302
				case ESPECE:
279
					$info_espece=$this->traiterEspece($line[ESPECE][$i]);
303
					$info_espece=$this->traiterEspece($line[ESPECE][$i]);
280
                    if (isset($info_espece['en_id_nom']) && $info_espece['en_id_nom']!='') {
304
                    if (isset($info_espece['en_id_nom']) && $info_espece['en_id_nom']!='') {
281
                        $complement=$this->rechercherInformationsComplementaires($info_espece['en_id_nom']);
305
                        $complement=$this->rechercherInformationsComplementaires($info_espece['en_id_nom']);
282
                        $info_espece['nom_ret']=$complement['Nom_Retenu'];
306
                        $info_espece['nom_ret']=$complement['Nom_Retenu'];
Line 314... Line 338...
314
					$info_latitude="000null";
338
					$info_latitude="000null";
315
					break;
339
					break;
316
				case LONGITUDE:
340
				case LONGITUDE:
317
					$info_longitude="000null";
341
					$info_longitude="000null";
318
					break;
342
					break;
-
 
343
					
-
 
344
				case TRANSMETTRE:
-
 
345
					$info_transmettre = "0";
-
 
346
				break;
Line 319... Line 347...
319
 
347
 
Line 320... Line 348...
320
			}
348
			}
321
 
349
 
Line 322... Line 350...
322
		}
350
		}
Line 323... Line 351...
323
	}
351
	}
324
 
352
 
325
                $this->dernier_ordre++;
353
                $this->dernier_ordre++;
326
 
354
 
327
                list($jour,$mois,$annee)=split("/",$info_dateobs);
355
                list($jour,$mois,$annee)=split("/",$info_dateobs);
328
                $info_dateobs=$annee."-".$mois."-".$jour." 0:0:0";
356
                $info_dateobs=$annee."-".$mois."-".$jour." 0:0:0";
329
                $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) " .
357
                $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) " .
330
                    " VALUES('".$DB->escapeSimple($utilisateur)."','".
358
                    " VALUES('".$DB->escapeSimple($utilisateur)."','".
Line 339... Line 367...
339
                    $DB->escapeSimple($info_commune['code'])."','".
367
                    $DB->escapeSimple($info_commune['code'])."','".
340
                    $DB->escapeSimple($info_dateobs)."','".
368
                    $DB->escapeSimple($info_dateobs)."','".
341
                    $DB->escapeSimple($info_lieudit)."','".
369
                    $DB->escapeSimple($info_lieudit)."','".
342
                    $DB->escapeSimple($info_station)."','".
370
                    $DB->escapeSimple($info_station)."','".
343
                    $DB->escapeSimple($info_milieu)."','".
371
                    $DB->escapeSimple($info_milieu)."','".
344
                    $DB->escapeSimple($info_notes)."',".
372
                    $DB->escapeSimple($info_notes)."','".
-
 
373
                    $DB->escapeSimple($info_transmettre)."',".
345
                    "now() , now(),'".
374
                    "now() , now(),'".
346
                    $DB->escapeSimple($info_latitude)."','".
375
                    $DB->escapeSimple($info_latitude)."','".
347
                    $DB->escapeSimple($info_longitude)."')";
376
                    $DB->escapeSimple($info_longitude)."')";
348
//		print "\n";
377
//		print "\n";
349
 
-
 
350
		   $res =& $DB->query($query);
378
		   $res =& $DB->query($query);
Line 351... Line 379...
351
 
379
 
352
                if (PEAR::isError($res)) {
380
                if (PEAR::isError($res)) {
353
                        return false;
381
                        return false;
354
                }
-
 
355
		
382
                }
356
 
383
	
357
	// creation lien image
384
	// creation lien image
Line 358... Line 385...
358
	foreach ($info_image as $pic) {
385
	foreach ($info_image as $pic) {
359
 
-
 
360
		$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' ;	
-
 
Line 361... Line 386...
361
	
386
 
Line 362... Line 387...
362
//print $query;
387
		$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' ;	
363
 
388
 
-
 
389
		$res =& $DB->query($query);
-
 
390
 
364
		$res =& $DB->query($query);
391
                if (PEAR::isError($res)) {
365
 
-
 
366
                if (PEAR::isError($res)) {
-
 
367
                        return false;
392
                        return false;
Line 368... Line 393...
368
                }
393
                } else {
Line 369... Line 394...
369
		
394
                	$this->cpt_images_liees++;
Line 370... Line 395...
370
 
395
                }
Line -... Line 396...
-
 
396
	}
-
 
397
 
371
	}
398
 
-
 
399
 
Line -... Line 400...
-
 
400
		return $this->dernier_ordre;
-
 
401
 
-
 
402
 
-
 
403
}
-
 
404
 
-
 
405
function traiterLigneComplement($line,$i,$utilisateur, $ordre = null) {
-
 
406
 
-
 
407
	$info_image=$this->traiterImage($line[IMAGE][$i],$utilisateur); // Image separee par des / +  utilisateur
-
 
408
	
-
 
409
	// creation lien image
-
 
410
	foreach ($info_image as $pic) {
372
 
411
 
373
 
412
		$DB=$this->connectDB($this->config,'cel_db');
Line 374... Line 413...
374
 
413
		$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' ;	
Line 375... Line 414...
375
		return $this->dernier_ordre;
414
 
Line 376... Line 415...
376
 
415
		$res =& $DB->query($query);
Line 377... Line 416...
377
 
416
 
Line 378... Line 417...
378
}
417
    	if (PEAR::isError($res)) {
379
 
418
            return false;
Line 452... Line 491...
452
    $milieu=fix_latin($milieu);
491
    $milieu=fix_latin($milieu);
453
	return trim($milieu);
492
	return trim($milieu);
454
}
493
}
Line 455... Line 494...
455
 
494
 
-
 
495
function traiterDepartement($departement) { // texte libre
-
 
496
 
-
 
497
	if(is_numeric($departement) && strlen($departement) == 5) {
-
 
498
		$departement = substr($departement,0,2);
-
 
499
	}
-
 
500
	
-
 
501
	if(is_numeric($departement) && strlen($departement) == 4) {
456
function traiterDepartement($departement) { // texte libre
502
		$departement = substr($departement,0,1);
-
 
503
		$departement = "0"+$departement;
457
//	echo "traitement milieu";
504
	}
458
	return utf8_encode(trim($departement));
505
	return utf8_encode(trim($departement));
Line 459... Line 506...
459
}
506
}
460
 
507
 
Line 477... Line 524...
477
function traiterDateObs($dateobs) { // verifier jj/mm/aaaa sinon date vide TODO 
524
function traiterDateObs($dateobs) { // verifier jj/mm/aaaa sinon date vide TODO 
478
//	echo "traitement dateobs";
525
//	echo "traitement dateobs";
479
	return trim($dateobs);
526
	return trim($dateobs);
480
}
527
}
Line -... Line 528...
-
 
528
 
-
 
529
function traiterTransmettre($transmettre) {
-
 
530
	
-
 
531
	$transmission = '0';
-
 
532
	
-
 
533
	if (trim($transmettre) == "1" || trim($transmettre) == "oui") {	
-
 
534
		$transmission = '1';
-
 
535
	}
-
 
536
	
-
 
537
	return $transmission;
-
 
538
}
481
 
539
 
Line 482... Line 540...
482
function traiterEspece($identifiant_espece) {  // texte libre, nom scientifique , ou code nomenclatural (format BDNFFnn999999) ou code taxonomique (format BDNFFnt999999)
540
function traiterEspece($identifiant_espece) {  // texte libre, nom scientifique , ou code nomenclatural (format BDNFFnn999999) ou code taxonomique (format BDNFFnt999999)
483
 
541
 
Line 653... Line 711...
653
 
711
 
Line 654... Line -...
654
 
-
 
655
 
712
 
Line 656... Line 713...
656
function traiterImage($images,$utilisateur) { // recherche id image de ce nom 
713
 
Line 657... Line 714...
657
 
714
function traiterImage($images,$utilisateur) { // recherche id image de ce nom