Bug 19722: Add MaxItemsToDisplayForBatchMod systempreference
authorNick Clemens <nick@bywatersolutions.com>
Thu, 30 Nov 2017 23:22:27 +0000 (23:22 +0000)
committerNick Clemens <nick@bywatersolutions.com>
Thu, 28 Mar 2019 18:06:22 +0000 (18:06 +0000)
To test:
1 - Get a list of itemnumbers or barcodes
2 - Set MaxItemsToProcessForBatchMod to less than this number of items
3 - Attempt to batch edit, you arent allowed
4 - Set MaxItemsToProcessForBatchMod to some hugh number like 60000
5 - Try a list of as many items as possible 30000 was good for me (they
        should exist in your system)
6 - Try to batch edit, system will timeout on displaying these items
7 - Apply patch, update database
8 - Set MaxItemsToDisplayForBatchMod to 1000 (default)
9 - Try large file again, should not display items, but allow
modification, wait for this to finish
10 - SetMaxItemsToProcessForBatchMod to 1000 and try large file again
11 - Should be prohibited as before

Signed-off-by: Séverine QUEUNE <severine.queune@bulac.fr>

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

installer/data/mysql/atomicupdate/bug_19722_add_MaxItemsToDisplayForBatchMod_pref.perl [new file with mode: 0644]
installer/data/mysql/sysprefs.sql
koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/tools.pref
koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-edit.tt
tools/batchMod.pl

diff --git a/installer/data/mysql/atomicupdate/bug_19722_add_MaxItemsToDisplayForBatchMod_pref.perl b/installer/data/mysql/atomicupdate/bug_19722_add_MaxItemsToDisplayForBatchMod_pref.perl
new file mode 100644 (file)
index 0000000..2e056ce
--- /dev/null
@@ -0,0 +1,8 @@
+$DBversion = 'XXX';  # will be replaced by the RM
+if( CheckVersion( $DBversion ) ) {
+    $dbh->do( "INSERT IGNORE INTO systempreferences (variable, value, options, explanation, type)
+               VALUES ('MaxItemsToDisplayForBatchMod','1000',NULL,'Display up to a given number of items in a single item modification batch.','Integer')"
+            );
+    SetVersion( $DBversion );
+    print "Upgrade to $DBversion done (Bug 19722 - Add a MaxItemsToDisplayForBatchMod preference)\n";
+}
index 0b1a9c1..0a983e3 100644 (file)
@@ -293,6 +293,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
 ('MARCOrgCode','OSt','','Define MARC Organization Code for MARC21 records - http://www.loc.gov/marc/organizations/orgshome.html','free'),
 ('MaxFine',NULL,'','Maximum fine a patron can have for all late returns at one moment. Single item caps are specified in the circulation rules matrix.','Integer'),
 ('MaxItemsToDisplayForBatchDel','1000',NULL,'Display up to a given number of items in a single item deletionbatch.','Integer'),
+('MaxItemsToDisplayForBatchMod','1000',NULL,'Display up to a given number of items in a single item modification batch.','Integer'),
 ('MaxItemsToProcessForBatchMod','1000',NULL,'Process up to a given number of items in a single item modification batch.','Integer'),
 ('maxItemsInSearchResults','20',NULL,'Specify the maximum number of items to display for each result on a page of results','free'),
 ('MaxOpenSuggestions','',NULL,'Limit the number of open suggestions a patron can have at once','Integer'),
index 4ca398d..52dfd85 100644 (file)
@@ -10,6 +10,11 @@ Tools:
             - pref: MaxItemsToDisplayForBatchDel
               class: integer
             - items in a single item deletion batch.
+        -
+            - Display up to
+            - pref: MaxItemsToDisplayForBatchMod
+              class: integer
+            - items in a single item modification batch.
     Patron cards:
         -
             - Limit the number of creator images stored in the database to
index 111d8f3..e96dda3 100644 (file)
@@ -103,7 +103,7 @@ $(document).ready(function(){
             </tbody>
         </table>
         [% IF ( item_loop ) %]
-            [% UNLESS ( too_many_items ) %]
+            [% UNLESS ( too_many_items_display ) %]
                 <h4>The following barcodes were found: </h4>
             [% END %]
         [% END %]
@@ -121,14 +121,13 @@ $(document).ready(function(){
             </tbody>
         </table>
         [% IF ( item_loop ) %]
-            [% UNLESS ( too_many_items ) %]
+            [% UNLESS ( too_many_items_display ) %]
                 <h4>The following itemnumbers were found: </h4>
             [% END %]
         [% END %]
     [% END %] <!-- /notfounditemnumbers -->
 
 
-
 <form name="f" action="batchMod.pl" method="post">
      <input type="hidden" name="op" value="[% op | html %]" />
      <input type="hidden" name="uploadedfileid" id="uploadedfileid" value="" />
@@ -225,14 +224,16 @@ $(document).ready(function(){
 
 [% IF ( show ) %]
 
-[% IF ( too_many_items ) %]
-    <p>Too many items ([% too_many_items | html %]): You are not allowed to edit more than [% Koha.Preference('MaxItemsToProcessForBatchMod') | html %] items in a batch.</p>
+[% IF ( too_many_items_process ) %]
+    <p>Too many items ([% too_many_items_process | html %]): You are not allowed to edit more than [% Koha.Preference('MaxItemsToProcessForBatchMod') | html %] items in a batch.</p>
+[% ELSIF ( too_many_items_display ) %]
+    <p>Too many items ([% too_many_items_display | html %]): You are editing more than [% Koha.Preference('MaxItemsToDisplayForBatchMod') | html %] items in a batch, items will not be shown.</p>
     [% FOREACH itemnumber IN itemnumbers_array %]
   <input type="hidden" name="itemnumber" value="[% itemnumber | html %]" />
     [% END %]
 [% END %]<!-- /too_many_items -->
 
-[% IF ( item_loop ) %]
+[% UNLESS (too_many_items_process) %]
 <div id="cataloguing_additem_newitem">
         <h2>Edit Items</h2>
         <div class="hint">Checking the box right next to the subfield label will disable the entry and delete the subfield on all selected items. Leave fields blank to make no change.</div>
index 8f028c2..8e1e854 100755 (executable)
@@ -279,13 +279,14 @@ if ($op eq "show"){
     # Flag to tell the template there are valid results, hidden or not
     if(scalar(@itemnumbers) > 0){ $template->param("itemresults" => 1); }
     # Only display the items if there are no more than pref MaxItemsToProcessForBatchMod or MaxItemsToDisplayForBatchDel
-    my $max_items = $del
+    my $max_display_items = $del
         ? C4::Context->preference("MaxItemsToDisplayForBatchDel")
-        : C4::Context->preference("MaxItemsToProcessForBatchMod");
-    if (scalar(@itemnumbers) <= ( $max_items // 1000 ) ) {
+        : C4::Context->preference("MaxItemsToDisplayForBatchMod");
+    $template->param("too_many_items_process" => scalar(@itemnumbers)) if !$del && scalar(@itemnumbers) >= C4::Context->preference("MaxItemsToProcessForBatchMod");
+    if (scalar(@itemnumbers) <= ( $max_display_items // 1000 ) ) {
         $items_display_hashref=BuildItemsData(@itemnumbers);
     } else {
-        $template->param("too_many_items" => scalar(@itemnumbers));
+        $template->param("too_many_items_display" => scalar(@itemnumbers));
         # Even if we do not display the items, we need the itemnumbers
         $template->param(itemnumbers_array => \@itemnumbers);
     }