From 406a87bd3f3889fd585da0c9c23a14ded52e6d18 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Thu, 2 Dec 2021 17:42:34 -0500 Subject: [PATCH] MembershipType - Use standard delete function which calls hooks --- CRM/Member/BAO/MembershipType.php | 102 +++++++++++++++--------------- 1 file changed, 50 insertions(+), 52 deletions(-) diff --git a/CRM/Member/BAO/MembershipType.php b/CRM/Member/BAO/MembershipType.php index 6d0efebc33..2093eea878 100644 --- a/CRM/Member/BAO/MembershipType.php +++ b/CRM/Member/BAO/MembershipType.php @@ -146,63 +146,18 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType implem * * @param int $membershipTypeId * + * @deprecated * @throws CRM_Core_Exception - * @return bool|mixed + * @return bool */ public static function del($membershipTypeId) { - // Check dependencies. - $check = FALSE; - $status = []; - $dependency = [ - 'Membership' => 'membership_type_id', - 'MembershipBlock' => 'membership_type_default', - ]; - - foreach ($dependency as $name => $field) { - $baoString = 'CRM_Member_BAO_' . $name; - $dao = new $baoString(); - $dao->$field = $membershipTypeId; - /** @noinspection PhpUndefinedMethodInspection */ - if ($dao->find(TRUE)) { - $check = TRUE; - $status[] = $name; - } + try { + static::deleteRecord(['id' => $membershipTypeId]); + return TRUE; } - if ($check) { - $cnt = 1; - $message = ts('This membership type cannot be deleted due to following reason(s):'); - if (in_array('Membership', $status)) { - $findMembersURL = CRM_Utils_System::url('civicrm/member/search', 'reset=1'); - $deleteURL = CRM_Utils_System::url('civicrm/contact/search/advanced', 'reset=1'); - $message .= '
' . ts('%3. There are some contacts who have this membership type assigned to them. Search for contacts with this membership type from Find Members. If you are still getting this message after deleting these memberships, there may be contacts in the Trash (deleted) with this membership type. Try using Advanced Search and checking "Search in Trash".', [ - 1 => $findMembersURL, - 2 => $deleteURL, - 3 => $cnt, - ]); - $cnt++; - } - - if (in_array('MembershipBlock', $status)) { - $deleteURL = CRM_Utils_System::url('civicrm/admin/contribute', 'reset=1'); - $message .= ts('%2. This Membership Type is used in an Online Contribution page. Uncheck this membership type in the Memberships tab.', [ - 1 => $deleteURL, - 2 => $cnt, - ]); - throw new CRM_Core_Exception($message); - } + catch (CRM_Core_Exception $e) { + return FALSE; } - CRM_Utils_Weight::delWeight('CRM_Member_DAO_MembershipType', $membershipTypeId); - //delete from membership Type table - $membershipType = new CRM_Member_DAO_MembershipType(); - $membershipType->id = $membershipTypeId; - - //fix for membership type delete api - $result = FALSE; - if ($membershipType->find(TRUE)) { - return $membershipType->delete(); - } - - return $result; } /** @@ -227,6 +182,49 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType implem } } } + if ($event->action === 'delete' && $event->entity === 'MembershipType') { + // Check dependencies. + $check = FALSE; + $status = []; + $dependency = [ + 'Membership' => 'membership_type_id', + 'MembershipBlock' => 'membership_type_default', + ]; + + foreach ($dependency as $name => $field) { + $baoString = 'CRM_Member_BAO_' . $name; + $dao = new $baoString(); + $dao->$field = $event->id; + if ($dao->find(TRUE)) { + $check = TRUE; + $status[] = $name; + } + } + if ($check) { + $cnt = 1; + $message = ts('This membership type cannot be deleted due to following reason(s):'); + if (in_array('Membership', $status)) { + $findMembersURL = CRM_Utils_System::url('civicrm/member/search', 'reset=1'); + $deleteURL = CRM_Utils_System::url('civicrm/contact/search/advanced', 'reset=1'); + $message .= '
' . ts('%3. There are some contacts who have this membership type assigned to them. Search for contacts with this membership type from Find Members. If you are still getting this message after deleting these memberships, there may be contacts in the Trash (deleted) with this membership type. Try using Advanced Search and checking "Search in Trash".', [ + 1 => $findMembersURL, + 2 => $deleteURL, + 3 => $cnt, + ]); + $cnt++; + } + + if (in_array('MembershipBlock', $status)) { + $deleteURL = CRM_Utils_System::url('civicrm/admin/contribute', 'reset=1'); + $message .= ts('%2. This Membership Type is used in an Online Contribution page. Uncheck this membership type in the Memberships tab.', [ + 1 => $deleteURL, + 2 => $cnt, + ]); + throw new CRM_Core_Exception($message); + } + } + CRM_Utils_Weight::delWeight('CRM_Member_DAO_MembershipType', $event->id); + } } /** -- 2.25.1