Bug 9149 <http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=9149>filed for tracking this.
On Mon, Nov 26, 2012 at 2:46 PM, Doug Kingston <d...@randomnotes.org> wrote: > This patch appears to break koha 3.8.7. The routine GetAuthorizedHeading > does not exist anywhere in the source. > This breaks link_bibs_to_authorities.pl and possibly other things. > > -Doug- > > > On Wed, Sep 26, 2012 at 2:39 PM, Jared Camins-Esakov < > jcam...@cpbibliography.com> wrote: > >> On 3.8.x, it was possible for multiple automatically generated >> authorities to be linked to a single heading. This patch deletes >> previous links from headings prior to linking them to >> automatically-generated headings. This patch also corrects a >> potential problem wherein multiple authorities might be generated if >> a record is edited repeatedly in quick succession. The latter problem >> exists on Master and 3.6.x as well, and the code that corrects the >> multiple linkages is equally applicable if seemingly unnecessary. >> --- >> C4/Biblio.pm | 124 >> +++++++++++++++++++++++++++++++++++++-------------------- >> 1 files changed, 80 insertions(+), 44 deletions(-) >> >> diff --git a/C4/Biblio.pm b/C4/Biblio.pm >> index ed8a169..9de9b85 100644 >> --- a/C4/Biblio.pm >> +++ b/C4/Biblio.pm >> @@ -568,21 +568,27 @@ sub LinkBibHeadingsToAuthorities { >> $results{'fuzzy'}->{ $heading->display_form() }++; >> } >> elsif ( C4::Context->preference('AutoCreateAuthorities') ) { >> - my $authtypedata = >> - C4::AuthoritiesMarc::GetAuthType( >> $heading->auth_type() ); >> - my $marcrecordauth = MARC::Record->new(); >> - if ( C4::Context->preference('marcflavour') eq 'MARC21' >> ) { >> - $marcrecordauth->leader(' nz a22 o 4500'); >> - SetMarcUnicodeFlag( $marcrecordauth, 'MARC21' ); >> + if ( _check_valid_auth_link( $current_link, $field ) ) { >> + $results{'linked'}->{ $heading->display_form() }++; >> } >> - my $authfield = >> - MARC::Field->new( $authtypedata->{auth_tag_to_report}, >> - '', '', "a" => "" . $field->subfield('a') ); >> - map { >> - $authfield->add_subfields( $_->[0] => $_->[1] ) >> - if ( $_->[0] =~ /[A-z]/ && $_->[0] ne "a" ) >> - } $field->subfields(); >> - $marcrecordauth->insert_fields_ordered($authfield); >> + else { >> + my $authtypedata = >> + C4::AuthoritiesMarc::GetAuthType( >> $heading->auth_type() ); >> + my $marcrecordauth = MARC::Record->new(); >> + if ( C4::Context->preference('marcflavour') eq >> 'MARC21' ) { >> + $marcrecordauth->leader(' nz a22 o >> 4500'); >> + SetMarcUnicodeFlag( $marcrecordauth, 'MARC21' ); >> + } >> + $field->delete_subfield( code => '9' ) >> + if defined $current_link; >> + my $authfield = >> + MARC::Field->new( >> $authtypedata->{auth_tag_to_report}, >> + '', '', "a" => "" . $field->subfield('a') ); >> + map { >> + $authfield->add_subfields( $_->[0] => $_->[1] ) >> + if ( $_->[0] =~ /[A-z]/ && $_->[0] ne "a" ) >> + } $field->subfields(); >> + $marcrecordauth->insert_fields_ordered($authfield); >> >> # bug 2317: ensure new authority knows it's using UTF-8; currently >> # only need to do this for MARC21, as MARC::Record->as_xml_record() >> handles >> @@ -591,41 +597,47 @@ sub LinkBibHeadingsToAuthorities { >> # use UTF-8, but as of 2008-08-05, did not want to introduce that kind >> # of change to a core API just before the 3.0 release. >> >> - if ( C4::Context->preference('marcflavour') eq 'MARC21' >> ) { >> - $marcrecordauth->insert_fields_ordered( >> - MARC::Field->new( >> - '667', '', '', >> - 'a' => "Machine generated authority record." >> - ) >> - ); >> - my $cite = >> - $bib->author() . ", " >> - . $bib->title_proper() . ", " >> - . $bib->publication_date() . " "; >> - $cite =~ s/^[\s\,]*//; >> - $cite =~ s/[\s\,]*$//; >> - $cite = >> - "Work cat.: (" >> - . C4::Context->preference('MARCOrgCode') . ")" >> - . $bib->subfield( '999', 'c' ) . ": " >> - . $cite; >> - $marcrecordauth->insert_fields_ordered( >> - MARC::Field->new( '670', '', '', 'a' => $cite ) >> ); >> - } >> + if ( C4::Context->preference('marcflavour') eq >> 'MARC21' ) { >> + $marcrecordauth->insert_fields_ordered( >> + MARC::Field->new( >> + '667', '', '', >> + 'a' => "Machine generated authority >> record." >> + ) >> + ); >> + my $cite = >> + $bib->author() . ", " >> + . $bib->title_proper() . ", " >> + . $bib->publication_date() . " "; >> + $cite =~ s/^[\s\,]*//; >> + $cite =~ s/[\s\,]*$//; >> + $cite = >> + "Work cat.: (" >> + . C4::Context->preference('MARCOrgCode') . ")" >> + . $bib->subfield( '999', 'c' ) . ": " >> + . $cite; >> + $marcrecordauth->insert_fields_ordered( >> + MARC::Field->new( '670', '', '', 'a' => >> $cite ) ); >> + } >> >> # warn "AUTH RECORD ADDED : >> ".$marcrecordauth->as_formatted; >> >> - $authid = >> - C4::AuthoritiesMarc::AddAuthority( $marcrecordauth, '', >> - $heading->auth_type() ); >> - $field->add_subfields( '9', $authid ); >> - $num_headings_changed++; >> - $results{'added'}->{ $heading->display_form() }++; >> + $authid = >> + C4::AuthoritiesMarc::AddAuthority( >> $marcrecordauth, '', >> + $heading->auth_type() ); >> + $field->add_subfields( '9', $authid ); >> + $num_headings_changed++; >> + $results{'added'}->{ $heading->display_form() }++; >> + } >> } >> elsif ( defined $current_link ) { >> - $field->delete_subfield( code => '9' ); >> - $num_headings_changed++; >> - $results{'unlinked'}->{ $heading->display_form() }++; >> + if ( _check_valid_auth_link( $current_link, $field ) ) { >> + $results{'linked'}->{ $heading->display_form() }++; >> + } >> + else { >> + $field->delete_subfield( code => '9' ); >> + $num_headings_changed++; >> + $results{'unlinked'}->{ $heading->display_form() }++; >> + } >> } >> else { >> $results{'unlinked'}->{ $heading->display_form() }++; >> @@ -636,6 +648,30 @@ sub LinkBibHeadingsToAuthorities { >> return $num_headings_changed, \%results; >> } >> >> +=head2 _check_valid_auth_link >> + >> + if ( _check_valid_auth_link($authid, $field) ) { >> + ... >> + } >> + >> +Check whether the specified heading-auth link is valid without reference >> +to Zebra/Solr. Ideally this code would be in C4::Heading, but that won't >> be >> +possible until we have de-cycled C4::AuthoritiesMarc, so this is the >> +safest place. >> + >> +=cut >> + >> +sub _check_valid_auth_link { >> + my ( $authid, $field ) = @_; >> + >> + require C4::AuthoritiesMarc; >> + >> + my $authorized_heading = >> + C4::AuthoritiesMarc::GetAuthorizedHeading( { 'authid' => $authid } >> ); >> + >> + return ($field->as_string('abcdefghijklmnopqrstuvwxyz') eq >> $authorized_heading); >> +} >> + >> =head2 GetRecordValue >> >> my $values = GetRecordValue($field, $record, $frameworkcode); >> -- >> 1.7.2.5 >> _______________________________________________ >> Koha-patches mailing list >> Koha-patches@lists.koha-community.org >> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches >> website : http://www.koha-community.org/ >> git : http://git.koha-community.org/ >> bugs : http://bugs.koha-community.org/ >> > >
_______________________________________________ Koha-patches mailing list Koha-patches@lists.koha-community.org http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches website : http://www.koha-community.org/ git : http://git.koha-community.org/ bugs : http://bugs.koha-community.org/