From f552e658e44208e86b03bcd659d41eaedd69ae46 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Thu, 2 Oct 2014 09:19:21 -0400 Subject: [PATCH] Bug 13022 - Hardcoded limit causes records with more than 20 items to show inaccurate statuses MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit If a record has more than 20 items, all the items over 20 will show as available on the search results even if they are not! This is a hard coded limit in the Search module. This number should be configurable. Test Plan: 1) Create a record with more than 20 items 2) Set all the items to waiting holds or in transit 3) Search for results that will include that item 4) Note some say they are available even though they are not 5) Apply this patch 6) Run updatedatabase.pl 7) Set the new system preference MaxSearchResultsItemsPerRecordStatusCheck to a number larger than the number of items on your record 8) Re-run the search 9) Note that the hold and transit statuses for the items are now correct Signed-off-by: Andreas Hedström Mace Signed-off-by: Jonathan Druart Signed-off-by: Brendan Gallagher brendan@bywatersolutions.com (cherry picked from commit d3184fa85b8906d0921522ce0c26dab98a4a2778) Signed-off-by: Julian Maurice --- C4/Search.pm | 2 +- installer/data/mysql/atomicupdate/bug_13022.sql | 1 + installer/data/mysql/sysprefs.sql | 1 + .../prog/en/modules/admin/preferences/searching.pref | 5 +++++ 4 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 installer/data/mysql/atomicupdate/bug_13022.sql diff --git a/C4/Search.pm b/C4/Search.pm index b895993dab..f9b1454b16 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -2136,7 +2136,7 @@ sub searchResults { || $item->{itemlost} || $item->{damaged} || $item->{notforloan} - || $items_count > 20) { + || $items_count > C4::Context->preference('MaxSearchResultsItemsPerRecordStatusCheck') ) { # A couple heuristics to limit how many times # we query the database for item transfer information, sacrificing diff --git a/installer/data/mysql/atomicupdate/bug_13022.sql b/installer/data/mysql/atomicupdate/bug_13022.sql new file mode 100644 index 0000000000..88d5a131a9 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_13022.sql @@ -0,0 +1 @@ +INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('MaxSearchResultsItemsPerRecordStatusCheck','20','Max number of items per record for which to check transit and hold status','','Integer'); diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 484b3cda70..1d42c235e3 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -217,6 +217,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('maxoutstanding','5','','maximum amount withstanding to be able make holds','Integer'), ('maxRecordsForFacets','20',NULL,NULL,'Integer'), ('maxreserves','50','','Define maximum number of holds a patron can place','Integer'), +('MaxSearchResultsItemsPerRecordStatusCheck','20','','Max number of items per record for which to check transit and hold status','Integer'), ('MembershipExpiryDaysNotice',NULL,'Send an account expiration notice that a patron\'s card is about to expire after',NULL,'Integer'), ('MergeReportFields','',NULL,'Displayed fields for deleted MARC records after merge','Free'), ('minPasswordLength','3',NULL,'Specify the minimum length of a patron/staff password','free'), diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref index 8b04d39b5c..a7c39bf710 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref @@ -148,6 +148,11 @@ Searching: - pref: numSearchResults class: integer - results per page in the staff client. + - + - For records with many items, only check the availability status for the first + - pref: MaxSearchResultsItemsPerRecordStatusCheck + class: integer + - items. If a record has more than this number of items, they availability statuses may be incorrect in the search results, but will be correct in the record details. - - By default, sort search results in the OPAC by - pref: OPACdefaultSortField -- 2.39.5