Bugzilla – Attachment 179861 Details for
Bug 17385
Add custom export formats for bibliographic records
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 17385: Add custom export XSLT
Bug-17385-Add-custom-export-XSLT.patch (text/plain), 28.92 KB, created by
Shi Yao Wang
on 2025-03-28 18:53:07 UTC
(
hide
)
Description:
Bug 17385: Add custom export XSLT
Filename:
MIME Type:
Creator:
Shi Yao Wang
Created:
2025-03-28 18:53:07 UTC
Size:
28.92 KB
patch
obsolete
>From f5f50baf62a407169ff4368344d75f8de1a27535 Mon Sep 17 00:00:00 2001 >From: David Bourgault <david.bourgault@inlibro.com> >Date: Tue, 26 Sep 2017 10:17:06 -0400 >Subject: [PATCH] Bug 17385: Add custom export XSLT > >Rebase > >Signed-off-by: David Nind <david@davidnind.com> >--- > C4/XSLT.pm | 27 +++++++- > basket/basket.pl | 4 ++ > basket/downloadcart.pl | 8 ++- > catalogue/detail.pl | 3 + > catalogue/export.pl | 16 +++++ > .../prog/en/includes/cat-toolbar.inc | 3 + > .../en/includes/virtualshelves-toolbar.inc | 3 + > .../en/modules/admin/preferences/opac.pref | 1 + > .../prog/en/modules/basket/basket.tt | 3 + > .../prog/en/modules/catalogue/detail.tt | 3 + > .../modules/virtualshelves/downloadshelf.tt | 3 + > .../biblioexport/MARC21_simple_export.xsl | 62 +++++++++++++++++++ > .../en/includes/opac-detail-sidebar.inc | 17 +++-- > .../bootstrap/en/modules/opac-downloadcart.tt | 3 + > .../en/modules/opac-downloadshelf.tt | 3 + > .../biblioexport/MARC21_simple_export.xsl | 62 +++++++++++++++++++ > opac/opac-detail.pl | 3 + > opac/opac-downloadcart.pl | 10 ++- > opac/opac-downloadshelf.pl | 12 +++- > opac/opac-export.pl | 10 +++ > virtualshelves/downloadshelf.pl | 9 ++- > virtualshelves/shelves.pl | 1 + > 22 files changed, 252 insertions(+), 14 deletions(-) > create mode 100644 koha-tmpl/intranet-tmpl/prog/en/xslt/biblioexport/MARC21_simple_export.xsl > create mode 100644 koha-tmpl/opac-tmpl/bootstrap/en/xslt/biblioexport/MARC21_simple_export.xsl > >diff --git a/C4/XSLT.pm b/C4/XSLT.pm >index 6f7d686d6b..14b805adad 100644 >--- a/C4/XSLT.pm >+++ b/C4/XSLT.pm >@@ -32,6 +32,10 @@ use Koha::RecordProcessor; > use Koha::XSLT::Base; > use Koha::Libraries; > use Koha::Recalls; >+use XML::LibXML; >+use Encode; >+use vars qw(@ISA @EXPORT); >+ > > my $engine; #XSLT Handler object > >@@ -43,6 +47,7 @@ BEGIN { > @EXPORT_OK = qw( > buildKohaItemsNamespace > XSLTParse4Display >+ &CustomXSLTExportList > ); > $engine = Koha::XSLT::Base->new( { do_not_return_source => 1 } ); > } >@@ -85,6 +90,12 @@ sub _get_best_default_xslt_filename { > return $xslfilename; > } > >+=head2 get_xslt_sysprefs >+ >+ returns XML xslt sysprefs. >+ >+=cut >+ > sub get_xslt_sysprefs { > my $sysxml = "<sysprefs>\n"; > foreach my $syspref ( >@@ -125,7 +136,21 @@ sub get_xsl_filename { > > my $xslfilename = C4::Context->preference($xslsyspref) || "default"; > >- if ( $xslfilename =~ /^\s*"?default"?\s*$/i ) { >+ if ($xslsyspref eq "XSLTCustomExport") { >+ my $dir; >+ $dir = C4::Context->config('intrahtdocs') . >+ '/' . C4::Context->preference("template") . >+ '/' . C4::Languages::getlanguage() . >+ '/xslt/biblioexport'; >+ $xslfilename = $dir . "/" . $xslfilename; >+ } elsif ($xslsyspref eq "OPACXSLTCustomExport") { >+ my $dir; >+ $dir = C4::Context->config('opachtdocs') . >+ '/' . C4::Context->preference("opacthemes") . >+ '/' . C4::Languages::getlanguage() . >+ '/xslt/biblioexport'; >+ $xslfilename = $dir . "/" . $xslfilename; >+ } elsif ( $xslfilename =~ /^\s*"?default"?\s*$/i ) { > > my ( $htdocs, $theme, $xslfile ); > >diff --git a/basket/basket.pl b/basket/basket.pl >index d8c633aa95..0d759eda0f 100755 >--- a/basket/basket.pl >+++ b/basket/basket.pl >@@ -18,6 +18,7 @@ > use Modern::Perl; > use CGI qw ( -utf8 ); > use C4::Koha; >+ > use C4::Biblio qw( > GetMarcSeries > GetMarcSubjects >@@ -25,6 +26,8 @@ use C4::Biblio qw( > ); > use C4::Auth qw( get_template_and_user ); > use C4::Output qw( output_html_with_http_headers ); >+use C4::XSLT; >+ > > use Koha::AuthorisedValues; > use Koha::Biblios; >@@ -109,6 +112,7 @@ my $resultsarray = \@results; > $template->param( > BIBLIO_RESULTS => $resultsarray, > csv_profiles => Koha::CsvProfiles->search( { type => 'marc', used_for => 'export_records' } ), >+ xsl_exports => CustomXSLTExportList(), > bib_list => $bib_list, > ); > >diff --git a/basket/downloadcart.pl b/basket/downloadcart.pl >index 94a6df8363..1ee2936509 100755 >--- a/basket/downloadcart.pl >+++ b/basket/downloadcart.pl >@@ -26,6 +26,7 @@ use C4::Auth qw( get_template_and_user ); > use C4::Output qw( output_html_with_http_headers ); > use C4::Record; > use C4::Ris qw( marc2ris ); >+use C4::XSLT; > > use Koha::CsvProfiles; > use Koha::Biblios; >@@ -77,11 +78,15 @@ if ( $bib_list && $format ) { > } elsif ( $format eq 'bibtex' ) { > $output .= marc2bibtex( $record, $biblionumber ); > } >+ elsif ($format =~ /^xsl\.(.*)$/) { >+ $output .= XSLTParse4Display($biblio, $record, 'XSLTCustomExport', 1, undef, , '', $1, ''); >+ } > } > } > > # If it was a CSV export we change the format after the export so the file extension is fine >- $format = "csv" if ( $format =~ m/^\d+$/ ); >+ $format = "csv" if ( $format =~ m/^\d+$/ ); >+ $format = "html" if ( $format =~ /^xsl\./ ); > > print $query->header( > -type => 'application/octet-stream', >@@ -92,6 +97,7 @@ if ( $bib_list && $format ) { > > } else { > $template->param( csv_profiles => Koha::CsvProfiles->search( { type => 'marc', used_for => 'export_records' } ) ); >+ $template->param( xsl_exports => CustomXSLTExportList() ); > $template->param( bib_list => $bib_list ); > output_html_with_http_headers $query, $cookie, $template->output; > } >diff --git a/catalogue/detail.pl b/catalogue/detail.pl >index d7d13b2f1d..25d76a297f 100755 >--- a/catalogue/detail.pl >+++ b/catalogue/detail.pl >@@ -86,6 +86,9 @@ if ( C4::Context->config('enable_plugins') ) { > } > > my $activetab = $query->param('activetab'); >+##### ADD CUSTOM XSLT >+$template->param(filesOptions => CustomXSLTExportList(0)); >+ > my $biblionumber = $query->param('biblionumber'); > $biblionumber = HTML::Entities::encode($biblionumber); > my $biblio = Koha::Biblios->find($biblionumber); >diff --git a/catalogue/export.pl b/catalogue/export.pl >index cd81ec3b53..21d51a8f26 100755 >--- a/catalogue/export.pl >+++ b/catalogue/export.pl >@@ -6,6 +6,8 @@ use C4::Auth qw( get_template_and_user ); > use C4::Output; > use CGI qw ( -utf8 ); > use C4::Ris qw( marc2ris ); >+use C4::XSLT; >+ > > my $query = CGI->new; > my ( $template, $loggedinuser, $cookie ) = get_template_and_user( >@@ -79,4 +81,18 @@ if ( $op eq "export" ) { > ); > print $marc; > } >+} elsif ( $op eq "exportxsl" ) { >+ my $biblionumber = $query->param("bib"); >+ if ($biblionumber){ >+ my $xslFile = $query->param("file"); >+ my $marc = GetMarcBiblio( { biblionumber => $biblionumber, embed_items => 1 } ); >+ my $format=$query->param("format")||'txt'; >+ my @hiddenitems; >+ >+ $marc = XSLTParse4Display($biblionumber, $marc, 'XSLTCustomExport', 1, \@hiddenitems, '', $xslFile,''); >+ print $query->header( >+ -type => 'application/octet-stream', >+ -attachment=>"bib-$biblionumber.$format"); >+ print $marc; >+ } > } >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc >index 2b033e40f6..2b1d5d8bb3 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc >@@ -190,6 +190,9 @@ > <li><a class="dropdown-item" href="/cgi-bin/koha/catalogue/export.pl?format=marcstd&op=export&bib=[% biblionumber | uri %]">MARC (Unicode/UTF-8, Standard)</a></li> > <li><a class="dropdown-item" href="/cgi-bin/koha/catalogue/export.pl?format=mods&op=export&bib=[% biblionumber | uri %]">MODS (XML)</a></li> > <li><a class="dropdown-item" href="/cgi-bin/koha/catalogue/export.pl?format=ris&op=export&bib=[% biblionumber | uri %]">RIS</a></li> >+ [% FOREACH filesOption IN filesOptions %] >+ <li><a href="/cgi-bin/koha/catalogue/export.pl?format=[% filesOption.format | uri %]&op=exportxsl&file=[% filesOption.value | uri %]&bib=[% biblionumber | uri %]">XSL - [% filesOption.filename | html %]</a></li> >+ [% END %] > </ul> > </div> > >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/virtualshelves-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/virtualshelves-toolbar.inc >index f50f614dd6..4466f4a48b 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/virtualshelves-toolbar.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/virtualshelves-toolbar.inc >@@ -41,6 +41,9 @@ > [% FOREACH csv_profile IN csv_profiles %] > <li><a class="dropdown-item" href="/cgi-bin/koha/virtualshelves/downloadshelf.pl?format=[% csv_profile.export_format_id | uri %]&shelfid=[% shelf.shelfnumber | uri %]">CSV - [% csv_profile.profile | html %]</a></li> > [% END %] >+ [% FOREACH xsl_export IN xsl_exports %] >+ <li><a href="/cgi-bin/koha/virtualshelves/downloadshelf.pl?format=xsl.[% xsl_export.value | uri %]&shelfid=[% shelf.shelfnumber | uri %]">XSL - [% xsl_export.filename | html %]</a></li> >+ [% END %] > </ul> > </div> > <div class="btn-group" >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref >index ec83b17a01..ef3ffdac08 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref >@@ -306,6 +306,7 @@ OPAC: > mods: MODS > ris: RIS > isbd: ISBD >+ custom: XSL - Simple Export > - > - pref: OpacSeparateHoldings > choices: >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt >index 8e45efd9b4..bf3d3f47c7 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt >@@ -59,6 +59,9 @@ > [% FOREACH csv_profile IN csv_profiles %] > <li><a class="dropdown-item" href="/cgi-bin/koha/basket/downloadcart.pl?format=[% csv_profile.export_format_id | uri %]&bib_list=[% bib_list | uri %]">CSV - [% csv_profile.profile | html %]</a></li> > [% END %] >+ [% FOREACH xsl_export IN xsl_exports %] >+ <li><a href="/cgi-bin/koha/basket/downloadcart.pl?format=xsl.[% xsl_export.value | uri %]&bib_list=[% bib_list | uri %]">XSL - [% xsl_export.filename | html %]</a></li> >+ [% END %] > </ul> > </div> > <a class="btn btn-default" href="basket.pl" id="print_cart"><i class="fa fa-print"></i> Print</a> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt >index 801f7dad1e..da5850016a 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt >@@ -982,6 +982,9 @@ > <option value="marcxml">MARCXML</option> > <option value="marc8">MARC (non-Unicode/MARC-8)</option> > <option value="utf8">MARC (Unicode/UTF-8)</option> >+ [% FOREACH filesOption IN filesOptions %] >+ <option value="[% filesOption.value | html %]">XSL -[% filesOption.filename | html %]</option> >+ [% END %] > </select> > <input type="submit" name="save" class="btn btn-primary" value="Download record" /> > </td> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/downloadshelf.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/downloadshelf.tt >index d0f9584492..b967803b2a 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/downloadshelf.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/downloadshelf.tt >@@ -42,6 +42,9 @@ > [% FOREACH csv_profile IN csv_profiles %] > <option value="[% csv_profile.export_format_id | html %]">CSV - [% csv_profile.profile | html %]</option> > [% END %] >+ [% FOREACH xsl_export IN xsl_exports %] >+ <option value="xsl.[% xsl_export.value | html %]">XSL - [% xsl_export.filename | html %]</option> >+ [% END %] > </select> > </li></ol > > >diff --git a/koha-tmpl/intranet-tmpl/prog/en/xslt/biblioexport/MARC21_simple_export.xsl b/koha-tmpl/intranet-tmpl/prog/en/xslt/biblioexport/MARC21_simple_export.xsl >new file mode 100644 >index 0000000000..faad19d521 >--- /dev/null >+++ b/koha-tmpl/intranet-tmpl/prog/en/xslt/biblioexport/MARC21_simple_export.xsl >@@ -0,0 +1,62 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<xsl:stylesheet version="1.0" >+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >+ xmlns:marc="http://www.loc.gov/MARC21/slim" >+ title="Simple Export"> >+<xsl:output method="html" encoding="UTF-8"/> >+ >+ <xsl:template match="/"> >+ <xsl:apply-templates/> >+ </xsl:template> >+ >+ <xsl:template match="marc:record"> >+ <p> >+ <xsl:if test="marc:datafield[@tag=245]"> >+ <xsl:for-each select="marc:datafield[@tag=245]"> >+ <xsl:value-of select="marc:subfield[@code='a']"/> >+ <xsl:if test="marc:subfield[@code='b']"> >+ <xsl:text> </xsl:text> >+ <xsl:value-of select="marc:subfield[@code='b']"></xsl:value-of> >+ </xsl:if> >+ <xsl:if test="marc:subfield[@code='c']"> >+ <xsl:text> </xsl:text> >+ <xsl:value-of select="marc:subfield[@code='c']"></xsl:value-of> >+ </xsl:if> >+ </xsl:for-each> >+ </xsl:if> >+ <xsl:if test="marc:datafield[@tag=260]"> >+ <br/> >+ <xsl:for-each select="marc:datafield[@tag=260]"> >+ <xsl:if test="marc:subfield[@code='a']"> >+ <xsl:value-of select="marc:subfield[@code='a']"/> >+ </xsl:if> >+ <xsl:if test="marc:subfield[@code='b']"> >+ <xsl:text> </xsl:text> >+ <xsl:value-of select="marc:subfield[@code='b']"></xsl:value-of> >+ </xsl:if> >+ <xsl:if test="marc:subfield[@code='c']"> >+ <xsl:text> </xsl:text> >+ <xsl:value-of select="marc:subfield[@code='c']"></xsl:value-of> >+ </xsl:if> >+ </xsl:for-each> >+ </xsl:if> >+ <xsl:if test="marc:datafield[@tag=264]"> >+ <br/> >+ <xsl:for-each select="marc:datafield[@tag=264]"> >+ <xsl:if test="marc:subfield[@code='a']"> >+ <xsl:value-of select="marc:subfield[@code='a']"/> >+ </xsl:if> >+ <xsl:if test="marc:subfield[@code='b']"> >+ <xsl:text> </xsl:text> >+ <xsl:value-of select="marc:subfield[@code='b']"></xsl:value-of> >+ </xsl:if> >+ <xsl:if test="marc:subfield[@code='c']"> >+ <xsl:text> </xsl:text> >+ <xsl:value-of select="marc:subfield[@code='c']"></xsl:value-of> >+ </xsl:if> >+ </xsl:for-each> >+ </xsl:if> >+ </p> >+ </xsl:template> >+ >+</xsl:stylesheet> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc >index 03e74f148c..82e824a827 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/opac-detail-sidebar.inc >@@ -94,12 +94,12 @@ > <div id="export"> > <div class="dropdown"> > <a id="format" class="btn btn-link btn-lg dropdown-toggle" data-bs-toggle="dropdown" href="#"><i class="fa fa-fw fa-download" aria-hidden="true"></i> Save record <b class="caret"></b></a> >- <div class="dropdown-menu dropdown-menu-end" aria-labelledby="format"> >+ <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="format"> > [% FOREACH option IN export_options %] > [% IF option == 'dc' %] >- <a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#exportModal_">Dublin Core</a> >- [% ELSE %] >- <a class="dropdown-item" href="/cgi-bin/koha/opac-export.pl?op=export&bib=[% biblio.biblionumber | html %]&format=[% option | html %]"> >+ <li><a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#exportModal_">Dublin Core</a></li> >+ [% ELSIF option != 'custom' %] >+ <li><a class="dropdown-item" href="/cgi-bin/koha/opac-export.pl?op=export&bib=[% biblio.biblionumber | html %]&format=[% option | html %]"> > [% SWITCH option %] > [% CASE 'bibtex' %] > <span>BIBTEX</span> >@@ -120,10 +120,15 @@ > [% CASE 'isbd' %] > <span>ISBD</span> > [% END %] >- </a> >+ </a> >+ </li> >+ [% ELSE %] >+ [% FOREACH filesOption IN filesOptions %] >+ <li><a role="menuitem" href="/cgi-bin/koha/opac-export.pl?format=[% filesOption.format | html %]&op=exportxsl&file=[% filesOption.value | html %]&bib=[% biblionumber | html %]">XSL - [% filesOption.filename | html %]</a></li> >+ [% END %] > [% END %] > [% END %] >- </div> >+ </ul> > <!-- /.dropdown-menu --> > </div> > <!-- /.dropdown --> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-downloadcart.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-downloadcart.tt >index b6fcab2ce8..16a3c95f2f 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-downloadcart.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-downloadcart.tt >@@ -21,6 +21,9 @@ > [% FOREACH csv_profile IN csv_profiles %] > <option value="[% csv_profile.export_format_id | html %]">CSV - [% csv_profile.profile | html %]</option> > [% END %] >+ [% FOREACH xsl_export IN xsl_exports %] >+ <option value="xsl.[% xsl_export.value | html %]">XSL - [% xsl_export.filename | html %]</option> >+ [% END %] > </select> > <fieldset class="action"> > <input type="hidden" name="bib_list" value="[% bib_list | html %]" /> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-downloadshelf.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-downloadshelf.tt >index 1c9138718e..fa0ccdee30 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-downloadshelf.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-downloadshelf.tt >@@ -61,6 +61,9 @@ > [% FOREACH csv_profile IN csv_profiles %] > <option value="[% csv_profile.export_format_id | html %]">CSV - [% csv_profile.profile | html %]</option> > [% END %] >+ [% FOREACH xsl_export IN xsl_exports %] >+ <option value="xsl.[% xsl_export.value | html %]">XSL - [% xsl_export.filename | html %]</option> >+ [% END %] > </select> > <span class="required">Required</span> > </fieldset> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/xslt/biblioexport/MARC21_simple_export.xsl b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/biblioexport/MARC21_simple_export.xsl >new file mode 100644 >index 0000000000..faad19d521 >--- /dev/null >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/xslt/biblioexport/MARC21_simple_export.xsl >@@ -0,0 +1,62 @@ >+<?xml version="1.0" encoding="UTF-8"?> >+<xsl:stylesheet version="1.0" >+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >+ xmlns:marc="http://www.loc.gov/MARC21/slim" >+ title="Simple Export"> >+<xsl:output method="html" encoding="UTF-8"/> >+ >+ <xsl:template match="/"> >+ <xsl:apply-templates/> >+ </xsl:template> >+ >+ <xsl:template match="marc:record"> >+ <p> >+ <xsl:if test="marc:datafield[@tag=245]"> >+ <xsl:for-each select="marc:datafield[@tag=245]"> >+ <xsl:value-of select="marc:subfield[@code='a']"/> >+ <xsl:if test="marc:subfield[@code='b']"> >+ <xsl:text> </xsl:text> >+ <xsl:value-of select="marc:subfield[@code='b']"></xsl:value-of> >+ </xsl:if> >+ <xsl:if test="marc:subfield[@code='c']"> >+ <xsl:text> </xsl:text> >+ <xsl:value-of select="marc:subfield[@code='c']"></xsl:value-of> >+ </xsl:if> >+ </xsl:for-each> >+ </xsl:if> >+ <xsl:if test="marc:datafield[@tag=260]"> >+ <br/> >+ <xsl:for-each select="marc:datafield[@tag=260]"> >+ <xsl:if test="marc:subfield[@code='a']"> >+ <xsl:value-of select="marc:subfield[@code='a']"/> >+ </xsl:if> >+ <xsl:if test="marc:subfield[@code='b']"> >+ <xsl:text> </xsl:text> >+ <xsl:value-of select="marc:subfield[@code='b']"></xsl:value-of> >+ </xsl:if> >+ <xsl:if test="marc:subfield[@code='c']"> >+ <xsl:text> </xsl:text> >+ <xsl:value-of select="marc:subfield[@code='c']"></xsl:value-of> >+ </xsl:if> >+ </xsl:for-each> >+ </xsl:if> >+ <xsl:if test="marc:datafield[@tag=264]"> >+ <br/> >+ <xsl:for-each select="marc:datafield[@tag=264]"> >+ <xsl:if test="marc:subfield[@code='a']"> >+ <xsl:value-of select="marc:subfield[@code='a']"/> >+ </xsl:if> >+ <xsl:if test="marc:subfield[@code='b']"> >+ <xsl:text> </xsl:text> >+ <xsl:value-of select="marc:subfield[@code='b']"></xsl:value-of> >+ </xsl:if> >+ <xsl:if test="marc:subfield[@code='c']"> >+ <xsl:text> </xsl:text> >+ <xsl:value-of select="marc:subfield[@code='c']"></xsl:value-of> >+ </xsl:if> >+ </xsl:for-each> >+ </xsl:if> >+ </p> >+ </xsl:template> >+ >+</xsl:stylesheet> >diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl >index 9cd2364f84..92e37a28d1 100755 >--- a/opac/opac-detail.pl >+++ b/opac/opac-detail.pl >@@ -102,6 +102,9 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( > } > ); > >+#### ADD CUSTOM XSLT >+$template->param(filesOptions => CustomXSLTExportList(1)); >+ > my $patron = Koha::Patrons->find($borrowernumber); > > my $biblio = Koha::Biblios->find($biblionumber); >diff --git a/opac/opac-downloadcart.pl b/opac/opac-downloadcart.pl >index 4d4f4b71ec..b96fe9c021 100755 >--- a/opac/opac-downloadcart.pl >+++ b/opac/opac-downloadcart.pl >@@ -28,6 +28,8 @@ use C4::Output qw( output_html_with_http_headers ); > use C4::Record; > use C4::Ris qw( marc2ris ); > use Koha::Biblios; >+use C4::XSLT; >+ > use Koha::CsvProfiles; > use Koha::RecordProcessor; > >@@ -114,11 +116,15 @@ if ( $bib_list && $format ) { > $extension = "txt"; > $type = "text/plain"; > } >+ elsif ($format =~ /^xsl\.(.*)$/) { >+ $output .= XSLTParse4Display($biblio, $record, 'OPACXSLTCustomExport', 1, undef, undef, $1, ''); >+ } > } > } > > # If it was a CSV export we change the format after the export so the file extension is fine >- $format = "csv" if ( $format =~ m/^\d+$/ ); >+ $format = "csv" if ( $format =~ m/^\d+$/ ); >+ $format = "html" if ( $format =~ /^xsl\./ ); > > print $query->header( > -type => ($type) ? $type : 'application/octet-stream', >@@ -138,5 +144,7 @@ if ( $bib_list && $format ) { > ), > bib_list => $bib_list, > ); >+ $template->param(bib_list => $bib_list); >+ $template->param(xsl_exports => CustomXSLTExportList()); > output_html_with_http_headers $query, $cookie, $template->output; > } >diff --git a/opac/opac-downloadshelf.pl b/opac/opac-downloadshelf.pl >index 41f2cac3a5..7d4a9e43b0 100755 >--- a/opac/opac-downloadshelf.pl >+++ b/opac/opac-downloadshelf.pl >@@ -27,6 +27,8 @@ use C4::Output qw( output_html_with_http_headers ); > use C4::Record; > use C4::Ris qw( marc2ris ); > use Koha::Biblios; >+use C4::XSLT; >+ > use Koha::CsvProfiles; > use Koha::RecordProcessor; > use Koha::Virtualshelves; >@@ -121,13 +123,15 @@ if ( $shelf and $shelf->can_be_viewed($borrowernumber) ) { > ); > $extension = "txt"; > $type = "text/plain"; >- } >+ }elsif ($format =~ /^xsl\.(.*)$/){ >+ $output .= XSLTParse4Display($biblionumber, $record, 'XSLTCustomExport', 1, undef, undef, $1, '', 1); >+ } > } > } > > # If it was a CSV export we change the format after the export so the file extension is fine >- $format = "csv" if ( $format =~ m/^\d+$/ ); >- >+ $format = "csv" if ( $format =~ m/^\d+$/ ); >+ $format = "html" if ( $format =~ /^xsl\./ ); > print $query->header( > -type => ($type) ? $type : 'application/octet-stream', > -'Content-Transfer-Encoding' => 'binary', >@@ -153,6 +157,8 @@ if ( $shelf and $shelf->can_be_viewed($borrowernumber) ) { > ), > shelf => $shelf, > ); >+ $template->param(xsl_exports => CustomXSLTExportList()); >+ $template->param( shelf => $shelf ); > output_html_with_http_headers $query, $cookie, $template->output; > } > >diff --git a/opac/opac-export.pl b/opac/opac-export.pl >index 3cb829b453..f58b11f7a6 100755 >--- a/opac/opac-export.pl >+++ b/opac/opac-export.pl >@@ -30,6 +30,8 @@ use CGI qw ( -utf8 ); > use C4::Auth; > use C4::Ris qw( marc2ris ); > use Koha::Biblios; >+use C4::XSLT; >+ > use Koha::RecordProcessor; > > use List::MoreUtils qw(none any); >@@ -151,6 +153,14 @@ if ( $format =~ /endnote/ ) { > } > ); > $format = 'isbd'; >+} elsif ($format =~ /html/ ) { >+ if ($biblionumber){ >+ my $xslFile = $query->param("file"); >+ $marc = C4::Biblio::GetMarcBiblio({biblionumber => $biblionumber}); >+ my @hiddenitems; >+ >+ $marc = XSLTParse4Display($biblionumber, $marc, 'OPACXSLTCustomExport', 1, \@hiddenitems, undef, $xslFile, undef); >+ } > } else { > $error = "Format $format is not supported."; > } >diff --git a/virtualshelves/downloadshelf.pl b/virtualshelves/downloadshelf.pl >index 9e03782b19..256a6c8bd3 100755 >--- a/virtualshelves/downloadshelf.pl >+++ b/virtualshelves/downloadshelf.pl >@@ -25,6 +25,8 @@ use C4::Auth qw( get_template_and_user ); > use C4::Output qw( output_html_with_http_headers ); > use C4::Record; > use C4::Ris qw( marc2ris ); >+use C4::XSLT; >+ > > use Koha::Biblios; > use Koha::CsvProfiles; >@@ -77,12 +79,15 @@ if ( $shelfid && $format ) { > } elsif ( $format eq 'bibtex' ) { > $output .= marc2bibtex( $record, $biblionumber ); > } >+ elsif ($format =~ /^xsl\.(.*)$/){ >+ $output .= XSLTParse4Display($biblionumber, $record, 'XSLTCustomExport', 1, undef, ,'',$1,''); >+ } > } > } > > # If it was a CSV export we change the format after the export so the file extension is fine >- $format = "csv" if ( $format =~ m/^\d+$/ ); >- >+ $format = "csv" if ( $format =~ m/^\d+$/ ); >+ $format = "html" if ( $format =~ /^xsl\./ ); > print $query->header( > -type => 'application/octet-stream', > -'Content-Transfer-Encoding' => 'binary', >diff --git a/virtualshelves/shelves.pl b/virtualshelves/shelves.pl >index f51f7d064b..3145647878 100755 >--- a/virtualshelves/shelves.pl >+++ b/virtualshelves/shelves.pl >@@ -434,6 +434,7 @@ $template->param( > csv_profiles => [ Koha::CsvProfiles->search( { type => 'marc', used_for => 'export_records' } )->as_list ], > allow_transfer => $allow_transfer, > allow_create_public_lists => $allow_create_public_lists, >+ xsl_exports => CustomXSLTExportList() > ); > > output_html_with_http_headers $query, $cookie, $template->output; >-- >2.43.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 17385
:
55961
|
58308
|
64033
|
64034
|
67357
|
67579
|
74660
|
74661
|
79055
|
79056
|
80675
|
81385
|
81386
|
84388
|
84389
|
84390
|
86875
|
86876
|
86877
|
86878
|
86879
|
86880
|
97076
|
97101
|
97102
|
97103
|
97104
|
97105
|
100289
|
100290
|
100291
|
100292
|
100293
|
100663
|
100670
|
100671
|
100672
|
100673
|
100674
|
100675
|
112671
|
112672
|
112673
|
112674
|
112675
|
112676
|
112677
|
112678
|
112679
|
112680
|
112681
|
112682
|
112956
|
112957
|
112958
|
112959
|
130283
|
130284
|
130285
|
130286
|
130287
|
130691
|
130692
|
130693
|
130694
|
130695
|
131492
|
132488
|
132489
|
132490
|
132491
|
132492
|
132493
|
132581
|
133498
|
133499
|
133500
|
133501
|
133502
|
133503
|
133504
|
138031
|
138032
|
138033
|
138034
|
138035
|
138036
|
138037
|
138082
|
138083
|
138084
|
138085
|
138086
|
138087
|
138088
|
138132
|
139277
|
139278
|
139279
|
139280
|
139281
|
139282
|
139283
|
139284
|
141157
|
141158
|
141159
|
141160
|
141161
|
141162
|
141163
|
141164
|
144335
|
144336
|
144380
|
144384
|
151095
|
151096
|
151097
|
151098
|
151099
|
151102
|
151103
|
151104
|
151105
|
151106
|
151377
|
151378
|
151379
|
151380
|
151381
|
154379
|
154380
|
154381
|
154382
|
154383
|
156815
|
156816
|
156817
|
156818
|
156819
|
159142
|
159143
|
159144
|
159145
|
159146
|
159147
|
159148
|
163623
|
170014
|
170015
|
170016
|
170017
|
170018
|
170019
|
170026
|
170027
|
170028
|
170029
|
170030
|
170031
|
170983
|
170984
|
170985
|
170986
|
170987
|
170988
|
179861
|
179862
|
179863
|
179864
|
179865
|
179866
|
180225
|
180400
|
180599
|
181445
|
181446
|
181447
|
181448
|
181449
|
181450
|
181451
|
181452