Przeglądaj źródła

Ticket #2826 - Credits Only mode.

AntonLV 6 lat temu
rodzic
commit
361e10fa96

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

@@ -11,6 +11,8 @@
 
 class BxPaymentConfig extends BxBaseModPaymentConfig
 {
+    protected $_bCreditsOnly;
+
     function __construct($aModule)
     {
         parent::__construct($aModule);
@@ -36,6 +38,9 @@ class BxPaymentConfig extends BxBaseModPaymentConfig
             'KEY_ARRAY_TRIAL_RECURRING' => 'trial_recurring',
 
             'OBJECT_FORM_PRELISTS_CURRENCIES' => 'bx_payment_currencies',
+            'OBJECT_PP_CREDITS' => 'credits', //Credits payment provider
+
+            'MODULE_CREDITS' => 'bx_credits',
 
             // some language keys
             'T' => array(
@@ -110,6 +115,8 @@ class BxPaymentConfig extends BxBaseModPaymentConfig
             'chargebee_v3' => 'oPaymentProviderChargebeeV3',
             'stripe' => 'oPaymentProviderStripe'
         );
+
+        $this->_bCreditsOnly = false;
     }
 
     public function init(&$oDb)
@@ -121,6 +128,13 @@ class BxPaymentConfig extends BxBaseModPaymentConfig
         $aCurrencies = BxDolForm::getDataItems($this->CNF['OBJECT_FORM_PRELISTS_CURRENCIES'], false, BX_DATA_VALUES_ADDITIONAL);
         $this->_sCurrencyCode = (string)$this->_oDb->getParam($sPrefix . 'default_currency_code');
         $this->_sCurrencySign = !empty($this->_sCurrencyCode) && isset($aCurrencies[$this->_sCurrencyCode]) ? $aCurrencies[$this->_sCurrencyCode] : '';
+
+        $this->_bCreditsOnly = $this->_oDb->getParam($sPrefix . 'credits_only') == 'on';
+    }
+
+    public function isCreditsOnly()
+    {
+        return $this->_bCreditsOnly;
     }
 
     public function getPrice($sType, $aItem)

+ 28 - 3
modules/boonex/payment/classes/BxPaymentGridCart.php

@@ -76,10 +76,37 @@ class BxPaymentGridCart extends BxBaseModPaymentGridCarts
 
             $iClientId = (int)$this->_aQueryAppend['client_id'];
             $iSellerId = (int)$this->_aQueryAppend['seller_id'];
+            $aCartInfo = $this->_oModule->getObjectCart()->getInfo(BX_PAYMENT_TYPE_SINGLE, $iClientId, $iSellerId);
+
+            $bCreditsOnly = $this->_oModule->_oConfig->isCreditsOnly();
+
+            $bPayForCredits = true;
+            if(!empty($aCartInfo['items']) && is_array($aCartInfo['items']))
+                foreach($aCartInfo['items'] as $aItem) {
+                    $aModule = $this->_oModule->_oDb->getModuleById((int)$aItem['module_id']);
+                    if($aModule['name'] != $CNF['MODULE_CREDITS']) {
+                        $bPayForCredits = false;
+                        break;
+                    }
+                }
 
