From 70caa3359ad16c036615708f030e7f04241211aa Mon Sep 17 00:00:00 2001 From: Andrew Isherwood Date: Thu, 3 Oct 2019 15:14:12 +0100 Subject: [PATCH] Bug 23681: Clean up on delete When a patron restriction type is deleted, any debarments that use that type need to revert to the default type, this patch implements this behaviour --- Koha/RestrictionType.pm | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Koha/RestrictionType.pm b/Koha/RestrictionType.pm index 1121c9ea83..7966ff1bcb 100644 --- a/Koha/RestrictionType.pm +++ b/Koha/RestrictionType.pm @@ -19,6 +19,9 @@ use Modern::Perl; use base qw(Koha::Object); +use Koha::RestrictionTypes; +use C4::Context; + =head1 NAME Koha::RestrictionType - Koha RestrictionType Object class @@ -27,8 +30,39 @@ Koha::RestrictionType - Koha RestrictionType Object class =head2 Class Methods +=head3 delete + +Overloaded delete method that does extra clean up: +- Reset all restrictions using the restriction type about to be deleted + back to whichever restriction is marked as default + =cut +sub delete { + my ( $self ) = @_; + + # Find out what the default is + my $default = Koha::RestrictionTypes->find({ dflt => 1 })->code; + # Ensure we're not trying to delete a readonly type (this includes + # the default type) + return 0 if $self->ronly == 1; + # We can't use Koha objects here because Koha::Patron::Debarments + # is not a Koha object. So we'll do it old skool + my $rows = C4::Context->dbh->do( + "UPDATE borrower_debarments SET type = ? WHERE type = ?", + undef, + ($default, $self->code) + ); + + # Now do the delete if the update was successful + if ($rows) { + my $deleted = $self->SUPER::delete($self); + return $deleted + } + + return 0; +} + =head2 Internal methods =head3 type -- 2.11.0