From cdf015b49790b847a2f27c9c9ff0d22bb19c32e1 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 16 Apr 2026 09:07:13 +0100 Subject: [PATCH] Bug 41902: Display additional biblio info on duplicate check When a duplicate record is suspected during cataloguing, query the AdditionalContents record_display category for the StaffDuplicateCheckPage location. If configured, process the content as a Template Toolkit template with the duplicate biblio object and display the rendered result in the duplicate warning. The TT context variable is 'biblio' (a Koha::Biblio object), so administrators can use expressions like: [% biblio.author %] ([% biblio.copyrightdate %]) Content is scrubbed using the record_display scrubber for XSS safety. Signed-off-by: Jeanne Mauriello Signed-off-by: Lucas Gass --- cataloguing/addbiblio.pl | 45 ++++++++++++++++--- .../prog/en/modules/cataloguing/addbiblio.tt | 3 ++ 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index a8e2720b5c..4e75afe3c8 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -44,15 +44,20 @@ use MARC::Record; use C4::ClassSource qw( GetClassSources ); use C4::ImportBatch qw( GetImportRecordMarc ); use C4::Charset qw( SetMarcUnicodeFlag ); +use C4::Languages qw( getlanguage ); +use C4::Scrubber; use Koha::BiblioFrameworks; use Koha::DateUtils qw( dt_from_string ); use Koha::Acquisition::Orders; +use Koha::AdditionalContents; use Koha::Biblios; use Koha::ItemTypes; use Koha::Libraries; use Koha::Biblio::Metadata::Extractor::MARC::MARC21; +use Koha::Logger; +use Koha::TemplateUtils qw( process_tt ); use Koha::Patrons; use Koha::UI::Form::Builder::Biblio; @@ -793,12 +798,42 @@ if ( $op eq "cud-addbiblio" ) { # it may be a duplicate, warn the user and do nothing build_tabs( $template, $record, $dbh, $encoding, $input ); + + my $duplicate_additional_info = q{}; + my $dup_biblio = Koha::Biblios->find($duplicatebiblionumber); + if ($dup_biblio) { + my $lang = C4::Languages::getlanguage(); + my $branch = C4::Context->userenv ? C4::Context->userenv->{branch} : q{}; + my @customizations = Koha::AdditionalContents->search_for_display( + { + category => 'record_display', + location => 'StaffDuplicateCheckPage', + lang => $lang, + library_id => $branch, + } + )->as_list; + + foreach my $customization (@customizations) { + my $processed = eval { process_tt( $customization->content, { biblio => $dup_biblio } ) }; + if ($@) { + Koha::Logger->get->error("Duplicate check additional info template error: $@"); + next; + } + $duplicate_additional_info .= $processed if $processed; + } + if ($duplicate_additional_info) { + my $scrubber = C4::Scrubber->new('record_display'); + $duplicate_additional_info = $scrubber->scrub($duplicate_additional_info); + } + } + $template->param( - biblionumber => $biblionumber, - biblioitemnumber => $biblioitemnumber, - duplicatebiblionumber => $duplicatebiblionumber, - duplicatebibid => $duplicatebiblionumber, - duplicatetitle => $duplicatetitle, + biblionumber => $biblionumber, + biblioitemnumber => $biblioitemnumber, + duplicatebiblionumber => $duplicatebiblionumber, + duplicatebibid => $duplicatebiblionumber, + duplicatetitle => $duplicatetitle, + duplicateadditionalinfo => $duplicate_additional_info, ); } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt index a1e597fda9..35e712a928 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt @@ -848,6 +848,9 @@ > ?

+ [% IF ( duplicateadditionalinfo ) %] +

[% duplicateadditionalinfo | $raw %]

+ [% END %] [% IF ( CAN_user_editcatalogue_edit_items ) %]
[% IF ( circborrowernumber ) # It is possible we have come from fast cataloging - include the fields %]