فهرست منبع

Ticket #4971 - Build-in API support: Cancel subscription.

AntonLV 7 ماه پیش
والد
کامیت
2a2b176f86

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

@@ -18,6 +18,8 @@ interface iBxBaseModPaymentProvider
 
 
 class BxBaseModPaymentProvider extends BxDol
 class BxBaseModPaymentProvider extends BxDol
 {
 {
+    protected $_bIsApi;
+
     protected $MODULE;
     protected $MODULE;
     protected $_oModule;
     protected $_oModule;
 
 
@@ -47,6 +49,8 @@ class BxBaseModPaymentProvider extends BxDol
     {
     {
         parent::__construct();
         parent::__construct();
 
 
+        $this->_bIsApi = bx_is_api();
+
         $this->_oModule = BxDolModule::getInstance($this->MODULE);
         $this->_oModule = BxDolModule::getInstance($this->MODULE);
 
 
         $this->_sLangsPrefix = $this->_oModule->_oConfig->getPrefix('langs');
         $this->_sLangsPrefix = $this->_oModule->_oConfig->getPrefix('langs');

+ 17 - 7
modules/boonex/payment/classes/BxPaymentGridSbsList.php

@@ -33,8 +33,18 @@ class BxPaymentGridSbsList extends BxPaymentGridSbsAdministration
 
 
     protected function _getActionActions ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
     protected function _getActionActions ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
     {
     {
-    	$sJsCode = '';
-    	if(!empty($aRow['seller_id']) && !empty($aRow['provider']) && !in_array($aRow['provider'], $this->_aProvidersAttached)) {
+        $sMenuObject = $this->_oModule->_oConfig->getObject('menu_sbs_actions');
+
+        if($this->_bIsApi) {
+            $aParams = [];
+            if($sType == 'single' && ($sFieldId = $this->_aOptions['field_id']) && isset($aRow[$sFieldId]))
+                $aParams['pending_id'] = (int)$aRow[$sFieldId];
+
+            return array_merge($a, ['name' => $sKey, 'type' => 'menu', 'action' => $sKey, 'params' => $aParams, 'object' => $sMenuObject]);
+        }
+
+        $sJsCode = '';
+        if(!empty($aRow['seller_id']) && !empty($aRow['provider']) && !in_array($aRow['provider'], $this->_aProvidersAttached)) {
             $oProvider = $this->_oModule->getObjectProvider($aRow['provider'], $aRow['seller_id']);
             $oProvider = $this->_oModule->getObjectProvider($aRow['provider'], $aRow['seller_id']);
             if($oProvider) {
             if($oProvider) {
                 $oProvider->addJsCss();
                 $oProvider->addJsCss();
@@ -45,12 +55,12 @@ class BxPaymentGridSbsList extends BxPaymentGridSbsAdministration
 
 
                 $this->_aProvidersAttached[] = $aRow['provider'];
                 $this->_aProvidersAttached[] = $aRow['provider'];
             }
             }
-    	}
+        }
 
 
-    	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'] . ", grid: '" . $this->_sObject . "'});"
-    	));
+        unset($a['attr']['bx_grid_action_single']);
+        $a['attr'] = array_merge($a['attr'], [
+            "onclick" => "bx_menu_popup('" . $sMenuObject . "', this, {id: 'bx-payment-subscription-" . $aRow['id'] . "'}, {id: " . $aRow['id'] . ", grid: '" . $this->_sObject . "'});"
+        ]);
 
 
         return $sJsCode . parent::_getActionDefault($sType, $sKey, $a, false, $isDisabled, $aRow);
         return $sJsCode . parent::_getActionDefault($sType, $sKey, $a, false, $isDisabled, $aRow);
     }
     }

+ 45 - 15
modules/boonex/payment/classes/BxPaymentMenuSbsActions.php

@@ -14,7 +14,9 @@ class BxPaymentMenuSbsActions extends BxTemplMenu
 {
 {
     protected $_sModule;
     protected $_sModule;
     protected $_oModule;
     protected $_oModule;
-    
+
+    protected $_iPendingId;
+
     public function __construct($aObject, $oTemplate = false)
     public function __construct($aObject, $oTemplate = false)
     {
     {
         $this->_sModule = 'bx_payment';
         $this->_sModule = 'bx_payment';
@@ -22,31 +24,43 @@ class BxPaymentMenuSbsActions extends BxTemplMenu
 
 
         parent::__construct($aObject, $oTemplate);
         parent::__construct($aObject, $oTemplate);
 
 
-        $iPendingId = bx_process_input(bx_get('id'), BX_DATA_INT);
-        if(empty($iPendingId))
-            return;
+        if(($iPendingId = bx_get('id')) !== false && ($iPendingId = bx_process_input($iPendingId, BX_DATA_INT)))
+            $this->setPendingId($iPendingId);
+    }
+
+    public function setContentParams($aParams)
+    {
+        parent::setContentParams($aParams);
+
+        if(($iPendingId = $aParams['pending_id'] ?? false))
+            $this->setPendingId($iPendingId);
+    }
 
 
-        $aPending = $this->_oModule->_oDb->getOrderPending(array('type' => 'id', 'id' => $iPendingId));
+    public function setPendingId($iPendingId)
+    {
+        $this->_iPendingId = $iPendingId;
+
+        $aPending = $this->_oModule->_oDb->getOrderPending(['type' => 'id', 'id' => $this->_iPendingId]);
         if(empty($aPending) || !is_array($aPending))
         if(empty($aPending) || !is_array($aPending))
             return;
             return;
 
 
         $sMethod = 'getMenuItemsActionsRecurring';
         $sMethod = 'getMenuItemsActionsRecurring';
         $oProvider = $this->_oModule->getObjectProvider($aPending['provider'], $aPending['seller_id']);
         $oProvider = $this->_oModule->getObjectProvider($aPending['provider'], $aPending['seller_id']);
         if($oProvider === false || !$oProvider->isActive() || !method_exists($oProvider, $sMethod))
         if($oProvider === false || !$oProvider->isActive() || !method_exists($oProvider, $sMethod))
-        	return;
+            return;
 
 
-        $this->_aObject['menu_items'] = array_merge($oProvider->$sMethod($aPending['client_id'], $aPending['seller_id'], array(
-        	'id' => $aPending['id'],
+        $this->_aObject['menu_items'] = array_merge($oProvider->$sMethod($aPending['client_id'], $aPending['seller_id'], [
+            'id' => $aPending['id'],
             'order' => $aPending['order']
             'order' => $aPending['order']
-        )), $this->getMenuItemsRaw());
+        ]), $this->getMenuItemsRaw());
 
 
-        $aMarkers = array(
-			'js_object' => $this->_oModule->_oConfig->getJsObject('subscription'),
-            'id' => $iPendingId
-		);
+        $aMarkers = [
+            'js_object' => $this->_oModule->_oConfig->getJsObject('subscription'),
+            'id' => $this->_iPendingId
+        ];
 
 
-		if(bx_get('grid') !== false)
-		    $aMarkers['grid'] = bx_process_input(bx_get('grid'));
+        if(($sGrid = bx_get('grid')) !== false)
+            $aMarkers['grid'] = bx_process_input($sGrid);
 
 
         $this->addMarkers($aMarkers);
         $this->addMarkers($aMarkers);
     }
     }
@@ -58,6 +72,22 @@ class BxPaymentMenuSbsActions extends BxTemplMenu
 
 
         return parent::getCode();
         return parent::getCode();
     }
     }
+
+    protected function _getMenuCallbackDataAPI($a)
+    {
+        $aResult = [];
+
+        switch($a['name']) {
+            case 'sbs-cancel':
+                $aResult = [
+                    'request_url' => $this->_sModule . '/cancel_by_pending_id/subscriptions&params[]=' . $this->_iPendingId . '&params[]=1', 
+                    'on_callback' => 'hide'
+                ];
+                break;
+        }
+
+        return $aResult;
+    }
 }
 }
 
 
 /** @} */
 /** @} */

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

