Bug 20691: Add ability to turn feature on and off
This patch adds two preferences
1. AllowPatronToSetFinesVisibilityForGuarantor: Allow/Don't allow patrons to choose their own privacy settings for showing the patron's fines to the patron's guarantor
2. AllowStaffToSetFinesVisibilityForGuarantor: Allow/Don't allow staff to set the ability for a patron's fines to be viewed by linked patrons in the OPAC
Also adds a tinyint, non nullable, default to 0 column in borrower and deletedborrower named privacy_guarantor_fines.
1. privacy_guarantor_fines = 0 => don't allow guarantor to see guarantee's fines
2. privacy_guarantor_fines = 1 => allow guarantor to see guarantee's fines
To test:
1) git reset --hard master
2) apply patches (including dependencies)
3) perl installer/data/mysql/updatedatabase.pl
4) dbic
5) restart_all
6) in intranet search for AllowPatronToSetFinesVisibilityForGuarantor and AllowStaffToSetFinesVisibilityForGuarantor preferences
SUCCESS => both preferences should be present
7) search for a patron with guarantor
SUCCESS => in details tab, in "Library use" section you should see a row labeled "Show fines to guarantor"
8) edit
CHECK => in Guarantor information there is no "Show fines to guarantor" select
9) set AllowStaffToSetFinesVisibilityForGuarantor preference to "Allow"
10) return to patron with guarantor and edit
SUCCESS => in Guarantor information section there is a "Show fines to guarantor" select
11) change "Show fines to guarantor" select to "Yes" and save
SUCCESS => Value is saved
12) go to details tab
SUCCESS => in "Library use" section you see a row labeled "Show fines to guarantor" with value "Yes"
13) set OPACPrivacy preference to "Allow"
14) open 2 opacs, one with a patron that has a guarantor and another that hasn't and go to "your privacy" tab.
CHECK => in both opacs you should not see a "Allow your guarantor to view your current fines?" select
15) in intranet set AllowPatronToSetFinesVisibilityForGuarantor to "Allow"
16) refresh both opacs
SUCCESS => in Patron that has guarantor you see a "Allow your guarantor to view your current fines?" select
=> in Patron without guarantor you don't see a "Allow your guarantor to view your current fines?" select
17) in Patron with guarantor change value of select and save
SUCCESS => Value is saved
18) in intranet set OPACPrivacy preference to "Don't allow" and AllowPatronToSetFinesVisibilityForGuarantor to "Don't allow"
19) got to "your personal details" in both opacs
CHECK => in both opacs you should not see no Privacy section with a "Allow your guarantor to view your current fines?" select
20) in intranet set AllowPatronToSetFinesVisibilityForGuarantor to "Allow"
21) refresh both opacs
SUCCESS => in Patron that has guarantor you see a "Allow your guarantor to view your current fines?" select in a Privacy section
=> in Patron without guarantor there is no Privacy section
22) in Patron with guarantor change value of select and update
SUCCESS => Value is saved
23) Sign off
Signed-off-by: Agustin Moyano <agustinmoyano@theke.io>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
parent
9519c92f73
commit
1ad03f5509
|
|
@ -402,6 +402,12 @@ __PACKAGE__->table("borrowers");
|
|||
default_value: 1
|
||||
is_nullable: 0
|
||||
|
||||
=head2 privacy_guarantor_fines
|
||||
|
||||
data_type: 'tinyint'
|
||||
default_value: 0
|
||||
is_nullable: 0
|
||||
|
||||
=head2 privacy_guarantor_checkouts
|
||||
|
||||
data_type: 'tinyint'
|
||||
|
|
@ -619,6 +625,8 @@ __PACKAGE__->add_columns(
|
|||
{ data_type => "integer", is_foreign_key => 1, is_nullable => 1 },
|
||||
"privacy",
|
||||
{ data_type => "integer", default_value => 1, is_nullable => 0 },
|
||||
"privacy_guarantor_fines",
|
||||
{ data_type => "tinyint", default_value => 0, is_nullable => 0 },
|
||||
"privacy_guarantor_checkouts",
|
||||
{ data_type => "tinyint", default_value => 0, is_nullable => 0 },
|
||||
"checkprevcheckout",
|
||||
|
|
@ -1552,8 +1560,8 @@ Composing rels: L</aqorder_users> -> ordernumber
|
|||
__PACKAGE__->many_to_many("ordernumbers", "aqorder_users", "ordernumber");
|
||||
|
||||
|
||||
# Created by DBIx::Class::Schema::Loader v0.07046 @ 2019-05-17 12:11:31
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:rb0wEXHaSvYum10aZjbAOA
|
||||
# Created by DBIx::Class::Schema::Loader v0.07046 @ 2019-05-22 04:33:29
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:lbMdmIHlRt+zayG5+Rq4/w
|
||||
|
||||
__PACKAGE__->add_columns(
|
||||
'+anonymized' => { is_boolean => 1 },
|
||||
|
|
|
|||
|
|
@ -399,6 +399,12 @@ __PACKAGE__->table("deletedborrowers");
|
|||
default_value: 1
|
||||
is_nullable: 0
|
||||
|
||||
=head2 privacy_guarantor_fines
|
||||
|
||||
data_type: 'tinyint'
|
||||
default_value: 0
|
||||
is_nullable: 0
|
||||
|
||||
=head2 privacy_guarantor_checkouts
|
||||
|
||||
data_type: 'tinyint'
|
||||
|
|
@ -604,6 +610,8 @@ __PACKAGE__->add_columns(
|
|||
{ data_type => "integer", is_nullable => 1 },
|
||||
"privacy",
|
||||
{ data_type => "integer", default_value => 1, is_nullable => 0 },
|
||||
"privacy_guarantor_fines",
|
||||
{ data_type => "tinyint", default_value => 0, is_nullable => 0 },
|
||||
"privacy_guarantor_checkouts",
|
||||
{ data_type => "tinyint", default_value => 0, is_nullable => 0 },
|
||||
"checkprevcheckout",
|
||||
|
|
@ -642,8 +650,8 @@ __PACKAGE__->add_columns(
|
|||
);
|
||||
|
||||
|
||||
# Created by DBIx::Class::Schema::Loader v0.07046 @ 2019-05-17 12:11:31
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:STNFbPgDGWmyrZUFj/n+MA
|
||||
# Created by DBIx::Class::Schema::Loader v0.07046 @ 2019-05-22 04:33:29
|
||||
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:zK1jC6Wawwj8B2ch9KFByw
|
||||
|
||||
|
||||
# You can replace this text with custom code or comments, and it will be preserved on regeneration
|
||||
|
|
|
|||
|
|
@ -243,6 +243,10 @@
|
|||
"type": "integer",
|
||||
"description": "controls if relatives can see this patron's checkouts"
|
||||
},
|
||||
"privacy_guarantor_fines": {
|
||||
"type": "integer",
|
||||
"description": "controls if relatives can see this patron's fines"
|
||||
},
|
||||
"check_previous_checkout": {
|
||||
"type": "string",
|
||||
"description": "produce a warning for this patron if this item has previously been checked out to this patron if 'yes', not if 'no', defer to category setting if 'inherit'"
|
||||
|
|
|
|||
|
|
@ -706,6 +706,13 @@ OPAC:
|
|||
yes: Allow
|
||||
no: "Don't allow"
|
||||
- patrons to choose their own privacy settings for showing the patron's checkouts to the patron's guarantor".
|
||||
-
|
||||
- pref: AllowPatronToSetFinesVisibilityForGuarantor
|
||||
default: 0
|
||||
choices:
|
||||
yes: Allow
|
||||
no: "Don't allow"
|
||||
- patrons to choose their own privacy settings for showing the patron's fines to the patron's guarantor".
|
||||
-
|
||||
- Use borrowernumber
|
||||
- pref: AnonymousPatron
|
||||
|
|
|
|||
|
|
@ -184,6 +184,12 @@ Patrons:
|
|||
yes: Allow
|
||||
no: "Don't allow"
|
||||
- staff to set the ability for a patron's checkouts to be viewed by linked patrons in the OPAC.
|
||||
-
|
||||
- pref: AllowStaffToSetFinesVisibilityForGuarantor
|
||||
choices:
|
||||
yes: Allow
|
||||
no: "Don't allow"
|
||||
- staff to set the ability for a patron's fines to be viewed by linked patrons in the OPAC.
|
||||
-
|
||||
- Card numbers for patrons must be
|
||||
- pref: CardnumberLength
|
||||
|
|
|
|||
|
|
@ -429,6 +429,21 @@
|
|||
<div class="hint">Allow guarantors of this patron to view this patron's checkouts from the OPAC</div>
|
||||
</li>
|
||||
[% END %]
|
||||
[% IF relationships && Koha.Preference('AllowStaffToSetFinesVisibilityForGuarantor') %]
|
||||
<li>
|
||||
<label for="privacy_guarantor_fines">Show fines to guarantors</label>
|
||||
<select name="privacy_guarantor_fines" id="privacy_guarantor_fines">
|
||||
[% IF privacy_guarantor_fines %]
|
||||
<option value="0">No</option>
|
||||
<option value="1" selected>Yes</option>
|
||||
[% ELSE %]
|
||||
<option value="0" selected>No</option>
|
||||
<option value="1">Yes</option>
|
||||
[% END %]
|
||||
</select>
|
||||
<div class="hint">Allow guarantors of this patron to view this patron's fines from the OPAC</div>
|
||||
</li>
|
||||
[% END %]
|
||||
</ol>
|
||||
</fieldset>
|
||||
[% END %]
|
||||
|
|
|
|||
|
|
@ -496,7 +496,16 @@
|
|||
|
||||
<li id="patron-privacyguarantor">
|
||||
<span class="label">Show checkouts to guarantor</span>
|
||||
[% IF privacy_guarantor_checkouts %]
|
||||
[% IF patron.privacy_guarantor_checkouts %]
|
||||
Yes
|
||||
[% ELSE %]
|
||||
No
|
||||
[% END %]
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<span class="label">Show fines to guarantor</span>
|
||||
[% IF patron.privacy_guarantor_fines %]
|
||||
Yes
|
||||
[% ELSE %]
|
||||
No
|
||||
|
|
|
|||
|
|
@ -114,10 +114,11 @@
|
|||
<div class="alert">You typed in the wrong characters in the box before submitting. Please try again.</div>
|
||||
[% END %]
|
||||
|
||||
[% IF patron.guarantor_relationships && !Koha.Preference('OPACPrivacy') && Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') %]
|
||||
[% IF has_guarantor_flag && !Koha.Preference('OPACPrivacy') && ( Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') || Koha.Preference('AllowPatronToSetFinesVisibilityForGuarantor') ) %]
|
||||
<fieldset class="rows" id="memberentry_privacy">
|
||||
<legend id="privacy_legend">Privacy</legend>
|
||||
<ol>
|
||||
[% IF Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') %]
|
||||
<li>
|
||||
<label>Allow your guarantor to view your current checkouts?</label>
|
||||
<select id="privacy_guarantor_checkouts">
|
||||
|
|
@ -132,6 +133,28 @@
|
|||
<a id="update_privacy_guarantor_checkouts" href="#" class="btn">Update</a>
|
||||
<span id="update_privacy_guarantor_checkouts_message" class="alert" style="display:none"></span>
|
||||
</span>
|
||||
</li>
|
||||
[% END %]
|
||||
|
||||
[% IF Koha.Preference('AllowPatronToSetFinesVisibilityForGuarantor') %]
|
||||
<li>
|
||||
<label>Allow your guarantor to view your current fines?</label>
|
||||
<select id="privacy_guarantor_fines">
|
||||
<option value="0">No</option>
|
||||
[% IF borrower.privacy_guarantor_fines %]
|
||||
<option value="1" selected="selected">Yes</option>
|
||||
[% ELSE %]
|
||||
<option value="1">Yes</option>
|
||||
[% END %]
|
||||
</select>
|
||||
<span class="hint">
|
||||
<a id="update_privacy_guarantor_fines" href="#" class="btn">Update</a>
|
||||
<span id="update_privacy_guarantor_fines_message" class="alert" style="display:none"></span>
|
||||
</span>
|
||||
</li>
|
||||
[% END %]
|
||||
|
||||
<li>
|
||||
<span class="hint">
|
||||
Guaranteed by
|
||||
[% FOREACH gr IN patron.guarantor_relationships %]
|
||||
|
|
@ -1024,20 +1047,39 @@
|
|||
}
|
||||
});
|
||||
|
||||
[% IF patron.guarantor_relationships && !Koha.Preference('OPACPrivacy') && Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') %]
|
||||
$('#update_privacy_guarantor_checkouts').click( function() {
|
||||
$.post( "/cgi-bin/koha/svc/patron/show_checkouts_to_relatives", { privacy_guarantor_checkouts: $('#privacy_guarantor_checkouts').val() }, null, 'json')
|
||||
.done(function( data ) {
|
||||
var message;
|
||||
if ( data.success ) {
|
||||
message = _("Your setting has been updated!");
|
||||
} else {
|
||||
message = _("Unable to update your setting!");
|
||||
}
|
||||
[% IF patron.guarantor_relationships && !Koha.Preference('OPACPrivacy') %]
|
||||
|
||||
$('#update_privacy_guarantor_checkouts_message').fadeIn("slow").text( message ).delay( 5000 ).fadeOut("slow");
|
||||
});
|
||||
});
|
||||
[% IF Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') %]
|
||||
$('#update_privacy_guarantor_checkouts').click( function() {
|
||||
$.post( "/cgi-bin/koha/svc/patron/show_checkouts_to_relatives", { privacy_guarantor_checkouts: $('#privacy_guarantor_checkouts').val() }, null, 'json')
|
||||
.done(function( data ) {
|
||||
var message;
|
||||
if ( data.success ) {
|
||||
message = _("Your setting has been updated!");
|
||||
} else {
|
||||
message = _("Unable to update your setting!");
|
||||
}
|
||||
|
||||
$('#update_privacy_guarantor_checkouts_message').fadeIn("slow").text( message ).delay( 5000 ).fadeOut("slow");
|
||||
});
|
||||
});
|
||||
[% END %]
|
||||
|
||||
[% IF Koha.Preference('AllowPatronToSetFinesVisibilityForGuarantor') %]
|
||||
$('#update_privacy_guarantor_fines').click( function() {
|
||||
$.post( "/cgi-bin/koha/svc/patron/show_fines_to_relatives", { privacy_guarantor_fines: $('#privacy_guarantor_fines').val() }, null, 'json')
|
||||
.done(function( data ) {
|
||||
var message;
|
||||
if ( data.success ) {
|
||||
message = _("Your setting has been updated!");
|
||||
} else {
|
||||
message = _("Unable to update your setting!");
|
||||
}
|
||||
|
||||
$('#update_privacy_guarantor_fines_message').fadeIn("slow").text( message ).delay( 5000 ).fadeOut("slow");
|
||||
});
|
||||
});
|
||||
[% END %]
|
||||
[% END %]
|
||||
|
||||
$(".patron-attributes").on( 'click', '.clear-attribute', function() {
|
||||
|
|
|
|||
|
|
@ -71,18 +71,32 @@
|
|||
</select>
|
||||
</div>
|
||||
|
||||
[% IF borrower.guarantor_relationships && Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') %]
|
||||
[% IF has_guarantor_flag && (Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') || Koha.Preference('AllowPatronToSetFinesVisibilityForGuarantor') ) %]
|
||||
<div>
|
||||
<label for="privacy_guarantor_checkouts">Allow your guarantor to view your current checkouts?</label>
|
||||
<select name="privacy_guarantor_checkouts">
|
||||
[% IF borrower.privacy_guarantor_checkouts %]
|
||||
<option value="0">No</option>
|
||||
<option value="1" selected>Yes</option>
|
||||
[% ELSE %]
|
||||
<option value="0" selected>No</option>
|
||||
<option value="1">Yes</option>
|
||||
[% END %]
|
||||
</select>
|
||||
[% IF Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') %]
|
||||
<label for="privacy_guarantor_checkouts">Allow your guarantor to view your current checkouts?</label>
|
||||
<select name="privacy_guarantor_checkouts">
|
||||
[% IF borrower.privacy_guarantor_checkouts %]
|
||||
<option value="0">No</option>
|
||||
<option value="1" selected>Yes</option>
|
||||
[% ELSE %]
|
||||
<option value="0" selected>No</option>
|
||||
<option value="1">Yes</option>
|
||||
[% END %]
|
||||
</select>
|
||||
[% END %]
|
||||
[% IF Koha.Preference('AllowPatronToSetFinesVisibilityForGuarantor') %]
|
||||
<label for="privacy_guarantor_fines">Allow your guarantor to view your current fines?</label>
|
||||
<select name="privacy_guarantor_fines">
|
||||
[% IF borrower.privacy_guarantor_fines %]
|
||||
<option value="0">No</option>
|
||||
<option value="1" selected>Yes</option>
|
||||
[% ELSE %]
|
||||
<option value="0" selected>No</option>
|
||||
<option value="1">Yes</option>
|
||||
[% END %]
|
||||
</select>
|
||||
[% END %]
|
||||
<span class="hint">
|
||||
Guaranteed by
|
||||
[% FOREACH gr IN borrower.guarantor_relationships %]
|
||||
|
|
|
|||
|
|
@ -329,11 +329,13 @@ elsif ( $action eq 'edit' ) { #Display logged in borrower's data
|
|||
}
|
||||
|
||||
my $captcha = random_string("CCCCC");
|
||||
my $patron_param = scalar Koha::Patrons->find( $borrowernumber );
|
||||
|
||||
$template->param(
|
||||
captcha => $captcha,
|
||||
captcha_digest => md5_base64($captcha),
|
||||
patron => scalar Koha::Patrons->find( $borrowernumber ),
|
||||
patron => $patron_param,
|
||||
has_guarantor_flag => $patron_param->guarantor_relationships->guarantors->_resultset->count
|
||||
);
|
||||
|
||||
output_html_with_http_headers $cgi, $cookie, $template->output, undef, { force_no_caching => 1 };
|
||||
|
|
|
|||
|
|
@ -47,13 +47,15 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
|
|||
my $op = $query->param("op");
|
||||
my $privacy = $query->param("privacy");
|
||||
my $privacy_guarantor_checkouts = $query->param("privacy_guarantor_checkouts");
|
||||
my $privacy_guarantor_fines = $query->param("privacy_guarantor_fines");
|
||||
|
||||
if ( $op eq "update_privacy" ) {
|
||||
my $patron = Koha::Patrons->find( $borrowernumber );
|
||||
if ( $patron ) {
|
||||
$patron->set({
|
||||
privacy => $privacy,
|
||||
privacy_guarantor_checkouts => $privacy_guarantor_checkouts,
|
||||
privacy_guarantor_checkouts => defined $privacy_guarantor_checkouts?$privacy_guarantor_checkouts:$patron->privacy_guarantor_checkouts,
|
||||
privacy_guarantor_fines => defined $privacy_guarantor_fines?$privacy_guarantor_fines:$patron->privacy_guarantor_fines,
|
||||
})->store;
|
||||
$template->param( 'privacy_updated' => 1 );
|
||||
}
|
||||
|
|
@ -83,6 +85,7 @@ $template->param(
|
|||
'borrower' => $borrower,
|
||||
'surname' => $borrower->surname,
|
||||
'firstname' => $borrower->firstname,
|
||||
'has_guarantor_flag' => $borrower->guarantor_relationships->guarantors->_resultset->count
|
||||
);
|
||||
|
||||
output_html_with_http_headers $query, $cookie, $template->output, undef, { force_no_caching => 1 };
|
||||
|
|
|
|||
|
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# Copyright 2014 ByWater Solutions
|
||||
#
|
||||
# This file is part of Koha.
|
||||
#
|
||||
# Koha is free software; you can redistribute it and/or modify it under the
|
||||
# terms of the GNU General Public License as published by the Free Software
|
||||
# Foundation; either version 3 of the License, or (at your option) any later
|
||||
# version.
|
||||
#
|
||||
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with Koha; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
use Modern::Perl;
|
||||
|
||||
use CGI;
|
||||
use JSON qw( to_json );
|
||||
|
||||
use C4::Auth;
|
||||
use C4::Context;
|
||||
|
||||
use Koha::Patrons;
|
||||
|
||||
my $cgi = CGI->new();
|
||||
|
||||
my $privacy_guarantor_fines = $cgi->param('privacy_guarantor_fines');
|
||||
|
||||
my ( $userid, $cookie, $sessionID, $flags ) = checkauth( $cgi, 1, {}, 'opac' );
|
||||
|
||||
my $borrowernumber = C4::Context->userenv ? C4::Context->userenv->{number} : undef;
|
||||
|
||||
my $success = 0;
|
||||
if ( $borrowernumber && defined($privacy_guarantor_fines) ) {
|
||||
my $patron = Koha::Patrons->find($borrowernumber);
|
||||
|
||||
if ( $patron ) {
|
||||
$patron->privacy_guarantor_fines($privacy_guarantor_fines);
|
||||
$success = $patron->store();
|
||||
}
|
||||
}
|
||||
|
||||
binmode STDOUT, ":encoding(UTF-8)";
|
||||
print $cgi->header(
|
||||
-type => 'application/json',
|
||||
-charset => 'UTF-8'
|
||||
);
|
||||
|
||||
print to_json(
|
||||
{
|
||||
success => $success ? 1 : 0,
|
||||
privacy_guarantor_fines => $privacy_guarantor_fines,
|
||||
}
|
||||
);
|
||||
Loading…
Reference in New Issue