1
0
Эх сурвалжийг харах

Ticket #259 - Subscriptions.
1. Shopping cart improvements.
2. Subscription processor selector.

AntonLV 10 жил өмнө
parent
commit
6c4977831f

+ 4 - 4
inc/classes/BxDolPayments.php

@@ -167,24 +167,24 @@ class BxDolPayments extends BxDol implements iBxDolSingleton
 	/**
      * Returns "Subscribe" JavaScript code to use in onclick attribute.
      */
-    public function getSubscribeJs($iVendorId, $mixedModuleId, $iItemId, $iItemCount = 1, $bWrapped = true)
+    public function getSubscribeJs($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount = 1, $bWrapped = true)
     {
     	if(!BxDolRequest::serviceExists($this->_sActive, 'get_subscribe_js', 'Cart'))
 			return array();
 
-		$aSrvParams = array($iVendorId, $mixedModuleId, $iItemId, $iItemCount, $bWrapped);
+		$aSrvParams = array($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount, $bWrapped);
 		return BxDolService::call($this->_sActive, 'get_subscribe_js', $aSrvParams, 'Cart');
     }
 
     /**
      * Returns the whole "Subscribe" link including HTML tag BUTTON and cart JavaScript code.
      */
-    public function getSubscribeLink($iVendorId, $mixedModuleId, $iItemId, $iItemCount = 1)
+    public function getSubscribeLink($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount = 1)
     {
 		if(!BxDolRequest::serviceExists($this->_sActive, 'get_subscribe_link', 'Cart'))
 			return '';
 
-		$aSrvParams = array($iVendorId, $mixedModuleId, $iItemId, $iItemCount);
+		$aSrvParams = array($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount);
 		return BxDolService::call($this->_sActive, 'get_subscribe_link', $aSrvParams, 'Cart');
     }
 

+ 0 - 2
inc/js/classes/BxDolVote.js

@@ -134,8 +134,6 @@ BxDolVote.prototype._getSliderLegend = function(oElement) {
 };
 BxDolVote.prototype._getSlider = function(oElement, sParent) {
 	var sSlider = (sParent.length > 0 ? sParent + ' ' : '') + '.' + this._sSP + '-slider';
-	console.log(oElement);
-	console.log(sSlider);
 	if($(oElement).hasClass(this._sSP))
 		return $(oElement).find(sSlider);
 	else

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

@@ -52,22 +52,22 @@ class BxBaseModPaymentCart extends BxDol
 		return $this->_oModule->_oTemplate->displayAddToCartLink($iVendorId, $iModuleId, $iItemId, $iItemCount, $bNeedRedirect);
     }
 
-	public function serviceGetSubscribeJs($iVendorId, $mixedModuleId, $iItemId, $iItemCount = 1, $bWrapped = true)
+	public function serviceGetSubscribeJs($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount = 1, $bWrapped = true)
     {
 		$iModuleId = $this->_oModule->_oConfig->getModuleId($mixedModuleId);
         if(empty($iModuleId))
             return '';
 
-        return $this->_oModule->_oTemplate->displaySubscribeJs($iVendorId, $iModuleId, $iItemId, $iItemCount, $bWrapped);
+        return $this->_oModule->_oTemplate->displaySubscribeJs($iVendorId, $sVendorProvider, $iModuleId, $iItemId, $iItemCount, $bWrapped);
     }
 
-	public function serviceGetSubscribeLink($iVendorId, $mixedModuleId, $iItemId, $iItemCount = 1)
+	public function serviceGetSubscribeLink($iVendorId, $sVendorProvider, $mixedModuleId, $iItemId, $iItemCount = 1)
     {
         $iModuleId = $this->_oModule->_oConfig->getModuleId($mixedModuleId);
         if(empty($iModuleId))
             return '';
 
-		return $this->_oModule->_oTemplate->displaySubscribeLink($iVendorId, $iModuleId, $iItemId, $iItemCount);
+		return $this->_oModule->_oTemplate->displaySubscribeLink($iVendorId, $sVendorProvider, $iModuleId, $iItemId, $iItemCount);
     }
 
 	public function serviceGetCartItemDescriptor($iVendorId, $iModuleId, $iItemId, $iItemCount)

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

@@ -57,7 +57,7 @@ class BxBaseModPaymentGridOrders extends BxTemplGrid
 
         $sKey = 'order_' . $this->_sOrdersType . '_view';
     	$sId = $this->_oModule->_oConfig->getHtmlIds($sKey);
-    	$sTitle = _t($this->_sLangsPrefix . 'grid_popup_title_ods_' . $sKey);
+    	$sTitle = _t($this->_sLangsPrefix . 'popup_title_ods_' . $sKey);
     	$sContent = $this->_oModule->getObjectOrders()->getOrder($this->_sOrdersType, $iId);
 
     	return echoJson(array('popup' => BxTemplFunctions::getInstance()->popupBox($sId, $sTitle, $sContent)));

+ 1 - 1
modules/boonex/market/classes/BxMarketMenuView.php

@@ -47,7 +47,7 @@ class BxMarketMenuView extends BxBaseModTextMenuView
 				if(!$bResult) 
 					break;
 
-				list($sJsCode, $sJsMethod) = $oPayment->getSubscribeJs($this->_aContentInfo['author'], $this->MODULE, $this->_aContentInfo['id'], 1);
+				list($sJsCode, $sJsMethod) = $oPayment->getSubscribeJs($this->_aContentInfo['author'], '', $this->MODULE, $this->_aContentInfo['id'], 1);
 				$this->addMarkers(array(
 		        	'subscribe_onclick' => $sJsMethod
 		        )); 

+ 2 - 2
modules/boonex/market/classes/BxMarketTemplate.php

