koha-cvs
[Top][All Lists]
Advanced

[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");




reply via email to

[Prev in Thread] Current Thread [Next in Thread]