% $csv->combine(@$header); #or die $csv->status;
%
-<% $csv->string %>\
+<% $opt{no_csv_header} ? '' : $csv->string %>\
%
% foreach my $row ( @$rows ) {
%
my %opt = %{ $args{'opt'} };
#http_header('Content-Type' => 'text/comma-separated-values' ); #IE chokes
-http_header('Content-Type' => 'text/plain' );
+#http_header('Content-Type' => 'text/plain' );
+http_header('Content-Type' => 'text/csv' ); # So saith RFC 4180
+http_header('Content-Disposition' =>
+ 'attachment;filename="'.($opt{'name'} || PL($opt{'name_singular'}) ).'.csv"');
+
+my $quote_char = '"';
+$quote_char = $opt{csv_quote} if exists($opt{csv_quote});
-my $csv = new Text::CSV_XS { 'always_quote' => 1,
+my $csv = new Text::CSV_XS { 'always_quote' => $opt{avoid_quote} ? 0 : 1,
'eol' => "\n", #"\015\012", #"\012"
};