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 ''; } |