From b8250c1ae217b0e24bc400ce9a063425eb11f84d 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 --- C4/XSLT.pm | 11 ++-- basket/basket.pl | 3 +- basket/downloadcart.pl | 12 ++++- catalogue/detail.pl | 2 +- catalogue/export.pl | 18 +++++-- .../en/includes/virtualshelves-toolbar.inc | 2 +- .../prog/en/modules/basket/basket.tt | 2 +- .../en/includes/opac-detail-sidebar.inc | 52 +++++++++---------- .../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 | 12 ++++- opac/opac-downloadshelf.pl | 16 ++++-- opac/opac-export.pl | 17 ++++-- opac/opac-shelves.pl | 5 +- virtualshelves/downloadshelf.pl | 14 ++++- virtualshelves/shelves.pl | 2 +- 18 files changed, 130 insertions(+), 59 deletions(-) diff --git a/C4/XSLT.pm b/C4/XSLT.pm index 62df52b8f0..34df696a1e 100644 --- a/C4/XSLT.pm +++ b/C4/XSLT.pm @@ -130,24 +130,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"; + $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 ) { @@ -208,11 +208,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); + $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 a560a4359a..56feed12f6 100755 --- a/basket/basket.pl +++ b/basket/basket.pl @@ -27,8 +27,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; use Koha::Biblios; diff --git a/basket/downloadcart.pl b/basket/downloadcart.pl index 07527e897a..c60a868780 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') { @@ -80,7 +81,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 6e7d864d54..691583a5fb 100755 --- a/catalogue/detail.pl +++ b/catalogue/detail.pl @@ -40,7 +40,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 e023a55e71..42a7fe663f 100755 --- a/catalogue/export.pl +++ b/catalogue/export.pl @@ -7,8 +7,8 @@ use C4::Output; use C4::Biblio qw( GetMarcControlnumber ); use CGI qw ( -utf8 ); use C4::Ris qw( marc2ris ); -use C4::XSLT; - +use C4::XSLT qw( XSLTParse4Display ); +use Koha::Biblios; @@ -92,11 +92,21 @@ 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 50fb4acc61..b59f4b5770 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/virtualshelves-toolbar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/virtualshelves-toolbar.inc @@ -39,7 +39,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 2b9d79a83b..5ea09e721a 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tt @@ -64,7 +64,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 770736a609..b833e2c1ae 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 @@ -66,36 +66,34 @@
  • + [% END %] + + +
  • [% END %] 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 7ba7bb4513..076936bf51 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-basket.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-basket.tt @@ -30,6 +30,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 78c3c1de65..fe3eaea6f6 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt @@ -223,6 +223,7 @@
    New list | + [% SET export_options = Koha.Preference('OpacExportOptions').split(',') %] diff --git a/opac/opac-basket.pl b/opac/opac-basket.pl index e4ed044a85..7d010f76db 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; @@ -134,6 +135,7 @@ $template->param( { 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 eafa4a0d1b..00f49a691e 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -58,7 +58,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 ); @@ -103,7 +103,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 e16204c53b..ad3ddd1bad 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; @@ -86,6 +86,7 @@ if ($bib_list && $format) { patron => $patron, } ); + my $xslFile = $query->param("file"); my $framework = &GetFrameworkCode( $biblio ); $record_processor->options({ interface => 'opac', @@ -117,7 +118,14 @@ if ($bib_list && $format) { $type = "text/plain"; } elsif ($format =~ /^xsl\.(.*)$/) { - $output .= XSLTParse4Display($biblio, $record, 'OPACXSLTCustomExport', 1, undef, undef, $1, ''); + $output .= XSLTParse4Display({ + biblionumber => $biblio, + 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 eb7e739c04..615517901d 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; @@ -99,6 +99,7 @@ if ( $shelf and $shelf->can_be_viewed( $borrowernumber ) ) { patron => $patron, } ); + my $xslFile = $query->param("file"); my $framework = $biblio->frameworkcode; $record_processor->options({ interface => 'opac', @@ -125,8 +126,17 @@ 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); - } + $output .= XSLTParse4Display( + { + biblionumber => $biblionumber, + record => $record, + xsl_syspref => "XSLTCustomExport", + fix_amps => 1, + hidden_items => undef, + xslfilename => $xslFile, + } + ); + } } } diff --git a/opac/opac-export.pl b/opac/opac-export.pl index 610d5d27e5..845a6fe656 100755 --- a/opac/opac-export.pl +++ b/opac/opac-export.pl @@ -31,8 +31,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; my $query = CGI->new; @@ -142,10 +141,20 @@ elsif ( $format =~ /isbd/ ) { 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 { diff --git a/opac/opac-shelves.pl b/opac/opac-shelves.pl index 5cecfc7b96..4c56b8d3fc 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; @@ -503,7 +503,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 d9939c5cb0..08ab34b185 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(); } @@ -82,7 +83,16 @@ 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 7b73df30aa..00c8b44951 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.34.1