X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FContribute%2FForm%2FContribution%2FConfirm.php;h=db1bf2686dbcefda88d8d07c406539ca97330c5c;hb=858f70966e3eab0bc78cb642d9b6cdaf1fdb4d45;hp=f79df3b66d298869449a7306589eb2de103e4f2d;hpb=a5b08a92f51c39c668edf05a5db3b199a300ddde;p=civicrm-core.git diff --git a/CRM/Contribute/Form/Contribution/Confirm.php b/CRM/Contribute/Form/Contribution/Confirm.php index f79df3b66d..db1bf2686d 100644 --- a/CRM/Contribute/Form/Contribution/Confirm.php +++ b/CRM/Contribute/Form/Contribution/Confirm.php @@ -807,7 +807,8 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $contributionParams, $financialType, $online, - $billingLocationID + $billingLocationID, + $isRecur ) { $transaction = new CRM_Core_Transaction(); $contactID = $contributionParams['contact_id']; @@ -837,7 +838,8 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr 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'); @@ -1045,16 +1047,12 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr * @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; } @@ -1100,16 +1098,11 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $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); @@ -1426,18 +1419,25 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $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'])) { @@ -1603,9 +1603,16 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr 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 ); @@ -1649,6 +1656,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $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. @@ -1693,7 +1701,8 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $contributionParams, $financialType, TRUE, - $form->_bltID + $form->_bltID, + $isRecur ); $result = array(); @@ -1913,6 +1922,11 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr */ 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; } @@ -2157,12 +2171,13 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } } } - + $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'])) {