27,54 → 27,29 |
class CelWidgetExport extends Cel { |
|
private $nom_fichier_export = 'cel_export'; |
private $champs_a_exclure = array( |
'ce_utilisateur' => true, |
'courriel_utilisateur' => true, |
'transmission' => true, |
'code_insee_calcule' => true); |
private $correspondance_champs = array( |
'id_observation' => 'Identifiant Observation', |
'ordre' => 'Ordre Observation', |
'prenom_utilisateur' => 'Prénom', |
'nom_utilisateur' => 'Nom', |
'nom_sel' => 'Nom Sélectionné', |
'nom_sel_nn' => 'Numéro Nomenclatural Nom Selectionné', |
'nom_ret' => 'Nom Retenu', |
'nom_ret_nn' => 'Numéro Nomenclatural Nom Retenu', |
'nt' => 'Numéro Taxonomique', |
'famille' => 'Famille', |
'nom_referentiel' => 'Référentiel Taxonomique', |
'ce_zone_geo' => 'Code Insee', |
'zone_geo' => 'Commune', |
'lieudit' => 'Lieu-Dit', |
'station' => 'Station', |
'milieu' => 'Milieu', |
'latitude' => 'Latitude', |
'longitude' => 'Longitude', |
'altitude' => 'Altitude', |
'geodatum' => 'Référentiel Géographique', |
'date_observation' => 'Date Observation', |
'mots_cles_texte' => 'Mots Clés', |
'commentaire' => 'Commentaires', |
'date_creation' => 'Date Création', |
'date_modification' => 'Date Modification', |
'date_transmission' => 'Date Transmission', |
'abondance' => 'Abondance', |
'certitude' => 'Certitude', |
'phenologie' => 'Phénologie' |
); |
private $parametres_autorises = array( |
'id_utilisateur' => 'ce_utilisateur', |
'utilisateur' => 'courriel_utilisateur', |
'commune' => 'zone_geo', |
'dept' => 'departement', |
'departement' => 'departement', |
'lieudit' => 'lieudit', |
'station' => 'station', |
'projet' => 'mots_cles', |
'num_taxon' => 'nt', |
'date_debut' => 'date_debut', |
'date_fin' => 'date_fin', |
'taxon' => 'taxon', |
'annee' => 'annee', |
'mois' => 'mois', |
'jour' => 'jour', |
'recherche' => 'recherche', |
'id_mots_cles' => 'id_mots_cles', |
'debut' => 'debut', |
'limite' => 'limite', |
'format' => 'format' |
'format' => 'format', |
'colonnes' => 'colonnes', |
'transmission' => 'transmission' |
); |
|
private $limite_decoupage_defaut = 9000; |
109,16 → 84,21 |
|
private function getCalcul() { |
$criteres = $this->traiterParametresAutorises($_GET); |
// Seulement les observation publiques |
|
$criteres['transmission'] = 1; |
if($this->doitEtPeutExporterObsPrivees($criteres)) { |
unset($criteres['transmission']); |
} |
$chercheur_observations = new RechercheObservation($this->config); |
|
$numero_page = isset($criteres['debut']) ? $criteres['debut'] : 0; |
$limite = isset($criteres['limite']) ? $criteres['limite'] : 0; |
$colonnes = isset($criteres['colonnes']) ? $criteres['colonnes'] : 'standard,avance'; |
|
unset($criteres['limite']); |
unset($criteres['debut']); |
unset($criteres['format']); |
unset($criteres['colonnes']); |
|
$nb_observations = $chercheur_observations->compterObservations(null, $criteres); |
$limite_decoupage = $this->calculerNbLignesMaxParFichier(); |
133,7 → 113,7 |
$params_url['debut'] = $intervalle; |
$params_url['limite'] = $limite_decoupage; |
$url_telechargement_fichier = $base_url; |
$url_telechargements[] = $base_url.'?'.http_build_query($params_url).'&format='.$this->format; |
$url_telechargements[] = $base_url.'?'.http_build_query($params_url).'&format='.$this->format.'&colonnes='.$colonnes; |
$intervalle += $limite_decoupage; |
$nb_observations -= $limite_decoupage; |
} while($nb_observations >= $limite_decoupage); |
156,26 → 136,29 |
|
private function getExport() { |
$criteres = $this->traiterParametresAutorises($_GET); |
|
// Seulement les observation publiques |
$criteres['transmission'] = 1; |
if($this->doitEtPeutExporterObsPrivees($criteres)) { |
unset($criteres['transmission']); |
} |
$chercheur_observations = new RechercheObservation($this->config); |
|
$debut = isset($criteres['debut']) ? $criteres['debut'] : 0; |
$limite = isset($criteres['limite']) ? $criteres['limite'] : 0; |
$colonnes = isset($criteres['colonnes']) ? $criteres['colonnes'] : 'standard,avance'; |
|
unset($criteres['limite']); |
unset($criteres['debut']); |
unset($criteres['format']); |
unset($criteres['colonnes']); |
|
$observations = $chercheur_observations->rechercherObservations(null, $criteres, $debut, $limite)->get(); |
switch($this->format) { |
case 'csv': |
$csv = $this->convertirEnCsv($observations); |
$csv = $this->convertirEnCsv($observations, $colonnes); |
$this->envoyerCsv($csv); |
break; |
case 'xls': |
$xls = $this->convertirEnXls($observations); |
$xls = $this->convertirEnXls($observations, $colonnes); |
$this->envoyerXls($xls); |
break; |
default: |
205,16 → 188,17 |
exit; |
} |
|
private function convertirEnCsv($data) |
private function convertirEnCsv($data, $colonnes) |
{ |
$chemin_temp = "php://temp"; |
$outstream = fopen($chemin_temp, 'r+'); |
$intitule_champs = array(); |
$groupe_colonnes = FormateurGroupeColonne::nomEnsembleVersListeColonnes($colonnes); |
foreach($data as &$ligne) { |
$ligne = $this->filtrerDonneesSensibles($ligne); |
$ligne = array_diff_key($ligne, $this->champs_a_exclure); |
$ligne = FormateurGroupeColonne::getLigneObservation($ligne, $groupe_colonnes); |
if(empty($intitule_champs)) { |
$intitule_champs = $this->creerEntetesChamps($ligne); |
$intitule_champs = FormateurGroupeColonne::getIntitulesColonnes($groupe_colonnes); |
fputcsv($outstream, $intitule_champs, ',', '"'); |
} |
fputcsv($outstream, $ligne, ',', '"'); |
225,7 → 209,7 |
return $csv; |
} |
|
private function convertirEnXls($data) { |
private function convertirEnXls($data, $colonnes) { |
$this->extendSpreadsheetProductor = new SpreadsheetProductor(); |
$this->extendSpreadsheetProductor->initSpreadsheet(); |
|
238,13 → 222,13 |
$workbook->send($this->nom_fichier_export.'.xls'); |
|
$nb_lignes = 1; |
|
$groupe_colonnes = FormateurGroupeColonne::nomEnsembleVersListeColonnes($colonnes); |
foreach($data as &$ligne) { |
$ligne = $this->filtrerDonneesSensibles($ligne); |
$ligne = array_diff_key($ligne, $this->champs_a_exclure); |
$ligne = FormateurGroupeColonne::getLigneObservation($ligne, $groupe_colonnes); |
if(empty($intitule_champs)) { |
$intitule_champs = $this->creerEntetesChamps($ligne); |
$indice = 0; |
$intitule_champs = FormateurGroupeColonne::getIntitulesColonnes($groupe_colonnes); |
foreach ($intitule_champs as &$intitule) { |
$colonne = $intitule_champs[$indice]; |
$worksheet->write(0,$indice,$colonne); |
261,11 → 245,6 |
return $workbook; |
} |
|
private function creerEntetesChamps($noms_colonnes) { |
$champs_presents = array_intersect_key($this->correspondance_champs, $noms_colonnes); |
return array_values($champs_presents); |
} |
|
private function filtrerDonneesSensibles($ligne) { |
if(stripos($ligne['mots_cles_texte'], 'sensible') !== false) { |
$ligne['latitude'] = ''; |
279,5 → 258,18 |
$chaine = str_replace("\t",'',$chaine); |
return $chaine; |
} |
|
private function doitEtPeutExporterObsPrivees($criteres) { |
return isset($criteres['ce_utilisateur']) && |
$this->peutExporterObsPrivees($criteres['ce_utilisateur']); |
} |
|
private function peutExporterObsPrivees($id_utilisateur) { |
$gestion_utilisateur = new User($this->config); |
$utilisateur = $gestion_utilisateur->obtenirIdentiteConnectee(); |
return $utilisateur['connecte'] && |
$utilisateur['id_utilisateur'] != '' && |
$id_utilisateur == $utilisateur['id_utilisateur']; |
} |
} |
?> |