Bugzilla – Attachment 14437 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 script which works properly
0001-command-line-tool-to-switch-the-contents-of-440-and-.patch (text/plain), 4.70 KB, created by
Michael Hafen
on 2013-01-05 00:59:59 UTC
(
hide
)
Description:
New script which works properly
Filename:
MIME Type:
Creator:
Michael Hafen
Created:
2013-01-05 00:59:59 UTC
Size:
4.70 KB
patch
obsolete
>From d51dcd714d248d34dcea52a531f0bafd4b8c0c1f Mon Sep 17 00:00:00 2001 >From: Michael Hafen <mdhafen@tech.washk12.org> >Date: Fri, 4 Jan 2013 17:52:59 -0700 >Subject: [PATCH] command-line tool to switch the contents of 440 and 490 tags >Content-Type: text/plain; charset="utf-8" > >With the MARC21 standard moving from the 440 tag to the 490 tag, 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 >observe that the information in the biblios has switched 4xx tags. >--- > misc/migration_tools/switch_marc21_series_info.pl | 73 +++++++++++++-------- > 1 file changed, 44 insertions(+), 29 deletions(-) > >diff --git a/misc/migration_tools/switch_marc21_series_info.pl b/misc/migration_tools/switch_marc21_series_info.pl >index e174224..ac8537d 100755 >--- a/misc/migration_tools/switch_marc21_series_info.pl >+++ b/misc/migration_tools/switch_marc21_series_info.pl >@@ -17,12 +17,12 @@ use C4::Context; > > my $dbh = C4::Context->dbh; > >-my $bibs_sth = $dbh->prepare( "SELECT biblionumber FROM biblio CROSS JOIN biblioitems USING (biblionumber) WHERE ( seriestitle <> '' AND seriestitle IS NOT NULL ) OR ( volume <> '' AND volume IS NOT NULL ) OR ( number <> '' AND number IS NOT NULL )" ); >+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"]\')' ); > > $bibs_sth->execute(); > while ( my ( $biblionumber ) = $bibs_sth->fetchrow ) { > my $framework = GetFrameworkCode( $biblionumber ) || ''; >- my ( $series1, $volume1, $series2, $volume2, $subfield ); >+ my ( @newfields ); > > # MARC21 specific > my ( $series1_t, $series1_f ) = ( '440', 'a' ); >@@ -35,39 +35,54 @@ while ( my ( $biblionumber ) = $bibs_sth->fetchrow ) { > # Get biblio marc > my $biblio = GetMarcBiblio( $biblionumber ); > >- my $series2 = $biblio->subfield( $series2_t, $series2_f ); >- my $volume2 = $biblio->subfield( $volume2_t, $volume2_f ); >+ 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 $series1 = $biblio->subfield( $series1_t, $series1_f ); >- my $volume1 = $biblio->subfield( $volume1_t, $volume1_f ); >- if ( $biblio->subfield( $number1_t, $number1_f ) ) { >- $volume1 .= " ". $biblio->subfield( $number1_t, $number1_f ); >+ my $new_field = MARC::Field->new( $series2_t, '', '', >+ @newsubfields ); >+ >+ $biblio->delete_fields( $field ); >+ push @newfields, $new_field; > } > >- $subfield = $biblio->subfield( $series1_t ); >- if ( $series2 or $volume2 ) { >- if ( $subfield ) { >- $subfield->update( $series1_f => $series2, $volume1_f => $volume2 ); >- } >- else { >- $subfield = MARC::Field->new( $series1_t, '', '', >- $series1_f => $series2, $volume1_f => $volume2 ); >- $biblio->append_fields( $subfield ); >+ 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 ); >+ } > } >- } >- elsif ( $subfield ) { >- $biblio->delete_fields( $subfield ); >- } > >- $subfield = $biblio->subfield( $series2_t ); >- unless ( $subfield ) { >- $subfield = MARC::Field->new( $series2_t, '', '', >- $series2_f => $series1, $volume2_f => $volume1 ); >- $biblio->append_fields( $subfield ); >- } >- else { >- $subfield->update( $series2_f => $series1, $volume2_f => $volume1 ); >+ 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 ); > } >-- >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