diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index a3bc592f2828..bb17574bea75 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -941,6 +941,30 @@ protected static function getToFinancialAccount($contribution, $params) { } } + /** + * Get memberships realted to the contribution. + * + * @param int $contributionID + * + * @return array + */ + protected static function getRelatedMemberships($contributionID) { + $contribution = new CRM_Contribute_BAO_Contribution(); + $contribution->id = $contributionID; + $contribution->fetch(TRUE); + $contribution->loadRelatedMembershipObjects(); + $result = CRM_Utils_Array::value('membership', $contribution->_relatedObjects, []); + $memberships = []; + foreach ($result as $membership) { + if (empty($membership)) { + continue; + } + // @todo - remove this again & just call api in the first place. + _civicrm_api3_object_to_array($membership, $memberships[$membership->id]); + } + return $memberships; + } + /** * @inheritDoc */ @@ -5231,18 +5255,14 @@ protected static function isPaymentInstrumentChange(&$params, $pendingStatuses) * @throws \CiviCRM_API3_Exception */ public static function updateMembershipBasedOnCompletionOfContribution($contribution, $primaryContributionID, $changeDate) { - $contribution->loadRelatedMembershipObjects(); - if (empty($contribution->_relatedObjects['membership'])) { - return; - } - $memberships = $contribution->_relatedObjects['membership']; - foreach ($memberships as $membershipTypeIdKey => $membership) { + $memberships = self::getRelatedMemberships($contribution->id); + foreach ($memberships as $membership) { if ($membership) { $membershipParams = array( - 'id' => $membership->id, - 'contact_id' => $membership->contact_id, - 'is_test' => $membership->is_test, - 'membership_type_id' => $membership->membership_type_id, + 'id' => $membership['id'], + 'contact_id' => $membership['contact_id'], + 'is_test' => $membership['is_test'], + 'membership_type_id' => $membership['membership_type_id'], 'membership_activity_status' => 'Completed', );