@@ -117,7 +117,7 @@ class BxMarketTemplate extends BxBaseModTextTemplate
         $aTmplVarsRecurring = array();
         $bTmplVarsRecurring = $this->_oDb->getParam($CNF['OPTION_ENABLE_RECURRING']) == 'on' && (float)$aData[$CNF['FIELD_PRICE_RECURRING']] != 0;
         if($bTmplVarsRecurring) {
-        	list($sJsCode, $sRecurringOnclick) = $oPayment->getSubscribeJs($aData[$CNF['FIELD_AUTHOR']], $this->_oConfig->getName(), $aData[$CNF['FIELD_ID']], 1);
+        	list($sJsCode, $sRecurringOnclick) = $oPayment->getSubscribeJs($aData[$CNF['FIELD_AUTHOR']], '', $this->_oConfig->getName(), $aData[$CNF['FIELD_ID']], 1);
 
         	$aTmplVarsRecurring = array(
         		'recurring_onclick' => $sRecurringOnclick,
@@ -201,7 +201,7 @@ class BxMarketTemplate extends BxBaseModTextTemplate
     	$bTmplVarsRecurring = (float)$aData[$CNF['FIELD_PRICE_RECURRING']] != 0;
     	$aTmplVarsRecurring = array();
     	if($bTmplVarsRecurring) {
-        	list($sJsCode, $sRecurringOnclick) = $oPayment->getSubscribeJs($aData[$CNF['FIELD_AUTHOR']], $this->_oConfig->getName(), $aData[$CNF['FIELD_ID']], 1);
+        	list($sJsCode, $sRecurringOnclick) = $oPayment->getSubscribeJs($aData[$CNF['FIELD_AUTHOR']], '', $this->_oConfig->getName(), $aData[$CNF['FIELD_ID']], 1);
 
         	$aTmplVarsRecurring = array(
         		'entry_price_recurring_onclick' => $sRecurringOnclick,

+ 69 - 63
modules/boonex/payment/classes/BxPaymentCart.php

@@ -66,39 +66,39 @@ class BxPaymentCart extends BxBaseModPaymentCart
     {
     	$CNF = &$this->_oModule->_oConfig->CNF;
 
-		$iVendorId = bx_get('vendor') !== false ? (int)bx_get('vendor') : 0;
+		$iSellerId = bx_get('vendor') !== false ? (int)bx_get('vendor') : 0;
 
     	$iUserId = $this->_oModule->getProfileId();
         if(empty($iUserId))
             return MsgBox(_t($CNF['T']['ERR_REQUIRED_LOGIN']));
 
         return array(
-        	'content' => $this->_oModule->_oTemplate->displayBlockHistory($iUserId, $iVendorId),
+        	'content' => $this->_oModule->_oTemplate->displayBlockHistory($iUserId, $iSellerId),
         	'menu' => $this->_oModule->_oConfig->getObject('menu_cart_submenu')
 		);
     }
 
-    public function serviceAddToCart($iVendorId, $iModuleId, $iItemId, $iItemCount)
+    public function serviceAddToCart($iSellerId, $iModuleId, $iItemId, $iItemCount)
     {
     	$CNF = &$this->_oModule->_oConfig->CNF;
 
     	$iClientId = $this->_oModule->getProfileId();
 
-    	$mixedResult = $this->_checkData($iClientId, $iVendorId, $iModuleId, $iItemId, $iItemCount);
+    	$mixedResult = $this->_checkData($iClientId, $iSellerId, $iModuleId, $iItemId, $iItemCount);
     	if($mixedResult !== true)
     		return $mixedResult;
 
-        $aVendorProviders = $this->_oModule->_oDb->getVendorInfoProvidersCart($iVendorId);
-        if(empty($aVendorProviders))
+        $aSellerProviders = $this->_oModule->_oDb->getVendorInfoProvidersCart($iSellerId);
+        if(empty($aSellerProviders))
             return array('code' => 5, 'message' => _t($CNF['T']['ERR_NOT_ACCEPT_PAYMENTS']));
 
-        $sCartItem = $this->_oModule->_oConfig->descriptorA2S(array($iVendorId, $iModuleId, $iItemId, $iItemCount));
+        $sCartItem = $this->_oModule->_oConfig->descriptorA2S(array($iSellerId, $iModuleId, $iItemId, $iItemCount));
         $sCartItems = $this->_oModule->_oDb->getCartItems($iClientId);
 
-        if(strpos($sCartItems, $this->_oModule->_oConfig->descriptorA2S(array($iVendorId, $iModuleId, $iItemId))) !== false)
+        if(strpos($sCartItems, $this->_oModule->_oConfig->descriptorA2S(array($iSellerId, $iModuleId, $iItemId))) !== false)
             $sCartItems = preg_replace_callback(
-            	"/" . $this->_oModule->_oConfig->descriptorA2S(array($iVendorId, $iModuleId, $iItemId, '([0-9])+')) . "/", 
-            	create_function('$aMatches', 'return ' . $this->_oModule->_oConfig->descriptorA2S(array("'" . $iVendorId, $iModuleId, $iItemId, "' . (\$aMatches[1] + " . $iItemCount . ")")) . ';'),
+            	"/" . $this->_oModule->_oConfig->descriptorA2S(array($iSellerId, $iModuleId, $iItemId, '([0-9])+')) . "/", 
+            	create_function('$aMatches', 'return ' . $this->_oModule->_oConfig->descriptorA2S(array("'" . $iSellerId, $iModuleId, $iItemId, "' . (\$aMatches[1] + " . $iItemCount . ")")) . ';'),
             	$sCartItems
 			);
         else
@@ -120,11 +120,11 @@ class BxPaymentCart extends BxBaseModPaymentCart
         );
     }
 
-    public function serviceDeleteFromCart($iVendorId, $iModuleId = 0, $iItemId = 0)
+    public function serviceDeleteFromCart($iSellerId, $iModuleId = 0, $iItemId = 0)
     {
     	$CNF = &$this->_oModule->_oConfig->CNF;
 
-        if($iVendorId == BX_PAYMENT_EMPTY_ID)
+        if($iSellerId == BX_PAYMENT_EMPTY_ID)
             return array('code' => 1, 'message' => _t($CNF['T']['ERR_WRONG_DATA']));
 
 		$iClientId = $this->_oModule->getProfileId();
@@ -132,9 +132,9 @@ class BxPaymentCart extends BxBaseModPaymentCart
             return array('code' => 2, 'message' => _t($CNF['T']['ERR_REQUIRED_LOGIN']));
 
         if(!empty($iModuleId) && !empty($iItemId))
-            $sPattern = "'" . $iVendorId . "_" . $iModuleId . "_" . $iItemId . "_[0-9]+:?'";
+            $sPattern = "'" . $iSellerId . "_" . $iModuleId . "_" . $iItemId . "_[0-9]+:?'";
         else
-            $sPattern = "'" . $iVendorId . "_[0-9]+_[0-9]+_[0-9]+:?'";
+            $sPattern = "'" . $iSellerId . "_[0-9]+_[0-9]+_[0-9]+:?'";
 
         $sCartItems = $this->_oModule->_oDb->getCartItems($iClientId);
         $sCartItems = trim(preg_replace($sPattern, "", $sCartItems), ":");
@@ -143,70 +143,55 @@ class BxPaymentCart extends BxBaseModPaymentCart
         return array('code' => 0, 'message' => _t($CNF['T']['MSG_ITEM_DELETED']));
     }
 
-	public function serviceSubscribe($iVendorId, $iModuleId, $iItemId, $iItemCount)
+	public function serviceSubscribe($iSellerId, $sSellerProvider, $iModuleId, $iItemId, $iItemCount)
     {
     	$CNF = &$this->_oModule->_oConfig->CNF;
 
     	$iClientId = $this->_oModule->getProfileId();
 
-    	$mixedResult = $this->_checkData($iClientId, $iVendorId, $iModuleId, $iItemId, $iItemCount);
+    	$mixedResult = $this->_checkData($iClientId, $iSellerId, $iModuleId, $iItemId, $iItemCount);
     	if($mixedResult !== true)
     		return $mixedResult;
 
-        $aVendorProviders = $this->_oModule->_oDb->getVendorInfoProvidersSubscription($iVendorId);
-        if(empty($aVendorProviders))
+        $aSellerProviders = $this->_oModule->_oDb->getVendorInfoProvidersSubscription($iSellerId);
+        if(empty($aSellerProviders))
             return array('code' => 5, 'message' => _t($CNF['T']['ERR_NOT_ACCEPT_PAYMENTS']));
 
-        $sCartItem = $this->_oModule->_oConfig->descriptorA2S(array($iVendorId, $iModuleId, $iItemId, $iItemCount));
+		$aCartItem = array($iSellerId, $iModuleId, $iItemId, $iItemCount);
+        $sCartItem = $this->_oModule->_oConfig->descriptorA2S($aCartItem);
 
-        if(count($aVendorProviders) > 1) {
-        	//TODO: Show popup with selector and path Descriptior into it.
-        	return array('popup' => '');
-        }
+        if(count($aSellerProviders) > 1) {
+        	if(empty($sSellerProvider)) {
+		        $sId = $this->_oModule->_oConfig->getHtmlIds('cart', 'providers_select') . BX_PAYMENT_TYPE_RECURRING;
+		    	$sTitle = _t($CNF['T']['POPUP_PROVIDERS_SELECT']);
+	        	return array('popup' => BxTemplStudioFunctions::getInstance()->popupBox($sId, $sTitle, $this->_oModule->_oTemplate->displayProvidersSelector($aCartItem, $aSellerProviders)));
+        	}
 
-        $aProvider = array_shift($aVendorProviders);
+        	$aProvider = $aSellerProviders[$sSellerProvider];
+        }
+        else 
+        	$aProvider = array_shift($aSellerProviders);
 
-        $mixedResult = $this->_oModule->serviceInitializeCheckout(BX_PAYMENT_TYPE_RECURRING, $iVendorId, $aProvider['name'], array($sCartItem));
+        $mixedResult = $this->_oModule->serviceInitializeCheckout(BX_PAYMENT_TYPE_RECURRING, $iSellerId, $aProvider['name'], array($sCartItem));
         if(is_string($mixedResult))
         	return array('code' => 6, 'message' => _t($mixedResult));
 
 		return $mixedResult;
     }
 
-    protected function _checkData($iClientId, $iVendorId, $iModuleId, $iItemId, $iItemCount)
-    {
-    	$CNF = &$this->_oModule->_oConfig->CNF;
-
-		if($iVendorId == BX_PAYMENT_EMPTY_ID || empty($iModuleId) || empty($iItemId) || empty($iItemCount))
-            return array('code' => 1, 'message' => _t($CNF['T']['ERR_WRONG_DATA']));
-
-		$iClientId = $this->_oModule->getProfileId();
-        if(empty($iClientId))
-            return array('code' => 2, 'message' => _t($CNF['T']['ERR_REQUIRED_LOGIN']));
-
-        if($iClientId == $iVendorId)
-            return array('code' => 3, 'message' => _t($CNF['T']['ERR_SELF_PURCHASE']));
-
-        $aVendor = $this->_oModule->getVendorInfo($iVendorId);
-        if(!$aVendor['active'])
-            return array('code' => 4, 'message' => _t($CNF['T']['ERR_INACTIVE_VENDOR']));
-
-		return true;
-    }
-
-    public function getInfo($sType, $iUserId, $iVendorId = BX_PAYMENT_EMPTY_ID, $aItems = array())
+    public function getInfo($sType, $iUserId, $iSellerId = BX_PAYMENT_EMPTY_ID, $aItems = array())
     {
-        if($iVendorId != BX_PAYMENT_EMPTY_ID && !empty($aItems))
-            return $this->_getInfo($sType, $iUserId, $iVendorId, $this->_oModule->_oConfig->descriptorsM2A($aItems));
+        if($iSellerId != BX_PAYMENT_EMPTY_ID && !empty($aItems))
+            return $this->_getInfo($sType, $iUserId, $iSellerId, $this->_oModule->_oConfig->descriptorsM2A($aItems));
 
         $aContent = $this->_parseByVendor($iUserId);
 
-        if($iVendorId != BX_PAYMENT_EMPTY_ID)
-            return isset($aContent[$iVendorId]) ? $this->_getInfo($sType, $iUserId, $iVendorId, $aContent[$iVendorId]) : array();
+        if($iSellerId != BX_PAYMENT_EMPTY_ID)
+            return isset($aContent[$iSellerId]) ? $this->_getInfo($sType, $iUserId, $iSellerId, $aContent[$iSellerId]) : array();
 
         $aResult = array();
-        foreach($aContent as $iVendorId => $aVendorItems)
-            $aResult[$iVendorId] = $this->_getInfo($sType, $iUserId, $iVendorId, $aVendorItems);
+        foreach($aContent as $iSellerId => $aSellerItems)
+            $aResult[$iSellerId] = $this->_getInfo($sType, $iUserId, $iSellerId, $aSellerItems);
 
         return $aResult;
     }
@@ -215,11 +200,11 @@ class BxPaymentCart extends BxBaseModPaymentCart
      * Enter description here...
      *
      * @param  integer $iClientId client's ID
-     * @param  integer $iVendorId vendor's ID
+     * @param  integer $iSellerId vendor's ID
      * @param  array   $aItems    item descriptors(quaternions) from shopping cart.
      * @return array   with full info about vendor and items.
      */
-    protected function _getInfo($sType, $iClientId, $iVendorId, $aItems)
+    protected function _getInfo($sType, $iClientId, $iSellerId, $aItems)
     {
         $iItemsCount = 0;
         $fItemsPrice = 0;
@@ -234,21 +219,42 @@ class BxPaymentCart extends BxBaseModPaymentCart
             $aItemsInfo[] = $aItemInfo;
         }
 
-        $aVendor = $this->_oModule->getVendorInfo((int)$iVendorId);
+        $aSeller = $this->_oModule->getVendorInfo((int)$iSellerId);
         return array(
         	'client_id' => $iClientId,
-            'vendor_id' => $aVendor['id'],
-            'vendor_name' => $aVendor['name'],
-        	'vendor_link' => $aVendor['link'],
-            'vendor_icon' => $aVendor['icon'],
-        	'vendor_unit' => $aVendor['unit'],
-            'vendor_currency_code' => $aVendor['currency_code'],
-            'vendor_currency_sign' => $aVendor['currency_sign'],
+            'vendor_id' => $aSeller['id'],
+            'vendor_name' => $aSeller['name'],
+        	'vendor_link' => $aSeller['link'],
+            'vendor_icon' => $aSeller['icon'],
+        	'vendor_unit' => $aSeller['unit'],
+            'vendor_currency_code' => $aSeller['currency_code'],
+            'vendor_currency_sign' => $aSeller['currency_sign'],
             'items_count' => $iItemsCount,
             'items_price' => $fItemsPrice,
             'items' => $aItemsInfo
         );
     }
+
+	protected function _checkData($iClientId, $iSellerId, $iModuleId, $iItemId, $iItemCount)
+    {
+    	$CNF = &$this->_oModule->_oConfig->CNF;
+
+		if($iSellerId == BX_PAYMENT_EMPTY_ID || empty($iModuleId) || empty($iItemId) || empty($iItemCount))
+            return array('code' => 1, 'message' => _t($CNF['T']['ERR_WRONG_DATA']));
+
+		$iClientId = $this->_oModule->getProfileId();
+        if(empty($iClientId))
+            return array('code' => 2, 'message' => _t($CNF['T']['ERR_REQUIRED_LOGIN']));
+
+        if($iClientId == $iSellerId)
+            return array('code' => 3, 'message' => _t($CNF['T']['ERR_SELF_PURCHASE']));
+
+        $aSeller = $this->_oModule->getVendorInfo($iSellerId);
+        if(!$aSeller['active'])
+            return array('code' => 4, 'message' => _t($CNF['T']['ERR_INACTIVE_VENDOR']));
+
+		return true;
+    }
 }
 
 /** @} */

+ 6 - 1
modules/boonex/payment/classes/BxPaymentConfig.php

@@ -44,12 +44,17 @@ class BxPaymentConfig extends BxBaseModPaymentConfig
         		'ERR_UNKNOWN_VENDOR' => '_bx_payment_err_unknown_vendor',
 
 				'BLOCK_TITLE_CART' => '_bx_payment_page_block_title_cart',
-        
+
+        		'POPUP_PROVIDERS_SELECT' => '_bx_payment_popup_title_crd_providers_select', 
+
         		'TXT_CART_PROVIDER' => '_bx_payment_txt_cart_'
         	)
         ));
 
         $this->_aHtmlIds = array(
+        	'cart' => array(
+        		'providers_select' => $this->_sName . '-cart-providers-select-',
+        	),
         	'history' => array(
         		'order_history_view' => $this->_sName . '-order-view-history',
         	),

+ 8 - 2
modules/boonex/payment/classes/BxPaymentDb.php

@@ -55,10 +55,16 @@ class BxPaymentDb extends BxBaseModPaymentDb
         		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;
         }          
