X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=opac%2Fopac-MARCdetail.pl;h=f55d6bf5efa7db5342c13792f94a839c6ec81457;hb=9d9ecdc49b4cb71aba99a7d7ca8bc89d426f7ca1;hp=90b2974914b5421664479c6cb4f99e0fe2adcd47;hpb=9905247a481c7eb4db6d2cc38ea3f1041d66aa4b;p=koha-ffzg.git diff --git a/opac/opac-MARCdetail.pl b/opac/opac-MARCdetail.pl index 90b2974914..f55d6bf5ef 100755 --- a/opac/opac-MARCdetail.pl +++ b/opac/opac-MARCdetail.pl @@ -45,82 +45,83 @@ the items attached to the biblio use Modern::Perl; -use C4::Auth; +use C4::Auth qw( get_template_and_user ); use C4::Context; -use C4::Output; +use C4::Output qw( parametrized_url output_html_with_http_headers ); use CGI qw ( -utf8 ); -use MARC::Record; -use C4::Biblio; -use C4::Items; +use C4::Biblio qw( + CountItemsIssued + GetAuthorisedValueDesc + GetMarcControlnumber + GetMarcFromKohaField + GetMarcISSN + GetMarcStructure + TransformMarcToKoha +); use C4::Reserves; use C4::Members; -use C4::Acquisition; -use C4::Koha; -use List::MoreUtils qw( any uniq ); +use C4::Koha qw( GetNormalizedISBN ); +use List::MoreUtils qw( uniq ); use Koha::Biblios; +use Koha::CirculationRules; +use Koha::Items; +use Koha::ItemTypes; use Koha::Patrons; use Koha::RecordProcessor; +use Koha::DateUtils qw( output_pref ); +use Koha::Util::MARC; -my $query = new CGI; - -my $dbh = C4::Context->dbh; +my $query = CGI->new(); my $biblionumber = $query->param('biblionumber'); if ( ! $biblionumber ) { print $query->redirect("/cgi-bin/koha/errors/404.pl"); exit; } +$biblionumber = int($biblionumber); + +# open template +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "opac-MARCdetail.tt", + query => $query, + type => "opac", + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), + } +); + +my $patron = Koha::Patrons->find($loggedinuser); +my $biblio = Koha::Biblios->find($biblionumber); +my $record = $biblio->metadata->record; -my $record = GetMarcBiblio({ - biblionumber => $biblionumber, - embed_items => 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) { - push @items2hide, GetHiddenItemnumbers(@all_items); - - if (scalar @items2hide == scalar @all_items ) { - print $query->redirect("/cgi-bin/koha/errors/404.pl"); +unless ( $patron and $patron->category->override_hidden_items ) { + # only skip this check if there's a logged in user + # and its category overrides OpacHiddenItems + if ( $biblio->hidden_in_opac({ rules => C4::Context->yaml_preference('OpacHiddenItems') }) ) { + print $query->redirect('/cgi-bin/koha/errors/404.pl'); # escape early exit; } } -my $framework = &GetFrameworkCode( $biblionumber ); -my $tagslib = &GetMarcStructure( 0, $framework ); -my ($tag_itemnumber,$subtag_itemnumber) = &GetMarcFromKohaField('items.itemnumber',$framework); -my $biblio = Koha::Biblios->find( $biblionumber ); +my $items = $biblio->items->filter_by_visible_in_opac({ patron => $patron }); +my $framework = $biblio ? $biblio->frameworkcode : q{}; +my $tagslib = &GetMarcStructure( 0, $framework ); my $record_processor = Koha::RecordProcessor->new({ - filters => 'ViewPolicy', + filters => [ 'EmbedItems', 'ViewPolicy' ], options => { - interface => 'opac', - frameworkcode => $framework + interface => 'opac', + frameworkcode => $framework, + items => [ $items->as_list ], } }); $record_processor->process($record); -# open template -my ( $template, $loggedinuser, $cookie ) = get_template_and_user( - { - template_name => "opac-MARCdetail.tt", - query => $query, - type => "opac", - authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), - debug => 1, - } -); - -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")){ my @cart_list = split(/\//, $cart_list); @@ -129,26 +130,26 @@ if(my $cart_list = $query->cookie("bib_list")){ } } +my ($bt_tag,$bt_subtag) = GetMarcFromKohaField( 'biblio.title' ); +$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; + my $allow_onshelf_holds; -my $patron = Koha::Patrons->find( $loggedinuser ); -for my $itm (@all_items) { - $allow_onshelf_holds = C4::Reserves::OnShelfHoldsAllowed( $itm, ( $patron ? $patron->unblessed : {} ) ); - last if $allow_onshelf_holds; -} +$items->reset; -if( $allow_onshelf_holds || CountItemsIssued($biblionumber) || $biblio->hasItemswaitingOrInTransit ) { - $template->param( ReservableItems => 1 ); +while ( my $item = $items->next ) { + $allow_onshelf_holds = Koha::CirculationRules->get_onshelfholds_policy( { item => $item, patron => $patron } ) + unless $allow_onshelf_holds; } -# adding the $RequestOnOpac param -my $RequestOnOpac; -if (C4::Context->preference("RequestOnOpac")) { - $RequestOnOpac = 1; +if( $allow_onshelf_holds || CountItemsIssued($biblionumber) || $biblio->has_items_waiting_or_intransit ) { + $template->param( ReservableItems => 1 ); } # fill arrays my @loop_data = (); -my $tag; # loop through each tab 0 through 9 for ( my $tabloop = 0 ; $tabloop <= 9 ; $tabloop++ ) { @@ -268,6 +269,7 @@ for ( my $tabloop = 0 ; $tabloop <= 9 ; $tabloop++ ) { # loop through each tag # warning : we may have differents number of columns in each row. Thus, we first build a hash, complete it if necessary # then construct template. +# $record has already had all the item fields filtered above. my @fields = $record->fields(); my %witness ; #---- stores the list of subfields used at least once, with the "meaning" of the code @@ -275,9 +277,6 @@ 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 $item; @@ -286,24 +285,38 @@ foreach my $field (@fields) { 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}; + # Allow repeatables (BZ 13574) + if( $item->{$subf[$i][0]} ) { + $item->{$subf[$i][0]} .= ' | '; + } else { + $item->{$subf[$i][0]} = q{}; + } + if ( $sf_def->{isurl} ) { - $item->{ $subf[$i][0] } = "$subf[$i][1]"; + $item->{ $subf[$i][0] } .= "$subf[$i][1]"; } elsif ( $sf_def->{kohafield} eq "biblioitems.isbn" ) { - $item->{ $subf[$i][0] } = $subf[$i][1]; + $item->{ $subf[$i][0] } .= $subf[$i][1]; } else { - $item->{ $subf[$i][0] } = GetAuthorisedValueDesc( $field->tag(), $subf[$i][0], - $subf[$i][1], '', $tagslib, '', 'opac' ); + $item->{ $subf[$i][0] } .= GetAuthorisedValueDesc( $field->tag(), $subf[$i][0], + $subf[$i][1], '', $tagslib, '', 'opac' ) // q{}; } + + my $kohafield = $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{kohafield}; + $item->{ $subf[$i][0] } = output_pref( { str => $item->{ $subf[$i][0] }, dateonly => 1 } ) + if grep { $kohafield eq $_ } + qw( items.dateaccessioned items.onloan items.datelastseen items.datelastborrowed items.replacementpricedate ); + } push @item_loop, $item if $item; } my ( $holdingbrtagf, $holdingbrtagsubf ) = - &GetMarcFromKohaField( "items.holdingbranch", $framework ); + &GetMarcFromKohaField( "items.holdingbranch" ); @item_loop = sort { ($a->{$holdingbrtagsubf}||'') cmp ($b->{$holdingbrtagsubf}||'') } @item_loop; @@ -323,7 +336,7 @@ if ( C4::Context->preference("OPACISBD") ) { #Search for title in links my $marcflavour = C4::Context->preference("marcflavour"); -my $dat = TransformMarcToKoha( $record ); +my $dat = TransformMarcToKoha({ record => $record }); my $isbn = GetNormalizedISBN(undef,$record,$marcflavour); my $marccontrolnumber = GetMarcControlnumber ($record, $marcflavour); my $marcissns = GetMarcISSN( $record, $marcflavour ); @@ -332,6 +345,7 @@ my $issn = $marcissns->[0] || ''; if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){ $dat->{title} =~ s/\/+$//; # remove trailing slash $dat->{title} =~ s/\s+$//; # remove trailing space + my $oclc_no = Koha::Util::MARC::oclc_number( $record ); $search_for_title = parametrized_url( $search_for_title, { @@ -341,16 +355,29 @@ if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){ ISSN => $issn, CONTROLNUMBER => $marccontrolnumber, BIBLIONUMBER => $biblionumber, + OCLC_NO => $oclc_no, } ); $template->param('OPACSearchForTitleIn' => $search_for_title); } +if( C4::Context->preference('ArticleRequests') ) { + my $itemtype = Koha::ItemTypes->find($biblio->itemtype); + my $artreqpossible = $patron + ? $biblio->can_article_request( $patron ) + : $itemtype + ? $itemtype->may_article_request + : q{}; + $template->param( artreqpossible => $artreqpossible ); +} + +my $norequests = ! $biblio->items->filter_by_for_hold->count; $template->param( item_loop => \@item_loop, item_header_loop => \@item_header_loop, item_subfield_codes => \@item_subfield_codes, biblio => $biblio, + norequests => $norequests, ); output_html_with_http_headers $query, $cookie, $template->output;