From 12c288a4e7a20122e9feaae8a11662d295ab2e6c Mon Sep 17 00:00:00 2001
From: wangyidong
Date: Tue, 16 May 2017 14:27:53 +0800
Subject: [PATCH] * change for upgrade.
---
Makefile | 1 -
VERSION | 2 +-
config/config.php | 2 +-
db/zentao.sql | 29 +++
doc/CHANGELOG | 62 ++++++
framework/router.class.php | 2 +-
module/admin/lang/zh-tw.php | 13 +-
module/backup/lang/zh-tw.php | 2 +
module/block/lang/zh-tw.php | 98 ++++++---
module/bug/js/browse.js | 7 +-
module/common/lang/en.php | 126 +++++++-----
module/common/lang/zh-cn.php | 24 +--
module/common/lang/zh-tw.php | 238 +++++++++++++++++++++-
module/custom/lang/zh-tw.php | 6 +
module/doc/lang/en.php | 1 +
module/doc/lang/zh-cn.php | 1 +
module/doc/lang/zh-tw.php | 9 +
module/file/lang/zh-tw.php | 12 +-
module/group/lang/en.php | 1 +
module/group/lang/resource.php | 23 +++
module/group/lang/zh-cn.php | 1 +
module/group/lang/zh-tw.php | 1 +
module/group/view/privbygroup.html.php | 1 +
module/install/lang/zh-tw.php | 14 ++
module/mail/lang/zh-tw.php | 2 +-
module/misc/lang/zh-tw.php | 1 +
module/product/control.php | 5 +-
module/product/lang/zh-tw.php | 5 +
module/product/model.php | 4 +-
module/project/control.php | 2 +-
module/project/lang/zh-tw.php | 8 +
module/qa/control.php | 2 +-
module/story/lang/zh-tw.php | 1 +
module/task/lang/zh-tw.php | 3 +-
module/task/view/edit.html.php | 6 +-
module/testsuite/lang/en.php | 4 +-
module/testsuite/lang/zh-cn.php | 4 +-
module/testsuite/lang/zh-tw.php | 4 +
module/testtask/lang/zh-tw.php | 2 +-
module/todo/lang/zh-tw.php | 4 +
module/tree/view/ajaxgetdropmenu.html.php | 2 +-
module/upgrade/lang/en.php | 1 +
module/upgrade/lang/zh-cn.php | 1 +
module/upgrade/lang/zh-tw.php | 1 +
module/upgrade/model.php | 46 +++++
tools/check.php | 12 +-
46 files changed, 668 insertions(+), 128 deletions(-)
diff --git a/Makefile b/Makefile
index 9edf82cf88..9fbb126212 100644
--- a/Makefile
+++ b/Makefile
@@ -47,7 +47,6 @@ pms:
chmod 777 zentaopms/www
chmod a+rx zentaopms/bin/*
find zentaopms/ -name ext |xargs chmod -R 777
- echo full > zentaopms/.flow
zip -r -9 ZenTaoPMS.$(VERSION).zip zentaopms
rm -fr zentaopms
deb:
diff --git a/VERSION b/VERSION
index d6b7c4d542..6aeae34915 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-9.1.2
+9.2.stable
diff --git a/config/config.php b/config/config.php
index 66ca8ffffd..57d16d1b47 100644
--- a/config/config.php
+++ b/config/config.php
@@ -17,7 +17,7 @@ if(!function_exists('getWebRoot')){function getWebRoot(){}}
/* Basic settings. */
$config = new config();
-$config->version = '9.1.2'; // The version of zentaopms. Don't change it.
+$config->version = '9.2'; // The version of zentaopms. Don't change it.
$config->charset = 'UTF-8'; // The charset of zentaopms.
$config->cookieLife = time() + 2592000; // The cookie life time.
$config->timezone = 'Asia/Shanghai'; // The time zone setting, for more see http://www.php.net/manual/en/timezones.php
diff --git a/db/zentao.sql b/db/zentao.sql
index d70ff82c51..bf500ff379 100644
--- a/db/zentao.sql
+++ b/db/zentao.sql
@@ -901,6 +901,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(1, 'cron', 'toggle'),
(1, 'cron', 'turnon'),
(1, 'custom', 'flow'),
+(1, 'custom', 'working'),
(1, 'custom', 'index'),
(1, 'custom', 'restore'),
(1, 'custom', 'set'),
@@ -923,6 +924,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(1, 'doc', 'objectLibs'),
(1, 'doc', 'showFiles'),
(1, 'doc', 'view'),
+(1, 'doc', 'sort'),
(1, 'editor', 'delete'),
(1, 'editor', 'edit'),
(1, 'editor', 'extend'),
@@ -995,6 +997,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(1, 'product', 'project'),
(1, 'product', 'roadmap'),
(1, 'product', 'view'),
+(1, 'product', 'build'),
(1, 'product', 'updateOrder'),
(1, 'branch', 'manage'),
(1, 'branch', 'sort'),
@@ -1166,6 +1169,10 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(1, 'testsuite', 'library'),
(1, 'testsuite', 'createLib'),
(1, 'testsuite', 'createCase'),
+(1, 'testsuite', 'exportTemplet'),
+(1, 'testsuite', 'batchCreateCase'),
+(1, 'testsuite', 'import'),
+(1, 'testsuite', 'showImport'),
(1, 'testsuite', 'libView'),
(1, 'testtask', 'batchAssign'),
(1, 'testtask', 'batchRun'),
@@ -1293,6 +1300,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(2, 'product', 'project'),
(2, 'product', 'roadmap'),
(2, 'product', 'view'),
+(2, 'product', 'build'),
(2, 'productplan', 'browse'),
(2, 'productplan', 'view'),
(2, 'project', 'browse'),
@@ -1471,6 +1479,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(3, 'product', 'project'),
(3, 'product', 'roadmap'),
(3, 'product', 'view'),
+(3, 'product', 'build'),
(3, 'productplan', 'browse'),
(3, 'productplan', 'view'),
(3, 'project', 'browse'),
@@ -1707,6 +1716,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(4, 'product', 'project'),
(4, 'product', 'roadmap'),
(4, 'product', 'view'),
+(4, 'product', 'build'),
(4, 'productplan', 'browse'),
(4, 'productplan', 'view'),
(4, 'project', 'activate'),
@@ -1932,6 +1942,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(5, 'product', 'project'),
(5, 'product', 'roadmap'),
(5, 'product', 'view'),
+(5, 'product', 'build'),
(5, 'product', 'updateOrder'),
(5, 'branch', 'manage'),
(5, 'branch', 'sort'),
@@ -2057,6 +2068,10 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(5, 'testsuite', 'library'),
(5, 'testsuite', 'createLib'),
(5, 'testsuite', 'createCase'),
+(5, 'testsuite', 'exportTemplet'),
+(5, 'testsuite', 'batchCreateCase'),
+(5, 'testsuite', 'import'),
+(5, 'testsuite', 'showImport'),
(5, 'testsuite', 'libView'),
(5, 'testtask', 'browse'),
(5, 'testtask', 'cases'),
@@ -2187,6 +2202,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(6, 'product', 'project'),
(6, 'product', 'roadmap'),
(6, 'product', 'view'),
+(6, 'product', 'build'),
(6, 'productplan', 'browse'),
(6, 'productplan', 'view'),
(6, 'project', 'activate'),
@@ -2410,6 +2426,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(7, 'product', 'project'),
(7, 'product', 'roadmap'),
(7, 'product', 'view'),
+(7, 'product', 'build'),
(7, 'product', 'updateOrder'),
(7, 'branch', 'manage'),
(7, 'branch', 'sort'),
@@ -2519,6 +2536,10 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(7, 'testsuite', 'library'),
(7, 'testsuite', 'createLib'),
(7, 'testsuite', 'createCase'),
+(7, 'testsuite', 'exportTemplet'),
+(7, 'testsuite', 'batchCreateCase'),
+(7, 'testsuite', 'import'),
+(7, 'testsuite', 'showImport'),
(7, 'testsuite', 'libView'),
(7, 'testtask', 'browse'),
(7, 'testtask', 'cases'),
@@ -2643,6 +2664,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(8, 'product', 'project'),
(8, 'product', 'roadmap'),
(8, 'product', 'view'),
+(8, 'product', 'build'),
(8, 'productplan', 'browse'),
(8, 'productplan', 'view'),
(8, 'project', 'bug'),
@@ -2753,6 +2775,10 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(8, 'testsuite', 'library'),
(8, 'testsuite', 'createLib'),
(8, 'testsuite', 'createCase'),
+(8, 'testsuite', 'exportTemplet'),
+(8, 'testsuite', 'batchCreateCase'),
+(8, 'testsuite', 'import'),
+(8, 'testsuite', 'showImport'),
(8, 'testsuite', 'libView'),
(8, 'testtask', 'batchAssign'),
(8, 'testtask', 'batchRun'),
@@ -2872,6 +2898,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(9, 'product', 'project'),
(9, 'product', 'roadmap'),
(9, 'product', 'view'),
+(9, 'product', 'build'),
(9, 'productplan', 'browse'),
(9, 'productplan', 'view'),
(9, 'project', 'browse'),
@@ -3009,6 +3036,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(10, 'product', 'all'),
(10, 'product', 'roadmap'),
(10, 'product', 'view'),
+(10, 'product', 'build'),
(10, 'productplan', 'browse'),
(10, 'productplan', 'view'),
(10, 'project', 'browse'),
@@ -3100,6 +3128,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(11, 'product', 'all'),
(11, 'product', 'roadmap'),
(11, 'product', 'view'),
+(11, 'product', 'build'),
(11, 'productplan', 'browse'),
(11, 'productplan', 'view'),
(11, 'project', 'browse'),
diff --git a/doc/CHANGELOG b/doc/CHANGELOG
index b1a2f79fa7..56682f957d 100644
--- a/doc/CHANGELOG
+++ b/doc/CHANGELOG
@@ -1,3 +1,65 @@
+2017-05-16 9.2.stable
+完成的需求
+1883 windows一键安装包提示安装vC环境改为可选
+1982 支持多种工作模式
+2143 需求、bug、用例增加批量修改所属分支的功能
+2164 文档库增加排序功能
+2207 创建产品的时候多平台多分支增加说明
+2239 项目关联需求的时候将需求的研发阶段也列出来
+2240 备份的时候将禅道的代码目录也备份下来
+2241 文档视图中的产品和项目文档库中的权限控制增加团队成员允许访问的功能
+2246 批量添加需求时在需求标题后面增加复制按钮
+2247 文档库中的附件库增加搜索功能
+2253 批量执行用例界面把前置条件显示出来
+2254 将每日邮件通知里面的s去掉
+2260 每日提醒的邮件发送时间调整下
+2261 调整各个列表页面的表头的对齐方式。
+2262 发信设置里面的发信域名改为禅道域名。
+2265 分支或者平台下面的模块应该列出有需求的公共模块
+2266 公共用例库增加导入和批量添加的功能
+2267 公共用例库增加重名判断,用例库名称增加必填项标识,用例库图标和产品图标做区别。
+2271 优化下数据库检查修复页面的排版
+2272 调整测试套件列表页面
+2273 调整测试用例的评审功能
+2274 从公共用例库导入用例时完善模块对照逻辑
+2275 测试总结报告保存按钮上调。
+2276 用例步骤分组重新调整。
+2277 Bug导为任务时需要处理截止日期
+2278 任务列表的批量操作增加取消。
+2279 燃尽图修改首天工时时将那一天的剩余工时也修改了
+2280 cron表崩溃之后能够自动修复
+2282 禅道如果和然之集成后,样式做调整
+2283 表单里面一行多个控件必填项的展示需要调整
+2284 维护模块的时候可以从中间插入一个记录
+2285 测试报告中相应列表页面增加链接
+2286 项目导入bug的时候,将解决方案等于延期的也列出来
+2287 在详情页面切换产品列表跳转到该产品的需求列表页面
+2288 禅道多图上传可以直接用多图上传的插件。
+2290 禅道迁移目录之后,model临时文件能够自动重新生成。
+2291 计划关联需求时,需求可以弹窗查看。
+2292 升级windows一键安装包
+2293 升级linux一键安装包
+修复的Bug
+1086 测试-版本生成报告页面切换分支报错
+1085 bug详情电池所属计划显示乱码
+1082 项目--需求列表,把鼠标放在T B C上不显示提示文字。
+1079 用例添加步骤后,用例列表步骤显示为00
+1071 文档上传附件图片查看文档详情的时候无法关闭预览
+1066 编辑bug影响版本看不到删除按钮
+1065 xampp集成包经常出现无法访问重启服务后可以正常访问
+1064 编辑需求删除关联的计划无效
+1063 测试-报告页面切换分支报错
+1059 bug编辑无法显示关联需求
+1057 用例编辑修改步骤后列表页面用例步骤数不会发生改变
+1056 windows一件安装包修改端口报错
+1052 图片预览功能显示太小无法看清楚
+1046 重复修改模块所属的产品时,列出的模块列表有重复
+1044 测试视图版本选择里面的全部产品应当根据流程设置进行修改
+1039 测试-版本中查看用例详情点击转bug按钮影响版本和所属项目等信息没有带到提bug页面
+1017 当产品-需求的模块数量在1000个左右访问禅道产品-需求页面加载速度最少需要2-5秒
+1008 我的地盘首页的待办点击后跳转到组织-用户-待办页面
+1003 报表中的安装模块统计不显示平台分支信息导致名称一致不好识别
+
2017-03-23 9.1.stable
完成的需求
104 test suite管理
diff --git a/framework/router.class.php b/framework/router.class.php
index 7620e86a78..3c8da3b2c4 100755
--- a/framework/router.class.php
+++ b/framework/router.class.php
@@ -43,7 +43,7 @@ class router extends baseRouter
global $config;
if(!isset($config->global)) $config->global = new stdclass();
$flow = $this->dbh->query('SELECT value FROM' . TABLE_CONFIG . "WHERE `owner`='system' AND `module`='common' AND `key`='flow'")->fetch();
- if($flow) $config->global->flow = $flow->value;
+ $config->global->flow = $flow ? $flow->value : 'full';
try
{
diff --git a/module/admin/lang/zh-tw.php b/module/admin/lang/zh-tw.php
index a40b64308a..e4ba2a5dce 100644
--- a/module/admin/lang/zh-tw.php
+++ b/module/admin/lang/zh-tw.php
@@ -45,12 +45,13 @@ $lang->admin->bind->caption = '關聯社區帳號';
$lang->admin->bind->success = "關聯賬戶成功";
$lang->admin->safe = new stdclass();
-$lang->admin->safe->common = '安全';
-$lang->admin->safe->set = '密碼安全設置';
-$lang->admin->safe->password = '密碼安全';
-$lang->admin->safe->weak = '常用弱口令';
-$lang->admin->safe->reason = '類型';
-$lang->admin->safe->checkWeak = '弱口令掃瞄';
+$lang->admin->safe->common = '安全策略';
+$lang->admin->safe->set = '密碼安全設置';
+$lang->admin->safe->password = '密碼安全';
+$lang->admin->safe->weak = '常用弱口令';
+$lang->admin->safe->reason = '類型';
+$lang->admin->safe->checkWeak = '弱口令掃瞄';
+$lang->admin->safe->changeWeak = '修改弱口令密碼';
$lang->admin->safe->modifyPasswordFirstLogin = '首次登陸修改密碼';
$lang->admin->safe->modeList[0] = '不檢查';
diff --git a/module/backup/lang/zh-tw.php b/module/backup/lang/zh-tw.php
index 95de62a50d..9decfe87c6 100644
--- a/module/backup/lang/zh-tw.php
+++ b/module/backup/lang/zh-tw.php
@@ -16,6 +16,7 @@ $lang->backup->waitting = '正在進行中,
$lang->backup->confirmDelete = '是否刪除備份?';
$lang->backup->confirmRestore = '是否還原該備份?';
$lang->backup->holdDays = '備份保留最近 %s 天';
+$lang->backup->restoreTip = '還原功能只還原附件和資料庫,如果需要還原代碼,可以手動還原。';
$lang->backup->success = new stdclass();
$lang->backup->success->backup = '備份成功!';
@@ -27,3 +28,4 @@ $lang->backup->error->noDelete = "檔案 %s 無法刪除,修改權限或手
$lang->backup->error->restoreSQL = "資料庫還原失敗,錯誤:%s";
$lang->backup->error->restoreFile = "附件還原失敗,錯誤:%s";
$lang->backup->error->backupFile = "附件備份失敗,錯誤:%s";
+$lang->backup->error->backupCode = "代碼備份失敗,錯誤:%s";
diff --git a/module/block/lang/zh-tw.php b/module/block/lang/zh-tw.php
index 72ed6c46cd..a29148c939 100644
--- a/module/block/lang/zh-tw.php
+++ b/module/block/lang/zh-tw.php
@@ -93,31 +93,79 @@ $lang->block->default['qa']['3']['params']['num'] = 15;
$lang->block->default['qa']['3']['params']['orderBy'] = 'id_desc';
$lang->block->default['qa']['3']['params']['type'] = 'wait';
-$lang->block->default['my']['1']['title'] = '流程圖';
-$lang->block->default['my']['1']['block'] = 'flowchart';
-$lang->block->default['my']['1']['grid'] = 8;
-$lang->block->default['my']['1']['source'] = '';
-$lang->block->default['my']['2']['title'] = '最新動態';
-$lang->block->default['my']['2']['block'] = 'dynamic';
-$lang->block->default['my']['2']['grid'] = 4;
-$lang->block->default['my']['2']['source'] = '';
-$lang->block->default['my']['3'] = $lang->block->default['project']['1'];
-$lang->block->default['my']['3']['source'] = 'project';
-$lang->block->default['my']['4']['title'] = '我的待辦';
-$lang->block->default['my']['4']['block'] = 'list';
-$lang->block->default['my']['4']['grid'] = 4;
-$lang->block->default['my']['4']['source'] = 'todo';
-$lang->block->default['my']['4']['params']['num'] = '20';
-$lang->block->default['my']['5'] = $lang->block->default['product']['1'];
-$lang->block->default['my']['5']['source'] = 'product';
-$lang->block->default['my']['6'] = $lang->block->default['project']['2'];
-$lang->block->default['my']['6']['source'] = 'project';
-$lang->block->default['my']['7'] = $lang->block->default['qa']['1'];
-$lang->block->default['my']['7']['source'] = 'qa';
-$lang->block->default['my']['8'] = $lang->block->default['product']['2'];
-$lang->block->default['my']['8']['source'] = 'product';
-$lang->block->default['my']['9'] = $lang->block->default['qa']['2'];
-$lang->block->default['my']['9']['source'] = 'qa';
+$lang->block->default['full']['my']['1']['title'] = '流程圖';
+$lang->block->default['full']['my']['1']['block'] = 'flowchart';
+$lang->block->default['full']['my']['1']['grid'] = 8;
+$lang->block->default['full']['my']['1']['source'] = '';
+$lang->block->default['full']['my']['2']['title'] = '最新動態';
+$lang->block->default['full']['my']['2']['block'] = 'dynamic';
+$lang->block->default['full']['my']['2']['grid'] = 4;
+$lang->block->default['full']['my']['2']['source'] = '';
+$lang->block->default['full']['my']['3'] = $lang->block->default['project']['1'];
+$lang->block->default['full']['my']['3']['source'] = 'project';
+$lang->block->default['full']['my']['4']['title'] = '我的待辦';
+$lang->block->default['full']['my']['4']['block'] = 'list';
+$lang->block->default['full']['my']['4']['grid'] = 4;
+$lang->block->default['full']['my']['4']['source'] = 'todo';
+$lang->block->default['full']['my']['4']['params']['num'] = '20';
+$lang->block->default['full']['my']['5'] = $lang->block->default['product']['1'];
+$lang->block->default['full']['my']['5']['source'] = 'product';
+$lang->block->default['full']['my']['6'] = $lang->block->default['project']['2'];
+$lang->block->default['full']['my']['6']['source'] = 'project';
+$lang->block->default['full']['my']['7'] = $lang->block->default['qa']['1'];
+$lang->block->default['full']['my']['7']['source'] = 'qa';
+$lang->block->default['full']['my']['8'] = $lang->block->default['product']['2'];
+$lang->block->default['full']['my']['8']['source'] = 'product';
+$lang->block->default['full']['my']['9'] = $lang->block->default['qa']['2'];
+$lang->block->default['full']['my']['9']['source'] = 'qa';
+
+$lang->block->default['onlyTest']['my']['1'] = $lang->block->default['qa']['1'];
+$lang->block->default['onlyTest']['my']['1']['source'] = 'qa';
+$lang->block->default['onlyTest']['my']['1']['grid'] = '8';
+$lang->block->default['onlyTest']['my']['2']['title'] = '最新動態';
+$lang->block->default['onlyTest']['my']['2']['block'] = 'dynamic';
+$lang->block->default['onlyTest']['my']['2']['grid'] = 4;
+$lang->block->default['onlyTest']['my']['2']['source'] = '';
+$lang->block->default['onlyTest']['my']['3']['title'] = '我的待辦';
+$lang->block->default['onlyTest']['my']['3']['block'] = 'list';
+$lang->block->default['onlyTest']['my']['3']['grid'] = 6;
+$lang->block->default['onlyTest']['my']['3']['source'] = 'todo';
+$lang->block->default['onlyTest']['my']['3']['params']['num'] = '20';
+$lang->block->default['onlyTest']['my']['4'] = $lang->block->default['qa']['2'];
+$lang->block->default['onlyTest']['my']['4']['source'] = 'qa';
+$lang->block->default['onlyTest']['my']['4']['grid'] = '6';
+
+$lang->block->default['onlyStory']['my']['1'] = $lang->block->default['product']['1'];
+$lang->block->default['onlyStory']['my']['1']['source'] = 'product';
+$lang->block->default['onlyStory']['my']['1']['grid'] = '8';
+$lang->block->default['onlyStory']['my']['2']['title'] = '最新動態';
+$lang->block->default['onlyStory']['my']['2']['block'] = 'dynamic';
+$lang->block->default['onlyStory']['my']['2']['grid'] = 4;
+$lang->block->default['onlyStory']['my']['2']['source'] = '';
+$lang->block->default['onlyStory']['my']['3']['title'] = '我的待辦';
+$lang->block->default['onlyStory']['my']['3']['block'] = 'list';
+$lang->block->default['onlyStory']['my']['3']['grid'] = 6;
+$lang->block->default['onlyStory']['my']['3']['source'] = 'todo';
+$lang->block->default['onlyStory']['my']['3']['params']['num'] = '20';
+$lang->block->default['onlyStory']['my']['4'] = $lang->block->default['product']['2'];
+$lang->block->default['onlyStory']['my']['4']['source'] = 'product';
+$lang->block->default['onlyStory']['my']['4']['grid'] = '4';
+
+$lang->block->default['onlyTask']['my']['1'] = $lang->block->default['project']['1'];
+$lang->block->default['onlyTask']['my']['1']['source'] = 'project';
+$lang->block->default['onlyTask']['my']['1']['grid'] = '8';
+$lang->block->default['onlyTask']['my']['2']['title'] = '最新動態';
+$lang->block->default['onlyTask']['my']['2']['block'] = 'dynamic';
+$lang->block->default['onlyTask']['my']['2']['grid'] = 4;
+$lang->block->default['onlyTask']['my']['2']['source'] = '';
+$lang->block->default['onlyTask']['my']['3']['title'] = '我的待辦';
+$lang->block->default['onlyTask']['my']['3']['block'] = 'list';
+$lang->block->default['onlyTask']['my']['3']['grid'] = 6;
+$lang->block->default['onlyTask']['my']['3']['source'] = 'todo';
+$lang->block->default['onlyTask']['my']['3']['params']['num'] = '20';
+$lang->block->default['onlyTask']['my']['4'] = $lang->block->default['project']['2'];
+$lang->block->default['onlyTask']['my']['4']['source'] = 'project';
+$lang->block->default['onlyTask']['my']['4']['grid'] = 6;
$lang->block->num = '數量';
$lang->block->type = '類型';
diff --git a/module/bug/js/browse.js b/module/bug/js/browse.js
index bb978db530..f8542352d7 100644
--- a/module/bug/js/browse.js
+++ b/module/bug/js/browse.js
@@ -33,9 +33,12 @@ $(document).ready(function()
var navWidth = $('#modulemenu > .nav').width();
var leftWidth = 0;
var rightWidth = 0;
- $('#modulemenu > .nav > li.right').each(function(){rightWidth += $(this).width();})
- var maxWidth = navWidth - $('#modulemenu > .nav > #bysearchTab').width() - rightWidth - 80;
+ $rightNav = $('#modulemenu > .nav > li.right');
+ rightLength = $rightNav.length;
+ for(i = 0; i < rightLength; i++) rightWidth += $rightNav.eq(i).width();
+
+ var maxWidth = navWidth - $('#modulemenu > .nav > #bysearchTab').width() - rightWidth - 100;
$('#modulemenu > .nav > li:not(.right)').each(function()
{
diff --git a/module/common/lang/en.php b/module/common/lang/en.php
index 27b336951e..f4c0130ae7 100644
--- a/module/common/lang/en.php
+++ b/module/common/lang/en.php
@@ -574,6 +574,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyStory')
/* Adjust sub menu of product module. */
unset($lang->product->menu->project);
+ unset($lang->product->menu->doc);
/* Rename product module. */
$lang->menu->product = 'Product|product|index';
@@ -609,6 +610,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTask')
unset($lang->project->menu->bug);
unset($lang->project->menu->testtask);
unset($lang->project->menu->product);
+ unset($lang->project->menu->doc);
/* Remove sub menu of product module. */
unset($lang->product->menu);
@@ -651,75 +653,107 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
unset($lang->project->menuOrder);
/* Add bug, testcase and testtask module. */
- $lang->menu->bug = 'Bug|bug|index';
- $lang->menu->testcase = 'Case|testcase|index';
- $lang->menu->testtask = 'Testing|testtask|index';
- $lang->menu->caselib = 'Library|testsuite|library';
+ $lang->menu->bug = 'Bug|bug|index';
+ $lang->menu->testcase = 'Case|testcase|index';
+ $lang->menu->testsuite = 'Suite|testsuite|index';
+ $lang->menu->testtask = 'Testing|testtask|index';
+ $lang->menu->caselib = 'Library|testsuite|library';
- $lang->menuOrder[6] = 'bug';
- $lang->menuOrder[7] = 'testcase';
- $lang->menuOrder[8] = 'testtask';
- $lang->menuOrder[9] = 'caselib';
+ $lang->menuOrder[6] = 'bug';
+ $lang->menuOrder[7] = 'testcase';
+ $lang->menuOrder[8] = 'testsuite';
+ $lang->menuOrder[9] = 'testtask';
+ $lang->menuOrder[10] = 'caselib';
+ $lang->menuOrder[11] = 'product';
/* Adjust sub menu of bug module. */
$lang->bug->menu = new stdclass();
- $lang->bug->menu->product = '%s';
- $lang->bug->menu->browse = array('link' => 'Bug|bug|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree');
- $lang->bug->menu->create = array('link' => 'Create Bug|bug|create|productID=%s');
+ $lang->bug->menu->product = array('link' => '%s', 'fixed' => true);
+ $lang->bug->menu->unclosed = 'Unclosed|bug|browse|productID=%s&branch=%s&browseType=unclosed¶m=%s';
+ $lang->bug->menu->all = 'All|bug|browse|productID=%s&branch=%s&browseType=all¶m=%s';
+ $lang->bug->menu->assigntome = 'Assign to me|bug|browse|productID=%s&branch=%s&browseType=assigntome¶m=%s';
+ $lang->bug->menu->openedbyme = 'Opened by me|bug|browse|productID=%s&branch=%s&browseType=openedbyme¶m=%s';
+ $lang->bug->menu->resolvedbyme = 'Resolved by me|bug|browse|productID=%s&branch=%s&browseType=resolvedbyme¶m=%s';
+ $lang->bug->menu->unconfirmed = 'Unconfirmed|bug|browse|productID=%s&branch=%s&browseType=unconfirmed¶m=%s';
+ $lang->bug->menu->assigntonull = 'Unassigned|bug|browse|productID=%s&branch=%s&browseType=assigntonull¶m=%s';
+ $lang->bug->menu->unresolved = 'Unresolved|bug|browse|productID=%s&branch=%s&browseType=unresolved¶m=%s';
+ $lang->bug->menu->toclosed = 'To closed|bug|browse|productID=%s&branch=%s&browseType=toclosed¶m=%s';
+ $lang->bug->menu->longlifebugs = 'Long life bugs|bug|browse|productID=%s&branch=%s&browseType=longlifebugs¶m=%s';
+ $lang->bug->menu->postponedbugs = 'Postponed bugs|bug|browse|productID=%s&branch=%s&browseType=postponedbugs¶m=%s';
+ $lang->bug->menu->overduebugs = 'Overdue Bug|bug|browse|productID=%s&branch=%s&browseType=overduebugs¶m=%s';
$lang->bug->menuOrder[5] = 'product';
- $lang->bug->menuOrder[10] = 'browse';
- $lang->bug->menuOrder[15] = 'create';
+ $lang->bug->menuOrder[10] = 'unclosed';
+ $lang->bug->menuOrder[15] = 'all';
+ $lang->bug->menuOrder[20] = 'assigntome';
+ $lang->bug->menuOrder[25] = 'openedbyme';
+ $lang->bug->menuOrder[30] = 'resolvedbyme';
+ $lang->bug->menuOrder[35] = 'unresolved';
+ $lang->bug->menuOrder[40] = 'assigntonull';
+ $lang->bug->menuOrder[45] = 'unresolved';
+ $lang->bug->menuOrder[50] = 'toclosed';
+ $lang->bug->menuOrder[55] = 'longlifebugs';
+ $lang->bug->menuOrder[60] = 'postponedbugs';
+ $lang->bug->menuOrder[65] = 'overduebugs';
/* Adjust sub menu of testcase. */
$lang->testcase->menu = new stdclass();
- $lang->testcase->menu->product = '%s';
- $lang->testcase->menu->browse = array('link' => 'Case|testcase|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree');
- $lang->testcase->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s', 'alias' => 'linkcase,create,edit,view');
+ $lang->testcase->menu->product = array('link' => '%s', 'fixed' => true);
+ $lang->testcase->menu->all = '所有|testcase|browse|productID=%s&branch=%s&browseType=all';
+ $lang->testcase->menu->wait = '待评审|testcase|browse|productID=%s&branch=%s&browseType=wait';
+ $lang->testcase->menu->suite = '%s';
$lang->testcase->menuOrder[5] = 'product';
- $lang->testcase->menuOrder[10] = 'browse';
- $lang->testcase->menuOrder[15] = 'testsuite';
+ $lang->testcase->menuOrder[10] = 'all';
+ $lang->testcase->menuOrder[15] = 'wait';
+ $lang->testcase->menuOrder[20] = 'suite';
/* Adjust sub menu of bug module. */
$lang->testsuite->menu = new stdclass();
- $lang->testsuite->menu->product = '%s';
- $lang->testsuite->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree');
- $lang->testsuite->menu->browse = array('link' => 'Suite|testsuite|browse|productID=%s', 'alias' => 'linkcase,create,edit,view');
+ $lang->testsuite->menu->product = array('link' => '%s', 'fixed' => true);
+ $lang->testsuite->menu->create = array('link' => " 建套件|testsuite|create|productID=%s", 'float' => 'right');
$lang->testsuite->menuOrder[5] = 'product';
- $lang->testsuite->menuOrder[10] = 'testcase';
- $lang->testsuite->menuOrder[15] = 'browse';
+ $lang->testsuite->menuOrder[10] = 'create';
/* Adjust sub menu of testtask. */
$lang->testtask->menu = new stdclass();
- $lang->testtask->menu->product = '%s';
- $lang->testtask->menu->browse = array('link' => 'Build|testtask|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree');
- $lang->testtask->menu->create = array('link' => 'Create Test|testtask|create|productID=%s');
- $lang->testtask->menu->report = array('link' => 'Report|testreport|browse');
+ $lang->testtask->menu->product = array('link' => '%s', 'fixed' => true);
+ $lang->testtask->menu->scope = '%s';
+ $lang->testtask->menu->wait = 'Wait|testtask|browse|productID=%s&branch=%s&type=%s,wait';
+ $lang->testtask->menu->doing = 'Doing|testtask|browse|productID=%s&branch=%s&type=%s,doing';
+ $lang->testtask->menu->blocked = 'Blocked|testtask|browse|productID=%s&branch=%s&type=%s,blocked';
+ $lang->testtask->menu->done = 'Done|testtask|browse|productID=%s&branch=%s&type=%s,done';
+ $lang->testtask->menu->totalStatus = 'All|testtask|browse|productID=%s&branch=%s&type=%s,totalStatus';
+ $lang->testtask->menu->report = array('link' => 'Report|testreport|browse', 'alias' => 'view,create,edit');
+ $lang->testtask->menu->create = array('link' => " Test|testtask|create|productID=%s", 'float' => 'right');
- $lang->testtask->menuOrder[5] = 'product';
- $lang->testtask->menuOrder[10] = 'browse';
- $lang->testtask->menuOrder[15] = 'create';
- $lang->testtask->menuOrder[20] = 'report';
+ $lang->testtask->menuOrder[5] = 'product';
+ $lang->testtask->menuOrder[10] = 'scope';
+ $lang->testtask->menuOrder[15] = 'wait';
+ $lang->testtask->menuOrder[20] = 'doing';
+ $lang->testtask->menuOrder[25] = 'blocked';
+ $lang->testtask->menuOrder[30] = 'done';
+ $lang->testtask->menuOrder[35] = 'totalStatus';
+ $lang->testtask->menuOrder[40] = 'report';
+ $lang->testtask->menuOrder[45] = 'create';
+
+ /* Adjust sub menu of report module. */
+ $lang->testreport->menu = $lang->testtask->menu;
+ $lang->testreport->menuOrder = $lang->testtask->menuOrder;
/* Adjust sub menu of caselib module. */
$lang->caselib->menu = new stdclass();
$lang->caselib->menu->lib = array('link' => '%s', 'fixed' => true);
- $lang->caselib->menu->caselib = array('link' => 'Library|testsuite|library', 'alias' => 'createlib,createcase,libview,edit,batchcreatecase,showimport', 'subModule' => 'tree,testcase');
- $lang->caselib->menu->createlib = array('link' => "Create Library|testsuite|createLib|", 'float' => 'right');
+ $lang->caselib->menu->all = 'All|testsuite|library|libID=%s&browseType=all';
+ $lang->caselib->menu->wait = 'Wait|testsuite|library|libID=%s&browseType=wait';
+ $lang->caselib->menu->view = 'View|testsuite|libview|libID=%s';
+ $lang->caselib->menu->create = array('link' => " Create Lib|testsuite|createLib", 'float' => 'right');
- /* Adjust sub menu of report module. */
- $lang->testreport->menu = new stdclass();
- $lang->testreport->menu->product = '%s';
- $lang->testreport->menu->browse = array('link' => 'Build|testtask|browse|productID=%s', 'alias' => 'viewedit,resolve,close,activate,report', 'subModule' => 'tree');
- $lang->testreport->menu->create = array('link' => 'Create Test|testtask|create|productID=%s');
- $lang->testreport->menu->report = array('link' => 'Report|testreport|browse');
-
- $lang->testreport->menuOrder[5] = 'product';
- $lang->testreport->menuOrder[10] = 'browse';
- $lang->testreport->menuOrder[15] = 'create';
- $lang->testreport->menuOrder[20] = 'report';
+ $lang->caselib->menuOrder[5] = 'lib';
+ $lang->caselib->menuOrder[10] = 'all';
+ $lang->caselib->menuOrder[15] = 'wait';
+ $lang->caselib->menuOrder[20] = 'view';
/* Adjust sub menu of product module. */
unset($lang->product->menu->story);
@@ -745,7 +779,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
$lang->menugroup->bug = 'bug';
$lang->menugroup->testcase = 'testcase';
$lang->menugroup->testtask = 'testtask';
- $lang->menugroup->testsuite = 'caselib';
+ $lang->menugroup->testsuite = 'testsuite';
$lang->menugroup->testreport = 'testtask';
$lang->menugroup->build = 'product';
@@ -754,6 +788,4 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
unset($lang->searchObjects['task']);
unset($lang->searchObjects['release']);
unset($lang->searchObjects['productplan']);
-
- $lang->zentaoPMS = 'zentao test';
}
diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php
index 5e7406a41b..e7c953d84c 100644
--- a/module/common/lang/zh-cn.php
+++ b/module/common/lang/zh-cn.php
@@ -725,7 +725,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
$lang->testtask->menu->blocked = '被阻塞版本|testtask|browse|productID=%s&branch=%s&type=%s,blocked';
$lang->testtask->menu->done = '已测版本|testtask|browse|productID=%s&branch=%s&type=%s,done';
$lang->testtask->menu->totalStatus = '全部|testtask|browse|productID=%s&branch=%s&type=%s,totalStatus';
- $lang->testtask->menu->report = array('link' => '报告|testreport|browse');
+ $lang->testtask->menu->report = array('link' => '报告|testreport|browse', 'alias' => 'view,create,edit');
$lang->testtask->menu->create = array('link' => " 提交测试|testtask|create|productID=%s", 'float' => 'right');
$lang->testtask->menuOrder[5] = 'product';
@@ -739,26 +739,8 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
$lang->testtask->menuOrder[45] = 'create';
/* Adjust sub menu of report module. */
- $lang->testreport->menu = new stdclass();
- $lang->testreport->menu->product = array('link' => '%s', 'fixed' => true);
- $lang->testreport->menu->scope = array('link' => '%s', 'fixed' => true);
- $lang->testreport->menu->wait = '待测版本|testtask|browse|productID=%s&branch=%s&type=%s,wait';
- $lang->testreport->menu->doing = '测试中版本|testtask|browse|productID=%s&branch=%s&type=%s,doing';
- $lang->testreport->menu->blocked = '被阻塞版本|testtask|browse|productID=%s&branch=%s&type=%s,blocked';
- $lang->testreport->menu->done = '已测版本|testtask|browse|productID=%s&branch=%s&type=%s,done';
- $lang->testreport->menu->totalStatus = '全部|testtask|browse|productID=%s&branch=%s&type=%s,totalStatus';
- $lang->testreport->menu->report = array('link' => '报告|testreport|browse');
- $lang->testreport->menu->testtask = array('link' => " 提交测试|testtask|create|productID=%s", 'float' => 'right');
-
- $lang->testreport->menuOrder[5] = 'product';
- $lang->testreport->menuOrder[10] = 'scope';
- $lang->testreport->menuOrder[15] = 'wait';
- $lang->testreport->menuOrder[20] = 'doing';
- $lang->testreport->menuOrder[25] = 'blocked';
- $lang->testreport->menuOrder[30] = 'done';
- $lang->testreport->menuOrder[35] = 'totalStatus';
- $lang->testreport->menuOrder[40] = 'report';
- $lang->testreport->menuOrder[45] = 'create';
+ $lang->testreport->menu = $lang->testtask->menu;
+ $lang->testreport->menuOrder = $lang->testtask->menuOrder;
/* Adjust sub menu of caselib module. */
$lang->caselib->menu = new stdclass();
diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php
index cf233a39bd..532a3faea2 100644
--- a/module/common/lang/zh-tw.php
+++ b/module/common/lang/zh-tw.php
@@ -284,7 +284,7 @@ $lang->caselib->menu->testcase = array('link' => '用例|testcase|browse|');
$lang->caselib->menu->testtask = array('link' => '版本|testtask|browse|');
$lang->caselib->menu->testsuite = array('link' => '套件|testsuite|browse|');
$lang->caselib->menu->report = array('link' => '報告|testreport|browse|');
-$lang->caselib->menu->caselib = array('link' => '用例庫|testsuite|library', 'alias' => 'createlib,createcase,libview,edit', 'subModule' => 'tree,testcase');
+$lang->caselib->menu->caselib = array('link' => '用例庫|testsuite|library', 'alias' => 'createlib,createcase,libview,edit,batchcreatecase,showimport', 'subModule' => 'tree,testcase');
$lang->caselib->menu->create = array('link' => "創建庫|testsuite|createLib|", 'float' => 'right');
$lang->caselib->menu->index = array('link' => "測試主頁|qa|index|locate=no&productID=%s", 'float' => 'right');
@@ -553,3 +553,239 @@ $lang->icons['unlock'] = 'unlock-alt';
$lang->icons['confirmStoryChange'] = 'search';
include (dirname(__FILE__) . '/menuOrder.php');
+
+global $config;
+if(isset($config->global->flow) and $config->global->flow == 'onlyStory')
+{
+ /* Remove project, report and qa module. */
+ unset($lang->menu->project);
+ unset($lang->menu->report);
+ unset($lang->menu->qa);
+
+ unset($lang->menuOrder[15]);
+ unset($lang->menuOrder[20]);
+ unset($lang->menuOrder[30]);
+
+ /* Adjust sub menu of my dashboard. */
+ unset($lang->my->menu->bug);
+ unset($lang->my->menu->testtask);
+ unset($lang->my->menu->task);
+ unset($lang->my->menu->myProject);
+
+ /* Adjust sub menu of product module. */
+ unset($lang->product->menu->project);
+ unset($lang->product->menu->doc);
+
+ /* Rename product module. */
+ $lang->menu->product = '產品|product|index';
+
+ /* Adjust search items. */
+ unset($lang->searchObjects['bug']);
+ unset($lang->searchObjects['task']);
+ unset($lang->searchObjects['testcase']);
+ unset($lang->searchObjects['project']);
+ unset($lang->searchObjects['build']);
+ unset($lang->searchObjects['testtask']);
+}
+
+if(isset($config->global->flow) and $config->global->flow == 'onlyTask')
+{
+ /* Remove product, report and qa module. */
+ unset($lang->menu->product);
+ unset($lang->menu->report);
+ unset($lang->menu->qa);
+
+ unset($lang->menuOrder[10]);
+ unset($lang->menuOrder[20]);
+ unset($lang->menuOrder[30]);
+
+ /* Adjust sub menu of my dashboard. */
+ unset($lang->my->menu->bug);
+ unset($lang->my->menu->testtask);
+ unset($lang->my->menu->story);
+
+ /* Adjust sub menu of project module. */
+ unset($lang->project->menu->story);
+ unset($lang->project->menu->build);
+ unset($lang->project->menu->bug);
+ unset($lang->project->menu->testtask);
+ unset($lang->project->menu->product);
+ unset($lang->project->menu->doc);
+
+ /* Remove sub menu of product module. */
+ unset($lang->product->menu);
+ unset($lang->product->menuOrder);
+
+ $lang->project->menu->task['subModule'] = 'task';
+ $lang->project->menu->task['alias'] = 'grouptask,importtask';
+
+ unset($lang->searchObjects['bug']);
+ unset($lang->searchObjects['story']);
+ unset($lang->searchObjects['product']);
+ unset($lang->searchObjects['testcase']);
+ unset($lang->searchObjects['build']);
+ unset($lang->searchObjects['release']);
+ unset($lang->searchObjects['productplan']);
+ unset($lang->searchObjects['testtask']);
+}
+
+if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
+{
+ /* Remove project and test module. */
+ unset($lang->menu->project);
+ unset($lang->menu->qa);
+ unset($lang->menu->report);
+
+ unset($lang->menuOrder[15]);
+ unset($lang->menuOrder[20]);
+ unset($lang->menuOrder[30]);
+
+ /* Rename product module. */
+ $lang->menu->product = '產品|product|index';
+
+ /* Adjust sub menu of my dashboard. */
+ unset($lang->my->menu->task);
+ unset($lang->my->menu->myProject);
+ unset($lang->my->menu->story);
+
+ /* Remove sub menu of project module. */
+ unset($lang->project->menu);
+ unset($lang->project->menuOrder);
+
+ /* Add bug, testcase and testtask module. */
+ $lang->menu->bug = 'Bug|bug|index';
+ $lang->menu->testcase = '用例|testcase|index';
+ $lang->menu->testsuite = '套件|testsuite|index';
+ $lang->menu->testtask = '測試|testtask|index';
+ $lang->menu->caselib = '用例庫|testsuite|library';
+
+ $lang->menuOrder[6] = 'bug';
+ $lang->menuOrder[7] = 'testcase';
+ $lang->menuOrder[8] = 'testsuite';
+ $lang->menuOrder[9] = 'testtask';
+ $lang->menuOrder[10] = 'caselib';
+ $lang->menuOrder[11] = 'product';
+
+ /* Adjust sub menu of bug module. */
+ $lang->bug->menu = new stdclass();
+ $lang->bug->menu->product = array('link' => '%s', 'fixed' => true);
+ $lang->bug->menu->unclosed = '未關閉|bug|browse|productID=%s&branch=%s&browseType=unclosed¶m=%s';
+ $lang->bug->menu->all = '所有|bug|browse|productID=%s&branch=%s&browseType=all¶m=%s';
+ $lang->bug->menu->assigntome = '指派給我|bug|browse|productID=%s&branch=%s&browseType=assigntome¶m=%s';
+ $lang->bug->menu->openedbyme = '由我創建|bug|browse|productID=%s&branch=%s&browseType=openedbyme¶m=%s';
+ $lang->bug->menu->resolvedbyme = '由我解決|bug|browse|productID=%s&branch=%s&browseType=resolvedbyme¶m=%s';
+ $lang->bug->menu->unconfirmed = '未確認|bug|browse|productID=%s&branch=%s&browseType=unconfirmed¶m=%s';
+ $lang->bug->menu->assigntonull = '未指派|bug|browse|productID=%s&branch=%s&browseType=assigntonull¶m=%s';
+ $lang->bug->menu->unresolved = '未解決|bug|browse|productID=%s&branch=%s&browseType=unresolved¶m=%s';
+ $lang->bug->menu->toclosed = '待關閉|bug|browse|productID=%s&branch=%s&browseType=toclosed¶m=%s';
+ $lang->bug->menu->longlifebugs = '久未處理|bug|browse|productID=%s&branch=%s&browseType=longlifebugs¶m=%s';
+ $lang->bug->menu->postponedbugs = '被延期|bug|browse|productID=%s&branch=%s&browseType=postponedbugs¶m=%s';
+ $lang->bug->menu->overduebugs = '過期Bug|bug|browse|productID=%s&branch=%s&browseType=overduebugs¶m=%s';
+
+ $lang->bug->menuOrder[5] = 'product';
+ $lang->bug->menuOrder[10] = 'unclosed';
+ $lang->bug->menuOrder[15] = 'all';
+ $lang->bug->menuOrder[20] = 'assigntome';
+ $lang->bug->menuOrder[25] = 'openedbyme';
+ $lang->bug->menuOrder[30] = 'resolvedbyme';
+ $lang->bug->menuOrder[35] = 'unresolved';
+ $lang->bug->menuOrder[40] = 'assigntonull';
+ $lang->bug->menuOrder[45] = 'unresolved';
+ $lang->bug->menuOrder[50] = 'toclosed';
+ $lang->bug->menuOrder[55] = 'longlifebugs';
+ $lang->bug->menuOrder[60] = 'postponedbugs';
+ $lang->bug->menuOrder[65] = 'overduebugs';
+
+ /* Adjust sub menu of testcase. */
+ $lang->testcase->menu = new stdclass();
+ $lang->testcase->menu->product = array('link' => '%s', 'fixed' => true);
+ $lang->testcase->menu->all = '所有|testcase|browse|productID=%s&branch=%s&browseType=all';
+ $lang->testcase->menu->wait = '待評審|testcase|browse|productID=%s&branch=%s&browseType=wait';
+ $lang->testcase->menu->suite = array('link' => '%s', 'fixed' => true);
+
+ $lang->testcase->menuOrder[5] = 'product';
+ $lang->testcase->menuOrder[10] = 'all';
+ $lang->testcase->menuOrder[15] = 'wait';
+ $lang->testcase->menuOrder[20] = 'suite';
+
+ /* Adjust sub menu of bug module. */
+ $lang->testsuite->menu = new stdclass();
+ $lang->testsuite->menu->product = array('link' => '%s', 'fixed' => true);
+ $lang->testsuite->menu->create = array('link' => " 建套件|testsuite|create|productID=%s", 'float' => 'right');
+
+ $lang->testsuite->menuOrder[5] = 'product';
+ $lang->testsuite->menuOrder[10] = 'create';
+
+ /* Adjust sub menu of testtask. */
+ $lang->testtask->menu = new stdclass();
+ $lang->testtask->menu->product = array('link' => '%s', 'fixed' => true);
+ $lang->testtask->menu->scope = array('link' => '%s', 'fixed' => true);
+ $lang->testtask->menu->wait = '待測版本|testtask|browse|productID=%s&branch=%s&type=%s,wait';
+ $lang->testtask->menu->doing = '測試中版本|testtask|browse|productID=%s&branch=%s&type=%s,doing';
+ $lang->testtask->menu->blocked = '被阻塞版本|testtask|browse|productID=%s&branch=%s&type=%s,blocked';
+ $lang->testtask->menu->done = '已測版本|testtask|browse|productID=%s&branch=%s&type=%s,done';
+ $lang->testtask->menu->totalStatus = '全部|testtask|browse|productID=%s&branch=%s&type=%s,totalStatus';
+ $lang->testtask->menu->report = array('link' => '報告|testreport|browse');
+ $lang->testtask->menu->create = array('link' => " 提交測試|testtask|create|productID=%s", 'float' => 'right');
+
+ $lang->testtask->menuOrder[5] = 'product';
+ $lang->testtask->menuOrder[10] = 'scope';
+ $lang->testtask->menuOrder[15] = 'wait';
+ $lang->testtask->menuOrder[20] = 'doing';
+ $lang->testtask->menuOrder[25] = 'blocked';
+ $lang->testtask->menuOrder[30] = 'done';
+ $lang->testtask->menuOrder[35] = 'totalStatus';
+ $lang->testtask->menuOrder[40] = 'report';
+ $lang->testtask->menuOrder[45] = 'create';
+
+ /* Adjust sub menu of report module. */
+ $lang->testreport->menu = $lang->testtask->menu;
+ $lang->testreport->menuOrder = $lang->testtask->menuOrder;
+
+ /* Adjust sub menu of caselib module. */
+ $lang->caselib->menu = new stdclass();
+ $lang->caselib->menu->lib = array('link' => '%s', 'fixed' => true);
+ $lang->caselib->menu->all = '所有|testsuite|library|libID=%s&browseType=all';
+ $lang->caselib->menu->wait = '待評審|testsuite|library|libID=%s&browseType=wait';
+ $lang->caselib->menu->view = '概況|testsuite|libview|libID=%s';
+ $lang->caselib->menu->create = array('link' => " 創建庫|testsuite|createLib", 'float' => 'right');
+
+ $lang->caselib->menuOrder[5] = 'lib';
+ $lang->caselib->menuOrder[10] = 'all';
+ $lang->caselib->menuOrder[15] = 'wait';
+ $lang->caselib->menuOrder[20] = 'view';
+
+ /* Adjust sub menu of product module. */
+ unset($lang->product->menu->story);
+ unset($lang->product->menu->project);
+ unset($lang->product->menu->release);
+ unset($lang->product->menu->dynamic);
+ unset($lang->product->menu->plan);
+ unset($lang->product->menu->roadmap);
+ unset($lang->product->menu->doc);
+ unset($lang->product->menu->module);
+ unset($lang->product->menu->index);
+
+ $lang->product->menu->build = array('link' => '版本|product|build', 'subModule' => 'build');
+
+ $lang->product->menuOrder[5] = 'build';
+ $lang->product->menuOrder[10] = 'view';
+ $lang->product->menuOrder[15] = 'order';
+
+ $lang->build->menu = $lang->product->menu;
+ $lang->build->menuOrder = $lang->product->menuOrder;
+
+ /* Adjust menu group. */
+ $lang->menugroup->bug = 'bug';
+ $lang->menugroup->testcase = 'testcase';
+ $lang->menugroup->testtask = 'testtask';
+ $lang->menugroup->testsuite = 'testsuite';
+ $lang->menugroup->testreport = 'testtask';
+ $lang->menugroup->build = 'product';
+
+ /* Adjust search objects. */
+ unset($lang->searchObjects['story']);
+ unset($lang->searchObjects['task']);
+ unset($lang->searchObjects['release']);
+ unset($lang->searchObjects['productplan']);
+}
diff --git a/module/custom/lang/zh-tw.php b/module/custom/lang/zh-tw.php
index e628e52474..dd4cefeb0f 100644
--- a/module/custom/lang/zh-tw.php
+++ b/module/custom/lang/zh-tw.php
@@ -6,6 +6,7 @@ $lang->custom->restore = '恢復預設';
$lang->custom->key = '鍵';
$lang->custom->value = '值';
$lang->custom->flow = '流程';
+$lang->custom->working = '工作方式';
$lang->custom->select = '請選擇流程:';
$lang->custom->branch = '多分支';
@@ -100,5 +101,10 @@ $lang->custom->productProject->relation['1_1'] = '項目 - 迭代';
$lang->custom->productProject->notice = '請根據實際情況選擇適合自己團隊的概念。';
+$lang->custom->workingList['full'] = '完整研發管理工具';
+$lang->custom->workingList['onlyTest'] = '測試管理工具';
+$lang->custom->workingList['onlyStory'] = '需求管理工具';
+$lang->custom->workingList['onlyTask'] = '任務管理工具';
+
$lang->custom->menuTip = '點擊顯示或隱藏導航條目,拖拽來更改顯示順序。';
$lang->custom->saveFail = '保存失敗!';
diff --git a/module/doc/lang/en.php b/module/doc/lang/en.php
index 1fd02a9a4e..3fa42b5348 100644
--- a/module/doc/lang/en.php
+++ b/module/doc/lang/en.php
@@ -52,6 +52,7 @@ $lang->doc->delete = 'Delete';
$lang->doc->browse = 'List';
$lang->doc->view = 'Details';
$lang->doc->diff = 'Diff';
+$lang->doc->sort = 'Sort';
$lang->doc->manageType = 'Manage Category';
$lang->doc->editType = 'Edit';
$lang->doc->deleteType = 'Delete';
diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php
index c14c19a519..9a3237b815 100644
--- a/module/doc/lang/zh-cn.php
+++ b/module/doc/lang/zh-cn.php
@@ -52,6 +52,7 @@ $lang->doc->delete = '删除文档';
$lang->doc->browse = '文档列表';
$lang->doc->view = '文档详情';
$lang->doc->diff = '对比';
+$lang->doc->sort = '排序';
$lang->doc->manageType = '维护分类';
$lang->doc->editType = '编辑分类';
$lang->doc->deleteType = '删除分类';
diff --git a/module/doc/lang/zh-tw.php b/module/doc/lang/zh-tw.php
index 7080132c68..3199f1e590 100644
--- a/module/doc/lang/zh-tw.php
+++ b/module/doc/lang/zh-tw.php
@@ -35,6 +35,7 @@ $lang->doc->fileObject = '所屬對象';
$lang->doc->whiteList = '白名單';
$lang->doc->contentType = '文檔格式';
$lang->doc->separator = "";
+$lang->doc->fileTitle = '附件名';
$lang->doc->moduleDoc = '按模組瀏覽';
$lang->doc->searchDoc = '搜索';
@@ -51,6 +52,7 @@ $lang->doc->delete = '刪除文檔';
$lang->doc->browse = '文檔列表';
$lang->doc->view = '文檔詳情';
$lang->doc->diff = '對比';
+$lang->doc->sort = '排序';
$lang->doc->manageType = '維護分類';
$lang->doc->editType = '編輯分類';
$lang->doc->deleteType = '刪除分類';
@@ -68,6 +70,7 @@ $lang->doc->editLib = '編輯文檔庫';
$lang->doc->deleteLib = '刪除文檔庫';
$lang->doc->fixedMenu = '固定到菜單欄';
$lang->doc->removeMenu = '從菜單欄移除';
+$lang->doc->search = '搜索';
/* 查詢條件列表 */
$lang->doc->allProduct = '所有' . $lang->productCommon;
@@ -80,6 +83,12 @@ $lang->doc->libTypeList['custom'] = '自定義文檔庫';
$lang->doc->systemLibs['product'] = $lang->productCommon;
$lang->doc->systemLibs['project'] = $lang->projectCommon;
+global $config;
+if($config->global->flow == 'onlyStory' or $config->global->flow == 'onlyTest') unset($lang->doc->systemLibs['project']);
+if($config->global->flow == 'onlyStory' or $config->global->flow == 'onlyTest') unset($lang->doc->libTypeList['project']);
+if($config->global->flow == 'onlyTask') unset($lang->doc->systemLibs['product']);
+if($config->global->flow == 'onlyTask') unset($lang->doc->libTypeList['product']);
+
$lang->doc->aclList['open'] = '公開';
$lang->doc->aclList['custom'] = '自定義';
$lang->doc->aclList['private'] = '私有';
diff --git a/module/file/lang/zh-tw.php b/module/file/lang/zh-tw.php
index ee216ffc05..bd1291e983 100644
--- a/module/file/lang/zh-tw.php
+++ b/module/file/lang/zh-tw.php
@@ -26,17 +26,19 @@ $lang->file->exportFields = "要導出欄位";
$lang->file->defaultTPL = "預設模板";
$lang->file->setExportTPL = "設置";
$lang->file->preview = "預覽";
+$lang->file->addFile = '添加檔案';
+$lang->file->beginUpload = '開始上傳';
+$lang->file->uploadSuccess = '上傳成功';
+$lang->file->dragFile = '請拖拽檔案到此處';
$lang->file->errorNotExists = "檔案夾 '%s' 不存在";
$lang->file->errorCanNotWrite = "檔案夾 '%s' 不可寫,請改變檔案夾的權限。在linux中輸入指令:sudo chmod -R 777 '%s'";
$lang->file->confirmDelete = " 您確定刪除該附件嗎?";
$lang->file->errorFileSize = " 檔案大小已經超過限制,可能不能成功上傳!";
$lang->file->errorFileUpload = " 檔案上傳失敗,檔案大小可能超出限制";
+$lang->file->errorFileFormate = " 檔案上傳失敗,檔案格式不在規定範圍內";
+$lang->file->errorFileMove = " 檔案上傳失敗,移動檔案時出錯";
$lang->file->dangerFile = " 您選擇的檔案存在安全風險,系統將不予上傳。";
$lang->file->errorSuffix = '壓縮包格式錯誤,只能上傳zip壓縮包!';
$lang->file->errorExtract = '解壓縮失敗!可能檔案已經損壞,或壓縮包裡含有非法上傳檔案。';
-$lang->file->uploadImagesExplain = <<1、上傳檔案為包含圖片的zip壓縮包,程序會以檔案名作為標題,以圖片作為內容。
-2、如果檔案名開頭含有 數字+下劃線,以方便排序,程序會將他們忽略。
-3、圖片格式:jpg|jpeg|gif|png。
-EOD;
+$lang->file->uploadImagesExplain = '註:請上傳"jpg|jpeg|gif|png"格式的圖片,程序會以檔案名作為標題,以圖片作為內容。';
diff --git a/module/group/lang/en.php b/module/group/lang/en.php
index da98e883b2..bfcf367d41 100644
--- a/module/group/lang/en.php
+++ b/module/group/lang/en.php
@@ -46,6 +46,7 @@ $lang->group->copyOptions['copyPriv'] = 'Copy Privilege';
$lang->group->copyOptions['copyUser'] = 'Copy User';
$lang->group->versions[''] = 'History';
+$lang->group->versions['9_2'] = 'ZenTao9.2';
$lang->group->versions['9_1'] = 'ZenTao9.1';
$lang->group->versions['9_0'] = 'ZenTao9.0';
$lang->group->versions['8_4'] = 'ZenTao8.4';
diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php
index 6fc2e0f3dc..64b47d0fe3 100644
--- a/module/group/lang/resource.php
+++ b/module/group/lang/resource.php
@@ -139,6 +139,7 @@ $lang->resource->product->project = 'project';
$lang->resource->product->close = 'close';
$lang->resource->product->updateOrder = 'updateOrder';
$lang->resource->product->all = 'all';
+$lang->resource->product->build = 'build';
$lang->product->methodOrder[0] = 'index';
$lang->product->methodOrder[5] = 'browse';
@@ -154,6 +155,7 @@ $lang->product->methodOrder[55] = 'project';
$lang->product->methodOrder[60] = 'close';
$lang->product->methodOrder[65] = 'updateOrder';
$lang->product->methodOrder[70] = 'all';
+$lang->product->methodOrder[75] = 'build';
/* Branch. */
$lang->resource->branch = new stdclass();
@@ -614,6 +616,10 @@ $lang->resource->testsuite->delete = 'delete';
$lang->resource->testsuite->linkCase = 'linkCase';
$lang->resource->testsuite->unlinkCase = 'unlinkCase';
$lang->resource->testsuite->batchUnlinkCases = 'batchUnlinkCases';
+$lang->resource->testsuite->batchCreateCase = 'batchCreateCase';
+$lang->resource->testsuite->exportTemplet = 'exportTemplet';
+$lang->resource->testsuite->import = 'import';
+$lang->resource->testsuite->showImport = 'showImport';
$lang->testsuite->methodOrder[0] = 'index';
$lang->testsuite->methodOrder[5] = 'browse';
@@ -624,6 +630,10 @@ $lang->testsuite->methodOrder[25] = 'delete';
$lang->testsuite->methodOrder[30] = 'linkCase';
$lang->testsuite->methodOrder[35] = 'unlinkCase';
$lang->testsuite->methodOrder[40] = 'batchUnlinkCases';
+$lang->testsuite->methodOrder[45] = 'batchCreateCase';
+$lang->testsuite->methodOrder[50] = 'exportTemplet';
+$lang->testsuite->methodOrder[55] = 'import';
+$lang->testsuite->methodOrder[60] = 'showImport';
$lang->resource->caselib = new stdclass();
$lang->resource->caselib->library = 'library';
@@ -652,6 +662,7 @@ $lang->resource->doc->delete = 'delete';
$lang->resource->doc->allLibs = 'allLibs';
$lang->resource->doc->objectLibs = 'objectLibs';
$lang->resource->doc->showFiles = 'showFiles';
+$lang->resource->doc->sort = 'sort';
//$lang->resource->doc->diff = 'diff';
$lang->doc->methodOrder[0] = 'index';
@@ -666,6 +677,7 @@ $lang->doc->methodOrder[40] = 'delete';
$lang->doc->methodOrder[45] = 'allLibs';
$lang->doc->methodOrder[50] = 'showFiles';
$lang->doc->methodOrder[55] = 'objectLibs';
+$lang->doc->methodOrder[60] = 'sort';
//$lang->doc->methodOrder[55] = 'diff';
/* mail. */
@@ -702,10 +714,13 @@ $lang->resource->custom->index = 'index';
$lang->resource->custom->set = 'set';
$lang->resource->custom->restore = 'restore';
$lang->resource->custom->flow = 'flow';
+$lang->resource->custom->working = 'working';
$lang->custom->methodOrder[5] = 'index';
$lang->custom->methodOrder[10] = 'set';
$lang->custom->methodOrder[15] = 'restore';
+$lang->custom->methodOrder[20] = 'flow';
+$lang->custom->methodOrder[25] = 'working';
/* Subversion. */
$lang->resource->svn = new stdclass();
@@ -1299,6 +1314,14 @@ $lang->changelog['9.1'][] = 'testtask-activate';
$lang->changelog['9.1'][] = 'testtask-block';
$lang->changelog['9.1'][] = 'testtask-report';
+$lang->changelog['9.2'][] = 'custom-working';
+$lang->changelog['9.2'][] = 'doc-sort';
+$lang->changelog['9.2'][] = 'product-build';
+$lang->changelog['9.2'][] = 'testsuite-batchCreateCase';
+$lang->changelog['9.2'][] = 'testsuite-exportTemplet';
+$lang->changelog['9.2'][] = 'testsuite-import';
+$lang->changelog['9.2'][] = 'testsuite-showImport';
+
global $config;
if($config->global->flow != 'full')
{
diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php
index c9c55b4338..3227b05b37 100644
--- a/module/group/lang/zh-cn.php
+++ b/module/group/lang/zh-cn.php
@@ -46,6 +46,7 @@ $lang->group->copyOptions['copyPriv'] = '复制权限';
$lang->group->copyOptions['copyUser'] = '复制用户';
$lang->group->versions[''] = '修改历史';
+$lang->group->versions['9_2'] = '禅道9.2';
$lang->group->versions['9_1'] = '禅道9.1';
$lang->group->versions['9_0'] = '禅道9.0';
$lang->group->versions['8_4'] = '禅道8.4';
diff --git a/module/group/lang/zh-tw.php b/module/group/lang/zh-tw.php
index 4440bb33f0..00acbbb77b 100644
--- a/module/group/lang/zh-tw.php
+++ b/module/group/lang/zh-tw.php
@@ -46,6 +46,7 @@ $lang->group->copyOptions['copyPriv'] = '複製權限';
$lang->group->copyOptions['copyUser'] = '複製用戶';
$lang->group->versions[''] = '修改歷史';
+$lang->group->versions['9_2'] = '禪道9.2';
$lang->group->versions['9_1'] = '禪道9.1';
$lang->group->versions['9_0'] = '禪道9.0';
$lang->group->versions['8_4'] = '禪道8.4';
diff --git a/module/group/view/privbygroup.html.php b/module/group/view/privbygroup.html.php
index f26b7d7c9f..b70ee3578d 100644
--- a/module/group/view/privbygroup.html.php
+++ b/module/group/view/privbygroup.html.php
@@ -20,6 +20,7 @@
menu as $module => $title):?>
+
>
diff --git a/module/install/lang/zh-tw.php b/module/install/lang/zh-tw.php
index 993d3cbb61..7f059367b6 100644
--- a/module/install/lang/zh-tw.php
+++ b/module/install/lang/zh-tw.php
@@ -81,10 +81,16 @@ $lang->install->dbName = 'PMS使用的庫';
$lang->install->dbPrefix = '建表使用的首碼';
$lang->install->clearDB = '清空現有數據';
$lang->install->importDemoData = '導入demo數據';
+$lang->install->working = '工作方式';
$lang->install->requestTypes['GET'] = '普通方式';
$lang->install->requestTypes['PATH_INFO'] = '靜態友好方式';
+$lang->install->workingList['full'] = '完整研發管理工具';
+$lang->install->workingList['onlyTest'] = '測試管理工具';
+$lang->install->workingList['onlyStory'] = '需求管理工具';
+$lang->install->workingList['onlyTask'] = '任務管理工具';
+
$lang->install->errorConnectDB = '資料庫連接失敗 ';
$lang->install->errorDBName = '資料庫名不能含有 “.” ';
$lang->install->errorCreateDB = '資料庫創建失敗';
@@ -127,6 +133,14 @@ $lang->install->groupList['TOP']['desc'] = '高層管理';
$lang->install->groupList['OTHERS']['name'] = '其他';
$lang->install->groupList['OTHERS']['desc'] = '其他';
+$lang->install->cronList[''] = '監控定時任務';
+$lang->install->cronList['moduleName=project&methodName=computeburn'] = '更新燃盡圖';
+$lang->install->cronList['moduleName=report&methodName=remind'] = '每日任務提醒';
+$lang->install->cronList['moduleName=svn&methodName=run'] = '同步SVN';
+$lang->install->cronList['moduleName=git&methodName=run'] = '同步GIT';
+$lang->install->cronList['moduleName=backup&methodName=backup'] = '備份數據和附件';
+$lang->install->cronList['moduleName=mail&methodName=asyncSend'] = '非同步發信';
+
$lang->install->success = "安裝成功";
$lang->install->login = '登錄禪道管理系統';
$lang->install->register = '禪道社區註冊';
diff --git a/module/mail/lang/zh-tw.php b/module/mail/lang/zh-tw.php
index 79dd1dfee2..c5fef0ffeb 100644
--- a/module/mail/lang/zh-tw.php
+++ b/module/mail/lang/zh-tw.php
@@ -20,7 +20,7 @@ $lang->mail->turnon = '是否打開';
$lang->mail->async = '非同步發送';
$lang->mail->fromAddress = '發信郵箱';
$lang->mail->fromName = '發信人';
-$lang->mail->domain = '發信域名';
+$lang->mail->domain = '禪道域名';
$lang->mail->host = 'smtp伺服器';
$lang->mail->port = 'smtp連接埠號';
$lang->mail->auth = '是否需要驗證';
diff --git a/module/misc/lang/zh-tw.php b/module/misc/lang/zh-tw.php
index 513180e072..0fcd6e3aa0 100644
--- a/module/misc/lang/zh-tw.php
+++ b/module/misc/lang/zh-tw.php
@@ -57,6 +57,7 @@ $lang->misc->copyright = "© 2009 - 2016 misc->checkTable = "檢查修復數據表";
$lang->misc->needRepair = "修復表";
$lang->misc->repairTable = "資料庫表可以因為斷電原因損壞,需要檢查修復!!";
+$lang->misc->repairFail = "修復失敗,請到該資料庫的數據目錄下,嘗試執行myisamchk -r -f %s.MYI進行修復。";
$lang->misc->tableName = "表名";
$lang->misc->tableStatus = "狀態";
$lang->misc->novice = "您可能初次使用禪道,是否進入新手模式?";
diff --git a/module/product/control.php b/module/product/control.php
index 8dadcf691e..e863c7a2d9 100644
--- a/module/product/control.php
+++ b/module/product/control.php
@@ -49,10 +49,12 @@ class product extends control
*/
public function index($locate = 'auto', $productID = 0, $status = 'noclosed', $orderBy = 'order_desc', $recTotal = 0, $recPerPage = 10, $pageID = 1)
{
+ if($this->config->global->flow == 'onlyTest') $this->locate($this->createLink($this->moduleName, 'build'));
+
if($this->app->user->account == 'guest' or commonModel::isTutorialMode()) $this->config->product->homepage = 'index';
if(!isset($this->config->product->homepage))
{
- if($this->products) die($this->fetch('custom', 'ajaxSetHomepage', "module=product"));
+ if($this->products and $this->app->getViewType() != 'mhtml') die($this->fetch('custom', 'ajaxSetHomepage', "module=product"));
$this->config->product->homepage = 'index';
$this->fetch('custom', 'ajaxSetHomepage', "module=product&page=index");
@@ -61,7 +63,6 @@ class product extends control
$homepage = $this->config->product->homepage;
if($homepage == 'browse' and $locate == 'auto') $locate = 'yes';
- if($this->config->global->flow == 'onlyTest') $this->locate($this->createLink($this->moduleName, 'build'));
if($locate == 'yes') $this->locate($this->createLink($this->moduleName, 'browse'));
if($this->app->getViewType() != 'mhtml') unset($this->lang->product->menu->index);
diff --git a/module/product/lang/zh-tw.php b/module/product/lang/zh-tw.php
index 6cde565a91..78b095f8f8 100644
--- a/module/product/lang/zh-tw.php
+++ b/module/product/lang/zh-tw.php
@@ -40,6 +40,7 @@ $lang->product->builds = 'BUILD數';
$lang->product->roadmap = '路線圖';
$lang->product->doc = '文檔列表';
$lang->product->project = $lang->projectCommon . '列表';
+$lang->product->build = '版本列表';
$lang->product->confirmDelete = " 您確定刪除該{$lang->productCommon}嗎?";
@@ -80,6 +81,10 @@ $lang->product->typeList['normal'] = '正常';
$lang->product->typeList['branch'] = '多分支';
$lang->product->typeList['platform'] = '多平台';
+$lang->product->typeTips = array();
+$lang->product->typeTips['branch'] = '(適用於客戶定製場景)';
+$lang->product->typeTips['platform'] = '(適用於跨平台應用開發,比如ios、安卓、pc端等)';
+
$lang->product->branchName['normal'] = '';
$lang->product->branchName['branch'] = '分支';
$lang->product->branchName['platform'] = '平台';
diff --git a/module/product/model.php b/module/product/model.php
index ff4d5cae92..e66c4a3f7d 100644
--- a/module/product/model.php
+++ b/module/product/model.php
@@ -97,8 +97,8 @@ class productModel extends model
if($this->config->global->flow == 'onlyTest' and $moduleType)
{
- $modules = $this->loadModel('tree')->getModulePairs($productID, $moduleType);
- $moduleName = ($module && isset($modules[$module])) ? $modules[$module] : $this->lang->tree->all;
+ if($module) $module = $this->loadModel('tree')->getById($module);
+ $moduleName = $module ? $module->name : $this->lang->tree->all;
if(!$isMobile)
{
$output .= '';
diff --git a/module/project/control.php b/module/project/control.php
index 5f968ac98e..68240ec040 100644
--- a/module/project/control.php
+++ b/module/project/control.php
@@ -42,7 +42,7 @@ class project extends control
if($this->app->user->account == 'guest' or commonModel::isTutorialMode()) $this->config->project->homepage = 'index';
if(!isset($this->config->project->homepage))
{
- if($this->projects) die($this->fetch('custom', 'ajaxSetHomepage', "module=project"));
+ if($this->projects and $this->app->viewType != 'mhtml') die($this->fetch('custom', 'ajaxSetHomepage', "module=project"));
$this->config->project->homepage = 'index';
$this->fetch('custom', 'ajaxSetHomepage', "module=project&page=index");
diff --git a/module/project/lang/zh-tw.php b/module/project/lang/zh-tw.php
index 7d5ccbaf9c..27b2d64a69 100644
--- a/module/project/lang/zh-tw.php
+++ b/module/project/lang/zh-tw.php
@@ -207,6 +207,7 @@ $lang->project->goback = "返回任務列表";
$lang->project->noweekend = '去除周末';
$lang->project->withweekend = '顯示周末';
$lang->project->interval = '間隔';
+$lang->project->fixFirstWithLeft = '修改剩餘工時';
/* 統計。*/
$lang->project->charts = new stdclass();
@@ -261,3 +262,10 @@ $lang->project->treeLevel['root'] = '全部摺疊';
$lang->project->treeLevel['story'] = '顯示需求';
$lang->project->treeLevel['task'] = '顯示任務';
$lang->project->treeLevel['all'] = '全部展開';
+
+global $config;
+if($config->global->flow == 'onlyTask')
+{
+ unset($lang->project->groups['story']);
+ unset($lang->project->featureBar['task']['needconfirm']);
+}
diff --git a/module/qa/control.php b/module/qa/control.php
index 1b72f5471a..0e4a1d259f 100644
--- a/module/qa/control.php
+++ b/module/qa/control.php
@@ -23,7 +23,7 @@ class qa extends control
if($this->app->user->account == 'guest' or commonModel::isTutorialMode()) $this->config->qa->homepage = 'index';
if(!isset($this->config->qa->homepage))
{
- if($this->products) die($this->fetch('custom', 'ajaxSetHomepage', "module=qa"));
+ if($this->products and $this->app->viewType != 'mhtml') die($this->fetch('custom', 'ajaxSetHomepage', "module=qa"));
$this->config->qa->homepage = 'index';
$this->fetch('custom', 'ajaxSetHomepage', "module=qa&page=index");
diff --git a/module/story/lang/zh-tw.php b/module/story/lang/zh-tw.php
index 0c507c8350..e2bb29bed1 100644
--- a/module/story/lang/zh-tw.php
+++ b/module/story/lang/zh-tw.php
@@ -38,6 +38,7 @@ $lang->story->export = "導出數據";
$lang->story->zeroCase = "零用例需求";
$lang->story->zeroTask = "只列零任務需求";
$lang->story->reportChart = "統計報表";
+$lang->story->copyTitle = "同需求名稱";
$lang->story->batchChangePlan = "批量修改計劃";
$lang->story->batchChangeBranch = "批量修改分支";
$lang->story->batchChangeStage = "批量修改階段";
diff --git a/module/task/lang/zh-tw.php b/module/task/lang/zh-tw.php
index 79a5a83746..e77fd97a30 100644
--- a/module/task/lang/zh-tw.php
+++ b/module/task/lang/zh-tw.php
@@ -14,6 +14,8 @@ $lang->task->create = "建任務";
$lang->task->batchCreate = "批量添加";
$lang->task->batchEdit = "批量編輯";
$lang->task->batchChangeModule = "批量修改模組";
+$lang->task->batchClose = "批量關閉";
+$lang->task->batchCancel = "批量取消";
$lang->task->edit = "編輯";
$lang->task->delete = "刪除";
$lang->task->deleted = "已刪除";
@@ -26,7 +28,6 @@ $lang->task->restart = "繼續";
$lang->task->finish = "完成";
$lang->task->pause = "暫停";
$lang->task->close = "關閉";
-$lang->task->batchClose = "批量關閉";
$lang->task->cancel = "取消";
$lang->task->activate = "激活";
$lang->task->export = "導出數據";
diff --git a/module/task/view/edit.html.php b/module/task/view/edit.html.php
index 6d6c712910..35c546ba5e 100644
--- a/module/task/view/edit.html.php
+++ b/module/task/view/edit.html.php
@@ -70,11 +70,13 @@
| task->module;?> |
module, 'class="form-control chosen" onchange="loadModuleRelated()"');?> |
-
+
+ global->flow != 'onlyTask')?>
| task->story;?> |
story, "class='form-control chosen'");?> |
-
+
+
| task->assignedTo;?> |
assignedTo, "class='form-control chosen'");?> |
diff --git a/module/testsuite/lang/en.php b/module/testsuite/lang/en.php
index f0099c531c..5062966f59 100644
--- a/module/testsuite/lang/en.php
+++ b/module/testsuite/lang/en.php
@@ -21,7 +21,9 @@ $lang->testsuite->unlinkCase = "Unlink";
$lang->testsuite->batchUnlinkCases = "Batch unlink cases";
$lang->testsuite->deleted = 'deleted';
$lang->testsuite->exportTemplet = 'Export template';
-$lang->testsuite->importFile = 'Import';
+$lang->testsuite->batchCreateCase = 'Batch create case';
+$lang->testsuite->import = 'Import';
+$lang->testsuite->showImport = 'Show import data';
$lang->testsuite->common = 'Test Suite';
$lang->testsuite->product = $lang->productCommon;
diff --git a/module/testsuite/lang/zh-cn.php b/module/testsuite/lang/zh-cn.php
index e3b1aa0daf..5788cd0764 100644
--- a/module/testsuite/lang/zh-cn.php
+++ b/module/testsuite/lang/zh-cn.php
@@ -21,7 +21,9 @@ $lang->testsuite->unlinkCase = "移除";
$lang->testsuite->batchUnlinkCases = "批量移除用例";
$lang->testsuite->deleted = '已删除';
$lang->testsuite->exportTemplet = '导出模板';
-$lang->testsuite->importFile = '导入';
+$lang->testsuite->batchCreateCase = '批量创建用例';
+$lang->testsuite->import = '导入';
+$lang->testsuite->showImport = '显示导入数据';
$lang->testsuite->common = '套件';
$lang->testsuite->product = '所属' . $lang->productCommon;
diff --git a/module/testsuite/lang/zh-tw.php b/module/testsuite/lang/zh-tw.php
index c93cc88832..e8a05ee4e8 100644
--- a/module/testsuite/lang/zh-tw.php
+++ b/module/testsuite/lang/zh-tw.php
@@ -20,6 +20,10 @@ $lang->testsuite->linkVersion = "版本";
$lang->testsuite->unlinkCase = "移除";
$lang->testsuite->batchUnlinkCases = "批量移除用例";
$lang->testsuite->deleted = '已刪除';
+$lang->testsuite->exportTemplet = '導出模板';
+$lang->testsuite->batchCreateCase = '批量創建用例';
+$lang->testsuite->import = '導入';
+$lang->testsuite->showImport = '顯示導入數據';
$lang->testsuite->common = '套件';
$lang->testsuite->product = '所屬' . $lang->productCommon;
diff --git a/module/testtask/lang/zh-tw.php b/module/testtask/lang/zh-tw.php
index 48a694a2f9..4056f4b45d 100644
--- a/module/testtask/lang/zh-tw.php
+++ b/module/testtask/lang/zh-tw.php
@@ -39,7 +39,7 @@ $lang->testtask->testing = "測試中版本";
$lang->testtask->blocked = "被阻塞版本";
$lang->testtask->done = "已測版本";
$lang->testtask->totalStatus = "全部";
-$lang->testtask->all = "全部產品";
+$lang->testtask->all = "全部" . $lang->productCommon;
$lang->testtask->id = '編號';
$lang->testtask->common = '測試版本';
diff --git a/module/todo/lang/zh-tw.php b/module/todo/lang/zh-tw.php
index d441176597..7faf3b0e6b 100644
--- a/module/todo/lang/zh-tw.php
+++ b/module/todo/lang/zh-tw.php
@@ -57,6 +57,10 @@ $lang->todo->typeList['custom'] = '自定義';
$lang->todo->typeList['bug'] = 'Bug';
$lang->todo->typeList['task'] = $lang->projectCommon . '任務';
+global $config;
+if($config->global->flow == 'onlyTest' or $config->global->flow == 'onlyStory') unset($lang->todo->typeList['task']);
+if($config->global->flow == 'onlyTask' or $config->global->flow == 'onlyStory') unset($lang->todo->typeList['bug']);
+
$lang->todo->confirmDelete = "您確定要刪除這條待辦嗎?";
$lang->todo->thisIsPrivate = '這是一條私人事務。:)';
$lang->todo->lblDisableDate = '暫時不設定時間';
diff --git a/module/tree/view/ajaxgetdropmenu.html.php b/module/tree/view/ajaxgetdropmenu.html.php
index cf0445560a..1f0c1b7c4a 100644
--- a/module/tree/view/ajaxgetdropmenu.html.php
+++ b/module/tree/view/ajaxgetdropmenu.html.php
@@ -9,7 +9,7 @@
$module)
{
- echo "" . html::a(sprintf($link, $productID, $moduleID), " " . $module, '', "class='text-important'"). "";
+ echo "" . html::a(sprintf($link, $productID, $moduleID), $module, '', "class='text-important'") . "";
}
?>
diff --git a/module/upgrade/lang/en.php b/module/upgrade/lang/en.php
index dff3e0f0cc..1e4eb8eaad 100644
--- a/module/upgrade/lang/en.php
+++ b/module/upgrade/lang/en.php
@@ -119,3 +119,4 @@ $lang->upgrade->fromVersions['9_0'] = '9.0';
$lang->upgrade->fromVersions['9_0_1'] = '9.0.1';
$lang->upgrade->fromVersions['9_1'] = '9.1';
$lang->upgrade->fromVersions['9_1_1'] = '9.1.1';
+$lang->upgrade->fromVersions['9_1_2'] = '9.1.2';
diff --git a/module/upgrade/lang/zh-cn.php b/module/upgrade/lang/zh-cn.php
index f9303dccdc..f7671d64ca 100644
--- a/module/upgrade/lang/zh-cn.php
+++ b/module/upgrade/lang/zh-cn.php
@@ -119,3 +119,4 @@ $lang->upgrade->fromVersions['9_0'] = '9.0';
$lang->upgrade->fromVersions['9_0_1'] = '9.0.1';
$lang->upgrade->fromVersions['9_1'] = '9.1';
$lang->upgrade->fromVersions['9_1_1'] = '9.1.1';
+$lang->upgrade->fromVersions['9_1_2'] = '9.1.2';
diff --git a/module/upgrade/lang/zh-tw.php b/module/upgrade/lang/zh-tw.php
index 8728dc2868..00d97e9c4c 100644
--- a/module/upgrade/lang/zh-tw.php
+++ b/module/upgrade/lang/zh-tw.php
@@ -119,3 +119,4 @@ $lang->upgrade->fromVersions['9_0'] = '9.0';
$lang->upgrade->fromVersions['9_0_1'] = '9.0.1';
$lang->upgrade->fromVersions['9_1'] = '9.1';
$lang->upgrade->fromVersions['9_1_1'] = '9.1.1';
+$lang->upgrade->fromVersions['9_1_2'] = '9.1.2';
diff --git a/module/upgrade/model.php b/module/upgrade/model.php
index f7659c6806..8788bdc2e8 100644
--- a/module/upgrade/model.php
+++ b/module/upgrade/model.php
@@ -177,6 +177,7 @@ class upgradeModel extends model
case '9_1_2':
$this->execSQL($this->getUpgradeFile('9.1.2'));
$this->processCustomMenus();
+ $this->adjustPriv9_2();
}
$this->deletePatch();
@@ -1646,6 +1647,50 @@ class upgradeModel extends model
return true;
}
+ /**
+ * Adjust priv for 9.2.
+ *
+ * @access public
+ * @return void
+ */
+ public function adjustPriv9_2()
+ {
+ $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('testsuite')->andWhere('method')->eq('createCase')->fetchPairs('group', 'group');
+ foreach($groups as $groupID)
+ {
+ $data = new stdclass();
+ $data->group = $groupID;
+ $data->module = 'testsuite';
+ $newMethods = array('batchCreateCase', 'exportTemplet', 'import', 'showImport');
+ foreach($newMethods as $method)
+ {
+ $data->method = $method;
+ $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ }
+ }
+
+ $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('product')->andWhere('method')->eq('index')->fetchPairs('group', 'group');
+ foreach($groups as $groupID)
+ {
+ $data = new stdclass();
+ $data->group = $groupID;
+ $data->module = 'product';
+ $data->method = 'build';
+ $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ }
+
+ $groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('custom')->andWhere('method')->eq('flow')->fetchPairs('group', 'group');
+ foreach($groups as $groupID)
+ {
+ $data = new stdclass();
+ $data->group = $groupID;
+ $data->module = 'custom';
+ $data->method = 'working';
+ $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ }
+ return true;
+ }
+
/**
* Judge any error occers.
*
@@ -1704,6 +1749,7 @@ class upgradeModel extends model
*/
public function processCustomMenus()
{
+ $this->loadModel('setting')->setItem('system.common.global.flow', 'full');
$customMenus = $this->dao->select('*')->from(TABLE_CONFIG)->where('section')->eq('customMenu')->fetchAll();
foreach($customMenus as $customMenu)
diff --git a/tools/check.php b/tools/check.php
index bd94d54b50..3d95abaff7 100755
--- a/tools/check.php
+++ b/tools/check.php
@@ -4,6 +4,9 @@
*/
/* Define an emtpty control class as the base class of every module. */
class control {}
+$config = new stdclass();
+$config->global = new stdclass();
+$config->global->flow = 'full';
/* set module root path and included the resource of group module. */
$moduleRoot = '../module/';
@@ -174,9 +177,12 @@ foreach(glob($moduleRoot . '*') as $modulePath)
}
else
{
- list($mainKey, $mainValue) = explode('=', $line);
- list($key, $value) = explode('=', $lines[$lineNO]);
- if(trim($mainKey) != trim($key))
+ if(strpos($line, '=') !== false)
+ {
+ list($mainKey, $mainValue) = explode('=', $line);
+ list($key, $value) = explode('=', $lines[$lineNO]);
+ }
+ if((strpos($line, '=') === false and $line != $lines[$lineNO]) or trim($mainKey) != trim($key))
{
$key = trim($key);
$lineNO = $lineNO + 1;