Bug 33229: Clear patron reading history when privacy is set to never
This patch adds a check to patron store routine. When privacy is changed to 'Never' we should immediately clear their history To test: 1 - Set system preferences: AnonymousPatron - to a valid borrowernumber OPACPrivacy - Allow 2 - Checkout some items to a patron with priacy set to default, return them 3 - Log in to opac as patron 4 - Confirm you can see your history 5 - Change history to Never 6 - Confirm history still viewable 7 - Apply patch, restart all 8 - Set privacy to Default 9 - Confirm you can still see history, not deleted when not set as Never 10 - Set privacy to 'Never' 11 - Confirm history is anonymized Signed-off-by: Sally <sally.healey@cheshiresharedservices.gov.uk> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
parent
f46948ad63
commit
7c45fc8bdf
3 changed files with 53 additions and 1 deletions
|
@ -15,6 +15,10 @@ use Exception::Class (
|
||||||
isa => 'Koha::Exceptions::Patron',
|
isa => 'Koha::Exceptions::Patron',
|
||||||
description => "Deleting patron failed"
|
description => "Deleting patron failed"
|
||||||
},
|
},
|
||||||
|
'Koha::Exceptions::Patron::FailedAnonymizing' => {
|
||||||
|
isa => 'Koha::Exceptions::Patron',
|
||||||
|
description => "Anonymizing patron reading history failed"
|
||||||
|
},
|
||||||
'Koha::Exceptions::Patron::FailedDeleteAnonymousPatron' => {
|
'Koha::Exceptions::Patron::FailedDeleteAnonymousPatron' => {
|
||||||
isa => 'Koha::Exceptions::Patron',
|
isa => 'Koha::Exceptions::Patron',
|
||||||
description => "Deleting patron failed, AnonymousPatron is not deleteable"
|
description => "Deleting patron failed, AnonymousPatron is not deleteable"
|
||||||
|
|
|
@ -298,6 +298,22 @@ sub store {
|
||||||
Koha::Exceptions::Patron::InvalidUserid->throw( userid => $self->userid )
|
Koha::Exceptions::Patron::InvalidUserid->throw( userid => $self->userid )
|
||||||
unless $self->has_valid_userid;
|
unless $self->has_valid_userid;
|
||||||
|
|
||||||
|
# If a borrower has set their privacy to never we should immediately anonymize
|
||||||
|
# their checkouts
|
||||||
|
if( $self->privacy() == 2 && $self_from_storage->privacy() != 2 ){
|
||||||
|
try{
|
||||||
|
my $schema = Koha::Database->new()->schema();
|
||||||
|
$schema->txn_do(
|
||||||
|
sub { $self->old_checkouts->anonymize; }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Koha::Exceptions::Patron::FailedAnonymizing->throw(
|
||||||
|
error => @_
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
# Password must be updated using $self->set_password
|
# Password must be updated using $self->set_password
|
||||||
$self->password($self_from_storage->password);
|
$self->password($self_from_storage->password);
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
use Modern::Perl;
|
use Modern::Perl;
|
||||||
|
|
||||||
use Test::More tests => 20;
|
use Test::More tests => 21;
|
||||||
use Test::Exception;
|
use Test::Exception;
|
||||||
use Test::Warn;
|
use Test::Warn;
|
||||||
|
|
||||||
|
@ -1398,3 +1398,35 @@ subtest 'get_savings tests' => sub {
|
||||||
|
|
||||||
$schema->storage->txn_rollback;
|
$schema->storage->txn_rollback;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
subtest 'update privacy tests' => sub {
|
||||||
|
|
||||||
|
plan tests => 5;
|
||||||
|
|
||||||
|
my $patron = $builder->build_object({ class => 'Koha::Patrons', value => { privacy => 1 } });
|
||||||
|
|
||||||
|
my $old_checkout = $builder->build_object({ class => 'Koha::Old::Checkouts', value => { borrowernumber => $patron->id } });
|
||||||
|
|
||||||
|
t::lib::Mocks::mock_preference( 'AnonymousPatron', '0' );
|
||||||
|
|
||||||
|
$patron->privacy(2); #set to never
|
||||||
|
|
||||||
|
throws_ok{ $patron->store } 'Koha::Exceptions::Patron::FailedAnonymizing', 'We throw an exception when anonymizing fails';
|
||||||
|
|
||||||
|
$old_checkout->discard_changes; #refresh from db
|
||||||
|
$patron->discard_changes;
|
||||||
|
|
||||||
|
is( $old_checkout->borrowernumber, $patron->id, "When anonymizing fails, we don't clear the checkouts");
|
||||||
|
is( $patron->privacy(), 1, "When anonymizing fails, we don't chaneg the privacy");
|
||||||
|
|
||||||
|
my $anon_patron = $builder->build_object({ class => 'Koha::Patrons'});
|
||||||
|
t::lib::Mocks::mock_preference( 'AnonymousPatron', $anon_patron->id );
|
||||||
|
|
||||||
|
$patron->privacy(2)->store(); #set to never
|
||||||
|
|
||||||
|
$old_checkout->discard_changes; #refresh from db
|
||||||
|
$patron->discard_changes;
|
||||||
|
|
||||||
|
is( $old_checkout->borrowernumber, $anon_patron->id, "Checkout is successfully anonymized");
|
||||||
|
is( $patron->privacy(), 2, "Patron privacy is successfully updated");
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in a new issue