25f134f525
The staff and public catalog reports web services (/svc/report) return JSON output, in particular an array contain an array for each row of the report output. This patch adds a URL parameter, annotated, which when supplied and set to a value that evaluates to Perl true, will cause the output to be emited as a JSON array of hashes, where each hash represents a row of report output and the hash keys are the column names or labels set in the report definition. This patch also moves code around to make diffs between svc/report and opac/svc/report smaller. The suggestion to return an array of hashes was made by Chris Cormack. TEST PLAN --------- 1) Log into staff client 2) Reports 3) Used save reports 4) Click the Action button on any report WITHOUT PARAMETERS. -- with parameters blows up in master and this. 5) Click Edit 6) Make the report public 7) Update the SQL 8) Note the ID number of the report 9) Note the ID number of a non-public report 10) Make up a crazy ID number for a non-existant report 11) In a new tab (with the appropriate edits) https://OPAC/cgi-bin/koha/svc/report?id=# from step 8 -- JSON data has arrays of field values. https://OPAC/cgi-bin/koha/svc/report?id=# from step 8&annotated=1 -- JSON data has arrays of field values. https://OPAC/cgi-bin/koha/svc/report?id=# from step 9 -- Software error: Sorry this report is not public https://OPAC/cgi-bin/koha/svc/report?id=# from step 9&annotated=1 -- Software error: Sorry this report is not public https://OPAC/cgi-bin/koha/svc/report?id=# from step 10 -- Software error: Sorry this report is not public https://OPAC/cgi-bin/koha/svc/report?id=# from step 10&annotated=1 -- Software error: Sorry this report is not public https://STAFF/cgi-bin/koha/svc/report?id=# from step 8 -- JSON data has arrays of field values. https://STAFF/cgi-bin/koha/svc/report?id=# from step 8&annotated=1 -- JSON data has arrays of field values. https://STAFF/cgi-bin/koha/svc/report?id=# from step 9 -- JSON data has arrays of field values. https://STAFF/cgi-bin/koha/svc/report?id=# from step 9&annotated=1 -- JSON data has arrays of field values. https://STAFF/cgi-bin/koha/svc/report?id=# from step 10 -- Software error: hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this) at /usr/share/perl5/JSON.pm line 154. https://STAFF/cgi-bin/koha/svc/report?id=# from step 10&annotated=1 -- Software error: hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this) at /usr/share/perl5/JSON.pm line 154. 12) Apply the patch 13) ~/qa-test-tools/koha-qa.pl -v 2 -c 2 -- There should be no problems. All OK. 14) In a new tab (with the appropriate edits) https://OPAC/cgi-bin/koha/svc/report?id=# from step 8 -- JSON data has arrays of field values. https://OPAC/cgi-bin/koha/svc/report?id=# from step 8&annotated=1 -- JSON data has arrays of hashes with field names as keys https://OPAC/cgi-bin/koha/svc/report?id=# from step 9 -- Software error: Sorry this report is not public https://OPAC/cgi-bin/koha/svc/report?id=# from step 9&annotated=1 -- Software error: Sorry this report is not public https://OPAC/cgi-bin/koha/svc/report?id=# from step 10 -- Software error: There is no such report. https://OPAC/cgi-bin/koha/svc/report?id=# from step 10&annotated=1 -- Software error: There is no such report. https://STAFF/cgi-bin/koha/svc/report?id=# from step 8 -- JSON data has arrays of field values. https://STAFF/cgi-bin/koha/svc/report?id=# from step 8&annotated=1 -- JSON data has arrays of hashes with field names as keys https://STAFF/cgi-bin/koha/svc/report?id=# from step 9 -- JSON data has arrays of field values. https://STAFF/cgi-bin/koha/svc/report?id=# from step 9&annotated=1 -- JSON data has arrays of hashes with field names as keys https://STAFF/cgi-bin/koha/svc/report?id=# from step 10 -- Software error: There is no such report. https://STAFF/cgi-bin/koha/svc/report?id=# from step 10&annotated=1 -- Software error: There is no such report. Signed-off-by: Holger Meißner <h.meissner.82@web.de> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Galen Charlton <gmc@esilibrary.com>
82 lines
2.4 KiB
Perl
Executable file
82 lines
2.4 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
# Copyright 2011 Chris Cormack <chris@bigballofwax.co.nz>
|
|
#
|
|
# This file is part of Koha.
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it under the
|
|
# terms of the GNU General Public License as published by the Free Software
|
|
# Foundation; either version 2 of the License, or (at your option) any later
|
|
# version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along with
|
|
# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
|
|
# Suite 330, Boston, MA 02111-1307 USA
|
|
#
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use C4::Auth;
|
|
use C4::Reports::Guided;
|
|
use JSON;
|
|
use CGI;
|
|
|
|
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(
|
|
{
|
|
template_name => "intranet-main.tmpl",
|
|
query => $query,
|
|
type => "intranet",
|
|
authnotrequired => 0,
|
|
flagsrequired => { catalogue => 1, },
|
|
}
|
|
);
|
|
|
|
my $cache_active = Koha::Cache->is_cache_active;
|
|
my ($cache_key, $cache, $json_text);
|
|
if ($cache_active) {
|
|
$cache_key = "intranet:report:".($report_name ? "name:$report_name" : "id:$report_id");
|
|
$cache = Koha::Cache->new();
|
|
$json_text = $cache->get_from_cache($cache_key);
|
|
}
|
|
|
|
unless ($json_text) {
|
|
my $offset = 0;
|
|
my $limit = C4::Context->preference("SvcMaxReportRows") || 10;
|
|
my ( $sth, $errors ) = execute_query( $report_rec->{savedsql}, $offset, $limit );
|
|
if ($sth) {
|
|
my $lines;
|
|
if ($report_annotation) {
|
|
$lines = $sth->fetchall_arrayref({});
|
|
}
|
|
else {
|
|
$lines = $sth->fetchall_arrayref;
|
|
}
|
|
$json_text = to_json($lines);
|
|
|
|
if ($cache_active) {
|
|
$cache->set_in_cache( $cache_key, $json_text, $report_rec->{cache_expiry} );
|
|
}
|
|
}
|
|
else {
|
|
$json_text = to_json($errors);
|
|
}
|
|
}
|
|
|
|
print $query->header;
|
|
print $json_text;
|