Merge remote branch 'kc/new/bug_5914' into kcmaster

This commit is contained in:
Chris Cormack 2011-04-06 15:35:11 +12:00
commit e9db636e63

View file

@ -1125,33 +1125,34 @@ sub BuildUnimarcHierarchies{
my $data = GetHeaderAuthority($authid); my $data = GetHeaderAuthority($authid);
if ($data->{'authtrees'} and not $force){ if ($data->{'authtrees'} and not $force){
return $data->{'authtrees'}; return $data->{'authtrees'};
} elsif ($data->{'authtrees'}){ # } elsif ($data->{'authtrees'}){
$hierarchies=$data->{'authtrees'}; # $hierarchies=$data->{'authtrees'};
} else { } else {
my $record = GetAuthority($authid); my $record = GetAuthority($authid);
my $found; my $found;
if ($record){ return unless $record;
foreach my $field ($record->field('550')){ foreach my $field ($record->field('5..')){
if ($field->subfield('5') && $field->subfield('5') eq 'g'){ if ($field->subfield('5') && $field->subfield('5') eq 'g'){
my $parentrecord = GetAuthority($field->subfield('3')); my $subfauthid=_get_authid_subfield($field);
my $localresult=$hierarchies; next if ($subfauthid eq $authid);
my $trees; my $parentrecord = GetAuthority($subfauthid);
$trees = BuildUnimarcHierarchies($field->subfield('3')); my $localresult=$hierarchies;
my @trees; my $trees;
if ($trees=~/;/){ $trees = BuildUnimarcHierarchies($subfauthid);
@trees = split(/;/,$trees); my @trees;
} else { if ($trees=~/;/){
push @trees, $trees; @trees = split(/;/,$trees);
} } else {
foreach (@trees){ push @trees, $trees;
$_.= ",$authid"; }
} foreach (@trees){
@globalresult = (@globalresult,@trees); $_.= ",$authid";
$found=1; }
} @globalresult = (@globalresult,@trees);
$hierarchies=join(";",@globalresult); $found=1;
} }
} $hierarchies=join(";",@globalresult);
}
#Unless there is no ancestor, I am alone. #Unless there is no ancestor, I am alone.
$hierarchies="$authid" unless ($hierarchies); $hierarchies="$authid" unless ($hierarchies);
} }
@ -1188,15 +1189,16 @@ sub BuildUnimarcHierarchy{
my $parents=""; my $children=""; my $parents=""; my $children="";
my (@loopparents,@loopchildren); my (@loopparents,@loopchildren);
foreach my $field ($record->field('5..')){ foreach my $field ($record->field('5..')){
my $subfauthid=_get_authid_subfield($field); my $subfauthid=_get_authid_subfield($field);
if ($field->subfield('5') && $field->subfield('a')){ if ($subfauthid && $field->subfield('5') && $field->subfield('a')){
if ($field->subfield('5') eq 'h'){ if ($field->subfield('5') eq 'h'){
push @loopchildren, { "childauthid"=>$subfauthid,"childvalue"=>$field->subfield('a')}; push @loopchildren, { "childauthid"=>$field->subfield('3'),"childvalue"=>$field->subfield('a')};
}elsif ($field->subfield('5') eq 'g'){ }
push @loopparents, { "parentauthid"=>$subfauthid,"parentvalue"=>$field->subfield('a')}; elsif ($field->subfield('5') eq 'g'){
} push @loopparents, { "parentauthid"=>$field->subfield('3'),"parentvalue"=>$field->subfield('a')};
}
# brothers could get in there with an else # brothers could get in there with an else
} }
} }
$cell{"ifparents"}=1 if (scalar(@loopparents)>0); $cell{"ifparents"}=1 if (scalar(@loopparents)>0);
$cell{"ifchildren"}=1 if (scalar(@loopchildren)>0); $cell{"ifchildren"}=1 if (scalar(@loopchildren)>0);