Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1727 → Rev 1728

/branches/topic-dbsingleton/jrest/services/ImportXLS.php
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);