[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Koha-cvs] koha/cataloguing addbiblio.pl
From: |
Henri-Damien LAURENT |
Subject: |
[Koha-cvs] koha/cataloguing addbiblio.pl |
Date: |
Fri, 20 Jul 2007 16:38:21 +0000 |
CVSROOT: /cvsroot/koha
Module name: koha
Changes by: Henri-Damien LAURENT <hdl> 07/07/20 16:38:21
Modified files:
cataloguing : addbiblio.pl
Log message:
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.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/cataloguing/addbiblio.pl?cvsroot=koha&r1=1.29&r2=1.30
Patches:
Index: addbiblio.pl
===================================================================
RCS file: /cvsroot/koha/koha/cataloguing/addbiblio.pl,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -b -r1.29 -r1.30
--- addbiblio.pl 16 Jul 2007 15:49:53 -0000 1.29
+++ addbiblio.pl 20 Jul 2007 16:38:21 -0000 1.30
@@ -1,6 +1,6 @@
#!/usr/bin/perl
-# $Id: addbiblio.pl,v 1.29 2007/07/16 15:49:53 hdl Exp $
+# $Id: addbiblio.pl,v 1.30 2007/07/20 16:38:21 hdl Exp $
# Copyright 2000-2002 Katipo Communications
#
@@ -25,6 +25,7 @@
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 @@
$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}="<input type=\"text\"
onblur=\"this.style.backgroundColor='#ffffff';\"
onfocus=\"this.style.backgroundColor='#ffff00;'\"\" tabindex=\"1\"
type=\"text\" name=\"field_value\" value=\"$value\" size=\"70\"
maxlength=\"255\" DISABLE READONLY> <a style=\"cursor: help;\"
href=\"javascript:Dopop('../authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode}."&index=$i',$i)\">...</a>";
+ $subfield_data{marc_value}="<input type=\"text\"
onblur=\"this.style.backgroundColor='#ffffff';\"
onfocus=\"this.style.backgroundColor='#ffff00;'\"\" tabindex=\"1\"
type=\"text\" name=\"field_value\" value=\"$value\" size=\"70\"
maxlength=\"255\"> <a style=\"cursor: help;\"
href=\"javascript:Dopop('../authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode}."&index=$i',$i)\">...</a>";
# 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 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 @@
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");