Bug 21826: Use subfield map in LinkBibHeadingsToAuthorities
authorEre Maijala <ere.maijala@helsinki.fi>
Tue, 13 Nov 2018 16:43:50 +0000 (16:43 +0000)
committerNick Clemens <nick@bywatersolutions.com>
Fri, 25 Jan 2019 20:13:38 +0000 (20:13 +0000)
Use only allowable subfields when creating authorities from
bibliographic records.

Sponsored-by: National Library of Finland
Signed-off-by: Brendan Gallagher <brendan@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
C4/Biblio.pm
C4/Heading.pm
C4/Heading/MARC21.pm

index 808ed8d..0249983 100644 (file)
@@ -539,7 +539,10 @@ sub LinkBibHeadingsToAuthorities {
                         '', '', "a" => "" . $field->subfield('a') );
                     map {
                         $authfield->add_subfields( $_->[0] => $_->[1] )
-                          if ( $_->[0] =~ /[A-z]/ && $_->[0] ne "a" )
+                          if ( $_->[0] =~ /[A-z]/ && $_->[0] ne "a"
+                            && C4::Heading::valid_bib_heading_subfield(
+                                $authority_type->auth_tag_to_report, $_->[0] )
+                            );
                     } $field->subfields();
                     $marcrecordauth->insert_fields_ordered($authfield);
 
@@ -2989,7 +2992,7 @@ sub _koha_modify_biblio {
 
     $sth->execute(
         $frameworkcode,      $biblio->{'author'},      $biblio->{'title'},         $biblio->{'unititle'}, $biblio->{'notes'},
-        $biblio->{'serial'}, $biblio->{'seriestitle'}, $biblio->{'copyrightdate'}, $biblio->{'abstract'}, $biblio->{'biblionumber'}
+        $biblio->{'serial'}, $biblio->{'seriestitle'}, $biblio->{'copyrightdate'} ? int($biblio->{'copyrightdate'}) : undef, $biblio->{'abstract'}, $biblio->{'biblionumber'}
     ) if $biblio->{'biblionumber'};
 
     if ( $dbh->errstr || !$biblio->{'biblionumber'} ) {
index 642ecba..53dd007 100644 (file)
@@ -17,6 +17,8 @@ package C4::Heading;
 # You should have received a copy of the GNU General Public License
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
+use Modern::Perl;
+
 use strict;
 use warnings;
 use 5.010;
@@ -172,6 +174,22 @@ sub preferred_authorities {
     return $results;
 }
 
+=head2 valid_bib_heading_subfield
+
+    if (C4::Heading::valid_bib_heading_subfield('100', 'e', '')) ...
+
+=cut
+
+sub valid_bib_heading_subfield {
+    my $tag           = shift;
+    my $subfield      = shift;
+    my $marcflavour   = @_ ? shift : C4::Context->preference('marcflavour');
+
+    my $marc_handler = _marc_format_handler($marcflavour);
+
+    return $marc_handler->valid_bib_heading_subfield( $tag, $subfield );
+}
+
 =head1 INTERNAL METHODS
 
 =head2 _search
index 9a50cf6..fc4d576 100644 (file)
@@ -161,6 +161,21 @@ sub valid_bib_heading_tag {
 
 }
 
+=head2 valid_bib_heading_subfield
+
+=cut
+
+sub valid_bib_heading_subfield {
+    my $self          = shift;
+    my $tag           = shift;
+    my $subfield      = shift;
+
+    if ( exists $bib_heading_fields->{$tag} ) {
+        return 1 if ($bib_heading_fields->{$tag}->{subfields} =~ /$subfield/);
+    }
+    return 0;
+}
+
 =head2 parse_heading
 
 =cut