diff --git a/module/group/control.php b/module/group/control.php index 3fa00eb24f..d04307f0e9 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -293,14 +293,14 @@ class group extends control } } - $relatedPrivData = $this->group->getDependentPrivs($selectedPrivIdList); + $relatedPrivData = $this->group->getRelatedPrivs($selectedPrivIdList); $this->view->privList = $privList; $this->view->privMethods = $privMethods; $this->view->selectPrivs = $selectPrivs; $this->view->privPackages = $privPackages; $this->view->selectedPrivIdList = $selectedPrivIdList; - $this->view->relatedPrivData = json_encode($relatedPrivData); + $this->view->relatedPrivData = $relatedPrivData; } elseif($type == 'byModule') { @@ -1059,9 +1059,10 @@ class group extends control * @access public * @return bool */ - public function ajaxGetDependentPrivs($privIdList) + public function ajaxGetRelatedPrivs() { - $privList = $this->group->getDependentPrivs($privIdList); + $privIdList = zget($_POST, 'privList'); + $privList = $this->group->getRelatedPrivs($privIdList); return print(json_encode($privList)); } } diff --git a/module/group/css/managepriv.css b/module/group/css/managepriv.css index eafe70511d..76f745e3d6 100644 --- a/module/group/css/managepriv.css +++ b/module/group/css/managepriv.css @@ -1,4 +1,4 @@ -.mt-m {margin-top: 16px;} +.priv-panel:not(.hidden) + .mt-m {margin-top: 16px;} .flex-center {display: flex; justify-content: center; align-items: center;} #mainContainer {display: flex; gap: 16px; height: calc(100vh - 165px);} #mainContainer > .main {flex: 1 1 75%; overflow-y: auto; min-height: 445px;} @@ -45,7 +45,7 @@ td.menus + td {border-left: 0;} #privList .group-item .checkbox-inline label {padding-left: 3px;} #privList.table-bordered td, #privList.table-bordered th {border-top-style: dashed; border-bottom-style: dashed; border-color: #FFF;} #privList .check-all>label.checkbox-indeterminate-block:before {content: ' '; opacity: 1; transform: scale(1);} -.priv-footer {padding: 14px; z-index: 3; box-shadow: inset 0 0px 0px rgb(0 0 0 / 10%), 0 0 5px rgb(0 0 0 / 10%); position: relative; min-height: 40px; background: #fff; border-radius: 0 0 4px 4px;} +.priv-footer {padding: 14px; z-index: 11; box-shadow: inset 0 0px 0px rgb(0 0 0 / 10%), 0 0 5px rgb(0 0 0 / 10%); position: relative; min-height: 40px; background: #fff; border-radius: 0 0 4px 4px;} .priv-footer .btn {margin 0px; padding-top: 7px;} .priv-footer .check-all {display: inline-block;} .priv-footer .check-all label {padding-left: 0px; margin-bottom: 0px; font-weight: 400;} diff --git a/module/group/js/managepriv.js b/module/group/js/managepriv.js index e760758462..7d06dcc8e5 100644 --- a/module/group/js/managepriv.js +++ b/module/group/js/managepriv.js @@ -127,6 +127,7 @@ function initRecomendTree(data) itemCreator: function($li, item) { $li.append('' + item.title + (item.children ? '' : '') + ''); + // $li.append(' 0) - { - $('.side .menuTree.depend').empty(); - $('.side .menuTree.depend').closest('.priv-panel').hide(); - } - else - { - $(".menuTree.depend").data('zui.tree').reload(data.depend); - $('.side .menuTree.depend').closest('.priv-panel').show(); - } + if(data.recommend == undefined || data.recommend.length == 0) + { + $('.side .menuTree.recommend').empty(); + $('.side .menuTree.recommend').closest('.priv-panel').addClass('hidden'); + } + else + { + $(".menuTree.recommend").data('zui.tree').reload(data.recommend); + $('.side .menuTree.recommend').closest('.priv-panel').removeClass('hidden'); + } - if(data.recommend == undefined || data.recommend.length > 0) - { - $('.side .menuTree.recommend').empty(); - $('.side .menuTree.recommend').closest('.priv-panel').hide(); + resizeContainer(); } - else - { - $(".menuTree.recommend").data('zui.tree').reload(data.recommend); - $('.side .menuTree.recommend').closest('.priv-panel').show(); - } - - resizeContainer(); }); } @@ -213,7 +219,6 @@ function checkAllChange() if(checked) $('input[type=checkbox]').attr('checked', checked); if(!checked) $('input[type=checkbox]').removeAttr('checked'); $('#privList tbody .checkbox-indeterminate-block').removeClass('checkbox-indeterminate-block'); - $('.side .menuTree').empty(); } else { @@ -228,9 +233,8 @@ function checkAllChange() if(!checked) $children.find('input[type=checkbox]').removeAttr('checked'); changeParentChecked($(this), moduleName, packageID); - - updatePrivTree(null); } + updatePrivTree(null); } /** @@ -245,13 +249,13 @@ function resizeContainer() { $('#mainContainer > .main').css('flex', '1 1 100%'); $('#mainContainer > .side').css('flex', '1 1 0%'); - $('#mainContainer > .side').hide(); + $('#mainContainer > .side').addClass('hidden'); } else { $('#mainContainer > .main').css('flex', '1 1 75%'); $('#mainContainer > .side').css('flex', '1 1 25%'); - $('#mainContainer > .side').show(); + $('#mainContainer > .side').removeClass('hidden'); } } @@ -261,9 +265,9 @@ $(function() relatedPrivData = $.parseJSON(relatedPrivData); initDependTree(relatedPrivData.depend); - if(relatedPrivData.depend == undefined || relatedPrivData.depend == 0) $(".menuTree.depend").closest('.priv-panel').hide(); + if(relatedPrivData.depend == undefined || relatedPrivData.depend == 0) $(".menuTree.depend").closest('.priv-panel').addClass('hidden'); initRecomendTree(relatedPrivData.recommend); - if(relatedPrivData.recommend == undefined || relatedPrivData.recommend == 0) $(".menuTree.recommend").closest('.priv-panel').hide(); + if(relatedPrivData.recommend == undefined || relatedPrivData.recommend == 0) $(".menuTree.recommend").closest('.priv-panel').addClass('hidden'); resizeContainer(); diff --git a/module/group/model.php b/module/group/model.php index c55a20e3bc..720e959024 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -2060,43 +2060,43 @@ class groupModel extends model } /** - * Get dependent privs. + * Get related privs. * * @param array $privIdList * @access public * @return array */ - public function getDependentPrivs($privIdList) + public function getRelatedPrivs($privIdList, $type = '') { - $relatedPrivs = $this->dao->select('t1.relationPriv,t2.parent,t2.module,t2.method,t3.`key`,t3.value')->from(TABLE_PRIVRELATION)->alias('t1') + $relatedPrivs = $this->dao->select('t1.relationPriv,t1.type,t2.parent,t2.module,t2.method,t3.`key`,t3.value')->from(TABLE_PRIVRELATION)->alias('t1') ->leftJoin(TABLE_PRIV)->alias('t2')->on('t1.relationPriv=t2.id') ->leftJoin(TABLE_PRIVLANG)->alias('t3')->on('t1.relationPriv=t3.objectID') - ->leftJoin(TABLE_PRIVMANAGER)->alias('t4')->on('t2.parent=t4.id') ->where('t1.priv')->in($privIdList) ->andWhere('t1.relationPriv')->notin($privIdList) - ->andWhere('t1.type')->eq('depend') + ->beginIF(!empty($type))->andWhere('t1.type')->eq($type)->fi() ->andWhere('t3.objectType')->eq('priv') ->andWhere('t2.edition')->like("%,{$this->config->edition},%") ->andWhere('t2.vision')->like("%,{$this->config->vision},%") ->fetchAll('relationPriv'); - if(empty($relatedPrivs)) return array(); + $privList = empty($type) ? array('depend' => array(), 'recommend' => array()) : array($type => array()); + if(empty($relatedPrivs)) return $privList; $modulePairs = $this->getPrivManagerPairs('module'); $managerList = $this->dao->select('*')->from(TABLE_PRIVMANAGER)->fetchAll('id'); $relatedPrivs = $this->transformPrivLang($relatedPrivs); - $privList = array('depend' => array(), 'recommend' => array()); foreach($relatedPrivs as $privID => $relatedPriv) { $module = $relatedPriv->module; - if(!isset($privList['depend'][$module])) $privList['depend'][$module] = array(); + if(!isset($privList[$relatedPriv->type][$module])) $privList[$relatedPriv->type][$module] = array(); $moduleCode = $managerList[$relatedPriv->parent]->type == 'package' ? $managerList[$managerList[$relatedPriv->parent]->parent]->code : $managerList[$relatedPriv->parent]->code; - $privList['depend'][$module]['title'] = $modulePairs[$module]; - $privList['depend'][$module]['children'][] = array('title' => $relatedPriv->name, 'relationPriv' => $privID); + $privList[$relatedPriv->type][$module]['title'] = $modulePairs[$module]; + $privList[$relatedPriv->type][$module]['children'][] = array('title' => $relatedPriv->name, 'relationPriv' => $privID); } - $privList['depend'] = array_values($privList['depend']); + if(empty($type) or $type == 'depend') $privList['depend'] = array_values($privList['depend']); + if(empty($type) or $type == 'recommend') $privList['recommend'] = array_values($privList['recommend']); return $privList; } diff --git a/module/group/view/privbygroup.html.php b/module/group/view/privbygroup.html.php index 8021e3f051..4c9e2e3fea 100644 --- a/module/group/view/privbygroup.html.php +++ b/module/group/view/privbygroup.html.php @@ -160,7 +160,7 @@