From c2ef64d226894e3cf607ce682eac5bea5642ce28 Mon Sep 17 00:00:00 2001 From: Mark Tompsett Date: Wed, 13 Nov 2013 15:55:24 -0500 Subject: [PATCH] Bug 11242 - fix opac-MARCdetail.pl display and warnings BACK UP YOUR DATABASE! 1) Search for an item in OPAC 2) Open OPAC detail 3) Click 'MARC View' link 4) Look for something with multiple lines (e.g. 260 or 942) 5) In another tab, Go to staff client and log in 6) Go to the /cgi-bin/koha/catalogue/detail.pl?biblionumber=##### page 7) Edit -> record 8) Note the framework used. 9) More -> Administration 10) MARC bibliographic frameworks 11) Click 'MARC structure' for the framework used by the item shown in OPAC. 12) Find the tag (e.g. 260 or 942) and click 'Subfields' 13) Delete of the matching subfields (e.g. 260$b) shown in the OPAC tab 14) Refresh OPAC tab. The tag subfields are split. 15) Apply patch 16) Refresh OPAC tab. The tag subfields are no longer split strangely. --- opac/opac-MARCdetail.pl | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/opac/opac-MARCdetail.pl b/opac/opac-MARCdetail.pl index d6be0a6..26a4dc2 100755 --- a/opac/opac-MARCdetail.pl +++ b/opac/opac-MARCdetail.pl @@ -172,12 +172,19 @@ for ( my $tabloop = 0 ; $tabloop <= 9 ; $tabloop++ ) { # loop through each subfield for my $i ( 0 .. $#subf ) { $subf[$i][0] = "@" unless defined($subf[$i][0]); - my $sf_def = $tagslib->{ $fields[$x_i]->tag() }->{ $subf[$i][0] }; - next if ( ($sf_def->{tab}||0) != $tabloop ); - next if ( ($sf_def->{hidden}||0) > 0 ); + my $sf_def = $tagslib->{ $fields[$x_i]->tag() }; + $sf_def = $sf_def->{ $subf[$i][0] } if defined($sf_def); + my ($tab,$hidden); + $tab = $sf_def->{tab} if defined($sf_def); + $tab = $tab // int($fields[$x_i]->tag()/100); + $hidden = $sf_def->{hidden} if defined($sf_def); + $hidden = $hidden // 0; + next if ( $tab != $tabloop ); + next if ( $hidden > 0 ); my %subfield_data; - $subfield_data{marc_lib} = ($sf_def->{lib} eq $previous) ? '--' : $sf_def->{lib}; - $previous = $sf_def->{lib}; + my $lib = $sf_def->{lib} // ''; + $subfield_data{marc_lib} = ($lib eq $previous) ? '--' : $sf_def->{lib}; + $previous = $lib; $subfield_data{link} = $sf_def->{link}; $subf[$i][1] =~ s/\n//g; if ( $sf_def->{isurl} ) { @@ -211,12 +218,13 @@ for ( my $tabloop = 0 ; $tabloop <= 9 ; $tabloop++ ) { $tag_data{tag} = $tagslib->{ $fields[$x_i]->tag() }->{lib}; } else { - $tag_data{tag} = - $fields[$x_i]->tag() - . ' ' + my $sf_def = $tagslib->{ $fields[$x_i]->tag() }; + my $lib; + $lib = $sf_def->{lib} if defined($sf_def); + $lib = $lib // ''; + $tag_data{tag} = $fields[$x_i]->tag() . ' ' . C4::Koha::display_marc_indicators($fields[$x_i]) - . ' - ' - . $tagslib->{ $fields[$x_i]->tag() }->{lib}; + . " - $lib"; } } my @tmp = @subfields_data; -- 1.7.9.5