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