From 0c42bd2cad4345e6e2e36e0e9eeafbc7dbd18b55 Mon Sep 17 00:00:00 2001
From: Tomas Cohen Arazi <tomascohen@theke.io>
Date: Thu, 7 May 2020 14:23:40 -0300
Subject: [PATCH] Bug 25416: Let OPAC XSLTs know if the context is an anonymous
session
This patch makes use of the 'variables' parameter in XSLTParse4Display
method in the different places that it is used in the OPAC. It does by
passing this parameter with
anonymous_session => 1|0
The value will depend on the output from get_template_and_user (i.e. if
there's a returned borrowernumber).
A special case takes place in search results, as the call to
XSLTParse4Display happens in C4::Search::searchResults. So a new
parameter 'xslt_variables' is added to it.
To test:
1. Apply the [DO NOT PUSH] patch
2. Open the OPAC in your browser
3. Try detail pages, search results, tags and shelves pages with or
without an active session
=> FAIL: It always says (somewhere) 'Anonymous session: Yes'
4. Apply this patch, restart_all
5. Repeat 3
=> SUCCESS: It will tell the Yes/No correctly regarding anonymous
sessions!
6. Sign off :-D
Sponsored-by: Universidad ORT Uruguay
---
C4/Search.pm | 4 ++--
opac/opac-detail.pl | 11 ++++++++---
opac/opac-search.pl | 6 ++++--
opac/opac-shelves.pl | 14 +++++++++++---
opac/opac-tags.pl | 12 +++++++++---
5 files changed, 34 insertions(+), 13 deletions(-)
diff --git a/C4/Search.pm b/C4/Search.pm
index a10e50f2b6..0ab24a5ff8 100644
--- a/C4/Search.pm
+++ b/C4/Search.pm
@@ -1677,7 +1677,7 @@ Format results in a form suitable for passing to the template
# IMO this subroutine is pretty messy still -- it's responsible for
# building the HTML output for the template
sub searchResults {
- my ( $search_context, $searchdesc, $hits, $results_per_page, $offset, $scan, $marcresults ) = @_;
+ my ( $search_context, $searchdesc, $hits, $results_per_page, $offset, $scan, $marcresults, $xslt_variables ) = @_;
my $dbh = C4::Context->dbh;
my @newresults;
@@ -2087,7 +2087,7 @@ sub searchResults {
# XSLT processing of some stuff
# we fetched the sysprefs already before the loop through all retrieved record!
if (!$scan && $xslfile) {
- $oldbiblio->{XSLTResultsRecord} = XSLTParse4Display($oldbiblio->{biblionumber}, $marcrecord, $xslsyspref, 1, \@hiddenitems, $sysxml, $xslfile, $lang);
+ $oldbiblio->{XSLTResultsRecord} = XSLTParse4Display($oldbiblio->{biblionumber}, $marcrecord, $xslsyspref, 1, \@hiddenitems, $sysxml, $xslfile, $lang, $xslt_variables);
}
# if biblio level itypes are used and itemtype is notforloan, it can't be reserved either
diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl
index f1100878bd..c62ec7a743 100755
--- a/opac/opac-detail.pl
+++ b/opac/opac-detail.pl
@@ -170,11 +170,16 @@ my $lang = $xslfile ? C4::Languages::getlanguage() : undef;
my $sysxml = $xslfile ? C4::XSLT::get_xslt_sysprefs() : undef;
if ( $xslfile ) {
+
+ my $variables = {
+ anonymous_session => ($borrowernumber) ? 0 : 1
+ };
+
$template->param(
XSLTBloc => XSLTParse4Display(
- $biblionumber, $record, "OPACXSLTDetailsDisplay",
- 1, undef, $sysxml, $xslfile, $lang
- )
+ $biblionumber, $record, "OPACXSLTDetailsDisplay", 1, undef,
+ $sysxml, $xslfile, $lang, $variables
+ )
);
}
diff --git a/opac/opac-search.pl b/opac/opac-search.pl
index 01887f283a..54655d8b23 100755
--- a/opac/opac-search.pl
+++ b/opac/opac-search.pl
@@ -650,6 +650,8 @@ if (C4::Context->preference('OpacHiddenItemsExceptions')){
$search_context->{'category'} = $patron ? $patron->categorycode : q{};
}
+my $variables = { anonymous_session => ($borrowernumber) ? 0 : 1 };
+
for (my $i=0;$i<@servers;$i++) {
my $server = $servers[$i];
if ($server && $server =~/biblioserver/) { # this is the local bibliographic server
@@ -662,12 +664,12 @@ for (my $i=0;$i<@servers;$i++) {
# we want as specified by $offset and $results_per_page,
# we need to set the offset parameter of searchResults to 0
my @group_results = searchResults( $search_context, $query_desc, $group->{'group_count'},$results_per_page, 0, $scan,
- $group->{"RECORDS"});
+ $group->{"RECORDS"}, $variables);
push @newresults, { group_label => $group->{'group_label'}, GROUP_RESULTS => \@group_results };
}
} else {
@newresults = searchResults( $search_context, $query_desc, $hits, $results_per_page, $offset, $scan,
- $results_hashref->{$server}->{"RECORDS"});
+ $results_hashref->{$server}->{"RECORDS"}, $variables);
}
$hits = 0 unless @newresults;
diff --git a/opac/opac-shelves.pl b/opac/opac-shelves.pl
index c0140c7a75..e2ac9aafc8 100755
--- a/opac/opac-shelves.pl
+++ b/opac/opac-shelves.pl
@@ -316,9 +316,17 @@ if ( $op eq 'view' ) {
});
$record_processor->process($record);
- if ( $xslfile ) {
- $this_item->{XSLTBloc} = XSLTParse4Display( $biblionumber, $record, "OPACXSLTListsDisplay",
- 1, undef, $sysxml, $xslfile, $lang);
+ if ($xslfile) {
+ my $variables = {
+ anonymous_session => ($loggedinuser) ? 0 : 1
+ };
+ $this_item->{XSLTBloc} = XSLTParse4Display(
+ $biblionumber, $record,
+ "OPACXSLTListsDisplay", 1,
+ undef, $sysxml,
+ $xslfile, $lang,
+ $variables
+ );
}
my $marcflavour = C4::Context->preference("marcflavour");
diff --git a/opac/opac-tags.pl b/opac/opac-tags.pl
index 39e756a3cd..b125f8c2f6 100755
--- a/opac/opac-tags.pl
+++ b/opac/opac-tags.pl
@@ -284,10 +284,16 @@ if ($loggedinuser) {
my $lang = $xslfile ? C4::Languages::getlanguage() : undef;
my $sysxml = $xslfile ? C4::XSLT::get_xslt_sysprefs() : undef;
- if ( $xslfile ) {
+ if ($xslfile) {
+ my $variables = {
+ anonymous_session => ($loggedinuser) ? 0 : 1
+ };
$tag->{XSLTBloc} = XSLTParse4Display(
- $tag->{ biblionumber }, $record, "OPACXSLTResultsDisplay",
- 1, $hidden_items, $sysxml, $xslfile, $lang
+ $tag->{biblionumber}, $record,
+ "OPACXSLTResultsDisplay", 1,
+ $hidden_items, $sysxml,
+ $xslfile, $lang,
+ $variables
);
}
--
2.26.2