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(); |