Line 209... |
Line 209... |
209 |
// // cette section devrait être vide:
|
209 |
// // cette section devrait être vide:
|
210 |
// // cas particuliers ingérable avec l'architecture actuelle:
|
210 |
// // cas particuliers ingérable avec l'architecture actuelle:
|
211 |
if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
|
211 |
if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") {
|
212 |
/* blah */
|
212 |
/* blah */
|
213 |
}
|
213 |
}
|
214 |
// ici à cause du passage de $cel ($this), TODO: DB en Singleton !
|
214 |
// ici à cause du passage de $cel ($this->utilisateur)
|
215 |
if($abbrev == 'images') {
|
215 |
if($abbrev == 'images') {
|
216 |
$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur, $cel);
|
216 |
$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur);
|
217 |
}
|
217 |
}
|
218 |
if($abbrev == 'nom-commun') {
|
218 |
if($abbrev == 'nom-commun') {
|
219 |
$valeur = FormateurGroupeColonne::getNomCommun_v4($obs, $cel);
|
219 |
$valeur = FormateurGroupeColonne::getNomCommun_v4($obs);
|
220 |
}
|
220 |
}
|
Line 221... |
Line 221... |
221 |
|
221 |
|
222 |
if($valeur == null) {
|
222 |
if($valeur == null) {
|
223 |
$valeur = "";
|
223 |
$valeur = "";
|
Line 231... |
Line 231... |
231 |
foreach($colonnes as $abbrev => $colonne) {
|
231 |
foreach($colonnes as $abbrev => $colonne) {
|
232 |
$valeur = null;
|
232 |
$valeur = null;
|
233 |
if(is_null($colonne['dyna'])) continue;
|
233 |
if(is_null($colonne['dyna'])) continue;
|
234 |
// XXX: PHP-5.3
|
234 |
// XXX: PHP-5.3
|
235 |
call_user_func_array($colonne['dyna'],
|
235 |
call_user_func_array($colonne['dyna'],
|
236 |
array($cel, $obs, &$ligne_formatee));
|
236 |
array($obs, &$ligne_formatee));
|
237 |
}
|
237 |
}
|
Line 238... |
Line 238... |
238 |
|
238 |
|
239 |
return $ligne_formatee;
|
239 |
return $ligne_formatee;
|
Line 273... |
Line 273... |
273 |
* Utile, notamment, dans le cadre de l'export
|
273 |
* Utile, notamment, dans le cadre de l'export
|
Line 274... |
Line 274... |
274 |
|
274 |
|
275 |
* @param $fonction_dynamique (optionnel): défini une fonction ajoutant un nombre arbitraire de colonnes à une ligne donnée
|
275 |
* @param $fonction_dynamique (optionnel): défini une fonction ajoutant un nombre arbitraire de colonnes à une ligne donnée
|
276 |
* Utile, notamment, dans le cadre de l'export des champs étendus ou des données baseflor
|
276 |
* Utile, notamment, dans le cadre de l'export des champs étendus ou des données baseflor
|
277 |
* La fonction doit TOUJOURS alterer la ligne en lui ajoutant une nombre CONSTANT d'éléments (NULL ou non)
|
277 |
* La fonction doit TOUJOURS alterer la ligne en lui ajoutant une nombre CONSTANT d'éléments (NULL ou non)
|
278 |
* La fonction doit prendre comme arguments ($cel, $obs, &$ligne_formatee)
|
278 |
* La fonction doit prendre comme arguments ($obs, &$ligne_formatee)
|
279 |
*/
|
279 |
*/
|
280 |
static function GenColInfo($abbrev, $nom, $is_extra = 0, $fonction = NULL, $fonction_data = NULL, $importable = TRUE, $preload = NULL, $fonction_dynamique = NULL) {
|
280 |
static function GenColInfo($abbrev, $nom, $is_extra = 0, $fonction = NULL, $fonction_data = NULL, $importable = TRUE, $preload = NULL, $fonction_dynamique = NULL) {
|
281 |
return Array('abbrev' => $abbrev,
|
281 |
return Array('abbrev' => $abbrev,
|
282 |
'nom' => $nom,
|
282 |
'nom' => $nom,
|
Line 306... |
Line 306... |
306 |
$date_formatee = strftime('%Y/%m/%d', $timestamp);
|
306 |
$date_formatee = strftime('%Y/%m/%d', $timestamp);
|
307 |
if(!$date_formatee) return "00/00/0000";
|
307 |
if(!$date_formatee) return "00/00/0000";
|
308 |
return $date_formatee;
|
308 |
return $date_formatee;
|
309 |
}
|
309 |
}
|
Line 310... |
Line 310... |
310 |
|
310 |
|
311 |
static function getImages($obs, $id_utilisateur, $cel) {
|
311 |
static function getImages($obs, $id_utilisateur) {
|
312 |
if(! $id_utilisateur) return NULL;
|
312 |
if(! $id_utilisateur) return NULL;
|
313 |
$rec = $cel->requeter(
|
313 |
$rec = Cel::db()->requeter(
|
314 |
sprintf("SELECT GROUP_CONCAT(nom_original SEPARATOR '%s') FROM cel_images i"
|
314 |
sprintf("SELECT GROUP_CONCAT(nom_original SEPARATOR '%s') FROM cel_images i"
|
315 |
." LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image)"
|
315 |
." LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image)"
|
316 |
." LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation)"
|
316 |
." LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation)"
|
317 |
." WHERE ce_utilisateur = %d",
|
317 |
." WHERE ce_utilisateur = %d",
|
Line 456... |
Line 456... |
456 |
|
456 |
|
457 |
/* Cette fonction initialise le cache des noms communs en 1 fois, sur la liste des observations à exporter.
|
457 |
/* Cette fonction initialise le cache des noms communs en 1 fois, sur la liste des observations à exporter.
|
458 |
Ainsi, les appels successifs à getNomCommun_v4() ne sont pas couteux (pas de requête SQL) */
|
458 |
Ainsi, les appels successifs à getNomCommun_v4() ne sont pas couteux (pas de requête SQL) */
|
459 |
static function getNomCommun_preload($cel, $obsids) {
|
459 |
static function getNomCommun_preload($cel, $obsids) {
|
460 |
if(!$obsids) return;
|
460 |
if(!$obsids) return;
|
Line 461... |
Line 461... |
461 |
if(!self::referenceTableExiste($cel)) return NULL;
|
461 |
if(!self::referenceTableExiste()) return NULL;
|
462 |
|
462 |
|
463 |
// CREATE INDEX i_nom_referentiel ON cel_obs (nom_referentiel(5));
|
463 |
// CREATE INDEX i_nom_referentiel ON cel_obs (nom_referentiel(5));
|
464 |
$req = sprintf("SELECT r.referentiel, r.num_taxon, r.nom_commun FROM cel_references r" .
|
464 |
$req = sprintf("SELECT r.referentiel, r.num_taxon, r.nom_commun FROM cel_references r" .
|
465 |
" INNER JOIN cel_obs c ON (r.referentiel = substring_index(c.nom_referentiel, ':', 1) and r.num_taxon = c.nt)" .
|
465 |
" INNER JOIN cel_obs c ON (r.referentiel = substring_index(c.nom_referentiel, ':', 1) and r.num_taxon = c.nt)" .
|
466 |
" WHERE c.id_observation IN (%s)",
|
466 |
" WHERE c.id_observation IN (%s)",
|
467 |
implode(',', $obsids));
|
467 |
implode(',', $obsids));
|
468 |
$res = $cel->requeter($req);
|
468 |
$res = Cel::db()->requeter($req);
|
469 |
foreach($res as $v) {
|
469 |
foreach($res as $v) {
|
470 |
self::$cache['getNomCommun'][$v['referentiel'] . '-' . $v['num_taxon'] . '-' . 'fra'] = $v['nom_commun'];
|
470 |
self::$cache['getNomCommun'][$v['referentiel'] . '-' . $v['num_taxon'] . '-' . 'fra'] = $v['nom_commun'];
|
471 |
}
|
471 |
}
|
Line 472... |
Line 472... |
472 |
return NULL;
|
472 |
return NULL;
|
473 |
}
|
473 |
}
|
474 |
|
474 |
|
475 |
static function referenceTableExiste($cel) {
|
475 |
static function referenceTableExiste() {
|
476 |
if(!self::$is_table) {
|
476 |
if(!self::$is_table) {
|
477 |
// une seule fois
|
477 |
// une seule fois
|
478 |
if(! $cel->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE;
|
478 |
if(! Cel::db()->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE;
|
479 |
self::$is_table = TRUE;
|
479 |
self::$is_table = TRUE;
|
Line 480... |
Line 480... |
480 |
}
|
480 |
}
|
481 |
return TRUE;
|
481 |
return TRUE;
|
482 |
}
|
482 |
}
|
Line 483... |
Line 483... |
483 |
|
483 |
|
484 |
static function getNomCommun_v4($obs, $cel) {
|
484 |
static function getNomCommun_v4($obs) {
|
485 |
if(! $obs['nt']) return NULL;
|
485 |
if(! $obs['nt']) return NULL;
|
Line 486... |
Line 486... |
486 |
if(! self::referenceTableExiste($cel)) return NULL;
|
486 |
if(! self::referenceTableExiste()) return NULL;
|
487 |
|
487 |
|
488 |
$langue = 'fra';
|
488 |
$langue = 'fra';
|
Line 489... |
Line 489... |
489 |
list($referentiel) = explode(':', strtolower($obs['nom_referentiel']));
|
489 |
list($referentiel) = explode(':', strtolower($obs['nom_referentiel']));
|
490 |
$cache_id = $referentiel . '-' . $obs['nt'] . '-' . $langue;
|
490 |
$cache_id = $referentiel . '-' . $obs['nt'] . '-' . $langue;
|
491 |
|
491 |
|
492 |
if(isset(self::$cache['getNomCommun'][$cache_id])) return self::$cache['getNomCommun'][$cache_id];
|
492 |
if(isset(self::$cache['getNomCommun'][$cache_id])) return self::$cache['getNomCommun'][$cache_id];
|
493 |
// XXX: problème de valeurs NULL ?
|
493 |
// XXX: problème de valeurs NULL ?
|
494 |
if(array_key_exists($cache_id, self::$cache['getNomCommun'])) return self::$cache['getNomCommun'][$cache_id];
|
494 |
if(array_key_exists($cache_id, self::$cache['getNomCommun'])) return self::$cache['getNomCommun'][$cache_id];
|
Line 495... |
Line 495... |
495 |
|
495 |
|
496 |
// pas de cache:
|
496 |
// pas de cache:
|
Line 497... |
Line 497... |
497 |
$nom = $cel->executerRequete(sprintf("SELECT nom_commun FROM cel_references " .
|
497 |
$nom = Cel::db()->executerRequete(sprintf("SELECT nom_commun FROM cel_references " .
|
Line 511... |
Line 511... |
511 |
|
511 |
|
512 |
/* Cette fonction initialise le cache des données baseflor en 1 fois, sur la liste des observations à exporter.
|
512 |
/* Cette fonction initialise le cache des données baseflor en 1 fois, sur la liste des observations à exporter.
|
513 |
Ainsi, les appels successifs à baseflor_ligne() ne sont pas couteux (pas de requête SQL) */
|
513 |
Ainsi, les appels successifs à baseflor_ligne() ne sont pas couteux (pas de requête SQL) */
|
514 |
static function baseflor_preload($cel, $obsids) {
|
514 |
static function baseflor_preload($cel, $obsids) {
|
515 |
if(!$obsids) return;
|
515 |
if(!$obsids) return;
|
Line 516... |
Line 516... |
516 |
if(!self::referenceTableExiste($cel)) return NULL;
|
516 |
if(!self::referenceTableExiste()) return NULL;
|
517 |
|
517 |
|
518 |
$req = sprintf("SELECT referentiel, num_nom_retenu, %s FROM cel_references r" .
|
518 |
$req = sprintf("SELECT referentiel, num_nom_retenu, %s FROM cel_references r" .
|
519 |
" INNER JOIN cel_obs c ON (r.num_nom_retenu = c.nom_ret_nn)" .
|
519 |
" INNER JOIN cel_obs c ON (r.num_nom_retenu = c.nom_ret_nn)" .
|
520 |
" WHERE c.id_observation IN (%s)",
|
520 |
" WHERE c.id_observation IN (%s)",
|
521 |
//" AND catminat_code IS NOT NULL", // TODO: suppression des NULL ici signifie que le cache sera partiel...
|
521 |
//" AND catminat_code IS NOT NULL", // TODO: suppression des NULL ici signifie que le cache sera partiel...
|
522 |
implode(',', array_keys(self::$baseflor_col)),
|
522 |
implode(',', array_keys(self::$baseflor_col)),
|
523 |
implode(',', $obsids));
|
523 |
implode(',', $obsids));
|
Line 524... |
Line 524... |
524 |
$res = $cel->requeter($req);
|
524 |
$res = Cel::db()->requeter($req);
|
525 |
if(!$res) return NULL;
|
525 |
if(!$res) return NULL;
|
526 |
|
526 |
|
Line 533... |
Line 533... |
533 |
|
533 |
|
534 |
return NULL;
|
534 |
return NULL;
|
Line 535... |
Line 535... |
535 |
}
|
535 |
}
|
536 |
|
536 |
|
537 |
|
537 |
|
538 |
static function baseflor_ligne($cel, $obs, &$ligne) {
|
538 |
static function baseflor_ligne($obs, &$ligne) {
|
539 |
if(! $obs['nom_ret_nn']) {
|
539 |
if(! $obs['nom_ret_nn']) {
|
Line 540... |
Line 540... |
540 |
$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL));
|
540 |
$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL));
|
541 |
return;
|
541 |
return;
|
542 |
}
|
542 |
}
|
543 |
|
543 |
|
Line 544... |
Line 544... |
544 |
if(! self::referenceTableExiste($cel)) {
|
544 |
if(! self::referenceTableExiste()) {
|
Line 555... |
Line 555... |
555 |
$ligne = array_merge($ligne, self::$cache['getBaseflor'][$cache_id]);
|
555 |
$ligne = array_merge($ligne, self::$cache['getBaseflor'][$cache_id]);
|
556 |
return;
|
556 |
return;
|
557 |
}
|
557 |
}
|
Line 558... |
Line 558... |
558 |
|
558 |
|
559 |
// pas de cache:
|
559 |
// pas de cache:
|
560 |
$data = $cel->executerRequete(sprintf("SELECT %s FROM cel_references " .
|
560 |
$data = Cel::db()->executerRequete(sprintf("SELECT %s FROM cel_references " .
|
561 |
"WHERE referentiel = '%s' AND num_nom_retenu = %d LIMIT 1",
|
561 |
"WHERE referentiel = '%s' AND num_nom_retenu = %d LIMIT 1",
|
562 |
implode(', ', array_keys(self::$baseflor_col)),
|
562 |
implode(', ', array_keys(self::$baseflor_col)),
|
563 |
$referentiel,
|
563 |
$referentiel,
|
564 |
$obs['nom_ret_nn']),
|
564 |
$obs['nom_ret_nn']),
|
Line 601... |
Line 601... |
601 |
$champs_etendus_fmt[$champ->cle] = $champ->valeur;
|
601 |
$champs_etendus_fmt[$champ->cle] = $champ->valeur;
|
602 |
}
|
602 |
}
|
603 |
return $champs_etendus_fmt;
|
603 |
return $champs_etendus_fmt;
|
604 |
}
|
604 |
}
|
Line 605... |
Line 605... |
605 |
|
605 |
|
606 |
static function champsEtendus_ligne($cel, $obs, &$ligne) {
|
606 |
static function champsEtendus_ligne($obs, &$ligne) {
|
607 |
// si header n'est pas défini, aucune observation ne possède de champ étendu
|
607 |
// si header n'est pas défini, aucune observation ne possède de champ étendu
|
608 |
// et nous n'ajoutons ni colonnes, ni valeurs.
|
608 |
// et nous n'ajoutons ni colonnes, ni valeurs.
|
609 |
if(! isset(self::$cache['champsEtendus']['header'])) return;
|
609 |
if(! isset(self::$cache['champsEtendus']['header'])) return;
|
610 |
var_dump(self::$cache['champsEtendus']['header']);die;
|
610 |
var_dump(self::$cache['champsEtendus']['header']);die;
|