211,12 → 211,12 |
if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") { |
/* blah */ |
} |
// ici à cause du passage de $cel ($this), TODO: DB en Singleton ! |
// ici à cause du passage de $cel ($this->utilisateur) |
if($abbrev == 'images') { |
$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur, $cel); |
$valeur = FormateurGroupeColonne::getImages($obs, $cel->id_utilisateur); |
} |
if($abbrev == 'nom-commun') { |
$valeur = FormateurGroupeColonne::getNomCommun_v4($obs, $cel); |
$valeur = FormateurGroupeColonne::getNomCommun_v4($obs); |
} |
|
if($valeur == null) { |
233,7 → 233,7 |
if(is_null($colonne['dyna'])) continue; |
// XXX: PHP-5.3 |
call_user_func_array($colonne['dyna'], |
array($cel, $obs, &$ligne_formatee)); |
array($obs, &$ligne_formatee)); |
} |
|
return $ligne_formatee; |
275,7 → 275,7 |
* @param $fonction_dynamique (optionnel): défini une fonction ajoutant un nombre arbitraire de colonnes à une ligne donnée |
* Utile, notamment, dans le cadre de l'export des champs étendus ou des données baseflor |
* La fonction doit TOUJOURS alterer la ligne en lui ajoutant une nombre CONSTANT d'éléments (NULL ou non) |
* La fonction doit prendre comme arguments ($cel, $obs, &$ligne_formatee) |
* La fonction doit prendre comme arguments ($obs, &$ligne_formatee) |
*/ |
static function GenColInfo($abbrev, $nom, $is_extra = 0, $fonction = NULL, $fonction_data = NULL, $importable = TRUE, $preload = NULL, $fonction_dynamique = NULL) { |
return Array('abbrev' => $abbrev, |
308,9 → 308,9 |
return $date_formatee; |
} |
|
static function getImages($obs, $id_utilisateur, $cel) { |
static function getImages($obs, $id_utilisateur) { |
if(! $id_utilisateur) return NULL; |
$rec = $cel->requeter( |
$rec = Cel::db()->requeter( |
sprintf("SELECT GROUP_CONCAT(nom_original SEPARATOR '%s') FROM cel_images i" |
." LEFT JOIN cel_obs_images oi ON (i.id_image = oi.id_image)" |
." LEFT JOIN cel_obs o ON (oi.id_observation = o.id_observation)" |
458,7 → 458,7 |
Ainsi, les appels successifs à getNomCommun_v4() ne sont pas couteux (pas de requête SQL) */ |
static function getNomCommun_preload($cel, $obsids) { |
if(!$obsids) return; |
if(!self::referenceTableExiste($cel)) return NULL; |
if(!self::referenceTableExiste()) return NULL; |
|
// CREATE INDEX i_nom_referentiel ON cel_obs (nom_referentiel(5)); |
$req = sprintf("SELECT r.referentiel, r.num_taxon, r.nom_commun FROM cel_references r" . |
465,7 → 465,7 |
" INNER JOIN cel_obs c ON (r.referentiel = substring_index(c.nom_referentiel, ':', 1) and r.num_taxon = c.nt)" . |
" WHERE c.id_observation IN (%s)", |
implode(',', $obsids)); |
$res = $cel->requeter($req); |
$res = Cel::db()->requeter($req); |
foreach($res as $v) { |
self::$cache['getNomCommun'][$v['referentiel'] . '-' . $v['num_taxon'] . '-' . 'fra'] = $v['nom_commun']; |
} |
472,18 → 472,18 |
return NULL; |
} |
|
static function referenceTableExiste($cel) { |
static function referenceTableExiste() { |
if(!self::$is_table) { |
// une seule fois |
if(! $cel->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE; |
if(! Cel::db()->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) return FALSE; |
self::$is_table = TRUE; |
} |
return TRUE; |
} |
|
static function getNomCommun_v4($obs, $cel) { |
static function getNomCommun_v4($obs) { |
if(! $obs['nt']) return NULL; |
if(! self::referenceTableExiste($cel)) return NULL; |
if(! self::referenceTableExiste()) return NULL; |
|
$langue = 'fra'; |
list($referentiel) = explode(':', strtolower($obs['nom_referentiel'])); |
494,11 → 494,11 |
if(array_key_exists($cache_id, self::$cache['getNomCommun'])) return self::$cache['getNomCommun'][$cache_id]; |
|
// pas de cache: |
$nom = $cel->executerRequete(sprintf("SELECT nom_commun FROM cel_references " . |
"WHERE referentiel = '%s' AND num_taxon = %d LIMIT 1", |
$referentiel, |
$obs['nt']), |
Cel::SQL_RETOUR_LIGNE); |
$nom = Cel::db()->executerRequete(sprintf("SELECT nom_commun FROM cel_references " . |
"WHERE referentiel = '%s' AND num_taxon = %d LIMIT 1", |
$referentiel, |
$obs['nt']), |
Cel::SQL_RETOUR_LIGNE); |
|
if(! $nom) return NULL; |
$nom = $nom["nom_commun"]; |
513,7 → 513,7 |
Ainsi, les appels successifs à baseflor_ligne() ne sont pas couteux (pas de requête SQL) */ |
static function baseflor_preload($cel, $obsids) { |
if(!$obsids) return; |
if(!self::referenceTableExiste($cel)) return NULL; |
if(!self::referenceTableExiste()) return NULL; |
|
$req = sprintf("SELECT referentiel, num_nom_retenu, %s FROM cel_references r" . |
" INNER JOIN cel_obs c ON (r.num_nom_retenu = c.nom_ret_nn)" . |
521,7 → 521,7 |
//" AND catminat_code IS NOT NULL", // TODO: suppression des NULL ici signifie que le cache sera partiel... |
implode(',', array_keys(self::$baseflor_col)), |
implode(',', $obsids)); |
$res = $cel->requeter($req); |
$res = Cel::db()->requeter($req); |
if(!$res) return NULL; |
|
foreach($res as $v) { |
535,13 → 535,13 |
} |
|
|
static function baseflor_ligne($cel, $obs, &$ligne) { |
static function baseflor_ligne($obs, &$ligne) { |
if(! $obs['nom_ret_nn']) { |
$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL)); |
return; |
} |
|
if(! self::referenceTableExiste($cel)) { |
if(! self::referenceTableExiste()) { |
$ligne = array_merge($ligne, array_fill(0, count(self::$baseflor_col), NULL)); |
return; |
} |
557,7 → 557,7 |
} |
|
// pas de cache: |
$data = $cel->executerRequete(sprintf("SELECT %s FROM cel_references " . |
$data = Cel::db()->executerRequete(sprintf("SELECT %s FROM cel_references " . |
"WHERE referentiel = '%s' AND num_nom_retenu = %d LIMIT 1", |
implode(', ', array_keys(self::$baseflor_col)), |
$referentiel, |
603,7 → 603,7 |
return $champs_etendus_fmt; |
} |
|
static function champsEtendus_ligne($cel, $obs, &$ligne) { |
static function champsEtendus_ligne($obs, &$ligne) { |
// si header n'est pas défini, aucune observation ne possède de champ étendu |
// et nous n'ajoutons ni colonnes, ni valeurs. |
if(! isset(self::$cache['champsEtendus']['header'])) return; |