Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1631 → Rev 1654

/trunk/jrest/services/CelWidgetExport.php
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'];
}
}
?>