From 0f939312a69b62023836336de408e45213e4f6ba Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Wed, 7 Jun 2023 17:31:37 -0300 Subject: [PATCH] Bug 33749: Use TrimFields instead of stripWhitespaceChars This patch replaces the uses of the static method with the new filter. It also moves the tests to the relevant place and removes the (now) unused method. --- C4/AuthoritiesMarc.pm | 4 +++- C4/Biblio.pm | 5 +++-- Koha/MetadataRecord.pm | 27 --------------------------- t/Koha_MetadataRecord.t | 25 +------------------------ t/RecordProcessor.t | 24 ++++++++++++++++++++++++ 5 files changed, 31 insertions(+), 54 deletions(-) diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm index d21e7c059c7..e8d84a3c1ac 100644 --- a/C4/AuthoritiesMarc.pm +++ b/C4/AuthoritiesMarc.pm @@ -35,6 +35,7 @@ use Koha::Authority::MergeRequests; use Koha::Authority::Types; use Koha::Authority; use Koha::Libraries; +use Koha::RecordProcessor; use Koha::SearchEngine; use Koha::SearchEngine::Indexer; use Koha::SearchEngine::Search; @@ -659,7 +660,8 @@ sub AddAuthority { } if ( C4::Context->preference('StripWhitespaceChars') ) { - $record = Koha::MetadataRecord::stripWhitespaceChars( $record ); + my $p = Koha::RecordProcessor->new({ filters => qw(TrimFields) }); + $p->process( $record ); } # Save record into auth_header, update 001 diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 2c63adb00e1..e88a48f6a18 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -110,11 +110,11 @@ use Koha::Holds; use Koha::ItemTypes; use Koha::MarcOverlayRules; use Koha::Plugins; +use Koha::RecordProcessor; use Koha::SearchEngine; use Koha::SearchEngine::Indexer; use Koha::Libraries; use Koha::Util::MARC; -use Koha::MetadataRecord; =head1 NAME @@ -2824,7 +2824,8 @@ sub ModBiblioMarc { } if ( C4::Context->preference('StripWhitespaceChars') ) { - $record = Koha::MetadataRecord::stripWhitespaceChars( $record ); + my $p = Koha::RecordProcessor->new({ filters => qw(TrimFields) }); + $p->process( $record ); } my $metadata = { diff --git a/Koha/MetadataRecord.pm b/Koha/MetadataRecord.pm index bb7ec62be09..6f0aa1fb4b6 100644 --- a/Koha/MetadataRecord.pm +++ b/Koha/MetadataRecord.pm @@ -108,31 +108,4 @@ sub createMergeHash { } } -=head2 stripWhitespaceChars - - $record = Koha::MetadataRecord::stripWhitespaceChars( $record ); - -Strip leading and trailing whitespace characters from input fields. - -=cut - -sub stripWhitespaceChars { - my ( $record ) = @_; - - foreach my $field ( $record->fields ) { - unless ( $field->is_control_field ) { - foreach my $subfield ( $field->subfields ) { - my $key = $subfield->[0]; - my $value = $subfield->[1]; - $value =~ s/[\n\r]+/ /g; - $value =~ s/^\s+|\s+$//g; - $field->add_subfields( $key => $value ); # add subfield to the end of the subfield list - $field->delete_subfield( pos => 0 ); # delete the subfield at the top of the subfield list - } - } - } - - return $record; -} - 1; diff --git a/t/Koha_MetadataRecord.t b/t/Koha_MetadataRecord.t index f44700970c1..cb24fb8659a 100755 --- a/t/Koha_MetadataRecord.t +++ b/t/Koha_MetadataRecord.t @@ -19,7 +19,7 @@ use Modern::Perl; -use Test::More tests => 6; +use Test::More tests => 5; use Test::Warn; use Koha::RecordProcessor; @@ -143,26 +143,3 @@ subtest "new() tests" => sub { is( $metadata_record, undef, 'record object mandatory') }; - -subtest "stripWhitespaceChars() tests" => sub { - plan tests => 2; - - # Test default values with a MARC::Record record - my $record = MARC::Record->new(); - - $record->add_fields( - [ '001', '1234' ], - [ '150', ' ', ' ', a => 'Test' ], - [ '520', ' ', ' ', a => "This is\na test!\t" ], - [ '521', ' ', ' ', a => "This is a\t test!\t" ], - ); - - my $p = Koha::RecordProcessor->new({ filters => ['TrimFields'] }); - $p->process( $record ); - - my $get520a = $record->subfield('520','a'); - is( $get520a, "This is a test!", "Whitespace characters are appropriately stripped or replaced with spaces" ); - - my $get521a = $record->subfield('521','a'); - is( $get521a, "This is a\t test!", "Trailing tabs are stripped while inner tabs are kept" ); -}; diff --git a/t/RecordProcessor.t b/t/RecordProcessor.t index 9a0db027978..89914b3f3e5 100755 --- a/t/RecordProcessor.t +++ b/t/RecordProcessor.t @@ -203,4 +203,28 @@ subtest 'options() tests' => sub { ); }; +subtest "'TrimFields' filter tests" => sub { + + plan tests => 2; + + # Test default values with a MARC::Record record + my $record = MARC::Record->new(); + + $record->add_fields( + [ '001', '1234' ], + [ '150', ' ', ' ', a => 'Test' ], + [ '520', ' ', ' ', a => "This is\na test!\t" ], + [ '521', ' ', ' ', a => "This is a\t test!\t" ], + ); + + my $p = Koha::RecordProcessor->new({ filters => ['TrimFields'] }); + $p->process( $record ); + + my $get520a = $record->subfield('520','a'); + is( $get520a, "This is a test!", "Whitespace characters are appropriately stripped or replaced with spaces" ); + + my $get521a = $record->subfield('521','a'); + is( $get521a, "This is a\t test!", "Trailing tabs are stripped while inner tabs are kept" ); +}; + done_testing(); -- 2.41.0