@@ -140,12 +146,12 @@ class BxPaymentDb extends BxBaseModPaymentDb
 		$aOptions = $this->getOptions($iVendorId);
 
 		$aResult = array();
-		foreach($aProviders as $aProvider)
+		foreach($aProviders as $sProvider => $aProvider)
 			if(isset($aOptions[$aProvider['option_prefix'] . 'active']) && $aOptions[$aProvider['option_prefix'] . 'active']['value'] == 'on') {
 				foreach($aOptions as $sName => $aOption)
 					if(strpos($sName, $aProvider['option_prefix']) !== false)
 						$aProvider['options'][$sName] = $aOption;
-				$aResult[] = $aProvider;
+				$aResult[$sProvider] = $aProvider;
 			}
 
 		return $aResult;

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

@@ -63,8 +63,8 @@ class BxPaymentGridPending extends BxBaseModPaymentGridOrders
         }
 
         $sKey = 'order_' . $this->_sOrdersType . '_process';
-        $sId = $this->_oModule->_oConfig->getHtmlIds($sKey);
-    	$sTitle = _t($this->_sLangsPrefix . 'grid_popup_title_ods_' . $sKey);
+        $sId = $this->_oModule->_oConfig->getHtmlIds('pending', $sKey);
+    	$sTitle = _t($this->_sLangsPrefix . 'popup_title_ods_' . $sKey);
 
 		$sContent = BxTemplStudioFunctions::getInstance()->popupBox($sId, $sTitle, $this->_oModule->_oTemplate->parseHtmlByName('order_pending_process.html', array(
 			'form_id' => $oForm->aFormAttrs['id'],

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

@@ -97,8 +97,8 @@ class BxPaymentGridProcessed extends BxBaseModPaymentGridOrders
         }
 
         $sKey = 'order_' . $this->_sOrdersType . '_add';
-        $sId = $this->_oModule->_oConfig->getHtmlIds($sKey);
-    	$sTitle = _t($this->_sLangsPrefix . 'grid_popup_title_ods_' . $sKey);
+        $sId = $this->_oModule->_oConfig->getHtmlIds('processed', $sKey);
+    	$sTitle = _t($this->_sLangsPrefix . 'popup_title_ods_' . $sKey);
 
 		$sContent = BxTemplStudioFunctions::getInstance()->popupBox($sId, $sTitle, $this->_oModule->_oTemplate->parseHtmlByName('order_processed_add.html', array(
 			'js_object' => $sJsObject,

+ 29 - 21
modules/boonex/payment/classes/BxPaymentModule.php

@@ -168,25 +168,6 @@ class BxPaymentModule extends BxBaseModPaymentModule
     /**
      * Cart Processing Methods
      */
-    public function actionInitializeCheckout($sType)
-    {
-    	if(!$this->isLogged())
-            return $this->_oTemplate->displayPageCodeError($this->_sLangsPrefix . 'err_required_login');
-
-		if(bx_get('seller_id') !== false && bx_get('provider') !== false && bx_get('items') !== false) {
-			$iSellerId = bx_process_input(bx_get('seller_id'), BX_DATA_INT);
-			$sProvider = bx_process_input(bx_get('provider'));
-			$aItems = bx_process_input(bx_get('items'));
-
-			$mixedResult = $this->serviceInitializeCheckout(BX_PAYMENT_TYPE_SINGLE, $iSellerId, $sProvider, $aItems);
-			if($mixedResult !== true)
-	    		return $this->_oTemplate->displayPageCodeError($mixedResult);
-		}
-
-        header('Location: ' . $this->_oConfig->getUrl('URL_CART'));
-        exit;
-    }
-
     public function actionAddToCart($iSellerId, $iModuleId, $iItemId, $iItemCount)
     {
         $aResult = $this->getObjectCart()->serviceAddToCart($iSellerId, $iModuleId, $iItemId, $iItemCount);
@@ -211,9 +192,17 @@ class BxPaymentModule extends BxBaseModPaymentModule
 		echoJson($aResult);
     }
 
-    public function actionSubscribe($iSellerId, $iModuleId, $iItemId, $iItemCount = 1)
+    public function actionSubscribe()
     {
-        $aResult = $this->getObjectCart()->serviceSubscribe($iSellerId, $iModuleId, $iItemId, $iItemCount);
+    	$iSellerId = bx_process_input(bx_get('seller_id'), BX_DATA_INT);
+    	$sSellerProvider = bx_process_input(bx_get('seller_provider'));
+    	$iModuleId = bx_process_input(bx_get('module_id'), BX_DATA_INT);
+    	$iItemId = bx_process_input(bx_get('item_id'), BX_DATA_INT);
+    	$iItemCount = bx_process_input(bx_get('item_count'), BX_DATA_INT);
+    	if(empty($iItemCount))
+    		$iItemCount = 1;
+
+        $aResult = $this->getObjectCart()->serviceSubscribe($iSellerId, $sSellerProvider, $iModuleId, $iItemId, $iItemCount);
 		echoJson($aResult);
     }
 
@@ -221,6 +210,25 @@ class BxPaymentModule extends BxBaseModPaymentModule
     /**
      * Payment Processing Methods
      */
+	public function actionInitializeCheckout($sType)
+    {
+    	if(!$this->isLogged())
+            return $this->_oTemplate->displayPageCodeError($this->_sLangsPrefix . 'err_required_login');
+
+		if(bx_get('seller_id') !== false && bx_get('provider') !== false && bx_get('items') !== false) {
+			$iSellerId = bx_process_input(bx_get('seller_id'), BX_DATA_INT);
+			$sProvider = bx_process_input(bx_get('provider'));
+			$aItems = bx_process_input(bx_get('items'));
+
+			$mixedResult = $this->serviceInitializeCheckout(BX_PAYMENT_TYPE_SINGLE, $iSellerId, $sProvider, $aItems);
+			if($mixedResult !== true)
+	    		return $this->_oTemplate->displayPageCodeError($mixedResult);
+		}
+
+        header('Location: ' . $this->_oConfig->getUrl('URL_CART'));
+        exit;
+    }
+
 	public function serviceInitializeCheckout($sType, $iSellerId, $sProvider, $aItems = array())
 	{
 		if(!is_array($aItems))

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

@@ -91,7 +91,7 @@ class BxPaymentProviderChargebee extends BxBaseModPaymentProvider implements iBx
 
 		$aResult = array(
 			'code' => BX_PAYMENT_RESULT_SUCCESS,
-        	'message' => $this->_sLangsPrefix . 'cbee_msg_subscribed',
+        	'message' => _t($this->_sLangsPrefix . 'cbee_msg_subscribed'),
 			'pending_id' => $iPendingId,
 			'client_name' => _t($this->_sLangsPrefix . 'txt_buyer_name_mask', $oCustomer->firstName, $oCustomer->lastName),
 			'client_email' => $oCustomer->email,

+ 24 - 110
modules/boonex/payment/classes/BxPaymentTemplate.php

@@ -79,12 +79,13 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
         ));
     }
 
-	public function displaySubscribeJs($iVendorId, $iModuleId, $iItemId, $iItemCount = 1, $bWrapped = true)
+	public function displaySubscribeJs($iVendorId, $sVendorProvider, $iModuleId, $iItemId, $iItemCount = 1, $bWrapped = true)
     {
         $sJsCode = $this->displayCartJs($bWrapped);
         $sJsMethod = $this->parseHtmlByName('subscribe_js.html', array(
             'js_object' => $this->_oConfig->getJsObject('cart'),
             'vendor_id' => $iVendorId,
+        	'vendor_provider' => $sVendorProvider,
             'module_id' => $iModuleId,
             'item_id' => $iItemId,
             'item_count' => $iItemCount
@@ -93,7 +94,7 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
         return array($sJsCode, $sJsMethod);
     }
 
-    public function displaySubscribeLink($iVendorId, $iModuleId, $iItemId, $iItemCount = 1)
+    public function displaySubscribeLink($iVendorId, $sVendorProvider, $iModuleId, $iItemId, $iItemCount = 1)
     {
         $this->addJsCssCart();
         return $this->parseHtmlByName('subscribe.html', array(
@@ -101,115 +102,13 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
         	'js_content' => $this->displayJsCode('cart'),
         	'txt_add_to_cart' => _t($this->_sLangsPrefix . 'txt_subscribe'),
             'vendor_id' => $iVendorId,
+        	'vendor_provider' => $sVendorProvider,
             'module_id' => $iModuleId,
             'item_id' => $iItemId,
             'item_count' => $iItemCount,
         ));
     }
 
-    /*
-	public function displayBlockCart($aCartInfo, $iVendorId = BX_PAYMENT_EMPTY_ID)
-    {
-    	if(empty($aCartInfo))
-    		return MsgBox(_t($this->_sLangsPrefix . 'msg_no_results'));
-
-        $sJsObject = $this->_oConfig->getJsObject('cart');
-
-        if($iVendorId != BX_PAYMENT_EMPTY_ID)
-            $aCartInfo = array($aCartInfo);
-
-        $aVendors = array();
-        foreach($aCartInfo as $aVendor) {
-            //--- Get Providers ---//
-            $aProviders = array();
-            $aVendorProviders = $this->_oDb->getVendorInfoProvidersCart($aVendor['vendor_id']);
-
-            if(!empty($aVendorProviders) && is_array($aVendorProviders))
-	            foreach($aVendorProviders as $aProvider)
-	                $aProviders[] = array(
-	                    'name' => $aProvider['name'],
-	                    'caption' => _t($this->_sLangsPrefix . 'txt_cart_' . $aProvider['name']),
-	                    'checked' => empty($aProviders) ? 'checked="checked"' : ''
-	                );
-
-            //--- Get Items ---//
-            $aItems = array();
-            foreach($aVendor['items'] as $aItem) {
-            	$fPrice = $this->_oConfig->getPrice(BX_PAYMENT_TYPE_SINGLE, $aItem);
-
-                $aItems[] = array(
-                    'vendor_id' => $aVendor['vendor_id'],
-                    'vendor_currency_code' => $aVendor['vendor_currency_code'],
-                    'module_id' => $aItem['module_id'],
-                    'item_id' => $aItem['id'],
-                    'item_title' => $aItem['title'],
-                    'item_url' => $aItem['url'],
-                    'item_quantity' => $aItem['quantity'],
-                	'bx_if:show_price_paid' => array(
-                		'condition' => $fPrice != 0,
-                		'content' => array(
-                			'item_price' => $aItem['quantity'] * $fPrice,
-                			'vendor_currency_code' => $aVendor['vendor_currency_code'],
-                		)
-                	),
-                	'bx_if:show_price_free' => array(
-                		'condition' => $fPrice == 0,
-                		'content' => array()
-                	),
-                    'js_object' => $sJsObject
-                );
-            }
-
-            //--- Get Control Panel ---//
-            $aButtons = array(
-                'bx-payment-checkout' => _t($this->_sLangsPrefix . 'form_cart_input_do_checkout'),
-                'bx-payment-delete' => _t($this->_sLangsPrefix . 'form_cart_input_do_delete')
-            );
-            $oSearchResult = new BxTemplSearchResult();
-            $sControlPanel = $oSearchResult->showAdminActionsPanel('items_from_' . $aVendor['vendor_id'], $aButtons, 'items', true, true);
-
-            //--- Get General ---//
-            $bVendorLink = !empty($aVendor['vendor_link']);
-            $sTxtShoppingCart = _t($this->_sLangsPrefix . 'txt_shopping_cart', $aVendor['vendor_name']);
-
-            $aVendors[] = array(
-                'vendor_id' => $aVendor['vendor_id'],
-                'bx_if:show_link' => array(
-                    'condition' => $bVendorLink,
-                    'content' => array(
-            			'txt_shopping_cart' => $sTxtShoppingCart,
-                        'vendor_url' => $aVendor['vendor_link'],
-                        'vendor_currency_code' => $aVendor['vendor_currency_code'],
-                        'items_count' => $aVendor['items_count'],
-                        'items_price' => $aVendor['items_price']
-                    )
-                ),
-                'bx_if:show_text' => array(
-                    'condition' => !$bVendorLink,
-                    'content' => array(
-                		'txt_shopping_cart' => $sTxtShoppingCart,
-                        'vendor_currency_code' => $aVendor['vendor_currency_code'],
-                        'items_count' => $aVendor['items_count'],
-                        'items_price' => $aVendor['items_price']
-                    )
-                ),
-                'vendor_icon' => $aVendor['vendor_icon'],
-                'bx_repeat:providers' => $aProviders,
-                'bx_repeat:items' => $aItems,
-                'js_object' => $sJsObject,
-                'process_url' => BX_DOL_URL_ROOT . $this->_oConfig->getBaseUri() . 'cart_submit/',
-                'control_panel' => $sControlPanel
-            );
-        }
-
-        $this->addJsCssCart();
-        return $this->parseHtmlByName('cart.html', array(
-        	'js_content' => $this->displayJsCode('cart'),
-        	'bx_repeat:vendors' => $aVendors
-        ));
-    }
-	*/
-
 	public function displayBlockCarts($iClientId)
     {
     	$oGrid = BxDolGrid::getObjectInstance($this->_oConfig->getObject('grid_carts'));
@@ -364,15 +263,30 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
         ));
     }
 
-	protected function _getModule()
+    public function displayProvidersSelector($aCartItem, $aProviders)
     {
-        $sName = $this->_oConfig->getName();
-        return BxDolModule::getInstance($sName);
+		$oCart = $this->_getModule()->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);
+
+			$aTmplVarsProviders[] = array(
+				'onclick' => $sJsOnclick,
+				'title' => _t('_bx_payment_txt_checkout_with', _t($aProvider['caption']))
+			);
+		}
+
+		return $this->parseHtmlByName('providers_select.html', array(
+			'bx_repeat:providers' => $aTmplVarsProviders
+		));
     }
 
-    protected function _isSubscription($aOrder)
+	protected function _getModule()
     {
-    	return '';
+        $sName = $this->_oConfig->getName();
+        return BxDolModule::getInstance($sName);
     }
 }
 

+ 8 - 7
modules/boonex/payment/install/langs/en.xml

@@ -101,12 +101,12 @@
 	<string name=""><![CDATA[]]></string>
 	<string name=""><![CDATA[]]></string>
 
-	<string name="_bx_payment_grid_popup_title_ods_order_history_view"><![CDATA[Order]]></string>
-	<string name="_bx_payment_grid_popup_title_ods_order_pending_view"><![CDATA[Pending Order]]></string>
-	<string name="_bx_payment_grid_popup_title_ods_order_pending_process"><![CDATA[Process Pending Order]]></string>
-	<string name="_bx_payment_grid_popup_title_ods_order_processed_view"><![CDATA[Processed Order]]></string>
-	<string name="_bx_payment_grid_popup_title_ods_order_processed_add"><![CDATA[Manual Order]]></string>
-	<string name=""><![CDATA[]]></string>
+	<string name="_bx_payment_popup_title_ods_order_history_view"><![CDATA[Order]]></string>
+	<string name="_bx_payment_popup_title_ods_order_pending_view"><![CDATA[Pending Order]]></string>
+	<string name="_bx_payment_popup_title_ods_order_pending_process"><![CDATA[Process Pending Order]]></string>
+	<string name="_bx_payment_popup_title_ods_order_processed_view"><![CDATA[Processed Order]]></string>
+	<string name="_bx_payment_popup_title_ods_order_processed_add"><![CDATA[Manual Order]]></string>
+	<string name="_bx_payment_popup_title_crd_providers_select"><![CDATA[Select Payment Method]]></string>
 	<string name=""><![CDATA[]]></string>
 	<string name=""><![CDATA[]]></string>
 
@@ -192,6 +192,8 @@
 	<string name="_bx_payment_txt_add_to_cart"><![CDATA[Add to Cart]]></string>
 	<string name="_bx_payment_txt_subscribe"><![CDATA[Subscribe]]></string>
 	<string name="_bx_payment_txt_payment_to"><![CDATA[Payment to {0} for:]]></string>
+	<string name="_bx_payment_txt_checkout_to"><![CDATA[Continue checkouting to {0}]]></string>
+	<string name="_bx_payment_txt_checkout_with"><![CDATA[Checkout with {0}]]></string>
 	<string name="_bx_payment_txt_client"><![CDATA[Client]]></string>
 	<string name="_bx_payment_txt_seller"><![CDATA[Seller]]></string>
 	<string name="_bx_payment_txt_order"><![CDATA[Order ID]]></string>
@@ -199,7 +201,6 @@
 	<string name="_bx_payment_txt_message"><![CDATA[Result]]></string>
 	<string name="_bx_payment_txt_date"><![CDATA[Date]]></string>
 	<string name="_bx_payment_txt_products"><![CDATA[Products]]></string>
-	<string name="_bx_payment_txt_checkout_to"><![CDATA[Checkout to {0}]]></string>
 	
 	
 	<string name=""><![CDATA[]]></string>

+ 17 - 7
modules/boonex/payment/js/cart.js

@@ -12,7 +12,7 @@ BxPaymentCart.prototype.init = function(oOptions) {
     this._iAnimationSpeed = oOptions.iAnimationSpeed == undefined ? 'slow' : oOptions.iAnimationSpeed;
 };
 
-BxPaymentCart.prototype.addToCart = function(iVendorId, iModuleId, iItemId, iItemCount, iNeedRedirect) {
+BxPaymentCart.prototype.addToCart = function(iSellerId, iModuleId, iItemId, iItemCount, iNeedRedirect) {
 	var $this = this;
     var oDate = new Date();
 
@@ -21,7 +21,7 @@ BxPaymentCart.prototype.addToCart = function(iVendorId, iModuleId, iItemId, iIte
     	iNeedRedirect = 0;
 
     $.post(
-        this._sActionsUrl + 'add_to_cart/' + iVendorId + '/' + iModuleId + '/' + iItemId + '/' + iItemCount + '/',
+        this._sActionsUrl + 'add_to_cart/' + iSellerId + '/' + iModuleId + '/' + iItemId + '/' + iItemCount + '/',
         {
             _t:oDate.getTime()
         },
@@ -58,15 +58,25 @@ BxPaymentCart.prototype.onCartCheckout = function(oData) {
 	location.href = oData.link;
 };
 
-BxPaymentCart.prototype.subscribe = function(iVendorId, iModuleId, iItemId, iItemCount) {
+BxPaymentCart.prototype.subscribe = function(iSellerId, sSellerProvider, iModuleId, iItemId, iItemCount) {
     var $this = this;
     var oDate = new Date();
 
+    var oParams = {
+    	seller_id: iSellerId,
+    	seller_provider: sSellerProvider,
+    	module_id: iModuleId,
+    	item_id: iItemId,
+    	item_count: 1,
+    	_t: oDate.getTime()
+    };
+
+    if(iItemCount != undefined && iItemCount.length > 0)
+    	oParams.item_count = parseInt(iItemCount);
+
     $.post(
-        this._sActionsUrl + 'subscribe/' + iVendorId + '/' + iModuleId + '/' + iItemId + (iItemCount != undefined ? '/' + iItemCount + '/' : ''),
-        {
-            _t:oDate.getTime()
-        },
+        this._sActionsUrl + 'subscribe/',
+        oParams,
         function(oData){
         	$this.processResult(oData);
         },

+ 3 - 58
modules/boonex/payment/template/css/cart.css

@@ -1,60 +1,5 @@
-/*--- Box Styles ---*/
-div.bx-payment-box-wrp {}
-div.bx-payment-box {
-    position:relative;
-    background-color: #f2f2ff;
-}
-div.bx-payment-box-cpt {
-    height: 28px;
+div.bx-payment-providers-select .bx-btn {
+	float: none;
 
-    background-color: #ececec;
-
-    line-height: 28px;
-}
-div.bx-payment-box-collapse {
-	position: absolute;
-
-	top: 5px;
-    right: 5px;
-    width: 16px;
-    height: 16px;
-
-	line-height: 16px;
 	text-align: center;
-}
-div.bx-payment-box-collapse a {
-	text-decoration: none;
-}
-div.bx-payment-box-cnt {
-    position: relative;
-    background-color: #f2f2ff;    
-}
-
-/*--- Cart Styles ---*/
-div.bx-payment-vendor-icon {
-    top: 10px;
-    left: 10px;
-    width: 32px;
-    height: 32px;
-
-    position: absolute;
-}
-div.bx-payment-providers {
-    margin: 10px 0 0 52px;
-    min-height: 32px;
-}
-div.bx-payment-provider {
-    padding: 2px 0px;
-}
-div.bx-payment-provider input {
-    margin: 0px;
-    padding: 0px;
-}
-
-div.bx-payment-item {
-    padding: 2px 0px;
-}
-div.bx-payment-item input {
-    margin: 0px;
-    padding: 0px;
-}
+}

+ 10 - 0
modules/boonex/payment/template/providers_select.html

@@ -0,0 +1,10 @@
+<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_text:_adm_txt_confirm_cancel />
+		</a>
+    </div>
+</div>

+ 1 - 1
modules/boonex/payment/template/subscribe.html

@@ -1,4 +1,4 @@
-<button class="bx-btn bx-btn-img bx-payment-subscribe bx-def-margin-sec-left-auto" onclick="javascript:__js_object__.subscribe(__vendor_id__, __module_id__, __item_id__, __item_count__)">
+<button class="bx-btn bx-btn-img bx-payment-subscribe bx-def-margin-sec-left-auto" onclick="javascript:__js_object__.subscribe(__vendor_id__, '__vendor_provider__', __module_id__, __item_id__, __item_count__)">
     <i class="sys-icon rss"></i>__txt_subscribe__
 </button>
 __js_content__

+ 1 - 1
modules/boonex/payment/template/subscribe_js.html

@@ -1 +1 @@
-__js_object__.subscribe(__vendor_id__, __module_id__, __item_id__, __item_count__)
+__js_object__.subscribe(__vendor_id__, '__vendor_provider__', __module_id__, __item_id__, __item_count__)