Merge branch '165_package'
This commit is contained in:
+1
-1
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
|
||||
if(!function_exists('getWebRoot')){function getWebRoot(){}}
|
||||
|
||||
/* 基本设置。Basic settings. */
|
||||
$config->version = '16.5.beta1'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
|
||||
$config->version = '16.5'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
|
||||
$config->liteVersion = '1.0'; // 迅捷版版本。 The version of Lite.
|
||||
$config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP.
|
||||
$config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time.
|
||||
|
||||
@@ -250,6 +250,7 @@ $filter->project->default->cookie['lastPRJ'] = 'int';
|
||||
$filter->project->default->cookie['projectMode'] = 'code';
|
||||
$filter->project->default->cookie['kanbanview'] = 'code';
|
||||
$filter->project->browse->cookie['involved'] = 'code';
|
||||
$filter->project->export->cookie['involved'] = 'code';
|
||||
$filter->project->browse->cookie['projectType'] = 'code';
|
||||
$filter->project->story->cookie['storyModuleParam'] = 'int';
|
||||
$filter->project->story->cookie['storyPreProjectID'] = 'int';
|
||||
|
||||
+8
-8
@@ -377,16 +377,16 @@ INSERT INTO `zt_module` (`id`, `root`, `branch`, `name`, `parent`, `path`, `grad
|
||||
(13, 1, 0, '合作洽谈', 0, ',13,', 1, 60, 'bug', '', '', '', '0'),
|
||||
(14, 1, 0, '关于我们', 0, ',14,', 1, 70, 'bug', '', '', '', '0'),
|
||||
(15, 6, 0, '企业管理', 0, ',15,', 1, 0, 'line', '', '', '', '0');
|
||||
INSERT INTO `zt_product` (`id`, `program`, `name`, `code`, `bind`, `line`, `type`, `status`, `subStatus`, `desc`, `PO`, `QD`, `RD`, `acl`, `whitelist`, `createdBy`, `createdDate`, `createdVersion`, `order`, `deleted`, `storyConcept`) VALUES
|
||||
(1, 6, '公司企业网站建设', 'companyWebsite', '0', 0, 'normal', 'normal', '', '建立公司企业网站,可以更好对外展示。<br />', 'productManager', 'testManager', 'productManager', 'open', '', 'productManager', '2012-06-05 09:57:07', '', 5, '0', 0),
|
||||
(2, 6, '企业内部工时管理系统', 'workhourManage', '0', 0, 'normal', 'normal', '', '', 'productManager', 'testManager', 'productManager', 'open', '', 'productManager', '2012-06-05 11:15:20', '5.2.1', 10, '0', 0);
|
||||
INSERT INTO `zt_product` (`id`, `program`, `name`, `code`, `bind`, `line`, `type`, `status`, `subStatus`, `desc`, `PO`, `QD`, `RD`, `acl`, `whitelist`, `createdBy`, `createdDate`, `createdVersion`, `order`, `deleted`) VALUES
|
||||
(1, 6, '公司企业网站建设', 'companyWebsite', '0', 0, 'normal', 'normal', '', '建立公司企业网站,可以更好对外展示。<br />', 'productManager', 'testManager', 'productManager', 'open', '', 'productManager', '2012-06-05 09:57:07', '', 5, '0'),
|
||||
(2, 6, '企业内部工时管理系统', 'workhourManage', '0', 0, 'normal', 'normal', '', '', 'productManager', 'testManager', 'productManager', 'open', '', 'productManager', '2012-06-05 11:15:20', '5.2.1', 10, '0');
|
||||
INSERT INTO `zt_productplan` (`id`, `product`, `branch`, `parent`, `title`, `desc`, `begin`, `end`, `order`, `deleted`) VALUES
|
||||
(1, 1, 0, 0, '1.0版本', '开发出企业网站1.0版本。<br />', '2020-06-05', '2021-06-04', '', '0');
|
||||
INSERT INTO `zt_project` (`id`, `project`, `model`, `type`, `product`, `lifetime`, `budget`, `budgetUnit`, `attribute`, `percent`, `milestone`, `output`, `auth`, `parent`, `path`, `grade`, `name`, `code`, `begin`, `end`, `realBegan`, `realEnd`, `days`, `status`, `subStatus`, `statge`, `pri`, `desc`, `version`, `parentVersion`, `planDuration`, `realDuration`, `openedBy`, `openedDate`, `openedVersion`, `lastEditedBy`, `lastEditedDate`, `closedBy`, `closedDate`, `canceledBy`, `canceledDate`, `PO`, `PM`, `QD`, `RD`, `team`, `acl`, `whitelist`, `order`, `deleted`, `storyConcept`) VALUES
|
||||
(1, 7, '', 'sprint', 'single', 'sprint', '0', 'CNY', '', 0, '0', '', '', 7, ',7,1,', 1, '企业网站第一期', 'coWeb1', '2020-06-05', '2021-12-04', '0000-00-00', '0000-00-00', 391, 'doing', '', '1', '1', '开发企业网站的基本雏形。<br />', 0, 0, 0, 0, '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 'productManager', 'projectManager', 'testManager', 'productManager', '公司开发团队', 'open', '', 5, '0', 0),
|
||||
(2, 7, '', 'sprint', 'single', 'sprint', '0', 'CNY', '', 0, '0', '', '', 7, ',7,2,', 1, '企业网站第二期', 'coWebsite2', '2021-06-05', '2022-06-04', '0000-00-00', '0000-00-00', 260, 'wait', '', '1', '1', '', 0, 0, 0, 0, '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 'productManager', 'projectManager', 'testManager', 'productManager', '公司开发团队', 'open', '', 10, '0', 0),
|
||||
(7, 0, 'scrum', 'project', 'single', 'sprint', '0', 'CNY', '', 0, '0', '', 'extend', 6, ',6,7,', 2, '企业管理系统', '', '2021-06-05', '2022-06-04', '0000-00-00', '0000-00-00', 0, 'doing', '', '1', '1', '', 0, 0, 0, 0, 'admin', '2021-04-28 11:22:04', '15.0.rc3', 'admin', '2021-04-28 11:22:04', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'projectManager', '', '', '', 'open', ',tester3,admin', 35, '0', 0),
|
||||
(6, 0, '', 'program', 'single', 'sprint', '0', 'CNY', '', 0, '0', '', '', 0, ',6,', 1, '企业管理', '', '2021-06-05', '2022-06-04', '0000-00-00', '0000-00-00', 0, 'doing', '', '1', '1', '', 0, 0, 0, 0, 'admin', '2021-04-28 11:22:04', '15.0.rc3', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '', '', '', '', 'open', '', 30, '0', 0);
|
||||
INSERT INTO `zt_project` (`id`, `project`, `model`, `type`, `product`, `lifetime`, `budget`, `budgetUnit`, `attribute`, `percent`, `milestone`, `output`, `auth`, `parent`, `path`, `grade`, `name`, `code`, `begin`, `end`, `realBegan`, `realEnd`, `days`, `status`, `subStatus`, `statge`, `pri`, `desc`, `version`, `parentVersion`, `planDuration`, `realDuration`, `openedBy`, `openedDate`, `openedVersion`, `lastEditedBy`, `lastEditedDate`, `closedBy`, `closedDate`, `canceledBy`, `canceledDate`, `PO`, `PM`, `QD`, `RD`, `team`, `acl`, `whitelist`, `order`, `deleted`) VALUES
|
||||
(1, 7, '', 'sprint', 'single', 'sprint', '0', 'CNY', '', 0, '0', '', '', 7, ',7,1,', 1, '企业网站第一期', 'coWeb1', '2020-06-05', '2021-12-04', '0000-00-00', '0000-00-00', 391, 'doing', '', '1', '1', '开发企业网站的基本雏形。<br />', 0, 0, 0, 0, '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 'productManager', 'projectManager', 'testManager', 'productManager', '公司开发团队', 'open', '', 5, '0'),
|
||||
(2, 7, '', 'sprint', 'single', 'sprint', '0', 'CNY', '', 0, '0', '', '', 7, ',7,2,', 1, '企业网站第二期', 'coWebsite2', '2021-06-05', '2022-06-04', '0000-00-00', '0000-00-00', 260, 'wait', '', '1', '1', '', 0, 0, 0, 0, '', '0000-00-00 00:00:00', '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 'productManager', 'projectManager', 'testManager', 'productManager', '公司开发团队', 'open', '', 10, '0'),
|
||||
(7, 0, 'scrum', 'project', 'single', 'sprint', '0', 'CNY', '', 0, '0', '', 'extend', 6, ',6,7,', 2, '企业管理系统', '', '2021-06-05', '2022-06-04', '0000-00-00', '0000-00-00', 0, 'doing', '', '1', '1', '', 0, 0, 0, 0, 'admin', '2021-04-28 11:22:04', '15.0.rc3', 'admin', '2021-04-28 11:22:04', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 'projectManager', '', '', '', 'open', ',tester3,admin', 35, '0'),
|
||||
(6, 0, '', 'program', 'single', 'sprint', '0', 'CNY', '', 0, '0', '', '', 0, ',6,', 1, '企业管理', '', '2021-06-05', '2022-06-04', '0000-00-00', '0000-00-00', 0, 'doing', '', '1', '1', '', 0, 0, 0, 0, 'admin', '2021-04-28 11:22:04', '15.0.rc3', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '', '', '', '', 'open', '', 30, '0');
|
||||
INSERT INTO `zt_projectcase` (`project`, `product`, `case`, `count`, `version`, `order`) VALUES
|
||||
(1, 1, 2, 1, 1, 4),
|
||||
(7, 1, 1, 1, 1, 5),
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,12 @@
|
||||
ALTER TABLE `zt_vmtemplate` ADD COLUMN `name` varchar(255) NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_vmtemplate` CHANGE COLUMN `status` `osVersion` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' AFTER `osCategory`;
|
||||
ALTER TABLE `zt_vmtemplate` ADD COLUMN `osLang` varchar(50) NOT NULL AFTER `osVersion`;
|
||||
ALTER TABLE `zt_vmtemplate` ADD COLUMN `osArch` varchar(50) NOT NULL AFTER `osLang`;
|
||||
ALTER TABLE `zt_vmtemplate` ADD COLUMN `cpuCoreNum` smallint(4) NOT NULL DEFAULT 0 AFTER `osLang`;
|
||||
ALTER TABLE `zt_vmtemplate` ADD COLUMN `memorySize` int NOT NULL DEFAULT 0 AFTER `cpuCoreNum`;
|
||||
ALTER TABLE `zt_vmtemplate` ADD COLUMN `diskSize` int NOT NULL DEFAULT 0 AFTER `memorySize`;
|
||||
ALTER TABLE `zt_vm` ADD COLUMN `osCpu` tinyint(2) NOT NULL DEFAULT 0 AFTER `osLang`;
|
||||
ALTER TABLE `zt_vm` ADD COLUMN `osMemory` smallint(6) NOT NULL DEFAULT 0 AFTER `osCpu`;
|
||||
ALTER TABLE `zt_vm` ADD COLUMN `osDisk` smallint(6) NOT NULL DEFAULT 0 AFTER `osMemory`;
|
||||
ALTER TABLE `zt_vm` DROP COLUMN `ip`, DROP COLUMN `agentPort`;
|
||||
ALTER TABLE `zt_vm` CHANGE COLUMN `vnc` `vncPort` int(10) NOT NULL DEFAULT 0 AFTER `heatbeat`;
|
||||
+11
-4
@@ -7170,10 +7170,11 @@ CREATE TABLE IF NOT EXISTS `zt_vm` (
|
||||
`osType` varchar(50) NOT NULL DEFAULT '',
|
||||
`osArch` varchar(50) NOT NULL DEFAULT '',
|
||||
`osLang` varchar(50) NOT NULL DEFAULT '',
|
||||
`osCpu` tinyint(2) NOT NULL DEFAULT 0,
|
||||
`osMemory` smallint(6) NOT NULL DEFAULT 0,
|
||||
`osDisk` smallint(6) NOT NULL DEFAULT 0,
|
||||
`status` varchar(50) NOT NULL DEFAULT '',
|
||||
`destroyAt` datetime NULL,
|
||||
`ip` varchar(200) NOT NULL DEFAULT '',
|
||||
`agentPort` varchar(255) NOT NULL DEFAULT '',
|
||||
`macAddress` varchar(255) NOT NULL DEFAULT '',
|
||||
`workspace` varchar(255) NOT NULL DEFAULT '',
|
||||
`templateID` int(10) unsigned NOT NULL DEFAULT 0,
|
||||
@@ -7181,7 +7182,7 @@ CREATE TABLE IF NOT EXISTS `zt_vm` (
|
||||
`baseImagePath` varchar(255) NOT NULL DEFAULT '',
|
||||
`desc` varchar(255) NOT NULL DEFAULT '',
|
||||
`heatbeat` datetime NULL,
|
||||
`vnc` varchar(255) NOT NULL DEFAULT '',
|
||||
`vncPort` int(10) NOT NULL DEFAULT 0,
|
||||
`instance` varchar(255) NOT NULL DEFAULT '',
|
||||
`eip` varchar(255) NOT NULL DEFAULT '',
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
@@ -7210,11 +7211,17 @@ CREATE TABLE IF NOT EXISTS `zt_baseimage` (
|
||||
-- DROP TABLE IF EXISTS `zt_vmtemplate`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_vmtemplate` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`hostID` int(10) unsigned NOT NULL DEFAULT 0,
|
||||
`templateName` varchar(255) NOT NULL DEFAULT '',
|
||||
`osType` varchar(50) NOT NULL DEFAULT '',
|
||||
`osCategory` varchar(50) NOT NULL DEFAULT '',
|
||||
`status` varchar(50) NOT NULL DEFAULT '',
|
||||
`osVersion` varchar(50) NOT NULL DEFAULT '',
|
||||
`osLang` varchar(50) NOT NULL,
|
||||
`cpuCoreNum` smallint(4) NOT NULL DEFAULT 0,
|
||||
`memorySize` int NOT NULL DEFAULT 0,
|
||||
`diskSize` int NOT NULL DEFAULT 0,
|
||||
`osArch` varchar(50) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_browser`;
|
||||
|
||||
+192
@@ -1,3 +1,195 @@
|
||||
2022-03-24 16.5
|
||||
修复的bug
|
||||
21082 泳道被删除后再还原,泳道中的任务显示了两遍
|
||||
21054 看板中删除看板后没有跳转到最近执行中
|
||||
21052 产品概况页面,样式显示问题
|
||||
21044 已关闭执行不支持删除
|
||||
21037 瀑布项目创建阶段,创建人和负责人没有同步到团队中
|
||||
21036 批量创建任务页面,左侧模块选中同上后,右侧需求对应的是其他模块的需求
|
||||
21029 批量创建任务页面选择需求后无法查看需求
|
||||
20977 需求详情页点击迭代,样式不正确
|
||||
20976 任务列表中研发需求未显示
|
||||
20975 任务看板,样式问题
|
||||
20930 【瀑布项目】执行设置多个产品是报错
|
||||
20923 专业研发看板中提Bug保存后弹窗未关闭
|
||||
20918 计划的需求列表展示需求数据不正确
|
||||
20915 专业研发看板中编辑页面样式有问题
|
||||
20813 批量编辑阶段会退出编辑界面
|
||||
20808 产品计划关联需求页面,点击开始按钮后取消,有报错
|
||||
20807 看板项目在项目集列表中显示图标不正确
|
||||
20766 不启用进度管理,卡片详情/编辑页还显示进度字段
|
||||
20742 不填写用户名保存后再补充用户名登录用户没有权限
|
||||
20713 升级后提Bug,有版本仍显示创建发布
|
||||
20661 经典模式下,右上角显示研发综合界面
|
||||
20646 卡片设置为非白色时进度应该显示为白色
|
||||
20645 历史已完成的卡片进度还是0%应该处理成100%
|
||||
20588 安装禅道设置账号时不填写密码点击保存可以跳转至安装成功页面
|
||||
20543 提Bug选择分支或切换产品后默认选中执行
|
||||
20490 权限页面上执行中老看板权限没有隐藏
|
||||
20457 研发综合界面全局ID搜索显示了迅捷版内容
|
||||
20396 批量提Bug切换分支和执行后版本可以选择所有版本
|
||||
20111 文档执行库创建执行库后跳转项目库界面报错
|
||||
20098 发布关联版本时带过来的需求不会变成已发布
|
||||
19709 提Bug页面,更换所属项目,影响版本没有刷新
|
||||
19698 win32一键安装包中导入jira数据页面报错
|
||||
19696 国际版16.4面板右下角升级页面显示有误
|
||||
19680 导入jira数据设置jira和禅道关系页面下一步和返回按钮应该显示在页面下方
|
||||
19662 导入jira数据,保存成功的样式已系统的不一致
|
||||
19647 导入jira数据后我近期参与的项目显示重复数据
|
||||
19644 设置Jira用户页面密码没有必填项标识
|
||||
19577 设置Jira与禅道数据对应关系保存提示信息样式需优化
|
||||
19439 富文本类型文档没有对比功能
|
||||
19382 经典管理模式下,编辑已有项目不能关联新建的产品
|
||||
19315 调用接口创建、修改bug重现步骤、模块不生效
|
||||
19261 解决Bug时,提示所属执行不能为空
|
||||
19256 看板项目下无法创建版本
|
||||
19251 通用看板中子列卡片数量超出在制品限制时左侧没有间隔
|
||||
19243 专业项目看板id与通用看板id重复下,通用看板可以修改自定义高度
|
||||
19238 联系人图标的边框线没闭合
|
||||
19074 创建空间,切换空间类型时弹窗页面抖动
|
||||
19004 子列归档时下方显示了更多菜单列
|
||||
18344 php8.0,看板新建卡片时不输入预计工时,点击保存提示预计不能为负数
|
||||
18269 瀑布项目下创建阶段,没有把创建者添加到阶段的团队中
|
||||
18018 公司名输入代码内容,导致登录时有空白弹窗提示
|
||||
18017 当用户里面有中文用户名时 , 所有搜索功能无法加载
|
||||
17963 没有产品权限也没有创建产品权限点击产品库提示没有产品权限
|
||||
17944 API 创建的数据 触发发信通知 邮箱里面的超链接网址拼接有问题
|
||||
17943 瀑布模型下已删除任务的阶段不能创建子阶段
|
||||
17668 修改区域名称为特殊字符不能正确显示特殊字符
|
||||
17627 已选择的干系人再次添加时不应该显示在下拉菜单里
|
||||
17415 在项目--迭代页面关闭提示框会自动跳转到执行
|
||||
17396 项目集中创建项目时点击选择项目管理方式后选择项目页面没关闭
|
||||
17341 经典模式下研发需求分解任务时同上模块之后相关需求联动错误
|
||||
17330 提需求页面创建计划弹窗大小与其他弹窗大小不一致
|
||||
17284 项目集列表页创建项目后,选择项目管理方式弹窗仍存在
|
||||
17264 编辑接口库名称输入空格之后保存成功且页面显示不对
|
||||
17254 在项目-Bug提Bug页面刷新回调转到测试-Bug中
|
||||
17191 添加执行时有多个分支保存报错提示框显示错误
|
||||
17180 经典模式下任务详情所属模块换行显示
|
||||
17139 头像权限问题报错
|
||||
17110 项目团队成员没有项目文档主库的权限
|
||||
17062 任务看板中,表格错位
|
||||
17054 chrome浏览器,调整卡片显示数量,出现更多按钮
|
||||
17048 数据迁移提示,相关文案需修改
|
||||
17023 项目需求下,减少添加研发需求的入口
|
||||
16841 优先级名称过长导致优先级名称与Bug名称重叠了
|
||||
16718 需求名称控件宽度不够
|
||||
16662 创建版本库没自动列出关联的产品
|
||||
16646 文档的产品库中产品显示错误
|
||||
16575 编辑执行页面可以关联已过期的计划需与创建关联逻辑一致
|
||||
16313 经典模式升级后必填项页面展示不正确
|
||||
16299 项目集下批量编辑产品负责人下拉中的closed需去掉
|
||||
16264 收起左侧模块树状图后,任务、Bug等列表页面设置图标显示有问题
|
||||
16207 接口库的目录和接口没有悬浮菜单
|
||||
16204 文档-产品库中编辑文档,跳转到产品-文档
|
||||
16114 接口库中接口切换版本后显示错误
|
||||
16102 项目看板下个别项目没有显示项目集
|
||||
16004 经典模式下项目编辑页面关联产品下拉没有数据
|
||||
15823 安装过甘特图插件的代码,升级到15.5以上版本项目看板报错
|
||||
15554 部分文档大小不显示
|
||||
15517 删除项目时项目下的执行也被删除了
|
||||
15269 项目文档因权限问题显示错误
|
||||
15064 项目集下拉菜单鼠标悬浮闪烁
|
||||
14981 点击项目集看板中的项目无法跳到相应的项目下
|
||||
14595 管理执行团队复制团队项目名称过长显示错误
|
||||
14573 项目集列表进度图标显示不正确
|
||||
14560 产品下拉组件的样式不一致
|
||||
14363 用例库中用例批量编辑的时候左上角显示为了产品名
|
||||
14233 优化和统一文档无数据时的提示文案
|
||||
14134 记录工时工作内容为必填项没有标注必填
|
||||
14090 执行/迭代 列表页面 ,执行/迭代 代号没有展示
|
||||
14050 markdown文本框中粘贴内容后部分内容未显示
|
||||
13910 执行-建任务界面,返回页面错误
|
||||
13884 markdown类型文档浏览显示问题
|
||||
13855 未对团队人员的可用工日和可用工时/天进行校验
|
||||
13345 创建文档库界面选择分组列表显示不完整
|
||||
13031 不分配模块权限,文档页面还是会显示分类按钮
|
||||
12951 全部折叠按钮只能折叠当前页的数据
|
||||
12790 批量执行用例后,跳转的页面需要调整
|
||||
12671 创建用例页面优先级超出页面
|
||||
12655 恢复默认对隐藏和显示已关闭已取消列不生效
|
||||
12638 Bug编辑页面相关需求下拉超出提Bug页面
|
||||
12617 列表设置简单表格,在列表最下面才能滚动
|
||||
12475 使用功能点估算时任务列表还是显示为工时
|
||||
12419 关闭的项目中还可以创建任务
|
||||
12390 编辑修改bug的解决版本后,在之前版本的解决bug列表中还会显示
|
||||
12313 通过首页最新动态点击查看文档,文档详情页面无内容
|
||||
12086 内禅项目需求关联需求页面中,全选操作会和ID排序同时进行
|
||||
11997 批量提bug时多项录入功能导致页面卡住
|
||||
11983 设置项目团队后无法访问项目
|
||||
11784 项目集的投入人员列表中出现了人员名称为空的数据
|
||||
11673 用户需求显示了阶段字段
|
||||
11668 需求详情页历史记录中关联到的迭代无法点击
|
||||
11323 产品发布详情中,遗留的Bug列表出现折行显示
|
||||
11322 产品发布中,打开具体的发布详情页面,完成的研发需求列表需求出现折行显示
|
||||
11138 任务列表状态字段内容显示不全
|
||||
11009 多平台子需求模块无法正常编辑
|
||||
|
||||
2022-03-16 16.5.beta1
|
||||
完成的需求
|
||||
50241 增加专业研发看板中需求/任务/Bug删除功能
|
||||
50240 增加Scrum看板中需求/任务/Bug删除功能
|
||||
49889 提需求页面需求类别统一显示为需求类型
|
||||
49888 泳道组中有多个共享列的泳道时,创建页面中增加所属泳道的选择
|
||||
49886 计划的需求列表中提需求后返回计划的需求列表
|
||||
49885 完善飞书工作消息通知添加Webhook之后,绑定用户页面,等待近一分钟后才打开页面的功能。
|
||||
49883 单个计划增加关闭操作
|
||||
49882 计划列表中子计划前增加标识
|
||||
49881 计划列表中计划名称字段最小宽度250px
|
||||
49880 计划富文本框中的格式在计划列表描述中格式有误
|
||||
49696 专业研发看板中任务泳道实现导入Bug功能
|
||||
49695 专业研发看板中实现任务的更多操作功能
|
||||
49694 专业研发看板中实现Bug的更多操作功能
|
||||
49693 专业研发看板中实现需求的更多操作功能
|
||||
49692 设置空间页面增加空间类型的调整
|
||||
49318 从用例库导入用例,确认页面分支平台栏默认同上
|
||||
49303 计划未开启分支功能时,可根据浏览器高度自适应显示看板高度
|
||||
49302 计划列表增加批量调整状态功能
|
||||
49301 经典模式下项目列表标签后显示项目数量
|
||||
49299 执行关联了多个产品时,在所有产品条件下不提供批量创建需求功能
|
||||
49298 看板关联了多个产品时,在批量提需求页面中提供产品的选择功能
|
||||
49297 专业研发看板在批量提交Bug页面的多产品时,提供产品的选择功能
|
||||
49296 添加需求页面增加所属父需求的下拉选项
|
||||
49295 系统头像中无头像时显示具体的人名
|
||||
49294 已提交评审的需求在详情页中增加撤销评审按钮
|
||||
49293 调整需求变更后消息通知的范围
|
||||
49292 项目选择重新定义权限时创建者和负责人取系统权限
|
||||
49289 计划详情信息中增加计划状态字段
|
||||
49286 可以将保存的搜索条件设置为公共搜索条件
|
||||
49285 通过编号搜索时可以指定多个ID进行检索
|
||||
49284 搜索中增加加激活日期的条件
|
||||
49283 列表中优先级P鼠标悬浮时显示为优先级
|
||||
49282 执行看板中对延期执行增加已延期标识
|
||||
49281 批量创建需求页面由谁评审可以默认选择同上
|
||||
49280 项目看板中对延期项目增加已延期标识
|
||||
修复 Bug
|
||||
19646 导入的Jira数据查看执行的研发需求、设置报错
|
||||
19639 导入的Jira数据任务下没有显示相关的附件
|
||||
19614 从文件导入Jira数据时,不导入文件点击下一步后无法继续进行
|
||||
19592 编辑需求概念弹窗保存成功提示信息样式需调整下
|
||||
19565 不清空tmp下的jirafile重新导入新的数据库会有代码报错
|
||||
19557 创建产品报错
|
||||
19506 提交测试页面中相关测试报告只能选择当前版本下的测试报告
|
||||
19471 项目集添加干系人页面显示不正确
|
||||
19445 待处理下鼠标悬浮Bug标题title显示不全
|
||||
19408 多分支产品导出用例模板错误
|
||||
19389 看板项目中的看板新增区域选择复制自定义的区域报错
|
||||
19383 集成GitLab后只能同步到1000个项目
|
||||
19335 php74下进入GitLab项目列表报错
|
||||
19327 研发看板下按计划关联需求页面“迭代”文案不合理
|
||||
19323 用户名包含特殊字符,例如 . ,更换头像后,点保存不自动跳转
|
||||
19307 项目左上角下拉框内已关闭的看板项目标题 展示不正确
|
||||
19306 地盘日程添加任务、bug待办点击完成界面报错
|
||||
19255 看板创建Bug显示所属执行
|
||||
19249 需求概念设置页面样式不正确
|
||||
19161 归档功能默认不启用
|
||||
19137 无法设置禅道主题
|
||||
18741 待评审需求,编辑页面没有带入关闭原因
|
||||
18305 地盘创建Bug类型的日程开始待办提示Todo
|
||||
17338 无权限提示,显示为英文
|
||||
17336 项目关联研发需求时显示已关联的需求
|
||||
17312 保存和返回按钮没表单居中
|
||||
|
||||
2022-02-15 16.4
|
||||
完成的需求
|
||||
30526 实现JIRA数据导入到禅道功能
|
||||
|
||||
@@ -263,3 +263,35 @@ $lang->createObjects['execution'] = 'TaskKanban';
|
||||
$lang->createObjects['kanban'] = 'Kanban';
|
||||
|
||||
$lang->createIcons['execution'] = 'kanban';
|
||||
|
||||
/* Xuan */
|
||||
global $config;
|
||||
if(isset($config->xuanxuan) && strpos($config->visions, ',rnd,') === false)
|
||||
{
|
||||
$lang->xuanxuan = new stdclass();
|
||||
$lang->admin->menu->xuanxuan = array('link' => 'Chat|admin|xuanxuan', 'subModule' => 'client,setting');
|
||||
$lang->admin->menuOrder[6] = 'xuanxuan';
|
||||
|
||||
$lang->admin->menu->xuanxuan['subMenu'] = new stdclass();
|
||||
$lang->admin->menu->xuanxuan['subMenu']->index = array('link' => 'Home|admin|xuanxuan');
|
||||
$lang->admin->menu->xuanxuan['subMenu']->setting = array('link' => 'Parameter|setting|xuanxuan');
|
||||
$lang->admin->menu->xuanxuan['subMenu']->update = array('link' => 'Update|client|browse', 'subModule' => 'client');
|
||||
|
||||
$lang->admin->menu->xuanxuan['menuOrder'][0] = 'index';
|
||||
$lang->admin->menu->xuanxuan['menuOrder'][5] = 'setting';
|
||||
$lang->admin->menu->xuanxuan['menuOrder'][10] = 'update';
|
||||
|
||||
if($config->edition != 'open')
|
||||
{
|
||||
$lang->admin->menu->xuanxuan['subModule'] = 'client,setting,conference';
|
||||
$lang->admin->menu->xuanxuan['subMenu']->conference = array('link' => 'Conference|conference|admin');
|
||||
$lang->admin->menu->xuanxuan['menuOrder'][7] = 'conference';
|
||||
$lang->navGroup->conference = 'admin';
|
||||
}
|
||||
|
||||
$lang->navGroup->im = 'admin';
|
||||
$lang->navGroup->setting = 'admin';
|
||||
$lang->navGroup->client = 'admin';
|
||||
|
||||
$lang->confirmDelete = 'Do you want to delete it?';
|
||||
}
|
||||
|
||||
@@ -263,3 +263,35 @@ $lang->createObjects['execution'] = '任务看板';
|
||||
$lang->createObjects['kanban'] = '通用看板';
|
||||
|
||||
$lang->createIcons['execution'] = 'kanban';
|
||||
|
||||
/* Xuan */
|
||||
global $config;
|
||||
if(isset($config->xuanxuan) && strpos($config->visions, ',rnd,') === false)
|
||||
{
|
||||
$lang->xuanxuan = new stdclass();
|
||||
$lang->admin->menu->xuanxuan = array('link' => '聊天|admin|xuanxuan', 'subModule' => 'client,setting');
|
||||
$lang->admin->menuOrder[6] = 'xuanxuan';
|
||||
|
||||
$lang->admin->menu->xuanxuan['subMenu'] = new stdclass();
|
||||
$lang->admin->menu->xuanxuan['subMenu']->index = array('link' => '首页|admin|xuanxuan');
|
||||
$lang->admin->menu->xuanxuan['subMenu']->setting = array('link' => '参数|setting|xuanxuan');
|
||||
$lang->admin->menu->xuanxuan['subMenu']->update = array('link' => '更新|client|browse', 'subModule' => 'client');
|
||||
|
||||
$lang->admin->menu->xuanxuan['menuOrder'][0] = 'index';
|
||||
$lang->admin->menu->xuanxuan['menuOrder'][5] = 'setting';
|
||||
$lang->admin->menu->xuanxuan['menuOrder'][10] = 'update';
|
||||
|
||||
if($config->edition != 'open')
|
||||
{
|
||||
$lang->admin->menu->xuanxuan['subModule'] = 'client,setting,conference';
|
||||
$lang->admin->menu->xuanxuan['subMenu']->conference = array('link' => '音视频|conference|admin');
|
||||
$lang->admin->menu->xuanxuan['menuOrder'][7] = 'conference';
|
||||
$lang->navGroup->conference = 'admin';
|
||||
}
|
||||
|
||||
$lang->navGroup->im = 'admin';
|
||||
$lang->navGroup->setting = 'admin';
|
||||
$lang->navGroup->client = 'admin';
|
||||
|
||||
$lang->confirmDelete = '您确定要执行删除操作吗?';
|
||||
}
|
||||
|
||||
@@ -127,13 +127,20 @@ public function getTRActions($currentMethod)
|
||||
|
||||
foreach($subMenu as $key => $value)
|
||||
{
|
||||
$tmpValue = explode('|', $value['link']);
|
||||
$subMenu->{$key}['name'] = $tmpValue[0];
|
||||
$subMenu->{$key}['module'] = $tmpValue[1];
|
||||
$subMenu->{$key}['method'] = $tmpValue[2];
|
||||
$subMenu->{$key}['vars'] = $tmpValue[3];
|
||||
if(common::hasPriv('execution', $key))
|
||||
{
|
||||
$tmpValue = explode('|', $value['link']);
|
||||
$subMenu->{$key}['name'] = $tmpValue[0];
|
||||
$subMenu->{$key}['module'] = $tmpValue[1];
|
||||
$subMenu->{$key}['method'] = $tmpValue[2];
|
||||
$subMenu->{$key}['vars'] = $tmpValue[3];
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($subMenu->$key);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$TRActions = '';
|
||||
$TRActions .= "<div class='btn-group dropdown'>";
|
||||
$TRActions .= html::a("javascript:;", "<i class='icon icon-" . $this->lang->execution->icons[$currentMethod]."'> </i>" . $subMenu->{$currentMethod}['name'] . " <span class='caret'></span>", '', "class='btn btn-link' data-toggle='dropdown'");
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
<?php
|
||||
|
||||
global $config;
|
||||
|
||||
/* Module order. */
|
||||
$lang->moduleOrder = array();
|
||||
|
||||
@@ -35,8 +38,27 @@ $lang->moduleOrder[200] = 'backup';
|
||||
$lang->moduleOrder[205] = 'cron';
|
||||
$lang->moduleOrder[215] = 'message';
|
||||
|
||||
/* Backup xuan related stuff. */
|
||||
if(isset($config->xuanxuan))
|
||||
{
|
||||
$imResource = $lang->resource->im;
|
||||
$clientResource = $lang->resource->client;
|
||||
$settingResource = $lang->resource->setting;
|
||||
}
|
||||
|
||||
/* Reset resource. */
|
||||
$lang->resource = new stdclass();
|
||||
|
||||
/* Reapply xuan stuff. */
|
||||
if(isset($config->xuanxuan))
|
||||
{
|
||||
$lang->resource->im = $imResource;
|
||||
$lang->resource->client = $clientResource;
|
||||
$lang->resource->setting = $settingResource;
|
||||
$lang->admin->methodOrder[26] = 'xuanxuan';
|
||||
$lang->setting->methodOrder[26] = 'xuanxuan';
|
||||
}
|
||||
|
||||
/* Index module. */
|
||||
$lang->resource->index = new stdclass();
|
||||
$lang->resource->index->index = 'index';
|
||||
@@ -127,7 +149,6 @@ $lang->personnel->methodOrder[15] = 'whitelist';
|
||||
$lang->personnel->methodOrder[20] = 'addWhitelist';
|
||||
$lang->personnel->methodOrder[25] = 'unbindWhitelist';
|
||||
|
||||
global $config;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->resource->my->project = 'project';
|
||||
@@ -444,6 +465,8 @@ $lang->resource->execution->unbindWhitelist = 'unbindWhitelist';
|
||||
//$lang->resource->execution->storyEstimate = 'storyEstimate';
|
||||
$lang->resource->execution->kanban = 'kanban';
|
||||
//if($config->systemMode == 'classic') $lang->resource->project->list = 'list';
|
||||
if($config->edition != 'open') $lang->resource->execution->gantt = 'ganttchart';
|
||||
if($config->edition != 'open') $lang->resource->execution->calendar = 'calendar';
|
||||
|
||||
//$lang->execution->methodOrder[0] = 'index';
|
||||
//if($config->systemMode == 'classic') $lang->project->methodOrder[1] = 'list';
|
||||
@@ -498,6 +521,8 @@ $lang->execution->methodOrder[250] = 'addWhitelist';
|
||||
$lang->execution->methodOrder[255] = 'unbindWhitelist';
|
||||
$lang->execution->methodOrder[260] = 'storyEstimate';
|
||||
$lang->execution->methodOrder[270] = 'kanban';
|
||||
$lang->execution->methodOrder[280] = 'gantt';
|
||||
$lang->execution->methodOrder[285] = 'calendar';
|
||||
|
||||
/* Task. */
|
||||
$lang->resource->task = new stdclass();
|
||||
@@ -791,6 +816,11 @@ $lang->admin->methodOrder[20] = 'sso';
|
||||
$lang->admin->methodOrder[25] = 'register';
|
||||
$lang->admin->methodOrder[30] = 'ztCompany';
|
||||
|
||||
if(isset($config->xuanxuan))
|
||||
{
|
||||
$lang->resource->admin->xuanxuan = 'xuanxuan';
|
||||
}
|
||||
|
||||
/* Extension. */
|
||||
$lang->resource->extension = new stdclass();
|
||||
$lang->resource->extension->browse = 'browseAction';
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php if($config->edition == 'biz' && $config->vision == 'lite' && trim($config->visions, ',') != 'lite'):?>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('#globalBarLogo a').eq(1).attr('title', '<?php echo str_replace('biz', $lang->bizName . ' ', $config->version);?>');
|
||||
$('#globalBarLogo a .version').html('<?php echo ' ' . str_replace('biz', $lang->bizName . ' ', $config->version);?>');
|
||||
$('#globalBarLogo a .upgrade').html('<?php echo $lang->maxName;?>');
|
||||
})
|
||||
</script>
|
||||
<?php elseif($config->edition == 'max' && $config->vision == 'lite' && trim($config->visions, ',') != 'lite'):?>
|
||||
<script>
|
||||
$(function()
|
||||
{
|
||||
$('#globalBarLogo a').eq(1).attr('title', '<?php echo str_replace('max', $lang->maxName . ' ', $config->version);?>');
|
||||
$('#globalBarLogo a .version').html('<?php echo ' ' . str_replace('max', $lang->maxName . ' ', $config->version);?>');
|
||||
$('#globalBarLogo a .upgrade').html('<?php echo $lang->upgrade->common;?>');
|
||||
})
|
||||
</script>
|
||||
<?php endif;?>
|
||||
@@ -1,4 +1,3 @@
|
||||
<script>
|
||||
$('#zentaoLinks > .row > .col-sm-2').removeClass('col-sm-2').addClass('col-sm-4');
|
||||
$('#mainContent tbody > tr:first-child > td.text-center > h4').text('<?php printf($lang->misc->zentao->version, $config->liteVersion);?>');
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
<script>
|
||||
$('#plansBox').parent().remove();
|
||||
</script>
|
||||
@@ -37,8 +37,20 @@
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class='kanban-cards'>
|
||||
<?php
|
||||
$kanbanview = 'kanban';
|
||||
if($this->cookie->kanbanview) $kanbanview = $this->cookie->kanbanview;
|
||||
|
||||
if(!common::hasPriv('execution', $kanbanview))
|
||||
{
|
||||
foreach (explode('|', 'kanban|task|calendar|gantt|tree|grouptask') as $view)
|
||||
{
|
||||
if(common::hasPriv('execution', $view)) $kanbanview = $view; break;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php foreach($kanbanList as $index => $kanban):?>
|
||||
<div id="kanban-<?php echo $kanban->id;?>" class='kanban-card col' data-url='<?php echo $this->createLink('execution', $this->cookie->kanbanview ? $this->cookie->kanbanview : 'kanban', "kanbanID=$kanban->id");?>'>
|
||||
<div id="kanban-<?php echo $kanban->id;?>" class='kanban-card col' data-url='<?php echo $this->createLink('execution', $kanbanview, "kanbanID=$kanban->id");?>'>
|
||||
<div class="panel">
|
||||
<div class="panel-heading">
|
||||
<span class="label kanban-status-<?php echo $kanban->status;?>"><?php echo zget($lang->execution->statusList, $kanban->status);?></span>
|
||||
|
||||
@@ -252,7 +252,7 @@ $(function()
|
||||
{
|
||||
for(var num = 1; num <= 10; num++)
|
||||
{
|
||||
$('#lane' + num).replaceWith(data.replace('lane1', 'lane' + num));
|
||||
$('#lane' + num).replaceWith(data.replace('lane1', 'lane' + num).replace('lane[1]', 'lane[' + num + ']'));
|
||||
$('#lane' + num + '_chosen').remove();
|
||||
$('#lane' + num).chosen();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
#
|
||||
#
|
||||
# Parsedown Extra Plugin
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<h2>
|
||||
<?php
|
||||
$versionName = $config->version;
|
||||
if($config->vision == 'lite') $versionName = $lang->liteName . $config->liteVersion;
|
||||
if(trim($config->visions, ',') == 'lite') $versionName = $lang->liteName . $config->liteVersion;
|
||||
printf($lang->admin->info->version, $versionName);
|
||||
if($bind) echo sprintf($lang->admin->info->account, '<span class="red">' . $account . '</span>');
|
||||
echo $lang->admin->info->links;
|
||||
|
||||
@@ -1822,7 +1822,7 @@ class block extends control
|
||||
/* load pager. */
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
$pager = new pager(0, 3, 1);
|
||||
$this->view->projects = $this->loadModel('project')->getInfoList('all', 'id_desc', $pager);
|
||||
$this->view->projects = $this->loadModel('project')->getInfoList('all', 'id_desc', $pager, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -44,8 +44,10 @@
|
||||
<div class='col'>
|
||||
<div class='panel-content'>
|
||||
<div class='panel-heading not-move-handler'>
|
||||
<?php $labelClass = $project->model == 'waterfall' ? 'label-warning' : 'label-info';?>
|
||||
<?php if($config->systemMode == 'new'):?>
|
||||
<?php $labelClass = $project->model == 'waterfall' ? 'label-warning' : 'label-info';?>
|
||||
<span class='project-type-label label <?php echo $labelClass;?> label-outline'><?php echo $lang->project->{$project->model};?></span>
|
||||
<?php endif;?>
|
||||
<strong class='project-name' title='<?php echo $project->name;?>'> <?php echo html::a($viewLink, $project->name);?> </strong>
|
||||
<nav class='panel-actions nav nav-default'>
|
||||
<li class='dropdown'>
|
||||
|
||||
@@ -30,6 +30,7 @@ $lang->zentaoPMS = '禅道';
|
||||
$lang->pmsName = '开源版';
|
||||
$lang->proName = '专业版';
|
||||
$lang->bizName = '企业版';
|
||||
$lang->maxName = '旗舰版';
|
||||
$lang->liteName = '迅捷版';
|
||||
$lang->logoImg = 'zt-logo.png';
|
||||
$lang->welcome = "%s项目管理系统";
|
||||
|
||||
@@ -7,7 +7,7 @@ $.initSidebar();
|
||||
<iframe frameborder='0' name='hiddenwin' id='hiddenwin' scrolling='no' class='debugwin hidden'></iframe>
|
||||
<?php if($onlybody != 'yes' and $app->viewType != 'xhtml'):?>
|
||||
</main><?php /* end '#wrap' in 'header.html.php'. */ ?>
|
||||
<div id="noticeBox"><?php echo $this->loadModel('score')->getNotice(); ?></div>
|
||||
<div id="noticeBox"><?php if($config->vision != 'lite') echo $this->loadModel('score')->getNotice(); ?></div>
|
||||
<script>
|
||||
<?php $this->app->loadConfig('message');?>
|
||||
<?php if($config->message->browser->turnon):?>
|
||||
@@ -73,6 +73,9 @@ if($this->config->vision == 'lite')
|
||||
$extHookFiles = glob($extHookRule);
|
||||
if($extHookFiles) foreach($extHookFiles as $extHookFile) include $extHookFile;
|
||||
}
|
||||
$extHookRule = $extensionRoot . 'custom/common/ext/view/footer.*.hook.php';
|
||||
$extHookFiles = glob($extHookRule);
|
||||
if($extHookFiles) foreach($extHookFiles as $extHookFile) include $extHookFile;
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -204,7 +204,8 @@ class company extends control
|
||||
$pager = new pager($recTotal, $recPerPage = 50, $pageID = 1);
|
||||
|
||||
/* Append id for secend sort. */
|
||||
$orderBy = $direction == 'next' ? 'date_desc' : 'date_asc';
|
||||
if($direction == 'next') $orderBy = 'date_desc';
|
||||
if($direction == 'pre') $orderBy = 'date_asc';
|
||||
|
||||
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
|
||||
$date = empty($date) ? '' : date('Y-m-d', $date);
|
||||
@@ -288,7 +289,6 @@ class company extends control
|
||||
$this->view->pager = $pager;
|
||||
$this->view->userID = $userID;
|
||||
$this->view->param = $param;
|
||||
$this->view->browseType = $browseType;
|
||||
$this->view->dateGroups = $this->action->buildDateGroup($actions, $direction, $browseType, $orderBy);
|
||||
$this->view->direction = $direction;
|
||||
$this->display();
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
$('#account, #product, #project, #execution, #orderBy').change(function()
|
||||
{
|
||||
var userID = $('#account').val();
|
||||
var productID = $('#product').val();
|
||||
var productID = $('#product').length ? $('#product').val() : 0;
|
||||
var projectID = systemMode == 'new' ? $('#project').val() : 0;
|
||||
var executionID = $('#execution').val();
|
||||
var orderBy = $('#orderBy').val();
|
||||
|
||||
browseType = browseType == 'bysearch' ? 'all' : browseType;
|
||||
link = createLink('company', 'dynamic', 'browseType=' + browseType + '¶m=&recTotal=0&date=&direction=next&userID=' + userID + '&productID=' + productID + '&projectID=' + projectID + '&executionID=' + executionID + '&orderBy=' + orderBy);
|
||||
link = createLink('company', 'dynamic', 'browseType=' + browseType + '¶m=&recTotal=0&date=&direction=no&userID=' + userID + '&productID=' + productID + '&projectID=' + projectID + '&executionID=' + executionID + '&orderBy=' + orderBy);
|
||||
location.href = link;
|
||||
})
|
||||
|
||||
@@ -233,13 +233,15 @@ $('.c-group').change(function()
|
||||
*/
|
||||
function createLaneMenu(options)
|
||||
{
|
||||
var lane = options.$trigger.closest('.kanban-lane').data('lane');
|
||||
var lane = options.$trigger.closest('.kanban-lane').data('lane');
|
||||
var laneCount = options.$trigger.closest('.kanban-board').children('.kanban-lane').length;
|
||||
|
||||
var privs = lane.actions;
|
||||
if(!privs.length) return [];
|
||||
|
||||
var items = [];
|
||||
if(privs.includes('setLane')) items.push({label: kanbanLang.setLane, icon: 'edit', url: createLink('kanban', 'setLane', 'laneID=' + lane.id + '&executionID=0&from=kanban'), className: 'iframe', attrs: {'data-toggle': 'modal', 'data-width': '635px'}});
|
||||
if(privs.includes('deleteLane')) items.push({label: kanbanLang.deleteLane, icon: 'trash', url: createLink('kanban', 'deleteLane', 'lane=' + lane.id), attrs: {'target': 'hiddenwin'}});
|
||||
if(privs.includes('deleteLane') && laneCount > 1) items.push({label: kanbanLang.deleteLane, icon: 'trash', url: createLink('kanban', 'deleteLane', 'lane=' + lane.id), attrs: {'target': 'hiddenwin'}});
|
||||
|
||||
var bounds = options.$trigger[0].getBoundingClientRect();
|
||||
items.$options = {x: bounds.right, y: bounds.top};
|
||||
|
||||
@@ -246,7 +246,10 @@ class executionModel extends model
|
||||
$executionID = (int)$this->cookie->lastExecution;
|
||||
$executionID = in_array($executionID, array_keys($executions)) ? $executionID : key($executions);
|
||||
}
|
||||
if($executionID == 0 and $this->session->execution == '') $executionID = key($executions);
|
||||
|
||||
if($executionID == 0 and $this->session->execution) $executionID = $this->session->execution;
|
||||
if($executionID == 0) $executionID = key($executions);
|
||||
|
||||
$this->session->set('execution', (int)$executionID, $this->app->tab);
|
||||
|
||||
if(!isset($executions[$executionID]))
|
||||
@@ -683,12 +686,12 @@ class executionModel extends model
|
||||
$projectID = isset($execution->project) ? $execution->project : $oldExecution->project;
|
||||
$project = $this->project->getByID($projectID);
|
||||
|
||||
if($execution->begin < $project->begin)
|
||||
if($project and $execution->begin < $project->begin)
|
||||
{
|
||||
dao::$errors['begin'] = sprintf($this->lang->execution->errorLetterProject, $project->begin);
|
||||
return false;
|
||||
}
|
||||
if($execution->end > $project->end)
|
||||
if($project and $execution->end > $project->end)
|
||||
{
|
||||
dao::$errors['end'] = sprintf($this->lang->execution->errorGreaterProject, $project->end);
|
||||
return false;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*/
|
||||
?>
|
||||
<?php if(isset($tips)):?>
|
||||
<?php $defaultURL = $this->createLink('execution', 'all');?>
|
||||
<?php $defaultURL = $this->createLink('execution', 'task', "execution=$executionID");?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<body>
|
||||
<div class='modal-dialog mw-500px' id='tipsModal'>
|
||||
|
||||
@@ -645,6 +645,7 @@
|
||||
if(!defaultOpenUrl && location.hash.indexOf('#app=') === 0)
|
||||
{
|
||||
defaultOpenUrl = decodeURIComponent(location.hash.substr(5));
|
||||
if(defaultOpenUrl.indexOf('#app=') < 0) defaultOpenUrl += '#app=' + ($.cookie('tab') ? $.cookie('tab') : defaultApp);
|
||||
}
|
||||
|
||||
openTab(defaultOpenUrl ? defaultOpenUrl : defaultApp);
|
||||
|
||||
@@ -82,7 +82,7 @@ js::set('showFeatures', $showFeatures);
|
||||
<ul id='bars' class='nav nav-default'></ul>
|
||||
<div id='poweredBy'>
|
||||
<div id="globalBarLogo">
|
||||
<?php if($config->vision == 'lite'):?>
|
||||
<?php if(trim($config->visions, ',') == 'lite'):?>
|
||||
<?php $version = $config->liteVersion;?>
|
||||
<?php $versionName = $lang->liteName . $config->liteVersion;?>
|
||||
<?php else:?>
|
||||
|
||||
@@ -97,6 +97,7 @@ $lang->misc->feature->themeDesc = '<p>ZenTao 15.0+ a new "Youth Blue" theme
|
||||
$lang->misc->feature->visionsDesc = "<p>The concept of interface has been added since 16.5. Users can deal with R & D affairs in <span style='color: #0c60e1'>[R&D]</span> and daily office affairs in <span style='color: #0c60e1'>[Lite]</span>.</p><p>You can view the current interface on the avatar, and click the name of the interface to view and switch other interfaces.</p>";
|
||||
$lang->misc->feature->visionsImage = 'theme/default/images/main/visions_en.png';
|
||||
|
||||
$lang->misc->releaseDate['16.5'] = '2022-03-24';
|
||||
$lang->misc->releaseDate['16.5.beta1'] = '2022-03-16';
|
||||
$lang->misc->releaseDate['16.4'] = '2022-02-15';
|
||||
$lang->misc->releaseDate['16.3'] = '2022-01-26';
|
||||
@@ -172,6 +173,7 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22';
|
||||
$lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
|
||||
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
|
||||
|
||||
$lang->misc->feature->all['16.5'][] = array('title' => 'Fix bug.', 'desc' => '');
|
||||
$lang->misc->feature->all['16.5.beta1'][] = array('title' => 'Fix bug, merge all code to one package', 'desc' => '');
|
||||
$lang->misc->feature->all['16.4'][] = array('title' => 'Implement JIRA import function and improve plug-in extension mechanism.', 'desc' => '');
|
||||
$lang->misc->feature->all['16.3'][] = array('title' => 'Kanban adds related plan/release/version/iteration functions, and the detail experience is optimized, fix bugs.', 'desc' => '');
|
||||
|
||||
@@ -97,6 +97,7 @@ $lang->misc->feature->themeDesc = "<p>禅道15系列上线了全新的“
|
||||
$lang->misc->feature->visionsDesc = "<p>从16.5开始增加了界面概念,用户可以在<span style='color:#0c60e1'>[研发综合界面]</span>中处理研发事务、在<span style='color:#0c60e1'>[迅捷界面]</span>处理日常办公事务。</p><p>在头像右侧即可查看当前所处界面,点击当前界面名称可查看和切换其他的界面。</p>";
|
||||
$lang->misc->feature->visionsImage = 'theme/default/images/main/visions.png';
|
||||
|
||||
$lang->misc->releaseDate['16.5'] = '2022-03-24';
|
||||
$lang->misc->releaseDate['16.5.beta1'] = '2022-03-16';
|
||||
$lang->misc->releaseDate['16.4'] = '2022-02-15';
|
||||
$lang->misc->releaseDate['16.3'] = '2022-01-26';
|
||||
@@ -172,6 +173,7 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22';
|
||||
$lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
|
||||
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
|
||||
|
||||
$lang->misc->feature->all['16.5'][] = array('title' => '修复Bug。', 'desc' => '');
|
||||
$lang->misc->feature->all['16.5.beta1'][] = array('title' => '将禅道收费版和开源版集成到一个包中,优化升级步骤。', 'desc' => '');
|
||||
$lang->misc->feature->all['16.4'][] = array('title' => '实现JIRA导入功能,完善插件扩展机制。', 'desc' => '');
|
||||
$lang->misc->feature->all['16.3'][] = array('title' => '看板增加关联计划/发布/版本/迭代功能,细节体验优化。', 'desc' => '');
|
||||
|
||||
@@ -9,7 +9,13 @@
|
||||
<tr>
|
||||
<td class='text-center w-160px'>
|
||||
<img src='<?php echo $config->webRoot . 'theme/default/images/main/' . $lang->logoImg;?>' />
|
||||
<h4><?php printf($lang->misc->zentao->version, $config->version);?></h4>
|
||||
<h4>
|
||||
<?php if(trim($config->visions, ',') == 'lite'):?>
|
||||
<?php printf($lang->misc->zentao->version, $config->liteVersion); ?>
|
||||
<?php else:?>
|
||||
<?php printf($lang->misc->zentao->version, $config->version); ?>
|
||||
<?php endif;?>
|
||||
</h4>
|
||||
</td>
|
||||
<td><?php include './links.html.php';?></td>
|
||||
</tr>
|
||||
|
||||
@@ -53,7 +53,8 @@ class project extends control
|
||||
unset($fields[$key]);
|
||||
}
|
||||
|
||||
$projects = $this->project->getInfoList($status, $orderBy);
|
||||
$involved = $this->cookie->involved ? $this->cookie->involved : 0;
|
||||
$projects = $this->project->getInfoList($status, $orderBy, '', $involved);
|
||||
$users = $this->loadModel('user')->getPairs('noletter');
|
||||
|
||||
$this->loadModel('product');
|
||||
|
||||
@@ -182,7 +182,11 @@ class projectModel extends model
|
||||
{
|
||||
if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProject();
|
||||
|
||||
$project = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($projectID)->andWhere('`type`')->in($type)->fetch();
|
||||
$project = $this->dao->select('*')->from(TABLE_PROJECT)
|
||||
->where('id')->eq($projectID)
|
||||
->beginIF($this->config->system == 'new')->andWhere('`type`')->in($type)->fi()
|
||||
->fetch();
|
||||
|
||||
if(!$project) return false;
|
||||
|
||||
if($project->end == '0000-00-00') $project->end = '';
|
||||
@@ -196,13 +200,14 @@ class projectModel extends model
|
||||
* @param string $status
|
||||
* @param string $orderBy
|
||||
* @param int $pager
|
||||
* @param int $involved
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getInfoList($status = 'undone', $orderBy = 'order_desc', $pager = null)
|
||||
public function getInfoList($status = 'undone', $orderBy = 'order_desc', $pager = null, $involved = 0)
|
||||
{
|
||||
/* Init vars. */
|
||||
$projects = $this->loadModel('program')->getProjectList(0, $status, 0, $orderBy, $pager, 0, 1);
|
||||
$projects = $this->loadModel('program')->getProjectList(0, $status, 0, $orderBy, $pager, 0, $involved);
|
||||
if(empty($projects)) return array();
|
||||
|
||||
$projectIdList = array_keys($projects);
|
||||
|
||||
@@ -92,8 +92,8 @@
|
||||
</td>
|
||||
<td colspan='2'><?php echo html::radio('delta', $lang->project->endList , '', "onclick='computeEndDate(this.value)'");?></td>
|
||||
</tr>
|
||||
<?php $hiddenDays = $model == 'scrum' ? '' : 'hidden';?>
|
||||
<tr id='daysBox' class="<?php echo $hiddenDays;?>">
|
||||
<?php if($model == 'scrum'):?>
|
||||
<tr id='daysBox'>
|
||||
<th><?php echo $lang->execution->days;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
@@ -102,6 +102,7 @@
|
||||
</div>
|
||||
</td><td></td><td></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th id='productTitle'><?php echo $lang->project->manageProducts;?></th>
|
||||
<td class='text-left' id='productsBox' colspan="3">
|
||||
|
||||
@@ -103,8 +103,8 @@
|
||||
<?php $deltaValue = $project->end == LONG_TIME ? 999 : (strtotime($project->end) - strtotime($project->begin)) / 3600 / 24 + 1;?>
|
||||
<td colspan='2'><?php echo html::radio('delta', $lang->project->endList , $deltaValue, "onclick='computeEndDate(this.value)'");?></td>
|
||||
</tr>
|
||||
<?php $hidden = ($model != 'scrum' or $project->end == LONG_TIME) ? "class='hidden'" : '';?>
|
||||
<tr id='daysBox' <?php echo $hidden;?>>
|
||||
<?php if($project->model == 'scrum'):?>
|
||||
<tr id='daysBox' <?php if($project->end == LONG_TIME) echo "class='hidden'";?>>
|
||||
<th><?php echo $lang->project->days;?></th>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
@@ -115,6 +115,7 @@
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->project->manageProducts;?></th>
|
||||
<td class='text-left' id='productsBox' colspan="3">
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
<td><?php echo html::input('realBegan', helper::today(), "class='form-control form-date'");?></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<?php $this->printExtendFields($project, 'table', 'columns=3');?>
|
||||
<tr>
|
||||
<th class='w-40px'><?php echo $lang->comment;?></th>
|
||||
<td colspan='2'><?php echo html::textarea('comment', '', "rows='6' class='form-control kindeditor' hidefocus='true'");?></td>
|
||||
|
||||
@@ -81,6 +81,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12">
|
||||
<div class='panel'>
|
||||
<?php $this->printExtendFields($project, 'div', "position=left&inForm=0");?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12">
|
||||
<?php $blockHistory = true;?>
|
||||
<?php $actionFormLink = $this->createLink('action', 'comment', "objectType=project&objectID=$project->id");?>
|
||||
@@ -235,8 +240,8 @@
|
||||
<p><?php echo $aclList[$project->acl];?></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php $this->printExtendFields($project, 'div', "position=right&inForm=0&inCell=1");?>
|
||||
</div>
|
||||
<?php $this->printExtendFields($project, 'div', "position=right&inForm=0&inCell=1");?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2502,7 +2502,7 @@ class story extends control
|
||||
$story->reviewedBy = rtrim($story->reviewedBy, ',');
|
||||
|
||||
/* Set child story title. */
|
||||
if($story->parent > 0 && strpos($story->title, htmlentities('>'), ENT_COMPAT | ENT_HTML401, 'UTF-8') !== 0) $story->title = '>' . $story->title;
|
||||
if($story->parent > 0 && strpos($story->title, htmlentities('>', ENT_COMPAT | ENT_HTML401, 'UTF-8')) !== 0) $story->title = '>' . $story->title;
|
||||
}
|
||||
|
||||
if($executionID)
|
||||
|
||||
@@ -23,6 +23,7 @@ class todo extends control
|
||||
$this->app->loadClass('date');
|
||||
$this->loadModel('task');
|
||||
$this->loadModel('bug');
|
||||
$this->app->loadLang('my');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,6 +14,7 @@ $config->upgrade->maxVersion['max2_6'] = '16_2';
|
||||
$config->upgrade->maxVersion['max2_7'] = '16_3';
|
||||
$config->upgrade->maxVersion['max2_8'] = '16_4';
|
||||
$config->upgrade->maxVersion['max3_0_beta1'] = '16_5_beta1';
|
||||
$config->upgrade->maxVersion['max3_0'] = '16_5';
|
||||
|
||||
$config->upgrade->bizVersion = array();
|
||||
$config->upgrade->bizVersion['biz1_0'] = '9_5_1';
|
||||
@@ -66,6 +67,7 @@ $config->upgrade->bizVersion['biz6_2'] = '16_2';
|
||||
$config->upgrade->bizVersion['biz6_3'] = '16_3';
|
||||
$config->upgrade->bizVersion['biz6_4'] = '16_4';
|
||||
$config->upgrade->bizVersion['biz6_5_beta1'] = '16_5_beta1';
|
||||
$config->upgrade->bizVersion['biz6_5'] = '16_5';
|
||||
|
||||
$config->upgrade->proVersion = array();
|
||||
$config->upgrade->proVersion['pro1_0'] = '3_1';
|
||||
|
||||
@@ -400,8 +400,8 @@ class upgrade extends control
|
||||
}
|
||||
|
||||
/* Get no merged product and project count. */
|
||||
$noMergedProductCount = $this->dao->select('count(*) as count')->from(TABLE_PRODUCT)->where('program')->eq(0)->fetch('count');
|
||||
$noMergedSprintCount = $this->dao->select('count(*) as count')->from(TABLE_PROJECT)->where('grade')->eq(0)->andWhere('path')->eq('')->andWhere('type')->ne('program')->andWhere('deleted')->eq(0)->fetch('count');
|
||||
$noMergedProductCount = $this->dao->select('count(*) as count')->from(TABLE_PRODUCT)->where('program')->eq(0)->andWhere('vision')->eq('rnd')->fetch('count');
|
||||
$noMergedSprintCount = $this->dao->select('count(*) as count')->from(TABLE_PROJECT)->where('grade')->eq(0)->andWhere('vision')->eq('rnd')->andWhere('path')->eq('')->andWhere('type')->ne('program')->andWhere('deleted')->eq(0)->fetch('count');
|
||||
|
||||
/* When all products and projects merged then finish and locate afterExec page. */
|
||||
if(empty($noMergedProductCount) and empty($noMergedSprintCount))
|
||||
@@ -432,13 +432,14 @@ class upgrade extends control
|
||||
{
|
||||
$productlines = $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('line')->andWhere('root')->eq(0)->orderBy('id_desc')->fetchAll('id');
|
||||
|
||||
$noMergedProducts = $this->dao->select('*')->from(TABLE_PRODUCT)->where('line')->in(array_keys($productlines))->orderBy('id_desc')->fetchAll('id');
|
||||
$noMergedProducts = $this->dao->select('*')->from(TABLE_PRODUCT)->where('line')->in(array_keys($productlines))->andWhere('vision')->eq('rnd')->orderBy('id_desc')->fetchAll('id');
|
||||
if(empty($productlines) || empty($noMergedProducts)) $this->locate($this->createLink('upgrade', 'mergeProgram', "type=product&programID=0&projectType=$projectType"));
|
||||
|
||||
$noMergedSprints = $this->dao->select('t1.*')->from(TABLE_PROJECT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id=t2.project')
|
||||
->where('t1.project')->eq(0)
|
||||
->andWhere('t1.deleted')->eq(0)
|
||||
->andWhere('t1.vision')->eq('rnd')
|
||||
->andWhere('t1.type')->eq('sprint')
|
||||
->andWhere('t2.product')->in(array_keys($noMergedProducts))
|
||||
->orderBy('t1.id_desc')
|
||||
@@ -483,6 +484,7 @@ class upgrade extends control
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id')
|
||||
->where('t2.model')->eq('')
|
||||
->andWhere('t2.project')->eq(0)
|
||||
->andWhere('t2.vision')->eq('rnd')
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->andWhere('t2.type')->eq('sprint')
|
||||
->fetchAll('id');
|
||||
@@ -503,10 +505,11 @@ class upgrade extends control
|
||||
$noMergedProducts = $this->dao->select('t1.*')->from(TABLE_PRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id=t2.product')
|
||||
->where('t2.project')->in(array_keys($noMergedSprints))
|
||||
->andWhere('t1.vision')->eq('rnd')
|
||||
->fetchAll('id');
|
||||
|
||||
/* Add products without sprints. */
|
||||
$noMergedProducts += $this->dao->select('*')->from(TABLE_PRODUCT)->where('program')->eq(0)->fetchAll('id');
|
||||
$noMergedProducts += $this->dao->select('*')->from(TABLE_PRODUCT)->where('program')->eq(0)->andWhere('vision')->eq('rnd')->fetchAll('id');
|
||||
|
||||
if(empty($noMergedProducts)) $this->locate($this->createLink('upgrade', 'mergeProgram', "type=sprint&programID=0&projectType=$projectType"));
|
||||
|
||||
@@ -531,6 +534,7 @@ class upgrade extends control
|
||||
$noMergedSprints = $this->dao->select('*')->from(TABLE_PROJECT)
|
||||
->where('parent')->eq(0)
|
||||
->andWhere('path')->eq('')
|
||||
->andWhere('vision')->eq('rnd')
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy('id_desc')
|
||||
->fetchAll('id');
|
||||
@@ -548,6 +552,7 @@ class upgrade extends control
|
||||
{
|
||||
$noMergedSprints = $this->dao->select('*')->from(TABLE_PROJECT)
|
||||
->where('parent')->eq(0)
|
||||
->andWhere('vision')->eq('rnd')
|
||||
->andWhere('path')->eq('')
|
||||
->andWhere('deleted')->eq(0)
|
||||
->orderBy('id_desc')
|
||||
@@ -566,6 +571,7 @@ class upgrade extends control
|
||||
$projects = $this->dao->select('t1.*,t2.product as productID')->from(TABLE_PROJECT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id=t2.project')
|
||||
->where('t2.product')->in($productPairs)
|
||||
->andWhere('t1.vision')->eq('rnd')
|
||||
->andWhere('t1.type')->eq('project')
|
||||
->fetchAll('productID');
|
||||
|
||||
@@ -578,7 +584,7 @@ class upgrade extends control
|
||||
if($project) $sprint->projects[$project->id] = $project->name;
|
||||
}
|
||||
|
||||
if(!isset($sprint->projects)) $sprint->projects = $this->dao->select('id,name')->from(TABLE_PROJECT)->where('type')->eq('project')->fetchPairs();
|
||||
if(!isset($sprint->projects)) $sprint->projects = $this->dao->select('id,name')->from(TABLE_PROJECT)->where('type')->eq('project')->andWhere('vision')->eq('rnd')->fetchPairs();
|
||||
}
|
||||
|
||||
$this->view->noMergedSprints = $noMergedSprints;
|
||||
|
||||
@@ -155,6 +155,7 @@ $lang->upgrade->fromVersions['16_2'] = '16.2';
|
||||
$lang->upgrade->fromVersions['16_3'] = '16.3';
|
||||
$lang->upgrade->fromVersions['16_4'] = '16.4';
|
||||
$lang->upgrade->fromVersions['16_5_beta1'] = '16.5.beta1';
|
||||
$lang->upgrade->fromVersions['16_5'] = '16.5';
|
||||
|
||||
/* Pro. */
|
||||
$lang->upgrade->fromVersions['pro1_0'] = 'Pro1.0';
|
||||
@@ -308,6 +309,7 @@ $lang->upgrade->fromVersions['biz6_2'] = 'Biz6.2';
|
||||
$lang->upgrade->fromVersions['biz6_3'] = 'Biz6.3';
|
||||
$lang->upgrade->fromVersions['biz6_4'] = 'Biz6.4';
|
||||
$lang->upgrade->fromVersions['biz6_5_beta1'] = 'Biz6.5.beta1';
|
||||
$lang->upgrade->fromVersions['biz6_5'] = 'Biz6.5';
|
||||
|
||||
/* Max. */
|
||||
$lang->upgrade->fromVersions['max2_0_beta4'] = 'Max2.0.beta4';
|
||||
@@ -323,3 +325,4 @@ $lang->upgrade->fromVersions['max2_5'] = 'Max2.5';
|
||||
$lang->upgrade->fromVersions['max2_6'] = 'Max2.6';
|
||||
$lang->upgrade->fromVersions['max2_7'] = 'Max2.7';
|
||||
$lang->upgrade->fromVersions['max2_8'] = 'Max2.8';
|
||||
$lang->upgrade->fromVersions['max3_0_beta1'] = 'Max3.0.beta1';
|
||||
|
||||
@@ -917,6 +917,8 @@ class upgradeModel extends model
|
||||
}
|
||||
|
||||
$confirmContent .= file_get_contents($this->getUpgradeFile('16.4'));
|
||||
|
||||
case '16_5_beta1': $confirmContent .= file_get_contents($this->getUpgradeFile('16.5.beta1'));
|
||||
}
|
||||
|
||||
return $confirmContent;
|
||||
@@ -4535,6 +4537,7 @@ class upgradeModel extends model
|
||||
$program->acl = isset($data->programAcl) ? $data->programAcl : 'open';
|
||||
$program->days = $this->computeDaysDelta($program->begin, $program->end);
|
||||
$program->PM = $data->projectType == 'project' ? $data->PM : '';
|
||||
$program->vision = 'rnd';
|
||||
|
||||
$this->app->loadLang('program');
|
||||
$this->app->loadLang('project');
|
||||
@@ -4582,6 +4585,7 @@ class upgradeModel extends model
|
||||
$line->order = $maxOrder;
|
||||
$this->dao->insert(TABLE_MODULE)->data($line)->exec();
|
||||
$lineID = $this->dao->lastInsertID();
|
||||
|
||||
$path = ",$lineID,";
|
||||
$this->dao->update(TABLE_MODULE)->set('path')->eq($path)->where('id')->eq($lineID)->exec();
|
||||
|
||||
|
||||
@@ -2732,8 +2732,6 @@ class userModel extends model
|
||||
{
|
||||
$visionList = $this->lang->visionList;
|
||||
|
||||
if($this->config->systemMode != 'new') unset($visionList['lite']);
|
||||
|
||||
foreach($visionList as $visionKey => $visionName)
|
||||
{
|
||||
if(strpos($this->config->visions, ",{$visionKey},") === false) unset($visionList[$visionKey]);
|
||||
|
||||
@@ -84,9 +84,8 @@
|
||||
<td><?php echo html::input("account[$i]", '', "class='form-control account_$i' onchange='changeEmail($i)'");?></td>
|
||||
<td><?php echo html::input("realname[$i]", '', "class='form-control'");?></td>
|
||||
<?php if($showVisionList):?>
|
||||
<td class="<?php echo $config->systemMode == 'new' ? 'text-left' : 'text-center';?>" style='overflow:visible'>
|
||||
<?php if($config->systemMode == 'new') echo html::select("visions[$i][]", $visionList, $i > 1 ? 'ditto' : (isset($visionList[$this->config->vision]) ? $this->config->vision : key($visionList)), "class='form-control chosen' multiple");?>
|
||||
<?php if($config->systemMode == 'classic') echo $visionList['rnd'] . html::hidden("visions[$i][]", 'rnd');?>
|
||||
<td class='text-left' style='overflow:visible'>
|
||||
<?php echo html::select("visions[$i][]", $visionList, $i > 1 ? 'ditto' : (isset($visionList[$this->config->vision]) ? $this->config->vision : key($visionList)), "class='form-control chosen' multiple");?>
|
||||
</td>
|
||||
<?php else:?>
|
||||
<?php echo html::hidden("visions[$i][]", $this->config->vision);?>
|
||||
|
||||
@@ -86,8 +86,7 @@
|
||||
<td><?php echo html::input("account[$user->id]", $user->account, "class='form-control'");?></td>
|
||||
<td><?php echo html::input("realname[$user->id]", $user->realname, "class='form-control'");?></td>
|
||||
<?php if($showVisionList):?>
|
||||
<td class="<?php echo $config->systemMode == 'new' ? 'text-left' : 'text-center';?>"><?php echo $config->systemMode == 'new' ? html::select("visions[$user->id][]", $visionList, $user->visions, "class='form-control chosen' multiple") : $visionList['rnd'];?></td>
|
||||
<?php if($config->systemMode == 'classic') echo html::hidden("visions[$user->id][]", 'rnd');?>
|
||||
<td class='text-left'><?php echo html::select("visions[$user->id][]", $visionList, $user->visions, "class='form-control chosen' multiple");?></td>
|
||||
<?php else:?>
|
||||
<?php echo html::hidden("visions[$user->id][]", $this->config->vision);?>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -23,6 +23,8 @@ include '../../common/view/header.lite.html.php';
|
||||
$moduleName = isset($lang->$module->common) ? $lang->$module->common : $module;
|
||||
$methodName = isset($lang->$module->$method) ? $lang->$module->$method : $method;
|
||||
|
||||
if($module == 'execution' && $method == 'gantt') $methodName = $methodName->common;
|
||||
|
||||
/* find method name if method is lowercase letter. */
|
||||
if(!isset($lang->$module->$method))
|
||||
{
|
||||
|
||||
@@ -82,8 +82,7 @@
|
||||
<th><?php echo $lang->user->commiter;?></th>
|
||||
<td><?php echo html::input('commiter', $user->commiter, "class='form-control'");?></td>
|
||||
<th><?php echo $lang->user->visions;?></th>
|
||||
<?php $multiple = $config->systemMode == 'new' ? 'multiple' : '';?>
|
||||
<td><?php echo html::select('visions[]', $visionList, $user->visions, "class='form-control chosen' $multiple");?></td>
|
||||
<td><?php echo html::select('visions[]', $visionList, $user->visions, "class='form-control chosen' multiple");?></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table align='center' class='table table-form'>
|
||||
|
||||
+6
-4
@@ -51,9 +51,11 @@ foreach(array('zh-cn', 'en') as $langType)
|
||||
/* The commands of the shell. */
|
||||
$command = "cd $workDir\n";
|
||||
$command .= "if [ ! -d ../$dirName ]; then unzip ../../$packPrefix.{$version}.zip -d ../ ; fi\n";
|
||||
$command .= "cp -rf ../$dirName .\n";
|
||||
$command .= "unzip ../../zentaobiz.php{$phpVersion}.zip -d $dirName/extension/\n";
|
||||
$command .= "unzip ../../zentaomax.php{$phpVersion}.zip -d $dirName/extension/\n";
|
||||
$command .= "cp -raf ../$dirName .\n";
|
||||
$command .= "unzip ../../zentaobiz.php{$phpVersion}.zip\n";
|
||||
$command .= "unzip ../../zentaomax.php{$phpVersion}.zip\n";
|
||||
$command .= "cp -rf biz/* $dirName/\n";
|
||||
$command .= "cp -rf max/* $dirName/\n";
|
||||
$command .= "zip -r ../../$packPrefix.{$version}.php{$phpVersion}.zip $dirName\n";
|
||||
|
||||
if(!empty($liteVersion))
|
||||
@@ -63,7 +65,7 @@ foreach(array('zh-cn', 'en') as $langType)
|
||||
$command .= "zip -r ../../$packPrefix.{$liteVersionAB}.php{$phpVersion}.zip $dirName\n";
|
||||
}
|
||||
|
||||
$command .= "rm -rf $dirName/\n";
|
||||
$command .= "rm -rf $dirName/ biz/ max/\n";
|
||||
|
||||
file_put_contents($shellName, $command);
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
v5.3.1
|
||||
v5.3.2-rc.3
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
5.3.1
|
||||
5.3.2
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
$lang->admin->xuanxuan = 'Clien Home';
|
||||
$lang->admin->xuanxuan = 'Chat Status';
|
||||
$lang->admin->blockStatus = 'Status';
|
||||
$lang->admin->blockStatistics = 'Statistics';
|
||||
$lang->admin->xuanxuanSetting = 'Settings';
|
||||
@@ -14,8 +14,8 @@ $lang->admin->xxdStartDate = 'XXD Last Start';
|
||||
|
||||
$lang->admin->message = array();
|
||||
$lang->admin->message['total'] = 'Total Messages';
|
||||
$lang->admin->message['hour'] = 'Last Hour Messages';
|
||||
$lang->admin->message['day'] = 'Last 24 Hours Messages';
|
||||
$lang->admin->message['hour'] = 'Last Hour Messages';
|
||||
$lang->admin->message['day'] = 'Last 24 Hours Messages';
|
||||
|
||||
$lang->admin->sizeType = array();
|
||||
$lang->admin->sizeType['K'] = 1024;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
$lang->admin->xuanxuan = '客户端首页';
|
||||
$lang->admin->xuanxuan = '聊天状态';
|
||||
$lang->admin->blockStatus = '状态监控';
|
||||
$lang->admin->blockStatistics = '系统统计';
|
||||
$lang->admin->xuanxuanSetting = '参数设置';
|
||||
@@ -13,9 +13,9 @@ $lang->admin->totalMessages = '消息数量';
|
||||
$lang->admin->xxdStartDate = 'XXD上次启动时间';
|
||||
|
||||
$lang->admin->message = array();
|
||||
$lang->admin->message['total'] = '总消息数';
|
||||
$lang->admin->message['hour'] = '最近一小时消息数';
|
||||
$lang->admin->message['day'] = '最近一天消息数';
|
||||
$lang->admin->message['total'] = '总消息数';
|
||||
$lang->admin->message['hour'] = '最近一小时消息数';
|
||||
$lang->admin->message['day'] = '最近一天消息数';
|
||||
|
||||
$lang->admin->sizeType = array();
|
||||
$lang->admin->sizeType['K'] = 1024;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
$lang->xuanxuan = new stdclass();
|
||||
$lang->admin->menu->xuanxuan = array('link' => '客户端|admin|xuanxuan', 'subModule' => 'client,setting');
|
||||
$lang->admin->menu->xuanxuan = array('link' => '聊天|admin|xuanxuan', 'subModule' => 'client,setting');
|
||||
$lang->admin->menuOrder[6] = 'xuanxuan';
|
||||
|
||||
$lang->admin->menu->xuanxuan['subMenu'] = new stdclass();
|
||||
|
||||
@@ -31,3 +31,8 @@ $lang->im->xxServerConfirm = 'Go to User dropmenu to download the ZenTao Deskto
|
||||
$lang->im->xxdServerTip = 'XXD server address contains protocol, host and port,such as http://192.168.1.35 or http://domain. It should not be 127.0.0.1.';
|
||||
$lang->im->xxdServerEmpty = 'XXD server address is empty.';
|
||||
$lang->im->xxdServerError = 'XXD server address should not be 127.0.0.1.';
|
||||
|
||||
$lang->im->xxd->aes = 'Server-side AES';
|
||||
$lang->im->xxdAESTip = 'This only affects server-side AES encryption between XXB and XXD.';
|
||||
$lang->im->aesOptions['on'] = 'Enabled';
|
||||
$lang->im->aesOptions['off'] = 'Disabled';
|
||||
|
||||
@@ -31,3 +31,8 @@ $lang->im->xxServerConfirm = '与禅道深度集成,支持成员沟通,小
|
||||
$lang->im->xxdServerTip = '禅道服务器地址为完整的协议+地址+端口,示例:http://192.168.1.35 或 http://pms.zentao.com ,不能使用127.0.0.1。';
|
||||
$lang->im->xxdServerEmpty = '禅道服务器地址为空。';
|
||||
$lang->im->xxdServerError = '禅道服务器地址不能为 127.0.0.1。';
|
||||
|
||||
$lang->im->xxd->aes = '服务端通信 AES';
|
||||
$lang->im->xxdAESTip = '该设置仅针对 XXB 和 XXD 之间的通讯加密,不影响客户端通讯加密。';
|
||||
$lang->im->aesOptions['on'] = '开启';
|
||||
$lang->im->aesOptions['off'] = '关闭';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
$lang->setting->common = 'Settings';
|
||||
$lang->setting->xuanxuan = 'Chat';
|
||||
$lang->setting->common = 'Chat Settings';
|
||||
$lang->setting->xuanxuan = 'Chat Integration';
|
||||
$lang->setting->downloadXXD = 'Download XXD';
|
||||
$lang->setting->langs['zh-cn'] = 'Simplified Chinese';
|
||||
$lang->setting->langs['zh-tw'] = 'Traditional Chinese';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
$lang->setting->common = '设置';
|
||||
$lang->setting->common = '聊天设置';
|
||||
$lang->setting->xuanxuan = '聊天集成';
|
||||
$lang->setting->downloadXXD = '下载聊天服务端';
|
||||
$lang->setting->langs['zh-cn'] = '简体';
|
||||
|
||||
Reference in New Issue
Block a user