Bug 23414: Use Koha Item objects in buildKohaItemsNamespace
Removing the use of C4::GetItemsInfo cuts down on the number of DB requests and speeds things up To test I added 100 items to each of the first 20 records returned by a search for 'a' I saw a reduction from ~30 seconds to ~26 seconds This also makes the code a little cleaner and moves us toward the Koha namespace To test: 1 - Perform a search in the OPAC and STaff Client with the Browser Console opened (F12) 2 - View the netwrok tab and see how long the pages take to load 3 - Apply the patches, restart all the things 4 - Repeat and note if the results are returned faster Signed-off-by: Liz Rea <wizzyrea@gmail.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
parent
89931b4bb0
commit
ba184df84a
1 changed files with 21 additions and 22 deletions
43
C4/XSLT.pm
43
C4/XSLT.pm
|
@ -292,11 +292,10 @@ Is only used in this module currently.
|
|||
sub buildKohaItemsNamespace {
|
||||
my ($biblionumber, $hidden_items) = @_;
|
||||
|
||||
my @items = C4::Items::GetItemsInfo($biblionumber);
|
||||
if ($hidden_items && @$hidden_items) {
|
||||
my %hi = map {$_ => 1} @$hidden_items;
|
||||
@items = grep { !$hi{$_->{itemnumber}} } @items;
|
||||
}
|
||||
my $search_params;
|
||||
$search_params->{biblionumber} = $biblionumber;
|
||||
$search_params->{itemnumber} = { not_in => $hidden_items } if $hidden_items;
|
||||
my @items = Koha::Items->search($search_params);
|
||||
|
||||
my $shelflocations =
|
||||
{ map { $_->{authorised_value} => $_->{opac_description} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => GetFrameworkCode($biblionumber), kohafield => 'items.location' } ) };
|
||||
|
@ -312,28 +311,28 @@ sub buildKohaItemsNamespace {
|
|||
for my $item (@items) {
|
||||
my $status;
|
||||
|
||||
my ( $transfertwhen, $transfertfrom, $transfertto ) = C4::Circulation::GetTransfers($item->{itemnumber});
|
||||
my ( $transfertwhen, $transfertfrom, $transfertto ) = C4::Circulation::GetTransfers($item->itemnumber);
|
||||
|
||||
my $reservestatus = C4::Reserves::GetReserveStatus( $item->{itemnumber} );
|
||||
my $reservestatus = C4::Reserves::GetReserveStatus( $item->itemnumber );
|
||||
|
||||
if ( ( $item->{itype} && $itemtypes->{ $item->{itype} }->{notforloan} ) || $item->{notforloan} || $item->{onloan} || $item->{withdrawn} || $item->{itemlost} || $item->{damaged} ||
|
||||
(defined $transfertwhen && $transfertwhen ne '') || $item->{itemnotforloan} || (defined $reservestatus && $reservestatus eq "Waiting") || $item->{has_pending_hold} ){
|
||||
if ( $item->{notforloan} < 0) {
|
||||
if ( ( $item->itype && $itemtypes->{ $item->itype }->{notforloan} ) || $item->notforloan || $item->onloan || $item->withdrawn || $item->itemlost || $item->damaged ||
|
||||
(defined $transfertwhen && $transfertwhen ne '') || $item->{itemnotforloan} || (defined $reservestatus && $reservestatus eq "Waiting") || $item->has_pending_hold ){
|
||||
if ( $item->notforloan < 0) {
|
||||
$status = "On order";
|
||||
}
|
||||
if ( $item->{itemnotforloan} && $item->{itemnotforloan} > 0 || $item->{notforloan} && $item->{notforloan} > 0 || $item->{itype} && $itemtypes->{ $item->{itype} }->{notforloan} && $itemtypes->{ $item->{itype} }->{notforloan} == 1 ) {
|
||||
if ( $item->notforloan && $item->notforloan > 0 || $item->itype && $itemtypes->{ $item->itype }->{notforloan} && $itemtypes->{ $item->itype }->{notforloan} == 1 ) {
|
||||
$status = "reference";
|
||||
}
|
||||
if ($item->{onloan}) {
|
||||
if ($item->onloan) {
|
||||
$status = "Checked out";
|
||||
}
|
||||
if ( $item->{withdrawn}) {
|
||||
if ( $item->withdrawn) {
|
||||
$status = "Withdrawn";
|
||||
}
|
||||
if ($item->{itemlost}) {
|
||||
if ($item->itemlost) {
|
||||
$status = "Lost";
|
||||
}
|
||||
if ($item->{damaged}) {
|
||||
if ($item->damaged) {
|
||||
$status = "Damaged";
|
||||
}
|
||||
if (defined $transfertwhen && $transfertwhen ne '') {
|
||||
|
@ -342,18 +341,18 @@ sub buildKohaItemsNamespace {
|
|||
if (defined $reservestatus && $reservestatus eq "Waiting") {
|
||||
$status = 'Waiting';
|
||||
}
|
||||
if ($item->{has_pending_hold}) {
|
||||
if ($item->has_pending_hold) {
|
||||
$status = 'Pending hold';
|
||||
}
|
||||
} else {
|
||||
$status = "available";
|
||||
}
|
||||
my $homebranch = $item->{homebranch}? xml_escape($branches{$item->{homebranch}}):'';
|
||||
my $holdingbranch = $item->{holdingbranch}? xml_escape($branches{$item->{holdingbranch}}):'';
|
||||
$location = $item->{location}? xml_escape($shelflocations->{$item->{location}}||$item->{location}):'';
|
||||
$ccode = $item->{ccode}? xml_escape($ccodes->{$item->{ccode}}||$item->{ccode}):'';
|
||||
my $itemcallnumber = xml_escape($item->{itemcallnumber});
|
||||
my $stocknumber = $item->{stocknumber}? xml_escape($item->{stocknumber}):'';
|
||||
my $homebranch = $item->homebranch? xml_escape($branches{$item->homebranch}):'';
|
||||
my $holdingbranch = $item->holdingbranch? xml_escape($branches{$item->holdingbranch}):'';
|
||||
$location = $item->location? xml_escape($shelflocations->{$item->location}||$item->location):'';
|
||||
$ccode = $item->ccode? xml_escape($ccodes->{$item->ccode}||$item->ccode):'';
|
||||
my $itemcallnumber = xml_escape($item->itemcallnumber);
|
||||
my $stocknumber = $item->stocknumber? xml_escape($item->stocknumber):'';
|
||||
$xml .=
|
||||
"<item>"
|
||||
. "<homebranch>$homebranch</homebranch>"
|
||||
|
|
Loading…
Reference in a new issue