Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1658 → Rev 1659

/trunk/jrest/lib/GestionObservation.php
303,6 → 303,15
$parametres['nom_referentiel'] = 'bdtfx:v1.01';
}
$code_referentiel = substr($parametres['nom_referentiel'], 0, 5);
if($this->estUnNomRetenuSansSaisi($parametres)) {
echo $this->estUnNomRetenuSansSaisi($parametres, 'nom_ret_nn');exit;
$parametres['nom_ret']= "";
$parametres['nom_ret_nn']= "";
$parametres['nt']= "";
$parametres['famille']= "";
}
if ($this->estUnNomSolitaire($parametres)) {
$chercheur_infos_complementaires = new RechercheInfosTaxonBeta($this->config, $code_referentiel);
363,11 → 372,26
$parametres['date_observation']=$annee."-".$mois."-".$jour." 0:0:0";
}
}
 
return $parametres;
}
private function estUnNomRetenuSansSaisi($parametres) {
return $this->parametreNumNomPasPresent($parametres) &&
$this->parametreNomSelPasPresent($parametres) &&
$this->parametreEstPresentEtValide($parametres, 'nom_ret_nn');
}
private function parametreEstPresentEtValide($parametres, $index) {
return (isset($parametres[$index]) &&
$parametres[$index] != null &&
$parametres[$index] != '' &&
$parametres[$index] != 0);
}
private function estUnNomSolitaire($parametres) {
return $this->parametreNumNomPasPresent($parametres) && $parametres['nom_sel'] != '';
return $this->parametreNumNomPasPresent($parametres) && isset($parametres['nom_sel']) && $parametres['nom_sel'] != '';
}
private function parametreNumNomEstPresent($parametres) {
381,6 → 405,13
$parametres['nom_sel_nn'] == 0);
}
private function parametreNomSelPasPresent($parametres) {
return (!isset($parametres['nom_sel']) ||
$parametres['nom_sel'] == null ||
$parametres['nom_sel'] == '' ||
$parametres['nom_sel'] == 0);
}
/**
* Assemble une sous requete pour un ajout, tout en formatant les paramètres et en recherchant
* les infos complémentaires
/trunk/jrest/lib/GestionChampsEtendus.php
222,6 → 222,23
$suppr = $this->executerRequeteSimple($requete);
return ($suppr !== false);
}
/**
* Revnoie tous les intitules aux éléments passés en paramètre
*
* @param array $ids_elements_lies
* @return bool
*/
public function consulterClesParLots($ids_elements_lies) {
$ids = $this->protegerTableau($ids_elements_lies);
$requete = "SELECT cle FROM {$this->table_champs_etendus} WHERE {$this->champ_id} IN (".implode(',',$ids).") ";
$cles = $this->executerRequete($requete);
$cles_fmt = array();
foreach($cles as &$cle) {
$cles_fmt[] = $cle['cle'];
}
return $cles_fmt;
}
 
