Просмотр исходного кода

Ticket #5364 - Payments: Allow to simplify Payment Details form on production sites.

AntonLV 8 месяцев назад
Родитель
Сommit
9f0df6cb90

+ 2 - 2
modules/base/payment/classes/BxBaseModPaymentProvider.php

@@ -101,10 +101,10 @@ class BxBaseModPaymentProvider extends BxDol
 
     public function getOption($sName)
     {
-    	if(substr($sName, 0, strlen($this->_sPrefix)) != $this->_sPrefix)
+        if(substr($sName, 0, strlen($this->_sPrefix)) != $this->_sPrefix)
             $sName = $this->_sPrefix . $sName;
 
-        return isset($this->_aOptions[$sName]) ? $this->_aOptions[$sName]['value'] : '';
+        return isset($this->_aOptions[$sName]) ? $this->_aOptions[$sName]['value'] : false;
     }
 
     public function setOption($sName, $mixedValue, $bSave = false)

+ 8 - 0
modules/boonex/payment/classes/BxPaymentConfig.php

@@ -11,6 +11,7 @@
 
 class BxPaymentConfig extends BxBaseModPaymentConfig
 {
+    protected $_bExtendedMode;
     protected $_bCreditsOnly;
 
     protected $_iPayAttemptsMax;
@@ -151,6 +152,7 @@ class BxPaymentConfig extends BxBaseModPaymentConfig
             'stripe_v3' => 'oPaymentProviderStripeV3'
         );
 
+        $this->_bExtendedMode = false;
         $this->_bCreditsOnly = false;
 
         $this->_iPayAttemptsMax = 3;
@@ -163,9 +165,15 @@ class BxPaymentConfig extends BxBaseModPaymentConfig
 
         $sPrefix = $this->getPrefix('options');
 
+        $this->_bExtendedMode = $this->_oDb->getParam($sPrefix . 'extended_mode') == 'on';
         $this->_bCreditsOnly = $this->_oDb->getParam($sPrefix . 'credits_only') == 'on';
     }
 
+    public function isExtendedMode()
+    {
+        return $this->_bExtendedMode;
+    }
+
     public function isCreditsOnly()
     {
         return $this->_bCreditsOnly;

+ 3 - 1
modules/boonex/payment/classes/BxPaymentDb.php

@@ -43,12 +43,14 @@ class BxPaymentDb extends BxBaseModPaymentDb
                 `tpo`.`id` AS `id`,
                 `tpo`.`name` AS `name`,
                 `tpo`.`type` AS `type`,
+                `tpo`.`value` AS `value`,
                 `tpo`.`caption` AS `caption`,
                 `tpo`.`description` AS `description`,
                 `tpo`.`extra` AS `extra`,
                 `tpo`.`check_type` AS `check_type`,
                 `tpo`.`check_params` AS `check_params`,
-                `tpo`.`check_error` AS `check_error`
+                `tpo`.`check_error` AS `check_error`,
+                `tpo`.`extended` AS `extended`
             FROM `" . $this->_sPrefix . "providers` AS `tp`
             LEFT JOIN `" . $this->_sPrefix . "providers_options` AS `tpo` ON `tp`.`id`=`tpo`.`provider_id`
             WHERE `tp`.`active`='1'" . $sWhereClause . "

+ 32 - 17
modules/boonex/payment/classes/BxPaymentFormDetails.php

@@ -68,6 +68,7 @@ class BxPaymentFormDetails extends BxTemplFormView
             return false;
 
         $bSiteAdmin = $this->_oModule->_oConfig->isSiteAdmin();
+        $bExtendedMode = $this->_oModule->_oConfig->isExtendedMode();
         $bSingleSeller = $this->_oModule->_oConfig->isSingleSeller();
 
         $bCollapsed = $this->_bCollapseFirst;
@@ -98,24 +99,36 @@ class BxPaymentFormDetails extends BxTemplFormView
                 $bCollapsed = true;
             }
 
