Koha/opac/opac-topissues.pl
Mirko Tietgen 04ca81bc35 Bug 10595: don't display OpacTopissue page when system preference is turned off
When the syspref is turned off, the link is hidden but the page is still
accessible. This patch checks the syspref and redirects to 404 if it is disabled.

Test plan:

Before applying the patch

Enable OpacTopissue
  Observe there is a link to opac-topissues.pl next to Advanced search etc.
  Follow that link, observe that opac-topissues.pl is loading
Disable OpacTopissue
  Observe the link is gone
  Manually open /koha/opac-topissues.pl and check that it is loading even though the feature is disabled

Apply patch

(OpacTopissue still diabled)
Manually open /koha/opac-topissues.pl and observe that you are being redirected to the 404 page.
Enable OpacTopissue
  Follow the link or manuall open opac-topissues.pl and check that it is working

Signoff the patch.

Signed-off-by: Srdjan <srdjan@catalyst.net.nz>
Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
2013-07-18 13:52:45 +00:00

172 lines
6.1 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright 2000-2002 Katipo Communications
# Parts Copyright Catalyst IT 2011
#
# 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.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
use strict;
use warnings;
use CGI;
use C4::Auth;
use C4::Context;
use C4::Search;
use C4::Output;
use C4::Koha;
use C4::Branch;
use Date::Manip;
=head1 NAME
plugin that shows a stats on borrowers
=head1 DESCRIPTION
=cut
my $input = new CGI;
# if OpacTopissue is disabled, leave immediately
if ( ! C4::Context->preference('OpacTopissue') ) {
print $input->redirect("/cgi-bin/koha/errors/404.pl");
exit;
}
my $branches = GetBranches();
my $itemtypes = GetItemTypes();
my ($template, $borrowernumber, $cookie)
= get_template_and_user({template_name => 'opac-topissues.tmpl',
query => $input,
type => "opac",
authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ),
debug => 1,
});
my $dbh = C4::Context->dbh;
# Displaying results
my $limit = $input->param('limit');
$limit = 10 unless ($limit && $limit =~ /^\d+$/); # control user input for SQL query
$limit = 100 if $limit > 100;
my $branch = $input->param('branch') || '';
my $itemtype = $input->param('itemtype') || '';
my $timeLimit = $input->param('timeLimit') || 3;
my $advanced_search_types = C4::Context->preference('AdvancedSearchTypes');
my $whereclause = '';
$whereclause .= ' AND items.homebranch='.$dbh->quote($branch) if ($branch);
$whereclause .= ' AND TO_DAYS(NOW()) - TO_DAYS(biblio.datecreated) <= '.($timeLimit*30) if $timeLimit < 999;
$whereclause =~ s/ AND $// if $whereclause;
my $query;
if($advanced_search_types eq 'ccode'){
$whereclause .= ' AND authorised_values.authorised_value='.$dbh->quote($itemtype) if $itemtype;
$query = "SELECT datecreated, biblio.biblionumber, title,
author, sum( items.issues ) AS tot, biblioitems.itemtype,
biblioitems.publishercode,biblioitems.publicationyear,
authorised_values.lib as description
FROM biblio
LEFT JOIN items USING (biblionumber)
LEFT JOIN biblioitems USING (biblionumber)
LEFT JOIN authorised_values ON items.ccode = authorised_values.authorised_value
WHERE 1
$whereclause
AND authorised_values.category = 'ccode'
GROUP BY biblio.biblionumber
HAVING tot >0
ORDER BY tot DESC
LIMIT ?
";
$template->param(ccodesearch => 1);
}else{
if ($itemtype){
if (C4::Context->preference('item-level_itypes')){
$whereclause .= ' AND items.itype = ' . $dbh->quote($itemtype);
}
else {
$whereclause .= ' AND biblioitems.itemtype='.$dbh->quote($itemtype);
}
}
$query = "SELECT datecreated, biblio.biblionumber, title,
author, sum( items.issues ) AS tot, biblioitems.itemtype,
biblioitems.publishercode,biblioitems.publicationyear,
itemtypes.description
FROM biblio
LEFT JOIN items USING (biblionumber)
LEFT JOIN biblioitems USING (biblionumber)
LEFT JOIN itemtypes ON itemtypes.itemtype = biblioitems.itemtype
WHERE 1
$whereclause
GROUP BY biblio.biblionumber
HAVING tot >0
ORDER BY tot DESC
LIMIT ?
";
$template->param(itemtypesearch => 1);
}
my $sth = $dbh->prepare($query);
$sth->execute($limit);
my @results;
while (my $line= $sth->fetchrow_hashref) {
push @results, $line;
}
my $timeLimitFinite = $timeLimit;
if($timeLimit eq 999){ $timeLimitFinite = 0 };
$template->param(do_it => 1,
limit => $limit,
branch => $branches->{$branch}->{branchname},
itemtype => $itemtypes->{$itemtype}->{description},
timeLimit => $timeLimit,
timeLimitFinite => $timeLimitFinite,
results_loop => \@results,
);
$template->param( branchloop => GetBranchesLoop(C4::Context->userenv?C4::Context->userenv->{'branch'}:''));
# the index parameter is different for item-level itemtypes
my $itype_or_itemtype = (C4::Context->preference("item-level_itypes"))?'itype':'itemtype';
$itemtypes = GetItemTypes;
my @itemtypesloop;
if (!$advanced_search_types or $advanced_search_types eq 'itemtypes') {
foreach my $thisitemtype ( sort {$itemtypes->{$a}->{'description'} cmp $itemtypes->{$b}->{'description'} } keys %$itemtypes ) {
my %row =( value => $thisitemtype,
description => $itemtypes->{$thisitemtype}->{'description'},
selected => $thisitemtype eq $itemtype,
);
push @itemtypesloop, \%row;
}
} else {
my $advsearchtypes = GetAuthorisedValues($advanced_search_types, '', 'opac');
for my $thisitemtype (@$advsearchtypes) {
my $selected;
$selected = 1 if $thisitemtype->{authorised_value} eq $itemtype;
my %row =( value => $thisitemtype->{authorised_value},
selected => $thisitemtype eq $itemtype,
description => $thisitemtype->{'lib'},
);
push @itemtypesloop, \%row;
}
}
$template->param(
itemtypeloop =>\@itemtypesloop,
);
output_html_with_http_headers $input, $cookie, $template->output;