+ }
+ my $modified = 0;
+ 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 $value = $localmarcitem->field( $tag )->subfield( $subfield );
+ my $old_value = $value;
+
+ my @available_modifiers = qw( i g );
+ my $retained_modifiers = q||;
+ for my $modifier ( split //, $modifiers[$i] ) {
+ $retained_modifiers .= $modifier
+ if grep {/$modifier/} @available_modifiers;
+ }
+ if ( $retained_modifiers =~ m/^(ig|gi)$/ ) {
+ $value =~ s/$search/$replace/ig;
+ }
+ elsif ( $retained_modifiers eq 'i' ) {
+ $value =~ s/$search/$replace/i;
+ }
+ elsif ( $retained_modifiers eq 'g' ) {
+ $value =~ s/$search/$replace/g;
+ }
+ else {
+ $value =~ s/$search/$replace/;
+ }
+
+ my @fields_to = $localmarcitem->field($tag);
+ foreach my $field_to_update ( @fields_to ) {
+ unless ( $old_value eq $value ) {
+ $modified++;
+ $field_to_update->update( $subfield => $value );
+ }
+ }
+ }
+
+ $modified += UpdateMarcWith( $marcitem, $localmarcitem );
+ if ($modified) {
+ eval {
+ if (
+ my $item = ModItemFromMarc(
+ $localmarcitem,
+ $itemdata->{biblionumber},
+ $itemnumber,
+ { skip_record_index => 1 },
+ )
+ )
+ {
+ LostItem(
+ $itemnumber,
+ 'batchmod',
+ undef,
+ { skip_record_index => 1 }
+ ) if $item->{itemlost}
+ and not $itemdata->{itemlost};
+ }
+ };
+ push @$upd_biblionumbers, $itemdata->{'biblionumber'};
+ }
+ }
+ $modified_items++ if $modified || $modified_holds_priority;
+ $modified_fields += $modified + $modified_holds_priority;
+ }
+ $i++;
+ }
+ if (@not_deleted) {
+ Koha::Exceptions::Exception->throw(
+ 'Some items have not been deleted, rolling back');
+ }
+ }
+ );
+ }
+ catch {
+ if ( $_->isa('Koha::Exceptions::Exception') ) {
+ $template->param( deletion_failed => 1 );
+ }
+ die "Something terrible has happened!"
+ if ($_ =~ /Rollback failed/); # Rollback failed
+ };
+ $upd_biblionumbers = [ uniq @$upd_biblionumbers ]; # Only update each bib once
+
+ # Don't send specialUpdate for records we are going to delete
+ my %del_bib_hash = map{ $_ => undef } @$del_biblionumbers;
+ @$upd_biblionumbers = grep( ! exists( $del_bib_hash{$_} ), @$upd_biblionumbers );
+
+ my $indexer = Koha::SearchEngine::Indexer->new({ index => $Koha::SearchEngine::BIBLIOS_INDEX });
+ $indexer->index_records( $upd_biblionumbers, 'specialUpdate', "biblioserver", undef ) if @$upd_biblionumbers;
+ $indexer->index_records( $del_biblionumbers, 'recordDelete', "biblioserver", undef ) if @$del_biblionumbers;