From 67e0f42a08535ce11a4eab74c78d07ef546e30d7 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Fri, 19 Jan 2024 14:20:19 +0000 Subject: [PATCH] Bug 30047: Add new heading field to auth_header table This patch adds a new heading field containing the display form of the authority record NOTE: If trying to save an auhority in the 'DEFAULT' framework, you will get an error, you should not be using DEFAULT for authorities and we should remove from the list on another bug To test: 1 - Apply patches 2 - Update database 3 - Restart all 4 - Create a new authority, save. 5 - Do this for various types 6 - View the db records: SELECT * FROM auth_header\G 7 - Note new heading field is populated correctly 8 - Edit your new authorities 9 - Confirm the heading field is updated correctly 10 - Import some authorities and confirm heading generated correctly 11 - Import auth via Z39.50 and confirm heading generated correctly --- C4/AuthoritiesMarc.pm | 18 ++++++++++++++++-- C4/Heading/MARC21.pm | 3 +-- Koha/Authority.pm | 28 ++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm index 6af31ec6b9a..a93e3871498 100644 --- a/C4/AuthoritiesMarc.pm +++ b/C4/AuthoritiesMarc.pm @@ -674,7 +674,13 @@ sub AddAuthority { $action = 'create'; # Save a blank record, get authid - $authority = Koha::Authority->new( { datecreated => \'NOW()', marcxml => '' } )->store(); + $authority = Koha::Authority->new( + { + datecreated => \'NOW()', + marcxml => '', + authtypecode => $authtypecode + } + )->store(); $authority->discard_changes(); $authid = $authority->authid; logaction( "AUTHORITIES", "ADD", $authid, "authority" ) if C4::Context->preference("AuthoritiesLog"); @@ -687,9 +693,17 @@ sub AddAuthority { $record->delete_field( $record->field('001') ); $record->insert_fields_ordered( MARC::Field->new( '001', $authid ) ); + my $heading = $authority->heading_object( { record => $record } ); + # Update $authority->update( - { authtypecode => $authtypecode, marc => $record->as_usmarc, marcxml => $record->as_xml_record($format) } ); + { + authtypecode => $authtypecode, + marc => $record->as_usmarc, + marcxml => $record->as_xml_record($format), + heading => $heading->display_form, + } + ); unless ($skip_record_index) { my $indexer = Koha::SearchEngine::Indexer->new( { index => $Koha::SearchEngine::AUTHORITIES_INDEX } ); diff --git a/C4/Heading/MARC21.pm b/C4/Heading/MARC21.pm index e8d6f90553f..cb422d5c119 100644 --- a/C4/Heading/MARC21.pm +++ b/C4/Heading/MARC21.pm @@ -201,7 +201,7 @@ my $auth_heading_fields = { main_entry => 1 }, '151' => { - auth_type => 'GEOG_NAME', + auth_type => 'GEOGR_NAME', subfields => 'avxyz68', main_entry => 1 }, @@ -344,7 +344,6 @@ sub parse_heading { _get_search_heading( $field, $field_info->{'subfields'} ); my $display_heading = _get_display_heading( $field, $field_info->{'subfields'} ); - return ( $auth_type, $thesaurus, $search_heading, $display_heading, 'exact' ); } diff --git a/Koha/Authority.pm b/Koha/Authority.pm index 509d2f9ae71..cc29c802072 100644 --- a/Koha/Authority.pm +++ b/Koha/Authority.pm @@ -24,6 +24,8 @@ use base qw(Koha::Object); use Koha::Authority::ControlledIndicators; use Koha::SearchEngine::Search; +use C4::Heading qw( new_from_field ); + =head1 NAME Koha::Authority - Koha Authority Object class @@ -61,6 +63,32 @@ sub linked_biblionumbers { return Koha::Authorities->linked_biblionumbers( $params ); } +=head3 heading_object + + Routine to return the C4::Heading object for this authority + +=cut + +sub heading_object { + + my ( $self, $params ) = @_; + my $record = $params->{record}; + + if ( !$self->{_report_tag} ) { + my $authtype = Koha::Authority::Types->find( $self->authtypecode ); + return {} if !$authtype; # very exceptional + $self->{_report_tag} = $authtype->auth_tag_to_report; + } + + if ( !$record ) { + $record = $self->record; + } + my $field = $record->field( $self->{_report_tag} ); + my $heading = C4::Heading->new_from_field( $field, undef, 1 ); #new auth heading + return $heading; + +} + =head3 controlled_indicators Some authority types control the indicators of some corresponding -- 2.30.2