diff --git a/module/group/control.php b/module/group/control.php index 79f62777b7..3fa00eb24f 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -295,11 +295,12 @@ class group extends control $relatedPrivData = $this->group->getDependentPrivs($selectedPrivIdList); - $this->view->privList = $privList; - $this->view->privMethods = $privMethods; - $this->view->selectPrivs = $selectPrivs; - $this->view->privPackages = $privPackages; - $this->view->relatedPrivData = json_encode($relatedPrivData); + $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); } elseif($type == 'byModule') { @@ -1060,37 +1061,7 @@ class group extends control */ public function ajaxGetDependentPrivs($privIdList) { - $relatedPrivs = $this->dao->select('t1.relationPriv,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('t2.relationPriv=t3.objectID') - ->leftJoin(TABLE_PRIVMANAGER)->alias('t4')->on('t2.parent=t4.id') - ->where('t1.priv')->in($privIdList) - ->andWhere('t1.relationPriv')->notin($privIdList) - ->andWhere('t2.type')->eq('depend') - ->andWhere('t3.objectType')->eq('priv') - ->andWhere('t1.edition')->like("%,{$this->config->edition},%") - ->andWhere('t1.vision')->like("%,{$this->config->vision},%") - ->fetchAll('relationPriv'); - - if(empty($relatedPrivs)) return print(''); - - $modulePairs = $this->group->getPrivManagerPairs('module'); - $managerList = $this->dao->select('*')->from(TABLE_PRIVMANAGER)->fetchAll('id'); - $relatedPrivs = $this->group->transformPrivLang($relatedPrivs); - $privList = array('depend' => array(), 'recommend' => array()); - - foreach($relatedPrivs as $privID => $relatedPriv) - { - $module = $relatedPriv->module; - if(!isset($privList['depend'][$module])) $privList[$type][$module] = array(); - $moduleCode = $managerList[$relatedPriv->parent]->type == 'package' ? $managerList[$managerList[$relatedPriv->parent]->parent]->code : $managerList[$relatedPriv->parent]->code; - $privList['depend'][$module]['title'] = $modulePairs[$moduleCode]; - $privList['depend'][$module]['module'] = $moduleCode; - $privList['depend'][$module]['children'][] = array('title' => $relatedPriv->name, 'relationPriv' => $privID); - } - - $privList['depend'] = array_values($privList[$type]); - + $privList = $this->group->getDependentPrivs($privIdList); return print(json_encode($privList)); } } diff --git a/module/group/css/managepriv.css b/module/group/css/managepriv.css index e664a18c19..eafe70511d 100644 --- a/module/group/css/managepriv.css +++ b/module/group/css/managepriv.css @@ -33,8 +33,8 @@ td.menus + td {border-left: 0;} #mainContent .main-content {padding: 2px;} #privList .table-bordered th {border: 1px solid #FFF;} -#privList th.module {width: 142px; min-width: 142px; background-color: #EDEEF2CC; font-weight: 600;} -#privList th.package {width: 142px; min-width: 142px; background-color: #F4F5F7; font-weight: 600;} +#privList th.module {width: 142px; min-width: 142px; background-color: #EDEEF28C; font-weight: 600;} +#privList th.package {width: 142px; min-width: 142px; background-color: #F4F5F78C; font-weight: 600;} #privList th.method {min-width: 585px;} #privList th .checkbox-inline input {margin-left: 0px;} #privList .check-all {display: inline-block;} @@ -43,7 +43,7 @@ td.menus + td {border-left: 0;} #privList tbody > tr > td {padding: 4px 20px 20px 20px;} #privList .group-item {margin-top: 16px;} #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;} +#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 .btn {margin 0px; padding-top: 7px;} diff --git a/module/group/js/managepriv.js b/module/group/js/managepriv.js index f9e934b730..bf613ade29 100644 --- a/module/group/js/managepriv.js +++ b/module/group/js/managepriv.js @@ -160,78 +160,44 @@ function initDependTree(data) * @access public * @return void */ -function updatePrivTree(objTree) +function updatePrivTree(privList) { - $(".menuTree.depend").data('zui.tree').reload(objTree.dependData || [] ); - if(objTree.dependData && objTree.dependData.length) + if(privList == null) { - $(".menuTree.depend + .empty-tip").addClass('hidden'); - - var privCount = 0; - $.each(objTree.dependData, function(index, item){if(item.children) privCount += item.children.length;}); - $(".menuTree.depend").closest('.priv-panel').find('.panel-title .priv-count').html('(' + privCount + ')'); - } - else - { - $(".menuTree.depend + .empty-tip").removeClass('hidden'); - $(".menuTree.depend").closest('.priv-panel').find('.panel-title .priv-count').html(''); - } - $(".menuTree.recommend").data('zui.tree').reload(objTree.recommendData || []); - if(objTree.recommendData && objTree.recommendData.length) - { - $(".menuTree.recommend + .empty-tip").addClass('hidden'); - - var privCount = 0; - $.each(objTree.recommendData, function(index, item){if(item.children) privCount += item.children.length;}); - $(".menuTree.recommend").closest('.priv-panel').find('.panel-title .priv-count').html('(' + privCount + ')'); - } - else - { - $(".menuTree.recommend + .empty-tip").removeClass('hidden'); - $(".menuTree.recommend").closest('.priv-panel').find('.panel-title .priv-count').html(''); - } - if(!canDeleteRelation) $('.side a.priv-item .icon-close').remove(); -} - -/** - * Get relation side. - * - * @param int $privID - * @access public - * @return void - */ -function getSideRelation(privID) -{ - $.get(createLink('group', 'ajaxGetPrivRelations', "privID=" + privID), function(data) - { - var objTree = {}; - if(data) + privList = new Array(); + $('#privList .group-item input:checked').each(function() { - var relatedPriv = JSON.parse(data); - objTree.dependData = relatedPriv.depend; - objTree.recommendData = relatedPriv.recommend; + privList.push($(this).closest('.group-item').attr('data-id')); + }); + } + + $.get(createLink('group', 'ajaxGetDependentPrivs', 'privList=' + privList.toString()), function(data) + { + data = $.parseJSON(data); + + if(data.depend == undefined || data.recommend.length > 0) + { + $('.side .menuTree.depend').empty(); + $('.side .menuTree.depend').siblings('.empty-tip').show(); + } + else + { + $(".menuTree.depend").data('zui.tree').reload(data.depend); + $('.side .menuTree.depend').siblings('.empty-tip').hide(); } - updatePrivTree(objTree); - }) -} -/** - * Update depend and recommend privs. - * - * @param e $e - * @access public - * @return void - */ -function updateRelations(e) -{ - if($('.bg-primary-pale').length) $('.bg-primary-pale').removeClass('bg-primary-pale'); - $('#privListTable').length > 0 ? $(e.target).closest('tr').addClass('bg-primary-pale') : $(e.target).addClass('bg-primary-pale'); + if(data.recommend == undefined || data.recommend.length > 0) + { + $('.side .menuTree.recommend').empty(); + $('.side .menuTree.recommend').siblings('.empty-tip').show(); + } + else + { + $(".menuTree.recommend").data('zui.tree').reload(data.recommend); + $('.side .menuTree.recommend').siblings('.empty-tip').hide(); + } - var selectedID = $('#privListTable').length == 0 ? $(e.target).siblings('input:checkbox').data('id') : $(e.target).closest('tr').attr('data-id'); - $('.side a#addDependent').attr('href', createLink('group', 'addRelation', "privIdList=" + selectedID + '&type=depend')).removeAttr('disabled'); - $('.side a#addRecommendation').attr('href', createLink('group', 'addRelation', "privIdList=" + selectedID + '&type=recommend')).removeAttr('disabled'); - if(!$('.side a#addDependent').hasClass('modaled')) $('.side a#addDependent,.side a#addRecommendation').modal().addClass('modaled'); - getSideRelation(selectedID); + }); } function checkAllChange() @@ -245,7 +211,9 @@ function checkAllChange() if(checked) $('input[type=checkbox]').attr('checked', checked); if(!checked) $('input[type=checkbox]').removeAttr('checked'); - $(this).closest('.priv-footer').siblings('#mainContent').find('#privList tbody .checkbox-indeterminate-block').removeClass('checkbox-indeterminate-block'); + $('#privList tbody .checkbox-indeterminate-block').removeClass('checkbox-indeterminate-block'); + $('.side .menuTree').empty(); + $('.side .empty-tip').show(); } else { @@ -260,11 +228,15 @@ function checkAllChange() if(!checked) $children.find('input[type=checkbox]').removeAttr('checked'); changeParentChecked($(this), moduleName, packageID); + + updatePrivTree(null); } } $(function() { + selectedPrivIdList = Object.values(selectedPrivIdList); + relatedPrivData = $.parseJSON(relatedPrivData); initDependTree(relatedPrivData.depend); if(relatedPrivData.depend) $(".menuTree.depend + .empty-tip").hide(); @@ -288,6 +260,17 @@ $(function() var moduleName = $(this).closest('.group-item').attr('data-module'); var packageID = $(this).closest('.group-item').attr('data-package'); changeParentChecked($(this), moduleName, packageID); + + var privID = $(this).closest('.group-item').attr('data-id'); + if(privID != 0) + { + var index = selectedPrivIdList.indexOf(privID); + + if(privID > 0 && index < 0 && checked) selectedPrivIdList.push(privID); + if(privID > 0 && index > -1 && !checked) selectedPrivIdList.splice(index, 1); + + updatePrivTree(selectedPrivIdList); + } }); $('#submit').click(function() diff --git a/module/group/view/privbygroup.html.php b/module/group/view/privbygroup.html.php index 7aa2bf6c5e..aebd3945f6 100644 --- a/module/group/view/privbygroup.html.php +++ b/module/group/view/privbygroup.html.php @@ -145,7 +145,7 @@ $priv):?> -
+
'>
module]", array($priv->method => $priv->name), isset($groupPrivs[$priv->module][$priv->method]) ? $priv->method : '', "title='{$priv->name}' id='actions[$priv->module]$priv->method' data-id='$privID'");?>
@@ -202,6 +202,7 @@ +