From b4d8e522f5fa48d5fc45ad864c79a1d18dedc08a Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Tue, 7 Jan 2014 14:39:46 -0500 Subject: [PATCH] Bug 11491 - Missing field names in JSON data Added a parameter (annotated), which when non-empty will generate an array of hashes that include the field names as keys, not the typical array of field values, for the JSON output. Added functionality to staff svc/report as well. Moved code around to make diffs between svc/report and opac/svc/report smaller. TEST PLAN --------- 1) Apply the patch 2) ~/qa-test-tools/koha-qa.pl -v 2 -c 2 NOTE: There are two patches, but you could just test 1. 3) Log into staff client 4) Reports 5) Used save reports 6) Click the Action button on any report WITHOUT PARAMETERS. -- with parameters blows up in master and this. 7) Click Edit 8) Make the report public 9) Update the SQL 10) Note the ID number of the report 11) Note the ID number of a non-public report 12) In a new tab use the number from step 9. https://OPAC/cgi-bin/koha/svc/report?id=## -- matches default master report. https://OPAC/cgi-bin/koha/svc/report?id=##&annotated=1 -- has hash where the keys are the field name. https://STAFF/cgi-bin/koha/svc/report?id=## -- matches default master report. https://STAFF/cgi-bin/koha/svc/report?id=##&annotated=1 -- has hash where the keys are the field name. 13) In a new tab use the number from step 10. https://OPAC/cgi-bin/koha/svc/report?id=## -- matches the warning from master. https://OPAC/cgi-bin/koha/svc/report?id=##&annotated=1 -- matches the warning from master. https://STAFF/cgi-bin/koha/svc/report?id=## -- matches default master report. https://STAFF/cgi-bin/koha/svc/report?id=##&annotated=1 -- has hash where the keys are the field name. 14) In a new tab use a crazy number like 9675309 such that the report does not exist. https://OPAC/cgi-bin/koha/svc/report?id=## -- tells you the report doesn't exist vs. master giving a Software error. https://OPAC/cgi-bin/koha/svc/report?id=##&annotated=1 -- tells you the report doesn't exist vs. master giving a Software error. https://STAFF/cgi-bin/koha/svc/report?id=## -- tells you the report doesn't exist vs. master giving a Software error. https://STAFF/cgi-bin/koha/svc/report?id=##&annotated=1 -- tells you the report doesn't exist vs. master giving a Software error. --- opac/svc/report | 12 ++++++++++-- svc/report | 13 +++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/opac/svc/report b/opac/svc/report index 38cbd42..f6cd6b9 100755 --- a/opac/svc/report +++ b/opac/svc/report @@ -30,10 +30,12 @@ use Koha::Cache; my $query = CGI->new(); my $report_id = $query->param('id'); my $report_name = $query->param('name'); +my $report_annotation = $query->param('annotated'); my $report_rec = get_saved_report( $report_name ? { 'name' => $report_name } : { 'id' => $report_id } ); -die "Sorry this report is not public\n" unless $report_rec->{public}; +if (!$report_rec) { die "There is no such report.\n"; } +die "Sorry this report is not public\n" unless $report_rec->{public}; my $cache_active = Koha::Cache->is_cache_active; my ($cache_key, $cache, $json_text); @@ -48,7 +50,13 @@ unless ($json_text) { my $limit = C4::Context->preference("SvcMaxReportRows") || 10; my ( $sth, $errors ) = execute_query( $report_rec->{savedsql}, $offset, $limit ); if ($sth) { - my $lines = $sth->fetchall_arrayref; + my $lines; + if ($report_annotation) { + $lines = $sth->fetchall_arrayref({}); + } + else { + $lines = $sth->fetchall_arrayref; + } $json_text = to_json($lines); if ($cache_active) { diff --git a/svc/report b/svc/report index 654ef15..41ea125 100755 --- a/svc/report +++ b/svc/report @@ -32,6 +32,10 @@ use Koha::Cache; my $query = CGI->new(); my $report_id = $query->param('id'); my $report_name = $query->param('name'); +my $report_annotation = $query->param('annotated'); + +my $report_rec = get_saved_report( $report_name ? { 'name' => $report_name } : { 'id' => $report_id } ); +if (!$report_rec) { die "There is no such report.\n"; } my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { @@ -52,12 +56,17 @@ if ($cache_active) { } unless ($json_text) { - my $report_rec = get_saved_report($report_name ? { 'name' => $report_name } : { 'id' => $report_id }); my $offset = 0; my $limit = C4::Context->preference("SvcMaxReportRows") || 10; my ( $sth, $errors ) = execute_query( $report_rec->{savedsql}, $offset, $limit ); if ($sth) { - my $lines = $sth->fetchall_arrayref; + my $lines; + if ($report_annotation) { + $lines = $sth->fetchall_arrayref({}); + } + else { + $lines = $sth->fetchall_arrayref; + } $json_text = to_json($lines); if ($cache_active) { -- 1.7.9.5