From a9034a7e7782944bb5397105f96815867a06ac29 Mon Sep 17 00:00:00 2001 From: Mark Hofstetter Date: Thu, 9 Nov 2023 11:45:00 +0100 Subject: [PATCH] Bug 35288: ApplyFrameworkDefaults add plugin to add more fine grained defaults handling The "new" ApplyFrameworkDefaults option is to coarse sometimes ie quite often you also want to apply default values even if then field wasn't empty before e.g. on duplicating a new controlnumber should be generated etc This patch adds a new plugin call 'framework_defaults_override' and tidies up the code a little Plugin call: Koha::Plugins->call( 'framework_defaults_override', $tag, $subfield, $value, $form_mode ); ie marc tag, marc subfield, the "before value", the action which triggered the change possible actions are new, duplicate, changed (Framework), imported (via SRU) the plugin has to return a hashref containing two keys apply_override - undef or a true if the default value from the framework should be applied override_default_value - a completly new derived value sub framework_defaults_override { my ( $self, $tag, $subfield, $value, $form_mode ) = @_; # $framework_override->{override_default_value} # $framework_override->{apply_override} my $r = {override_default_value => undef, apply_override => undef}; if ($tag eq '245' && $subfield eq 'a') { $r->{apply_override} = 1; $r->{override_default_value} = $value .' added'; } return $r; } for a demo implementation please see https://github.com/HKS3/hks3-munde-framework-defaults-demo/blob/main/hks3-munde-framework-defaults-demo.kpz To test: 1) apply patch 2) install demo plugin (and don't enable it yet) 3) create a record with a 245a field set to a value eg "My Title" 4) enable ApplyFrameworkDefaults for all 4 cases "Select all" 5) in Cataloging Edit the previously generated record 6) change framework via settings 7) nothing should happen to the title in 245a 8) enable plugin 9) repeat point 5+6 10) the title in 245a should change to "My Title added" 11) please sign off Sponsored-by: Styrian State Library Co-authored-by: Thomas Klausner Signed-off-by: Lucas Gass --- Koha/UI/Form/Builder/Biblio.pm | 39 ++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/Koha/UI/Form/Builder/Biblio.pm b/Koha/UI/Form/Builder/Biblio.pm index 13ecc67ff61..1792a8d4bf7 100644 --- a/Koha/UI/Form/Builder/Biblio.pm +++ b/Koha/UI/Form/Builder/Biblio.pm @@ -92,27 +92,40 @@ sub generate_subfield_form { # based on the ApplyFrameworkDefaults setting. # Substitute date parts, user name my $applydefaults = C4::Context->preference('ApplyFrameworkDefaults'); - if ( $value eq '' && ( - ( $applydefaults =~ /new/ && !$self->{biblionumber} ) || - ( $applydefaults =~ /duplicate/ && $op eq 'duplicate' ) || - ( $applydefaults =~ /changed/ && $changed_framework ) || - ( $applydefaults =~ /imported/ && $breedingid ) - ) ) { - $value = $tagslib->{$tag}->{$subfield}->{defaultvalue} // q{}; + + my $form_mode; + if ( !$self->{biblionumber} ) { + $form_mode = 'new'; + } elsif ( $op eq 'duplicate' ) { + $form_mode = 'duplicate'; + } elsif ($changed_framework) { + $form_mode = 'changed'; + } elsif ($breedingid) { + $form_mode = 'imported'; + } + + my ($framework_override) = + Koha::Plugins->call( 'framework_defaults_override', $tag, $subfield, $value, $form_mode ); + + if ( ( $value eq '' || $framework_override->{apply_override} ) + && ( $applydefaults =~ /$form_mode/ ) ) + { + $value = $framework_override->{override_default_value} // $tagslib->{$tag}->{$subfield}->{defaultvalue} // q{}; # get today date & replace <>, <>, <>, <
> if provided in the default value - my $today_dt = dt_from_string; - my $year = $today_dt->strftime('%Y'); + my $today_dt = dt_from_string; + my $year = $today_dt->strftime('%Y'); my $shortyear = $today_dt->strftime('%y'); - my $month = $today_dt->strftime('%m'); - my $day = $today_dt->strftime('%d'); + my $month = $today_dt->strftime('%m'); + my $day = $today_dt->strftime('%d'); $value =~ s/<>/$year/g; $value =~ s/<>/$shortyear/g; $value =~ s/<>/$month/g; $value =~ s/<
>/$day/g; + # And <> with surname (?) - my $username=(C4::Context->userenv?C4::Context->userenv->{'surname'}:"superlibrarian"); - $value=~s/<>/$username/g; + my $username = ( C4::Context->userenv ? C4::Context->userenv->{'surname'} : "superlibrarian" ); + $value =~ s/<>/$username/g; } my $dbh = C4::Context->dbh; -- 2.39.2