+our ($tagslib);
+
+sub build_tabs {
+ my ( $template, $record, $dbh, $encoding,$input ) = @_;
+
+ # fill arrays
+ my @loop_data = ();
+ my $tag;
+
+ # in this array, we will push all the 10 tabs
+ # to avoid having 10 tabs in the template : they will all be in the same BIG_LOOP
+ my @BIG_LOOP;
+ my %seen;
+ my @tab_data; # all tags to display
+
+ foreach my $used ( keys %$tagslib ){
+ push @tab_data,$used if not $seen{$used};
+ $seen{$used}++;
+ }
+
+ my $max_num_tab=9;
+ # loop through each tab 0 through 9
+ for ( my $tabloop = 0 ; $tabloop <= $max_num_tab ; $tabloop++ ) {
+ my @loop_data = (); #innerloop in the template.
+ my $i = 0;
+ foreach my $tag (sort @tab_data) {
+ $i++;
+ next if ! $tag;
+
+ # if MARC::Record is not empty =>use it as master loop, then add missing subfields that should be in the tab.
+ # if MARC::Record is empty => use tab as master loop.
+ if ( $record != -1 && ( $record->field($tag) || $tag eq '000' ) ) {
+ my @fields;
+ if ( $tag ne '000' ) {
+ @fields = $record->field($tag);
+ }
+ else {
+ push @fields, MARC::Field->new('000', $record->leader()); # if tag == 000
+ }
+ # loop through each field
+ foreach my $field (@fields) {
+ my @subfields_data;
+ if ($field->tag()<10) {
+ next
+ if (
+ $tagslib->{ $field->tag() }->{ '@' }->{tab}
+ ne $tabloop );
+ next if ($tagslib->{$field->tag()}->{'@'}->{hidden});
+ my %subfield_data;
+ $subfield_data{marc_lib}=$tagslib->{$field->tag()}->{'@'}->{lib};
+ $subfield_data{marc_value}=$field->data();
+ $subfield_data{marc_subfield}='@';
+ $subfield_data{marc_tag}=$field->tag();
+ push(@subfields_data, \%subfield_data);
+ } else {
+ my @subf=$field->subfields;
+ # loop through each subfield
+ for my $i (0..$#subf) {
+ $subf[$i][0] = "@" unless defined $subf[$i][0];
+ next
+ if (
+ $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{tab}
+ ne $tabloop );
+ next
+ if ( $tagslib->{ $field->tag() }->{ $subf[$i][0] }
+ ->{hidden} );
+ my %subfield_data;
+ $subfield_data{marc_lib}=$tagslib->{$field->tag()}->{$subf[$i][0]}->{lib};
+ if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{isurl}) {
+ $subfield_data{marc_value}="<a href=\"$subf[$i][1]\">$subf[$i][1]</a>";
+ } else {
+ $subfield_data{marc_value}=$subf[$i][1];
+ }
+ $subfield_data{short_desc} = substr(
+ $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{lib},
+ 0, 20
+ );
+ $subfield_data{long_desc} =
+ $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{lib};
+ $subfield_data{marc_subfield}=$subf[$i][0];
+ $subfield_data{marc_tag}=$field->tag();
+ push(@subfields_data, \%subfield_data);
+ }
+ }
+ if ($#subfields_data>=0) {
+ my %tag_data;
+ $tag_data{tag}=$field->tag(). ' '
+ . C4::Koha::display_marc_indicators($field)
+ . ' - '
+ . $tagslib->{$field->tag()}->{lib};
+ $tag_data{subfield} = \@subfields_data;
+ push (@loop_data, \%tag_data);
+ }
+ }
+ }
+ }
+ if ( $#loop_data >= 0 ) {
+ push @BIG_LOOP, {
+ number => $tabloop,
+ innerloop => \@loop_data,
+ };
+ }
+ }
+ $template->param( singletab => (scalar(@BIG_LOOP)==1), BIG_LOOP => \@BIG_LOOP );
+}