@@ -, +, @@ expression on text fields - go to Tools > Batch item modification, - select items to modify, - for one or some text fields, check the second checkbox (Use regular expression) and type your regex, - check the regex has been applied. --- .../prog/en/modules/tools/batchMod-edit.tt | 30 +++++++++++++++++++++ tools/batchMod.pl | 31 +++++++++++++++++++++- 2 files changed, 60 insertions(+), 1 deletion(-) --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-edit.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-edit.tt @@ -25,17 +25,37 @@ $(document).ready(function(){ var row = $(this).attr("id"); row = row.replace("row","hint"); var editor = $(this).parent().find("[name='field_value']"); + var regex_input = $(this).parent().find("[name='field_regex']"); if ($(this).is(":checked")) { $(editor).prop('disabled', true); $("#"+row).html(_("This subfield will be deleted")); + $(regex_input).prop('disabled', true); } else { $(editor).prop('disabled', false); $("#"+row).html(""); + $(regex_input).prop('disabled', false); } }); $("#mainformsubmit").on("click",function(){ return submitBackgroundJob(this.form); }); + $('input[name="field_regex"]').change(function() { + var id = $(this).attr('id'); + var editor = $(this).parent().find("[name='field_value']"); + var regex = $(this).parent().find("[name='regex_fields']"); + var disable_input = $(this).parent().find("[name='disable_input']"); + if ($(this).is(':checked')) { + $(editor).hide(); + $(regex).show(); + $(this).parent().find('.hint').html(_("Enter a regular expression for this subflied")); + $(disable_input).prop('disabled', true); + } else { + $(editor).show(); + $(regex).hide(); + $(this).parent().find('.hint').html(_("")); + $(disable_input).prop('disabled', false); + } + }); }); //]]> @@ -281,12 +301,22 @@ $(document).ready(function(){ [%- END -%] + + s// + / + + + [% UNLESS ( ite.mandatory ) %] [% ELSE %] Required [% END %] + [% IF (mv.type == 'text' || mv.type == 'textarea' ) %] + + [% END %] + --- a/tools/batchMod.pl +++ a/tools/batchMod.pl @@ -105,6 +105,9 @@ if ($op eq "action") { my @tags = $input->multi_param('tag'); my @subfields = $input->multi_param('subfield'); my @values = $input->multi_param('field_value'); + my @searches = $input->multi_param('regex_search'); + my @replaces = $input->multi_param('regex_replace'); + my @modifiers = $input->multi_param('regex_modifiers'); my @disabled = $input->multi_param('disable_input'); # build indicator hash. my @ind_tag = $input->multi_param('ind_tag'); @@ -112,8 +115,9 @@ if ($op eq "action") { # Is there something to modify ? # TODO : We shall use this var to warn the user in case no modification was done to the items - my $values_to_modify = scalar(grep {!/^$/} @values); + my $values_to_modify = scalar(grep {!/^$/} @values) || scalar(grep {!/^$/} @searches); my $values_to_blank = scalar(@disabled); + my $marcitem; # Once the job is done @@ -204,6 +208,31 @@ if ($op eq "action") { if ($values_to_modify || $values_to_blank) { my $localmarcitem = Item2Marc($itemdata); + for ( my $i = 0 ; $i < @tags ; $i++ ) { + my $search = $searches[$i]; + next unless $search; + + my $tag = $tags[$i]; + my $subfield = $subfields[$i]; + my $replace = $replaces[$i]; + my $mod = $modifiers[$i]; + + my $value = $localmarcitem->field( $tag )->subfield( $subfield ); + ## no critic (StringyEval) + eval "\$value =~ s/$search/$replace/$mod"; + + if ( my $field = $marcitem->field( $tag ) ) { + $field->add_subfields( $subfield => $value ); + } else { + $marcitem->insert_fields_ordered( + MARC::Field->new( + $tag, '', '', + $subfield => $value + ) + ); + } + } + my $modified = UpdateMarcWith( $marcitem, $localmarcitem ); if ( $modified ) { eval { --