From d236f5919873d6688c8c758fc31ed008257e10b7 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 29 Feb 2016 10:04:51 +0000 Subject: [PATCH] Bug 5404: Move the test to a new IsMarcStructureInternal sub --- C4/Acquisition.pm | 2 +- C4/Biblio.pm | 22 ++++++++++++++++++++++ C4/Items.pm | 2 +- cataloguing/additem.pl | 2 +- t/db_dependent/Biblio.t | 22 +++++++++++++++++++++- tools/batchMod.pl | 2 +- 6 files changed, 47 insertions(+), 5 deletions(-) diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index 5dc9cb3..a010afd 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -2996,7 +2996,7 @@ sub FillWithDefaultValues { next unless $tag; next if $tag == $itemfield; for my $subfield ( sort keys %{ $tagslib->{$tag} } ) { - next unless ref $tagslib->{$tag}{$subfield}; # Not a valid subfield (mandatory, tab, lib) + next if IsMarcStructureInternal(tagslib->{$tag}{$subfield}); my $defaultvalue = $tagslib->{$tag}{$subfield}{defaultvalue}; if ( defined $defaultvalue and $defaultvalue ne '' ) { my @fields = $record->field($tag); diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 10faa83..5c65928 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -91,6 +91,7 @@ BEGIN { &GetAuthorisedValueDesc &GetMarcStructure + &IsMarcStructureInternal &GetMarcFromKohaField &GetMarcSubfieldStructureFromKohaField &GetFrameworkCode @@ -1080,6 +1081,27 @@ sub GetBiblioItemInfosOf { =head1 FUNCTIONS FOR HANDLING MARC MANAGEMENT +=head2 IsMarcStructureInternal + + my $tagslib = C4::Biblio::GetMarcStructure(); + for my $tag ( sort keys %$tagslib ) { + next unless $tag; + for my $subfield ( sort keys %{ $tagslib->{$tag} } ) { + next if IsMarcStructureInternal($tagslib->{$tag}{$subfield}); + } + # Process subfield + } + +GetMarcStructure creates keys (lib, tab, mandatory, repeatable) for a display purpose. +These different values should not be processed as valid subfields. + +=cut + +sub IsMarcStructureInternal { + my ( $subfield ) = @_; + return ref $subfield ? 0 : 1; +} + =head2 GetMarcStructure $res = GetMarcStructure($forlibrarian,$frameworkcode); diff --git a/C4/Items.pm b/C4/Items.pm index 1842e8e..cc09bf3 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -2939,7 +2939,7 @@ sub PrepareItemrecordDisplay { # loop through each subfield my $cntsubf; foreach my $subfield ( sort keys %{ $tagslib->{$tag} } ) { - next unless ref $tagslib->{$tag}{$subfield}; # Not a valid subfield (mandatory, tab, lib) + next if IsMarcStructureInternal($tagslib->{$tag}{$subfield}); next if ( $tagslib->{$tag}->{$subfield}->{'tab'} ne "10" ); my %subfield_data; $subfield_data{tag} = $tag; diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl index 7a4031d..b9672c2 100755 --- a/cataloguing/additem.pl +++ b/cataloguing/additem.pl @@ -890,7 +890,7 @@ $itemrecord = $cookieitemrecord if ($prefillitem and not $justaddeditem and $op # We generate form, and fill with values if defined foreach my $tag ( keys %{$tagslib}){ foreach my $subtag (keys %{$tagslib->{$tag}}){ - next unless ref $tagslib->{$tag}{$subtag}; # Not a valid subfield (mandatory, tab, lib) + next if IsMarcStructureInternal($tagslib->{$tag}{$subtag}); next if ($tagslib->{$tag}->{$subtag}->{'tab'} ne "10"); next if any { /^$tag$subtag$/ } @fields; diff --git a/t/db_dependent/Biblio.t b/t/db_dependent/Biblio.t index 31bd958..027d77e 100755 --- a/t/db_dependent/Biblio.t +++ b/t/db_dependent/Biblio.t @@ -17,9 +17,10 @@ use Modern::Perl; -use Test::More tests => 5; +use Test::More tests => 6; use Test::MockModule; +use List::MoreUtils qw( uniq ); use MARC::Record; use t::lib::Mocks qw( mock_preference ); @@ -315,4 +316,23 @@ subtest 'GetMarcSubfieldStructureFromKohaField' => sub { is($marc_subfield_structure, undef, "invalid kohafield returns undef"); }; +subtest 'IsMarcStructureInternal' => sub { + plan tests => 6; + my $tagslib = GetMarcStructure(); + my @internals; + for my $tag ( sort keys %$tagslib ) { + next unless $tag; + for my $subfield ( sort keys %{ $tagslib->{$tag} } ) { + push @internals, $subfield if IsMarcStructureInternal($tagslib->{$tag}{$subfield}); + } + } + @internals = uniq @internals; + is( scalar(@internals), 4, ''); + is( grep( /^lib$/, @internals ), 1, '' ); + is( grep( /^tab$/, @internals ), 1, '' ); + is( grep( /^mandatory$/, @internals ), 1, '' ); + is( grep( /^repeatable$/, @internals ), 1, '' ); + is( grep( /^a$/, @internals ), 0, '' ); +}; + 1; diff --git a/tools/batchMod.pl b/tools/batchMod.pl index d62ef6d..5b104b6 100755 --- a/tools/batchMod.pl +++ b/tools/batchMod.pl @@ -308,7 +308,7 @@ my @subfieldsToAllow = split(/ /, $subfieldsToAllowForBatchmod); foreach my $tag (sort keys %{$tagslib}) { # loop through each subfield foreach my $subfield (sort keys %{$tagslib->{$tag}}) { - next unless ref $tagslib->{$tag}{$subfield}; # Not a valid subfield (mandatory, tab, lib) + next if IsMarcStructureInternal( $tagslib->{$tag}{$subfield} ); next if (not $allowAllSubfields and $restrictededition && !grep { $tag . '$' . $subfield eq $_ } @subfieldsToAllow ); next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "10"); # barcode and stocknumber are not meant to be batch-modified -- 2.7.0