This is generally a code tidy up to push out the principles we have been implementing (ie.
the idea that the processors define their fields. The code can cause e-notices in extensions as is
because it is prescriptive about fields.
I removed the ANDing in the tpl because actually we are not looking to match numbers like 2
2 is the number we have hard-coded for direct debits (we should be using an option group but that
is another story
// 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',
/**
* 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() {
{crmRegion name="contribution-confirm-billing-block"}
{if ($credit_card_number or $bank_account_number)}
<div class="crm-group credit_card-group">
- <div class="header-dark">
- {if $paymentProcessor.payment_type & 2}
- {ts}Direct Debit Information{/ts}
- {else}
- {ts}Credit Card Information{/ts}
+ {if $paymentFieldsetLabel}
+ <div class="header-dark">
+ {$paymentFieldsetLabel}
+ </div>
{/if}
- </div>
- {if $paymentProcessor.payment_type & 2}
+ {if $paymentProcessor.payment_type == 2}
<div class="display-block">
{ts}Account Holder{/ts}: {$account_holder}<br />
{ts}Bank Account Number{/ts}: {$bank_account_number}<br />
<div class="crm-section no-label credit_card_details-section">
<div class="content">{$credit_card_type}</div>
<div class="content">{$credit_card_number}</div>
- <div class="content">{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate}</div>
+ <div class="content">{if $credit_card_exp_date}{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate}{/if}</div>
<div class="clear"></div>
</div>
{/if}
{if $contributeMode eq 'direct' and ! $is_pay_later and $is_monetary and ( $amount GT 0 OR $minimum_fee GT 0 )}
{crmRegion name="contribution-thankyou-billing-block"}
<div class="crm-group credit_card-group">
- <div class="header-dark">
- {if $paymentProcessor.payment_type & 2}
- {ts}Direct Debit Information{/ts}
- {else}
- {ts}Credit Card Information{/ts}
- {/if}
- </div>
- {if $paymentProcessor.payment_type & 2}
+ {if $paymentFieldsetLabel}
+ <div class="header-dark">
+ {$paymentFieldsetLabel}
+ </div>
+ {/if}
+ {if $paymentProcessor.payment_type == 2}
<div class="display-block">
{ts}Account Holder{/ts}: {$account_holder}<br />
{ts}Bank Identification Number{/ts}: {$bank_identification_number}<br />
<div class="crm-section no-label credit_card_details-section">
<div class="content">{$credit_card_type}</div>
<div class="content">{$credit_card_number}</div>
- <div class="content">{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate}</div>
+ <div class="content">{if $credit_card_exp_date}{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate}{/if}</div>
<div class="clear"></div>
</div>
{/if}