Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2459 Rev 2461
Line 28... Line 28...
28
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(dirname(realpath(__FILE__))) . '/lib');
28
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(dirname(realpath(__FILE__))) . '/lib');
29
// TERM
29
// TERM
30
error_reporting(-1);
30
error_reporting(-1);
31
ini_set('html_errors', 0);
31
ini_set('html_errors', 0);
32
ini_set('xdebug.cli_color', 2);
32
ini_set('xdebug.cli_color', 2);
33
require_once 'lib/PHPExcel/Classes/PHPExcel.php';
-
 
34
require_once 'FormateurGroupeColonne.php';
-
 
35
 
-
 
36
date_default_timezone_set('Europe/Paris');
33
date_default_timezone_set('Europe/Paris');
-
 
34
require_once 'lib/PHPExcel/Classes/PHPExcel.php';
Line 37... Line 35...
37
 
35
 
38
// nombre d'INSERT à cumuler par requête SQL
36
// nombre d'INSERT à cumuler par requête SQL
39
// (= nombre de lignes XLS à bufferiser)
37
// (= nombre de lignes XLS à bufferiser)
40
//define('NB_LIRE_LIGNE_SIMUL', 30);
38
//define('NB_LIRE_LIGNE_SIMUL', 30);
Line 80... Line 78...
80
 
78
 
