diff --git a/VERSION b/VERSION index 37ad5c8b19..9c0d7414b3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -9.0.1 +9.1.stable diff --git a/config/config.php b/config/config.php index f9404b042d..58b8e4b0c3 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.0.1'; // The version of zentaopms. Don't change it. +$config->version = '9.1'; // 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/update9.0.1.sql b/db/update9.0.1.sql index 4d2dee8861..1fb3cf6e12 100644 --- a/db/update9.0.1.sql +++ b/db/update9.0.1.sql @@ -1,4 +1,4 @@ -CREATE TABLE `zt_testsuite` ( +CREATE TABLE IF NOT EXISTS `zt_testsuite` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL, `name` varchar(255) NOT NULL, @@ -11,7 +11,7 @@ CREATE TABLE `zt_testsuite` ( `deleted` enum('0','1') NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -CREATE TABLE `zt_suitecase` ( +CREATE TABLE IF NOT EXISTS `zt_suitecase` ( `suite` mediumint(8) unsigned NOT NULL, `product` mediumint(8) unsigned NOT NULL, `case` mediumint(8) unsigned NOT NULL, @@ -24,7 +24,7 @@ ALTER TABLE `zt_case` ADD `reviewedBy` varchar(255) NOT NULL AFTER `openedDate`; ALTER TABLE `zt_case` ADD `reviewedDate` date NOT NULL AFTER `reviewedBy`; ALTER TABLE `zt_casestep` ADD `parent` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `id`; ALTER TABLE `zt_casestep` ADD `type` varchar(10) NOT NULL DEFAULT 'step' AFTER `version`; -CREATE TABLE `zt_testreport` ( +CREATE TABLE IF NOT EXISTS `zt_testreport` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `product` mediumint(8) unsigned NOT NULL, `project` mediumint(8) unsigned NOT NULL, diff --git a/db/zentao.sql b/db/zentao.sql index e122390baf..b5e8b72469 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -73,6 +73,7 @@ CREATE TABLE IF NOT EXISTS `zt_bug` ( `openedBuild` varchar(255) NOT NULL, `assignedTo` varchar(30) NOT NULL default '', `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, `resolvedBy` varchar(30) NOT NULL default '', `resolution` varchar(30) NOT NULL default '', `resolvedBuild` varchar(30) NOT NULL default '', @@ -123,6 +124,7 @@ CREATE TABLE IF NOT EXISTS `zt_case` ( `id` mediumint(8) unsigned NOT NULL auto_increment, `product` mediumint(8) unsigned NOT NULL default '0', `branch` mediumint(8) unsigned NOT NULL default '0', + `lib` mediumint(8) unsigned NOT NULL default '0', `module` mediumint(8) unsigned NOT NULL default '0', `path` mediumint(8) unsigned NOT NULL default '0', `story` mediumint(30) unsigned NOT NULL default '0', @@ -144,11 +146,14 @@ CREATE TABLE IF NOT EXISTS `zt_case` ( `order` tinyint(30) unsigned NOT NULL default '0', `openedBy` char(30) NOT NULL default '', `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, `lastEditedBy` char(30) NOT NULL default '', `lastEditedDate` datetime NOT NULL, `version` tinyint(3) unsigned NOT NULL default '0', `linkCase` varchar(255) NOT NULL, `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, `deleted` enum('0','1') NOT NULL default '0', `lastRunner` varchar(30) NOT NULL, `lastRunDate` datetime NOT NULL, @@ -159,8 +164,10 @@ CREATE TABLE IF NOT EXISTS `zt_case` ( -- DROP TABLE IF EXISTS `zt_casestep`; CREATE TABLE IF NOT EXISTS `zt_casestep` ( `id` mediumint(8) unsigned NOT NULL auto_increment, + `parent` mediumint(8) unsigned NOT NULL default '0', `case` mediumint(8) unsigned NOT NULL default '0', `version` smallint(3) unsigned NOT NULL default '0', + `type` varchar(10) NOT NULL DEFAULT 'step', `desc` text NOT NULL, `expect` text NOT NULL, PRIMARY KEY (`id`), @@ -553,6 +560,14 @@ CREATE TABLE IF NOT EXISTS `zt_storystage` ( `stage` varchar(50) NOT NULL, KEY `story` (`story`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; +-- DROP TABLE IF EXISTS `zt_suitecase`; +CREATE TABLE IF NOT EXISTS `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_task`; CREATE TABLE IF NOT EXISTS `zt_task` ( `id` mediumint(8) unsigned NOT NULL auto_increment, @@ -613,6 +628,29 @@ CREATE TABLE IF NOT EXISTS `zt_team` ( `hours` float(2,1) unsigned NOT NULL default '0', PRIMARY KEY (`project`,`account`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; +-- DROP TABLE IF EXISTS `zt_testreport`; +CREATE TABLE IF NOT EXISTS `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_testresult`; CREATE TABLE IF NOT EXISTS `zt_testresult` ( `id` mediumint(8) unsigned NOT NULL auto_increment, @@ -640,6 +678,20 @@ CREATE TABLE IF NOT EXISTS `zt_testrun` ( PRIMARY KEY (`id`), UNIQUE KEY `task` (`task`,`case`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; +-- DROP TABLE IF EXISTS `zt_testsuite`; +CREATE TABLE IF NOT EXISTS `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_testtask`; CREATE TABLE IF NOT EXISTS `zt_testtask` ( `id` mediumint(8) unsigned NOT NULL auto_increment, @@ -1080,6 +1132,10 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1, 'testcase', 'createBug'), (1, 'testcase', 'delete'), (1, 'testcase', 'edit'), +(1, 'testcase', 'review'), +(1, 'testcase', 'batchReview'), +(1, 'testcase', 'batchCaseTypeChange'), +(1, 'testcase', 'batchConfirmStoryChange'), (1, 'testcase', 'batchChangeModule'), (1, 'testcase', 'linkCases'), (1, 'testcase', 'unlinkCase'), @@ -1090,6 +1146,25 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1, 'testcase', 'index'), (1, 'testcase', 'showImport'), (1, 'testcase', 'view'), +(1, 'testcase', 'importFromLib'), +(1, 'testreport', 'browse'), +(1, 'testreport', 'create'), +(1, 'testreport', 'view'), +(1, 'testreport', 'delete'), +(1, 'testreport', 'edit'), +(1, 'testsuite', 'index'), +(1, 'testsuite', 'browse'), +(1, 'testsuite', 'create'), +(1, 'testsuite', 'view'), +(1, 'testsuite', 'edit'), +(1, 'testsuite', 'delete'), +(1, 'testsuite', 'linkCase'), +(1, 'testsuite', 'unlinkCase'), +(1, 'testsuite', 'batchUnlinkCases'), +(1, 'testsuite', 'library'), +(1, 'testsuite', 'createLib'), +(1, 'testsuite', 'createCase'), +(1, 'testsuite', 'libView'), (1, 'testtask', 'batchAssign'), (1, 'testtask', 'batchRun'), (1, 'testtask', 'browse'), @@ -1104,6 +1179,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1, 'testtask', 'results'), (1, 'testtask', 'runcase'), (1, 'testtask', 'start'), +(1, 'testtask', 'activate'), +(1, 'testtask', 'block'), +(1, 'testtask', 'report'), (1, 'testtask', 'unlinkcase'), (1, 'testtask', 'view'), (1, 'todo', 'batchCreate'), @@ -1287,6 +1365,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (2, 'testcase', 'groupCase'), (2, 'testcase', 'index'), (2, 'testcase', 'view'), +(2, 'testsuite', 'index'), +(2, 'testsuite', 'browse'), +(2, 'testsuite', 'view'), (2, 'testtask', 'browse'), (2, 'testtask', 'cases'), (2, 'testtask', 'create'), @@ -1466,6 +1547,10 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (3, 'testcase', 'create'), (3, 'testcase', 'createBug'), (3, 'testcase', 'edit'), +(3, 'testcase', 'review'), +(3, 'testcase', 'batchReview'), +(3, 'testcase', 'batchCaseTypeChange'), +(3, 'testcase', 'batchConfirmStoryChange'), (3, 'testcase', 'batchChangeModule'), (3, 'testcase', 'linkCases'), (3, 'testcase', 'unlinkCase'), @@ -1476,6 +1561,16 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (3, 'testcase', 'index'), (3, 'testcase', 'showImport'), (3, 'testcase', 'view'), +(3, 'testreport', 'browse'), +(3, 'testreport', 'view'), +(3, 'testsuite', 'index'), +(3, 'testsuite', 'browse'), +(3, 'testsuite', 'create'), +(3, 'testsuite', 'view'), +(3, 'testsuite', 'edit'), +(3, 'testsuite', 'delete'), +(3, 'testsuite', 'linkCase'), +(3, 'testsuite', 'unlinkCase'), (3, 'testtask', 'batchAssign'), (3, 'testtask', 'batchRun'), (3, 'testtask', 'browse'), @@ -1489,6 +1584,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (3, 'testtask', 'results'), (3, 'testtask', 'runcase'), (3, 'testtask', 'start'), +(3, 'testtask', 'activate'), +(3, 'testtask', 'block'), +(3, 'testtask', 'report'), (3, 'testtask', 'unlinkcase'), (3, 'testtask', 'view'), (3, 'todo', 'batchCreate'), @@ -1701,6 +1799,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (4, 'testcase', 'groupCase'), (4, 'testcase', 'index'), (4, 'testcase', 'view'), +(4, 'testsuite', 'index'), +(4, 'testsuite', 'browse'), +(4, 'testsuite', 'view'), (4, 'testtask', 'batchAssign'), (4, 'testtask', 'browse'), (4, 'testtask', 'cases'), @@ -1947,6 +2048,14 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (5, 'testcase', 'groupCase'), (5, 'testcase', 'index'), (5, 'testcase', 'view'), +(5, 'testcase', 'importFromLib'), +(5, 'testsuite', 'index'), +(5, 'testsuite', 'browse'), +(5, 'testsuite', 'view'), +(5, 'testsuite', 'library'), +(5, 'testsuite', 'createLib'), +(5, 'testsuite', 'createCase'), +(5, 'testsuite', 'libView'), (5, 'testtask', 'browse'), (5, 'testtask', 'cases'), (5, 'testtask', 'groupCase'), @@ -2169,6 +2278,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (6, 'testcase', 'groupCase'), (6, 'testcase', 'index'), (6, 'testcase', 'view'), +(6, 'testsuite', 'index'), +(6, 'testsuite', 'browse'), +(6, 'testsuite', 'view'), (6, 'testtask', 'browse'), (6, 'testtask', 'cases'), (6, 'testtask', 'create'), @@ -2398,6 +2510,14 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (7, 'testcase', 'groupCase'), (7, 'testcase', 'index'), (7, 'testcase', 'view'), +(7, 'testcase', 'importFromLib'), +(7, 'testsuite', 'index'), +(7, 'testsuite', 'browse'), +(7, 'testsuite', 'view'), +(7, 'testsuite', 'library'), +(7, 'testsuite', 'createLib'), +(7, 'testsuite', 'createCase'), +(7, 'testsuite', 'libView'), (7, 'testtask', 'browse'), (7, 'testtask', 'cases'), (7, 'testtask', 'groupCase'), @@ -2600,6 +2720,10 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (8, 'testcase', 'createBug'), (8, 'testcase', 'delete'), (8, 'testcase', 'edit'), +(8, 'testcase', 'review'), +(8, 'testcase', 'batchReview'), +(8, 'testcase', 'batchCaseTypeChange'), +(8, 'testcase', 'batchConfirmStoryChange'), (8, 'testcase', 'batchChangeModule'), (8, 'testcase', 'linkCases'), (8, 'testcase', 'unlinkCase'), @@ -2610,6 +2734,24 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (8, 'testcase', 'index'), (8, 'testcase', 'showImport'), (8, 'testcase', 'view'), +(8, 'testcase', 'importFromLib'), +(8, 'testreport', 'browse'), +(8, 'testreport', 'create'), +(8, 'testreport', 'view'), +(8, 'testreport', 'delete'), +(8, 'testreport', 'edit'), +(8, 'testsuite', 'index'), +(8, 'testsuite', 'browse'), +(8, 'testsuite', 'create'), +(8, 'testsuite', 'view'), +(8, 'testsuite', 'edit'), +(8, 'testsuite', 'delete'), +(8, 'testsuite', 'linkCase'), +(8, 'testsuite', 'unlinkCase'), +(8, 'testsuite', 'library'), +(8, 'testsuite', 'createLib'), +(8, 'testsuite', 'createCase'), +(8, 'testsuite', 'libView'), (8, 'testtask', 'batchAssign'), (8, 'testtask', 'batchRun'), (8, 'testtask', 'browse'), @@ -2624,6 +2766,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (8, 'testtask', 'results'), (8, 'testtask', 'runcase'), (8, 'testtask', 'start'), +(8, 'testtask', 'activate'), +(8, 'testtask', 'block'), +(8, 'testtask', 'report'), (8, 'testtask', 'unlinkcase'), (8, 'testtask', 'view'), (8, 'todo', 'batchCreate'), @@ -2782,6 +2927,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (9, 'testcase', 'groupCase'), (9, 'testcase', 'index'), (9, 'testcase', 'view'), +(9, 'testsuite', 'index'), +(9, 'testsuite', 'browse'), +(9, 'testsuite', 'view'), (9, 'testtask', 'browse'), (9, 'testtask', 'cases'), (9, 'testtask', 'groupCase'), @@ -2898,6 +3046,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (10, 'task', 'editEstimate'), (10, 'task', 'recordEstimate'), (10, 'task', 'view'), +(10, 'testsuite', 'index'), +(10, 'testsuite', 'browse'), +(10, 'testsuite', 'view'), (10, 'todo', 'batchCreate'), (10, 'todo', 'batchEdit'), (10, 'todo', 'batchFinish'), @@ -2989,6 +3140,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (11, 'testcase', 'groupCase'), (11, 'testcase', 'index'), (11, 'testcase', 'view'), +(11, 'testsuite', 'index'), +(11, 'testsuite', 'browse'), +(11, 'testsuite', 'view'), (11, 'testtask', 'browse'), (11, 'testtask', 'cases'), (11, 'testtask', 'groupCase'), diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 1df65696ac..b1a2f79fa7 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -1,3 +1,61 @@ +2017-03-23 9.1.stable +完成的需求 +104 test suite管理 +336 测试用例增加评审功能 +845 实现公用测试用例功能 +1729 实现导入公共测试用例的导入功能 +1730 实现测试总结报告功能 +1755 用例管理增加批量操作 +1853 测试-用例 按照需求分组查看增加导出数据功能的支持 +1876 增加测试用例步骤的失败率 +1877 测试用例步骤增加分组管理 +1882 版本用例关联增加可以直接关联上一个版本未执行的用例的功能 +1903 项目需求列表增加TBC显示 +1907 编辑用例的时候,添加追加的按钮换行了。 +1908 调整测试版本列表里面的项目和版本信息 +1909 调整测试版本操作菜单的交互 +1910 按照需求关联用例检索会吧没有关联需求的也列出。 +1911 用例批量执行的时候失败后无法输入内容。 +1954 测试报告可以上传附件功能 +1956 测试-用例页面增加批量确认需求变更功能 +2005 Bug增加截止日期字段 +2037 测试用例关联需求时候关闭需求也列出 +2077 测试-版本 把待测和进行中的版本分类显示 +2124 用例的详情页面可以增加全屏显示按钮 +2125 用例执行的时候可以将页面再宽一些,尽量增加用例执行的面积 +2126 用例详情页面步骤,可以开展将fieldset外层的边框去掉。 +2180 禅道客户端登录失败的时候,把返回的数据暴露出来。 +2186 桌面工具增加对https协议的支持 +2189 测试用例结果失败的都增加转bug的按钮。 +2190 没有步骤的用例在执行的时候应该可以写实际结果。 +2191 在代码里面直接设置max_post_vars,避免批量添加,导入失效的问题。 +2192 测试版本关联用例复制功能。 +2193 bug统计报表增加优先级选择。 +2196 用例执行的时候,增加提bug的按钮 +2197 用例结果展示增加测试版本的信息 +2202 bug自定义模板的删除增加确认按钮 +2226 禅道里面的trunk 中文下面改为主干 +2227 待办如果没有指派给自己的任务的话,给用户提示。 +2228 事务类型的任务如果没有设置指派给字段也可以创建任务 +2229 打开计划任务的确认链接设置更加清楚。 +2230 可以设置首页的区块是否全部关闭。 +2231 产品和项目的下拉菜单增加汉语拼音检索功能。 +2237 区块可以设置高度、排序 +2238 导出需求 任务 bug 用例的时候增加分支/平台字段 +修复的Bug +1016 bug按照创建人搜索不显示数据 +1019 提交bug页面显示框不全 +1022 php5.2版本上无法执行后台-计划任务 +1023 我的地盘需求排序后点击需求名称报错 +1025 项目-bug搜索不能正常显示日期选择框 +1029 项目-bug页面搜索可以搜索出已经删除的bug +1030 用例搜索后用例相关的BRS都为0 +1031 统计中会列出没有权限的报表名称 +1034 项目搜索包含减号跳转链接错误 +1035 用例文件导入会默认关联需求的第一个版本 +1036 guest帐号登录禅道无法编辑删除区块 +1037 后台-发信 测试发信会把删除的帐号都列出 + 2017-02-15 9.0.1 完成的需求 2214 需求来源的备注可编辑 @@ -717,39 +775,39 @@ Bug影响版本为多个时,统计报表无法统计。 2015-05-22 7.2.stable 完成的功能: -727 实现模块更换产品功能 -1260 项目和产品增加拖动排序功能 -1446 一件安装包控制面板在2012和8.1下面进行测试 -1518 创建事务类型任务的时候加一个全选按钮 -1520 提需求页面计划下拉表只显示未过期的计划 -1530 禅道参照然之里面的做法,直接对视图做权限的控制。 -1532 项目-需求页面左侧添加模块列表 -1533 产品、项目的搜索框添加上下按键选择的功能 -1535 调整测试任务创建页面的名称的文案:版本名称改为 任务名称 -1536 权限反过来控制。只能限制他访问那些产品或者项目。 -1537 加强对管理员弱口令的检查。 -1538 写插件,上传插件的时候需要创建ok文件。 -1539 搜索自定义标题做striptags, specialchars处理。 -1540 用例的expect, result也做处理。 -1541 测试结果也需要做处理。 -1542 需求的spec也需要做处理。 -1543 敏感操作增加管理员口令的检查 -1544 所有项目页面增强按照产品检索功能 -1545 一键安装包启动之前判断已经安装的服务和当前的路径是否正确。 -1546 调整版本和发布的关联bug,关联需求的操作。 -1547 调整计划的关联需求和关联bug页面 -1557 批量操作页面涉及到数字的文本框取消自动填充功能 -1564 批量操作页面的chosen控件选择了某一个比较长的值之后,鼠标悬浮,显示title提示。 -1565 需求的详情页面根据关联的项目的信息增加分解任务的链接。 -1566 列表页面点击箭头也可以排序。 -1567 安装和升级页面推荐其他的产品。 -1568 计划任务增加删除备份的任务项 -1576 使用zui最新的统计报表程序替换fushincharts -1584 升级集成环境里面的ioncube loader -1610 为将来的日期添加待办的时候,时间从早晨开始计算 -1612 让用户选择产品和项目的组合关系 -1613 产品和项目在判断代号唯一的时候排除已经删除的 -1617 组织动态搜索的时候日期字段增加日期选择框 +727 实现模块更换产品功能 +1260 项目和产品增加拖动排序功能 +1446 一件安装包控制面板在2012和8.1下面进行测试 +1518 创建事务类型任务的时候加一个全选按钮 +1520 提需求页面计划下拉表只显示未过期的计划 +1530 禅道参照然之里面的做法,直接对视图做权限的控制。 +1532 项目-需求页面左侧添加模块列表 +1533 产品、项目的搜索框添加上下按键选择的功能 +1535 调整测试任务创建页面的名称的文案:版本名称改为 任务名称 +1536 权限反过来控制。只能限制他访问那些产品或者项目。 +1537 加强对管理员弱口令的检查。 +1538 写插件,上传插件的时候需要创建ok文件。 +1539 搜索自定义标题做striptags, specialchars处理。 +1540 用例的expect, result也做处理。 +1541 测试结果也需要做处理。 +1542 需求的spec也需要做处理。 +1543 敏感操作增加管理员口令的检查 +1544 所有项目页面增强按照产品检索功能 +1545 一键安装包启动之前判断已经安装的服务和当前的路径是否正确。 +1546 调整版本和发布的关联bug,关联需求的操作。 +1547 调整计划的关联需求和关联bug页面 +1557 批量操作页面涉及到数字的文本框取消自动填充功能 +1564 批量操作页面的chosen控件选择了某一个比较长的值之后,鼠标悬浮,显示title提示。 +1565 需求的详情页面根据关联的项目的信息增加分解任务的链接。 +1566 列表页面点击箭头也可以排序。 +1567 安装和升级页面推荐其他的产品。 +1568 计划任务增加删除备份的任务项 +1576 使用zui最新的统计报表程序替换fushincharts +1584 升级集成环境里面的ioncube loader +1610 为将来的日期添加待办的时候,时间从早晨开始计算 +1612 让用户选择产品和项目的组合关系 +1613 产品和项目在判断代号唯一的时候排除已经删除的 +1617 组织动态搜索的时候日期字段增加日期选择框 修复的BUG: 710 禅道和svn集成功能,注释的字符没有进行安全过滤 @@ -921,80 +979,80 @@ Bug影响版本为多个时,统计报表无法统计。 644 导入bug时候的指派给时间没有设置 631 火狐下面任务的弹出页面上面的边框少了。 645 用例csv导入执行次数问题 -651 我的地盘待办浏览某一天的待办无法批量编辑 -650 提交bug保存模版下次使用时候显示格式不正确 +651 我的地盘待办浏览某一天的待办无法批量编辑 +650 提交bug保存模版下次使用时候显示格式不正确 2014-08-26 6.2.stable 完成的功能: -1429 把ajaxform超时的时间拿出来作为参数。 -481 增加是否需要打开审核流程的配置 -1254 修改打包脚本,去掉内网服务器 -984 命令行中的IN_SHELL常量改用PHP_SAPI -1322 dao类增加一个方法,可以允许用户直接执行一个sql -1173 维护权限的时候应该显示当前维护的分组 -1422 删除用不到的js控件 -357 dao增加count(*)的功能 -1235 项目中新增需求时默认无需评审 -1165 整理每个页面的标题和position:专业版 -1207 发布关联bug的时候,不关联解决方案等于延期的bug -1371 项目的日志里面记录版本的创建时间和测试任务的提交,完成时间。 -1436 快速跳转部分去掉圆角 -808 任务增加暂停状态 -1114 用例执行失败的时候,可以考虑分步骤提交bug。 -1349 批量新增bug增加“同上”功能 -1432 去掉发布和版本里面的“已关联bugs”中的复数s。 -1055 查看组织日志/TODO时,横向滚动时,锁定前两列的部门及员工姓名。 -1337 bug创建的时候增加优先级字段 -1182 计划关联需求时增加按照模块搜索功能 -1428 任务详情页面显示需求的描述。 -981 调整各个对象编辑页面的标题文本框的排版 -1395 添加动态中动作的中文支持 -315 设定编辑器tabindex -1439 调整转入任务时项目列表的算法 -1217 关于录入工时更新任务的状态 -1125 当需求,任务,bug的管理或者解决方案为重复的时候,增加搜索功能。 -1369 重新梳理下邮件错误的提示。 -1348 查看版本关联bug弹出的页面增加操作按钮 -1193 项目转入bug作为任务的时候将延期的也放在列表中 -1431 调整各个新增页面的间距,将其缩小。 -1262 在项目的下拉菜单中增加所有项目的链接 -1324 使用lazarus重构windows一键安装包的控制面板 -1175 搜索,计划应该按照日期倒序排 -1424 产品页面提需求时如果不需要评审给用户提示评审人会变成指派人 -1238 提需求时所属计划列表倒序排序 -1320 重置数据之后,应当提示用户结果 -1169 需求的详情页显示项目 -1210 集成环境首页的自动跳转去掉 -1394 6.0版本更换主题后,指派列表调整对比度,使用户更容易识别内容 -1438 检查确认编辑器贴图功能是否正常 -855 各个列表页面增加不同状态颜色的显示 -1124 重新实现dao里面的检查字符串长度的计算方式 -1359 项目导入bug的时候,自动计算模块 -1199 linux一键安装包的控制脚本初始化对xampp变量的设置 -1434 调整产品各个操作的界面。 -1347 一键安装包首页居中对齐。 -1430 模块的编辑,无法编辑名称。 -483 各个列表页面默认不显示已经关闭的对象 -1256 对表单提交过来的字段进行specialchars处理。 -1022 添加需求,任务,bug,文档的时候判断是否重复。 -1237 任务记录工时的时候在表zt_taskestimate中记录account属性的值 -905 文档可以修改其所属的文档库 -1167 邮件配置参数中过滤空格字符 -1208 项目中bug列表的优先级还是用图标来显示 -1437 调整桌面提醒工具权限错误的提示 -1358 计划列表页面描述里面P标签的margin去掉。 -1433 调整项目各个操作的界面。 -1343 从用例创建bug的时候,可以选择步骤。 -1057 重新梳理默认的权限列表 -1183 调整两个日期选择框同时存在情况下第二个的默认值 +1429 把ajaxform超时的时间拿出来作为参数。 +481 增加是否需要打开审核流程的配置 +1254 修改打包脚本,去掉内网服务器 +984 命令行中的IN_SHELL常量改用PHP_SAPI +1322 dao类增加一个方法,可以允许用户直接执行一个sql +1173 维护权限的时候应该显示当前维护的分组 +1422 删除用不到的js控件 +357 dao增加count(*)的功能 +1235 项目中新增需求时默认无需评审 +1165 整理每个页面的标题和position:专业版 +1207 发布关联bug的时候,不关联解决方案等于延期的bug +1371 项目的日志里面记录版本的创建时间和测试任务的提交,完成时间。 +1436 快速跳转部分去掉圆角 +808 任务增加暂停状态 +1114 用例执行失败的时候,可以考虑分步骤提交bug。 +1349 批量新增bug增加“同上”功能 +1432 去掉发布和版本里面的“已关联bugs”中的复数s。 +1055 查看组织日志/TODO时,横向滚动时,锁定前两列的部门及员工姓名。 +1337 bug创建的时候增加优先级字段 +1182 计划关联需求时增加按照模块搜索功能 +1428 任务详情页面显示需求的描述。 +981 调整各个对象编辑页面的标题文本框的排版 +1395 添加动态中动作的中文支持 +315 设定编辑器tabindex +1439 调整转入任务时项目列表的算法 +1217 关于录入工时更新任务的状态 +1125 当需求,任务,bug的管理或者解决方案为重复的时候,增加搜索功能。 +1369 重新梳理下邮件错误的提示。 +1348 查看版本关联bug弹出的页面增加操作按钮 +1193 项目转入bug作为任务的时候将延期的也放在列表中 +1431 调整各个新增页面的间距,将其缩小。 +1262 在项目的下拉菜单中增加所有项目的链接 +1324 使用lazarus重构windows一键安装包的控制面板 +1175 搜索,计划应该按照日期倒序排 +1424 产品页面提需求时如果不需要评审给用户提示评审人会变成指派人 +1238 提需求时所属计划列表倒序排序 +1320 重置数据之后,应当提示用户结果 +1169 需求的详情页显示项目 +1210 集成环境首页的自动跳转去掉 +1394 6.0版本更换主题后,指派列表调整对比度,使用户更容易识别内容 +1438 检查确认编辑器贴图功能是否正常 +855 各个列表页面增加不同状态颜色的显示 +1124 重新实现dao里面的检查字符串长度的计算方式 +1359 项目导入bug的时候,自动计算模块 +1199 linux一键安装包的控制脚本初始化对xampp变量的设置 +1434 调整产品各个操作的界面。 +1347 一键安装包首页居中对齐。 +1430 模块的编辑,无法编辑名称。 +483 各个列表页面默认不显示已经关闭的对象 +1256 对表单提交过来的字段进行specialchars处理。 +1022 添加需求,任务,bug,文档的时候判断是否重复。 +1237 任务记录工时的时候在表zt_taskestimate中记录account属性的值 +905 文档可以修改其所属的文档库 +1167 邮件配置参数中过滤空格字符 +1208 项目中bug列表的优先级还是用图标来显示 +1437 调整桌面提醒工具权限错误的提示 +1358 计划列表页面描述里面P标签的margin去掉。 +1433 调整项目各个操作的界面。 +1343 从用例创建bug的时候,可以选择步骤。 +1057 重新梳理默认的权限列表 +1183 调整两个日期选择框同时存在情况下第二个的默认值 修复的BUG: -598 6.0测试任务中查看用例结果版本信息为空 -608 bug导入任务后更新任务(或bug)的状态时页面没有跳转 -610 维护项目文档库的模块时把产品的模块也复制过来了 -611 燃尽图的delta功能失效 -622 用例批量创建需求下拉菜单无内容 -618 权限管理页面去掉Bug自定义 +598 6.0测试任务中查看用例结果版本信息为空 +608 bug导入任务后更新任务(或bug)的状态时页面没有跳转 +610 维护项目文档库的模块时把产品的模块也复制过来了 +611 燃尽图的delta功能失效 +622 用例批量创建需求下拉菜单无内容 +618 权限管理页面去掉Bug自定义 2014-08-05 6.1.stable 完成的功能: @@ -1390,50 +1448,50 @@ pms网站使用手机访问的时候,匿名登录时,查看任务详情的 2013-7-8 4.2.beta 完成的功能: -1149 调整产品和项目的下拉菜单样式 -1148 调整指派给下拉菜单的样式 -1147 登录界面的宽度控制下 -1146 调整历史记录的显示样式 -1144 调整详情里面的操作按钮 -1143 调整分页导航条的样式 -1142 页面都通过pjax方式载入 -1140 在web网站上面提供二维码登录入口 -1138 在移动web上面实现待办的处理流程 -1137 在移动web上面实现bug的处理流程 -1136 在移动web上面实现任务的处理流程 -1136 在移动web上面实现任务的处理流程 -1135 移动web能够兼容现在的扩展机制 -1134 实现产品的bug列表页面 -1133 实现项目页面 -1133 实现项目页面 -1132 实现产品页面 -1131 实现移动web端我的地盘页面 -1130 确定移动web端的导航机制 -1129 确定移动web端的ui框架 -1128 index.php判断当前访问的终端类型,以决定视图显示类型 -1126 调整bin目录下面的脚本运行 -1123 完善工时填写的逻辑 -1121 创建和编辑项目的时候取消项目团队必填字段的选项 -1120 bug备注功能无法使用 view.js要做一个空白的文件。 -1119 版本的唯一检查增加产品条件。 -1118 调整模块的删除页面 -1112 调整zt_story表里面的reviewBy字段的大小 -1110 添加工时时候的备注信息可以作为任务操作历史里面的备注信息 -1109 处理历次版本删除的文件 -1107 访问方式在安装的时候隐藏掉,不需要用户来设置。 -1106 权限里面还有关于todo的权限,名字改成待办 -1104 集中处理用户列表的查询和显示 -1095 更改表单提交和页面跳转的方式 -1093 链接数据库的时候,自动将localhost改成127.0.0.1 -1091 各个列表页面的操作列表实现无刷新操作 -1090 将company逻辑去掉。 -1089 把pms里面的原来持久cookie的逻辑去掉。 -1081 实现基于linux虚拟化的集成运行环境 -1079 重构产品视图的下拉列表 -1079 重构产品视图的下拉列表 -985 重构产品,用例,bug和任务的模块功能 -985 重构产品,用例,bug和任务的模块功能 -974 重构产品和项目的下拉菜单 +1149 调整产品和项目的下拉菜单样式 +1148 调整指派给下拉菜单的样式 +1147 登录界面的宽度控制下 +1146 调整历史记录的显示样式 +1144 调整详情里面的操作按钮 +1143 调整分页导航条的样式 +1142 页面都通过pjax方式载入 +1140 在web网站上面提供二维码登录入口 +1138 在移动web上面实现待办的处理流程 +1137 在移动web上面实现bug的处理流程 +1136 在移动web上面实现任务的处理流程 +1136 在移动web上面实现任务的处理流程 +1135 移动web能够兼容现在的扩展机制 +1134 实现产品的bug列表页面 +1133 实现项目页面 +1133 实现项目页面 +1132 实现产品页面 +1131 实现移动web端我的地盘页面 +1130 确定移动web端的导航机制 +1129 确定移动web端的ui框架 +1128 index.php判断当前访问的终端类型,以决定视图显示类型 +1126 调整bin目录下面的脚本运行 +1123 完善工时填写的逻辑 +1121 创建和编辑项目的时候取消项目团队必填字段的选项 +1120 bug备注功能无法使用 view.js要做一个空白的文件。 +1119 版本的唯一检查增加产品条件。 +1118 调整模块的删除页面 +1112 调整zt_story表里面的reviewBy字段的大小 +1110 添加工时时候的备注信息可以作为任务操作历史里面的备注信息 +1109 处理历次版本删除的文件 +1107 访问方式在安装的时候隐藏掉,不需要用户来设置。 +1106 权限里面还有关于todo的权限,名字改成待办 +1104 集中处理用户列表的查询和显示 +1095 更改表单提交和页面跳转的方式 +1093 链接数据库的时候,自动将localhost改成127.0.0.1 +1091 各个列表页面的操作列表实现无刷新操作 +1090 将company逻辑去掉。 +1089 把pms里面的原来持久cookie的逻辑去掉。 +1081 实现基于linux虚拟化的集成运行环境 +1079 重构产品视图的下拉列表 +1079 重构产品视图的下拉列表 +985 重构产品,用例,bug和任务的模块功能 +985 重构产品,用例,bug和任务的模块功能 +974 重构产品和项目的下拉菜单 解决的bug: 455 用户名为数字时,我的地盘的档案会出错。 diff --git a/lib/front/front.class.php b/lib/front/front.class.php index 74fa0e7ccc..8c6a881a13 100644 --- a/lib/front/front.class.php +++ b/lib/front/front.class.php @@ -112,12 +112,13 @@ class html extends baseHTML /* The options. */ if(is_array($selectedItems)) $selectedItems = implode(',', $selectedItems); $selectedItems = ",$selectedItems,"; - $convertedPinYin = common::convert2Pinyin($options); + $convertedPinYin = class_exists('common') ? common::convert2Pinyin($options) : array(); foreach($options as $key => $value) { + $optionPinyin = zget($convertedPinYin, $value, ''); $key = str_replace('item', '', $key); $selected = strpos($selectedItems, ",$key,") !== false ? " selected='selected'" : ''; - $string .= "\n"; + $string .= "\n"; } /* End. */ diff --git a/lib/ztcloud/ztcloud.class.php b/lib/ztcloud/ztcloud.class.php index bc6ef6a4c8..723f204784 100644 --- a/lib/ztcloud/ztcloud.class.php +++ b/lib/ztcloud/ztcloud.class.php @@ -75,11 +75,19 @@ class ztcloud $param['body'] = $this->body; $result = $this->queryZtcloud($this->url, $param); + if(!isset($result->result)) + { + throw new Exception($result); + return false; + } + if($result->result == 'fail') { throw new Exception($result->message . "(code:{$result->code})"); return false; } + + return true; } /** @@ -102,7 +110,9 @@ class ztcloud ); $context = stream_context_create($options); $result = file_get_contents($url, FILE_TEXT, $context); - return json_decode($result); + + $parsedResult = json_decode($result); + return empty($parsedResult) ? $result : $parsedResult; } /** diff --git a/module/action/lang/en.php b/module/action/lang/en.php index 145105c2bb..28fbb1ebe8 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -133,6 +133,7 @@ $lang->action->label->confirmed = 'Confirm a Story, '; $lang->action->label->bugconfirmed = 'Confirmed'; $lang->action->label->tostory = 'Convert to Story'; $lang->action->label->frombug = 'Converted from Bug'; +$lang->action->label->fromlib = 'Import from library'; $lang->action->label->totask = 'Convert to Task'; $lang->action->label->svncommited = 'SVN Commit'; $lang->action->label->gitcommited = 'Git Commit'; @@ -176,10 +177,13 @@ $lang->action->label->build = 'Build|build|view|buildID=%s'; $lang->action->label->bug = 'Bug|bug|view|bugID=%s'; $lang->action->label->case = 'Case|testcase|view|caseID=%s'; $lang->action->label->testtask = 'Test Task|testtask|view|caseID=%s'; +$lang->action->label->testsuite = 'Test Suite|testsuite|view|suiteID=%s'; +$lang->action->label->caselib = 'Case Library|testsuite|libview|libID=%s'; $lang->action->label->todo = 'To-Dos|todo|view|todoID=%s'; $lang->action->label->doclib = 'Doc Lib|doc|browse|libID=%s'; $lang->action->label->doc = 'Document|doc|view|docID=%s'; $lang->action->label->user = 'User|user|view|account=%s'; +$lang->action->label->testreport = 'Report|testreport|view|report=%s'; $lang->action->label->space = ' '; /* Object type. */ @@ -203,6 +207,7 @@ $lang->action->search->objectTypeList['productplan'] = 'Plan'; $lang->action->search->objectTypeList['branch'] = 'Branch'; $lang->action->search->objectTypeList['testsuite'] = 'Suite'; $lang->action->search->objectTypeList['caselib'] = 'Library'; +$lang->action->search->objectTypeList['testreport'] = 'Report'; /* 用来在动态显示中显示动作 */ $lang->action->search->label[''] = ''; diff --git a/module/action/model.php b/module/action/model.php index 33fe30dac8..991c31c393 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -418,6 +418,7 @@ class actionModel extends model */ public function logHistory($actionID, $changes) { + if(empty($actionID)) return false; foreach($changes as $change) { $change['action'] = $actionID; @@ -434,6 +435,8 @@ class actionModel extends model */ public function printAction($action) { + if(!isset($action->objectType) or !isset($action->action)) return false; + $objectType = $action->objectType; $actionType = strtolower($action->action); diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 038af7773b..d4fd709eb0 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -378,6 +378,7 @@ $lang->menugroup->bug = 'qa'; $lang->menugroup->testcase = 'qa'; $lang->menugroup->testtask = 'qa'; $lang->menugroup->testsuite = 'qa'; +$lang->menugroup->caselib = 'qa'; $lang->menugroup->testreport = 'qa'; $lang->menugroup->people = 'company'; $lang->menugroup->dept = 'company'; diff --git a/module/common/view/mail.footer.html.php b/module/common/view/mail.footer.html.php index 0ba89cb8d1..fac19fbba5 100644 --- a/module/common/view/mail.footer.html.php +++ b/module/common/view/mail.footer.html.php @@ -6,7 +6,7 @@ if(file_exists($extViewFile)) return; } ?> - + objectType) and isset($action->action)):?> comment)):?>