This commit is contained in:
guofeilong
2023-01-31 10:59:18 +08:00
12 changed files with 275 additions and 88 deletions
+17
View File
@@ -6,3 +6,20 @@ $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['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');
$config->admin->menuGroup['feature'] = array('custom|set', 'custom|product', 'custom|execution', 'custom|required', 'custom|kanban', 'approvalflow', 'measurement', 'meetingroom', 'custom|browsestoryconcept', 'custom|kanban');
$config->admin->menuGroup['template'] = array('custom|set', 'baseline');
$config->admin->menuGroup['message'] = array('mail', 'webhook', 'sms', 'message');
$config->admin->menuGroup['dev'] = array('dev', 'entry');
$config->admin->menuGroup['extension'] = array('extension');
$config->admin->menuGroup['convert'] = array('convert');
$config->admin->menuModuleGroup['model']['custom|set'] = array('project', 'issue', 'risk', 'opportunity', 'nc');
$config->admin->menuModuleGroup['model']['custom|required'] = array('project', 'build');
$config->admin->menuModuleGroup['feature']['custom|set'] = array('todo', 'feedback', 'user', 'block', 'story', 'task', 'bug', 'testcase', 'testtask', 'feedback', 'user');
$config->admin->menuModuleGroup['feature']['custom|required'] = array('bug', 'doc', 'product', 'story', 'productplan', 'release', 'task', 'bug', 'testcase', 'testsuite', 'testtask', 'testreport', 'caselib', 'doc', 'feedback', 'user');
$config->admin->menuModuleGroup['template']['custom|set'] = array('baseline');
+94
View File
@@ -148,3 +148,97 @@ $lang->admin->safe->noticeMode = '系统会在创建和修改用户、修改
$lang->admin->safe->noticeWeakMode = '系统会在登录、创建和修改用户、修改密码的时候检查用户口令。';
$lang->admin->safe->noticeStrong = '密码长度越长,含有大写字母或数字或特殊符号越多,密码字母越不重复,安全度越强!';
$lang->admin->safe->noticeGd = '系统检测到您的服务器未安装GD模块,无法使用验证码功能,请安装后使用。';
$lang->admin->menuList = new stdclass();
$lang->admin->menuList->setting['name'] = '系统设置';
$lang->admin->menuList->setting['desc'] = '';
$lang->admin->menuList->setting['order'] = 1;
$lang->admin->menuList->user['name'] = '人员管理';
$lang->admin->menuList->user['desc'] = '';
$lang->admin->menuList->user['order'] = 2;
$lang->admin->menuList->switch['name'] = '功能开关';
$lang->admin->menuList->switch['desc'] = '';
$lang->admin->menuList->switch['order'] = 3;
$lang->admin->menuList->model['name'] = '模型配置';
$lang->admin->menuList->model['desc'] = '';
$lang->admin->menuList->model['order'] = 4;
$lang->admin->menuList->feature['name'] = '功能配置';
$lang->admin->menuList->feature['desc'] = '';
$lang->admin->menuList->feature['order'] = 5;
$lang->admin->menuList->template['name'] = '文档模板';
$lang->admin->menuList->template['desc'] = '';
$lang->admin->menuList->template['order'] = 6;
$lang->admin->menuList->message['name'] = '通知设置';
$lang->admin->menuList->message['desc'] = '';
$lang->admin->menuList->message['order'] = 7;
$lang->admin->menuList->extension['name'] = '插件管理';
$lang->admin->menuList->extension['desc'] = '';
$lang->admin->menuList->extension['order'] = 8;
$lang->admin->menuList->dev['name'] = '二次开发';
$lang->admin->menuList->dev['desc'] = '';
$lang->admin->menuList->dev['order'] = 9;
$lang->admin->menuList->convert['name'] = '数据导入';
$lang->admin->menuList->convert['desc'] = '';
$lang->admin->menuList->convert['order'] = 10;
$lang->admin->menuList->setting['subMenu']['mode'] = array('link' => "模式|custom|mode|", 'subModule' => 'custom');
$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']['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->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->switch['subMenu']['setmodule'] = array('link' => "功能设置|admin|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->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']['meetingroom'] = array('link' => "会议室|meetingroom|browse|", 'subModule' => '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->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->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->dev['subMenu']['entry'] = array('link' => "应用|entry|browse|", 'subModule' => 'entry');
+59
View File
@@ -247,4 +247,63 @@ class adminModel extends model
if($user->birthday and $user->password == md5($user->birthday)) return true;
return false;
}
public function setMenu()
{
$this->lang->switcherMenu = $this->getSwitcher();
}
/**
* Get switcher.
*
* @access public
* @return string
*/
public function getSwitcher()
{
$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);
foreach($this->config->admin->menuGroup as $menuKey => $menuGroup)
{
if(in_array($moduleName, $menuGroup))
{
$currentMenu = $menuKey;
break;
}
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;
}
}
else
{
$currentMenu = $menuKey;
break;
}
}
}
$currentMenuName = $this->lang->admin->menuList->$currentMenu['name'];
$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'>";
foreach($this->lang->admin->menuList as $menuKey => $menuGroup)
{
$class = $menuKey == $currentMenu ? "class='active'" : '';
$output .= "<li $class>" . html::a($link, $menuGroup['name']) . "</li>";
}
$output .= "</ul></div>";
return $output;
}
}
+7
View File
@@ -1955,6 +1955,8 @@ class bug extends control
$actionID = $this->action->create('bug', $bugID, 'Closed', $this->post->comment);
$this->action->logHistory($actionID, $changes);
$this->dao->update(TABLE_BUG)->set('assignedTo')->eq('closed')->where('id')->eq((int)$bugID)->exec();
$this->executeHooks($bugID);
$extra = str_replace(array(',', ' '), array('&', ''), $extra);
@@ -2093,6 +2095,7 @@ class bug extends control
/* Reset $_POST. Do not unset that because the function of close need that in model. */
$_POST = array();
$closedBugs = array();
$bugs = $this->bug->getByList($bugIDList);
foreach($bugs as $bugID => $bug)
{
@@ -2106,7 +2109,11 @@ class bug extends control
$actionID = $this->action->create('bug', $bugID, 'Closed');
$this->action->logHistory($actionID, $changes);
$closedBugs[] = $bugID;
}
$this->dao->update(TABLE_BUG)->set('assignedTo')->eq('closed')->where('id')->in($closedBugs)->exec();
$this->loadModel('score')->create('ajax', 'batchOther');
if(isset($skipBugs)) echo js::alert(sprintf($this->lang->bug->skipClose, join(',', $skipBugs)));
if($viewType)
+7 -1
View File
@@ -866,9 +866,15 @@ function notice()
var html = '';
if($('#execution').length == 0 || $('#execution').val() == 0)
{
var branch = $('#branch').val();
var branch = $('#branch').val();
var projectID = $('#project').val();
if(typeof(branch) == 'undefined') branch = 0;
if(typeof(projectID) == 'undefined') projectID = 0;
var link = createLink('release', 'create', 'productID=' + $('#product').val() + '&branch=' + branch);
if(projectID > 0) link = createLink('projectrelease', 'create', 'projectID=' + projectID);
if(config.onlybody != 'yes') link += link.indexOf('?') >= 0 ? '&onlybody=yes' : '?onlybody=yes';
html += '<a href="' + link + '" data-toggle="modal" data-type="iframe" style="padding-right:5px">' + createRelease + '</a> ';
html += '<a href="javascript:loadProductBuilds(' + $('#product').val() + ')">' + refresh + '</a>';
+2 -3
View File
@@ -1493,7 +1493,6 @@ class bugModel extends model
$oldBug = $this->getById($bugID);
$bug = fixer::input('post')
->add('id', $bugID)
->add('assignedTo', 'closed')
->add('status', 'closed')
->add('confirmed', 1)
->setDefault('assignedDate', $now)
@@ -3598,9 +3597,9 @@ class bugModel extends model
$ccList = substr($ccList, $commaPos + 1);
}
}
elseif(strtolower($toList) == 'closed')
elseif($bug->status == 'closed')
{
$toList = $bug->resolvedBy;
$ccList .= ',' . $bug->resolvedBy;
}
return array($toList, $ccList);
+76 -76
View File
@@ -572,82 +572,82 @@ $lang->company->menuOrder[30] = 'addUser';
/* Admin menu. */
$lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => "$lang->indexPage|admin|index", 'alias' => 'register,certifytemail,certifyztmobile,ztcompany');
$lang->admin->menu->company = array('link' => "{$lang->personnel->common}|company|browse|", 'subModule' => ',user,dept,group,');
$lang->admin->menu->model = array('link' => "$lang->model|custom|browsestoryconcept|", 'class' => 'dropdown dropdown-hover', 'exclude' => 'custom-index,custom-set,custom-product,custom-execution,custom-kanban,custom-required,custom-flow,custom-score,custom-feedback,custom-timezone,custom-mode');
$lang->admin->menu->custom = array('link' => "{$lang->custom->common}|custom|index", 'exclude' => 'custom-browsestoryconcept,custom-timezone,custom-estimate,custom-code,custom-mode');
$lang->admin->menu->extension = array('link' => "{$lang->extension->common}|extension|browse", 'subModule' => 'extension');
$lang->admin->menu->dev = array('link' => "$lang->redev|dev|api", 'alias' => 'db', 'subModule' => 'dev,editor,entry');
$lang->admin->menu->message = array('link' => "{$lang->message->common}|message|index", 'subModule' => 'message,mail,webhook');
$lang->admin->menu->system = array('link' => "{$lang->admin->system}|custom|mode", 'subModule' => 'cron,backup,action,admin,search,convert', 'exclude' => 'admin-index,admin-xuanxuan,admin-register,admin-ztcompany');
$lang->admin->menu->model['dropMenu'] = new stdclass();
$lang->admin->menu->model['dropMenu']->allModel = array('link' => "{$lang->globalSetting}|custom|browsestoryconcept|", 'subModule' => 'measurement,report,sqlbuilder,subject,custom,meetingroom,baseline');
if($config->edition == 'max') $lang->admin->menu->model['dropMenu']->scrum = array('link' => "{$lang->scrumModel}|auditcl|scrumbrowse|processID=0&browseType=scrum", 'subModule' => 'auditcl,process,activity,zoutput,classify,');
$lang->admin->menu->model['dropMenu']->waterfall = array('link' => "{$lang->waterfallModel}|stage|setType|", 'subModule' => 'stage,auditcl,cmcl,process,activity,zoutput,classify,reviewcl,reviewsetting,design');
$lang->admin->menu->allModel['subMenu'] = new stdclass();
$lang->admin->menu->allModel['subMenu']->storyConcept = array('link' => "{$lang->storyConcept}|custom|browsestoryconcept|");
$lang->admin->menu->allModel['subMenu']->code = array('link' => "{$lang->code}|custom|code|");
$lang->admin->menu->allModel['menuOrder'][5] = 'storyConcept';
$lang->admin->menu->allModel['menuOrder'][30] = 'code';
$lang->admin->menu->waterfall['subMenu'] = new stdclass();
$lang->admin->menu->waterfall['subMenu']->stage = array('link' => "{$lang->stage->common}|stage|setType|", 'subModule' => 'stage');
/* Admin menu order. */
$lang->admin->menuOrder[5] = 'index';
$lang->admin->menuOrder[10] = 'company';
$lang->admin->menuOrder[15] = 'model';
$lang->admin->menuOrder[20] = 'custom';
$lang->admin->menuOrder[25] = 'message';
$lang->admin->menuOrder[30] = 'extension';
$lang->admin->menuOrder[35] = 'dev';
$lang->admin->menuOrder[40] = 'system';
$lang->admin->menu->message['subMenu'] = new stdclass();
$lang->admin->menu->message['subMenu']->message = array();
$lang->admin->menu->message['subMenu']->mail = array('link' => "{$lang->mail->common}|mail|index", 'subModule' => 'mail');
$lang->admin->menu->message['subMenu']->webhook = array('link' => "Webhook|webhook|browse", 'subModule' => 'webhook');
$lang->admin->menu->message['subMenu']->browser = array('link' => "$lang->browser|message|browser");
$lang->admin->menu->message['subMenu']->setting = array('link' => "$lang->settings|message|setting");
$lang->admin->menu->message['menuOrder'][5] = 'mail';
$lang->admin->menu->message['menuOrder'][10] = 'webhook';
$lang->admin->menu->message['menuOrder'][15] = 'browser';
$lang->admin->menu->message['menuOrder'][20] = 'setting';
$lang->admin->menu->company['subMenu'] = new stdclass();
$lang->admin->menu->company['subMenu']->browseUser = array('link' => "{$lang->user->common}|company|browse", 'subModule' => 'user');
$lang->admin->menu->company['subMenu']->dept = array('link' => "{$lang->dept->common}|dept|browse", 'subModule' => 'dept');
$lang->admin->menu->company['subMenu']->browseGroup = array('link' => "{$lang->priv}|group|browse", 'subModule' => 'group');
$lang->admin->menu->dev['subMenu'] = new stdclass();
$lang->admin->menu->dev['subMenu']->api = array('link' => "API|dev|api");
$lang->admin->menu->dev['subMenu']->db = array('link' => "$lang->db|dev|db");
$lang->admin->menu->dev['subMenu']->editor = array('link' => "$lang->editor|dev|editor");
$lang->admin->menu->dev['subMenu']->entry = array('link' => "{$lang->admin->entry}|entry|browse", 'subModule' => 'entry');
$lang->admin->menu->dev['menuOrder'][5] = 'api';
$lang->admin->menu->dev['menuOrder'][10] = 'db';
$lang->admin->menu->dev['menuOrder'][15] = 'editor';
$lang->admin->menu->dev['menuOrder'][20] = 'entry';
$lang->admin->menu->system['subMenu'] = new stdclass();
$lang->admin->menu->system['subMenu']->mode = array('link' => "{$lang->custom->mode}|custom|mode");
$lang->admin->menu->system['subMenu']->setModule = array('link' => "{$lang->admin->module}|admin|setmodule");
$lang->admin->menu->system['subMenu']->backup = array('link' => "{$lang->backup->common}|backup|index");
$lang->admin->menu->system['subMenu']->trash = array('link' => "{$lang->action->trash}|action|trash");
$lang->admin->menu->system['subMenu']->safe = array('link' => "$lang->security|admin|safe", 'alias' => 'checkweak,resetpwdsetting');
$lang->admin->menu->system['subMenu']->cron = array('link' => "{$lang->admin->cron}|cron|index", 'subModule' => 'cron');
$lang->admin->menu->system['subMenu']->timezone = array('link' => "$lang->timezone|custom|timezone");
$lang->admin->menu->system['subMenu']->buildIndex = array('link' => "{$lang->admin->buildIndex}|search|buildindex|");
$lang->admin->menu->system['subMenu']->tableEngine = array('link' => "{$lang->admin->tableEngine}|admin|tableengine|");
if(version_compare(phpversion(), 5.6) > 0) $lang->admin->menu->system['subMenu']->convertJira = array('link' => "{$lang->convert->importJira}|convert|convertjira|", 'subModule' => 'convert');
$lang->admin->dividerMenu = ',company,message,system,';
//$lang->admin->menu->index = array('link' => "$lang->indexPage|admin|index", 'alias' => 'register,certifytemail,certifyztmobile,ztcompany');
//$lang->admin->menu->company = array('link' => "{$lang->personnel->common}|company|browse|", 'subModule' => ',user,dept,group,');
//$lang->admin->menu->model = array('link' => "$lang->model|custom|browsestoryconcept|", 'class' => 'dropdown dropdown-hover', 'exclude' => 'custom-index,custom-set,custom-product,custom-execution,custom-kanban,custom-required,custom-flow,custom-score,custom-feedback,custom-timezone,custom-mode');
//$lang->admin->menu->custom = array('link' => "{$lang->custom->common}|custom|index", 'exclude' => 'custom-browsestoryconcept,custom-timezone,custom-estimate,custom-code,custom-mode');
//$lang->admin->menu->extension = array('link' => "{$lang->extension->common}|extension|browse", 'subModule' => 'extension');
//$lang->admin->menu->dev = array('link' => "$lang->redev|dev|api", 'alias' => 'db', 'subModule' => 'dev,editor,entry');
//$lang->admin->menu->message = array('link' => "{$lang->message->common}|message|index", 'subModule' => 'message,mail,webhook');
//$lang->admin->menu->system = array('link' => "{$lang->admin->system}|custom|mode", 'subModule' => 'cron,backup,action,admin,search,convert', 'exclude' => 'admin-index,admin-xuanxuan,admin-register,admin-ztcompany');
//
//$lang->admin->menu->model['dropMenu'] = new stdclass();
//$lang->admin->menu->model['dropMenu']->allModel = array('link' => "{$lang->globalSetting}|custom|browsestoryconcept|", 'subModule' => 'measurement,report,sqlbuilder,subject,custom,meetingroom,baseline');
//
//if($config->edition == 'max') $lang->admin->menu->model['dropMenu']->scrum = array('link' => "{$lang->scrumModel}|auditcl|scrumbrowse|processID=0&browseType=scrum", 'subModule' => 'auditcl,process,activity,zoutput,classify,');
//$lang->admin->menu->model['dropMenu']->waterfall = array('link' => "{$lang->waterfallModel}|stage|setType|", 'subModule' => 'stage,auditcl,cmcl,process,activity,zoutput,classify,reviewcl,reviewsetting,design');
//
//$lang->admin->menu->allModel['subMenu'] = new stdclass();
//$lang->admin->menu->allModel['subMenu']->storyConcept = array('link' => "{$lang->storyConcept}|custom|browsestoryconcept|");
//$lang->admin->menu->allModel['subMenu']->code = array('link' => "{$lang->code}|custom|code|");
//
//$lang->admin->menu->allModel['menuOrder'][5] = 'storyConcept';
//$lang->admin->menu->allModel['menuOrder'][30] = 'code';
//
//$lang->admin->menu->waterfall['subMenu'] = new stdclass();
//$lang->admin->menu->waterfall['subMenu']->stage = array('link' => "{$lang->stage->common}|stage|setType|", 'subModule' => 'stage');
//
///* Admin menu order. */
//$lang->admin->menuOrder[5] = 'index';
//$lang->admin->menuOrder[10] = 'company';
//$lang->admin->menuOrder[15] = 'model';
//$lang->admin->menuOrder[20] = 'custom';
//$lang->admin->menuOrder[25] = 'message';
//$lang->admin->menuOrder[30] = 'extension';
//$lang->admin->menuOrder[35] = 'dev';
//$lang->admin->menuOrder[40] = 'system';
//
//$lang->admin->menu->message['subMenu'] = new stdclass();
//$lang->admin->menu->message['subMenu']->message = array();
//$lang->admin->menu->message['subMenu']->mail = array('link' => "{$lang->mail->common}|mail|index", 'subModule' => 'mail');
//$lang->admin->menu->message['subMenu']->webhook = array('link' => "Webhook|webhook|browse", 'subModule' => 'webhook');
//$lang->admin->menu->message['subMenu']->browser = array('link' => "$lang->browser|message|browser");
//$lang->admin->menu->message['subMenu']->setting = array('link' => "$lang->settings|message|setting");
//
//$lang->admin->menu->message['menuOrder'][5] = 'mail';
//$lang->admin->menu->message['menuOrder'][10] = 'webhook';
//$lang->admin->menu->message['menuOrder'][15] = 'browser';
//$lang->admin->menu->message['menuOrder'][20] = 'setting';
//
//$lang->admin->menu->company['subMenu'] = new stdclass();
//$lang->admin->menu->company['subMenu']->browseUser = array('link' => "{$lang->user->common}|company|browse", 'subModule' => 'user');
//$lang->admin->menu->company['subMenu']->dept = array('link' => "{$lang->dept->common}|dept|browse", 'subModule' => 'dept');
//$lang->admin->menu->company['subMenu']->browseGroup = array('link' => "{$lang->priv}|group|browse", 'subModule' => 'group');
//
//$lang->admin->menu->dev['subMenu'] = new stdclass();
//$lang->admin->menu->dev['subMenu']->api = array('link' => "API|dev|api");
//$lang->admin->menu->dev['subMenu']->db = array('link' => "$lang->db|dev|db");
//$lang->admin->menu->dev['subMenu']->editor = array('link' => "$lang->editor|dev|editor");
//$lang->admin->menu->dev['subMenu']->entry = array('link' => "{$lang->admin->entry}|entry|browse", 'subModule' => 'entry');
//
//$lang->admin->menu->dev['menuOrder'][5] = 'api';
//$lang->admin->menu->dev['menuOrder'][10] = 'db';
//$lang->admin->menu->dev['menuOrder'][15] = 'editor';
//$lang->admin->menu->dev['menuOrder'][20] = 'entry';
//
//$lang->admin->menu->system['subMenu'] = new stdclass();
//$lang->admin->menu->system['subMenu']->mode = array('link' => "{$lang->custom->mode}|custom|mode");
//$lang->admin->menu->system['subMenu']->setModule = array('link' => "{$lang->admin->module}|admin|setmodule");
//$lang->admin->menu->system['subMenu']->backup = array('link' => "{$lang->backup->common}|backup|index");
//$lang->admin->menu->system['subMenu']->trash = array('link' => "{$lang->action->trash}|action|trash");
//$lang->admin->menu->system['subMenu']->safe = array('link' => "$lang->security|admin|safe", 'alias' => 'checkweak,resetpwdsetting');
//$lang->admin->menu->system['subMenu']->cron = array('link' => "{$lang->admin->cron}|cron|index", 'subModule' => 'cron');
//$lang->admin->menu->system['subMenu']->timezone = array('link' => "$lang->timezone|custom|timezone");
//$lang->admin->menu->system['subMenu']->buildIndex = array('link' => "{$lang->admin->buildIndex}|search|buildindex|");
//$lang->admin->menu->system['subMenu']->tableEngine = array('link' => "{$lang->admin->tableEngine}|admin|tableengine|");
//if(version_compare(phpversion(), 5.6) > 0) $lang->admin->menu->system['subMenu']->convertJira = array('link' => "{$lang->convert->importJira}|convert|convertjira|", 'subModule' => 'convert');
//
//$lang->admin->dividerMenu = ',company,message,system,';
$lang->subject->menu = new stdclass();
$lang->subject->menu->storyConcept = array('link' => "{$lang->storyConcept}|custom|browsestoryconcept|");
+2 -2
View File
@@ -913,9 +913,9 @@ class commonModel extends model
*/
public static function printHomeButton($tab)
{
global $lang;
global $config;
global $lang, $config, $app;
if($tab == 'admin') $app->control->loadModel('admin')->setMenu();
if(!$tab) return;
$icon = zget($lang->navIcons, $tab, '');
+2
View File
@@ -137,6 +137,8 @@ class projectrelease extends control
if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $releaseID));
if(isonlybody()) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true));
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('view', "releaseID=$releaseID")));
}
+4
View File
@@ -1822,6 +1822,8 @@ class story extends control
$this->action->logHistory($actionID, $changes);
}
$this->dao->update(TABLE_STORY)->set('assignedTo')->eq('closed')->where('id')->eq((int)$storyID)->exec();
$this->executeHooks($storyID);
if(isonlybody())
@@ -1968,6 +1970,8 @@ class story extends control
if(!empty($stories[$storyID]->twins)) $this->story->syncTwins($storyID, $stories[$storyID]->twins, $changes, 'Closed');
}
$this->dao->update(TABLE_STORY)->set('assignedTo')->eq('closed')->where('id')->in(array_keys($allChanges))->exec();
}
if(!dao::isError()) $this->loadModel('score')->create('ajax', 'batchOther');
+2 -4
View File
@@ -1986,7 +1986,6 @@ class storyModel extends model
$now = helper::now();
$story = fixer::input('post')
->add('id', $storyID)
->add('assignedTo', 'closed')
->add('status', 'closed')
->add('stage', 'closed')
->setDefault('lastEditedBy', $this->app->user->account)
@@ -2077,7 +2076,6 @@ class storyModel extends model
$story->lastEditedDate = $now;
$story->closedBy = $this->app->user->account;
$story->closedDate = $now;
$story->assignedTo = 'closed';
$story->assignedDate = $now;
$story->status = 'closed';
$story->stage = 'closed';
@@ -4447,9 +4445,9 @@ class storyModel extends model
$ccList = substr($ccList, $commaPos + 1);
}
}
elseif($toList == 'closed')
elseif($story->status == 'closed')
{
$toList = $story->openedBy;
$ccList .= ',' . $story->openedBy;
}
return array($toList, $ccList);
+3 -2
View File
@@ -114,12 +114,13 @@ if($viewType == 'doc' or $viewType == 'api')
<?php $manageChild = 'manage' . ucfirst($viewType) . 'Child';?>
<?php if(strpos($viewType, 'trainskill') === false and strpos($viewType, 'trainpost') === false) echo strpos($viewType, 'doc') !== false ? $lang->doc->manageType : $lang->tree->$manageChild;?>
</div>
<?php $parent = isonlybody() ? 'onlybody' : '';?>
<?php if($viewType == 'story' and $allProduct and $canBeChanged):?>
<div class="panel-actions btn-toolbar"><?php echo html::a('javascript:toggleCopy()', $lang->tree->syncFromProduct, '', "class='btn btn-sm btn-primary'")?></div>
<?php elseif($viewType == 'feedback' and common::hasPriv('feedback', 'syncProduct') and !isset($syncConfig[$rootID])):?>
<div class="panel-actions btn-toolbar"><?php echo html::a($this->createLink('feedback', 'syncProduct', "productID=$rootID", '', true), $lang->tree->syncProductModule, '', "class='btn btn-sm btn-primary iframe' data-width='40%'");?></div>
<div class="panel-actions btn-toolbar"><?php echo html::a($this->createLink('feedback', 'syncProduct', "productID=$rootID&parent=$parent", '', true), $lang->tree->syncProductModule, '', "class='btn btn-sm btn-primary iframe' data-width='40%'");?></div>
<?php elseif($viewType == 'ticket' and common::hasPriv('ticket', 'syncProduct') and !isset($syncConfig[$rootID])):?>
<div class="panel-actions btn-toolbar"><?php echo html::a($this->createLink('ticket', 'syncProduct', "productID=$rootID", '', true), $lang->tree->syncProductModule, '', "class='btn btn-sm btn-primary iframe' data-width='40%'");?></div>
<div class="panel-actions btn-toolbar"><?php echo html::a($this->createLink('ticket', 'syncProduct', "productID=$rootID&parent=$parent", '', true), $lang->tree->syncProductModule, '', "class='btn btn-sm btn-primary iframe' data-width='40%'");?></div>
<?php endif;?>
</div>
<div class="panel-body">