Explorar o código

Ticket #259 - Improvements in provider options.

AntonLV %!s(int64=10) %!d(string=hai) anos
pai
achega
51a300ed9a

+ 9 - 3
modules/base/payment/classes/BxBaseModPaymentModule.php

@@ -150,9 +150,15 @@ class BxBaseModPaymentModule extends BxDolModule
 
 	public function getObjectProvider($sProvider, $mixedVendorId = BX_PAYMENT_EMPTY_ID)
 	{
-		$aProvider = is_numeric($mixedVendorId) && (int)$mixedVendorId != BX_PAYMENT_EMPTY_ID ? $this->_oDb->getVendorInfoProvider((int)$mixedVendorId, $sProvider) : $this->_oDb->getProviders(array('type' => 'by_name', 'name' => $sProvider));
-        $sClassPath = !empty($aProvider['class_file']) ? BX_DIRECTORY_PATH_ROOT . $aProvider['class_file'] : $this->_oConfig->getClassPath() . $aProvider['class_name'] . '.php';
-        if(empty($aProvider) || !file_exists($sClassPath))
+		$aProvider = $this->_oDb->getProviders(array('type' => 'by_name', 'name' => $sProvider));
+		if(empty($aProvider) || !is_array($aProvider) || empty($aProvider['class_name']))
+			return false;
+
+		if(is_numeric($mixedVendorId) && (int)$mixedVendorId != BX_PAYMENT_EMPTY_ID)
+			$aProvider['options'] = $this->_oDb->getOptions((int)$mixedVendorId, $aProvider['id']);
+
+		$sClassPath = !empty($aProvider['class_file']) ? BX_DIRECTORY_PATH_ROOT . $aProvider['class_file'] : $this->_oConfig->getClassPath() . $aProvider['class_name'] . '.php';
+        if(!file_exists($sClassPath))
         	return false;
 
         require_once($sClassPath);

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

@@ -47,6 +47,19 @@ class BxBaseModPaymentProvider extends BxDol
         $this->_bRedirectOnResult = false;
     }
 
+    public function isActive()
+    {
+    	return $this->getOption('active') == 'on';
+    }
+
+    public function getOption($sName)
+    {
+    	if(substr($sName, 0, strlen($this->_sPrefix)) != $this->_sPrefix)
+    		$sName = $this->_sPrefix . $sName;
+
+        return isset($this->_aOptions[$sName]) ? $this->_aOptions[$sName]['value'] : '';
+    }
+
 	public function getReturnUrl()
     {
 		return $this->_oModule->_oConfig->getUrl('URL_RETURN');
@@ -82,10 +95,6 @@ class BxBaseModPaymentProvider extends BxDol
         return $this->_oModule->_oDb->getOptions((int)$aPending['seller_id'], $this->_iId);
     }
 
