소스 검색

Ticket #418 - Related changes in Payments module.

AntonLV 10 년 전
부모
커밋
acb2a35b58

+ 6 - 6
inc/classes/BxDolPayments.php

@@ -156,12 +156,12 @@ class BxDolPayments extends BxDol implements iBxDolSingleton
     /**
      * Returns cart JavaScript code which should be included in the page to make "Add To Cart" and "Subscribe" buttons work properly.
      */
-    public function getCartJs($bWrapped = true)
+    public function getCartJs($sType = '')
     {
     	if(!BxDolRequest::serviceExists($this->_sActive, 'get_cart_js', 'Cart'))
 			return '';
 
-		$aSrvParams = array($bWrapped);
+		$aSrvParams = array($sType);
 		return BxDolService::call($this->_sActive, 'get_cart_js', $aSrvParams, 'Cart');
     }
 
@@ -180,12 +180,12 @@ class BxDolPayments extends BxDol implements iBxDolSingleton
     /**
      * Returns "Add To Cart" JavaScript code to use in onclick attribute.
      */
-    public function getAddToCartJs($iVendorId, $mixedModuleId, $iItemId, $iItemCount, $bNeedRedirect = false, $bWrapped = true)
+    public function getAddToCartJs($iVendorId, $mixedModuleId, $iItemId, $iItemCount, $bNeedRedirect = false)
     {
     	if(!BxDolRequest::serviceExists($this->_sActive, 'get_add_to_cart_js', 'Cart'))
 			return array();
 
-		$aSrvParams = array($iVendorId, $mixedModuleId, $iItemId, $iItemCount, $bNeedRedirect, $bWrapped);
+		$aSrvParams = array($iVendorId, $mixedModuleId, $iItemId, $iItemCount, $bNeedRedirect);
 		return BxDolService::call($this->_sActive, 'get_add_to_cart_js', $aSrvParams, 'Cart');
     }
 
@@ -212,12 +212,12 @@ class BxDolPayments extends BxDol implements iBxDolSingleton
 	/**
      * Returns "Subscribe" JavaScript code to use in onclick attribute.
      */
-    public function getSubscribeJs($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount = 1, $bWrapped = true)
+    public function getSubscribeJs($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount = 1)
     {
     	if(!BxDolRequest::serviceExists($this->_sActive, 'get_subscribe_js', 'Cart'))
 			return array();
 
-		$aSrvParams = array($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount, $bWrapped);
+		$aSrvParams = array($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount);
 		return BxDolService::call($this->_sActive, 'get_subscribe_js', $aSrvParams, 'Cart');
     }
 

+ 6 - 6
modules/base/payment/classes/BxBaseModPaymentCart.php

@@ -32,18 +32,18 @@ class BxBaseModPaymentCart extends BxDol
     	return  bx_append_url_params($this->_oModule->_oConfig->getUrl('URL_CART'), array('seller_id' => $iVendor));
     }
 
-    public function serviceGetCartJs($bWrapped = true)
+    public function serviceGetCartJs($sType = '')
     {
-        return $this->_oModule->_oTemplate->displayCartJs($bWrapped);
+        return $this->_oModule->_oTemplate->displayCartJs($sType);
     }
 
-    public function serviceGetAddToCartJs($iVendorId, $mixedModuleId, $iItemId, $iItemCount, $bNeedRedirect = false, $bWrapped = true)
+    public function serviceGetAddToCartJs($iVendorId, $mixedModuleId, $iItemId, $iItemCount, $bNeedRedirect = false)
     {
 		$iModuleId = $this->_oModule->_oConfig->getModuleId($mixedModuleId);
         if(empty($iModuleId))
             return '';
 
-        return $this->_oModule->_oTemplate->displayAddToCartJs($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect, $bWrapped);
+        return $this->_oModule->_oTemplate->displayAddToCartJs($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect);
     }
 
 	public function serviceGetAddToCartLink($iVendorId, $mixedModuleId, $iItemId, $iItemCount, $bNeedRedirect = false)
