$contribution->total_amount = $contributionParams['total_amount'] = $input['amount'];
}
- if (!empty($contributionParams['contribution_recur_id'])) {
- $recurringContribution = civicrm_api3('ContributionRecur', 'getsingle', [
- 'id' => $contributionParams['contribution_recur_id'],
- ]);
- 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 (!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'];
- }
+ $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'],
else {
$contributionParams['financial_type_id'] = $templateContribution['financial_type_id'];
}
- foreach (['contact_id', 'currency', 'source'] as $fieldName) {
- $contributionParams[$fieldName] = $templateContribution[$fieldName];
+ foreach (['contact_id', 'currency', 'source', 'amount_level', 'address_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');
//CRM-18805 -- Contribution page not recorded on recurring transactions, Recurring contribution payments
return $contributeSettings[$name] ?? NULL;
}
- /**
- * This function process contribution related objects.
- *
- * @param int $contributionId
- * @param int $statusId
- * @param int|null $previousStatusId
- *
- * @param string $receiveDate
- *
- * @return null|string
- */
- public static function transitionComponentWithReturnMessage($contributionId, $statusId, $previousStatusId = NULL, $receiveDate = NULL) {
- $statusMsg = NULL;
- if (!$contributionId || !$statusId) {
- return $statusMsg;
- }
-
- $params = [
- 'contribution_id' => $contributionId,
- 'contribution_status_id' => $statusId,
- 'previous_contribution_status_id' => $previousStatusId,
- 'receive_date' => $receiveDate,
- ];
-
- $updateResult = CRM_Contribute_BAO_Contribution::transitionComponents($params);
-
- if (!is_array($updateResult) ||
- !($updatedComponents = CRM_Utils_Array::value('updatedComponents', $updateResult)) ||
- !is_array($updatedComponents) ||
- empty($updatedComponents)
- ) {
- return $statusMsg;
- }
-
- // get the user display name.
- $sql = "
- SELECT display_name as displayName
- FROM civicrm_contact
-LEFT JOIN civicrm_contribution on (civicrm_contribution.contact_id = civicrm_contact.id )
- WHERE civicrm_contribution.id = {$contributionId}";
- $userDisplayName = CRM_Core_DAO::singleValueQuery($sql);
-
- // get the status message for user.
- foreach ($updatedComponents as $componentName => $updatedStatusId) {
-
- if ($componentName == 'CiviMember') {
- $updatedStatusName = CRM_Utils_Array::value($updatedStatusId,
- CRM_Member_PseudoConstant::membershipStatus()
- );
-
- $statusNameMsgPart = 'updated';
- switch ($updatedStatusName) {
- case 'Cancelled':
- case 'Expired':
- $statusNameMsgPart = $updatedStatusName;
- break;
- }
-
- $statusMsg .= "<br />" . ts("Membership for %1 has been %2.", [
- 1 => $userDisplayName,
- 2 => $statusNameMsgPart,
- ]);
- }
-
- if ($componentName == 'CiviEvent') {
- $updatedStatusName = CRM_Utils_Array::value($updatedStatusId,
- CRM_Event_PseudoConstant::participantStatus()
- );
- if ($updatedStatusName == 'Cancelled') {
- $statusMsg .= "<br />" . ts("Event Registration for %1 has been Cancelled.", [1 => $userDisplayName]);
- }
- elseif ($updatedStatusName == 'Registered') {
- $statusMsg .= "<br />" . ts("Event Registration for %1 has been updated.", [1 => $userDisplayName]);
- }
- }
-
- if ($componentName == 'CiviPledge') {
- $updatedStatusName = CRM_Utils_Array::value($updatedStatusId,
- CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name')
- );
- if ($updatedStatusName == 'Cancelled') {
- $statusMsg .= "<br />" . ts("Pledge Payment for %1 has been Cancelled.", [1 => $userDisplayName]);
- }
- elseif ($updatedStatusName == 'Failed') {
- $statusMsg .= "<br />" . ts("Pledge Payment for %1 has been Failed.", [1 => $userDisplayName]);
- }
- elseif ($updatedStatusName == 'Completed') {
- $statusMsg .= "<br />" . ts("Pledge Payment for %1 has been updated.", [1 => $userDisplayName]);
- }
- }
- }
-
- return $statusMsg;
- }
-
/**
* Get the contribution as it is in the database before being updated.
*