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->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; + ?> + + + +
dev->post;?>
dev->params?>dev->type?>dev->desc?>
+
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); } }