Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1658 → Rev 1659

/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'] = '';