* Merge 18 version code for group module.
This commit is contained in:
@@ -205,7 +205,7 @@ class group extends control
|
||||
}
|
||||
|
||||
if($type == 'byGroup' || $type == 'byPackage') $this->groupZen->managePrivByGroup($groupID, $nav, $version);
|
||||
if($type == 'byModule') $this->groupZen->managePrivByModule($groupID, $nav, $version);
|
||||
if($type == 'byModule') $this->groupZen->managePrivByModule();
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
@@ -321,28 +321,27 @@ function positionBtn()
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
window.setModulePackages = function()
|
||||
window.setSubsetPackages = function()
|
||||
{
|
||||
const module = $(this).val();
|
||||
let subset = $(this).val();
|
||||
$('#packageBox select').addClass('hidden'); // Hide all select first.
|
||||
$('#packageBox select').val(''); // Unselect all select.
|
||||
$("select[data-module='" + module + "']").removeClass('hidden'); // Show the action control for current module.
|
||||
$("select[data-module='" + subset + "']").removeClass('hidden'); // Show the action control for current module.
|
||||
|
||||
updatePrivList('module', module);
|
||||
updatePrivList(subset, '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the action box when module or package selected.
|
||||
* Update the action box when subset or package selected.
|
||||
*
|
||||
* @param string parentType module|package
|
||||
* @param string parentList
|
||||
* @param string selectedSubset
|
||||
* @param string selectedPackages
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function updatePrivList(parentType, parentList)
|
||||
function updatePrivList(selectedSubset, selectedPackages)
|
||||
{
|
||||
const selectedModule = $('#module').val();
|
||||
$.get($.createLink('group', 'ajaxGetPrivByParents', 'module=' + selectedModule + '&parentType=' + parentType + '&parentList=' + parentList), function(data)
|
||||
$.get($.createLink('group', 'ajaxGetPrivByParents', 'subset=' + selectedSubset + '&packages=' + selectedPackages), function(data)
|
||||
{
|
||||
$('#actions').replaceWith(data);
|
||||
})
|
||||
@@ -358,10 +357,10 @@ function setActions()
|
||||
{
|
||||
$('#actionBox select').val('');
|
||||
|
||||
var hasSelectedPackage = ',' + $('#packageBox select').not('.hidden').val().join(',') + ',';
|
||||
|
||||
updatePrivList('package', hasSelectedPackage);
|
||||
var selectedSubset = $('[name=module]').val();
|
||||
var selectedPackages = '|' + $('#packageBox select').not('.hidden').val().join('|') + '|';
|
||||
|
||||
updatePrivList(selectedSubset, selectedPackages);
|
||||
}
|
||||
|
||||
window.setNoChecked = function()
|
||||
@@ -411,12 +410,12 @@ function groupItemChange()
|
||||
changeParentChecked($(this), moduleName, packageID);
|
||||
|
||||
var privID = $(this).closest('.group-item').attr('data-id');
|
||||
if(privID != 0)
|
||||
if(privID)
|
||||
{
|
||||
var index = selectedPrivIdList.indexOf(privID);
|
||||
|
||||
if(privID > 0 && index < 0 && checked) selectedPrivIdList.push(privID);
|
||||
if(privID > 0 && index > -1 && !checked) selectedPrivIdList.splice(index, 1);
|
||||
if(index < 0 && checked) selectedPrivIdList.push(privID);
|
||||
if(index > -1 && !checked) selectedPrivIdList.splice(index, 1);
|
||||
|
||||
updatePrivTree(selectedPrivIdList);
|
||||
}
|
||||
@@ -469,7 +468,7 @@ function recommendChange($item, checked)
|
||||
$parentItem.closest('.checkbox-primary').find('label').addClass('checkbox-indeterminate-block');
|
||||
}
|
||||
|
||||
var privID = $item.attr('module') + '-' + $item.attr('method');
|
||||
var privID = $item.attr('data-id');
|
||||
if(privID)
|
||||
{
|
||||
var index = selectedPrivIdList.indexOf(privID);
|
||||
|
||||
@@ -632,7 +632,7 @@ $lang->resource->productplan->batchUnlinkStory = 'batchUnlinkStory';
|
||||
$lang->resource->productplan->linkBug = 'linkBug';
|
||||
$lang->resource->productplan->unlinkBug = 'unlinkBug';
|
||||
$lang->resource->productplan->batchUnlinkBug = 'batchUnlinkBug';
|
||||
$lang->resource->productplan->batchEdit = 'batchEditAction';
|
||||
$lang->resource->productplan->batchEdit = 'batchEdit';
|
||||
$lang->resource->productplan->start = 'start';
|
||||
$lang->resource->productplan->finish = 'finish';
|
||||
$lang->resource->productplan->close = 'close';
|
||||
|
||||
@@ -1849,7 +1849,9 @@ class groupModel extends model
|
||||
$this->app->loadLang($moduleName);
|
||||
if($moduleName == 'requirement') $this->app->loadLang('story');
|
||||
}
|
||||
$priv = (object)array('subset' => $packageData->subset, 'package' => $packageCode, 'module' => $moduleName, 'method' => $methodName, 'selected' => false, 'name' => $this->lang->$moduleName->$methodLang);
|
||||
|
||||
$privName = isset($this->lang->$moduleName) && isset($this->lang->$moduleName->$methodLang) ? $this->lang->$moduleName->$methodLang : $privCode;
|
||||
$priv = (object)array('subset' => $packageData->subset, 'package' => $packageCode, 'module' => $moduleName, 'method' => $methodName, 'selected' => false, 'name' => $privName);
|
||||
|
||||
$privList[$privCode] = $priv;
|
||||
}
|
||||
@@ -2516,7 +2518,7 @@ class groupModel extends model
|
||||
$method = $this->lang->resource->$moduleName->$methodName;
|
||||
|
||||
if(!isset($this->lang->$moduleName->$method)) $this->app->loadLang($moduleName);
|
||||
$subsetPrivs[$type][$subsetName]['children'][] = array('id' => $relatedPriv, 'module' => $moduleName, 'method' => $methodName, 'subset' => $subsetName, 'text' => $this->lang->$moduleName->$method);
|
||||
$subsetPrivs[$type][$subsetName]['children'][] = array('id' => $relatedPriv, 'data-module' => $moduleName, 'data-method' => $methodName, 'subset' => $subsetName, 'text' => $this->lang->$moduleName->$method, 'data-id' => $relatedPriv);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2582,16 +2584,16 @@ class groupModel extends model
|
||||
$subset = $packageData->subset;
|
||||
if($subset !== $selectedSubset) continue;
|
||||
|
||||
if($selectedPackages && strpos($selectedPackages, ",$packageCode,") === false) continue;
|
||||
if($selectedPackages && strpos($selectedPackages, "|$packageCode|") === false) continue;
|
||||
|
||||
$methodLang = $this->lang->resource->$moduleName->$methodName;
|
||||
if(!isset($this->lang->$moduleName->$methodLang)) $this->app->loadLang($moduleName);
|
||||
|
||||
$privs[$privCode] = $this->lang->$moduleName->$methodLang;
|
||||
$privs[$privCode] = isset($this->lang->$moduleName) && isset($this->lang->$moduleName->$methodLang) ? $this->lang->$moduleName->$methodLang : $privCode;
|
||||
}
|
||||
}
|
||||
|
||||
if(empty($selectedPackages) || strpos($selectedPackages, ',other,') !== false)
|
||||
if(empty($selectedPackages) || strpos($selectedPackages, '|other|') !== false)
|
||||
{
|
||||
/* Privs in resource but not in package. */
|
||||
$this->sortResource();
|
||||
@@ -2604,7 +2606,7 @@ class groupModel extends model
|
||||
if(isset($allPrivs["$module-$method"])) continue;
|
||||
|
||||
if(!isset($this->lang->$module->$methodLang)) $this->app->loadLang($module);
|
||||
$privs["$module-$method"] = $this->lang->$module->$methodLang;
|
||||
$privs["$module-$method"] = isset($this->lang->$module) && isset($this->lang->$module->$methodLang) ? $this->lang->$module->$methodLang : "$module-$method";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -783,10 +783,6 @@ $config->group->package->importRequirement->privs['requirement-export']
|
||||
$config->group->package->importRequirement->privs['requirement-import'] = array('edition' => 'max,ipd', 'vision' => 'rnd,or', 'order' => 115, 'depend' => array('product-requirement', 'requirement-exportTemplate'), 'recommend' => array());
|
||||
$config->group->package->importRequirement->privs['requirement-exportTemplate'] = array('edition' => 'max,ipd', 'vision' => 'rnd,or', 'order' => 120, 'depend' => array('product-requirement'), 'recommend' => array());
|
||||
|
||||
$config->group->package->deleteRequirement = new stdclass();
|
||||
$config->group->package->deleteRequirement->order = 25;
|
||||
$config->group->package->deleteRequirement->subset = 'requirement';
|
||||
|
||||
$config->group->package->reviewRequirement = new stdclass();
|
||||
$config->group->package->reviewRequirement->order = 15;
|
||||
$config->group->package->reviewRequirement->subset = 'requirement';
|
||||
@@ -2523,10 +2519,6 @@ $config->group->package->workflow->privs['workflow-setApproval'] = array('editio
|
||||
$config->group->package->workflow->privs['workflow-setJS'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 80, 'depend' => array('workflow-browseFlow'), 'recommend' => array());
|
||||
$config->group->package->workflow->privs['workflow-setCSS'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 85, 'depend' => array('workflow-browseFlow'), 'recommend' => array());
|
||||
|
||||
$config->group->package->downloadCode = new stdclass();
|
||||
$config->group->package->downloadCode->order = 10;
|
||||
$config->group->package->downloadCode->subset = 'repocode';
|
||||
|
||||
$config->group->package->dev = new stdclass();
|
||||
$config->group->package->dev->order = 5;
|
||||
$config->group->package->dev->subset = 'dev';
|
||||
@@ -2664,10 +2656,6 @@ $config->group->package->webhook->privs['webhook-log'] = array('edition'
|
||||
$config->group->package->webhook->privs['webhook-bind'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 30, 'depend' => array('webhook-chooseDept'), 'recommend' => array());
|
||||
$config->group->package->webhook->privs['webhook-chooseDept'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 35, 'depend' => array('webhook-browse'), 'recommend' => array('webhook-create', 'webhook-delete', 'webhook-edit'));
|
||||
|
||||
$config->group->package->gitlab = new stdclass();
|
||||
$config->group->package->gitlab->order = 10;
|
||||
$config->group->package->gitlab->subset = 'repo';
|
||||
|
||||
$config->group->package->sms = new stdclass();
|
||||
$config->group->package->sms->order = 20;
|
||||
$config->group->package->sms->subset = 'notifysetting';
|
||||
@@ -2777,10 +2765,6 @@ $config->group->package->chat->privs['client-create'] = array('edition'
|
||||
$config->group->package->chat->privs['client-edit'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 6, 'depend' => array('admin-xuanxuan'), 'recommend' => array());
|
||||
$config->group->package->chat->privs['client-delete'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 7, 'depend' => array('admin-xuanxuan'), 'recommend' => array());
|
||||
|
||||
$config->group->package->jenkins = new stdclass();
|
||||
$config->group->package->jenkins->order = 25;
|
||||
$config->group->package->jenkins->subset = 'repo';
|
||||
|
||||
$config->group->package->systemSetting = new stdclass();
|
||||
$config->group->package->systemSetting->order = 5;
|
||||
$config->group->package->systemSetting->subset = 'systemsetting';
|
||||
@@ -3061,10 +3045,6 @@ $config->group->package->measurement->privs['report-saveReport'] = arra
|
||||
$config->group->package->measurement->privs['report-crystalExport'] = array('edition' => 'max,ipd', 'vision' => 'rnd', 'order' => 22, 'depend' => array('measurement-template'), 'recommend' => array());
|
||||
$config->group->package->measurement->privs['report-export'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 25, 'depend' => array('measurement-template'), 'recommend' => array());
|
||||
|
||||
$config->group->package->usercl = new stdclass();
|
||||
$config->group->package->usercl->order = 25;
|
||||
$config->group->package->usercl->subset = 'featureconfig';
|
||||
|
||||
$config->group->package->meetingroom = new stdclass();
|
||||
$config->group->package->meetingroom->order = 30;
|
||||
$config->group->package->meetingroom->subset = 'featureconfig';
|
||||
@@ -3213,10 +3193,6 @@ $config->group->package->template->privs = array();
|
||||
$config->group->package->template->privs['user-setPublicTemplate'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite,or', 'order' => 10, 'depend' => array(), 'recommend' => array());
|
||||
$config->group->package->template->privs['datatable-setGlobal'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 5, 'depend' => array(), 'recommend' => array());
|
||||
|
||||
$config->group->package->table = new stdclass();
|
||||
$config->group->package->table->order = 5;
|
||||
$config->group->package->table->subset = 'datatable';
|
||||
|
||||
$config->group->package->automation = new stdclass();
|
||||
$config->group->package->automation->order = 5;
|
||||
$config->group->package->automation->subset = 'ci';
|
||||
@@ -3807,10 +3783,6 @@ $config->group->package->deletePrompt->subset = 'ai';
|
||||
$config->group->package->deletePrompt->privs = array();
|
||||
$config->group->package->deletePrompt->privs['ai-promptDelete'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 30, 'depend' => array('admin-index', 'ai-prompts', 'ai-promptView'), 'recommend' => array());
|
||||
|
||||
$config->group->package->resource = new stdclass();
|
||||
$config->group->package->resource->order = 2200;
|
||||
$config->group->package->resource->subset = 'ops';
|
||||
|
||||
$config->group->package->manageServiceProvider = new stdclass();
|
||||
$config->group->package->manageServiceProvider->order = 2300;
|
||||
$config->group->package->manageServiceProvider->subset = 'ops';
|
||||
|
||||
@@ -9,11 +9,11 @@ declare(strict_types=1);
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
namespace zin;
|
||||
jsVar('window.selectedPrivIdList', $selectedPrivIdList);
|
||||
jsVar('excludeIdList', $excludePrivsIdList);
|
||||
jsVar('window.selectedPrivIdList', $selectedPrivList);
|
||||
jsVar('allPrivList', $allPrivList);
|
||||
jsVar('groupID', $groupID);
|
||||
jsVar('type', $type);
|
||||
jsVar('menu', $menu);
|
||||
jsVar('nav', $nav);
|
||||
|
||||
if($group->role == 'limited')
|
||||
{
|
||||
@@ -89,11 +89,11 @@ if($group->role == 'limited')
|
||||
}
|
||||
else
|
||||
{
|
||||
$params = "type=byGroup¶m=$groupID&menu=%s&version=$version";
|
||||
$params = "type=byGroup¶m=$groupID&nav=%s&version=$version";
|
||||
$mainNavItems = null;
|
||||
$i = 0;
|
||||
$dropDownItems = array();
|
||||
foreach($lang->mainNav as $module => $title)
|
||||
foreach($lang->mainNav as $navKey => $title)
|
||||
{
|
||||
if(!is_string($title)) continue;
|
||||
|
||||
@@ -103,14 +103,14 @@ else
|
||||
$dropDownItems[] = array
|
||||
(
|
||||
'text' => strip_tags(substr($title, 0, strpos($title, '|'))),
|
||||
'url' => inlink('managePriv', sprintf($params, $module)),
|
||||
'class' => $menu == $module ? 'active' : ''
|
||||
'url' => inlink('managePriv', sprintf($params, $navKey)),
|
||||
'class' => $nav == $navKey ? 'active' : ''
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
foreach($lang->mainNav as $module => $title)
|
||||
foreach($lang->mainNav as $navKey => $title)
|
||||
{
|
||||
if(!is_string($title) || $i >= $config->group->maxToolBarCount) continue;
|
||||
|
||||
@@ -137,8 +137,8 @@ else
|
||||
setClass('nav-item'),
|
||||
a
|
||||
(
|
||||
setClass($menu == $module ? 'active' : ''),
|
||||
set::href(inlink('managePriv', sprintf($params, $module))),
|
||||
setClass($nav == $navKey ? 'active' : ''),
|
||||
set::href(inlink('managePriv', sprintf($params, $navKey))),
|
||||
strip_tags(substr($title, 0, strpos($title, '|')))
|
||||
)
|
||||
);
|
||||
@@ -172,7 +172,7 @@ else
|
||||
setclass('nav-item'),
|
||||
a
|
||||
(
|
||||
setclass(empty($menu) ? 'active' : ''),
|
||||
setclass(empty($nav) ? 'active' : ''),
|
||||
set::href(inlink('managepriv', sprintf($params, ''))),
|
||||
span($lang->group->all)
|
||||
)
|
||||
@@ -183,7 +183,7 @@ else
|
||||
setClass('nav-item'),
|
||||
a
|
||||
(
|
||||
setClass($menu == 'general' ? 'active' : ''),
|
||||
setClass($nav == 'general' ? 'active' : ''),
|
||||
set::href(inlink('managePriv', sprintf($params, 'general'))),
|
||||
span($lang->group->general)
|
||||
)
|
||||
@@ -200,19 +200,18 @@ else
|
||||
),
|
||||
);
|
||||
|
||||
$getMethodItems = function($privs, $moduleName, $packageID, $groupPrivs)
|
||||
$getMethodItems = function($package, $subsetName, $packageID, $groupPrivs)
|
||||
{
|
||||
$methodItems = array();
|
||||
foreach($privs as $privID => $priv)
|
||||
foreach($package->privs as $privID => $priv)
|
||||
{
|
||||
if(!empty($lang->$moduleName->menus) and ($priv->method == 'browse' or in_array($priv->method, array_keys($lang->$moduleName->menus)))) continue;
|
||||
$methodItems[] = div
|
||||
(
|
||||
setClass('group-item'),
|
||||
set('data-module', $moduleName),
|
||||
set('data-module', $subsetName),
|
||||
set('data-package', $packageID),
|
||||
set('data-divid', "{$moduleName}{$packageID}"),
|
||||
set('data-id', zget($priv, 'id', 0)),
|
||||
set('data-divid', "{$subsetName}{$packageID}"),
|
||||
set('data-id', $privID),
|
||||
checkbox
|
||||
(
|
||||
set::name("actions[{$priv->module}][]"),
|
||||
@@ -220,33 +219,42 @@ else
|
||||
set::checked(isset($groupPrivs[$priv->module][$priv->method])),
|
||||
setID("actions[{$priv->module}][{$priv->method}]"),
|
||||
set::text($priv->name),
|
||||
set('data-id', $priv->action),
|
||||
set('data-id', $privID),
|
||||
)
|
||||
);
|
||||
}
|
||||
return $methodItems;
|
||||
};
|
||||
|
||||
$privBody = null;
|
||||
foreach($privList as $moduleName => $packages)
|
||||
$dependTree = null;
|
||||
foreach($relatedPrivData['depend'] as $dependPrivs)
|
||||
{
|
||||
if(!count((array)$packages)) continue;
|
||||
$dependTree[] = checkboxGroup
|
||||
(
|
||||
set::title(array('text' => $dependPrivs['text'], 'id' => "dependPrivs[{$dependPrivs['id']}]", 'name' => 'dependPrivs[]', 'data-id' => $dependPrivs['id'], 'data-has-children' => !empty($dependPrivs['children']), 'disabled' => true, 'checked' => true)),
|
||||
!empty($dependPrivs['children']) ? set::items($dependPrivs['children']) : null,
|
||||
);
|
||||
}
|
||||
|
||||
$i = 1;
|
||||
$modulePrivs = count($privList[$moduleName], 1) - count($selectPrivs[$moduleName], 1);
|
||||
$moduleSelect = array_sum($selectPrivs[$moduleName]);
|
||||
foreach($packages as $packageID => $privs)
|
||||
$recommendTree = null;
|
||||
foreach($relatedPrivData['recommend'] as $recommendPrivs)
|
||||
{
|
||||
$recommendTree[] = checkboxGroup
|
||||
(
|
||||
set::title(array('text' => $recommendPrivs['text'], 'id' => "recommendPrivs[{$recommendPrivs['id']}]", 'name' => 'recommendPrivs[]', 'data-id' => $recommendPrivs['id'], 'data-has-children' => !empty($recommendPrivs['children']))),
|
||||
!empty($recommendPrivs['children']) ? set::items($recommendPrivs['children']) : null,
|
||||
);
|
||||
}
|
||||
|
||||
$privBody = null;
|
||||
foreach($subsets as $subsetName => $subset)
|
||||
{
|
||||
if($subset->allCount == 0) continue;
|
||||
|
||||
$i = 1;
|
||||
foreach($packages[$subsetName] as $packageID => $package)
|
||||
{
|
||||
$packagePrivs = count($privs);
|
||||
$packageSelect = $selectPrivs[$moduleName][$packageID];
|
||||
$moduleTitle = $lang->$moduleName->common;
|
||||
if(in_array($moduleName, array('doc', 'api'))) $moduleTitle = $lang->$moduleName->manage;
|
||||
|
||||
if(isset($lang->$moduleName->menus))
|
||||
{
|
||||
$menusPrivs = count($lang->$moduleName->menus);
|
||||
$menusSelect = count(array_intersect(array_keys($lang->$moduleName->menus), array_keys(zget($groupPrivs, $moduleName, array()))));
|
||||
}
|
||||
$subsetTitle = isset($lang->$subsetName) && isset($lang->$subsetName->common) ? $lang->$subsetName->common : $subsetName;
|
||||
|
||||
$privBody[] = h::tr
|
||||
(
|
||||
@@ -254,20 +262,20 @@ else
|
||||
$i == 1 ? h::th
|
||||
(
|
||||
setClass('text-middle text-left module'),
|
||||
set('rowspan', $i == 1 ? count($packages) : 1),
|
||||
set('data-module', $moduleName),
|
||||
set('all-privs', $moduleprivs),
|
||||
set('select-privs', $moduleSelect),
|
||||
set('rowspan', count($packages[$subsetName]) ? count($packages[$subsetName]) : 1),
|
||||
set('data-module', $subsetName),
|
||||
set('all-privs', $subset->allCount),
|
||||
set('select-privs', $subset->selectCount),
|
||||
div
|
||||
(
|
||||
setClass('checkbox-primary checkbox-inline checkbox-left check-all'),
|
||||
checkbox
|
||||
(
|
||||
setID("allChecker{$moduleName}"),
|
||||
setID("allChecker{$subsetName}"),
|
||||
set::value(1),
|
||||
set::checked(!empty($moduleSelect) && $modulePrivs == $moduleSelect),
|
||||
set::text($moduleTitle),
|
||||
set::labelClass(!empty($moduleSelect) && $modulePrivs != $moduleSelect ? 'text-left checkbox-indeterminate-block' : 'text-left'),
|
||||
set::checked($subset->selectCount && $subset->selectCount == $subset->allCount),
|
||||
set::text($subsetTitle),
|
||||
set::labelClass($subset->selectCount && $subset->selectCount != $subset->allCount ? 'text-left checkbox-indeterminate-block' : 'text-left'),
|
||||
)
|
||||
)
|
||||
) : null,
|
||||
@@ -275,58 +283,29 @@ else
|
||||
(
|
||||
setClass('text-middle text-left package'),
|
||||
setClass($i == 1 ? 'td-sm' : 'td-md'),
|
||||
set('data-module', $moduleName),
|
||||
set('data-module', $subsetName),
|
||||
set('data-package', $packageID),
|
||||
set('data-divid', "{$moduleName}{$packageID}"),
|
||||
set('all-privs', $packagePrivs),
|
||||
set('select-privs', $packageSelect),
|
||||
set('data-divid', "{$subsetName}{$packageID}"),
|
||||
set('all-privs', $package->allCount),
|
||||
set('select-privs', $package->selectCount),
|
||||
div
|
||||
(
|
||||
setClass('checkbox-primary checkbox-inline checkbox-left check-all'),
|
||||
checkbox
|
||||
(
|
||||
setID("allCheckerModule{$moduleName}Package{$packageID}"),
|
||||
setID("allCheckerModule{$subsetName}Package{$packageID}"),
|
||||
set::value('browse'),
|
||||
set::checked($packagePrivs == $packageSelect),
|
||||
set::text(zget($privPackages, $packageID, $lang->group->other)),
|
||||
set::labelClass(!empty($packageSelect) && $packagePrivs != $packageSelect ? 'text-left checkbox-indeterminate-block' : 'text-left'),
|
||||
set::checked($package->allCount == $package->selectCount),
|
||||
set::text($lang->group->package->$packageID),
|
||||
set::labelClass($package->selectCount && $package->selectCount != $package->allCount ? 'text-left checkbox-indeterminate-block' : 'text-left'),
|
||||
)
|
||||
)
|
||||
),
|
||||
isset($lang->$moduleName->menus) ? h::td
|
||||
(
|
||||
setClass("menus {$moduleName}"),
|
||||
set('all-privs', $menusPrivs),
|
||||
set('select-privs', $menusSelect),
|
||||
set('data-module', $moduleName),
|
||||
set('data-package', 0),
|
||||
set('data-divid', "{$moduleName}0"),
|
||||
div
|
||||
(
|
||||
setClass('checkbox-primary checkbox-inline checkbox-left check-all'),
|
||||
checkbox
|
||||
(
|
||||
setID("actions[{$moduleName}]browse"),
|
||||
set::value('browse'),
|
||||
set::checked($menusPrivs == $menusSelect),
|
||||
set::text($lang->$moduleName->browse),
|
||||
set::labelClass(!empty($menusSelect) && $menusPrivs != $menusSelect ? 'text-left checkbox-indeterminate-block' : 'text-left'),
|
||||
),
|
||||
icon('plus'),
|
||||
checkList
|
||||
(
|
||||
set::items($lang->$moduleName->menus),
|
||||
set::name("actions[{$moduleName}]"),
|
||||
set::value(isset($groupPrivs[$moduleName]) ? implode(',', $groupPrivs[$moduleName]) : ''),
|
||||
),
|
||||
)
|
||||
) : null,
|
||||
h::td
|
||||
(
|
||||
setClass('pv-10px'),
|
||||
setID($moduleName),
|
||||
set('colspan', !empty($lang->$moduleName->menus) ? 1 : 2),
|
||||
$getMethodItems($privs, $moduleName, $packageID, $groupPrivs),
|
||||
setID($subsetName),
|
||||
$getMethodItems($package, $subsetName, $packageID, $groupPrivs),
|
||||
)
|
||||
);
|
||||
$i ++;
|
||||
@@ -352,13 +331,13 @@ else
|
||||
a
|
||||
(
|
||||
setClass('btn switchBtn'),
|
||||
set::href(inlink('managePriv', "type=byPackage¶m={$groupID}&menu={$menu}&version={$version}")),
|
||||
set::href(inlink('managePriv', "type=byPackage¶m={$groupID}&nav={$nav}&version={$version}")),
|
||||
html("<i class='icon-has-authority-pack'></i>"),
|
||||
),
|
||||
a
|
||||
(
|
||||
setClass('btn switchBtn text-primary'),
|
||||
set::href(inlink('managePriv', "type=byGroup¶m={$groupID}&menu={$menu}&version={$version}")),
|
||||
set::href(inlink('managePriv', "type=byGroup¶m={$groupID}&nav={$nav}&version={$version}")),
|
||||
html("<i class='icon-without-authority-pack'></i>"),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -9,6 +9,7 @@ declare(strict_types=1);
|
||||
* @link https://www.zentao.net
|
||||
*/
|
||||
namespace zin;
|
||||
jsVar('window.selectedPrivIdList', array());
|
||||
|
||||
to::header(
|
||||
span
|
||||
@@ -25,16 +26,16 @@ to::header(
|
||||
|
||||
$packageBox = null;
|
||||
$hiddenClass = '';
|
||||
foreach($packageGroup as $module => $modulePackages)
|
||||
foreach($packages as $subset => $subsetPackages)
|
||||
{
|
||||
$packageBox[] = select
|
||||
(
|
||||
set::name('packages[]'),
|
||||
set::className($hiddenClass),
|
||||
set::items($modulePackages),
|
||||
set::items($subsetPackages),
|
||||
set::multiple(true),
|
||||
set::required(true),
|
||||
set('data-module', $module),
|
||||
set('data-module', $subset),
|
||||
on::change('setActions'),
|
||||
);
|
||||
|
||||
@@ -62,10 +63,11 @@ form
|
||||
select
|
||||
(
|
||||
set::name('module'),
|
||||
set::items($modulePairs),
|
||||
set::items($subsets),
|
||||
set::size(10),
|
||||
set::value(key($subsets)),
|
||||
set::required(true),
|
||||
on::change('window.setModulePackages'),
|
||||
on::change('window.setSubsetPackages'),
|
||||
)
|
||||
)
|
||||
),
|
||||
@@ -99,7 +101,7 @@ form
|
||||
select
|
||||
(
|
||||
set::name('actions[]'),
|
||||
set::items($indexPrivs),
|
||||
set::items($privs),
|
||||
set::multiple(true),
|
||||
set::required(true)
|
||||
)
|
||||
|
||||
@@ -130,7 +130,7 @@ class groupZen extends group
|
||||
$subset = $packageData->subset;
|
||||
if(!isset($subsets[$subset]))
|
||||
{
|
||||
$subsets[$subset] = $this->lang->$subset->common;
|
||||
$subsets[$subset] = isset($this->lang->$subset) && isset($this->lang->$subset->common) ? $this->lang->$subset->common : $subset;
|
||||
$packages[$subset] = array();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user