From f06fff86051e9ab15048382185e6379cb17d0396 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Thu, 25 Apr 2013 13:54:31 +0200 Subject: [PATCH] Bug 10110: Problems with diacritics in saved SQL reports MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Adds decoding for cgi params (for completeness). Apparently, the NAME attribute of DBI statement handle has a UTF8 bug. Fixing this by decoding the returned column names. Did this in a shared routine. http://bugs.koha-community.org/show_bug.cgi?id=10110 Signed-off-by: Kyle M Hall Signed-off-by: Katrin Fischer Copying test plan from bug report: Example SQL: select branchname as "Bibliothek (üöä)", branchname "Bibiothek (üäa)", branchname from branches where branchcode = <> 1) Create report with given example SQL or your own including some diacritics in the columnnames 2) Save the report and run it 3) Verify column names are broken before patch, but fixed after.. All tests and QA script pass. Signed-off-by: Chris Cormack --- reports/guided_reports.pl | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/reports/guided_reports.pl b/reports/guided_reports.pl index de18072937..05d1dffde7 100755 --- a/reports/guided_reports.pl +++ b/reports/guided_reports.pl @@ -20,7 +20,7 @@ use strict; use warnings; -use CGI; +use CGI qw/-utf8/; use Text::CSV; use URI::Escape; use C4::Reports::Guided; @@ -644,9 +644,8 @@ elsif ($phase eq 'Run this report'){ unless ($sth) { die "execute_query failed to return sth for report $report_id: $sql"; } else { - my $headref = $sth->{NAME} || []; - my @headers = map { +{ cell => $_ } } @$headref; - $template->param(header_row => \@headers); + my $headers= header_cell_loop($sth); + $template->param(header_row => $headers); while (my $row = $sth->fetchrow_arrayref()) { my @cells = map { +{ cell => $_ } } @$row; push @rows, { cells => \@cells }; @@ -763,7 +762,13 @@ elsif ($phase eq 'Save Compound'){ # pass $sth, get back an array of names for the column headers sub header_cell_values { my $sth = shift or return (); - return @{$sth->{NAME}}; + my @cols; + foreach my $c (@{$sth->{NAME}}) { + #FIXME apparently DBI still needs a utf8 fix for this? + utf8::decode($c); + push @cols, $c; + } + return @cols; } # pass $sth, get back a TMPL_LOOP-able set of names for the column headers -- 2.39.5