68,11 → 68,11 |
function __anonyme_1($v) { return !$v['importable']; } |
function __anonyme_2(&$v) { $v = $v['nom']; } |
function __anonyme_3($cell) { return !is_null($cell); }; |
function __anonyme_4($item, $key, $obj) { $item = $obj->quoteNonNull(trim($item)); } |
function __anonyme_5($item) { return is_null($item) ? '?' : $item; } |
function __anonyme_6() { return NULL; } |
|
class ImportXLS extends Cel { |
static function __anonyme_4($item, $key, $obj) { $item = $obj->quoteNonNull(trim($item)); } |
|
static $ordre_BDD = Array( |
"ce_utilisateur", |
224,6 → 224,9 |
|
$obs_ajouts = 0; |
$obs_maj = 0; |
$nb_images_ajoutees = 0; |
$nb_mots_cle_ajoutes = 0; |
|
$dernier_ordre = $this->requeter("SELECT MAX(ordre) AS ordre FROM cel_obs WHERE ce_utilisateur = $id_utilisateur"); |
$dernier_ordre = intval($dernier_ordre[0]['ordre']) + 1; |
if(! $dernier_ordre) $dernier_ordre = 0; |
246,9 → 249,9 |
// ici on appel la fonction qui fera effectivement l'insertion multiple |
// à partir des (au plus) NB_LIRE_LIGNE_SIMUL lignes |
|
// TODO: passer $this, ne sert que pour appeler des méthodes public qui pourraient être statiques |
// TODO: passer $this, ne sert que pour appeler des méthodes publiques qui pourraient être statiques |
// notamment dans RechercheInfosTaxonBeta.php |
list($enregistrements, $images) = |
list($enregistrements, $images, $mots_cle) = |
self::chargerLignes($this, $donnees, $this->colonnes_statiques, $dernier_ordre); |
if(! $enregistrements) break; |
|
270,7 → 273,7 |
$donnees = array(); |
foreach($enregistrements as $e) $donnees = array_merge($donnees, array_values($e)); |
|
/* debug ici: echo $sql_pattern . "\n"; var_dump($enregistrements, $donnees); die;*/ |
/* debug ici: */ echo $sql_pattern . "\n"; var_dump($enregistrements, $donnees); die; |
|
$stmt->execute($donnees); |
|
283,7 → 286,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_images_ajoutees += self::stockerImages($this, $enregistrements, $images, $dernier_autoinc); |
$nb_mots_cle_ajoutes += self::stockerMotsCle($this, $enregistrements, $mots_cle, $dernier_autoinc); |
} |
|
restore_error_handler(); |
298,7 → 302,7 |
|
static function detectionEntete($entete) { |
$colonnes_reconnues = Array(); |
$cols = FormateurGroupeColonne::nomEnsembleVersListeColonnes('standard'); |
$cols = FormateurGroupeColonne::nomEnsembleVersListeColonnes('standard'); // ,avance |
foreach($entete as $k => $v) { |
$entete_simple = iconv('UTF-8', 'ASCII//TRANSLIT', strtolower(trim($v))); |
foreach($cols as $col) { |
353,25 → 357,38 |
if( ($enregistrement = self::chargerLigne($ligne, $dernier_ordre, $cel)) ) { |
// $enregistrements[] = array_merge($colonnes_statiques, $enregistrement); |
$enregistrements[] = $enregistrement; |
$pos = count($enregistrements) - 1; |
$last = &$enregistrements[$pos]; |
|
if(isset($enregistrement['_images'])) { |
$pos = count($enregistrements) - 1; |
$last = &$enregistrements[$pos]; |
// ne dépend pas de cel_obs, et seront insérées *après* les enregistrements |
// mais nous ne voulons pas nous priver de faire des INSERT multiples pour autant |
$toutes_images[] = Array("images" => $last['_images'], |
"obs_pos" => $pos); |
// ce champ n'a pas a faire partie de l'insertion dans cel_obs, |
// ce champ n'a pas à faire partie de l'insertion dans cel_obs, |
// mais est utile pour cel_obs_images |
unset($last['_images']); |
} |
|
if(isset($enregistrement['_mots_cle'])) { |
// ne dépend pas de cel_obs, et seront insérés *après* les enregistrements |
// mais nous ne voulons pas nous priver de faire des INSERT multiples pour autant |
$tous_mots_cle[] = Array("mots_cle" => $last['_mots_cle'], |
"obs_pos" => $pos); |
// la version inlinée des mots est enregistrées dans cel_obs |
// mais cel_mots_cles_obs fait foi. |
// XXX: postponer l'ajout de ces informations dans cel_obs *après* l'insertion effective |
// des records dans cel_mots_cles_obs ? |
$last[C_MOTS_CLES_TEXTE] = $last['_mots_cle']['inline_cel_obs']; |
unset($last['_mots_cle']); |
} |
|
$dernier_ordre++; |
} |
} |
|
// XXX future: return Array($enregistrements_a_inserer, $enregistrements_a_MAJ, $toutes_images); |
return Array($enregistrements, $toutes_images); |
return Array($enregistrements, $toutes_images, $tous_mots_cle); |
} |
|
|
384,6 → 401,10 |
} |
|
|
static function stockerMotsCle($cel, $enregistrements, $tous_mots_cle, $lastid) { |
return count($tous_mots_cle); |
} |
|
static function stockerImages($cel, $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(); |
482,6 → 503,8 |
// "@" 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_MOTS_CLES_TEXTE]) self::traiterMotsCle($ligne[C_MOTS_CLES_TEXTE], $cel, $enregistrement); |
|
return $enregistrement; |
} |
|
488,9 → 511,8 |
static function traiterImage($str, $cel, &$enregistrement) { |
$liste_images = array_filter(explode("/", $str)); |
|
array_walk($liste_images, |
'__anonyme_4', |
$cel); |
//array_walk($liste_images, '__anonyme_4', $cel); |
array_walk($liste_images, array(__CLASS__, '__anonyme_4'), $cel); |
$requete = sprintf( |
"SELECT id_image, nom_original FROM cel_images WHERE ce_utilisateur = %d AND nom_original IN (\"%s\")", |
$cel->id_utilisateur, |
501,7 → 523,28 |
if($resultat) $enregistrement['_images'] = $resultat; |
} |
|
static function traiterMotsCle($str, $cel, &$enregistrement) { |
$liste_mots_cle = array_filter(explode(",", $str)); |
array_walk($liste_mots_cle, array(__CLASS__, '__anonyme_4'), $cel); |
// 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, |
implode('","', $liste_mots_cle)); |
|
$resultat_sql = $cel->requeter($requete); |
if(!$resultat_sql) return; |
|
$resultat = array(); |
foreach($resultat_sql as $v) $resultat[$v['id_mot_cle_obs']] = $v['mot_cle']; |
|
$enregistrement['_mots_cle'] = array("inline_cel_obs" => implode(',', $liste_mots_cle), |
"existing" => $resultat, |
"to_insert" => $liste_mots_cle); |
} |
|
|
/* FONCTIONS de TRANSFORMATION de VALEUR DE CELLULE */ |
|
// TODO: PHP 5.3, utiliser date_parse_from_format() |