Bugzilla – Attachment 15579 Details for
Bug 5608
Tool to move MARC21 series info to 490 tag
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
New patch which would pass QA tool
0001-command-line-tool-to-switch-information-in-440-and-4.patch (text/plain), 6.58 KB, created by
Michael Hafen
on 2013-02-20 22:42:13 UTC
(
hide
)
Description:
New patch which would pass QA tool
Filename:
MIME Type:
Creator:
Michael Hafen
Created:
2013-02-20 22:42:13 UTC
Size:
6.58 KB
patch
obsolete
>From f27169700b91d29b9bd793c173c710bd9a829288 Mon Sep 17 00:00:00 2001 >From: Michael Hafen <mdhafen@tech.washk12.org> >Date: Wed, 20 Feb 2013 14:32:06 -0700 >Subject: [PATCH] command-line tool to switch information in 440 and 490 tags >Content-Type: text/plain; charset="utf-8" > >With the MARC21 standard moving from the 440 tag to the 490, this tool is >to help libraries make the move. It switches any information in 440 tags to >490 tags, and any information in 490 tags to 440 tags. That seemed like the >best way to go to me. > >To Test: >locate some biblios with 440 or 490 tags filled. >run bin/migration_tools/switch_marc21_series_info.pl -c >observe that the information in the biblios has switched 4xx tags. >--- > misc/migration_tools/switch_marc21_series_info.pl | 173 +++++++++++++++++++++ > 1 file changed, 173 insertions(+) > create mode 100755 misc/migration_tools/switch_marc21_series_info.pl > >diff --git a/misc/migration_tools/switch_marc21_series_info.pl b/misc/migration_tools/switch_marc21_series_info.pl >new file mode 100755 >index 0000000..28413a2 >--- /dev/null >+++ b/misc/migration_tools/switch_marc21_series_info.pl >@@ -0,0 +1,173 @@ >+#!/usr/bin/perl >+ >+use strict; >+use warnings; >+ >+# Script to switch the MARC21 440$anv and 490$av information >+ >+BEGIN { >+ # find Koha's Perl modules >+ # test carefully before changing this >+ use FindBin; >+ eval { require "$FindBin::Bin/../kohalib.pl" }; >+} >+ >+use C4::Biblio; >+use C4::Context; >+use Getopt::Long; >+ >+my $commit; >+my $update_frameworks; >+my $show_help; >+my $verbose; >+my $result = GetOptions( >+ 'c' => \$commit, >+ 'm' => \$update_frameworks, >+ 'h|help' => \$show_help, >+ 'v' => \$verbose, >+ ); >+ >+if ( ! $result || $show_help ) { >+ print_usage(); >+ exit 0; >+} >+ >+my $dbh = C4::Context->dbh; >+ >+my $count_sth = $dbh->prepare( 'SELECT COUNT(biblionumber) FROM biblio CROSS JOIN biblioitems USING (biblionumber) WHERE ExtractValue(marcxml,\'//datafield[@tag="440"]/subfield[@code="a"]\') OR ExtractValue(marcxml,\'//datafield[@tag="440"]/subfield[@code="v"]\') OR ExtractValue(marcxml,\'//datafield[@tag="440"]/subfield[@code="n"]\') OR ExtractValue(marcxml,\'//datafield[@tag="490"]/subfield[@code="a"]\') OR ExtractValue(marcxml,\'//datafield[@tag="490"]/subfield[@code="v"]\')' ); >+ >+my $bibs_sth = $dbh->prepare( 'SELECT biblionumber FROM biblio CROSS JOIN biblioitems USING (biblionumber) WHERE ExtractValue(marcxml,\'//datafield[@tag="440"]/subfield[@code="a"]\') OR ExtractValue(marcxml,\'//datafield[@tag="440"]/subfield[@code="v"]\') OR ExtractValue(marcxml,\'//datafield[@tag="440"]/subfield[@code="n"]\') OR ExtractValue(marcxml,\'//datafield[@tag="490"]/subfield[@code="a"]\') OR ExtractValue(marcxml,\'//datafield[@tag="490"]/subfield[@code="v"]\')' ); >+ >+unless ( $commit ) { >+ print_usage(); >+} >+ >+print "Examining MARC records...\n"; >+$count_sth->execute(); >+my ( $num_records ) = $count_sth->fetchrow; >+ >+unless ( $commit ) { >+ if ( $num_records ) { >+ print "This action would change $num_records MARC records\n"; >+ } >+ else { >+ print "There appears to be no series information to change\n"; >+ } >+ exit 0; >+} >+ >+print "Changing $num_records MARC records...\n"; >+ >+$bibs_sth->execute(); >+while ( my ( $biblionumber ) = $bibs_sth->fetchrow ) { >+ my $framework = GetFrameworkCode( $biblionumber ) || ''; >+ my ( @newfields ); >+ >+ # MARC21 specific >+ my ( $series1_t, $series1_f ) = ( '440', 'a' ); >+ my ( $volume1_t, $volume1_f ) = ( '440', 'v' ); >+ my ( $number1_t, $number1_f ) = ( '440', 'n' ); >+ >+ my ( $series2_t, $series2_f ) = ( '490', 'a' ); >+ my ( $volume2_t, $volume2_f ) = ( '490', 'v' ); >+ >+ # Get biblio marc >+ my $biblio = GetMarcBiblio( $biblionumber ); >+ >+ foreach my $field ( $biblio->field( $series1_t ) ) { >+ my @newsubfields; >+ my @series1 = $field->subfield( $series1_f ); >+ my @volume1 = $field->subfield( $volume1_f ); >+ my @number1 = $field->subfield( $number1_f ); >+ my $i = 0; >+ foreach my $num ( @number1 ) { >+ $volume1[$i] .= " " if ( $volume1[$i] ); >+ $volume1[$i++] .= $num if ( $num ); >+ } >+ >+ while ( @series1 || @volume1 ) { >+ if ( @series1 ) { >+ push @newsubfields, ( $series2_f, shift @series1 ); >+ } >+ if ( @volume1 ) { >+ push @newsubfields, ( $volume2_f, shift @volume1 ); >+ } >+ } >+ >+ my $new_field = MARC::Field->new( $series2_t, '', '', >+ @newsubfields ); >+ >+ $biblio->delete_fields( $field ); >+ push @newfields, $new_field; >+ } >+ >+ foreach my $field ( $biblio->field( $series2_t ) ) { >+ my @newsubfields; >+ my @series2 = $field->subfield( $series2_f ); >+ my @volume2 = $field->subfield( $volume2_f ); >+ >+ while ( @series2 || @volume2 ) { >+ if ( @series2 ) { >+ push @newsubfields, ( $series1_f, shift @series2 ); >+ } >+ if ( @volume2 ) { >+ push @newsubfields, ( $volume1_f, shift @volume2 ); >+ } >+ } >+ >+ my $new_field = MARC::Field->new( $series1_t, '', '', >+ @newsubfields ); >+ >+ $biblio->delete_fields( $field ); >+ push @newfields, $new_field; >+ } >+ $biblio->insert_fields_ordered( @newfields ); >+ >+ ModBiblioMarc( $biblio, $biblionumber, $framework ); >+ if ( $verbose ) { >+ print "Changing MARC for biblio number $biblionumber.\n"; >+ } >+ else { >+ print "."; >+ } >+} >+print "\n"; >+ >+if ( $update_frameworks ) { >+ print "Updating Koha to MARC mappings for seriestitle and volume\n"; >+ >+ # set new mappings for koha fields >+ $dbh->do( >+"UPDATE marc_subfield_structure SET kohafield='seriestitle' >+ WHERE tagfield='490' AND tagsubfield='a'" >+ ); >+ $dbh->do( >+"UPDATE marc_subfield_structure SET kohafield='volume' >+ WHERE tagfield='490' AND tagsubfield='v'" >+ ); >+ >+ # empty old koha fields >+ $dbh->do( >+"UPDATE marc_subfield_structure SET kohafield='' >+ WHERE kohafield='seriestitle' AND tagfield='440' AND tagsubfield='a'" >+ ); >+ $dbh->do( >+"UPDATE marc_subfield_structure SET kohafield='' >+ WHERE kohafield='volume' AND tagfield='440' AND tagsubfield='v'" >+ ); >+} >+ >+sub print_usage { >+ print <<_USAGE_; >+$0: switch MARC21 440 tag and 490 tag contents >+ >+Parameters: >+ -c Commit the changes to the marc records >+ >+ -m Also update the Koha field to MARC framework mappings for the >+ seriestitle and volume Koha fields. >+ >+ --help or -h show this message. >+ >+_USAGE_ >+} >-- >1.7.10.4 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 5608
:
2978
|
14437
|
15579
|
15604
|
15660
|
15661
|
15662
|
15663
|
15664
|
16670
|
16671
|
16672
|
16673