From d219df70e8d32cab21686e049c44119b2059802e Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Thu, 13 Feb 2020 11:33:15 +0000 Subject: [PATCH] Bug 21800: Make TransformKohaToMarc aware of non-repeatable subfields If a kohafield (in Koha to MARC mappings) contains a pipe char (say A | B), we split it up into two subfields A and B in MARC. We will only do that for repeatable subfields now. If the field is not repeatable, the value will just be 'A | B'. Note 1: As bug 10306 and its friends (19096) made the Default framework authoritative, we do no longer have the frameworkcode in this routine. Formally, we should check the corresponding framework. Note 2: Does this impact the reverse operation in TransformMarcToKoha? No, the check on repeatable subfields is done in the interface and not in TransformMarcToKoha. This routine simply translates two instances of the same subfield, say A and B, into the value 'A | B' for a kohafield. Not allowing two instances of a non-repeatable subfield is not in the scope of this report. Test plan: [1] Mark an item field as repeatable in the Default framework. Edit an item. Insert A|B in this field and another not-repeatable field. Save and reopen. Verify that the repeatable field is duplicated and the other one contains the pipe character in the text box. [2] Look for a repeatable subfield in MARC like e.g. 260$c. Go to the cataloguing editor and add A|B in this field. Signed-off-by: Marcel de Rooy Signed-off-by: Ere Maijala Signed-off-by: Katrin Fischer --- C4/Biblio.pm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 60bdc8980a..7922fa4409 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -1997,7 +1997,10 @@ sub TransformKohaToMarc { my $tagfield = $fld->{tagfield}; my $tagsubfield = $fld->{tagsubfield}; next if !$tagfield; - my @values = $params->{no_split} + + # BZ 21800: split value if field is repeatable; NOTE that this also + # depends on the Default framework. + my @values = $params->{no_split} || !$fld->{repeatable} ? ( $value ) : split(/\s?\|\s?/, $value, -1); foreach my $value ( @values ) { -- 2.11.0