}
);
+# Extract the tag number from the index
+my $tag_number = $index;
+$tag_number =~ s/^tag_(\d*)_.*$/$1/;
+
# fill arrays
my @subfield_loop;
my ($indicator1, $indicator2);
if ($authid) {
- my $authtypecode = Koha::Authorities->find($authid)->authtypecode;
+ my $auth = Koha::Authorities->find( $authid );
+ my $authtypecode = $auth ? $auth->authtypecode : q{};
my $auth_type = Koha::Authority::Types->find($authtypecode);
my $record = GetAuthority($authid);
my @fields = $record->field( $auth_type->auth_tag_to_report );
my $repet = ($query->param('repet') || 1) - 1;
my $field = $fields[$repet];
- # Get all values for each distinct subfield
- my %subfields;
+ # Get all values for each distinct subfield and add to subfield loop
+ my %done_subfields;
for ( $field->subfields ) {
next if $_->[0] eq '9'; # $9 will be set with authid value
my $letter = $_->[0];
- next if defined $subfields{$letter};
+ $letter ||= '@';
+ next if defined $done_subfields{$letter};
my @values = $field->subfield($letter);
- $subfields{$letter} = \@values;
- }
-
- # Add all subfields to the subfield_loop
- for( keys %subfields ) {
- my $letter = $_ || '@';
- push( @subfield_loop, {marc_subfield => $letter, marc_values => $subfields{$_}} );
+ push @subfield_loop, {marc_subfield => $letter, marc_values => @values };
+ $done_subfields{$letter} = 1;
}
push( @subfield_loop, { marc_subfield => 'w', marc_values => $relationship } ) if ( $relationship );
- if (C4::Context->preference('marcflavour') eq 'UNIMARC') {
- $indicator1 = $field->indicator('1');
- $indicator2 = $field->indicator('2');
- } elsif (C4::Context->preference('marcflavour') eq 'MARC21') {
- my $tag_from = $auth_type->auth_tag_to_report;
- my $tag_to = $index;
- $tag_to =~ s/^tag_(\d*)_.*$/$1/;
- if ($tag_to =~ /^6/) { # subject heading
- my %thes_mapping = qw / a 0
- b 1
- c 2
- d 3
- k 5
- n 4
- r 7
- s 7
- v 6
- z 7
- | 4 /;
- my $thes_008_11 = '';
- $thes_008_11 = substr($record->field('008')->data(), 11, 1) if $record->field('008')->data();
- $indicator2 = defined $thes_mapping{$thes_008_11} ? $thes_mapping{$thes_008_11} : $thes_008_11;
- if ($indicator2 eq '7') {
- if ($thes_008_11 eq 'r') {
- $subfields{'2'} = ['aat'];
- } elsif ($thes_008_11 eq 's') {
- $subfields{'2'} = ['sears'];
- }
- }
- }
- if ($tag_from eq '130') { # unified title -- the special case
- if ($tag_to eq '830' || $tag_to eq '240') {
- $indicator2 = $field->indicator('2');
- } else {
- $indicator1 = $field->indicator('2');
- }
- } else {
- $indicator1 = $field->indicator('1');
- }
+
+ my $controlled_ind = $auth->controlled_indicators({ record => $record, biblio_tag => $tag_number });
+ $indicator1 = $controlled_ind->{ind1};
+ $indicator2 = $controlled_ind->{ind2};
+ if( defined $controlled_ind->{sub2} ) {
+ my $v = $controlled_ind->{sub2};
+ push @subfield_loop, { marc_subfield => '2', marc_values => [ $v ] };
}
-}
-else {
+} else {
# authid is empty => the user want to empty the entry.
$template->param( "clear" => 1 );
}
-# Extract the tag number from the index
-my $tag_number = $index;
-$tag_number =~ s/^tag_(\d*)_.*$/$1/;
-
-# Remove spaces in indicators
-$indicator1 =~ s/\s//g;
-$indicator2 =~ s/\s//g;
-
$template->param(
authid => $authid ? $authid : "",
index => $index,
tagid => $tagid,
+ update_ind1 => defined($indicator1),
indicator1 => $indicator1,
+ update_ind2 => defined($indicator2),
indicator2 => $indicator2,
SUBFIELD_LOOP => \@subfield_loop,
tag_number => $tag_number,
);
output_html_with_http_headers $query, $cookie, $template->output;
-