From 1fcab18c44326d20d2071fa195273ce2f0f4e6b7 Mon Sep 17 00:00:00 2001 From: hdl Date: Fri, 20 Jul 2007 16:38:21 +0000 Subject: [PATCH] Creating Biblio if BiblioAddAuthorities is set in system Preferences. Need further testing and debugging. Biblio is created but it seems the creation of authority fails. --- cataloguing/addbiblio.pl | 54 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index 5689fe4a20..f51d63051e 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -25,6 +25,7 @@ use C4::Auth; use C4::Output; use C4::Biblio; use C4::Search; +use C4::AuthoritiesMarc; use C4::Context; use MARC::Record; use C4::Log; @@ -265,7 +266,7 @@ sub create_input () { $subfield_data{marc_value}= build_authorized_values_list($tag, $subfield, $value, $dbh,$authorised_values_sth); # it's a thesaurus / authority field } elsif ($tagslib->{$tag}->{$subfield}->{authtypecode}) { - $subfield_data{marc_value}=" {$tag}->{$subfield}->{authtypecode}."&index=$i',$i)\">..."; + $subfield_data{marc_value}=" {$tag}->{$subfield}->{authtypecode}."&index=$i',$i)\">..."; # it's a plugin field } elsif ($tagslib->{$tag}->{$subfield}->{'value_builder'}) { # opening plugin. Just check wether we are on a developper computer on a production one @@ -454,6 +455,53 @@ sub build_hidden_data () { } +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){ + 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($record,'',$data->{authtypecode}); + $countcreated++; + $record->field($data->{tagfield})->add_subfields('9'=>$authid); + } + } + } + return ($countlinked,$countcreated); +} + # ======================== # MAIN #========================= @@ -556,6 +604,10 @@ if ($op eq "addbiblio") { else { ($biblionumber,$oldbibitemnum) = AddBiblio($record,$frameworkcode); } + if (C4::Context->preference("BiblioAddsAuthorities")){ + my ($countlinked,$countcreated)=BiblioAddAuthorities($record,$frameworkcode); + } + # now, redirect to additem page if ($mode ne "popup"){ print $input->redirect("/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode"); -- 2.39.5