72,7 → 72,7 |
function __anonyme_6() { return NULL; } |
|
class ImportXLS extends Cel { |
static function __anonyme_4(&$item, $key, $obj) { $item = $obj->quoteNonNull(trim($item)); } |
static function __anonyme_4(&$item, $key) { $item = self::quoteNonNull(trim($item)); } |
|
static $ordre_BDD = Array( |
"ce_utilisateur", |
270,8 → 270,8 |
str_repeat(self::$insert_ligne_pattern . ', ', $nb_rec - 1) . |
self::$insert_ligne_pattern; |
|
$this->bdd->beginTransaction(); |
$stmt = $this->bdd->prepare($sql_pattern); |
Cel::db()->beginTransaction(); |
$stmt = Cel::db()->prepare($sql_pattern); |
$donnees = array(); |
foreach($enregistrements as $e) $donnees = array_merge($donnees, array_values($e)); |
|
280,8 → 280,8 |
$stmt->execute($donnees); |
|
// $stmt->debugDumpParams(); // https://bugs.php.net/bug.php?id=52384 |
$dernier_autoinc = $this->bdd->lastInsertId(); |
$this->bdd->commit(); |
$dernier_autoinc = Cel::db()->lastInsertId(); |
Cel::db()->commit(); |
|
if(! $dernier_autoinc) trigger_error("l'insertion semble avoir échoué", E_USER_NOTICE); |
|
288,8 → 288,8 |
$obs_ajouts += count($enregistrements); |
// $obs_ajouts += count($enregistrements['insert']); |
// $obs_maj += count($enregistrements['update']); |
$nb_images_ajoutees += self::stockerImages($this, $enregistrements, $images, $dernier_autoinc); |
$nb_mots_cle_ajoutes += self::stockerMotsCle($this, $enregistrements, $mots_cle, $dernier_autoinc); |
$nb_images_ajoutees += self::stockerImages($enregistrements, $images, $dernier_autoinc); |
$nb_mots_cle_ajoutes += self::stockerMotsCle($enregistrements, $mots_cle, $dernier_autoinc); |
} |
|
restore_error_handler(); |
404,7 → 404,7 |
} |
|
|
static function stockerMotsCle($cel, $enregistrements, $tous_mots_cle, $lastid) { |
static function stockerMotsCle($enregistrements, $tous_mots_cle, $lastid) { |
$c = 0; |
// debug: var_dump($tous_mots_cle);die; |
foreach($tous_mots_cle as $v) $c += count($v['mots_cle']['to_insert']); |
411,7 → 411,7 |
return $c; |
} |
|
static function stockerImages($cel, $enregistrements, $toutes_images, $lastid) { |
static function stockerImages($enregistrements, $toutes_images, $lastid) { |
$images_insert = 'INSERT INTO cel_obs_images (id_image, id_observation) VALUES %s ON DUPLICATE KEY UPDATE id_image = id_image'; |
$images_obs_assoc = Array(); |
|
430,7 → 430,7 |
if($images_obs_assoc) { |
$requete = sprintf($images_insert, implode(', ', $images_obs_assoc)); |
// debug echo "$requete\n"; |
$cel->requeter($requete); |
Cel::db()->requeter($requete); |
} |
|
return count($images_obs_assoc); |
454,7 → 454,7 |
|
// $localisation est rempli à partir de plusieurs champs: C_ZONE_GEO et C_CE_ZONE_GEO |
$localisation = Array(C_ZONE_GEO => NULL, C_CE_ZONE_GEO => NULL); |
self::traiterLocalisation($ligne, $localisation, $cel); |
self::traiterLocalisation($ligne, $localisation); |
|
// $transmission est utilisé pour date_transmission |
// XXX: @ contre "Undefined index" |
508,40 → 508,40 |
// passage de $enregistrement par référence, ainsi ['_images'] n'est défini |
// que si des résultats sont trouvés |
// "@" car PHPExcel supprime les colonnes null sur toute la feuille (ou tout le chunk) |
if(@$ligne[C_IMAGES]) self::traiterImage($ligne[C_IMAGES], $cel, $enregistrement); |
if(@$ligne[C_IMAGES]) self::traiterImage($ligne[C_IMAGES], $cel->id_utilisateur, $enregistrement); |
|
if(@$ligne[C_MOTS_CLES_TEXTE]) self::traiterMotsCle($ligne[C_MOTS_CLES_TEXTE], $cel, $enregistrement); |
if(@$ligne[C_MOTS_CLES_TEXTE]) self::traiterMotsCle($ligne[C_MOTS_CLES_TEXTE], $cel->id_utilisateur, $enregistrement); |
|
return $enregistrement; |
} |
|
static function traiterImage($str, $cel, &$enregistrement) { |
static function traiterImage($str, $id_utilisateur, &$enregistrement) { |
$liste_images = array_filter(explode("/", $str)); |
|
//array_walk($liste_images, '__anonyme_4', $cel); |
array_walk($liste_images, array(__CLASS__, '__anonyme_4'), $cel); |
//array_walk($liste_images, '__anonyme_4'); |
array_walk($liste_images, array(__CLASS__, '__anonyme_4')); |
$requete = sprintf( |
"SELECT id_image, nom_original FROM cel_images WHERE ce_utilisateur = %d AND nom_original IN (\"%s\")", |
$cel->id_utilisateur, |
$id_utilisateur, |
implode('","', $liste_images)); |
|
$resultat = $cel->requeter($requete); |
$resultat = Cel::db()->requeter($requete); |
|
if($resultat) $enregistrement['_images'] = $resultat; |
} |
|
static function traiterMotsCle($str, $cel, &$enregistrement) { |
static function traiterMotsCle($str, $id_utilisateur, &$enregistrement) { |
$liste_mots_cle = $liste_mots_cle_recherche = array_map("trim", array_unique(array_filter(explode(",", $str)))); |
array_walk($liste_mots_cle_recherche, array(__CLASS__, '__anonyme_4'), $cel); |
array_walk($liste_mots_cle_recherche, array(__CLASS__, '__anonyme_4')); |
|
// TODO!!!! remplace > (pour les tests uniquement) par un = et supprimer le group by mot_cle |
$requete = sprintf("SELECT id_mot_cle_obs, mot_cle FROM cel_mots_cles_obs WHERE id_utilisateur > %d ". |
"AND mot_cle IN (%s) ". |
"GROUP BY mot_cle", |
$cel->id_utilisateur, |
$id_utilisateur, |
implode(',', $liste_mots_cle_recherche)); |
|
$resultat_sql = $cel->requeter($requete); |
$resultat_sql = Cel::db()->requeter($requete); |
if(!$resultat_sql) return; |
|
$resultat = array(); |
703,21 → 703,21 |
//var_dump("a", $espece);die; |
} |
|
static function detectFromNom($nom, $cel) { |
$r = $cel->requeter(sprintf("SELECT num_nom, num_tax_sup FROM bdtfx_v1_01 WHERE (nom_sci LIKE '%s') ". |
static function detectFromNom($nom) { |
$r = Cel::db()->requeter(sprintf("SELECT num_nom, num_tax_sup FROM bdtfx_v1_01 WHERE (nom_sci LIKE '%s') ". |
"ORDER BY nom_sci ASC LIMIT 0, 1", |
$cel->proteger($nom))); |
Cel::db()->proteger($nom))); |
if($r) return $r; |
|
$cel->requeter(sprintf("SELECT num_nom, num_tax_sup FROM bdtfx_v1_01 WHERE (nom_sci LIKE '%s' OR nom LIKE '%s') ". |
Cel::db()->requeter(sprintf("SELECT num_nom, num_tax_sup FROM bdtfx_v1_01 WHERE (nom_sci LIKE '%s' OR nom LIKE '%s') ". |
"ORDER BY nom_sci ASC LIMIT 0, 1", |
$cel->proteger($nom), |
$cel->proteger(str_replace(' ', '% ', $nom)))); |
Cel::db()->proteger($nom), |
Cel::db()->proteger(str_replace(' ', '% ', $nom)))); |
return $r; |
} |
|
|
static function traiterLocalisation($ligne, Array &$localisation, $cel) { |
static function traiterLocalisation($ligne, Array &$localisation) { |
$identifiant_commune = trim($ligne[C_ZONE_GEO]); |
if(!$identifiant_commune) { |
$departement = trim($ligne[C_CE_ZONE_GEO]); |
751,21 → 751,21 |
$nom_commune=$elements[1]; |
$code_commune=$elements[2]; |
$requete = sprintf("%s WHERE nom = %s AND code LIKE %s", |
$select, $cel->quoteNonNull($nom_commune), $cel->quoteNonNull($code_commune.'%')); |
$select, self::quoteNonNull($nom_commune), self::quoteNonNull($code_commune.'%')); |
} |
elseif (preg_match('/^(\d+|(2[ab]\d+))$/i', $identifiant_commune, $elements)) { |
// Code insee seul |
$code_insee_commune=$elements[1]; |
$requete = sprintf("%s WHERE code = %s", $select, $cel->quoteNonNull($code_insee_commune)); |
$requete = sprintf("%s WHERE code = %s", $select, self::quoteNonNull($code_insee_commune)); |
} |
else { |
// Commune seule (le departement sera recupere dans la colonne departement si elle est presente) |
// on prend le risque ici de retourner une mauvaise Commune |
$nom_commune = str_replace(" ", "%", iconv('UTF-8', 'ASCII//TRANSLIT', $identifiant_commune)); |
$requete = sprintf("%s WHERE nom LIKE %s", $select, $cel->quoteNonNull($nom_commune.'%')); |
$requete = sprintf("%s WHERE nom LIKE %s", $select, self::quoteNonNull($nom_commune.'%')); |
} |
|
$resultat_commune = $cel->requeter($requete); |
$resultat_commune = Cel::db()->requeter($requete); |
// TODO: levenstein sort ? |
|
// cas de la commune introuvable dans le référentiel |
802,7 → 802,7 |
} |
|
/* |
static function traiterLocalisation($ligne, Array &$localisation, $cel) { |
static function traiterLocalisation($ligne, Array &$localisation) { |
$identifiant_commune = trim($ligne[C_ZONE_GEO]); |
if(!$identifiant_commune) { |
$departement = trim($ligne[C_CE_ZONE_GEO]); |
817,21 → 817,21 |
$nom_commune=$elements[1]; |
$code_commune=$elements[2]; |
$requete = sprintf("%s WHERE nom = %s AND code LIKE %s", |
$select, $cel->quoteNonNull($nom_commune), $cel->quoteNonNull($code_commune.'%')); |
$select, self::quoteNonNull($nom_commune), self::quoteNonNull($code_commune.'%')); |
} |
elseif (preg_match('/^(\d+|(2[ab]\d+))$/i', $identifiant_commune, $elements)) { |
// Code insee seul |
$code_insee_commune=$elements[1]; |
$requete = sprintf("%s WHERE code = %s", $select, $cel->quoteNonNull($code_insee_commune)); |
$requete = sprintf("%s WHERE code = %s", $select, self::quoteNonNull($code_insee_commune)); |
} |
else { |
// Commune seule (le departement sera recupere dans la colonne departement si elle est presente) |
// on prend le risque ici de retourner une mauvaise Commune |
$nom_commune = str_replace(" ", "%", iconv('UTF-8', 'ASCII//TRANSLIT', $identifiant_commune)); |
$requete = sprintf("%s WHERE nom LIKE %s", $select, $cel->quoteNonNull($nom_commune.'%')); |
$requete = sprintf("%s WHERE nom LIKE %s", $select, self::quoteNonNull($nom_commune.'%')); |
} |
|
$resultat_commune = $cel->requeter($requete); |
$resultat_commune = Cel::db()->requeter($requete); |
// TODO: levenstein sort ? |
|
// cas de la commune introuvable dans le référentiel |
893,9 → 893,9 |
$this->colonnes_statiques = array_merge($this->colonnes_statiques, |
Array( |
"ce_utilisateur" => $this->id_utilisateur, |
"prenom_utilisateur" => $this->quoteNonNull($this->utilisateur['prenom']), |
"nom_utilisateur" => $this->quoteNonNull($this->utilisateur['nom']), |
"courriel_utilisateur" => $this->quoteNonNull($this->utilisateur['courriel']), |
"prenom_utilisateur" => self::quoteNonNull($this->utilisateur['prenom']), |
"nom_utilisateur" => self::quoteNonNull($this->utilisateur['nom']), |
"courriel_utilisateur" => self::quoteNonNull($this->utilisateur['courriel']), |
)); |
|
} |
936,9 → 936,9 |
); |
} |
|
// équivalent à CEL->Bdd->proteger() (qui wrap PDO::quote), |
// équivalent à Bdd2->proteger() (qui wrap PDO::quote), |
// sans transformer NULL en "" |
private function quoteNonNull($chaine) { |
static function quoteNonNull($chaine) { |
if(is_null($chaine)) return "NULL"; |
if(!is_string($chaine)) die("erreur __FILE__, __LINE__"); |
return Cel::db()->quote($chaine); |