From 3e62dba7fb990aa996b23e3470df071ae7abee9d Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Thu, 1 Apr 2021 11:04:35 +0200 Subject: [PATCH] Bug 24564: Use the same tab as the other subfields within a field For each subfield added, we check if other subfields exists in the same field. If that's the case we use the same tab as the first subfield found. Test plan: 1. Find a biblio subfield in misc/migration_tools/ifla/data/biblio/default.yml that doesn't exist in your default biblio MARC framework (or delete one). The field should exist and have other subfields with a tab set. 2. Change the tab of all subfields within that field it's different from what's in the .yml file 3. Run misc/migration_tools/ifla/update.pl 4. Verify that the subfield has been added and have the same tab as others subfields 5. Do the same for authorities (files are in misc/migration_tools/ifla/data/auth/) Signed-off-by: Koha team Signed-off-by: sonia Signed-off-by: Victor Grousset/tuxayo Signed-off-by: Nick Clemens Signed-off-by: Jonathan Druart Signed-off-by: Jonathan Druart (cherry picked from commit c74f6848ed119b2a2fff687f3bddf87d23e20fd7) Signed-off-by: Fridolin Somers (cherry picked from commit 25da495b2d58e9de94a35318a92ba79b778600d5) Signed-off-by: Andrew Fuerste-Henry (cherry picked from commit 4477590792a09adcfd0b807b724edb6d1ae3cb5f) Signed-off-by: Victor Grousset/tuxayo --- misc/migration_tools/ifla/update.pl | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/misc/migration_tools/ifla/update.pl b/misc/migration_tools/ifla/update.pl index aff4a39c3f..5a3b6969fd 100755 --- a/misc/migration_tools/ifla/update.pl +++ b/misc/migration_tools/ifla/update.pl @@ -222,6 +222,14 @@ for my $tag (@tags) { $marc_tag_structure_rs->create($tag); } +my @mss = $marc_subfield_structure_rs->search({ frameworkcode => '' }); +my %tab_for_field; +foreach my $mss (@mss) { + next if $mss->tab < 0; + next if exists $tab_for_field{$mss->tagfield}; + $tab_for_field{$mss->tagfield} = $mss->tab; +} + my $subfield_defaults = $defaults->{subfield}; for my $subfield (@subfields) { foreach my $key (keys %$subfield_defaults) { @@ -231,6 +239,11 @@ for my $subfield (@subfields) { } $subfield->{liblibrarian} = t($subfield->{liblibrarian}); + # If other subfields exist in this field, use the same tab + if (exists $tab_for_field{$subfield->{tagfield}}) { + $subfield->{tab} = $tab_for_field{$subfield->{tagfield}}; + } + my $mss = $marc_subfield_structure_rs->find('', $subfield->{tagfield}, $subfield->{tagsubfield}); if ($mss) { say sprintf('Subfield already exists: %s$%s', $subfield->{tagfield}, $subfield->{tagsubfield}); @@ -290,6 +303,18 @@ for my $authtag (@authtags) { $auth_tag_structure_rs->create($authtag); } +my @ass = $auth_subfield_structure_rs->search(); +my %tab_for_authfield; +foreach my $ass (@ass) { + my $authtypecode = $ass->get_column('authtypecode'); + $tab_for_authfield{$authtypecode} //= {}; + + next if $ass->tab < 0; + next if exists $tab_for_authfield{$authtypecode}->{$ass->tagfield}; + + $tab_for_authfield{$authtypecode}->{$ass->tagfield} = $ass->tab; +} + my $authsubfield_defaults = $defaults->{authsubfield}; for my $authsubfield (@authsubfields) { foreach my $key (keys %$authsubfield_defaults) { @@ -299,6 +324,11 @@ for my $authsubfield (@authsubfields) { } $authsubfield->{liblibrarian} = t($authsubfield->{liblibrarian}); + # If other subfields exist in this field, use the same tab + if (exists $tab_for_authfield{$authsubfield->{authtypecode}}->{$authsubfield->{tagfield}}) { + $authsubfield->{tab} = $tab_for_authfield{$authsubfield->{authtypecode}}->{$authsubfield->{tagfield}}; + } + my $ass = $auth_subfield_structure_rs->find($authsubfield->{authtypecode}, $authsubfield->{tagfield}, $authsubfield->{tagsubfield}); if ($ass) { say sprintf('Auth subfield already exists: %s$%s (%s)', $authsubfield->{tagfield}, $authsubfield->{tagsubfield}, $authsubfield->{authtypecode}); -- 2.39.5