81
class ImportXLS extends Cel  {
79
class ImportXLS extends Cel  {
Line 82... Line 80...
82
	static function __anonyme_4(&$item, $key) { $item = self::quoteNonNull(trim($item)); }
80
	static function __anonyme_4(&$item, $key) { $item = self::quoteNonNull(trim($item)); }
83
 
81
 
84
	static $ordre_BDD = Array(
82
	static $ordre_BDD = Array(
85
		"ce_utilisateur",
83
		'ce_utilisateur',
86
		"prenom_utilisateur",
84
		'prenom_utilisateur',
87
		"nom_utilisateur",
85
		'nom_utilisateur',
88
		"courriel_utilisateur",
86
		'courriel_utilisateur',
89
		"ordre",
87
		'ordre',
90
		"nom_sel",
88
		'nom_sel',
91
		"nom_sel_nn",
89
		'nom_sel_nn',
92
		"nom_ret",
90
		'nom_ret',
93
		"nom_ret_nn",
91
		'nom_ret_nn',
94
		"nt",
92
		'nt',
95
		"famille",
93
		'famille',
96
		"nom_referentiel",
94
		'nom_referentiel',
97
		"zone_geo",
95
		'zone_geo',
98
		"ce_zone_geo",
96
		'ce_zone_geo',
99
		"date_observation",
97
		'date_observation',
100
		"lieudit",
98
		'lieudit',
101
		"station",
99
		'station',
102
		"milieu",
100
		'milieu',
103
		"mots_cles_texte",
101
		'mots_cles_texte',
104
		"commentaire",
102
		'commentaire',
105
		"transmission",
103
		'transmission',
106
		"date_creation",
104
		'date_creation',
107
		"date_modification",
105
		'date_modification',
108
		"date_transmission",
106
		'date_transmission',
109
		"latitude",
107
		'latitude',
110
		"longitude",
108
		'longitude',
111
		"altitude",
109
		'altitude',
112
		"abondance",
110
		'abondance',
113
		"certitude",
111
		'certitude',
114
		"phenologie",
112
		'phenologie',
Line 115... Line 113...
115
		"code_insee_calcule"
113
		'code_insee_calcule'
116
	);
114
	);
117
 
115
 
Line 139... Line 137...
139
	 - n'ont pas de valeur par défaut dans la structure de la table
137
	 - n'ont pas de valeur par défaut dans la structure de la table
140
	 - nécessitent une initialisation dans le cadre de l'upload
138
	 - nécessitent une initialisation dans le cadre de l'upload
141
	 initialiser_colonnes_statiques() y merge les données d'identification utilisateur
139
	 initialiser_colonnes_statiques() y merge les données d'identification utilisateur
142
	*/
140
	*/
143
	public $colonnes_statiques = array(
141
	public $colonnes_statiques = array(
144
		"ce_utilisateur" => NULL,
142
		'ce_utilisateur' => NULL,
145
		"prenom_utilisateur" => NULL,
143
		'prenom_utilisateur' => NULL,
146
		"nom_utilisateur" => NULL,
144
		'nom_utilisateur' => NULL,
147
		"courriel_utilisateur" => NULL,
145
		'courriel_utilisateur' => NULL,
Line 148... Line 146...
148
 
146
 
149
		// fixes (fonction SQL)
147
		// fixes (fonction SQL)
150
		// XXX future: mais pourraient varier dans le futur si la mise-à-jour
148
		// XXX future: mais pourraient varier dans le futur si la mise-à-jour
151
		// d'observation est implémentée
149
		// d'observation est implémentée
152
		"date_creation" => "now()",
150
		'date_creation' => 'now()',
153
		"date_modification" => "now()",
151
		'date_modification' => 'now()',
Line 154... Line 152...
154
	);
152
	);
155
 
153
 
156
	public static $prefixe_colonnes_etendues = 'ext:';
154
	public static $prefixe_colonnes_etendues = 'ext:';
Line 163... Line 161...
163
	public $bilan = Array();
161
	public $bilan = Array();
Line 164... Line 162...
164
 
162
 
165
	// cache (pour traiterLocalisation() pour l'instant)
163
	// cache (pour traiterLocalisation() pour l'instant)
Line 166... Line -...
166
	static $cache = Array('geo' => array());
-
 
167
 
-
 
168
	function ImportXLS($config) {
-
 
169
		parent::__construct($config);
-
 
170
	}
164
	static $cache = Array('geo' => array());
171
 
165
 
172
	function createElement($pairs) {
166
	public function createElement($pairs) {
173
		if (!isset($pairs['utilisateur']) || trim($pairs['utilisateur']) == '') {
167
		if (!isset($pairs['utilisateur']) || trim($pairs['utilisateur']) == '') {
Line 174... Line 168...
174
			exit('0');
168
			exit('0');
Line 505... Line 499...
505
		}
499
		}
506
		return $c;
500
		return $c;
507
	}
501
	}
Line 508... Line 502...
508
 
502
 
509
	static function stockerImages($enregistrements, $toutes_images, $ordre_ids) {
503
	static function stockerImages($enregistrements, $toutes_images, $ordre_ids) {
510
		$idsImagesObs = array();
504
		$valuesSql = array();
511
		foreach ($toutes_images as $images_pour_obs) {
505
		foreach ($toutes_images as $images_pour_obs) {
512
			$obs = $enregistrements[$images_pour_obs['obs_pos']];
506
			$obs = $enregistrements[$images_pour_obs['obs_pos']];
-
 
507
			$id_obs = $ordre_ids[$obs['ordre']]; // id réel de l'observation correspondant à l'ordre
-
 
508
			$transmission = $obs['transmission'];
513
			$id_obs = $ordre_ids[$obs['ordre']]; // id réel de l'observation correspondant à l'ordre
509
			$date_transmission = $obs['date_transmission'];
-
 
510
			foreach ($images_pour_obs['images'] as $image) {
514
			foreach ($images_pour_obs['images'] as $image) {
511
				$id_img = $image['id_image'];
515
				$idsImagesObs[] = sprintf('(%d,%d, NOW())', $image['id_image'], $id_obs);
512
				$valuesSql[] = "($id_img, $id_obs, NOW(), $transmission, $date_transmission)";
516
			}
513
			}
Line 517... Line 514...
517
		}
514
		}
518
 
515
 
519
		if ($idsImagesObs) {
516
		if ($valuesSql) {
520
			$clauseValues = implode(', ', $idsImagesObs);
517
			$clauseValues = implode(', ', $valuesSql);
-
 
518
			// Utilisation de INSERT pour faire des UPDATE multiples en une seule requête
521
			// Utilisation de INSET pour faire des UPDATE multiples en une seule requête
519
			$requete = 'INSERT INTO cel_images '.
-
 
520
				'(id_image, ce_observation, date_liaison, transmission, date_transmission) '.
522
			$requete = 'INSERT INTO cel_images (id_image, ce_observation, date_liaison) '.
521
				"VALUES $clauseValues ".
-
 
522
				'ON DUPLICATE KEY UPDATE '.
-
 
523
				'ce_observation = VALUES(ce_observation), '.
-
 
524
				'date_liaison = NOW(), '.
523
				"VALUES $clauseValues ".
525
				'transmission = VALUES(transmission), '.
524
				'ON DUPLICATE KEY UPDATE ce_observation = VALUES(ce_observation), date_liaison = NOW() '.
526
				'date_transmission = VALUES(date_transmission) '.
525
				' -- '.__FILE__.':'.__LINE__;
527
				' -- '.__FILE__.':'.__LINE__;
526
			Cel::db()->requeter($requete);
528
			Cel::db()->executer($requete);
527
		}
529
		}
Line 528... Line 530...
528
		return count($idsImagesObs);
530
		return count($valuesSql);
529
	}
531
	}
530
 
532
 
Line 569... Line 571...
569
		@$transmission = in_array(strtolower(trim($ligne[C_TRANSMISSION])), array(1, 'oui')) ? 1 : 0;
571
		@$transmission = in_array(strtolower(trim($ligne[C_TRANSMISSION])), array(1, 'oui')) ? 1 : 0;
Line 570... Line 572...
570
 
572
 
571
 
573
 
572
		// Dans ce tableau, seules devraient apparaître les données variable pour chaque ligne.
574
		// Dans ce tableau, seules devraient apparaître les données variable pour chaque ligne.
573
		// Dans ce tableau, l'ordre des clefs n'importe pas (cf: self::sortArrayByArray())
575
		// Dans ce tableau, l'ordre des clefs n'importe pas (cf: self::sortArrayByArray())
Line 574... Line 576...
574
		$enregistrement = Array(
576
		$enregistrement = array(
575
			"ordre" => $dernier_ordre,
577
			"ordre" => $dernier_ordre,
576
 
578
 
Line 585... Line 587...
585
 
587
 
586
			"zone_geo" => $localisation[C_ZONE_GEO],
588
			"zone_geo" => $localisation[C_ZONE_GEO],
Line 587... Line 589...
587
			"ce_zone_geo" => $localisation[C_CE_ZONE_GEO],
589
			"ce_zone_geo" => $localisation[C_CE_ZONE_GEO],
588
 
590
 
Line 589... Line 591...
589
			// $ligne: uniquement pour les infos en cas de gestion d'erreurs (date incompréhensible)
591
			// $ligne: uniquement pour les infos en cas de gestion d'erreurs (date incompréhensible)
590
			"date_observation" => isset($ligne[C_DATE_OBSERVATION]) ? self::traiterDateObs($ligne[C_DATE_OBSERVATION], $ref_ligne) : NULL,
592
			"date_observation" => isset($ligne[C_DATE_OBSERVATION]) ? self::traiterDateObs($ligne[C_DATE_OBSERVATION], $ref_ligne) : null,
591
 
593
 
Line 592... Line 594...
592
			"lieudit" => isset($ligne[C_LIEUDIT]) ? trim($ligne[C_LIEUDIT]) : NULL,
594
			"lieudit" => isset($ligne[C_LIEUDIT]) ? trim($ligne[C_LIEUDIT]) : null,
593
			"station" => isset($ligne[C_STATION]) ? trim($ligne[C_STATION]) : NULL,
595
			"station" => isset($ligne[C_STATION]) ? trim($ligne[C_STATION]) : null,
594
			"milieu" => isset($ligne[C_MILIEU]) ? trim($ligne[C_MILIEU]) : NULL,
596
			"milieu" => isset($ligne[C_MILIEU]) ? trim($ligne[C_MILIEU]) : null,
Line 595... Line 597...
595
 
597
 
596
			"mots_cles_texte" => NULL, // TODO: foreign-key
598
			"mots_cles_texte" => NULL, // TODO: foreign-key
Line 597... Line 599...
597
			// XXX: @ contre "Undefined index"
599
			// XXX: @ contre "Undefined index"
598
			"commentaire" => isset($ligne[C_COMMENTAIRE]) ? trim($ligne[C_COMMENTAIRE]) : NULL,
600
			"commentaire" => isset($ligne[C_COMMENTAIRE]) ? trim($ligne[C_COMMENTAIRE]) : null,
599
 
601
 
600
			"transmission" => $transmission,
602
			"transmission" => $transmission,
Line 601... Line 603...
601
			"date_transmission" => $transmission ? date("Y-m-d H:i:s") : NULL, // pas de fonction SQL dans un PDO statement, <=> now()
603
			"date_transmission" => $transmission ? date('Y-m-d H:i:s') : null, // pas de fonction SQL dans un PDO statement, <=> now()
602
 
604
 
603
			// $ligne: uniquement pour les infos en cas de gestion d'erreurs (lon/lat incompréhensible)
605
			// $ligne: uniquement pour les infos en cas de gestion d'erreurs (lon/lat incompréhensible)
604
			"latitude" => isset($ligne[C_LATITUDE]) ? self::traiterLonLat(NULL, $ligne[C_LATITUDE], $referentiel, $ref_ligne) : NULL,
606
			"latitude" => isset($ligne[C_LATITUDE]) ? self::traiterLonLat(null, $ligne[C_LATITUDE], $referentiel, $ref_ligne) : null,
Line 1077... Line 1079...
1077
				  )))) .
1079
				  )))) .
1078
			')'
1080
			')'
1079
		);
1081
		);
1080
	}
1082
	}
Line 1081... Line 1083...
1081
 
1083
 
1082
	// équivalent à Bdd2->proteger() (qui wrap PDO::quote),
1084
	// équivalent à Bdd->proteger() (qui wrap PDO::quote),
1083
	// sans transformer NULL en ""
1085
	// sans transformer NULL en ""
1084
	static function quoteNonNull($chaine) {
1086
	static function quoteNonNull($chaine) {
1085
		if (is_null($chaine)) {
1087
		if (is_null($chaine)) {
1086
			return 'NULL';
1088
			return 'NULL';