diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index 80c5cfab1ae3..85ad6c5a0ccd 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -2441,7 +2441,7 @@ public function loadRelatedObjects(&$input, &$ids, $loadAll = FALSE) { } } - $this->loadRelatedMembershipObjects($ids); + $ids = $this->loadRelatedMembershipObjects($ids); if ($this->_component != 'contribute') { // we are in event mode @@ -3846,8 +3846,7 @@ public static function recordAdditionalPayment($contributionId, $trxnsData, $pay } // load related memberships on basis of $contributionDAO object - $membershipIDs = array(); - $contributionDAO->loadRelatedMembershipObjects($membershipIDs); + $contributionDAO->loadRelatedMembershipObjects(); // build params for recording financial trxn entry $params['contribution'] = $contributionDAO; @@ -3929,15 +3928,11 @@ public static function recordAdditionalPayment($contributionId, $trxnsData, $pay } } - // update membership details - if (!empty($contributionDAO->_relatedObjects['membership'])) { - self::updateMembershipBasedOnCompletionOfContribution( - $contributionDAO, - $contributionDAO->_relatedObjects['membership'], - $contributionId, - $trxnsData['trxn_date'] - ); - } + self::updateMembershipBasedOnCompletionOfContribution( + $contributionDAO, + $contributionId, + $trxnsData['trxn_date'] + ); // update financial item statuses $baseTrxnId = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contributionId); @@ -4550,7 +4545,6 @@ public static function completeOrder(&$input, &$ids, $objects, $transaction, $re } $participant = CRM_Utils_Array::value('participant', $objects); - $memberships = CRM_Utils_Array::value('membership', $objects); $recurContrib = CRM_Utils_Array::value('contributionRecur', $objects); $recurringContributionID = (empty($recurContrib->id)) ? NULL : $recurContrib->id; $event = CRM_Utils_Array::value('event', $objects); @@ -4598,10 +4592,6 @@ public static function completeOrder(&$input, &$ids, $objects, $transaction, $re self::repeatTransaction($contribution, $input, $contributionParams, $paymentProcessorId); $contributionParams['financial_type_id'] = $contribution->financial_type_id; - if (is_numeric($memberships)) { - $memberships = array($objects['membership']); - } - $values = array(); if (isset($input['is_email_receipt'])) { $values['is_email_receipt'] = $input['is_email_receipt']; @@ -4629,15 +4619,12 @@ public static function completeOrder(&$input, &$ids, $objects, $transaction, $re $values['is_email_receipt'] = $recurContrib->is_email_receipt; } - if (!empty($memberships)) { - self::updateMembershipBasedOnCompletionOfContribution( - $contribution, - $memberships, - $primaryContributionID, - $changeDate, - CRM_Core_PseudoConstant::getLabel('CRM_Contribute_BAO_Contribution', 'contribution_status_id', CRM_Utils_Array::value('contribution_status_id', $input)) - ); - } + self::updateMembershipBasedOnCompletionOfContribution( + $contribution, + $primaryContributionID, + $changeDate, + CRM_Core_PseudoConstant::getLabel('CRM_Contribute_BAO_Contribution', 'contribution_status_id', CRM_Utils_Array::value('contribution_status_id', $input)) + ); } else { if (empty($input['IAmAHorribleNastyBeyondExcusableHackInTheCRMEventFORMTaskClassThatNeedsToBERemoved'])) { @@ -4820,9 +4807,11 @@ public static function createCreditNoteId() { * * @param array $ids * + * @return array $ids + * * @throws Exception */ - public function loadRelatedMembershipObjects(&$ids) { + public function loadRelatedMembershipObjects($ids = []) { $query = " SELECT membership_id FROM civicrm_membership_payment @@ -4853,6 +4842,7 @@ public function loadRelatedMembershipObjects(&$ids) { } } } + return $ids; } /** @@ -5397,7 +5387,6 @@ protected static function isPaymentInstrumentChange(&$params, $pendingStatuses) * load them in this function. Code clean up would compensate for any minor performance implication. * * @param \CRM_Contribute_BAO_Contribution $contribution - * @param array $memberships * @param int $primaryContributionID * @param string $changeDate * @param string $contributionStatus @@ -5405,7 +5394,12 @@ protected static function isPaymentInstrumentChange(&$params, $pendingStatuses) * * @todo investigate completely bypassing this function if $contributionStatus != Completed. */ - protected static function updateMembershipBasedOnCompletionOfContribution($contribution, $memberships, $primaryContributionID, $changeDate, $contributionStatus = 'Completed') { + protected static function updateMembershipBasedOnCompletionOfContribution($contribution, $primaryContributionID, $changeDate, $contributionStatus = 'Completed') { + $contribution->loadRelatedMembershipObjects(); + if (empty($contribution->_relatedObjects['membership'])) { + return; + } + $memberships = $contribution->_relatedObjects['membership']; foreach ($memberships as $membershipTypeIdKey => $membership) { if ($membership) { $membershipParams = array(