diff --git a/installer/data/mysql/atomicupdate/bug19096.perl b/installer/data/mysql/atomicupdate/bug19096.perl new file mode 100644 index 0000000000..c392fd6b04 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug19096.perl @@ -0,0 +1,94 @@ +$DBversion = 'XXX'; # will be replaced by the RM +if( CheckVersion( $DBversion ) ) { + + my $dbh = C4::Context->dbh; + + my $msss = $dbh->selectall_arrayref(q| + SELECT kohafield, tagfield, tagsubfield, frameworkcode + FROM marc_subfield_structure + WHERE frameworkcode != '' + |, { Slice => {} }); + + + my $sth = $dbh->prepare(q| + SELECT kohafield + FROM marc_subfield_structure + WHERE frameworkcode = '' + AND tagfield = ? + AND tagsubfield = ? + |); + + my @exceptions; + for my $mss ( @$msss ) { + $sth->execute($mss->{tagfield}, $mss->{tagsubfield} ); + my ( $default_kohafield ) = $sth->fetchrow_array(); + if( $mss->{kohafield} ) { + push @exceptions, { frameworkcode => $mss->{frameworkcode}, tagfield => $mss->{tagfield}, tagsubfield => $mss->{tagsubfield}, kohafield => $mss->{kohafield} } if not $default_kohafield or $default_kohafield ne $mss->{kohafield}; + } else { + push @exceptions, { frameworkcode => $mss->{frameworkcode}, tagfield => $mss->{tagfield}, tagsubfield => $mss->{tagsubfield}, kohafield => q{} } if $default_kohafield; + } + } + + if (@exceptions) { + print +"WARNING: The Default framework is now considered as authoritative for Koha to MARC mappings. We have found that your additional frameworks contained " + . scalar(@exceptions) + . " mapping(s) that deviate from the standard mappings. Please look at the following list and consider if you need to add them again in Default (possibly as a second mapping).\n"; + for my $exception (@exceptions) { + print "Field " + . $exception->{tagfield} . '$' + . $exception->{tagsubfield} + . " in framework " + . $exception->{frameworkcode} . ': '; + if ( $exception->{kohafield} ) { + print "Mapping to " + . $exception->{kohafield} + . " has been adjusted.\n"; + } + else { + print "Mapping has been reset.\n"; + } + } + + # Sync kohafield + + # Clear the destination frameworks first + $dbh->do(q| + UPDATE marc_subfield_structure + SET kohafield = NULL + WHERE frameworkcode > '' + AND Kohafield > '' + |); + + # Now copy from Default + my $msss = $dbh->selectall_arrayref(q| + SELECT kohafield, tagfield, tagsubfield + FROM marc_subfield_structure + WHERE frameworkcode = '' + AND kohafield > '' + |, { Slice => {} }); + my $sth = $dbh->prepare(q| + UPDATE marc_subfield_structure + SET kohafield = ? + WHERE frameworkcode > '' + AND tagfield = ? + AND tagsubfield = ? + |); + for my $mss (@$msss) { + $sth->execute( $mss->{kohafield}, $mss->{tagfield}, + $mss->{tagsubfield} ); + } + + # Clear the cache + my @frameworkcodes = $dbh->selectall_arrayref(q| + SELECT frameworkcode FROM biblio_framework WHERE frameworkcode > '' + |); + for my $frameworkcode (@frameworkcodes) { + Koha::Caches->get_instance->clear_from_cache("MarcSubfieldStructure-$frameworkcode"); + } + Koha::Caches->get_instance->clear_from_cache("default_value_for_mod_marc-"); + } + + SetVersion( $DBversion ); + print "Upgrade to $DBversion done (Bug 19096 - Make Default authoritative for Koha to MARC mappings)\n"; +} diff --git a/t/db_dependent/Koha/MarcSubfieldStructures.t b/t/db_dependent/Koha/MarcSubfieldStructures.t index d65f4cc633..7a755d9851 100644 --- a/t/db_dependent/Koha/MarcSubfieldStructures.t +++ b/t/db_dependent/Koha/MarcSubfieldStructures.t @@ -21,7 +21,6 @@ use Modern::Perl; use Test::More tests => 1; -use Koha::MarcSubfieldStructure; use Koha::MarcSubfieldStructures; use Koha::Database;