From 0c1b21dd4d238e95c1952c616e854964bc9fb9f6 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Sun, 6 Jan 2013 07:09:21 +0000 Subject: [PATCH] * adjust for task #1045. --- module/group/control.php | 11 +++++--- module/group/lang/en.php | 2 ++ module/group/lang/zh-cn.php | 2 ++ module/group/model.php | 37 ++++++++++++++++++++++++-- module/group/view/privbygroup.html.php | 10 +++++++ 5 files changed, 57 insertions(+), 5 deletions(-) diff --git a/module/group/control.php b/module/group/control.php index 2fae70ca33..5217503d26 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -120,15 +120,18 @@ class group extends control * @access public * @return void */ - public function managePriv($type = 'byGroup', $param = 0) + public function managePriv($type = 'byGroup', $param = 0, $menu = 'my') { if($type == 'byGroup') $groupID = $param; $this->view->type = $type; - foreach($this->lang->resource as $moduleName => $action) $this->app->loadLang($moduleName); + foreach($this->lang->resource as $moduleName => $action) + { + if($this->group->checkMenuModule($menu, $moduleName)) $this->app->loadLang($moduleName); + } if(!empty($_POST)) { - if($type == 'byGroup') $result = $this->group->updatePrivByGroup($groupID); + if($type == 'byGroup') $result = $this->group->updatePrivByGroup($groupID, $menu); if($type == 'byModule') $result = $this->group->updatePrivByModule(); print(js::alert($result ? $this->lang->group->successSaved : $this->lang->group->errorNotSaved)); exit; @@ -146,6 +149,8 @@ class group extends control $this->view->group = $group; $this->view->changelogs = $this->lang->changelog; $this->view->groupPrivs = $groupPrivs; + $this->view->groupID = $groupID; + $this->view->menu = $menu; } elseif($type == 'byModule') { diff --git a/module/group/lang/en.php b/module/group/lang/en.php index 1a02d80047..8953159a33 100644 --- a/module/group/lang/en.php +++ b/module/group/lang/en.php @@ -35,6 +35,8 @@ $lang->group->priv = 'Priviledge'; $lang->group->option = 'Option'; $lang->group->inside = 'Group users'; $lang->group->outside = 'Other users'; +$lang->group->other = 'Other module'; +$lang->group->all = 'All priv'; $lang->group->copyOptions['copyPriv'] = 'Copy priviledge'; $lang->group->copyOptions['copyUser'] = 'Copy user'; diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php index d1153f7775..5b19c7628a 100644 --- a/module/group/lang/zh-cn.php +++ b/module/group/lang/zh-cn.php @@ -35,6 +35,8 @@ $lang->group->priv = '权限'; $lang->group->option = '选项'; $lang->group->inside = '组内用户'; $lang->group->outside = '组外用户'; +$lang->group->other = '其他模块'; +$lang->group->all = '所有权限'; $lang->group->copyOptions['copyPriv'] = '复制权限'; $lang->group->copyOptions['copyUser'] = '复制用户'; diff --git a/module/group/model.php b/module/group/model.php index 450af65c5d..281460f61c 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -185,10 +185,10 @@ class groupModel extends model * @access public * @return bool */ - public function updatePrivByGroup($groupID) + public function updatePrivByGroup($groupID, $menu) { /* Delete old. */ - $this->dao->delete()->from(TABLE_GROUPPRIV)->where('`group`')->eq($groupID)->exec(); + $this->dao->delete()->from(TABLE_GROUPPRIV)->where('`group`')->eq($groupID)->andWhere('module')->in($this->getMenuModules($menu))->exec(); /* Insert new. */ foreach($this->post->actions as $moduleName => $moduleActions) @@ -302,4 +302,37 @@ class groupModel extends model } } } + + /** + * Check menu have module + * + * @param string $menu + * @param string $moduleName + * @access public + * @return void + */ + public function checkMenuModule($menu, $moduleName) + { + if(empty($menu)) return true; + if($menu == 'other' and (isset($this->lang->menugroup->$moduleName) or isset($this->lang->menu->$moduleName))) return false; + if($menu != 'other' and !($moduleName == $menu or (isset($this->lang->menugroup->$moduleName) and $this->lang->menugroup->$moduleName == $menu))) return false; + return true; + } + + /** + * Get modules in menu + * + * @param string $menu + * @access public + * @return void + */ + public function getMenuModules($menu) + { + $modules = array(); + foreach($this->lang->resource as $moduleName => $action) + { + if($this->checkMenuModule($menu, $moduleName)) $modules[] = $moduleName; + } + return $modules; + } } diff --git a/module/group/view/privbygroup.html.php b/module/group/view/privbygroup.html.php index 07050f7612..3d7a82b0ff 100644 --- a/module/group/view/privbygroup.html.php +++ b/module/group/view/privbygroup.html.php @@ -11,6 +11,15 @@ */ ?>
+
+ menu as $module => $title):?> + > + + + + >group->other)?> + >group->all)?> +
'>
group->method;?> resource as $moduleName => $moduleActions):?> + group->checkMenuModule($menu, $moduleName)) continue;?>
lang->$moduleName->common;?>