From 914a8e9dc059f35db23f5e00319924471874a3ec Mon Sep 17 00:00:00 2001
From: Julian Maurice <julian.maurice@biblibre.com>
Date: Fri, 2 Sep 2016 15:55:11 +0200
Subject: [PATCH] Bug 8995: Fix URL generation when the URL in syspref has a
query part
---
C4/Biblio.pm | 21 +++++++++++++++++++++
C4/XSLT.pm | 3 ++-
.../bootstrap/en/xslt/MARC21slim2OPACDetail.xsl | 7 ++-----
.../bootstrap/en/xslt/MARC21slim2OPACResults.xsl | 7 ++-----
.../bootstrap/en/xslt/UNIMARCslim2OPACDetail.xsl | 7 ++-----
.../bootstrap/en/xslt/UNIMARCslim2OPACResults.xsl | 7 ++-----
6 files changed, 31 insertions(+), 21 deletions(-)
diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index 8ac50966fe..522bae5641 100644
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -28,6 +28,7 @@ use MARC::File::USMARC;
use MARC::File::XML;
use POSIX qw(strftime);
use Module::Load::Conditional qw(can_load);
+use URI;
use URI::Escape; # GetCOinSBiblio
use C4::Koha;
@@ -1470,6 +1471,26 @@ sub GetCOinSBiblio {
return $coins_value;
}
+sub GetOpenURLResolverURL {
+ my ($record) = @_;
+
+ my $coins = GetCOinSBiblio($record);
+ my $OpenURLResolverURL = C4::Context->preference('OpenURLResolverURL');
+
+ if ($OpenURLResolverURL) {
+ my $uri = URI->new($OpenURLResolverURL);
+
+ if (not defined $uri->query) {
+ $OpenURLResolverURL .= '?';
+ } else {
+ $OpenURLResolverURL .= '&';
+ }
+ $OpenURLResolverURL .= $coins;
+ }
+
+ return $OpenURLResolverURL;
+}
+
=head2 GetMarcPrice
diff --git a/C4/XSLT.pm b/C4/XSLT.pm
index 791d7f3d19..d0ea0abefd 100644
--- a/C4/XSLT.pm
+++ b/C4/XSLT.pm
@@ -250,7 +250,8 @@ sub XSLTParse4Display {
my ($biblio) = GetBiblioItemByBiblioNumber($biblionumber);
my @itypes = split( /\s/, C4::Context->preference('OPACOpenURLItemTypes') );
if (grep /^$biblio->{itemtype}$/, @itypes) {
- $variables->{COinS} = C4::Biblio::GetCOinSBiblio($orig_record);
+ $variables->{OpenURLResolverURL} =
+ C4::Biblio::GetOpenURLResolverURL($orig_record);
}
}
my $varxml = "<variables>\n";
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACDetail.xsl b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACDetail.xsl
index 10a78fbb60..3f3ac3b69d 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACDetail.xsl
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACDetail.xsl
@@ -1249,12 +1249,11 @@
<!-- OpenURL -->
<xsl:variable name="OPACShowOpenURL" select="marc:sysprefs/marc:syspref[@name='OPACShowOpenURL']" />
- <xsl:variable name="OpenURLResolverURL" select="marc:sysprefs/marc:syspref[@name='OpenURLResolverURL']" />
<xsl:variable name="OpenURLImageLocation" select="marc:sysprefs/marc:syspref[@name='OpenURLImageLocation']" />
<xsl:variable name="OpenURLText" select="marc:sysprefs/marc:syspref[@name='OpenURLText']" />
- <xsl:variable name="COinS" select="marc:variables/marc:variable[@name='COinS']" />
+ <xsl:variable name="OpenURLResolverURL" select="marc:variables/marc:variable[@name='OpenURLResolverURL']" />
- <xsl:if test="$OPACShowOpenURL = 1 and $OpenURLResolverURL != '' and $COinS != ''">
+ <xsl:if test="$OPACShowOpenURL = 1 and $OpenURLResolverURL != ''">
<xsl:variable name="openurltext">
<xsl:choose>
<xsl:when test="$OpenURLText != ''">
@@ -1281,8 +1280,6 @@
<span class="results_summary"><a>
<xsl:attribute name="href">
<xsl:value-of select="$OpenURLResolverURL" />
- <xsl:text>?</xsl:text>
- <xsl:value-of select="$COinS" />
</xsl:attribute>
<xsl:attribute name="title">
<xsl:value-of select="$openurltext" />
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
index 168e497e59..53f9f54656 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/MARC21slim2OPACResults.xsl
@@ -446,12 +446,11 @@
<!-- OpenURL -->
<xsl:variable name="OPACShowOpenURL" select="marc:sysprefs/marc:syspref[@name='OPACShowOpenURL']" />
- <xsl:variable name="OpenURLResolverURL" select="marc:sysprefs/marc:syspref[@name='OpenURLResolverURL']" />
<xsl:variable name="OpenURLImageLocation" select="marc:sysprefs/marc:syspref[@name='OpenURLImageLocation']" />
<xsl:variable name="OpenURLText" select="marc:sysprefs/marc:syspref[@name='OpenURLText']" />
- <xsl:variable name="COinS" select="marc:variables/marc:variable[@name='COinS']" />
+ <xsl:variable name="OpenURLResolverURL" select="marc:variables/marc:variable[@name='OpenURLResolverURL']" />
- <xsl:if test="$OPACShowOpenURL = 1 and $OpenURLResolverURL != '' and $COinS != ''">
+ <xsl:if test="$OPACShowOpenURL = 1 and $OpenURLResolverURL != ''">
<xsl:variable name="openurltext">
<xsl:choose>
<xsl:when test="$OpenURLText != ''">
@@ -478,8 +477,6 @@
<span class="results_summary"><a>
<xsl:attribute name="href">
<xsl:value-of select="$OpenURLResolverURL" />
- <xsl:text>?</xsl:text>
- <xsl:value-of select="$COinS" />
</xsl:attribute>
<xsl:attribute name="title">
<xsl:value-of select="$openurltext" />
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/UNIMARCslim2OPACDetail.xsl b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/UNIMARCslim2OPACDetail.xsl
index b24a459944..9cf3554a47 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/UNIMARCslim2OPACDetail.xsl
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/UNIMARCslim2OPACDetail.xsl
@@ -445,12 +445,11 @@
<!-- OpenURL -->
<xsl:variable name="OPACShowOpenURL" select="marc:sysprefs/marc:syspref[@name='OPACShowOpenURL']" />
- <xsl:variable name="OpenURLResolverURL" select="marc:sysprefs/marc:syspref[@name='OpenURLResolverURL']" />
<xsl:variable name="OpenURLImageLocation" select="marc:sysprefs/marc:syspref[@name='OpenURLImageLocation']" />
<xsl:variable name="OpenURLText" select="marc:sysprefs/marc:syspref[@name='OpenURLText']" />
- <xsl:variable name="COinS" select="marc:variables/marc:variable[@name='COinS']" />
+ <xsl:variable name="OpenURLResolverURL" select="marc:variables/marc:variable[@name='OpenURLResolverURL']" />
- <xsl:if test="$OPACShowOpenURL = 1 and $OpenURLResolverURL != '' and $COinS != ''">
+ <xsl:if test="$OPACShowOpenURL = 1 and $OpenURLResolverURL != ''">
<xsl:variable name="openurltext">
<xsl:choose>
<xsl:when test="$OpenURLText != ''">
@@ -477,8 +476,6 @@
<span class="results_summary"><a>
<xsl:attribute name="href">
<xsl:value-of select="$OpenURLResolverURL" />
- <xsl:text>?</xsl:text>
- <xsl:value-of select="$COinS" />
</xsl:attribute>
<xsl:attribute name="title">
<xsl:value-of select="$openurltext" />
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/UNIMARCslim2OPACResults.xsl b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/UNIMARCslim2OPACResults.xsl
index cdf56df7b1..2cebcd00d1 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/UNIMARCslim2OPACResults.xsl
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/UNIMARCslim2OPACResults.xsl
@@ -86,12 +86,11 @@
<!-- OpenURL -->
<xsl:variable name="OPACShowOpenURL" select="marc:sysprefs/marc:syspref[@name='OPACShowOpenURL']" />
- <xsl:variable name="OpenURLResolverURL" select="marc:sysprefs/marc:syspref[@name='OpenURLResolverURL']" />
<xsl:variable name="OpenURLImageLocation" select="marc:sysprefs/marc:syspref[@name='OpenURLImageLocation']" />
<xsl:variable name="OpenURLText" select="marc:sysprefs/marc:syspref[@name='OpenURLText']" />
- <xsl:variable name="COinS" select="marc:variables/marc:variable[@name='COinS']" />
+ <xsl:variable name="OpenURLResolverURL" select="marc:variables/marc:variable[@name='OpenURLResolverURL']" />
- <xsl:if test="$OPACShowOpenURL = 1 and $OpenURLResolverURL != '' and $COinS != ''">
+ <xsl:if test="$OPACShowOpenURL = 1 and $OpenURLResolverURL != ''">
<xsl:variable name="openurltext">
<xsl:choose>
<xsl:when test="$OpenURLText != ''">
@@ -118,8 +117,6 @@
<span class="results_summary"><a>
<xsl:attribute name="href">
<xsl:value-of select="$OpenURLResolverURL" />
- <xsl:text>?</xsl:text>
- <xsl:value-of select="$COinS" />
</xsl:attribute>
<xsl:attribute name="title">
<xsl:value-of select="$openurltext" />
--
2.11.0