Bug 24476: Allow direct editing of autorenew_checkouts by patron
authorNick Clemens <nick@bywatersolutions.com>
Fri, 28 Feb 2020 20:06:32 +0000 (20:06 +0000)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Tue, 24 Mar 2020 11:23:58 +0000 (11:23 +0000)
Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

installer/data/mysql/atomicupdate/bug_24476_opt_out_of_auto_renewal.perl
installer/data/mysql/kohastructure.sql
installer/data/mysql/sysprefs.sql
koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref
koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt
koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt
opac/opac-user.pl

index 50edba9..c83325f 100644 (file)
@@ -6,15 +6,11 @@ if( CheckVersion( $DBversion ) ) {
     unless( column_exists('deletedborrowers','autorenew_checkouts') ){
         $dbh->do( "ALTER TABLE deletedborrowers ADD COLUMN autorenew_checkouts TINYINT(1) NOT NULL DEFAULT 1" );
     }
-    unless( column_exists('borrower_modifications','autorenew_checkouts') ){
-        $dbh->do( "ALTER TABLE borrower_modifications ADD COLUMN autorenew_checkouts TINYINT(1) NOT NULL DEFAULT 1" );
-    }
     $dbh->do(q{
-        UPDATE systempreferences
-        SET value  = CONCAT(value,'|autorenew_checkouts')
-        WHERE variable IN
-        ('PatronSelfModificationBorrowerUnwantedField','PatronSelfRegistrationBorrowerUnwantedField')
-        AND value NOT LIKE '%autorenew_checkouts%'
+        INSERT INTO systempreferences
+        ( `variable`, `value`, `options`, `explanation`, `type` )
+        VALUES
+        ('AllowPatronToControlAutorenewal','0',NULL,'If enabled, patrons will have a field in their account tp choose whether their checkouts are auto renewed or not','YesNo')
     });
     SetVersion( $DBversion );
     print "Upgrade to $DBversion done (Bug 24476 - Allow patrons to opt-out of autorenewal)\n";
index e80c64c..2d411a7 100644 (file)
@@ -3441,7 +3441,6 @@ CREATE TABLE IF NOT EXISTS `borrower_modifications` (
   `privacy` int(11) DEFAULT NULL,
   `extended_attributes` MEDIUMTEXT DEFAULT NULL,
   `gdpr_proc_consent` datetime, -- data processing consent
-  `autorenew_checkouts` TINYINT(1) NOT NULL DEFAULT 1, -- flag for allowing auto-renewal
   PRIMARY KEY (`verification_token` (191),`borrowernumber`),
   KEY `verification_token` (`verification_token` (191)),
   KEY `borrowernumber` (`borrowernumber`)
index d1aa527..91c5537 100644 (file)
@@ -34,6 +34,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
 ('AllowMultipleIssuesOnABiblio',1,'Allow/Don\'t allow patrons to check out multiple items from one biblio','','YesNo'),
 ('AllowNotForLoanOverride','0','','If ON, Koha will allow the librarian to loan a not for loan item.','YesNo'),
 ('AllowOfflineCirculation','0','','If on, enables HTML5 offline circulation functionality.','YesNo'),
+('AllowPatronToControlAutorenewal','0',NULL,'If enabled, patrons will have a field in their account tp choose whether their checkouts are auto renewed or not','YesNo'),
 ('AllowPatronToSetCheckoutsVisibilityForGuarantor',  '0', NULL, 'If enabled, the patron can set checkouts to be visible to his or her guarantor',  'YesNo'),
 ('AllowPatronToSetFinesVisibilityForGuarantor',  '0', NULL, 'If enabled, the patron can set fines to be visible to his or her guarantor',  'YesNo'),
 ('AllowPKIAuth','None','None|Common Name|emailAddress','Use the field from a client-side SSL certificate to look a user in the Koha database','Choice'),
index 48bc763..43d9c28 100644 (file)
@@ -251,6 +251,12 @@ Patrons:
                no: Allow all permitted users
          - "to access/change superlibrarian privileges."
          - "<br><strong>NOTE:</strong> A permitted user needs to have the 'permissions' flag (if no superlibrarian)."
+     -
+         - pref: AllowPatronToControlAutorenewal
+           choices:
+               yes: Allow patrons
+               no: Allow only staff
+         - "to allow/disallow auto-renewal for account. If allowed a patron will be able to update their own account to allow/disallow autorenewals"
 
     Privacy:
      -
index b5c5e34..8761cc8 100644 (file)
                                         [% END %]
                                     </li>
                                 [% END %]
-                                [% UNLESS hidden.defined('autorenew_checkouts') %]
-                                    <li class="lradio">
-                                        <label for="yes-autorenew_checkouts">
-                                            Allow auto-renewal:
-                                        </label>
-                                            [% IF ( borrower.autorenew_checkouts ) %]
-                                                <label class="radio inline" for="yes-autorenew_checkouts">
-                                                    Yes
-                                                    <input type="radio" id="yes-autorenew_checkouts" name="borrower_autorenew_checkouts" value="1" checked="checked" />
-                                                </label>
-
-                                                <label class="radio inline" for="no-autorenew_checkouts">
-                                                    No
-                                                    <input type="radio" id="no-autorenew_checkouts" name="borrower_autorenew_checkouts" value="0" />
-                                                </label>
-                                            [% ELSE %]
-                                                <label class="radio inline" for="yes-autorenew_checkouts">
-                                                    Yes
-                                                    <input type="radio" id="yes-autorenew_checkouts" name="borrower_autorenew_checkouts" value="1" />
-                                                </label>
-                                                <label class="radio inline" for="no-autorenew_checkouts">
-                                                    No
-                                                    <input type="radio" id="no-autorenew_checkouts" name="borrower_autorenew_checkouts" value="0" checked="checked" />
-                                                </label>
-                                            [% END %]
-                                    </li>
-                                [% END %]
                             </ol>
                         </fieldset>
                 [% END # / defined 'branchcode' %]
index 47f10db..e649229 100644 (file)
 
                     <p><a href="/cgi-bin/koha/opac-main.pl?logout.x=1">Click here if you're not [% INCLUDE 'patron-title.inc' patron = logged_in_user %]</a></p>
 
+                    [% IF Koha.Preference('AllowPatronToControlAutorenewal') %]
+                    <form id="autorenewal_option" action="/cgi-bin/koha/opac-user.pl" method="post">
+                            <label for="yes-autorenew_checkouts">
+                                Allow auto-renewal:
+                            </label>
+                                [% IF ( borrower.autorenew_checkouts ) %]
+                                    <label class="radio inline" for="yes-autorenew_checkouts">
+                                        Yes
+                                        <input type="radio" id="yes-autorenew_checkouts" name="borrower_autorenew_checkouts" value="1" checked="checked" />
+                                    </label>
+
+                                    <label class="radio inline" for="no-autorenew_checkouts">
+                                        No
+                                        <input type="radio" id="no-autorenew_checkouts" name="borrower_autorenew_checkouts" value="0" />
+                                    </label>
+                                [% ELSE %]
+                                    <label class="radio inline" for="yes-autorenew_checkouts">
+                                        Yes
+                                        <input type="radio" id="yes-autorenew_checkouts" name="borrower_autorenew_checkouts" value="1" />
+                                    </label>
+                                    <label class="radio inline" for="no-autorenew_checkouts">
+                                        No
+                                        <input type="radio" id="no-autorenew_checkouts" name="borrower_autorenew_checkouts" value="0" checked="checked" />
+                                    </label>
+                                [% END %]
+                        <input type="hidden" name="csrf_token" value="[% csrf_token | html %]" />
+                        <input type="hidden" name="update_arc" value="1" />
+                        <input type="submit" value="Update autorenewal preference" />
+                    </form>
+                    [% END %]
                     [% IF ( patronupdate ) %]<div class="alert alert-info"><h3>Thank you!</h3><p>Your corrections have been submitted to the library, and a staff member will update your record as soon as possible.</p></div>[% END %]
 
                     [% IF failed_holds %]
index 60cc5d2..d94d3d0 100755 (executable)
@@ -43,6 +43,7 @@ use Koha::Patrons;
 use Koha::Patron::Messages;
 use Koha::Patron::Discharge;
 use Koha::Patrons;
+use Koha::Token;
 
 use constant ATTRIBUTE_SHOW_BARCODE => 'SHOW_BCODE';
 
@@ -83,6 +84,18 @@ $template->param( shibbolethAuthentication => C4::Context->config('useshibboleth
 
 # get borrower information ....
 my $patron = Koha::Patrons->find( $borrowernumber );
+
+if( $query->param('update_arc') && C4::Context->preference("AllowPatronToControlAutorenewal") ){
+    die "Wrong CSRF token"
+        unless Koha::Token->new->check_csrf({
+            session_id => scalar $query->cookie('CGISESSID'),
+            token  => scalar $query->param('csrf_token'),
+        });
+
+    my $autorenew_checkouts = $query->param('borrower_autorenew_checkouts');
+    $patron->autorenew_checkouts( $autorenew_checkouts )->store() if defined $autorenew_checkouts;
+}
+
 my $borr = $patron->unblessed;
 # unblessed is a hash vs. object/undef. Hence the use of curly braces here.
 my $borcat = $borr ? $borr->{categorycode} : q{};
@@ -164,6 +177,9 @@ $template->param(
                     surname           => $borr->{surname},
                     RENEW_ERROR       => $renew_error,
                     borrower          => $borr,
+                    csrf_token             => Koha::Token->new->generate_csrf({
+                        session_id => scalar $query->cookie('CGISESSID'),
+                    }),
                 );
 
 #get issued items ....