From 235b242290de5aea2c268a234f5e0b5594cf939b Mon Sep 17 00:00:00 2001
From: wangyidong
Date: Tue, 22 Jan 2019 14:29:05 +0800
Subject: [PATCH 1/6] * finish task #5203.
---
db/standard/zentao11.1.sql | 969 +++++++++++++++++++++++
module/upgrade/control.php | 9 +
module/upgrade/model.php | 823 +++++++++++++------
module/upgrade/view/consistency.html.php | 2 +-
module/user/control.php | 2 +-
5 files changed, 1568 insertions(+), 237 deletions(-)
create mode 100644 db/standard/zentao11.1.sql
diff --git a/db/standard/zentao11.1.sql b/db/standard/zentao11.1.sql
new file mode 100644
index 0000000000..d50ded5942
--- /dev/null
+++ b/db/standard/zentao11.1.sql
@@ -0,0 +1,969 @@
+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(30) 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 `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 `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',
+ `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,
+ `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 `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,
+ `date` date NOT NULL,
+ `estimate` float NOT NULL,
+ `left` float NOT NULL,
+ `consumed` float NOT NULL,
+ PRIMARY KEY (`project`,`date`)
+) 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',
+ `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',
+ `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,
+ `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 `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 `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` tinyint(3) 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,
+ `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` text 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 `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,
+ `ip` varchar(100) 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;
+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,
+ `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 `zt_im_chat` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `gid` char(40) NOT NULL DEFAULT '',
+ `name` varchar(60) NOT NULL DEFAULT '',
+ `type` varchar(20) NOT NULL DEFAULT 'group',
+ `admins` varchar(255) NOT NULL DEFAULT '',
+ `committers` varchar(255) NOT NULL DEFAULT '',
+ `subject` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `public` enum('0','1') NOT NULL DEFAULT '0',
+ `createdBy` varchar(30) NOT NULL DEFAULT '',
+ `createdDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `editedBy` varchar(30) NOT NULL DEFAULT '',
+ `editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ PRIMARY KEY (`id`),
+ KEY `gid` (`gid`),
+ KEY `name` (`name`),
+ KEY `type` (`type`),
+ KEY `public` (`public`),
+ KEY `createdBy` (`createdBy`),
+ KEY `editedBy` (`editedBy`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_chatuser` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `cgid` char(40) NOT NULL DEFAULT '',
+ `user` mediumint(8) NOT NULL DEFAULT '0',
+ `order` smallint(5) NOT NULL DEFAULT '0',
+ `star` enum('0','1') NOT NULL DEFAULT '0',
+ `hide` enum('0','1') NOT NULL DEFAULT '0',
+ `mute` enum('0','1') NOT NULL DEFAULT '0',
+ `join` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `quit` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `category` varchar(40) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `chatuser` (`cgid`,`user`),
+ KEY `cgid` (`cgid`),
+ KEY `user` (`user`),
+ KEY `order` (`order`),
+ KEY `star` (`star`),
+ KEY `hide` (`hide`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_message` (
+ `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
+ `gid` char(40) NOT NULL DEFAULT '',
+ `cgid` char(40) NOT NULL DEFAULT '',
+ `user` varchar(30) NOT NULL DEFAULT '',
+ `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+ `order` bigint(8) unsigned NOT NULL,
+ `type` enum('normal','broadcast','notify') NOT NULL DEFAULT 'normal',
+ `content` text NOT NULL,
+ `contentType` enum('text','plain','emotion','image','file','object') NOT NULL DEFAULT 'text',
+ `data` text NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `mgid` (`gid`),
+ KEY `mcgid` (`cgid`),
+ KEY `muser` (`user`),
+ KEY `mtype` (`type`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+CREATE TABLE `zt_im_messagestatus` (
+ `user` mediumint(8) NOT NULL DEFAULT '0',
+ `gid` char(40) NOT NULL DEFAULT '',
+ `status` enum('waiting','sent','readed','deleted') NOT NULL DEFAULT 'waiting',
+ UNIQUE KEY `user` (`user`,`gid`)
+) 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`)
+) 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 '',
+ `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 `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,
+ `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,
+ `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 `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_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` char(30) 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',
+ `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_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 `zt_story` (
+ `id` mediumint(8) unsigned 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',
+ `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 '',
+ `color` char(7) NOT NULL,
+ `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait',
+ `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(9) 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 `zt_storystage` (
+ `story` mediumint(8) unsigned NOT NULL,
+ `branch` mediumint(8) unsigned NOT NULL,
+ `stage` varchar(50) NOT NULL,
+ 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',
+ `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` date 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 `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,
+ `caseResult` char(30) NOT NULL,
+ `stepResults` text NOT NULL,
+ `lastRunner` varchar(30) NOT NULL,
+ `date` datetime 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',
+ `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 '',
+ `yahoo` char(90) NOT NULL DEFAULT '',
+ `gtalk` char(90) NOT NULL DEFAULT '',
+ `wangwang` char(90) NOT NULL DEFAULT '',
+ `mobile` char(11) NOT NULL DEFAULT '',
+ `phone` char(20) 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',
+ `clientStatus` enum('online','away','busy','offline') NOT NULL DEFAULT 'offline',
+ `clientLang` varchar(10) NOT NULL DEFAULT 'zh-cn',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `account` (`account`),
+ KEY `dept` (`dept`),
+ KEY `email` (`email`),
+ KEY `commiter` (`commiter`)
+) 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,
+ `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/module/upgrade/control.php b/module/upgrade/control.php
index f85ff42378..bd08951aeb 100644
--- a/module/upgrade/control.php
+++ b/module/upgrade/control.php
@@ -141,6 +141,14 @@ class upgrade extends control
*/
public function afterExec($fromVersion, $processed = 'no')
{
+ $alterSQL = $this->upgrade->checkConsistency($this->config->version);
+ if(!empty($alterSQL))
+ {
+ $this->view->title = $this->lang->upgrade->consistency;
+ $this->view->alterSQL = $alterSQL;
+ die($this->display('upgrade', 'consistency'));
+ }
+
if($processed == 'no')
{
$this->app->loadLang('install');
@@ -172,6 +180,7 @@ class upgrade extends control
$alterSQL = $this->upgrade->checkConsistency();
if(empty($alterSQL)) $this->locate(inlink('checkExtension'));
+ $this->view->title = $this->lang->upgrade->consistency;
$this->view->alterSQL = $alterSQL;
$this->display();
}
diff --git a/module/upgrade/model.php b/module/upgrade/model.php
index d7edb10781..4e7cc7206f 100644
--- a/module/upgrade/model.php
+++ b/module/upgrade/model.php
@@ -39,223 +39,312 @@ class upgradeModel extends model
set_time_limit(0);
switch($fromVersion)
{
- case '0_3beta': $this->execSQL($this->getUpgradeFile('0.3'));
- case '0_4beta': $this->execSQL($this->getUpgradeFile('0.4'));
- case '0_5beta': $this->execSQL($this->getUpgradeFile('0.5'));
- case '0_6beta': $this->execSQL($this->getUpgradeFile('0.6'));
- case '1_0beta':
- $this->execSQL($this->getUpgradeFile('1.0.beta'));
- $this->updateCompany();
- case '1_0rc1': $this->execSQL($this->getUpgradeFile('1.0.rc1'));
- case '1_0rc2':
- case '1_0':
- case '1_0_1': $this->execSQL($this->getUpgradeFile('1.0.1'));
- case '1_1': $this->execSQL($this->getUpgradeFile('1.1'));
- case '1_2':
- $this->execSQL($this->getUpgradeFile('1.2'));
- $this->updateUBB();
- $this->updateNL1_2();
- case '1_3':
- $this->execSQL($this->getUpgradeFile('1.3'));
- $this->updateNL1_3();
- $this->updateTasks();
- case '1_4': $this->execSQL($this->getUpgradeFile('1.4'));
- case '1_5': $this->execSQL($this->getUpgradeFile('1.5'));
- case '2_0': $this->execSQL($this->getUpgradeFile('2.0'));
- case '2_1': $this->execSQL($this->getUpgradeFile('2.1'));
- case '2_2':
- $this->execSQL($this->getUpgradeFile('2.2'));
- $this->updateCases();
- $this->updateActivatedCountOfBug();
- case '2_3': $this->execSQL($this->getUpgradeFile('2.3'));
- case '2_4': $this->execSQL($this->getUpgradeFile('2.4'));
- case '3_0_beta1':
- $this->execSQL($this->getUpgradeFile('3.0.beta1'));
- $this->updateAction();
- $this->setOrderData();
- case '3_0_beta2':
- case '3_0':
- case '3_1': $this->execSQL($this->getUpgradeFile('3.1'));
- case '3_2': $this->execSQL($this->getUpgradeFile('3.2'));
- case '3_2_1': $this->execSQL($this->getUpgradeFile('3.2.1'));
- case '3_3':
- $this->execSQL($this->getUpgradeFile('3.3'));
- $this->updateTaskAssignedTo();
- case '4_0_beta1': $this->execSQL($this->getUpgradeFile('4.0.beta1'));
- case '4_0_beta2':
- $this->execSQL($this->getUpgradeFile('4.0.beta2'));
- $this->updateProjectType();
- $this->updateEstimatePriv();
- case '4_0':
- $this->execSQL($this->getUpgradeFile('4.0'));
- case '4_0_1':
- $this->execSQL($this->getUpgradeFile('4.0.1'));
- $this->addPriv4_0_1();
- case '4_1':
- $this->execSQL($this->getUpgradeFile('4.1'));
- $this->addPriv4_1();
- $this->processTaskFinish();
- $this->deleteCompany();
- case '4_2_beta':
- $this->execSQL($this->getUpgradeFile('4.2'));
- case '4_3_beta':
- $this->execSQL($this->getUpgradeFile('4.3'));
- case '5_0_beta1':
- case '5_0_beta2':
- case '5_0':
- case '5_1':
- case '5_2':
- case '5_2_1':
- $this->mergeProjectGoalAndDesc();
- $this->execSQL($this->getUpgradeFile('5.2.1'));
- case '5_3':
- case '6_0_beta1':
- $this->execSQL($this->getUpgradeFile('6.0.beta1'));
- $this->toLowerTable();
- $this->fixBugOSInfo();
- $this->fixTaskFinishedBy();
- case '6_0':
- $this->execSQL($this->getUpgradeFile('6.0'));
- $this->fixDataIndex();
- case '6_1':
- $this->execSQL($this->getUpgradeFile('6.1'));
- case '6_2':
- case '6_3':
- case '6_4':
- case '7_0':
- $this->execSQL($this->getUpgradeFile('7.0'));
- case '7_1':
- $this->execSQL($this->getUpgradeFile('7.1'));
- $this->initOrder();
- case '7_2':
- case '7_2_4':
- $this->execSQL($this->getUpgradeFile('7.2.4'));
- case '7_2_5':
- $this->adjustOrder7_3();
- case '7_3':
- $this->execSQL($this->getUpgradeFile('7.3'));
- $this->adjustPriv7_4_beta();
- case '7_4_beta':
- $this->execSQL($this->getUpgradeFile('7.4.beta'));
- case '8_0':
- case '8_0_1':
- $this->execSQL($this->getUpgradeFile('8.0.1'));
- $this->addPriv8_1();
- case '8_1':
- $this->execSQL($this->getUpgradeFile('8.1'));
- case '8_1_3':
- $this->execSQL($this->getUpgradeFile('8.1.3'));
- $this->addPriv8_2_beta();
- $this->adjustConfigSectionAndKey();
- case '8_2_beta':
- case '8_2':
- case '8_2_1':
- $this->execSQL($this->getUpgradeFile('8.2.1'));
- case '8_2_2':
- case '8_2_3':
- case '8_2_4':
- case '8_2_5':
- case '8_2_6':
- $this->execSQL($this->getUpgradeFile('8.2.6'));
- $this->adjustDocModule();
- $this->moveDocContent();
- $this->adjustPriv8_3();
- case '8_3':
- case '8_3_1':
- $this->execSQL($this->getUpgradeFile('8.3.1'));
- $this->renameMainLib();
- $this->adjustPriv8_4();
- case '8_4':
- case '8_4_1':
- $this->execSQL($this->getUpgradeFile('8.4.1'));
- case '9_0_beta':
- $this->execSQL($this->getUpgradeFile('9.0.beta'));
- $this->adjustPriv9_0();
- case '9_0':
- $this->fixProjectProductData();
- case '9_0_1':
- $this->execSQL($this->getUpgradeFile('9.0.1'));
- $this->addBugDeadlineToCustomFields();
- $this->adjustPriv9_0_1();
- case '9_1':
- $this->execSQL($this->getUpgradeFile('9.1'));
- case '9_1_1':
- $this->execSQL($this->getUpgradeFile('9.1.1'));
- case '9_1_2':
- $this->execSQL($this->getUpgradeFile('9.1.2'));
- $this->processCustomMenus();
- $this->adjustPriv9_2();
- case '9_2':
- case '9_2_1':
- case '9_3_beta':
- $this->execSQL($this->getUpgradeFile('9.3.beta'));
- case '9_4':
- $this->execSQL($this->getUpgradeFile('9.4'));
- $this->adjustPriv9_4();
- case '9_5':
- $this->execSQL($this->getUpgradeFile('9.5'));
- case '9_5_1':
- $this->execSQL($this->getUpgradeFile('9.5.1'));
- $this->initProjectStoryOrder();
- case '9_6':
- $this->execSQL($this->getUpgradeFile('9.6'));
- $this->fixDatatableColsConfig();
- case '9_6_1':
- $this->addLimitedGroup();
- case '9_6_2':
- case '9_6_3':
- $this->execSQL($this->getUpgradeFile('9.6.3'));
- $this->changeLimitedName();
- $this->adjustPriv9_7();
- $this->changeStoryWidth();
- case '9_7':
- $this->execSQL($this->getUpgradeFile('9.7'));
- $this->changeTeamFields();
- $this->moveData2Notify();
- case '9_8':
- $this->fixTaskFinishedInfo();
- case '9_8_1':
- $this->execSQL($this->getUpgradeFile('9.8.1'));
- $this->fixTaskAssignedTo();
- $this->fixProjectClosedInfo();
- $this->resetProductLine();
- case '9_8_2':
- $this->execSQL($this->getUpgradeFile('9.8.2'));
- $this->addUniqueKeyToTeam();
- case '9_8_3':
- $this->execSQL($this->getUpgradeFile('9.8.3'));
- $this->adjustPriv10_0_alpha();
- case '10_0_alpha':
- $this->execSQL($this->getUpgradeFile('10.0.alpha'));
- $this->fixProjectStatisticBlock();
- case '10_0_beta':
- $this->execSQL($this->getUpgradeFile('10.0.beta'));
- case '10_0':
- $this->execSQL($this->getUpgradeFile('10.0'));
- $this->fixStorySpecTitle();
- $this->removeUnlinkPriv();//Remove unlink privilege for story, bug and testcase module.
- case '10_1':
- $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'xuanxuan.sql';
- $this->execSQL($xuanxuanSql);
- case '10_2':
- case '10_3':
- case '10_3_1':
- $this->execSQL($this->getUpgradeFile('10.3.1'));
- $this->removeCustomMenu();
- $this->initUserView();
- case '10_4':
- $this->execSQL($this->getUpgradeFile('10.4'));
- $this->changeTaskParentValue();
- case '10_5':
- case '10_5_1':
- $this->execSQL($this->getUpgradeFile('10.5.1'));
- case '10_6':
- $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.1.0.sql';
- $this->execSQL($xuanxuanSql);
- $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql';
- $this->execSQL($xuanxuanSql);
- $this->initXuanxuan();
- case '11_0':
+ case '0_3beta':
+ $this->saveLogs('Execute 0_3beta');
+ $this->execSQL($this->getUpgradeFile('0.3'));
+ case '0_4beta':
+ $this->saveLogs('Execute 0_4beta');
+ $this->execSQL($this->getUpgradeFile('0.4'));
+ case '0_5beta':
+ $this->saveLogs('Execute 0_5beta');
+ $this->execSQL($this->getUpgradeFile('0.5'));
+ case '0_6beta':
+ $this->saveLogs('Execute 0_6beta');
+ $this->execSQL($this->getUpgradeFile('0.6'));
+ case '1_0beta':
+ $this->saveLogs('Execute 1_0beta');
+ $this->execSQL($this->getUpgradeFile('1.0.beta'));
+ $this->updateCompany();
+ case '1_0rc1':
+ $this->saveLogs('Execute 1_0rc1');
+ $this->execSQL($this->getUpgradeFile('1.0.rc1'));
+ case '1_0rc2': $this->saveLogs('Execute 1_0rc2');
+ case '1_0': $this->saveLogs('Execute 1_0');
+ case '1_0_1':
+ $this->saveLogs('Execute 1_0_1');
+ $this->execSQL($this->getUpgradeFile('1.0.1'));
+ case '1_1':
+ $this->saveLogs('Execute 1_1');
+ $this->execSQL($this->getUpgradeFile('1.1'));
+ case '1_2':
+ $this->saveLogs('Execute 1_2');
+ $this->execSQL($this->getUpgradeFile('1.2'));
+ $this->updateUBB();
+ $this->updateNL1_2();
+ case '1_3':
+ $this->saveLogs('Execute 1_3');
+ $this->execSQL($this->getUpgradeFile('1.3'));
+ $this->updateNL1_3();
+ $this->updateTasks();
+ case '1_4':
+ $this->saveLogs('Execute 1_4');
+ $this->execSQL($this->getUpgradeFile('1.4'));
+ case '1_5':
+ $this->saveLogs('Execute 1_5');
+ $this->execSQL($this->getUpgradeFile('1.5'));
+ case '2_0':
+ $this->saveLogs('Execute 2_0');
+ $this->execSQL($this->getUpgradeFile('2.0'));
+ case '2_1':
+ $this->saveLogs('Execute 2_1');
+ $this->execSQL($this->getUpgradeFile('2.1'));
+ case '2_2':
+ $this->saveLogs('Execute 2_2');
+ $this->execSQL($this->getUpgradeFile('2.2'));
+ $this->updateCases();
+ $this->updateActivatedCountOfBug();
+ case '2_3':
+ $this->saveLogs('Execute 2_3');
+ $this->execSQL($this->getUpgradeFile('2.3'));
+ case '2_4':
+ $this->saveLogs('Execute 2_4');
+ $this->execSQL($this->getUpgradeFile('2.4'));
+ case '3_0_beta1':
+ $this->saveLogs('Execute 3_0_beta1');
+ $this->execSQL($this->getUpgradeFile('3.0.beta1'));
+ $this->updateAction();
+ $this->setOrderData();
+ case '3_0_beta2': $this->saveLogs('Execute 3_0_beta2');
+ case '3_0': $this->saveLogs('Execute 3_0');
+ case '3_1':
+ $this->saveLogs('Execute 3_1');
+ $this->execSQL($this->getUpgradeFile('3.1'));
+ case '3_2':
+ $this->saveLogs('Execute 3_2');
+ $this->execSQL($this->getUpgradeFile('3.2'));
+ case '3_2_1':
+ $this->saveLogs('Execute 3_2_1');
+ $this->execSQL($this->getUpgradeFile('3.2.1'));
+ case '3_3':
+ $this->saveLogs('Execute 3_3');
+ $this->execSQL($this->getUpgradeFile('3.3'));
+ $this->updateTaskAssignedTo();
+ case '4_0_beta1':
+ $this->saveLogs('Execute 4_0_beta1');
+ $this->execSQL($this->getUpgradeFile('4.0.beta1'));
+ case '4_0_beta2':
+ $this->saveLogs('Execute 4_0_beta2');
+ $this->execSQL($this->getUpgradeFile('4.0.beta2'));
+ $this->updateProjectType();
+ $this->updateEstimatePriv();
+ case '4_0':
+ $this->saveLogs('Execute 4_0');
+ $this->execSQL($this->getUpgradeFile('4.0'));
+ case '4_0_1':
+ $this->saveLogs('Execute 4_0_1');
+ $this->execSQL($this->getUpgradeFile('4.0.1'));
+ $this->addPriv4_0_1();
+ case '4_1':
+ $this->saveLogs('Execute 4_1');
+ $this->execSQL($this->getUpgradeFile('4.1'));
+ $this->addPriv4_1();
+ $this->processTaskFinish();
+ $this->deleteCompany();
+ case '4_2_beta':
+ $this->saveLogs('Execute 4_2_beta');
+ $this->execSQL($this->getUpgradeFile('4.2'));
+ case '4_3_beta':
+ $this->saveLogs('Execute 4_3_beta');
+ $this->execSQL($this->getUpgradeFile('4.3'));
+ case '5_0_beta1': $this->saveLogs('Execute 5_0_beta1');
+ case '5_0_beta2': $this->saveLogs('Execute 5_0_beta2');
+ case '5_0': $this->saveLogs('Execute 5_0');
+ case '5_1': $this->saveLogs('Execute 5_1');
+ case '5_2': $this->saveLogs('Execute 5_2');
+ case '5_2_1':
+ $this->saveLogs('Execute 5_2_1');
+ $this->mergeProjectGoalAndDesc();
+ $this->execSQL($this->getUpgradeFile('5.2.1'));
+ case '5_3': $this->saveLogs('Execute 5_3');
+ case '6_0_beta1':
+ $this->saveLogs('Execute 6_0_beta');
+ $this->execSQL($this->getUpgradeFile('6.0.beta1'));
+ $this->toLowerTable();
+ $this->fixBugOSInfo();
+ $this->fixTaskFinishedBy();
+ case '6_0':
+ $this->saveLogs('Execute 6_0');
+ $this->execSQL($this->getUpgradeFile('6.0'));
+ $this->fixDataIndex();
+ case '6_1':
+ $this->saveLogs('Execute 6_1');
+ $this->execSQL($this->getUpgradeFile('6.1'));
+ case '6_2': $this->saveLogs('Execute 6_2');
+ case '6_3': $this->saveLogs('Execute 6_3');
+ case '6_4': $this->saveLogs('Execute 6_4');
+ case '7_0':
+ $this->saveLogs('Execute 7_0');
+ $this->execSQL($this->getUpgradeFile('7.0'));
+ case '7_1':
+ $this->saveLogs('Execute 7_1');
+ $this->execSQL($this->getUpgradeFile('7.1'));
+ $this->initOrder();
+ case '7_2': $this->saveLogs('Execute 7_2');
+ case '7_2_4':
+ $this->saveLogs('Execute 7_2_4');
+ $this->execSQL($this->getUpgradeFile('7.2.4'));
+ case '7_2_5':
+ $this->saveLogs('Execute 7_2_5');
+ $this->adjustOrder7_3();
+ case '7_3':
+ $this->saveLogs('Execute 7_3');
+ $this->execSQL($this->getUpgradeFile('7.3'));
+ $this->adjustPriv7_4_beta();
+ case '7_4_beta':
+ $this->saveLogs('Execute 7_4_beta');
+ $this->execSQL($this->getUpgradeFile('7.4.beta'));
+ case '8_0': $this->saveLogs('Execute 8_0');
+ case '8_0_1':
+ $this->saveLogs('Execute 8_0_1');
+ $this->execSQL($this->getUpgradeFile('8.0.1'));
+ $this->addPriv8_1();
+ case '8_1':
+ $this->saveLogs('Execute 8_1');
+ $this->execSQL($this->getUpgradeFile('8.1'));
+ case '8_1_3':
+ $this->saveLogs('Execute 8_1_3');
+ $this->execSQL($this->getUpgradeFile('8.1.3'));
+ $this->addPriv8_2_beta();
+ $this->adjustConfigSectionAndKey();
+ case '8_2_beta': $this->saveLogs('Execute 8_2_beta');
+ case '8_2': $this->saveLogs('Execute 8_2');
+ case '8_2_1':
+ $this->saveLogs('Execute 8_2_1');
+ $this->execSQL($this->getUpgradeFile('8.2.1'));
+ case '8_2_2': $this->saveLogs('Execute 8_2_2');
+ case '8_2_3': $this->saveLogs('Execute 8_2_3');
+ case '8_2_4': $this->saveLogs('Execute 8_2_4');
+ case '8_2_5': $this->saveLogs('Execute 8_2_5');
+ case '8_2_6':
+ $this->saveLogs('Execute 8_2_6');
+ $this->execSQL($this->getUpgradeFile('8.2.6'));
+ $this->adjustDocModule();
+ $this->moveDocContent();
+ $this->adjustPriv8_3();
+ case '8_3': $this->saveLogs('Execute 8_3');
+ case '8_3_1':
+ $this->saveLogs('Execute 8_3_1');
+ $this->execSQL($this->getUpgradeFile('8.3.1'));
+ $this->renameMainLib();
+ $this->adjustPriv8_4();
+ case '8_4': $this->saveLogs('Execute 8_4');
+ case '8_4_1':
+ $this->saveLogs('Execute 8_4_1');
+ $this->execSQL($this->getUpgradeFile('8.4.1'));
+ case '9_0_beta':
+ $this->saveLogs('Execute 9_0_beta');
+ $this->execSQL($this->getUpgradeFile('9.0.beta'));
+ $this->adjustPriv9_0();
+ case '9_0':
+ $this->saveLogs('Execute 9_0');
+ $this->fixProjectProductData();
+ case '9_0_1':
+ $this->saveLogs('Execute 9_0_1');
+ $this->execSQL($this->getUpgradeFile('9.0.1'));
+ $this->addBugDeadlineToCustomFields();
+ $this->adjustPriv9_0_1();
+ case '9_1':
+ $this->saveLogs('Execute 9_1');
+ $this->execSQL($this->getUpgradeFile('9.1'));
+ case '9_1_1':
+ $this->saveLogs('Execute 9_1_1');
+ $this->execSQL($this->getUpgradeFile('9.1.1'));
+ case '9_1_2':
+ $this->saveLogs('Execute 9_1_2');
+ $this->execSQL($this->getUpgradeFile('9.1.2'));
+ $this->processCustomMenus();
+ $this->adjustPriv9_2();
+ case '9_2': $this->saveLogs('Execute 9_2');
+ case '9_2_1': $this->saveLogs('Execute 9_2_1');
+ case '9_3_beta':
+ $this->saveLogs('Execute 9_3_beta');
+ $this->execSQL($this->getUpgradeFile('9.3.beta'));
+ case '9_4':
+ $this->saveLogs('Execute 9_4');
+ $this->execSQL($this->getUpgradeFile('9.4'));
+ $this->adjustPriv9_4();
+ case '9_5':
+ $this->saveLogs('Execute 9_5');
+ $this->execSQL($this->getUpgradeFile('9.5'));
+ case '9_5_1':
+ $this->saveLogs('Execute 9_5_1');
+ $this->execSQL($this->getUpgradeFile('9.5.1'));
+ $this->initProjectStoryOrder();
+ case '9_6':
+ $this->saveLogs('Execute 9_6');
+ $this->execSQL($this->getUpgradeFile('9.6'));
+ $this->fixDatatableColsConfig();
+ case '9_6_1':
+ $this->saveLogs('Execute 9_6_1');
+ $this->addLimitedGroup();
+ case '9_6_2': $this->saveLogs('Execute 9_6_2');
+ case '9_6_3':
+ $this->saveLogs('Execute 9_6_3');
+ $this->execSQL($this->getUpgradeFile('9.6.3'));
+ $this->changeLimitedName();
+ $this->adjustPriv9_7();
+ $this->changeStoryWidth();
+ case '9_7':
+ $this->saveLogs('Execute 9_7');
+ $this->execSQL($this->getUpgradeFile('9.7'));
+ $this->changeTeamFields();
+ $this->moveData2Notify();
+ case '9_8':
+ $this->saveLogs('Execute 9_8');
+ $this->fixTaskFinishedInfo();
+ case '9_8_1':
+ $this->saveLogs('Execute 9_8_1');
+ $this->execSQL($this->getUpgradeFile('9.8.1'));
+ $this->fixTaskAssignedTo();
+ $this->fixProjectClosedInfo();
+ $this->resetProductLine();
+ case '9_8_2':
+ $this->saveLogs('Execute 9_8_2');
+ $this->execSQL($this->getUpgradeFile('9.8.2'));
+ $this->addUniqueKeyToTeam();
+ case '9_8_3':
+ $this->saveLogs('Execute 9_8_3');
+ $this->execSQL($this->getUpgradeFile('9.8.3'));
+ $this->adjustPriv10_0_alpha();
+ case '10_0_alpha':
+ $this->saveLogs('Execute 10_0_alpha');
+ $this->execSQL($this->getUpgradeFile('10.0.alpha'));
+ $this->fixProjectStatisticBlock();
+ case '10_0_beta':
+ $this->saveLogs('Execute 10_0_beta');
+ $this->execSQL($this->getUpgradeFile('10.0.beta'));
+ case '10_0':
+ $this->saveLogs('Execute 10_0');
+ $this->execSQL($this->getUpgradeFile('10.0'));
+ $this->fixStorySpecTitle();
+ $this->removeUnlinkPriv();//Remove unlink privilege for story, bug and testcase module.
+ case '10_1':
+ $this->saveLogs('Execute 10_1');
+ $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'xuanxuan.sql';
+ $this->execSQL($xuanxuanSql);
+ case '10_2': $this->saveLogs('Execute 10_2');
+ case '10_3': $this->saveLogs('Execute 10_3');
+ case '10_3_1':
+ $this->saveLogs('Execute 10_3_1');
+ $this->execSQL($this->getUpgradeFile('10.3.1'));
+ $this->removeCustomMenu();
+ $this->initUserView();
+ case '10_4':
+ $this->saveLogs('Execute 10_4');
+ $this->execSQL($this->getUpgradeFile('10.4'));
+ $this->changeTaskParentValue();
+ case '10_5': $this->saveLogs('Execute 10_5');
+ case '10_5_1':
+ $this->saveLogs('Execute 10_5_1');
+ $this->execSQL($this->getUpgradeFile('10.5.1'));
+ case '10_6':
+ $this->saveLogs('Execute 10_6');
+ $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.1.0.sql';
+ $this->execSQL($xuanxuanSql);
+ $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan2.2.0.sql';
+ $this->execSQL($xuanxuanSql);
+ $this->initXuanxuan();
+ case '11_0': $this->saveLogs('Execute 11_0');
}
$this->deletePatch();
@@ -392,6 +481,8 @@ class upgradeModel extends model
*/
public function updateCompany()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
+
/* Get user defined constants. */
$constants = get_defined_constants(true);
$userConstants = $constants['user'];
@@ -414,13 +505,15 @@ class upgradeModel extends model
/**
* Check consistency.
*
+ * @param string $version
* @access public
* @return string
*/
- public function checkConsistency()
+ public function checkConsistency($version = '')
{
+ if(empty($version)) $version = $this->config->installedVersion;
$alterSQL = '';
- $standardSQL = $this->app->getAppRoot() . 'db' . DS . 'standard' . DS . 'zentao' . $this->config->installedVersion . '.sql';
+ $standardSQL = $this->app->getAppRoot() . 'db' . DS . 'standard' . DS . 'zentao' . $version . '.sql';
if(!file_exists($standardSQL)) return $alterSQL;
$tableExists = true;
@@ -514,6 +607,7 @@ class upgradeModel extends model
*/
public function updateUBB()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->app->loadClass('ubb', true);
$bugs = $this->dao->select('id, steps')->from(TABLE_BUG)->fetchAll();
@@ -523,11 +617,13 @@ class upgradeModel extends model
{
$bug->steps = ubb::parseUBB($bug->steps);
$this->dao->update(TABLE_BUG)->data($bug)->where('id')->eq($bug->id)->exec();
+ $this->saveLogs($this->dao->get());
}
foreach($userTemplates as $template)
{
$template->content = ubb::parseUBB($template->content);
$this->dao->update($this->config->db->prefix . 'userTPL')->data($template)->where('id')->eq($template->id)->exec();
+ $this->saveLogs($this->dao->get());
}
}
@@ -539,6 +635,7 @@ class upgradeModel extends model
*/
public function updateNL1_2()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$tasks = $this->dao->select('id, `desc`')->from(TABLE_TASK)->fetchAll();
$stories = $this->dao->select('story, version, spec')->from($this->config->db->prefix . 'storySpec')->fetchAll();
$todos = $this->dao->select('id, `desc`')->from(TABLE_TODO)->fetchAll();
@@ -548,23 +645,27 @@ class upgradeModel extends model
{
$task->desc = nl2br($task->desc);
$this->dao->update(TABLE_TASK)->data($task)->where('id')->eq($task->id)->exec();
+ $this->saveLogs($this->dao->get());
}
foreach($stories as $story)
{
$story->spec = nl2br($story->spec);
$this->dao->update($this->config->db->prefix . 'storySpec')->data($story)->where('story')->eq($story->story)->andWhere('version')->eq($story->version)->exec();
+ $this->saveLogs($this->dao->get());
}
foreach($todos as $todo)
{
$todo->desc = nl2br($todo->desc);
$this->dao->update(TABLE_TODO)->data($todo)->where('id')->eq($todo->id)->exec();
+ $this->saveLogs($this->dao->get());
}
foreach($testTasks as $testtask)
{
$testtask->desc = nl2br($testtask->desc);
$this->dao->update($this->config->db->prefix . 'testTask')->data($testtask)->where('id')->eq($testtask->id)->exec();
+ $this->saveLogs($this->dao->get());
}
}
@@ -576,6 +677,7 @@ class upgradeModel extends model
*/
public function updateNL1_3()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$products = $this->dao->select('id, `desc`')->from(TABLE_PRODUCT)->fetchAll();
$plans = $this->dao->select('id, `desc`')->from($this->config->db->prefix . 'productPlan')->fetchAll();
$releases = $this->dao->select('id, `desc`')->from(TABLE_RELEASE)->fetchAll();
@@ -586,18 +688,21 @@ class upgradeModel extends model
{
$product->desc = nl2br($product->desc);
$this->dao->update(TABLE_PRODUCT)->data($product)->where('id')->eq($product->id)->exec();
+ $this->saveLogs($this->dao->get());
}
foreach($plans as $plan)
{
$plan->desc = nl2br($plan->desc);
$this->dao->update($this->config->db->prefix . 'productPlan')->data($plan)->where('id')->eq($plan->id)->exec();
+ $this->saveLogs($this->dao->get());
}
foreach($releases as $release)
{
$release->desc = nl2br($release->desc);
$this->dao->update(TABLE_RELEASE)->data($release)->where('id')->eq($release->id)->exec();
+ $this->saveLogs($this->dao->get());
}
foreach($projects as $project)
@@ -605,12 +710,14 @@ class upgradeModel extends model
$project->desc = nl2br($project->desc);
$project->goal = nl2br($project->goal);
$this->dao->update(TABLE_PROJECT)->data($project)->where('id')->eq($project->id)->exec();
+ $this->saveLogs($this->dao->get());
}
foreach($builds as $build)
{
$build->desc = nl2br($build->desc);
$this->dao->update(TABLE_BUILD)->data($build)->where('id')->eq($build->id)->exec();
+ $this->saveLogs($this->dao->get());
}
}
@@ -622,6 +729,8 @@ class upgradeModel extends model
*/
public function updateTasks()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
+
/* Get all actions of tasks. */
$actions = $this->dao->select('*')->from(TABLE_ACTION)
->where('objectType')->eq('task')
@@ -682,6 +791,7 @@ class upgradeModel extends model
/* Update action type. */
$this->dao->update(TABLE_ACTION)->set('action')->eq($action->action)->where('id')->eq($action->id)->exec();
+ $this->saveLogs($this->dao->get());
}
}
@@ -689,10 +799,13 @@ class upgradeModel extends model
foreach($tasks as $task)
{
$this->dao->update(TABLE_TASK)->data($task)->where('id')->eq($task->id)->exec();
+ $this->saveLogs($this->dao->get());
}
$this->dao->update(TABLE_TASK)->set('assignedTo=openedBy, assignedDate = finishedDate')->where('status')->eq('done')->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_TASK)->set('assignedTo=openedBy, assignedDate = canceledDate')->where('status')->eq('cancel')->exec();
+ $this->saveLogs($this->dao->get());
/* Update action name. */
}
@@ -705,6 +818,7 @@ class upgradeModel extends model
*/
public function updateActivatedCountOfBug()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$bugActivatedActions = $this->dao->select('*')->from(TABLE_ACTION)->where('action')->eq('activated')->andWhere('objectType')->eq('bug')->fetchAll();
if(!empty($bugActivatedActions))
{
@@ -716,6 +830,7 @@ class upgradeModel extends model
foreach($counts as $key => $count)
{
$this->dao->update(TABLE_BUG)->set('activatedCount')->eq($count)->where('id')->eq($key)->exec();
+ $this->saveLogs($this->dao->get());
}
}
}
@@ -728,6 +843,7 @@ class upgradeModel extends model
*/
public function updateCases()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$results = $this->dao->select('`case`, date, caseResult')->from($this->config->db->prefix . 'testResult')->orderBy('id desc')->fetchGroup('case');
foreach($results as $result)
{
@@ -736,6 +852,7 @@ class upgradeModel extends model
->set('lastResult')->eq($result[0]->caseResult)
->where('id')->eq($result[0]->case)
->exec();
+ $this->saveLogs($this->dao->get());
}
}
@@ -747,8 +864,10 @@ class upgradeModel extends model
*/
public function updateProjectType()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$projects = $this->dao->select('root')->from(TABLE_MODULE)->where('type')->eq('task')->fetchPairs('root');
$this->dao->update(TABLE_PROJECT)->set('type')->eq('waterfall')->where('id')->in($projects)->exec();
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -760,6 +879,7 @@ class upgradeModel extends model
*/
public function updateEstimatePriv()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$privTable = $this->config->db->prefix . 'groupPriv';
$groups = $this->dao->select('*')->from($privTable)
->where('module')->eq('task')
@@ -772,36 +892,42 @@ class upgradeModel extends model
->andWhere('module')->eq('task')
->andWhere('method')->eq('recordEstimate')
->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->insert($privTable)
->set('company')->eq($group->company)
->set('`group`')->eq($group->group)
->set('module')->eq('task')
->set('method')->eq('recordEstimate')
->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->delete()->from($privTable)
->where('`group`')->eq($group->group)
->andWhere('module')->eq('task')
->andWhere('method')->eq('editEstimate')
->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->insert($privTable)
->set('company')->eq($group->company)
->set('`group`')->eq($group->group)
->set('module')->eq('task')
->set('method')->eq('editEstimate')
->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->delete()->from($privTable)
->where('`group`')->eq($group->group)
->andWhere('module')->eq('task')
->andWhere('method')->eq('deleteEstimate')
->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->insert($privTable)
->set('company')->eq($group->company)
->set('`group`')->eq($group->group)
->set('module')->eq('task')
->set('method')->eq('deleteEstimate')
->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -814,6 +940,8 @@ class upgradeModel extends model
*/
public function updateAction()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
+
/* Get projects and tasks from action table. */
$projects = $this->dao->select('id')->from(TABLE_PROJECT)->fetchPairs('id');
$tasks = $this->dao->select('id, project')->from(TABLE_TASK)->fetchPairs('id');
@@ -830,6 +958,7 @@ class upgradeModel extends model
{
$productList = isset($projectProducts[$projectID]) ? join(',', array_keys($projectProducts[$projectID])) : '';
$this->dao->update(TABLE_ACTION)->set('product')->eq($productList)->where('objectType')->eq('project')->andWhere('objectID')->eq($projectID)->exec();
+ $this->saveLogs($this->dao->get());
}
/* Process task actions. */
@@ -845,9 +974,11 @@ class upgradeModel extends model
$productList = isset($projectProducts[$projectID]) ? join(',', array_keys($projectProducts[$projectID])) : '';
}
$this->dao->update(TABLE_ACTION)->set('product')->eq($productList)->where('objectType')->eq('task')->andWhere('objectID')->eq($taskID)->andWhere('project')->eq($projectID)->exec();
+ $this->saveLogs($this->dao->get());
}
$this->dao->update(TABLE_ACTION)->set("product = concat(',',product,',')")->exec();
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -859,15 +990,19 @@ class upgradeModel extends model
*/
public function setOrderData()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
+
$products = $this->dao->select('*')->from(TABLE_PRODUCT)->where('deleted')->eq(0)->orderBy('code')->fetchAll('id');
foreach(array_keys($products) as $key => $productID)
{
$this->dao->update(TABLE_PRODUCT)->set('`order`')->eq(($key + 1) * 10)->where('id')->eq($productID)->exec();
+ $this->saveLogs($this->dao->get());
}
$projects = $this->dao->select('*')->from(TABLE_PROJECT)->where('iscat')->eq(0)->andWhere('deleted')->eq(0)->orderBy('status, id desc')->fetchAll('id');
foreach(array_keys($projects) as $key => $projectID)
{
$this->dao->update(TABLE_PROJECT)->set('`order`')->eq(($key + 1) * 10)->where('id')->eq($projectID)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -880,10 +1015,12 @@ class upgradeModel extends model
*/
public function updateTaskAssignedTo()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->dao->update(TABLE_TASK)->set('assignedTo')->eq('closed')
->where('status')->eq('closed')
->andWhere('assignedTo')->eq('')
->exec();
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -922,6 +1059,7 @@ class upgradeModel extends model
{
if(!file_exists($sqlFile)) return false;
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$mysqlVersion = $this->loadModel('install')->getMysqlVersion();
$ignoreCode = '|1050|1060|1091|1061|';
@@ -950,10 +1088,12 @@ class upgradeModel extends model
$sql = str_replace('zt_', $this->config->db->prefix, $sql);
try
{
+ $this->saveLogs($sql);
$this->dbh->exec($sql);
}
catch(PDOException $e)
{
+ $this->saveLogs($e->getMessage());
$errorInfo = $e->errorInfo;
$errorCode = $errorInfo[1];
if(strpos($ignoreCode, "|$errorCode|") === false) self::$errors[] = $e->getMessage() . "The sql is: $sql
";
@@ -969,6 +1109,7 @@ class upgradeModel extends model
*/
public function addPriv4_0_1()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$privTable = $this->config->db->prefix . 'groupPriv';
$oldPriv = $this->dao->select('*')->from($privTable)
->where('module')->eq('company')
@@ -983,6 +1124,7 @@ class upgradeModel extends model
->set('method')->eq('view')
->set('`group`')->eq($item->group)
->exec();
+ $this->saveLogs($this->dao->get());
}
$oldPriv = $this->dao->select('*')->from($privTable)
@@ -998,6 +1140,7 @@ class upgradeModel extends model
->set('method')->eq('batchFinish')
->set('`group`')->eq($item->group)
->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
@@ -1011,6 +1154,7 @@ class upgradeModel extends model
*/
public function addPriv4_1()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$privTable = $this->config->db->prefix . 'groupPriv';
$oldPriv = $this->dao->select('*')->from($privTable)
->where('module')->eq('tree')
@@ -1025,6 +1169,7 @@ class upgradeModel extends model
->set('method')->eq('browseTask')
->set('`group`')->eq($item->group)
->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
@@ -1038,6 +1183,7 @@ class upgradeModel extends model
*/
public function addPriv8_1()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$privTable = $this->config->db->prefix . 'grouppriv';
$oldPriv = $this->dao->select('*')->from($privTable)
@@ -1051,11 +1197,13 @@ class upgradeModel extends model
->set('method')->eq('linkBugs')
->set('`group`')->eq($item->group)
->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->replace($privTable)
->set('module')->eq('bug')
->set('method')->eq('unlinkBug')
->set('`group`')->eq($item->group)
->exec();
+ $this->saveLogs($this->dao->get());
}
$oldPriv = $this->dao->select('*')->from($privTable)
@@ -1069,11 +1217,13 @@ class upgradeModel extends model
->set('method')->eq('linkStory')
->set('`group`')->eq($item->group)
->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->replace($privTable)
->set('module')->eq('story')
->set('method')->eq('unlinkStory')
->set('`group`')->eq($item->group)
->exec();
+ $this->saveLogs($this->dao->get());
}
$oldPriv = $this->dao->select('*')->from($privTable)
@@ -1087,11 +1237,13 @@ class upgradeModel extends model
->set('method')->eq('linkCases')
->set('`group`')->eq($item->group)
->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->replace($privTable)
->set('module')->eq('testcase')
->set('method')->eq('unlinkCase')
->set('`group`')->eq($item->group)
->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
@@ -1105,31 +1257,50 @@ class upgradeModel extends model
*/
public function addPriv8_2_beta()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$privTable = $this->config->db->prefix . 'grouppriv';
/* Change product-all priv. */
$groups = $this->dao->select('`group`')->from($privTable)->where('`module`')->eq('product')->andWhere('`method`')->eq('index')->fetchPairs('group', 'group');
- foreach($groups as $group) $this->dao->replace($privTable)->set('module')->eq('product')->set('method')->eq('all')->set('`group`')->eq($group)->exec();
+ foreach($groups as $group)
+ {
+ $this->dao->replace($privTable)->set('module')->eq('product')->set('method')->eq('all')->set('`group`')->eq($group)->exec();
+ $this->saveLogs($this->dao->get());
+ }
/* Change project-all priv. */
$groups = $this->dao->select('`group`')->from($privTable)->where('`module`')->eq('project')->andWhere('`method`')->eq('index')->fetchPairs('group', 'group');
- foreach($groups as $group) $this->dao->replace($privTable)->set('module')->eq('project')->set('method')->eq('all')->set('`group`')->eq($group)->exec();
+ foreach($groups as $group)
+ {
+ $this->dao->replace($privTable)->set('module')->eq('project')->set('method')->eq('all')->set('`group`')->eq($group)->exec();
+ $this->saveLogs($this->dao->get());
+ }
/* Add kanban and tree priv. */
$groups = $this->dao->select('`group`')->from($privTable)->where('`module`')->eq('project')->andWhere('`method`')->eq('task')->fetchPairs('group', 'group');
foreach($groups as $group)
{
$this->dao->replace($privTable)->set('module')->eq('project')->set('method')->eq('kanban')->set('`group`')->eq($group)->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->replace($privTable)->set('module')->eq('project')->set('method')->eq('tree')->set('`group`')->eq($group)->exec();
+ $this->saveLogs($this->dao->get());
}
/* Change manageContacts priv. */
$groups = $this->dao->select('`group`')->from($privTable)->where('`module`')->eq('user')->andWhere('`method`')->eq('manageContacts')->fetchPairs('group', 'group');
- foreach($groups as $group) $this->dao->replace($privTable)->set('module')->eq('my')->set('method')->eq('manageContacts')->set('`group`')->eq($group)->exec();
+ foreach($groups as $group)
+ {
+ $this->dao->replace($privTable)->set('module')->eq('my')->set('method')->eq('manageContacts')->set('`group`')->eq($group)->exec();
+ $this->saveLogs($this->dao->get());
+ }
/* Change deleteContacts priv. */
$groups = $this->dao->select('`group`')->from($privTable)->where('`module`')->eq('user')->andWhere('`method`')->eq('deleteContacts')->fetchPairs('group', 'group');
- foreach($groups as $group) $this->dao->replace($privTable)->set('module')->eq('my')->set('method')->eq('deleteContacts')->set('`group`')->eq($group)->exec();
+ foreach($groups as $group)
+ {
+ $this->dao->replace($privTable)->set('module')->eq('my')->set('method')->eq('deleteContacts')->set('`group`')->eq($group)->exec();
+ $this->saveLogs($this->dao->get());
+ }
/* Change batchChangeModule priv. */
$oldPriv = $this->dao->select('*')->from($privTable)
@@ -1138,7 +1309,11 @@ class upgradeModel extends model
->orWhere("(`module`='bug' and `method`='edit')")
->orWhere("(`module`='testcase' and `method`='edit')")
->fetchAll();
- foreach($oldPriv as $item) $this->dao->replace($privTable)->set('module')->eq($item->module)->set('method')->eq('batchChangeModule')->set('`group`')->eq($item->group)->exec();
+ foreach($oldPriv as $item)
+ {
+ $this->dao->replace($privTable)->set('module')->eq($item->module)->set('method')->eq('batchChangeModule')->set('`group`')->eq($item->group)->exec();
+ $this->saveLogs($this->dao->get());
+ }
return true;
}
@@ -1151,13 +1326,20 @@ class upgradeModel extends model
*/
public function adjustConfigSectionAndKey()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->dao->update(TABLE_CONFIG)->set('`key`')->eq('productProject')->where('`key`')->eq('productproject')->andWhere('module')->eq('custom')->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_CONFIG)->set('section')->eq('bugBrowse')->where('section')->eq('bugbrowse')->andWhere('module')->eq('datatable')->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_CONFIG)->set('section')->eq('productBrowse')->where('section')->eq('productbrowse')->andWhere('module')->eq('datatable')->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_CONFIG)->set('section')->eq('projectTask')->where('section')->eq('projecttask')->andWhere('module')->eq('datatable')->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_CONFIG)->set('section')->eq('testcaseBrowse')->where('section')->eq('testcasebrowse')->andWhere('module')->eq('datatable')->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_CONFIG)->set('section')->eq('testtaskCases')->where('section')->eq('testtaskcases')->andWhere('module')->eq('datatable')->exec();
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -1171,7 +1353,8 @@ class upgradeModel extends model
*/
public function toLowerTable($build = 'basic')
{
- $results = $this->dbh->query("show Variables like '%table_names'")->fetchAll();
+ $this->saveLogs('Run Method ' . __FUNCTION__);
+ $results = $this->dao->query("show Variables like '%table_names'")->fetchAll();
$hasLowered = false;
foreach($results as $result)
{
@@ -1187,7 +1370,7 @@ class upgradeModel extends model
if($build == 'pro') $tables2Rename = $this->config->upgrade->lowerProTables;
if(!isset($tables2Rename)) return false;
- $tablesExists = $this->dbh->query('SHOW TABLES')->fetchAll();
+ $tablesExists = $this->dao->query('SHOW TABLES')->fetchAll();
foreach($tablesExists as $key => $table) $tablesExists[$key] = current((array)$table);
$tablesExists = array_flip($tablesExists);
@@ -1196,12 +1379,22 @@ class upgradeModel extends model
if(!isset($tablesExists[$oldTable])) continue;
$upgradebak = $newTable . '_othertablebak';
- if(isset($tablesExists[$upgradebak])) $this->dbh->query("DROP TABLE `$upgradebak`");
- if(isset($tablesExists[$newTable])) $this->dbh->query("RENAME TABLE `$newTable` TO `$upgradebak`");
+ if(isset($tablesExists[$upgradebak]))
+ {
+ $this->dao->query("DROP TABLE `$upgradebak`");
+ $this->saveLogs($this->dao->get());
+ }
+ if(isset($tablesExists[$newTable]))
+ {
+ $this->dao->query("RENAME TABLE `$newTable` TO `$upgradebak`");
+ $this->saveLogs($this->dao->get());
+ }
$tempTable = $oldTable . '_zentaotmp';
- $this->dbh->query("RENAME TABLE `$oldTable` TO `$tempTable`");
- $this->dbh->query("RENAME TABLE `$tempTable` TO `$newTable`");
+ $this->dao->query("RENAME TABLE `$oldTable` TO `$tempTable`");
+ $this->saveLogs($this->dao->get());
+ $this->dao->query("RENAME TABLE `$tempTable` TO `$newTable`");
+ $this->saveLogs($this->dao->get());
}
return true;
@@ -1215,12 +1408,14 @@ class upgradeModel extends model
*/
public function processTaskFinish()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->dao->update(TABLE_TASK)
->set('finishedBy = lastEditedBy')
->set('finishedDate = lastEditedDate')
->where('status')->in('done,closed')
->andWhere('finishedBy')->eq('')
->exec();
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -1233,10 +1428,13 @@ class upgradeModel extends model
*/
public function deleteCompany()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$privTable = $this->config->db->prefix . 'groupPriv';
/* Delete priv that is not in this company. Prevent conflict when delete company's field.*/
$this->dao->delete()->from($privTable)->where('company')->ne($this->app->company->id)->exec();
- $this->dbh->exec("ALTER TABLE " . $privTable . " DROP `company`;");
+ $this->saveLogs($this->dao->get());
+ $this->dao->exec("ALTER TABLE " . $privTable . " DROP `company`;");
+ $this->saveLogs($this->dao->get());
/* Delete config that don't conform to the rules. Prevent conflict when delete company's field.*/
$rows = $this->dao->select('*')->from(TABLE_CONFIG)->orderBy('id desc')->fetchAll('id');
@@ -1254,7 +1452,8 @@ class upgradeModel extends model
}
if($delList) $this->dao->delete()->from(TABLE_CONFIG)->where('id')->in($delList)->exec();
- $this->dbh->exec("ALTER TABLE " . TABLE_CONFIG . " DROP `company`;");
+ $this->dao->exec("ALTER TABLE " . TABLE_CONFIG . " DROP `company`;");
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -1267,6 +1466,7 @@ class upgradeModel extends model
*/
public function mergeProjectGoalAndDesc()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$projects = $this->dao->select('*')->from(TABLE_PROJECT)->fetchAll('id');
foreach($projects as $id => $project)
{
@@ -1276,6 +1476,7 @@ class upgradeModel extends model
->set('`desc`')->eq($project->desc . '
' . $project->goal)
->where('id')->eq($id)
->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -1288,8 +1489,11 @@ class upgradeModel extends model
*/
public function fixBugOSInfo()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->dao->update(TABLE_BUG)->set('os')->eq('android')->where('os')->eq('andriod')->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_BUG)->set('os')->eq('osx')->where('os')->eq('mac')->exec();
+ $this->saveLogs($this->dao->get());
}
/**
@@ -1300,6 +1504,7 @@ class upgradeModel extends model
*/
public function fixTaskFinishedBy()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$tasks = $this->dao->select('t1.id,t2.actor,t2.date')->from(TABLE_TASK)->alias('t1')
->leftJoin(TABLE_ACTION)->alias('t2')
->on('t1.id = t2.objectID')
@@ -1319,6 +1524,7 @@ class upgradeModel extends model
->set('finishedDate')->eq($task->date)
->where('id')->eq($taskID)
->exec();
+ $this->saveLogs($this->dao->get());
}
}
@@ -1330,6 +1536,7 @@ class upgradeModel extends model
*/
public function fixDataIndex()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$savePath = $this->loadModel('file')->savePath;
foreach(glob($savePath . '*') as $childDir)
{
@@ -1346,13 +1553,22 @@ class upgradeModel extends model
*/
public function initOrder()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$dataList = $this->dao->select('id')->from(TABLE_PRODUCT)->orderBy('code_desc')->fetchAll();
$i = 1;
- foreach($dataList as $data) $this->dao->update(TABLE_PRODUCT)->set('`order`')->eq($i++)->where('id')->eq($data->id)->exec();
+ foreach($dataList as $data)
+ {
+ $this->dao->update(TABLE_PRODUCT)->set('`order`')->eq($i++)->where('id')->eq($data->id)->exec();
+ $this->saveLogs($this->dao->get());
+ }
$dataList = $this->dao->select('id')->from(TABLE_PROJECT)->orderBy('code_desc')->fetchAll();
$i = 1;
- foreach($dataList as $data) $this->dao->update(TABLE_PROJECT)->set('`order`')->eq($i++)->where('id')->eq($data->id)->exec();
+ foreach($dataList as $data)
+ {
+ $this->dao->update(TABLE_PROJECT)->set('`order`')->eq($i++)->where('id')->eq($data->id)->exec();
+ $this->saveLogs($this->dao->get());
+ }
return true;
}
@@ -1365,6 +1581,7 @@ class upgradeModel extends model
*/
public function adjustOrder7_3()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->loadModel('product')->fixOrder();
$this->loadModel('project')->fixOrder();
@@ -1379,6 +1596,7 @@ class upgradeModel extends model
*/
public function adjustPriv7_4_beta()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$groups = $this->dao->select('id')->from(TABLE_GROUP)->where('name')->ne('guest')->fetchPairs('id', 'id');
foreach($groups as $groupID)
{
@@ -1387,6 +1605,7 @@ class upgradeModel extends model
$groupPriv->module = 'my';
$groupPriv->method = 'unbind';
$this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
@@ -1400,6 +1619,7 @@ class upgradeModel extends model
*/
public function adjustDocModule()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->app->loadLang('doc');
$productDocModules = $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('productdoc')->orderBy('grade,id')->fetchAll('id');
$allProductIdList = $this->dao->select('id,name,acl,whitelist,createdBy')->from(TABLE_PRODUCT)->where('deleted')->eq('0')->fetchAll('id');
@@ -1415,6 +1635,7 @@ class upgradeModel extends model
$lib->users = $product->createdBy;
if($product->acl == 'custom') $lib->groups = $product->whitelist;
$this->dao->insert(TABLE_DOCLIB)->data($lib)->exec();
+ $this->saveLogs($this->dao->get());
$libID = $this->dao->lastInsertID();
$relation = array();
@@ -1425,6 +1646,7 @@ class upgradeModel extends model
$module->root = $libID;
$module->type = 'doc';
$this->dao->insert(TABLE_MODULE)->data($module)->exec();
+ $this->saveLogs($this->dao->get());
$newModuleID = $this->dao->lastInsertID();
$relation[$moduleID] = $newModuleID;
@@ -1436,17 +1658,21 @@ class upgradeModel extends model
$newPaths = join(',', $newPaths);
$this->dao->update(TABLE_MODULE)->set('path')->eq($newPaths)->set('parent')->eq($relation[$module->parent])->where('id')->eq($newModuleID)->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_DOC)->set('module')->eq($newModuleID)->where('product')->eq($productID)->andWhere('module')->eq($moduleID)->andWhere('lib')->eq('product')->exec();
+ $this->saveLogs($this->dao->get());
}
$this->dao->update(TABLE_DOC)->set('lib')->eq($libID)->where('product')->eq($productID)->exec();
}
$this->dao->delete()->from(TABLE_MODULE)->where('id')->in(array_keys($productDocModules))->exec();
+ $this->saveLogs($this->dao->get());
$projectDocModules = $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('projectdoc')->orderBy('grade,id')->fetchAll('id');
$allProjectIdList = $this->dao->select('id,name,acl,whitelist')->from(TABLE_PROJECT)->where('deleted')->eq('0')->fetchAll('id');
foreach($allProjectIdList as $projectID => $project)
{
$this->dao->delete()->from(TABLE_DOCLIB)->where('project')->eq($projectID)->exec();
+ $this->saveLogs($this->dao->get());
$lib = new stdclass();
$lib->project = $projectID;
@@ -1458,6 +1684,7 @@ class upgradeModel extends model
$lib->users = join(',', $teams);
if($project->acl == 'custom') $lib->groups = $project->whitelist;
$this->dao->insert(TABLE_DOCLIB)->data($lib)->exec();
+ $this->saveLogs($this->dao->get());
$libID = $this->dao->lastInsertID();
$docLibs = $this->dao->select('id,users')->from(TABLE_DOCLIB)->alias('t1')
@@ -1470,6 +1697,7 @@ class upgradeModel extends model
$docUsers = $teams + explode(',', $lib->users);
$docUsers = array_unique($docUsers);
$this->dao->update(TABLE_DOCLIB)->set('users')->eq(join(',', $docUsers))->where('id')->eq($lib->id)->exec();
+ $this->saveLogs($this->dao->get());
}
$relation = array();
@@ -1479,6 +1707,7 @@ class upgradeModel extends model
$module->root = $libID;
$module->type = 'doc';
$this->dao->insert(TABLE_MODULE)->data($module)->exec();
+ $this->saveLogs($this->dao->get());
$newModuleID = $this->dao->lastInsertID();
$relation[$moduleID] = $newModuleID;
@@ -1491,11 +1720,15 @@ class upgradeModel extends model
$newPaths = join(',', $newPaths);
$newPaths = ",$newPaths,";
$this->dao->update(TABLE_MODULE)->set('path')->eq($newPaths)->where('id')->eq($newModuleID)->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_DOC)->set('module')->eq($newModuleID)->where('project')->eq($projectID)->andWhere('module')->eq($moduleID)->exec();
+ $this->saveLogs($this->dao->get());
}
$this->dao->update(TABLE_DOC)->set('lib')->eq($libID)->where('project')->eq($projectID)->exec();
+ $this->saveLogs($this->dao->get());
}
$this->dao->delete()->from(TABLE_MODULE)->where('id')->in(array_keys($projectDocModules))->exec();
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -1521,6 +1754,7 @@ class upgradeModel extends model
preg_match_all('/"data\/upload\/.*1\/([0-9]{6}\/[^"]+)"/', $action->comment, $output);
foreach($output[1] as $path)$files[$path] = $path;
$this->dao->update(TABLE_FILE)->set('objectType')->eq($action->objectType)->set('objectID')->eq($action->objectID)->set('extra')->eq('editor')->where('pathname')->in($files)->exec();
+ $this->saveLogs($this->dao->get());
}
if(count($comments) < $limit)
{
@@ -1580,7 +1814,11 @@ class upgradeModel extends model
foreach($output[1] as $path)$files[$path] = $path;
}
}
- if($files) $this->dao->update(TABLE_FILE)->set('objectType')->eq($type)->set('objectID')->eq($objectID)->set('extra')->eq('editor')->where('pathname')->in($files)->exec();
+ if($files)
+ {
+ $this->dao->update(TABLE_FILE)->set('objectType')->eq($type)->set('objectID')->eq($objectID)->set('extra')->eq('editor')->where('pathname')->in($files)->exec();
+ $this->saveLogs($this->dao->get());
+ }
}
if(count($objects) < $limit)
{
@@ -1614,6 +1852,7 @@ class upgradeModel extends model
*/
public function moveDocContent()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$descDoc = $this->dao->query('DESC ' . TABLE_DOC)->fetchAll();
$processFields = 0;
foreach($descDoc as $field)
@@ -1623,6 +1862,7 @@ class upgradeModel extends model
if($processFields < 3) return true;
$this->dao->exec('TRUNCATE TABLE ' . TABLE_DOCCONTENT);
+ $this->saveLogs($this->dao->get());
$stmt = $this->dao->select('id,title,digest,content,url')->from(TABLE_DOC)->query();
$fileGroups = $this->dao->select('id,objectID')->from(TABLE_FILE)->where('objectType')->eq('doc')->fetchGroup('objectID', 'id');
while($doc = $stmt->fetch())
@@ -1638,10 +1878,14 @@ class upgradeModel extends model
$docContent->type = 'html';
if(isset($fileGroups[$doc->id])) $docContent->files = join(',', array_keys($fileGroups[$doc->id]));
$this->dao->insert(TABLE_DOCCONTENT)->data($docContent)->exec();
+ $this->saveLogs($this->dao->get());
}
$this->dao->exec('ALTER TABLE ' . TABLE_DOC . ' DROP `digest`');
+ $this->saveLogs($this->dao->get());
$this->dao->exec('ALTER TABLE ' . TABLE_DOC . ' DROP `content`');
+ $this->saveLogs($this->dao->get());
$this->dao->exec('ALTER TABLE ' . TABLE_DOC . ' DROP `url`');
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -1653,6 +1897,7 @@ class upgradeModel extends model
*/
public function adjustPriv8_3()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$docPrivGroups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('doc')->andWhere('method')->eq('index')->fetchPairs('group', 'group');
foreach($docPrivGroups as $groupID)
{
@@ -1661,12 +1906,15 @@ class upgradeModel extends model
$data->module = 'doc';
$data->method = 'allLibs';
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
$data->method = 'showFiles';
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
$data->method = 'objectLibs';
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -1679,9 +1927,12 @@ class upgradeModel extends model
*/
public function renameMainLib()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->app->loadLang('doc');
$this->dao->update(TABLE_DOCLIB)->set('name')->eq($this->lang->doclib->main['product'])->where('product')->gt(0)->andWhere('main')->eq(1)->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_DOCLIB)->set('name')->eq($this->lang->doclib->main['project'])->where('project')->gt(0)->andWhere('main')->eq(1)->exec();
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -1693,6 +1944,7 @@ class upgradeModel extends model
*/
public function adjustPriv8_4()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('branch')->andWhere('method')->eq('manage')->fetchPairs('group', 'group');
foreach($groups as $groupID)
{
@@ -1701,6 +1953,7 @@ class upgradeModel extends model
$data->module = 'branch';
$data->method = 'sort';
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
$groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('story')->andWhere('method')->eq('tasks')->fetchPairs('group', 'group');
foreach($groups as $groupID)
@@ -1710,9 +1963,11 @@ class upgradeModel extends model
$data->module = 'story';
$data->method = 'bugs';
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
$data->method = 'cases';
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -1725,6 +1980,7 @@ class upgradeModel extends model
*/
public function adjustPriv9_0()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('testtask')->andWhere('method')->eq('results')->fetchPairs('group', 'group');
foreach($groups as $groupID)
{
@@ -1733,6 +1989,7 @@ class upgradeModel extends model
$data->module = 'testcase';
$data->method = 'bugs';
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
$groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('mail')->andWhere('method')->eq('delete')->fetchPairs('group', 'group');
foreach($groups as $groupID)
@@ -1742,6 +1999,7 @@ class upgradeModel extends model
$data->module = 'mail';
$data->method = 'resend';
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -1755,6 +2013,7 @@ class upgradeModel extends model
public function fixProjectProductData()
{
$this->dao->delete()->from(TABLE_PROJECTPRODUCT)->where('product')->eq(0)->exec();
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -1766,6 +2025,7 @@ class upgradeModel extends model
*/
public function addBugDeadlineToCustomFields()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$createFieldsItems = $this->dao->select('id, value')->from(TABLE_CONFIG)
->where('module')->eq('bug')
->andWhere('section')->eq('custom')
@@ -1781,11 +2041,13 @@ class upgradeModel extends model
{
$value = empty($createFieldsItem->value) ? 'deadline' : $createFieldsItem->value . ",deadline";
$this->dao->update(TABLE_CONFIG)->set('value')->eq($value)->where('id')->eq($createFieldsItem->id)->exec();
+ $this->saveLogs($this->dao->get());
}
foreach($batchEditFieldsItems as $batchEditFieldsItem)
{
$value = empty($batchEditFieldsItem->value) ? 'deadline' : $batchEditFieldsItem->value . ",deadline";
$this->dao->update(TABLE_CONFIG)->set('value')->eq($value)->where('id')->eq($batchEditFieldsItem->id)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
@@ -1799,6 +2061,7 @@ class upgradeModel extends model
*/
public function adjustPriv9_0_1()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('testcase')->andWhere('method')->eq('edit')->fetchPairs('group', 'group');
foreach($groups as $groupID)
{
@@ -1810,6 +2073,7 @@ class upgradeModel extends model
{
$data->method = $method;
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
$data->module = 'testsuite';
@@ -1818,6 +2082,7 @@ class upgradeModel extends model
{
$data->method = $method;
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
}
@@ -1832,6 +2097,7 @@ class upgradeModel extends model
{
$data->method = $method;
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
}
@@ -1846,6 +2112,7 @@ class upgradeModel extends model
{
$data->method = $method;
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
}
return true;
@@ -1859,6 +2126,7 @@ class upgradeModel extends model
*/
public function adjustPriv9_2()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('testsuite')->andWhere('method')->eq('createCase')->fetchPairs('group', 'group');
foreach($groups as $groupID)
{
@@ -1870,6 +2138,7 @@ class upgradeModel extends model
{
$data->method = $method;
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
}
@@ -1881,6 +2150,7 @@ class upgradeModel extends model
$data->module = 'product';
$data->method = 'build';
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
$groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('custom')->andWhere('method')->eq('flow')->fetchPairs('group', 'group');
@@ -1891,6 +2161,7 @@ class upgradeModel extends model
$data->module = 'custom';
$data->method = 'working';
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -1903,6 +2174,7 @@ class upgradeModel extends model
*/
public function adjustPriv9_4()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$groups = $this->dao->select('`group`')->from(TABLE_GROUPPRIV)->where('module')->eq('bug')->andWhere('method')->eq('activate')->fetchPairs('group', 'group');
foreach($groups as $groupID)
{
@@ -1911,6 +2183,7 @@ class upgradeModel extends model
$data->module = 'bug';
$data->method = 'batchActivate';
$this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -1974,12 +2247,14 @@ class upgradeModel extends model
*/
public function processCustomMenus()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->loadModel('setting')->setItem('system.common.global.flow', 'full');
$customMenus = $this->dao->select('*')->from(TABLE_CONFIG)->where('section')->eq('customMenu')->fetchAll();
foreach($customMenus as $customMenu)
{
$this->dao->update(TABLE_CONFIG)->set('`key`')->eq("full_{$customMenu->key}")->where('id')->eq($customMenu->id)->exec();
+ $this->saveLogs($this->dao->get());
}
return !dao::isError();
@@ -1993,6 +2268,7 @@ class upgradeModel extends model
*/
public function initProjectStoryOrder()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$storyGroup = $this->dao->select('t1.*')->from(TABLE_PROJECTSTORY)->alias('t1')
->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story=t2.id')
->orderBy('t2.pri_desc,t1.story_asc')
@@ -2004,6 +2280,7 @@ class upgradeModel extends model
foreach($stories as $storyID => $projectStory)
{
$this->dao->update(TABLE_PROJECTSTORY)->set('`order`')->eq($order)->where('project')->eq($projectID)->andWhere('story')->eq($storyID)->exec();
+ $this->saveLogs($this->dao->get());
$order++;
}
}
@@ -2018,6 +2295,7 @@ class upgradeModel extends model
*/
public function fixDatatableColsConfig()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$config = $this->dao->select('*')->from(TABLE_CONFIG)
->where('module')->eq('datatable')
->andWhere('section')->eq('projectTask')
@@ -2033,6 +2311,7 @@ class upgradeModel extends model
if($col->id == 'actions' and $col->width == 'auto') $col->width = '180px';
}
$this->dao->update(TABLE_CONFIG)->set('value')->eq(json_encode($cols))->where('id')->eq($datatableCols->id)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
@@ -2046,6 +2325,7 @@ class upgradeModel extends model
*/
public function addLimitedGroup()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$limitedGroup = $this->dao->select('*')->from(TABLE_GROUP)->where('`role`')->eq('limited')->fetch();
if(empty($limitedGroup))
{
@@ -2054,6 +2334,7 @@ class upgradeModel extends model
$group->role = 'limited';
$group->desc = 'For limited user';
$this->dao->insert(TABLE_GROUP)->data($group)->exec();
+ $this->saveLogs($this->dao->get());
$groupID = $this->dao->lastInsertID();
}
@@ -2067,11 +2348,13 @@ class upgradeModel extends model
->andWhere('method')->eq('limited')
->fetchPairs('group', 'group');
$this->dao->delete()->from(TABLE_GROUPPRIV)->where('module')->eq('my')->andWhere('method')->eq('limited')->exec();
+ $this->saveLogs($this->dao->get());
$limitedUsers = $this->dao->select('account')->from(TABLE_USERGROUP)->where('`group`')->in($limitedGroups)->fetchPairs('account', 'account');
foreach($limitedUsers as $limitedUser)
{
$this->dao->replace(TABLE_USERGROUP)->set('account')->eq($limitedUser)->set('`group`')->eq($groupID)->exec();
+ $this->saveLogs($this->dao->get());
}
$groupPriv = new stdclass();
@@ -2079,6 +2362,7 @@ class upgradeModel extends model
$groupPriv->module = 'my';
$groupPriv->method = 'limited';
$this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec();
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -2091,11 +2375,13 @@ class upgradeModel extends model
*/
public function changeLimitedName()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->app->loadLang('install');
$this->dao->update(TABLE_GROUP)->set('name')->eq($this->lang->install->groupList['LIMITED']['name'])
->set('desc')->eq($this->lang->install->groupList['LIMITED']['desc'])
->where('role')->eq('limited')
->exec();
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -2108,6 +2394,7 @@ class upgradeModel extends model
*/
public function adjustPriv9_7()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$groups = $this->dao->select('*')->from(TABLE_GROUPPRIV)->where('method')->eq('edit')->andWhere('module')->in('story,task,bug,testcase')->fetchPairs('group', 'group');
foreach($groups as $groupID)
{
@@ -2116,6 +2403,7 @@ class upgradeModel extends model
$groupPriv->module = 'action';
$groupPriv->method = 'comment';
$this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -2128,6 +2416,7 @@ class upgradeModel extends model
*/
public function changeStoryWidth()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$projectCustom = $this->dao->select('*')->from(TABLE_CONFIG)->where('section')->eq('projectTask')->andWhere('`key`')->in('cols,tablecols')->fetchAll('id');
foreach($projectCustom as $configID => $projectTask)
{
@@ -2137,6 +2426,7 @@ class upgradeModel extends model
if($field->id == 'story') $field->width = '40px';
}
$this->dao->update(TABLE_CONFIG)->set('value')->eq(json_encode($fields))->where('id')->eq($configID)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -2149,6 +2439,7 @@ class upgradeModel extends model
*/
public function changeTeamFields()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$desc = $this->dao->query('DESC ' . TABLE_TEAM)->fetchAll();
$fields = array();
foreach($desc as $field)
@@ -2159,10 +2450,15 @@ class upgradeModel extends model
if(isset($fields['root'])) return true;
$this->dao->exec("ALTER TABLE " . TABLE_TEAM . " CHANGE `project` `root` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0'");
+ $this->saveLogs($this->dao->get());
$this->dao->exec("ALTER TABLE " . TABLE_TEAM . " ADD `type` ENUM('project', 'task') NOT NULL DEFAULT 'project' AFTER `root`");
+ $this->saveLogs($this->dao->get());
$this->dao->exec("UPDATE " . TABLE_TEAM . " SET `root` = `task`, `type` = 'task' WHERE `task` > '0'");
+ $this->saveLogs($this->dao->get());
$this->dao->exec("ALTER TABLE " . TABLE_TEAM . " DROP PRIMARY KEY");
+ $this->saveLogs($this->dao->get());
$this->dao->exec("ALTER TABLE " . TABLE_TEAM . " DROP `task`");
+ $this->saveLogs($this->dao->get());
return true;
}
@@ -2174,7 +2470,9 @@ class upgradeModel extends model
*/
public function moveData2Notify()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->dao->exec('TRUNCATE TABLE ' . TABLE_NOTIFY);
+ $this->saveLogs($this->dao->get());
$mailQueueTable = '`' . $this->config->db->prefix . 'mailqueue`';
$stmt = $this->dao->select('*')->from($mailQueueTable)->query();
while($mailQueue = $stmt->fetch())
@@ -2191,6 +2489,7 @@ class upgradeModel extends model
$notify->status = $mailQueue->status;
$notify->failReason = $mailQueue->failReason;
$this->dao->insert(TABLE_NOTIFY)->data($notify)->exec();
+ $this->saveLogs($this->dao->get());
}
$webhookDataTable = '`' . $this->config->db->prefix . 'webhookdatas`';
@@ -2206,6 +2505,7 @@ class upgradeModel extends model
$notify->createdDate = $webhookData->createdDate;
$notify->status = $webhookData->status;
$this->dao->insert(TABLE_NOTIFY)->data($notify)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -2226,6 +2526,7 @@ class upgradeModel extends model
$groupPriv->module = 'todo';
$groupPriv->method = 'createcycle';
$this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec();
+ $this->saveLogs($this->dao->get());
}
$groups = $this->dao->select('*')->from(TABLE_GROUPPRIV)->where('module')->eq('mail')->orWhere('module')->eq('webhook')->fetchPairs('group', 'group');
@@ -2236,6 +2537,7 @@ class upgradeModel extends model
$groupPriv->module = 'message';
$groupPriv->method = 'index';
$this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec();
+ $this->saveLogs($this->dao->get());
}
$groups = $this->dao->select('*')->from(TABLE_GROUPPRIV)->where('module')->eq('project')->andWhere('method')->eq('linkStory')->fetchPairs('group', 'group');
@@ -2246,6 +2548,7 @@ class upgradeModel extends model
$groupPriv->module = 'project';
$groupPriv->method = 'importPlanStories';
$this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -2258,6 +2561,7 @@ class upgradeModel extends model
*/
public function fixTaskFinishedInfo()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$stmt = $this->dao->select('t1.id as historID,t2.objectType,t2.objectID,t2.actor')->from(TABLE_HISTORY)->alias('t1')
->leftJoin(TABLE_ACTION)->alias('t2')->on('t1.action=t2.id')
->where('t1.field')->eq('finishedBy')
@@ -2268,7 +2572,9 @@ class upgradeModel extends model
while($action = $stmt->fetch())
{
$this->dao->update(TABLE_HISTORY)->set('`new`')->eq($action->actor)->where('id')->eq($action->historID)->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_TASK)->set('`finishedBy`')->eq($action->actor)->where('id')->eq($action->objectID)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -2281,6 +2587,7 @@ class upgradeModel extends model
*/
public function fixTaskAssignedTo()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$minParent = $this->dao->select('parent')->from(TABLE_TASK)->where('parent')->ne(0)->orderBy('parent')->limit(1)->fetch();
if(empty($minParent)) return true;
@@ -2331,10 +2638,12 @@ class upgradeModel extends model
$stmt = $this->dao->update(TABLE_TASK)->set('assignedTo')->eq('closed');
if($lastChild) $stmt->set('assignedDate')->eq($lastChild->assignedDate);
$stmt->where('id')->eq($parentTask->id)->exec();
+ $this->saveLogs($this->dao->get());
if(empty($parentTask->closedBy) && !empty($lastChild->closedBy))
{
$this->dao->update(TABLE_TASK)->set('closedBy')->eq($lastChild->closedBy)->set('closedDate')->eq($lastChild->closedDate)->set('closedReason')->eq($lastChild->closedReason)->where('id')->eq($parentTask->id)->exec();
+ $this->saveLogs($this->dao->get());
}
}
@@ -2353,10 +2662,12 @@ class upgradeModel extends model
$stmt = $this->dao->update(TABLE_TASK)->set('assignedTo')->eq('closed');
if(!empty($parent)) $stmt->set('assignedDate')->eq($parent->assignedDate);
$stmt->where('id')->eq($childTask->id)->exec();
+ $this->saveLogs($this->dao->get());
if(empty($childTask->closedBy) && !empty($parent->closedBy))
{
$this->dao->update(TABLE_TASK)->set('closedBy')->eq($parent->closedBy)->set('closedDate')->eq($parent->closedDate)->set('closedReason')->eq($parent->closedReason)->where('id')->eq($childTask->id)->exec();
+ $this->saveLogs($this->dao->get());
}
}
}
@@ -2372,6 +2683,7 @@ class upgradeModel extends model
*/
public function fixProjectClosedInfo()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$stmt = $this->dao->select('t1.id as historID, t2.id, t2.objectType,t2.objectID,t2.actor,t2.date')->from(TABLE_HISTORY)->alias('t1')
->leftJoin(TABLE_ACTION)->alias('t2')->on('t1.action=t2.id')
->where('t1.field')->eq('status')
@@ -2382,8 +2694,11 @@ class upgradeModel extends model
while($action = $stmt->fetch())
{
$this->dao->insert(TABLE_HISTORY)->set('`new`')->eq($action->actor)->set('`field`')->eq('closedBy')->set('`action`')->eq($action->id)->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->insert(TABLE_HISTORY)->set('`new`')->eq($action->date)->set('`old`')->eq('0000-00-00 00:00:00')->set('`field`')->eq('closedDate')->set('`action`')->eq($action->id)->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_HISTORY)->set('`new`')->eq('closed')->where('`action`')->eq($action->id)->andWhere('field')->eq('status')->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->update(TABLE_PROJECT)
->set('`status`')->eq('closed')
->set('`closedBy`')->eq($action->actor)
@@ -2391,6 +2706,7 @@ class upgradeModel extends model
->where('id')->eq($action->objectID)
->andWhere('status')->eq('done')
->exec();
+ $this->saveLogs($this->dao->get());
}
return !dao::isError();
}
@@ -2403,8 +2719,10 @@ class upgradeModel extends model
*/
public function resetProductLine()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$deletedLines = $this->dao->select('id')->from(TABLE_MODULE)->where('type')->eq('line')->andWhere('deleted')->eq('1')->fetchPairs('id', 'id');
$this->dao->update(TABLE_PRODUCT)->set('line')->eq(0)->where('line')->in($deletedLines)->exec();
+ $this->saveLogs($this->dao->get());
return !dao::isError();
}
@@ -2416,6 +2734,7 @@ class upgradeModel extends model
*/
public function addUniqueKeyToTeam()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$members = $this->dao->select('root, type, account')->from(TABLE_TEAM)->groupBy('root, type, account')->having('count(*)')->gt(1)->fetchAll();
foreach($members as $member)
@@ -2432,8 +2751,10 @@ class upgradeModel extends model
->andWhere('account')->eq($member->account)
->andWhere('id')->ne($maxID)
->exec();
+ $this->saveLogs($this->dao->get());
}
$this->dao->exec("ALTER TABLE " . TABLE_TEAM . " ADD UNIQUE `team` (`root`, `type`, `account`)");
+ $this->saveLogs($this->dao->get());
return !dao::isError();
}
@@ -2445,6 +2766,7 @@ class upgradeModel extends model
*/
public function adjustPriv10_0_alpha()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$groups = $this->dao->select('*')->from(TABLE_GROUPPRIV)->where('module')->eq('my')->andWhere('method')->eq('todo')->fetchPairs('group', 'group');
foreach($groups as $groupID)
{
@@ -2453,6 +2775,7 @@ class upgradeModel extends model
$groupPriv->module = 'my';
$groupPriv->method = 'calendar';
$this->dao->replace(TABLE_GROUPPRIV)->data($groupPriv)->exec();
+ $this->saveLogs($this->dao->get());
}
return true;
}
@@ -2465,6 +2788,7 @@ class upgradeModel extends model
*/
public function fixProjectStatisticBlock()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$block = $this->dao->select('*')->from(TABLE_BLOCK)->where('module')->eq('my')->andWhere('source')->eq('project')->andWhere('block')->eq('statistic')->fetch();
if($block)
{
@@ -2473,6 +2797,7 @@ class upgradeModel extends model
{
$blockParams->type = 'undone';
$this->dao->update(TABLE_BLOCK)->set('params')->eq(helper::jsonEncode($blockParams))->where('id')->eq($block->id)->exec();
+ $this->saveLogs($this->dao->get());
return !dao::isError();
}
}
@@ -2487,6 +2812,7 @@ class upgradeModel extends model
*/
public function fixStorySpecTitle()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$stories = $this->dao->select('t1.id, t1.title')->from(TABLE_STORY)->alias('t1')
->leftJoin(TABLE_STORYSPEC)->alias('t2')->on('t1.id=t2.story && t1.title != t2.title && t1.version = t2.version')
->where('t2.version')->eq(1)
@@ -2495,6 +2821,7 @@ class upgradeModel extends model
foreach($stories as $story => $title)
{
$this->dao->update(TABLE_STORYSPEC)->set('title')->eq($title)->where('story')->eq($story)->andWhere('version')->eq(1)->exec();
+ $this->saveLogs($this->dao->get());
}
return !dao::isError();
@@ -2508,6 +2835,7 @@ class upgradeModel extends model
*/
public function removeUnlinkPriv()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->dao->delete()->from(TABLE_GROUPPRIV)
->where('((module')->eq('story')
->andWhere('method')->eq('unlinkStory')
@@ -2519,6 +2847,7 @@ class upgradeModel extends model
->andWhere('method')->eq('unlinkCase')
->markRight(2)
->exec();
+ $this->saveLogs($this->dao->get());
return !dao::isError();
}
@@ -2529,10 +2858,12 @@ class upgradeModel extends model
*/
public function changeTaskParentValue()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$tasks = $this->dao->select('*')->from(TABLE_TASK)->where('parent')->gt(0)->fetchGroup('parent');
if($tasks)
{
$this->dao->update(TABLE_TASK)->set('parent')->eq('-1')->where('id')->in(array_keys($tasks))->exec();
+ $this->saveLogs($this->dao->get());
}
return !dao::isError();
}
@@ -2545,6 +2876,7 @@ class upgradeModel extends model
*/
public function removeCustomMenu()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$customMenuMain = $this->dao->select('*')->from(TABLE_CONFIG)->where('module')->eq('common')->andWhere('section')->eq('customMenu')->andWhere("(`key`='full_main' OR `key`='onlyTask_main' OR `key`='onlyStory_main' OR `key`='onlyTest_main')")->fetchAll('id');
foreach($customMenuMain as $mainMenu)
{
@@ -2558,12 +2890,15 @@ class upgradeModel extends model
->andWhere('section')->eq('customMenu')
->andWhere('owner')->eq($mainMenu->owner)
->exec();
+ $this->saveLogs($this->dao->get());
}
}
}
$this->dao->delete()->from(TABLE_CONFIG)->where('module')->eq('common')->andWhere('section')->eq('customMenu')->andWhere('`key`')->eq('full_project')->exec();
+ $this->saveLogs($this->dao->get());
$this->dao->delete()->from(TABLE_CONFIG)->where('module')->eq('common')->andWhere('section')->eq('customMenu')->andWhere('`key`')->eq('onlyTask_project')->exec();
+ $this->saveLogs($this->dao->get());
return !dao::isError();
}
@@ -2575,6 +2910,7 @@ class upgradeModel extends model
*/
public function initUserView()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$users = $this->dao->select('account')->from(TABLE_USER)->fetchAll();
$this->loadModel('user');
foreach($users as $user) $this->user->computeUserView($user->account, $force = true);
@@ -2589,6 +2925,7 @@ class upgradeModel extends model
*/
public function initXuanxuan()
{
+ $this->saveLogs('Run Method ' . __FUNCTION__);
$this->loadModel('setting');
$keyID = $this->dao->select('id')->from(TABLE_CONFIG)->where('owner')->eq('system')->andWhere('module')->eq('xuanxuan')->andWhere('`key`')->eq('key')->fetch('id');
if($keyID)
@@ -2597,10 +2934,26 @@ class upgradeModel extends model
if($existKey) $this->dao->delete()->from(TABLE_CONFIG)->where('id')->eq($existKey)->exec();
$this->dao->update(TABLE_CONFIG)->set('module')->eq('common')->set('section')->eq('xuanxuan')->where('id')->eq($keyID)->exec();
+ $this->saveLogs($this->dao->get());
$this->setting->setItem('system.common.xuanxuan.turnon', '1');
$this->setting->setItem('system.common.xxserver.noticed', '1');
}
return true;
}
+
+ /**
+ * Save Logs.
+ *
+ * @param string $log
+ * @access public
+ * @return void
+ */
+ public function saveLogs($log)
+ {
+ $logFile = $this->app->getTmpRoot() . 'log/upgrade.' . date('Ymd') . '.log.php';
+ if(!file_exists($logFile)) file_put_contents($logFile, "\n");
+ $log = date('Y-m-d H:i:s') . ' ' . trim($log) . "\n";
+ file_put_contents($logFile, $log, FILE_APPEND);
+ }
}
diff --git a/module/upgrade/view/consistency.html.php b/module/upgrade/view/consistency.html.php
index ba6c13c801..8f04a258fc 100644
--- a/module/upgrade/view/consistency.html.php
+++ b/module/upgrade/view/consistency.html.php
@@ -24,7 +24,7 @@
-
+
diff --git a/module/user/control.php b/module/user/control.php
index a698005d75..f9ea324cd4 100644
--- a/module/user/control.php
+++ b/module/user/control.php
@@ -711,7 +711,7 @@ class user extends control
/* Authorize him and save to session. */
$user->rights = $this->user->authorize($user->account);
$user->groups = $this->user->getGroups($user->account);
- $user->view = $this->user->grantUserView($account, $user->rights['acls']);
+ $user->view = $this->user->grantUserView($user->account, $user->rights['acls']);
$this->session->set('user', $user);
$this->app->user = $this->session->user;
$this->loadModel('action')->create('user', $user->id, 'login');
From 7ebc83744342724a5d5ed859dd6df0943674f76d Mon Sep 17 00:00:00 2001
From: Yagami
Date: Tue, 22 Jan 2019 15:45:20 +0800
Subject: [PATCH 2/6] * Finish task #5213.
---
module/product/model.php | 27 +++++++++++++++++++++++----
1 file changed, 23 insertions(+), 4 deletions(-)
diff --git a/module/product/model.php b/module/product/model.php
index c971f6294f..8ea051a61a 100644
--- a/module/product/model.php
+++ b/module/product/model.php
@@ -291,14 +291,33 @@ class productModel extends model
if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProductPairs();
$orderBy = !empty($this->config->product->orderBy) ? $this->config->product->orderBy : 'isClosed';
- $products = $this->dao->select('*, IF(INSTR(" closed", status) < 2, 0, 1) AS isClosed')
+ $products = $this->dao->select('id,name,line, IF(INSTR(" closed", status) < 2, 0, 1) AS isClosed')
->from(TABLE_PRODUCT)
->where('deleted')->eq(0)
->beginIF(strpos($mode, 'noclosed') !== false)->andWhere('status')->ne('closed')->fi()
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->products)->fi()
- ->orderBy($orderBy)
- ->fetchPairs('id', 'name');
- return $products;
+ ->orderBy('order_desc')
+ ->fetchAll('id');
+
+ $lines = $this->loadModel('tree')->getLinePairs();
+ $linePairs = array();
+ foreach($lines as $id => $name)
+ {
+ foreach($products as $key => $product)
+ {
+ if($product->line == $id)
+ {
+ $linePairs[$product->id] = $name . '/' . $product->name;
+ unset($products[$key]);
+ }
+ }
+ }
+
+ $productPairs = array();
+ foreach($products as $id => $product) $productPairs[$product->id] = $product->name;
+ $productPairs = $linePairs + $productPairs;
+
+ return $productPairs;
}
/**
From 057f9d8ece4b3d29be7a3b70d739f342de965fcd Mon Sep 17 00:00:00 2001
From: Yagami
Date: Tue, 22 Jan 2019 15:58:32 +0800
Subject: [PATCH 3/6] * Finish task #5209.
---
xuanxuan/module/chat/ext/model/xuanxuan.php | 33 +++++++++++++++++++
.../model/hook/loadConfigFromDB.xuanxuan.php | 2 +-
2 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/xuanxuan/module/chat/ext/model/xuanxuan.php b/xuanxuan/module/chat/ext/model/xuanxuan.php
index dd3683e8b5..e99cb1744f 100644
--- a/xuanxuan/module/chat/ext/model/xuanxuan.php
+++ b/xuanxuan/module/chat/ext/model/xuanxuan.php
@@ -3,3 +3,36 @@ public function getExtensionList($userID)
{
return $this->loadExtension('xuanxuan')->getExtensionList($userID);
}
+
+public function getUserListOutput($idList = array(), $userID)
+{
+ $output = new stdclass();
+ $output->module = 'chat';
+ $output->method = 'userGetList';
+
+ $users = $this->getUserList($status = '', $idList, $idAsKey = false);
+ if(dao::isError())
+ {
+ $output->result = 'fail';
+ $output->message = 'Get userlist failed.';
+ }
+ else
+ {
+ $output->result = 'success';
+ $output->users = !empty($userID) ? array($userID) : array();
+ $output->data = $users;
+
+ $this->app->loadLang('user', 'sys');
+ $roles = $this->lang->user->roleList;
+
+ $allDepts = $this->loadModel('dept')->getListByType('dept');
+ $depts = array();
+ foreach($allDepts as $id => $dept)
+ {
+ $depts[$id] = array('name' => $dept->name, 'order' => (int)$dept->order, 'parent' => (int)$dept->parent);
+ }
+ $output->roles = $roles;
+ $output->depts = $depts;
+ }
+ return $output;
+}
diff --git a/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php b/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php
index a594607c2a..26e6034724 100644
--- a/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php
+++ b/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php
@@ -11,5 +11,5 @@ if(empty($xxConfig['key']))
if(!isset($xxConfig['chatPort'])) $this->setting->setItem('system.common.xuanxuan.chatPort', 11444);
if(!isset($xxConfig['commonPort'])) $this->setting->setItem('system.common.xuanxuan.commonPort', 11443);
if(!isset($xxConfig['ip'])) $this->setting->setItem('system.common.xuanxuan.ip', '0.0.0.0');
-if(!isset($xxConfig['isHttps'])) $this->setting->setItem('system.common.xuanxuan.isHttps', 0);
+if(!isset($xxConfig['isHttps'])) $this->setting->setItem('system.common.xuanxuan.isHttps', 'off');
if(!isset($xxConfig['uploadFileSize'])) $this->setting->setItem('system.common.xuanxuan.uploadFileSize', 20);
From 30fc17cb144906f0a9fdbdc3739f2110819cab5a Mon Sep 17 00:00:00 2001
From: wangyidong
Date: Tue, 22 Jan 2019 16:26:45 +0800
Subject: [PATCH 4/6] * finish task #5207.
---
module/dev/config.php | 18 ++++++++++++++++++
module/dev/lang/en.php | 6 ++++++
module/dev/lang/zh-cn.php | 6 ++++++
module/dev/model.php | 7 ++-----
module/dev/view/api.html.php | 33 +++++++++++++++++++++++++++++++++
5 files changed, 65 insertions(+), 5 deletions(-)
diff --git a/module/dev/config.php b/module/dev/config.php
index 503833d048..0a7c96ad59 100644
--- a/module/dev/config.php
+++ b/module/dev/config.php
@@ -98,3 +98,21 @@ $config->dev->tableMap['lang'] = 'custom';
$config->dev->tableMap['config'] = 'custom';
$config->dev->tableMap['module'] = 'tree';
$config->dev->tableMap['suitecase'] = 'testcase';
+
+$config->dev->postParams['bug']['create']['product'] = 'int';
+$config->dev->postParams['bug']['create']['title'] = 'string';
+$config->dev->postParams['bug']['create']['openedBuild'] = 'int|trunk';
+$config->dev->postParams['bug']['create']['branch'] = 'int';
+$config->dev->postParams['bug']['create']['module'] = 'int';
+$config->dev->postParams['bug']['create']['project'] = 'int';
+$config->dev->postParams['bug']['create']['assignedTo'] = 'string';
+$config->dev->postParams['bug']['create']['deadline'] = 'date';
+$config->dev->postParams['bug']['create']['type'] = 'string';
+$config->dev->postParams['bug']['create']['os'] = 'string';
+$config->dev->postParams['bug']['create']['browser'] = 'string';
+$config->dev->postParams['bug']['create']['color'] = 'string';
+$config->dev->postParams['bug']['create']['severity'] = 'int';
+$config->dev->postParams['bug']['create']['pri'] = 'int';
+$config->dev->postParams['bug']['create']['steps'] = 'string';
+$config->dev->postParams['bug']['create']['mailto'] = 'string';
+$config->dev->postParams['bug']['create']['keywords'] = 'string';
diff --git a/module/dev/lang/en.php b/module/dev/lang/en.php
index 9d73e73cb5..065afe5f3a 100644
--- a/module/dev/lang/en.php
+++ b/module/dev/lang/en.php
@@ -9,6 +9,12 @@ $lang->dev->params = 'Parameters';
$lang->dev->type = 'Type';
$lang->dev->desc = 'Description';
$lang->dev->noParams = 'No Parameters';
+$lang->dev->post = 'POST Parameters';
+
+$lang->dev->paramRange = 'Range of values: %s';
+$lang->dev->paramDate = 'Date format: YY-mm-dd. such as 2019-01-01';
+$lang->dev->paramColor = 'Color format: #RGB. such as #3da7f5';
+$lang->dev->paramMailto = "Use account. Separate multiple accounts by ','.";
$lang->dev->fields = array();
$lang->dev->fields['id'] = 'ID';
diff --git a/module/dev/lang/zh-cn.php b/module/dev/lang/zh-cn.php
index 440d33a1d0..5455d60bdd 100644
--- a/module/dev/lang/zh-cn.php
+++ b/module/dev/lang/zh-cn.php
@@ -9,6 +9,12 @@ $lang->dev->params = '参数列表';
$lang->dev->type = '类型';
$lang->dev->desc = '描述';
$lang->dev->noParams = '无参数';
+$lang->dev->post = 'POST参数';
+
+$lang->dev->paramRange = '取值范围:%s';
+$lang->dev->paramDate = '日期格式:YY-mm-dd,如:2019-01-01';
+$lang->dev->paramColor = '颜色格式:#RGB,如:#3da7f5';
+$lang->dev->paramMailto = "填写帐号,多个账号用','分隔。";
$lang->dev->fields = array();
$lang->dev->fields['id'] = '序号';
diff --git a/module/dev/model.php b/module/dev/model.php
index f4049a8f0a..f86506eb45 100644
--- a/module/dev/model.php
+++ b/module/dev/model.php
@@ -134,17 +134,14 @@ class devModel extends model
public function getAPIs($module)
{
$fileName = $this->app->getModuleRoot() . $module . DS . 'control.php';
- if($module != 'common' and $module != 'dev')
- {
- include $fileName;
- }
+ if($module != 'common' and $module != 'dev') include $fileName;
+
$classReflect = new ReflectionClass($module);
$methods = $classReflect->getMethods();
$apis = array();
foreach($methods as $method)
{
if($method->class == 'baseControl' or $method->class == 'control' or $method->name == '__construct') continue;
-
$api = array('name' => $method->name, 'post' => false, 'default' => array());
$methodReflect = new ReflectionMethod($module, $method->name);
foreach($methodReflect->getParameters() as $key => $param)
diff --git a/module/dev/view/api.html.php b/module/dev/view/api.html.php
index 047325565b..6e2aae1da7 100644
--- a/module/dev/view/api.html.php
+++ b/module/dev/view/api.html.php
@@ -36,6 +36,7 @@
| dev->noParams?> |
+ dev->postParams[$selectedModule][$methodName])):?>
+ app->loadLang($selectedModule);
+ $this->app->loadConfig($selectedModule);
+ ?>
+
+ dev->post;?>
+
+ | dev->params?> |
+ dev->type?> |
+ dev->desc?> |
+
+ dev->postParams[$selectedModule][$methodName] as $paramName => $paramType):?>
+
+ |
+ |
+ $selectedModule->$paramName)) $paramDesc .= $lang->$selectedModule->$paramName . ' ';
+ if(isset($lang->$selectedModule->$listKey)) $paramDesc .= sprintf($lang->dev->paramRange, join(' | ', array_keys($lang->$selectedModule->$listKey)));
+ if($paramType == 'date') $paramDesc .= $lang->dev->paramDate;
+ if($paramName == 'color') $paramDesc .= $lang->dev->paramColor;
+ if(isset($config->$selectedModule->$methodName->requiredFields) and strpos($config->$selectedModule->$methodName->requiredFields, $paramName) !== false) $paramDesc .= "*{$lang->required}";
+ if($paramName == 'product') $paramDesc .= "*{$lang->required}";
+ if($paramName == 'mailto') $paramDesc .= $lang->dev->paramMailto;
+ ?>
+ |
+
+
+
+
From 71e04e17ae413c4c0fa7d3d55868310c8a8a3717 Mon Sep 17 00:00:00 2001
From: Yagami
Date: Wed, 23 Jan 2019 08:59:04 +0800
Subject: [PATCH 5/6] * Finish task #5211.
---
module/common/lang/en.php | 2 +-
module/common/lang/zh-cn.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/module/common/lang/en.php b/module/common/lang/en.php
index 9788e7f037..4454234b3b 100644
--- a/module/common/lang/en.php
+++ b/module/common/lang/en.php
@@ -479,7 +479,7 @@ $lang->error->email = "『%s』should be valid Email.";
$lang->error->date = "『%s』should be valid date.";
$lang->error->datetime = "『%s』should be valid date.";
$lang->error->code = "『%s』should be letters or numbers.";
-$lang->error->account = "『%s』should be valid account.";
+$lang->error->account = "『%s』should be letters or numbers of three or more.";
$lang->error->passwordsame = "Passwords should be consistent.";
$lang->error->passwordrule = "Password should abide by rules. It should be at least 6 characters.";
$lang->error->accessDenied = 'Access is denied.';
diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php
index 8e15177fbe..f88b2841b0 100644
--- a/module/common/lang/zh-cn.php
+++ b/module/common/lang/zh-cn.php
@@ -482,7 +482,7 @@ $lang->error->email = "『%s』应当为合法的EMAIL。";
$lang->error->date = "『%s』应当为合法的日期。";
$lang->error->datetime = "『%s』应当为合法的日期。";
$lang->error->code = "『%s』应当为字母或数字的组合。";
-$lang->error->account = "『%s』应当为合法的用户名。";
+$lang->error->account = "『%s』只能是字母和数字的组合三位以上。";
$lang->error->passwordsame = "两次密码应当相等。";
$lang->error->passwordrule = "密码应该符合规则,长度至少为六位。";
$lang->error->accessDenied = '您没有访问权限';
From bace517b74b88f9e283c15356dde812f4fa84506 Mon Sep 17 00:00:00 2001
From: wangyidong
Date: Wed, 23 Jan 2019 09:14:36 +0800
Subject: [PATCH 6/6] * adjust code for saveLogs.
---
module/upgrade/model.php | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/module/upgrade/model.php b/module/upgrade/model.php
index 4e7cc7206f..2f0a5ab8a0 100644
--- a/module/upgrade/model.php
+++ b/module/upgrade/model.php
@@ -1118,7 +1118,7 @@ class upgradeModel extends model
foreach($oldPriv as $item)
{
- $this->dao->insert($privTable)
+ $this->dao->replace($privTable)
->set('company')->eq($item->company)
->set('module')->eq('company')
->set('method')->eq('view')
@@ -1134,7 +1134,7 @@ class upgradeModel extends model
foreach($oldPriv as $item)
{
- $this->dao->insert($privTable)
+ $this->dao->replace($privTable)
->set('company')->eq($item->company)
->set('module')->eq('todo')
->set('method')->eq('batchFinish')
@@ -1163,7 +1163,7 @@ class upgradeModel extends model
foreach($oldPriv as $item)
{
- $this->dao->insert($privTable)
+ $this->dao->replace($privTable)
->set('company')->eq($item->company)
->set('module')->eq('tree')
->set('method')->eq('browseTask')
@@ -2952,8 +2952,11 @@ class upgradeModel extends model
public function saveLogs($log)
{
$logFile = $this->app->getTmpRoot() . 'log/upgrade.' . date('Ymd') . '.log.php';
- if(!file_exists($logFile)) file_put_contents($logFile, "\n");
- $log = date('Y-m-d H:i:s') . ' ' . trim($log) . "\n";
- file_put_contents($logFile, $log, FILE_APPEND);
+ $log = date('Y-m-d H:i:s') . ' ' . trim($log) . "\n";
+ if(!file_exists($logFile)) $log = "\n" . $log;
+
+ static $fh;
+ if(empty($fh)) $fh = fopen($logFile, 'a');
+ fwrite($fh, $log);
}
}