Bug 28299: Make buildKohaItemsNamespace accept Koha::Items
This patch makes buildKohaItemsNamespace (and its only caller, XSLTParse4Display) accept a an optional Koha::Items resultset. This way we don't need to calculate (from the DB) the list of hidden itemnumbers, but solve it in one query. Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io> Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net> Signed-off-by: David Nind <david@davidnind.com> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
4d8ff723d5
commit
a882783326
2 changed files with 31 additions and 24 deletions
36
C4/XSLT.pm
36
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,22 +289,34 @@ 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 @items = Koha::Items->search(
|
||||
{
|
||||
'me.biblionumber' => $biblionumber,
|
||||
'me.itemnumber' => { not_in => $hidden_items }
|
||||
},
|
||||
{ prefetch => [ 'branchtransfers', 'reserves' ] }
|
||||
);
|
||||
|
||||
my $query = {};
|
||||
$query = { 'me.itemnumber' => { not_in => $hidden_items } }
|
||||
if $hidden_items;
|
||||
|
||||
unless ( $items_rs && ref($items_rs) eq 'Koha::Items' ) {
|
||||
$query->{'me.biblionumber'} = $biblionumber;
|
||||
$items_rs = Koha::Items->new;
|
||||
}
|
||||
|
||||
my $items = $items_rs->search( $query, { prefetch => [ 'branchtransfers', 'reserves' ] } );
|
||||
|
||||
my $shelflocations =
|
||||
{ map { $_->{authorised_value} => $_->{opac_description} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => "", kohafield => 'items.location' } ) };
|
||||
|
@ -318,7 +330,7 @@ sub buildKohaItemsNamespace {
|
|||
my %descs = map { $_->{authorised_value} => $_ } Koha::AuthorisedValues->get_descriptions_by_koha_field( { kohafield => 'items.notforloan' } );
|
||||
my $ref_status = C4::Context->preference('Reference_NFL_Statuses') || '1|2';
|
||||
|
||||
for my $item (@items) {
|
||||
while ( my $item = $items->next ) {
|
||||
my $status;
|
||||
my $substatus = '';
|
||||
|
||||
|
|
|
@ -348,23 +348,18 @@ if ( $op eq 'view' ) {
|
|||
});
|
||||
}
|
||||
|
||||
my @items;
|
||||
my $items = $biblio->items;
|
||||
my $items = $biblio->items->filter_by_visible_in_opac({ patron => $patron });
|
||||
my $allow_onshelf_holds;
|
||||
my @hidden_items;
|
||||
while ( my $item = $items->next ) {
|
||||
if ( $item->hidden_in_opac({rules => C4::Context->yaml_preference('OpacHiddenItems')} ) ) {
|
||||
push @hidden_items, $item->itemnumber;
|
||||
next;
|
||||
}
|
||||
|
||||
# This method must take a Koha::Items rs
|
||||
$allow_onshelf_holds ||= Koha::CirculationRules->get_onshelfholds_policy(
|
||||
{ item => $item, patron => $patron } );
|
||||
|
||||
push @items, $item; # This is for non-xslt only
|
||||
}
|
||||
|
||||
$this_item->{allow_onshelf_holds} = $allow_onshelf_holds;
|
||||
$this_item->{'ITEM_RESULTS'} = \@items;
|
||||
$this_item->{'ITEM_RESULTS'} = $items;
|
||||
|
||||
if ($xslfile) {
|
||||
my $variables = {
|
||||
|
@ -373,9 +368,9 @@ if ( $op eq 'view' ) {
|
|||
$this_item->{XSLTBloc} = XSLTParse4Display(
|
||||
$biblionumber, $record,
|
||||
"OPACXSLTListsDisplay", 1,
|
||||
\@hidden_items, $sysxml,
|
||||
$xslfile, $lang,
|
||||
$variables
|
||||
undef, $sysxml,
|
||||
$xslfile, $lang,
|
||||
$variables, $items->reset
|
||||
);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue