}
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 {
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) = @_;