-            $this->aInputs[$aInput['name']] = array(
-                'type' => $aInput['type'],
-                'name' => $aInput['name'],
-                'caption' => _t($aInput['caption']),
-                'value' => $oProvider->getOption($aInput['name']),
-                'info' => _t($aInput['description']),
-            	'attrs' => array(
-                    'bx-data-provider' => $iProvider
-            	),
-                'checker' => array (
-                    'func' => $aInput['check_type'],
-                    'params' => $aInput['check_params'],
-                    'error' => _t($aInput['check_error']),
-                )
-            );
+            $mixedValue = $oProvider->getOption($aInput['name']);
+            if(!$bExtendedMode && ($iInpExt = (int)$aInput['extended']) != BX_PAYMENT_POPT_EXT_NONE)
+                $this->aInputs[$aInput['name']] = [
+                    'type' => 'hidden',
+                    'name' => $aInput['name'],
+                    'value' => $mixedValue !== false && $iInpExt == BX_PAYMENT_POPT_EXT_SAVE ? $mixedValue : $aInput['value'],
+                    'attrs' => [
+                        'bx-data-provider' => $iProvider
+                    ]
+                ];
+            else
+                $this->aInputs[$aInput['name']] = [
+                    'type' => $aInput['type'],
+                    'name' => $aInput['name'],
+                    'caption' => _t($aInput['caption']),
+                    'value' => $mixedValue !== false ? $mixedValue : '',
+                    'info' => _t($aInput['description']),
+                    'attrs' => [
+                        'bx-data-provider' => $iProvider
+                    ],
+                    'checker' => [
+                        'func' => $aInput['check_type'],
+                        'params' => $aInput['check_params'],
+                        'error' => _t($aInput['check_error']),
+                    ]
+                ];
 
             //--- Make some field dependent actions ---//
