diff --git a/CRM/Contribute/Form/ContributionBase.php b/CRM/Contribute/Form/ContributionBase.php index cffecc784e36..fd2b20e11b57 100644 --- a/CRM/Contribute/Form/ContributionBase.php +++ b/CRM/Contribute/Form/ContributionBase.php @@ -580,23 +580,36 @@ public function assignToTemplate() { // The concept of contributeMode is deprecated. // The payment processor object can provide info about the fields it shows. - if ($this->_contributeMode == 'direct' && $assignCCInfo) { - if ($this->_paymentProcessor && - $this->_paymentProcessor['payment_type'] & CRM_Core_Payment::PAYMENT_TYPE_DIRECT_DEBIT - ) { - $this->assign('account_holder', $this->_params['account_holder']); - $this->assign('bank_identification_number', $this->_params['bank_identification_number']); - $this->assign('bank_name', $this->_params['bank_name']); - $this->assign('bank_account_number', $this->_params['bank_account_number']); + if ($assignCCInfo) { + /** @var $paymentProcessorObject \CRM_Core_Payment */ + $paymentProcessorObject = $this->_paymentProcessor['object']; + $paymentFields = $paymentProcessorObject->getPaymentFormFields(); + foreach ($paymentFields as $index => $paymentField) { + if (!isset($this->_params[$paymentField])) { + unset($paymentFields[$index]); + continue; + } + if ($paymentField === 'credit_card_exp_date') { + $date = CRM_Utils_Date::format(CRM_Utils_Array::value('credit_card_exp_date', $this->_params)); + $date = CRM_Utils_Date::mysqlToIso($date); + $this->assign('credit_card_exp_date', $date); + } + elseif ($paymentField === 'credit_card_number') { + $this->assign('credit_card_number', + CRM_Utils_System::mungeCreditCard(CRM_Utils_Array::value('credit_card_number', $this->_params)) + ); + } + else { + $this->assign($paymentField, $this->_params[$paymentField]); + } } - else { - $date = CRM_Utils_Date::format(CRM_Utils_Array::value('credit_card_exp_date', $this->_params)); - $date = CRM_Utils_Date::mysqlToIso($date); - $this->assign('credit_card_exp_date', $date); - $this->assign('credit_card_number', - CRM_Utils_System::mungeCreditCard(CRM_Utils_Array::value('credit_card_number', $this->_params)) - ); + $paymentFieldsetLabel = ts('%1 Information', array($paymentProcessorObject->getPaymentTypeLabel())); + if (empty($paymentFields)) { + $paymentFieldsetLabel = ''; } + $this->assign('paymentFieldsetLabel', $paymentFieldsetLabel); + $this->assign('paymentFields', $paymentFields); + } $this->assign('email', diff --git a/CRM/Core/Payment.php b/CRM/Core/Payment.php index 0bfe0c2d2ec4..822b6bcc88c3 100644 --- a/CRM/Core/Payment.php +++ b/CRM/Core/Payment.php @@ -533,8 +533,17 @@ public function getPaymentTypeLabel() { /** * Get array of fields that should be displayed on the payment form. - * @todo make payment type an option value & use it in the function name - currently on debit & credit card work + * + * Common results are + * array('credit_card_type', 'credit_card_number', 'cvv2', 'credit_card_exp_date') + * or + * array('account_holder', 'bank_account_number', 'bank_identification_number', 'bank_name') + * or + * array() + * * @return array + * Array of payment fields appropriate to the payment processor. + * * @throws CiviCRM_API3_Exception */ public function getPaymentFormFields() { diff --git a/templates/CRM/Contribute/Form/Contribution/Confirm.tpl b/templates/CRM/Contribute/Form/Contribution/Confirm.tpl index 571e708849b1..b0eb8c4b3e21 100644 --- a/templates/CRM/Contribute/Form/Contribution/Confirm.tpl +++ b/templates/CRM/Contribute/Form/Contribution/Confirm.tpl @@ -223,14 +223,12 @@ {crmRegion name="contribution-confirm-billing-block"} {if ($credit_card_number or $bank_account_number)}