Bug 26894: Handle subfield 0 and delete empty fields
This patch corrects handling of subfield 0 when copying/moving. Before these
patches copying from subfield 0 would copy the entire field.
We also correct an error that if moving a single subfield, we can leave behind empty
fields with no subfields. They should be deleted.
To test:
1 - Define a new MARC Modification template with actions:
Delete field 100$0
Add new field 100$0 with value Test
Update existing or add new field 100$0 with value TestUpdated
Move field 100$0 to 600$0
Copy field 600$0 to 100$0
Copy and replace field 245$0 to 700$0
2 - Define a new record like:
LDR 00334nam a22001217a 4500
003 ff
005 20201102111604.0
008 201102b xxu||||| |||| 00| 0 eng d
040 _ _ ‡cvsd
100 1 _ ‡012345‡aKnuth, Donal Ervin‡d1938
245 _ _ ‡012345‡aThe aty of computer programming‡cDonald E. Knuth
650 _ 0 ‡042‡aComputer programming‡9462
3 - Modify this record using the template above
4 - Note that entier 245 is copied to 700, same for 600 field
5 - Apply patch
6 - Now only subfields 0 are copied
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
4253eb91a6
commit
77f3d48dee
|
|
@ -141,8 +141,8 @@ sub copy_and_replace_field {
|
|||
if ( ! ( $record && $fromFieldName && $toFieldName ) ) { return; }
|
||||
|
||||
|
||||
if ( not $fromSubfieldName or $fromSubfieldName eq ''
|
||||
or not $toSubfieldName or $toSubfieldName eq ''
|
||||
if ( !defined $fromSubfieldName or $fromSubfieldName eq ''
|
||||
or !defined $toSubfieldName or $toSubfieldName eq ''
|
||||
) {
|
||||
_copy_move_field(
|
||||
{ record => $record,
|
||||
|
|
@ -480,9 +480,9 @@ sub move_field {
|
|||
my $regex = $params->{regex};
|
||||
my $field_numbers = $params->{field_numbers} // [];
|
||||
|
||||
if ( not $fromSubfieldName
|
||||
if ( !defined $fromSubfieldName
|
||||
or $fromSubfieldName eq ''
|
||||
or not $toSubfieldName
|
||||
or !defined $toSubfieldName
|
||||
or $toSubfieldName eq '' ) {
|
||||
_copy_move_field(
|
||||
{ record => $record,
|
||||
|
|
@ -564,6 +564,7 @@ sub _delete_subfield {
|
|||
|
||||
foreach my $field ( @fields ) {
|
||||
$field->delete_subfield( code => $subfieldName );
|
||||
$record->delete_field( $field ) unless $field->subfields();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -700,6 +700,11 @@ sub expected_record_0 {
|
|||
my $record = MARC::Record->new;
|
||||
$record->leader('03174nam a2200445 a 4500');
|
||||
my @fields = (
|
||||
MARC::Field->new(
|
||||
100, '1', ' ',
|
||||
a => 'Knuth, Donald Ervin',
|
||||
d => '1938',
|
||||
),
|
||||
MARC::Field->new(
|
||||
245, '1', '4',
|
||||
0 => '12345',
|
||||
|
|
@ -713,9 +718,7 @@ sub expected_record_0 {
|
|||
9 => '462',
|
||||
),
|
||||
MARC::Field->new(
|
||||
600, '1', ' ',
|
||||
a => 'Knuth, Donald Ervin',
|
||||
d => '1938',
|
||||
600, ' ', ' ',
|
||||
0 => 'TestUpdated',
|
||||
),
|
||||
MARC::Field->new(
|
||||
|
|
@ -723,9 +726,7 @@ sub expected_record_0 {
|
|||
0 => 'TestUpdated',
|
||||
),
|
||||
MARC::Field->new(
|
||||
100, '1', ' ',
|
||||
a => 'Knuth, Donald Ervin',
|
||||
d => '1938',
|
||||
100, ' ', ' ',
|
||||
0 => 'TestUpdated',
|
||||
),
|
||||
MARC::Field->new(
|
||||
|
|
@ -733,10 +734,8 @@ sub expected_record_0 {
|
|||
0 => 'TestUpdated',
|
||||
),
|
||||
MARC::Field->new(
|
||||
700, '1', '4',
|
||||
700, ' ', ' ',
|
||||
0 => '12345',
|
||||
a => 'The art of computer programming',
|
||||
c => 'Donald E. Knuth.',
|
||||
),
|
||||
);
|
||||
$record->append_fields(@fields);
|
||||
|
|
|
|||
Loading…
Reference in New Issue