From 7af8d535f17eea0d227a406c5d64c11089b04618 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 31 Jan 2023 16:15:00 +0800 Subject: [PATCH] * code for task #83439. --- module/admin/config.php | 2 +- module/admin/lang/zh-cn.php | 85 ++++++++--- module/admin/model.php | 136 +++++++++++++++--- module/common/model.php | 2 +- module/extension/control.php | 1 + .../xuan/admin/ext/lang/zh-cn/xuanxuan.php | 7 + .../xuan/common/ext/lang/zh-cn/xuanxuan.php | 5 - 7 files changed, 187 insertions(+), 51 deletions(-) diff --git a/module/admin/config.php b/module/admin/config.php index 858e34106c..c8204d927b 100755 --- a/module/admin/config.php +++ b/module/admin/config.php @@ -7,7 +7,7 @@ $config->admin->log->saveDays = 30; if(!isset($config->safe)) $config->safe = new stdclass(); if(!isset($config->safe->weak)) $config->safe->weak = '123456,password,12345,12345678,qwerty,123456789,1234,1234567,abc123,111111,123123'; -$config->admin->menuGroup['setting'] = array('backup', 'action|trash', 'admin|xuanxuan', 'admin|license', 'admin|safe', 'custom|timezone', 'search|buildindex', 'admin|tableengine', 'ldap', 'custom|libreoffice'); +$config->admin->menuGroup['setting'] = array('custom|mode', 'backup', 'action|trash', 'admin|xuanxuan', 'admin|license', 'admin|checkweak', 'admin|resetpwdsetting', 'admin|safe', 'custom|timezone', 'search|buildindex', 'admin|tableengine', 'ldap', 'custom|libreoffice'); $config->admin->menuGroup['user'] = array('dept', 'company', 'user', 'group'); $config->admin->menuGroup['switch'] = array('admin|setmodule'); $config->admin->menuGroup['model'] = array('auditcl', 'stage', 'design', 'cmcl', 'reviewcl', 'custom|required', 'custom|set', 'custom|flow', 'custom|code', 'custom|estimate', 'subject', 'process'); diff --git a/module/admin/lang/zh-cn.php b/module/admin/lang/zh-cn.php index ec1cc400d2..3ee65899c4 100755 --- a/module/admin/lang/zh-cn.php +++ b/module/admin/lang/zh-cn.php @@ -178,6 +178,7 @@ $lang->admin->menuList->message['order'] = 7; $lang->admin->menuList->extension['name'] = '插件管理'; $lang->admin->menuList->extension['desc'] = ''; +$lang->admin->menuList->extension['link'] = 'extension|browse'; $lang->admin->menuList->extension['order'] = 8; $lang->admin->menuList->dev['name'] = '二次开发'; @@ -186,57 +187,99 @@ $lang->admin->menuList->dev['order'] = 9; $lang->admin->menuList->convert['name'] = '数据导入'; $lang->admin->menuList->convert['desc'] = ''; +$lang->admin->menuList->convert['link'] = 'convert|convertjira'; $lang->admin->menuList->convert['order'] = 10; -$lang->admin->menuList->setting['subMenu']['mode'] = array('link' => "模式|custom|mode|", 'subModule' => 'custom'); +$lang->admin->menuList->setting['subMenu']['mode'] = array('link' => "模式|custom|mode|"); $lang->admin->menuList->setting['subMenu']['backup'] = array('link' => "备份|backup|index|", 'subModule' => 'backup'); $lang->admin->menuList->setting['subMenu']['trash'] = array('link' => "回收站|action|trash|", 'subModule' => 'action'); -$lang->admin->menuList->setting['subMenu']['xuanxuan'] = array('link' => "聊天|admin|xuanxuan|"); -$lang->admin->menuList->setting['subMenu']['license'] = array('link' => "授权信息|admin|license|"); -$lang->admin->menuList->setting['subMenu']['safe'] = array('link' => "安全|admin|safe|"); -$lang->admin->menuList->setting['subMenu']['timezone'] = array('link' => "时区|custom|timezone|", 'subModule' => 'custom'); +$lang->admin->menuList->setting['subMenu']['safe'] = array('link' => "安全|admin|safe|", 'alias' => 'checkweak,resetpwdsetting'); +$lang->admin->menuList->setting['subMenu']['timezone'] = array('link' => "时区|custom|timezone|"); $lang->admin->menuList->setting['subMenu']['buildindex'] = array('link' => "重建索引|search|buildindex|", 'subModule' => 'search'); $lang->admin->menuList->setting['subMenu']['tableengine'] = array('link' => "表引擎|admin|tableengine|"); -$lang->admin->menuList->setting['subMenu']['ldap'] = array('link' => "LDAP|ldap|set|", 'subModule' => 'ldap'); -$lang->admin->menuList->setting['subMenu']['libreoffice'] = array('link' => "Office|custom|libreoffice|", 'subModule' => 'custom'); -$lang->admin->menuList->setting['dividerMenu'] = ',license,ldap,'; +$lang->admin->menuList->setting['menuOrder']['5'] = 'mode'; +$lang->admin->menuList->setting['menuOrder']['10'] = 'backup'; +$lang->admin->menuList->setting['menuOrder']['15'] = 'trash'; +$lang->admin->menuList->setting['menuOrder']['30'] = 'safe'; +$lang->admin->menuList->setting['menuOrder']['35'] = 'timezone'; +$lang->admin->menuList->setting['menuOrder']['40'] = 'buildindex'; +$lang->admin->menuList->setting['menuOrder']['45'] = 'tableengine'; + +$lang->admin->menuList->setting['dividerMenu'] = ',safe,'; $lang->admin->menuList->user['subMenu']['dept'] = array('link' => "部门|dept|browse|", 'subModule' => 'dept'); $lang->admin->menuList->user['subMenu']['user'] = array('link' => "用户|company|browse|", 'subModule' => 'company'); $lang->admin->menuList->user['subMenu']['group'] = array('link' => "权限|group|browse|", 'subModule' => 'group'); +$lang->admin->menuList->user['menuOrder']['5'] = 'dept'; +$lang->admin->menuList->user['menuOrder']['10'] = 'user'; +$lang->admin->menuList->user['menuOrder']['15'] = 'group'; + $lang->admin->menuList->switch['subMenu']['setmodule'] = array('link' => "功能设置|admin|setmodule|"); +$lang->admin->menuList->switch['menuOrder']['5'] = 'setmodule'; + $lang->admin->menuList->model['subMenu']['common'] = array('link' => "通用|custom|required|module=project", 'subModule' => 'custom'); $lang->admin->menuList->model['subMenu']['scrum'] = array('link' => "敏捷模型|auditcl|scrumbrowse|", 'subModule' => 'auditcl'); $lang->admin->menuList->model['subMenu']['waterfall'] = array('link' => "瀑布模型|stage|settype|", 'subModule' => 'stage'); -$lang->admin->menuList->feature['subMenu']['my'] = array('link' => "地盘|custom|set|module=todo", 'subModule' => 'custom'); -$lang->admin->menuList->feature['subMenu']['product'] = array('link' => "{$lang->productCommon}|custom|product|", 'subModule' => 'custom'); -$lang->admin->menuList->feature['subMenu']['execution'] = array('link' => "{$lang->execution->common}|custom|execution|", 'subModule' => 'custom'); -$lang->admin->menuList->feature['subMenu']['qa'] = array('link' => "测试|custom|required|module=bug", 'subModule' => 'custom'); -$lang->admin->menuList->feature['subMenu']['kanban'] = array('link' => "看板|custom|kanban|", 'subModule' => 'custom'); -$lang->admin->menuList->feature['subMenu']['doc'] = array('link' => "文档|custom|required|module=doc", 'subModule' => 'custom'); -$lang->admin->menuList->feature['subMenu']['feedback'] = array('link' => "反馈|custom|set|module=feedback", 'subModule' => 'custom'); +$lang->admin->menuList->model['menuOrder']['5'] = 'common'; +$lang->admin->menuList->model['menuOrder']['10'] = 'scrum'; +$lang->admin->menuList->model['menuOrder']['15'] = 'waterfall'; + +$lang->admin->menuList->feature['subMenu']['my'] = array('link' => "地盘|custom|set|module=todo"); +$lang->admin->menuList->feature['subMenu']['product'] = array('link' => "{$lang->productCommon}|custom|product|"); +$lang->admin->menuList->feature['subMenu']['execution'] = array('link' => "{$lang->execution->common}|custom|execution|"); +$lang->admin->menuList->feature['subMenu']['qa'] = array('link' => "测试|custom|required|module=bug"); +$lang->admin->menuList->feature['subMenu']['kanban'] = array('link' => "看板|custom|kanban|"); +$lang->admin->menuList->feature['subMenu']['doc'] = array('link' => "文档|custom|required|module=doc"); +$lang->admin->menuList->feature['subMenu']['feedback'] = array('link' => "反馈|custom|set|module=feedback"); $lang->admin->menuList->feature['subMenu']['approval'] = array('link' => "审批|approvalflow|browse|", 'subModule' => 'approvalflow'); $lang->admin->menuList->feature['subMenu']['measure'] = array('link' => "度量|measurement|settips|", 'subModule' => 'measurement'); -$lang->admin->menuList->feature['subMenu']['user'] = array('link' => "用户|custom|set|module=user", 'subModule' => 'custom'); +$lang->admin->menuList->feature['subMenu']['user'] = array('link' => "用户|custom|set|module=user"); $lang->admin->menuList->feature['subMenu']['meetingroom'] = array('link' => "会议室|meetingroom|browse|", 'subModule' => 'meetingroom'); +$lang->admin->menuList->feature['menuOrder']['5'] = 'my'; +$lang->admin->menuList->feature['menuOrder']['10'] = 'product'; +$lang->admin->menuList->feature['menuOrder']['15'] = 'execution'; +$lang->admin->menuList->feature['menuOrder']['20'] = 'qa'; +$lang->admin->menuList->feature['menuOrder']['25'] = 'kanban'; +$lang->admin->menuList->feature['menuOrder']['30'] = 'doc'; +$lang->admin->menuList->feature['menuOrder']['35'] = 'feedback'; +$lang->admin->menuList->feature['menuOrder']['40'] = 'approval'; +$lang->admin->menuList->feature['menuOrder']['45'] = 'measure'; +$lang->admin->menuList->feature['menuOrder']['50'] = 'user'; +$lang->admin->menuList->feature['menuOrder']['55'] = 'meetingroom'; + $lang->admin->menuList->feature['dividerMenu'] = ',user,'; $lang->admin->menuList->template['subMenu']['type'] = array('link' => "模版类型|custom|set|module=baseline&field=objectList", 'subModule' => 'custom'); $lang->admin->menuList->template['subMenu']['template'] = array('link' => "文档模版|baseline|template|", 'subModule' => 'baseline'); $lang->admin->menuList->template['subMenu']['catalog'] = array('link' => "文档目录|baseline|catalog|", 'subModule' => 'baseline'); +$lang->admin->menuList->template['menuOrder']['5'] = 'type'; +$lang->admin->menuList->template['menuOrder']['10'] = 'template'; +$lang->admin->menuList->template['menuOrder']['15'] = 'catalog'; + $lang->admin->menuList->message['subMenu']['mail'] = array('link' => "邮件|mail|edit|", 'subModule' => 'mail'); $lang->admin->menuList->message['subMenu']['webhook'] = array('link' => "Webhook|webhook|browse|", 'subModule' => 'webhook'); $lang->admin->menuList->message['subMenu']['sms'] = array('link' => "短信|sms|index|", 'subModule' => 'sms'); -$lang->admin->menuList->message['subMenu']['message'] = array('link' => "浏览器|message|browser|", 'subModule' => 'message'); -$lang->admin->menuList->message['subMenu']['setting'] = array('link' => "设置|message|setting|", 'subModule' => 'message'); +$lang->admin->menuList->message['subMenu']['message'] = array('link' => "浏览器|message|browser|"); +$lang->admin->menuList->message['subMenu']['setting'] = array('link' => "设置|message|setting|"); -$lang->admin->menuList->dev['subMenu']['api'] = array('link' => "API|dev|api|", 'subModule' => 'dev'); -$lang->admin->menuList->dev['subMenu']['db'] = array('link' => "数据库|dev|db|", 'subModule' => 'dev'); -$lang->admin->menuList->dev['subMenu']['editor'] = array('link' => "编辑器|dev|editor|", 'subModule' => 'dev'); +$lang->admin->menuList->message['menuOrder']['5'] = 'mail'; +$lang->admin->menuList->message['menuOrder']['10'] = 'webhook'; +$lang->admin->menuList->message['menuOrder']['15'] = 'sms'; +$lang->admin->menuList->message['menuOrder']['20'] = 'message'; +$lang->admin->menuList->message['menuOrder']['25'] = 'setting'; + +$lang->admin->menuList->dev['subMenu']['api'] = array('link' => "API|dev|api|"); +$lang->admin->menuList->dev['subMenu']['db'] = array('link' => "数据库|dev|db|"); +$lang->admin->menuList->dev['subMenu']['editor'] = array('link' => "编辑器|dev|editor|"); $lang->admin->menuList->dev['subMenu']['entry'] = array('link' => "应用|entry|browse|", 'subModule' => 'entry'); + +$lang->admin->menuList->dev['menuOrder']['5'] = 'api'; +$lang->admin->menuList->dev['menuOrder']['10'] = 'db'; +$lang->admin->menuList->dev['menuOrder']['15'] = 'editor'; +$lang->admin->menuList->dev['menuOrder']['20'] = 'entry'; diff --git a/module/admin/model.php b/module/admin/model.php index bff5a3bc9d..ec4f3af852 100755 --- a/module/admin/model.php +++ b/module/admin/model.php @@ -248,59 +248,149 @@ class adminModel extends model return false; } + /** + * Set admin menu. + * + * @access public + * @return void + */ public function setMenu() { - $this->lang->switcherMenu = $this->getSwitcher(); + $this->sortMenu(); + + $menuKey = $this->getMenuKey(); + if(empty($menuKey)) return; + + $this->lang->switcherMenu = $this->getSwitcher($menuKey); + if(isset($this->lang->admin->menuList->$menuKey)) + { + if(isset($this->lang->admin->menuList->$menuKey['subMenu'])) $this->lang->admin->menu = $this->lang->admin->menuList->$menuKey['subMenu']; + if(isset($this->lang->admin->menuList->$menuKey['menuOrder'])) $this->lang->admin->menuOrder = $this->lang->admin->menuList->$menuKey['menuOrder']; + if(isset($this->lang->admin->menuList->$menuKey['dividerMenu'])) $this->lang->admin->dividerMenu = $this->lang->admin->menuList->$menuKey['dividerMenu']; + } } /** - * Get switcher. + * sort menu. + * + * @access public + * @return void + */ + public function sortMenu() + { + $orders = array(); + $disabled = array(); + foreach($this->lang->admin->menuList as $menuKey => $menu) + { + $menu['disabled'] = false; + if(isset($menu['link'])) + { + list($module, $method) = explode('|', $menu['link']); + $menu['link'] = helper::createLink($module, $method); + if(!common::hasPriv($module, $method)) $menu['disabled'] = true; + } + + if(isset($menu['menuOrder'])) + { + $menuOrder = $menu['menuOrder']; + ksort($menuOrder); + /* Check sub menu priv. */ + foreach($menuOrder as $subOrder => $subMenuKey) + { + list($label, $module, $method, $params) = explode('|', $menu['subMenu'][$subMenuKey]['link']); + if(!common::hasPriv($module, $method)) unset($menuOrder[$subOrder]); + } + /* Set link. */ + if(!empty($menuOrder)) + { + $subMenuKey = reset($menuOrder); + list($label, $module, $method, $params) = explode('|', $menu['subMenu'][$subMenuKey]['link']); + $menu['link'] = helper::createLink($module, $method, $params); + } + if(empty($menuOrder)) $menu['disabled'] = true; + } + + $order = $menu['order']; + $orders[$order] = $menuKey; + if($menu['disabled']) + { + unset($orders[$order]); + $disabled[$menuKey] = $menu; + } + + $this->lang->admin->menuList->$menuKey = $menu; + } + + ksort($orders); + $menuList = new stdclass(); + $index = 1; + foreach($orders as $menuKey) + { + $menuList->$menuKey = $this->lang->admin->menuList->$menuKey; + $menuList->$menuKey['order'] = $index; + $index++; + } + foreach($disabled as $menuKey => $menu) + { + $menuList->$menuKey = $menu; + $menuList->$menuKey['order'] = $index; + $index++; + } + + $this->lang->admin->menuList = $menuList; + } + + /** + * Get menu key * * @access public * @return string */ - public function getSwitcher() + public function getMenuKey() { - $moduleName = $this->app->rawModule; - $methodName = $this->app->rawMethod; - $paramName = current($this->app->rawParams); - $currentMenu = 'setting'; - $currentMenuName = ''; - $link = $paramName ? helper::createLink($moduleName, $methodName, "param=$paramName") : helper::createLink($moduleName, $methodName); + $moduleName = $this->app->rawModule; + $methodName = $this->app->rawMethod; + $paramName = $this->app->rawParams ? reset($this->app->rawParams) : ''; foreach($this->config->admin->menuGroup as $menuKey => $menuGroup) { if(in_array($moduleName, $menuGroup)) { - $currentMenu = $menuKey; - break; + return $menuKey; } elseif(in_array("$moduleName|$methodName", $menuGroup)) { if($moduleName == 'custom' and ($methodName == 'required' or $methodName == 'set')) { - if(in_array($paramName, $this->config->admin->menuModuleGroup[$menuKey]["custom|$methodName"])) - { - - $currentMenu = $menuKey; - break; - } + if(in_array($paramName, $this->config->admin->menuModuleGroup[$menuKey]["custom|$methodName"])) return $menuKey; } else { - $currentMenu = $menuKey; - break; + return $menuKey; } } } + return null; + } - $currentMenuName = $this->lang->admin->menuList->$currentMenu['name']; + /** + * Get switcher. + * + * @param string $currentMenuKey + * @access public + * @return string + */ + public function getSwitcher($currentMenuKey = 'setting') + { + if(empty($currentMenuKey)) return null; - $output = "