From e2b7d35de89ce0c392420338e920314fd99cee6a Mon Sep 17 00:00:00 2001 From: Hammat Wele Date: Wed, 11 Oct 2023 11:22:15 +0000 Subject: [PATCH] Bug 17385: Add custum export format option to the cart and the lists and fix tests for CustomXSLTExportList Signed-off-by: David Nind --- C4/XSLT.pm | 11 ++++++----- basket/basket.pl | 2 +- basket/downloadcart.pl | 12 ++++++++++-- catalogue/detail.pl | 2 +- catalogue/export.pl | 15 ++++++++++++--- .../prog/en/includes/virtualshelves-toolbar.inc | 2 +- .../prog/en/modules/basket/basket.tt | 2 +- .../en/includes/opac-detail-sidebar.inc | 13 ++++++------- .../bootstrap/en/modules/opac-basket.tt | 8 ++++++++ .../bootstrap/en/modules/opac-shelves.tt | 8 ++++++++ opac/opac-basket.pl | 2 ++ opac/opac-detail.pl | 3 +-- opac/opac-downloadcart.pl | 15 +++++++++++---- opac/opac-downloadshelf.pl | 16 ++++++++++++---- opac/opac-export.pl | 14 +++++++++++--- opac/opac-shelves.pl | 5 +++-- virtualshelves/downloadshelf.pl | 12 ++++++++++-- virtualshelves/shelves.pl | 2 +- 18 files changed, 105 insertions(+), 39 deletions(-) diff --git a/C4/XSLT.pm b/C4/XSLT.pm index 5b48c29e6c..ca0e09dc60 100644 --- a/C4/XSLT.pm +++ b/C4/XSLT.pm @@ -131,24 +131,24 @@ sub get_xslt_sysprefs { } sub get_xsl_filename { - my ($xslsyspref) = @_; + my ($xslsyspref, $xslfilename) = @_; my $lang = C4::Languages::getlanguage(); - my $xslfilename = C4::Context->preference($xslsyspref) || "default"; + my $xslfilename ||= C4::Context->preference($xslsyspref) || "default"; if ($xslsyspref eq "XSLTCustomExport") { my $dir; $dir = C4::Context->config('intrahtdocs') . '/' . C4::Context->preference("template") . - '/' . C4::Languages::getlanguage() . + '/' . $lang . '/xslt/biblioexport'; $xslfilename = $dir . "/" . $xslfilename; } elsif ($xslsyspref eq "OPACXSLTCustomExport") { my $dir; $dir = C4::Context->config('opachtdocs') . '/' . C4::Context->preference("opacthemes") . - '/' . C4::Languages::getlanguage() . + '/' . $lang . '/xslt/biblioexport'; $xslfilename = $dir . "/" . $xslfilename; } elsif ( $xslfilename =~ /^\s*"?default"?\s*$/i ) { @@ -205,11 +205,12 @@ sub XSLTParse4Display { my $variables = $params->{xslt_variables}; my $items_rs = $params->{items_rs}; my $interface = C4::Context->interface; + my $xslfilename = $params->{xslfilename}; die "Mandatory \$params->{xsl_syspref} was not provided, called with biblionumber $params->{biblionumber}" if not defined $params->{xsl_syspref}; - my $xslfilename = get_xsl_filename($xslsyspref); + my $xslfilename = get_xsl_filename($xslsyspref, $xslfilename); my $frameworkcode = GetFrameworkCode($biblionumber) || ''; my $record_processor = Koha::RecordProcessor->new( diff --git a/basket/basket.pl b/basket/basket.pl index 0d759eda0f..5aeb34544f 100755 --- a/basket/basket.pl +++ b/basket/basket.pl @@ -26,7 +26,7 @@ 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 C4::XSLT qw( CustomXSLTExportList ); use Koha::AuthorisedValues; diff --git a/basket/downloadcart.pl b/basket/downloadcart.pl index 1ee2936509..31ba82044b 100755 --- a/basket/downloadcart.pl +++ b/basket/downloadcart.pl @@ -26,7 +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 C4::XSLT qw( XSLTParse4Display ); use Koha::CsvProfiles; use Koha::Biblios; @@ -66,6 +66,7 @@ if ( $bib_list && $format ) { my $biblio = Koha::Biblios->find($biblionumber); my $record = $biblio->metadata_record( { embed_items => 1 } ); + my $xslFile = $query->param("file"); next unless $record; if ( $format eq 'iso2709' ) { @@ -79,7 +80,14 @@ if ( $bib_list && $format ) { $output .= marc2bibtex( $record, $biblionumber ); } elsif ($format =~ /^xsl\.(.*)$/) { - $output .= XSLTParse4Display($biblio, $record, 'XSLTCustomExport', 1, undef, , '', $1, ''); + $output .= XSLTParse4Display({ + biblionumber => $biblio, + record => $record, + xsl_syspref => 'XSLTCustomExport', + fix_amps => 1, + hidden_items => undef, + xslfilename => $xslFile + }); } } } diff --git a/catalogue/detail.pl b/catalogue/detail.pl index 25d76a297f..e01c62bac6 100755 --- a/catalogue/detail.pl +++ b/catalogue/detail.pl @@ -39,7 +39,7 @@ use C4::XISBN qw( get_xisbns ); use C4::External::Amazon qw( get_amazon_tld ); use C4::Search qw( z3950_search_args enabled_staff_search_views new_record_from_zebra ); use C4::Tags qw( get_tags ); -use C4::XSLT qw( XSLTParse4Display ); +use C4::XSLT qw( XSLTParse4Display CustomXSLTExportList ); use Koha::DateUtils qw( format_sqldatetime ); use C4::HTML5Media; use C4::CourseReserves qw( GetItemCourseReservesInfo ); diff --git a/catalogue/export.pl b/catalogue/export.pl index 21d51a8f26..ffec4252f1 100755 --- a/catalogue/export.pl +++ b/catalogue/export.pl @@ -6,7 +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; +use C4::XSLT qw( XSLTParse4Display ); +use Koha::Biblios; my $query = CGI->new; @@ -85,11 +86,19 @@ if ( $op eq "export" ) { my $biblionumber = $query->param("bib"); if ($biblionumber){ my $xslFile = $query->param("file"); - my $marc = GetMarcBiblio( { biblionumber => $biblionumber, embed_items => 1 } ); + my $biblio = Koha::Biblios->find($biblionumber); + my $marc = $biblio->metadata->record( { embed_items => 1 } ); my $format=$query->param("format")||'txt'; my @hiddenitems; - $marc = XSLTParse4Display($biblionumber, $marc, 'XSLTCustomExport', 1, \@hiddenitems, '', $xslFile,''); + $marc = XSLTParse4Display({ + biblionumber => $biblionumber, + record => $marc, + xsl_syspref => "XSLTCustomExport", + fix_amps => 1, + hidden_items => \@hiddenitems, + xslfilename => $xslFile, + }); print $query->header( -type => 'application/octet-stream', -attachment=>"bib-$biblionumber.$format"); 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 4466f4a48b..a94c271adb 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/virtualshelves-toolbar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/virtualshelves-toolbar.inc @@ -42,7 +42,7 @@
  • CSV - [% csv_profile.profile | html %]
  • [% END %] [% FOREACH xsl_export IN xsl_exports %] -
  • XSL - [% xsl_export.filename | html %]
  • +
  • XSL - [% xsl_export.filename | html %]
  • [% END %] 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 bf3d3f47c7..bc3bd9c9c5 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt @@ -60,7 +60,7 @@
  • CSV - [% csv_profile.profile | html %]
  • [% END %] [% FOREACH xsl_export IN xsl_exports %] -
  • XSL - [% xsl_export.filename | html %]
  • +
  • XSL - [% xsl_export.filename | html %]
  • [% END %] 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 82e824a827..e8aca6fd1f 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 @@
    diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-basket.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-basket.tt index 2e7e1daad1..d03776e042 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-basket.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-basket.tt @@ -49,6 +49,7 @@ Send [% END %] + [% SET export_options = Koha.Preference('OpacExportOptions').split(',') %] diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt index 22dcb2a545..b8989306b7 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt @@ -237,6 +237,7 @@
    New list | + [% SET export_options = Koha.Preference('OpacExportOptions').split(',') %]
    diff --git a/opac/opac-basket.pl b/opac/opac-basket.pl index e96b7d55ec..51a5f2b012 100755 --- a/opac/opac-basket.pl +++ b/opac/opac-basket.pl @@ -28,6 +28,7 @@ use C4::Biblio qw( ); use C4::Auth qw( get_template_and_user ); use C4::Output qw( output_html_with_http_headers ); +use C4::XSLT qw( CustomXSLTExportList ); use Koha::RecordProcessor; use Koha::CsvProfiles; use Koha::AuthorisedValues; @@ -135,6 +136,7 @@ $template->param( csv_profiles => Koha::CsvProfiles->search( { type => 'marc', used_for => 'export_records', staff_only => 0 } ), bib_list => $bib_list, BIBLIO_RESULTS => $resultsarray, + xsl_exports => CustomXSLTExportList(), ); output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 }; diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index 92e37a28d1..38c9b35284 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -57,7 +57,7 @@ use C4::External::Syndetics qw( get_syndetics_toc ); use C4::Members; -use C4::XSLT qw( XSLTParse4Display ); +use C4::XSLT qw( XSLTParse4Display CustomXSLTExportList ); use C4::ShelfBrowser qw( GetNearbyItems ); use C4::Reserves qw( GetReserveStatus IsAvailableForItemLevelRequest ); use C4::Charset qw( SetUTF8Flag ); @@ -102,7 +102,6 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( } ); -#### ADD CUSTOM XSLT $template->param(filesOptions => CustomXSLTExportList(1)); my $patron = Koha::Patrons->find($borrowernumber); diff --git a/opac/opac-downloadcart.pl b/opac/opac-downloadcart.pl index b96fe9c021..a574179380 100755 --- a/opac/opac-downloadcart.pl +++ b/opac/opac-downloadcart.pl @@ -28,7 +28,7 @@ use C4::Output qw( output_html_with_http_headers ); use C4::Record; use C4::Ris qw( marc2ris ); use Koha::Biblios; -use C4::XSLT; +use C4::XSLT qw( XSLTParse4Display ); use Koha::CsvProfiles; use Koha::RecordProcessor; @@ -84,6 +84,7 @@ if ( $bib_list && $format ) { patron => $patron, } ); + my $xslFile = $query->param("file"); my $framework = &GetFrameworkCode($biblio); $record_processor->options( { @@ -115,9 +116,15 @@ if ( $bib_list && $format ) { ); $extension = "txt"; $type = "text/plain"; - } - elsif ($format =~ /^xsl\.(.*)$/) { - $output .= XSLTParse4Display($biblio, $record, 'OPACXSLTCustomExport', 1, undef, undef, $1, ''); + } elsif ($format =~ /^xsl\.(.*)$/) { + $output .= XSLTParse4Display({ + biblionumber => $biblionumber, + record => $record, + xsl_syspref => "OPACXSLTCustomExport", + fix_amps => 1, + hidden_items => undef, + xslfilename => $xslFile, + }); } } } diff --git a/opac/opac-downloadshelf.pl b/opac/opac-downloadshelf.pl index 7d4a9e43b0..38d42ffc68 100755 --- a/opac/opac-downloadshelf.pl +++ b/opac/opac-downloadshelf.pl @@ -27,7 +27,7 @@ use C4::Output qw( output_html_with_http_headers ); use C4::Record; use C4::Ris qw( marc2ris ); use Koha::Biblios; -use C4::XSLT; +use C4::XSLT qw( XSLTParse4Display ); use Koha::CsvProfiles; use Koha::RecordProcessor; @@ -97,6 +97,7 @@ if ( $shelf and $shelf->can_be_viewed($borrowernumber) ) { patron => $patron, } ); + my $xslFile = $query->param("file"); my $framework = $biblio->frameworkcode; $record_processor->options( { @@ -123,9 +124,16 @@ 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); - } + } elsif ($format =~ /^xsl\.(.*)$/){ + $output .= XSLTParse4Display({ + biblionumber => $biblionumber, + record => $record, + xsl_syspref => "OPACXSLTCustomExport", + fix_amps => 1, + hidden_items => undef, + xslfilename => $xslFile, + }); + } } } diff --git a/opac/opac-export.pl b/opac/opac-export.pl index f58b11f7a6..33e1f4989f 100755 --- a/opac/opac-export.pl +++ b/opac/opac-export.pl @@ -30,7 +30,7 @@ use CGI qw ( -utf8 ); use C4::Auth; use C4::Ris qw( marc2ris ); use Koha::Biblios; -use C4::XSLT; +use C4::XSLT qw( XSLTParse4Display ); use Koha::RecordProcessor; @@ -156,10 +156,18 @@ if ( $format =~ /endnote/ ) { } elsif ($format =~ /html/ ) { if ($biblionumber){ my $xslFile = $query->param("file"); - $marc = C4::Biblio::GetMarcBiblio({biblionumber => $biblionumber}); + my $biblio = Koha::Biblios->find($biblionumber); + $marc = $biblio->metadata->record; my @hiddenitems; - $marc = XSLTParse4Display($biblionumber, $marc, 'OPACXSLTCustomExport', 1, \@hiddenitems, undef, $xslFile, undef); + $marc = XSLTParse4Display({ + biblionumber => $biblionumber, + record => $marc, + xsl_syspref => "OPACXSLTCustomExport", + fix_amps => 1, + hidden_items => \@hiddenitems, + xslfilename => $xslFile, + }); } } else { $error = "Format $format is not supported."; diff --git a/opac/opac-shelves.pl b/opac/opac-shelves.pl index e7dfc65c58..5e7a25a0c6 100755 --- a/opac/opac-shelves.pl +++ b/opac/opac-shelves.pl @@ -32,7 +32,7 @@ use C4::Koha qw( use C4::Members; use C4::Output qw( pagination_bar output_with_http_headers ); use C4::Tags qw( get_tags ); -use C4::XSLT qw( XSLTParse4Display ); +use C4::XSLT qw( XSLTParse4Display CustomXSLTExportList ); use Koha::Biblios; use Koha::Biblioitems; @@ -544,7 +544,8 @@ $template->param( print => scalar $query->param('print') || 0, listsview => 1, staffuser => $staffuser, - permitteduser => $permitteduser + permitteduser => $permitteduser, + xsl_exports => CustomXSLTExportList(), ); my $content_type = $query->param('rss') ? 'rss' : 'html'; diff --git a/virtualshelves/downloadshelf.pl b/virtualshelves/downloadshelf.pl index 256a6c8bd3..631d36ee07 100755 --- a/virtualshelves/downloadshelf.pl +++ b/virtualshelves/downloadshelf.pl @@ -25,7 +25,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 C4::XSLT qw( XSLTParse4Display ); use Koha::Biblios; @@ -72,6 +72,7 @@ if ( $shelfid && $format ) { my $biblionumber = $content->biblionumber; my $biblio = Koha::Biblios->find($biblionumber); my $record = $biblio->metadata_record( { embed_items => 1 } ); + my $xslFile = $query->param("file"); if ( $format eq 'iso2709' ) { $output .= $record->as_usmarc(); } elsif ( $format eq 'ris' ) { @@ -80,7 +81,14 @@ if ( $shelfid && $format ) { $output .= marc2bibtex( $record, $biblionumber ); } elsif ($format =~ /^xsl\.(.*)$/){ - $output .= XSLTParse4Display($biblionumber, $record, 'XSLTCustomExport', 1, undef, ,'',$1,''); + $output .= XSLTParse4Display({ + biblionumber => $biblionumber, + record => $record, + xsl_syspref => "XSLTCustomExport", + fix_amps => 1, + hidden_items => undef, + xslfilename => $xslFile, + }); } } } diff --git a/virtualshelves/shelves.pl b/virtualshelves/shelves.pl index 3145647878..10f1648422 100755 --- a/virtualshelves/shelves.pl +++ b/virtualshelves/shelves.pl @@ -30,7 +30,7 @@ use C4::Koha qw( ); use C4::Members; use C4::Output qw( pagination_bar output_html_with_http_headers output_and_exit_if_error ); -use C4::XSLT qw( XSLTParse4Display ); +use C4::XSLT qw( XSLTParse4Display CustomXSLTExportList ); use Koha::Biblios; use Koha::Biblioitems; -- 2.43.0