/**
* Transforme un label en clé.
/trunk/jrest/lib/FormateurGroupeColonne.php
92,6 → 92,7
}
public static function getLigneObservation(&$obs, &$colonnes, $cel = false) {
$ligne_formatee = array();
foreach($colonnes as $abbrev => $colonne) {
$valeur = null;
112,7 → 113,7
elseif(function_exists($colonne['fonction_data'])) {
$valeur = $colonne['fonction_data']($obs);
}
elseif(method_exists(__CLASS__, $colonne['fonction_data'])) {
elseif($abbrev != 'images' && method_exists(__CLASS__, $colonne['fonction_data'])) {
$valeur = call_user_func(array(__CLASS__, $colonne['fonction_data']), $obs);
}
/trunk/jrest/services/CelWidgetExport.php
56,6 → 56,8
private $format = 'csv';
public $id_utilisateur = null;
public function getRessource() {
return $this->getElement(array());
}
88,6 → 90,7
$criteres['transmission'] = 1;
if($this->doitEtPeutExporterObsPrivees($criteres)) {
unset($criteres['transmission']);
$this->id_utilisateur = $criteres['id_utilisateur'];
}
$chercheur_observations = new RechercheObservation($this->config);
152,13 → 155,23
unset($criteres['colonnes']);
$observations = $chercheur_observations->rechercherObservations(null, $criteres, $debut, $limite)->get();
$ids = array();
foreach($observations as &$obs) {
$ids[] = $obs['id_observation'];
}
$gestion_champs_etendus = new GestionChampsEtendus($this->config, 'obs');
$champs_supp_par_obs = $gestion_champs_etendus->consulterParLots($ids);
$colonnes_champs_supp_par_obs = $gestion_champs_etendus->consulterClesParLots($ids);
 
// TODO: tous les champs étendus et les paramètres supplémentaires devraient être passés en un seul
// tableau (et chaque formateur csv, xls etc... pourrait également être dans une classe à part)
switch($this->format) {
case 'csv':
$csv = $this->convertirEnCsv($observations, $colonnes);
$csv = $this->convertirEnCsv($observations, $colonnes, $colonnes_champs_supp_par_obs, $champs_supp_par_obs);
$this->envoyerCsv($csv);
break;
case 'xls':
$xls = $this->convertirEnXls($observations, $colonnes);
$xls = $this->convertirEnXls($observations, $colonnes, $colonnes_champs_supp_par_obs, $champs_supp_par_obs);
$this->envoyerXls($xls);
break;
default:
188,17 → 201,27
exit;
}
private function convertirEnCsv($data, $colonnes)
private function convertirEnCsv($data, $colonnes, $colonnes_supplementaires, $champs_supplementaires = array())
{
$chemin_temp = "php://temp";
$outstream = fopen($chemin_temp, 'r+');
$intitule_champs = array();
$nb_colonnes_supp = count($colonnes_supplementaires);
$groupe_colonnes = FormateurGroupeColonne::nomEnsembleVersListeColonnes($colonnes);
foreach($data as &$ligne) {
$id_obs = $ligne['id_observation'];
$ligne = $this->filtrerDonneesSensibles($ligne);
$ligne = FormateurGroupeColonne::getLigneObservation($ligne, $groupe_colonnes);
$ligne = FormateurGroupeColonne::getLigneObservation($ligne, $groupe_colonnes, $this);
$ligne_supp = $nb_colonnes_supp > 0 ? array_fill(0, $nb_colonnes_supp, '') : array();
if(isset($champs_supplementaires[$id_obs])) {
$ligne_supp = $this->traiterLigneEtendue($colonnes_supplementaires, $champs_supplementaires[$id_obs]);
}
$ligne += $ligne_supp;
if(empty($intitule_champs)) {
$intitule_champs = FormateurGroupeColonne::getIntitulesColonnes($groupe_colonnes);
foreach($colonnes_supplementaires as $colonne_sup) {
$intitule_champs[] = $colonne_sup;
}
fputcsv($outstream, $intitule_champs, ',', '"');
}
fputcsv($outstream, $ligne, ',', '"');
209,10 → 232,12
return $csv;
}
private function convertirEnXls($data, $colonnes) {
private function convertirEnXls($data, $colonnes, $colonnes_supplementaires, $champs_supplementaires = array()) {
$this->extendSpreadsheetProductor = new SpreadsheetProductor();
$this->extendSpreadsheetProductor->initSpreadsheet();
$nb_colonnes_supp = count($colonnes_supplementaires);
$workbook = new Spreadsheet_Excel_Writer();
$worksheet = $workbook->addWorksheet('Liste');
$workbook->setTempDir($this->config['cel']['chemin_stockage_temp']);
224,11 → 249,15
$nb_lignes = 1;
$groupe_colonnes = FormateurGroupeColonne::nomEnsembleVersListeColonnes($colonnes);
foreach($data as &$ligne) {
$id_obs = $ligne['id_observation'];
$ligne = $this->filtrerDonneesSensibles($ligne);
$ligne = FormateurGroupeColonne::getLigneObservation($ligne, $groupe_colonnes);
$ligne = FormateurGroupeColonne::getLigneObservation($ligne, $groupe_colonnes, $this);
if(empty($intitule_champs)) {
$indice = 0;
$intitule_champs = FormateurGroupeColonne::getIntitulesColonnes($groupe_colonnes);
foreach($colonnes_supplementaires as $colonne_sup) {
$intitule_champs[] = $colonne_sup;
}
foreach ($intitule_champs as &$intitule) {
$colonne = $intitule_champs[$indice];
$worksheet->write(0,$indice,$colonne);
235,6 → 264,11
$indice++;
}
}
$ligne_supp = $nb_colonnes_supp > 0 ? array_fill(0, $nb_colonnes_supp, '') : array();
if(isset($champs_supplementaires[$id_obs])) {
$ligne_supp = $this->traiterLigneEtendue($colonnes_supplementaires, $champs_supplementaires[$id_obs]);
}
$ligne += $ligne_supp;
$indice = 0;
foreach($ligne as &$champ) {
$worksheet->write($nb_lignes,$indice,$champ);
245,6 → 279,27
return $workbook;
}
private function traiterLigneEtendue(&$colonnes_etendues, &$ligne_champs_etendus) {
$ligne_etendue_aplatie = $this->aplatirChampsEtendus($ligne_champs_etendus);
$ligne_etendue_fmt = array();
foreach($colonnes_etendues as $colonne) {
if(!isset($ligne_etendue_aplatie[$colonne])) {
$ligne_etendue_fmt[$colonne] = '';
} else {
$ligne_etendue_fmt[$colonne] = $ligne_etendue_aplatie[$colonne];
}
}
return $ligne_etendue_fmt;
}
private function aplatirChampsEtendus(&$ligne_champs_etendus) {
$champs_etendus_fmt = array();
foreach($ligne_champs_etendus as $champ) {
$champs_etendus_fmt[$champ->cle] = $champ->valeur;
}
return $champs_etendus_fmt;
}
private function filtrerDonneesSensibles($ligne) {
if(stripos($ligne['mots_cles_texte'], 'sensible') !== false) {
$ligne['latitude'] = '';