Procházet zdrojové kódy

Ticket #4135 - Permissions in Studio doesn't allow to edit action's options.

AntonLV před 3 roky
rodič
revize
0eef826e3a

+ 2 - 1
modules/boonex/english/data/langs/system/en.xml

@@ -1370,7 +1370,8 @@
         <string name="_adm_prm_dsc_level_password_expired_notify"><![CDATA[The period for which the notification of an expired password will be sent, in days (0 - unlimited).]]></string>    
 	<string name="_adm_prm_dsc_level_quota_size"><![CDATA[Limit how much space can be used by user with this level across all modules (0 - unlimited).]]></string>
 	<string name="_adm_prm_dsc_price_add_days"><![CDATA[Use 0 for life-time]]></string>
-	<string name="_adm_prm_err_level_create"><![CDATA[Cannot create membership level]]></string>
+	<string name="_adm_prm_err_action_edit"><![CDATA[Cannot update membership action's options]]></string>
+        <string name="_adm_prm_err_level_create"><![CDATA[Cannot create membership level]]></string>
 	<string name="_adm_prm_err_level_delete"><![CDATA[Cannot delete membership level]]></string>
 	<string name="_adm_prm_err_level_edit"><![CDATA[Cannot update membership level]]></string>
 	<string name="_adm_prm_err_level_icon"><![CDATA[You need to enter font icon name here.]]></string>

+ 1 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -1353,6 +1353,7 @@
 	<string name="_adm_prm_dsc_level_quota_number"><![CDATA[Ограничить количество файлов для пользователей данного членства (0 - без ограничений).]]></string>
 	<string name="_adm_prm_dsc_level_quota_size"><![CDATA[Ограничить дисковое пространство для пользователей данного членства во всех модулях (0 - без ограничений).]]></string>
 	<string name="_adm_prm_dsc_price_add_days"><![CDATA[Используйте 0 для отсутствия ограничений]]></string>
+        <string name="_adm_prm_err_action_edit"><![CDATA[Невозможно обновить параметры действия членства]]></string>
 	<string name="_adm_prm_err_level_create"><![CDATA[Невозможно создать членство]]></string>
 	<string name="_adm_prm_err_level_delete"><![CDATA[Невозможно удалить членство]]></string>
 	<string name="_adm_prm_err_level_edit"><![CDATA[Невозможно обновить членство]]></string>

+ 28 - 12
studio/classes/BxDolStudioPermissionsActions.php

@@ -9,7 +9,8 @@
 
 class BxDolStudioPermissionsActions extends BxTemplStudioGrid
 {
-    protected $iLevel = 0;
+    protected $iLevel;
+    protected $sModule;
 
     public function __construct ($aOptions, $oTemplate = false)
     {
@@ -17,11 +18,28 @@ class BxDolStudioPermissionsActions extends BxTemplStudioGrid
 
         $this->oDb = new BxDolStudioPermissionsQuery();
 
-        $iLevel = (int)bx_get('level');
-        if($iLevel > 0)
-            $this->iLevel = $iLevel;
+        $this->iLevel = 0;
+        if(($iLevel = bx_get('level')) !== false) {
+            $this->iLevel = (int)$iLevel;
+            $this->_aQueryAppend['level'] = $this->iLevel;
+        }
 
-        $this->_aQueryAppend['level'] = $this->iLevel;
+        $this->sModule = '';
+        if(($sModule = bx_get('module')) !== false) {
+            $this->sModule = bx_process_input($sModule);
+            $this->_aQueryAppend['module'] = $this->sModule;
+        }
+
+        if(($sFilter = bx_get('filter')) !== false)
+            $this->_processFilter($sFilter);
+    }
+
+    protected function _processFilter($sFilter)
+    {
+        if(strpos($sFilter, $this->sParamsDivider) !== false)
+            list($this->sModule, $sFilter) = explode($this->sParamsDivider, $sFilter);
+        
+        return $sFilter;
     }
 
     protected function _isRowDisabled($aRow)
@@ -32,19 +50,17 @@ class BxDolStudioPermissionsActions extends BxTemplStudioGrid
     protected function _getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)
     {
         if(empty($this->iLevel))
-            return array();
+            return [];
 
-        $sModule = '';
-        if(strpos($sFilter, $this->sParamsDivider) !== false)
-            list($sModule, $sFilter) = explode($this->sParamsDivider, $sFilter);
+        $sFilter = $this->_processFilter($sFilter);
 
-        if($sModule != '')
-            $this->_aOptions['source'] .= $this->oDb->prepareAsString(" AND `Module`=?", $sModule);
+        if($this->sModule != '')
+            $this->_aOptions['source'] .= $this->oDb->prepareAsString(" AND `Module`=?", $this->sModule);
 
         $this->_aOptions['source'] .= $this->oDb->prepareAsString(" AND (`DisabledForLevels`='0' OR `DisabledForLevels`&?=0)", pow(2, ($this->iLevel - 1)));
         $aActions = parent::_getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage);
 
-        $aActionsActive = array();
+        $aActionsActive = [];
         $iActionsActive = $this->oDb->getActions(array('type' => 'by_level_id_key_id', 'value' => $this->iLevel), $aActionsActive);
 
         foreach($aActions as $iKey => $aAction)

+ 30 - 21
studio/template/scripts/BxBaseStudioPermissionsActions.php

@@ -44,38 +44,41 @@ class BxBaseStudioPermissionsActions extends BxDolStudioPermissionsActions
 
     public function performActionOptions()
     {
+        $sAction = 'options';
+
         if((int)$this->iLevel == 0)
             $this->iLevel = (int)bx_get('IDLevel');
 
         $aIds = bx_get('ids');
-        if(!$aIds || !is_array($aIds)) {
+        if(empty($aIds) || !is_array($aIds)) {
             $iId = (int)bx_get('IDAction');
-            if(!$iId) {
-                echoJson(array());
-                exit;
-            }
+            if(!$iId)
+                return echoJson([]);
 
-            $aIds = array($iId);
+            $aIds = [$iId];
         }
 
-        $sAction = 'options';
-        $iId = $aIds[0];
-        if(strpos($iId, $this->sParamsDivider) !== false)
-            list($this->iLevel, $iId) = explode($this->sParamsDivider, urldecode($iId));
+        $sId = array_shift($aIds);
+        if(strpos($sId, $this->sParamsDivider) !== false)
+            list($this->iLevel, $iId) = explode($this->sParamsDivider, urldecode($sId));
+        else
+            $iId = $sId;
 
-        $aOption = array();
+        $aOption = [];
         $iOption = $this->oDb->getOptions(array('type' => 'by_level_action_ids', 'level_id' => $this->iLevel, 'action_id' => $iId), $aOption);
-        if($iOption != 1 || empty($aOption)) {
-            echoJson(array());
-            exit;
-        }
+        if($iOption != 1 || empty($aOption))
+            return echoJson([]);
 
         bx_import('BxTemplStudioFormView');
 
+        $aActionParams = ['o' => $this->_sObject, 'a' => $sAction, 'level' => $this->iLevel];
+        if(!empty($this->sModule))
+            $aActionParams['module'] = $this->sModule;
+
         $aForm = array(
             'form_attrs' => array(
                 'id' => 'adm-prm-action-options',
-                'action' => BX_DOL_URL_ROOT . 'grid.php?o=' . $this->_sObject . '&a=' . $sAction,
+                'action' => BX_DOL_URL_ROOT . bx_append_url_params('grid.php', $aActionParams),
                 'method' => BX_DOL_STUDIO_METHOD_DEFAULT
             ),
             'params' => array (
@@ -178,7 +181,7 @@ class BxBaseStudioPermissionsActions extends BxDolStudioPermissionsActions
         $oForm->initChecker();
 
         if($oForm->isSubmittedAndValid()) {
-            $aUpdate = array();
+            $aUpdate = [];
             foreach($aForm['inputs'] as $sName => $aInput) {
                 if(in_array($aInput['type'], array('hidden', 'input_set')))
                     continue;
@@ -187,17 +190,23 @@ class BxBaseStudioPermissionsActions extends BxDolStudioPermissionsActions
                 if(empty($aUpdate[$sName]))
                     $aUpdate[$sName] = null;
             }
-            $this->oDb->updateOptions((int)$oForm->getCleanValue('IDLevel'), (int)$oForm->getCleanValue('IDAction'), $aUpdate);
+
+            if($this->oDb->updateOptions((int)$oForm->getCleanValue('IDLevel'), (int)$oForm->getCleanValue('IDAction'), $aUpdate))
+                $aRes = ['grid' => $this->getCode(false), 'blink' => $sId];
+            else
+                $aRes = ['msg' => _t('_adm_prm_err_action_edit')];
+
+            echoJson($aRes);
         }
         else {
-            $sContent = BxTemplStudioFunctions::getInstance()->popupBox('adm-prm-action-options-popup', _t('_adm_prm_txt_actions_options_popup', _t($aOption['action_title'])), $this->_oTemplate->parseHtmlByName('prm_edit_option.html', array(
+            $sContent = BxTemplStudioFunctions::getInstance()->popupBox('adm-prm-action-options-popup', _t('_adm_prm_txt_actions_options_popup', _t($aOption['action_title'])), $this->_oTemplate->parseHtmlByName('prm_edit_option.html', [
                 'form_id' => $aForm['form_attrs']['id'],
                 'form' => $oForm->getCode(true),
                 'object' => $this->_sObject,
                 'action' => $sAction
-            )));
+            ]));
 
-            echoJson(array('popup' => array('html' => $sContent, 'options' => array('closeOnOuterClick' => false))));
+            echoJson(['popup' => ['html' => $sContent, 'options' => ['closeOnOuterClick' => false]]]);
         }
     }