From 61efebb7e77a14e013186d0bfbc811610fd951d4 Mon Sep 17 00:00:00 2001 From: Henri-Damien LAURENT Date: Thu, 23 Aug 2007 17:53:05 +0200 Subject: [PATCH] Adding new feature : creating authorities on-the-fly. Signed-off-by: Chris Cormack --- cataloguing/addbiblio.pl | 54 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index 8777e6c3e7..8c93f112c7 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -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" -- 2.39.5