From c8b5634589b3974093d01e66bc59413459532250 Mon Sep 17 00:00:00 2001 From: Bernardo Gonzalez Kriegel Date: Tue, 15 Dec 2015 12:38:13 -0300 Subject: [PATCH] Bug 15358: Repopulate fields for authority merge This patch implements a quick and dirty way to revert changes introduced by Bug 8064 that prevent populating fields in authority merge. To test: 1) Verify the problem, i.e. try to merge any two authorities. Check that fields are empty 2) Apply the patch 3) Try again, verify fields are now populated Auth still don't merge, there is another problem but don't know how to fix it, this is only a partial solution. --- 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 diff --git a/Koha/MetadataRecord.pm b/Koha/MetadataRecord.pm index 1577cd0..ddb8975 100644 --- a/Koha/MetadataRecord.pm +++ b/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) = @_; diff --git a/Koha/Util/MARC.pm b/Koha/Util/MARC.pm index 22774b6..1a73145 100644 --- a/Koha/Util/MARC.pm +++ b/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 diff --git a/authorities/merge.pl b/authorities/merge.pl index 476b774..d78304f 100755 --- a/authorities/merge.pl +++ b/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( diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/merge-auth.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/merge-auth.inc new file mode 100644 index 0000000..9229635 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/merge-auth.inc @@ -0,0 +1,91 @@ +[% BLOCK sourcetab %] +
+ [% IF ( records ) %] + +
+
    + [% FOREACH record IN records %] + [% FOREACH field IN record.field %] +
  • + [% IF (defaultrecord) %] + + [% ELSE %] + + [% END %] + [% field.tag %] + + + + [% IF ( field.value ) %] / [% field.value %] + + + [% END %] + + [% IF ( field.subfield ) %] +
      + [% FOREACH subfiel IN field.subfield %] +
    • + [% IF (defaultrecord) %] + + [% ELSE %] + + [% END %] + [% subfiel.subtag %] / [% subfiel.value %] + + +
    • + [% END %] +
    + [% END %] + [% END %] +
  • + [% END %] +
+
+ [% 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

+
+
    + [% FOREACH record IN record1 %] + [% FOREACH field IN record.field %]
  • + [% field.tag %] + + + [% IF ( field.value ) %] / + [% field.value %] + + + [% END %] + + [% IF ( field.subfield ) %] +
      + [% FOREACH subfiel IN field.subfield %] +
    • + [% subfiel.subtag %] / [% subfiel.value %] + + +
    • + [% END %] +
    + [% END %] +
  • [% END %] + [% END %] +
+
+
+[% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/merge.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/merge.tt index 520b9cd..c085b4b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/merge.tt +++ b/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' %] -- 1.9.1