@@ -, +, @@ templates --- C4/MarcModificationTemplates.pm | 9 +++++ Koha/SimpleMARC.pm | 40 ++++++++++++++++++++++ .../modules/tools/marc_modification_templates.tt | 6 ++-- .../prog/js/marc_modification_templates.js | 6 ++++ tools/marc_modification_templates.pl | 1 + 5 files changed, 60 insertions(+), 2 deletions(-) --- a/C4/MarcModificationTemplates.pm +++ a/C4/MarcModificationTemplates.pm @@ -639,6 +639,15 @@ sub ModifyRecordWithTemplate { field_numbers => $field_numbers, }); } + elsif ( $action eq 'add_field' ) { + add_field({ + record => $record, + field => $from_field, + subfield => $from_subfield, + values => [ $field_value ], + field_numbers => $field_numbers, + }); + } elsif ( $action eq 'update_field' ) { update_field({ record => $record, --- a/Koha/SimpleMARC.pm +++ a/Koha/SimpleMARC.pm @@ -17,6 +17,7 @@ our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); our @EXPORT = qw( read_field + add_field update_field copy_field copy_and_replace_field @@ -172,6 +173,45 @@ sub update_field { } } +=head2 add_field + + add_field({ + record => $record, + field => $fieldName, + subfield => $subfieldName, + values => \@values, + field_numbers => $field_numbers, + }); + + Adds a new field/subfield with supplied value(s). + This function always add a new field as opposed to 'update_field' which will + either update if field exists and add if it does not. + +=cut + + +sub add_field { + my ( $params ) = @_; + my $record = $params->{record}; + my $fieldName = $params->{field}; + my $subfieldName = $params->{subfield}; + my @values = @{ $params->{values} }; + my $field_numbers = $params->{field_numbers} // []; + + if ( ! ( $record && $fieldName ) ) { return; } + if ( $fieldName > 10 ) { + foreach my $value ( @values ) { + my $field = MARC::Field->new( $fieldName, '', '', "$subfieldName" => $value ); + $record->append_fields( $field ); + } + } else { + foreach my $value ( @values ) { + my $field = MARC::Field->new( $fieldName, $value ); + $record->append_fields( $field ); + } + } +} + sub _update_field { my ( $params ) = @_; my $record = $params->{record}; --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/marc_modification_templates.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/marc_modification_templates.tt @@ -116,7 +116,8 @@ [% ActionsLoo.ordering %] [% IF ( ActionsLoo.action_delete_field ) %] Delete [% END %] - [% IF ( ActionsLoo.action_update_field ) %] Update [% END %] + [% IF ( ActionsLoo.action_add_field ) %] Add new [% END %] + [% IF ( ActionsLoo.action_update_field ) %] Update existing or add new [% END %] [% IF ( ActionsLoo.action_move_field ) %] Move [% END %] [% IF ( ActionsLoo.action_copy_field ) %] Copy [% END %] [% IF ( ActionsLoo.action_copy_and_replace_field ) %] Copy and replace [% END %] @@ -202,7 +203,8 @@