AntonLV 8 years ago
parent
commit
36f8fb1fdf

+ 4 - 0
inc/js/functions.js

@@ -39,6 +39,10 @@ function processJsonData(oData) {
 	        eval(oData.eval);
 	};
 
+	if(oData && oData.object != undefined && oData.grid != undefined)
+		if(glGrids[oData.object] != undefined)
+			glGrids[oData.object].processJson(oData);
+
 	if(oData && oData.message != undefined && oData.message.length != 0)
 		bx_alert(oData.message, function() {
 			fContinue(oData);

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

@@ -22,7 +22,7 @@ class BxPaymentGridSbsList extends BxPaymentGridSbsAdministration
     {
     	unset($a['attr']['bx_grid_action_single']);
     	$a['attr'] = array_merge($a['attr'], array(
-    		"onclick" => "bx_menu_popup('" . $this->_oModule->_oConfig->getObject('menu_sbs_actions') . "', this, {id: 'bx-payment-subscription-" . $aRow['id'] . "'}, {id: " . $aRow['id'] . "});"
+    		"onclick" => "bx_menu_popup('" . $this->_oModule->_oConfig->getObject('menu_sbs_actions') . "', this, {id: 'bx-payment-subscription-" . $aRow['id'] . "'}, {id: " . $aRow['id'] . ", grid: '" . $this->_sObject . "'});"
     	));
 
         return  parent::_getActionDefault($sType, $sKey, $a, false, $isDisabled, $aRow);

+ 9 - 4
modules/boonex/payment/classes/BxPaymentMenuSbsActions.php

@@ -25,9 +25,9 @@ class BxPaymentMenuSbsActions extends BxTemplMenu
         $iPendingId = bx_process_input(bx_get('id'), BX_DATA_INT);
         if(empty($iPendingId))
             return;
-            
+
         $aPending = $this->_oModule->_oDb->getOrderPending(array('type' => 'id', 'id' => $iPendingId));
-        if(empty($aPending) && !is_array($aPending))
+        if(empty($aPending) || !is_array($aPending))
             return;
 
         $sMethod = 'getMenuItemsActionsRecurring';
@@ -40,10 +40,15 @@ class BxPaymentMenuSbsActions extends BxTemplMenu
             'order' => $aPending['order']
         )), $this->getMenuItemsRaw());
 
-        $this->addMarkers(array(
+        $aMarkers = array(
 			'js_object' => $this->_oModule->_oConfig->getJsObject('subscription'),
             'id' => $iPendingId
-		));
+		);
+
+		if(bx_get('grid') !== false)
+		    $aMarkers['grid'] = bx_process_input(bx_get('grid'));
+
+        $this->addMarkers($aMarkers);
     }
 
     public function getCode()

+ 47 - 2
modules/boonex/payment/classes/BxPaymentModule.php

@@ -430,17 +430,21 @@ class BxPaymentModule extends BxBaseModPaymentModule
         $aResult = array('code' => 1, 'message' => _t('_bx_payment_err_cannot_perform'));
 
         $aPending = $this->_oDb->getOrderPending(array('type' => 'id', 'id' => $iId));
-        if(empty($aPending) && !is_array($aPending))
+        if(empty($aPending) || !is_array($aPending))
             return echoJson($aResult);
 
         $aSubscription = $this->_oDb->getSubscription(array('type' => 'pending_id', 'pending_id' => $iId));
-        if(empty($aSubscription) && !is_array($aSubscription))
+        if(empty($aSubscription) || !is_array($aSubscription))
             return echoJson($aResult);
 
         $oRecipient = BxDolProfile::getInstance((int)$aPending['seller_id']);
         if(!$oRecipient)
             return echoJson($aResult);
 
