diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index 03df483b9598..6327b8ec3c13 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -2454,69 +2454,68 @@ protected static function repeatTransaction(&$contribution, $input, $contributio if (!empty($contribution->id)) { return FALSE; } - if (empty($contribution->id)) { - // Unclear why this would only be set for repeats. - if (!empty($input['amount'])) { - $contribution->total_amount = $contributionParams['total_amount'] = $input['amount']; - } - $recurringContribution = civicrm_api3('ContributionRecur', 'getsingle', [ - 'id' => $contributionParams['contribution_recur_id'], - ]); - if (!empty($recurringContribution['financial_type_id'])) { - // CRM-17718 the campaign id on the contribution recur record should get precedence. - $contributionParams['financial_type_id'] = $recurringContribution['financial_type_id']; - } - $templateContribution = CRM_Contribute_BAO_ContributionRecur::getTemplateContribution( - $contributionParams['contribution_recur_id'], - array_intersect_key($contributionParams, [ - 'total_amount' => TRUE, - 'financial_type_id' => TRUE, - ]) - ); - $input['line_item'] = $contributionParams['line_item'] = $templateContribution['line_item']; - $contributionParams['status_id'] = 'Pending'; + // Unclear why this would only be set for repeats. + if (!empty($input['amount'])) { + $contribution->total_amount = $contributionParams['total_amount'] = $input['amount']; + } - if (isset($contributionParams['financial_type_id']) && count($input['line_item']) === 1) { - // We permit the financial type to be overridden for single line items. - // More comments on this are in getTemplateTransaction. - $contribution->financial_type_id = $contributionParams['financial_type_id']; - } - else { - $contributionParams['financial_type_id'] = $templateContribution['financial_type_id']; - } - foreach (['contact_id', 'currency', 'source', 'amount_level', 'address_id', 'on_behalf', 'source_contact_id', 'tax_amount', 'contribution_page_id'] as $fieldName) { - if (isset($templateContribution[$fieldName])) { - $contributionParams[$fieldName] = $templateContribution[$fieldName]; - } - } - if (!empty($recurringContribution['campaign_id'])) { - // CRM-17718 the campaign id on the contribution recur record should get precedence. - $contributionParams['campaign_id'] = $recurringContribution['campaign_id']; - } - if (!isset($contributionParams['campaign_id']) && isset($templateContribution['campaign_id'])) { - // Fall back on value from the previous contribution if not passed in as input - // or loadable from the recurring contribution. - $contributionParams['campaign_id'] = $templateContribution['campaign_id']; - } - $contributionParams['source'] = $contributionParams['source'] ?? ts('Recurring contribution'); + $recurringContribution = civicrm_api3('ContributionRecur', 'getsingle', [ + 'id' => $contributionParams['contribution_recur_id'], + ]); + if (!empty($recurringContribution['financial_type_id'])) { + // CRM-17718 the campaign id on the contribution recur record should get precedence. + $contributionParams['financial_type_id'] = $recurringContribution['financial_type_id']; + } + $templateContribution = CRM_Contribute_BAO_ContributionRecur::getTemplateContribution( + $contributionParams['contribution_recur_id'], + array_intersect_key($contributionParams, [ + 'total_amount' => TRUE, + 'financial_type_id' => TRUE, + ]) + ); + $input['line_item'] = $contributionParams['line_item'] = $templateContribution['line_item']; + $contributionParams['status_id'] = 'Pending'; - //CRM-18805 -- Contribution page not recorded on recurring transactions, Recurring contribution payments - //do not create CC or BCC emails or profile notifications. - //The if is just to be safe. Not sure if we can ever arrive with this unset - // but per CRM-19478 it seems it can be 'null' - if (isset($contribution->contribution_page_id) && is_numeric($contribution->contribution_page_id)) { - $contributionParams['contribution_page_id'] = $contribution->contribution_page_id; + if (isset($contributionParams['financial_type_id']) && count($input['line_item']) === 1) { + // We permit the financial type to be overridden for single line items. + // More comments on this are in getTemplateTransaction. + $contribution->financial_type_id = $contributionParams['financial_type_id']; + } + else { + $contributionParams['financial_type_id'] = $templateContribution['financial_type_id']; + } + foreach (['contact_id', 'currency', 'source', 'amount_level', 'address_id', 'on_behalf', 'source_contact_id', 'tax_amount', 'contribution_page_id'] as $fieldName) { + if (isset($templateContribution[$fieldName])) { + $contributionParams[$fieldName] = $templateContribution[$fieldName]; } + } + if (!empty($recurringContribution['campaign_id'])) { + // CRM-17718 the campaign id on the contribution recur record should get precedence. + $contributionParams['campaign_id'] = $recurringContribution['campaign_id']; + } + if (!isset($contributionParams['campaign_id']) && isset($templateContribution['campaign_id'])) { + // Fall back on value from the previous contribution if not passed in as input + // or loadable from the recurring contribution. + $contributionParams['campaign_id'] = $templateContribution['campaign_id']; + } + $contributionParams['source'] = $contributionParams['source'] ?? ts('Recurring contribution'); - $createContribution = civicrm_api3('Contribution', 'create', $contributionParams); - $contribution->id = $createContribution['id']; - $contribution->copyCustomFields($templateContribution['id'], $contribution->id); - self::handleMembershipIDOverride($contribution->id, $input); - // Add new soft credit against current $contribution. - CRM_Contribute_BAO_ContributionRecur::addrecurSoftCredit($contributionParams['contribution_recur_id'], $createContribution['id']); - return $createContribution; + //CRM-18805 -- Contribution page not recorded on recurring transactions, Recurring contribution payments + //do not create CC or BCC emails or profile notifications. + //The if is just to be safe. Not sure if we can ever arrive with this unset + // but per CRM-19478 it seems it can be 'null' + if (isset($contribution->contribution_page_id) && is_numeric($contribution->contribution_page_id)) { + $contributionParams['contribution_page_id'] = $contribution->contribution_page_id; } + + $createContribution = civicrm_api3('Contribution', 'create', $contributionParams); + $contribution->id = $createContribution['id']; + $contribution->copyCustomFields($templateContribution['id'], $contribution->id); + self::handleMembershipIDOverride($contribution->id, $input); + // Add new soft credit against current $contribution. + CRM_Contribute_BAO_ContributionRecur::addrecurSoftCredit($contributionParams['contribution_recur_id'], $createContribution['id']); + return $createContribution; } /**