$template->param( BIG_LOOP => \@BIG_LOOP );
}
+#
+# sub that tries to find authorities linked to the biblio
+# the sub :
+# - search in the authority DB for the same authid (in $9 of the biblio)
+# - search in the authority DB for the same 001 (in $3 of the biblio in UNIMARC)
+# - search in the authority DB for the same values (exactly) (in all subfields of the biblio)
+# if the authority is found, the biblio is modified accordingly to be connected to the authority.
+# if the authority is not found, it's added, and the biblio is then modified to be connected to the authority.
+#
+
sub BiblioAddAuthorities{
my ( $record, $frameworkcode ) = @_;
my $dbh=C4::Context->dbh;
# No authorities id in the tag.
# Search if there is any authorities to link to.
my $query='at='.$data->{authtypecode}.' ';
- map {$query.= " and he,ext=".$_->[1] if ($_->[0]=~/[A-z]/)} $field->subfields();
- warn $query;
+ map {$query.= ' and he,ext="'.$_->[1].'"' if ($_->[0]=~/[A-z]/)} $field->subfields();
my ($error,$results)=SimpleSearch($query,"authorityserver");
# there is only 1 result
- if (scalar(@$results)==1) {
+ if ($results && scalar(@$results)==1) {
my $marcrecord = MARC::File::USMARC::decode($results->[0]);
$field->add_subfields('9'=>$marcrecord->field('001')->data);
$countlinked++;
- }elsif (scalar(@$results)>1) {
+ } 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]);
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);
+# warn "AUTH RECORD ADDED : ".$marcrecordauth->as_formatted;
my $authid=AddAuthority($marcrecordauth,'',$data->{authtypecode});
$countcreated++;
$field->add_subfields('9'=>$authid);