From cb62690c5222eecf2e56fcad20b12211e0a1f069 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?= <f.demians@tamil.fr>
Date: Sun, 2 Nov 2014 08:59:30 +0100
Subject: [PATCH] Bug 13170 Remove of prog theme broke the OPAC's "view plain"
option for MARC details
In the OPAC if you view the MARC details for a title (and have
OPACXSLTDetailsDisplay enabled) there is a "view plain" link which displays the
output of opac-showmarc.pl. This is broken in master: fixed by this patch.
Note: Implemented with C4::XSLT::_get_best_default_xslt_filename() to keep code
orthogonal.
Test plan:
(1) Set OPACXSLTDetailsDisplay to default
(2) Do a search on OPAC, then display a specific biblio record
(3) Click on MARC view tab. Then click on 'view plain' link. Nothing is
displayed.
(4) Apply the patch. And refresh the MARC detail page.
(5) Click on 'view plain' link. Check that a plain text MARC record is
displayed.
---
C4/Templates.pm | 5 +++--
opac/opac-showmarc.pl | 28 ++++++++--------------------
2 files changed, 11 insertions(+), 22 deletions(-)
diff --git a/C4/Templates.pm b/C4/Templates.pm
index 3a3a65c..d53d1a8 100644
--- a/C4/Templates.pm
+++ b/C4/Templates.pm
@@ -288,14 +288,15 @@ sub themelanguage {
push @themes, $hardcoded_theme;
# Try to find first theme for the selected theme/lang, then for fallback/lang
+ my $where = $tmpl =~ /xsl$/ ? 'xslt' : 'modules';
for my $theme (@themes) {
- if ( -e "$htdocs/$theme/$lang/modules/$tmpl" ) {
+ if ( -e "$htdocs/$theme/$lang/$where/$tmpl" ) {
return ( $theme, $lang, uniq( \@themes ) );
}
}
# Otherwise return theme/'en', last resort fallback/'en'
for my $theme (@themes) {
- if ( -e "$htdocs/$theme/en/modules/$tmpl" ) {
+ if ( -e "$htdocs/$theme/en/$where/$tmpl" ) {
return ( $theme, 'en', uniq( \@themes ) );
}
}
diff --git a/opac/opac-showmarc.pl b/opac/opac-showmarc.pl
index 702fb1b..86be88f 100755
--- a/opac/opac-showmarc.pl
+++ b/opac/opac-showmarc.pl
@@ -31,6 +31,7 @@ use C4::Auth;
use C4::Biblio;
use C4::ImportBatch;
use C4::XSLT ();
+use C4::Templates;
my $input = new CGI;
my $biblionumber = $input->param('id');
@@ -52,26 +53,13 @@ if(!ref $record) {
}
if ($view eq 'card' || $view eq 'html') {
- my $xmlrecord= $importid? $record->as_xml(): GetXmlBiblio($biblionumber);
- my $xslfile;
- my $xslfilename;
- my $htdocs = C4::Context->config('opachtdocs');
- my $theme = C4::Context->preference("opacthemes");
- my $lang = C4::Languages::getlanguage($input);
-
- if ($view eq 'card'){
- $xslfile = "compact.xsl";
- }
- else { # must be html
- $xslfile = 'plainMARC.xsl';
- }
- $xslfilename = "$htdocs/$theme/$lang/xslt/$xslfile";
- $xslfilename = "$htdocs/$theme/en/xslt/$xslfile" unless ( $lang ne 'en' && -f $xslfilename );
- $xslfilename = "$htdocs/prog/$lang/xslt/$xslfile" unless ( -f $xslfile );
- $xslfilename = "$htdocs/prog/en/xslt/$xslfile" unless ( $lang ne 'en' && -f $xslfilename );
-
- my $newxmlrecord = C4::XSLT::engine->transform($xmlrecord, $xslfilename);
- print $input->header(-charset => 'UTF-8'), Encode::encode_utf8($newxmlrecord);
+ my $xml = $importid ? $record->as_xml(): GetXmlBiblio($biblionumber);
+ my $xsl = $view eq 'card' ? 'compact.xsl' : 'plainMARC.xsl';
+ my $htdocs = C4::Context->config('opachtdocs');
+ my ($theme, $lang) = C4::Templates::themelanguage($htdocs, $xsl, 'opac', $input);
+ $xsl = "$htdocs/$theme/$lang/xslt/$xsl";
+ print $input->header(-charset => 'UTF-8'),
+ Encode::encode_utf8(C4::XSLT::engine->transform($xml, $xsl));
}
else { #view eq marc
my ( $template, $loggedinuser, $cookie ) = get_template_and_user({
--
2.1.2