Merge branch 'bug_8917' into 3.12-master

This commit is contained in:
Jared Camins-Esakov 2013-03-07 11:16:51 -05:00
commit 2bd3c85961
12 changed files with 266 additions and 9 deletions

View File

@ -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);

67
Koha/Linktracker.pm Normal file
View File

@ -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__

View File

@ -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 */;

View File

@ -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');

View File

@ -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) ) {

View File

@ -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:
-

View File

@ -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 %]&amp;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 %]

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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;

78
opac/tracklinks.pl Executable file
View File

@ -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;
}