| 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);
|
| - |
|
359 |
$enregistrements[] = $enregistrement;
|
| - |
|
360 |
$pos = count($enregistrements) - 1;
|
| Line 355... |
Line 361... |
| 355 |
$enregistrements[] = $enregistrement;
|
361 |
$last = &$enregistrements[$pos];
|
| 356 |
|
- |
|
| 357 |
if(isset($enregistrement['_images'])) {
|
- |
|
| 358 |
$pos = count($enregistrements) - 1;
|
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
|
| Line -... |
Line 370... |
| - |
|
370 |
unset($last['_images']);
|
| - |
|
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'];
|
| 366 |
unset($last['_images']);
|
383 |
unset($last['_mots_cle']);
|
| 367 |
}
|
384 |
}
|
| 368 |
|
385 |
|
| Line 369... |
Line 386... |
| 369 |
$dernier_ordre++;
|
386 |
$dernier_ordre++;
|
| 370 |
}
|
387 |
}
|
| 371 |
}
|
388 |
}
|
| Line 372... |
Line 389... |
| 372 |
|
389 |
|
| 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);
|
| 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,
|