Bugzilla – Attachment 15661 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]
[SIGNED-OFF] Bug 5608 - command-line tool to switch information in 440 and 490 tags
SIGNED-OFF-Bug-5608---command-line-tool-to-switch-.patch (text/plain), 7.67 KB, created by
Bernardo Gonzalez Kriegel
on 2013-02-25 19:14:28 UTC
(
hide
)
Description:
[SIGNED-OFF] Bug 5608 - command-line tool to switch information in 440 and 490 tags
Filename:
MIME Type:
Creator:
Bernardo Gonzalez Kriegel
Created:
2013-02-25 19:14:28 UTC
Size:
7.67 KB
patch
obsolete
>From 6f6299079e8eae02a333adf5156670959ced16a2 Mon Sep 17 00:00:00 2001 >From: Michael Hafen <mdhafen@tech.washk12.org> >Date: Thu, 21 Feb 2013 15:44:00 -0700 >Subject: [PATCH] [SIGNED-OFF] Bug 5608 - command-line tool to switch > information in 440 and 490 tags > >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. There is also an option to create 830 tags for any 44 >information, like authorities, that can't be represented in the 490 tag. > >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. > >http://bugs.koha-community.org/show_bug.cgi?id=5608 >Signed-off-by: Bernardo Gonzalez Kriegel <bgkriegel@gmail.com> > >Comment: Work as described. No errors. >--- > misc/migration_tools/switch_marc21_series_info.pl | 129 ++++++++++++++------- > 1 file changed, 88 insertions(+), 41 deletions(-) > >diff --git a/misc/migration_tools/switch_marc21_series_info.pl b/misc/migration_tools/switch_marc21_series_info.pl >index 28413a2..46b8120 100755 >--- a/misc/migration_tools/switch_marc21_series_info.pl >+++ b/misc/migration_tools/switch_marc21_series_info.pl >@@ -17,12 +17,14 @@ use C4::Context; > use Getopt::Long; > > my $commit; >+my $add_links; > my $update_frameworks; > my $show_help; > my $verbose; > my $result = GetOptions( > 'c' => \$commit, >- 'm' => \$update_frameworks, >+ 'l' => \$add_links, >+ 'f' => \$update_frameworks, > 'h|help' => \$show_help, > 'v' => \$verbose, > ); >@@ -53,83 +55,123 @@ unless ( $commit ) { > else { > print "There appears to be no series information to change\n"; > } >+ print "Please run this again with the '-c' option to change the records\n"; > exit 0; > } > > print "Changing $num_records MARC records...\n"; > >+# MARC21 specific >+my %fields = ( >+ '440' => { >+ 'a' => 'title', >+ 'n' => 'number', >+ 'p' => 'part', >+ 'v' => 'volume', >+ 'x' => 'issn', >+ '6' => 'link', >+ '8' => 'ln', >+ 'w' => 'control', >+ '0' => 'auth', >+ }, >+ '490' => { >+ 'a' => 'title', >+ 'v' => 'volume', >+ 'x' => 'issn', >+ '6' => 'link', >+ '8' => 'ln', >+ }, >+ ); >+ > $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 ) ) { >+ foreach my $field ( $biblio->field( '440' ) ) { > 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 ); >- } >+ my @linksubfields; >+ my $has_links = '0'; >+ foreach my $subfield ( sort keys %{ $fields{'440'} } ) { >+ my @values = $field->subfield( $subfield ); >+ >+ if ( $add_links && @values ) { >+ if ( $subfield eq 'w' || $subfield eq '0' ) { >+ $has_links = '1'; >+ } >+ foreach my $v ( @values ) { >+ push @linksubfields, ( $subfield, $v ); >+ } >+ } > >- while ( @series1 || @volume1 ) { >- if ( @series1 ) { >- push @newsubfields, ( $series2_f, shift @series1 ); >+ if ( $subfield eq 'a' ) { >+ my @numbers = $field->subfield( 'n' ); >+ my @parts = $field->subfield( 'p' ); >+ my $i = 0; >+ while ( $i < @numbers || $i < @parts ) { >+ my @strings = grep {$_} ( $values[$i], $numbers[$i], $parts[$i] ); >+ $values[$i] = join ' ', @strings; >+ $i++; >+ } > } >- if ( @volume1 ) { >- push @newsubfields, ( $volume2_f, shift @volume1 ); >+ >+ if ( $fields{'490'}{$subfield} ) { >+ foreach my $v ( @values ) { >+ push @newsubfields, ( $subfield, $v ); >+ } > } > } > >- my $new_field = MARC::Field->new( $series2_t, '', '', >- @newsubfields ); >+ if ( $has_links && @linksubfields ) { >+ my $link_field = MARC::Field->new( >+ '830', >+ $field->indicator(1), $field->indicator(2), >+ @linksubfields >+ ); >+ push @newfields, $link_field; >+ } >+ >+ if ( @newsubfields ) { >+ my $new_field = MARC::Field->new( '490', $has_links, '', >+ @newsubfields ); >+ push @newfields, $new_field; >+ } > > $biblio->delete_fields( $field ); >- push @newfields, $new_field; > } > >- foreach my $field ( $biblio->field( $series2_t ) ) { >+ foreach my $field ( $biblio->field( '490' ) ) { > my @newsubfields; >- my @series2 = $field->subfield( $series2_f ); >- my @volume2 = $field->subfield( $volume2_f ); >+ foreach my $subfield ( sort keys %{ $fields{'490'} } ) { >+ my @values = $field->subfield( $subfield ); > >- while ( @series2 || @volume2 ) { >- if ( @series2 ) { >- push @newsubfields, ( $series1_f, shift @series2 ); >- } >- if ( @volume2 ) { >- push @newsubfields, ( $volume1_f, shift @volume2 ); >+ if ( $fields{'440'}{$subfield} ) { >+ foreach my $v ( @values ) { >+ push @newsubfields, ( $subfield, $v ); >+ } > } > } > >- my $new_field = MARC::Field->new( $series1_t, '', '', >- @newsubfields ); >+ if ( @newsubfields ) { >+ my $new_field = MARC::Field->new( '440', '', '', >+ @newsubfields ); >+ push @newfields, $new_field; >+ } > > $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 "."; > } >+ ModBiblioMarc( $biblio, $biblionumber, $framework ); > } > print "\n"; > >@@ -162,11 +204,16 @@ sub print_usage { > $0: switch MARC21 440 tag and 490 tag contents > > Parameters: >- -c Commit the changes to the marc records >+ -c Commit the changes to the marc records. > >- -m Also update the Koha field to MARC framework mappings for the >+ -l Add 830 tags with authority information from 440. Otherwise >+ this information will be ignored. >+ >+ -f Also update the Koha field to MARC framework mappings for the > seriestitle and volume Koha fields. > >+ -v Show more information as the records are being changed. >+ > --help or -h show this message. > > _USAGE_ >-- >1.7.9.5
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