Adding new feature : creating authorities on-the-fly.

Signed-off-by: Chris Cormack <crc@liblime.com>
This commit is contained in:
Henri-Damien LAURENT 2007-08-23 17:53:05 +02:00 committed by Chris Cormack
parent a72ffac009
commit 61efebb7e7
1 changed files with 50 additions and 4 deletions

View File

@ -589,6 +589,53 @@ sub build_tabs ($$$$$) {
$template->param( BIG_LOOP => \@BIG_LOOP );
}
sub BiblioAddAuthorities{
my ( $record, $frameworkcode ) = @_;
my $dbh=C4::Context->dbh;
my $query=$dbh->prepare(qq|
SELECT authtypecode,tagfield
FROM marc_subfield_structure
WHERE frameworkcode=?
AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|);
# SELECT authtypecode,tagfield
# FROM marc_subfield_structure
# WHERE frameworkcode=?
# AND (authtypecode IS NOT NULL OR authtypecode<>\"\")|);
$query->execute($frameworkcode);
my ($countcreated,$countlinked);
while (my $data=$query->fetchrow_hashref){
warn Data::Dumper::Dumper($data);
if ($record->field($data->{tagfield})){
next if ($record->subfield($data->{tagfield},'3')||$record->subfield($data->{tagfield},'9'));
# 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();
warn $query;
my ($error,$results)=SimpleSearch($query,"authorityserver");
# there is at least 1 result => return the 1st one
if (@$results>1) {
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);
}
}
}
return ($countlinked,$countcreated);
}
# ========================
# MAIN
#=========================
@ -696,6 +743,9 @@ if ( $op eq "addbiblio" ) {
if ( !$duplicatebiblionumber or $confirm_not_duplicate ) {
my $oldbibnum;
my $oldbibitemnum;
if (C4::Context->preference("BiblioAddsAuthorities")){
my ($countlinked,$countcreated)=BiblioAddAuthorities($record,$frameworkcode);
}
if ( $is_a_modif ) {
ModBiblioframework( $biblionumber, $frameworkcode );
ModBiblio( $record, $biblionumber, $frameworkcode );
@ -704,10 +754,6 @@ if ( $op eq "addbiblio" ) {
( $biblionumber, $oldbibitemnum ) = AddBiblio( $record, $frameworkcode );
}
if (C4::Context->preference("BiblioAddsAuthorities")){
my ($countlinked,$countcreated)=BiblioAddAuthorities($record,$frameworkcode);
}
if ($mode ne "popup"){
print $input->redirect(
"/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode"