From 6ec27ddeb3f6a3e0eafc8ee54273174e0cca2901 Mon Sep 17 00:00:00 2001 From: zhujinyong Date: Wed, 25 Oct 2023 15:01:58 +0800 Subject: [PATCH] * Fix priv of workflow menus. --- module/group/control.php | 80 ++++++++++++++++++++++++++++-------- module/group/lang/en.php | 5 ++- module/group/lang/zh-cn.php | 5 ++- module/group/model.php | 82 +++++++++++++++---------------------- 4 files changed, 105 insertions(+), 67 deletions(-) diff --git a/module/group/control.php b/module/group/control.php index 8decc629bd..4b0b098cac 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -22,6 +22,70 @@ class group extends control parent::__construct($moduleName, $methodName); $this->loadModel('company')->setMenu(); $this->loadModel('user'); + $this->appendResourcePackages(); + } + + /** + * Append packages in resource. + * + * @access public + * @return void + */ + public function appendResourcePackages() + { + $allPrivs = array(); + foreach($this->config->group->package as $packageCode => $package) + { + foreach($package->privs as $privCode => $priv) + { + $allPrivs[$privCode] = $privCode; + } + } + + /* Privs in resource but not in package. */ + foreach($this->lang->resource as $module => $methodList) + { + foreach($methodList as $method => $methodLang) + { + if(isset($allPrivs[$module . '-' . $method])) continue; + + /* Create subset. */ + if(!isset($this->config->group->subset->$module)) + { + $this->config->group->subset->$module = new stdclass(); + $this->config->group->subset->$module->order = 10000; + $this->config->group->subset->$module->nav = $module; + } + + /* Create subset. */ + $methodPackage = array('create' => 'manage', 'batchcreate' => 'manage', 'browse' => 'browse', 'view' => 'browse', 'delete' => 'delete', 'batchdelete' => 'delete', 'edit' => 'manage', 'batchedit' => 'manage'); + $packageName = isset($methodPackage[$method]) ? $methodPackage[$method] : 'other'; + $packageCode = $module . $packageName; + if(!isset($this->config->group->package->$packageCode)) + { + $this->config->group->package->$packageCode = new stdclass(); + $this->config->group->package->$packageCode->order = 5; + $this->config->group->package->$packageCode->subset = $module; + $this->config->group->package->$packageCode->privs = array(); + $this->lang->group->package->$packageCode = $this->lang->group->package->$packageName; + } + + /* Browse action in workflow. */ + if(isset($this->lang->$module->menus) && $method == 'browse') + { + $this->config->group->package->$packageCode->privs["$module-$method"] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,or', 'order' => 5, 'depend' => array(), 'recommend' => array()); + + foreach($this->lang->$module->menus as $flowMethod => $flowName) + { + $this->config->group->package->$packageCode->privs["$module-$flowMethod"] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,or', 'order' => 5, 'depend' => array("$module-$method"), 'recommend' => array()); + } + } + else + { + $this->config->group->package->$packageCode->privs["$module-$method"] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,or', 'order' => 5, 'depend' => array(), 'recommend' => array()); + } + } + } } /** @@ -322,22 +386,6 @@ class group extends control } } - /* Subsets in resource but not in package. */ - $this->group->sortResource(); - foreach($this->lang->resource as $module => $methodList) - { - foreach($methodList as $method => $methodLang) - { - if(isset($privs["$module-$method"])) continue; - - if(!isset($subsets[$module])) - { - $subsets[$module] = isset($this->lang->$module) && isset($this->lang->$module->common) ? $this->lang->$module->common : $module; - $packages[$module] = array('other' => $this->lang->group->other); - } - } - } - $this->view->title = $this->lang->company->common . $this->lang->colon . $this->lang->group->managePriv; $this->view->position[] = $this->lang->group->managePriv; diff --git a/module/group/lang/en.php b/module/group/lang/en.php index 16b6465747..941b43fcab 100644 --- a/module/group/lang/en.php +++ b/module/group/lang/en.php @@ -204,6 +204,10 @@ $lang->group->versions['1_1'] = 'ZenTao1.1'; $lang->group->versions['1_0_1'] = 'ZenTao1.0.1'; $lang->group->package = new stdclass(); +$lang->group->package->browse = 'Browse'; +$lang->group->package->manage = 'Manage'; +$lang->group->package->delete = 'Delete'; +$lang->group->package->other = 'Other'; $lang->group->package->browseTodo = 'Browse Todo'; $lang->group->package->manageTodo = 'Manage Todo'; $lang->group->package->deleteTodo = 'Delete Todo'; @@ -583,6 +587,5 @@ $lang->group->package->deleteArtifactrepo = 'Delete Artifact Repo'; $lang->group->package->browseApplication = 'Application List'; $lang->group->package->mangeApplication = 'Manage Application'; $lang->group->package->trainPracticeLib = 'Practice Library'; -$lang->group->package->other = 'Other'; include (dirname(__FILE__) . '/resource.php'); diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php index 11ecd099da..4f880f78ff 100644 --- a/module/group/lang/zh-cn.php +++ b/module/group/lang/zh-cn.php @@ -204,6 +204,10 @@ $lang->group->versions['1_1'] = '禅道1.1'; $lang->group->versions['1_0_1'] = '禅道1.0.1'; $lang->group->package = new stdclass(); +$lang->group->package->browse = '浏览'; +$lang->group->package->manage = '创建维护'; +$lang->group->package->delete = '删除'; +$lang->group->package->other = '其他'; $lang->group->package->browseTodo = '浏览待办'; $lang->group->package->manageTodo = '创建维护待办'; $lang->group->package->deleteTodo = '删除待办'; @@ -583,6 +587,5 @@ $lang->group->package->deleteArtifactrepo = '删除制品库'; $lang->group->package->browseApplication = '浏览应用'; $lang->group->package->mangeApplication = '管理应用'; $lang->group->package->trainPracticeLib = '实践库'; -$lang->group->package->other = '其他'; include (dirname(__FILE__) . '/resource.php'); diff --git a/module/group/model.php b/module/group/model.php index ee829b8e2c..5f0bc5dd7b 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -1782,38 +1782,29 @@ class groupModel extends model /* If version is selected, only show privs before the version. */ if(!empty($version) and strpos($versionPrivs, ",$privCode,") === false) continue; - /* Remove privs unused in the edition. */ - if(!isset($this->lang->resource->$moduleName) || !isset($this->lang->resource->$moduleName->$methodName)) continue; - $methodLang = $this->lang->resource->$moduleName->$methodName; - if(!isset($this->lang->$moduleName->$methodLang)) + /* Add methods in workflow menus, remove privs unused in the edition. */ + if(isset($this->lang->$moduleName->menus) && isset($this->lang->$moduleName->menus[$methodName])) { - $this->app->loadLang($moduleName); - if($moduleName == 'requirement') $this->app->loadLang('story'); + $privName = $this->lang->group->package->browse . '(' . $this->lang->$moduleName->menus[$methodName] . ')'; } - $priv = (object)array('subset' => $packageData->subset, 'package' => $packageCode, 'module' => $moduleName, 'method' => $methodName, 'selected' => false, 'name' => $this->lang->$moduleName->$methodLang); + else + { + if(!isset($this->lang->resource->$moduleName) || !isset($this->lang->resource->$moduleName->$methodName)) continue; + $methodLang = $this->lang->resource->$moduleName->$methodName; + if(!isset($this->lang->$moduleName->$methodLang)) + { + $this->app->loadLang($moduleName); + if($moduleName == 'requirement') $this->app->loadLang('story'); + } + $privName = $this->lang->$moduleName->$methodLang; + } + + $priv = (object)array('subset' => $packageData->subset, 'package' => $packageCode, 'module' => $moduleName, 'method' => $methodName, 'selected' => false, 'name' => $privName); $privList[$privCode] = $priv; } } - if($version) return $privList; - - /* Privs in resource but not in package. */ - foreach($this->lang->resource as $module => $methodList) - { - foreach($methodList as $method => $methodLang) - { - if(isset($allPrivs["$module-$method"])) continue; - - if(!$this->checkNavModule($nav, $module)) continue; - - if(!isset($this->lang->$module->$methodLang)) $this->app->loadLang($module); - $priv = (object)array('subset' => $module, 'package' => 'other', 'module' => $module, 'method' => $method, 'selected' => false, 'name' => $this->lang->$module->$methodLang); - - $privList["$module-$method"] = $priv; - } - } - return $privList; } @@ -2468,7 +2459,7 @@ class groupModel extends model if ($relatedPriv1['order'] > $relatedPriv2['order']) { return 1; - } + } elseif ($relatedPriv1['order'] < $relatedPriv2['order']) { return -1; @@ -2533,7 +2524,21 @@ class groupModel extends model list($moduleName, $methodName) = explode('-', $privCode); /* Remove privs unused in the edition. */ - if(!isset($this->lang->resource->$moduleName) || !isset($this->lang->resource->$moduleName->$methodName)) continue; + if(isset($this->lang->$moduleName->menus) && isset($this->lang->$moduleName->menus[$methodName])) + { + $privName = $this->lang->$moduleName->menus[$methodName]; + } + else + { + if(!isset($this->lang->resource->$moduleName) || !isset($this->lang->resource->$moduleName->$methodName)) continue; + $methodLang = $this->lang->resource->$moduleName->$methodName; + if(!isset($this->lang->$moduleName->$methodLang)) + { + $this->app->loadLang($moduleName); + if($moduleName == 'requirement') $this->app->loadLang('story'); + } + $privName = $this->lang->$moduleName->$methodLang; + } $allPrivs[$privCode] = $privCode; @@ -2542,28 +2547,7 @@ class groupModel extends model 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; - } - } - - if(empty($selectedPackages) || strpos($selectedPackages, ',other,') !== false) - { - /* Privs in resource but not in package. */ - $this->sortResource(); - foreach($this->lang->resource as $module => $methodList) - { - foreach($methodList as $method => $methodLang) - { - if($module != $selectedSubset) continue; - - if(isset($allPrivs["$module-$method"])) continue; - - if(!isset($this->lang->$module->$methodLang)) $this->app->loadLang($module); - $privs["$module-$method"] = $this->lang->$module->$methodLang; - } + $privs[$privCode] = $privName; } }