diff --git a/module/group/control.php b/module/group/control.php index 9e064787e9..9b743642c3 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -307,18 +307,40 @@ class group extends control $this->view->title = $this->lang->company->common . $this->lang->colon . $this->lang->group->managePriv; $this->view->position[] = $this->lang->group->managePriv; - $modules = $this->dao->select('*')->from(TABLE_PRIVMANAGER)->where('type')->eq('module')->fetchAll('code'); - $modulePairs = $this->group->getPrivManagerPairs('module'); - $packageGroup = array(); + $privs = $this->group->getPrivsListByView(''); + $privs = $this->group->getCustomPrivs('', $privs); + $modules = $this->dao->select('*')->from(TABLE_PRIVMANAGER)->where('type')->eq('module')->fetchAll('code'); + $modulePairs = $this->group->getPrivManagerPairs('module'); + $unassignedModules = array_diff(array_keys(array_filter(get_object_vars($this->lang->resource), function($modulePrivs){return !empty((array)$modulePrivs);})), array_keys($modulePairs)); + foreach($unassignedModules as $unassignedModule) + { + $this->app->loadLang($unassignedModule); + $modulePairs[$unassignedModule] = isset($this->lang->{$unassignedModule}->common) ? $this->lang->{$unassignedModule}->common : $unassignedModule; + } + $packageGroup = array(); foreach($modulePairs as $moduleCode => $moduleLang) { - $packageGroup[$moduleCode] = $this->group->getPrivManagerPairs('package', $moduleCode); - $packageGroup[$moduleCode] = $packageGroup[$moduleCode] + array($modules[$moduleCode]->id => $this->lang->group->unassigned); + $modulePackages = $this->group->getPrivManagerPairs('package', $moduleCode); + $unassignedPrivs = $this->group->getUnassignedPrivsByModule($moduleCode); + $packageGroup[$moduleCode] = isset($modules[$moduleCode]) ? $modulePackages : array(); + $unassignedPrivPackages = isset($modules[$moduleCode]) ? $modules[$moduleCode]->id : 0; + $packageGroup[$moduleCode] = $packageGroup[$moduleCode] + array($unassignedPrivPackages => $this->lang->group->unassigned); + } + + $customPrivs = $this->group->getCustomPrivs(''); + foreach($customPrivs as $privKey => $customPriv) + { + if(!isset($modulePairs[$customPriv->module])) $modulePairs[$customPriv->module] = isset($this->lang->{$customPriv->module}->common) ? $this->lang->{$customPriv->module}->common : $customPriv->module; } $indexPrivs = $this->group->getPrivByParent(isset($packageGroup['index']) ? array_keys($packageGroup['index']) : $modules['index']->id); - $indexPrivs = $this->group->transformPrivLang($indexPrivs, true); + $indexPrivs = $this->group->transformPrivLang($indexPrivs); + foreach($indexPrivs as $privID => $priv) + { + $indexPrivs["{$priv->module}-{$priv->method}"] = $priv->name; + unset($indexPrivs[$privID]); + } $this->view->groups = $this->group->getPairs(); $this->view->modulePairs = $modulePairs; diff --git a/module/group/model.php b/module/group/model.php index 149213429c..34947ab3b0 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -2043,12 +2043,12 @@ class groupModel extends model if(!$this->checkMenuModule($menu, $module)) continue; if(!isset($this->lang->{$module}->{$methodLabel})) $this->app->loadLang($module); - $key = "{$module}-{$methodLabel}"; + $key = "{$module}-{$method}"; $priv = new stdclass(); $priv->module = $module; $priv->method = $method; $priv->parent = 0; - $priv->key = $key; + $priv->key = "{$module}-{$methodLabel}"; $priv->parentCode = $module; $priv->moduleOrder = 0; $priv->name = $this->lang->{$module}->{$methodLabel}; @@ -2099,4 +2099,13 @@ class groupModel extends model $privList['depend'] = array_values($privList['depend']); return $privList; } + + 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('t2.type')->eq('module') + ->fetchAll('id'); + } }