* Fix priv of workflow menus.

This commit is contained in:
zhujinyong
2023-10-25 15:01:58 +08:00
parent daf8585bc1
commit 6ec27ddeb3
4 changed files with 105 additions and 67 deletions
+64 -16
View File
@@ -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;
+4 -1
View File
@@ -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');
+4 -1
View File
@@ -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');
+33 -49
View File
@@ -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;
}
}