Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 1637 → Rev 1638

/trunk/jrest/services/ExportXLS.php
65,12 → 65,12
}
// trim() car: `POST http://url<<<"range=*"`
elseif(trim($_POST['range']) == '*') {
$records = Array('*');
$obs_ids = Array('*');
}
else {
$records = self::rangeToList(trim($_POST['range']));
$obs_ids = self::rangeToList(trim($_POST['range']));
}
$this->export($records, NULL, $params);
$this->export($obs_ids, NULL, $params);
exit;
}
 
79,9 → 79,9
* - widget: le nom du widget d'origine (utilisé pour les méta-données du tableur)
*
*/
function export(Array $records, String $fieldSets = NULL, Array $params = Array()) {
$colonnes = self::fieldSetsToColumns($fieldSets);
$columnSlugs = array_keys($colonnes);
function export(Array $obs_ids, String $fieldSets = NULL, Array $params = Array()) {
$colonnes = self::nom_d_ensemble_vers_liste_de_colonnes($fieldSets);
// $colonne_abbrev = array_keys($colonnes);
$chercheur_observations = new RechercheObservation($this->config);
 
$objPHPExcel = new PHPExcel();
94,12 → 94,12
}
 
$criteres = Array();
if(! $records || count($records) == 1 && $records[0] == '*') {
if(! $obs_ids || count($obs_ids) == 1 && $obs_ids[0] == '*') {
unset($criteres['raw']);
}
else {
$criteres = Array('raw' =>
sprintf('id_observation IN (%s)', implode(',', $records)));
sprintf('id_observation IN (%s)', implode(',', $obs_ids)));
}
 
$criteres['debut'] = isset($_GET['debut']) ? intval($_GET['debut']) : 0;
124,12 → 124,12
//->setCategory("Test result file")
 
$objPHPExcel->getActiveSheet()->setTitle("Observations");
$sheet = $objPHPExcel->setActiveSheetIndex(0);
$feuille = $objPHPExcel->setActiveSheetIndex(0);
$colid = 0;
foreach($colonnes as $colonne) {
$sheet->setCellValueByColumnAndRow($colid, 1, $colonne['nom']);
$feuille->setCellValueByColumnAndRow($colid, 1, $colonne['nom']);
if($colonne['extra']) {
$sheet->getStyleByColumnAndRow($colid, 1)->getBorders()->applyFromArray(
$feuille->getStyleByColumnAndRow($colid, 1)->getBorders()->applyFromArray(
array(
'allborders' => array(
'style' => PHPExcel_Style_Border::BORDER_DASHDOT,
143,12 → 143,12
 
$objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(12);
 
$row = 2;
$ligne = 2;
foreach ($observations as $obs) {
$colid = 0;
foreach($colonnes as $slug => $colonne) {
foreach($colonnes as $abbrev => $colonne) {
// valeur direct depuis cel_obs ?
if(isset($obs[$slug])) $valeur = $obs[$slug];
if(isset($obs[$abbrev])) $valeur = $obs[$abbrev];
 
// pré-processeur de la champs
if(function_exists($colonne['fonction'])) {
169,13 → 169,13
 
// // cette section devrait être vide:
// // cas particuliers ingérable avec l'architecture actuelle:
if(false && $slug == 'date_observation' && $valeur == "0000-00-00") { /* blah */ }
if(false && $abbrev == 'date_observation' && $valeur == "0000-00-00") { /* blah */ }
// // fin de section "cas particuliers"
 
$sheet->setCellValueByColumnAndRow($colid, $row, $valeur);
$feuille->setCellValueByColumnAndRow($colid, $ligne, $valeur);
$colid++;
}
$row++;
$ligne++;
}
 
header("Content-Type: application/vnd.ms-excel");
182,9 → 182,9
header("Content-Disposition: attachment; filename=\"liste.xls\"; charset=utf-8");
header("Cache-Control: max-age=0");
// Le format Excel2007 utilise un fichier temporaire
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
// $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
$generateur = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
// $generateur = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$generateur->save('php://output');
exit;
}
 
191,6 → 191,7
/*
* @param $fieldSets: un range, eg: 1-5,8,32,58-101
* @return un tableau trié, eg: 1,2,3,4,5,8,32,58,...,101
* http://stackoverflow.com/questions/7698664/converting-a-range-or-partial-array-in-the-form-3-6-or-3-6-12-into-an-arra
*/
static function rangeToList($in = '') {
$inSets = explode(',', $in);
214,17 → 215,18
* eg: "espece" ou "champs-etendus", ...
*
* @return: un tableau associatif déjà ordonné
* clé: slug [machine-name] de la colonne (eg: "espece" ou "mot-clef")
* clé: abbrev [machine-name] de la colonne (eg: "espece" ou "mot-clef")
* valeur: des données relative à cette colonne, cf GenColInfo
*
* @TODO: fonction commune à la génération en CSV
*
*/
static function fieldSetsToColumns($fieldSets = 'standard') {
if(! $fieldSets) $fieldSets = 'standard';
$fieldSets = array_flip(explode(',', $fieldSets));
static function nom_d_ensemble_vers_liste_de_colonnes($groupe_de_champs = 'standard') {
if(! $groupe_de_champs) $groupe_de_champs = 'standard';
$groupe_de_champs = array_flip(explode(',', $groupe_de_champs));
$colonnes = Array();
 
if(isset($fieldSets['standard'])) {
if(isset($groupe_de_champs['standard'])) {
$colonnes += Array(
'nom_sel' => self::GenColInfo('nom_sel', 'Espèce'),
'nom_sel_nn' => self::GenColInfo('nom_sel_nn', 'Numéro nomenclatural'),
278,8 → 280,8
* $fonction_data doit retourner une valeur
 
*/
static function GenColInfo($slug, $nom, $is_extra = 0, $fonction = NULL, $fonction_data = NULL, $importable = TRUE) {
return Array('slug' => $slug,
static function GenColInfo($abbrev, $nom, $is_extra = 0, $fonction = NULL, $fonction_data = NULL, $importable = TRUE) {
return Array('abbrev' => $abbrev,
'nom' => $nom,
'extra' => $is_extra ? 1 : 0,
'fonction' => $fonction,
353,10 → 355,10
// pas de cache:
error_log("require NomsVernaculaires.php pour \"{$obs['nom_ret']}\"");
 
$data = Array('masque.nt' => $obs['nt'],
$donnees = Array('masque.nt' => $obs['nt'],
'masque.lg' => $langue,
'retour.champs' => 'num_statut');
$noms = $service->consulter(Array('nvjfl', 'noms-vernaculaires'), $data);
$noms = $service->consulter(Array('nvjfl', 'noms-vernaculaires'), $donnees);
 
if(! $noms) return '';
$noms = array_filter((array)($noms->resultat), function($item) { return ($item->num_statut == 1); });
387,10 → 389,10
// pas de cache:
error_log("require NomsVernaculaires.php pour \"{$obs['nom_ret']}\"");
 
$data = Array('masque.nt' => $obs['nt'],
$donnees = Array('masque.nt' => $obs['nt'],
'masque.lg' => $langue,
'retour.champs' => 'conseil_emploi');
$this->service->initialiserRessourcesEtParametres(Array('nvjfl', 'noms-vernaculaires', 'attributions'), $data);
$this->service->initialiserRessourcesEtParametres(Array('nvjfl', 'noms-vernaculaires', 'attributions'), $donnees);
try {
$noms = $this->service->traiterRessources();
} catch(Exception $e) { return ''; }