From 38c6f80aa3bf51d74001762379c61d78994ecb26 Mon Sep 17 00:00:00 2001
From: Nick Clemens <nick@bywatersolutions.com>
Date: Mon, 13 Dec 2021 14:44:18 +0000
Subject: [PATCH] Bug 29454: Use Koha Cache Memory Lite to stash itemtype
 descriptions for template plugin

Returns empty string if given item type is undefined or unknown

To test:
1 - Add 1000 items to a record, of varying item types
2 - Bring up the details page
3 - Note time to load
4 - Apply patch
5 - Reload page and compare to previous
6 - Confirm information is correct
7 - Confirm some performance benefit

Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
---
 Koha/Template/Plugin/ItemTypes.pm | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/Koha/Template/Plugin/ItemTypes.pm b/Koha/Template/Plugin/ItemTypes.pm
index 5b3cf1edeb..d2184f8fa7 100644
--- a/Koha/Template/Plugin/ItemTypes.pm
+++ b/Koha/Template/Plugin/ItemTypes.pm
@@ -22,15 +22,32 @@ use Modern::Perl;
 use Template::Plugin;
 use base qw( Template::Plugin );
 
+use Koha::Cache::Memory::Lite;
 use Koha::ItemTypes;
 
 sub GetDescription {
     my ( $self, $itemtypecode, $want_parent ) = @_;
+    return q{} unless defined $itemtypecode;
+
+    my $memory_cache = Koha::Cache::Memory::Lite->get_instance;
+    my $cache_key    = $want_parent ? "Itemtype_parent_description:".$itemtypecode : "Itemtype_description:" . $itemtypecode;
+
+    my $cached       = $memory_cache->get_from_cache($cache_key);
+    return $cached if $cached;
+
     my $itemtype = Koha::ItemTypes->find( $itemtypecode );
-    return q{} unless $itemtype;
+    unless ($itemtype) {
+        $memory_cache->set_in_cache( $cache_key, q{} );
+        return q{};
+    }
+
     my $parent;
     $parent = $itemtype->parent if $want_parent;
-    return $parent ? $parent->translated_description . "->" . $itemtype->translated_description : $itemtype->translated_description;
+
+    my $description = $parent ? $parent->translated_description . "->" . $itemtype->translated_description : $itemtype->translated_description;
+    $memory_cache->set_in_cache( $cache_key, $description );
+
+    return $description;
 }
 
 sub Get {
-- 
2.20.1