Commit df0d084d authored by Dave Greenberg's avatar Dave Greenberg

Merge branch 'CRM-15714' of https://github.com/adixon/civicrm-core into adixon-CRM-15714

Conflicts:
	CRM/Core/Payment.php

----------------------------------------
* CRM-15714: validateCreditCard function makes too many assumptions
  https://issues.civicrm.org/jira/browse/CRM-15714
parents f7e8909f d1bd65af
......@@ -1082,7 +1082,7 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu
if (!empty($self->_paymentFields)) {
CRM_Core_Form::validateMandatoryFields($self->_paymentFields, $fields, $errors);
}
CRM_Core_Payment_Form::validateCreditCard($fields, $errors);
CRM_Core_Payment_Form::validatePaymentInstrument($fields['payment_processor'], $fields, $errors, $self);
foreach (CRM_Contact_BAO_Contact::$_greetingTypes as $greeting) {
if ($greetingType = CRM_Utils_Array::value($greeting, $fields)) {
......
......@@ -234,8 +234,8 @@ class CRM_Contribute_Form_UpdateBilling extends CRM_Core_Form {
$errors = array();
CRM_Core_Form::validateMandatoryFields($self->_fields, $fields, $errors);
// make sure that credit card number and cvv are valid
CRM_Core_Payment_Form::validateCreditCard($fields, $errors);
// validate the payment instrument values (e.g. credit card number)
CRM_Core_Payment_Form::validatePaymentInstrument($self->_paymentProcessor['id'], $fields, $errors, $self);
return empty($errors) ? TRUE : $errors;
}
......
......@@ -172,7 +172,18 @@ abstract class CRM_Core_Payment {
}
/**
* Setter for the payment form that wants to use the processor.
* Default payment instrument validation
* Implement the usual Luhn algorithm via a static function in the CRM_Core_Payment_Form if it's a credit card
* Not a static function, because I need to check for payment_type
*/
public function validatePaymentInstrument($values, &$errors) {
if ($this->_paymentProcessor['payment_type'] == 1) {
CRM_Core_Payment_Form::validateCreditCard($values, $errors);
}
}
/**
* Setter for the payment form that wants to use the processor
* @deprecated
* @param CRM_Core_Form $paymentForm
*/
......
......@@ -316,6 +316,20 @@ class CRM_Core_Payment_Form {
}
}
/**
* Validate the payment instrument values before passing it to the payment processor
* We want this to be overrideable by the payment processor, and default to using
* this object's validCreditCard for credit cards (implemented as the default in the Payment class).
*/
public static function validatePaymentInstrument($payment_processor_id, $values, &$errors, $form) {
// ignore if we don't have a payment instrument to validate (e.g. backend payments)
if ($payment_processor_id > 0) {
$paymentProcessor = CRM_Financial_BAO_PaymentProcessor::getPayment($payment_processor_id, 'live');
$payment = CRM_Core_Payment::singleton('live', $paymentProcessor, $form);
$payment->validatePaymentInstrument($values, $errors);
}
}
/**
* The credit card pseudo constant results only the CC label, not the key ID
* So we normalize the name to use it as a CSS class.
......
......@@ -398,8 +398,8 @@ class CRM_Event_Cart_Form_Checkout_Payment extends CRM_Event_Cart_Form_Cart {
}
CRM_Core_Form::validateMandatoryFields($self->_fields, $fields, $errors);
// make sure that credit card number and cvv are valid
CRM_Core_Payment_Form::validateCreditCard($fields, $errors);
// validate payment instrument values (e.g. credit card number)
CRM_Core_Payment_Form::validatePaymentInstrument($self->_paymentProcessor['id'], $fields, $errors, $self);
}
return empty($errors) ? TRUE : $errors;
......
......@@ -814,8 +814,8 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment
$errorMsg = array();
if (!empty($values['payment_processor_id'])) {
// make sure that credit card number and cvv are valid
CRM_Core_Payment_Form::validateCreditCard($values, $errorMsg);
// make sure that payment instrument values (e.g. credit card number and cvv) are valid
CRM_Core_Payment_Form::validatePaymentInstrument($values['payment_processor_id'], $values, $errorMsg, $self);
}
if (!empty($values['record_contribution'])) {
......
......@@ -565,8 +565,9 @@ class CRM_Event_Form_Registration_AdditionalParticipant extends CRM_Event_Form_R
CRM_Core_Form::validateMandatoryFields($self->_fields, $fields, $errors);
// make sure that credit card number and cvv are valid
CRM_Core_Payment_Form::validateCreditCard($self->_params[0], $errors);
// validate supplied payment instrument values (e.g. credit card number and cvv)
$payment_processor_id = $self->params[0]['payment_processor_id'];
CRM_Core_Payment_Form::validatePaymentInstrument($payment_processor_id, $self->_params[0], $errors, $self);
if ($errors) {
return FALSE;
......
......@@ -930,7 +930,7 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration {
if (!empty($self->_paymentFields)) {
CRM_Core_Form::validateMandatoryFields($self->_paymentFields, $fields, $errors);
}
CRM_Core_Payment_Form::validateCreditCard($fields, $errors);
CRM_Core_Payment_Form::validatePaymentInstrument($self->_paymentProcessorID, $fields, $errors, $self);
}
foreach (CRM_Contact_BAO_Contact::$_greetingTypes as $greeting) {
......
......@@ -859,8 +859,8 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )';
}
if (!empty($params['payment_processor_id'])) {
// make sure that credit card number and cvv are valid
CRM_Core_Payment_Form::validateCreditCard($params, $errors);
// validate payment instrument (e.g. credit card number)
CRM_Core_Payment_Form::validatePaymentInstrument($params['payment_processor_id'], $params, $errors, $self);
}
$joinDate = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment