diff --git a/VERSION b/VERSION
index c9817808c1..d405321601 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-12.4.4
+12.5.stable
diff --git a/config/config.php b/config/config.php
index c5a7014a2f..9822ad7d4e 100644
--- a/config/config.php
+++ b/config/config.php
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
if(!function_exists('getWebRoot')){function getWebRoot(){}}
/* 基本设置。Basic settings. */
-$config->version = '12.4.4'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
+$config->version = '12.5'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP.
$config->cookieLife = time() + 2592000; // Cookie的生存时间。 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/standard/zentao12.5.sql b/db/standard/zentao12.5.sql
new file mode 100644
index 0000000000..6a913d5e40
--- /dev/null
+++ b/db/standard/zentao12.5.sql
@@ -0,0 +1,1083 @@
+CREATE TABLE `zt_action` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `objectType` varchar(30) NOT NULL DEFAULT '',
+ `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `product` varchar(255) NOT NULL,
+ `project` mediumint(9) NOT NULL,
+ `actor` varchar(100) NOT NULL DEFAULT '',
+ `action` varchar(30) NOT NULL DEFAULT '',
+ `date` datetime NOT NULL,
+ `comment` text NOT NULL,
+ `extra` text NOT NULL,
+ `read` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `date` (`date`),
+ KEY `actor` (`actor`),
+ KEY `project` (`project`),
+ KEY `action` (`action`),
+ KEY `objectID` (`objectID`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_block` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL,
+ `module` varchar(20) NOT NULL,
+ `title` varchar(100) NOT NULL,
+ `source` varchar(20) NOT NULL,
+ `block` varchar(20) NOT NULL,
+ `params` text NOT NULL,
+ `order` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `grid` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `height` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`),
+ KEY `account` (`account`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_branch` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `product` mediumint(8) unsigned NOT NULL,
+ `name` varchar(255) NOT NULL,
+ `order` smallint(5) unsigned NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_bug` (
+ `id` mediumint(8) NOT NULL AUTO_INCREMENT,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `module` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `project` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `plan` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `story` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `storyVersion` smallint(6) NOT NULL DEFAULT '1',
+ `task` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `toStory` mediumint(8) NOT NULL DEFAULT '0',
+ `title` varchar(255) NOT NULL,
+ `keywords` varchar(255) NOT NULL,
+ `severity` tinyint(4) NOT NULL DEFAULT '0',
+ `pri` tinyint(3) unsigned NOT NULL,
+ `type` varchar(30) NOT NULL DEFAULT '',
+ `os` varchar(30) NOT NULL DEFAULT '',
+ `browser` varchar(30) NOT NULL DEFAULT '',
+ `hardware` varchar(30) NOT NULL,
+ `found` varchar(30) NOT NULL DEFAULT '',
+ `steps` text NOT NULL,
+ `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `color` char(7) NOT NULL,
+ `confirmed` tinyint(1) NOT NULL DEFAULT '0',
+ `activatedCount` smallint(6) NOT NULL,
+ `activatedDate` datetime NOT NULL,
+ `mailto` text,
+ `openedBy` varchar(30) NOT NULL DEFAULT '',
+ `openedDate` datetime NOT NULL,
+ `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 '',
+ `resolvedDate` datetime NOT NULL,
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` datetime NOT NULL,
+ `duplicateBug` mediumint(8) unsigned NOT NULL,
+ `linkBug` varchar(255) NOT NULL,
+ `case` mediumint(8) unsigned NOT NULL,
+ `caseVersion` smallint(6) NOT NULL DEFAULT '1',
+ `result` mediumint(8) unsigned NOT NULL,
+ `repo` mediumint(8) unsigned NOT NULL,
+ `entry` varchar(255) NOT NULL,
+ `lines` varchar(10) NOT NULL,
+ `v1` varchar(40) NOT NULL,
+ `v2` varchar(40) NOT NULL,
+ `repoType` varchar(30) NOT NULL DEFAULT '',
+ `testtask` mediumint(8) unsigned NOT NULL,
+ `lastEditedBy` varchar(30) NOT NULL DEFAULT '',
+ `lastEditedDate` datetime NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `project` (`project`),
+ KEY `status` (`status`),
+ KEY `plan` (`plan`),
+ KEY `story` (`story`),
+ KEY `case` (`case`),
+ KEY `toStory` (`toStory`),
+ KEY `result` (`result`),
+ KEY `assignedTo` (`assignedTo`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_build` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `project` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `name` char(150) NOT NULL,
+ `scmPath` char(255) NOT NULL,
+ `filePath` char(255) NOT NULL,
+ `date` date NOT NULL,
+ `stories` text NOT NULL,
+ `bugs` text NOT NULL,
+ `builder` char(30) NOT NULL DEFAULT '',
+ `desc` text NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `project` (`project`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_burn` (
+ `project` mediumint(8) unsigned NOT NULL,
+ `task` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `date` date NOT NULL,
+ `estimate` float NOT NULL,
+ `left` float NOT NULL,
+ `consumed` float NOT NULL,
+ PRIMARY KEY (`project`,`date`,`task`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `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',
+ `storyVersion` smallint(6) NOT NULL DEFAULT '1',
+ `title` varchar(255) NOT NULL,
+ `precondition` text NOT NULL,
+ `keywords` varchar(255) NOT NULL,
+ `pri` tinyint(3) unsigned NOT NULL DEFAULT '3',
+ `type` char(30) NOT NULL DEFAULT '1',
+ `auto` varchar(10) NOT NULL default 'no',
+ `frame` varchar(10) NOT NULL,
+ `stage` varchar(255) NOT NULL,
+ `howRun` varchar(30) NOT NULL,
+ `scriptedBy` varchar(30) NOT NULL,
+ `scriptedDate` date NOT NULL,
+ `scriptStatus` varchar(30) NOT NULL,
+ `scriptLocation` varchar(255) NOT NULL,
+ `status` char(30) NOT NULL DEFAULT '1',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `color` char(7) NOT NULL,
+ `frequency` enum('1','2','3') NOT NULL DEFAULT '1',
+ `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,
+ `fromCaseVersion` mediumint(8) unsigned NOT NULL default '1',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ `lastRunner` varchar(30) NOT NULL,
+ `lastRunDate` datetime NOT NULL,
+ `lastRunResult` char(30) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `story` (`story`),
+ KEY `fromBug` (`fromBug`),
+ KEY `module` (`module`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `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`),
+ KEY `case` (`case`),
+ KEY `version` (`version`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_company` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` char(120) DEFAULT NULL,
+ `phone` char(20) DEFAULT NULL,
+ `fax` char(20) DEFAULT NULL,
+ `address` char(120) DEFAULT NULL,
+ `zipcode` char(10) DEFAULT NULL,
+ `website` char(120) DEFAULT NULL,
+ `backyard` char(120) DEFAULT NULL,
+ `guest` enum('1','0') NOT NULL DEFAULT '0',
+ `admins` char(255) DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_compile` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) NOT NULL,
+ `job` mediumint(8) unsigned NOT NULL,
+ `queue` mediumint(8) NOT NULL,
+ `status` varchar(255) NOT NULL,
+ `logs` text,
+ `atTime` varchar(10) NOT NULL,
+ `testtask` mediumint(8) unsigned NOT NULL,
+ `tag` varchar(255) NOT NULL,
+ `times` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `createdBy` varchar(30) NOT NULL,
+ `createdDate` datetime NOT NULL,
+ `updateDate` datetime NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_config` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `owner` char(30) NOT NULL DEFAULT '',
+ `module` varchar(30) NOT NULL,
+ `section` char(30) NOT NULL DEFAULT '',
+ `key` char(30) NOT NULL DEFAULT '',
+ `value` text NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_cron` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `m` varchar(20) NOT NULL,
+ `h` varchar(20) NOT NULL,
+ `dom` varchar(20) NOT NULL,
+ `mon` varchar(20) NOT NULL,
+ `dow` varchar(20) NOT NULL,
+ `command` text NOT NULL,
+ `remark` varchar(255) NOT NULL,
+ `type` varchar(20) NOT NULL,
+ `buildin` tinyint(1) NOT NULL DEFAULT '0',
+ `status` varchar(20) NOT NULL,
+ `lastTime` datetime NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `lastTime` (`lastTime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_dept` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` char(60) NOT NULL,
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `path` char(255) NOT NULL DEFAULT '',
+ `grade` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `order` smallint(4) unsigned NOT NULL DEFAULT '0',
+ `position` char(30) NOT NULL DEFAULT '',
+ `function` char(255) NOT NULL DEFAULT '',
+ `manager` char(30) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ KEY `parent` (`parent`),
+ KEY `path` (`path`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_doc` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `product` mediumint(8) unsigned NOT NULL,
+ `project` mediumint(8) unsigned NOT NULL,
+ `lib` varchar(30) NOT NULL,
+ `module` varchar(30) NOT NULL,
+ `title` varchar(255) NOT NULL,
+ `keywords` varchar(255) NOT NULL,
+ `type` varchar(30) NOT NULL,
+ `views` smallint(5) unsigned NOT NULL,
+ `collector` text NOT NULL,
+ `addedBy` varchar(30) NOT NULL,
+ `addedDate` datetime NOT NULL,
+ `editedBy` varchar(30) NOT NULL,
+ `editedDate` datetime NOT NULL,
+ `mailto` text,
+ `acl` varchar(10) NOT NULL DEFAULT 'open',
+ `groups` varchar(255) NOT NULL,
+ `users` text NOT NULL,
+ `version` smallint(5) unsigned NOT NULL DEFAULT '1',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `project` (`project`),
+ KEY `lib` (`lib`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_doccontent` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `doc` mediumint(8) unsigned NOT NULL,
+ `title` varchar(255) NOT NULL,
+ `digest` varchar(255) NOT NULL,
+ `content` longtext NOT NULL,
+ `files` text NOT NULL,
+ `type` varchar(10) NOT NULL,
+ `version` smallint(5) unsigned NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `doc_version` (`doc`,`version`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_doclib` (
+ `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
+ `type` varchar(30) NOT NULL,
+ `product` mediumint(8) unsigned NOT NULL,
+ `project` mediumint(8) unsigned NOT NULL,
+ `name` varchar(60) NOT NULL,
+ `acl` varchar(10) NOT NULL DEFAULT 'open',
+ `groups` varchar(255) NOT NULL,
+ `users` text NOT NULL,
+ `main` enum('0','1') NOT NULL DEFAULT '0',
+ `collector` text NOT NULL,
+ `order` tinyint(5) unsigned NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `project` (`project`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_effort` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `user` char(30) NOT NULL DEFAULT '',
+ `todo` enum('1','0') NOT NULL DEFAULT '1',
+ `date` date NOT NULL,
+ `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `type` enum('1','2','3') NOT NULL DEFAULT '1',
+ `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `name` char(30) NOT NULL DEFAULT '',
+ `desc` char(255) NOT NULL DEFAULT '',
+ `status` enum('1','2','3') NOT NULL DEFAULT '1',
+ PRIMARY KEY (`id`),
+ KEY `user` (`user`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_entry` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) NOT NULL,
+ `account` varchar(30) NOT NULL DEFAULT '',
+ `code` varchar(20) NOT NULL,
+ `key` varchar(32) NOT NULL,
+ `freePasswd` enum('0','1') NOT NULL DEFAULT '0',
+ `ip` varchar(100) NOT NULL,
+ `desc` text NOT NULL,
+ `createdBy` varchar(30) NOT NULL,
+ `createdDate` datetime NOT NULL,
+ `calledTime` int(10) unsigned NOT NULL DEFAULT '0',
+ `editedBy` varchar(30) NOT NULL,
+ `editedDate` datetime NOT NULL,
+ `deleted` enum('0', '1') NOT NULL DEFAULT '0',
+ PRIMARY KEY `id` (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_extension` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(150) NOT NULL,
+ `code` varchar(30) NOT NULL,
+ `version` varchar(50) NOT NULL,
+ `author` varchar(100) NOT NULL,
+ `desc` text NOT NULL,
+ `license` text NOT NULL,
+ `type` varchar(20) NOT NULL DEFAULT 'extension',
+ `site` varchar(150) NOT NULL,
+ `zentaoCompatible` varchar(100) NOT NULL,
+ `installedTime` datetime NOT NULL,
+ `depends` varchar(100) NOT NULL,
+ `dirs` mediumtext NOT NULL,
+ `files` mediumtext NOT NULL,
+ `status` varchar(20) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `code` (`code`),
+ KEY `name` (`name`),
+ KEY `installedTime` (`installedTime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_file` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `pathname` char(100) NOT NULL,
+ `title` char(255) NOT NULL,
+ `extension` char(30) NOT NULL,
+ `size` int(10) unsigned NOT NULL DEFAULT '0',
+ `objectType` char(30) NOT NULL,
+ `objectID` mediumint(9) NOT NULL,
+ `addedBy` char(30) NOT NULL DEFAULT '',
+ `addedDate` datetime NOT NULL,
+ `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `extra` varchar(255) NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `objectType` (`objectType`),
+ KEY `objectID` (`objectID`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_group` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `PRJ` mediumint(8) unsigned NOT NULL DEFAULT 0,
+ `name` char(30) NOT NULL,
+ `role` char(30) NOT NULL DEFAULT '',
+ `desc` char(255) NOT NULL DEFAULT '',
+ `acl` text,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_grouppriv` (
+ `group` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `module` char(30) NOT NULL DEFAULT '',
+ `method` char(30) NOT NULL DEFAULT '',
+ UNIQUE KEY `group` (`group`,`module`,`method`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_history` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `action` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `field` varchar(30) NOT NULL DEFAULT '',
+ `old` text NOT NULL,
+ `new` text NOT NULL,
+ `diff` mediumtext NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `action` (`action`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_jenkins` (
+ `id` smallint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) NOT NULL,
+ `url` varchar(255) DEFAULT NULL,
+ `account` varchar(30) DEFAULT NULL,
+ `password` varchar(255) NOT NULL,
+ `token` varchar(255) DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL,
+ `createdDate` datetime NOT NULL,
+ `editedBy` varchar(30) NOT NULL,
+ `editedDate` datetime NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_job` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) NOT NULL,
+ `repo` mediumint(8) unsigned NOT NULL,
+ `product` mediumint(8) unsigned NOT NULL,
+ `frame` varchar(20) NOT NULL,
+ `jkHost` mediumint(8) unsigned NOT NULL,
+ `jkJob` varchar(500) NOT NULL,
+ `triggerType` varchar(255) NOT NULL,
+ `svnDir` varchar(255) NOT NULL,
+ `atDay` varchar(255) DEFAULT NULL,
+ `atTime` varchar(10) DEFAULT NULL,
+ `customParam` text DEFAULT NULL,
+ `comment` varchar(255) DEFAULT NULL,
+ `createdBy` varchar(30) NOT NULL,
+ `createdDate` datetime NOT NULL,
+ `editedBy` varchar(30) NOT NULL,
+ `editedDate` datetime NOT NULL,
+ `lastExec` datetime DEFAULT NULL,
+ `lastStatus` varchar(255) DEFAULT NULL,
+ `lastTag` varchar(255) DEFAULT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_lang` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `lang` varchar(30) NOT NULL,
+ `module` varchar(30) NOT NULL,
+ `section` varchar(30) NOT NULL,
+ `key` varchar(60) NOT NULL,
+ `value` text NOT NULL,
+ `system` enum('0','1') NOT NULL DEFAULT '1',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_log` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `objectType` varchar(30) NOT NULL,
+ `objectID` mediumint(8) unsigned NOT NULL,
+ `action` mediumint(8) unsigned NOT NULL,
+ `date` datetime NOT NULL,
+ `url` varchar(255) NOT NULL,
+ `contentType` varchar(30) NOT NULL,
+ `data` text NOT NULL,
+ `result` text NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `objectType` (`objectType`),
+ KEY `obejctID` (`objectID`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_module` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `root` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `name` char(60) NOT NULL DEFAULT '',
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `path` char(255) NOT NULL DEFAULT '',
+ `grade` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `order` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `type` char(30) NOT NULL,
+ `owner` varchar(30) NOT NULL,
+ `collector` text NOT NULL,
+ `short` varchar(30) NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `root` (`root`),
+ KEY `type` (`type`),
+ KEY `path` (`path`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_notify` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `objectType` varchar(50) NOT NULL,
+ `objectID` mediumint(8) unsigned NOT NULL,
+ `action` mediumint(9) NOT NULL,
+ `toList` varchar(255) NOT NULL,
+ `ccList` text NOT NULL,
+ `subject` varchar(255) NOT NULL,
+ `data` text NOT NULL,
+ `createdBy` char(30) NOT NULL,
+ `createdDate` datetime NOT NULL,
+ `sendTime` datetime NOT NULL,
+ `status` varchar(10) NOT NULL DEFAULT 'wait',
+ `failReason` text NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `objectType_toList_status` (`objectType`,`toList`,`status`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_oauth` (
+ `account` varchar(30) NOT NULL,
+ `openID` varchar(255) NOT NULL,
+ `providerType` varchar(30) NOT NULL,
+ `providerID` mediumint(8) unsigned NOT NULL,
+ KEY `account` (`account`),
+ KEY `providerType` (`providerType`),
+ KEY `providerID` (`providerID`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_planstory` (
+ `plan` mediumint(8) unsigned NOT NULL,
+ `story` mediumint(8) unsigned NOT NULL,
+ `order` mediumint(9) NOT NULL,
+ UNIQUE KEY `plan_story` (`plan`,`story`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_product` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(90) NOT NULL,
+ `code` varchar(45) NOT NULL,
+ `line` mediumint(8) NOT NULL,
+ `type` varchar(30) NOT NULL DEFAULT 'normal',
+ `status` varchar(30) NOT NULL DEFAULT '',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `desc` text NOT NULL,
+ `PO` varchar(30) NOT NULL,
+ `QD` varchar(30) NOT NULL,
+ `RD` varchar(30) NOT NULL,
+ `acl` enum('open','private','custom') NOT NULL DEFAULT 'open',
+ `whitelist` text NOT NULL,
+ `createdBy` varchar(30) NOT NULL,
+ `createdDate` datetime NOT NULL,
+ `createdVersion` varchar(20) NOT NULL,
+ `order` mediumint(8) unsigned NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `acl` (`acl`),
+ KEY `order` (`order`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_productplan` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `product` mediumint(8) unsigned NOT NULL,
+ `branch` mediumint(8) unsigned NOT NULL,
+ `parent` mediumint(9) NOT NULL DEFAULT '0',
+ `title` varchar(90) NOT NULL,
+ `desc` text NOT NULL,
+ `begin` date NOT NULL,
+ `end` date NOT NULL,
+ `order` text NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `end` (`end`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_project` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `isCat` enum('1','0') NOT NULL DEFAULT '0',
+ `catID` mediumint(8) unsigned NOT NULL,
+ `type` varchar(20) NOT NULL DEFAULT 'sprint',
+ `parent` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `name` varchar(90) NOT NULL,
+ `code` varchar(45) NOT NULL,
+ `begin` date NOT NULL,
+ `end` date NOT NULL,
+ `days` smallint(5) unsigned NOT NULL,
+ `status` varchar(10) NOT NULL,
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1',
+ `pri` enum('1','2','3','4') NOT NULL DEFAULT '1',
+ `desc` text NOT NULL,
+ `openedBy` varchar(30) NOT NULL DEFAULT '',
+ `openedDate` datetime NOT NULL,
+ `openedVersion` varchar(20) NOT NULL,
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` datetime NOT NULL,
+ `canceledBy` varchar(30) NOT NULL DEFAULT '',
+ `canceledDate` datetime NOT NULL,
+ `PO` varchar(30) NOT NULL DEFAULT '',
+ `PM` varchar(30) NOT NULL DEFAULT '',
+ `QD` varchar(30) NOT NULL DEFAULT '',
+ `RD` varchar(30) NOT NULL DEFAULT '',
+ `team` varchar(90) NOT NULL,
+ `acl` enum('open','private','custom') NOT NULL DEFAULT 'open',
+ `whitelist` text NOT NULL,
+ `order` mediumint(8) unsigned NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `parent` (`parent`),
+ KEY `begin` (`begin`),
+ KEY `end` (`end`),
+ KEY `status` (`status`),
+ KEY `acl` (`acl`),
+ KEY `order` (`order`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_projectproduct` (
+ `project` mediumint(8) unsigned NOT NULL,
+ `product` mediumint(8) unsigned NOT NULL,
+ `branch` mediumint(8) unsigned NOT NULL,
+ `plan` mediumint(8) unsigned NOT NULL,
+ PRIMARY KEY (`project`,`product`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_projectstory` (
+ `project` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `product` mediumint(8) unsigned NOT NULL,
+ `story` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `version` smallint(6) NOT NULL DEFAULT '1',
+ `order` smallint(6) unsigned NOT NULL,
+ UNIQUE KEY `project` (`project`,`story`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_relation` (
+ `id` int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ `program` mediumint(8) NOT NULL,
+ `product` mediumint(8) NOT NULL,
+ `project` mediumint(8) NOT NULL,
+ `AType` char(30) NOT NULL,
+ `AID` mediumint(8) NOT NULL,
+ `AVersion` char(30) NOT NULL,
+ `relation` char(30) NOT NULL,
+ `BType` char(30) NOT NULL,
+ `BID` mediumint(8) NOT NULL,
+ `BVersion` char(30) NOT NULL,
+ `extra` char(30) NOT NULL,
+ UNIQUE KEY `relation` (`relation`,`AType`,`BType`, `AID`, `BID`)
+) ENGINE='MyISAM' DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_release` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `product` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `build` mediumint(8) unsigned NOT NULL,
+ `name` varchar(255) NOT NULL DEFAULT '',
+ `marker` enum('0','1') NOT NULL DEFAULT '0',
+ `date` date NOT NULL,
+ `stories` text NOT NULL,
+ `bugs` text NOT NULL,
+ `leftBugs` text NOT NULL,
+ `desc` text NOT NULL,
+ `status` varchar(20) NOT NULL DEFAULT 'normal',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `build` (`build`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_repo` (
+ `id` mediumint(9) NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL,
+ `path` varchar(255) NOT NULL,
+ `prefix` varchar(100) NOT NULL,
+ `encoding` varchar(20) NOT NULL,
+ `SCM` varchar(10) NOT NULL,
+ `client` varchar(100) NOT NULL,
+ `commits` mediumint(8) unsigned NOT NULL,
+ `account` varchar(30) NOT NULL,
+ `password` varchar(30) NOT NULL,
+ `encrypt` varchar(30) NOT NULL DEFAULT 'plain',
+ `acl` text NOT NULL,
+ `synced` tinyint(1) NOT NULL DEFAULT '0',
+ `lastSync` datetime NOT NULL,
+ `desc` text NOT NULL,
+ `deleted` tinyint(1) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_repobranch` (
+ `repo` mediumint(8) unsigned NOT NULL,
+ `revision` mediumint(8) unsigned NOT NULL,
+ `branch` varchar(255) NOT NULL,
+ UNIQUE KEY `repo_revision_branch` (`repo`,`revision`,`branch`),
+ KEY `branch` (`branch`),
+ KEY `revision` (`revision`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_repohistory` (
+ `id` mediumint(9) NOT NULL AUTO_INCREMENT,
+ `repo` mediumint(9) NOT NULL,
+ `revision` varchar(40) NOT NULL,
+ `commit` mediumint(8) unsigned NOT NULL,
+ `comment` text NOT NULL,
+ `committer` varchar(100) NOT NULL,
+ `time` datetime NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `repo` (`repo`),
+ KEY `revision` (`revision`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_repofiles` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `repo` mediumint(8) unsigned NOT NULL,
+ `revision` mediumint(8) unsigned NOT NULL,
+ `path` varchar(255) NOT NULL,
+ `parent` varchar(255) NOT NULL,
+ `type` varchar(20) NOT NULL,
+ `action` char(1) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `path` (`path`),
+ KEY `parent` (`parent`),
+ KEY `repo` (`repo`),
+ KEY `revision` (`revision`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_score` (
+ `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT,
+ `account` varchar(30) NOT NULL,
+ `module` varchar(30) NOT NULL DEFAULT '',
+ `method` varchar(30) NOT NULL,
+ `desc` varchar(250) NOT NULL DEFAULT '',
+ `before` int(11) NOT NULL DEFAULT '0',
+ `score` int(11) NOT NULL DEFAULT '0',
+ `after` int(11) NOT NULL DEFAULT '0',
+ `time` datetime NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `account` (`account`),
+ KEY `model` (`module`),
+ KEY `method` (`method`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_story` (
+ `id` mediumint(8) unsigned NOT NULL auto_increment,
+ `parent` mediumint(9) NOT NULL default '0',
+ `product` mediumint(8) unsigned NOT NULL default '0',
+ `branch` mediumint(8) unsigned NOT NULL default '0',
+ `module` mediumint(8) unsigned NOT NULL default '0',
+ `plan` text,
+ `source` varchar(20) NOT NULL,
+ `sourceNote` varchar(255) NOT NULL,
+ `fromBug` mediumint(8) unsigned NOT NULL default '0',
+ `title` varchar(255) NOT NULL,
+ `keywords` varchar(255) NOT NULL,
+ `type` varchar(30) NOT NULL default '',
+ `pri` tinyint(3) unsigned NOT NULL default '3',
+ `estimate` float unsigned NOT NULL,
+ `status` enum('','changed','active','draft','closed') NOT NULL default '',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `color` char(7) NOT NULL,
+ `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released', 'closed') NOT NULL DEFAULT 'wait',
+ `stagedBy` char(30) NOT NULL,
+ `mailto` text,
+ `openedBy` varchar(30) NOT NULL default '',
+ `openedDate` datetime NOT NULL,
+ `assignedTo` varchar(30) NOT NULL default '',
+ `assignedDate` datetime NOT NULL,
+ `lastEditedBy` varchar(30) NOT NULL default '',
+ `lastEditedDate` datetime NOT NULL,
+ `reviewedBy` varchar(255) NOT NULL,
+ `reviewedDate` date NOT NULL,
+ `closedBy` varchar(30) NOT NULL default '',
+ `closedDate` datetime NOT NULL,
+ `closedReason` varchar(30) NOT NULL,
+ `toBug` mediumint(8) unsigned NOT NULL,
+ `childStories` varchar(255) NOT NULL,
+ `linkStories` varchar(255) NOT NULL,
+ `duplicateStory` mediumint(8) unsigned NOT NULL,
+ `version` smallint(6) NOT NULL default '1',
+ `deleted` enum('0','1') NOT NULL default '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `status` (`status`),
+ KEY `assignedTo` (`assignedTo`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_storyspec` (
+ `story` mediumint(9) NOT NULL,
+ `version` smallint(6) NOT NULL,
+ `title` varchar(255) NOT NULL,
+ `spec` text NOT NULL,
+ `verify` text NOT NULL,
+ UNIQUE KEY `story` (`story`,`version`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE IF NOT EXISTS `zt_storystage` (
+ `story` mediumint(8) unsigned NOT NULL,
+ `branch` mediumint(8) unsigned NOT NULL,
+ `stage` varchar(50) NOT NULL,
+ `stagedBy` char(30) NOT NULL,
+ UNIQUE KEY `story_branch` (`story`,`branch`),
+ KEY `story` (`story`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `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;
+CREATE TABLE `zt_task` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `parent` mediumint(8) NOT NULL DEFAULT '0',
+ `project` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `module` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `story` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `storyVersion` smallint(6) NOT NULL DEFAULT '1',
+ `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `name` varchar(255) NOT NULL,
+ `type` varchar(20) NOT NULL,
+ `pri` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `estimate` float unsigned NOT NULL,
+ `consumed` float unsigned NOT NULL,
+ `left` float unsigned NOT NULL,
+ `deadline` date NOT NULL,
+ `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `color` char(7) NOT NULL,
+ `mailto` text,
+ `desc` text NOT NULL,
+ `openedBy` varchar(30) NOT NULL,
+ `openedDate` datetime NOT NULL,
+ `assignedTo` varchar(30) NOT NULL,
+ `assignedDate` datetime NOT NULL,
+ `estStarted` date NOT NULL,
+ `realStarted` datetime NOT NULL,
+ `finishedBy` varchar(30) NOT NULL,
+ `finishedDate` datetime NOT NULL,
+ `finishedList` text NOT NULL,
+ `canceledBy` varchar(30) NOT NULL,
+ `canceledDate` datetime NOT NULL,
+ `closedBy` varchar(30) NOT NULL,
+ `closedDate` datetime NOT NULL,
+ `closedReason` varchar(30) NOT NULL,
+ `lastEditedBy` varchar(30) NOT NULL,
+ `lastEditedDate` datetime NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `project` (`project`),
+ KEY `story` (`story`),
+ KEY `parent` (`parent`),
+ KEY `assignedTo` (`assignedTo`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_taskestimate` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `task` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `date` date NOT NULL,
+ `left` float unsigned NOT NULL DEFAULT '0',
+ `consumed` float unsigned NOT NULL,
+ `account` char(30) NOT NULL DEFAULT '',
+ `work` text,
+ PRIMARY KEY (`id`),
+ KEY `task` (`task`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_team` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `root` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `type` enum('project','task') NOT NULL DEFAULT 'project',
+ `account` char(30) NOT NULL DEFAULT '',
+ `role` char(30) NOT NULL DEFAULT '',
+ `limited` char(8) NOT NULL DEFAULT 'no',
+ `join` date NOT NULL DEFAULT '0000-00-00',
+ `days` smallint(5) unsigned NOT NULL,
+ `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0',
+ `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00',
+ `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00',
+ `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00',
+ `order` tinyint(3) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `team` (`root`,`type`,`account`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `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;
+CREATE TABLE `zt_testresult` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `run` mediumint(8) unsigned NOT NULL,
+ `case` mediumint(8) unsigned NOT NULL,
+ `version` smallint(5) unsigned NOT NULL,
+ `job` mediumint(8) unsigned NOT NULL,
+ `compile` mediumint(8) unsigned NOT NULL,
+ `caseResult` char(30) NOT NULL,
+ `stepResults` text NOT NULL,
+ `lastRunner` varchar(30) NOT NULL,
+ `date` datetime NOT NULL,
+ `duration` float NOT NULL,
+ `xml` text NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `case` (`case`),
+ KEY `version` (`version`),
+ KEY `run` (`run`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_testrun` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `task` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `case` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `version` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `assignedTo` char(30) NOT NULL DEFAULT '',
+ `lastRunner` varchar(30) NOT NULL,
+ `lastRunDate` datetime NOT NULL,
+ `lastRunResult` char(30) NOT NULL,
+ `status` char(30) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `task` (`task`,`case`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `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`),
+ KEY `product` (`product`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_testtask` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `name` char(90) NOT NULL,
+ `product` mediumint(8) unsigned NOT NULL,
+ `project` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `build` char(30) NOT NULL,
+ `owner` varchar(30) NOT NULL,
+ `pri` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `begin` date NOT NULL,
+ `end` date NOT NULL,
+ `mailto` text,
+ `desc` text NOT NULL,
+ `report` text NOT NULL,
+ `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait',
+ `auto` varchar(10) NOT NULL DEFAULT 'no',
+ `subStatus` varchar(30) NOT NULL DEFAULT '',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `product` (`product`),
+ KEY `build` (`build`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_todo` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL,
+ `date` date NOT NULL,
+ `begin` smallint(4) unsigned zerofill NOT NULL,
+ `end` smallint(4) unsigned zerofill NOT NULL,
+ `type` char(10) NOT NULL,
+ `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `pri` tinyint(3) unsigned NOT NULL,
+ `name` char(150) NOT NULL,
+ `desc` text NOT NULL,
+ `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait',
+ `private` tinyint(1) NOT NULL,
+ `config` varchar(255) NOT NULL,
+ `assignedTo` varchar(30) NOT NULL DEFAULT '',
+ `assignedBy` varchar(30) NOT NULL DEFAULT '',
+ `assignedDate` datetime NOT NULL,
+ `finishedBy` varchar(30) NOT NULL DEFAULT '',
+ `finishedDate` datetime NOT NULL,
+ `closedBy` varchar(30) NOT NULL DEFAULT '',
+ `closedDate` datetime NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `account` (`account`),
+ KEY `assignedTo` (`assignedTo`),
+ KEY `finishedBy` (`finishedBy`),
+ KEY `date` (`date`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_user` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `dept` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `account` char(30) NOT NULL DEFAULT '',
+ `password` char(32) NOT NULL DEFAULT '',
+ `role` char(10) NOT NULL DEFAULT '',
+ `realname` varchar(100) NOT NULL DEFAULT '',
+ `nickname` char(60) NOT NULL DEFAULT '',
+ `commiter` varchar(100) NOT NULL,
+ `avatar` char(30) NOT NULL DEFAULT '',
+ `birthday` date NOT NULL DEFAULT '0000-00-00',
+ `gender` enum('f','m') NOT NULL DEFAULT 'f',
+ `email` char(90) NOT NULL DEFAULT '',
+ `skype` char(90) NOT NULL DEFAULT '',
+ `qq` char(20) NOT NULL DEFAULT '',
+ `mobile` char(11) NOT NULL DEFAULT '',
+ `phone` char(20) NOT NULL DEFAULT '',
+ `weixin` varchar(90) NOT NULL DEFAULT '',
+ `dingding` varchar(90) NOT NULL DEFAULT '',
+ `slack` varchar(90) NOT NULL DEFAULT '',
+ `whatsapp` varchar(90) NOT NULL DEFAULT '',
+ `address` char(120) NOT NULL DEFAULT '',
+ `zipcode` char(10) NOT NULL DEFAULT '',
+ `join` date NOT NULL DEFAULT '0000-00-00',
+ `visits` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `ip` char(15) NOT NULL DEFAULT '',
+ `last` int(10) unsigned NOT NULL DEFAULT '0',
+ `fails` tinyint(5) NOT NULL DEFAULT '0',
+ `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `ranzhi` char(30) NOT NULL DEFAULT '',
+ `score` int(11) NOT NULL DEFAULT '0',
+ `scoreLevel` int(11) NOT NULL DEFAULT '0',
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `account` (`account`),
+ KEY `dept` (`dept`),
+ KEY `email` (`email`),
+ KEY `commiter` (`commiter`),
+ KEY `deleted` (`deleted`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_usercontact` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL,
+ `listName` varchar(60) NOT NULL,
+ `userList` text NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `account` (`account`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_usergroup` (
+ `account` char(30) NOT NULL DEFAULT '',
+ `group` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ UNIQUE KEY `account` (`account`,`group`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_userquery` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL,
+ `module` varchar(30) NOT NULL,
+ `title` varchar(90) NOT NULL,
+ `form` text NOT NULL,
+ `sql` text NOT NULL,
+ `shortcut` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `account` (`account`),
+ KEY `module` (`module`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_usertpl` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `account` char(30) NOT NULL,
+ `type` char(30) NOT NULL,
+ `title` varchar(150) NOT NULL,
+ `content` text NOT NULL,
+ `public` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `account` (`account`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_userview` (
+ `account` char(30) NOT NULL,
+ `products` mediumtext NOT NULL,
+ `projects` mediumtext NOT NULL,
+ UNIQUE KEY `account` (`account`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_webhook` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `type` varchar(10) NOT NULL DEFAULT 'default',
+ `name` varchar(50) NOT NULL,
+ `url` varchar(255) NOT NULL,
+ `domain` varchar(255) NOT NULL,
+ `secret` varchar(255) NOT NULL,
+ `contentType` varchar(30) NOT NULL DEFAULT 'application/json',
+ `sendType` enum('sync','async') NOT NULL DEFAULT 'sync',
+ `products` text NOT NULL,
+ `projects` text NOT NULL,
+ `params` varchar(100) NOT NULL,
+ `actions` text NOT NULL,
+ `desc` text NOT NULL,
+ `createdBy` varchar(30) NOT NULL,
+ `createdDate` datetime NOT NULL,
+ `editedBy` varchar(30) NOT NULL,
+ `editedDate` datetime NOT NULL,
+ `deleted` enum('0','1') NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
diff --git a/db/update12.4.4.sql b/db/update12.4.4.sql
index c7c343e439..d112860a5c 100644
--- a/db/update12.4.4.sql
+++ b/db/update12.4.4.sql
@@ -13,5 +13,7 @@ ALTER TABLE `zt_history` ADD INDEX `action` (`action`);
ALTER TABLE `zt_action` ADD INDEX `action` (`action`);
ALTER TABLE `zt_action` DROP INDEX `product`;
-INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProduct', '1');
-INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProject', '1');
+REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProduct', '1');
+REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProject', '1');
+REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', 'xuanxuan', 'pollingInterval', '60');
+REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', 'xuanxuan', 'aes', 'on');
diff --git a/db/zentao.sql b/db/zentao.sql
index 683192ae44..821330204a 100644
--- a/db/zentao.sql
+++ b/db/zentao.sql
@@ -15,6 +15,7 @@ CREATE TABLE IF NOT EXISTS `zt_action` (
KEY `date` (`date`),
KEY `actor` (`actor`),
KEY `project` (`project`),
+ KEY `action` (`action`),
KEY `objectID` (`objectID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_block`;
@@ -108,6 +109,8 @@ CREATE TABLE IF NOT EXISTS `zt_bug` (
KEY `plan` (`plan`),
KEY `story` (`story`),
KEY `case` (`case`),
+ KEY `toStory` (`toStory`),
+ KEY `result` (`result`),
KEY `assignedTo` (`assignedTo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_build`;
@@ -185,6 +188,7 @@ CREATE TABLE IF NOT EXISTS `zt_case` (
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `story` (`story`),
+ KEY `fromBug` (`fromBug`),
KEY `module` (`module`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_casestep`;
@@ -458,6 +462,7 @@ CREATE TABLE IF NOT EXISTS `zt_job` (
`svnDir` varchar(255) NOT NULL,
`atDay` varchar(255) DEFAULT NULL,
`atTime` varchar(10) DEFAULT NULL,
+ `customParam` text NOT NULL,
`comment` varchar(255) DEFAULT NULL,
`createdBy` varchar(30) NOT NULL,
`createdDate` datetime NOT NULL,
@@ -466,7 +471,6 @@ CREATE TABLE IF NOT EXISTS `zt_job` (
`lastExec` datetime DEFAULT NULL,
`lastStatus` varchar(255) DEFAULT NULL,
`lastTag` varchar(255) DEFAULT NULL,
- `customParam` text NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
@@ -492,7 +496,7 @@ CREATE TABLE IF NOT EXISTS `zt_module` (
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_notify`;
CREATE TABLE IF NOT EXISTS `zt_notify` (
- `id` mediumint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ `id` mediumint unsigned NOT NULL AUTO_INCREMENT,
`objectType` varchar(50) NOT NULL,
`objectID` mediumint unsigned NOT NULL,
`action` mediumint NOT NULL,
@@ -504,7 +508,9 @@ CREATE TABLE IF NOT EXISTS `zt_notify` (
`createdDate` datetime NOT NULL,
`sendTime` datetime NOT NULL,
`status` varchar(10) NOT NULL DEFAULT 'wait',
- `failReason` text NOT NULL
+ `failReason` text NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `objectType_toList_status` (`objectType`,`toList`,`status`)
) ENGINE='MyISAM' COLLATE 'utf8_general_ci';
-- DROP TABLE IF EXISTS `zt_oauth`;
CREATE TABLE IF NOT EXISTS `zt_oauth` (
@@ -794,7 +800,7 @@ CREATE TABLE IF NOT EXISTS `zt_task` (
`assignedTo` varchar(30) NOT NULL,
`assignedDate` datetime NOT NULL,
`estStarted` date NOT NULL,
- `realStarted` date NOT NULL,
+ `realStarted` datetime NOT NULL,
`finishedBy` varchar(30) NOT NULL,
`finishedDate` datetime NOT NULL,
`finishedList` text NOT NULL,
@@ -809,6 +815,7 @@ CREATE TABLE IF NOT EXISTS `zt_task` (
PRIMARY KEY (`id`),
KEY `project` (`project`),
KEY `story` (`story`),
+ KEY `parent` (`parent`),
KEY `assignedTo` (`assignedTo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_taskestimate`;
@@ -1001,7 +1008,8 @@ CREATE TABLE IF NOT EXISTS `zt_user` (
UNIQUE KEY `account` (`account`),
KEY `dept` (`dept`),
KEY `email` (`email`),
- KEY `commiter` (`commiter`)
+ KEY `commiter` (`commiter`),
+ KEY `deleted` (`deleted`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_usercontact`;
CREATE TABLE IF NOT EXISTS `zt_usercontact` (
@@ -1245,6 +1253,8 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(1, 'custom', 'working'),
(1, 'custom', 'index'),
(1, 'custom', 'restore'),
+(1, 'custom', 'project'),
+(1, 'custom', 'product'),
(1, 'custom', 'set'),
(1, 'dept', 'browse'),
(1, 'dept', 'delete'),
@@ -1455,6 +1465,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(1, 'story', 'change'),
(1, 'story', 'close'),
(1, 'story', 'create'),
+(1, 'story', 'batchToTask'),
(1, 'story', 'delete'),
(1, 'story', 'edit'),
(1, 'story', 'assignTo'),
@@ -1728,6 +1739,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(2, 'story', 'bugs'),
(2, 'story', 'cases'),
(2, 'story', 'view'),
+(2, 'story', 'batchToTask'),
(2, 'svn', 'apiSync'),
(2, 'svn', 'cat'),
(2, 'svn', 'diff'),
@@ -1923,6 +1935,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(3, 'story', 'cases'),
(3, 'story', 'view'),
(3, 'story', 'zeroCase'),
+(3, 'story', 'batchToTask'),
(3, 'svn', 'apiSync'),
(3, 'svn', 'cat'),
(3, 'svn', 'diff'),
@@ -2210,6 +2223,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(4, 'story', 'cases'),
(4, 'story', 'view'),
(4, 'story', 'zeroCase'),
+(4, 'story', 'batchToTask'),
(4, 'svn', 'apiSync'),
(4, 'svn', 'cat'),
(4, 'svn', 'diff'),
@@ -2746,6 +2760,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(6, 'story', 'cases'),
(6, 'story', 'view'),
(6, 'story', 'zeroCase'),
+(6, 'story', 'batchToTask'),
(6, 'svn', 'apiSync'),
(6, 'svn', 'cat'),
(6, 'svn', 'diff'),
@@ -3223,6 +3238,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(8, 'story', 'cases'),
(8, 'story', 'view'),
(8, 'story', 'zeroCase'),
+(8, 'story', 'batchToTask'),
(8, 'svn', 'apiSync'),
(8, 'svn', 'cat'),
(8, 'svn', 'diff'),
diff --git a/doc/CHANGELOG b/doc/CHANGELOG
index 33241f4725..d822cd9513 100644
--- a/doc/CHANGELOG
+++ b/doc/CHANGELOG
@@ -1,3 +1,100 @@
+2020-11-19 12.5.stable
+完成的需求
+5487 在禅道专业版、企业版的授权中增加版本号限制
+5458 任务实际开始、完成时间记录上完整的日期+时分秒
+5389 安装成功后页面语言优化
+5387 后台-二开-应用 代号错误提醒多余标点去掉
+5383 增加需求一键转任务功能
+5382 删除项目的时候给一个确认提示
+5261 看板模式下面移动任务到进行中甬道时默认保持指派给字段不变
+5221 测试-测试单关联用例的搜索中增加所属库字段
+5219 文档增加抄送功能
+5218 可以按照指定的日期添加待办
+5217 期望版本增加标签和查询功能。
+5194 任务页面点击相关需求可以直接对需求创建用例
+5193 期望用例在测试单中显示和用例库的关联图标
+5144 后台自定义增加产品和项目的关闭后是否只读的开关
+5126 构建增加给jenkins传参功能
+4421 一键安装包兼容centos8
+4329 增加webhook权限控制
+3423 session.save_path 逻辑调整
+修复的Bug
+3625 CNVD-C-2020-238015 禅道CMS存在文件上传漏洞
+3621 测试单中用例搜索后无法正常排序
+3620 升级成功后默认不应该跳转到非研发页面
+3619 国际版禅道安装和升级页面,zdoo网址应换为英文网址链接
+3618 提bug页面IE浏览器加载所有用户失败
+3617 批量编辑修改需求阶段后未起效
+3612 项目-需求 点击B字段中数据弹窗中数据统计问题
+3600 windows一键安装包无法更改数据库密码
+3599 xampp中存在大量mariadb ssl报错
+3597 父需求的任务数不会自动计算
+3596 CNVD-C-2020-204858_关于zentao开源版V12.3.3后台存在任意文件读取漏洞的情况通报
+3595 CNVD-C-2020-204868_关于zentao开源版后台存在SQL注入漏洞的情况通报
+3594 CNVD-C-2020-230107 关于禅道专业版后台存在命令执行漏洞的情况通报
+3593 CNVD-C-2020-209376_关于青岛易企天创管理咨询有限公司禅道PMS存在SQL注入漏洞的情况通报
+3592 项目需求下批量创建需求没有关联到项目
+3591 安装界面最后一步,输入框离文字太远
+3590 创建OK文件的页面,需要把刷新按钮加回来
+3589 bug 编辑页面需求没有根据模块展示,需要切换下模块才会规则生效
+3579 访问禅道加载失败时,给出刷新按钮
+3578 禅道应用的logo背景需要优化
+3577 人数较多时,抄送功能输入用户名回车后,输入信息不查询下一个用户名
+3576 父计划关联需求设计问题
+3575 开始任务关闭弹窗后按钮禁用
+3573 创建OK文件的页面,需要添加网页标题头
+3572 地盘需求只显示父需求
+3571 必填项限制无法批量创建测试任务。
+3570 细分需求后进行指派,被指派人我的地盘-需求显示问题
+3569 安装翻译插件后,创建翻译提示优化
+3568 windows和linux一键安装包切换日语后页面未能正确跳转
+3567 客户端调试页面ip地址建议与服务器设置页保持一致
+3566 企业微信应用消息绑定用户时提示“malformed”
+3565 文档中编辑表格属性报错后未生效
+3564 批量编辑用例模块处没有显示title
+3563 zbox一键安装包域名解析问题
+3562 自定义添加需求来源后导出需求模板无法正常打开
+3561 添加必填后批量创建需求页面提示后无法正常跳转
+3557 创建需求保存时页面有报错
+3551 父任务指派,提示剩余工时不能为空
+3550 禁用和删除日志插件后文件无法成功删除
+3548 批量编辑项目时,调整重名的逻辑
+3546 终身版插件安装后到期日期显示错误
+3543 客户端登录禅道后用户最后的登录ip记录的是xxd的ip
+3535 所属计划设为必填项后不生效
+3534 用户后台绑定社区账号无法确认
+3507 集成版本库点击刷新按钮数据不更新
+3505 查看相关需求不存在时出现空白弹窗
+3504 客户端创建文档链接报错
+3503 客户端关于页面无法展示
+3502 在步骤里面编辑内容会触发页面自动滚动
+3501 发布关联子需求后父需求的阶段没有自动更新
+3500 xampp启动失败没有任何日志记录
+3496 帮助手册不能正常查看
+3493 用户被锁定,仍可以成功登录禅道客户端
+3492 锁定用户的时间,有时没到10分钟就失效
+3490 插件目录结构未显示信息
+3489 插件详情页页面需优化
+3482 改进意见:任务确认变更,展示需求的详情信息
+3481 9.6升级到12.1,有sql报错
+3480 11.5升级到12.3,升级失败有sql报错
+3479 通知邮件中的连接地址拼装不正确
+3319 创建任务提示报错,还可以正常创建
+3250 bug详情页面有2排操作按钮都可以点击
+3212 Markdown格式的文档中表格列宽显示问题
+3097 数据量大导致禅道操作过程中锁表
+3089 导出文件时编码字段默认“UTF-8”,导出的excel中文字不能正常展示。
+3078 客户端如果停留在我的地盘点击通知里面的信息跳转不过去
+3040 覆盖新版本代码后不会自动跳转upgrade.php会报错config或者userview表不存在
+3022 发布bug列表页面显示优化
+2979 数据比较多时下拉框渲染比较慢
+2963 项目-版本中解决的bug移除不过后bug解决版本没有更新
+2909 linux 在centos 8.0 兼容问题
+2855 阿里云mysql,备份数据还原报错
+2604 关闭客户端提醒后,整个页面都置灰
+
+2020-11-03 12.4.4
+
2020-10-13 12.4.3
修复的Bug
2385 客户端访问禅道多次点击新手教程页面空白
diff --git a/module/common/lang/de.php b/module/common/lang/de.php
index 2831a90f31..dab6f4c9f8 100644
--- a/module/common/lang/de.php
+++ b/module/common/lang/de.php
@@ -408,7 +408,7 @@ $lang->admin = new stdclass();
$lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => 'Home|admin|index', 'alias' => 'register,certifytemail,certifyztmobile,ztcompany');
$lang->admin->menu->message = array('link' => 'Notification|message|index', 'subModule' => 'message,mail,webhook');
-$lang->admin->menu->custom = array('link' => 'Custom|custom|product', 'subModule' => 'custom');
+$lang->admin->menu->custom = array('link' => 'Custom|custom|index', 'subModule' => 'custom');
$lang->admin->menu->sso = array('link' => 'Integration|admin|sso');
$lang->admin->menu->extension = array('link' => 'Extension|extension|browse', 'subModule' => 'extension');
$lang->admin->menu->dev = array('link' => 'Entwicklung|dev|api', 'alias' => 'db', 'subModule' => 'dev,entry');
diff --git a/module/common/lang/en.php b/module/common/lang/en.php
index e83152dd6b..7f11fddb8c 100644
--- a/module/common/lang/en.php
+++ b/module/common/lang/en.php
@@ -408,7 +408,7 @@ $lang->admin = new stdclass();
$lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => 'Home|admin|index', 'alias' => 'register,certifytemail,certifyztmobile,ztcompany');
$lang->admin->menu->message = array('link' => 'Notification|message|index', 'subModule' => 'message,mail,webhook');
-$lang->admin->menu->custom = array('link' => 'Custom|custom|product', 'subModule' => 'custom');
+$lang->admin->menu->custom = array('link' => 'Custom|custom|index', 'subModule' => 'custom');
$lang->admin->menu->sso = array('link' => 'Integration|admin|sso');
$lang->admin->menu->extension = array('link' => 'Extension|extension|browse', 'subModule' => 'extension');
$lang->admin->menu->dev = array('link' => 'Develop|dev|api', 'alias' => 'db', 'subModule' => 'dev,entry');
diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php
index 1df287359e..b9da22bc9b 100644
--- a/module/common/lang/fr.php
+++ b/module/common/lang/fr.php
@@ -408,7 +408,7 @@ $lang->admin = new stdclass();
$lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => 'Accueil|admin|index', 'alias' => 'register,certifytemail,certifyztmobile,ztcompany');
$lang->admin->menu->message = array('link' => 'Notification|message|index', 'subModule' => 'message,mail,webhook');
-$lang->admin->menu->custom = array('link' => 'Personnalisation|custom|product', 'subModule' => 'custom');
+$lang->admin->menu->custom = array('link' => 'Personnalisation|custom|index', 'subModule' => 'custom');
$lang->admin->menu->sso = array('link' => 'Intégration|admin|sso');
$lang->admin->menu->extension = array('link' => 'Extension|extension|browse', 'subModule' => 'extension');
$lang->admin->menu->dev = array('link' => 'Dévelop.|dev|api', 'alias' => 'db', 'subModule' => 'dev,entry');
diff --git a/module/common/lang/vi.php b/module/common/lang/vi.php
index 2066593828..55ad7ef364 100644
--- a/module/common/lang/vi.php
+++ b/module/common/lang/vi.php
@@ -408,7 +408,7 @@ $lang->admin = new stdclass();
$lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => 'Home|admin|index', 'alias' => 'register,certifytemail,certifyztmobile,ztcompany');
$lang->admin->menu->message = array('link' => 'Thông báo|message|index', 'subModule' => 'message,mail,webhook');
-$lang->admin->menu->custom = array('link' => 'Custom|custom|product', 'subModule' => 'custom');
+$lang->admin->menu->custom = array('link' => 'Custom|custom|index', 'subModule' => 'custom');
$lang->admin->menu->sso = array('link' => 'Integration|admin|sso');
$lang->admin->menu->extension = array('link' => 'Extension|extension|browse', 'subModule' => 'extension');
$lang->admin->menu->dev = array('link' => 'Develop|dev|api', 'alias' => 'db', 'subModule' => 'dev,entry');
diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php
index 5b11c4547a..6e1ab65d25 100644
--- a/module/common/lang/zh-cn.php
+++ b/module/common/lang/zh-cn.php
@@ -408,7 +408,7 @@ $lang->admin = new stdclass();
$lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => '首页|admin|index', 'alias' => 'register,certifytemail,certifyztmobile,ztcompany');
$lang->admin->menu->message = array('link' => '通知|message|index', 'subModule' => 'message,mail,webhook');
-$lang->admin->menu->custom = array('link' => '自定义|custom|product', 'subModule' => 'custom');
+$lang->admin->menu->custom = array('link' => '自定义|custom|index', 'subModule' => 'custom');
$lang->admin->menu->sso = array('link' => '集成|admin|sso', 'subModule' => '');
$lang->admin->menu->extension = array('link' => '插件|extension|browse', 'subModule' => 'extension');
$lang->admin->menu->dev = array('link' => '二次开发|dev|api', 'alias' => 'db', 'subModule' => 'dev,entry');
diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php
index 53e5de2873..f19873b89d 100644
--- a/module/common/lang/zh-tw.php
+++ b/module/common/lang/zh-tw.php
@@ -408,7 +408,7 @@ $lang->admin = new stdclass();
$lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => '首頁|admin|index', 'alias' => 'register,certifytemail,certifyztmobile,ztcompany');
$lang->admin->menu->message = array('link' => '通知|message|index', 'subModule' => 'message,mail,webhook');
-$lang->admin->menu->custom = array('link' => '自定義|custom|product', 'subModule' => 'custom');
+$lang->admin->menu->custom = array('link' => '自定義|custom|index', 'subModule' => 'custom');
$lang->admin->menu->sso = array('link' => '整合|admin|sso', 'subModule' => '');
$lang->admin->menu->extension = array('link' => '插件|extension|browse', 'subModule' => 'extension');
$lang->admin->menu->dev = array('link' => '二次開發|dev|api', 'alias' => 'db', 'subModule' => 'dev,entry');
diff --git a/module/custom/control.php b/module/custom/control.php
index fa72023235..51df187483 100644
--- a/module/custom/control.php
+++ b/module/custom/control.php
@@ -19,7 +19,14 @@ class custom extends control
*/
public function index()
{
- die(js::locate(inlink('set')));
+ if(common::hasPriv('custom', 'product')) die(js::locate(inlink('product')));
+ if(common::hasPriv('custom', 'project')) die(js::locate(inlink('project')));
+ if(common::hasPriv('custom', 'set')) die(js::locate(inlink('set')));
+
+ foreach($this->lang->custom->system as $sysObject)
+ {
+ if(common::hasPriv('custom', $sysObject)) die(js::locate(inlink($sysObject)));
+ }
}
/**
diff --git a/module/custom/lang/zh-tw.php b/module/custom/lang/zh-tw.php
index 46640e212b..4cf77b59eb 100644
--- a/module/custom/lang/zh-tw.php
+++ b/module/custom/lang/zh-tw.php
@@ -106,7 +106,7 @@ $lang->custom->notice->noClosedBlock = '沒有永久關閉的區
$lang->custom->notice->required = '頁面提交時,選中的欄位必填';
$lang->custom->notice->conceptResult = '我們已經根據您的選擇為您設置了 %s-%s 模式,使用%s + %s。';
$lang->custom->notice->conceptPath = '您可以在:後台 -> 自定義 -> 流程頁面修改。';
-$lang->custom->notice->readOnlyOfProduct = '禁止修改後,已關閉' . $lang->productCommon . '下的' . $lang->storyCommon . '、Bug、用例、日誌、發布、計劃都禁止修改。';
+$lang->custom->notice->readOnlyOfProduct = '禁止修改後,已關閉' . $lang->productCommon . '下的' . $lang->storyCommon . '、Bug、用例、日誌、發佈、計劃都禁止修改。';
$lang->custom->notice->readOnlyOfProject = '禁止修改後,已關閉' . $lang->projectCommon . '下的任務、版本、日誌以及關聯需求都禁止修改。';
$lang->custom->notice->indexPage['product'] = "從8.2版本起增加了產品主頁視圖,是否預設進入產品主頁?";
diff --git a/module/doc/lang/zh-tw.php b/module/doc/lang/zh-tw.php
index dc51309549..b7cf1708f0 100644
--- a/module/doc/lang/zh-tw.php
+++ b/module/doc/lang/zh-tw.php
@@ -47,6 +47,7 @@ $lang->doc->users = '用戶';
$lang->doc->item = '項';
$lang->doc->num = '文檔數量';
$lang->doc->searchResult = '搜索結果';
+$lang->doc->mailto = '抄送給';
$lang->doc->moduleDoc = '按模組瀏覽';
$lang->doc->searchDoc = '搜索';
@@ -155,6 +156,12 @@ $lang->doc->customShowLibsList['zero'] = '顯示空文檔的庫';
$lang->doc->customShowLibsList['children'] = '顯示子分類的文檔';
$lang->doc->customShowLibsList['unclosed'] = '只顯示未關閉的項目';
+$lang->doc->mail = new stdclass();
+$lang->doc->mail->create = new stdclass();
+$lang->doc->mail->edit = new stdclass();
+$lang->doc->mail->create->title = "%s創建了文檔 #%s:%s";
+$lang->doc->mail->edit->title = "%s編輯了文檔 #%s:%s";
+
$lang->doc->confirmDelete = "您確定刪除該文檔嗎?";
$lang->doc->confirmDeleteLib = "您確定刪除該文檔庫嗎?";
$lang->doc->errorEditSystemDoc = "系統文檔庫無需修改。";
diff --git a/module/group/lang/de.php b/module/group/lang/de.php
index 3fe0981f69..65e41d4bb9 100644
--- a/module/group/lang/de.php
+++ b/module/group/lang/de.php
@@ -51,6 +51,7 @@ $lang->group->copyOptions['copyPriv'] = 'Rechte kopieren';
$lang->group->copyOptions['copyUser'] = 'Benutzer kopieren';
$lang->group->versions[''] = 'Verlauf';
+$lang->group->versions['12_5'] = 'ZenTao12.5';
$lang->group->versions['12_3'] = 'ZenTao12.3';
$lang->group->versions['11_6_2'] = 'ZenTao11.6.2';
$lang->group->versions['10_6'] = 'ZenTao10.6';
diff --git a/module/group/lang/en.php b/module/group/lang/en.php
index fbd50428d1..c8977b6871 100644
--- a/module/group/lang/en.php
+++ b/module/group/lang/en.php
@@ -51,6 +51,7 @@ $lang->group->copyOptions['copyPriv'] = 'Copy Privileges';
$lang->group->copyOptions['copyUser'] = 'Copy Users';
$lang->group->versions[''] = 'History';
+$lang->group->versions['12_5'] = 'ZenTao12.5';
$lang->group->versions['12_3'] = 'ZenTao12.3';
$lang->group->versions['11_6_2'] = 'ZenTao11.6.2';
$lang->group->versions['10_6'] = 'ZenTao10.6';
diff --git a/module/group/lang/fr.php b/module/group/lang/fr.php
index b6140ff954..91aea5b326 100644
--- a/module/group/lang/fr.php
+++ b/module/group/lang/fr.php
@@ -51,6 +51,7 @@ $lang->group->copyOptions['copyPriv'] = 'Copier Privilèges';
$lang->group->copyOptions['copyUser'] = 'Copier Utilisateurs';
$lang->group->versions[''] = 'History';
+$lang->group->versions['12_5'] = 'ZenTao12.5';
$lang->group->versions['12_3'] = 'ZenTao12.3';
$lang->group->versions['11_6_2'] = 'ZenTao11.6.2';
$lang->group->versions['10_6'] = 'ZenTao10.6';
diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php
index 91c5e619ad..29f2bcdae4 100644
--- a/module/group/lang/resource.php
+++ b/module/group/lang/resource.php
@@ -827,6 +827,8 @@ $lang->mail->methodOrder[65] = 'ztCloud';
$lang->resource->custom = new stdclass();
$lang->resource->custom->index = 'index';
$lang->resource->custom->set = 'set';
+$lang->resource->custom->project = 'project';
+$lang->resource->custom->product = 'product';
$lang->resource->custom->restore = 'restore';
$lang->resource->custom->flow = 'flow';
$lang->resource->custom->working = 'working';
@@ -835,11 +837,13 @@ $lang->resource->custom->timezone = 'timezone';
$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';
-$lang->custom->methodOrder[30] = 'setPublic';
-$lang->custom->methodOrder[35] = 'timezone';
+$lang->custom->methodOrder[15] = 'project';
+$lang->custom->methodOrder[10] = 'product';
+$lang->custom->methodOrder[25] = 'restore';
+$lang->custom->methodOrder[30] = 'flow';
+$lang->custom->methodOrder[35] = 'working';
+$lang->custom->methodOrder[40] = 'setPublic';
+$lang->custom->methodOrder[45] = 'timezone';
$lang->resource->datatable = new stdclass();
$lang->resource->datatable->setGlobal = 'setGlobal';
@@ -1479,7 +1483,9 @@ $lang->changelog['12.3'][] = 'testtask-importUnitResult';
$lang->changelog['12.3'][] = 'job-view';
$lang->changelog['12.3'][] = 'ci-commitResult';
-$lang->changelog['12.4.5'][] = 'story-batchToTask';
+$lang->changelog['12.5'][] = 'story-batchToTask';
+$lang->changelog['12.5'][] = 'custom-product';
+$lang->changelog['12.5'][] = 'custom-project';
global $config;
if($config->global->flow != 'full')
diff --git a/module/group/lang/vi.php b/module/group/lang/vi.php
index fa7f7a25fe..fbf34d7831 100644
--- a/module/group/lang/vi.php
+++ b/module/group/lang/vi.php
@@ -51,6 +51,7 @@ $lang->group->copyOptions['copyPriv'] = 'Copy Privileges';
$lang->group->copyOptions['copyUser'] = 'Copy người dùng';
$lang->group->versions[''] = 'Lịch sử';
+$lang->group->versions['12_5'] = 'ZenTao12.5';
$lang->group->versions['12_3'] = 'ZenTao12.3';
$lang->group->versions['11_6_2'] = 'ZenTao11.6.2';
$lang->group->versions['10_6'] = 'ZenTao10.6';
diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php
index ad104330ea..964e661091 100644
--- a/module/group/lang/zh-cn.php
+++ b/module/group/lang/zh-cn.php
@@ -51,6 +51,7 @@ $lang->group->copyOptions['copyPriv'] = '复制权限';
$lang->group->copyOptions['copyUser'] = '复制用户';
$lang->group->versions[''] = '修改历史';
+$lang->group->versions['12_5'] = '禅道12.5';
$lang->group->versions['12_3'] = '禅道12.3';
$lang->group->versions['11_6_2'] = '禅道11.6.2';
$lang->group->versions['10_6'] = '禅道10.6';
diff --git a/module/group/lang/zh-tw.php b/module/group/lang/zh-tw.php
index 4cb2f72ac0..6ae39ff239 100644
--- a/module/group/lang/zh-tw.php
+++ b/module/group/lang/zh-tw.php
@@ -51,6 +51,7 @@ $lang->group->copyOptions['copyPriv'] = '複製權限';
$lang->group->copyOptions['copyUser'] = '複製用戶';
$lang->group->versions[''] = '修改歷史';
+$lang->group->versions['12_5'] = '禪道12.5';
$lang->group->versions['12_3'] = '禪道12.3';
$lang->group->versions['11_6_2'] = '禪道11.6.2';
$lang->group->versions['10_6'] = '禪道10.6';
diff --git a/module/misc/lang/de.php b/module/misc/lang/de.php
index 1bf9f6e5cd..a9fb9ce074 100644
--- a/module/misc/lang/de.php
+++ b/module/misc/lang/de.php
@@ -86,6 +86,7 @@ $lang->misc->feature = new stdclass();
$lang->misc->feature->lastest = 'Letzte Version';
$lang->misc->feature->detailed = 'Details';
+$lang->misc->releaseDate['12.5.stable'] = '2020-11-19';
$lang->misc->releaseDate['12.4.4'] = '2020-10-30';
$lang->misc->releaseDate['12.4.3'] = '2020-10-13';
$lang->misc->releaseDate['12.4.2'] = '2020-09-18';
@@ -135,6 +136,8 @@ $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['12.5.stable'][] = array('title' => 'Fix Bug. Complete high priority story.', 'desc' => '');
+
$lang->misc->feature->all['12.4.4'][] = array('title'=>'Compatible with professional and enterprise editions', 'desc' => '');
$lang->misc->feature->all['12.4.3'][] = array('title'=>'Fix Bug', 'desc' => '');
$lang->misc->feature->all['12.4.2'][] = array('title'=>'Fix Bug', 'desc' => '');
diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php
index 4861ecc79f..8e43235703 100644
--- a/module/misc/lang/en.php
+++ b/module/misc/lang/en.php
@@ -86,6 +86,7 @@ $lang->misc->feature = new stdclass();
$lang->misc->feature->lastest = 'Latest Version';
$lang->misc->feature->detailed = 'Detail';
+$lang->misc->releaseDate['12.5.stable'] = '2020-11-19';
$lang->misc->releaseDate['12.4.4'] = '2020-10-30';
$lang->misc->releaseDate['12.4.3'] = '2020-10-13';
$lang->misc->releaseDate['12.4.2'] = '2020-09-18';
@@ -135,6 +136,8 @@ $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['12.5.stable'][] = array('title' => 'Fix Bug. Complete high priority story.', 'desc' => '');
+
$lang->misc->feature->all['12.4.4'][] = array('title'=>'Compatible with professional and enterprise editions', 'desc' => '');
$lang->misc->feature->all['12.4.3'][] = array('title'=>'Fix Bug', 'desc' => '');
$lang->misc->feature->all['12.4.2'][] = array('title'=>'Fix Bug', 'desc' => '');
diff --git a/module/misc/lang/fr.php b/module/misc/lang/fr.php
index f4ec05ae7f..b5bcbaf474 100644
--- a/module/misc/lang/fr.php
+++ b/module/misc/lang/fr.php
@@ -86,6 +86,7 @@ $lang->misc->feature = new stdclass();
$lang->misc->feature->lastest = 'Dernière Version';
$lang->misc->feature->detailed = 'Détail';
+$lang->misc->releaseDate['12.5.stable'] = '2020-11-19';
$lang->misc->releaseDate['12.4.4'] = '2020-10-30';
$lang->misc->releaseDate['12.4.3'] = '2020-10-13';
$lang->misc->releaseDate['12.4.2'] = '2020-09-18';
@@ -135,6 +136,8 @@ $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['12.5.stable'][] = array('title' => 'Fix Bug. Complete high priority story.', 'desc' => '');
+
$lang->misc->feature->all['12.4.4'][] = array('title'=>'Compatible with professional and enterprise editions', 'desc' => '');
$lang->misc->feature->all['12.4.3'][] = array('title'=>'Fix Bug', 'desc' => '');
$lang->misc->feature->all['12.4.2'][] = array('title'=>'Fix Bug', 'desc' => '');
diff --git a/module/misc/lang/vi.php b/module/misc/lang/vi.php
index 2c51f7780f..cab2b4621a 100644
--- a/module/misc/lang/vi.php
+++ b/module/misc/lang/vi.php
@@ -86,6 +86,7 @@ $lang->misc->feature = new stdclass();
$lang->misc->feature->lastest = 'Latest Version';
$lang->misc->feature->detailed = 'Chi tiết';
+$lang->misc->releaseDate['12.5.stable'] = '2020-11-19';
$lang->misc->releaseDate['12.4.4'] = '2020-10-30';
$lang->misc->releaseDate['12.4.3'] = '2020-10-13';
$lang->misc->releaseDate['12.4.2'] = '2020-09-18';
@@ -135,6 +136,8 @@ $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['12.5.stable'][] = array('title' => 'Fix Bug. Complete high priority story.', 'desc' => '');
+
$lang->misc->feature->all['12.4.4'][] = array('title'=>'Compatible with professional and enterprise editions', 'desc' => '');
$lang->misc->feature->all['12.4.3'][] = array('title'=>'Fix Bug', 'desc' => '');
$lang->misc->feature->all['12.4.2'][] = array('title'=>'Fix Bug', 'desc' => '');
diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php
index 373ee35fdd..54a3a5365c 100644
--- a/module/misc/lang/zh-cn.php
+++ b/module/misc/lang/zh-cn.php
@@ -86,6 +86,7 @@ $lang->misc->feature = new stdclass();
$lang->misc->feature->lastest = '最新版本';
$lang->misc->feature->detailed = '详情';
+$lang->misc->releaseDate['12.5.stable'] = '2020-11-19';
$lang->misc->releaseDate['12.4.4'] = '2020-10-30';
$lang->misc->releaseDate['12.4.3'] = '2020-10-13';
$lang->misc->releaseDate['12.4.2'] = '2020-09-18';
@@ -135,10 +136,12 @@ $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['12.4.4'][] = array('title'=>'兼容专业版和企业版', 'desc' => '');
-$lang->misc->feature->all['12.4.3'][] = array('title'=>'修复Bug', 'desc' => '');
-$lang->misc->feature->all['12.4.2'][] = array('title'=>'修复Bug', 'desc' => '');
-$lang->misc->feature->all['12.4.1'][] = array('title'=>'修复Bug', 'desc' => '');
+$lang->misc->feature->all['12.5.stable'][] = array('title' => '解决bug,完成高优先级需求。', 'desc' => '');
+
+$lang->misc->feature->all['12.4.4'][] = array('title' => '兼容专业版和企业版', 'desc' => '');
+$lang->misc->feature->all['12.4.3'][] = array('title' => '修复Bug', 'desc' => '');
+$lang->misc->feature->all['12.4.2'][] = array('title' => '修复Bug', 'desc' => '');
+$lang->misc->feature->all['12.4.1'][] = array('title' => '修复Bug', 'desc' => '');
$lang->misc->feature->all['12.4.stable'][] = array('title'=>'修复Bug', 'desc' => '');
diff --git a/module/misc/lang/zh-tw.php b/module/misc/lang/zh-tw.php
index f58a6ccf23..6d233854e1 100644
--- a/module/misc/lang/zh-tw.php
+++ b/module/misc/lang/zh-tw.php
@@ -86,6 +86,7 @@ $lang->misc->feature = new stdclass();
$lang->misc->feature->lastest = '最新版本';
$lang->misc->feature->detailed = '詳情';
+$lang->misc->releaseDate['12.5.stable'] = '2020-11-19';
$lang->misc->releaseDate['12.4.4'] = '2020-10-30';
$lang->misc->releaseDate['12.4.3'] = '2020-10-13';
$lang->misc->releaseDate['12.4.2'] = '2020-09-18';
@@ -135,10 +136,12 @@ $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['12.4.4'][] = array('title'=>'兼容專業版和企業版', 'desc' => '');
-$lang->misc->feature->all['12.4.3'][] = array('title'=>'修復Bug', 'desc' => '');
-$lang->misc->feature->all['12.4.2'][] = array('title'=>'修復Bug', 'desc' => '');
-$lang->misc->feature->all['12.4.1'][] = array('title'=>'修復Bug', 'desc' => '');
+$lang->misc->feature->all['12.5.stable'][] = array('title' => '解決bug,完成高優先順序需求。', 'desc' => '');
+
+$lang->misc->feature->all['12.4.4'][] = array('title' => '兼容專業版和企業版', 'desc' => '');
+$lang->misc->feature->all['12.4.3'][] = array('title' => '修復Bug', 'desc' => '');
+$lang->misc->feature->all['12.4.2'][] = array('title' => '修復Bug', 'desc' => '');
+$lang->misc->feature->all['12.4.1'][] = array('title' => '修復Bug', 'desc' => '');
$lang->misc->feature->all['12.4.stable'][] = array('title'=>'修復Bug', 'desc' => '');
diff --git a/module/project/lang/zh-tw.php b/module/project/lang/zh-tw.php
index d288710045..7f7ddad669 100644
--- a/module/project/lang/zh-tw.php
+++ b/module/project/lang/zh-tw.php
@@ -275,6 +275,9 @@ $lang->project->noweekend = '去除周末';
$lang->project->withweekend = '顯示周末';
$lang->project->interval = '間隔';
$lang->project->fixFirstWithLeft = '修改剩餘工時';
+$lang->project->unfinishedProject = "該{$lang->projectCommon}下還有";
+$lang->project->unfinishedTask = "[%s]個未完成的任務,";
+$lang->project->unresolvedBug = "[%s]個未解決的bug,";
$lang->project->action = new stdclass();
$lang->project->action->opened = '$date, 由 $actor 創建。$extra' . "\n";
diff --git a/module/story/lang/zh-tw.php b/module/story/lang/zh-tw.php
index 26eeea5c62..5f06ca660f 100644
--- a/module/story/lang/zh-tw.php
+++ b/module/story/lang/zh-tw.php
@@ -9,57 +9,63 @@
* @version $Id: zh-tw.php 5141 2013-07-15 05:57:15Z chencongzhi520@gmail.com $
* @link http://www.zentao.net
*/
-$lang->story->create = "提{$lang->storyCommon}";
-$lang->story->batchCreate = "批量創建";
-$lang->story->change = "變更";
-$lang->story->changeAction = "變更{$lang->storyCommon}";
-$lang->story->changed = "{$lang->storyCommon}變更";
-$lang->story->assignTo = '指派';
-$lang->story->assignAction = "指派{$lang->storyCommon}";
-$lang->story->review = '評審';
-$lang->story->reviewAction = "評審{$lang->storyCommon}";
-$lang->story->needReview = '需要評審';
-$lang->story->batchReview = '批量評審';
-$lang->story->edit = "編輯";
-$lang->story->batchEdit = "批量編輯";
-$lang->story->subdivide = '細分';
-$lang->story->subdivideAction = "細分{$lang->storyCommon}";
-$lang->story->splitRequirent = '拆分';
-$lang->story->close = '關閉';
-$lang->story->closeAction = "關閉{$lang->storyCommon}";
-$lang->story->batchClose = '批量關閉';
-$lang->story->activate = '激活';
-$lang->story->activateAction = "激活{$lang->storyCommon}";
-$lang->story->delete = "刪除";
-$lang->story->deleteAction = "刪除{$lang->storyCommon}";
-$lang->story->view = "{$lang->storyCommon}詳情";
-$lang->story->setting = "設置";
-$lang->story->tasks = "相關任務";
-$lang->story->bugs = "相關Bug";
-$lang->story->cases = "相關用例";
-$lang->story->taskCount = '任務數';
-$lang->story->bugCount = 'Bug數';
-$lang->story->caseCount = '用例數';
-$lang->story->taskCountAB = 'T';
-$lang->story->bugCountAB = 'B';
-$lang->story->caseCountAB = 'C';
-$lang->story->linkStory = "關聯{$lang->storyCommon}";
-$lang->story->unlinkStory = "移除相關{$lang->storyCommon}";
-$lang->story->export = "導出數據";
-$lang->story->exportAction = "導出{$lang->storyCommon}";
-$lang->story->zeroCase = "零用例{$lang->storyCommon}";
-$lang->story->zeroTask = "只列零任務{$lang->storyCommon}";
-$lang->story->reportChart = "統計報表";
-$lang->story->reportAction = "統計報表";
-$lang->story->copyTitle = "同{$lang->storyCommon}名稱";
+$lang->story->create = "提{$lang->storyCommon}";
+$lang->story->batchCreate = "批量創建";
+$lang->story->change = "變更";
+$lang->story->changeAction = "變更{$lang->storyCommon}";
+$lang->story->changed = "{$lang->storyCommon}變更";
+$lang->story->assignTo = '指派';
+$lang->story->assignAction = "指派{$lang->storyCommon}";
+$lang->story->review = '評審';
+$lang->story->reviewAction = "評審{$lang->storyCommon}";
+$lang->story->needReview = '需要評審';
+$lang->story->batchReview = '批量評審';
+$lang->story->edit = "編輯";
+$lang->story->batchEdit = "批量編輯";
+$lang->story->subdivide = '細分';
+$lang->story->subdivideAction = "細分{$lang->storyCommon}";
+$lang->story->splitRequirent = '拆分';
+$lang->story->close = '關閉';
+$lang->story->closeAction = "關閉{$lang->storyCommon}";
+$lang->story->batchClose = '批量關閉';
+$lang->story->activate = '激活';
+$lang->story->activateAction = "激活{$lang->storyCommon}";
+$lang->story->delete = "刪除";
+$lang->story->deleteAction = "刪除{$lang->storyCommon}";
+$lang->story->view = "{$lang->storyCommon}詳情";
+$lang->story->setting = "設置";
+$lang->story->tasks = "相關任務";
+$lang->story->bugs = "相關Bug";
+$lang->story->cases = "相關用例";
+$lang->story->taskCount = '任務數';
+$lang->story->bugCount = 'Bug數';
+$lang->story->caseCount = '用例數';
+$lang->story->taskCountAB = 'T';
+$lang->story->bugCountAB = 'B';
+$lang->story->caseCountAB = 'C';
+$lang->story->linkStory = "關聯{$lang->storyCommon}";
+$lang->story->unlinkStory = "移除相關{$lang->storyCommon}";
+$lang->story->export = "導出數據";
+$lang->story->exportAction = "導出{$lang->storyCommon}";
+$lang->story->zeroCase = "零用例{$lang->storyCommon}";
+$lang->story->zeroTask = "只列零任務{$lang->storyCommon}";
+$lang->story->reportChart = "統計報表";
+$lang->story->reportAction = "統計報表";
+$lang->story->copyTitle = "同{$lang->storyCommon}名稱";
$lang->story->batchChangePlan = "批量修改計劃";
$lang->story->batchChangeBranch = "批量修改分支";
$lang->story->batchChangeStage = "批量修改階段";
$lang->story->batchAssignTo = "批量指派";
$lang->story->batchChangeModule = "批量修改模組";
$lang->story->viewAll = '查看全部';
-$lang->story->skipStory = '需求:%s 為父需求,將不會被關閉。';
-$lang->story->closedStory = '需求:%s 已關閉,將不會被關閉。';
+$lang->story->toTask = '轉任務';
+$lang->story->batchToTask = '批量轉任務';
+$lang->story->convertRelations = '換算關係';
+
+$lang->story->skipStory = '需求:%s 為父需求,將不會被關閉。';
+$lang->story->closedStory = '需求:%s 已關閉,將不會被關閉。';
+$lang->story->batchToTaskTips = "此操作會創建與所選{$lang->storyCommon}同名的任務,並將{$lang->storyCommon}關聯到任務中,已關閉的需求不會轉為任務。";
+$lang->story->successToTask = '批量轉任務成功';
$lang->story->common = $lang->storyCommon;
$lang->story->id = '編號';
@@ -121,6 +127,8 @@ $lang->story->allStories = "所有{$lang->storyCommon}";
$lang->story->unclosed = '未關閉';
$lang->story->deleted = '已刪除';
$lang->story->released = "已發佈{$lang->storyCommon}數";
+$lang->story->one = '一個';
+$lang->story->field = '同步的欄位';
$lang->story->ditto = '同上';
$lang->story->dittoNotice = "該{$lang->storyCommon}與上一{$lang->storyCommon}不屬於同一產品!";
@@ -337,3 +345,11 @@ $lang->story->chosen->reviewedBy = '選擇評審人...';
$lang->story->notice = new stdClass();
$lang->story->notice->closed = "您選擇的{$lang->storyCommon}已經被關閉了!";
+
+$lang->story->convertToTask = new stdClass();
+$lang->story->convertToTask->fieldList = array();
+$lang->story->convertToTask->fieldList['module'] = '所屬模組';
+$lang->story->convertToTask->fieldList['spec'] = "{$lang->storyCommon}描述";
+$lang->story->convertToTask->fieldList['pri'] = '優先順序';
+$lang->story->convertToTask->fieldList['mailto'] = '抄送給';
+$lang->story->convertToTask->fieldList['assignedTo'] = '指派給';
diff --git a/module/upgrade/lang/version.php b/module/upgrade/lang/version.php
index 2e2bf9fd19..6bc3a97d90 100644
--- a/module/upgrade/lang/version.php
+++ b/module/upgrade/lang/version.php
@@ -128,3 +128,4 @@ $lang->upgrade->fromVersions['12_4'] = '12.4';
$lang->upgrade->fromVersions['12_4_1'] = '12.4.1';
$lang->upgrade->fromVersions['12_4_2'] = '12.4.2';
$lang->upgrade->fromVersions['12_4_3'] = '12.4.3';
+$lang->upgrade->fromVersions['12_4_4'] = '12.4.4';
diff --git a/module/upgrade/model.php b/module/upgrade/model.php
index 0738038171..bdd5ce3621 100644
--- a/module/upgrade/model.php
+++ b/module/upgrade/model.php
@@ -619,6 +619,11 @@ class upgradeModel extends model
case '12_4_3':
$this->saveLogs('Execute 12_4_3');
$this->appendExec('12_4_3');
+ case '12_4_4':
+ $this->saveLogs('Execute 12_4_4');
+ $this->execSQL($this->getUpgradeFile('12.4.4'));
+ $this->adjustPriv12_5();
+ $this->appendExec('12_4_4');
}
$this->deletePatch();
@@ -798,6 +803,7 @@ class upgradeModel extends model
case '12_4_1': $confirmContent .= file_get_contents($this->getUpgradeFile('12.4.1'));
case '12_4_2': $confirmContent .= file_get_contents($this->getUpgradeFile('12.4.2'));
case '12_4_3':
+ case '12_4_4': $confirmContent .= file_get_contents($this->getUpgradeFile('12.4.4'));
}
return str_replace('zt_', $this->config->db->prefix, $confirmContent);
}
@@ -3872,6 +3878,45 @@ class upgradeModel extends model
return true;
}
+ /**
+ * Adjust priv 12.5.
+ *
+ * @access public
+ * @return bool
+ */
+ public function adjustPriv12_5()
+ {
+ $this->saveLogs('Run Method ' . __FUNCTION__);
+
+ $groups = $this->dao->select('*')->from(TABLE_GROUPPRIV)->where('module')->eq('custom')->andWhere('method')->eq('set')->fetchPairs('group', 'group');
+ foreach($groups as $groupID)
+ {
+ $groupPriv = new stdclass();
+ $groupPriv->group = $groupID;
+ $groupPriv->module = 'custom';
+ $groupPriv->method = 'product';
+ $this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec();
+ $this->saveLogs($this->dao->get());
+
+ $groupPriv->method = 'project';
+ $this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec();
+ $this->saveLogs($this->dao->get());
+ }
+
+ $groups = $this->dao->select('*')->from(TABLE_GROUPPRIV)->where('module')->eq('task')->andWhere('method')->eq('create')->fetchPairs('group', 'group');
+ foreach($groups as $groupID)
+ {
+ $groupPriv = new stdclass();
+ $groupPriv->group = $groupID;
+ $groupPriv->module = 'story';
+ $groupPriv->method = 'batchToTask';
+ $this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec();
+ $this->saveLogs($this->dao->get());
+ }
+
+ return true;
+ }
+
/**
* Save Logs.
*
diff --git a/module/user/lang/zh-tw.php b/module/user/lang/zh-tw.php
index f50429dba5..40941d2950 100644
--- a/module/user/lang/zh-tw.php
+++ b/module/user/lang/zh-tw.php
@@ -63,6 +63,8 @@ $lang->user->unlock = "解鎖用戶";
$lang->user->delete = "刪除用戶";
$lang->user->unbind = "解除ZDOO綁定";
$lang->user->login = "用戶登錄";
+$lang->user->bind = "綁定已有賬戶";
+$lang->user->oauthRegister = "註冊新賬號";
$lang->user->mobileLogin = "手機訪問";
$lang->user->editProfile = "修改檔案";
$lang->user->deny = "訪問受限";
diff --git a/tools/check.php b/tools/check.php
index fc735007ba..e4b83496a5 100755
--- a/tools/check.php
+++ b/tools/check.php
@@ -51,6 +51,7 @@ $whiteList[] = 'testtask-sendmail';
$whiteList[] = 'user-login';
$whiteList[] = 'im-login';
$whiteList[] = 'im-debug';
+$whiteList[] = 'im-sysgetserverinfo';
$whiteList[] = 'user-deny';
$whiteList[] = 'user-logout';
$whiteList[] = 'user-setreferer';