From 5c3744ffa13aab57ed6d4766c462daf747b602d7 Mon Sep 17 00:00:00 2001 From: eileenmcnaugton Date: Thu, 6 Aug 2015 18:05:21 +1200 Subject: [PATCH] CRM-16975 fix for membership price set config - backport 4.7 code that allows more sensible determination of whether multiple payments are supported --- CRM/Core/Payment.php | 20 +++++++++++++++++++- CRM/Member/Form/MembershipBlock.php | 14 ++++---------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/CRM/Core/Payment.php b/CRM/Core/Payment.php index 5dd8ced50a..3a45446495 100644 --- a/CRM/Core/Payment.php +++ b/CRM/Core/Payment.php @@ -162,6 +162,24 @@ abstract class CRM_Core_Payment { } } + /** + * Can more than one transaction be processed at once? + * + * In general processors that process payment by server to server communication support this while others do not. + * + * In future we are likely to hit an issue where this depends on whether a token already exists. + * + * @return bool + */ + protected function supportsMultipleConcurrentPayments() { + if ($this->_paymentProcessor['billing_mode'] == 4 || $this->_paymentProcessor['payment_type'] != 1) { + return FALSE; + } + else { + return TRUE; + } + } + /** * Are live payments supported - e.g dummy doesn't support this. * @@ -763,7 +781,7 @@ INNER JOIN civicrm_contribution con ON ( con.contribution_recur_id = rec.id ) } // Else default - return $this->_paymentProcessor['url_recur']; + return isset($this->_paymentProcessor['url_recur']) ? $this->_paymentProcessor['url_recur'] : ''; } } diff --git a/CRM/Member/Form/MembershipBlock.php b/CRM/Member/Form/MembershipBlock.php index 1103a75524..c565847c04 100644 --- a/CRM/Member/Form/MembershipBlock.php +++ b/CRM/Member/Form/MembershipBlock.php @@ -243,19 +243,13 @@ class CRM_Member_Form_MembershipBlock extends CRM_Contribute_Form_ContributionPa $paymentProcessorId = explode(CRM_Core_DAO::VALUE_SEPARATOR, $paymentProcessorIds); if (!empty($paymentProcessorId)) { - $paymentProcessorType = CRM_Core_PseudoConstant::paymentProcessorType(FALSE, NULL, 'name'); foreach ($paymentProcessorId as $pid) { if ($pid) { - $paymentProcessorTypeId = CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_PaymentProcessor', - $pid, 'payment_processor_type_id' - ); - } - if (!($paymentProcessorTypeId == CRM_Utils_Array::key('PayPal', $paymentProcessorType) || - ($paymentProcessorTypeId == CRM_Utils_Array::key('AuthNet', $paymentProcessorType))) - ) { - $errors['member_price_set_id'] = ts('The membership price set associated with this online contribution allows a user to select BOTH an auto-renew AND a non-auto-renew membership. This requires submitting multiple processor transactions, and is not supported for one or more of the payment processors enabled under the Amounts tab.'); + $processor = Civi\Payment\System::singleton()->getById($pid); + if (!$processor->supports('MultipleConcurrentPayments')) { + $errors['member_price_set_id'] = ts('The membership price set associated with this online contribution allows a user to select BOTH an auto-renew AND a non-auto-renew membership. This requires submitting multiple processor transactions, and is not supported for one or more of the payment processors enabled under the Amounts tab.'); + } } - } } } -- 2.25.1