Line 70... |
Line 70... |
70 |
function __anonyme_3($cell) { return !is_null($cell); };
|
70 |
function __anonyme_3($cell) { return !is_null($cell); };
|
71 |
function __anonyme_5($item) { return is_null($item) ? '?' : $item; }
|
71 |
function __anonyme_5($item) { return is_null($item) ? '?' : $item; }
|
72 |
function __anonyme_6() { return NULL; }
|
72 |
function __anonyme_6() { return NULL; }
|
Line 73... |
Line 73... |
73 |
|
73 |
|
74 |
class ImportXLS extends Cel {
|
74 |
class ImportXLS extends Cel {
|
Line 75... |
Line 75... |
75 |
static function __anonyme_4(&$item, $key, $obj) { $item = $obj->quoteNonNull(trim($item)); }
|
75 |
static function __anonyme_4(&$item, $key) { $item = self::quoteNonNull(trim($item)); }
|
76 |
|
76 |
|
77 |
static $ordre_BDD = Array(
|
77 |
static $ordre_BDD = Array(
|
78 |
"ce_utilisateur",
|
78 |
"ce_utilisateur",
|
Line 268... |
Line 268... |
268 |
|
268 |
|
269 |
$sql_pattern = self::$insert_prefix .
|
269 |
$sql_pattern = self::$insert_prefix .
|
270 |
str_repeat(self::$insert_ligne_pattern . ', ', $nb_rec - 1) .
|
270 |
str_repeat(self::$insert_ligne_pattern . ', ', $nb_rec - 1) .
|
Line 271... |
Line 271... |
271 |
self::$insert_ligne_pattern;
|
271 |
self::$insert_ligne_pattern;
|
272 |
|
272 |
|
273 |
$this->bdd->beginTransaction();
|
273 |
Cel::db()->beginTransaction();
|
274 |
$stmt = $this->bdd->prepare($sql_pattern);
|
274 |
$stmt = Cel::db()->prepare($sql_pattern);
|
Line 275... |
Line 275... |
275 |
$donnees = array();
|
275 |
$donnees = array();
|
Line 276... |
Line 276... |
276 |
foreach($enregistrements as $e) $donnees = array_merge($donnees, array_values($e));
|
276 |
foreach($enregistrements as $e) $donnees = array_merge($donnees, array_values($e));
|
Line 277... |
Line 277... |
277 |
|
277 |
|
278 |
/* debug ici: echo $sql_pattern . "\n"; var_dump($enregistrements, $donnees); die;*/
|
278 |
/* debug ici: echo $sql_pattern . "\n"; var_dump($enregistrements, $donnees); die;*/
|
279 |
|
279 |
|
Line 280... |
Line 280... |
280 |
$stmt->execute($donnees);
|
280 |
$stmt->execute($donnees);
|
Line 281... |
Line 281... |
281 |
|
281 |
|
282 |
// $stmt->debugDumpParams(); // https://bugs.php.net/bug.php?id=52384
|
282 |
// $stmt->debugDumpParams(); // https://bugs.php.net/bug.php?id=52384
|
283 |
$dernier_autoinc = $this->bdd->lastInsertId();
|
283 |
$dernier_autoinc = Cel::db()->lastInsertId();
|
284 |
$this->bdd->commit();
|
284 |
Cel::db()->commit();
|
285 |
|
285 |
|
286 |
if(! $dernier_autoinc) trigger_error("l'insertion semble avoir échoué", E_USER_NOTICE);
|
286 |
if(! $dernier_autoinc) trigger_error("l'insertion semble avoir échoué", E_USER_NOTICE);
|
Line 287... |
Line 287... |
287 |
|
287 |
|
Line 288... |
Line 288... |
288 |
$obs_ajouts += count($enregistrements);
|
288 |
$obs_ajouts += count($enregistrements);
|
Line 402... |
Line 402... |
402 |
//$req .= implode(', ', $enregistrement) . "\n";
|
402 |
//$req .= implode(', ', $enregistrement) . "\n";
|
403 |
}
|
403 |
}
|
404 |
}
|
404 |
}
|
Line 405... |
Line 405... |
405 |
|
405 |
|
406 |
|
406 |
|
407 |
static function stockerMotsCle($cel, $enregistrements, $tous_mots_cle, $lastid) {
|
407 |
static function stockerMotsCle($enregistrements, $tous_mots_cle, $lastid) {
|
408 |
$c = 0;
|
408 |
$c = 0;
|
409 |
// debug: var_dump($tous_mots_cle);die;
|
409 |
// debug: var_dump($tous_mots_cle);die;
|
410 |
foreach($tous_mots_cle as $v) $c += count($v['mots_cle']['to_insert']);
|
410 |
foreach($tous_mots_cle as $v) $c += count($v['mots_cle']['to_insert']);
|
Line 411... |
Line 411... |
411 |
return $c;
|
411 |
return $c;
|
412 |
}
|
412 |
}
|
413 |
|
413 |
|
Line 414... |
Line 414... |
414 |
static function stockerImages($cel, $enregistrements, $toutes_images, $lastid) {
|
414 |
static function stockerImages($enregistrements, $toutes_images, $lastid) {
|
415 |
$images_insert = 'INSERT INTO cel_obs_images (id_image, id_observation) VALUES %s ON DUPLICATE KEY UPDATE id_image = id_image';
|
415 |
$images_insert = 'INSERT INTO cel_obs_images (id_image, id_observation) VALUES %s ON DUPLICATE KEY UPDATE id_image = id_image';
|
Line 428... |
Line 428... |
428 |
}
|
428 |
}
|
Line 429... |
Line 429... |
429 |
|
429 |
|
430 |
if($images_obs_assoc) {
|
430 |
if($images_obs_assoc) {
|
431 |
$requete = sprintf($images_insert, implode(', ', $images_obs_assoc));
|
431 |
$requete = sprintf($images_insert, implode(', ', $images_obs_assoc));
|
432 |
// debug echo "$requete\n";
|
432 |
// debug echo "$requete\n";
|
433 |
$cel->requeter($requete);
|
433 |
Cel::db()->requeter($requete);
|
Line 434... |
Line 434... |
434 |
}
|
434 |
}
|
435 |
|
435 |
|
Line 452... |
Line 452... |
452 |
C_NOM_RET_NN => NULL, C_NT => NULL, C_FAMILLE => NULL);
|
452 |
C_NOM_RET_NN => NULL, C_NT => NULL, C_FAMILLE => NULL);
|
453 |
self::traiterEspece($ligne, $espece, $cel);
|
453 |
self::traiterEspece($ligne, $espece, $cel);
|
Line 454... |
Line 454... |
454 |
|
454 |
|
455 |
// $localisation est rempli à partir de plusieurs champs: C_ZONE_GEO et C_CE_ZONE_GEO
|
455 |
// $localisation est rempli à partir de plusieurs champs: C_ZONE_GEO et C_CE_ZONE_GEO
|
456 |
$localisation = Array(C_ZONE_GEO => NULL, C_CE_ZONE_GEO => NULL);
|
456 |
$localisation = Array(C_ZONE_GEO => NULL, C_CE_ZONE_GEO => NULL);
|
Line 457... |
Line 457... |
457 |
self::traiterLocalisation($ligne, $localisation, $cel);
|
457 |
self::traiterLocalisation($ligne, $localisation);
|
458 |
|
458 |
|
459 |
// $transmission est utilisé pour date_transmission
|
459 |
// $transmission est utilisé pour date_transmission
|
Line 506... |
Line 506... |
506 |
);
|
506 |
);
|
Line 507... |
Line 507... |
507 |
|
507 |
|
508 |
// passage de $enregistrement par référence, ainsi ['_images'] n'est défini
|
508 |
// passage de $enregistrement par référence, ainsi ['_images'] n'est défini
|
509 |
// que si des résultats sont trouvés
|
509 |
// que si des résultats sont trouvés
|
510 |
// "@" car PHPExcel supprime les colonnes null sur toute la feuille (ou tout le chunk)
|
510 |
// "@" car PHPExcel supprime les colonnes null sur toute la feuille (ou tout le chunk)
|
Line 511... |
Line 511... |
511 |
if(@$ligne[C_IMAGES]) self::traiterImage($ligne[C_IMAGES], $cel, $enregistrement);
|
511 |
if(@$ligne[C_IMAGES]) self::traiterImage($ligne[C_IMAGES], $cel->id_utilisateur, $enregistrement);
|
Line 512... |
Line 512... |
512 |
|
512 |
|
513 |
if(@$ligne[C_MOTS_CLES_TEXTE]) self::traiterMotsCle($ligne[C_MOTS_CLES_TEXTE], $cel, $enregistrement);
|
513 |
if(@$ligne[C_MOTS_CLES_TEXTE]) self::traiterMotsCle($ligne[C_MOTS_CLES_TEXTE], $cel->id_utilisateur, $enregistrement);
|
Line 514... |
Line 514... |
514 |
|
514 |
|
515 |
return $enregistrement;
|
515 |
return $enregistrement;
|
Line 516... |
Line 516... |
516 |
}
|
516 |
}
|
517 |
|
517 |
|
518 |
static function traiterImage($str, $cel, &$enregistrement) {
|
518 |
static function traiterImage($str, $id_utilisateur, &$enregistrement) {
|
519 |
$liste_images = array_filter(explode("/", $str));
|
519 |
$liste_images = array_filter(explode("/", $str));
|
520 |
|
520 |
|
521 |
//array_walk($liste_images, '__anonyme_4', $cel);
|
521 |
//array_walk($liste_images, '__anonyme_4');
|
Line 522... |
Line 522... |
522 |
array_walk($liste_images, array(__CLASS__, '__anonyme_4'), $cel);
|
522 |
array_walk($liste_images, array(__CLASS__, '__anonyme_4'));
|
Line 523... |
Line 523... |
523 |
$requete = sprintf(
|
523 |
$requete = sprintf(
|
524 |
"SELECT id_image, nom_original FROM cel_images WHERE ce_utilisateur = %d AND nom_original IN (\"%s\")",
|
524 |
"SELECT id_image, nom_original FROM cel_images WHERE ce_utilisateur = %d AND nom_original IN (\"%s\")",
|
Line 525... |
Line 525... |
525 |
$cel->id_utilisateur,
|
525 |
$id_utilisateur,
|
526 |
implode('","', $liste_images));
|
526 |
implode('","', $liste_images));
|
527 |
|
527 |
|
Line 528... |
Line 528... |
528 |
$resultat = $cel->requeter($requete);
|
528 |
$resultat = Cel::db()->requeter($requete);
|
529 |
|
529 |
|
530 |
if($resultat) $enregistrement['_images'] = $resultat;
|
530 |
if($resultat) $enregistrement['_images'] = $resultat;
|
531 |
}
|
531 |
}
|
532 |
|
532 |
|
533 |
static function traiterMotsCle($str, $cel, &$enregistrement) {
|
533 |
static function traiterMotsCle($str, $id_utilisateur, &$enregistrement) {
|
Line 534... |
Line 534... |
534 |
$liste_mots_cle = $liste_mots_cle_recherche = array_map("trim", array_unique(array_filter(explode(",", $str))));
|
534 |
$liste_mots_cle = $liste_mots_cle_recherche = array_map("trim", array_unique(array_filter(explode(",", $str))));
|
535 |
array_walk($liste_mots_cle_recherche, array(__CLASS__, '__anonyme_4'), $cel);
|
535 |
array_walk($liste_mots_cle_recherche, array(__CLASS__, '__anonyme_4'));
|
Line 536... |
Line 536... |
536 |
|
536 |
|
537 |
// TODO!!!! remplace > (pour les tests uniquement) par un = et supprimer le group by mot_cle
|
537 |
// TODO!!!! remplace > (pour les tests uniquement) par un = et supprimer le group by mot_cle
|
Line 701... |
Line 701... |
701 |
$espece[C_NT] = $complement['Num_Taxon'];
|
701 |
$espece[C_NT] = $complement['Num_Taxon'];
|
702 |
$espece[C_FAMILLE] = $complement['Famille'];
|
702 |
$espece[C_FAMILLE] = $complement['Famille'];
|
703 |
//var_dump("a", $espece);die;
|
703 |
//var_dump("a", $espece);die;
|
704 |
}
|
704 |
}
|
Line 705... |
Line 705... |
705 |
|
705 |
|
706 |
static function detectFromNom($nom, $cel) {
|
706 |
static function detectFromNom($nom) {
|
707 |
$r = $cel->requeter(sprintf("SELECT num_nom, num_tax_sup FROM bdtfx_v1_01 WHERE (nom_sci LIKE '%s') ".
|
707 |
$r = Cel::db()->requeter(sprintf("SELECT num_nom, num_tax_sup FROM bdtfx_v1_01 WHERE (nom_sci LIKE '%s') ".
|
708 |
"ORDER BY nom_sci ASC LIMIT 0, 1",
|
708 |
"ORDER BY nom_sci ASC LIMIT 0, 1",
|
709 |
$cel->proteger($nom)));
|
709 |
Cel::db()->proteger($nom)));
|
Line 710... |
Line 710... |
710 |
if($r) return $r;
|
710 |
if($r) return $r;
|
711 |
|
711 |
|
712 |
$cel->requeter(sprintf("SELECT num_nom, num_tax_sup FROM bdtfx_v1_01 WHERE (nom_sci LIKE '%s' OR nom LIKE '%s') ".
|
712 |
Cel::db()->requeter(sprintf("SELECT num_nom, num_tax_sup FROM bdtfx_v1_01 WHERE (nom_sci LIKE '%s' OR nom LIKE '%s') ".
|
713 |
"ORDER BY nom_sci ASC LIMIT 0, 1",
|
713 |
"ORDER BY nom_sci ASC LIMIT 0, 1",
|
714 |
$cel->proteger($nom),
|
714 |
Cel::db()->proteger($nom),
|
715 |
$cel->proteger(str_replace(' ', '% ', $nom))));
|
715 |
Cel::db()->proteger(str_replace(' ', '% ', $nom))));
|
Line 716... |
Line 716... |
716 |
return $r;
|
716 |
return $r;
|
717 |
}
|
717 |
}
|
718 |
|
718 |
|
719 |
|
719 |
|
720 |
static function traiterLocalisation($ligne, Array &$localisation, $cel) {
|
720 |
static function traiterLocalisation($ligne, Array &$localisation) {
|
721 |
$identifiant_commune = trim($ligne[C_ZONE_GEO]);
|
721 |
$identifiant_commune = trim($ligne[C_ZONE_GEO]);
|
Line 749... |
Line 749... |
749 |
if (preg_match('/(.*) \((\d+)\)/', $identifiant_commune, $elements)) {
|
749 |
if (preg_match('/(.*) \((\d+)\)/', $identifiant_commune, $elements)) {
|
750 |
// commune + departement : montpellier (34)
|
750 |
// commune + departement : montpellier (34)
|
751 |
$nom_commune=$elements[1];
|
751 |
$nom_commune=$elements[1];
|
752 |
$code_commune=$elements[2];
|
752 |
$code_commune=$elements[2];
|
753 |
$requete = sprintf("%s WHERE nom = %s AND code LIKE %s",
|
753 |
$requete = sprintf("%s WHERE nom = %s AND code LIKE %s",
|
754 |
$select, $cel->quoteNonNull($nom_commune), $cel->quoteNonNull($code_commune.'%'));
|
754 |
$select, self::quoteNonNull($nom_commune), self::quoteNonNull($code_commune.'%'));
|
755 |
}
|
755 |
}
|
756 |
elseif (preg_match('/^(\d+|(2[ab]\d+))$/i', $identifiant_commune, $elements)) {
|
756 |
elseif (preg_match('/^(\d+|(2[ab]\d+))$/i', $identifiant_commune, $elements)) {
|
757 |
// Code insee seul
|
757 |
// Code insee seul
|
758 |
$code_insee_commune=$elements[1];
|
758 |
$code_insee_commune=$elements[1];
|
759 |
$requete = sprintf("%s WHERE code = %s", $select, $cel->quoteNonNull($code_insee_commune));
|
759 |
$requete = sprintf("%s WHERE code = %s", $select, self::quoteNonNull($code_insee_commune));
|
760 |
}
|
760 |
}
|
761 |
else {
|
761 |
else {
|
762 |
// Commune seule (le departement sera recupere dans la colonne departement si elle est presente)
|
762 |
// Commune seule (le departement sera recupere dans la colonne departement si elle est presente)
|
763 |
// on prend le risque ici de retourner une mauvaise Commune
|
763 |
// on prend le risque ici de retourner une mauvaise Commune
|
764 |
$nom_commune = str_replace(" ", "%", iconv('UTF-8', 'ASCII//TRANSLIT', $identifiant_commune));
|
764 |
$nom_commune = str_replace(" ", "%", iconv('UTF-8', 'ASCII//TRANSLIT', $identifiant_commune));
|
765 |
$requete = sprintf("%s WHERE nom LIKE %s", $select, $cel->quoteNonNull($nom_commune.'%'));
|
765 |
$requete = sprintf("%s WHERE nom LIKE %s", $select, self::quoteNonNull($nom_commune.'%'));
|
766 |
}
|
766 |
}
|
Line 767... |
Line 767... |
767 |
|
767 |
|
768 |
$resultat_commune = $cel->requeter($requete);
|
768 |
$resultat_commune = Cel::db()->requeter($requete);
|
Line 769... |
Line 769... |
769 |
// TODO: levenstein sort ?
|
769 |
// TODO: levenstein sort ?
|
770 |
|
770 |
|
771 |
// cas de la commune introuvable dans le référentiel
|
771 |
// cas de la commune introuvable dans le référentiel
|
Line 800... |
Line 800... |
800 |
$localisation[C_ZONE_GEO] = $localisation[C_ZONE_GEO];
|
800 |
$localisation[C_ZONE_GEO] = $localisation[C_ZONE_GEO];
|
801 |
$localisation[C_CE_ZONE_GEO] = $localisation[C_CE_ZONE_GEO];
|
801 |
$localisation[C_CE_ZONE_GEO] = $localisation[C_CE_ZONE_GEO];
|
802 |
}
|
802 |
}
|
Line 803... |
Line 803... |
803 |
|
803 |
|
804 |
/*
|
804 |
/*
|
805 |
static function traiterLocalisation($ligne, Array &$localisation, $cel) {
|
805 |
static function traiterLocalisation($ligne, Array &$localisation) {
|
806 |
$identifiant_commune = trim($ligne[C_ZONE_GEO]);
|
806 |
$identifiant_commune = trim($ligne[C_ZONE_GEO]);
|
807 |
if(!$identifiant_commune) {
|
807 |
if(!$identifiant_commune) {
|
808 |
$departement = trim($ligne[C_CE_ZONE_GEO]);
|
808 |
$departement = trim($ligne[C_CE_ZONE_GEO]);
|
809 |
goto testdepartement;
|
809 |
goto testdepartement;
|
Line 815... |
Line 815... |
815 |
if (preg_match('/(.*) \((\d+)\)/', $identifiant_commune, $elements)) {
|
815 |
if (preg_match('/(.*) \((\d+)\)/', $identifiant_commune, $elements)) {
|
816 |
// commune + departement : montpellier (34)
|
816 |
// commune + departement : montpellier (34)
|
817 |
$nom_commune=$elements[1];
|
817 |
$nom_commune=$elements[1];
|
818 |
$code_commune=$elements[2];
|
818 |
$code_commune=$elements[2];
|
819 |
$requete = sprintf("%s WHERE nom = %s AND code LIKE %s",
|
819 |
$requete = sprintf("%s WHERE nom = %s AND code LIKE %s",
|
820 |
$select, $cel->quoteNonNull($nom_commune), $cel->quoteNonNull($code_commune.'%'));
|
820 |
$select, self::quoteNonNull($nom_commune), self::quoteNonNull($code_commune.'%'));
|
821 |
}
|
821 |
}
|
822 |
elseif (preg_match('/^(\d+|(2[ab]\d+))$/i', $identifiant_commune, $elements)) {
|
822 |
elseif (preg_match('/^(\d+|(2[ab]\d+))$/i', $identifiant_commune, $elements)) {
|
823 |
// Code insee seul
|
823 |
// Code insee seul
|
824 |
$code_insee_commune=$elements[1];
|
824 |
$code_insee_commune=$elements[1];
|
825 |
$requete = sprintf("%s WHERE code = %s", $select, $cel->quoteNonNull($code_insee_commune));
|
825 |
$requete = sprintf("%s WHERE code = %s", $select, self::quoteNonNull($code_insee_commune));
|
826 |
}
|
826 |
}
|
827 |
else {
|
827 |
else {
|
828 |
// Commune seule (le departement sera recupere dans la colonne departement si elle est presente)
|
828 |
// Commune seule (le departement sera recupere dans la colonne departement si elle est presente)
|
829 |
// on prend le risque ici de retourner une mauvaise Commune
|
829 |
// on prend le risque ici de retourner une mauvaise Commune
|
830 |
$nom_commune = str_replace(" ", "%", iconv('UTF-8', 'ASCII//TRANSLIT', $identifiant_commune));
|
830 |
$nom_commune = str_replace(" ", "%", iconv('UTF-8', 'ASCII//TRANSLIT', $identifiant_commune));
|
831 |
$requete = sprintf("%s WHERE nom LIKE %s", $select, $cel->quoteNonNull($nom_commune.'%'));
|
831 |
$requete = sprintf("%s WHERE nom LIKE %s", $select, self::quoteNonNull($nom_commune.'%'));
|
832 |
}
|
832 |
}
|
Line 833... |
Line 833... |
833 |
|
833 |
|
834 |
$resultat_commune = $cel->requeter($requete);
|
834 |
$resultat_commune = Cel::db()->requeter($requete);
|
Line 835... |
Line 835... |
835 |
// TODO: levenstein sort ?
|
835 |
// TODO: levenstein sort ?
|
836 |
|
836 |
|
837 |
// cas de la commune introuvable dans le référentiel
|
837 |
// cas de la commune introuvable dans le référentiel
|
Line 891... |
Line 891... |
891 |
// et doivent donc être échappées correctement.
|
891 |
// et doivent donc être échappées correctement.
|
892 |
public function initialiser_colonnes_statiques() {
|
892 |
public function initialiser_colonnes_statiques() {
|
893 |
$this->colonnes_statiques = array_merge($this->colonnes_statiques,
|
893 |
$this->colonnes_statiques = array_merge($this->colonnes_statiques,
|
894 |
Array(
|
894 |
Array(
|
895 |
"ce_utilisateur" => $this->id_utilisateur,
|
895 |
"ce_utilisateur" => $this->id_utilisateur,
|
896 |
"prenom_utilisateur" => $this->quoteNonNull($this->utilisateur['prenom']),
|
896 |
"prenom_utilisateur" => self::quoteNonNull($this->utilisateur['prenom']),
|
897 |
"nom_utilisateur" => $this->quoteNonNull($this->utilisateur['nom']),
|
897 |
"nom_utilisateur" => self::quoteNonNull($this->utilisateur['nom']),
|
898 |
"courriel_utilisateur" => $this->quoteNonNull($this->utilisateur['courriel']),
|
898 |
"courriel_utilisateur" => self::quoteNonNull($this->utilisateur['courriel']),
|
899 |
));
|
899 |
));
|
Line 900... |
Line 900... |
900 |
|
900 |
|
Line 901... |
Line 901... |
901 |
}
|
901 |
}
|
Line 934... |
Line 934... |
934 |
)))) .
|
934 |
)))) .
|
935 |
')'
|
935 |
')'
|
936 |
);
|
936 |
);
|
937 |
}
|
937 |
}
|
Line 938... |
Line 938... |
938 |
|
938 |
|
939 |
// équivalent à CEL->Bdd->proteger() (qui wrap PDO::quote),
|
939 |
// équivalent à Bdd2->proteger() (qui wrap PDO::quote),
|
940 |
// sans transformer NULL en ""
|
940 |
// sans transformer NULL en ""
|
941 |
private function quoteNonNull($chaine) {
|
941 |
static function quoteNonNull($chaine) {
|
942 |
if(is_null($chaine)) return "NULL";
|
942 |
if(is_null($chaine)) return "NULL";
|
943 |
if(!is_string($chaine)) die("erreur __FILE__, __LINE__");
|
943 |
if(!is_string($chaine)) die("erreur __FILE__, __LINE__");
|
944 |
return Cel::db()->quote($chaine);
|
944 |
return Cel::db()->quote($chaine);
|