Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2458 → Rev 2459

/trunk/jrest/services/CelWidgetExport.php
21,11 → 21,11
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(dirname(realpath(__FILE__))) . '/lib');
// la sortie est binaire (xls), mais OLE n'est pas compatible E_ALL en PHP-5.4
error_reporting(error_reporting() & ~E_STRICT);
require_once("lib/OLE.php");
require_once("lib/Spreadsheet/Excel/Writer.php");
require_once 'lib/OLE.php';
require_once 'lib/Spreadsheet/Excel/Writer.php';
 
class CelWidgetExport extends Cel {
 
private $nom_fichier_export = 'cel_export';
// certains paramètres apparaissent plusieurs fois car ils ont des alias
// dans certains widgets
57,23 → 57,23
'transmission' => 'transmission',
'obsids' => 'obsids',
);
private $limite_decoupage_defaut = 9000;
 
private $limite_decoupage_defaut = 9000;
 
private $format = 'csv';
 
public $id_utilisateur = null;
 
public $export_prive = false;
 
// un cache, initialisé par certaines fonctions de préchargement, à la manière
// de ce qui est fait par FormateurGroupeColonne
static $cache = Array();
 
public function getRessource() {
return $this->getElement(array());
}
 
/**
* Méthode appelée avec une requête de type GET.
*/
82,7 → 82,7
case 'calcul':
$this->getCalcul();
break;
 
case 'export':
$this->getExport();
break;
90,11 → 90,11
$this->getExport();
}
}
 
private function getCalcul() {
$criteres = $this->traiterParametresAutorises($_GET);
$criteres['transmission'] = 1;
 
// Définit si l'on exporte les obs privées ainsi que les champs étendus privés
$this->export_prive = $this->doitEtPeutExporterObsPrivees($criteres);
if($this->export_prive) {
102,22 → 102,22
$this->id_utilisateur = $criteres['id_utilisateur'];
}
$chercheur_observations = new RechercheObservation($this->config);
 
$numero_page = isset($criteres['debut']) ? $criteres['debut'] : 0;
$limite = isset($criteres['limite']) ? $criteres['limite'] : 0;
$colonnes = @FormateurGroupeColonne::colGroupsValidation($criteres['colonnes']);
 
unset($criteres['limite']);
unset($criteres['debut']);
unset($criteres['format']);
unset($criteres['colonnes']);
 
$nb_observations = $chercheur_observations->compterObservations(null, $criteres);
$limite_decoupage = $this->calculerNbLignesMaxParFichier(explode(',', $colonnes));
 
$url_telechargements = array();
$intervalle = 0;
 
$params_url = $criteres;
unset($params_url['transmission']);
do {
129,13 → 129,13
$intervalle += $limite_decoupage;
$nb_observations -= $limite_decoupage;
} while($nb_observations > 0);
 
$this->envoyerJson($url_telechargements);
}
 
private function calculerNbLignesMaxParFichier($colonnes) {
$limite = $this->limite_decoupage_defaut;
$limite = $this->limite_decoupage_defaut;
 
switch($this->format) {
case 'csv':
$limite = 20000;
150,7 → 150,7
 
return $limite;
}
 
private function getExport() {
$criteres = $this->traiterParametresAutorises($_GET);
// ne pas faire de super-requête en cas d'absence de paramètres
166,7 → 166,7
$this->id_utilisateur = $criteres['ce_utilisateur'];
}
$chercheur_observations = new RechercheObservation($this->config);
 
$debut = isset($criteres['debut']) ? intval($criteres['debut']) : 0;
$limite = isset($criteres['limite']) ? intval($criteres['limite']) : 0;
$groupes = @FormateurGroupeColonne::colGroupsValidation($criteres['colonnes']);
177,7 → 177,7
 
if($criteres['obsids']) $criteres['sql_brut'] = sprintf('id_observation IN (%s)',
implode(',', $criteres['obsids']));
 
unset($criteres['limite']);
unset($criteres['debut']);
unset($criteres['format']);
225,7 → 225,7
default:
}
}
 
protected function traiterParametresAutorises(Array $parametres) {
$parametres_traites = array();
$this->format = (isset($parametres['format']) && $parametres['format'] != '') ? $parametres['format'] : $this->format;
238,7 → 238,7
$parametres_traites['obsids'] = @self::traiterObsIds($parametres['obsids']);
return $parametres_traites;
}
 
private function envoyerCsv($csv) {
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment;filename='.$this->nom_fichier_export.'.csv');
245,12 → 245,12
echo $csv;
exit;
}
 
private function envoyerXls($workbook) {
$workbook->close();
exit;
}
 
private function convertirEnCsv(&$data, $colonnes) {
$chemin_temp = "php://temp";
$outstream = fopen($chemin_temp, 'r+');
266,7 → 266,7
}
 
// header
fputcsv($outstream, $intitule_champs, ',', '"');
fputcsv($outstream, $intitule_champs, ',', '"');
// lignes
foreach($data as &$ligne) {
$ligne = self::filtrerDonneesSensibles($ligne);
278,11 → 278,11
fclose($outstream);
return $csv;
}
 
private function convertirEnXls(&$data, $colonnes) {
$this->extendSpreadsheetProductor = new SpreadsheetProductor();
$this->extendSpreadsheetProductor->initSpreadsheet();
 
$workbook = new Spreadsheet_Excel_Writer();
// avant la définition du titre de la worksheet !
$workbook->setVersion(8);
291,7 → 291,7
$workbook->setTempDir($this->config['cel']['chemin_stockage_temp']);
$worksheet->setInputEncoding('utf-8');
$workbook->send($this->nom_fichier_export.'.xls');
 
$nb_lignes = 1;
 
$intitule_champs = array_merge(FormateurGroupeColonne::getIntitulesColonnes($colonnes));
306,7 → 306,7
 
// header
$indice = 0;
foreach ($intitule_champs as &$intitule) {
foreach ($intitule_champs as &$intitule) {
$worksheet->write(0,$indice++,$intitule);
}
 
321,7 → 321,7
}
return $workbook;
}
 
private function convertirEnPdf(&$observations) {
if(count($observations) > 300) die('erreur: trop de données');
//require_once('GenerateurPDF.php');
329,7 → 329,7
$pdf->export($observations);
return $pdf;
}
 
static function filtrerDonneesSensibles($ligne) {
if(stripos($ligne['mots_cles_texte'], 'sensible') !== false) {
$ligne['latitude'] = '';
337,12 → 337,12
}
return $ligne;
}
 
private function doitEtPeutExporterObsPrivees($criteres) {
return isset($criteres['ce_utilisateur']) &&
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();