@@ -69,13 +69,13 @@ class BxBaseModPaymentCart extends BxDol
     	));
     }
 
-	public function serviceGetSubscribeJs($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount = 1, $bWrapped = true)
+	public function serviceGetSubscribeJs($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount = 1)
     {
 		$iModuleId = $this->_oModule->_oConfig->getModuleId($mixedModuleId);
         if(empty($iModuleId))
             return '';
 
-        return $this->_oModule->_oTemplate->displaySubscribeJs($iVendorId, $sVendorProvider, $iModuleId, $iItemId, $iItemCount, $bWrapped);
+        return $this->_oModule->_oTemplate->displaySubscribeJs($iVendorId, $sVendorProvider, $iModuleId, $iItemId, $iItemCount);
     }
 
 	public function serviceGetSubscribeLink($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount = 1)

+ 1 - 1
modules/base/payment/classes/BxBaseModPaymentModule.php

@@ -58,7 +58,7 @@ class BxBaseModPaymentModule extends BxDolModule
 
 	public function serviceGetProvidersCart($iVendorId)
 	{
-		$aVendorProviders = $this->_oDb->getVendorInfoProvidersCart($iVendorId);
+		$aVendorProviders = $this->_oDb->getVendorInfoProvidersSingle($iVendorId);
 
 		$aResult = array();
 		foreach($aVendorProviders as $aProvider) {

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

@@ -69,12 +69,14 @@ class BxBaseModPaymentProvider extends BxDol
 
     public function getReturnDataUrl($iVendorId, $aParams = array())
     {
-		return $this->_oModule->_oConfig->getUrl('URL_RETURN_DATA', $aParams, $this->_bUseSsl) . $this->_sName . '/' . $iVendorId;
+    	$sUrl = $this->_oModule->_oConfig->getUrl('URL_RETURN_DATA', array(), $this->_bUseSsl) . $this->_sName . '/' . $iVendorId;
+		return bx_append_url_params($sUrl, $aParams);
     }
 
 	public function getNotifyUrl($iVendorId, $aParams = array())
     {
-		return $this->_oModule->_oConfig->getUrl('URL_NOTIFY', $aParams, $this->_bUseSsl) . $this->_sName . '/' . $iVendorId;
+    	$sUrl = $this->_oModule->_oConfig->getUrl('URL_NOTIFY', array(), $this->_bUseSsl) . $this->_sName . '/' . $iVendorId;
+		return bx_append_url_params($sUrl, $aParams);
     }
 
     /**

+ 2 - 2
modules/boonex/payment/classes/BxPaymentCart.php

@@ -89,7 +89,7 @@ class BxPaymentCart extends BxBaseModPaymentCart
     	if($mixedResult !== true)
     		return $mixedResult;
 
-        $aSellerProviders = $this->_oModule->_oDb->getVendorInfoProvidersCart($iSellerId);
+        $aSellerProviders = $this->_oModule->_oDb->getVendorInfoProvidersSingle($iSellerId);
         if(empty($aSellerProviders))
             return array('code' => 5, 'message' => _t($CNF['T']['ERR_NOT_ACCEPT_PAYMENTS']));
 
@@ -154,7 +154,7 @@ class BxPaymentCart extends BxBaseModPaymentCart
     	if($mixedResult !== true)
     		return $mixedResult;
 
-        $aSellerProviders = $this->_oModule->_oDb->getVendorInfoProvidersSubscription($iSellerId);
+        $aSellerProviders = $this->_oModule->_oDb->getVendorInfoProvidersRecurring($iSellerId);
         if(empty($aSellerProviders))
             return array('code' => 5, 'message' => _t($CNF['T']['ERR_NOT_ACCEPT_PAYMENTS']));
 

+ 31 - 29
modules/boonex/payment/classes/BxPaymentDb.php

@@ -48,30 +48,31 @@ class BxPaymentDb extends BxBaseModPaymentDb
     	$aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
 
         $sWhereClause = "";
-        switch($aParams['type']) {
-        	case 'by_name':
-        		$aMethod['name'] = 'getRow';
-        		$aMethod['params'][1] = array(
-                	'name' => $aParams['name']
-                );
-
-        		$sWhereClause = " AND `tp`.`name`=:name";
-        		break;
-
-			case 'for_cart':
-				$aMethod['name'] = 'getAllWithKey';
-				$aMethod['params'][1] = 'name';
-
-				$sWhereClause = " AND `tp`.`for_subscription`='0'";
-        		break;
-
-			case 'for_subscription':
-				$aMethod['name'] = 'getAllWithKey';
-				$aMethod['params'][1] = 'name';
-
-				$sWhereClause = " AND `tp`.`for_subscription`='1'";
-        		break;
-        }          
+        if(!empty($aParams['type']))
+	        switch($aParams['type']) {
+	        	case 'by_name':
+	        		$aMethod['name'] = 'getRow';
+	        		$aMethod['params'][1] = array(
+	                	'name' => $aParams['name']
+	                );
+	
+	        		$sWhereClause = " AND `tp`.`name`=:name";
+	        		break;
+	
+				case 'for_single':
+					$aMethod['name'] = 'getAllWithKey';
+					$aMethod['params'][1] = 'name';
+	
+					$sWhereClause = " AND `tp`.`for_single`='1'";
+	        		break;
+	
+				case 'for_recurring':
+					$aMethod['name'] = 'getAllWithKey';
+					$aMethod['params'][1] = 'name';
+	
+					$sWhereClause = " AND `tp`.`for_recurring`='1'";
+	        		break;
+	        }          
 
         $aMethod['params'][0] = "SELECT
                 `tp`.`id` AS `id`,
@@ -80,7 +81,8 @@ class BxPaymentDb extends BxBaseModPaymentDb
                 `tp`.`description` AS `description`,
                 `tp`.`option_prefix` AS `option_prefix`,
                 `tp`.`for_visitor` AS `for_visitor`,
-                `tp`.`for_subscription` AS `for_subscription`,
+                `tp`.`for_single` AS `for_single`,
+                `tp`.`for_recurring` AS `for_recurring`,
                 `tp`.`class_name` AS `class_name`,
                 `tp`.`class_file` AS `class_file`
             FROM `" . $this->_sPrefix . "providers` AS `tp`
@@ -141,14 +143,14 @@ class BxPaymentDb extends BxBaseModPaymentDb
         return $this->query($sQuery);
     }
 
-	public function getVendorInfoProvidersCart($iVendorId)
+	public function getVendorInfoProvidersSingle($iVendorId)
     {
-    	return $this->getVendorInfoProviders($iVendorId, array('type' => 'for_cart'));
+    	return $this->getVendorInfoProviders($iVendorId, array('type' => 'for_single'));
     }
 
-	public function getVendorInfoProvidersSubscription($iVendorId)
+	public function getVendorInfoProvidersRecurring($iVendorId)
     {
-    	return $this->getVendorInfoProviders($iVendorId, array('type' => 'for_subscription'));
+    	return $this->getVendorInfoProviders($iVendorId, array('type' => 'for_recurring'));
     }
 
     public function getVendorInfoProviders($iVendorId, $aParams = array())

+ 18 - 8
modules/boonex/payment/classes/BxPaymentGridCart.php

@@ -25,7 +25,7 @@ class BxPaymentGridCart extends BxBaseModPaymentGridCarts
     {
     	$aParams = array(
 			'seller_id' => bx_process_input(bx_get('seller_id'), BX_DATA_INT), 
-			'provider' => bx_process_input(bx_get('proviter')), 
+			'provider' => bx_process_input(bx_get('provider')), 
 			'items' => bx_process_input(bx_get('ids'))    		
     	);
     	if(empty($aParams['seller_id']) || empty($aParams['provider']))
@@ -34,6 +34,10 @@ class BxPaymentGridCart extends BxBaseModPaymentGridCarts
         if(empty($aParams['items']) || !is_array($aParams['items'])) 
         	return echoJson(array('msg' => _t('_bx_payment_err_nothing_selected')));
 
+		$oProvider = $this->_oModule->getObjectProvider($aParams['provider'], $aParams['seller_id']);
+		if($oProvider !== false && method_exists($oProvider, 'getCheckoutParamsSingle'))
+			$aParams = $oProvider->getCheckoutParamsSingle($aParams, $this);
+
 		$sLink = $this->_oModule->_oConfig->getUrl('URL_CART_CHECKOUT');
 		$sLink = $sLink . (strpos($sLink, '?') === false ? '?' : '&') . http_build_query($aParams);
 
@@ -61,30 +65,36 @@ class BxPaymentGridCart extends BxBaseModPaymentGridCarts
     {
     	$CNF = &$this->_oModule->_oConfig->CNF;
     	
-    	$sActionsCustom = '';
+    	$sActions = '';
     	if($sType == 'bulk' && !empty($this->_aQueryAppend['seller_id'])) {
     		$sActionName = 'checkout';
 
-    		$aProviders = $this->_oModule->_oDb->getVendorInfoProvidersCart($this->_aQueryAppend['seller_id']);
+    		$aProviders = $this->_oModule->_oDb->getVendorInfoProvidersSingle($this->_aQueryAppend['seller_id']);
     		foreach($aProviders as $aProvider) {
-				$aAction = array(
+				$sAction = $this->_getActionDefault($sType, $sActionName, array(
 					'title'=> _t($CNF['T']['TXT_CART_PROVIDER'] . $aProvider['name']),
 	    			'icon' => '',
 					'icon_only' => 0,
 	    			'confirm' => 0,
 					'attr' => array(
 						'bx_grid_action_' . $sType => $sActionName,
-						'bx_grid_action_append' => json_encode(array('proviter' => $aProvider['name'])),
+						'bx_grid_action_append' => json_encode(array('provider' => $aProvider['name'])),
 						'bx_grid_action_confirm' => 0,
 						'bx_grid_action_reset_paginate' => 0,
 					)
-				);
+				), $isSmall, $isDisabled, $aRow);
+
+    			$oProvider = $this->_oModule->getObjectProvider($aProvider['name'], $this->_aQueryAppend['seller_id']);
+    			if($oProvider !== false && method_exists($oProvider, 'getButtonSingle'))
+    				$sAction = $oProvider->getButtonSingle($this->_aQueryAppend['client_id'], $this->_aQueryAppend['seller_id'], array(
+    					'sObjNameGrid' => $this->getObject()
+    				));
 
-    			$sActionsCustom .= $this->_getActionDefault($sType, $sActionName, $aAction, $isSmall, $isDisabled, $aRow);
+    			$sActions .= $sAction;
     		}
     	}
 
-    	return $sActionsCustom . parent::_getActions ($sType, $sActionData, $isSmall, $isDisabled, $isPermanentState, $aRow);
+    	return $sActions . parent::_getActions ($sType, $sActionData, $isSmall, $isDisabled, $isPermanentState, $aRow);
     }
 
 	protected function _getDataArray($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)

+ 4 - 4
modules/boonex/payment/classes/BxPaymentModule.php

@@ -130,18 +130,18 @@ class BxPaymentModule extends BxBaseModPaymentModule
 
     	switch($sPaymentType) {
     		case BX_PAYMENT_TYPE_SINGLE:
-    			$aProvidersCart = $this->_oDb->getVendorInfoProvidersCart($iVendorId);
+    			$aProvidersCart = $this->_oDb->getVendorInfoProvidersSingle($iVendorId);
     			$bResult = !empty($aProvidersCart);
     			break;
 
     		case BX_PAYMENT_TYPE_RECURRING:
-    			$aProvidersSubscription = $this->_oDb->getVendorInfoProvidersSubscription($iVendorId);
+    			$aProvidersSubscription = $this->_oDb->getVendorInfoProvidersRecurring($iVendorId);
     			$bResult = !empty($aProvidersSubscription);
     			break;
 
     		default:
-    			$aProvidersCart = $this->_oDb->getVendorInfoProvidersCart($iVendorId);
-    			$aProvidersSubscription = $this->_oDb->getVendorInfoProvidersSubscription($iVendorId);
+    			$aProvidersCart = $this->_oDb->getVendorInfoProvidersSingle($iVendorId);
+    			$aProvidersSubscription = $this->_oDb->getVendorInfoProvidersRecurring($iVendorId);
     			$bResult = !empty($aProvidersCart) || !empty($aProvidersSubscription);
     	}
 

+ 2 - 2
modules/boonex/payment/classes/BxPaymentProviderChargebee.php

@@ -59,7 +59,7 @@ class BxPaymentProviderChargebee extends BxBaseModPaymentProvider implements iBx
 		$iPendingId = bx_process_input($aData['pending_id'], BX_DATA_INT);
 
         if(empty($sPageId) || empty($iPendingId))
-        	return array('code' => 1, 'message' => $this->_sLangsPrefix . 'pp_err_no_data_given');
+        	return array('code' => 1, 'message' => $this->_sLangsPrefix . 'err_wrong_data');
 
 		$oPage = $this->retreiveHostedPage($sPageId);
 		if($oPage === false)
@@ -67,7 +67,7 @@ class BxPaymentProviderChargebee extends BxBaseModPaymentProvider implements iBx
 		
 		$aPending = $this->_oModule->_oDb->getOrderPending(array('type' => 'id', 'id' => $iPendingId));
         if(!empty($aPending['order']) || !empty($aPending['error_code']) || !empty($aPending['error_msg']) || (int)$aPending['processed'] != 0)
-            return array('code' => 3, 'message' => $this->_sLangsPrefix . 'pp_err_already_processed');
+            return array('code' => 3, 'message' => $this->_sLangsPrefix . 'err_already_processed');
 
 		$oCustomer = $oPage->content()->customer();
 		$oSubscription = $oPage->content()->subscription();

+ 3 - 3
modules/boonex/payment/classes/BxPaymentProviderPayPal.php

@@ -50,7 +50,7 @@ class BxPaymentProviderPayPal extends BxBaseModPaymentProvider implements iBxBas
         $aFormData = array_merge($aFormData, array(
             'business' => $iMode == PP_MODE_LIVE ? $this->getOption('business') : $this->getOption('sandbox'),
             'bn' => 'Boonex_SP',
-            'item_name' => _t($this->_sLangsPrefix . 'txt_payment_to', $aCartInfo['vendor_name']),
+            'item_name' => _t($this->_sLangsPrefix . 'txt_payment_to_for', $aCartInfo['vendor_name']),
             'item_number' => $iPendingId,
             'currency_code' => $aCartInfo['vendor_currency_code'],
             'no_note' => '1',
@@ -104,7 +104,7 @@ class BxPaymentProviderPayPal extends BxBaseModPaymentProvider implements iBxBas
             $this->_aOptions = $this->getOptionsByPending($aData['item_number']);
 
         if(empty($this->_aOptions))
-            return array('code' => 2, 'message' => $this->_sLangsPrefix . 'pp_err_no_vendor_given');
+            return array('code' => 2, 'message' => $this->_sLangsPrefix . 'err_unknown_vendor');
 
         $iPrcType = (int)$this->getOption('prc_type');
         if(($iPrcType == PP_PRC_TYPE_IPN || $iPrcType == PP_PRC_TYPE_DIRECT) && (!isset($aData['item_number']) || !isset($aData['txn_id'])))
@@ -119,7 +119,7 @@ class BxPaymentProviderPayPal extends BxBaseModPaymentProvider implements iBxBas
 
         $aPending = $this->_oModule->_oDb->getOrderPending(array('type' => 'id', 'id' => $iPendingId));
         if(!empty($aPending['order']) || !empty($aPending['error_code']) || !empty($aPending['error_msg']) || (int)$aPending['processed'] != 0)
-            return array('code' => 3, 'message' => $this->_sLangsPrefix . 'pp_err_already_processed');
+            return array('code' => 3, 'message' => $this->_sLangsPrefix . 'err_already_processed');
 
         //--- Update pending transaction ---//
         $this->_oModule->_oDb->updateOrderPending($iPendingId, array(

+ 1 - 1
modules/boonex/payment/classes/BxPaymentProviderRecurly.php

@@ -90,7 +90,7 @@ class BxPaymentProviderRecurly extends BxBaseModPaymentProvider implements iBxBa
 		
 		$aPending = $this->_oModule->_oDb->getOrderPending(array('type' => 'id', 'id' => $iPendingId));
         if(!empty($aPending['order']) || !empty($aPending['error_code']) || !empty($aPending['error_msg']) || (int)$aPending['processed'] != 0)
-            return array('code' => 3, 'message' => $this->_sLangsPrefix . 'pp_err_already_processed');
+            return array('code' => 3, 'message' => $this->_sLangsPrefix . 'err_already_processed');
 
 		$oSubscription = $this->createSubscription($sToken, $sItem, $aClient);
 		if($oSubscription === false)

+ 36 - 18
modules/boonex/payment/classes/BxPaymentTemplate.php

@@ -30,35 +30,36 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
     		'jquery-ui/jquery.ui.autocomplete.min.js', 
     		'jquery.form.min.js', 
     		'jquery.anim.js', 
-    		'jquery.webForms.js', 
+    		'jquery.webForms.js',
     		'orders.js'
     	));
     	$this->addCss(array('orders.css'));
     }
 
-    public function addJsCssCart($iVendorId = 0)
+    public function addJsCssCart($sType = '', $iVendorId = 0)
     {
     	$this->addJsTranslation(array('_bx_payment_err_nothing_selected'));
-    	$this->addJs(array('jquery.anim.js', 'cart.js'));
+    	$this->addJs(array('jquery.anim.js', 'main.js', 'cart.js'));
     	$this->addCss(array('orders.css', 'cart.css'));
 
     	$oModule = $this->_getModule();
     	if(!empty($iVendorId)) {
-    		$aProviders = $this->_oDb->getVendorInfoProvidersSubscription($iVendorId);
+    		$sMethod = 'getVendorInfoProviders' . bx_gen_method_name($sType);
+    		$aProviders = $this->_oDb->$sMethod($iVendorId);
     		foreach($aProviders as $sProvider => $aProvider)
 				$oModule->getObjectProvider($sProvider, $iVendorId)->addJsCss();
     	}
     }
 
-	public function displayCartJs($iVendorId = 0)
+	public function displayCartJs($sType = '', $iVendorId = 0)
     {
-        $this->addJsCssCart($iVendorId);
+        $this->addJsCssCart($sType, $iVendorId);
         return $this->displayJsCode('cart');
     }
 
-    public function displayAddToCartJs($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect = false, $bWrapped = true)
+    public function displayAddToCartJs($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect = false)
     {
-        $sJsCode = $this->displayCartJs($iVendorId);
+        $sJsCode = $this->displayCartJs(BX_PAYMENT_TYPE_SINGLE, $iVendorId);
         $sJsMethod = $this->parseHtmlByName('add_to_cart_js.html', array(
             'js_object' => $this->_oConfig->getJsObject('cart'),
             'vendor_id' => $iVendorId,
@@ -73,7 +74,7 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
 
     public function displayAddToCartLink($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect = false)
     {
-        $this->addJsCssCart();
+        $this->addJsCssCart(BX_PAYMENT_TYPE_SINGLE, $iVendorId);
         return $this->parseHtmlByName('add_to_cart.html', array(
         	'js_object' => $this->_oConfig->getJsObject('cart'),
         	'js_content' => $this->displayJsCode('cart'),
@@ -86,9 +87,9 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
         ));
     }
 
-	public function displaySubscribeJs($iVendorId, $sVendorProvider, $iModuleId, $iItemId, $iItemCount = 1, $bWrapped = true)
+	public function displaySubscribeJs($iVendorId, $sVendorProvider, $iModuleId, $iItemId, $iItemCount = 1)
     {
-        $sJsCode = $this->displayCartJs($iVendorId);
+        $sJsCode = $this->displayCartJs(BX_PAYMENT_TYPE_RECURRING, $iVendorId);
         $sJsMethod = $this->parseHtmlByName('subscribe_js.html', array(
             'js_object' => $this->_oConfig->getJsObject('cart'),
             'vendor_id' => $iVendorId,
@@ -103,7 +104,7 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
 
     public function displaySubscribeLink($iVendorId, $sVendorProvider, $iModuleId, $iItemId, $iItemCount = 1)
     {
-        $this->addJsCssCart();
+        $this->addJsCssCart(BX_PAYMENT_TYPE_RECURRING, $iVendorId);
         return $this->parseHtmlByName('subscribe.html', array(
         	'js_object' => $this->_oConfig->getJsObject('cart'),
         	'js_content' => $this->displayJsCode('cart'),
@@ -124,7 +125,7 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
 
 		$oGrid->addQueryParam('client_id', $iClientId);
 
-		$this->addJsCssCart();
+		$this->addJsCssCart(BX_PAYMENT_TYPE_SINGLE);
         return $this->displayJsCode('cart') . $oGrid->getCode();
     }
 
@@ -137,7 +138,7 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
 		$oGrid->addQueryParam('client_id', $iClientId);
 		$oGrid->addQueryParam('seller_id', $iSellerId);
 
-		$this->addJsCssCart();
+		$this->addJsCssCart(BX_PAYMENT_TYPE_SINGLE, $iSellerId);
         return $this->displayJsCode('cart') . $oGrid->getCode();
     }
 
@@ -272,16 +273,33 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
 
     public function displayProvidersSelector($aCartItem, $aProviders)
     {
-		$oCart = $this->_getModule()->getObjectCart();
+    	$oModule = $this->_getModule();
+
+		$oCart = $oModule->getObjectCart();
 		list($iSellerId, $iModuleId, $iItemId, $iItemCount) = $aCartItem;
 
 		$aTmplVarsProviders = array();
 		foreach($aProviders as $sProvider => $aProvider) {
-			list($sJsCode, $sJsOnclick) = $oCart->serviceGetSubscribeJs($iSellerId, $aProvider['name'], $iModuleId, $iItemId, $iItemCount);
+			$oProvider = $oModule->getObjectProvider($sProvider, $iSellerId);
+			if($oProvider !== false && method_exists($oProvider, 'getButtonRecurring'))
+				$sButton = $oProvider->getButtonRecurring($oModule->getProfileId(), $iSellerId, array(
+					'sObjNameCart' => $oModule->_oConfig->getJsObject('cart'),
+					'iSellerId' => $iSellerId,
+					'iModuleId' => $iModuleId,
+					'iItemId' => $iItemId,
+					'iItemCount' => $iItemCount
+				));
+			else {
+				list($sJsCode, $sJsOnclick) = $oCart->serviceGetSubscribeJs($iSellerId, $aProvider['name'], $iModuleId, $iItemId, $iItemCount);
+
+				$sButton = $this->parsePageByName('providers_select_button.html', array(
+					'onclick' => $sJsOnclick,
+					'title' => _t('_bx_payment_txt_checkout_with', _t($aProvider['caption']))
+				));
+			}
 
 			$aTmplVarsProviders[] = array(
-				'onclick' => $sJsOnclick,
-				'title' => _t('_bx_payment_txt_checkout_with', _t($aProvider['caption']))
+				'button' => $sButton
 			);
 		}
 

+ 2 - 34
modules/boonex/payment/js/cart.js

@@ -2,6 +2,8 @@ function BxPaymentCart(oOptions) {
 	this.init(oOptions);
 }
 
+BxPaymentCart.prototype = new BxPaymentMain();
+
 BxPaymentCart.prototype.init = function(oOptions) {
 	if($.isEmptyObject(oOptions))
 		return;
@@ -86,38 +88,4 @@ BxPaymentCart.prototype.subscribe = function(iSellerId, sSellerProvider, iModule
 
 BxPaymentCart.prototype.onSubscribeSubmit = function(oData) {
 	document.location = oData.redirect;
-};
-
-BxPaymentCart.prototype.processResult = function(oData) {
-	var $this = this;
-
-	if(oData && oData.message != undefined && oData.message.length != 0)
-    	alert(oData.message);
-
-    if(oData && oData.reload != undefined && parseInt(oData.reload) == 1)
-    	document.location = document.location;
-
-    if(oData && oData.popup != undefined) {
-    	var oPopup = null;
-    	var oOptions = {
-            fog: {
-				color: '#fff',
-				opacity: .7
-            },
-            closeOnOuterClick: false
-        };
-
-    	if(typeof(oData.popup) == 'object') {
-    		oOptions = $.extend({}, oOptions, oData.popup.options);
-    		oPopup = $(oData.popup.html);
-    	}
-    	else 
-    		oPopup = $(oData.popup);
-
-    	$('#' + oPopup.attr('id')).remove();
-        oPopup.hide().prependTo('body').dolPopup(oOptions);
-    }
-
-    if (oData && oData.eval != undefined)
-        eval(oData.eval);
 };

+ 47 - 0
modules/boonex/payment/js/main.js

@@ -0,0 +1,47 @@
+function BxPaymentMain() {}
+
+BxPaymentMain.prototype.processResult = function(oData) {
+	var $this = this;
+
+	if(oData && oData.message != undefined && oData.message.length != 0)
+    	alert(oData.message);
+
+    if(oData && oData.reload != undefined && parseInt(oData.reload) == 1)
+    	document.location = document.location;
+
+    if(oData && oData.popup != undefined) {
+    	var oPopup = null;
+    	var oOptions = {
+            fog: {
+				color: '#fff',
+				opacity: .7
+            },
+            closeOnOuterClick: false
+        };
+
+    	if(typeof(oData.popup) == 'object') {
+    		oOptions = $.extend({}, oOptions, oData.popup.options);
+    		oPopup = $(oData.popup.html);
+    	}
+    	else 
+    		oPopup = $(oData.popup);
+
+    	$('#' + oPopup.attr('id')).remove();
+        oPopup.hide().prependTo('body').dolPopup(oOptions);
+    }
+
+    if (oData && oData.eval != undefined)
+        eval(oData.eval);
+};
+
+BxPaymentMain.prototype.loadingInButton = function(e, bShow) {
+	if($(e).length)
+		bx_loading_btn($(e), bShow);
+	else
+		bx_loading($('body'), bShow);	
+};
+
+BxPaymentMain.prototype.loadingInPopup = function(e, bShow) {
+	var oParent = $(e).length ? $(e).parents('.bx-popup-content:first') : $('body'); 
+	bx_loading(oParent, bShow);
+};

+ 2 - 4
modules/boonex/payment/template/providers_select.html

@@ -1,9 +1,7 @@
 <div class="bx-payment-providers-select bx-def-color-bg-block">
     <div class="bx-payment-providers-select-cnt bx-def-padding">
-		<bx_repeat:providers>
-			<a class="bx-btn" href="javascript:void(0)" onclick="javascript:__onclick__">__title__</a><br />
-		</bx_repeat:providers>
-		<a class="bx-btn" href="javascript:void(0)" onclick="javascript:$('.bx-popup-applied:visible').dolPopupHide();">
+		<bx_repeat:providers>__button__</bx_repeat:providers>
+		<a class="bx-btn bx-def-margin-top-auto" href="javascript:void(0)" onclick="javascript:$('.bx-popup-applied:visible').dolPopupHide();">
 			<bx_text:_adm_txt_confirm_cancel />
 		</a>
     </div>

+ 1 - 0
modules/boonex/payment/template/providers_select_button.html

@@ -0,0 +1 @@
+<a class="bx-btn bx-def-margin-top-auto" href="javascript:void(0)" onclick="javascript:__onclick__">__title__</a>