From 2c2f5d9de72ae5657d9d88568be3c989f5ca7832 Mon Sep 17 00:00:00 2001 From: Matthew Wire Date: Mon, 20 Mar 2023 19:19:53 +0000 Subject: [PATCH] Use API4 to get existingRelationships in isContactHasValidRelationshipToInheritMembershipType as it doesn't fail if relationship type IDs don't exist --- CRM/Contact/BAO/Relationship.php | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/CRM/Contact/BAO/Relationship.php b/CRM/Contact/BAO/Relationship.php index e326e8db74..fe4aace198 100644 --- a/CRM/Contact/BAO/Relationship.php +++ b/CRM/Contact/BAO/Relationship.php @@ -9,6 +9,8 @@ +--------------------------------------------------------------------+ */ +use Civi\Api4\Relationship; + /** * Class CRM_Contact_BAO_Relationship. */ @@ -2171,13 +2173,14 @@ AND cc.sort_name LIKE '%$name%'"; */ private static function isContactHasValidRelationshipToInheritMembershipType(int $contactID, int $membershipTypeID, int $parentMembershipID): bool { $membershipType = CRM_Member_BAO_MembershipType::getMembershipType($membershipTypeID); - $existingRelationships = civicrm_api3('Relationship', 'get', [ - 'contact_id_a' => $contactID, - 'contact_id_b' => $contactID, - 'relationship_type_id' => ['IN' => $membershipType['relationship_type_id']], - 'options' => ['or' => [['contact_id_a', 'contact_id_b']], 'limit' => 0], - 'is_active' => 1, - ])['values']; + + $existingRelationships = Relationship::get(FALSE) + ->addWhere('relationship_type_id', 'IN', $membershipType['relationship_type_id']) + ->addClause('OR', ['contact_id_a', '=', $contactID], ['contact_id_b', '=', $contactID]) + ->addWhere('is_active', '=', TRUE) + ->execute() + ->indexBy('id') + ->getArrayCopy(); if (empty($existingRelationships)) { return FALSE; -- 2.25.1