@@ -, +, @@ --- Koha/MetadataRecord.pm | 14 ++++ Koha/Util/MARC.pm | 82 +++++++++++++++++++ authorities/merge.pl | 4 +- .../intranet-tmpl/prog/en/includes/merge-auth.inc | 91 ++++++++++++++++++++++ .../prog/en/modules/authorities/merge.tt | 2 +- 5 files changed, 190 insertions(+), 3 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/includes/merge-auth.inc --- a/Koha/MetadataRecord.pm +++ a/Koha/MetadataRecord.pm @@ -117,6 +117,20 @@ sub createMergeHash { } } +=head2 createMergeHashAuth + +Create a hash for use when merging authority records. At the moment the only +metadata schema supported is MARC. + +=cut + +sub createMergeHashAuth { + my ($self, $tagslib) = @_; + if ($self->schema =~ m/marc/) { + return Koha::Util::MARC::createMergeHashAuth($self->record, $tagslib); + } +} + sub getKohaField { my ($self, $kohafield) = @_; --- a/Koha/Util/MARC.pm +++ a/Koha/Util/MARC.pm @@ -26,6 +26,88 @@ Koha::Util::MARC - utility class with routines for working with MARC records =head1 METHODS +=head2 createMergeHashAuth + +Create a hash to use when merging authority records + +=cut + +sub createMergeHashAuth { + my ( $record, $tagslib ) = @_; + + return unless $record; + + my @array; + my @fields = $record->fields(); + + foreach my $field (@fields) { + my $fieldtag = $field->tag(); + if ( $fieldtag < 10 ) { + if ( !defined($tagslib) + || $tagslib->{$fieldtag}->{'@'}->{'tab'} >= 0 ) + { + push @array, + { + field => [ + { + tag => $fieldtag, + key => _createKey(), + value => $field->data(), + } + ] + }; + } + } + else { + my @subfields = $field->subfields(); + my @subfield_array; + foreach my $subfield (@subfields) { + if ( + !defined($tagslib) + || ( defined $tagslib->{$fieldtag} + && defined $tagslib->{$fieldtag}->{ @$subfield[0] } + && defined $tagslib->{$fieldtag}->{ @$subfield[0] }->{'tab'} + && $tagslib->{$fieldtag}->{ @$subfield[0] }->{'tab'} >= 0 ) + ) + { + push @subfield_array, + { + subtag => @$subfield[0], + subkey => _createKey(), + value => @$subfield[1], + }; + } + + } + + if ( + ( + !defined($tagslib) || ( defined $tagslib->{$fieldtag} + && defined $tagslib->{$fieldtag}->{'tab'} + && $tagslib->{$fieldtag}->{'tab'} >= 0 ) + ) + && @subfield_array + ) + { + push @array, + { + field => [ + { + tag => $fieldtag, + key => _createKey(), + indicator1 => $field->indicator(1), + indicator2 => $field->indicator(2), + subfield => [@subfield_array], + } + ] + }; + } + + } + } + return [@array]; +} + =head2 createMergeHash Create a hash to use when merging MARC records --- a/authorities/merge.pl +++ a/authorities/merge.pl @@ -133,8 +133,8 @@ else { # Creating a loop for display - my @record1 = $recordObj1->createMergeHash($tagslib); - my @record2 = $recordObj2->createMergeHash($tagslib); + my @record1 = $recordObj1->createMergeHashAuth($tagslib); + my @record2 = $recordObj2->createMergeHashAuth($tagslib); # Parameters $template->param( --- a/koha-tmpl/intranet-tmpl/prog/en/includes/merge-auth.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/merge-auth.inc @@ -0,0 +1,91 @@ +[% BLOCK sourcetab %] +
+ [% IF ( records ) %] + +
+ +
+ [% END %] +
+[% END %] +[% BLOCK mergesource %] +
+

Source records

+ + [% PROCESS sourcetab records=record1 recordnumber=1 defaultrecord=1 %] + [% PROCESS sourcetab records=record2 recordnumber=2 defaultrecord=0 %] +
+[% END %] +[% BLOCK mergetarget %] +
+

Destination record

+
+ +
+
+[% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/merge.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/merge.tt @@ -1,4 +1,4 @@ -[% PROCESS 'merge-record.inc' %] +[% PROCESS 'merge-auth.inc' %] [% INCLUDE 'doc-head-open.inc' %] Koha › Cataloging › Merging records [% INCLUDE 'greybox.inc' %] --