@@ -, +, @@ resultset --- C4/XSLT.pm | 41 ++++++++++++++++++++++++----------------- opac/opac-shelves.pl | 6 +++--- 2 files changed, 27 insertions(+), 20 deletions(-) --- a/C4/XSLT.pm +++ a/C4/XSLT.pm @@ -190,7 +190,7 @@ sub get_xslt_sysprefs { } sub XSLTParse4Display { - my ( $biblionumber, $orig_record, $xslsyspref, $fixamps, $hidden_items, $sysxml, $xslfilename, $lang, $variables ) = @_; + my ( $biblionumber, $orig_record, $xslsyspref, $fixamps, $hidden_items, $sysxml, $xslfilename, $lang, $variables, $items_rs ) = @_; $sysxml ||= C4::Context->preference($xslsyspref); $xslfilename ||= C4::Context->preference($xslsyspref); @@ -246,7 +246,7 @@ sub XSLTParse4Display { if ( $xslsyspref eq "OPACXSLTDetailsDisplay" || $xslsyspref eq "XSLTDetailsDisplay" || $xslsyspref eq "XSLTResultsDisplay" ) { $itemsxml = ""; #We don't use XSLT for items display on these pages } else { - $itemsxml = buildKohaItemsNamespace($biblionumber, $hidden_items); + $itemsxml = buildKohaItemsNamespace($biblionumber, $hidden_items, $items_rs); } my $xmlrecord = $record->as_xml(C4::Context->preference('marcflavour')); @@ -289,28 +289,35 @@ sub XSLTParse4Display { =head2 buildKohaItemsNamespace -Returns XML for items. + my $items_xml = buildKohaItemsNamespace( $biblionumber, [ $hidden_items, $items ] ); + +Returns XML for items. It accepts two optional parameters: +- I<$hidden_items>: An arrayref of itemnumber values, for items that should be hidden +- I<$items>: A Koha::Items resultset, for the items to be returned + +If both parameters are passed, I<$items> is used as the basis resultset, and I<$hidden_items> +are filtered out of it. + Is only used in this module currently. =cut sub buildKohaItemsNamespace { - my ($biblionumber, $hidden_items) = @_; + my ($biblionumber, $hidden_items, $items_rs) = @_; + + $hidden_items ||= []; + + my $query = {}; + $query = { 'me.itemnumber' => { not_in => $hidden_items } } + if $hidden_items; + + my $items; - if ( ref $hidden_items eq 'Koha::Items' ) { - $items = $items->search( - {}, - { prefetch => [ 'branchtransfers', 'reserves' ] } - ); + if ( $items_rs && ref($items_rs) eq 'Koha::Items' ) { + $items = $items_rs->search( $query, { prefetch => [ 'branchtransfers', 'reserves' ] } ); } else { - $hidden_items ||= []; - - $items = Koha::Items->search( - { - 'me.biblionumber' => $biblionumber, - 'me.itemnumber' => { not_in => $hidden_items } - { prefetch => [ 'branchtransfers', 'reserves' ] } - ); + $query->{'me.biblionumber'} = $biblionumber; + $items = Koha::Items->search( $query, { prefetch => [ 'branchtransfers', 'reserves' ] } ); } my $shelflocations = --- a/opac/opac-shelves.pl +++ a/opac/opac-shelves.pl @@ -366,9 +366,9 @@ if ( $op eq 'view' ) { $this_item->{XSLTBloc} = XSLTParse4Display( $biblionumber, $record, "OPACXSLTListsDisplay", 1, - $items, $sysxml, - $xslfile, $lang, - $variables + undef, $sysxml, + $xslfile, $lang, + $variables, $items->reset ); } --