$contributionParams,
$financialType,
$online,
- $billingLocationID
+ $billingLocationID,
+ $isRecur
) {
$transaction = new CRM_Core_Transaction();
$contactID = $contributionParams['contact_id'];
if (!isset($params['is_email_receipt']) && $isEmailReceipt) {
$params['is_email_receipt'] = $isEmailReceipt;
}
- $recurringContributionID = self::processRecurringContribution($form, $params, $contactID, $financialType, $online);
+ $params['is_recur'] = $isRecur;
+ $recurringContributionID = self::processRecurringContribution($form, $params, $contactID, $financialType);
$nonDeductibleAmount = self::getNonDeductibleAmount($params, $financialType, $online);
$now = date('YmdHis');
* @param array $params
* @param int $contactID
* @param string $contributionType
- * @param bool $online
*
- * @return mixed
+ * @return int|null
*/
- public static function processRecurringContribution(&$form, &$params, $contactID, $contributionType, $online = TRUE) {
- // return if this page is not set for recurring
- // or the user has not chosen the recurring option
+ public static function processRecurringContribution(&$form, &$params, $contactID, $contributionType) {
- //this is online case validation.
- if ((empty($form->_values['is_recur']) && $online) || empty($params['is_recur'])) {
+ if (empty($params['is_recur'])) {
return NULL;
}
$recurParams['trxn_id'] = CRM_Utils_Array::value('trxn_id', $params, $params['invoiceID']);
$recurParams['financial_type_id'] = $contributionType->id;
- if (!$online || $form->_values['is_monetary']) {
+ if ($form->_values['is_monetary']) {
$recurParams['payment_instrument_id'] = 1;
}
- $campaignId = CRM_Utils_Array::value('campaign_id', $params);
- if ($online) {
- if (!array_key_exists('campaign_id', $params)) {
- $campaignId = CRM_Utils_Array::value('campaign_id', $form->_values);
- }
- }
+ $campaignId = CRM_Utils_Array::value('campaign_id', $params, CRM_Utils_Array::value('campaign_id', $form->_values));
$recurParams['campaign_id'] = $campaignId;
$recurring = CRM_Contribute_BAO_ContributionRecur::add($recurParams);
$membershipContribution = NULL;
$isTest = CRM_Utils_Array::value('is_test', $membershipParams, FALSE);
$errors = $createdMemberships = $paymentResults = array();
+ $form->_values['isMembership'] = TRUE;
+ $isRecurForFirstTransaction = CRM_Utils_Array::value('is_recur', $form->_values, CRM_Utils_Array::value('is_recur', $membershipParams));
+ $totalAmount = $membershipParams['amount'];
if ($isPaidMembership) {
if ($isProcessSeparateMembershipTransaction) {
// If we have 2 transactions only one can use the invoice id.
$membershipParams['invoiceID'] .= '-2';
+ if (!empty($membershipParams['auto_renew'])) {
+ $isRecurForFirstTransaction = FALSE;
+ }
}
$paymentResult = CRM_Contribute_BAO_Contribution_Utils::processConfirm($form, $membershipParams,
$contactID,
$financialTypeID,
'membership',
- $isTest
+ $isTest,
+ $isRecurForFirstTransaction
);
if (!empty($paymentResult['contribution'])) {
return;
}
- //finally send an email receipt
+ $emailValues = $form->_values;
+ // Finally send an email receipt for pay-later scenario (although it might sometimes be caught above!)
+ if ($totalAmount == 0) {
+ // This feels like a bizarre hack as the variable name doesn't seem to be directly connected to it's use in the template.
+ $emailValues['useForMember'] = 0;
+ $emailValues['membership_assign'] = 1;
+ $emailValues['amount'] = 0;
+ }
CRM_Contribute_BAO_ContributionPage::sendMail($contactID,
- $form->_values,
+ $emailValues,
$isTest, FALSE,
$includeFieldTypes
);
$financialType->find(TRUE);
$tempParams['amount'] = $minimumFee;
$tempParams['invoiceID'] = md5(uniqid(rand(), TRUE));
+ $isRecur = CRM_Utils_Array::value('is_recur', $tempParams);
//assign receive date when separate membership payment
//and contribution amount not selected.
$contributionParams,
$financialType,
TRUE,
- $form->_bltID
+ $form->_bltID,
+ $isRecur
);
$result = array();
*/
protected function processFormSubmission($contactID) {
$isPayLater = $this->_params['is_pay_later'];
+ if (!isset($this->_params['payment_processor_id'])) {
+ // If there is no processor we are using the pay-later manual pseudo-processor.
+ // (note it might make sense to make this a row in the processor table in the db).
+ $this->_params['payment_processor_id'] = 0;
+ }
if (isset($this->_params['payment_processor_id']) && $this->_params['payment_processor_id'] == 0) {
$this->_params['is_pay_later'] = $isPayLater = TRUE;
}
}
}
}
-
+ $isRecur = CRM_Utils_Array::value('is_recur', $this->_values, CRM_Utils_Array::value('is_recur', $paymentParams));
$result = CRM_Contribute_BAO_Contribution_Utils::processConfirm($this, $paymentParams,
$contactID,
$this->wrangleFinancialTypeID($this->_values['financial_type_id']),
'contribution',
- ($this->_mode == 'test') ? 1 : 0
+ ($this->_mode == 'test') ? 1 : 0,
+ $isRecur
);
if (empty($result['is_payment_failure'])) {