Better conformance for UNIMARC Authorities Encoding
[koha.git] / C4 / AuthoritiesMarc.pm
index 8f67f0d..95e0655 100644 (file)
@@ -591,7 +591,7 @@ sub AddAuthority {
     my $sth=$dbh->prepare("select max(authid) from auth_header");
     $sth->execute;
     ($authid)=$sth->fetchrow;
-    $authid=$authid+1;
+    ( $authid ||= 0 )++; # $authid is undef for the first authority
     ## Insert the recordID in MARC record
     if   ( my $field = $record->field('001') ) { $field->data($authid) }
     else { $record->insert_fields_ordered(MARC::Field->new('001',$authid)) }
@@ -1051,12 +1051,13 @@ sub BuildUnimarcHierarchies{
   my $data = GetHeaderAuthority($authid);
   if ($data->{'authtrees'} and not $force){
     return $data->{'authtrees'};
-  } elsif ($data->{'authtrees'}){
-    $hierarchies=$data->{'authtrees'};
+#  } elsif ($data->{'authtrees'}){
+#    $hierarchies=$data->{'authtrees'};
   } else {
     my $record = GetAuthority($authid);
     my $found;
-    foreach my $field ($record->field('550')){
+    return unless $record;
+    foreach my $field ($record->field('5..')){
       if ($field->subfield('5') && $field->subfield('5') eq 'g'){
                my $subfauthid=_get_authid_subfield($field);
         my $parentrecord = GetAuthority($subfauthid);
@@ -1079,7 +1080,7 @@ sub BuildUnimarcHierarchies{
     }
     #Unless there is no ancestor, I am alone.
     $hierarchies="$authid" unless ($hierarchies);
-  }
+  } 
   AddAuthorityTrees($authid,$hierarchies);
   return $hierarchies;
 }
@@ -1110,11 +1111,12 @@ sub BuildUnimarcHierarchy{
   my $record = shift @_;
   my $class = shift @_;
   my $authid_constructed = shift @_;
+  return unless $record;
   my $authid=$record->field('001')->data();
   my %cell;
   my $parents=""; my $children="";
   my (@loopparents,@loopchildren);
-  foreach my $field ($record->field('550')){
+  foreach my $field ($record->field('5..')){
        my $subfauthid=_get_authid_subfield($field);
     if ($field->subfield('5') && $field->subfield('a')){
       if ($field->subfield('5') eq 'h'){