This commit is contained in:
guofeilong
2023-01-31 17:20:39 +08:00
7 changed files with 187 additions and 52 deletions
+1 -1
View File
@@ -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');
+64 -21
View File
@@ -180,6 +180,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'] = '二次开发';
@@ -188,57 +189,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';
+113 -23
View File
@@ -253,59 +253,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 = "<div class='btn-group header-btn'><button class='btn pull-right btn-link' data-toggle='dropdown'> <span class='text'>$currentMenuName</span> <span class='caret'></span></button><ul class='dropdown-menu' id='adminMenu'>";
$currentMenu = $this->lang->admin->menuList->$currentMenuKey;
$output = "<div class='btn-group header-btn'><button class='btn pull-right btn-link' data-toggle='dropdown'> <span class='text'>{$currentMenu['name']}</span> <span class='caret'></span></button><ul class='dropdown-menu' id='adminMenu'>";
foreach($this->lang->admin->menuList as $menuKey => $menuGroup)
{
$class = $menuKey == $currentMenu ? "class='active'" : '';
$output .= "<li $class>" . html::a($link, $menuGroup['name']) . "</li>";
$class = $menuKey == $currentMenuKey ? "class='active'" : '';
if($menuGroup['disabled']) $class .= ' disabled';
$output .= "<li $class>" . html::a($menuGroup['link'], $menuGroup['name']) . "</li>";
}
$output .= "</ul></div>";
+1 -1
View File
@@ -915,8 +915,8 @@ class commonModel extends model
{
global $lang, $config, $app;
if($tab == 'admin') $app->control->loadModel('admin')->setMenu();
if(!$tab) return;
if($tab == 'admin' and method_exists($app->control, 'loadModel')) $app->control->loadModel('admin')->setMenu();
$icon = zget($lang->navIcons, $tab, '');
if(!in_array($tab, array('program', 'product', 'project')))
+1
View File
@@ -22,6 +22,7 @@ class extension extends control
public function __construct($moduleName = '', $methodName = '')
{
parent::__construct($moduleName, $methodName);
$this->loadModel('admin')->setMenu();
$statusFile = $this->loadModel('common')->checkSafeFile();
if($statusFile)
@@ -21,3 +21,10 @@ $lang->admin->sizeType = array();
$lang->admin->sizeType['K'] = 1024;
$lang->admin->sizeType['M'] = 1024 * 1024;
$lang->admin->sizeType['G'] = 1024 * 1024 * 1024;
global $config;
if($config->vision != 'lite')
{
$lang->admin->menuList->setting['subMenu']['xuanxuan'] = array('link' => '聊天|admin|xuanxuan|', 'subModule' => 'client,setting');
$lang->admin->menuList->setting['menuOrder']['20'] = 'xuanxuan';
}
@@ -1,11 +1,5 @@
<?php
$lang->xuanxuan = new stdclass();
//if($config->vision != 'lite')
//{
// $lang->admin->menu->xuanxuan = array('link' => '聊天|admin|xuanxuan', 'subModule' => 'client,setting');
// $lang->admin->menuOrder[6] = 'xuanxuan';
//}
//
//$lang->admin->menu->xuanxuan['subMenu'] = new stdclass();
//$lang->admin->menu->xuanxuan['subMenu']->index = array('link' => '首页|admin|xuanxuan');
//$lang->admin->menu->xuanxuan['subMenu']->setting = array('link' => '参数|setting|xuanxuan');