Merge branch 'bug_8917' into 3.12-master
This commit is contained in:
commit
2bd3c85961
|
|
@ -189,7 +189,8 @@ sub XSLTParse4Display {
|
|||
Display856uAsImage OPACDisplay856uAsImage
|
||||
UseControlNumber IntranetBiblioDefaultView BiblioDefaultView
|
||||
singleBranchMode OPACItemLocation
|
||||
AlternateHoldingsField AlternateHoldingsSeparator / )
|
||||
AlternateHoldingsField AlternateHoldingsSeparator
|
||||
TrackClicks / )
|
||||
{
|
||||
my $sp = C4::Context->preference( $syspref );
|
||||
next unless defined($sp);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,67 @@
|
|||
package Koha::Linktracker;
|
||||
|
||||
# Copyright 2013 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 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.
|
||||
#
|
||||
# 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.
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Koha::Linktracker
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use Koha::Linktracker;
|
||||
my $tracker = Koha::Linktracker->new();
|
||||
$tracker->trackclick( $linkinfo );
|
||||
|
||||
=head1 FUNCTIONS
|
||||
|
||||
=cut
|
||||
|
||||
use Modern::Perl;
|
||||
use Carp;
|
||||
use C4::Context;
|
||||
use base qw(Class::Accessor);
|
||||
|
||||
__PACKAGE__->mk_accessors(qw( trackingmethod ));
|
||||
|
||||
sub trackclick {
|
||||
my ( $self, $linkinfo ) = @_;
|
||||
my $dbh = C4::Context->dbh();
|
||||
my $query = "INSERT INTO linktracker (biblionumber,itemnumber,borrowernumber
|
||||
,url,timeclicked) VALUES (?,?,?,?,now())";
|
||||
my $sth = $dbh->prepare($query);
|
||||
$sth->execute(
|
||||
$linkinfo->{biblionumber}, $linkinfo->{itemnumber},
|
||||
$linkinfo->{borrowernumber}, $linkinfo->{uri}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
=head2 EXPORT
|
||||
|
||||
None by default.
|
||||
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Chris Cormack, E<lt>chris@bigballofwax.co.nzE<gt>
|
||||
|
||||
=cut
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
|
@ -3056,6 +3056,26 @@ CREATE TABLE IF NOT EXISTS `borrower_modifications` (
|
|||
KEY `borrowernumber` (`borrowernumber`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
--
|
||||
-- Table structure for table linktracker
|
||||
-- This stores clicks to external links
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS linktracker;
|
||||
CREATE TABLE linktracker (
|
||||
id int(11) NOT NULL AUTO_INCREMENT, -- primary key identifier
|
||||
biblionumber int(11) DEFAULT NULL, -- biblionumber of the record the link is from
|
||||
itemnumber int(11) DEFAULT NULL, -- itemnumber if applicable that the link was from
|
||||
borrowernumber int(11) DEFAULT NULL, -- borrowernumber who clicked the link
|
||||
url text, -- the link itself
|
||||
timeclicked datetime DEFAULT NULL, -- the date and time the link was clicked
|
||||
PRIMARY KEY (id),
|
||||
KEY bibidx (biblionumber),
|
||||
KEY itemidx (itemnumber),
|
||||
KEY borridx (borrowernumber),
|
||||
KEY dateidx (timeclicked)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
|
|
|
|||
|
|
@ -417,3 +417,4 @@ INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES (
|
|||
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('UNIMARCField100Language', 'fre','UNIMARC field 100 default language',NULL,'short');
|
||||
INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('Persona',0,'Use Mozilla Persona for login','','YesNo');
|
||||
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacItemLocation','callnum','Show the shelving location of items in the opac','callnum|ccode|location','Choice');
|
||||
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('TrackClicks','0','Track links clicked',NULL,'Integer');
|
||||
|
|
|
|||
|
|
@ -6444,6 +6444,30 @@ if ( CheckVersion($DBversion) ) {
|
|||
SetVersion($DBversion);
|
||||
}
|
||||
|
||||
$DBversion = "3.11.00.025";
|
||||
if ( CheckVersion($DBversion) ) {
|
||||
$dbh->do(
|
||||
"CREATE TABLE linktracker (
|
||||
id int(11) NOT NULL AUTO_INCREMENT,
|
||||
biblionumber int(11) DEFAULT NULL,
|
||||
itemnumber int(11) DEFAULT NULL,
|
||||
borrowernumber int(11) DEFAULT NULL,
|
||||
url text,
|
||||
timeclicked datetime DEFAULT NULL,
|
||||
PRIMARY KEY (id),
|
||||
KEY bibidx (biblionumber),
|
||||
KEY itemidx (itemnumber),
|
||||
KEY borridx (borrowernumber),
|
||||
KEY dateidx (timeclicked)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
|
||||
);
|
||||
$dbh->do( "
|
||||
INSERT INTO systempreferences (variable,value,explanation,options,type)
|
||||
VALUES('TrackClicks','0','Track links clicked',NULL,'Integer')" );
|
||||
print
|
||||
"Upgrade to $DBversion done (Adds feature Bug 8917, the ability to track links clicked)\n";
|
||||
SetVersion($DBversion);
|
||||
}
|
||||
|
||||
$DBversion = "3.11.00.024";
|
||||
if ( CheckVersion($DBversion) ) {
|
||||
|
|
|
|||
|
|
@ -525,6 +525,14 @@ OPAC:
|
|||
- pref: AnonymousPatron
|
||||
class: integer
|
||||
- as the Anonymous Patron (for anonymous suggestions and reading history)
|
||||
-
|
||||
- pref: TrackClicks
|
||||
default: 0
|
||||
choices:
|
||||
anonymous: "Track anonymously"
|
||||
track: "Track"
|
||||
no: "Don't track"
|
||||
- links that patrons click on
|
||||
|
||||
Shelf Browser:
|
||||
-
|
||||
|
|
|
|||
|
|
@ -715,9 +715,21 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
|
|||
<li>[% IF ( MARCurl.part ) %][% MARCurl.part %]
|
||||
<br />[% END %]
|
||||
<!-- here you might do a tmpl_if name="toc" and use greybox or equivalent for table of contents -->
|
||||
|
||||
[% IF ( OPACURLOpenInNewWindow ) %]<a href="[% MARCurl.MARCURL %]" title="[% MARCurl.MARCURL %]" target="_blank">[% ELSE %]<a href="[% MARCurl.MARCURL %]" title="[% MARCurl.MARCURL %]">[% END %]
|
||||
|
||||
|
||||
[% IF ( OPACurlOpenInNewWindow ) %]
|
||||
[% IF trackclicks == 'track' || trackclicks == 'anonymous' %]
|
||||
<a href="/cgi-bin/koha/tracklinks.pl?uri=[% MARCurl.MARCURL |url%]&biblionumber=[% biblionumber | url %]" title="[% MARCurl.MARCURL %]" target="_blank">
|
||||
[% ELSE %]
|
||||
<a href="[% MARCurl.MARCURL %]" title="[% MARCurl.MARCURL %]" target="_blank">
|
||||
[% END %]
|
||||
[% ELSE %]
|
||||
[% IF trackclicks == 'track' || trackclicks == 'anonymous' %]
|
||||
<a href="/cgi-bin/koha/tracklinks.pl?uri=[% MARCurl.MARCURL |url%]&biblionumber=[% biblionumber | url %]" title="[% MARCurl.MARCURL %]">
|
||||
[% ELSE %]
|
||||
<a href="[% MARCurl.MARCURL %]" title="[% MARCurl.MARCURL %]">
|
||||
[% END %]
|
||||
[% END %]
|
||||
|
||||
[% MARCurl.linktext %]</a>
|
||||
[% IF ( MARCurl.notes ) %]<ul>[% FOREACH note IN MARCurl.notes %]<li>[% note.note %]</li>[% END %]</ul>[% END %]</li>
|
||||
[% END %]</ul>
|
||||
|
|
@ -1476,7 +1488,16 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
|
|||
[% IF ( itemdata_ccode ) %]<td class="collection">[% ITEM_RESULT.ccode %]</td>[% END %]
|
||||
<td class="call_no">[% IF ( ITEM_RESULT.itemcallnumber ) %] [% ITEM_RESULT.itemcallnumber %][% IF ( OPACShelfBrowser ) %] (<a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% ITEM_RESULT.biblionumber %]&shelfbrowse_itemnumber=[% ITEM_RESULT.itemnumber %]#[% tab %]">Browse shelf</a>)[% END %][% END %]</td>
|
||||
[% IF ( itemdata_enumchron ) %]<td class="vol_info">[% ITEM_RESULT.enumchron %]</td>[% END %]
|
||||
[% IF ( itemdata_uri ) %]<td class="url"><a href="[% ITEM_RESULT.uri %]">[% ITEM_RESULT.uri %]</a></td>[% END %]
|
||||
[% IF ( itemdata_uri ) %]<td class="url">
|
||||
[% IF ITEM_RESULT.uri %]
|
||||
[% IF trackclicks == 'track' || trackclicks == 'anonymous' %]
|
||||
<a href="/cgi-bin/koha/tracklinks.pl?uri=[% ITEM_RESULT.uri | url %]&biblionumber=[% biblionumber |url %]&itemnumber=[% ITEM_RESULT.itemnumber | url %]"> Link to resource </a>
|
||||
[% ELSE %]
|
||||
<a href="[% ITEM_RESULT.uri %]">[% ITEM_RESULT.uri %]</a>
|
||||
[% END %]
|
||||
[% END %]
|
||||
</td>
|
||||
[% END %]
|
||||
[% IF ( itemdata_copynumber ) %]<td class="copynumber">[% ITEM_RESULT.copynumber %]</td>[% END %]
|
||||
<td class="status">[% INCLUDE 'item-status.inc' item = ITEM_RESULT %]</td>
|
||||
[% IF ( itemdata_itemnotes ) %]<td class="notes">[% ITEM_RESULT.itemnotes %]</td>[% END %]
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@
|
|||
<xsl:variable name="UseAuthoritiesForTracings" select="marc:sysprefs/marc:syspref[@name='UseAuthoritiesForTracings']"/>
|
||||
<xsl:variable name="TraceSubjectSubdivisions" select="marc:sysprefs/marc:syspref[@name='TraceSubjectSubdivisions']"/>
|
||||
<xsl:variable name="Show856uAsImage" select="marc:sysprefs/marc:syspref[@name='OPACDisplay856uAsImage']"/>
|
||||
<xsl:variable name="OPACTrackClicks" select="marc:sysprefs/marc:syspref[@name='TrackClicks']"/>
|
||||
<xsl:variable name="biblionumber" select="marc:datafield[@tag=999]/marc:subfield[@code='c']"/>
|
||||
<xsl:variable name="TracingQuotesLeft">
|
||||
<xsl:choose>
|
||||
<xsl:when test="marc:sysprefs/marc:syspref[@name='UseICU']='1'">{</xsl:when>
|
||||
|
|
@ -550,7 +552,18 @@
|
|||
<span class="results_summary online_resources"><span class="label">Online resources: </span>
|
||||
<xsl:for-each select="marc:datafield[@tag=856]">
|
||||
<xsl:variable name="SubqText"><xsl:value-of select="marc:subfield[@code='q']"/></xsl:variable>
|
||||
<a><xsl:attribute name="href"><xsl:value-of select="marc:subfield[@code='u']"/></xsl:attribute>
|
||||
<a>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$OPACTrackClicks='track'">
|
||||
<xsl:attribute name="href">/cgi-bin/koha/tracklinks.pl?uri=<xsl:value-of select="marc:subfield[@code='u']"/>;biblionumber=<xsl:value-of select="$biblionumber"/></xsl:attribute>
|
||||
</xsl:when>
|
||||
<xsl:when test="$OPACTrackClicks='anonymous'">
|
||||
<xsl:attribute name="href">/cgi-bin/koha/tracklinks.pl?uri=<xsl:value-of select="marc:subfield[@code='u']"/>;biblionumber=<xsl:value-of select="$biblionumber"/></xsl:attribute>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:attribute name="href"><xsl:value-of select="marc:subfield[@code='u']"/></xsl:attribute>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:if test="$OPACURLOpenInNewWindow='1'">
|
||||
<xsl:attribute name="target">_blank</xsl:attribute>
|
||||
</xsl:if>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
<xsl:variable name="AlternateHoldingsSeparator" select="marc:sysprefs/marc:syspref[@name='AlternateHoldingsSeparator']"/>
|
||||
<xsl:variable name="OPACItemLocation" select="marc:sysprefs/marc:syspref[@name='OPACItemLocation']"/>
|
||||
<xsl:variable name="singleBranchMode" select="marc:sysprefs/marc:syspref[@name='singleBranchMode']"/>
|
||||
<xsl:variable name="OPACTrackClicks" select="marc:sysprefs/marc:syspref[@name='TrackClicks']"/>
|
||||
<xsl:variable name="leader" select="marc:leader"/>
|
||||
<xsl:variable name="leader6" select="substring($leader,7,1)"/>
|
||||
<xsl:variable name="leader7" select="substring($leader,8,1)"/>
|
||||
|
|
@ -950,7 +951,18 @@
|
|||
<xsl:for-each select="marc:datafield[@tag=856]">
|
||||
<xsl:variable name="SubqText"><xsl:value-of select="marc:subfield[@code='q']"/></xsl:variable>
|
||||
<xsl:if test="$OPACURLOpenInNewWindow='0'">
|
||||
<a><xsl:attribute name="href"><xsl:value-of select="marc:subfield[@code='u']"/></xsl:attribute>
|
||||
<a>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$OPACTrackClicks='track'">
|
||||
<xsl:attribute name="href">/cgi-bin/koha/tracklinks.pl?uri=<xsl:value-of select="marc:subfield[@code='u']"/>;biblionumber=<xsl:value-of select="$biblionumber"/></xsl:attribute>
|
||||
</xsl:when>
|
||||
<xsl:when test="$OPACTrackClicks='anonymous'">
|
||||
<xsl:attribute name="href">/cgi-bin/koha/tracklinks.pl?uri=<xsl:value-of select="marc:subfield[@code='u']"/>;biblionumber=<xsl:value-of select="$biblionumber"/></xsl:attribute>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:attribute name="href"><xsl:value-of select="marc:subfield[@code='u']"/></xsl:attribute>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:choose>
|
||||
<xsl:when test="($Show856uAsImage='Results' or $Show856uAsImage='Both') and (substring($SubqText,1,6)='image/' or $SubqText='img' or $SubqText='bmp' or $SubqText='cod' or $SubqText='gif' or $SubqText='ief' or $SubqText='jpe' or $SubqText='jpeg' or $SubqText='jpg' or $SubqText='jfif' or $SubqText='png' or $SubqText='svg' or $SubqText='tif' or $SubqText='tiff' or $SubqText='ras' or $SubqText='cmx' or $SubqText='ico' or $SubqText='pnm' or $SubqText='pbm' or $SubqText='pgm' or $SubqText='ppm' or $SubqText='rgb' or $SubqText='xbm' or $SubqText='xpm' or $SubqText='xwd')">
|
||||
<xsl:element name="img"><xsl:attribute name="src"><xsl:value-of select="marc:subfield[@code='u']"/></xsl:attribute><xsl:attribute name="alt"><xsl:value-of select="marc:subfield[@code='y']"/></xsl:attribute><xsl:attribute name="height">100</xsl:attribute></xsl:element><xsl:text></xsl:text>
|
||||
|
|
@ -974,7 +986,18 @@
|
|||
</a>
|
||||
</xsl:if>
|
||||
<xsl:if test="$OPACURLOpenInNewWindow='1'">
|
||||
<a target='_blank'><xsl:attribute name="href"><xsl:value-of select="marc:subfield[@code='u']"/></xsl:attribute>
|
||||
<a target='_blank'>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$OPACTrackClicks='track'">
|
||||
<xsl:attribute name="href">/cgi-bin/koha/tracklinks.pl?uri=<xsl:value-of select="marc:subfield[@code='u']"/>;biblionumber=<xsl:value-of select="$biblionumber"/></xsl:attribute>
|
||||
</xsl:when>
|
||||
<xsl:when test="$OPACTrackClicks='anonymous'">
|
||||
<xsl:attribute name="href">/cgi-bin/koha/tracklinks.pl?uri=<xsl:value-of select="marc:subfield[@code='u']"/>;biblionumber=<xsl:value-of select="$biblionumber"/></xsl:attribute>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:attribute name="href"><xsl:value-of select="marc:subfield[@code='u']"/></xsl:attribute>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:choose>
|
||||
<xsl:when test="($Show856uAsImage='Results' or $Show856uAsImage='Both') and ($SubqText='img' or $SubqText='bmp' or $SubqText='cod' or $SubqText='gif' or $SubqText='ief' or $SubqText='jpe' or $SubqText='jpeg' or $SubqText='jpg' or $SubqText='jfif' or $SubqText='png' or $SubqText='svg' or $SubqText='tif' or $SubqText='tiff' or $SubqText='ras' or $SubqText='cmx' or $SubqText='ico' or $SubqText='pnm' or $SubqText='pbm' or $SubqText='pgm' or $SubqText='ppm' or $SubqText='rgb' or $SubqText='xbm' or $SubqText='xpm' or $SubqText='xwd')">
|
||||
<xsl:element name="img"><xsl:attribute name="src"><xsl:value-of select="marc:subfield[@code='u']"/></xsl:attribute><xsl:attribute name="alt"><xsl:value-of select="marc:subfield[@code='y']"/></xsl:attribute><xsl:attribute name="height">100</xsl:attribute></xsl:element><xsl:text></xsl:text>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ the kohaversion is divided in 4 parts :
|
|||
use strict;
|
||||
|
||||
sub kohaversion {
|
||||
our $VERSION = '3.11.00.024';
|
||||
our $VERSION = '3.11.00.025';
|
||||
# version needs to be set this way
|
||||
# so that it can be picked up by Makefile.PL
|
||||
# during install
|
||||
|
|
|
|||
|
|
@ -1006,5 +1006,6 @@ $template->{VARS}->{OPACPopupAuthorsSearch} = C4::Context->preference('OPACPopup
|
|||
if (C4::Context->preference('OpacHighlightedWords')) {
|
||||
$template->{VARS}->{query_desc} = $query->param('query_desc');
|
||||
}
|
||||
$template->{VARS}->{'trackclicks'} = C4::Context->preference('TrackClicks');
|
||||
|
||||
output_html_with_http_headers $query, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,78 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# script to log clicks on links to external urls
|
||||
|
||||
# Copyright 2012 Catalyst IT
|
||||
# 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 Modern::Perl;
|
||||
use C4::Context;
|
||||
use C4::Auth qw(checkauth);
|
||||
use Koha::Linktracker;
|
||||
use CGI;
|
||||
|
||||
my $cgi = new CGI;
|
||||
my $uri = $cgi->param('uri') || '';
|
||||
|
||||
my $tracker = Koha::Linktracker->new(
|
||||
{ trackingmethod => C4::Context->preference('TrackClicks') } );
|
||||
|
||||
if ($uri) {
|
||||
if ( $tracker->trackingmethod() eq 'track'
|
||||
|| $tracker->trackingmethod() eq 'anonymous' )
|
||||
{
|
||||
my $borrowernumber = 0;
|
||||
|
||||
# we have a uri and we want to track
|
||||
if ( $tracker->trackingmethod() eq 'track' ) {
|
||||
my ( $user, $cookie, $sessionID, $flags ) =
|
||||
checkauth( $cgi, 1, {}, 'opac' );
|
||||
my $userenv = C4::Context->userenv;
|
||||
|
||||
if ( defined($userenv)
|
||||
&& ref($userenv) eq 'HASH'
|
||||
&& $userenv->{number} )
|
||||
{
|
||||
$borrowernumber = $userenv->{number};
|
||||
}
|
||||
|
||||
# get borrower info
|
||||
}
|
||||
my $biblionumber = $cgi->param('biblionumber') || 0;
|
||||
my $itemnumber = $cgi->param('itemnumber') || 0;
|
||||
|
||||
$tracker->trackclick(
|
||||
{
|
||||
uri => $uri,
|
||||
biblionumber => $biblionumber,
|
||||
borrowernumber => $borrowernumber,
|
||||
itemnumber => $itemnumber
|
||||
}
|
||||
);
|
||||
print $cgi->redirect($uri);
|
||||
}
|
||||
else {
|
||||
|
||||
# We have a valid url, but we shouldn't track it, just redirect
|
||||
print $cgi->redirect($uri);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
# we shouldn't be here, bail out
|
||||
print $cgi->redirect("/cgi-bin/koha/errors/404.pl"); # escape early
|
||||
exit;
|
||||
}
|
||||
Loading…
Reference in New Issue