View | Details | Raw Unified | Return to bug 8204
Collapse All | Expand All

(-)a/C4/AuthoritiesMarc.pm (-116 / +114 lines)
Lines 1008-1147 sub BuildSummary { Link Here
1008
        $resultstring =~ s/\[(.*?)\]//g;
1008
        $resultstring =~ s/\[(.*?)\]//g;
1009
        $resultstring =~ s/\n/<br>/g;
1009
        $resultstring =~ s/\n/<br>/g;
1010
        $summary{summary}      =  $resultstring;
1010
        $summary{summary}      =  $resultstring;
1011
    } else {
1011
    }
1012
        my @authorized;
1012
    my @authorized;
1013
        my @notes;
1013
    my @notes;
1014
        my @seefrom;
1014
    my @seefrom;
1015
        my @seealso;
1015
    my @seealso;
1016
        my @otherscript;
1016
    my @otherscript;
1017
        my @fields = $record->fields();
1017
    my @fields = $record->fields();
1018
        if (C4::Context->preference('marcflavour') eq 'UNIMARC') {
1018
    if (C4::Context->preference('marcflavour') eq 'UNIMARC') {
1019
# construct UNIMARC summary, that is quite different from MARC21 one
1019
# construct UNIMARC summary, that is quite different from MARC21 one
1020
# accepted form
1020
# accepted form
1021
            foreach my $field ($record->field('2..')) {
1021
        foreach my $field ($record->field('2..')) {
1022
                push @authorized, { heading => $field->as_string('abcdefghijlmnopqrstuvwxyz'), field => $field->tag() };
1022
            push @authorized, { heading => $field->as_string('abcdefghijlmnopqrstuvwxyz'), field => $field->tag() };
1023
            }
1023
        }
1024
# rejected form(s)
1024
# rejected form(s)
1025
            foreach my $field ($record->field('3..')) {
1025
        foreach my $field ($record->field('3..')) {
1026
                push @notes, { note => $field->subfield('a'), field => $field->tag() };
1026
            push @notes, { note => $field->subfield('a'), field => $field->tag() };
1027
            }
1027
        }
1028
            foreach my $field ($record->field('4..')) {
1028
        foreach my $field ($record->field('4..')) {
1029
                my $thesaurus = $field->subfield('2') ? "thes. : ".$thesaurus{"$field->subfield('2')"}." : " : '';
1029
            my $thesaurus = $field->subfield('2') ? "thes. : ".$thesaurus{"$field->subfield('2')"}." : " : '';
1030
                push @seefrom, { heading => $thesaurus . $field->as_string('abcdefghijlmnopqrstuvwxyz'), type => 'seefrom', field => $field->tag() };
1030
            push @seefrom, { heading => $thesaurus . $field->as_string('abcdefghijlmnopqrstuvwxyz'), type => 'seefrom', field => $field->tag() };
1031
            }
1031
        }
1032
# see :
1032
# see :
1033
            foreach my $field ($record->field('5..')) {
1033
        foreach my $field ($record->field('5..')) {
1034
                if (($field->subfield('5')) && ($field->subfield('a')) && ($field->subfield('5') eq 'g')) {
1034
            if (($field->subfield('5')) && ($field->subfield('a')) && ($field->subfield('5') eq 'g')) {
1035
                    push @seealso, { $field->as_string('abcdefgjxyz'), type => 'broader', field => $field->tag() };
1035
                push @seealso, { $field->as_string('abcdefgjxyz'), type => 'broader', field => $field->tag() };
1036
                } elsif (($field->subfield('5')) && ($field->as_string) && ($field->subfield('5') eq 'h')){
1036
            } elsif (($field->subfield('5')) && ($field->as_string) && ($field->subfield('5') eq 'h')){
1037
                    push @seealso, { heading => $field->as_string('abcdefgjxyz'), type => 'narrower', field => $field->tag() };
1037
                push @seealso, { heading => $field->as_string('abcdefgjxyz'), type => 'narrower', field => $field->tag() };
1038
                } elsif ($field->subfield('a')) {
1038
            } elsif ($field->subfield('a')) {
1039
                    push @seealso, { heading => $field->as_string('abcdefgxyz'), type => 'seealso', field => $field->tag() };
1039
                push @seealso, { heading => $field->as_string('abcdefgxyz'), type => 'seealso', field => $field->tag() };
1040
                }
1041
            }
1040
            }
1041
        }
1042
# // form
1042
# // form
1043
            foreach my $field ($record->field('7..')) {
1043
        foreach my $field ($record->field('7..')) {
1044
                my $lang = substr($field->subfield('8'),3,3);
1044
            my $lang = substr($field->subfield('8'),3,3);
1045
                push @otherscript, { lang => $lang, term => $field->subfield('a'), direction => 'ltr', field => $field->tag() };
1045
            push @otherscript, { lang => $lang, term => $field->subfield('a'), direction => 'ltr', field => $field->tag() };
1046
            }
1046
        }
1047
        } else {
1047
    } else {
1048
# construct MARC21 summary
1048
# construct MARC21 summary
1049
# FIXME - looping over 1XX is questionable
1049
# FIXME - looping over 1XX is questionable
1050
# since MARC21 authority should have only one 1XX
1050
# since MARC21 authority should have only one 1XX
1051
            my $subfields_to_report;
1051
        my $subfields_to_report;
1052
            foreach my $field ($record->field('1..')) {
1052
        foreach my $field ($record->field('1..')) {
1053
                my $tag = $field->tag();
1053
            my $tag = $field->tag();
1054
                next if "152" eq $tag;
1054
            next if "152" eq $tag;
1055
# FIXME - 152 is not a good tag to use
1055
# FIXME - 152 is not a good tag to use
1056
# in MARC21 -- purely local tags really ought to be
1056
# in MARC21 -- purely local tags really ought to be
1057
# 9XX
1057
# 9XX
1058
                if ($tag eq '100') {
1058
            if ($tag eq '100') {
1059
                    $subfields_to_report = 'abcdefghjklmnopqrstvxyz';
1059
                $subfields_to_report = 'abcdefghjklmnopqrstvxyz';
1060
                } elsif ($tag eq '110') {
1060
            } elsif ($tag eq '110') {
1061
                    $subfields_to_report = 'abcdefghklmnoprstvxyz';
1061
                $subfields_to_report = 'abcdefghklmnoprstvxyz';
1062
                } elsif ($tag eq '111') {
1062
            } elsif ($tag eq '111') {
1063
                    $subfields_to_report = 'acdefghklnpqstvxyz';
1063
                $subfields_to_report = 'acdefghklnpqstvxyz';
1064
                } elsif ($tag eq '130') {
1064
            } elsif ($tag eq '130') {
1065
                    $subfields_to_report = 'adfghklmnoprstvxyz';
1065
                $subfields_to_report = 'adfghklmnoprstvxyz';
1066
                } elsif ($tag eq '148') {
1066
            } elsif ($tag eq '148') {
1067
                    $subfields_to_report = 'abvxyz';
1067
                $subfields_to_report = 'abvxyz';
1068
                } elsif ($tag eq '150') {
1068
            } elsif ($tag eq '150') {
1069
                    $subfields_to_report = 'abvxyz';
1069
                $subfields_to_report = 'abvxyz';
1070
                } elsif ($tag eq '151') {
1070
            } elsif ($tag eq '151') {
1071
                    $subfields_to_report = 'avxyz';
1071
                $subfields_to_report = 'avxyz';
1072
                } elsif ($tag eq '155') {
1072
            } elsif ($tag eq '155') {
1073
                    $subfields_to_report = 'abvxyz';
1073
                $subfields_to_report = 'abvxyz';
1074
                } elsif ($tag eq '180') {
1074
            } elsif ($tag eq '180') {
1075
                    $subfields_to_report = 'vxyz';
1075
                $subfields_to_report = 'vxyz';
1076
                } elsif ($tag eq '181') {
1076
            } elsif ($tag eq '181') {
1077
                    $subfields_to_report = 'vxyz';
1077
                $subfields_to_report = 'vxyz';
1078
                } elsif ($tag eq '182') {
1078
            } elsif ($tag eq '182') {
1079
                    $subfields_to_report = 'vxyz';
1079
                $subfields_to_report = 'vxyz';
1080
                } elsif ($tag eq '185') {
1080
            } elsif ($tag eq '185') {
1081
                    $subfields_to_report = 'vxyz';
1081
                $subfields_to_report = 'vxyz';
1082
                }
1083
                if ($subfields_to_report) {
1084
                    push @authorized, { heading => $field->as_string($subfields_to_report), field => $tag };
1085
                } else {
1086
                    push @authorized, { heading => $field->as_string(), field => $tag };
1087
                }
1088
            }
1082
            }
1089
            foreach my $field ($record->field('4..')) { #See From
1083
            if ($subfields_to_report) {
1090
                my $type = 'seefrom';
1084
                push @authorized, { heading => $field->as_string($subfields_to_report), field => $tag };
1091
                $type = $marc21controlrefs{substr $field->subfield('w'), 0, 1} if ($field->subfield('w'));
1085
            } else {
1092
                if ($type eq 'notapplicable') {
1086
                push @authorized, { heading => $field->as_string(), field => $tag };
1093
                     $type = substr $field->subfield('w'), 2, 1;
1094
                     $type = 'earlier' if $type && $type ne 'n';
1095
                }
1096
                if ($type eq 'subfi') {
1097
                    push @seefrom, { heading => $field->as_string($marc21subfields), type => $field->subfield('i'), field => $field->tag() };
1098
                } else {
1099
                    push @seefrom, { heading => $field->as_string($marc21subfields), type => $type, field => $field->tag() };
1100
                }
1101
            }
1087
            }
1102
            foreach my $field ($record->field('5..')) { #See Also
1088
        }
1103
                my $type = 'seealso';
1089
        foreach my $field ($record->field('4..')) { #See From
1104
                $type = $marc21controlrefs{substr $field->subfield('w'), 0, 1} if ($field->subfield('w'));
1090
            my $type = 'seefrom';
1105
                if ($type eq 'notapplicable') {
1091
            $type = $marc21controlrefs{substr $field->subfield('w'), 0, 1} if ($field->subfield('w'));
1106
                     $type = substr $field->subfield('w'), 2, 1;
1092
            if ($type eq 'notapplicable') {
1107
                     $type = 'earlier' if $type && $type ne 'n';
1093
                $type = substr $field->subfield('w'), 2, 1;
1108
                }
1094
                $type = 'earlier' if $type && $type ne 'n';
1109
                if ($type eq 'subfi') {
1110
                    push @seealso, { heading => $field->as_string($marc21subfields), type => $field->subfield('i'), field => $field->tag() };
1111
                } else {
1112
                    push @seealso, { heading => $field->as_string($marc21subfields), type => $type, field => $field->tag() };
1113
                }
1114
            }
1095
            }
1115
            foreach my $field ($record->field('6..')) {
1096
            if ($type eq 'subfi') {
1116
                push @notes, { note => $field->as_string(), field => $field->tag() };
1097
                push @seefrom, { heading => $field->as_string($marc21subfields), type => $field->subfield('i'), field => $field->tag() };
1098
            } else {
1099
                push @seefrom, { heading => $field->as_string($marc21subfields), type => $type, field => $field->tag() };
1117
            }
1100
            }
1118
            foreach my $field ($record->field('880')) {
1101
        }
1119
                my $linkage = $field->subfield('6');
1102
        foreach my $field ($record->field('5..')) { #See Also
1120
                my $category = substr $linkage, 0, 1;
1103
            my $type = 'seealso';
1121
                if ($category eq '1') {
1104
            $type = $marc21controlrefs{substr $field->subfield('w'), 0, 1} if ($field->subfield('w'));
1122
                    $category = 'preferred';
1105
            if ($type eq 'notapplicable') {
1123
                } elsif ($category eq '4') {
1106
                $type = substr $field->subfield('w'), 2, 1;
1124
                    $category = 'seefrom';
1107
                $type = 'earlier' if $type && $type ne 'n';
1125
                } elsif ($category eq '5') {
1108
            }
1126
                    $category = 'seealso';
1109
            if ($type eq 'subfi') {
1127
                }
1110
                push @seealso, { heading => $field->as_string($marc21subfields), type => $field->subfield('i'), field => $field->tag() };
1128
                my $type;
1111
            } else {
1129
                if ($field->subfield('w')) {
1112
                push @seealso, { heading => $field->as_string($marc21subfields), type => $type, field => $field->tag() };
1130
                    $type = $marc21controlrefs{substr $field->subfield('w'), '0'};
1113
            }
1131
                } else {
1114
        }
1132
                    $type = $category;
1115
        foreach my $field ($record->field('6..')) {
1133
                }
1116
            push @notes, { note => $field->as_string(), field => $field->tag() };
1134
                my $direction = $linkage =~ m#/r$# ? 'rtl' : 'ltr';
1117
        }
1135
                push @otherscript, { term => $field->as_string($subfields_to_report), category => $category, type => $type, direction => $direction, linkage => $linkage };
1118
        foreach my $field ($record->field('880')) {
1119
            my $linkage = $field->subfield('6');
1120
            my $category = substr $linkage, 0, 1;
1121
            if ($category eq '1') {
1122
                $category = 'preferred';
1123
            } elsif ($category eq '4') {
1124
                $category = 'seefrom';
1125
            } elsif ($category eq '5') {
1126
                $category = 'seealso';
1127
            }
1128
            my $type;
1129
            if ($field->subfield('w')) {
1130
                $type = $marc21controlrefs{substr $field->subfield('w'), '0'};
1131
            } else {
1132
                $type = $category;
1136
            }
1133
            }
1134
            my $direction = $linkage =~ m#/r$# ? 'rtl' : 'ltr';
1135
            push @otherscript, { term => $field->as_string($subfields_to_report), category => $category, type => $type, direction => $direction, linkage => $linkage };
1137
        }
1136
        }
1138
        $summary{mainentry} = $authorized[0]->{heading};
1139
        $summary{authorized} = \@authorized;
1140
        $summary{notes} = \@notes;
1141
        $summary{seefrom} = \@seefrom;
1142
        $summary{seealso} = \@seealso;
1143
        $summary{otherscript} = \@otherscript;
1144
    }
1137
    }
1138
    $summary{mainentry} = $authorized[0]->{heading};
1139
    $summary{authorized} = \@authorized;
1140
    $summary{notes} = \@notes;
1141
    $summary{seefrom} = \@seefrom;
1142
    $summary{seealso} = \@seealso;
1143
    $summary{otherscript} = \@otherscript;
1145
    return \%summary;
1144
    return \%summary;
1146
}
1145
}
1147
1146
1148
- 

Return to bug 8204