From 4802a81448f5b6b29d0f37fadf69216ed7798e50 Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Thu, 29 Mar 2012 08:55:36 -0400 Subject: [PATCH] Add CSV output (Content-Disposition: attachment) to FlatFielder mod_perl Signed-off-by: Mike Rylander --- .../src/perlmods/lib/OpenILS/WWW/FlatFielder.pm | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/FlatFielder.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/FlatFielder.pm index 19c40b48dc..549b46b5f3 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/FlatFielder.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/FlatFielder.pm @@ -37,6 +37,15 @@ sub html_ish_output { } my $_output_handler_dispatch = { + "text/csv" => { + "prio" => 0, + "code" => sub { + my ($r, $args) = @_; + $r->headers_out->set("Content-Disposition" => "attachment; filename=FlatSearch.csv"); + $r->content_type('text/csv; name=FlatSearch.csv; charset=utf-8'); + return data_to_csv( $args ); + } + }, "text/html" => { "prio" => 0, "code" => sub { @@ -123,6 +132,27 @@ sub data_to_xml { return $dom->toString(); } +sub data_to_csv { + my ($args) = @_; + + my @keys = sort { $a cmp $b } keys %{ $$args{data}[0] }; + return if (!@keys); + + my $output = quote_for_csv(@keys); + + for my $i (@{$$args{data}}) { + $output = quote_for_csv( + map { $$args{data}[$i]{$_} } @keys + ); + } + + return $output; +} + +sub quote_for_csv { + return '"' . join('","', map { s/"/""/g } @_ ) . "\"\015\012"; +} + sub data_to_json { my ($args) = @_; -- 2.11.0