From aef74910e54f80f06462d350e9f9d2be55e583bf Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 29 Apr 2020 07:22:26 -0400 Subject: [PATCH] Bug 14708: Don't allow merging of other patron records into Anonymous Patron Signed-off-by: Andrew Fuerste-Henry Signed-off-by: Katrin Fischer Signed-off-by: Jonathan Druart (cherry picked from commit e2032ccfd3102247ed2fe639ed0117ba7ac602d8) Signed-off-by: Andrew Fuerste-Henry --- Koha/Patron.pm | 7 ++++--- t/db_dependent/Koha/Patrons.t | 7 ++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Koha/Patron.pm b/Koha/Patron.pm index 43f47cb2ab..4b5b38664a 100644 --- a/Koha/Patron.pm +++ b/Koha/Patron.pm @@ -557,6 +557,9 @@ sub siblings { sub merge_with { my ( $self, $patron_ids ) = @_; + my $anonymous_patron = C4::Context->preference("AnonymousPatron"); + return if $anonymous_patron && $self->id eq $anonymous_patron; + my @patron_ids = @{ $patron_ids }; # Ensure the keeper isn't in the list of patrons to merge @@ -569,9 +572,7 @@ sub merge_with { $self->_result->result_source->schema->txn_do( sub { foreach my $patron_id (@patron_ids) { - if ( my $anonymous_patron = C4::Context->preference("AnonymousPatron") ) { - next if $patron_id eq $anonymous_patron; - } + next if $patron_id eq $anonymous_patron; my $patron = Koha::Patrons->find( $patron_id ); diff --git a/t/db_dependent/Koha/Patrons.t b/t/db_dependent/Koha/Patrons.t index 6feeb150a3..81914cfeb0 100644 --- a/t/db_dependent/Koha/Patrons.t +++ b/t/db_dependent/Koha/Patrons.t @@ -1692,7 +1692,7 @@ subtest 'BorrowersLog tests' => sub { $schema->storage->txn_rollback; subtest 'Test Koha::Patrons::merge' => sub { - plan tests => 111; + plan tests => 113; my $schema = Koha::Database->new()->schema(); @@ -1738,6 +1738,11 @@ subtest 'Test Koha::Patrons::merge' => sub { is( Koha::Patrons->find($loser_2), undef, 'Loser 2 has been deleted' ); is( ref Koha::Patrons->find($anonymous_patron), 'Koha::Patron', 'Anonymous Patron was not deleted' ); + $anonymous_patron = Koha::Patrons->find($anonymous_patron); + $results = $anonymous_patron->merge_with( [ $keeper->id ] ); + is( $results, undef, "Anonymous patron cannot have other patrons merged into it" ); + is( Koha::Patrons->search( { borrowernumber => $keeper->id } )->count, 1, "Patron from attempted merge with AnonymousPatron still exists" ); + t::lib::Mocks::mock_preference( 'AnonymousPatron', '' ); $schema->storage->txn_rollback; }; -- 2.39.5