Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1693 → Rev 1694

/trunk/jrest/lib/FormateurGroupeColonne.php
81,7 → 81,7
/* 'nom_commun' => self::GenColInfo('nom_commun', 'Nom Commun', 1, NULL, 'getNomCommun', FALSE),
'nom-commun' => self::GenColInfo('nom-commun', 'Nom Commun', 1, NULL, 'getNomCommun_v2'),
'nom-commun' => self::GenColInfo('nom-commun', 'Nom Commun', 1, NULL, 'getNomCommun_v3'), */
'nom-commun' => self::GenColInfo('nom-commun', 'Nom Commun', 1, NULL, NULL /* cas particu 'getNomCommun_v4' */),
'nom-commun' => self::GenColInfo('nom-commun', 'Nom Commun', 1, NULL, NULL /* cas particu 'getNomCommun_v4' */, TRUE, 'getNomCommun_preload'),
 
);
}
88,6 → 88,15
 
return $colonnes;
}
 
static function preload($colonnes, $cel, $ids) {
$result = array();
foreach($colonnes as $abbrev => $colonne) {
if(!$colonne['preload']) continue;
$result[$abbrev] = call_user_func(array(__CLASS__, $colonne['preload']), $cel, $ids);
}
return $result;
}
public static function getIntitulesColonnes($colonnes) {
return array_map(array('FormateurGroupeColonne', 'retournerNomItem'), $colonnes);
96,7 → 105,7
public static function retournerNomItem(&$item) {
return $item['nom'];
}
 
public static function getLigneObservation(&$obs, &$colonnes, $cel = false) {
$ligne_formatee = array();
143,11 → 152,16
// // fin de section "cas particuliers"
$ligne_formatee[] = $valeur;
}
 
// TODO:
// taxon => (code_catminat) => syntaxon => données baseveg
 
return $ligne_formatee;
}
/*
* Wrapper générant un tableau associatif:
* Ne pas changer les valeurs par défaut du prototype sans réflexion sur l'implication pour nomEnsembleVersListeColonnes()
* @param $abbrev (obligatoire): nom court de colonne, largement utilisé lors de l'import.
* En effet chaque ligne importée est accessible à l'aide du `define` de $abbrev en majuscule, préfixé de "C_"
172,15 → 186,19
* @param $importable (optionnel): défini si la colonne est traitée (ou absolument ignorée par PHPExcel) lors de
* l'import.
 
* @param $preload (optionnel): défini une fonction de préchargement massif de donnée potentiellement utilisable par $fonction_data.
* Utile, notamment, dans le cadre de l'export
*/
static function GenColInfo($abbrev, $nom, $is_extra = 0, $fonction = NULL, $fonction_data = NULL, $importable = TRUE) {
static function GenColInfo($abbrev, $nom, $is_extra = 0, $fonction = NULL, $fonction_data = NULL, $importable = TRUE, $preload = NULL) {
return Array('abbrev' => $abbrev,
'nom' => $nom,
'extra' => $is_extra ? 1 : 0,
'fonction' => $fonction,
'fonction_data' => $fonction_data,
'importable' => $importable
'importable' => $importable,
'preload' => $preload,
);
}
348,6 → 366,25
return $nom;
}
 
/* Cette fonction initialise le cache des noms communs en 1 fois, sur la liste des observations à exporter.
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(!$cel->executerRequete("SHOW TABLES LIKE 'cel_references'", Cel::SQL_RETOUR_LIGNE)) 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" .
" 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);
foreach($res as $v) {
self::$cache['getNomCommun'][$v['referentiel'] . '-' . $v['num_taxon'] . '-' . 'fra'] = $v['nom_commun'];
}
return NULL;
}
static function getNomCommun_v4($obs, $cel) {
static $is_table = false;
if(! $obs['nt']) return NULL;
364,10 → 401,6
if(isset(self::$cache['getNomCommun'][$cache_id])) return self::$cache['getNomCommun'][$cache_id];
 
// pas de cache:
$donnees = Array('masque.nt' => $obs['nt'],
'masque.lg' => $langue,
'retour.champs' => 'conseil_emploi');
 
$nom = $cel->executerRequete(sprintf("SELECT nom_commun FROM cel_references " .
"WHERE referentiel = '%s' AND num_taxon = %d LIMIT 1",
$referentiel,