@@ -149,8 +149,8 @@ class BxPaymentProviderStripeBasic extends BxBaseModPaymentProvider
 
 
     public function getMenuItemsActionsRecurring($iClientId, $iVendorId, $aParams = array())
     public function getMenuItemsActionsRecurring($iClientId, $iVendorId, $aParams = array())
     {
     {
-        if(empty($aParams['order']))
-            return array();
+        if($this->_bIsApi || empty($aParams['order']))
+            return [];
 
 
         $sJsObject = $this->_oModule->_oConfig->getJsObject(BX_PAYMENT_ORDERS_TYPE_SUBSCRIPTION);
         $sJsObject = $this->_oModule->_oConfig->getJsObject(BX_PAYMENT_ORDERS_TYPE_SUBSCRIPTION);
 
 

+ 12 - 3
template/scripts/BxBaseMenu.php

@@ -317,9 +317,7 @@ class BxBaseMenu extends BxDolMenu
 
 
         if ($this->_bIsApi) {
         if ($this->_bIsApi) {
             list ($sIcon, $sIconUrl, $sIconA, $sIconHtml) = $this->_getMenuIcon($a);
             list ($sIcon, $sIconUrl, $sIconA, $sIconHtml) = $this->_getMenuIcon($a);
-if($this->_sObject == 'sys_site') {
-    var_dump($a); exit;
-}
+
             $aResult = [
             $aResult = [
                 'id' => $a['id'],
                 'id' => $a['id'],
                 'name' => $a['name'],
                 'name' => $a['name'],
@@ -336,6 +334,12 @@ if($this->_sObject == 'sys_site') {
                 'primary' => isset($a['primary']) ? $a['primary'] : 0,
                 'primary' => isset($a['primary']) ? $a['primary'] : 0,
                 'persistent' => isset($a['persistent']) ? $a['persistent'] : 0,
                 'persistent' => isset($a['persistent']) ? $a['persistent'] : 0,
             ];
             ];
+            
+            if(!empty($a['onclick']))
+                $aResult = array_merge($aResult, [
+                    'display_type' => 'callback',
+                    'data' => $this->_getMenuCallbackDataAPI($a)
+                ]);
 
 
             $this->_updateVisibilityParamsAPI($aResult);
             $this->_updateVisibilityParamsAPI($aResult);
 
 
@@ -524,6 +528,11 @@ if($this->_sObject == 'sys_site') {
         return bx_html_attribute(strip_tags(!empty($a['title_attr']) && ($sTitleAttr = _t($a['title_attr'])) ? $sTitleAttr : $a['title']));
         return bx_html_attribute(strip_tags(!empty($a['title_attr']) && ($sTitleAttr = _t($a['title_attr'])) ? $sTitleAttr : $a['title']));
     }
     }
 
 
+    protected function _getMenuCallbackDataAPI($a)
+    {
+        return [];
+    }
+
     public function getMenuIconHtml($sIcon)
     public function getMenuIconHtml($sIcon)
     {
     {
         list ($sIcon, $sIconUrl, $sIconA, $sIconHtml) = BxTemplFunctions::getInstanceWithTemplate($this->_oTemplate)->getIcon($sIcon);
         list ($sIcon, $sIconUrl, $sIconA, $sIconHtml) = BxTemplFunctions::getInstanceWithTemplate($this->_oTemplate)->getIcon($sIcon);