X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=opac%2Fopac-MARCdetail.pl;h=3c9c2c23c8fb13c8979056d26d41f40c98cc49df;hb=8dad1582c100017f8ad3e331c9a9b9cc9ed4e4d6;hp=6a5e8a602a6cbcc442a2702fa46004e50766a000;hpb=1802aa91530a4e8716da4a6b956ca6e0cee7d471;p=koha.git diff --git a/opac/opac-MARCdetail.pl b/opac/opac-MARCdetail.pl index 6a5e8a602a..3c9c2c23c8 100755 --- a/opac/opac-MARCdetail.pl +++ b/opac/opac-MARCdetail.pl @@ -56,7 +56,8 @@ use C4::Reserves; use C4::Members; use C4::Acquisition; use C4::Koha; -use List::MoreUtils qw/any/; +use List::MoreUtils qw( any uniq ); +use Koha::RecordProcessor; my $query = new CGI; @@ -68,6 +69,12 @@ if ( ! $biblionumber ) { exit; } +my $record = GetMarcBiblio($biblionumber, 1); +if ( ! $record ) { + print $query->redirect("/cgi-bin/koha/errors/404.pl"); + exit; +} + my @all_items = GetItemsInfo($biblionumber); my @items2hide; if (scalar @all_items >= 1) { @@ -79,16 +86,20 @@ if (scalar @all_items >= 1) { } } -my $itemtype = &GetFrameworkCode($biblionumber); -my $tagslib = &GetMarcStructure( 0, $itemtype ); -my ($tag_itemnumber,$subtag_itemnumber) = &GetMarcFromKohaField('items.itemnumber',$itemtype); +my $framework = &GetFrameworkCode( $biblionumber ); +my $tagslib = &GetMarcStructure( 0, $framework ); +my ($tag_itemnumber,$subtag_itemnumber) = &GetMarcFromKohaField('items.itemnumber',$framework); my $biblio = GetBiblioData($biblionumber); -$biblionumber = $biblio->{biblionumber}; -my $record = GetMarcBiblio($biblionumber, 1); -if ( ! $record ) { - print $query->redirect("/cgi-bin/koha/errors/404.pl"); - exit; -} + +my $record_processor = Koha::RecordProcessor->new({ + filters => 'ViewPolicy', + options => { + interface => 'opac', + frameworkcode => $framework + } +}); +$record_processor->process($record); + # open template my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { @@ -100,9 +111,11 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); +my ($bt_tag,$bt_subtag) = GetMarcFromKohaField('biblio.title',$framework); $template->param( bibliotitle => $biblio->{title}, -); +) if $tagslib->{$bt_tag}->{$bt_subtag}->{hidden} <= 0 && # <=0 OPAC visible. + $tagslib->{$bt_tag}->{$bt_subtag}->{hidden} > -8; # except -8; # get biblionumbers stored in the cart if(my $cart_list = $query->cookie("bib_list")){ @@ -253,76 +266,59 @@ for ( my $tabloop = 0 ; $tabloop <= 9 ; $tabloop++ ) { my @fields = $record->fields(); my %witness ; #---- stores the list of subfields used at least once, with the "meaning" of the code -my @big_array; +my @item_subfield_codes; +my @item_loop; foreach my $field (@fields) { next if ( $field->tag() < 10 ); next if ( ( $field->tag() eq $tag_itemnumber ) && ( any { $field->subfield($subtag_itemnumber) eq $_ } @items2hide) ); my @subf = $field->subfields; - my %this_row; + my $item; # loop through each subfield for my $i ( 0 .. $#subf ) { my $sf_def = $tagslib->{ $field->tag() }->{ $subf[$i][0] }; next if ( ($sf_def->{tab}||0) != 10 ); next if ( ($sf_def->{hidden}||0) > 0 ); + push @item_subfield_codes, $subf[$i][0]; $witness{ $subf[$i][0] } = $sf_def->{lib}; if ( $sf_def->{isurl} ) { - $this_row{ $subf[$i][0] } = "$subf[$i][1]"; + $item->{ $subf[$i][0] } = "$subf[$i][1]"; } elsif ( $sf_def->{kohafield} eq "biblioitems.isbn" ) { - $this_row{ $subf[$i][0] } = $subf[$i][1]; + $item->{ $subf[$i][0] } = $subf[$i][1]; } else { - $this_row{ $subf[$i][0] } = GetAuthorisedValueDesc( $field->tag(), $subf[$i][0], + $item->{ $subf[$i][0] } = GetAuthorisedValueDesc( $field->tag(), $subf[$i][0], $subf[$i][1], '', $tagslib, '', 'opac' ); } } - if (%this_row) { - push( @big_array, \%this_row ); - } + push @item_loop, $item if $item; } my ( $holdingbrtagf, $holdingbrtagsubf ) = - &GetMarcFromKohaField( "items.holdingbranch", $itemtype ); -@big_array = - sort { ($a->{$holdingbrtagsubf}||'') cmp ($b->{$holdingbrtagsubf}||'') } @big_array; - -#fill big_row with missing datas -foreach my $subfield_code ( keys(%witness) ) { - for ( my $i = 0 ; $i <= $#big_array ; $i++ ) { - $big_array[$i]{$subfield_code} = " " - unless ( $big_array[$i]{$subfield_code} ); - } -} - -# now, construct template ! -my @item_value_loop; -my @header_value_loop; -for ( my $i = 0 ; $i <= $#big_array ; $i++ ) { - my $items_data; - foreach my $subfield_code ( keys(%witness) ) { - $items_data .= "" . $big_array[$i]{$subfield_code} . ""; - } - my %row_data; - $row_data{item_value} = $items_data; - push( @item_value_loop, \%row_data ); -} - -foreach my $subfield_code ( keys(%witness) ) { - my %header_value; - $header_value{header_value} = $witness{$subfield_code}; - push( @header_value_loop, \%header_value ); + &GetMarcFromKohaField( "items.holdingbranch", $framework ); +@item_loop = + sort { ($a->{$holdingbrtagsubf}||'') cmp ($b->{$holdingbrtagsubf}||'') } @item_loop; + +@item_subfield_codes = uniq @item_subfield_codes; +# fill item info +my @item_header_loop; +for my $subfield_code ( @item_subfield_codes ) { + push @item_header_loop, $witness{$subfield_code}; + for my $item_data ( @item_loop ) { + $item_data->{$subfield_code} ||= " " + } } -if(C4::Context->preference("ISBD")) { - $template->param(ISBD => 1); +if ( C4::Context->preference("OPACISBD") ) { + $template->param( ISBD => 1 ); } #Search for title in links my $marcflavour = C4::Context->preference("marcflavour"); -my $dat = TransformMarcToKoha( $dbh, $record ); +my $dat = TransformMarcToKoha( $record ); my $isbn = GetNormalizedISBN(undef,$record,$marcflavour); my $marccontrolnumber = GetMarcControlnumber ($record, $marcflavour); my $marcissns = GetMarcISSN( $record, $marcflavour ); @@ -346,9 +342,10 @@ if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){ } $template->param( - item_loop => \@item_value_loop, - item_header_loop => \@header_value_loop, - biblionumber => $biblionumber, + item_loop => \@item_loop, + item_header_loop => \@item_header_loop, + item_subfield_codes => \@item_subfield_codes, + biblionumber => $biblionumber, ); output_html_with_http_headers $query, $cookie, $template->output;