30,11 → 30,9 |
error_reporting(-1); |
ini_set('html_errors', 0); |
ini_set('xdebug.cli_color', 2); |
date_default_timezone_set('Europe/Paris'); |
require_once 'lib/PHPExcel/Classes/PHPExcel.php'; |
require_once 'FormateurGroupeColonne.php'; |
|
date_default_timezone_set('Europe/Paris'); |
|
// nombre d'INSERT à cumuler par requête SQL |
// (= nombre de lignes XLS à bufferiser) |
//define('NB_LIRE_LIGNE_SIMUL', 30); |
82,37 → 80,37 |
static function __anonyme_4(&$item, $key) { $item = self::quoteNonNull(trim($item)); } |
|
static $ordre_BDD = Array( |
"ce_utilisateur", |
"prenom_utilisateur", |
"nom_utilisateur", |
"courriel_utilisateur", |
"ordre", |
"nom_sel", |
"nom_sel_nn", |
"nom_ret", |
"nom_ret_nn", |
"nt", |
"famille", |
"nom_referentiel", |
"zone_geo", |
"ce_zone_geo", |
"date_observation", |
"lieudit", |
"station", |
"milieu", |
"mots_cles_texte", |
"commentaire", |
"transmission", |
"date_creation", |
"date_modification", |
"date_transmission", |
"latitude", |
"longitude", |
"altitude", |
"abondance", |
"certitude", |
"phenologie", |
"code_insee_calcule" |
'ce_utilisateur', |
'prenom_utilisateur', |
'nom_utilisateur', |
'courriel_utilisateur', |
'ordre', |
'nom_sel', |
'nom_sel_nn', |
'nom_ret', |
'nom_ret_nn', |
'nt', |
'famille', |
'nom_referentiel', |
'zone_geo', |
'ce_zone_geo', |
'date_observation', |
'lieudit', |
'station', |
'milieu', |
'mots_cles_texte', |
'commentaire', |
'transmission', |
'date_creation', |
'date_modification', |
'date_transmission', |
'latitude', |
'longitude', |
'altitude', |
'abondance', |
'certitude', |
'phenologie', |
'code_insee_calcule' |
); |
|
// cf: initialiser_pdo_ordered_statements() |
141,16 → 139,16 |
initialiser_colonnes_statiques() y merge les données d'identification utilisateur |
*/ |
public $colonnes_statiques = array( |
"ce_utilisateur" => NULL, |
"prenom_utilisateur" => NULL, |
"nom_utilisateur" => NULL, |
"courriel_utilisateur" => NULL, |
'ce_utilisateur' => NULL, |
'prenom_utilisateur' => NULL, |
'nom_utilisateur' => NULL, |
'courriel_utilisateur' => NULL, |
|
// fixes (fonction SQL) |
// XXX future: mais pourraient varier dans le futur si la mise-à-jour |
// d'observation est implémentée |
"date_creation" => "now()", |
"date_modification" => "now()", |
'date_creation' => 'now()', |
'date_modification' => 'now()', |
); |
|
public static $prefixe_colonnes_etendues = 'ext:'; |
165,11 → 163,7 |
// cache (pour traiterLocalisation() pour l'instant) |
static $cache = Array('geo' => array()); |
|
function ImportXLS($config) { |
parent::__construct($config); |
} |
|
function createElement($pairs) { |
public function createElement($pairs) { |
if (!isset($pairs['utilisateur']) || trim($pairs['utilisateur']) == '') { |
exit('0'); |
} |
507,25 → 501,33 |
} |
|
static function stockerImages($enregistrements, $toutes_images, $ordre_ids) { |
$idsImagesObs = array(); |
$valuesSql = array(); |
foreach ($toutes_images as $images_pour_obs) { |
$obs = $enregistrements[$images_pour_obs['obs_pos']]; |
$id_obs = $ordre_ids[$obs['ordre']]; // id réel de l'observation correspondant à l'ordre |
$transmission = $obs['transmission']; |
$date_transmission = $obs['date_transmission']; |
foreach ($images_pour_obs['images'] as $image) { |
$idsImagesObs[] = sprintf('(%d,%d, NOW())', $image['id_image'], $id_obs); |
$id_img = $image['id_image']; |
$valuesSql[] = "($id_img, $id_obs, NOW(), $transmission, $date_transmission)"; |
} |
} |
|
if ($idsImagesObs) { |
$clauseValues = implode(', ', $idsImagesObs); |
// Utilisation de INSET pour faire des UPDATE multiples en une seule requête |
$requete = 'INSERT INTO cel_images (id_image, ce_observation, date_liaison) '. |
if ($valuesSql) { |
$clauseValues = implode(', ', $valuesSql); |
// Utilisation de INSERT pour faire des UPDATE multiples en une seule requête |
$requete = 'INSERT INTO cel_images '. |
'(id_image, ce_observation, date_liaison, transmission, date_transmission) '. |
"VALUES $clauseValues ". |
'ON DUPLICATE KEY UPDATE ce_observation = VALUES(ce_observation), date_liaison = NOW() '. |
'ON DUPLICATE KEY UPDATE '. |
'ce_observation = VALUES(ce_observation), '. |
'date_liaison = NOW(), '. |
'transmission = VALUES(transmission), '. |
'date_transmission = VALUES(date_transmission) '. |
' -- '.__FILE__.':'.__LINE__; |
Cel::db()->requeter($requete); |
Cel::db()->executer($requete); |
} |
return count($idsImagesObs); |
return count($valuesSql); |
} |
|
/* |
571,7 → 573,7 |
|
// Dans ce tableau, seules devraient apparaître les données variable pour chaque ligne. |
// Dans ce tableau, l'ordre des clefs n'importe pas (cf: self::sortArrayByArray()) |
$enregistrement = Array( |
$enregistrement = array( |
"ordre" => $dernier_ordre, |
|
"nom_sel" => $espece[C_NOM_SEL], |
587,23 → 589,23 |
"ce_zone_geo" => $localisation[C_CE_ZONE_GEO], |
|
// $ligne: uniquement pour les infos en cas de gestion d'erreurs (date incompréhensible) |
"date_observation" => isset($ligne[C_DATE_OBSERVATION]) ? self::traiterDateObs($ligne[C_DATE_OBSERVATION], $ref_ligne) : NULL, |
"date_observation" => isset($ligne[C_DATE_OBSERVATION]) ? self::traiterDateObs($ligne[C_DATE_OBSERVATION], $ref_ligne) : null, |
|
"lieudit" => isset($ligne[C_LIEUDIT]) ? trim($ligne[C_LIEUDIT]) : NULL, |
"station" => isset($ligne[C_STATION]) ? trim($ligne[C_STATION]) : NULL, |
"milieu" => isset($ligne[C_MILIEU]) ? trim($ligne[C_MILIEU]) : NULL, |
"lieudit" => isset($ligne[C_LIEUDIT]) ? trim($ligne[C_LIEUDIT]) : null, |
"station" => isset($ligne[C_STATION]) ? trim($ligne[C_STATION]) : null, |
"milieu" => isset($ligne[C_MILIEU]) ? trim($ligne[C_MILIEU]) : null, |
|
"mots_cles_texte" => NULL, // TODO: foreign-key |
// XXX: @ contre "Undefined index" |
"commentaire" => isset($ligne[C_COMMENTAIRE]) ? trim($ligne[C_COMMENTAIRE]) : NULL, |
"commentaire" => isset($ligne[C_COMMENTAIRE]) ? trim($ligne[C_COMMENTAIRE]) : null, |
|
"transmission" => $transmission, |
"date_transmission" => $transmission ? date("Y-m-d H:i:s") : NULL, // pas de fonction SQL dans un PDO statement, <=> now() |
"date_transmission" => $transmission ? date('Y-m-d H:i:s') : null, // pas de fonction SQL dans un PDO statement, <=> now() |
|
// $ligne: uniquement pour les infos en cas de gestion d'erreurs (lon/lat incompréhensible) |
"latitude" => isset($ligne[C_LATITUDE]) ? self::traiterLonLat(NULL, $ligne[C_LATITUDE], $referentiel, $ref_ligne) : NULL, |
"longitude" => isset($ligne[C_LONGITUDE]) ? self::traiterLonLat($ligne[C_LONGITUDE], NULL, $referentiel, $ref_ligne) : NULL, |
"altitude" => isset($ligne[C_ALTITUDE]) ? intval($ligne[C_ALTITUDE]) : NULL, // TODO: guess alt from lon/lat |
"latitude" => isset($ligne[C_LATITUDE]) ? self::traiterLonLat(null, $ligne[C_LATITUDE], $referentiel, $ref_ligne) : null, |
"longitude" => isset($ligne[C_LONGITUDE]) ? self::traiterLonLat($ligne[C_LONGITUDE], null, $referentiel, $ref_ligne) : null, |
"altitude" => isset($ligne[C_ALTITUDE]) ? intval($ligne[C_ALTITUDE]) : null, // TODO: guess alt from lon/lat |
|
// @ car potentiellement optionnelles ou toutes vides => pas d'index dans PHPExcel (tableau optimisé) |
"abondance" => @$ligne[C_ABONDANCE], |
1079,7 → 1081,7 |
); |
} |
|
// équivalent à Bdd2->proteger() (qui wrap PDO::quote), |
// équivalent à Bdd->proteger() (qui wrap PDO::quote), |
// sans transformer NULL en "" |
static function quoteNonNull($chaine) { |
if (is_null($chaine)) { |