@@ -, +, @@ --- C4/MarcModificationTemplates.pm | 9 +++ Koha/SimpleMARC.pm | 23 +++++++ installer/data/mysql/atomicupdate/bug13560.perl | 6 ++ .../modules/tools/marc_modification_templates.tt | 6 +- .../prog/js/marc_modification_templates.js | 6 ++ t/db_dependent/MarcModificationTemplates.t | 75 ++++++++++++++++++---- tools/marc_modification_templates.pl | 1 + 7 files changed, 113 insertions(+), 13 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug13560.perl --- a/C4/MarcModificationTemplates.pm +++ a/C4/MarcModificationTemplates.pm @@ -626,6 +626,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,28 @@ sub update_field { } } +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/installer/data/mysql/atomicupdate/bug13560.perl +++ a/installer/data/mysql/atomicupdate/bug13560.perl @@ -0,0 +1,6 @@ +$DBversion = 'XXX'; # will be replaced by the RM +if( CheckVersion( $DBversion ) ) { + $dbh->do( "ALTER TABLE marc_modification_template_actions CHANGE action action ENUM('delete_field','add_field','update_field','move_field','copy_field','copy_and_replace_field')" ); + SetVersion( $DBversion ); + print "Upgrade to $DBversion done (Bug 13560 - need an add option in marc modification templates)\n"; +} --- 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 @@ -132,7 +132,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 %] @@ -218,7 +219,8 @@