1,19 → 1,27 |
<?php |
|
// declare(encoding='UTF-8'); |
/** |
* @category PHP |
* @package jrest |
* Classe métier de mise en forme des groupes de colonnes pour les exports. |
* |
* @internal Mininum PHP version : 5.2 |
* @category CEL |
* @package Services |
* @subpackage Bibliothèques |
* @version 0.1 |
* @author Mathias CHOUET <mathias@tela-botanica.org> |
* @author Raphaël Droz <raphael@tela-botania.org> |
* @copyright 2013 Tela-Botanica |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @author Aurelien PERONNET <aurelien@tela-botanica.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt> |
* @copyright 1999-2014 Tela Botanica <accueil@tela-botanica.org> |
*/ |
define('SEPARATEUR_IMAGES', " / "); |
define('PREFIX_CHAMPS_ETENDUS', "ext:"); |
define('SEPARATEUR_IMAGES', ' / '); |
define('PREFIX_CHAMPS_ETENDUS', 'ext:'); |
// utilisé par formaterUrlUser() [ nécessaire pour le widget d'export) |
define('USER_BASEURL', 'http://www.tela-botanica.org/profil:%d'); |
|
Class FormateurGroupeColonne { |
class FormateurGroupeColonne { |
|
// cache pour les données des fonctions |
static $cache = Array(); |
33,44 → 41,44 |
// les données baseflor à récupérer: colonnes présentes dans cel_references |
// et intitulés associés |
static $baseflor_col = array( |
"ve_lumiere" => "Lumière", |
"ve_temperature" => "Température", |
"ve_continentalite" => "Continentalité", |
"ve_humidite_atmos" => "Humidité Atmosphérique", |
"ve_humidite_edaph" => "Humidité", |
"ve_reaction_sol" => "Réaction (pH)", |
"ve_nutriments_sol" => "Nutriments", |
"ve_salinite" => "Salinité", |
"ve_texture_sol" => "Texture" , |
"ve_mat_org_sol" => "Matière Organique", |
"catminat_code" => "Code Catminat", |
"syntaxon" => "Syntaxon", |
've_lumiere' => 'Lumière', |
've_temperature' => 'Température', |
've_continentalite' => 'Continentalité', |
've_humidite_atmos' => 'Humidité Atmosphérique', |
've_humidite_edaph' => 'Humidité', |
've_reaction_sol' => 'Réaction (pH)', |
've_nutriments_sol' => 'Nutriments', |
've_salinite' => 'Salinité', |
've_texture_sol' => 'Texture' , |
've_mat_org_sol' => 'Matière Organique', |
'catminat_code' => 'Code Catminat', |
'syntaxon' => 'Syntaxon', |
); |
|
// TODO: dirty, ordre des champs étendus... souhaité pour florilèges: |
static $ordre_champ_etendus_Florileges = array( |
"personneStructure", |
"personneService", |
"personneFonction", |
"adresse", |
"latitudeDebutRue", |
"longitudeDebutRue", |
"latitudeFinRue", |
"longitudeFinRue", |
"typoUrbaine", |
"revetementSol", |
"presenceZoneVegetalise", |
"hauteurBatimentAvoisinant", |
"intensiteGestion", |
"periodiciteTraitementPhyto", |
"dateArretTraitementPhyto", |
"itineraireGestion", |
"dateDerniereIntervention", |
"hauteurPlante", |
"resistanceTraitementPhyto", |
"vitesseCroissance", |
"perceptionTechnicien", |
"perceptionRiverainMauvaise", |
'personneStructure', |
'personneService', |
'personneFonction', |
'adresse', |
'latitudeDebutRue', |
'longitudeDebutRue', |
'latitudeFinRue', |
'longitudeFinRue', |
'typoUrbaine', |
'revetementSol', |
'presenceZoneVegetalise', |
'hauteurBatimentAvoisinant', |
'intensiteGestion', |
'periodiciteTraitementPhyto', |
'dateArretTraitementPhyto', |
'itineraireGestion', |
'dateDerniereIntervention', |
'hauteurPlante', |
'resistanceTraitementPhyto', |
'vitesseCroissance', |
'perceptionTechnicien', |
'perceptionRiverainMauvaise', |
); |
|
static function colGroupsValidation($groupe_de_champs = 'standard,avance') { |
77,18 → 85,17 |
if(! $groupe_de_champs) return FALSE; |
if(is_string($groupe_de_champs)) { |
$groupe_de_champs = array_flip(explode(',', $groupe_de_champs)); |
} |
elseif(is_array($groupe_de_champs)) { |
} elseif(is_array($groupe_de_champs)) { |
$groupe_de_champs = array_flip($groupe_de_champs); |
} else { |
return null; |
} |
else { |
return NULL; |
$groupe_de_champs = array_intersect_key(array_flip(self::$fieldGroups), $groupe_de_champs); |
if (!$groupe_de_champs) { |
return false; |
} |
$groupe_de_champs = array_intersect_key(array_flip(self::$fieldGroups), |
$groupe_de_champs); |
if(!$groupe_de_champs) return FALSE; |
// toujours ajouter standard |
$groupe_de_champs['standard'] = TRUE; |
$groupe_de_champs['standard'] = true; |
return implode(',', array_keys($groupe_de_champs)); |
} |
|
104,25 → 111,24 |
* Si la colonne n'utilise pas de fonction de récupération particulière |
* (ie: si le champ exportés [ou importé] correspond exactement au champ dans la base de donnée) |
* Alors 'abbrev' doit avoir la même valeur que le nom de la colonne dans la table mysql `cel_obs`. |
* |
*/ |
static function nomEnsembleVersListeColonnes($groupe_de_champs = 'standard') { |
if(! $groupe_de_champs) $groupe_de_champs = 'standard'; |
if (! $groupe_de_champs) { |
$groupe_de_champs = 'standard'; |
} |
if(is_string($groupe_de_champs)) { |
$groupe_de_champs = array_flip(explode(',', $groupe_de_champs)); |
} |
elseif(is_array($groupe_de_champs)) { |
} elseif(is_array($groupe_de_champs)) { |
$groupe_de_champs = array_flip($groupe_de_champs); |
} else { |
return null; |
} |
else { |
return NULL; |
$groupe_de_champs = array_intersect_key(array_flip(self::$fieldGroups), $groupe_de_champs); |
if (!$groupe_de_champs) { |
return null; |
} |
$groupe_de_champs = array_intersect_key(array_flip(self::$fieldGroups), |
$groupe_de_champs); |
if(!$groupe_de_champs) return NULL; |
|
$colonnes = Array(); |
|
$colonnes = array(); |
if(isset($groupe_de_champs['standard'])) { |
$colonnes += Array( |
'nom_sel' => self::GenColInfo(Array('abbrev' => 'nom_sel', |
249,10 → 255,11 |
'extra' => 1, |
'fonction_data' => 'getNomCommun_v3'), |
'importable' => FALSE), */ |
'nom-commun' => self::GenColInfo(Array('abbrev' => 'nom-commun', |
'nom-commun' => self::GenColInfo(array( |
'abbrev' => 'nom-commun', |
'nom' => 'Nom Commun', |
'extra' => 1, |
'fonction_data' => NULL /* cas particu 'getNomCommun_v4' */, |
'fonction_data' => null /* cas particu 'getNomCommun_v4' */, |
'preload' => array(__CLASS__, 'getNomCommun_preload'))) |
); |
} |
260,10 → 267,11 |
if(isset($groupe_de_champs['baseflor'])) { |
$colonnes += array( |
// champ dynamique |
'baseflor' => self::GenColInfo(Array('abbrev' => 'baseflor', |
'baseflor' => self::GenColInfo(array( |
'abbrev' => 'baseflor', |
'nom' => '', |
'extra' => 1, |
'importable' => FALSE, |
'importable' => false, |
'preload' => array(__CLASS__, 'baseflor_preload'), |
'dyna' => array(__CLASS__, 'baseflor_ligne'))), |
); |
272,10 → 280,11 |
if(isset($groupe_de_champs['etendu'])) { |
$colonnes += array( |
// champ dynamique |
'etendu' => self::GenColInfo(Array('abbrev' => 'etendu', |
'etendu' => self::GenColInfo(array( |
'abbrev' => 'etendu', |
'nom' => '', |
'extra' => 1, |
'importable' => FALSE, |
'importable' => false, |
'preload' => array(__CLASS__, 'champsEtendus_preload'), |
'dyna' => array(__CLASS__, 'champsEtendus_ligne'))), |
); |
283,14 → 292,14 |
|
if(isset($groupe_de_champs['auteur'])) { |
$colonnes += array( |
'observateur' => self::GenColInfo(Array('abbrev' => 'observateur', |
'observateur' => self::GenColInfo(array( |
'abbrev' => 'observateur', |
'nom' => 'Observateur', |
'extra' => 1, |
'fonction_data' => 'formaterUrlUser', |
'importable' => FALSE)), |
'importable' => false)), |
); |
} |
|
return $colonnes; |
} |
|
297,7 → 306,9 |
static function preload($colonnes, $cel, $ids) { |
$result = array(); |
foreach($colonnes as $abbrev => $colonne) { |
if(!$colonne['preload']) continue; |
if (!$colonne['preload']) { |
continue; |
} |
$result[$abbrev] = call_user_func($colonne['preload'], $cel, $ids); |
} |
return $result; |
316,10 → 327,14 |
$ligne_formatee = array(); |
foreach($colonnes as $abbrev => $colonne) { |
$valeur = null; |
if($colonne['extra'] == 2 || ! is_null($colonne['dyna'])) continue; |
if ($colonne['extra'] == 2 || ! is_null($colonne['dyna'])) { |
continue; |
} |
|
// valeur directe depuis cel_obs ? |
if(isset($obs[$abbrev])) $valeur = $obs[$abbrev]; |
if (isset($obs[$abbrev])) { |
$valeur = $obs[$abbrev]; |
} |
|
// pré-processeur des champs |
if(function_exists($colonne['fonction'])) { |
328,18 → 343,15 |
$valeur = call_user_func(array(__CLASS__, $colonne['fonction']), $valeur); |
} elseif($colonne['fonction']) { |
die("méthode {$colonne['fonction']} introuvable"); |
} |
// fonction pour obtenir des champs (étendus) |
elseif(function_exists($colonne['fonction_data'])) { |
} else if(function_exists($colonne['fonction_data'])) {// fonction pour obtenir des champs (étendus) |
$valeur = $colonne['fonction_data']($obs); |
} |
elseif(method_exists(__CLASS__, $colonne['fonction_data'])) { |
} else if(method_exists(__CLASS__, $colonne['fonction_data'])) { |
$valeur = call_user_func(array(__CLASS__, $colonne['fonction_data']), $obs); |
} |
|
// // cette section devrait être vide: |
// // cas particuliers ingérable avec l'architecture actuelle: |
if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") { |
if (false && $abbrev == 'date_observation' && $valeur == '0000-00-00') { |
/* blah */ |
} |
// ici à cause du passage de $cel ($this->utilisateur) |
351,10 → 363,10 |
} |
|
if($valeur == null) { |
$valeur = ""; |
$valeur = ''; |
} |
|
// // fin de section "cas particuliers" |
// fin de section "cas particuliers" |
$ligne_formatee[] = $valeur; |
} |
|
361,12 → 373,11 |
// uniquement les champs dynamiques |
foreach($colonnes as $abbrev => $colonne) { |
$valeur = null; |
if(is_null($colonne['dyna'])) continue; |
// XXX: PHP-5.3 |
call_user_func_array($colonne['dyna'], |
array($obs, &$ligne_formatee)); |
if (is_null($colonne['dyna'])) { |
continue; |
} |
|
call_user_func_array($colonne['dyna'], array($obs, &$ligne_formatee)); |
} |
return $ligne_formatee; |
} |
|
409,14 → 420,15 |
* La fonction doit prendre comme arguments ($obs, &$ligne_formatee) |
*/ |
static function GenColInfo($args) { |
$default = Array('abbrev' => NULL, |
'nom' => NULL, |
$default = array( |
'abbrev' => null, |
'nom' => null, |
'extra' => 0, |
'fonction' => NULL, |
'fonction_data' => NULL, |
'importable' => TRUE, |
'preload' => NULL, |
'dyna' => NULL); |
'fonction' => null, |
'fonction_data' => null, |
'importable' => true, |
'preload' => null, |
'dyna' => null); |
$ret = array_intersect_key($args, $default); |
return array_merge($default, $ret); |
} |
423,7 → 435,9 |
|
static function formaterDate($date_heure_mysql) { |
//return ""; |
if (!$date_heure_mysql || $date_heure_mysql == "0000-00-00 00:00:00") return NULL; |
if (!$date_heure_mysql || $date_heure_mysql == "0000-00-00 00:00:00") { |
return null; |
} |
// malheureusement pas disponible en php < 5.3 |
//$date_format = DateTime::createFromFormat("Y-m-d H:i:s", $date_heure_mysql); |
$val = explode(' ', $date_heure_mysql); |
430,13 → 444,17 |
$date = explode('-', $val[0]); |
$heure = explode(':', $val[1]); |
$timestamp = mktime((int) $heure[0], (int) $heure[1], (int) $heure[2], (int) $date[1], (int) $date[2], (int) $date[0]); |
if(!$timestamp) return NULL; |
if (!$timestamp) { |
return null; |
} |
// TODO: les widgets ne font malheureusement pas usage de l'heure dans le CEL |
// TODO: si modification, ne pas oublier de modifier le format d'import correspondant |
// dans ImportXLS, traiterDateObs() (actuellement: "Y/m/d" car utilisation de strtotime() qui ne lit pas tout) |
// $date_formatee = strftime('%d/%m/%Y', $timestamp); |
$date_formatee = strftime('%Y/%m/%d', $timestamp); |
if(!$date_formatee) return "00/00/0000"; |
if (!$date_formatee) { |
return '00/00/0000'; |
} |
return $date_formatee; |
} |
|
462,7 → 480,7 |
foreach($rec as $v) { |
self::$cache['getImages'][$v['id_observation']] = $v['i']; |
} |
return NULL; |
return null; |
} |
|
static function getImages($obs, $id_utilisateur) { |
504,7 → 522,6 |
return preg_match('/^INSEE-C:[0-9]{5}/',$code_a_tester); |
} |
|
|
// TODO: référentiel ne devrait pas être généré au moment d'un Config::get, |
// comme dans Config::get('nomsVernaRechercheLimiteeTpl') |
// Par exemple, la variable pour "nva" ? |
853,5 → 870,4 |
} |
return $ordered + $array; |
} |
|
} |
} |