From 755dece1c8198b06eab4afb71da09203ec94fcd9 Mon Sep 17 00:00:00 2001 From: Owen Leonard Date: Tue, 23 Nov 2021 18:27:21 +0000 Subject: [PATCH] Bug 29530: Fix handling of NumSavedReports preference in reports table This patch updates the way the NumSavedReports preference value is used on the saved reports page so that the setting is correctly incorporated into the DataTable. The patch also expands the description of the NumSavedReports preference in order to clarify the expected behavior when no value is saved. To test, apply the patch and go to Administration -> System preferences and note the value of NumSavedReports. - Go to Reports -> Use saved. - Confirm that the first page of saved reports shows the number specified in NumSavedReports. - In the "Show" dropdown menu, confirm that the number from NumSavedReports is preselected by default. - Expand the dropdown menu to confirm that the NumSavedReports number is positioned sequentially with the default values. For example, if NumSavedReports = "78," the menu options should be "10, 20, 50, 78, 100, All". - Test with various values of NumSavedReports. A blank value should result in the "All" option being selected. A non-numeric or non-positive value should result in the default set of options being used ("10, 20, 50, 100, All"). Signed-off-by: David Nind Signed-off-by: Jonathan Druart --- .../en/modules/admin/preferences/tools.pref | 2 +- .../modules/reports/guided_reports_start.tt | 52 ++++++++++++++++++- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/tools.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/tools.pref index 4a569b4cae9..c77d6b06d88 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/tools.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/tools.pref @@ -55,4 +55,4 @@ Tools: - By default, show - pref: NumSavedReports class: integer - - reports on the saved reports page. + - reports on the saved reports page. A value of 20 is recommended. If empty, all reports will be shown. diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt index 18bea35dba7..6dd945d0f6f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt @@ -1663,6 +1663,53 @@ } } + /** + * Process the value of the NumSavedReports system preference for use as + a DataTable pageLenth option + * @param {string} pageLength - The value of the NumSavedReports system + preference, passed via the template during table initiation + * @return {number} - The number of results to show by default in the + DataTable (-1 for "all") + */ + function getPageLength( pageLength ){ + if( pageLength !== "" ){ + if( Number( pageLength ) > 0 ){ + return Number( pageLength ); + } else { + return 20; /* Negative or non-numeric value passed. Use default 20 */ + } + } else { + return -1; + } + } + + /** + * Rebuild the DataTable's lengthMenu array, adding the value of the NumSavedReports + system preference + * @param {string} pageLength - The value of the NumSavedReports system + preference, passed via the template during table initiation + * @return {Array} - An array of two arrays: 1. The numeric values for + options in the pageLenth ; + */ + function buildLengthMenu( num ){ + var lengthMenu = dataTablesDefaults.lengthMenu; + var pageLength = getPageLength( num ); + if( !lengthMenu[0].includes( pageLength ) ){ + /* extend lengthMenu with custom value */ + lengthMenu.forEach( function( item ){ + item.pop(); /* Remove the last entry, "all" */ + item.push( Number( pageLength ) ); /* Add the value from NumSavedReports */ + item.sort(function( a, b ){ /* Re-sort the values */ + return a - b; + }); + }); + lengthMenu[0].push(-1); /* Add the numeric "all" option */ + lengthMenu[1].push( _("All") ); /* Add the textual "all" option */ + } + return lengthMenu; + } + $(document).ready(function(){ var activeTab = localStorage.getItem("sql_reports_activetab"); @@ -1838,13 +1885,14 @@ [% IF (saved1) %] var rtable = KohaTable("table_reports", { - 'pageLength': [% Koha.Preference('NumSavedReports') | html %], + "pageLength": getPageLength( "[% Koha.Preference('NumSavedReports') | html %]" ), + "lengthMenu": buildLengthMenu( "[% Koha.Preference('NumSavedReports') | html %]" ), 'bAutoWidth': false, 'sPaginationType': 'full', 'aaSorting': [[ 1, "asc" ]], 'oLanguage': { 'sZeroRecords': _("No matching reports found") - }, + } }, columns_settings); var rtabs = $("#tabs").tabs({ -- 2.25.1