Bugzilla – Attachment 181988 Details for
Bug 39545
Construct more complete 773 content when creating a child record
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 39545: (follow-up) Apply same logic to Koha::Biblio
Bug-39545-follow-up-Apply-same-logic-to-KohaBiblio.patch (text/plain), 24.53 KB, created by
Martin Renvoize (ashimema)
on 2025-05-06 15:56:10 UTC
(
hide
)
Description:
Bug 39545: (follow-up) Apply same logic to Koha::Biblio
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2025-05-06 15:56:10 UTC
Size:
24.53 KB
patch
obsolete
>From a41190a40ad3191a39249f627c64de5cd016f5dc Mon Sep 17 00:00:00 2001 >From: Martin Renvoize <martin.renvoize@openfifth.co.uk> >Date: Fri, 2 May 2025 17:06:30 +0100 >Subject: [PATCH] Bug 39545: (follow-up) Apply same logic to Koha::Biblio > >This patch updates the Koha::Biblio->generate_marc_host_field method to >more closely match the updated logic in C4::Biblio::prep_marc_host. > >We change a number of things including: > 1) Constructinging the 773 subfield generation from a hash to an array > to preserve field order. > 2) Updating main entry handling for 100/110/111 fields to clone the > field and then remove relevant subfields as apposed to fetching only > a limited set of subfields. > 3) Add handling to generate subfield 7 content depending on LDR and > Main Entry information > 4) Improve handling for title subfield construction from 245 to respect > non-filing characters and remove trailing punctuation > 5) Remove trailing punctuation from subfield b when generated from 250 > 6) Remove generation of subfield s from the 240 field entirely > 7) Remove trailing punctuation from subfield d when generated from 260 > 8) Add generation of subfield k from 800-830 fields > >Rebased-by: Martin Renvoize <martin.renvoize@openfifth.co.uk> >We dropped the upstream aforementioned C4::Biblio method, but this patch >faithfully replicates it's functionality within >Koha::Biblio->generate_marc_host_field >--- > Koha/Biblio.pm | 199 ++++++++++++++++++---------------- > t/db_dependent/Koha/Biblio.t | 202 ++++++++++++++++++++++++++--------- > 2 files changed, 261 insertions(+), 140 deletions(-) > >diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm >index 6b205c9d915..acaadc61892 100644 >--- a/Koha/Biblio.pm >+++ b/Koha/Biblio.pm >@@ -1921,170 +1921,185 @@ sub generate_marc_host_field { > > my $marcflavour = C4::Context->preference('marcflavour'); > my $marc_host = $self->metadata->record; >+ > my @sfd; > my $host_field; > my $link_field; > > if ( $marcflavour eq 'MARC21' ) { > >- # Author >- if ( $host_field = $marc_host->field('100') || $marc_host->field('110') || $marc_host->field('111') ) { >- my $s = $host_field->as_string('ab'); >- if ($s) { >- push @sfd, ( a => $s ); >+ # Attempt to clone the main entry (100, 110, or 111) >+ my $main_entry = $marc_host->field('100') || $marc_host->field('110') || $marc_host->field('111'); >+ $main_entry = $main_entry ? $main_entry->clone : undef; >+ >+ # Clean unwanted subfields based on tag type >+ if ($main_entry) { >+ if ( $main_entry->tag eq '111' ) { >+ $main_entry->delete_subfield( code => qr/[94j]/ ); >+ } else { >+ $main_entry->delete_subfield( code => qr/[94e]/ ); >+ } >+ } >+ >+ # Construct subfield 7 from leader and main entry tag >+ my $s7 = "nn" . substr( $marc_host->leader, 6, 2 ); >+ if ($main_entry) { >+ my $c1 = 'n'; >+ if ( $main_entry->tag =~ /^1[01]/ ) { >+ $c1 = $main_entry->indicator('1'); >+ $c1 = $main_entry->tag eq '100' ? 1 : 2 unless $c1 =~ /\d/; > } >+ my $c0 = >+ ( $main_entry->tag eq '100' ) ? 'p' >+ : ( $main_entry->tag eq '110' ) ? 'c' >+ : ( $main_entry->tag eq '111' ) ? 'm' >+ : 'u'; >+ substr( $s7, 0, 2, $c0 . $c1 ); >+ } >+ push @sfd, ( '7' => $s7 ); >+ >+ # Subfield a - cleaned main entry string >+ if ($main_entry) { >+ my $a = $main_entry->as_string; >+ $a =~ s/\.$// unless $a =~ /\b[a-z]{1,2}\.$/i; >+ push @sfd, ( 'a' => $a ); >+ } >+ >+ # Subfield t - title from 245, cleaned >+ if ( my $f245 = $marc_host->field('245') ) { >+ my $f245c = $f245->clone; >+ $f245c->delete_subfield( code => 'c' ); >+ my $t = $f245c->as_string; >+ $t =~ s/[\s\/\\.]+$//; >+ my $nonfiling = $f245c->indicator('2') // 0; >+ $t = ucfirst substr( $t, $nonfiling ); >+ push @sfd, ( 't' => $t ); > } > >- # Title >- if ( $host_field = $marc_host->field('245') ) { >- my $s = $host_field->as_string('abnp'); >- if ($s) { >- push @sfd, ( t => $s ); >+ # Subfield b - edition from 250 >+ if ( my $f250 = $marc_host->field('250') ) { >+ my $b = $f250->as_string; >+ $b =~ s/\.$//; >+ if ($b) { >+ push @sfd, ( 'b' => $b ); > } > } > >- # Publication >- my $p; >+ # Subfield d - publication info from 264/260 >+ my $d; > my @publication_fields = $marc_host->field('264'); > @publication_fields = $marc_host->field('260') unless (@publication_fields); > my $index = 0; >- for my $host_field (@publication_fields) { >+ for my $publication_field (@publication_fields) { > > # Use first entry unless we find a preferred indicator1 = 3 > if ( $index == 0 ) { >- my $s = $host_field->as_string('abc'); >+ my $s = $publication_field->as_string('abc'); >+ $s =~ s/\.$//; > if ($s) { >- $p = $s; >+ $d = $s; > } > $index++; > } >- if ( $host_field->indicator(1) && ( $host_field->indicator(1) eq '3' ) ) { >- my $s = $host_field->as_string('abc'); >+ if ( $publication_field->indicator(1) && ( $publication_field->indicator(1) eq '3' ) ) { >+ my $s = $publication_field->as_string('abc'); >+ $s =~ s/\.$//; > if ($s) { >- $p = $s; >+ $d = $s; > } > last; > } > } >- push @sfd, ( d => $p ) if $p; >- >- # Uniform title >- if ( $host_field = $marc_host->field('240') ) { >- my $s = $host_field->as_string('a'); >- if ($s) { >- push @sfd, ( s => $s ); >- } >+ push @sfd, ( d => $d ) if $d; >+ >+ # Subfield k - host info from 800-830 fields >+ for my $f ( $marc_host->field('8[013][01]') ) { >+ my $k = $f->as_string('abcdnjltnp'); >+ $k .= ', ISSN ' . $f->subfield('x') if $f->subfield('x'); >+ $k .= ' ; ' . $f->subfield('v') if $f->subfield('v'); >+ push @sfd, ( 'k' => $k ); > } > >- # Edition >- if ( $host_field = $marc_host->field('250') ) { >- my $s = $host_field->as_string('ab'); >- if ($s) { >- push @sfd, ( b => $s); >- } >+ # Subfield x - ISSN from 022 >+ for my $f ( $marc_host->field('022') ) { >+ push @sfd, ( 'x' => $f->subfield('a') ) if $f->subfield('a'); > } > >- # ISSN >- if ( $host_field = $marc_host->field('022') ) { >- my $s = $host_field->as_string('a'); >- if ($s) { >- push @sfd, ( x => $s ); >- } >+ # Subfield z - ISBN from 020 >+ for my $f ( $marc_host->field('020') ) { >+ push @sfd, ( 'z' => $f->subfield('a') ) if $f->subfield('a'); > } > >- # ISBN >- if ( $host_field = $marc_host->field('020') ) { >- my $s = $host_field->as_string('a'); >- if ($s) { >- push @sfd, ( z => $s ); >- } >- } >+ # Subfield w - control number (001 and optionally 003) > if ( C4::Context->preference('UseControlNumber') ) { >- >- my $w; >- >- # Control number >- if ( $host_field = $marc_host->field('001') ) { >- $w = $host_field->data(); >- } >- >- # Control number identifier >- if ( $host_field = $marc_host->field('003') ) { >- $w = '(' . $host_field->data() . ')' . $w; >+ if ( my $f001 = $marc_host->field('001') ) { >+ my $w = $f001->data; >+ if ( my $f003 = $marc_host->field('003') ) { >+ $w = '(' . $f003->data . ')' . $w; >+ } >+ push @sfd, ( 'w' => $w ); > } >- >- push @sfd, ( w => $w ); > } >+ >+ # Construct 773 link field > $link_field = MARC::Field->new( 773, '0', ' ', @sfd ); >+ > } elsif ( $marcflavour eq 'UNIMARC' ) { > >- # Author >+ # Author (700/710/720) > if ( $host_field = $marc_host->field('700') || $marc_host->field('710') || $marc_host->field('720') ) { > my $s = $host_field->as_string('ab'); >- if ($s) { >- push @sfd, ( a => $s ); >- } >+ push @sfd, ( 'a' => $s ) if $s; > } > >- # Title >+ # Title (200) > if ( $host_field = $marc_host->field('200') ) { > my $s = $host_field->as_string('a'); >- if ($s) { >- push @sfd, ( t => $s ); >- } >+ push @sfd, ( 't' => $s ) if $s; > } > >- # Place of publication >+ # Place of publication (210$a) > if ( $host_field = $marc_host->field('210') ) { > my $s = $host_field->as_string('a'); >- if ($s) { >- push @sfd, ( c => $s ); >- } >+ push @sfd, ( 'c' => $s ) if $s; > } > >- # Date of publication >+ # Date of publication (210$d) > if ( $host_field = $marc_host->field('210') ) { > my $s = $host_field->as_string('d'); >- if ($s) { >- push @sfd, ( d => $s ); >- } >+ push @sfd, ( 'd' => $s ) if $s; > } > >- # Edition statement >+ # Edition statement (205) > if ( $host_field = $marc_host->field('205') ) { >- my $s = $host_field->as_string(); >- if ($s) { >- push @sfd, ( e => $s ); >- } >+ my $s = $host_field->as_string; >+ push @sfd, ( 'e' => $s ) if $s; > } > >- #URL >+ # URL (856$u) > if ( $host_field = $marc_host->field('856') ) { > my $s = $host_field->as_string('u'); >- if ($s) { >- push @sfd, ( u => $s ); >- } >+ push @sfd, ( u => $s ) if ($s); > } > >- # ISSN >+ # ISSN (011$a) > if ( $host_field = $marc_host->field('011') ) { > my $s = $host_field->as_string('a'); >- if ($s) { >- push @sfd, ( x => $s ); >- } >+ push @sfd, ( x => $s ) if ($s); > } > >- # ISBN >+ # ISBN (010$a) > if ( $host_field = $marc_host->field('010') ) { > my $s = $host_field->as_string('a'); >- if ($s) { >- push @sfd, ( y => $s ); >- } >+ push @sfd, ( y => $s ) if ($s); > } >- if ( $host_field = $marc_host->field('001') ) { > >+ # Control number (001) >+ if ( $host_field = $marc_host->field('001') ) { > push @sfd, ( 0 => $host_field->data() ); > } >+ >+ # Construct 461 link field > $link_field = MARC::Field->new( 461, '0', ' ', @sfd ); > } > >diff --git a/t/db_dependent/Koha/Biblio.t b/t/db_dependent/Koha/Biblio.t >index febb50d7737..ffaa3047bf2 100755 >--- a/t/db_dependent/Koha/Biblio.t >+++ b/t/db_dependent/Koha/Biblio.t >@@ -999,46 +999,92 @@ subtest 'get_volumes_query' => sub { > }; > > subtest 'generate_marc_host_field' => sub { >- plan tests => 24; >+ plan tests => 35; > > $schema->storage->txn_begin; > >+ # Set up MARC21 tests > t::lib::Mocks::mock_preference( 'marcflavour', 'MARC21' ); > >- my $biblio = $builder->build_sample_biblio(); >- my $record = $biblio->metadata->record; >+ # 1. Complete MARC21 record test >+ my $record = MARC::Record->new(); >+ $record->leader('00000nam a22000007a 4500'); > $record->append_fields( >- MARC::Field->new( '001', '1234' ), >- MARC::Field->new( '003', 'FIRST' ), >- MARC::Field->new( '240', '', '', a => 'A uniform title' ), >- MARC::Field->new( '260', '', '', a => 'Publication 260' ), >- MARC::Field->new( '250', '', '', a => 'Edition a', b => 'Edition b' ), >- MARC::Field->new( '022', '', '', a => '0317-8471' ), >+ MARC::Field->new( '001', '12345' ), >+ MARC::Field->new( '003', 'NB' ), >+ MARC::Field->new( '020', '', '', 'a' => '978-3-16-148410-0' ), >+ MARC::Field->new( '022', '', '', 'a' => '1234-5678' ), >+ MARC::Field->new( '100', '1', '', 'a' => 'Smith, John', 'e' => 'author', '9' => 'xyz', '4' => 'aut' ), >+ MARC::Field->new( '245', '1', '0', 'a' => 'The Title', 'b' => 'Subtitle', 'c' => 'John Smith' ), >+ MARC::Field->new( '250', '', '', 'a' => '2nd edition', 'b' => 'revised' ), >+ MARC::Field->new( '260', '', '', 'a' => 'New York', 'b' => 'Publisher', 'c' => '2023' ), >+ MARC::Field->new( '830', '', '', 'a' => 'Series Title', 'v' => 'vol. 2', 'x' => '2345-6789' ) > ); >- C4::Biblio::ModBiblio( $record, $biblio->biblionumber ); >- $biblio = Koha::Biblios->find( $biblio->biblionumber ); >+ my ($biblio_id) = AddBiblio( $record, qw{} ); >+ my $biblio = Koha::Biblios->find($biblio_id); > >- t::lib::Mocks::mock_preference( 'UseControlNumber', '0' ); >+ # Test MARC21 with UseControlNumber off >+ t::lib::Mocks::mock_preference( 'UseControlNumber', 0 ); > my $link = $biblio->generate_marc_host_field(); > >- is( ref($link), 'MARC::Field', "->generate_marc_host_field returns a MARC::Field object" ); >- is( $link->tag, '773', "MARC::Field->tag returns '773' when marcflavour is 'MARC21" ); >- is( $link->subfield('a'), 'Some boring author', 'MARC::Field->subfield(a) returns content from 100ab' ); >- is( $link->subfield('b'), 'Edition a Edition b', 'MARC::Field->subfield(b) returns content from 250ab' ); >- is( $link->subfield('d'), 'Publication 260', 'MARC::Field->subfield(c) returns content from 260abc' ); >- is( $link->subfield('s'), 'A uniform title', 'MARC::Field->subfield(s) returns content from 240a' ); >- is( $link->subfield('t'), 'Some boring read', 'MARC::Field->subfield(s) returns content from 245ab' ); >- is( $link->subfield('x'), '0317-8471', 'MARC::Field->subfield(s) returns content from 022a' ); >- is( $link->subfield('z'), undef, 'MARC::Field->subfield(s) returns undef when 020a is empty' ); >- is( $link->subfield('w'), undef, 'MARC::Field->subfield(w) returns undef when "UseControlNumber" is disabled' ); >+ # Test standard MARC21 field >+ is( ref($link), 'MARC::Field', 'Returns a MARC::Field object' ); >+ is( $link->tag(), '773', 'Field tag is 773 for MARC21' ); >+ is( $link->indicator(1), '0', 'First indicator is 0' ); >+ is( $link->indicator(2), ' ', 'Second indicator is blank' ); >+ >+ # Check all subfields >+ is( $link->subfield('7'), 'p1am', 'Subfield 7 correctly formed' ); >+ is( $link->subfield('a'), 'Smith, John', 'Subfield a contains author from 100a' ); >+ is( >+ $link->subfield('t'), 'The Title Subtitle', >+ 'Subfield t contains title without trailing punctuation from 245ab' >+ ); >+ is( $link->subfield('b'), '2nd edition revised', 'Subfield b contains edition info from 250ab' ); >+ is( $link->subfield('d'), 'New York Publisher 2023', 'Subfield d contains publication info from 260abc' ); >+ is( $link->subfield('k'), 'Series Title, ISSN 2345-6789 ; vol. 2', 'Subfield k contains series info from 830' ); >+ is( $link->subfield('x'), '1234-5678', 'Subfield x contains ISSN from 022a' ); >+ is( $link->subfield('z'), '978-3-16-148410-0', 'Subfield z contains ISBN from 020a' ); >+ is( $link->subfield('w'), undef, 'Subfield w is undefined when UseControlNumber is disabled' ); > >+ # Test with UseControlNumber enabled > t::lib::Mocks::mock_preference( 'UseControlNumber', '1' ); > $link = $biblio->generate_marc_host_field(); > is( >- $link->subfield('w'), '(FIRST)1234', >- 'MARC::Field->subfield(w) returns content from 003 and 001 when "UseControlNumber" is enabled' >+ $link->subfield('w'), '(NB)12345', >+ 'Subfield w contains control number with source when UseControlNumber is enabled' > ); > >+ # 245 punctuation handling tests >+ # Trailing slash >+ $record->field('245')->update( a => 'A title /', b => '', c => '', 'ind2' => '0' ); >+ ($biblio_id) = AddBiblio( $record, qw{} ); >+ $biblio = Koha::Biblios->find($biblio_id); >+ $link = $biblio->generate_marc_host_field(); >+ is( $link->subfield('t'), 'A title', "Trailing slash is removed from 245a" ); >+ >+ # Trailing period >+ $record->field('245')->update( a => 'Another title.', 'ind2' => '0' ); >+ ($biblio_id) = AddBiblio( $record, qw{} ); >+ $biblio = Koha::Biblios->find($biblio_id); >+ $link = $biblio->generate_marc_host_field(); >+ is( $link->subfield('t'), 'Another title', "Trailing period is removed from 245a" ); >+ >+ # Offset from indicator 2 = 4 >+ $record->field('245')->update( a => 'The offset title', 'ind2' => '4' ); >+ ($biblio_id) = AddBiblio( $record, qw{} ); >+ $biblio = Koha::Biblios->find($biblio_id); >+ $link = $biblio->generate_marc_host_field(); >+ is( $link->subfield('t'), 'Offset title', "Title offset applied from indicator 2" ); >+ >+ # Capitalization after offset >+ $record->field('245')->update( a => 'the capital test', 'ind2' => '0' ); >+ ($biblio_id) = AddBiblio( $record, qw{} ); >+ $biblio = Koha::Biblios->find($biblio_id); >+ $link = $biblio->generate_marc_host_field(); >+ is( $link->subfield('t'), 'The capital test', "Title is capitalized after indicator offset" ); >+ >+ # 260/264 handling tests > $record->append_fields( > MARC::Field->new( '264', '', '', a => 'Publication 264' ), > ); >@@ -1063,36 +1109,96 @@ subtest 'generate_marc_host_field' => sub { > 'MARC::Field->subfield(d) returns content from 264 with indicator 1 = 3 in prefernce to 264 without' > ); > >- # UNIMARC tests >- t::lib::Mocks::mock_preference( 'marcflavour', 'UNIMARC' ); >+ # 2. Test MARC21 with corporate author (110) >+ my $record_corporate = MARC::Record->new(); >+ $record_corporate->leader('00000nam a22000007a 4500'); >+ $record_corporate->append_fields( >+ MARC::Field->new( '110', '2', '', 'a' => 'Corporate Author', 'e' => 'sponsor', '9' => 'xyz', '4' => 'spn' ), >+ MARC::Field->new( '245', '1', '0', 'a' => 'The Title' ) >+ ); >+ ($biblio_id) = AddBiblio( $record_corporate, qw{} ); >+ $biblio = Koha::Biblios->find($biblio_id); > >- $biblio = $builder->build_sample_biblio(); >- $record = $biblio->metadata->record; >- $record->append_fields( >- MARC::Field->new( '001', '1234' ), >- MARC::Field->new( '700', '', '', a => 'A nice author' ), >- MARC::Field->new( '210', '', '', a => 'A publication', d => 'A date' ), >- MARC::Field->new( '205', '', '', a => "Fun things" ), >- MARC::Field->new( '856', '', '', u => 'http://myurl.com/' ), >- MARC::Field->new( '011', '', '', a => '0317-8471' ), >- MARC::Field->new( '545', '', '', a => 'Invisible on OPAC' ), >+ $link = $biblio->generate_marc_host_field(); >+ is( $link->subfield('7'), 'c2am', 'Subfield 7 correctly formed for corporate author' ); >+ is( $link->subfield('a'), 'Corporate Author', 'Subfield a contains corporate author' ); >+ >+ # 3. Test MARC21 with meeting name (111) >+ my $record_meeting = MARC::Record->new(); >+ $record_meeting->leader('00000nam a22000007a 4500'); >+ $record_meeting->append_fields( >+ MARC::Field->new( '111', '2', '', 'a' => 'Conference Name', 'j' => 'relator', '9' => 'xyz', '4' => 'spn' ), >+ MARC::Field->new( '245', '1', '0', 'a' => 'The Title' ) > ); >- C4::Biblio::ModBiblio( $record, $biblio->biblionumber ); >+ ($biblio_id) = AddBiblio( $record_meeting, qw{} ); >+ $biblio = Koha::Biblios->find($biblio_id); >+ >+ $link = $biblio->generate_marc_host_field(); >+ is( $link->subfield('7'), 'm2am', 'Subfield 7 correctly formed for meeting name' ); >+ >+ # 4. Test MARC21 with minimal record >+ my $record_minimal = MARC::Record->new(); >+ $record_minimal->leader('00000nam a22000007a 4500'); >+ $record_minimal->append_fields( MARC::Field->new( '245', '0', '0', 'a' => 'Title Only' ) ); >+ ($biblio_id) = AddBiblio( $record_minimal, qw{} ); >+ $biblio = Koha::Biblios->find($biblio_id); >+ >+ $link = $biblio->generate_marc_host_field(); >+ is( $link->subfield('7'), 'nnam', 'Subfield 7 correctly formed with no main entry' ); >+ >+ # 5. Test UNIMARC >+ t::lib::Mocks::mock_preference( 'marcflavour', 'UNIMARC' ); >+ $biblio = $builder->build_sample_biblio(); >+ my $record_unimarc = MARC::Record->new(); >+ $record_unimarc->append_fields( >+ MARC::Field->new( '001', '54321' ), >+ MARC::Field->new( '010', '', '', 'a' => '978-0-12-345678-9' ), >+ MARC::Field->new( '011', '', '', 'a' => '2345-6789' ), >+ MARC::Field->new( '200', '', '', 'a' => 'UNIMARC Title' ), >+ MARC::Field->new( '205', '', '', 'a' => 'Third edition' ), >+ MARC::Field->new( '210', '', '', 'a' => 'Paris', 'd' => '2023' ), >+ MARC::Field->new( '700', '', '', 'a' => 'Doe', 'b' => 'Jane' ), >+ MARC::Field->new( '856', '', '', 'u' => 'http://example.com' ) >+ ); >+ ($biblio_id) = AddBiblio( $record_unimarc, qw{} ); >+ $biblio = Koha::Biblios->find($biblio_id); >+ >+ $link = $biblio->generate_marc_host_field(); >+ >+ is( ref($link), 'MARC::Field', 'Returns a MARC::Field object for UNIMARC' ); >+ is( $link->tag(), '461', 'Field tag is 461 for UNIMARC' ); >+ is( $link->indicator(1), '0', 'First indicator is 0 for UNIMARC' ); >+ is( $link->indicator(2), ' ', 'Second indicator is blank for UNIMARC' ); >+ >+ # Check UNIMARC subfields >+ is( $link->subfield('a'), 'Doe Jane', 'Subfield a contains author for UNIMARC' ); >+ is( $link->subfield('t'), 'UNIMARC Title', 'Subfield t contains title for UNIMARC' ); >+ is( $link->subfield('c'), 'Paris', 'Subfield c contains place of publication for UNIMARC' ); >+ is( $link->subfield('d'), '2023', 'Subfield d contains date of publication for UNIMARC' ); >+ is( $link->subfield('0'), '54321', 'Subfield 0 contains control number for UNIMARC' ); >+ >+ # 6. Test UNIMARC with different author types >+ my $record_unimarc_corporate = MARC::Record->new(); >+ $record_unimarc_corporate->append_fields( >+ MARC::Field->new( '710', '', '', 'a' => 'Corporate', 'b' => 'Department' ), >+ MARC::Field->new( '200', '', '', 'a' => 'Title' ) >+ ); >+ C4::Biblio::ModBiblio( $record_unimarc_corporate, $biblio->biblionumber ); > $biblio = Koha::Biblios->find( $biblio->biblionumber ); > > $link = $biblio->generate_marc_host_field(); >+ is( $link->subfield('a'), 'Corporate Department', 'Subfield a contains corporate author for UNIMARC' ); >+ >+ my $record_unimarc_family = MARC::Record->new(); >+ $record_unimarc_family->append_fields( >+ MARC::Field->new( '720', '', '', 'a' => 'Family', 'b' => 'Name' ), >+ MARC::Field->new( '200', '', '', 'a' => 'Title' ) >+ ); >+ C4::Biblio::ModBiblio( $record_unimarc_family, $biblio->biblionumber ); >+ $biblio = Koha::Biblios->find( $biblio->biblionumber ); > >- is( ref($link), 'MARC::Field', "->generate_marc_host_field returns a MARC::Field object" ); >- is( $link->tag, '461', "MARC::Field->tag returns '461' when marcflavour is 'UNIMARC" ); >- is( $link->subfield('a'), 'A nice author', 'MARC::Field->subfield(a) returns content from 700ab' ); >- is( $link->subfield('c'), 'A publication', 'MARC::Field->subfield(b) returns content from 210a' ); >- is( $link->subfield('d'), 'A date', 'MARC::Field->subfield(c) returns content from 210d' ); >- is( $link->subfield('e'), 'Fun things', 'MARC::Field->subfield(s) returns content from 205' ); >- is( $link->subfield('t'), 'Some boring read', 'MARC::Field->subfield(s) returns content from 200a' ); >- is( $link->subfield('u'), 'http://myurl.com/', 'MARC::Field->subfield(s) returns content from 856u' ); >- is( $link->subfield('x'), '0317-8471', 'MARC::Field->subfield(s) returns content from 011a' ); >- is( $link->subfield('y'), undef, 'MARC::Field->subfield(w) returns undef if 010a is empty' ); >- is( $link->subfield('0'), '1234', 'MARC::Field->subfield(0) returns content from 001' ); >+ $link = $biblio->generate_marc_host_field(); >+ is( $link->subfield('a'), 'Family Name', 'Subfield a contains family name for UNIMARC' ); > > $schema->storage->txn_rollback; > t::lib::Mocks::mock_preference( 'marcflavour', 'MARC21' ); >-- >2.49.0
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 39545
:
180571
|
180572
|
180600
|
180601
|
181876
|
181877
|
181970
|
181987
| 181988