X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=opac%2Fsvc%2Freport;h=ddf445fa320bdb0cba6eeb61343f426d9274ba53;hb=e762bdb9b2243070fd33e9aeb1bdfb88f2af2193;hp=0f9d5fb7086d7df75d1e623095275c5e3751d5df;hpb=63cd3b9000b8e2744358df8ac07660d403c990df;p=koha.git diff --git a/opac/svc/report b/opac/svc/report index 0f9d5fb708..ddf445fa32 100755 --- a/opac/svc/report +++ b/opac/svc/report @@ -1,60 +1,91 @@ #!/usr/bin/perl -# Copyright 2011 Chris Cormack +# This file is part of Koha. +# +# Copyright (C) 2011 Chris Cormack +# Copyright (C) 2013 Mark Tompsett +# Updated 2013 by Chris Cormack # # 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 +# Foundation; either version 3 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. +# 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., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . -use strict; -use warnings; +use Modern::Perl; use C4::Reports::Guided; +use Koha::Reports; use JSON; -use CGI; +use CGI qw ( -utf8 ); -use Koha::Cache; +use Koha::Caches; -my $query = CGI->new(); -my $report = $query->param('id'); +my $query = CGI->new(); +my $report_id = $query->param('id'); +my $report_name = $query->param('name'); +my $report_annotation = $query->param('annotated'); -my $cache; +my $report_recs = Koha::Reports->search( $report_name ? { 'report_name' => $report_name } : { 'id' => $report_id } ); +if ( !$report_recs || $report_recs->count == 0 ) { die "There is no such report.\n"; } +my $report_rec = $report_recs->next(); -my ( $sql, $type, $name, $notes, $cache_expiry, $public ) = - get_saved_report($report); -die "Sorry this report is not public\n" unless $public; +die "Sorry this report is not public\n" unless $report_rec->public; -if (Koha::Cache->is_cache_active) { - $cache = Koha::Cache->new( - ); - my $page = $cache->get_from_cache("opac:report:$report"); - if ($page) { - print $query->header; - print $page; - exit; - } +my @sql_params = $query->param('sql_params'); + +my $cache = Koha::Caches->get_instance(); +my $cache_active = $cache->is_cache_active; +my ($cache_key, $json_text); +if ($cache_active) { + $cache_key = + "opac:report:" + . ( $report_name ? "name:$report_name" : "id:$report_id" ) + . join( '-', @sql_params ); + $json_text = $cache->get_from_cache($cache_key); } -print $query->header; -my $offset = 0; -my $limit = C4::Context->preference("SvcMaxReportRows") || 10; -my ( $sth, $errors ) = execute_query( $sql, $offset, $limit ); -my $lines = $sth->fetchall_arrayref; -my $json_text = to_json($lines); -print $json_text; +unless ($json_text) { + my $offset = 0; + my $limit = C4::Context->preference("SvcMaxReportRows") || 10; + my $sql = $report_rec->savedsql; -if (Koha::Cache->is_cache_active) { - $cache->set_in_cache( "opac:report:$report", $json_text, $cache_expiry ); + # convert SQL parameters to placeholders + $sql =~ s/(<<.*?>>)/\?/g; + + my ( $sth, $errors ) = + execute_query( $sql, $offset, $limit, \@sql_params, $report_id ); + if ($sth) { + my $lines; + if ($report_annotation) { + $lines = $sth->fetchall_arrayref({}); + } + else { + $lines = $sth->fetchall_arrayref; + } + $json_text = encode_json($lines); + + if ($cache_active) { + $cache->set_in_cache( $cache_key, $json_text, + { expiry => $report_rec->cache_expiry } ); + } + } + else { + $json_text = encode_json($errors); + } } + +print $query->header( + -charset => 'UTF-8', + -type => 'application/json' +); +print $json_text;