@@ -, +, @@ opac-MARCdetail.pl - Find a known record, go to the OPAC MARC page of it. - Play with several options in OpacHiddenItems, refreshing it - Play with OpacHiddenItemsExceptions as well - Apply this patch - Repeate the tests above - Sign off :-D --- opac/opac-MARCdetail.pl | 59 +++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 31 deletions(-) --- a/opac/opac-MARCdetail.pl +++ a/opac/opac-MARCdetail.pl @@ -59,7 +59,6 @@ use C4::Koha; use List::MoreUtils qw( any uniq ); use Koha::Biblios; use Koha::IssuingRules; -use Koha::Items; use Koha::ItemTypes; use Koha::Patrons; use Koha::RecordProcessor; @@ -84,39 +83,38 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); -my $patron = Koha::Patrons->find( $loggedinuser ); -my $borcat = q{}; -if ( C4::Context->preference('OpacHiddenItemsExceptions') ) { - # we need to fetch the borrower info here, so we can pass the category - $borcat = $patron ? $patron->categorycode : $borcat; -} +my $biblio = Koha::Biblios->find( $biblionumber, { prefetch => [ 'metadata', 'items' ] } ); -my $record = GetMarcBiblio({ - biblionumber => $biblionumber, - embed_items => 1, - opac => 1, - borcat => $borcat }); -if ( ! $record ) { +unless ( $biblio ) { print $query->redirect("/cgi-bin/koha/errors/404.pl"); exit; } -my @all_items = GetItemsInfo($biblionumber); -my $biblio = Koha::Biblios->find( $biblionumber ); -my $framework = $biblio ? $biblio->frameworkcode : q{}; -my $tagslib = &GetMarcStructure( 0, $framework ); -my ($tag_itemnumber,$subtag_itemnumber) = &GetMarcFromKohaField('items.itemnumber',$framework); -my @nonhiddenitems = $record->field($tag_itemnumber); -if (scalar @all_items >= 1 && scalar @nonhiddenitems == 0) { - print $query->redirect("/cgi-bin/koha/errors/404.pl"); - exit; +my $patron = Koha::Patrons->find( $loggedinuser ); + +my $opachiddenitems_rules; +eval { + my $yaml = C4::Context->preference('OpacHiddenItems') . "\n\n"; + $opachiddenitems_rules = YAML::Load($yaml); +}; + +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 => $opachiddenitems_rules }) ) { + print $query->redirect('/cgi-bin/koha/errors/404.pl'); # escape early + exit; + } } +my $record = $biblio->metadata->record; +my $marcflavour = C4::Context->preference("marcflavour"); + my $record_processor = Koha::RecordProcessor->new({ filters => 'ViewPolicy', options => { interface => 'opac', - frameworkcode => $framework + frameworkcode => $biblio->frameworkcode } }); $record_processor->process($record); @@ -128,18 +126,18 @@ if(my $cart_list = $query->cookie("bib_list")){ $template->param( incart => 1 ); } } - -my ($bt_tag,$bt_subtag) = GetMarcFromKohaField('biblio.title',$framework); +my $tagslib = &GetMarcStructure( 0, $biblio->frameworkcode ); +my ($bt_tag,$bt_subtag) = GetMarcFromKohaField('biblio.title',$biblio->frameworkcode); $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; -for my $itm (@all_items) { - my $item = Koha::Items->find( $itm->{itemnumber} ); - $allow_onshelf_holds = Koha::IssuingRules->get_onshelfholds_policy( { item => $item, patron => $patron } ); - last if $allow_onshelf_holds; +my $items = $biblio->items; +while ( my $item = $items->next ) { + $allow_onshelf_holds = Koha::IssuingRules->get_onshelfholds_policy( { item => $item, patron => $patron } ) + unless $allow_onshelf_holds; } if( $allow_onshelf_holds || CountItemsIssued($biblionumber) || $biblio->has_items_waiting_or_intransit ) { @@ -307,7 +305,7 @@ foreach my $field (@fields) { push @item_loop, $item if $item; } my ( $holdingbrtagf, $holdingbrtagsubf ) = - &GetMarcFromKohaField( "items.holdingbranch", $framework ); + &GetMarcFromKohaField( "items.holdingbranch", $biblio->frameworkcode ); @item_loop = sort { ($a->{$holdingbrtagsubf}||'') cmp ($b->{$holdingbrtagsubf}||'') } @item_loop; @@ -326,7 +324,6 @@ if ( C4::Context->preference("OPACISBD") ) { } #Search for title in links -my $marcflavour = C4::Context->preference("marcflavour"); my $dat = TransformMarcToKoha( $record ); my $isbn = GetNormalizedISBN(undef,$record,$marcflavour); my $marccontrolnumber = GetMarcControlnumber ($record, $marcflavour); --