-            switch($aInput['type']) {
+            $aAddon = [];
+            switch($this->aInputs[$aInput['name']]['type']) {
                 case 'select':
                     if(empty($aInput['extra']))
                        break;
@@ -134,8 +147,10 @@ class BxPaymentFormDetails extends BxTemplFormView
                     break;
 
                 case 'checkbox':
+                    if($this->aInputs[$aInput['name']]['value'] == 'on')
+                        $aAddon = ['checked' => true];
+
                     $this->aInputs[$aInput['name']]['value'] = 'on';
-                    $aAddon = array('checked' => $oProvider->getOption($aInput['name']) == 'on');
                     break;
 
                 case 'value':

+ 6 - 0
modules/boonex/payment/classes/BxPaymentModule.php

@@ -44,6 +44,12 @@ define('BX_PAYMENT_INV_STATUS_UNPAID', 'unpaid');
 define('BX_PAYMENT_INV_STATUS_PAID', 'paid');
 define('BX_PAYMENT_INV_STATUS_OVERDUE', 'overdue');
 
+/*
+ * Provider options: extended mode.
+ */
+define('BX_PAYMENT_POPT_EXT_NONE', 0);
+define('BX_PAYMENT_POPT_EXT_SAVE', 1);
+define('BX_PAYMENT_POPT_EXT_RESET', 2);
 
 /**
  * Payment module by BoonEx

+ 1 - 0
modules/boonex/payment/install/langs/en.xml

@@ -10,6 +10,7 @@
     <string name="_bx_payment_option_err_default_currency_code"><![CDATA[Currency code cannot be empty.]]></string>
     <string name="_bx_payment_option_currency_exchange_api"><![CDATA[Exchange currency API key (by exchangeratesapi.io)]]></string>
     <string name="_bx_payment_option_site_admin"><![CDATA[Main seller (To sell on behalf of the site)]]></string>
+    <string name="_bx_payment_option_extended_mode"><![CDATA[Extended mode (Allows sellers to use Test mode, etc).]]></string>
     <string name="_bx_payment_option_credits_only"><![CDATA[Pay with Credits only mode ('Credits' app should be installed).]]></string>
     <string name="_bx_payment_option_single_seller"><![CDATA[Single seller mode (To sell everything on behalf of the 'Main seller').]]></string>
     <string name="_bx_payment_option_commissions"><![CDATA[Enable commissions calculation]]></string>

+ 3 - 2
modules/boonex/payment/install/sql/enable.sql

@@ -13,8 +13,9 @@ SET @iCategoryId = LAST_INSERT_ID();
 
 INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `check`, `check_params`, `check_error`, `extra`, `order`) VALUES
 ('bx_payment_site_admin', '', @iCategoryId, '_bx_payment_option_site_admin', 'select', '', '', '', 'a:2:{s:6:"module";s:10:"bx_payment";s:6:"method";s:22:"get_options_site_admin";}', 1),
-('bx_payment_credits_only', '', @iCategoryId, '_bx_payment_option_credits_only', 'checkbox', '', '', '', '', 10),
-('bx_payment_single_seller', '', @iCategoryId, '_bx_payment_option_single_seller', 'checkbox', '', '', '', '', 11);
+('bx_payment_extended_mode', '', @iCategoryId, '_bx_payment_option_extended_mode', 'checkbox', '', '', '', '', 11),
+('bx_payment_credits_only', '', @iCategoryId, '_bx_payment_option_credits_only', 'checkbox', '', '', '', '', 13),
+('bx_payment_single_seller', '', @iCategoryId, '_bx_payment_option_single_seller', 'checkbox', '', '', '', '', 15);
 
 INSERT INTO `sys_options_categories` (`type_id`, `name`, `caption`, `order`)
 VALUES (@iTypeId, 'bx_payment_currency', '_bx_payment_options_category_currency', 5);

+ 15 - 13
modules/boonex/payment/install/sql/install.sql

@@ -34,12 +34,14 @@ CREATE TABLE IF NOT EXISTS `bx_payment_providers_options` (
   `provider_id` varchar(64) NOT NULL default '',
   `name` varchar(64) NOT NULL default '',
   `type` varchar(64) NOT NULL default 'text',
+  `value` varchar(255) NOT NULL default '',
   `caption` varchar(255) NOT NULL default '',
   `description` text NOT NULL default '',
   `extra` varchar(255) NOT NULL default '',
   `check_type` varchar(64) NOT NULL default '',
   `check_params` varchar(128) NOT NULL default '',
   `check_error` varchar(128) NOT NULL default '',
+  `extended` tinyint(4) NOT NULL default '0',
   `order` tinyint(4) NOT NULL default '0',
   PRIMARY KEY(`id`),
   UNIQUE KEY `name`(`name`)
@@ -306,19 +308,19 @@ INSERT INTO `bx_payment_providers`(`name`, `caption`, `description`, `option_pre
 ('stripe_v3', '_bx_payment_strp_v3_cpt', '_bx_payment_strp_v3_dsc', 'strp_v3_', 1, 1, 1, 1, 61, 'BxPaymentProviderStripeV3');
 SET @iProviderId = LAST_INSERT_ID();
 
-INSERT INTO `bx_payment_providers_options`(`provider_id`, `name`, `type`, `caption`, `description`, `extra`, `check_type`, `check_params`, `check_error`, `order`) VALUES
-(@iProviderId, 'strp_v3_active', 'checkbox', '_bx_payment_strp_active_cpt', '_bx_payment_strp_active_dsc', '', '', '', '', 1),
-(@iProviderId, 'strp_v3_hidden', 'checkbox', '_bx_payment_strp_hidden_cpt', '_bx_payment_strp_hidden_dsc', '', '', '', '', 2),
-(@iProviderId, 'strp_v3_mode', 'select', '_bx_payment_strp_mode_cpt', '_bx_payment_strp_mode_dsc', '1|_bx_payment_strp_mode_live,2|_bx_payment_strp_mode_test', '', '', '', 3),
-(@iProviderId, 'strp_v3_live_pub_key', 'text', '_bx_payment_strp_live_pub_key_cpt', '_bx_payment_strp_live_pub_key_dsc', '', '', '', '', 4),
-(@iProviderId, 'strp_v3_live_sec_key', 'text', '_bx_payment_strp_live_sec_key_cpt', '_bx_payment_strp_live_sec_key_dsc', '', '', '', '', 5),
-(@iProviderId, 'strp_v3_test_pub_key', 'text', '_bx_payment_strp_test_pub_key_cpt', '_bx_payment_strp_test_pub_key_dsc', '', '', '', '', 6),
-(@iProviderId, 'strp_v3_test_sec_key', 'text', '_bx_payment_strp_test_sec_key_cpt', '_bx_payment_strp_test_sec_key_dsc', '', '', '', '', 7),
-(@iProviderId, 'strp_v3_check_amount', 'checkbox', '_bx_payment_strp_check_amount_cpt', '_bx_payment_strp_check_amount_dsc', '', '', '', '', 8),
-(@iProviderId, 'strp_v3_ssl', 'checkbox', '_bx_payment_strp_ssl_cpt', '_bx_payment_strp_ssl_dsc', '', '', '', '', 9),
-(@iProviderId, 'strp_v3_cancellation_email', 'text', '_bx_payment_strp_cancellation_email_cpt', '', '', 'EmailOrEmpty', '', '_bx_payment_form_input_email_err_cor_or_emp', 10),
-(@iProviderId, 'strp_v3_expiration_email', 'text', '_bx_payment_strp_expiration_email_cpt', '', '', 'EmailOrEmpty', '', '_bx_payment_form_input_email_err_cor_or_emp', 11),
-(@iProviderId, 'strp_v3_notify_url', 'value', '_bx_payment_strp_notify_url_cpt', '', '', '', '', '', 12);
+INSERT INTO `bx_payment_providers_options`(`provider_id`, `name`, `type`, `value`, `caption`, `description`, `extra`, `check_type`, `check_params`, `check_error`, `extended`, `order`) VALUES
+(@iProviderId, 'strp_v3_active', 'checkbox', 'on', '_bx_payment_strp_active_cpt', '_bx_payment_strp_active_dsc', '', '', '', '', 2, 1),
+(@iProviderId, 'strp_v3_hidden', 'checkbox', '', '_bx_payment_strp_hidden_cpt', '_bx_payment_strp_hidden_dsc', '', '', '', '', 1, 2),
+(@iProviderId, 'strp_v3_mode', 'select', '1', '_bx_payment_strp_mode_cpt', '_bx_payment_strp_mode_dsc', '1|_bx_payment_strp_mode_live,2|_bx_payment_strp_mode_test', '', '', '', 2, 3),
+(@iProviderId, 'strp_v3_live_pub_key', 'text', '', '_bx_payment_strp_live_pub_key_cpt', '_bx_payment_strp_live_pub_key_dsc', '', '', '', '', 0, 4),
+(@iProviderId, 'strp_v3_live_sec_key', 'text', '', '_bx_payment_strp_live_sec_key_cpt', '_bx_payment_strp_live_sec_key_dsc', '', '', '', '', 0, 5),
+(@iProviderId, 'strp_v3_test_pub_key', 'text', '', '_bx_payment_strp_test_pub_key_cpt', '_bx_payment_strp_test_pub_key_dsc', '', '', '', '', 1, 6),
+(@iProviderId, 'strp_v3_test_sec_key', 'text', '', '_bx_payment_strp_test_sec_key_cpt', '_bx_payment_strp_test_sec_key_dsc', '', '', '', '', 1, 7),
+(@iProviderId, 'strp_v3_check_amount', 'checkbox', '', '_bx_payment_strp_check_amount_cpt', '_bx_payment_strp_check_amount_dsc', '', '', '', '', 1, 8),
+(@iProviderId, 'strp_v3_ssl', 'checkbox', 'on', '_bx_payment_strp_ssl_cpt', '_bx_payment_strp_ssl_dsc', '', '', '', '', 1, 9),
+(@iProviderId, 'strp_v3_cancellation_email', 'text', '', '_bx_payment_strp_cancellation_email_cpt', '', '', 'EmailOrEmpty', '', '_bx_payment_form_input_email_err_cor_or_emp', 0, 10),
+(@iProviderId, 'strp_v3_expiration_email', 'text', '', '_bx_payment_strp_expiration_email_cpt', '', '', 'EmailOrEmpty', '', '_bx_payment_form_input_email_err_cor_or_emp', 1, 11),
+(@iProviderId, 'strp_v3_notify_url', 'value', '', '_bx_payment_strp_notify_url_cpt', '', '', '', '', '', 0, 12);
 
 -- Stripe Connect payment provider
 INSERT INTO `bx_payment_providers`(`name`, `caption`, `description`, `option_prefix`, `for_visitor`, `for_single`, `for_recurring`, `active`, `order`, `class_name`) VALUES

+ 1 - 0
modules/boonex/russian/data/langs/bx_payment/ru.xml

@@ -10,6 +10,7 @@
     <string name="_bx_payment_option_err_default_currency_code"><![CDATA[Код валюты не может быть пуст.]]></string>
     <string name="_bx_payment_option_currency_exchange_api"><![CDATA[API-ключ для конвертации валют (от exchangeratesapi.io)]]></string>
     <string name="_bx_payment_option_site_admin"><![CDATA[Главный продавец (для продажи от имени сайта)]]></string>
+    <string name="_bx_payment_option_extended_mode"><![CDATA[Расширенный режим (позволяет продавцам использовать тестовый режим и т. д.).]]></string>
     <string name="_bx_payment_option_credits_only"><![CDATA[Режим оплаты только кредитами (приложение 'Кредиты' должно быть установлено).]]></string>
     <string name="_bx_payment_option_single_seller"><![CDATA[Режим единого продавца (все продается от имени 'Главный продавец').]]></string>
     <string name="_bx_payment_option_commissions"><![CDATA[Включить расчет комиссий]]></string>