From 7e1862a2e25af1aa74ac410fa66d2053b73877ba Mon Sep 17 00:00:00 2001 From: Henri-Damien LAURENT Date: Tue, 6 Nov 2007 11:55:45 -0600 Subject: [PATCH] BiblioAddsAuthority : First version. This links to existing heading exactly matched. Result search must be unique. Do nothing if multiple result. Automaticaly Adds authority if heading donot match. (there should be a special status for that kind of authority) (We should look into Rejected forms before adding). Signed-off-by: Chris Cormack Signed-off-by: Joshua Ferraro --- cataloguing/addbiblio.pl | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index e23b321256..08e404d0e2 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -667,25 +667,32 @@ AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|); # No authorities id in the tag. # Search if there is any authorities to link to. my $query='at='.$data->{authtypecode}.' '; - map {$query.= " and he=".$_->[1] if ($_->[0]=~/[A-z]/)} $record->field($data->{tagfield})->subfields(); + map {$query.= " and he,ext=".$_->[1] if ($_->[0]=~/[A-z]/)} $record->field($data->{tagfield})->subfields(); + warn $query; my ($error,$results)=SimpleSearch($query,"authorityserver"); - # there is at least 1 result => return the 1st one - if (@$results>1) { + # there is only 1 result + if (scalar(@$results)==1) { my $marcrecord = MARC::File::USMARC::decode($results->[0]); $record->field($data->{tagfield})->add_subfields('9'=>$marcrecord->field('001')->data); + $countlinked++; + }elsif (scalar(@$results)>1) { + #More than One result + #This can comes out of a lack of a subfield. +# my $marcrecord = MARC::File::USMARC::decode($results->[0]); +# $record->field($data->{tagfield})->add_subfields('9'=>$marcrecord->field('001')->data); $countlinked++; } else { #There are no results, build authority record, add it to Authorities, get authid and add it to 9 - ###NOTICE : This is only valid if a subfield is linked to one and only one authtypecode - - my $authtypedata=GetAuthType($data->{authtypecode}); - my $marcrecordauth=MARC::Record->new(); - my $field=MARC::Field->new($authtypedata->{auth_tag_to_report},'','',"a"=>"".$record->subfield($data->{tagfield},'a')); - map { $field->add_subfields($_->[0]=>$_->[1]) if ($_->[0]=~/[A-z]/ && $_->[0] ne "a" )} $record->field($data->{tagfield})->subfields(); - $marcrecordauth->insert_fields_ordered($field); - my $authid=AddAuthority($marcrecordauth,'',$data->{authtypecode}); - $countcreated++; - $record->field($data->{tagfield})->add_subfields('9'=>$authid); + ###NOTICE : This is only valid if a subfield is linked to one and only one authtypecode + ###NOTICE : This can be a problem. We should also look into other types and rejected forms. + my $authtypedata=GetAuthType($data->{authtypecode}); + my $marcrecordauth=MARC::Record->new(); + my $field=MARC::Field->new($authtypedata->{auth_tag_to_report},'','',"a"=>"".$record->subfield($data->{tagfield},'a')); + map { $field->add_subfields($_->[0]=>$_->[1]) if ($_->[0]=~/[A-z]/ && $_->[0] ne "a" )} $record->field($data->{tagfield})->subfields(); + $marcrecordauth->insert_fields_ordered($field); + my $authid=AddAuthority($marcrecordauth,'',$data->{authtypecode}); + $countcreated++; + $record->field($data->{tagfield})->add_subfields('9'=>$authid); } } }