Line 66... |
Line 66... |
66 |
|
66 |
|
67 |
// XXX: PHP 5.3
|
67 |
// XXX: PHP 5.3
|
68 |
function __anonyme_1($v) { return !$v['importable']; }
|
68 |
function __anonyme_1($v) { return !$v['importable']; }
|
69 |
function __anonyme_2(&$v) { $v = $v['nom']; }
|
69 |
function __anonyme_2(&$v) { $v = $v['nom']; }
|
70 |
function __anonyme_3($cell) { return !is_null($cell); };
|
- |
|
71 |
function __anonyme_4($item, $key, $obj) { $item = $obj->quoteNonNull(trim($item)); }
|
70 |
function __anonyme_3($cell) { return !is_null($cell); };
|
72 |
function __anonyme_5($item) { return is_null($item) ? '?' : $item; }
|
71 |
function __anonyme_5($item) { return is_null($item) ? '?' : $item; }
|
Line 73... |
Line 72... |
73 |
function __anonyme_6() { return NULL; }
|
72 |
function __anonyme_6() { return NULL; }
|
- |
|
73 |
|
Line 74... |
Line 74... |
74 |
|
74 |
class ImportXLS extends Cel {
|
75 |
class ImportXLS extends Cel {
|
75 |
static function __anonyme_4($item, $key, $obj) { $item = $obj->quoteNonNull(trim($item)); }
|
76 |
|
76 |
|
77 |
static $ordre_BDD = Array(
|
77 |
static $ordre_BDD = Array(
|
Line 222... |
Line 222... |
222 |
$donnees = $objPHPExcel->getActiveSheet()->toArray(NULL, FALSE, FALSE, TRUE);
|
222 |
$donnees = $objPHPExcel->getActiveSheet()->toArray(NULL, FALSE, FALSE, TRUE);
|
223 |
$filtre->exclues = self::detectionEntete($donnees[1]);
|
223 |
$filtre->exclues = self::detectionEntete($donnees[1]);
|
Line 224... |
Line 224... |
224 |
|
224 |
|
225 |
$obs_ajouts = 0;
|
225 |
$obs_ajouts = 0;
|
- |
|
226 |
$obs_maj = 0;
|
- |
|
227 |
$nb_images_ajoutees = 0;
|
- |
|
228 |
$nb_mots_cle_ajoutes = 0;
|
226 |
$obs_maj = 0;
|
229 |
|
227 |
$dernier_ordre = $this->requeter("SELECT MAX(ordre) AS ordre FROM cel_obs WHERE ce_utilisateur = $id_utilisateur");
|
230 |
$dernier_ordre = $this->requeter("SELECT MAX(ordre) AS ordre FROM cel_obs WHERE ce_utilisateur = $id_utilisateur");
|
228 |
$dernier_ordre = intval($dernier_ordre[0]['ordre']) + 1;
|
231 |
$dernier_ordre = intval($dernier_ordre[0]['ordre']) + 1;
|
Line 229... |
Line 232... |
229 |
if(! $dernier_ordre) $dernier_ordre = 0;
|
232 |
if(! $dernier_ordre) $dernier_ordre = 0;
|
Line 244... |
Line 247... |
244 |
$donnees = $objPHPExcel->getActiveSheet()->toArray(NULL, FALSE, FALSE, TRUE);
|
247 |
$donnees = $objPHPExcel->getActiveSheet()->toArray(NULL, FALSE, FALSE, TRUE);
|
Line 245... |
Line 248... |
245 |
|
248 |
|
246 |
// ici on appel la fonction qui fera effectivement l'insertion multiple
|
249 |
// ici on appel la fonction qui fera effectivement l'insertion multiple
|
Line 247... |
Line 250... |
247 |
// à partir des (au plus) NB_LIRE_LIGNE_SIMUL lignes
|
250 |
// à partir des (au plus) NB_LIRE_LIGNE_SIMUL lignes
|
248 |
|
251 |
|
249 |
// TODO: passer $this, ne sert que pour appeler des méthodes public qui pourraient être statiques
|
252 |
// TODO: passer $this, ne sert que pour appeler des méthodes publiques qui pourraient être statiques
|
250 |
// notamment dans RechercheInfosTaxonBeta.php
|
253 |
// notamment dans RechercheInfosTaxonBeta.php
|
251 |
list($enregistrements, $images) =
|
254 |
list($enregistrements, $images, $mots_cle) =
|
Line 252... |
Line 255... |
252 |
self::chargerLignes($this, $donnees, $this->colonnes_statiques, $dernier_ordre);
|
255 |
self::chargerLignes($this, $donnees, $this->colonnes_statiques, $dernier_ordre);
|
253 |
if(! $enregistrements) break;
|
256 |
if(! $enregistrements) break;
|
Line 268... |
Line 271... |
268 |
$this->bdd->beginTransaction();
|
271 |
$this->bdd->beginTransaction();
|
269 |
$stmt = $this->bdd->prepare($sql_pattern);
|
272 |
$stmt = $this->bdd->prepare($sql_pattern);
|
270 |
$donnees = array();
|
273 |
$donnees = array();
|
271 |
foreach($enregistrements as $e) $donnees = array_merge($donnees, array_values($e));
|
274 |
foreach($enregistrements as $e) $donnees = array_merge($donnees, array_values($e));
|
Line 272... |
Line 275... |
272 |
|
275 |
|
Line 273... |
Line 276... |
273 |
/* debug ici: echo $sql_pattern . "\n"; var_dump($enregistrements, $donnees); die;*/
|
276 |
/* debug ici: */ echo $sql_pattern . "\n"; var_dump($enregistrements, $donnees); die;
|
Line 274... |
Line 277... |
274 |
|
277 |
|
275 |
$stmt->execute($donnees);
|
278 |
$stmt->execute($donnees);
|
Line 281... |
Line 284... |
281 |
if(! $dernier_autoinc) trigger_error("l'insertion semble avoir échoué", E_USER_NOTICE);
|
284 |
if(! $dernier_autoinc) trigger_error("l'insertion semble avoir échoué", E_USER_NOTICE);
|
Line 282... |
Line 285... |
282 |
|
285 |
|
283 |
$obs_ajouts += count($enregistrements);
|
286 |
$obs_ajouts += count($enregistrements);
|
284 |
// $obs_ajouts += count($enregistrements['insert']);
|
287 |
// $obs_ajouts += count($enregistrements['insert']);
|
285 |
// $obs_maj += count($enregistrements['update']);
|
288 |
// $obs_maj += count($enregistrements['update']);
|
- |
|
289 |
$nb_images_ajoutees += self::stockerImages($this, $enregistrements, $images, $dernier_autoinc);
|
286 |
$nb_images_ajoutees = self::stockerImages($this, $enregistrements, $images, $dernier_autoinc);
|
290 |
$nb_mots_cle_ajoutes += self::stockerMotsCle($this, $enregistrements, $mots_cle, $dernier_autoinc);
|
Line 287... |
Line 291... |
287 |
}
|
291 |
}
|
Line 288... |
Line 292... |
288 |
|
292 |
|
Line 296... |
Line 300... |
296 |
die("$summary");
|
300 |
die("$summary");
|
297 |
}
|
301 |
}
|
Line 298... |
Line 302... |
298 |
|
302 |
|
299 |
static function detectionEntete($entete) {
|
303 |
static function detectionEntete($entete) {
|
300 |
$colonnes_reconnues = Array();
|
304 |
$colonnes_reconnues = Array();
|
301 |
$cols = FormateurGroupeColonne::nomEnsembleVersListeColonnes('standard');
|
305 |
$cols = FormateurGroupeColonne::nomEnsembleVersListeColonnes('standard'); // ,avance
|
302 |
foreach($entete as $k => $v) {
|
306 |
foreach($entete as $k => $v) {
|
303 |
$entete_simple = iconv('UTF-8', 'ASCII//TRANSLIT', strtolower(trim($v)));
|
307 |
$entete_simple = iconv('UTF-8', 'ASCII//TRANSLIT', strtolower(trim($v)));
|
304 |
foreach($cols as $col) {
|
308 |
foreach($cols as $col) {
|
305 |
$entete_officiel_simple = iconv('UTF-8', 'ASCII//TRANSLIT', strtolower(trim($col['nom'])));
|
309 |
$entete_officiel_simple = iconv('UTF-8', 'ASCII//TRANSLIT', strtolower(trim($col['nom'])));
|
Line 351... |
Line 355... |
351 |
if(! array_filter($ligne, '__anonyme_3')) continue;
|
355 |
if(! array_filter($ligne, '__anonyme_3')) continue;
|
Line 352... |
Line 356... |
352 |
|
356 |
|
353 |
if( ($enregistrement = self::chargerLigne($ligne, $dernier_ordre, $cel)) ) {
|
357 |
if( ($enregistrement = self::chargerLigne($ligne, $dernier_ordre, $cel)) ) {
|
354 |
// $enregistrements[] = array_merge($colonnes_statiques, $enregistrement);
|
358 |
// $enregistrements[] = array_merge($colonnes_statiques, $enregistrement);
|
355 |
$enregistrements[] = $enregistrement;
|
- |
|
356 |
|
- |
|
357 |
if(isset($enregistrement['_images'])) {
|
359 |
$enregistrements[] = $enregistrement;
|
358 |
$pos = count($enregistrements) - 1;
|
360 |
$pos = count($enregistrements) - 1;
|
- |
|
361 |
$last = &$enregistrements[$pos];
|
- |
|
362 |
|
359 |
$last = &$enregistrements[$pos];
|
363 |
if(isset($enregistrement['_images'])) {
|
360 |
// ne dépend pas de cel_obs, et seront insérées *après* les enregistrements
|
364 |
// ne dépend pas de cel_obs, et seront insérées *après* les enregistrements
|
361 |
// mais nous ne voulons pas nous priver de faire des INSERT multiples pour autant
|
365 |
// mais nous ne voulons pas nous priver de faire des INSERT multiples pour autant
|
362 |
$toutes_images[] = Array("images" => $last['_images'],
|
366 |
$toutes_images[] = Array("images" => $last['_images'],
|
363 |
"obs_pos" => $pos);
|
367 |
"obs_pos" => $pos);
|
364 |
// ce champ n'a pas a faire partie de l'insertion dans cel_obs,
|
368 |
// ce champ n'a pas à faire partie de l'insertion dans cel_obs,
|
365 |
// mais est utile pour cel_obs_images
|
369 |
// mais est utile pour cel_obs_images
|
366 |
unset($last['_images']);
|
370 |
unset($last['_images']);
|
Line -... |
Line 371... |
- |
|
371 |
}
|
- |
|
372 |
|
- |
|
373 |
if(isset($enregistrement['_mots_cle'])) {
|
- |
|
374 |
// ne dépend pas de cel_obs, et seront insérés *après* les enregistrements
|
- |
|
375 |
// mais nous ne voulons pas nous priver de faire des INSERT multiples pour autant
|
- |
|
376 |
$tous_mots_cle[] = Array("mots_cle" => $last['_mots_cle'],
|
- |
|
377 |
"obs_pos" => $pos);
|
- |
|
378 |
// la version inlinée des mots est enregistrées dans cel_obs
|
- |
|
379 |
// mais cel_mots_cles_obs fait foi.
|
- |
|
380 |
// XXX: postponer l'ajout de ces informations dans cel_obs *après* l'insertion effective
|
- |
|
381 |
// des records dans cel_mots_cles_obs ?
|
- |
|
382 |
$last[C_MOTS_CLES_TEXTE] = $last['_mots_cle']['inline_cel_obs'];
|
- |
|
383 |
unset($last['_mots_cle']);
|
367 |
}
|
384 |
}
|
368 |
|
385 |
|
369 |
$dernier_ordre++;
|
386 |
$dernier_ordre++;
|
Line 370... |
Line 387... |
370 |
}
|
387 |
}
|
371 |
}
|
388 |
}
|
372 |
|
389 |
|
Line 373... |
Line 390... |
373 |
// XXX future: return Array($enregistrements_a_inserer, $enregistrements_a_MAJ, $toutes_images);
|
390 |
// XXX future: return Array($enregistrements_a_inserer, $enregistrements_a_MAJ, $toutes_images);
|
374 |
return Array($enregistrements, $toutes_images);
|
391 |
return Array($enregistrements, $toutes_images, $tous_mots_cle);
|
Line 382... |
Line 399... |
382 |
//$req .= implode(', ', $enregistrement) . "\n";
|
399 |
//$req .= implode(', ', $enregistrement) . "\n";
|
383 |
}
|
400 |
}
|
384 |
}
|
401 |
}
|
Line -... |
Line 402... |
- |
|
402 |
|
- |
|
403 |
|
- |
|
404 |
static function stockerMotsCle($cel, $enregistrements, $tous_mots_cle, $lastid) {
|
- |
|
405 |
return count($tous_mots_cle);
|
385 |
|
406 |
}
|
386 |
|
407 |
|
387 |
static function stockerImages($cel, $enregistrements, $toutes_images, $lastid) {
|
408 |
static function stockerImages($cel, $enregistrements, $toutes_images, $lastid) {
|
Line 388... |
Line 409... |
388 |
$images_insert = 'INSERT INTO cel_obs_images (id_image, id_observation) VALUES %s ON DUPLICATE KEY UPDATE id_image = id_image';
|
409 |
$images_insert = 'INSERT INTO cel_obs_images (id_image, id_observation) VALUES %s ON DUPLICATE KEY UPDATE id_image = id_image';
|
Line 480... |
Line 501... |
480 |
// passage de $enregistrement par référence, ainsi ['_images'] n'est défini
|
501 |
// passage de $enregistrement par référence, ainsi ['_images'] n'est défini
|
481 |
// que si des résultats sont trouvés
|
502 |
// que si des résultats sont trouvés
|
482 |
// "@" car PHPExcel supprime les colonnes null sur toute la feuille (ou tout le chunk)
|
503 |
// "@" car PHPExcel supprime les colonnes null sur toute la feuille (ou tout le chunk)
|
483 |
if(@$ligne[C_IMAGES]) self::traiterImage($ligne[C_IMAGES], $cel, $enregistrement);
|
504 |
if(@$ligne[C_IMAGES]) self::traiterImage($ligne[C_IMAGES], $cel, $enregistrement);
|
Line -... |
Line 505... |
- |
|
505 |
|
- |
|
506 |
if(@$ligne[C_MOTS_CLES_TEXTE]) self::traiterMotsCle($ligne[C_MOTS_CLES_TEXTE], $cel, $enregistrement);
|
484 |
|
507 |
|
485 |
return $enregistrement;
|
508 |
return $enregistrement;
|
Line 486... |
Line 509... |
486 |
}
|
509 |
}
|
487 |
|
510 |
|
Line 488... |
Line 511... |
488 |
static function traiterImage($str, $cel, &$enregistrement) {
|
511 |
static function traiterImage($str, $cel, &$enregistrement) {
|
489 |
$liste_images = array_filter(explode("/", $str));
|
512 |
$liste_images = array_filter(explode("/", $str));
|
490 |
|
- |
|
491 |
array_walk($liste_images,
|
513 |
|
492 |
'__anonyme_4',
|
514 |
//array_walk($liste_images, '__anonyme_4', $cel);
|
493 |
$cel);
|
515 |
array_walk($liste_images, array(__CLASS__, '__anonyme_4'), $cel);
|
494 |
$requete = sprintf(
|
516 |
$requete = sprintf(
|
Line 495... |
Line 517... |
495 |
"SELECT id_image, nom_original FROM cel_images WHERE ce_utilisateur = %d AND nom_original IN (\"%s\")",
|
517 |
"SELECT id_image, nom_original FROM cel_images WHERE ce_utilisateur = %d AND nom_original IN (\"%s\")",
|
Line 496... |
Line 518... |
496 |
$cel->id_utilisateur,
|
518 |
$cel->id_utilisateur,
|
497 |
implode('","', $liste_images));
|
519 |
implode('","', $liste_images));
|
Line -... |
Line 520... |
- |
|
520 |
|
- |
|
521 |
$resultat = $cel->requeter($requete);
|
- |
|
522 |
|
- |
|
523 |
if($resultat) $enregistrement['_images'] = $resultat;
|
- |
|
524 |
}
|
- |
|
525 |
|
- |
|
526 |
static function traiterMotsCle($str, $cel, &$enregistrement) {
|
- |
|
527 |
$liste_mots_cle = array_filter(explode(",", $str));
|
- |
|
528 |
array_walk($liste_mots_cle, array(__CLASS__, '__anonyme_4'), $cel);
|
- |
|
529 |
// TODO!!!! remplace > (pour les tests uniquement) par un = et supprimer le group by mot_cle
|
- |
|
530 |
$requete = sprintf("SELECT id_mot_cle_obs, mot_cle FROM cel_mots_cles_obs WHERE id_utilisateur > %d ".
|
- |
|
531 |
"AND mot_cle IN (\"%s\") ".
|
- |
|
532 |
"GROUP BY mot_cle",
|
- |
|
533 |
$cel->id_utilisateur,
|
- |
|
534 |
implode('","', $liste_mots_cle));
|
- |
|
535 |
|
- |
|
536 |
$resultat_sql = $cel->requeter($requete);
|
- |
|
537 |
if(!$resultat_sql) return;
|
- |
|
538 |
|
- |
|
539 |
$resultat = array();
|
- |
|
540 |
foreach($resultat_sql as $v) $resultat[$v['id_mot_cle_obs']] = $v['mot_cle'];
|
Line 498... |
Line 541... |
498 |
|
541 |
|
Line 499... |
Line 542... |
499 |
$resultat = $cel->requeter($requete);
|
542 |
$enregistrement['_mots_cle'] = array("inline_cel_obs" => implode(',', $liste_mots_cle),
|
500 |
|
543 |
"existing" => $resultat,
|