|
Lines 83-88
sub get {
Link Here
|
| 83 |
} elsif( $rule->{$ind} eq 'auth2' ) { |
83 |
} elsif( $rule->{$ind} eq 'auth2' ) { |
| 84 |
$result->{$ind} = $report_fld->indicator(2) if $report_fld; |
84 |
$result->{$ind} = $report_fld->indicator(2) if $report_fld; |
| 85 |
} elsif( $rule->{$ind} eq 'thesaurus' ) { |
85 |
} elsif( $rule->{$ind} eq 'thesaurus' ) { |
|
|
86 |
my @info = _thesaurus_info( $record ); |
| 87 |
$result->{$ind} = $info[0]; |
| 88 |
$result->{sub2} = $info[1]; |
| 86 |
} else { |
89 |
} else { |
| 87 |
$result->{$ind} = substr( $rule->{$ind}, 0, 1); |
90 |
$result->{$ind} = substr( $rule->{$ind}, 0, 1); |
| 88 |
} |
91 |
} |
|
Lines 117-122
sub _load_pref {
Link Here
|
| 117 |
return $res; |
120 |
return $res; |
| 118 |
} |
121 |
} |
| 119 |
|
122 |
|
|
|
123 |
sub _thesaurus_info { |
| 124 |
# This sub is triggered by the term 'thesaurus' in the controlling pref. |
| 125 |
# The indicator of some MARC21 fields (like 600 ind2) is controlled by |
| 126 |
# authority field 008/11 and 040$f. Additionally, it may also control $2. |
| 127 |
my ( $record ) = @_; |
| 128 |
my $code = $record->field('008') |
| 129 |
? substr($record->field('008')->data, 11, 1) |
| 130 |
: q{}; |
| 131 |
my %thes_mapping = ( a => 0, b => 1, c => 2, d => 3, k => 5, n => 4, r => 7, s => 7, v => 6, z => 7, '|' => 4 ); |
| 132 |
my $ind = $thes_mapping{ $code } // $code // '4'; |
| 133 |
|
| 134 |
# Determine optional subfield $2 |
| 135 |
my $sub2; |
| 136 |
if( $ind eq '7' ) { |
| 137 |
# Important now to return a defined value |
| 138 |
$sub2 = $code eq 'r' |
| 139 |
? 'aat' |
| 140 |
: $code eq 's' |
| 141 |
? 'sears' |
| 142 |
: $code eq 'z' # pick from 040$f |
| 143 |
? $record->subfield( '040', 'f' ) // q{} |
| 144 |
: q{}; |
| 145 |
} |
| 146 |
return ( $ind, $sub2 ); |
| 147 |
} |
| 148 |
|
| 120 |
=head3 clear |
149 |
=head3 clear |
| 121 |
|
150 |
|
| 122 |
Clear internal cache. |
151 |
Clear internal cache. |
| 123 |
- |
|
|