-            $oCart = $this->_oModule->getObjectCart();
             $aProviders = $this->_oModule->_oDb->getVendorInfoProvidersSingle($iSellerId);
             foreach($aProviders as $aProvider) {
+                $bProviderCredits = $aProvider['name'] == $CNF['OBJECT_PP_CREDITS'];
+
+                /*
+                 * Hide all non-Credits payment providers when 'credits only' mode is enabled 
+                 * and purchasing items aren't credits.
+                 */
+                if($bCreditsOnly && !$bProviderCredits && !$bPayForCredits)
+                    continue;
+
+                /*
+                 * Hide Credits payment provider when paying for credits.
+                 */
+                if($bProviderCredits && $bPayForCredits)
+                    continue;
+
                 $sAction = $this->_getActionDefault($sType, $sActionName, array(
                     'title'=> _t('_bx_payment_grid_action_title_crt_checkout', _t($CNF['T']['TXT_CART_PROVIDER'] . $aProvider['name'])),
                     'icon' => '',
@@ -95,8 +122,6 @@ class BxPaymentGridCart extends BxBaseModPaymentGridCarts
 
                 $oProvider = $this->_oModule->getObjectProvider($aProvider['name'], $iSellerId);
                 if($oProvider !== false && method_exists($oProvider, 'getButtonSingle')) {
-                    $aCartInfo = $oCart->getInfo(BX_PAYMENT_TYPE_SINGLE, $iClientId, $iSellerId);
-
                     $aParams = array(
                         'sObjNameGrid' => $this->getObject(),
                         'aCartInfo' => $aCartInfo,

+ 1 - 20
modules/boonex/payment/classes/BxPaymentProviderCredits.php

@@ -24,7 +24,7 @@ class BxPaymentProviderCredits extends BxBaseModPaymentProvider implements iBxBa
 
         parent::__construct($aConfig);
 
-        $this->_sModuleCredits = 'bx_credits';
+        $this->_sModuleCredits = $this->_oModule->_oConfig->CNF['MODULE_CREDITS'];
     }
 
     public function initializeCheckout($iPendingId, $aCartInfo, $bRecurring = false, $iRecurringDays = 0)
@@ -80,25 +80,6 @@ class BxPaymentProviderCredits extends BxBaseModPaymentProvider implements iBxBa
         return $aResult;
     }
 
-    public function getButtonSingle($iClientId, $iVendorId, $aParams = array())
-    {
-        $mixedResult = false;
-        if(empty($aParams['aCartInfo']['items']) || !is_array($aParams['aCartInfo']['items']))
-            return $mixedResult;
-
-        $oModuleQuery = BxDolModuleQuery::getInstance();
-        foreach($aParams['aCartInfo']['items'] as $aItem) {
-            $aModule = $oModuleQuery->getModuleById((int)$aItem['module_id']);
-            if($aModule['name'] != $this->_sModuleCredits)
-                continue;
-
-            $mixedResult = '';
-            break;
-        }
-
-        return $mixedResult;
-    }
-
     protected function _finalizeCheckout(&$aData)
     {
         list($iSellerId, $iPendingId) = $this->_deconstructCustomData($aData['c']);

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

@@ -6,6 +6,8 @@
 	<string name="_bx_payment_option_default_currency_code"><![CDATA[Currency]]></string>
 	<string name="_bx_payment_option_err_default_currency_code"><![CDATA[Currency code cannot be empty.]]></string>
 	<string name="_bx_payment_option_site_admin"><![CDATA[Site administrator]]></string>
+        <string name="_bx_payment_option_credits_only"><![CDATA[Pay with Credits only mode (Credits App should be installed).]]></string>
+
 
 	<!-- PAGES and BLOCKS -->
 	<string name="_bx_payment_page_title_sys_carts"><![CDATA[Shopping Carts]]></string>

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

@@ -13,7 +13,8 @@ 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_default_currency_code', 'USD', @iCategoryId, '_bx_payment_option_default_currency_code', 'select', 'Avail', '', '_bx_payment_option_err_default_currency_code', 'a:2:{s:6:"module";s:10:"bx_payment";s:6:"method";s:33:"get_options_default_currency_code";}', 0),
-('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_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);
 
 
 -- PAGES & BLOCKS

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

@@ -6,6 +6,7 @@
 	<string name="_bx_payment_option_default_currency_code"><![CDATA[Код валюты]]></string>
 	<string name="_bx_payment_option_err_default_currency_code"><![CDATA[Код валюты не может быть пуст.]]></string>
 	<string name="_bx_payment_option_site_admin"><![CDATA[Администратор сайта]]></string>
+        <string name="_bx_payment_option_credits_only"><![CDATA[Режим оплаты только кредитами (Приложение Кредиты должно быть установлено).]]></string>
 
 	<!-- PAGES and BLOCKS -->
 	<string name="_bx_payment_page_title_sys_carts"><![CDATA[Корзины]]></string>