Fixing a bug where a cgi object wasnt being passed, in the reports dictionary
[koha_fer] / cataloguing / addbiblio.pl
index 08e404d..fc25bc7 100755 (executable)
@@ -264,12 +264,14 @@ sub GetMandatoryFieldZ3950($){
     my @title  = GetMarcFromKohaField('biblio.title',$frameworkcode);
     my @author = GetMarcFromKohaField('biblio.author',$frameworkcode);
     my @issn   = GetMarcFromKohaField('biblioitems.issn',$frameworkcode);
+    my @lccn   = GetMarcFromKohaField('biblioitems.lccn',$frameworkcode);
     
     return {
         $isbn[0].$isbn[1]     => 'isbn',
         $title[0].$title[1]   => 'title',
         $author[0].$author[1] => 'author',
         $issn[0].$issn[1]     => 'issn',
+        $lccn[0].$lccn[1]     => 'lccn',
     };
 }
 
@@ -647,6 +649,16 @@ sub build_tabs ($$$$$) {
     $template->param( BIG_LOOP => \@BIG_LOOP );
 }
 
+#
+# sub that tries to find authorities linked to the biblio
+# the sub :
+#   - search in the authority DB for the same authid (in $9 of the biblio)
+#   - search in the authority DB for the same 001 (in $3 of the biblio in UNIMARC)
+#   - search in the authority DB for the same values (exactly) (in all subfields of the biblio)
+# if the authority is found, the biblio is modified accordingly to be connected to the authority.
+# if the authority is not found, it's added, and the biblio is then modified to be connected to the authority.
+#
+
 sub BiblioAddAuthorities{
   my ( $record, $frameworkcode ) = @_;
   my $dbh=C4::Context->dbh;
@@ -662,20 +674,23 @@ AND (authtypecode IS NOT NULL AND 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'));
+    foreach my $field ($record->field($data->{tagfield})){
+      next if ($field->subfield('3')||$field->subfield('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,ext=".$_->[1] if ($_->[0]=~/[A-z]/)}  $record->field($data->{tagfield})->subfields();
-      warn $query;   
+      map {$query.= ' and he,ext="'.$_->[1].'"' if ($_->[0]=~/[A-z]/)}  $field->subfields();
       my ($error,$results)=SimpleSearch($query,"authorityserver");
     # there is only 1 result 
-      if (scalar(@$results)==1) {
+         if ( $error ) {
+        warn "BIBLIOADDSAUTHORITIES: $error";
+           return (0,0) ;
+         }
+      if ($results && scalar(@$results)==1) {
         my $marcrecord = MARC::File::USMARC::decode($results->[0]);
-        $record->field($data->{tagfield})->add_subfields('9'=>$marcrecord->field('001')->data);
+        $field->add_subfields('9'=>$marcrecord->field('001')->data);
         $countlinked++;
-      }elsif (scalar(@$results)>1) {
+      } elsif (scalar(@$results)>1) {
    #More than One result 
    #This can comes out of a lack of a subfield.
 #         my $marcrecord = MARC::File::USMARC::decode($results->[0]);
@@ -687,12 +702,13 @@ AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|);
   ###NOTICE : This can be a problem. We should also look into other types and rejected forms.
          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 $authfield=MARC::Field->new($authtypedata->{auth_tag_to_report},'','',"a"=>"".$field->subfield('a'));
+         map { $authfield->add_subfields($_->[0]=>$_->[1]) if ($_->[0]=~/[A-z]/ && $_->[0] ne "a" )}  $field->subfields();
+         $marcrecordauth->insert_fields_ordered($authfield);
+#          warn "AUTH RECORD ADDED : ".$marcrecordauth->as_formatted;
          my $authid=AddAuthority($marcrecordauth,'',$data->{authtypecode});
          $countcreated++;
-         $record->field($data->{tagfield})->add_subfields('9'=>$authid);
+         $field->add_subfields('9'=>$authid);
       }
     }  
   }