+        $mixedResult = $this->isAllowedManage($aPending);
+        if($mixedResult !== true)
+            return echoJson(array('code' => 2, 'message' => $mixedResult));
+
 		$aTemplate = BxDolEmailTemplates::getInstance()->parseTemplate($this->_oConfig->getPrefix('general') . 'cancelation_request', array(
 			'sibscription_id' => $aSubscription['subscription_id'],
 			'sibscription_customer' => $aSubscription['customer_id'],
@@ -461,6 +465,33 @@ class BxPaymentModule extends BxBaseModPaymentModule
         echoJson(array('code' => 0, 'message' => _t('_bx_payment_msg_cancelation_request_sent')));
     }
 
+    public function actionSubscriptionCancel($iId, $mixedGridObject = false)
+    {
+        $aResult = array('code' => 1, 'message' => _t('_bx_payment_err_cannot_perform'));
+
+        $aPending = $this->_oDb->getOrderPending(array('type' => 'id', 'id' => $iId));
+        if(empty($aPending) || !is_array($aPending))
+            return echoJson($aResult);
+
+        $mixedResult = $this->isAllowedManage($aPending);
+        if($mixedResult !== true)
+            return echoJson(array('code' => 2, 'message' => $mixedResult));
+
+        if(!$this->getObjectSubscriptions()->cancel($iId))
+            return echoJson($aResult);
+
+        if(empty($mixedGridObject) && bx_get('grid') !== false)
+            $mixedGridObject = bx_process_input(bx_get('grid'));
+
+        if(!empty($mixedGridObject) && $aPending['client_id'] == $this->getProfileId()) {
+            $oGrid = BxDolGrid::getObjectInstance($mixedGridObject, $this->_oTemplate);
+            $oGrid->addQueryParam('client_id', $aPending['client_id']);
+
+            return echoJson(array('object' => $mixedGridObject, 'grid' => $oGrid->getCode(false), 'blink' => array($iId)));
+        }
+        else
+            return echoJson(array('code' => 0, 'message' => _t('_bx_payment_msg_successfully_performed')));
+    }
 
     /**
      * Payment Processing Methods
@@ -723,6 +754,20 @@ class BxPaymentModule extends BxBaseModPaymentModule
         return $aCheckResult[CHECK_ACTION_MESSAGE];
     }
 
+    public function isAllowedManage($aPending, $bPerform = false)
+    {
+        $iUserId = (int)$this->getProfileId();
+
+        if($iUserId == $aPending['client_id'] || $iUserId == $aPending['seller_id'] || isAdmin())
+            return true;
+
+        $aCheckResult = checkActionModule($iUserId, 'manage any purchase', $this->getName(), $bPerform);
+        if($aCheckResult[CHECK_ACTION_RESULT] == CHECK_ACTION_RESULT_ALLOWED)
+			return true;
+
+        return $aCheckResult[CHECK_ACTION_MESSAGE];
+    }
+
     public function checkData($iClientId, $iSellerId, $iModuleId, $iItemId, $iItemCount)
     {
     	$CNF = &$this->_oConfig->CNF;

+ 12 - 6
modules/boonex/payment/classes/BxPaymentTemplate.php

@@ -402,22 +402,28 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
 
     protected function _displaySubscriptionData($sType, $iId)
     {
+        $aResult = array('code' => 1, 'message' => _t('_bx_payment_err_cannot_perform'));
+
         $aPending = $this->_oDb->getOrderPending(array('type' => 'id', 'id' => $iId));
-        if(empty($aPending) && !is_array($aPending))
-            return array();
+        if(empty($aPending) || !is_array($aPending))
+            return $aResult;
 
         $aSubscription = $this->_oDb->getSubscription(array('type' => 'pending_id', 'pending_id' => $iId));
-        if(empty($aSubscription) && !is_array($aSubscription))
-            return array();
+        if(empty($aSubscription) || !is_array($aSubscription))
+            return $aResult;
 
+        $mixedResult = $this->getModule()->isAllowedManage($aPending);
+        if($mixedResult !== true)
+            return array('code' => 2, 'message' => $mixedResult);
+            
         $sMethod = bx_gen_method_name($sType) . 'Recurring';
         $oProvider = $this->getModule()->getObjectProvider($aPending['provider'], $aPending['seller_id']);
         if($oProvider === false || !$oProvider->isActive() || !method_exists($oProvider, $sMethod))
-        	return array();
+        	return $aResult;
 
         $mixedContent = $oProvider->$sMethod($iId, $aSubscription['customer_id'], $aSubscription['subscription_id']);
         if(empty($mixedContent))
-            return array();
+            return $aResult;
         else if(is_array($mixedContent))
             return $mixedContent;
 

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

@@ -81,8 +81,10 @@
 
     <string name="_bx_payment_menu_title_sbs_actions"><![CDATA[Subscription Actions]]></string>
     <string name="_bx_payment_menu_set_title_sbs_actions"><![CDATA[Subscription Actions]]></string>
-    <string name="_bx_payment_menu_item_title_system_sbs_cancel"><![CDATA[Request Cancellation]]></string>
-    <string name="_bx_payment_menu_item_title_sbs_cancel"><![CDATA[Request Cancellation]]></string>
+    <string name="_bx_payment_menu_item_title_system_sbs_request_cancelation"><![CDATA[Request Cancellation]]></string>
+    <string name="_bx_payment_menu_item_title_sbs_request_cancelation"><![CDATA[Request Cancellation]]></string>
+    <string name="_bx_payment_menu_item_title_system_sbs_cancel"><![CDATA[Cancel Subscription]]></string>
+    <string name="_bx_payment_menu_item_title_sbs_cancel"><![CDATA[Cancel Subscription]]></string>
 
 	<!-- GRIDS -->
 	<string name="_bx_payment_grid_column_title_ods_client_id"><![CDATA[Client]]></string>
@@ -176,6 +178,7 @@
 	<!-- ACL -->
 	<string name="_bx_payment_acl_action_purchase"><![CDATA[Purchase]]></string>
 	<string name="_bx_payment_acl_action_sell"><![CDATA[Sell]]></string>
+	<string name="_bx_payment_acl_action_manage_any_purchase"><![CDATA[Manage Any Purchase]]></string>
 
 	<!-- EMAIL TEMPLATES -->
 	<string name="_bx_payment_et_txt_name_paid_need_join"><![CDATA[Paid and need to join.]]></string>
@@ -199,6 +202,7 @@
 	<string name="_bx_payment_msg_redirecting"><![CDATA[Redirecting... Please wait.]]></string>
 	<string name="_bx_payment_msg_item_added"><![CDATA[The item was successfully added to your shopping cart.]]></string>
 	<string name="_bx_payment_msg_item_deleted"><![CDATA[The item was successfully deleted from your shopping cart.]]></string>
+	<string name="_bx_payment_msg_successfully_performed"><![CDATA[The action was successfully performed.]]></string>
 	<string name="_bx_payment_msg_successfully_processed_free"><![CDATA[Free item was successfully processed]]></string>
 	<string name="_bx_payment_msg_cancelation_request_sent"><![CDATA[Cancellation request was sent. Please wait.]]></string>
 	<string name="_bx_payment_err_access_db"><![CDATA[Database access error.]]></string>
@@ -439,7 +443,7 @@
 	<string name="_bx_payment_strp_menu_item_title_details"><![CDATA[Details]]></string>
 	<string name="_bx_payment_strp_menu_item_title_details_change"><![CDATA[Change Details]]></string>
 	<string name="_bx_payment_strp_menu_item_title_billing"><![CDATA[Billing Info]]></string>
-	<string name="_bx_payment_strp_menu_item_title_billing_change"><![CDATA[Change Billing Info]]></string>	
+	<string name="_bx_payment_strp_menu_item_title_billing_change"><![CDATA[Change Billing Info]]></string>
 	<string name="_bx_payment_strp_txt_plan"><![CDATA[Plan]]></string>
 	<string name="_bx_payment_strp_txt_cost"><![CDATA[Cost]]></string>
 	<string name="_bx_payment_strp_txt_cost_mask"><![CDATA[{0} {1} / {2}]]></string>

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

@@ -79,7 +79,8 @@ INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES
 ('bx_payment_menu_sbs_actions', 'bx_payment', '_bx_payment_menu_set_title_sbs_actions', 0);
 
 INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `editable`, `order`) VALUES 
-('bx_payment_menu_sbs_actions', 'bx_payment', 'sbs-cancel', '_bx_payment_menu_item_title_system_sbs_cancel', '_bx_payment_menu_item_title_sbs_cancel', 'javascript:void(0)', '{js_object}.requestCancelation(this, {id})', '_self', '', '', '', 2147483647, 1, 0, 1, 1);
+('bx_payment_menu_sbs_actions', 'bx_payment', 'sbs-request-cancelation', '_bx_payment_menu_item_title_system_sbs_request_cancelation', '_bx_payment_menu_item_title_sbs_request_cancelation', 'javascript:void(0)', '{js_object}.requestCancelation(this, {id})', '_self', '', '', '', 2147483647, 1, 0, 1, 1),
+('bx_payment_menu_sbs_actions', 'bx_payment', 'sbs-cancel', '_bx_payment_menu_item_title_system_sbs_cancel', '_bx_payment_menu_item_title_sbs_cancel', 'javascript:void(0)', '{js_object}.cancel(this, {id}, \'{grid}\')', '_self', '', '', '', 2147483647, 0, 0, 1, 2);
 
 -- MENU: orders submenu
 INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
@@ -117,6 +118,10 @@ INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`,
 (@sName, 'sell', NULL, '_bx_payment_acl_action_sell', '', 1, 3);
 SET @iIdActionSell = LAST_INSERT_ID();
 
+INSERT INTO `sys_acl_actions` (`Module`, `Name`, `AdditionalParamName`, `Title`, `Desc`, `Countable`, `DisabledForLevels`) VALUES
+(@sName, 'manage any purchase', NULL, '_bx_payment_acl_action_manage_any_purchase', '', 1, 3);
+SET @iIdActionManageAnyPurchase = LAST_INSERT_ID();
+
 SET @iUnauthenticated = 1;
 SET @iAccount = 2;
 SET @iStandard = 3;
@@ -139,7 +144,11 @@ INSERT INTO `sys_acl_matrix` (`IDLevel`, `IDAction`) VALUES
 (@iStandard, @iIdActionSell),
 (@iModerator, @iIdActionSell),
 (@iAdministrator, @iIdActionSell),
-(@iPremium, @iIdActionSell);
+(@iPremium, @iIdActionSell),
+
+-- manage any purchase
+(@iModerator, @iIdActionManageAnyPurchase),
+(@iAdministrator, @iIdActionManageAnyPurchase);
 
 
 -- EMAIL TEMPLATES

+ 2 - 2
modules/boonex/payment/js/stripe.js

@@ -77,7 +77,7 @@ BxPaymentProviderStripe.prototype.subscribe = function(oLink) {
 
 	this._rHandler.open({
 		token: function(token) {
-			$this.loadingInButton(oLink, true);
+			$this.loadingInPopup(oLink, true);
 
 		    var oParams = {
 		    	seller_id: $this._iSellerId,
@@ -95,7 +95,7 @@ BxPaymentProviderStripe.prototype.subscribe = function(oLink) {
 		        $this._sActionsUrl + 'subscribe_json/',
 		        oParams,
 		        function(oData){
-		        	$this.loadingInButton(oLink, true);
+		        	$this.loadingInPopup(oLink, true);
 
 		        	processJsonData(oData);
 		        },

+ 18 - 7
modules/boonex/payment/js/subscriptions.js

@@ -44,19 +44,30 @@ BxPaymentSubscriptions.prototype.requestCancelation = function(oLink, iId) {
 	this._performRequest(oLink, iId, 'subscription_cancelation');
 };
 
-BxPaymentSubscriptions.prototype._performRequest = function(oLink, iId, sUri) {
+BxPaymentSubscriptions.prototype.cancel = function(oLink, iId, sGrid) {
+	var $this = this;
+
+	var oParams = {};
+	if(sGrid != undefined)
+		oParams.grid = sGrid;
+
+	bx_confirm('', function() {
+		$this._performRequest(oLink, iId, 'subscription_cancel', oParams);
+	});
+};
+
+BxPaymentSubscriptions.prototype._performRequest = function(oLink, iId, sUri, oParams) {
 	var $this = this;
     var oDate = new Date();
 
-    this.loadingInButton(oLink, true);
+    this.loadingInPopup(oLink, true);
 
     $.post(
-        this._sActionsUrl + sUri + '/' + iId + '/',
-        {
-            _t:oDate.getTime()
-        },
+        this._sActionsUrl + sUri + '/' + iId,
+        $.extend({}, {_t:oDate.getTime()}, oParams),
         function(oData){
-        	$this.loadingInButton(oLink, false);
+        	$this.loadingInPopup(oLink, false);
+
         	$(".bx-popup-applied:visible").dolPopupHide();
 
         	processJsonData(oData);

+ 6 - 2
modules/boonex/russian/data/langs/bx_payment/ru.xml

@@ -81,8 +81,10 @@
 
     <string name="_bx_payment_menu_title_sbs_actions"><![CDATA[Действия с подпиской]]></string>
     <string name="_bx_payment_menu_set_title_sbs_actions"><![CDATA[Действия с подпиской]]></string>
-    <string name="_bx_payment_menu_item_title_system_sbs_cancel"><![CDATA[Запросить отмену]]></string>
-    <string name="_bx_payment_menu_item_title_sbs_cancel"><![CDATA[Запросить отмену]]></string>
+    <string name="_bx_payment_menu_item_title_system_sbs_request_cancelation"><![CDATA[Запросить отмену]]></string>
+    <string name="_bx_payment_menu_item_title_sbs_request_cancelation"><![CDATA[Запросить отмену]]></string>
+    <string name="_bx_payment_menu_item_title_system_sbs_cancel"><![CDATA[Отменить подписку]]></string>
+    <string name="_bx_payment_menu_item_title_sbs_cancel"><![CDATA[Отменить подписку]]></string>
 
 	<!-- GRIDS -->
 	<string name="_bx_payment_grid_column_title_ods_client_id"><![CDATA[Покупатель]]></string>
@@ -176,6 +178,7 @@
 	<!-- ACL -->
 	<string name="_bx_payment_acl_action_purchase"><![CDATA[Покупать]]></string>
 	<string name="_bx_payment_acl_action_sell"><![CDATA[Продавать]]></string>
+	<string name="_bx_payment_acl_action_manage_any_purchase"><![CDATA[Управлять любыми покупками]]></string>
 
 	<!-- EMAIL TEMPLATES -->
 	<string name="_bx_payment_et_txt_name_paid_need_join"><![CDATA[Заплатил - присоединяйся.]]></string>
@@ -199,6 +202,7 @@
 	<string name="_bx_payment_msg_redirecting"><![CDATA[Пересылаю... Пожалуйста подождите.]]></string>
 	<string name="_bx_payment_msg_item_added"><![CDATA[Товар был успешно добавлен в вашу корзину.]]></string>
 	<string name="_bx_payment_msg_item_deleted"><![CDATA[Товар был успешно удален из вашей корзины.]]></string>
+	<string name="_bx_payment_msg_successfully_performed"><![CDATA[Действие было успешно выполнено.]]></string>
 	<string name="_bx_payment_msg_successfully_processed_free"><![CDATA[Бесплатный товар был успешно обработан.]]></string>
 	<string name="_bx_payment_msg_cancelation_request_sent"><![CDATA[Запрос на отмену был отправлен. Пожалуйста, ждите.]]></string>
 	<string name="_bx_payment_err_access_db"><![CDATA[Ошибка обращения к базе данных.]]></string>