diff --git a/module/group/control.php b/module/group/control.php
index aa02ac970a..9b7d8795f4 100644
--- a/module/group/control.php
+++ b/module/group/control.php
@@ -1,4 +1,5 @@
loadModel('user');
@@ -25,71 +29,7 @@ class group extends control
}
/**
- * Append packages in resource.
- *
- * @access public
- * @return void
- */
- public function appendResourcePackages()
- {
- $allPrivs = array();
- foreach($this->config->group->package as $packageCode => $package)
- {
- if(empty($package->privs)) continue;
-
- 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());
- }
- }
- }
- }
-
- /**
+ * 权限分组列表页面。
* Browse groups.
*
* @access public
@@ -160,6 +100,7 @@ class group extends control
}
/**
+ * 复制权限分组。
* Copy a group.
*
* @param int $groupID
@@ -183,6 +124,7 @@ class group extends control
}
/**
+ * 视野维护。
* Manage view.
*
* @param int $groupID
@@ -244,6 +186,7 @@ class group extends control
}
/**
+ * 分配分组权限。
* Manage privleges of a group.
*
* @param string $type byPackage|byGroup|byModule
@@ -253,7 +196,7 @@ class group extends control
* @access public
* @return void
*/
- public function managePriv($type = 'byPackage', $param = 0, $nav = '', $version = '')
+ public function managePriv(string $type = 'byPackage', int $param = 0, string $nav = '', string $version = '')
{
if($type == 'byGroup' or $type == 'byPackage') $groupID = $param;
@@ -276,6 +219,7 @@ class group extends control
}
/**
+ * 维护分组成员。
* Manage members of a group.
*
* @param int $groupID
@@ -283,7 +227,7 @@ class group extends control
* @access public
* @return void
*/
- public function manageMember($groupID, $deptID = 0)
+ public function manageMember(int $groupID, int $deptID = 0)
{
if(!empty($_POST))
{
@@ -308,6 +252,7 @@ class group extends control
}
/**
+ * 维护项目管理员。
* Manage members of a group.
*
* @param int $groupID
@@ -315,7 +260,7 @@ class group extends control
* @access public
* @return void
*/
- public function manageProjectAdmin($groupID, $deptID = 0)
+ public function manageProjectAdmin(int $groupID, int $deptID = 0)
{
if(!empty($_POST))
{
@@ -354,7 +299,7 @@ class group extends control
public function delete(int $groupID)
{
$group = $this->group->getByID($groupID);
- $this->group->delete($groupID);
+ $this->group->remove($groupID);
/* if ajax request, send result. */
if(dao::isError())
@@ -371,548 +316,6 @@ class group extends control
return $this->send($response);
}
- /**
- * Edit manage priv.
- *
- * @param string $browseType
- * @param string $view
- * @param int $paramID
- * @param int $recPerPage
- * @param int $pageID
- * @access public
- * @return void
- */
- public function editManagePriv($browseType = '', $view = '', $paramID = 0, $recPerPage = 100, $pageID = 1)
- {
- if(empty($browseType) and $browseType != 'bysearch') $browseType = $this->cookie->managePrivEditType ? $this->cookie->managePrivEditType : 'bycard';
- if($browseType == 'bysearch' and $this->cookie->managePrivEditType == 'bycard') $browseType = 'bycard';
-
- $moduleLang = $this->group->getMenuModules($view, true);
-
- if($browseType == 'bycard')
- {
- $privs = $this->group->getPrivsListByView($view);
- $privs = $this->group->transformPrivLang($privs);
- $privPackages = $this->group->getPrivManagerPairs('package');
-
- $privList = array();
- foreach($privs as $privID => $priv)
- {
- if(!isset($privList[$priv->parentCode])) $privList[$priv->parentCode] = array();
- if(!is_array($privList[$priv->parentCode])) $privList[$priv->parentCode] = array();
- if(!isset($privList[$priv->parentCode][$priv->parent])) $privList[$priv->parentCode][$priv->parent] = array();
- $privList[$priv->parentCode][$priv->parent][$priv->key] = $priv;
- }
-
- $this->view->privPackages = $privPackages;
- }
- else
- {
- $privList = $browseType != 'bysearch' ? $this->group->getPrivsListByView($view) : $this->group->getPrivsListBySearch($paramID);
- $privs = $this->group->transformPrivLang($privList);
-
- /* Pager. */
- $this->app->loadClass('pager', $static = true);
- $total = count($privList);
- $pager = new pager($total, $recPerPage, $pageID);
- $privList = array_chunk($privList, $pager->recPerPage, true);
- $privList = empty($privList) ? $privList : $privList[$pageID - 1];
-
- /* Build the search form. */
- $queryID = ($browseType == 'bysearch') ? (int)$paramID : 0;
- $actionURL = $this->createLink('group', 'editManagePriv', "browseType=bysearch&view=¶mID=myQueryID&recPerPage=$recPerPage");
- $this->group->buildPrivSearchForm($queryID, $actionURL);
-
- $privRelations = $this->group->getPrivRelationsByIdList(array_keys($privList));
- if(!isset($privRelations['recommend'])) $privRelations['recommend'] = array();
- if(!isset($privRelations['depend'])) $privRelations['depend'] = array();
-
- $this->view->pager = $pager;
- $this->view->privRelations = $privRelations;
- }
-
- $this->view->title = $this->lang->group->editManagePriv;
- $this->view->browseType = $browseType;
- $this->view->privList = $privList;
- $this->view->packages = $this->group->getPrivPackagePairs($view);
- $this->view->moduleLang = $moduleLang;
- $this->view->modulePackages = $this->group->getModuleAndPackageTree();
- $this->view->view = $view;
-
- $this->display();
- }
-
- /**
- * Batch change package.
- *
- * @param string $module
- * @param int $packageID
- * @access public
- * @return void
- */
- public function batchChangePackage($module, $packageID)
- {
- if(empty($_POST['privIdList'])) return print(js::reload('parent'));
- $privIdList = array_unique($_POST['privIdList']);
- $allChanges = $this->group->batchChangePackage($privIdList, $module, $packageID);
- if(dao::isError()) return print(js::error(dao::getError()));
-
- $this->loadModel('action');
- foreach($allChanges as $privID => $changes)
- {
- $actionID = $this->action->create('privlang', $privID, 'Edited');
- $this->action->logHistory($actionID, $changes);
- }
- return print(js::reload('parent'));
- }
-
- /**
- * Manage privilege packages.
- *
- * @access public
- * @return void
- */
- public function managePrivPackage()
- {
- $this->view->title = $this->lang->group->managePrivPackage;
- $this->view->packagesTreeList = $this->group->getPrivPackageTreeList();
- $this->display();
- }
-
- /**
- * Create a privilege package.
- *
- * @access public
- * @return void
- */
- public function createPrivPackage()
- {
- if(!empty($_POST))
- {
- $packageID = $this->group->createPrivPackage();
- if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
- }
-
- $this->view->title = $this->lang->group->createPrivPackage;
- $this->view->modules = $this->group->getPrivModules();
- $this->display();
- }
-
- /**
- * Edit a privilege package.
- *
- * @access public
- * @return void
- */
- public function editPrivPackage($privPackageID)
- {
- if(!empty($_POST))
- {
- $changes = $this->group->updatePrivPackage($privPackageID);
- if($changes)
- {
- $actionID = $this->loadModel('action')->create('privpackage', $privPackageID, 'Edited');
- $this->action->logHistory($actionID, $changes);
- }
- if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
- }
-
- $this->view->title = $this->lang->group->editPrivPackage;
- $this->view->privPackage = $this->group->getPrivPackageByID($privPackageID);
- $this->view->modules = $this->group->getPrivModules();
- $this->view->actions = $this->loadModel('action')->getList('privpackage', $privPackageID);
- $this->view->users = $this->loadModel('user')->getPairs();
- $this->display();
- }
-
- /**
- * Sort priv packages.
- *
- * @param int $parentID
- * @param string $type
- * @access public
- * @return void
- */
- public function sortPrivPackages($parentID = 0, $type = '')
- {
- $orders = $_POST['orders'];
- if(empty($orders)) return false;
- if($type == 'view')
- {
- $orders = str_replace('View,', ',', $orders);
- $orders = trim($orders, ',');
- $this->loadModel('setting')->setItem("system.priv.views", $orders);
- }
- if($type == 'module')
- {
- $orders = trim($orders, ',');
- $parentID = rtrim($parentID, 'View');
- $this->loadModel('setting')->setItem("system.priv.{$parentID}Modules", $orders);
- }
- if($type == 'package')
- {
- $orders = explode(',', $orders);
- foreach($orders as $index => $id)
- {
- if(!empty($id)) $this->group->updatePackageOrder($id, ($index + 1) * 5);
- }
- }
- }
-
- /**
- * Delete a priv package.
- *
- * @param int $privPackageID
- * @access public
- * @return void
- */
- public function deletePrivPackage($privPackageID, $confirm = 'no')
- {
- if($confirm == 'no')
- {
- return print(js::confirm($this->lang->group->confirmDeleteAB, $this->createLink('group', 'deletePrivPackage', "privPackageID=$privPackageID&confirm=yes")));
- }
- else
- {
- $privPackage = $this->group->getPrivPackageByID($privPackageID);
- $this->group->deletePrivPackage($privPackageID);
- if(!dao::isError()) $this->loadModel('action')->create('privpackage', $privPackageID, 'deleted', '', zget($privPackage, 'name'));
-
- return print(js::reload('parent'));
- }
- }
-
- /**
- * Add recommendation.
- *
- * @param string $privIdList
- * @param string $type depend|recommend
- * @access public
- * @return void
- */
- public function addRelation($privIdList, $type)
- {
- if(strpos("depend|recommend", $type) === false) return print('Error type');
-
- if($this->server->request_method == 'POST')
- {
- if(empty($_POST['relation'])) return print(js::alert($this->lang->group->noticeNoChecked));
-
- $this->group->saveRelation($privIdList, $type);
- if(strpos($privIdList, ',') === false) print(js::execute("if(typeof(parent.parent.getSideRelation) == 'function') parent.parent.getSideRelation({$privIdList})"));
- return print(js::reload('parent'));
- }
-
- $privs = $this->group->getPrivByIdList($privIdList);
- $modules = array();
- foreach($privs as $priv) $modules[$priv->module] = $priv->module;
-
- $modulePrivs = $this->group->getPrivByModule($modules);
- $packageIdList = array();
- foreach($modulePrivs as $packagePrivs) $packageIdList = array_unique(array_merge($packageIdList, array_keys($packagePrivs)));
-
- $this->view->privs = $privs;
- $this->view->modules = array('' => $this->lang->group->selectModule) + $this->group->getMenuModules(null, true);
- $this->view->packages = $this->group->getPackagePairs($packageIdList);
- $this->view->modulePrivs = $modulePrivs;
- $this->view->type = $type;
- $this->display();
- }
-
- /**
- * Delete relation.
- *
- * @param string $type recommend|depend
- * @param int $privID
- * @param int $relationPriv
- * @access public
- * @return void
- */
- public function deleteRelation($type, $privID, $relationPriv)
- {
- $this->dao->delete()->from(TABLE_PRIVRELATION)->where('type')->eq($type)->andWhere('priv')->eq($privID)->andWhere('relationPriv')->eq($relationPriv)->exec();
- }
-
- /**
- * Batch delete relation.
- *
- * @param string $privIdList
- * @param string $type recommend|depend
- * @access public
- * @return void
- */
- public function batchDeleteRelation($privIdList, $type)
- {
- if(strpos("depend|recommend", $type) === false) return print('Error type');
-
- if($this->server->request_method == 'POST')
- {
- if(empty($_POST['relation'])) return print(js::alert($this->lang->group->noticeNoChecked));
-
- $data = fixer::input('post')->get();
- $deletedPriv = array();
- foreach($data->relation as $module => $relations) $deletedPriv = array_merge($deletedPriv, $relations);
- $this->dao->delete()->from(TABLE_PRIVRELATION)->where('type')->eq($type)->andWhere('priv')->in($privIdList)->andWhere('relationPriv')->in($deletedPriv)->exec();
-
- return print(js::reload('parent'));
- }
-
- $privs = $this->group->getPrivByIdList($privIdList);
- $modules = array();
- foreach($privs as $priv) $modules[$priv->module] = $priv->module;
-
- $modulePrivs = $this->group->getPrivByModule($modules);
- $packageIdList = array();
- foreach($modulePrivs as $packagePrivs) $packageIdList = array_unique(array_merge($packageIdList, array_keys($packagePrivs)));
-
- $this->view->privs = $privs;
- $this->view->modules = array('' => $this->lang->group->selectModule) + $this->group->getMenuModules(null, true);
- $this->view->packages = $this->group->getPackagePairs($packageIdList);
- $this->view->modulePrivs = $modulePrivs;
- $this->view->type = $type;
- $this->display('group', 'addrelation');
- }
-
- /**
- * Ajax get priv tree.
- *
- * @param string $privIdList
- * @param string $module
- * @param string $type recommend|depend
- * @access public
- * @return void
- */
- public function ajaxGetPrivTree($privIdList, $module, $type = 'recommend')
- {
- if(is_string($privIdList)) $privIdList = explode(',', $privIdList);
-
- $modulePrivs = $this->group->getPrivByModule($module);
- $packageIdList = array();
- foreach($modulePrivs as $packagePrivs) $packageIdList = array_unique(array_merge($packageIdList, array_keys($packagePrivs)));
-
- $modules = $this->group->getMenuModules(null, true);
- $packages = $this->group->getPackagePairs($packageIdList);
-
- $tree = "
- ";
- $tree .= html::a('#', $modules[$module]);
- $tree .= "
";
- foreach($packages as $packageID => $packageName)
- {
- if(empty($modulePrivs[$module][$packageID])) continue;
- $tree .= "- ";
- $tree .= html::a('#', $packageName);
- $tree .= '
';
-
- foreach($modulePrivs[$module][$packageID] as $id => $modulePriv)
- {
- $tree .= '- ';
- $tree .= html::checkbox("relation[$module]", array($id => $modulePriv->name), '');
- $tree .= '
';
- }
- $tree .= '
';
- unset($modulePrivs[$module][$packageID]);
- }
- if(!empty($modulePrivs[$module]))
- {
- $tree .= "- ";
- $tree .= html::a('#', $this->lang->group->unassigned);
- $tree .= '
';
- foreach($modulePrivs[$module] as $packageID => $packagePrivs)
- {
- foreach($packagePrivs as $id => $modulePriv)
- {
- $tree .= '- ';
- $tree .= html::checkbox("relation[$module]", array($id => $modulePriv->name), '');
- $tree .= '
';
- }
- }
- $tree .= '
';
- }
- $tree .= '
';
- return print($tree);
- }
-
- /**
- * Create a priv.
- *
- * @access public
- * @return void
- */
- public function createPriv()
- {
- if(!empty($_POST))
- {
- $packageID = $this->group->createPriv();
- if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
- }
- $views = $this->loadModel('setting')->getItem("owner=system&module=priv&key=views");
- $views = explode(',', $views);
- $moduleLang = $this->group->getMenuModules('', true);
- foreach($views as $index => $view)
- {
- $views[$view] = isset($this->lang->{$view}->common) ? $this->lang->{$view}->common : zget($moduleLang, $view);
- unset($views[$index]);
- }
-
- $this->view->title = $this->lang->group->createPriv;
- $this->view->views = $views;
- $this->view->modules = $this->group->getPrivModules('', 'noViewName');
- $this->view->packages = $this->group->getPrivPackagePairs();
- $this->view->moduleViewPairs = $this->group->getPrivModuleViewPairs();
- $this->view->packageModulePairs = $this->group->getPrivPackagePairs('', '', 'module');
- $this->display();
- }
-
- /**
- * Edit a priv.
- *
- * @param int $privID
- * @access public
- * @return void
- **/
- public function editPriv($privID)
- {
- $privID = intval($privID);
- $priv = $this->group->getPrivByID($privID);
-
- if(!$priv)
- {
- return print(js::alert($this->lang->group->noneProject));
- }
-
- if(!empty($_POST))
- {
- $currentLang = $this->app->clientLang ? : 'zh-cn';
- $changes = $this->group->updatePriv($privID, $currentLang);
- if($changes)
- {
- $actionID = $this->loadModel('action')->create('privlang', $privID, 'Edited');
- $this->action->logHistory($actionID, $changes);
- }
- if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
- return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => true, 'closeModal' => true));
-
- $this->send(array('result' => $responseResult, 'message' => $responseMessage, 'load' => $locate));
- }
-
- $views = $this->loadModel('setting')->getItem("owner=system&module=priv&key=views");
- $views = explode(',', $views);
- $moduleLang = $this->group->getMenuModules('', true);
- foreach($views as $index => $view)
- {
- $views[$view] = isset($this->lang->{$view}->common) ? $this->lang->{$view}->common : zget($moduleLang, $view);
- unset($views[$index]);
- }
- $moduleViewPairs = $this->group->getPrivModuleViewPairs();
- $priv->view = zget($moduleViewPairs, $priv->module, '');
-
- $this->view->title = $this->lang->group->editPriv;
- $this->view->views = $views;
- $this->view->modules = $this->group->getPrivModules($priv->view, 'noViewName');
- $this->view->packages = $this->group->getPrivPackagePairs($priv->view, $priv->module);
- $this->view->moduleViewPairs = $moduleViewPairs;
- $this->view->packageModulePairs = $this->group->getPrivPackagePairs('', '', 'module');
- $this->view->priv = $priv;
- $this->view->actions = $this->loadModel('action')->getList('privlang', $privID);
- $this->view->users = $this->loadModel('user')->getPairs();
- $this->display();
- }
-
- /**
- * Delete a priv.
- *
- * @param int $privID
- * @access public
- * @return void
- */
- public function deletePriv($privID, $confirm = 'no')
- {
- if($confirm == 'no')
- {
- return print(js::confirm($this->lang->group->confirmDeleteAB, $this->createLink('group', 'deletePriv', "privID=$privID&confirm=yes")));
- }
- else
- {
- $priv = $this->group->getPrivByID($privID);
- $this->group->deletePriv($privID);
- if(!dao::isError()) $this->loadModel('action')->create('privlang', $privID, 'deleted', '', "$priv->moduleName-$priv->methodName");
-
- return print(js::reload('parent'));
- }
- }
-
- /**
- * Ajax get priv modules by view.
- *
- * @param string $viewName
- * @access public
- * @return string
- */
- public function ajaxGetPrivModules($viewName = '')
- {
- $modules = $this->group->getPrivModules($viewName, 'noViewName');
- echo html::select('module', array('' => '') + $modules, '', "class='form-control picker-select' onchange='loadPackages(this.value, \"module\")'");
- }
-
- /**
- * Ajax get priv packages by view or module.
- *
- * @param string $object
- * @param string $type
- * @access public
- * @return string
- */
- public function ajaxGetPrivPackages($object = '', $type = 'view')
- {
- $packages = array();
- if($type == 'view') $packages = $this->group->getPrivPackagePairs($object);
- if($type == 'module') $packages = $this->group->getPrivPackagePairs('', $object);
- echo html::select('package', array('' => '') + $packages, '', "class='form-control picker-select' onchange='changeViewAndModule(this.value)'");
- }
-
- /**
- * AJAX: Get priv's related priv list.
- *
- * @param int $privID
- * @access public
- * @return bool
- */
- public function ajaxGetPrivRelations($privID)
- {
- $relatedPrivs = $this->group->getPrivRelation($privID);
- if(empty($relatedPrivs)) return print('');
-
- $moduleLang = $this->group->getMenuModules('', true);
- $privList = array('depend' => array(), 'recommend' => array());
- foreach($relatedPrivs as $type => $relations)
- {
- foreach($relations as $relatedPriv)
- {
- $module = $relatedPriv->module;
- if(!isset($privList[$type][$module])) $privList[$type][$module] = array();
- $privList[$type][$module]['text'] = zget($moduleLang, $module, $module);
- $privList[$type][$module]['module'] = $relatedPriv->module;
- $privList[$type][$module]['children'][] = array('text' => $relatedPriv->name, 'relationPriv' => $relatedPriv->id, 'privID' => $privID);
- }
- $privList[$type] = array_values($privList[$type]);
- }
- return print(json_encode($privList));
- }
-
- /**
- * AJAX: update priv order.
- *
- * @access public
- * @return void
- */
- public function ajaxUpdatePrivOrder()
- {
- if(!empty($_POST)) $this->group->updatePrivOrder();
- }
-
/**
* AJAX: Get privs by parents.
*
@@ -921,7 +324,7 @@ class group extends control
* @access public
* @return bool
*/
- public function ajaxGetPrivByParents($selectedSubset, $selectedPackages)
+ public function ajaxGetPrivByParents(string $selectedSubset, string $selectedPackages)
{
$privs = $this->group->getPrivByParents($selectedSubset, $selectedPackages);
diff --git a/module/group/lang/de.php b/module/group/lang/de.php
index 10dc3c60d2..086d45f17e 100644
--- a/module/group/lang/de.php
+++ b/module/group/lang/de.php
@@ -20,7 +20,7 @@ $lang->group->manageView = 'Anzeigen';
$lang->group->managePriv = 'Assign Privileges';
$lang->group->managePrivByGroup = 'Assign Privileges by Group';
$lang->group->managePrivByModule = 'Modul Rechte';
-$lang->group->byModuleTips = '(SHIFT/STRG für Multi-Select)';
+$lang->group->byModuleTips = '(SHIFT/STRG für Multi-Select)';
$lang->group->allTips = 'After checking this option, the administrator can manage all objects in the system, including objects created later.';
$lang->group->manageMember = 'Mitglieder';
$lang->group->manageProjectAdmin = "Manage {$lang->projectCommon} Admins";
diff --git a/module/group/lang/en.php b/module/group/lang/en.php
index 28b8bb302a..aae79cb4f6 100644
--- a/module/group/lang/en.php
+++ b/module/group/lang/en.php
@@ -20,7 +20,7 @@ $lang->group->manageView = 'Manage Sight';
$lang->group->managePriv = 'Assign Privileges';
$lang->group->managePrivByGroup = 'Assign Privileges by Group';
$lang->group->managePrivByModule = 'Manage Privileges by Module';
-$lang->group->byModuleTips = '(Press Shift/Ctrl to Multi-select)';
+$lang->group->byModuleTips = '(Press Shift/Ctrl to Multi-select)';
$lang->group->allTips = 'After checking this option, the administrator can manage all objects in the system, including objects created later.';
$lang->group->manageMember = 'Manage Members';
$lang->group->manageProjectAdmin = "Manage {$lang->projectCommon} Admins";
diff --git a/module/group/lang/fr.php b/module/group/lang/fr.php
index bb9a363334..3920c883b0 100644
--- a/module/group/lang/fr.php
+++ b/module/group/lang/fr.php
@@ -20,7 +20,7 @@ $lang->group->manageView = 'Gérer droits consultation';
$lang->group->managePriv = 'Assign Privileges';
$lang->group->managePrivByGroup = 'Assign Privileges by Group';
$lang->group->managePrivByModule = 'Gérer Privilèges par Module';
-$lang->group->byModuleTips = '(Shift/Ctrl pour sélection multiple)';
+$lang->group->byModuleTips = '(Shift/Ctrl pour sélection multiple)';
$lang->group->allTips = 'After checking this option, the administrator can manage all objects in the system, including objects created later.';
$lang->group->manageMember = 'Gérer Membres';
$lang->group->manageProjectAdmin = "Manage {$lang->projectCommon} Admins";
diff --git a/module/group/lang/vi.php b/module/group/lang/vi.php
index de9923d7ab..32850c41b1 100644
--- a/module/group/lang/vi.php
+++ b/module/group/lang/vi.php
@@ -19,7 +19,7 @@ $lang->group->manageView = 'Quản lý Sight';
$lang->group->managePriv = 'Quản lý Privileges';
$lang->group->managePrivByGroup = 'Quản lý Privileges by Group';
$lang->group->managePrivByModule = 'Quản lý Privileges by Module';
-$lang->group->byModuleTips = '(Press Shift/Ctrl to Multi-select)';
+$lang->group->byModuleTips = '(Press Shift/Ctrl to Multi-select)';
$lang->group->manageMember = 'Quản lý Members';
$lang->group->manageProjectAdmin = 'Manage Program Admins';
$lang->group->editManagePriv = 'Permission Edit';
diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php
index 5dff018e5f..c1013f15a3 100644
--- a/module/group/lang/zh-cn.php
+++ b/module/group/lang/zh-cn.php
@@ -20,7 +20,7 @@ $lang->group->manageView = '视野维护';
$lang->group->managePriv = '分配权限';
$lang->group->managePrivByGroup = '分配权限';
$lang->group->managePrivByModule = '按模块分配权限';
-$lang->group->byModuleTips = '(可以按住Shift或者Ctrl键进行多选)';
+$lang->group->byModuleTips = '(可以按住Shift或者Ctrl键进行多选)';
$lang->group->allTips = '勾选此项后,管理员可管理系统中所有对象,包括后续创建的对象。';
$lang->group->manageMember = '成员维护';
$lang->group->manageProjectAdmin = "维护{$lang->projectCommon}管理员";
diff --git a/module/group/lang/zh-tw.php b/module/group/lang/zh-tw.php
index 34df49879c..4f031d5cd5 100644
--- a/module/group/lang/zh-tw.php
+++ b/module/group/lang/zh-tw.php
@@ -19,7 +19,7 @@ $lang->group->manageView = '視野維護';
$lang->group->managePriv = '權限維護';
$lang->group->managePrivByGroup = '權限維護';
$lang->group->managePrivByModule = '按模組分配權限';
-$lang->group->byModuleTips = '(可以按住Shift或者Ctrl鍵進行多選)';
+$lang->group->byModuleTips = '(可以按住Shift或者Ctrl鍵進行多選)';
$lang->group->manageMember = '成員維護';
$lang->group->manageProjectAdmin = '維護項目管理員';
$lang->group->confirmDelete = '您確定刪除該用戶分組嗎?';
diff --git a/module/group/model.php b/module/group/model.php
index 0a48fc17a2..a12abfddd1 100644
--- a/module/group/model.php
+++ b/module/group/model.php
@@ -1,4 +1,5 @@
dao->findByGroup($fromGroup)->from(TABLE_GROUPPRIV)->fetchAll();
+ $privs = $this->dao->findByGroup($fromGroupID)->from(TABLE_GROUPPRIV)->fetchAll();
foreach($privs as $key => $priv)
{
- $privs[$key]->group = $toGroup;
+ $privs[$key]->group = $toGroupID;
}
$this->insertPrivs($privs);
}
@@ -109,17 +110,17 @@ class groupModel extends model
/**
* Copy user.
*
- * @param string $fromGroup
- * @param string $toGroup
+ * @param int $fromGroup
+ * @param int $toGroup
* @access public
* @return void
*/
- public function copyUser($fromGroup, $toGroup)
+ public function copyUser($fromGroupID, $toGroupID)
{
- $users = $this->dao->findByGroup($fromGroup)->from(TABLE_USERGROUP)->fetchAll();
+ $users = $this->dao->findByGroup($fromGroupID)->from(TABLE_USERGROUP)->fetchAll();
foreach($users as $user)
{
- $user->group = $toGroup;
+ $user->group = $toGroupID;
$this->dao->insert(TABLE_USERGROUP)->data($user)->exec();
}
}
@@ -131,7 +132,7 @@ class groupModel extends model
* @access public
* @return array
*/
- public function getList($projectID = 0)
+ public function getList(int $projectID = 0)
{
return $this->dao->select('*')->from(TABLE_GROUP)
->where('project')->eq($projectID)
@@ -147,7 +148,7 @@ class groupModel extends model
* @access public
* @return array
*/
- public function getPairs($projectID = 0)
+ public function getPairs(int $projectID = 0)
{
return $this->dao->select('id, name')->from(TABLE_GROUP)
->where('project')->eq($projectID)
@@ -162,7 +163,7 @@ class groupModel extends model
* @access public
* @return object
*/
- public function getByID($groupID)
+ public function getByID(int $groupID)
{
$group = $this->dao->findById($groupID)->from(TABLE_GROUP)->fetch();
if($group->acl) $group->acl = json_decode($group->acl, true);
@@ -178,7 +179,7 @@ class groupModel extends model
* @access public
* @return array
*/
- public function getByAccount($account, $allVision = false)
+ public function getByAccount(string $account, bool $allVision = false)
{
return $this->dao->select('t2.*')->from(TABLE_USERGROUP)->alias('t1')
->leftJoin(TABLE_GROUP)->alias('t2')
@@ -189,23 +190,6 @@ class groupModel extends model
->fetchAll('id');
}
- /**
- * Get groups by accounts.
- *
- * @param array $accounts
- * @access public
- * @return array
- */
- public function getByAccounts($accounts)
- {
- return $this->dao->select('t1.account, t2.acl, t2.id')->from(TABLE_USERGROUP)->alias('t1')
- ->leftJoin(TABLE_GROUP)->alias('t2')
- ->on('t1.`group` = t2.id')
- ->where('t1.account')->in($accounts)
- ->andWhere('t2.vision')->eq($this->config->vision)
- ->fetchGroup('account');
- }
-
/**
* Get the account number in the group.
*
@@ -213,7 +197,7 @@ class groupModel extends model
* @access public
* @return array
*/
- public function getGroupAccounts($groupIdList = array())
+ public function getGroupAccounts(array $groupIdList = array())
{
$groupIdList = array_filter($groupIdList);
if(empty($groupIdList)) return array();
@@ -227,7 +211,7 @@ class groupModel extends model
* @access public
* @return array
*/
- public function getPrivs($groupID)
+ public function getPrivs(int $groupID)
{
$privs = array();
$stmt = $this->dao->select('module, method')->from(TABLE_GROUPPRIV)->where('`group`')->eq($groupID)->orderBy('module')->query();
@@ -242,7 +226,7 @@ class groupModel extends model
* @access public
* @return array
*/
- public function getUserPairs($groupID)
+ public function getUserPairs(int $groupID)
{
return $this->dao->select('t2.account, t2.realname')
->from(TABLE_USERGROUP)->alias('t1')
@@ -409,50 +393,13 @@ class groupModel extends model
}
/**
- * Get the ID of the group that has access to the program.
- *
- * @access public
- * @return array
- */
- public function getAccessProgramGroup()
- {
- $accessibleGroup = $this->getList();
- $accessibleGroupID = array(0);
- foreach($accessibleGroup as $group)
- {
- if($group->acl) $group->acl = json_decode($group->acl, true);
- if(!isset($group->acl) || !is_array($group->acl)) $group->acl = array();
-
- if(empty($group->acl))
- {
- $accessibleGroupID[] = $group->id;
- continue;
- }
-
- if(!isset($group->acl['views']) || empty($group->acl['views']))
- {
- $accessibleGroupID[] = $group->id;
- continue;
- }
-
- if(in_array('program', $group->acl['views']))
- {
- $accessibleGroupID[] = $group->id;
- continue;
- }
- }
- return $accessibleGroupID;
- }
-
- /**
- * Delete a group.
+ * Remove group.
*
* @param int $groupID
- * @param null $null compatible with that of model::delete()
* @access public
* @return void
*/
- public function delete($groupID, $null = null)
+ public function remove(int $groupID)
{
$this->dao->delete()->from(TABLE_GROUP)->where('id')->eq($groupID)->exec();
$this->dao->delete()->from(TABLE_USERGROUP)->where('`group`')->eq($groupID)->exec();
@@ -468,7 +415,7 @@ class groupModel extends model
* @access public
* @return bool
*/
- public function updatePrivByGroup($groupID, $nav, $version)
+ public function updatePrivByGroup(int $groupID, string $nav, string $version)
{
/* Delete old. */
$privs = array_keys($this->getPrivListByNav($nav, $version));
@@ -548,7 +495,7 @@ class groupModel extends model
* @access protected
* @return bool
*/
- protected function insertPrivs($privs)
+ protected function insertPrivs(array $privs)
{
$groups = array();
foreach($privs as $priv) $groups[$priv->group] = $priv->group;
@@ -575,7 +522,7 @@ class groupModel extends model
* @access public
* @return bool
*/
- public function updateView($groupID)
+ public function updateView(int $groupID)
{
$actions = $this->post->actions;
$oldGroup = $this->getByID($groupID);
@@ -660,7 +607,7 @@ class groupModel extends model
* @access public
* @return void
*/
- public function updateUser($groupID)
+ public function updateUser(int $groupID)
{
$members = $this->post->members ? $this->post->members : array();
$groupUsers = $this->dao->select('account')->from(TABLE_USERGROUP)->where('`group`')->eq($groupID)->fetchPairs('account');
@@ -701,7 +648,7 @@ class groupModel extends model
* @access public
* @return void
*/
- public function updateProjectAdmin($groupID)
+ public function updateProjectAdmin(int $groupID)
{
$this->loadModel('user');
@@ -834,7 +781,7 @@ class groupModel extends model
* @access public
* @return bool
*/
- public function checkNavSubset($nav, $subset)
+ public function checkNavSubset(string $nav, string $subset): bool
{
if(empty($nav)) return true;
@@ -845,62 +792,6 @@ class groupModel extends model
&& $this->config->group->subset->$subset->nav == $nav;
}
- /**
- * Check nav have module.
- *
- * @param string $nav
- * @param string $moduleName
- * @access public
- * @return bool
- */
- public function checkNavModule($nav, $moduleName, $methodName = '')
- {
- if(empty($nav)) return true;
-
- if($nav == 'general' and (isset($this->lang->navGroup->$moduleName) or isset($this->lang->mainNav->$moduleName))) return false;
- if($nav != 'general')
- {
- if($moduleName === $nav) return true;
- if(isset($this->lang->navGroup->{$moduleName . '_' . $methodName}))
- {
- if($this->lang->navGroup->{$moduleName . '_' . $methodName} === $nav) return true;
- return false;
- }
- if(isset($this->lang->navGroup->$moduleName) and $this->lang->navGroup->$moduleName == $nav) return true;
- return false;
- }
- if($nav == 'project' and strpos('caselib|testsuite|report', $moduleName) !== false) return false;
-
- return true;
- }
-
- /**
- * Get modules in menu
- *
- * @param string $menu
- * @param bool $translateLang
- * @access public
- * @return array
- */
- public function getMenuModules($menu = '', $translateLang = false)
- {
- $modules = array();
- foreach($this->lang->resource as $moduleName => $action)
- {
- if($this->checkNavModule($menu, $moduleName))
- {
- $modules[$moduleName] = $moduleName;
- if($translateLang)
- {
- if(!isset($this->lang->{$moduleName}->common)) $this->app->loadLang($moduleName);
- $modules[$moduleName] = isset($this->lang->{$moduleName}->common) ? $this->lang->{$moduleName}->common : $moduleName;
- if($moduleName == 'requirement') $modules[$moduleName] = $this->lang->URCommon;
- }
- }
- }
- return $modules;
- }
-
/**
* Judge an action is clickable or not.
*
@@ -910,7 +801,7 @@ class groupModel extends model
* @access public
* @return bool
*/
- public static function isClickable($group, $action)
+ public static function isClickable(object $group, string $action): bool
{
$action = strtolower($action);
@@ -921,910 +812,6 @@ class groupModel extends model
return true;
}
- /**
- * Create a privilege package.
- *
- * @access public
- * @return int
- */
- public function createPrivPackage()
- {
- $package = fixer::input('post')->get();
-
- $packages = $this->getPrivPackagesByModule($package->module);
- $package->order = (count($packages) + 1) * 5;
-
- $this->dao->insert(TABLE_PRIVPACKAGE)->data($package)->batchCheck($this->config->privPackage->create->requiredFields, 'notempty')->exec();
- $packageID = $this->dao->lastInsertId();
- $this->loadModel('action')->create('privpackage', $packageID, 'Opened');
- return $packageID;
- }
-
- /**
- * Update a privilege package.
- *
- * @param int $packageID
- * @access public
- * @return array
- */
- public function updatePrivPackage($packageID)
- {
- $oldPackage = $this->getPrivPackageByID($packageID);
-
- $package = fixer::input('post')->get();
- if($oldPackage->module != $package->module)
- {
- $packages = $this->getPrivPackagesByModule($package->module);
- $package->order = (count($packages) + 1) * 5;
-
- $priv = new stdclass();
- $priv->module = $package->module;
- }
- $this->dao->update(TABLE_PRIVPACKAGE)->data($package)->batchCheck($this->config->privPackage->edit->requiredFields, 'notempty')->where('id')->eq($packageID)->exec();
- if(dao::isError()) return false;
- if(isset($priv)) $this->dao->update(TABLE_PRIV)->data($priv)->where('package')->eq($packageID)->exec();
-
- $package = $this->getPrivPackageByID($packageID);
- $changes = common::createChanges($oldPackage, $package);
-
- return $changes;
- }
-
- /**
- * Delete a priv package.
- *
- * @param int $packageID
- * @access public
- * @return bool
- */
- public function deletePrivPackage($packageID)
- {
- $this->dao->delete()->from(TABLE_PRIVPACKAGE)->where('id')->eq($packageID)->exec();
- if(dao::isError()) return false;
- $this->dao->update(TABLE_PRIV)->set('package')->eq(0)->where('package')->eq($packageID)->exec();
- }
-
- /**
- * Get priv package by id.
- *
- * @param int $packageID
- * @access public
- * @return object
- */
- public function getPrivPackageByID($packageID)
- {
- return $this->dao->select('distinct t1.*,t2.`value` as name')->from(TABLE_PRIVMANAGER)->alias('t1')
- ->leftJoin(TABLE_PRIVLANG)->alias('t2')->on('t1.id=t2.objectID')
- ->where('t1.id')->eq($packageID)
- ->andWhere('t1.edition')->like("%,{$this->config->edition},%")
- ->andWhere('t1.vision')->like("%,{$this->config->vision},%")
- ->andWhere('t2.objectType')->eq('manager')
- ->fetch();
- }
-
- /**
- * Get priv packages by module.
- *
- * @param string $module
- * @access public
- * @return array
- */
- public function getPrivPackagesByModule($module)
- {
- $moduleID = $this->dao->select('id')->from(TABLE_PRIVMANAGER)->where('`code`')->eq($module)->andWhere('type')->eq('module')->fetch('id');
-
- return $this->dao->select('t1.*,t2.value as name')->from(TABLE_PRIVMANAGER)->alias('t1')
- ->leftJoin(TABLE_PRIVLANG)->alias('t2')->on('t1.id=t2.objectID')
- ->where('t1.parent')->eq($moduleID)
- ->andWhere('t1.type')->eq('package')
- ->andWhere('t1.edition')->like("%,{$this->config->edition},%")
- ->andWhere('t1.vision')->like("%,{$this->config->vision},%")
- ->orderBy('order_asc')
- ->fetchAll('id');
- }
-
-// /**
-// * Get priv packages group by module.
-// *
-// * @param array $modules
-// * @access public
-// * @return array
-// */
-// public function getPrivPackageGroupByModules($modules = array())
-// {
-// return $this->dao->select('t1.*,t2.`code` as parentCode')->from(TABLE_PRIVMANAGER)->alias('t1')
-// ->leftJoin(TABLE_PRIVMANAGER)->alias('t2')->on('t1.parent=t2.id')
-// ->where('t1.`type`')->eq('package')
-// ->beginIF(!empty($modules))->andWhere('t2.`code`')->in($modules)->fi()
-// ->andWhere('t2.`type`')->eq('module')
-// ->andWhere('t1.edition')->like("%,{$this->config->edition},%")
-// ->andWhere('t1.vision')->like("%,{$this->config->vision},%")
-// ->fetchGroup('parentCode', 'id');
-// }
-
- /**
- * Get priv package pairs by view.
- *
- * @access public
- * @return array
- */
- public function getPrivPackagePairs($view = '', $module = '', $field = '`value` as name')
- {
- $modules = '';
- if(!empty($module))
- {
- $modules = $this->dao->select('id')->from(TABLE_PRIVMANAGER)->where('type')->eq('module')->andWhere('code')->eq($module)->fetch('id');
- }
- else
- {
- $modules = $this->getPrivManagerPairs('module', $view);
- $modules = array_keys($modules);
- $modules = implode(',', $modules);
- }
- $modules = trim($modules, ',');
-
- return $this->dao->select("id,{$field}")
- ->from(TABLE_PRIVMANAGER)->alias('t1')
- ->leftJoin(TABLE_PRIVLANG)->alias('t2')->on('t1.id=t2.objectID')
- ->where('1=1')
- ->andWhere('t2.objectType')->eq('manager')
- ->beginIF(!empty($modules))->andWhere('parent')->in($modules)->fi()
- ->andWhere('t1.edition')->like("%,{$this->config->edition},%")
- ->andWhere('t1.vision')->like("%,{$this->config->vision},%")
- ->andWhere('t2.lang')->eq($this->app->getClientLang())
- ->orderBy('order_asc')
- ->fetchPairs();
- }
-
- /**
- * 获取权限包id:name的键值对。
- * Get priv package pairs.
- *
- * @param array $packageIdList
- * @access public
- * @return array
- */
- public function getPackagePairs(array $packageIdList): array
- {
- return $this->dao->select('*')->from(TABLE_PRIVPACKAGE)->where('id')->in($packageIdList)->orderBy('`order`')->fetchPairs('id', 'name');
- }
-
- /**
- * Get priv modules.
- *
- * @param string $viewName
- * @param string $param
- * @access public
- * @return array
- */
- public function getPrivModules($viewName = '', $param = '')
- {
- $this->loadModel('setting');
-
- $tree = array();
- $views = empty($viewName) ? $this->setting->getItem("owner=system&module=priv&key=views") : $viewName;
- $views = explode(',', $views);
- $modules = array();
- $moduleLang = $this->getMenuModules('', true);
- foreach($views as $view)
- {
- $viewModules = $this->setting->getItem("owner=system&module=priv&key={$view}Modules");
- if(empty($viewModules)) continue;
-
- $viewModules = explode(',', $viewModules);
- foreach($viewModules as $index => $module)
- {
- $modules[$module] = $param == 'noViewName' ? zget($moduleLang, $module) : $this->lang->{$view}->common . '/' . zget($moduleLang, $module);
- unset($viewModules[$index]);
- }
- }
-
- return $modules;
- }
-
- /**
- * Get priv module view pairs.
- *
- * @access public
- * @return void
- */
- public function getPrivModuleViewPairs()
- {
- $this->loadModel('setting');
-
- $views = $this->setting->getItem("owner=system&module=priv&key=views");
- if(empty($views)) return array();
- $views = explode(',', $views);
-
- $pairs = array();
- foreach($views as $viewIndex => $view)
- {
- $viewModules = $this->setting->getItem("owner=system&module=priv&key={$view}Modules");
- $viewModules = explode(',', $viewModules);
-
- foreach($viewModules as $module) $pairs[$module] = $view;
- }
-
- return $pairs;
- }
-
- /**
- * Get priv package tree list.
- *
- * @access public
- * @return void
- */
- public function getPrivPackageTreeList()
- {
- $this->loadModel('setting');
-
- $views = empty($viewName) ? $this->setting->getItem("owner=system&module=priv&key=views") : $viewName;
- if(empty($views)) return array();
- $views = explode(',', $views);
-
- $modules = array();
- $moduleLang = $this->getMenuModules('', true);
- foreach($views as $viewIndex => $view)
- {
- $viewID = $view . 'View';
- $treeView = new stdclass();
- $treeView->id = $viewID;
- $treeView->type = 'view';
- $treeView->name = $this->lang->{$view}->common;
- $treeView->parent = 0;
- $treeView->path = ",{$viewID},";
- $treeView->grade = 1;
- $treeView->order = $viewIndex;
- $treeView->desc = '';
- $tree[$viewID] = $treeView;
-
- $viewModules = $this->setting->getItem("owner=system&module=priv&key={$view}Modules");
- if(empty($viewModules)) continue;
-
- $viewModules = explode(',', $viewModules);
- foreach($viewModules as $moduleIndex => $module)
- {
- $treeModule = new stdclass();
- $treeModule->id = $module;
- $treeModule->type = 'module';
- $treeModule->name = zget($moduleLang, $module);
- $treeModule->parent = $viewID;
- $treeModule->path = ",{$viewID},{$module},";
- $treeModule->grade = 2;
- $treeModule->order = $moduleIndex;
- $treeModule->desc = '';
- $tree[$module] = $treeModule;
-
- $packages = $this->getPrivPackagesByModule($module);
- foreach($packages as $packageID => $package)
- {
- $treePackage = new stdclass();
- $treePackage->id = $packageID;
- $treePackage->type = 'package';
- $treePackage->name = $package->name;
- $treePackage->parent = $module;
- $treePackage->path = ",{$viewID},{$module},{$packageID},";
- $treePackage->grade = 3;
- $treePackage->desc = $package->desc;
- $treePackage->order = $package->order;
- $tree[$packageID] = $treePackage;
- }
- }
- }
-
- return $tree;
- }
-
- /**
- * Super Model: Init Privs.
- *
- * @param bool $onlyUpdateModule
- * @access public
- * @return void
- */
- public function initPrivs($onlyUpdateModule = true)
- {
- $this->sortResource();
- $resource = json_decode(json_encode($this->lang->resource), true);
- if(!$onlyUpdateModule)
- {
- $this->dao->delete()->from(TABLE_PRIVLANG)->exec();
- $this->dao->delete()->from(TABLE_PRIVRELATION)->exec();
- $this->dao->delete()->from(TABLE_PRIV)->exec();
- $this->dao->delete()->from(TABLE_CONFIG)->where('module')->eq('priv')->exec();
- $this->dbh->exec('ALTER TABLE ' . TABLE_PRIV . ' auto_increment = 1');
- }
-
- $viewModules = array();
- $this->loadModel('setting');
- foreach($resource as $moduleName => $methods)
- {
- $groupKey = $moduleName;
- $view = isset($this->lang->navGroup->{$groupKey}) ? $this->lang->navGroup->{$groupKey} : $moduleName;
- $viewModules[$view][] = $moduleName;
-
- if($onlyUpdateModule) continue;
- $order = 1;
- foreach($methods as $methodName => $methodLang)
- {
- $priv = new stdclass();
- $priv->moduleName = $moduleName;
- $priv->methodName = $methodName;
- $priv->module = $moduleName;
- $priv->package = 0;
- $priv->system = 1;
- $priv->order = $order * 5;
- $order ++;
-
- $this->dao->replace(TABLE_PRIV)->data($priv)->exec();
- if(!dao::isError())
- {
- $privID = $this->dao->lastInsertId();
-
- $this->app->loadLang($moduleName);
- foreach($this->config->langs as $lang => $langValue)
- {
- if($lang != 'zh-cn') continue;
- $privLang = new stdclass();
- $privLang->priv = $privID;
- $privLang->lang = $lang;
- $privLang->name = isset($this->lang->{$moduleName}->{$methodLang}) ? $this->lang->{$moduleName}->{$methodLang} : "{$moduleName}-{$methodLang}";
- $privLang->desc = '';
- $this->dao->replace(TABLE_PRIVLANG)->data($privLang)->exec();
- }
- }
- }
- }
-
- foreach($viewModules as $viewName => $modules)
- {
- $modules = implode(',', $viewModules[$viewName]);
- $this->setting->setItem("system.priv.{$viewName}Modules", $modules);
- }
-
- $views = array_keys($viewModules);
- $this->setting->setItem("system.priv.views", implode(',', $views));
-
- if(!dao::isError()) return true;
- }
-
- /**
- * Super Model: Init Data for priv package.
- *
- * @access public
- * @return void
- */
- public function initData()
- {
- $allResourceFile = $this->app->getModuleRoot() . 'group/lang/allresources.php';
-
- $views = $this->loadModel('setting')->getItem("owner=system&module=priv&key=views");
- $views = array_filter(explode(',', $views));
- $views[] = 'general';
-
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIVLANG . " CHANGE `priv` `objectID` mediumint(8) unsigned NOT NULL;");
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIVLANG . " ADD `objectType` enum('priv','manager') NOT NULL DEFAULT 'priv' AFTER `objectID`;");
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIVLANG . " ADD `key` varchar(100) NOT NULL AFTER `lang`;");
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIVLANG . " CHANGE `name` `value` varchar(255) NOT NULL;");
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIVLANG . " ADD UNIQUE KEY `objectlang` (`objectID`,`objectType`,`lang`);");
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIVLANG . " DROP INDEX `privlang`;");
- $this->dbh->exec("DROP TABLE IF EXISTS " . TABLE_PRIVMANAGER . ";");
- $this->dbh->exec("CREATE TABLE IF NOT EXISTS " . TABLE_PRIVMANAGER . " ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `parent` varchar(30) NOT NULL, `code` varchar(100) NOT NULL, `type` enum('view','module','package') NOT NULL DEFAULT 'package', `order` tinyint(3) unsigned NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIV . " ADD `edition` varchar(30) NOT NULL DEFAULT ',open,biz,max,' AFTER `package`;");
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIV . " ADD `vision` varchar(30) NOT NULL DEFAULT ',rnd,' AFTER `edition`;");
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIVMANAGER . " ADD `edition` varchar(30) NOT NULL DEFAULT ',open,biz,max,' AFTER `type`;");
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIVMANAGER . " ADD `vision` varchar(30) NOT NULL DEFAULT ',rnd,' AFTER `edition`;");
-
- $this->dbh->exec('ALTER TABLE ' . TABLE_PRIV . ' CHANGE `order` `order` mediumint(8) NOT NULL;');
- $this->dbh->exec('ALTER TABLE ' . TABLE_PRIVMANAGER . ' CHANGE `order` `order` mediumint(8) NOT NULL;');
-
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIV . " CHANGE `package` `package` varchar(100) NOT NULL;");
- $this->dbh->exec("UPDATE " . TABLE_PRIV . " SET `package`=`module` WHERE `package`=0;");
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIV . " CHANGE `package` `parent` varchar(100) NOT NULL;");
-
- $this->loadModel('dev');
-
- /* 插入权限所有语言项 */
- $storedPrivs = array();
- $privList = $this->dao->select('*')->from(TABLE_PRIV)->fetchAll('id');
- foreach($privList as $privID => $priv)
- {
- foreach($this->config->langs as $lang => $langValue)
- {
- $methodLang = isset($this->lang->resource->{$priv->moduleName}->{$priv->methodName}) ? $this->lang->resource->{$priv->moduleName}->{$priv->methodName} : $priv->methodName;
-
- $privLang = new stdclass();
- $privLang->objectID = $privID;
- $privLang->objectType = 'priv';
- $privLang->lang = $lang;
- $privLang->key = "{$priv->moduleName}-{$methodLang}";
- $privLang->value = '';
- $privLang->desc = '';
- $this->dao->replace(TABLE_PRIVLANG)->data($privLang)->exec();
- }
-
- $storedPrivs["{$priv->moduleName}-{$priv->methodName}"] = $priv;
- }
-
- $originResource = json_decode(json_encode($this->lang->resource), true);
- $originPrivs = array();
- foreach($originResource as $moduleName => $methods)
- {
- foreach($methods as $methodName => $methodLang)
- {
- $originPrivs["$moduleName-$methodName"] = "$moduleName-$methodName";
- }
- }
-
- /* 删掉语言项中不存在的权限 */
- foreach($storedPrivs as $moduleMethod => $storedPriv)
- {
- if(!empty($originPrivs[$moduleMethod])) continue;
- $this->dao->delete()->from(TABLE_PRIV)->where('id')->eq($storedPriv->id)->exec();
- $this->dao->delete()->from(TABLE_PRIVLANG)->where('objectType')->eq('priv')->andWhere('objectID')->eq($storedPriv->id)->exec();
- }
-
- /* 迁移权限包数据 privpackage => privmanager */
- /* 迁移权限包语言项 privpackage => privlang */
- $packageList = $this->dao->select('*')->from(TABLE_PRIVPACKAGE)->fetchAll('id');
- foreach($packageList as $packageID => $package)
- {
- $packageData = new stdclass();
- $packageData->id = $packageID;
- $packageData->parent = $package->module;
- $packageData->type = 'package';
- $packageData->order = $package->order;
- $packageData->vision = ',rnd,lite,';
-
- $this->dao->insert(TABLE_PRIVMANAGER)->data($packageData)->exec();
-
- $packageLang = new stdclass();
- $packageLang->objectID = $packageID;
- $packageLang->objectType = 'manager';
- $packageLang->lang = 'zh-cn';
- $packageLang->key = '';
- $packageLang->value = $package->name;
- $packageLang->desc = $package->desc;
-
- $this->dao->insert(TABLE_PRIVLANG)->data($packageLang)->exec();
- }
-
- /* 初始化视图和模块到zt_privmanager */
- $viewPairs = array();
- $modulePairs = array();
- $indexMenu = array();
- $hasStored = false;
- $this->app->loadLang('index');
- $this->lang->mainNav = json_decode(json_encode($this->lang->mainNav), true);
-
- $indexMenu['index'] = "{$this->lang->navIcons['my']} {$this->lang->index->common}|index|index|";
- $this->lang->mainNav = (object)array_merge($indexMenu, $this->lang->mainNav);
- foreach($this->config->langs as $lang => $langValue)
- {
- /* 视图 */
- $viewOrder = 1;
- $moduleOrder = 1;
- $this->lang->mainNav->general = "{$this->lang->navIcons['my']} {$this->lang->my->shortCommon}|my|index|";
- foreach($views as $moduleMenu)
- {
- $viewID = 0;
- if($moduleMenu != 'general' and isset($this->lang->mainNav->{$moduleMenu}))
- {
- if(!$hasStored)
- {
- $viewData = new stdclass();
- $viewData->parent = '';
- $viewData->code = $moduleMenu;
- $viewData->type = 'view';
- $viewData->order = $viewOrder * 10;
- $viewOrder ++;
-
- $this->dao->insert(TABLE_PRIVMANAGER)->data($viewData)->exec();
- $viewID = $this->dao->lastInsertId();
- }
- else
- {
- $viewID = $this->dao->select('id')->from(TABLE_PRIVMANAGER)
- ->where('`type`')->eq('view')
- ->andWhere('code')->eq($moduleMenu)
- ->fetch('id');
- }
-
- $viewLang = new stdclass();
- $viewLang->objectID = $viewID;
- $viewLang->objectType = 'manager';
- $viewLang->lang = $lang;
- $viewLang->key = $moduleMenu;
- $viewLang->value = '';
- $viewLang->desc = '';
-
- $this->dao->insert(TABLE_PRIVLANG)->data($viewLang)->exec();
- $viewPairs[$moduleMenu] = $viewID;
- }
-
- /* 模块 */
- $modules = $this->getMenuModules($moduleMenu);
- $viewModules = $this->setting->getItem("owner=system&module=priv&key={$moduleMenu}Modules");
- $viewModules = array_filter(explode(',', $viewModules));
- foreach($viewModules as $moduleName)
- {
- if(!$hasStored)
- {
- $moduleData = new stdclass();
- $moduleData->parent = (isset($this->lang->navGroup->{$moduleName}) and !in_array($moduleMenu, array('misc', 'conference'))) ? $viewPairs[$moduleMenu] : 0;
- $moduleData->code = $moduleName;
- $moduleData->type = 'module';
- $moduleData->order = $moduleOrder * 10;
- $moduleOrder ++;
-
- $this->dao->insert(TABLE_PRIVMANAGER)->data($moduleData)->exec();
- $moduleID = $this->dao->lastInsertId();
- }
- else
- {
- $moduleID = $this->dao->select('id')->from(TABLE_PRIVMANAGER)
- ->where('`type`')->eq('module')
- ->andWhere('code')->eq($moduleName)
- ->fetch('id');
- }
-
- $moduleLang = new stdclass();
- $moduleLang->objectID = $moduleID;
- $moduleLang->objectType = 'manager';
- $moduleLang->lang = $lang;
- $moduleLang->key = $moduleName;
- $moduleLang->value = '';
- $moduleLang->desc = '';
-
- $this->dao->insert(TABLE_PRIVLANG)->data($moduleLang)->exec();
- $modulePairs[$moduleName] = $moduleID;
-
- /* 更新权限包的parent字段 */
- $this->dao->update(TABLE_PRIVMANAGER)->set('`parent`')->eq($moduleID)
- ->where('`parent`')->eq($moduleName)
- ->andWhere('`type`')->eq('package')
- ->exec();
-
- /* 更新权限的parent字段 */
- $this->dao->update(TABLE_PRIV)->set('`parent`')->eq($moduleID)
- ->where('`parent`')->eq($moduleName)
- ->exec();
- }
- }
-
- $hasStored = true;
- }
-
- /* 初始化 view 的edition和vision字段 */
- include $allResourceFile;
- $editionMap = array('open' => ',open,biz,max,', 'biz' => ',biz,max,', 'max' => ',max,');
- foreach($views as $edition => $visions)
- {
- foreach($visions as $vision => $viewList)
- {
- $vision = $vision == 'lite' ? ',rnd,lite,' : ',rnd,';
- $viewList = unserialize($viewList);
- foreach($viewList as $view)
- {
- if($view == 'menuOrder') continue;
-
- $this->dao->update(TABLE_PRIVMANAGER)
- ->set('edition')->eq("{$editionMap[$edition]}")
- ->set('vision')->eq("$vision")
- ->where('id')->eq($viewPairs[$view])
- ->exec();
- }
- }
- }
-
- /* 初始化 module 和 priv 的edition和vision字段 */
- foreach($resources as $edition => $visions)
- {
- foreach($visions as $vision => $modules)
- {
- $vision = $vision == 'lite' ? ',rnd,lite,' : ',rnd,';
- $modules = unserialize($modules);
- foreach($modules as $module => $resourceList)
- {
- if(!empty($modulePairs[$module]))
- {
- $this->dao->update(TABLE_PRIVMANAGER)
- ->set('edition')->eq("{$editionMap[$edition]}")
- ->set('vision')->eq("$vision")
- ->where('id')->eq($modulePairs[$module])
- ->exec();
- }
-
- foreach($resourceList as $method => $methodLang)
- {
- $this->dao->update(TABLE_PRIV)
- ->set('edition')->eq("{$editionMap[$edition]}")
- ->set('vision')->eq("$vision")
- ->where('moduleName')->eq($module)
- ->andWhere('methodName')->eq($method)
- ->exec();
- }
- }
- }
- }
-
- $this->dbh->exec('ALTER TABLE ' . TABLE_PRIV . ' DROP `module`;');
- $this->dbh->exec('ALTER TABLE ' . TABLE_PRIV . ' CHANGE `moduleName` `module` varchar(30) NOT NULL;');
- $this->dbh->exec('ALTER TABLE ' . TABLE_PRIV . ' CHANGE `methodName` `method` varchar(30) NOT NULL;');
- $this->dbh->exec('ALTER TABLE ' . TABLE_PRIV . ' DROP INDEX `priv`;');
- $this->dbh->exec('ALTER TABLE ' . TABLE_PRIV . ' ADD UNIQUE `priv` (`module`,`method`);');
- $this->dbh->exec("ALTER TABLE " . TABLE_PRIV . " CHANGE `parent` `parent` mediumint(8) unsigned NOT NULL;");
- $this->dbh->exec('ALTER TABLE ' . TABLE_PRIVMANAGER . ' CHANGE `parent` `parent` mediumint(8) unsigned NOT NULL;');
- $this->dbh->exec('DROP TABLE IF EXISTS ' . TABLE_PRIVPACKAGE . ';');
-
- echo 'success';
- helper::end();
- }
-
- /**
- * Super Model: Init system view, module and privileges.
- *
- * @access public
- * @return void
- */
- public function initSystemResources()
- {
- $allResourceFile = $this->app->getModuleRoot() . 'group/lang/allresources.php';
- if(!file_exists("$allResourceFile")) die("Please execute the commands: touch $allResourceFile; chmod 777 $allResourceFile");
-
- $resourceContents = file_get_contents($allResourceFile);
- if(!$resourceContents) file_put_contents($allResourceFile, "sortResource();
- $resource = json_decode(json_encode($this->lang->resource), true);
- $resource = serialize($resource);
- $view = array_keys(json_decode(json_encode($this->lang->mainNav), true));
- $view = serialize($view);
-
- file_put_contents($allResourceFile, "\$views['{$this->config->edition}']['{$this->config->vision}'] = '$view';\n", FILE_APPEND);
- file_put_contents($allResourceFile, "\$resources['{$this->config->edition}']['{$this->config->vision}'] = '$resource';\n", FILE_APPEND);
-
- echo 'success';
- helper::end();
- }
-
- /**
- * Super Model: Init views, modules and privileges for IPD.
- *
- * @access public
- * @return bool
- */
- public function initPrivs4IPD()
- {
- $views = array_keys(json_decode(json_encode($this->lang->mainNav), true));
- $resources = json_decode(json_encode($this->lang->resource), true);
-
- $hasStoredPrivs = $this->dao->select('*')->from(TABLE_PRIV)->fetchAll('id');
- foreach($hasStoredPrivs as $privID => $hasStoredPriv)
- {
- $hasStoredPrivs["{$hasStoredPriv->module}-{$hasStoredPriv->method}"] = $hasStoredPriv;
- unset($hasStoredPrivs[$privID]);
- }
-
- $hasStoredManagered = $this->dao->select('*')->from(TABLE_PRIVMANAGER)->where('type')->ne('package')->fetchGroup('type', 'code');
- $hasStoredViews = $hasStoredManagered['view'];
- $hasStoredModules = $hasStoredManagered['module'];
-
- $viewOrder = 1;
- $viewPairs = array();
- foreach($views as $view)
- {
- if($view == 'menuOrder') continue;
-
- if(!empty($hasStoredViews[$view]))
- {
- $vision = strpos($hasStoredViews[$view]->vision, ",{$this->config->vision},") !== false ? $hasStoredViews[$view]->vision : $hasStoredViews[$view]->vision . "{$this->config->vision},";
- $edition = strpos($hasStoredViews[$view]->edition, ",{$this->config->edition},") !== false ? $hasStoredViews[$view]->edition : $hasStoredViews[$view]->edition . "{$this->config->edition},";
-
- $viewID = $hasStoredViews[$view]->id;
- $this->dao->update(TABLE_PRIVMANAGER)
- ->set('vision')->eq($vision)
- ->set('edition')->eq($edition)
- ->where('id')->eq($viewID)
- ->exec();
- }
- else
- {
- $viewManager = new stdclass();
- $viewManager->parent = 0;
- $viewManager->code = $view;
- $viewManager->type = 'view';
- $viewManager->edition = ',ipd,';
- $viewManager->vision = ",{$this->config->vision},";
- $viewManager->order = $viewOrder * 10;
- $viewOrder ++;
-
- $this->dao->insert(TABLE_PRIVMANAGER)->data($viewManager)->exec();
- $viewID = $this->dao->lastInsertId();
-
- foreach($this->config->langs as $lang => $langValue)
- {
- $viewLang = new stdclass();
- $viewLang->objectID = $viewID;
- $viewLang->objectType = 'manager';
- $viewLang->lang = $lang;
- $viewLang->key = $view;
- $viewLang->value = '';
- $viewLang->desc = '';
-
- $this->dao->insert(TABLE_PRIVLANG)->data($viewLang)->exec();
- }
- }
-
- $viewPairs[$view] = $viewID;
- }
-
- $moduleOrder = 1;
- foreach($resources as $module => $privs)
- {
- if(!empty($hasStoredModules[$module]))
- {
- $vision = strpos($hasStoredModules[$module]->vision, ",{$this->config->vision},") !== false ? $hasStoredModules[$module]->vision : $hasStoredModules[$module]->vision . "{$this->config->vision},";
- $edition = strpos($hasStoredModules[$module]->edition, ",{$this->config->edition},") !== false ? $hasStoredModules[$module]->edition : $hasStoredModules[$module]->edition . "{$this->config->edition},";
-
- $moduleID = $hasStoredModules[$module]->id;
- $this->dao->update(TABLE_PRIVMANAGER)
- ->set('vision')->eq($vision)
- ->set('edition')->eq($edition)
- ->where('id')->eq($moduleID)
- ->exec();
- }
- else
- {
- $moduleMenu = isset($this->lang->navGroup->{$module}) ? $this->lang->navGroup->{$module} : '';
- $moduleManager = new stdclass();
- $moduleManager->parent = $moduleMenu ? $viewPairs[$moduleMenu] : 0;
- $moduleManager->code = $module;
- $moduleManager->type = 'module';
- $moduleManager->edition = ',ipd,';
- $moduleManager->vision = ",{$this->config->vision},";
- $moduleManager->order = $moduleOrder * 10;
- $moduleOrder ++;
-
- $this->dao->insert(TABLE_PRIVMANAGER)->data($moduleManager)->exec();
- $moduleID = $this->dao->lastInsertId();
-
- foreach($this->config->langs as $lang => $langValue)
- {
- $moduleLang = new stdclass();
- $moduleLang->objectID = $moduleID;
- $moduleLang->objectType = 'manager';
- $moduleLang->lang = $lang;
- $moduleLang->key = $module;
- $moduleLang->value = '';
- $moduleLang->desc = '';
-
- $this->dao->insert(TABLE_PRIVLANG)->data($moduleLang)->exec();
- }
- }
-
- $privOrder = 1;
- foreach($privs as $methodName => $methodLang)
- {
- if(!empty($hasStoredPrivs["$module-$methodName"]))
- {
- $vision = strpos($hasStoredPrivs["$module-$methodName"]->vision, ",{$this->config->vision},") !== false ? $hasStoredPrivs["$module-$methodName"]->vision : $hasStoredPrivs["$module-$methodName"]->vision . "{$this->config->vision},";
- $edition = strpos($hasStoredPrivs["$module-$methodName"]->edition, ",{$this->config->edition},") !== false ? $hasStoredPrivs["$module-$methodName"]->edition : $hasStoredPrivs["$module-$methodName"]->edition . "{$this->config->edition},";
-
- $this->dao->update(TABLE_PRIV)
- ->set('vision')->eq($vision)
- ->set('edition')->eq($edition)
- ->where('id')->eq($hasStoredPrivs["$module-$methodName"]->id)
- ->exec();
- }
- else
- {
- $priv = new stdclass();
- $priv->module = $module;
- $priv->method = $methodName;
- $priv->parent = $moduleID;
- $priv->edition = ',ipd,';
- $priv->vision = ",{$this->config->vision},";
- $priv->system = '1';
- $priv->order = $privOrder * 10;
- $privOrder ++;
-
- $this->dao->insert(TABLE_PRIV)->data($priv)->exec();
- $privID = $this->dao->lastInsertId();
-
- foreach($this->config->langs as $lang => $langValue)
- {
- $privLang = new stdclass();
- $privLang->objectID = $privID;
- $privLang->objectType = 'priv';
- $privLang->lang = $lang;
- $privLang->key = "{$module}-{$methodLang}";
- $privLang->value = '';
- $privLang->desc = '';
- $this->dao->replace(TABLE_PRIVLANG)->data($privLang)->exec();
- }
- }
- }
- }
-
- return true;
- }
-
- /**
- * Get priv by id.
- *
- * @param int $privID
- * @param string $lang
- * @access public
- * @return object
- */
- public function getPrivByID($privID, $lang = '')
- {
- if(empty($lang)) $lang = $this->app->getClientLang();
- return $this->dao->select('t1.*,t2.key,t2.value,t2.desc')->from(TABLE_PRIV)->alias('t1')
- ->leftJoin(TABLE_PRIVLANG)->alias('t2')->on('t1.id=t2.objectID')
- ->where('t1.id')->eq((int)$privID)
- ->andWhere('t2.objectType')->eq('priv')
- ->andWhere('t2.lang')->eq($lang)
- ->fetch();
- }
-
- /**
- * Get priv by id list.
- *
- * @param string $privIdList
- * @access public
- * @return array
- */
- public function getPrivByIdList($privIdList)
- {
- return $this->dao->select('t1.*,t2.key,t2.value,t2.desc')->from(TABLE_PRIV)->alias('t1')
- ->leftJoin(TABLE_PRIVLANG)->alias('t2')->on('t1.id=t2.objectID')
- ->where('t1.id')->in($privIdList)
- ->andWhere('t1.edition')->like("%,{$this->config->edition},%")
- ->andWhere('t1.vision')->like("%,{$this->config->vision},%")
- ->andWhere('t2.lang')->eq($this->app->getClientLang())
- ->andWhere('t2.objectType')->eq('priv')
- ->orderBy('order_asc')
- ->fetchAll('id');
- }
-
- /**
- * Get priv by module.
- *
- * @param array $modules
- * @access public
- * @return array
- */
- public function getPrivByModule($modules)
- {
- $moduleIdList = $this->dao->select('id')->from(TABLE_PRIVMANAGER)
- ->where('code')->in($modules)
- ->andWhere('`type`')->eq('module')
- ->fetchAll('id');
-
- $packageIdList = $this->dao->select('id')->from(TABLE_PRIVMANAGER)
- ->where('`parent`')->in(array_keys($moduleIdList))
- ->fetchAll('id');
-
- $parentsIdList = array_merge(array_keys($moduleIdList), array_keys($packageIdList));
-
- $stmt = $this->dao->select('t1.*,t3.`parent` as moduleID,t2.`key`,t2.value,t2.`desc`')->from(TABLE_PRIV)->alias('t1')
- ->leftJoin(TABLE_PRIVLANG)->alias('t2')->on('t1.id=t2.objectID')
- ->leftJoin(TABLE_PRIVMANAGER)->alias('t3')->on('t1.parent=t3.id')
- ->where('t3.id')->in($parentsIdList)
- ->andWhere('t1.edition')->like("%,{$this->config->edition},%")
- ->andWhere('t1.vision')->like("%,{$this->config->vision},%")
- ->andWhere('t2.lang')->eq($this->app->getClientLang())
- ->andWhere('t2.objectType')->eq('priv')
- ->orderBy('t1.`order`')
- ->query();
-
- $privs = array();
- while($priv = $stmt->fetch()) $privs[$priv->moduleID][$priv->parent][$priv->id] = $priv;
- return $privs;
- }
-
/**
* Get priv list by nav.
*
@@ -1833,7 +820,7 @@ class groupModel extends model
* @access public
* @return array
*/
- public function getPrivListByNav($nav = '', $version = '')
+ public function getPrivListByNav(string $nav = '', string $version = ''): array
{
$privList = array();
$allPrivs = array();
@@ -1886,542 +873,13 @@ class groupModel extends model
return $privList;
}
- /**
- * Get privs list by module.
- *
- * @param int $queryID
- * @param object $pager
- * @access public
- * @return array
- */
- public function getPrivsListBySearch($queryID = 0, $pager = null)
- {
- $query = $queryID ? $this->loadModel('search')->getQuery($queryID) : '';
-
- /* Get the sql and form status from the query. */
- if($query)
- {
- $this->session->set('privQuery', $query->sql);
- $this->session->set('privForm', $query->form);
- }
- if($this->session->privQuery == false) $this->session->set('privQuery', ' 1 = 1');
-
- $privQuery = $this->session->privQuery;
-
- $this->loadModel('setting');
- if(strpos($privQuery, '`view`') !== false)
- {
- preg_match_all("/`view`[^']+'([^']+)'/Ui", $privQuery, $out);
- $privQuery = str_replace(array('`view` =', '`view` LIKE', '`view` =', '`view` !=', '`view` NOT LIKE'), array('`view` IN', '`view` IN', '`view` IN', '`view` NOT IN', '`view` NOT IN'), $privQuery);
- foreach($out[1] as $view)
- {
- $view = str_replace('%', '', $view);
- $modules = $this->setting->getItem("owner=system&module=priv&key={$view}Modules");
- $modules = str_replace(',', "','", $modules);
- $privQuery = preg_replace("/`view`([^']+)'([%]?{$view}[%]?)'/Ui", "`module`$1('{$modules}')", $privQuery);
- }
- }
-
- if(strpos($privQuery, '`recommendPrivs`') !== false)
- {
- preg_match_all("/`recommendPrivs`[^']+'([^']+)'/Ui", $privQuery, $out);
- foreach($out[1] as $priv)
- {
- $priv = str_replace('%', '', $priv);
- if(!empty($priv))
- {
- $privQuery = preg_replace(array('/`recommendPrivs`[ ]+=/', '/`recommendPrivs`[ ]+LIKE/', '/`recommendPrivs`[ ]+=/', '/`recommendPrivs`[ ]+!=/', '/`recommendPrivs`[ ]+NOT LIKE/'), array('`recommendPrivs` IN', '`recommendPrivs` IN', '`recommendPrivs` IN', '`recommendPrivs` NOT IN', '`recommendPrivs` NOT IN'), $privQuery);
- $privs = $this->dao->select('priv,priv')->from(TABLE_PRIVRELATION)->where('relationPriv')->eq($priv)->andWhere('type')->eq('recommend')->fetchPairs();
- }
- else
- {
- $privQuery = preg_replace(array('/`recommendPrivs`[ ]+=/', '/`recommendPrivs`[ ]+LIKE/', '/`recommendPrivs`[ ]+=/', '/`recommendPrivs`[ ]+!=/', '/`recommendPrivs`[ ]+NOT LIKE/'), array('`recommendPrivs` NOT IN', '`recommendPrivs` NOT IN', '`recommendPrivs` NOT IN', '`recommendPrivs` IN', '`recommendPrivs` IN'), $privQuery);
- $privs = $this->dao->select('priv,relationPriv')->from(TABLE_PRIVRELATION)->where('type')->eq('recommend')->fetchPairs();
- $privs = array_unique(array_keys($privs) + array_values($privs));
- }
- $privs = implode("','", $privs);
- $privs = !empty($privs) ? $privs : 0;
- $privQuery = preg_replace("/`recommendPrivs`([^']+)'([%]?{$priv}[%]?)'/Ui", "t1.`id`$1('{$privs}')", $privQuery);
- }
- }
- if(strpos($privQuery, '`dependPrivs`') !== false)
- {
- preg_match_all("/`dependPrivs`[^']+'([^']*)'/Ui", $privQuery, $out);
- foreach($out[1] as $priv)
- {
- $priv = str_replace('%', '', $priv);
- if(!empty($priv))
- {
- $privQuery = preg_replace(array('/`dependPrivs`[ ]+=/', '/`dependPrivs`[ ]+LIKE/', '/`dependPrivs`[ ]+=/', '/`dependPrivs`[ ]+!=/', '/`dependPrivs`[ ]+NOT LIKE/'), array('`dependPrivs` IN', '`dependPrivs` IN', '`dependPrivs` IN', '`dependPrivs` NOT IN', '`dependPrivs` NOT IN'), $privQuery);
- $privs = $this->dao->select('priv,priv')->from(TABLE_PRIVRELATION)->where('relationPriv')->eq($priv)->andWhere('type')->eq('depend')->fetchPairs();
- }
- else
- {
- $privQuery = preg_replace(array('/`dependPrivs`[ ]+=/', '/`dependPrivs`[ ]+LIKE/', '/`dependPrivs`[ ]+=/', '/`dependPrivs`[ ]+!=/', '/`dependPrivs`[ ]+NOT LIKE/'), array('`dependPrivs` NOT IN', '`dependPrivs` NOT IN', '`dependPrivs` NOT IN', '`dependPrivs` IN', '`dependPrivs` IN'), $privQuery);
- $privs = $this->dao->select('priv,relationPriv')->from(TABLE_PRIVRELATION)->where('type')->eq('depend')->fetchPairs();
- $privs = array_unique(array_keys($privs) + array_values($privs));
- }
- $privs = implode("','", $privs);
- $privs = !empty($privs) ? $privs : 0;
- $privQuery = preg_replace("/`dependPrivs`([^']+)'([%]?{$priv}[%]?)'/Ui", "t1.`id`$1('{$privs}')", $privQuery);
- }
- }
- if(strpos($privQuery, '`name`') !== false) $privQuery = str_replace('`name`', 't2.`name`', $privQuery);
- if(strpos($privQuery, '`module`') !== false) $privQuery = str_replace('`module`', 't1.`module`', $privQuery);
- if(strpos($privQuery, '`desc`') !== false) $privQuery = str_replace('`desc`', 't2.`desc`', $privQuery);
-
- $views = empty($view) ? $this->setting->getItem("owner=system&module=priv&key=views") : $view;
- $views = explode(',', $views);
- $modules = '';
- foreach($views as $view) $modules .= ',' . $this->setting->getItem("owner=system&module=priv&key={$view}Modules");
- $modules = trim($modules, ',');
-
- return $this->dao->select("t1.*,t2.name,t2.desc, INSTR('$modules', t1.`module`) as moduleOrder")->from(TABLE_PRIV)->alias('t1')
- ->leftJoin(TABLE_PRIVLANG)->alias('t2')->on('t1.id=t2.priv')
- ->leftJoin(TABLE_PRIVPACKAGE)->alias('t3')->on('t1.parent=t3.id')
- ->where('1=1')
- ->andWhere($privQuery)
- ->andWhere('t1.edition')->like("%,{$this->config->edition},%")
- ->andWhere('t1.vision')->like("%,{$this->config->vision},%")
- ->andWhere('t2.lang')->eq($this->app->getClientLang())
- ->orderBy("moduleOrder asc, t3.order asc, `order` asc")
- ->page($pager)
- ->fetchAll('id');
- }
-
- /**
- * Get priv relation.
- *
- * @param int $priv
- * @param string $type depend|recommend
- * @param string $module
- * @access public
- * @return array
- */
- public function getPrivRelation($priv, $type = '', $module = '')
- {
- $relations = $this->dao->select('t1.type,t2.*,t3.`key`,t3.value')->from(TABLE_PRIVRELATION)->alias('t1')
- ->leftJoin(TABLE_PRIV)->alias('t2')->on("t1.relationPriv=CONCAT(t2.module, '-', t2.method)")
- ->leftJoin(TABLE_PRIVLANG)->alias('t3')->on('t2.id=t3.objectID')
- ->where('t1.priv')->eq($priv)
- ->andWhere('t2.edition')->like("%,{$this->config->edition},%")
- ->andWhere('t2.vision')->like("%,{$this->config->vision},%")
- ->andWhere('t3.objectType')->eq('priv')
- ->beginIF(!empty($type))->andWhere('t1.type')->eq($type)->fi()
- ->beginIF($module)->andWhere('t2.module')->eq($module)->fi()
- ->fetchGroup('type', 'id');
-
- foreach($relations as $type => $privList) $relations[$type] = $this->transformPrivLang($privList);
-
- if(!empty($type)) return zget($relations, $type, array());
- return $relations;
- }
-
- /**
- * Get priv relation.
- *
- * @param array $privs
- * @param string $type depend|recommend
- * @access public
- * @return array
- */
- public function getPrivRelationsByIdList($privs, $type = '', $returnType = 'name')
- {
- $privs = $this->dao->select('t1.priv,t3.`key`,t3.value,t1.type,t1.relationPriv')->from(TABLE_PRIVRELATION)->alias('t1')
- ->leftJoin(TABLE_PRIV)->alias('t2')->on("t1.relationPriv=CONCAT(t2.module, '-', t2.method)")
- ->leftJoin(TABLE_PRIVLANG)->alias('t3')->on('t2.id=t3.objectID')
- ->where('t1.priv')->in($privs)
- ->andWhere('t2.edition')->like("%,{$this->config->edition},%")
- ->andWhere('t2.vision')->like("%,{$this->config->vision},%")
- ->andWhere('t3.objectType')->eq('priv')
- ->beginIF(!empty($type))->andWhere('t1.type')->eq($type)->fi()
- ->fetchGroup('type', 'relationPriv');
- if($returnType == 'idGroup') return $privs;
-
- $relationPrivs = array();
- foreach($privs as $type => $typePrivs)
- {
- $typePrivs = $this->transformPrivLang($typePrivs);
- $relationPrivs[$type] = array();
- foreach($typePrivs as $priv) $relationPrivs[$type][$priv->priv] = empty($relationPrivs[$type][$priv->priv]) ? $priv->name : "{$relationPrivs[$type][$priv->priv]},{$priv->name}";
- }
-
- return $relationPrivs;
- }
-
- /**
- * Save relation.
- *
- * @param array $privIdList
- * @param string $type depend|recommend
- * @access public
- * @return bool
- */
- public function saveRelation($privIdList, $type)
- {
- if(is_string($privIdList)) $privIdList = explode(',', $privIdList);
- $data = fixer::input('post')->get();
- if(empty($data->relation)) return false;
-
- foreach($privIdList as $privID)
- {
- $relation = new stdclass();
- $relation->priv = $privID;
- $relation->type = $type;
- foreach($data->relation as $privModule => $privRelations)
- {
- foreach($privRelations as $privRelation)
- {
- if($privID == $privRelation) continue;
- $relation->relationPriv = $privRelation;
- $this->dao->replace(TABLE_PRIVRELATION)->data($relation)->exec();
- }
- }
- }
- return true;
- }
-
- /**
- * Get priv package tree.
- *
- * @param string $type
- * @return array
- **/
- public function getModuleAndPackageTree($type = 'all')
- {
- $modules = $this->getMenuModules(null, true);
-
- $tree = array();
-
- foreach($modules as $module => $moduleName)
- {
- if($type == 'all') $tree[$module] = $moduleName;
- $packages = $this->getPrivPackagesByModule($module);
- foreach($packages as $packageID => $package)
- {
- $tree[$module . ',' . $packageID] = $moduleName . '/' . $package->name;
- }
- }
- return $tree;
- }
-
- /**
- * Create a privilege package.
- *
- * @access public
- * @return int
- */
- public function createPriv()
- {
- $data = fixer::input('post')->get();
-
- if(!empty($data->moduleName) and !empty($data->methodName))
- {
- $method = $this->dao->select('`moduleName`,`methodName`')->from(TABLE_PRIV)->where('`moduleName`')->eq($data->moduleName)->andWhere('`methodName`')->eq($data->methodName)->fetchPairs();
- if(count($method) > 0) dao::$errors['methodName'] = $this->lang->group->repeatPriv;
- }
-
- $this->config->priv->create->requiredFields = explode(',', $this->config->priv->create->requiredFields);
- foreach($this->config->priv->create->requiredFields as $field)
- {
- if(isset($data->{$field}) and empty($data->{$field}))
- {
- $langField = 'priv' . ucfirst($field);
- dao::$errors[$field] = sprintf($this->lang->error->notempty, $this->lang->group->{$langField});
- }
- }
-
- if(dao::isError()) return false;
-
- $priv = fixer::input('post')->remove('name,desc,view')->get();
- if(!empty($priv->module)) $priv->order = $this->dao->select('(count(`id`) + 1) * 5 as `order`')->from(TABLE_PRIV)->where('`module`')->eq($priv->module)->andWhere('`package`')->eq($priv->package)->fetch('order');
- $this->dao->insert(TABLE_PRIV)->data($priv)->exec();
- if(dao::isError()) return false;
-
- $privID = $this->dao->lastInsertId();
-
- $privLang = fixer::input('post')->remove('moduleName,methodName,view,module,package')->get();
- $privLang->priv = $privID;
- $privLang->lang = $this->app->clientLang;
- $this->dao->insert(TABLE_PRIVLANG)->data($privLang)->exec();
-
- $this->loadModel('action')->create('privlang', $privID, 'Opened');
- return $packageID;
- }
-
- /**
- * update priv info
- *
- * @param void
- * @return void
- **/
- public function updatePriv($privID, $lang)
- {
- $oldPriv = $this->getPrivByID($privID, $lang);
-
- $data = fixer::input('post')->get();
-
- if(!empty($data->moduleName) and !empty($data->methodName))
- {
- $method = $this->dao->select('moduleName,methodName')->from(TABLE_PRIV)->where('`moduleName`')->eq($data->moduleName)->andWhere('`methodName`')->eq($data->methodName)->andWhere('id')->ne($privID)->fetchAll('methodName');
- if(count($method) > 0) dao::$errors['methodName'] = $this->lang->group->repeatPriv;
- }
-
- $this->config->priv->edit->requiredFields = explode(',', $this->config->priv->edit->requiredFields);
- foreach($this->config->priv->edit->requiredFields as $field)
- {
- if(isset($data->{$field}) and empty($data->{$field}))
- {
- $langField = 'priv' . ucfirst($field);
- dao::$errors[$field] = sprintf($this->lang->error->notempty, $this->lang->group->{$langField});
- }
- }
-
- if(dao::isError()) return false;
-
- $priv = fixer::input('post')->remove('name,desc,view')->get();
- if(!empty($priv->module) and $priv->module != $oldPriv->module and $priv->package != $oldPriv->package) $priv->order = $this->dao->select('(count(`id`) + 1) * 5 as `order`')->from(TABLE_PRIV)->where('`module`')->eq($priv->module)->andWhere('`package`')->eq($priv->package)->fetch('order');
- $this->dao->update(TABLE_PRIV)->data($priv)->where('id')->eq($privID)->exec();
-
- $privLang = fixer::input('post')->remove('moduleName,methodName,view,module,package')->get();
- $this->dao->update(TABLE_PRIVLANG)->data($privLang)->where('priv')->eq($privID)->andWhere('lang')->eq($lang)->exec();
-
- $priv = $this->getPrivByID($privID, $lang);
-
- $changes = common::createChanges($oldPriv, $priv);
- return $changes;
-
- }
-
- /**
- * Delete a priv.
- *
- * @param int $privID
- * @access public
- * @return bool
- */
- public function deletePriv($privID)
- {
- $this->dao->delete()->from(TABLE_PRIV)->where('id')->eq($privID)->exec();
- $this->dao->delete()->from(TABLE_PRIVLANG)->where('priv')->eq($privID)->exec();
- $this->dao->delete()->from(TABLE_PRIVRELATION)->where('priv')->eq($privID)->orWhere('relationPriv')->eq($privID)->exec();
- if(dao::isError()) return false;
- }
-
- /**
- * Batch change package.
- *
- * @param array $privIdList
- * @param string $module
- * @param int $packageID
- * @access public
- * @return void
- */
- public function batchChangePackage($privIdList, $module, $packageID)
- {
- $oldPrivs = $this->getPrivByIdList($privIdList);
- foreach($privIdList as $privID)
- {
- $oldPriv = $oldPrivs[$privID];
- if($packageID == $oldPriv->package and $module == $oldPriv->module) continue;
-
- $priv = new stdclass();
- $priv->module = $module;
- $priv->package = $packageID;
-
- $this->dao->update(TABLE_PRIV)->data($priv)->autoCheck()->where('id')->eq((int)$privID)->exec();
- if(!dao::isError()) $allChanges[$privID] = common::createChanges($oldPriv, $priv);
- }
- return $allChanges;
- }
-
- /**
- * Build priv search form.
- *
- * @param int $queryID
- * @param string $actionURL
- * @access public
- * @return void
- */
- public function buildPrivSearchForm($queryID, $actionURL)
- {
- $this->config->group->priv->search['actionURL'] = $actionURL;
- $this->config->group->priv->search['queryID'] = $queryID;
-
- $this->loadModel('setting');
-
- $views = $this->setting->getItem("owner=system&module=priv&key=views");
- $views = explode(',', $views);
- foreach($views as $index => $view)
- {
- $views[$view] = isset($this->lang->{$view}->common) ? $this->lang->{$view}->common : $view;
- unset($views[$index]);
- }
-
- $modules = '';
- foreach(array_keys($views) as $view) $modules .= ',' . $this->setting->getItem("owner=system&module=priv&key={$view}Modules");
- $modules = trim($modules, ',');
- $modules = explode(',', $modules);
- $moduleLang = $this->getMenuModules('', true);
- foreach($modules as $index => $module)
- {
- $modules[$module] = zget($moduleLang, $module);
- unset($modules[$index]);
- }
-
- $packages = $this->getPrivPackagePairs();
- $packageModules = $this->getPrivPackagePairs('', '', 'module');
- foreach($packages as $packageID => $package)
- {
- $packages[$packageID] = $modules[$packageModules[$packageID]] . '/' . $package;
- }
-
- $privs = array();
- $privList = $this->getPrivsListByView();
- foreach($privList as $privID => $priv)
- {
- $privs[$privID] = $modules[$priv->module] . '/' . $priv->name;
- }
-
- $this->config->group->priv->search['params']['view']['values'] = $views;
- $this->config->group->priv->search['params']['module']['values'] = $modules;
- $this->config->group->priv->search['params']['package']['values'] = $packages;
- $this->config->group->priv->search['params']['recommendPrivs']['values'] = $privs;
- $this->config->group->priv->search['params']['dependPrivs']['values'] = $privs;
-
- $this->loadModel('search')->setSearchParams($this->config->group->priv->search);
- }
-
- /**
- * Get all priv's lang pairs.
- *
- * @access public
- * @return array
- */
- public function getPrivLangPairs()
- {
- return $this->dao->select('objectID as priv,value as name')->from(TABLE_PRIVLANG)
- ->where('lang')->eq($this->app->clientLang)
- ->fetchPairs();
- }
-
- /**
- * Update priv order.
- *
- * @access public
- * @return void
- */
- public function updatePrivOrder()
- {
- $data = fixer::input('post')->get();
- foreach($data->orders as $privID => $order) $this->dao->update(TABLE_PRIV)->set('order')->eq($order)->where('id')->eq($privID)->exec();
- }
-
- /**
- * Transform priv lang.
- *
- * @param array $privs
- * @param bool $needPairs
- * @access public
- * @return array
- */
- public function transformPrivLang($privs, $needPairs = false)
- {
- $privPairs = array();
- foreach($privs as $moduleMethod => $priv)
- {
- $priv->name = '';
- if(!empty($priv->value))
- {
- $priv->name = $priv->value;
- }
- else
- {
- list($moduleName, $methodLang) = explode('-', $priv->key);
- $actualModule = $moduleName == 'requirement' ? 'story' : $moduleName;
- $this->app->loadLang($actualModule);
-
- $hasLang = (!empty($moduleName) and !empty($methodLang) and isset($this->lang->resource->{$priv->module}) and isset($this->lang->resource->{$priv->module}->{$priv->method}));
- if(!$hasLang)
- {
- unset($privs[$moduleMethod]);
- continue;
- }
-
- $priv->name = (!empty($moduleName) and !empty($methodLang) and isset($this->lang->{$moduleName}->$methodLang)) ? $this->lang->{$moduleName}->$methodLang : $priv->method;
- }
-
- $privPairs[$moduleMethod] = $priv->name;
- }
-
- return $needPairs ? $privPairs : $privs;
- }
-
- /**
- * Get custom privs.
- *
- * @param string $menu
- * @param array $privs
- * @access public
- * @return array
- */
- public function getCustomPrivs($menu, $privs = array())
- {
- $allPrivs = $this->dao->select('module,method')->from(TABLE_PRIV)->where('edition')->like("%,{$this->config->edition},%")->andWhere('vision')->like("%,{$this->config->vision},%")->fetchGroup('module', 'method');
- foreach($this->lang->resource as $module => $methods)
- {
- if(isset($this->lang->$module->menus) and (empty($menu) or $menu == 'general'))
- {
- foreach($this->lang->$module->menus as $method => $value)
- {
- $key = "{$module}-{$method}";
- $priv = new stdclass();
- $priv->id = $key;
- $priv->module = $module;
- $priv->method = $method;
- $priv->action = $key;
- $priv->parent = 0;
- $priv->key = "{$module}-{$method}";
- $priv->parentCode = $module;
- $priv->moduleOrder = 0;
- $priv->name = $value;
-
- $privs[$key] = $priv;
- }
- }
-
- foreach($methods as $method => $methodLabel)
- {
- if(isset($allPrivs[$module][$method])) continue;
- if(!$this->checkNavModule($menu, $module)) continue;
- if(!isset($this->lang->{$module}->{$methodLabel})) $this->app->loadLang($module);
- if(isset($this->lang->$module->menus) and $method == 'browse') continue;
-
- $key = "{$module}-{$method}";
- $priv = new stdclass();
- $priv->id = $key;
- $priv->module = $module;
- $priv->method = $method;
- $priv->action = $key;
- $priv->parent = 0;
- $priv->key = "{$module}-{$methodLabel}";
- $priv->parentCode = $module;
- $priv->moduleOrder = 0;
- $priv->name = isset($this->lang->{$module}->{$methodLabel}) ? $this->lang->{$module}->{$methodLabel} : $method;
-
- $privs[$key] = $priv;
- }
- }
- return $privs;
- }
-
/**
* Load language of resource.
*
* @access public
* @return void
*/
- public function loadResourceLang()
+ public function loadResourceLang(): void
{
foreach($this->lang->resource as $moduleName => $action) $this->app->loadLang($moduleName);
@@ -2444,7 +902,7 @@ class groupModel extends model
* @access protected
* @return array
*/
- protected function processDepends($depends, $privs, $excludes)
+ protected function processDepends(array $depends, array $privs, array $excludes): array
{
foreach($privs as $priv)
{
@@ -2476,7 +934,7 @@ class groupModel extends model
* @access public
* @return array
*/
- public function getRelatedPrivs($allPrivList, $selectedPrivList, $recommendSelect = array())
+ public function getRelatedPrivs(array $allPrivList, array $selectedPrivList, array $recommendSelect = array()): array
{
$this->loadResourceLang();
@@ -2533,25 +991,6 @@ class groupModel extends model
return array('depend' => array_values($subsetPrivs['depend']), 'recommend' => array_values($subsetPrivs['recommend']));
}
- /**
- * Get unassigned privs by module.
- *
- * @param string $module
- * @access public
- * @return array
- */
- public function getUnassignedPrivsByModule($module)
- {
- return $this->dao->select('t1.*')->from(TABLE_PRIV)->alias('t1')
- ->leftJoin(TABLE_PRIVMANAGER)->alias('t2')->on('t1.parent=t2.id')
- ->where('t2.`code`')->eq($module)
- ->andWhere('t1.edition')->like("%,{$this->config->edition},%")
- ->andWhere('t1.vision')->like("%,{$this->config->vision},%")
- ->andWhere('t2.type')->eq('module')
- ->orderBy('order_asc')
- ->fetchAll('id');
- }
-
/**
* Get privs list by group.
*
@@ -2559,7 +998,7 @@ class groupModel extends model
* @access public
* @return array
*/
- public function getPrivListByGroup($groupID)
+ public function getPrivListByGroup(int $groupID): array
{
return $this->dao->select("CONCAT(module, '-', method) AS action")->from(TABLE_GROUPPRIV)->where('`group`')->eq($groupID)->fetchPairs();
}
@@ -2570,9 +1009,9 @@ class groupModel extends model
* @param string $selectedSubset
* @param string $selectedPackages
* @access public
- * @return bool
+ * @return array
*/
- public function getPrivByParents($selectedSubset, $selectedPackages = '')
+ public function getPrivByParents(string $selectedSubset, string $selectedPackages = ''): array
{
$allPrivs = array();
$privs = array();
@@ -2580,6 +1019,7 @@ class groupModel extends model
/* Privs in package. */
foreach($this->config->group->package as $packageCode => $packageData)
{
+ if(!isset($packageData->privs)) continue;
foreach($packageData->privs as $privCode => $priv)
{
list($moduleName, $methodName) = explode('-', $privCode);
@@ -2622,7 +1062,7 @@ class groupModel extends model
* @access public
* @return string
*/
- public function getPrivsAfterVersion($version)
+ public function getPrivsAfterVersion(string $version): string
{
$realVersion = str_replace('_', '.', $version);
$changelog = array();
@@ -2634,19 +1074,4 @@ class groupModel extends model
return $versionPrivs;
}
-
- /**
- * 更新权限包的排序。
- * Update the order of package.
- *
- * @param int $id
- * @param int $order
- * @access public
- * @return bool
- */
- public function updatePackageOrder(int $id, int $order): bool
- {
- $this->dao->update(TABLE_PRIVPACKAGE)->set('order')->eq($order)->where('id')->eq($id)->exec();
- return !dao::isError();
- }
}
diff --git a/module/group/test/group.class.php b/module/group/test/group.class.php
index 8d42b1c8a2..b8dce79e19 100755
--- a/module/group/test/group.class.php
+++ b/module/group/test/group.class.php
@@ -180,22 +180,6 @@ class groupTest
return $objects;
}
- /**
- * Get groups by accounts.
- *
- * @param array $accounts
- * @access public
- * @return array
- */
- public function getByAccountsTest($accounts)
- {
- $objects = $this->objectModel->getByAccounts($accounts);
-
- if(dao::isError()) return dao::getError();
-
- return $objects;
- }
-
/**
* Get the account number in the group.
*
@@ -245,47 +229,30 @@ class groupTest
}
/**
- * Get user programs of a group.
+ * 测试getAdmins方法。
+ * Test getAdmins method.
*
- * @param int $groupID
+ * @param array $idList
+ * @param string $field
* @access public
* @return array
*/
- public function getUserProgramsTest($groupID)
+ public function getAdminsTest(array $idList, string $field = 'programs'): array
{
- $objects = $this->objectModel->getUserPrograms($groupID);
-
- if(dao::isError()) return dao::getError();
-
- return $objects;
+ return $this->objectModel->getAdmins($idList, $field);
}
/**
- * Get the ID of the group that has access to the program.
- *
- * @access public
- * @return array
- */
- public function getAccessProgramGroupTest()
- {
- $objects = $this->objectModel->getAccessProgramGroup();
-
- if(dao::isError()) return dao::getError();
-
- return $objects;
- }
-
- /**
- * Delete a group.
+ * Remove a group.
*
* @param int $groupID
* @param null $null compatible with that of model::delete()
* @access public
* @return void
*/
- public function deleteTest($groupID, $null = null)
+ public function removeTest($groupID)
{
- $this->objectModel->delete($groupID, $null = null);
+ $this->objectModel->remove($groupID);
if(dao::isError()) return dao::getError();
@@ -369,90 +336,4 @@ class groupTest
return $objects;
}
-
- /**
- * Check menu have module
- *
- * @param string $menu
- * @param string $moduleName
- * @access public
- * @return void
- */
- public function checkMenuModuleTest($menu, $moduleName)
- {
- $objects = $this->objectModel->checkMenuModule($menu, $moduleName);
-
- if(dao::isError()) return dao::getError();
-
- return $objects;
- }
-
- /**
- * Get modules in menu
- *
- * @param string $menu
- * @access public
- * @return void
- */
- public function getMenuModulesTest($menu)
- {
- $objects = $this->objectModel->getMenuModules($menu);
-
- if(dao::isError()) return dao::getError();
-
- return $objects;
- }
-
- /**
- * 获取一条权限的基本信息
- *
- * @param int $privID
- * @param string $lang
- * @access public
- * @return void
- */
- public function getPrivInfoTest($priv, $lang)
- {
- $object = $this->objectModel->getPrivInfo($priv, $lang);
- if(dao::isError()) return dao::getError();
- return $object;
- }
-
- /**
- * 获取模块和权限包option
- *
- * @access public
- * @return array
- */
- public function getModuleAndPackageTreeTest()
- {
- return $this->objectModel->getModuleAndPackageTree();
- }
-
- /**
- * 更新权限
- *
- * @access public
- * @return void
- */
- public function updatePrivTest($privID, $lang)
- {
- $this->objectModel->updatePrivLang($privID,$lang);
- if(dao::isError()) return false;
- return true;
- }
-
- /**
- * 测试getAdmins方法。
- * Test getAdmins method.
- *
- * @param array $idList
- * @param string $field
- * @access public
- * @return array
- */
- public function getAdminsTest(array $idList, string $field = 'programs'): array
- {
- return $this->objectModel->getAdmins($idList, $field);
- }
}
diff --git a/module/group/test/model/checkModuleAndPackageTree.php b/module/group/test/model/checkModuleAndPackageTree.php
deleted file mode 100644
index 28eb9e0a7c..0000000000
--- a/module/group/test/model/checkModuleAndPackageTree.php
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env php
-getModuleAndPackageTree();
-cid=1
-pid=1
-
-
-*/
-$group = new groupTest();
-var_dump($group->getModuleAndPackageTreeTest());
-r($group->getModuleAndPackageTreeTest()) && p() && e("获取数据");
-
diff --git a/module/group/test/model/checkmenumodule.php b/module/group/test/model/checkmenumodule.php
deleted file mode 100755
index 9db493507c..0000000000
--- a/module/group/test/model/checkmenumodule.php
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env php
-checkMenuModule();
-cid=1
-pid=1
-
-
-
-*/
-
-$group = new groupTest();
-
-r($group->checkMenuModuleTest('','index')) && p('') && e(1); // 测试获取 '','index' 的返回结果
-r($group->checkMenuModuleTest('my','tree')) && p('') && e(''); // 测试获取 'my','tree' 的返回结果
-r($group->checkMenuModuleTest('none','tree')) && p('') && e(''); // 测试获取 'none','tree' 的返回结果
\ No newline at end of file
diff --git a/module/group/test/model/editpriv.php b/module/group/test/model/editpriv.php
deleted file mode 100644
index 172b458195..0000000000
--- a/module/group/test/model/editpriv.php
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env php
-getPrivInfo();
- *
- * cid=1
- * pid=1
- *
- */
-
-$group = new groupTest();
-
-$_POST['name'] = '修改test';
-$_POST['desc'] = '描述描述描述';
-$_POST['module'] = 'webhook';
-r($group->updatePrivTest(3324,'zh-cn')) && p('priv') && e("这是获取到的一条权限");
-
-//测试获取 id为3324的权限信息
diff --git a/module/group/test/model/getaccessprogramgroup.php b/module/group/test/model/getaccessprogramgroup.php
deleted file mode 100755
index 97f98b3205..0000000000
--- a/module/group/test/model/getaccessprogramgroup.php
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env php
-getAccessProgramGroup();
-cid=1
-pid=1
-
-测试获取group中用户个数 >> 14
-
-*/
-
-$group = new groupTest();
-$AccessProgramGroup = $group->getAccessProgramGroupTest();
-
-r(count($AccessProgramGroup)) && p('') && e('14'); //测试获取group中用户个数
\ No newline at end of file
diff --git a/module/group/test/model/getbyaccounts.php b/module/group/test/model/getbyaccounts.php
deleted file mode 100755
index 7b5383737d..0000000000
--- a/module/group/test/model/getbyaccounts.php
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env php
-getByAccounts();
-cid=1
-pid=1
-
-测试获取用户 outside3 的权限分组信息 >> outside3
-测试获取用户 top2 的权限分组信息 >> top2
-测试获取用户 pd2 的权限分组信息 >> pd2
-测试获取用户 td1 的权限分组信息 >> td1
-测试获取用户 pm1 的权限分组信息 >> pm1
-测试获取用户 po48 的权限分组信息 >> po48
-测试获取用户 dev100 的权限分组信息 >> dev100
-测试获取用户 test2 的权限分组信息 >> test2
-
-*/
-
-$accountList = array();
-$accountList[0] = array('outside3', 'top2');
-$accountList[1] = array('td1', 'pd2');
-$accountList[2] = array('po48', 'pm1');
-$accountList[3] = array('dev100', 'test2');
-
-$group = new groupTest();
-$groups0 = $group->getByAccountsTest($accountList[0]);
-$groups1 = $group->getByAccountsTest($accountList[1]);
-$groups2 = $group->getByAccountsTest($accountList[2]);
-$groups3 = $group->getByAccountsTest($accountList[3]);
-
-r($groups0['outside3']) && p('0:account') && e('outside3'); //测试获取用户 outside3 的权限分组信息
-r($groups0['top2']) && p('0:account') && e('top2'); //测试获取用户 top2 的权限分组信息
-r($groups1['pd2']) && p('0:account') && e('pd2'); //测试获取用户 pd2 的权限分组信息
-r($groups1['td1']) && p('0:account') && e('td1'); //测试获取用户 td1 的权限分组信息
-r($groups2['pm1']) && p('0:account') && e('pm1'); //测试获取用户 pm1 的权限分组信息
-r($groups2['po48']) && p('0:account') && e('po48'); //测试获取用户 po48 的权限分组信息
-r($groups3['dev100']) && p('0:account') && e('dev100'); //测试获取用户 dev100 的权限分组信息
-r($groups3['test2']) && p('0:account') && e('test2'); //测试获取用户 test2 的权限分组信息
\ No newline at end of file
diff --git a/module/group/test/model/getmenumodules.php b/module/group/test/model/getmenumodules.php
deleted file mode 100755
index d41130dc34..0000000000
--- a/module/group/test/model/getmenumodules.php
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env php
-getMenuModules();
-cid=1
-pid=1
-
-测试查询 product 菜单的模块 >> product,branch,story
-测试查询 my 菜单的模块 >> my,todo
-测试查询 qa 菜单的模块 >> qa,bug,caselib
-测试查询 project 菜单的模块 >> design,projectbuild,projectstory
-
-*/
-
-$group = new groupTest();
-
-r($group->getMenuModulesTest('product')) && p('0,1,2') && e('product,branch,story'); // 测试查询 product 菜单的模块
-r($group->getMenuModulesTest('my')) && p('0,1') && e('my,todo'); // 测试查询 my 菜单的模块
-r($group->getMenuModulesTest('qa')) && p('0,1,6') && e('qa,bug,caselib'); // 测试查询 qa 菜单的模块
-r($group->getMenuModulesTest('project')) && p('0,3,4') && e('design,projectbuild,projectstory'); // 测试查询 project 菜单的模块
\ No newline at end of file
diff --git a/module/group/test/model/getpriv.php b/module/group/test/model/getpriv.php
deleted file mode 100644
index 47ec50a552..0000000000
--- a/module/group/test/model/getpriv.php
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env php
-getPrivInfo();
- *
- * cid=1
- * pid=1
- *
- */
-
-$group = new groupTest();
-
-
-r($group->getPrivInfoTest(3324,'zh-cn')) && p('priv') && e("这是获取到的一条权限");
-
-//测试获取 id为3324的权限信息
diff --git a/module/group/test/model/getuserprograms.php b/module/group/test/model/getuserprograms.php
deleted file mode 100755
index dba3891e58..0000000000
--- a/module/group/test/model/getuserprograms.php
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env php
-getUserPrograms();
-cid=1
-pid=1
-
-
-
-*/
-
-$groupList = array(1,2,3,4,5);
-$userIDList = array('td81','dev100','pd10','td50','td64');
-$resultList = array(74,29,13,43,57);
-
-$group = new groupTest();
-
-r($group->getUserProgramsTest($groupList[0])) && p($userIDList[0]) && e(74); //检查权限分组 1 的用户项目信息
-r($group->getUserProgramsTest($groupList[1])) && p($userIDList[1]) && e(29); //检查权限分组 2 的用户项目信息
-r($group->getUserProgramsTest($groupList[2])) && p($userIDList[2]) && e(13); //检查权限分组 3 的用户项目信息
-r($group->getUserProgramsTest($groupList[3])) && p($userIDList[3]) && e(43); //检查权限分组 4 的用户项目信息
-r($group->getUserProgramsTest($groupList[4])) && p($userIDList[4]) && e(57); //检查权限分组 5 的用户项目信息
\ No newline at end of file
diff --git a/module/group/zen.php b/module/group/zen.php
index 8bc1fcb5db..fbebcd6101 100644
--- a/module/group/zen.php
+++ b/module/group/zen.php
@@ -11,6 +11,86 @@ declare(strict_types=1);
*/
class groupZen extends group
{
+ /**
+ * 有些权限在resource里添加了,但没有在packagemanager里同步更新,需要追加上
+ * Append packages in resource.
+ *
+ * @access public
+ * @return void
+ */
+ public function appendResourcePackages()
+ {
+ $allPrivs = array();
+ foreach($this->config->group->package as $packageCode => $package)
+ {
+ if(empty($package->privs)) continue;
+
+ 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;
+ }
+
+ $this->appendWorkflowMenu($packageCode, $module, $method);
+ }
+ }
+ }
+
+ /**
+ * 工作流列表页面的菜单也需要拆分不同的权限,比如全部、未关闭、已完成
+ * Append priv to package of workflow browse menu.
+ *
+ * @param string $packageCode
+ * @param string $module
+ * @param string $method
+ * @access protected
+ * @return mixed
+ */
+ protected function appendWorkflowMenu(string $packageCode, string $module, string $method)
+ {
+ /* 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());
+ }
+ }
/**
* Manage priv by package or group.
*
@@ -117,6 +197,7 @@ class groupZen extends group
/* Subsets in package. */
foreach($this->config->group->package as $packageCode => $packageData)
{
+ if(!isset($packageData->privs)) continue;
foreach($packageData->privs as $privCode => $priv)
{
list($moduleName, $methodName) = explode('-', $privCode);