From 7445b8f897718306340aeac6cc4427b05f0eeaf1 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Tue, 14 Jun 2016 16:47:43 -0400 Subject: [PATCH] Bug 15128 - Add ability to limit patrons open purchase suggestions To test: 1 - Define a number of MaxOpenSuggestions 2 - Add some suggestions for a patron 3 - Note they cannot add any more suggestions if limit is reached 4 - Delete a suggestion and note you can add another 5 - Add them to limit again 6 - Accept a suggestion in the staff client and note user can add more 7 - Repeat above with rejecting or deleting 8 - Sign off. Sponsored by: North Central Regional Library (http://ncrl.org/) Signed-off-by: Barbara Walters Signed-off-by: Kyle M Hall Signed-off-by: Jonathan Druart Signed-off-by: Kyle M Hall --- ...g_15128_Add_MaxOpenSuggestions_Syspref.sql | 1 + installer/data/mysql/sysprefs.sql | 1 + .../en/modules/admin/preferences/opac.pref | 6 +++++- .../bootstrap/en/modules/opac-suggestions.tt | 19 +++++++++++++++++-- opac/opac-suggestions.pl | 11 ++++++++++- 5 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/Bug_15128_Add_MaxOpenSuggestions_Syspref.sql diff --git a/installer/data/mysql/atomicupdate/Bug_15128_Add_MaxOpenSuggestions_Syspref.sql b/installer/data/mysql/atomicupdate/Bug_15128_Add_MaxOpenSuggestions_Syspref.sql new file mode 100644 index 0000000000..af0f72ca9c --- /dev/null +++ b/installer/data/mysql/atomicupdate/Bug_15128_Add_MaxOpenSuggestions_Syspref.sql @@ -0,0 +1 @@ +INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('MaxOpenSuggestions','',NULL,'Limit the number of open suggestions a patron can have at once, unlimited if blank','Integer') diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 29ef9c87b0..c9a7c7e9cf 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -236,6 +236,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('MaxItemsToDisplayForBatchDel','1000',NULL,'Display up to a given number of items in a single item deletionbatch.','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') ('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'), diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref index 0ebbf613f9..861b7b278d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -571,7 +571,11 @@ OPAC: yes: "Block" no: "Don't block" - expired patrons from OPAC actions such as placing a hold or renewing. Note that the setting for a patron category takes priority over this system preference. - + - + - Limit patrons to + - pref: MaxOpenSuggestions + class: integer + - "open suggestions. Leave empty for no limit. **Note: this setting does not affect anonymous suggestions" Privacy: - - pref: StoreLastBorrower diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-suggestions.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-suggestions.tt index 45b5e593f0..140b902016 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-suggestions.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-suggestions.tt @@ -28,6 +28,10 @@
[% IF ( op_add ) %] + [% IF ( Koha.Preference('MaxOpenSuggestions') && own_suggestions_count >= Koha.Preference('MaxOpenSuggestions') ) %] +

You cannot place any more suggestions

+

You have reached your limit of suggestions you can place at this time ([% Koha.Preference('MaxOpenSuggestions') %]). Once the library has processed those suggestions you will be able to place more.

+ [% ELSE %]

Enter a new purchase suggestion

Please fill out this form to make a purchase suggestion. You will receive an email when the library processes your suggestion

@@ -88,6 +92,7 @@ Cancel + [% END %] [% END # IF op_add %] [% IF ( op_else ) %] @@ -105,6 +110,8 @@ [% FOR m IN messages %]
[% SWITCH m.code %] + [% CASE 'too_many' %] + The suggestion has not been added. You have reached your limit of suggestions you can place at this time ([% Koha.Preference('MaxOpenSuggestions') %]). Once the library has processed those suggestions you will be able to place more. [% CASE 'already_exists' %] The suggestion has not been added. A suggestion with this title already exists. [% CASE 'success_on_inserted' %] @@ -145,7 +152,11 @@ [% IF ( loggedinusername || ( Koha.Preference( 'AnonSuggestions' ) == 1 ) ) %]
- New purchase suggestion + [% IF ( Koha.Preference('MaxOpenSuggestions') && own_suggestions_count >= Koha.Preference('MaxOpenSuggestions') ) %] +

You have reached your limit of suggestions you can place at this time ([% Koha.Preference('MaxOpenSuggestions') %]).
Once the library has processed those suggestions you will be able to place more.

+ [% ELSE %] + New purchase suggestion + [% END %]
[% END %] @@ -245,7 +256,11 @@

There are no pending purchase suggestions.

[% END %] [% IF ( loggedinusername || ( Koha.Preference( 'AnonSuggestions' ) == 1 ) ) %] -

New purchase suggestion

+ [% IF ( Koha.Preference('MaxOpenSuggestions') && own_suggestions_count >= Koha.Preference('MaxOpenSuggestions') ) %] +

You have reached your limit of suggestions you can place at this time.
Once the library has processed those suggestions you will be able to place more

+ [% ELSE %] +

New purchase suggestion

+ [% END %] [% END %] [% END # / IF suggestions_loop %] diff --git a/opac/opac-suggestions.pl b/opac/opac-suggestions.pl index aad0e85f0e..c9dc7f0b9b 100755 --- a/opac/opac-suggestions.pl +++ b/opac/opac-suggestions.pl @@ -115,7 +115,11 @@ if ( $op eq 'else' ) { my $suggestions_loop = &SearchSuggestion( $suggestion); if ( $op eq "add_confirm" ) { - if (@$suggestions_loop>=1){ + my $count_own_suggestions = $borrowernumber ? &SearchSuggestion( { suggestedby => $borrowernumber}) : 0; + if( @$count_own_suggestions >= C4::Context->preference("MaxOpenSuggestions") ){ + push @messages, { type => 'error', code => 'too_many'}; + } + elsif (@$suggestions_loop>=1){ #some suggestion are answering the request Donot Add for my $suggestion ( @$suggestions_loop ) { push @messages, { type => 'error', code => 'already_exists', id => $suggestion->{suggestionid} }; @@ -157,9 +161,13 @@ map{ $library ? $s->{branchcodesuggestedby} = $library->branchname : () } @$suggestions_loop; +my $own_suggestions_count = 0; foreach my $suggestion(@$suggestions_loop) { if($suggestion->{'suggestedby'} == $borrowernumber) { $suggestion->{'showcheckbox'} = $borrowernumber; + if ( $suggestion->{'STATUS'} eq 'ASKED' ) { + $own_suggestions_count++; + } } else { $suggestion->{'showcheckbox'} = 0; } @@ -195,6 +203,7 @@ $template->param( messages => \@messages, suggestionsview => 1, suggested_by_anyone => $suggested_by_anyone, + own_suggestions_count => $own_suggestions_count, ); output_html_with_http_headers $input, $cookie, $template->output; -- 2.39.5