| Line 327... |
Line 327... |
| 327 |
// // cette section devrait être vide:
|
327 |
// // cette section devrait être vide:
|
| 328 |
// // cas particuliers ingérable avec l'architecture actuelle:
|
328 |
// // cas particuliers ingérable avec l'architecture actuelle:
|
| 329 |
if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
|
329 |
if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
|
| 330 |
/* blah */
|
330 |
/* blah */
|
| 331 |
}
|
331 |
}
|
| 332 |
// ici à cause du passage de $cel ($this), TODO: DB en Singleton !
|
332 |
// ici à cause du passage de $cel ($this->utilisateur)
|
| 333 |
if($abbrev == 'images') {
|
333 |
if($abbrev == 'images') {
|
| 334 |
$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur, $cel);
|
334 |
$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur);
|
| 335 |
}
|
335 |
}
|
| 336 |
if($abbrev == 'nom-commun') {
|
336 |
if($abbrev == 'nom-commun') {
|
| 337 |
$valeur = FormateurGroupeColonne::getNomCommun_v4($obs, $cel);
|
337 |
$valeur = FormateurGroupeColonne::getNomCommun_v4($obs);
|
| 338 |
}
|
338 |
}
|
| Line 339... |
Line 339... |
| 339 |
|
339 |
|
| 340 |
if($valeur == null) {
|
340 |
if($valeur == null) {
|
| 341 |
$valeur = "";
|
341 |
$valeur = "";
|
| Line 349... |
Line 349... |
| 349 |
foreach($colonnes as $abbrev => $colonne) {
|
349 |
foreach($colonnes as $abbrev => $colonne) {
|
| 350 |
$valeur = null;
|
350 |
$valeur = null;
|
| 351 |
if(is_null($colonne['dyna'])) continue;
|
351 |
if(is_null($colonne['dyna'])) continue;
|
| 352 |
// XXX: PHP-5.3
|
352 |
// XXX: PHP-5.3
|
| 353 |
call_user_func_array($colonne['dyna'],
|
353 |
call_user_func_array($colonne['dyna'],
|
| 354 |
array($cel, $obs, &$ligne_formatee));
|
354 |
array($obs, &$ligne_formatee));
|
| 355 |
}
|
355 |
}
|
| Line 356... |
Line 356... |
| 356 |
|
356 |
|
| 357 |
return $ligne_formatee;
|
357 |
return $ligne_formatee;
|
| Line 391... |
Line 391... |
| 391 |
* Utile, notamment, dans le cadre de l'export
|
391 |
* Utile, notamment, dans le cadre de l'export
|
| Line 392... |
Line 392... |
| 392 |
|
392 |
|
| 393 |
* @param $fonction_dynamique (optionnel): défini une fonction ajoutant un nombre arbitraire de colonnes à une ligne donnée
|
393 |
* @param $fonction_dynamique (optionnel): défini une fonction ajoutant un nombre arbitraire de colonnes à une ligne donnée
|
| 394 |
* Utile, notamment, dans le cadre de l'export des champs étendus ou des données baseflor
|
394 |
* Utile, notamment, dans le cadre de l'export des champs étendus ou des données baseflor
|
| 395 |
* La fonction doit TOUJOURS alterer la ligne en lui ajoutant une nombre CONSTANT d'éléments (NULL ou non)
|
395 |
* La fonction doit TOUJOURS alterer la ligne en lui ajoutant une nombre CONSTANT d'éléments (NULL ou non)
|
| 396 |
* La fonction doit prendre comme arguments ($cel, $obs, &$ligne_formatee)
|
396 |
* La fonction doit prendre comme arguments ($obs, &$ligne_formatee)
|
| 397 |
*/
|
397 |
*/
|
| 398 |
static function GenColInfo($args) {
|
398 |
static function GenColInfo($args) {
|
| 399 |
$default = Array('abbrev' => NULL,
|
399 |
$default = Array('abbrev' => NULL,
|
| 400 |
'nom' => NULL,
|
400 |
'nom' => NULL,
|
| Line 441... |
Line 441... |
| 441 |
self::$cache['getImages'][$v['id_observation']] = $v['i'];
|
441 |
self::$cache['getImages'][$v['id_observation']] = $v['i'];
|
| 442 |
}
|
442 |
}
|
| 443 |
return NULL;
|
443 |
return NULL;
|
| 444 |
}
|
444 |
}
|
| Line 445... |
Line 445... |
| 445 |
|
445 |
|
| 446 |
static function getImages($obs, $id_utilisateur, $cel) {
|
446 |
static function getImages($obs, $id_utilisateur) {
|
| 447 |
if(! $id_utilisateur) return NULL;
|
447 |
if(! $id_utilisateur) return NULL;
|
| 448 |
if(isset(self::$cache['getImages'][$obs['id_observation']]))
|
448 |
if(isset(self::$cache['getImages'][$obs['id_observation']]))
|
| Line 449... |
Line 449... |
| 449 |
return self::$cache['getImages'][$obs['id_observation']];
|
449 |
return self::$cache['getImages'][$obs['id_observation']];
|
| 450 |
|
450 |
|
| 451 |
$rec = $cel->requeter(
|
451 |
$rec = Cel::db()->requeter(
|
| 452 |
sprintf("SELECT GROUP_CONCAT(nom_original ORDER BY nom_original ASC SEPARATOR '%s') AS i FROM cel_images i"
|
452 |
sprintf("SELECT GROUP_CONCAT(nom_original ORDER BY nom_original ASC SEPARATOR '%s') AS i FROM cel_images i"
|
| 453 |
." LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image)"
|
453 |
." LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image)"
|
| 454 |
." LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation)"
|
454 |
." LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation)"
|
| Line 603... |
Line 603... |
| 603 |
|
603 |
|
| 604 |
/* Cette fonction initialise le cache des noms communs en 1 fois, sur la liste des observations à exporter.
|
604 |
/* Cette fonction initialise le cache des noms communs en 1 fois, sur la liste des observations à exporter.
|
| 605 |
Ainsi, les appels successifs à getNomCommun_v4() ne sont pas couteux (pas de requête SQL) */
|
605 |
Ainsi, les appels successifs à getNomCommun_v4() ne sont pas couteux (pas de requête SQL) */
|
| 606 |
static function getNomCommun_preload($cel, $obsids) {
|
606 |
static function getNomCommun_preload($cel, $obsids) {
|
| 607 |
if(!$obsids) return;
|
607 |
if(!$obsids) return;
|
| Line 608... |
Line 608... |
| 608 |
if(!self::referenceTableExiste($cel)) return NULL;
|
608 |
if(!self::referenceTableExiste()) return NULL;
|
| 609 |
|
609 |
|
| 610 |
// CREATE INDEX i_nom_referentiel ON cel_obs (nom_referentiel(5));
|
610 |
// CREATE INDEX i_nom_referentiel ON cel_obs (nom_referentiel(5));
|
| 611 |
$req = sprintf("SELECT r.referentiel, r.num_taxon, r.nom_commun FROM cel_references r" .
|
611 |
$req = sprintf("SELECT r.referentiel, r.num_taxon, r.nom_commun FROM cel_references r" .
|
| 612 |
" INNER JOIN cel_obs c ON (r.referentiel = substring_index(c.nom_referentiel, ':', 1) and r.num_taxon = c.nt)" .
|
612 |
" INNER JOIN cel_obs c ON (r.referentiel = substring_index(c.nom_referentiel, ':', 1) and r.num_taxon = c.nt)" .
|
| 613 |
" WHERE c.id_observation IN (%s)",
|
613 |
" WHERE c.id_observation IN (%s)",
|
| 614 |
implode(',', $obsids));
|
614 |
implode(',', $obsids));
|
| 615 |
$res = $cel->requeter($req);
|
615 |
$res = Cel::db()->requeter($req);
|
| 616 |
foreach($res as $v) {
|
616 |
foreach($res as $v) {
|
| 617 |
self::$cache['getNomCommun'][$v['referentiel'] . '-' . $v['num_taxon'] . '-' . 'fra'] = $v['nom_commun'];
|
617 |
self::$cache['getNomCommun'][$v['referentiel'] . '-' . $v['num_taxon'] . '-' . 'fra'] = $v['nom_commun'];
|
| 618 |
}
|
618 |
}
|
| Line 619... |
Line 619... |
| 619 |
return NULL;
|
619 |
return NULL;
|
| 620 |
}
|
620 |
}
|
| 621 |
|
621 |
|
| 622 |
static function referenceTableExiste($cel) {
|
622 |
static function referenceTableExiste() {
|
| 623 |
if(!self::$is_table) {
|
623 |
if(!self::$is_table) {
|
| 624 |
// une seule fois
|
624 |
// une seule fois
|
| 625 |
if(! $cel->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE;
|
625 |
if(! Cel::db()->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE;
|
| 626 |
self::$is_table = TRUE;
|
626 |
self::$is_table = TRUE;
|
| Line 627... |
Line 627... |
| 627 |
}
|
627 |
}
|
| 628 |
return TRUE;
|
628 |
return TRUE;
|
| 629 |
}
|
629 |
}
|
| Line 630... |
Line 630... |
| 630 |
|
630 |
|
| 631 |
static function getNomCommun_v4($obs, $cel) {
|
631 |
static function getNomCommun_v4($obs) {
|
| 632 |
if(! $obs['nt']) return NULL;
|
632 |
if(! $obs['nt']) return NULL;
|
| Line 642... |
Line 642... |
| 642 |
// XXX: problème de valeurs NULL ?
|
642 |
// XXX: problème de valeurs NULL ?
|
| 643 |
if(array_key_exists($cache_id, self::$cache['getNomCommun'])) return self::$cache['getNomCommun'][$cache_id];
|
643 |
if(array_key_exists($cache_id, self::$cache['getNomCommun'])) return self::$cache['getNomCommun'][$cache_id];
|
| 644 |
}
|
644 |
}
|
| Line 645... |
Line 645... |
| 645 |
|
645 |
|
| 646 |
// pas de cache:
|
646 |
// pas de cache:
|
| 647 |
$nom = $cel->executerRequete(sprintf("SELECT nom_commun FROM cel_references " .
|
647 |
$nom = Cel::db()->executerRequete(sprintf("SELECT nom_commun FROM cel_references " .
|
| 648 |
"WHERE referentiel = '%s' AND num_taxon = %d LIMIT 1",
|
648 |
"WHERE referentiel = '%s' AND num_taxon = %d LIMIT 1",
|
| 649 |
$referentiel,
|
649 |
$referentiel,
|
| 650 |
$obs['nt']),
|
650 |
$obs['nt']),
|
| Line 651... |
Line 651... |
| 651 |
Cel::SQL_RETOUR_LIGNE);
|
651 |
Cel::SQL_RETOUR_LIGNE);
|
| 652 |
|
652 |
|
| Line 653... |
Line 653... |
| 653 |
if(! $nom) return NULL;
|
653 |
if(! $nom) return NULL;
|
| Line 661... |
Line 661... |
| 661 |
|
661 |
|
| 662 |
/* Cette fonction initialise le cache des données baseflor en 1 fois, sur la liste des observations à exporter.
|
662 |
/* Cette fonction initialise le cache des données baseflor en 1 fois, sur la liste des observations à exporter.
|
| 663 |
Ainsi, les appels successifs à baseflor_ligne() ne sont pas couteux (pas de requête SQL) */
|
663 |
Ainsi, les appels successifs à baseflor_ligne() ne sont pas couteux (pas de requête SQL) */
|
| 664 |
static function baseflor_preload($cel, $obsids) {
|
664 |
static function baseflor_preload($cel, $obsids) {
|
| 665 |
if(!$obsids) return;
|
665 |
if(!$obsids) return;
|
| Line 666... |
Line 666... |
| 666 |
if(!self::referenceTableExiste($cel)) return NULL;
|
666 |
if(!self::referenceTableExiste()) return NULL;
|
| 667 |
|
667 |
|
| 668 |
$req = sprintf("SELECT referentiel, num_nom_retenu, %s FROM cel_references r" .
|
668 |
$req = sprintf("SELECT referentiel, num_nom_retenu, %s FROM cel_references r" .
|
| 669 |
" INNER JOIN cel_obs c ON (r.num_nom_retenu = c.nom_ret_nn)" .
|
669 |
" INNER JOIN cel_obs c ON (r.num_nom_retenu = c.nom_ret_nn)" .
|
| 670 |
" WHERE c.id_observation IN (%s)",
|
670 |
" WHERE c.id_observation IN (%s)",
|
| 671 |
//" AND catminat_code IS NOT NULL", // TODO: suppression des NULL ici signifie que le cache sera partiel...
|
671 |
//" AND catminat_code IS NOT NULL", // TODO: suppression des NULL ici signifie que le cache sera partiel...
|
| 672 |
implode(',', array_keys(self::$baseflor_col)),
|
672 |
implode(',', array_keys(self::$baseflor_col)),
|
| 673 |
implode(',', $obsids));
|
673 |
implode(',', $obsids));
|
| Line 674... |
Line 674... |
| 674 |
$res = $cel->requeter($req);
|
674 |
$res = Cel::db()->requeter($req);
|
| 675 |
if(!$res) return NULL;
|
675 |
if(!$res) return NULL;
|
| 676 |
|
676 |
|
| Line 683... |
Line 683... |
| 683 |
|
683 |
|
| 684 |
return NULL;
|
684 |
return NULL;
|
| Line 685... |
Line 685... |
| 685 |
}
|
685 |
}
|
| 686 |
|
686 |
|
| 687 |
|
687 |
|
| 688 |
static function baseflor_ligne($cel, $obs, &$ligne) {
|
688 |
static function baseflor_ligne($obs, &$ligne) {
|
| 689 |
if(! $obs['nom_ret_nn']) {
|
689 |
if(! $obs['nom_ret_nn']) {
|
| Line 690... |
Line 690... |
| 690 |
$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL));
|
690 |
$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL));
|
| 691 |
return;
|
691 |
return;
|
| 692 |
}
|
692 |
}
|
| 693 |
|
693 |
|
| Line 694... |
Line 694... |
| 694 |
if(! self::referenceTableExiste($cel)) {
|
694 |
if(! self::referenceTableExiste()) {
|
| Line 705... |
Line 705... |
| 705 |
$ligne = array_merge($ligne, self::$cache['getBaseflor'][$cache_id]);
|
705 |
$ligne = array_merge($ligne, self::$cache['getBaseflor'][$cache_id]);
|
| 706 |
return;
|
706 |
return;
|
| 707 |
}
|
707 |
}
|
| Line 708... |
Line 708... |
| 708 |
|
708 |
|
| 709 |
// pas de cache:
|
709 |
// pas de cache:
|
| 710 |
$data = $cel->executerRequete(sprintf("SELECT %s FROM cel_references " .
|
710 |
$data = Cel::db()->executerRequete(sprintf("SELECT %s FROM cel_references " .
|
| 711 |
"WHERE referentiel = '%s' AND num_nom_retenu = %d LIMIT 1",
|
711 |
"WHERE referentiel = '%s' AND num_nom_retenu = %d LIMIT 1",
|
| 712 |
implode(', ', array_keys(self::$baseflor_col)),
|
712 |
implode(', ', array_keys(self::$baseflor_col)),
|
| 713 |
$referentiel,
|
713 |
$referentiel,
|
| 714 |
$obs['nom_ret_nn']),
|
714 |
$obs['nom_ret_nn']),
|
| Line 758... |
Line 758... |
| 758 |
$champs_etendus_fmt[$champ->cle] = $champ->valeur;
|
758 |
$champs_etendus_fmt[$champ->cle] = $champ->valeur;
|
| 759 |
}
|
759 |
}
|
| 760 |
return $champs_etendus_fmt;
|
760 |
return $champs_etendus_fmt;
|
| 761 |
}
|
761 |
}
|
| Line 762... |
Line 762... |
| 762 |
|
762 |
|
| 763 |
static function champsEtendus_ligne($cel, $obs, &$ligne) {
|
763 |
static function champsEtendus_ligne($obs, &$ligne) {
|
| 764 |
// si header n'est pas défini, aucune observation ne possède de champ étendu
|
764 |
// si header n'est pas défini, aucune observation ne possède de champ étendu
|
| 765 |
// et nous n'ajoutons ni colonnes, ni valeurs.
|
765 |
// et nous n'ajoutons ni colonnes, ni valeurs.
|
| 766 |
if(! isset(self::$cache['champsEtendus']['header'])) return;
|
766 |
if(! isset(self::$cache['champsEtendus']['header'])) return;
|