-    protected function getOption($sName)
-    {
-        return isset($this->_aOptions[$this->_sPrefix . $sName]) ? $this->_aOptions[$this->_sPrefix . $sName]['value'] : "";
-    }
 
     /**
 	 *

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

@@ -43,17 +43,6 @@ class BxPaymentDb extends BxBaseModPaymentDb
         return $this->getAll($sQuery);
     }
 
-    public function getFormData($iUserId)
-    {
-        $sQuery = $this->prepare("SELECT
-                `tuv`.`option_id` AS `option_id`,
-                `tuv`.`value` AS `value`
-            FROM `" . $this->_sPrefix . "user_values` AS `tuv`
-            WHERE `tuv`.`user_id`=?", $iUserId);
-
-        return $this->getAllWithKey($sQuery, 'option_id');
-    }
-
 	public function getProviders($aParams = array())
     {
     	$aMethod = array('name' => 'getAll', 'params' => array(0 => 'query'));
@@ -161,24 +150,13 @@ class BxPaymentDb extends BxBaseModPaymentDb
 
 		return $aResult;
 	}
-    public function getVendorInfoProvider($iVendorId, $sProvider)
-    {
-		$aProvider = $this->getProviders(array('type' => 'by_name', 'name' => $sProvider));
-		$aOptions = $this->getOptions($iVendorId, $aProvider['id']);
 
-		$aResult = array();
-		if(isset($aOptions[$aProvider['option_prefix'] . 'active']) && $aOptions[$aProvider['option_prefix'] . 'active']['value'] == 'on') {
-			$aProvider['options'] = $aOptions;
-			$aResult = $aProvider;
-		}
-
-		return $aResult;
-    }
     public function getFirstAdminId()
     {
     	$sQuery = $this->prepare("SELECT `profile_id` FROM `sys_accounts` WHERE `role`&" . BX_DOL_ROLE_ADMIN . " ORDER BY `profile_id` ASC LIMIT 1");
         return (int)$this->getOne($sQuery);
     }
+
     public function getAdminsIds()
     {
     	$sQuery = $this->prepare("SELECT `profile_id` FROM `sys_accounts` WHERE `role`&" . BX_DOL_ROLE_ADMIN . " ORDER BY `profile_id` ASC");

+ 3 - 4
modules/boonex/payment/classes/BxPaymentDetails.php

@@ -88,7 +88,6 @@ class BxPaymentDetails extends BxDol
         $iProvider = 0;
         $sProvider = "";
         $oProvider = null;
-        $aUserValues = $this->_oModule->_oDb->getFormData($iUserId);
         foreach($aInputs as $aInput) {
             if($iProvider != $aInput['provider_id']) {
                 if(!empty($iProvider))
@@ -105,7 +104,7 @@ class BxPaymentDetails extends BxDol
 
                 $iProvider = $aInput['provider_id'];
                 $sProvider = $aInput['provider_name'];
-                $oProvider = $this->_oModule->getObjectProvider($sProvider);
+                $oProvider = $this->_oModule->getObjectProvider($sProvider, $iUserId);
                 $bCollapsed = true;
             }
 
@@ -113,7 +112,7 @@ class BxPaymentDetails extends BxDol
 				'type' => $aInput['type'],
                 'name' => $aInput['name'],
                 'caption' => _t($aInput['caption']),
-                'value' => isset($aUserValues[$aInput['id']]['value']) ? $aUserValues[$aInput['id']]['value'] : '',
+                'value' => $oProvider->getOption($aInput['name']),
                 'info' => _t($aInput['description']),
             	'attrs' => array(
             		'bx-data-provider' => $iProvider
@@ -142,7 +141,7 @@ class BxPaymentDetails extends BxDol
 
                 case 'checkbox':
                     $aForm['inputs'][$aInput['name']]['value'] = 'on';
-                    $aAddon = array('checked' => isset($aUserValues[$aInput['id']]['value']) && $aUserValues[$aInput['id']]['value'] == 'on' ? true : false);
+                    $aAddon = array('checked' => $oProvider->getOption($aInput['name']) == 'on');
                     break;
 
 				 case 'value':

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

@@ -238,7 +238,7 @@ class BxPaymentModule extends BxBaseModPaymentModule
             return $this->_sLangsPrefix . 'err_unknown_vendor';
 
 		$oProvider = $this->getObjectProvider($sProvider, $iVendorId);
-        if($oProvider === false)
+        if($oProvider === false || !$oProvider->isActive())
         	return $this->_sLangsPrefix . 'err_incorrect_provider';
 
         $aInfo = $this->getObjectCart()->getInfo($sType, $this->_iUserId, $iVendorId, $aItems);
@@ -300,7 +300,7 @@ class BxPaymentModule extends BxBaseModPaymentModule
         $aData = &$_REQUEST;
 
         $oProvider = $this->getObjectProvider($sProvider, $mixedVendorId);
-        if($oProvider === false)
+        if($oProvider === false || !$oProvider->isActive())
         	return $this->_oTemplate->displayPageCodeError($this->_sLangsPrefix . 'err_incorrect_provider');
 
         $aResult = $oProvider->finalizeCheckout($aData);
@@ -328,7 +328,7 @@ class BxPaymentModule extends BxBaseModPaymentModule
     public function actionFinalizedCheckout($sProvider, $mixedVendorId = "")
     {
         $oProvider = $this->getObjectProvider($sProvider, $mixedVendorId);
-        if($oProvider === false)
+        if($oProvider === false || !$oProvider->isActive())
         	return $this->_oTemplate->displayPageCodeError($this->_sLangsPrefix . 'err_incorrect_provider');
 
         $aResult = $oProvider->finalizedCheckout();
@@ -338,7 +338,7 @@ class BxPaymentModule extends BxBaseModPaymentModule
     public function actionNotify($sProvider, $mixedVendorId = "")
     {
     	$oProvider = $this->getObjectProvider($sProvider, $mixedVendorId);
-        if($oProvider === false)
+        if($oProvider === false || !$oProvider->isActive())
         	return $this->_oTemplate->displayPageCodeError($this->_sLangsPrefix . 'err_incorrect_provider');
 
 		$oProvider->notify();

+ 18 - 0
modules/boonex/payment/classes/BxPaymentProviderChargebee.php

@@ -32,6 +32,24 @@ class BxPaymentProviderChargebee extends BxBaseModPaymentProvider implements iBx
         $this->_bCheckAmount = false; // Disabled for easier processing of discounted subscriptions.
     }
 
+    public function getReturnDataUrl($iVendorId)
+    {
+    	$sResult = parent::getReturnDataUrl($iVendorId);
+    	if($this->getOption('ssl') == 'on')
+    		$sResult = $this->_oModule->_oConfig->http2https($sResult);
+
+		return $sResult;
+    }
+
+	public function getNotifyUrl($iVendorId)
+    {
+    	$sResult = parent::getNotifyUrl($iVendorId);
+    	if($this->getOption('ssl') == 'on')
+    		$sResult = $this->_oModule->_oConfig->http2https($sResult);
+
+		return $sResult;
+    }
+
     public function initializeCheckout($iPendingId, $aCartInfo)
     {
     	$aItem = array_shift($aCartInfo['items']);

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

@@ -289,8 +289,7 @@
 	<string name="_bx_payment_cbee_cpt"><![CDATA[Chargebee]]></string>
 	<string name="_bx_payment_cbee_dsc"><![CDATA[Chargebee payment provider]]></string>
 	<string name="_bx_payment_cbee_active_cpt"><![CDATA[Active]]></string>
-	<string name="_bx_payment_cbee_active_dsc"><![CDATA[Activate(Deactivate) provider]]></string>
-	<string name="_bx_payment_cbee_active_err"><![CDATA[You should have SSL certificate (HTTPS connection) to activate and use Chargebee on your site.]]></string>
+	<string name="_bx_payment_cbee_active_dsc"><![CDATA[Activate(Deactivate) provider. Note. It's recommended to use SSL for better payment processing.]]></string>
 	<string name="_bx_payment_cbee_mode_cpt"><![CDATA[Mode]]></string>
 	<string name="_bx_payment_cbee_mode_dsc"><![CDATA[Mode to process payments]]></string>
 	<string name="_bx_payment_cbee_mode_live"><![CDATA[live]]></string>
@@ -303,6 +302,8 @@
 	<string name="_bx_payment_cbee_test_site_dsc"><![CDATA[Your site name registered in Chargebee for 'test' mode]]></string>
 	<string name="_bx_payment_cbee_test_api_key_cpt"><![CDATA[API Key (test)]]></string>
 	<string name="_bx_payment_cbee_test_api_key_dsc"><![CDATA[Your Chargebee API Access key for 'test' mode]]></string>
+	<string name="_bx_payment_cbee_ssl_cpt"><![CDATA[Enable SSL]]></string>
+	<string name="_bx_payment_cbee_ssl_dsc"><![CDATA[Enable SSL connection to communicate with Chargebee. Note. URLs below will be updated after saving.]]></string>
 	<string name="_bx_payment_cbee_return_data_url_cpt"><![CDATA[Data return URL]]></string>
 	<string name="_bx_payment_cbee_notify_url_cpt"><![CDATA[Webhooks URL]]></string>
 	<string name="_bx_payment_cbee_msg_subscribed"><![CDATA[Subscription was successfully created.]]></string>

+ 4 - 3
modules/boonex/payment/install/sql/install.sql

@@ -130,14 +130,15 @@ INSERT INTO `bx_payment_providers`(`name`, `caption`, `description`, `option_pre
 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, 'cbee_active', 'checkbox', '_bx_payment_cbee_active_cpt', '_bx_payment_cbee_active_dsc', '', 'https', '', '_bx_payment_cbee_active_err', 1),
+(@iProviderId, 'cbee_active', 'checkbox', '_bx_payment_cbee_active_cpt', '_bx_payment_cbee_active_dsc', '', '', '', '', 1),
 (@iProviderId, 'cbee_mode', 'select', '_bx_payment_cbee_mode_cpt', '_bx_payment_cbee_mode_dsc', '1|_bx_payment_cbee_mode_live,2|_bx_payment_cbee_mode_test', '', '', '', 2),
 (@iProviderId, 'cbee_live_site', 'text', '_bx_payment_cbee_live_site_cpt', '_bx_payment_cbee_live_site_dsc', '', '', '', '', 3),
 (@iProviderId, 'cbee_live_api_key', 'text', '_bx_payment_cbee_live_api_key_cpt', '_bx_payment_cbee_live_api_key_dsc', '', '', '', '', 4),
 (@iProviderId, 'cbee_test_site', 'text', '_bx_payment_cbee_test_site_cpt', '_bx_payment_cbee_test_site_dsc', '', '', '', '', 5),
 (@iProviderId, 'cbee_test_api_key', 'text', '_bx_payment_cbee_test_api_key_cpt', '_bx_payment_cbee_test_api_key_dsc', '', '', '', '', 6),
-(@iProviderId, 'cbee_return_data_url', 'value', '_bx_payment_cbee_return_data_url_cpt', '', '', '', '', '', 7),
-(@iProviderId, 'cbee_notify_url', 'value', '_bx_payment_cbee_notify_url_cpt', '', '', '', '', '', 8);
+(@iProviderId, 'cbee_ssl', 'checkbox', '_bx_payment_cbee_ssl_cpt', '_bx_payment_cbee_ssl_dsc', '', '', '', '', 7),
+(@iProviderId, 'cbee_return_data_url', 'value', '_bx_payment_cbee_return_data_url_cpt', '', '', '', '', '', 8),
+(@iProviderId, 'cbee_notify_url', 'value', '_bx_payment_cbee_notify_url_cpt', '', '', '', '', '', 9);
 
 -- GRIDS
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `override_class_name`, `override_class_file`) VALUES