From 5bbdfab903df7ec36866f25fd23e2d089c054997 Mon Sep 17 00:00:00 2001 From: Mirko Tietgen <mirko@abunchofthings.net> Date: Thu, 4 Jul 2013 00:50:43 +0200 Subject: [PATCH] Bug 10195 Records hidden with OpacSuppression can still be accessed Records hidden with OpacSuppression are filtered from the search results, but the opac-detail page is still visible if you know the biblio number. This patch hides the detail page for suppressed biblios by redirecting (controlled by the syspref OpacSuppressionRedirect) either to opac-blocked (default), explaining that the record is blocked (including optional explanatory text from the syspref OpacSuppressionMessage) or to Koha's 404 page, giving no hint that a biblio with that number exists in the system. --- installer/data/mysql/sysprefs.sql | 2 + installer/data/mysql/updatedatabase.pl | 9 +++++ .../en/modules/admin/preferences/cataloguing.pref | 11 +++++- .../opac-tmpl/prog/en/modules/opac-blocked.tt | 31 +++++++++++++++++ opac/opac-blocked.pl | 36 ++++++++++++++++++++ opac/opac-detail.pl | 30 ++++++++++++++++ 6 files changed, 118 insertions(+), 1 deletions(-) create mode 100644 koha-tmpl/opac-tmpl/prog/en/modules/opac-blocked.tt create mode 100755 opac/opac-blocked.pl diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 0a3f20f..795e9ed 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -428,3 +428,5 @@ INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) V INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacHoldNotes',0,'Show hold notes on OPAC','','YesNo'); INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('CalculateFinesOnReturn','1','Switch to control if overdue fines are calculated on return or not', '', 'YesNo'); INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('AcqWarnOnDuplicateInvoice','0','Warn librarians when they try to create a duplicate invoice', '', 'YesNo'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacSuppressionRedirect','1','Redirect the opac detail page for suppressed records to an explanatory page (otherwise redirect to 404 error page)','','YesNo'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacSuppressionMessage','','Display this message on the redirect page for suppressed biblios','70|10','Textarea'); diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 1f7b491..a464455 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -7044,6 +7044,15 @@ if ( CheckVersion($DBversion) ) { SetVersion($DBversion); } +$DBversion = "xxx"; +if ( CheckVersion($DBversion) ) { + $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacSuppressionRedirect','1','Redirect the opac detail page for suppressed records to an explanatory page (otherwise redirect to 404 error page)','','YesNo')"); + $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacSuppressionMessage', '','Display this message on the redirect page for suppressed biblios','70|10','Textarea')"); + print "Upgrade to $DBversion done (Bug 10195: Records hidden with OpacSuppression can still be accessed)\n"; + SetVersion($DBversion); +} + + =head1 FUNCTIONS =head2 TableExists($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref index 96f3603..79056ff 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref @@ -156,10 +156,19 @@ Cataloging: yes: Hide no: "Don't hide" - items marked as suppressed from OPAC search results. Note that you must have the <code>Suppress</code> index set up in Zebra and at least one suppressed item, or your searches will be broken. - - Restrict the suppression to IP adresses outside of the IP range + - <br />Restrict the suppression to IP adresses outside of the IP range - pref: OpacSuppressionByIPRange class: short - (Leave blank if not used. Define a range like <code>192.168.</code>.) + - <br />Redirect the opac detail page for suppressed records to + - pref: OpacSuppressionRedirect + choices: + yes: "an explanatory page ('This record is blocked')." + no: "the 404 error page ('Not found')." + - <br />Display the following message on the redirect page for suppressed biblios + - pref: OpacSuppressionMessage + type: textarea + class: code - - pref: SeparateHoldings choices: diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-blocked.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-blocked.tt new file mode 100644 index 0000000..0cdbeb7 --- /dev/null +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-blocked.tt @@ -0,0 +1,31 @@ +[% INCLUDE 'doc-head-open.inc' %][% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog › An error has occurred +[% INCLUDE 'doc-head-close.inc' %] +</head> +<body id="error404"> +[% IF ( OpacNav ) %]<div id="doc3" class="yui-t1">[% ELSE %]<div id="doc3" class="yui-t7">[% END %] +<div id="bd"> +[% INCLUDE 'masthead.inc' %] + +<div id="yui-main"> +<div class="yui-b"> +<div class="yui-g"> + <div id="opac-blocked-message"> + <h3>Blocked</h3> + <p>You are not authorized to view this record.</p> + [% IF ( OpacSuppressionMessage ) %] + <div id="opacsuppressionmessage"> + <p>[% OpacSuppressionMessage %]</p> + </div> + [% END %] + </div> +</div> +</div> +</div> +[% IF ( OpacNav ) %] +<div class="yui-b"> +<div id="leftmenus" class="container"> +[% INCLUDE 'navigation.inc' %] +</div> +</div>[% END %] +</div> +[% INCLUDE 'opac-bottom.inc' %] diff --git a/opac/opac-blocked.pl b/opac/opac-blocked.pl new file mode 100755 index 0000000..46bbeaa --- /dev/null +++ b/opac/opac-blocked.pl @@ -0,0 +1,36 @@ +#!/usr/bin/perl + +# 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::Output; +use C4::Context; + +my $query = new CGI; +my ( $template, $borrowernumber, $cookie ) = get_template_and_user( + { + template_name => "opac-blocked.tt", + query => $query, + type => "opac", + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), + } +); + +output_with_http_headers $query, $cookie, $template->output, 'html'; diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index 9d0851f..2c4f8bd 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -78,6 +78,36 @@ if ( ! $record ) { print $query->redirect("/cgi-bin/koha/errors/404.pl"); # escape early exit; } + +# redirect if opacsuppression is enabled and biblio is suppressed +if (C4::Context->preference('OpacSuppression')) { + my $opacsuppressionfield = '942'; + my $opacsuppressionfieldvalue = $record->field($opacsuppressionfield); + # redirect to opac-blocked info page or 404? + my $opacsuppressionredirect; + if ( C4::Context->preference("OpacSuppressionRedirect") ) { + $opacsuppressionredirect = "/cgi-bin/koha/opac-blocked.pl"; + } + else { + $opacsuppressionredirect = "/cgi-bin/koha/errors/404.pl"; + } + if ( $opacsuppressionfieldvalue->subfield("n") == 1) { + # if OPAC suppression by IP address + if (C4::Context->preference('OpacSuppressionByIPRange')) { + my $IPAddress = $ENV{'REMOTE_ADDR'}; + my $IPRange = C4::Context->preference('OpacSuppressionByIPRange'); + if ($IPAddress !~ /^$IPRange/) { + print $query->redirect($opacsuppressionredirect); + exit; + } + } + else { + print $query->redirect($opacsuppressionredirect); + exit; + } + } +} + $template->param( biblionumber => $biblionumber ); # get biblionumbers stored in the cart -- 1.7.2.5