diff --git a/VERSION b/VERSION index b3b459a89a..ecf86d8dce 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -17.6.2 +17.7 diff --git a/api/v1/entries/executions.php b/api/v1/entries/executions.php index a3275395c7..18570fbe92 100644 --- a/api/v1/entries/executions.php +++ b/api/v1/entries/executions.php @@ -57,7 +57,7 @@ class executionsEntry extends entry { foreach($execution->hours as $field => $value) $execution->$field = $value; - $execution = $this->filterFields($execution, 'id,name,project,code,type,parent,begin,end,status,openedBy,openedDate,delay,progress,' . $appendFields); + $execution = $this->filterFields($execution, 'id,name,project,code,type,parent,begin,end,status,openedBy,openedDate,delay,progress,children,' . $appendFields); $result[] = $this->format($execution, 'openedBy:user,openedDate:time,lastEditedBy:user,lastEditedDate:time,closedBy:user,closedDate:time,canceledBy:user,canceledDate:time,PM:user,PO:user,RD:user,QD:user,whitelist:userList,begin:date,end:date,realBegan:date,realEnd:date,deleted:bool'); } diff --git a/api/v1/entries/productprojects.php b/api/v1/entries/productprojects.php index b493ed3fcd..c6540ea7a4 100644 --- a/api/v1/entries/productprojects.php +++ b/api/v1/entries/productprojects.php @@ -25,7 +25,7 @@ class productProjectsEntry extends entry $appendFields = $this->param('fields', ''); $control = $this->loadController('product', 'project'); - $control->project($this->param('status', 'all'), $productID, $this->param('branch', 0), $this->param('involved', 0), $this->param('order', 'order_desc')); + $control->project($this->param('status', 'all'), $productID, $this->param('branch', 0), $this->param('involved', 0), $this->param('order', 'order_desc'), 0, $this->param('limit', 20), $this->param('page', 1)); $data = $this->getData(); if(isset($data->status) and $data->status == 'success') diff --git a/api/v1/entries/projectreleases.php b/api/v1/entries/projectreleases.php index 21c9eb3b73..c3ca3a0f9a 100644 --- a/api/v1/entries/projectreleases.php +++ b/api/v1/entries/projectreleases.php @@ -23,8 +23,10 @@ class projectReleasesEntry extends entry if(empty($projectID)) $projectID = $this->param('project'); if(empty($projectID)) return $this->sendError(400, 'Need project id.'); + $page = intval($this->param('page', 1)); + $limit = intval($this->param('limit', 20)); $control = $this->loadController('projectrelease', 'browse'); - $control->browse($projectID, $this->param('execution', 0), $this->param('status', 'all'), $this->param('order', 't1.date_desc')); + $control->browse($projectID, $this->param('execution', 0), $this->param('status', 'all'), $this->param('order', 't1.date_desc'), 0, $limit, $page); /* Response */ $data = $this->getData(); diff --git a/api/v1/entries/taskrecordestimate.php b/api/v1/entries/taskrecordestimate.php index 76dc04f077..b88eabc005 100644 --- a/api/v1/entries/taskrecordestimate.php +++ b/api/v1/entries/taskrecordestimate.php @@ -36,7 +36,7 @@ class taskRecordEstimateEntry extends Entry if(!$data) return $this->error('error'); if(isset($data->status) and $data->status == 'fail') return $this->sendError(zget($data, 'code', 400), $data->message); - $effort = array(); + $effort = new stdclass(); if($issetEffort and $data->data->efforts) $effort = $data->data->efforts; if(!$issetEffort and $data->data->estimates) $effort = $data->data->estimates; $this->send(200, array('effort' => $effort)); diff --git a/api/v1/entries/testtasks.php b/api/v1/entries/testtasks.php index 81e2fb614c..b8230f0d13 100644 --- a/api/v1/entries/testtasks.php +++ b/api/v1/entries/testtasks.php @@ -66,4 +66,43 @@ class testtasksEntry extends entry return $this->send(200, array('page' => $pager->pageID, 'total' => $pager->recTotal, 'limit' => $pager->recPerPage, 'testtasks' => $result)); } + + /** + * POST method. + * + * @access public + * @param int $projectID + * @return void + */ + public function post($projectID = 0) + { + if(!$projectID) $projectID = $this->param('project', 0); + $productID = $this->request('product', 0); + $executionID = $this->request('execution', 0); + $buildID = $this->request('build', 0); + if(empty($projectID)) return $this->sendError(400, 'need project id!'); + if(empty($productID)) return $this->sendError(400, 'need product id!'); + if(empty($executionID)) return $this->sendError(400, 'need execution id!'); + if(empty($buildID)) return $this->sendError(400, 'need build id!'); + + /* Check whether executionID and buildID is valid. */ + $executions = $this->loadModel('product')->getExecutionPairsByProduct($productID, '', 'id_desc', $projectID); + $builds = $this->loadModel('build')->getBuildPairs($productID, 'all', 'notrunk'); + if(!isset($executions[$executionID])) return $this->sendError(400, 'error execution id!'); + if(!isset($builds[$buildID])) return $this->sendError(400, 'error build id!'); + + $fields = 'product,execution,build,name,begin,end,owner,type,pri,status,desc'; + $this->batchSetPost($fields); + + $control = $this->loadController('testtask', 'create'); + $this->requireFields('name,begin,end'); + $control->create($productID, $executionID, $build, $projectID); + + $data = $this->getData(); + if(!isset($data->id)) return $this->sendError(400, $data->message); + + $testtask = $this->loadModel('testtask')->getByID($data->id); + + $this->send(201, $testtask); + } } diff --git a/api/v1/entries/user.php b/api/v1/entries/user.php index 8e5d696a2b..74f6a1846a 100644 --- a/api/v1/entries/user.php +++ b/api/v1/entries/user.php @@ -62,6 +62,7 @@ class userEntry extends Entry $info->profile->role = array('code' => $info->profile->role, 'name' => $this->lang->user->roleList[$info->profile->role]); $info->profile->admin = strpos($this->app->company->admins, ",{$profile->account},") !== false; $info->profile->superReviewer = isset($this->config->story) ? strpos(',' . trim(zget($this->config->story, 'superReviewers', ''), ',') . ',', ',' . $this->app->user->account . ',') : false; + $info->profile->view = $this->app->user->view; if(!$fields) return $this->send(200, $info); diff --git a/config/config.php b/config/config.php index dba114d322..7f6ffe4f8a 100644 --- a/config/config.php +++ b/config/config.php @@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}} if(!function_exists('getWebRoot')){function getWebRoot(){}} /* 基本设置。Basic settings. */ -$config->version = '17.6.2'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. +$config->version = '17.7'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. $config->liteVersion = '1.2'; // 迅捷版版本。 The version of Lite. $config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP. $config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time. diff --git a/config/filter.php b/config/filter.php index 89ee1296f0..c700ab2094 100755 --- a/config/filter.php +++ b/config/filter.php @@ -172,6 +172,7 @@ $filter->tree->browse = new stdclass(); $filter->productplan->browse = new stdclass(); $filter->kanban->space = new stdclass(); $filter->execution->kanban = new stdclass(); +$filter->execution->all = new stdclass(); $filter->index->index->get['open'] = 'reg::base64'; @@ -300,14 +301,15 @@ $filter->productplan->browse->cookie['viewType'] = 'code'; $filter->task->create->cookie['lastTaskModule'] = 'int'; $filter->task->export->cookie['checkedItem'] = 'reg::checked'; -$filter->execution->default->cookie['kanbanview'] = 'code'; -$filter->execution->story->cookie['storyPreExecutionID'] = 'int'; -$filter->execution->story->cookie['storyModuleParam'] = 'int'; -$filter->execution->story->cookie['storyProductParam'] = 'int'; -$filter->execution->story->cookie['storyBranchParam'] = 'int'; -$filter->execution->story->cookie['executionStoryOrder'] = 'code'; -$filter->execution->export->cookie['checkedItem'] = 'reg::checked'; -$filter->execution->kanban->cookie['taskToOpen'] = 'int'; +$filter->execution->default->cookie['kanbanview'] = 'code'; +$filter->execution->story->cookie['storyPreExecutionID'] = 'int'; +$filter->execution->story->cookie['storyModuleParam'] = 'int'; +$filter->execution->story->cookie['storyProductParam'] = 'int'; +$filter->execution->story->cookie['storyBranchParam'] = 'int'; +$filter->execution->story->cookie['executionStoryOrder'] = 'code'; +$filter->execution->export->cookie['checkedItem'] = 'reg::checked'; +$filter->execution->kanban->cookie['taskToOpen'] = 'int'; +$filter->execution->all->cookie['showExecutionBatchEdit'] = 'int'; $filter->testcase->browse->cookie['caseModule'] = 'int'; $filter->testcase->browse->cookie['caseSuite'] = 'int'; diff --git a/config/zentaopms.php b/config/zentaopms.php index 082241d00f..c6aa35af1a 100644 --- a/config/zentaopms.php +++ b/config/zentaopms.php @@ -216,6 +216,7 @@ $config->openMethods[] = 'kanban.importplan'; $config->openMethods[] = 'kanban.importrelease'; $config->openMethods[] = 'kanban.importexecution'; $config->openMethods[] = 'kanban.importbuild'; +$config->openMethods[] = 'kanban.importticket'; $config->openMethods[] = 'kanban.activatecard'; $config->openMethods[] = 'kanban.finishcard'; $config->openMethods[] = 'kanban.deleteobjectcard'; @@ -225,6 +226,7 @@ $config->openMethods[] = 'tree.viewhistory'; $config->openMethods[] = 'doc.createbasicinfo'; $config->openMethods[] = 'project.createguide'; $config->openMethods[] = 'task.editteam'; +$config->openMethods[] = 'feedback.mergeproductmodule'; /* Define the tables. */ define('TABLE_COMPANY', '`' . $config->db->prefix . 'company`'); @@ -409,4 +411,4 @@ $config->waterfallModules = array('workestimation', 'durationestimation', 'budge $config->showMainMenu = true; $config->maxPriValue = '256'; -$config->importWhiteList = array('user', 'task', 'story', 'bug', 'testcase', 'feedback'); +$config->importWhiteList = array('user', 'task', 'story', 'bug', 'testcase', 'feedback', 'ticket'); diff --git a/db/standard/zentao17.7.sql b/db/standard/zentao17.7.sql new file mode 100644 index 0000000000..32e0edfa70 --- /dev/null +++ b/db/standard/zentao17.7.sql @@ -0,0 +1,4071 @@ +CREATE TABLE `zt_account` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `provider` varchar(255) NOT NULL, + `adminURI` varchar(255) NOT NULL, + `account` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `mobile` varchar(255) NOT NULL, + `extra` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `status` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `name` (`name`), + KEY `provider` (`provider`), + KEY `status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_acl` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL DEFAULT '0', + `type` char(40) NOT NULL DEFAULT 'whitelist', + `source` char(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_action` ( + `id` int(9) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` text NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `actor` varchar(100) NOT NULL DEFAULT '', + `action` varchar(80) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text, + `read` enum('0','1') NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `efforted` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `action` (`action`), + KEY `objectID` (`objectID`) +) ENGINE=InnoDB AUTO_INCREMENT=71 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_activity` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `process` mediumint(9) NOT NULL, + `name` varchar(255) NOT NULL, + `optional` varchar(255) NOT NULL, + `tailorNorm` varchar(255) NOT NULL, + `content` mediumtext NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `order` mediumint(8) DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_api` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `product` varchar(255) NOT NULL DEFAULT '', + `lib` int(10) unsigned NOT NULL DEFAULT '0', + `module` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(100) NOT NULL DEFAULT '', + `path` varchar(255) NOT NULL DEFAULT '', + `protocol` varchar(10) NOT NULL DEFAULT '', + `method` varchar(10) NOT NULL DEFAULT '', + `requestType` varchar(100) NOT NULL DEFAULT '', + `responseType` varchar(100) NOT NULL DEFAULT '', + `status` varchar(20) NOT NULL DEFAULT '', + `owner` varchar(30) NOT NULL DEFAULT '0', + `desc` mediumtext NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `params` text, + `paramsExample` text, + `responseExample` text, + `response` text, + `commonParams` text, + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL DEFAULT '0', + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_api_lib_release` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `lib` int(10) unsigned NOT NULL DEFAULT '0', + `desc` varchar(255) NOT NULL DEFAULT '', + `version` varchar(255) NOT NULL DEFAULT '', + `snap` mediumtext NOT NULL, + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_apispec` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `doc` int(10) unsigned NOT NULL DEFAULT '0', + `module` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(100) NOT NULL DEFAULT '', + `path` varchar(255) NOT NULL DEFAULT '', + `protocol` varchar(10) NOT NULL DEFAULT '', + `method` varchar(10) NOT NULL DEFAULT '', + `requestType` varchar(100) NOT NULL DEFAULT '', + `responseType` varchar(100) NOT NULL DEFAULT '', + `status` varchar(20) NOT NULL DEFAULT '', + `owner` varchar(255) NOT NULL DEFAULT '0', + `desc` mediumtext NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `params` text, + `paramsExample` text, + `responseExample` text, + `response` text, + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=176 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_apistruct` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `lib` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(30) NOT NULL DEFAULT '', + `type` varchar(50) NOT NULL DEFAULT '', + `desc` mediumtext NOT NULL DEFAULT '', + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `attribute` text, + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL DEFAULT '0', + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_apistruct_spec` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL DEFAULT '', + `type` varchar(50) NOT NULL DEFAULT '', + `desc` varchar(255) NOT NULL DEFAULT '', + `attribute` text, + `version` smallint(5) unsigned NOT NULL DEFAULT '0', + `addedBy` varchar(30) NOT NULL DEFAULT '0', + `addedDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approval` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `flow` mediumint(8) NOT NULL, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `nodes` mediumtext NOT NULL, + `version` mediumint(9) NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'doing', + `result` varchar(20) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalflow` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `code` varchar(100) NOT NULL, + `desc` mediumtext NOT NULL, + `version` mediumint(8) NOT NULL DEFAULT '1', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `type` varchar(30) NOT NULL, + `deleted` tinyint(4) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalflowobject` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `root` int(8) NOT NULL, + `flow` int(8) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `extra` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalflowspec` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `flow` mediumint(8) NOT NULL, + `version` mediumint(8) NOT NULL, + `nodes` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalnode` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `approval` mediumint(8) NOT NULL, + `type` enum('review','cc') NOT NULL, + `title` varchar(255) NOT NULL, + `account` char(30) NOT NULL, + `node` varchar(100) NOT NULL, + `reviewType` varchar(100) NOT NULL DEFAULT 'manual', + `multipleType` enum('and','or') NOT NULL DEFAULT 'and', + `prev` mediumtext NOT NULL, + `next` mediumtext NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'wait', + `result` varchar(10) NOT NULL, + `date` date NOT NULL, + `opinion` mediumtext NOT NULL, + `extra` mediumtext NOT NULL, + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `idx_reviewed_date` (`reviewedDate`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalobject` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `approval` int(8) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` mediumint(8) NOT NULL, + `extra` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_approvalrole` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `code` char(30) NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `users` longtext NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_asset` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `status` varchar(30) NOT NULL, + `type` varchar(30) NOT NULL, + `group` varchar(128) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_assetlib` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `order` SMALLINT UNSIGNED NOT NULL DEFAULT '0', + `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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_attend` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `signIn` time NOT NULL, + `signOut` time NOT NULL, + `status` varchar(30) NOT NULL DEFAULT '', + `ip` varchar(15) NOT NULL, + `device` varchar(30) NOT NULL, + `client` varchar(20) NOT NULL, + `manualIn` time NOT NULL, + `manualOut` time NOT NULL, + `reason` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `reviewStatus` varchar(30) NOT NULL DEFAULT '', + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `attend` (`date`,`account`), + KEY `account` (`account`), + KEY `date` (`date`), + KEY `status` (`status`), + KEY `reason` (`reason`), + KEY `reviewStatus` (`reviewStatus`), + KEY `reviewedBy` (`reviewedBy`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_attendstat` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `month` char(10) NOT NULL DEFAULT '', + `normal` decimal(12,2) NOT NULL DEFAULT '0.00', + `late` decimal(12,2) NOT NULL DEFAULT '0.00', + `early` decimal(12,2) NOT NULL DEFAULT '0.00', + `absent` decimal(12,2) NOT NULL DEFAULT '0.00', + `trip` decimal(12,2) NOT NULL DEFAULT '0.00', + `egress` decimal(12,2) NOT NULL DEFAULT '0.00', + `lieu` decimal(12,2) NOT NULL DEFAULT '0.00', + `paidLeave` decimal(12,2) NOT NULL DEFAULT '0.00', + `unpaidLeave` decimal(12,2) NOT NULL DEFAULT '0.00', + `timeOvertime` decimal(12,2) NOT NULL DEFAULT '0.00', + `restOvertime` decimal(12,2) NOT NULL DEFAULT '0.00', + `holidayOvertime` decimal(12,2) NOT NULL DEFAULT '0.00', + `deserve` decimal(12,2) NOT NULL DEFAULT '0.00', + `actual` decimal(12,2) NOT NULL DEFAULT '0.00', + `status` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `attend` (`month`,`account`), + KEY `account` (`account`), + KEY `month` (`month`), + KEY `status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_auditcl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `model` char(30) NOT NULL DEFAULT 'waterfall', + `practiceArea` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(255) NOT NULL, + `objectType` char(30) NOT NULL, + `objectID` int(10) DEFAULT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_auditplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dateType` char(30) DEFAULT NULL, + `config` text, + `objectID` mediumint(9) NOT NULL, + `objectType` char(30) NOT NULL, + `process` mediumint(9) NOT NULL, + `processType` char(30) NOT NULL, + `checkDate` date NOT NULL, + `checkedBy` varchar(30) NOT NULL, + `realCheckDate` date NOT NULL, + `result` char(30) NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `checkBy` varchar(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_auditresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `auditplan` mediumint(8) NOT NULL, + `listID` mediumint(8) NOT NULL, + `result` char(30) NOT NULL, + `checkedBy` varchar(30) NOT NULL, + `checkedDate` date NOT NULL, + `comment` text NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_baseimage` ( + `id` smallint(7) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL DEFAULT '', + `path` varchar(255) NOT NULL DEFAULT '', + `osType` varchar(50) NOT NULL DEFAULT '', + `os` varchar(50) NOT NULL DEFAULT '', + `osCategory` varchar(50) NOT NULL DEFAULT '', + `osArch` varchar(50) NOT NULL DEFAULT '', + `osLang` varchar(50) NOT NULL DEFAULT '', + `suggestCore` tinyint(1) unsigned NOT NULL DEFAULT '0', + `suggestMemory` mediumint(6) unsigned NOT NULL DEFAULT '0', + `suggestVolume` mediumint(6) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_baseimagebrowser` ( + `vmBackingID` int(10) NOT NULL, + `browserID` int(10) NOT NULL, + PRIMARY KEY (`vmBackingID`,`browserID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_basicmeas` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `purpose` varchar(50) NOT NULL, + `scope` char(30) NOT NULL, + `object` char(30) NOT NULL, + `name` varchar(90) NOT NULL, + `code` char(30) NOT NULL, + `unit` varchar(10) NOT NULL, + `configure` text, + `params` text, + `definition` text, + `source` varchar(255) DEFAULT NULL, + `collectType` varchar(30) NOT NULL, + `collectConf` text NOT NULL, + `execTime` varchar(30) NOT NULL, + `collectedBy` varchar(10) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `order` mediumint(8) unsigned NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `module` varchar(20) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(30) 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 `account_vision_module_type_order` (`account`,`vision`,`module`,`type`,`order`), + KEY `account` (`account`) +) ENGINE=InnoDB AUTO_INCREMENT=11 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, + `default` enum('0','1') NOT NULL DEFAULT '0', + `status` enum('active','closed') NOT NULL DEFAULT 'active', + `desc` varchar(255) NOT NULL, + `createdDate` date NOT NULL, + `closedDate` date NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_browser` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL DEFAULT '', + `type` varchar(255) NOT NULL DEFAULT '', + `version` varchar(255) NOT NULL DEFAULT '', + `lang` varchar(255) NOT NULL DEFAULT '', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_budget` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `stage` char(30) NOT NULL, + `subject` mediumint(8) NOT NULL, + `amount` char(30) NOT NULL, + `name` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `injection` mediumint(8) unsigned NOT NULL, + `identify` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `execution` 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(255) NOT NULL DEFAULT '', + `browser` varchar(255) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` mediumtext NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `feedbackBy` varchar(100) NOT NULL, + `notifyEmail` varchar(100) 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', + `feedback` mediumint(8) unsigned NOT NULL DEFAULT '0', + `result` mediumint(8) unsigned NOT NULL, + `repo` mediumint(8) unsigned NOT NULL, + `mr` mediumint(8) unsigned NOT NULL, + `entry` text NOT NULL, + `lines` varchar(10) NOT NULL, + `v1` varchar(40) NOT NULL, + `v2` varchar(40) NOT NULL, + `repoType` varchar(30) NOT NULL DEFAULT '', + `issueKey` varchar(50) NOT NULL DEFAULT '', + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `execution` (`execution`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `toStory` (`toStory`), + KEY `result` (`result`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `execution` 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` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `execution` (`execution`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `execution` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + `storyPoint` float NOT NULL, + PRIMARY KEY (`execution`,`date`,`task`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `auto` varchar(10) NOT NULL DEFAULT 'no', + `frame` varchar(10) NOT NULL, + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `fromCaseVersion` mediumint(8) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `fromBug` (`fromBug`), + KEY `module` (`module`) +) ENGINE=InnoDB 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cfd` ( + `id` int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, + `execution` int(8) NOT NULL, + `type` char(30) NOT NULL, + `name` char(30) NOT NULL, + `count` smallint NOT NULL, + `date` date NOT NULL, + UNIQUE KEY `execution_type_name_date` (`execution`,`type`,`name`,`date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cmcl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` char(30) NOT NULL, + `title` int(11) NOT NULL, + `contents` text NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `order` int(11) 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=InnoDB 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=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_compile` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `job` mediumint(8) unsigned NOT NULL, + `queue` mediumint(8) NOT NULL, + `status` varchar(255) NOT NULL, + `logs` text, + `atTime` varchar(10) NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `tag` varchar(255) NOT NULL, + `times` tinyint(3) unsigned NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `updateDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` longtext NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`vision`,`owner`,`module`,`section`,`key`) +) ENGINE=InnoDB AUTO_INCREMENT=33 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=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_deploy` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `begin` datetime NOT NULL, + `end` datetime NOT NULL, + `name` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `notify` text NOT NULL, + `cases` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `result` varchar(20) NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_chart` ( + `id` mediumint NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `dataset` varchar(30) NOT NULL, + `desc` mediumtext NOT NULL, + `settings` mediumtext NOT NULL, + `filters` mediumtext NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` tinyint NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dashboard` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `module` mediumint NOT NULL, + `desc` mediumtext NOT NULL, + `layout` mediumtext NOT NULL, + `filters` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` tinyint NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dataset` ( + `id` mediumint unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(155) NOT NULL, + `sql` text NOT NULL, + `fields` mediumtext NOT NULL, + `objects` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` tinyint NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_deployproduct` ( + `deploy` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `release` mediumint(8) unsigned NOT NULL, + `package` varchar(255) NOT NULL, + UNIQUE KEY `deploy_product_release` (`deploy`,`product`,`release`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_deployscope` ( + `deploy` mediumint(8) unsigned NOT NULL, + `service` mediumint(8) unsigned NOT NULL, + `hosts` text NOT NULL, + `remove` text NOT NULL, + `add` text NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_deploystep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `deploy` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `begin` datetime NOT NULL, + `end` datetime NOT NULL, + `stage` varchar(30) NOT NULL, + `content` text NOT NULL, + `status` varchar(30) NOT NULL, + `assignedTo` char(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `finishedBy` char(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(4) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_design` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` varchar(255) NOT NULL, + `product` varchar(255) NOT NULL, + `commit` text NOT NULL, + `commitedBy` varchar(30) NOT NULL, + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `story` char(30) NOT NULL, + `desc` mediumtext NOT NULL, + `version` smallint(6) NOT NULL, + `type` char(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_designspec` ( + `design` mediumint(8) NOT NULL, + `version` smallint(6) NOT NULL, + `name` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `files` varchar(255) NOT NULL, + UNIQUE KEY `design` (`design`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `template` varchar(30) NOT NULL, + `templateType` varchar(30) NOT NULL, + `chapterType` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `parent` smallint(5) 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', + `views` smallint(5) unsigned NOT NULL, + `assetLib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `assetLibType` varchar(30) NOT NULL DEFAULT '', + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `fromVersion` smallint(6) NOT NULL DEFAULT '1', + `draft` longtext NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `approvedDate` date NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `mailto` text, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `execution` (`execution`), + KEY `lib` (`lib`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` longtext NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `baseUrl` varchar(255) NOT NULL DEFAULT '', + `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, + `desc` mediumtext NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `execution` (`execution`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_domain` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `domain` varchar(255) NOT NULL, + `adminURI` varchar(255) NOT NULL, + `resolverURI` varchar(255) NOT NULL, + `register` varchar(255) NOT NULL, + `expiredDate` datetime NOT NULL, + `renew` varchar(255) NOT NULL, + `account` varchar(255) 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`), + KEY `domain` (`domain`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_durationestimation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `stage` mediumint(9) NOT NULL, + `workload` varchar(255) NOT NULL, + `worktimeRate` varchar(255) NOT NULL, + `people` varchar(255) NOT NULL, + `startDate` date NOT NULL, + `endDate` date 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `product` text NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `account` varchar(30) NOT NULL, + `work` text, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `date` date NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `order` tinyint unsigned NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `execution` (`execution`), + KEY `objectID` (`objectID`), + KEY `date` (`date`), + KEY `account` (`account`) +) ENGINE=InnoDB 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, + `freePasswd` enum('0','1') NOT NULL DEFAULT '0', + `ip` varchar(100) NOT NULL, + `desc` mediumtext NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `calledTime` int(10) unsigned NOT NULL DEFAULT '0', + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_expect` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `userID` mediumint(8) NOT NULL, + `project` mediumint(8) NOT NULL DEFAULT '0', + `expect` text NOT NULL, + `progress` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB 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` mediumtext 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_faq` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `module` mediumint(9) NOT NULL, + `product` mediumint(9) NOT NULL, + `question` varchar(255) NOT NULL, + `answer` text NOT NULL, + `addedtime` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_feedback` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `module` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `type` char(30) NOT NULL, + `solution` char(30) NOT NULL, + `desc` text NOT NULL, + `pri` tinyint unsigned NOT NULL DEFAULT 2, + `status` varchar(30) NOT NULL, + `subStatus` varchar(30) NOT NULL DEFAULT '', + `public` enum('0','1') NOT NULL DEFAULT '0', + `notify` enum('0','1') NOT NULL DEFAULT '0', + `notifyEmail` varchar(100) NOT NULL, + `source` varchar(255) NOT NULL, + `likes` text NOT NULL, + `result` mediumint(8) unsigned NOT NULL, + `faq` mediumint(8) unsigned NOT NULL, + `openedBy` char(30) NOT NULL, + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` datetime NOT NULL, + `processedBy` char(30) NOT NULL, + `processedDate` datetime NOT NULL, + `closedBy` char(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedTo` varchar(255) NOT NULL, + `assignedDate` datetime NOT NULL, + `feedbackBy` varchar(100) NOT NULL, + `repeatFeedback` mediumint(8) NOT NULL DEFAULT 0, + `mailto` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_feedbackview` ( + `account` char(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + UNIQUE KEY `account_product` (`account`,`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` varchar(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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_gapanalysis` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `account` varchar(30) NOT NULL, + `role` varchar(20) NOT NULL, + `analysis` mediumtext NOT NULL, + `needTrain` enum('no','yes') NOT NULL DEFAULT 'no', + `createdBy` char(30) DEFAULT 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`), + UNIQUE KEY `project_account` (`project`,`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + `developer` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=17 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` int(9) 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_holiday` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL DEFAULT '', + `type` enum('holiday','working') NOT NULL DEFAULT 'holiday', + `desc` mediumtext NOT NULL, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_host` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `assetID` mediumint(8) unsigned NOT NULL, + `admin` smallint(5) unsigned NOT NULL DEFAULT '0', + `serverRoom` mediumint(8) unsigned NOT NULL, + `cabinet` varchar(128) NOT NULL, + `serverModel` varchar(256) NOT NULL, + `hardwareType` varchar(64) NOT NULL, + `hostType` enum('physical','virtual') NOT NULL, + `cpuBrand` varchar(128) NOT NULL, + `cpuModel` varchar(128) NOT NULL, + `cpuNumber` varchar(16) NOT NULL, + `cpuCores` varchar(30) NOT NULL, + `cpuRate` varchar(30) NOT NULL, + `memory` varchar(30) NOT NULL, + `diskType` varchar(30) NOT NULL, + `diskSize` varchar(30) NOT NULL, + `unit` enum('GB','TB') NOT NULL DEFAULT 'GB', + `privateIP` varchar(128) NOT NULL, + `publicIP` varchar(128) NOT NULL, + `nic` varchar(128) NOT NULL, + `mac` varchar(128) NOT NULL, + `osName` varchar(64) NOT NULL, + `osVersion` varchar(64) NOT NULL, + `webserver` varchar(128) NOT NULL, + `database` varchar(128) NOT NULL, + `language` varchar(16) NOT NULL, + `status` varchar(50) NOT NULL, + `agentPort` varchar(10) NOT NULL, + `instanceNum` tinyint(4) NOT NULL DEFAULT '0', + `pri` smallint(5) unsigned NOT NULL DEFAULT '0', + `heartbeatTime` datetime NOT NULL, + `tags` varchar(50) NOT NULL DEFAULT '', + `provider` varchar(255) NOT NULL DEFAULT '', + `bridgeID` varchar(255) NOT NULL DEFAULT '', + `cloudKey` varchar(255) NOT NULL DEFAULT '', + `cloudSecret` varchar(255) NOT NULL DEFAULT '', + `cloudRegion` varchar(255) NOT NULL DEFAULT '', + `cloudNamespace` varchar(255) NOT NULL DEFAULT '', + `cloudUser` varchar(255) NOT NULL DEFAULT '', + `cloudAccount` varchar(255) NOT NULL DEFAULT '', + `cloudPassword` varchar(255) NOT NULL DEFAULT '', + `couldVPC` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=InnoDB 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', + `ownedBy` varchar(30) NOT NULL DEFAULT '', + `editedBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `mergedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastMessage` int(11) unsigned NOT NULL DEFAULT '0', + `lastMessageIndex` int(11) unsigned NOT NULL DEFAULT 0, + `dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `pinnedMessages` text NOT NULL, + `mergedChats` text NOT NULL DEFAULT '', + `adminInvite` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `gid` (`gid`), + KEY `name` (`name`), + KEY `type` (`type`), + KEY `public` (`public`), + KEY `createdBy` (`createdBy`), + KEY `editedBy` (`editedBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chat_message_index` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL, + `tableName` char(64) NOT NULL, + `start` int(11) unsigned NOT NULL, + `end` int(11) unsigned NOT NULL, + `startIndex` int(11) unsigned NOT NULL, + `endIndex` int(11) unsigned NOT NULL, + `startDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `endDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `count` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `chattable` (`gid`,`tableName`), + KEY `start` (`start`), + KEY `end` (`end`), + KEY `startDate` (`startDate`), + KEY `endDate` (`endDate`), + KEY `chatstartindex` (`gid`,`startIndex`), + KEY `chatendindex` (`gid`,`endIndex`) +) ENGINE=InnoDB 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', + `freeze` 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 '', + `lastReadMessage` int(11) unsigned NOT NULL DEFAULT '0', + `lastReadMessageIndex` int(11) unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + UNIQUE KEY `chatuser` (`cgid`,`user`), + KEY `cgid` (`cgid`), + KEY `user` (`user`), + KEY `order` (`order`), + KEY `star` (`star`), + KEY `hide` (`hide`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_client` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `version` char(30) NOT NULL DEFAULT '', + `desc` varchar(100) NOT NULL DEFAULT '', + `changeLog` text NOT NULL, + `strategy` varchar(10) NOT NULL DEFAULT '', + `downloads` text NOT NULL, + `createdDate` datetime NOT NULL, + `createdBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL DEFAULT '', + `status` enum('released','wait') NOT NULL DEFAULT 'wait', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_conference` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `rid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `status` enum('closed','open') NOT NULL DEFAULT 'closed', + `participants` text NOT NULL, + `invitee` text NOT NULL, + `openedBy` mediumint(8) NOT NULL DEFAULT '0', + `openedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_conferenceaction` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `rid` char(40) NOT NULL DEFAULT '', + `type` enum('create','invite','join','leave','close','publish') NOT NULL DEFAULT 'create', + `data` text NOT NULL, + `user` mediumint(8) NOT NULL DEFAULT '0', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `device` char(40) NOT NULL DEFAULT 'default', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message` ( + `id` int(11) 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', + `index` int(11) unsigned NOT NULL DEFAULT 0, + `type` enum('normal','broadcast','notify','bulletin') NOT NULL DEFAULT 'normal', + `content` text NOT NULL, + `contentType` enum('text','plain','emotion','image','file','object','code') NOT NULL DEFAULT 'text', + `data` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `mgid` (`gid`), + KEY `mcgid` (`cgid`), + KEY `muser` (`user`), + KEY `mtype` (`type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message_backup` ( + `id` int(11) unsigned NOT NULL, + `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', + `index` int(11) unsigned NOT NULL DEFAULT 0, + `type` enum('normal','broadcast','notify') NOT NULL DEFAULT 'normal', + `content` text NOT NULL, + `contentType` enum('text','plain','emotion','image','file','object','code') NOT NULL DEFAULT 'text', + `data` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message_index` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `tableName` char(64) NOT NULL, + `start` int(11) unsigned NOT NULL, + `end` int(11) unsigned NOT NULL, + `startDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `endDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `chats` text NOT NULL, + PRIMARY KEY (`id`), + KEY `tableName` (`tableName`), + KEY `start` (`start`), + KEY `end` (`end`), + KEY `startDate` (`startDate`), + KEY `endDate` (`endDate`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_messagestatus` ( + `user` mediumint(8) NOT NULL DEFAULT '0', + `message` int(11) unsigned NOT NULL, + `status` enum('waiting','sent','readed','deleted') NOT NULL DEFAULT 'waiting', + UNIQUE KEY `user` (`user`,`message`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_queue` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` char(30) NOT NULL, + `content` text NOT NULL, + `addDate` datetime NOT NULL, + `processDate` datetime NOT NULL, + `result` text NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_userdevice` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` mediumint(8) NOT NULL DEFAULT '0', + `device` char(40) NOT NULL DEFAULT 'default', + `deviceID` char(40) NOT NULL DEFAULT '', + `token` char(64) NOT NULL DEFAULT '', + `validUntil` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastLogin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastLogout` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + UNIQUE KEY `userdevice` (`user`,`device`), + KEY `user` (`user`), + KEY `lastLogin` (`lastLogin`), + KEY `lastLogout` (`lastLogout`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_intervention` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `activity` mediumint(8) NOT NULL, + `status` char(30) NOT NULL, + `partake` text NOT NULL, + `begin` date NOT NULL, + `realBegin` date NOT NULL, + `situation` varchar(255) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `project` (`project`,`activity`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_issue` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `resolvedBy` varchar(30) NOT NULL, + `project` varchar(255) NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `pri` char(30) NOT NULL, + `severity` char(30) NOT NULL, + `type` char(30) NOT NULL, + `activity` varchar(255) NOT NULL, + `deadline` date NOT NULL, + `resolution` char(30) NOT NULL, + `resolutionComment` text NOT NULL, + `objectID` varchar(255) NOT NULL, + `resolvedDate` date NOT NULL, + `status` varchar(30) NOT NULL, + `owner` varchar(255) NOT NULL, + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `activateBy` varchar(30) NOT NULL, + `activateDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` date NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `approvedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_job` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `repo` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `frame` varchar(20) NOT NULL, + `engine` varchar(20) NOT NULL, + `server` mediumint(8) unsigned NOT NULL, + `pipeline` varchar(500) NOT NULL, + `triggerType` varchar(255) NOT NULL, + `sonarqubeServer` mediumint(8) unsigned NOT NULL, + `projectKey` varchar(255) NOT NULL, + `svnDir` varchar(255) NOT NULL, + `atDay` varchar(255) DEFAULT NULL, + `atTime` varchar(10) DEFAULT NULL, + `customParam` text NOT NULL, + `comment` varchar(255) DEFAULT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `lastExec` datetime DEFAULT NULL, + `lastStatus` varchar(255) DEFAULT NULL, + `lastTag` varchar(255) DEFAULT NULL, + `lastSyncDate` datetime DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanban` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `space` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `owner` varchar(30) NOT NULL, + `team` text NOT NULL, + `desc` mediumtext NOT NULL, + `acl` char(30) NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `archived` enum('0','1') NOT NULL DEFAULT '1', + `performable` enum('0','1') NOT NULL DEFAULT '0', + `status` enum('active','closed') NOT NULL DEFAULT 'active', + `order` mediumint(8) NOT NULL DEFAULT '0', + `displayCards` smallint(6) NOT NULL DEFAULT '0', + `showWIP` enum('0','1') NOT NULL DEFAULT '1', + `fluidBoard` enum('0','1') NOT NULL DEFAULT '0', + `colWidth` smallint(4) NOT NULL DEFAULT '264', + `minColWidth` smallint(4) NOT NULL DEFAULT '180', + `maxColWidth` smallint(4) NOT NULL DEFAULT '384', + `object` varchar(255) NOT NULL, + `alignment` varchar(10) NOT NULL DEFAULT 'center', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `closedBy` char(30) NOT NULL, + `closedDate` datetime NOT NULL, + `activatedBy` char(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbancard` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `kanban` mediumint(8) unsigned NOT NULL, + `region` mediumint(8) unsigned NOT NULL, + `group` mediumint(8) unsigned NOT NULL, + `fromID` mediumint(8) unsigned NOT NULL, + `fromType` varchar(30) NOT NULL, + `name` varchar(255) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'doing', + `pri` mediumint(8) unsigned NOT NULL, + `assignedTo` text NOT NULL, + `desc` mediumtext NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `estimate` float unsigned NOT NULL, + `progress` float unsigned NOT NULL DEFAULT '0', + `color` char(7) NOT NULL, + `acl` char(30) NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) NOT NULL DEFAULT '0', + `archived` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `archivedBy` char(30) NOT NULL, + `archivedDate` datetime NOT NULL, + `assignedBy` char(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbancell` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `kanban` mediumint(8) NOT NULL, + `lane` mediumint(8) NOT NULL, + `column` mediumint(8) NOT NULL, + `type` char(30) NOT NULL, + `cards` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `card_group` (`kanban`,`type`,`lane`,`column`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbancolumn` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `region` mediumint(8) unsigned NOT NULL, + `group` mediumint(8) NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL DEFAULT '', + `color` char(30) NOT NULL, + `limit` smallint(6) NOT NULL DEFAULT '-1', + `order` mediumint(8) NOT NULL DEFAULT '0', + `archived` enum('0','1') NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbangroup` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `kanban` mediumint(8) unsigned NOT NULL, + `region` mediumint(8) unsigned NOT NULL, + `order` smallint(6) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbanlane` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `execution` mediumint(8) NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `region` mediumint(8) unsigned NOT NULL, + `group` mediumint(8) unsigned NOT NULL, + `groupby` char(30) NOT NULL, + `extra` char(30) NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `color` char(30) NOT NULL, + `order` smallint(6) NOT NULL DEFAULT '0', + `lastEditedTime` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbanregion` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `space` mediumint(8) unsigned NOT NULL, + `kanban` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` mediumint(8) NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_kanbanspace` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `type` varchar(50) NOT NULL, + `owner` varchar(30) NOT NULL, + `team` text NOT NULL, + `desc` mediumtext NOT NULL, + `acl` char(30) NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `status` enum('active','closed') NOT NULL DEFAULT 'active', + `order` mediumint(8) NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `closedBy` char(30) NOT NULL, + `closedDate` datetime NOT NULL, + `activatedBy` char(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB 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', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`,`vision`) +) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_leave` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `start` time NOT NULL, + `finish` time NOT NULL, + `hours` float(4,1) unsigned NOT NULL DEFAULT '0.0', + `backDate` datetime NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `status` varchar(30) NOT NULL DEFAULT '', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + `level` tinyint(3) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `reviewers` text NOT NULL, + `backReviewers` text NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `type` (`type`), + KEY `status` (`status`), + KEY `createdBy` (`createdBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lieu` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `start` time NOT NULL, + `finish` time NOT NULL, + `hours` float(4,1) unsigned NOT NULL DEFAULT '0.0', + `overtime` char(255) NOT NULL, + `trip` char(255) NOT NULL, + `desc` text NOT NULL, + `status` varchar(30) NOT NULL DEFAULT '', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + `level` tinyint(3) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `reviewers` text NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `status` (`status`), + KEY `createdBy` (`createdBy`) +) ENGINE=InnoDB 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_measqueue` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `mid` mediumint(8) unsigned NOT NULL, + `status` varchar(255) NOT NULL, + `logs` text, + `execTime` varchar(10) NOT NULL, + `params` text, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `updateDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_measrecords` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `mid` mediumint(8) NOT NULL, + `measCode` char(50) NOT NULL DEFAULT '', + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `params` text NOT NULL, + `year` char(4) NOT NULL, + `month` char(6) NOT NULL, + `week` char(8) NOT NULL, + `day` char(8) NOT NULL, + `value` varchar(255) NOT NULL, + `date` date NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `time` (`year`,`month`,`day`,`week`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_meastemplate` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `model` char(30) NOT NULL, + `name` varchar(255) NOT NULL, + `content` mediumtext NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_meeting` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) NOT NULL, + `execution` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `type` varchar(255) NOT NULL, + `begin` time NOT NULL, + `end` time NOT NULL, + `dept` mediumint(8) NOT NULL, + `mode` varchar(255) NOT NULL, + `host` varchar(30) NOT NULL, + `participant` text NOT NULL, + `date` date NOT NULL, + `room` int(11) NOT NULL, + `minutes` text NOT NULL, + `minutedBy` varchar(30) NOT NULL, + `minutedDate` datetime NOT NULL, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_meetingroom` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `position` varchar(30) NOT NULL, + `seats` int(11) NOT NULL, + `equipment` varchar(255) NOT NULL, + `openTime` varchar(255) 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=InnoDB 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, + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `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=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_mr` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `hostID` mediumint(8) unsigned NOT NULL, + `sourceProject` varchar(50) NOT NULL, + `sourceBranch` varchar(100) NOT NULL, + `targetProject` varchar(50) NOT NULL, + `targetBranch` varchar(100) NOT NULL, + `mriid` int(10) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `description` text NOT NULL, + `assignee` varchar(255) NOT NULL, + `reviewer` varchar(255) NOT NULL, + `approver` varchar(255) 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', + `status` char(30) NOT NULL, + `mergeStatus` char(30) NOT NULL, + `approvalStatus` char(30) NOT NULL, + `needApproved` enum('0','1') NOT NULL DEFAULT '0', + `needCI` enum('0','1') NOT NULL DEFAULT '0', + `repoID` mediumint(8) unsigned NOT NULL, + `jobID` mediumint(8) unsigned NOT NULL, + `compileID` mediumint(8) unsigned NOT NULL, + `compileStatus` char(30) NOT NULL, + `removeSourceBranch` enum('0','1') NOT NULL DEFAULT '0', + `synced` enum('0','1') NOT NULL DEFAULT '1', + `syncError` varchar(255) NOT NULL, + `hasNoConflict` enum('0','1') NOT NULL DEFAULT '0', + `diffs` longtext, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_mrapproval` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `mrID` mediumint(8) unsigned NOT NULL, + `account` varchar(255) NOT NULL, + `date` datetime NOT NULL, + `action` char(30) NOT NULL, + `comment` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_nc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `auditplan` mediumint(8) NOT NULL, + `listID` mediumint(8) NOT NULL, + `title` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `type` char(30) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'active', + `severity` char(30) NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `resolution` char(30) NOT NULL, + `resolvedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` date NOT NULL, + `parent` mediumint(8) unsigned NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` date NOT NULL, + `activateDate` date 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType_toList_status` (`objectType`,`toList`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_oauth` ( + `account` varchar(30) NOT NULL, + `openID` varchar(255) NOT NULL, + `providerType` varchar(30) NOT NULL, + `providerID` mediumint(8) unsigned NOT NULL, + KEY `account` (`account`), + KEY `providerType` (`providerType`), + KEY `providerID` (`providerID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_object` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) NOT NULL, + `from` mediumint(8) NOT NULL, + `title` varchar(255) NOT NULL, + `category` char(30) NOT NULL, + `version` varchar(255) NOT NULL, + `type` enum('reviewed','taged') NOT NULL, + `range` text NOT NULL, + `data` text NOT NULL, + `storyEst` char(30) NOT NULL, + `taskEst` char(30) NOT NULL, + `requestEst` char(30) NOT NULL, + `testEst` char(30) NOT NULL, + `devEst` char(30) NOT NULL, + `designEst` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_opportunity` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `source` char(30) NOT NULL, + `type` char(30) NOT NULL, + `strategy` char(30) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'active', + `impact` mediumint(8) NOT NULL, + `chance` mediumint(8) NOT NULL, + `ratio` mediumint(8) NOT NULL, + `pri` char(30) NOT NULL, + `identifiedDate` date NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` date NOT NULL, + `approvedDate` date NOT NULL, + `prevention` mediumtext NOT NULL, + `plannedClosedDate` date NOT NULL, + `actualClosedDate` date NOT NULL, + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `activatedBy` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `cancelReason` char(30) NOT NULL, + `hangupedBy` varchar(30) NOT NULL, + `hangupedDate` datetime NOT NULL, + `resolution` mediumtext NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `resolvedDate` datetime NOT NULL, + `lastCheckedBy` varchar(30) NOT NULL, + `lastCheckedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_overtime` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `start` time NOT NULL, + `finish` time NOT NULL, + `hours` float(4,1) unsigned NOT NULL DEFAULT '0.0', + `leave` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `status` varchar(30) NOT NULL DEFAULT '', + `rejectReason` varchar(100) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `reviewedBy` char(30) NOT NULL, + `reviewedDate` datetime NOT NULL, + `level` tinyint(3) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `reviewers` text NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `type` (`type`), + KEY `status` (`status`), + KEY `createdBy` (`createdBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_pipeline` ( + `id` smallint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` char(30) NOT NULL, + `name` varchar(50) NOT NULL, + `url` varchar(255) DEFAULT NULL, + `account` varchar(30) DEFAULT NULL, + `password` varchar(255) NOT NULL, + `token` varchar(255) DEFAULT NULL, + `private` char(32) DEFAULT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_planstory` ( + `plan` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL, + `order` mediumint(9) NOT NULL, + UNIQUE KEY `plan_story` (`plan`,`story`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_process` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `model` char(30) NOT NULL DEFAULT 'waterfall', + `name` varchar(255) NOT NULL, + `type` char(30) NOT NULL, + `abbr` char(30) NOT NULL, + `desc` mediumtext NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `order` mediumint(9) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `program` mediumint(8) unsigned NOT NULL, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `bind` enum('0','1') NOT NULL DEFAULT '0', + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `desc` mediumtext NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `feedback` varchar(30) NOT NULL, + `ticket` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `reviewer` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `acl` (`acl`), + KEY `order` (`order`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `parent` mediumint(9) NOT NULL DEFAULT '0', + `title` varchar(90) NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `desc` mediumtext NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `closedReason` varchar(20) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_programactivity` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `process` mediumint(8) NOT NULL, + `activity` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `content` text NOT NULL, + `reason` varchar(255) NOT NULL, + `result` char(30) NOT NULL, + `linkedBy` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_programoutput` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `process` mediumint(8) NOT NULL, + `activity` mediumint(8) NOT NULL, + `output` mediumint(8) NOT NULL, + `content` text NOT NULL, + `name` varchar(255) NOT NULL, + `reason` varchar(255) NOT NULL, + `result` char(30) NOT NULL, + `linkedBy` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_programprocess` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `process` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `type` char(30) NOT NULL, + `abbr` char(30) NOT NULL, + `desc` text NOT NULL, + `reason` varchar(255) NOT NULL, + `linkedBy` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_programreport` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `template` mediumint(8) NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `params` text NOT NULL, + `content` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) NOT NULL DEFAULT '0', + `model` char(30) NOT NULL, + `type` char(30) NOT NULL DEFAULT 'sprint', + `lifetime` char(30) NOT NULL DEFAULT '', + `budget` varchar(30) NOT NULL DEFAULT '0', + `budgetUnit` char(30) NOT NULL DEFAULT 'CNY', + `attribute` varchar(30) NOT NULL DEFAULT '', + `percent` float unsigned NOT NULL DEFAULT '0', + `milestone` enum('0','1') NOT NULL DEFAULT '0', + `output` text NOT NULL, + `auth` char(30) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` varchar(255) NOT NULL, + `grade` tinyint(3) unsigned NOT NULL, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `realBegan` date NOT NULL, + `realEnd` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `subStatus` varchar(30) NOT NULL DEFAULT '', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` mediumtext NOT NULL, + `version` smallint(6) NOT NULL, + `parentVersion` smallint(6) NOT NULL, + `planDuration` int(11) NOT NULL, + `realDuration` int(11) NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `suspendedDate` date 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` char(30) NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `displayCards` smallint(6) NOT NULL DEFAULT '0', + `fluidBoard` enum('0','1') NOT NULL DEFAULT '0', + `colWidth` smallint(4) NOT NULL DEFAULT '264', + `minColWidth` smallint(4) NOT NULL DEFAULT '180', + `maxColWidth` smallint(4) NOT NULL DEFAULT '384', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `acl` (`acl`), + KEY `order` (`order`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectadmin` ( + `group` smallint(6) NOT NULL, + `account` char(30) NOT NULL, + `programs` text NOT NULL, + `projects` text NOT NULL, + `products` text NOT NULL, + `executions` text NOT NULL, + UNIQUE KEY `group_account` (`group`, `account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectcase` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `count` mediumint(8) unsigned NOT NULL DEFAULT '1', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`case`) +) ENGINE=InnoDB 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` varchar(255) NOT NULL, + PRIMARY KEY (`project`,`product`,`branch`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectspec` ( + `project` mediumint(8) NOT NULL, + `version` smallint(6) NOT NULL, + `name` varchar(255) NOT NULL, + `milestone` enum('0','1') NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + UNIQUE KEY `project` (`project`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `branch` 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`), + KEY `story` (`story`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_relation` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) NOT NULL, + `product` mediumint(8) NOT NULL, + `execution` mediumint(8) NOT NULL, + `AType` char(30) NOT NULL, + `AID` mediumint(8) NOT NULL, + `AVersion` char(30) NOT NULL, + `relation` char(30) NOT NULL, + `BType` char(30) NOT NULL, + `BID` mediumint(8) NOT NULL, + `BVersion` char(30) NOT NULL, + `extra` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `relation` (`product`,`relation`,`AType`,`BType`,`AID`,`BID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_relationoftasks` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `execution` mediumint(8) unsigned NOT NULL, + `pretask` mediumint(8) unsigned NOT NULL, + `condition` enum('begin','end') NOT NULL, + `task` mediumint(8) unsigned NOT NULL, + `action` enum('begin','end') NOT NULL, + PRIMARY KEY (`id`), + KEY `relationoftasks` (`execution`,`task`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` mediumtext NOT NULL, + `mailto` text, + `notify` varchar(255) DEFAULT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_repo` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `product` varchar(255) NOT NULL, + `name` varchar(255) NOT NULL, + `path` varchar(255) NOT NULL, + `prefix` varchar(100) NOT NULL, + `encoding` varchar(20) NOT NULL, + `SCM` varchar(10) NOT NULL, + `client` varchar(100) NOT NULL, + `serviceHost` varchar(50) NOT NULL, + `serviceProject` varchar(100) NOT NULL, + `commits` mediumint(8) unsigned NOT NULL, + `account` varchar(30) NOT NULL, + `password` varchar(30) NOT NULL, + `encrypt` varchar(30) NOT NULL DEFAULT 'plain', + `acl` text NOT NULL, + `synced` tinyint(1) NOT NULL DEFAULT '0', + `lastSync` datetime NOT NULL, + `desc` text NOT NULL, + `extra` char(30) NOT NULL, + `preMerge` enum('0','1') NOT NULL DEFAULT '0', + `job` mediumint(8) unsigned NOT NULL, + `fileServerUrl` text, + `fileServerAccount` varchar(40) NOT NULL DEFAULT '', + `fileServerPassword` varchar(100) NOT NULL DEFAULT '', + `deleted` tinyint(1) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_repobranch` ( + `repo` mediumint(8) unsigned NOT NULL, + `revision` mediumint(8) unsigned NOT NULL, + `branch` varchar(255) NOT NULL, + UNIQUE KEY `repo_revision_branch` (`repo`,`revision`,`branch`), + KEY `branch` (`branch`), + KEY `revision` (`revision`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_repofiles` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repo` mediumint(8) unsigned NOT NULL, + `revision` mediumint(8) unsigned NOT NULL, + `path` varchar(255) NOT NULL, + `parent` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `action` char(1) NOT NULL, + PRIMARY KEY (`id`), + KEY `path` (`path`), + KEY `parent` (`parent`), + KEY `repo` (`repo`), + KEY `revision` (`revision`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_repohistory` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `repo` mediumint(9) NOT NULL, + `revision` varchar(40) NOT NULL, + `commit` mediumint(8) unsigned NOT NULL, + `comment` text NOT NULL, + `committer` varchar(100) NOT NULL, + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `repo` (`repo`), + KEY `revision` (`revision`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_report` ( + `id` mediumint(9) NOT NULL AUTO_INCREMENT, + `code` varchar(100) NOT NULL, + `name` text NOT NULL, + `module` varchar(100) NOT NULL, + `sql` text NOT NULL, + `vars` text NOT NULL, + `langs` text NOT NULL, + `params` text NOT NULL, + `step` tinyint(1) NOT NULL DEFAULT '2', + `desc` text NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`) +) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_researchplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `customer` varchar(255) NOT NULL, + `stakeholder` varchar(255) NOT NULL, + `objective` varchar(255) NOT NULL, + `begin` datetime NOT NULL, + `end` datetime NOT NULL, + `location` varchar(255) NOT NULL, + `team` varchar(255) NOT NULL, + `method` enum('','videoConference','interview','questionnaire','telephoneInterview') NOT NULL, + `outline` mediumtext NOT NULL, + `schedule` mediumtext 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_researchreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `relatedPlan` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `author` varchar(30) NOT NULL, + `content` mediumtext NOT NULL, + `customer` varchar(255) NOT NULL, + `researchObjects` varchar(255) NOT NULL, + `begin` datetime NOT NULL, + `end` datetime NOT NULL, + `location` varchar(255) NOT NULL, + `method` enum('','videoConference','interview','questionnaire','telephoneInterview') 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_review` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `object` mediumint(8) NOT NULL, + `template` mediumint(8) NOT NULL, + `doc` mediumint(8) DEFAULT NULL, + `docVersion` smallint(6) NOT NULL, + `status` char(30) NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `auditedBy` varchar(255) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deadline` date NOT NULL, + `lastReviewedBy` varchar(255) DEFAULT NULL, + `lastReviewedDate` date NOT NULL, + `lastAuditedBy` varchar(255) NOT NULL, + `lastAuditedDate` date NOT NULL, + `lastEditedBy` varchar(255) NOT NULL, + `lastEditedDate` date NOT NULL, + `result` char(30) NOT NULL, + `auditResult` char(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_reviewcl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(255) NOT NULL, + `object` char(30) NOT NULL, + `category` char(30) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `order` mediumint(8) DEFAULT '0', + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_reviewissue` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `review` mediumint(8) NOT NULL, + `approval` mediumint(8) NOT NULL, + `injection` mediumint(8) NOT NULL, + `identify` mediumint(8) NOT NULL, + `type` char(30) NOT NULL DEFAULT 'review', + `listID` mediumint(8) NOT NULL, + `title` varchar(255) NOT NULL, + `opinion` varchar(255) NOT NULL, + `opinionDate` date NOT NULL, + `status` char(30) NOT NULL, + `resolution` char(30) NOT NULL, + `resolutionBy` char(30) NOT NULL, + `resolutionDate` date NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_reviewlist` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(255) NOT NULL, + `object` char(30) NOT NULL, + `category` char(30) NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedBy` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_reviewresult` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `review` mediumint(8) NOT NULL, + `type` char(30) NOT NULL DEFAULT 'review', + `result` char(30) NOT NULL, + `opinion` text NOT NULL, + `reviewer` char(30) NOT NULL, + `remainIssue` char(30) NOT NULL, + `createdDate` date NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `reviewer` (`review`,`reviewer`,`type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_risk` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` varchar(255) NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `source` char(30) NOT NULL, + `category` char(30) NOT NULL, + `strategy` char(30) NOT NULL, + `status` varchar(30) NOT NULL DEFAULT 'active', + `impact` char(30) NOT NULL, + `probability` char(30) NOT NULL, + `rate` char(30) NOT NULL, + `pri` char(30) NOT NULL, + `identifiedDate` date NOT NULL, + `prevention` mediumtext NOT NULL, + `remedy` mediumtext NOT NULL, + `plannedClosedDate` date NOT NULL, + `actualClosedDate` date NOT NULL, + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `from` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `resolution` mediumtext NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `activateBy` varchar(30) NOT NULL, + `activateDate` date NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` date NOT NULL, + `cancelBy` varchar(30) NOT NULL, + `cancelDate` date NOT NULL, + `cancelReason` char(30) NOT NULL, + `hangupBy` varchar(30) NOT NULL, + `hangupDate` date NOT NULL, + `trackedBy` varchar(30) NOT NULL, + `trackedDate` date NOT NULL, + `assignedDate` date NOT NULL, + `approvedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_riskissue` ( + `risk` mediumint(8) unsigned NOT NULL, + `issue` mediumint(8) unsigned NOT NULL, + UNIQUE KEY `risk_issue` (`risk`,`issue`) +) ENGINE=InnoDB 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_searchdict` ( + `key` smallint(5) unsigned NOT NULL, + `value` char(3) NOT NULL, + PRIMARY KEY (`key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_searchindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `objectType` char(20) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `title` text NOT NULL, + `content` text NOT NULL, + `addedDate` datetime NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `object` (`objectType`,`objectID`), + KEY `addedDate` (`addedDate`), + FULLTEXT KEY `content` (`content`), + FULLTEXT KEY `title` (`title`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_serverroom` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(128) NOT NULL, + `city` varchar(128) NOT NULL, + `line` varchar(20) NOT NULL, + `bandwidth` varchar(128) NOT NULL, + `provider` varchar(128) NOT NULL, + `owner` varchar(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_service` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `external` enum('0','1') NOT NULL DEFAULT '0', + `port` smallint(5) unsigned NOT NULL, + `entry` varchar(255) NOT NULL, + `deploy` varchar(255) NOT NULL, + `version` varchar(64) NOT NULL, + `color` char(7) NOT NULL, + `desc` mediumtext, + `dept` varchar(128) NOT NULL, + `devel` varchar(30) NOT NULL, + `qa` varchar(30) NOT NULL, + `ops` varchar(30) NOT NULL, + `hosts` text, + `softName` varchar(128) NOT NULL, + `softVersion` varchar(128) NOT NULL, + `type` varchar(20) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_solutions` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, + `contents` text NOT NULL COMMENT '问题描述', + `support` text NOT NULL COMMENT '是否需要高层支持', + `measures` text NOT NULL COMMENT '解决建议', + `type` char(30) NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` date NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_sqlview` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `sql` 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_stage` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `percent` varchar(255) NOT NULL, + `type` varchar(255) 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=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_stakeholder` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, + `objectID` mediumint(8) NOT NULL, + `objectType` char(30) NOT NULL, + `user` char(30) NOT NULL, + `type` char(30) NOT NULL, + `key` enum('0','1') NOT NULL, + `from` char(30) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` date NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL, + KEY `objectID` (`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `parent` mediumint(9) NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `feedback` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'story', + `category` varchar(30) NOT NULL DEFAULT 'feature', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changing','active','draft','closed','reviewing') NOT NULL DEFAULT '', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `stagedBy` char(30) NOT NULL, + `mailto` text, + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `fromStory` mediumint(8) unsigned NOT NULL DEFAULT '0', + `fromVersion` smallint(6) NOT NULL DEFAULT '1', + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `approvedDate` date NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `changedBy` VARCHAR(30) NOT NULL, + `changedDate` DATETIME NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `toBug` mediumint(8) unsigned NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `linkRequirements` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `storyChanged` enum('0','1') NOT NULL DEFAULT '0', + `feedbackBy` varchar(100) NOT NULL, + `notifyEmail` varchar(100) NOT NULL, + `URChanged` enum('0','1') NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyestimate` ( + `story` mediumint(9) NOT NULL, + `round` smallint(6) NOT NULL, + `estimate` text NOT NULL, + `average` float NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + UNIQUE KEY `story` (`story`,`round`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyreview` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `reviewer` varchar(30) NOT NULL, + `result` varchar(30) NOT NULL, + `reviewDate` datetime NOT NULL, + UNIQUE KEY `story` (`story`,`version`,`reviewer`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` mediumtext NOT NULL, + `verify` mediumtext NOT NULL, + `files` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + `stagedBy` char(30) NOT NULL, + UNIQUE KEY `story_branch` (`story`,`branch`), + KEY `story` (`story`) +) ENGINE=InnoDB 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `design` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `designVersion` smallint(6) unsigned NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `fromIssue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `feedback` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `mode` varchar(10) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `mailto` text, + `desc` mediumtext NOT NULL, + `version` smallint(6) NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `planDuration` int(11) NOT NULL, + `realDuration` int(11) NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `activatedDate` datetime NOT NULL, + `order` mediumint(8) NOT NULL DEFAULT 0, + `repo` mediumint(8) unsigned NOT NULL, + `mr` mediumint(8) unsigned NOT NULL, + `entry` varchar(255) NOT NULL, + `lines` varchar(10) NOT NULL, + `v1` varchar(40) NOT NULL, + `v2` varchar(40) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + PRIMARY KEY (`id`), + KEY `execution` (`execution`), + KEY `story` (`story`), + KEY `parent` (`parent`), + KEY `assignedTo` (`assignedTo`), + KEY `order` (`order`) +) ENGINE=InnoDB 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, + `order` tinyint unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskspec` ( + `task` mediumint(8) NOT NULL, + `version` smallint(6) NOT NULL, + `name` varchar(255) NOT NULL, + `estStarted` date NOT NULL, + `deadline` date NOT NULL, + UNIQUE KEY `task` (`task`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskteam` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL, + `account` char(30) NOT NULL, + `estimate` decimal(12,2) NOT NULL, + `consumed` decimal(12,2) NOT NULL, + `left` decimal(12,2) NOT NULL, + `transfer` char(30) NOT NULL, + `status` enum('wait','doing','done') NOT NULL DEFAULT 'wait', + `order` tinyint(3) NOT NULL, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=InnoDB 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','execution') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `position` varchar(30) NOT NULL, + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(3,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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `execution` 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `job` mediumint(8) unsigned NOT NULL, + `compile` mediumint(8) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + `duration` float NOT NULL, + `xml` text NOT NULL, + `deploy` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=InnoDB 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` mediumtext NOT NULL, + `type` varchar(20) NOT NULL, + `order` SMALLINT UNSIGNED NOT NULL DEFAULT '0', + `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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `name` char(90) NOT NULL, + `execution` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `type` varchar(255) NOT NULL DEFAULT '', + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `realFinishedDate` datetime NOT NULL, + `mailto` text, + `desc` mediumtext NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `testreport` mediumint(8) unsigned NOT NULL, + `auto` varchar(10) NOT NULL DEFAULT 'no', + `subStatus` varchar(30) NOT NULL DEFAULT '', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE IF NOT EXISTS `zt_ticket` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `module` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `desc` text NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `feedback` mediumint(8) NOT NULL, + `assignedTo` varchar(255) NOT NULL, + `assignedDate` datetime NOT NULL, + `realStarted` datetime NOT NULL, + `startedBy` varchar(255) NOT NULL, + `startedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `pri` tinyint unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `status` varchar(30) NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `activatedCount` int(10) NOT NULL, + `activatedBy` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `resolvedDate` datetime NOT NULL, + `resolution` varchar(1000) NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `keywords` varchar(255) NOT NULL, + `repeatTicket` mediumint(8) NOT NULL DEFAULT '0', + `mailto` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + key `product` (`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE IF NOT EXISTS `zt_ticketsource` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `ticketId` mediumint(8) unsigned NOT NULL, + `customer` varchar(100) NOT NULL, + `contact` varchar(100) NOT NULL, + `notifyEmail` varchar(100) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`), + key `ticketId` (`ticketId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_ticketrelation` ( + `id` mediumint unsigned NOT NULL AUTO_INCREMENT, + `ticketId` mediumint unsigned NOT NULL, + `objectId` mediumint NOT NULL, + `objectType` varchar(100) NOT NULL, + PRIMARY KEY (`id`), + KEY `ticketId` (`ticketId`) +) ENGINE=InnoDB 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, + `feedback` mediumint(8) unsigned NOT NULL, + `type` char(15) 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` mediumtext 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, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_traincategory` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) NOT NULL, + `order` mediumint(8) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_traincontents` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `code` varchar(50) NOT NULL, + `course` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `order` mediumint(8) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` tinyint(1) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_traincourse` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `code` varchar(50) NOT NULL, + `category` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `status` varchar(10) NOT NULL, + `teacher` varchar(30) NOT NULL DEFAULT '', + `desc` mediumtext NOT NULL, + `createdBy` varchar(255) NOT NULL, + `createdDate` date NOT NULL, + `editedBy` varchar(255) NOT NULL, + `editedDate` date NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_trainplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `place` varchar(255) NOT NULL, + `trainee` text NOT NULL, + `lecturer` varchar(20) NOT NULL, + `type` enum('inside','outside') NOT NULL DEFAULT 'inside', + `status` varchar(20) NOT NULL, + `summary` mediumtext NOT NULL, + `createdBy` char(30) DEFAULT 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_trainrecords` ( + `user` char(30) NOT NULL, + `objectId` mediumint(8) unsigned NOT NULL, + `objectType` varchar(10) NOT NULL, + `status` varchar(10) NOT NULL, + PRIMARY KEY (`user`,`objectId`,`objectType`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_trip` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` enum('trip','egress') NOT NULL DEFAULT 'trip', + `customers` varchar(20) NOT NULL, + `name` char(30) NOT NULL, + `desc` text NOT NULL, + `year` char(4) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `start` time NOT NULL, + `finish` time NOT NULL, + `from` char(50) NOT NULL, + `to` char(50) NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `year` (`year`), + KEY `createdBy` (`createdBy`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `company` mediumint(8) unsigned NOT NULL, + `type` char(30) NOT NULL DEFAULT 'inside', + `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 '', + `pinyin` varchar(255) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` text NOT NULL, + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `weixin` varchar(90) NOT NULL DEFAULT '', + `dingding` varchar(90) NOT NULL DEFAULT '', + `slack` varchar(90) NOT NULL DEFAULT '', + `whatsapp` varchar(90) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `nature` text NOT NULL, + `analysis` text NOT NULL, + `strategy` text NOT NULL, + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `visions` varchar(20) NOT NULL DEFAULT 'rnd,lite', + `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', + `feedback` enum('0','1') NOT NULL DEFAULT '0', + `ranzhi` char(30) NOT NULL DEFAULT '', + `ldap` char(30) NOT NULL, + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `resetToken` varchar(50) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `clientStatus` enum('online','away','busy','offline','meeting') 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`), + KEY `deleted` (`deleted`) +) ENGINE=InnoDB AUTO_INCREMENT=2 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` text NOT NULL, + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=InnoDB 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', + `common` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=InnoDB 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `programs` mediumtext NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + `sprints` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_vm` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `hostID` int(10) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL DEFAULT '', + `osCategory` varchar(50) NOT NULL DEFAULT '', + `osType` varchar(50) NOT NULL DEFAULT '', + `osArch` varchar(50) NOT NULL DEFAULT '', + `osLang` varchar(50) NOT NULL DEFAULT '', + `osCpu` tinyint(2) NOT NULL DEFAULT 0, + `osMemory` smallint(6) NOT NULL DEFAULT 0, + `osDisk` smallint(6) NOT NULL DEFAULT 0, + `status` varchar(50) NOT NULL DEFAULT '', + `destroyAt` datetime DEFAULT NULL, + `macAddress` varchar(255) NOT NULL DEFAULT '', + `workspace` varchar(255) NOT NULL DEFAULT '', + `templateID` int(10) unsigned NOT NULL DEFAULT '0', + `baseImageID` int(10) unsigned NOT NULL DEFAULT '0', + `baseImagePath` varchar(255) NOT NULL DEFAULT '', + `desc` varchar(255) NOT NULL DEFAULT '', + `heatbeat` datetime DEFAULT NULL, + `vncPort` int(10) NOT NULL DEFAULT 0, + `instance` varchar(255) NOT NULL DEFAULT '', + `eip` varchar(255) NOT NULL DEFAULT '', + `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', + `public` varchar(50) NOT NULL DEFAULT '', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_vmtemplate` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `hostID` int(10) unsigned NOT NULL DEFAULT '0', + `templateName` varchar(255) NOT NULL DEFAULT '', + `osType` varchar(50) NOT NULL DEFAULT '', + `osCategory` varchar(50) NOT NULL DEFAULT '', + `osVersion` varchar(50) NOT NULL DEFAULT '', + `osLang` varchar(50) NOT NULL, + `cpuCoreNum` smallint(4) NOT NULL DEFAULT 0, + `memorySize` int NOT NULL DEFAULT 0, + `diskSize` int NOT NULL DEFAULT 0, + `osArch` varchar(50) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(15) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `secret` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `executions` 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=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_weeklyreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `weekStart` date NOT NULL, + `pv` float(9,2) NOT NULL, + `ev` float(9,2) NOT NULL, + `ac` float(9,2) NOT NULL, + `sv` float(9,2) NOT NULL, + `cv` float(9,2) NOT NULL, + `staff` smallint(5) unsigned NOT NULL, + `progress` varchar(255) NOT NULL, + `workload` varchar(255) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `week` (`project`,`weekStart`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workestimation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `project` mediumint(8) unsigned NOT NULL, + `scale` decimal(10,2) unsigned NOT NULL, + `productivity` decimal(10,2) unsigned NOT NULL, + `duration` decimal(10,2) unsigned NOT NULL, + `unitLaborCost` decimal(10,2) unsigned NOT NULL, + `totalLaborCost` decimal(10,2) unsigned NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `dayHour` decimal(10,2) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflow` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` varchar(30) NOT NULL, + `child` varchar(30) NOT NULL, + `type` varchar(10) NOT NULL DEFAULT 'flow', + `navigator` varchar(10) NOT NULL, + `app` varchar(20) NOT NULL, + `position` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `table` varchar(50) NOT NULL, + `name` varchar(30) NOT NULL, + `titleField` varchar(30) NOT NULL, + `contentField` text NOT NULL, + `flowchart` text NOT NULL, + `js` text NOT NULL, + `css` text NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `buildin` tinyint(1) unsigned NOT NULL, + `administrator` text NOT NULL, + `desc` text NOT NULL, + `version` varchar(10) NOT NULL DEFAULT '1.0', + `status` varchar(10) NOT NULL DEFAULT 'wait', + `approval` enum('enabled', 'disabled') NOT NULL DEFAULT 'disabled', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`app`,`module`,`vision`), + KEY `type` (`type`), + KEY `app` (`app`), + KEY `module` (`module`), + KEY `order` (`order`) +) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowaction` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `action` varchar(50) NOT NULL, + `method` varchar(50) NOT NULL, + `name` varchar(50) NOT NULL, + `type` enum('single','batch') NOT NULL DEFAULT 'single', + `batchMode` enum('same','different') NOT NULL DEFAULT 'different', + `extensionType` varchar(10) NOT NULL DEFAULT 'override' COMMENT 'none | extend | override', + `open` varchar(20) NOT NULL, + `position` enum('menu','browseandview','browse','view') NOT NULL DEFAULT 'browseandview', + `layout` char(20) NOT NULL, + `show` enum('dropdownlist','direct') NOT NULL DEFAULT 'dropdownlist', + `order` smallint(5) unsigned NOT NULL, + `buildin` tinyint(1) unsigned NOT NULL, + `role` varchar(10) NOT NULL DEFAULT 'custom', + `virtual` tinyint(1) unsigned NOT NULL, + `conditions` text NOT NULL, + `verifications` text NOT NULL, + `hooks` text NOT NULL, + `linkages` text NOT NULL, + `js` text NOT NULL, + `css` text NOT NULL, + `toList` char(255) NOT NULL, + `blocks` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'enable', + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`module`,`action`,`vision`), + KEY `module` (`module`), + KEY `action` (`action`), + KEY `order` (`order`) +) ENGINE=InnoDB AUTO_INCREMENT=190 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowdatasource` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` enum('system','sql','func','option','lang','category') NOT NULL DEFAULT 'option', + `name` varchar(30) NOT NULL, + `code` varchar(30) NOT NULL, + `datasource` text NOT NULL, + `view` varchar(20) NOT NULL, + `keyField` varchar(50) NOT NULL, + `valueField` varchar(50) NOT NULL, + `buildin` tinyint(1) unsigned NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `type` (`type`) +) ENGINE=InnoDB AUTO_INCREMENT=71 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowfield` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `field` varchar(50) NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'varchar', + `length` varchar(10) NOT NULL, + `name` varchar(50) NOT NULL, + `control` varchar(20) NOT NULL, + `expression` text NOT NULL, + `options` text NOT NULL, + `default` varchar(100) NOT NULL, + `rules` varchar(255) NOT NULL, + `placeholder` varchar(100) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `searchOrder` smallint(5) unsigned NOT NULL DEFAULT '0', + `exportOrder` smallint(5) unsigned NOT NULL DEFAULT '0', + `canExport` enum('0','1') NOT NULL DEFAULT '0', + `canSearch` enum('0','1') NOT NULL DEFAULT '0', + `isValue` enum('0','1') NOT NULL DEFAULT '0', + `readonly` enum('0','1') NOT NULL DEFAULT '0', + `buildin` tinyint(1) unsigned NOT NULL, + `role` varchar(10) NOT NULL DEFAULT 'custom', + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`module`,`field`), + KEY `module` (`module`), + KEY `field` (`field`), + KEY `order` (`order`) +) ENGINE=InnoDB AUTO_INCREMENT=360 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowlabel` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `action` varchar(30) NOT NULL DEFAULT 'browse', + `code` varchar(30) NOT NULL, + `label` varchar(255) NOT NULL, + `params` text NOT NULL, + `orderBy` text NOT NULL, + `order` tinyint(3) NOT NULL, + `buildin` tinyint(1) unsigned NOT NULL, + `role` varchar(10) NOT NULL DEFAULT 'custom', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `module` (`module`) +) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowlayout` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `action` varchar(50) NOT NULL, + `field` varchar(50) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `width` smallint(5) NOT NULL, + `position` text NOT NULL, + `readonly` enum('0','1') NOT NULL DEFAULT '0', + `mobileShow` enum('0','1') NOT NULL DEFAULT '1', + `summary` varchar(20) NOT NULL, + `defaultValue` text NOT NULL, + `layoutRules` varchar(255) NOT NULL, + `vision` varchar(10) NOT NULL DEFAULT 'rnd', + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`module`,`action`,`field`,`vision`), + KEY `module` (`module`), + KEY `action` (`action`), + KEY `order` (`order`) +) ENGINE=InnoDB AUTO_INCREMENT=138 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowlinkdata` ( + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `linkedType` varchar(30) NOT NULL, + `linkedID` mediumint(8) unsigned NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + UNIQUE KEY `unique` (`objectType`,`objectID`,`linkedType`,`linkedID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowrelation` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `prev` varchar(30) NOT NULL, + `next` varchar(30) NOT NULL, + `field` varchar(50) NOT NULL, + `actions` varchar(20) NOT NULL, + `actionCodes` text NOT NULL, + `buildin` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowrelationlayout` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `prev` varchar(30) NOT NULL, + `next` varchar(30) NOT NULL, + `action` varchar(50) NOT NULL, + `field` varchar(50) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`prev`,`next`,`action`,`field`), + KEY `prev` (`prev`), + KEY `next` (`next`), + KEY `action` (`action`), + KEY `order` (`order`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL COMMENT 'module name', + `name` varchar(100) NOT NULL COMMENT 'report name', + `type` enum('pie','line','bar') NOT NULL DEFAULT 'pie' COMMENT 'report type', + `countType` enum('sum','count') NOT NULL DEFAULT 'sum' COMMENT 'report count method', + `displayType` enum('value','percent') NOT NULL DEFAULT 'value' COMMENT 'report display method', + `dimension` varchar(130) NOT NULL COMMENT 'dimension field code of zt_workflowfield', + `fields` text NOT NULL COMMENT 'count fileds code of zt_workflowfield,use comma split', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowrule` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` enum('system','regex','func') NOT NULL DEFAULT 'regex', + `name` varchar(30) NOT NULL, + `rule` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` char(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `type` (`type`) +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowsql` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `field` varchar(50) NOT NULL, + `action` varchar(50) NOT NULL, + `sql` text NOT NULL, + `vars` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `module` (`module`), + KEY `field` (`field`), + KEY `action` (`action`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_workflowversion` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `module` varchar(30) NOT NULL, + `version` varchar(10) NOT NULL, + `fields` text NOT NULL, + `actions` text NOT NULL, + `layouts` text NOT NULL, + `sqls` text NOT NULL, + `labels` text NOT NULL, + `table` text NOT NULL, + `datas` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `moduleversion` (`module`,`version`), + KEY `module` (`module`), + KEY `version` (`version`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `zt_zoutput` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `activity` mediumint(8) NOT NULL, + `name` varchar(255) NOT NULL, + `content` mediumtext NOT NULL, + `optional` char(20) NOT NULL, + `tailorNorm` varchar(255) NOT NULL, + `status` varchar(30) NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `order` mediumint(8) DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=130 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_dayactions` AS SELECT + 1 AS `actions`, + 1 AS `day`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_daybugopen` AS SELECT + 1 AS `bugopen`, + 1 AS `day`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_daybugresolve` AS SELECT + 1 AS `bugresolve`, + 1 AS `day`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_dayeffort` AS SELECT + 1 AS `consumed`, + 1 AS `date`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_daystoryclose` AS SELECT + 1 AS `storyclose`, + 1 AS `day`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_daystoryopen` AS SELECT + 1 AS `storyopen`, + 1 AS `day`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_daytaskfinish` AS SELECT + 1 AS `taskfinish`, + 1 AS `day`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_daytaskopen` AS SELECT + 1 AS `taskopen`, + 1 AS `day`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_dayuserlogin` AS SELECT + 1 AS `userlogin`, + 1 AS `day`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_executionsummary` AS SELECT + 1 AS `execution`, + 1 AS `estimate`, + 1 AS `consumed`, + 1 AS `left`, + 1 AS `number`, + 1 AS `undone`, + 1 AS `totalReal`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_productbugs` AS SELECT + 1 AS `product`, + 1 AS `bugs`, + 1 AS `resolutions`, + 1 AS `seriousBugs`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_productstories` AS SELECT + 1 AS `product`, + 1 AS `stories`, + 1 AS `undone`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_projectbugs` AS SELECT + 1 AS `execution`, + 1 AS `bugs`, + 1 AS `resolutions`, + 1 AS `seriousBugs`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_projectstories` AS SELECT + 1 AS `execution`, + 1 AS `stories`, + 1 AS `undone`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_projectsummary` AS SELECT + 1 AS `project`, + 1 AS `estimate`, + 1 AS `consumed`, + 1 AS `left`, + 1 AS `number`, + 1 AS `undone`, + 1 AS `totalReal`*/; +SET character_set_client = @saved_cs_client; +SET @saved_cs_client = @@character_set_client; +SET character_set_client = utf8; +/*!50001 CREATE VIEW `ztv_projectteams` AS SELECT + 1 AS `execution`, + 1 AS `teams`*/; +SET character_set_client = @saved_cs_client; +/*!50001 DROP VIEW IF EXISTS `view_datasource_10`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `view_datasource_10` AS select `zt_build`.`id` AS `id`,`zt_build`.`name` AS `name` from `zt_build` where (`zt_build`.`deleted` = '0') */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `view_datasource_11`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `view_datasource_11` AS select `zt_module`.`id` AS `id`,`zt_module`.`name` AS `name` from `zt_module` where (`zt_module`.`deleted` = '0') */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `view_datasource_12`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `view_datasource_12` AS select `zt_productplan`.`id` AS `id`,`zt_productplan`.`title` AS `title` from `zt_productplan` where (`zt_productplan`.`deleted` = '0') */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `view_datasource_4`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `view_datasource_4` AS select `zt_story`.`id` AS `id`,`zt_story`.`title` AS `title` from `zt_story` where (`zt_story`.`deleted` = '0') */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `view_datasource_41`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `view_datasource_41` AS select `zt_case`.`id` AS `id`,`zt_case`.`title` AS `title` from `zt_case` where (`zt_case`.`deleted` = '0') */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `view_datasource_46`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `view_datasource_46` AS select `zt_task`.`id` AS `id`,`zt_task`.`name` AS `name` from `zt_task` where ((`zt_task`.`deleted` = '0') and (`zt_task`.`vision` = 'lite')) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `view_datasource_5`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `view_datasource_5` AS select `zt_task`.`id` AS `id`,`zt_task`.`name` AS `name` from `zt_task` where ((`zt_task`.`deleted` = '0') and (`zt_task`.`vision` = 'rnd')) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `view_datasource_6`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `view_datasource_6` AS select `zt_bug`.`id` AS `id`,`zt_bug`.`title` AS `title` from `zt_bug` where (`zt_bug`.`deleted` = '0') */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_dayactions`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_dayactions` AS select count(0) AS `actions`,left(`zt_action`.`date`,10) AS `day` from `zt_action` group by left(`zt_action`.`date`,10) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_daybugopen`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_daybugopen` AS select count(0) AS `bugopen`,left(`zt_action`.`date`,10) AS `day` from `zt_action` where ((`zt_action`.`objectType` = 'bug') and (`zt_action`.`action` = 'opened')) group by left(`zt_action`.`date`,10) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_daybugresolve`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_daybugresolve` AS select count(0) AS `bugresolve`,left(`zt_action`.`date`,10) AS `day` from `zt_action` where ((`zt_action`.`objectType` = 'bug') and (`zt_action`.`action` = 'resolved')) group by left(`zt_action`.`date`,10) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_dayeffort`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_dayeffort` AS select round(sum(`zt_effort`.`consumed`),1) AS `consumed`,`zt_effort`.`date` AS `date` from `zt_effort` group by `zt_effort`.`date` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_daystoryclose`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_daystoryclose` AS select count(0) AS `storyclose`,left(`zt_action`.`date`,10) AS `day` from `zt_action` where ((`zt_action`.`objectType` = 'story') and (`zt_action`.`action` = 'closed')) group by left(`zt_action`.`date`,10) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_daystoryopen`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_daystoryopen` AS select count(0) AS `storyopen`,left(`zt_action`.`date`,10) AS `day` from `zt_action` where ((`zt_action`.`objectType` = 'story') and (`zt_action`.`action` = 'opened')) group by left(`zt_action`.`date`,10) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_daytaskfinish`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_daytaskfinish` AS select count(0) AS `taskfinish`,left(`zt_action`.`date`,10) AS `day` from `zt_action` where ((`zt_action`.`objectType` = 'task') and (`zt_action`.`action` = 'finished')) group by left(`zt_action`.`date`,10) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_daytaskopen`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_daytaskopen` AS select count(0) AS `taskopen`,left(`zt_action`.`date`,10) AS `day` from `zt_action` where ((`zt_action`.`objectType` = 'task') and (`zt_action`.`action` = 'opened')) group by left(`zt_action`.`date`,10) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_dayuserlogin`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_dayuserlogin` AS select count(0) AS `userlogin`,left(`zt_action`.`date`,10) AS `day` from `zt_action` where ((`zt_action`.`objectType` = 'user') and (`zt_action`.`action` = 'login')) group by left(`zt_action`.`date`,10) */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_executionsummary`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_executionsummary` AS select `zt_task`.`execution` AS `execution`,sum(if((`zt_task`.`parent` >= '0'),`zt_task`.`estimate`,0)) AS `estimate`,sum(if((`zt_task`.`parent` >= '0'),`zt_task`.`consumed`,0)) AS `consumed`,sum(if(((`zt_task`.`status` <> 'cancel') and (`zt_task`.`status` <> 'closed') and (`zt_task`.`parent` >= '0')),`zt_task`.`left`,0)) AS `left`,count(0) AS `number`,sum(if(((`zt_task`.`status` <> 'done') and (`zt_task`.`status` <> 'closed')),1,0)) AS `undone`,sum((if((`zt_task`.`parent` >= '0'),`zt_task`.`consumed`,0) + if(((`zt_task`.`status` <> 'cancel') and (`zt_task`.`status` <> 'closed') and (`zt_task`.`parent` >= '0')),`zt_task`.`left`,0))) AS `totalReal` from `zt_task` where (`zt_task`.`deleted` = '0') group by `zt_task`.`execution` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_productbugs`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_productbugs` AS select `zt_bug`.`product` AS `product`,count(0) AS `bugs`,sum(if((`zt_bug`.`resolution` = ''),0,1)) AS `resolutions`,sum(if((`zt_bug`.`severity` <= 2),1,0)) AS `seriousBugs` from `zt_bug` where (`zt_bug`.`deleted` = '0') group by `zt_bug`.`product` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_productstories`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_productstories` AS select `zt_story`.`product` AS `product`,count('*') AS `stories`,sum(if((`zt_story`.`status` = 'closed'),0,1)) AS `undone` from `zt_story` where (`zt_story`.`deleted` = '0') group by `zt_story`.`product` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_projectbugs`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_projectbugs` AS select `zt_bug`.`execution` AS `execution`,count(0) AS `bugs`,sum(if((`zt_bug`.`resolution` = ''),0,1)) AS `resolutions`,sum(if((`zt_bug`.`severity` <= 2),1,0)) AS `seriousBugs` from `zt_bug` where (`zt_bug`.`deleted` = '0') group by `zt_bug`.`execution` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_projectstories`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_projectstories` AS select `t1`.`project` AS `execution`,count('*') AS `stories`,sum(if((`t2`.`status` = 'closed'),0,1)) AS `undone` from ((`zt_projectstory` `t1` left join `zt_story` `t2` on((`t1`.`story` = `t2`.`id`))) left join `zt_project` `t3` on((`t1`.`project` = `t3`.`id`))) where ((`t2`.`deleted` = '0') and (`t3`.`type` in ('sprint','stage'))) group by `t1`.`project` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_projectsummary`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_projectsummary` AS select `zt_task`.`project` AS `project`,sum(if((`zt_task`.`parent` >= '0'),`zt_task`.`estimate`,0)) AS `estimate`,sum(if((`zt_task`.`parent` >= '0'),`zt_task`.`consumed`,0)) AS `consumed`,sum(if(((`zt_task`.`status` <> 'cancel') and (`zt_task`.`status` <> 'closed') and (`zt_task`.`parent` >= '0')),`zt_task`.`left`,0)) AS `left`,count(0) AS `number`,sum(if(((`zt_task`.`status` <> 'done') and (`zt_task`.`status` <> 'closed')),1,0)) AS `undone`,sum((if((`zt_task`.`parent` >= '0'),`zt_task`.`consumed`,0) + if(((`zt_task`.`status` <> 'cancel') and (`zt_task`.`status` <> 'closed') and (`zt_task`.`parent` >= '0')),`zt_task`.`left`,0))) AS `totalReal` from `zt_task` where (`zt_task`.`deleted` = '0') group by `zt_task`.`project` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; +/*!50001 DROP VIEW IF EXISTS `ztv_projectteams`*/; +/*!50001 SET @saved_cs_client = @@character_set_client */; +/*!50001 SET @saved_cs_results = @@character_set_results */; +/*!50001 SET @saved_col_connection = @@collation_connection */; +/*!50001 SET character_set_client = utf8 */; +/*!50001 SET character_set_results = utf8 */; +/*!50001 SET collation_connection = utf8_general_ci */; +/*!50001 CREATE ALGORITHM=UNDEFINED */ +/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ +/*!50001 VIEW `ztv_projectteams` AS select `zt_team`.`root` AS `execution`,count('*') AS `teams` from `zt_team` where (`zt_team`.`type` = 'execution') group by `zt_team`.`root` */; +/*!50001 SET character_set_client = @saved_cs_client */; +/*!50001 SET character_set_results = @saved_cs_results */; +/*!50001 SET collation_connection = @saved_col_connection */; diff --git a/db/update17.6.2.sql b/db/update17.6.2.sql index 601887adc3..210f7b25a6 100644 --- a/db/update17.6.2.sql +++ b/db/update17.6.2.sql @@ -1,6 +1,75 @@ +CREATE TABLE IF NOT EXISTS `zt_ticket` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `module` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `desc` text NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `feedback` mediumint(8) NOT NULL, + `assignedTo` varchar(255) NOT NULL, + `assignedDate` datetime NOT NULL, + `realStarted` datetime NOT NULL, + `startedBy` varchar(255) NOT NULL, + `startedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `pri` tinyint unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `status` varchar(30) NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `activatedCount` int(10) NOT NULL, + `activatedBy` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `resolvedDate` datetime NOT NULL, + `resolution` varchar(1000) NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `keywords` varchar(255) NOT NULL, + `repeatTicket` mediumint(8) NOT NULL DEFAULT '0', + `mailto` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + key `product` (`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zt_ticketsource` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `ticketId` mediumint(8) unsigned NOT NULL, + `customer` varchar(100) NOT NULL, + `contact` varchar(100) NOT NULL, + `notifyEmail` varchar(100) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`), + key `ticketId` (`ticketId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE `zt_ticketrelation` ( + `id` mediumint unsigned NOT NULL AUTO_INCREMENT, + `ticketId` mediumint unsigned NOT NULL, + `objectId` mediumint NOT NULL, + `objectType` varchar(100) NOT NULL, + PRIMARY KEY (`id`), + KEY `ticketId` (`ticketId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +ALTER TABLE `zt_product` ADD `ticket` varchar(30) NOT NULL AFTER `feedback`; ALTER TABLE `zt_kanban` ADD `colWidth` smallint(4) NOT NULL DEFAULT '264' AFTER `fluidBoard`; ALTER TABLE `zt_kanban` ADD `minColWidth` smallint(4) NOT NULL DEFAULT '180' AFTER `colWidth`; ALTER TABLE `zt_kanban` ADD `maxColWidth` smallint(4) NOT NULL DEFAULT '384' AFTER `minColWidth`; ALTER TABLE `zt_project` ADD `colWidth` smallint(4) NOT NULL DEFAULT '264' AFTER `fluidBoard`; ALTER TABLE `zt_project` ADD `minColWidth` smallint(4) NOT NULL DEFAULT '180' AFTER `colWidth`; ALTER TABLE `zt_project` ADD `maxColWidth` smallint(4) NOT NULL DEFAULT '384' AFTER `minColWidth`; + +REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', 'global', 'syncProduct', '{"feedback":{},"ticket":{}}'); + +ALTER TABLE `zt_feedback` ADD `pri` tinyint unsigned NOT NULL DEFAULT 2 AFTER `desc`; +ALTER TABLE `zt_feedback` ADD `source` varchar(255) NOT NULL AFTER `notifyEmail`; diff --git a/db/zentao.sql b/db/zentao.sql index 8d0d35c8dd..d5ec8aa7bf 100755 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -835,9 +835,9 @@ CREATE TABLE IF NOT EXISTS `zt_kanban` ( `displayCards` smallint(6) NOT NULL default '0', `showWIP` enum('0','1') NOT NULL DEFAULT '1', `fluidBoard` enum('0','1') NOT NULL DEFAULT '0', - `colWidth` tinyint(3) NOT NULL DEFAULT '0', - `minColWidth` tinyint(3) NOT NULL DEFAULT '0', - `maxColWidth` tinyint(3) NOT NULL DEFAULT '0', + `colWidth` smallint(4) NOT NULL DEFAULT '264', + `minColWidth` smallint(4) NOT NULL DEFAULT '180', + `maxColWidth` smallint(4) NOT NULL DEFAULT '384', `object` varchar(255) NOT NULL, `alignment` varchar(10) NOT NULL default 'center', `createdBy` char(30) NOT NULL, @@ -1196,9 +1196,9 @@ CREATE TABLE IF NOT EXISTS `zt_project` ( `vision` varchar(10) NOT NULL DEFAULT 'rnd', `displayCards` smallint(6) NOT NULL default '0', `fluidBoard` enum('0','1') NOT NULL DEFAULT '0', - `colWidth` tinyint(3) NOT NULL DEFAULT '0', - `minColWidth` tinyint(3) NOT NULL DEFAULT '0', - `maxColWidth` tinyint(3) NOT NULL DEFAULT '0', + `colWidth` smallint(4) NOT NULL DEFAULT '264', + `minColWidth` smallint(4) NOT NULL DEFAULT '180', + `maxColWidth` smallint(4) NOT NULL DEFAULT '384', `deleted` enum('0','1') NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `parent` (`parent`), @@ -6309,6 +6309,7 @@ INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES (' INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'project', '', 'unitList', 'CNY,USD'); INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'project', '', 'defaultCurrency', 'CNY'); INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'story', '', 'reviewRules', 'allpass'); +INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', 'global', 'syncProduct', '{"feedback":{},"ticket":{}}'); -- DROP TABLE IF EXISTS `zt_im_chat`; CREATE TABLE IF NOT EXISTS `zt_im_chat` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, @@ -7092,11 +7093,13 @@ CREATE TABLE IF NOT EXISTS `zt_feedback` ( `type` char(30) NOT NULL, `solution` char(30) NOT NULL, `desc` text NOT NULL, + `pri` tinyint unsigned NOT NULL DEFAULT 2, `status` varchar(30) NOT NULL, `subStatus` varchar(30) NOT NULL default '', `public` enum('0','1') NOT NULL DEFAULT '0', `notify` enum('0','1') NOT NULL DEFAULT '0', `notifyEmail` varchar(100) NOT NULL, + `source` varchar(255) NOT NULL, `likes` text NOT NULL, `result` mediumint(8) unsigned NOT NULL, `faq` mediumint(8) unsigned NOT NULL, @@ -7120,6 +7123,70 @@ CREATE TABLE IF NOT EXISTS `zt_feedback` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +-- DROP TABLE IF EXISTS `zt_ticket`; +CREATE TABLE IF NOT EXISTS `zt_ticket` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `module` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `desc` text NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `feedback` mediumint(8) NOT NULL, + `assignedTo` varchar(255) NOT NULL, + `assignedDate` datetime NOT NULL, + `realStarted` datetime NOT NULL, + `startedBy` varchar(255) NOT NULL, + `startedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `pri` tinyint unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `status` varchar(30) NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `activatedCount` int(10) NOT NULL, + `activatedBy` varchar(30) NOT NULL, + `activatedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `resolvedBy` varchar(30) NOT NULL, + `resolvedDate` datetime NOT NULL, + `resolution` varchar(1000) NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `keywords` varchar(255) NOT NULL, + `repeatTicket` mediumint(8) NOT NULL DEFAULT '0', + `mailto` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + key `product` (`product`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `zt_ticketsource` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `ticketId` mediumint(8) unsigned NOT NULL, + `customer` varchar(100) NOT NULL, + `contact` varchar(100) NOT NULL, + `notifyEmail` varchar(100) NOT NULL, + `createdDate` datetime NOT NULL, + PRIMARY KEY (`id`), + key `ticketId` (`ticketId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE `zt_ticketrelation` ( + `id` mediumint unsigned NOT NULL AUTO_INCREMENT, + `ticketId` mediumint unsigned NOT NULL, + `objectId` mediumint NOT NULL, + `objectType` varchar(100) NOT NULL, + PRIMARY KEY (`id`), + KEY `ticketId` (`ticketId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + ALTER TABLE `zt_bug` ADD `feedback` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `caseVersion`; ALTER TABLE `zt_story` ADD `feedback` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `fromBug`; ALTER TABLE `zt_user` ADD `feedback` enum('0', '1') NOT NULL DEFAULT '0' AFTER `locked`; @@ -7638,6 +7705,7 @@ ADD `grade` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `path`, ADD `order` smallint(5) unsigned NOT NULL DEFAULT '0' AFTER `grade`; ALTER TABLE `zt_product` ADD `feedback` varchar(30) COLLATE 'utf8_general_ci' NOT NULL AFTER `RD`; +ALTER TABLE `zt_product` ADD `ticket` varchar(30) COLLATE 'utf8_general_ci' NOT NULL AFTER `feedback`; ALTER TABLE `zt_leave` ADD `level` tinyint(3) NOT NULL; ALTER TABLE `zt_leave` ADD `assignedTo` varchar(30) NOT NULL; diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 8b2347e370..bf48359822 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -1,3 +1,193 @@ +2022-10-19 17.7 +完成的需求 +开源版 +32322 Bug批量导入页面中先校验必填字段再校验重复数据 +37245 研发需求列表增加一键展开、收起功能 +37259 列表左侧模块导航样式优化 +37261 修改研发需求列表中字段的排列顺序 +37266 研发需求列表中的操作按钮增加分组显示 +37277 研发需求列表中层级关系的样式优化 +37283 删除列表中的斑马纹背景 +37513 研发需求列表替换ZUI3组件 +37810 有父子层级的列表增加一键展开、收起功能 +37811 列表中指派给字段的交互优化 +37812 列表中负责人字段的样式优化 +37813 列表中优先级颜色调整 +37814 列表中父子层级的样式优化 +37815 列表中级别颜色调整 +37816 列表检索标签选中样式优化 +37833 叶兰绿主题风格更新 +37835 列表删除斑马纹背景 +37841 研发需求列表中,操作列增加分组显示 +37842 禅道蓝主题风格更新 +37849 任务列表操作列增加分组显示 +37854 bug列表确认字段的内容颜色调整 +37857 bug列表的字段顺序调整 +37858 用例检索标签增加分组显示 +37861 用例列表操作列交换开始和结果按钮的位置 +37862 项目集列表删除“显示已关闭”的勾选按钮 +37863 项目集列表层级关系的展示 +37864 项目集列表中延期标签位置调整 +37865 项目集列表中预算字段增加超出提示 +37866 项目集列表中项目集的内容样式优化 +37868 项目集列表操作列的更多按钮调整 +37869 删除项目集列表中项目的图标 +37975 项目列表字段顺序调整 +37976 项目列表操作列更多按钮样式优化 +37977 项目列表批量编辑项目功能增加打开按钮 +37978 产品列表的批量编辑功能增加打开按钮 +37979 产品列表层级关系的样式优化 +37980 产品列表新增负责人字段 +37982 产品列表删除用户需求字段 +37983 产品列表删除bug关闭字段 +37984 产品列表下方增加统计信息 +37985 产品列表页面中,修改产品线的按钮样式优化 +37986 产品列表的字段顺序调整 +37989 计划列表操作列增加分组显示 +37990 计划列表下方增加数据的统计信息 +37992 创建多人任务时,工时填写不大于0时增加提示语 +37993 工时记录页,日期、工作内容、消耗、剩余增加必填项校验 +37994 工时记录页,日期的icon点击后也展开日期框 +37997 多人串行任务,用户打开工时填写页,默认打开我的日志页 +37998 多人串行任务中工时记录页,日志默认按照工序排列 +37999 工时记录页,日期列和工序列增加排序按钮 +38001 工时记录页样式优化 +38002 多人串行任务中,团队日志页去掉操作区域 +38006 多人串行任务开始任务的弹窗,总计消耗改名为我的总消耗 +38008 列表中名称字段样式优化 +38010 产品列表名称字段内容样式优化 +38011 团队的填写工时页面ui优化 +38167 计划列表执行字段展示信息优化 +38186 项目列表删除类型标签,鼠标悬停显示 +38227 产品列表删除产品名称前的图标 +38240 项目集列表中,鼠标悬停到项目名称时支持显示项目类型 +38241 项目和执行列表中延期标签位置调整 +38280 产品计划列表中对父子计划展开和收起的状态做记录 +38282 看板全屏时,颜色调整 +38283 执行列表中字段顺序调整 +38285 执行列表下方增加统计信息 +38286 执行列表默认显示字段删除执行代号 +38288 执行列表中预计、消耗、剩余字段表头和内容居右对齐 +38290 地盘项目列表字段顺序调整 +38291 修改地盘执行中“未结束”的检索标签为“未完成” +38292 地盘执行列表字段顺序调整 +38293 地盘执行列表中工时/天居右显示 +38297 地盘待处理的用例列表中,调整优先级字段的位置 +38299 测试单列表中字段调整 +38300 执行列表中批量编辑增加开关 +38302 地盘待处理的测试单列表字段顺序调整 +38303 测试单列表下方增加统计信息 +38305 地盘待办列表字段顺序调整 +38306 地盘待办列表增加统计信息 +38307 发布列表中字段顺序调整 +38308 发布列表下方增加统计信息 +38311 用例列表字段顺序调整 +38313 地盘测试单列表字段顺序调整 +38315 地盘贡献中的文档列表增加最后更新者字段 +38316 瀑布项目的设计列表字段调整 +38348 项目集的可访问人员列表中字段顺序调整 +38354 执行任务列表字段顺序调整 +38355 列表中父子层级关系的样式优化 +38375 看板列宽设置的功能优化 +38385 测试套件列表下方增加统计信息 +38393 地盘中的任务列表字段顺序调整 +38395 地盘贡献的任务列表字段顺序调整 +38396 地盘待处理的研发需求列表字段调整 +38397 地盘待处理的用户需求列表字段调整 +38398 地盘待处理的bug列表的字段顺序调整 +38423 调整计划需求列表勾选后的统计内容 +38428 列表中数据延期的样式调整 +38430 项目列表下方增加统计信息 +38431 产品项目列表增加分页栏的显示 +38493 编辑任务时,团队维护的弹窗风格调整 +38533 地盘执行列表中我的任务居中显示 +38545 会议创建表单中,参会人员的下拉菜单修改为批量选择的组件 +38629 项目发布列表增加分页功能 +38736 版本列表中字段顺序调整 +38778 创建项目时,访问控制默认勾选公开 +企业版: +37608 反馈模块增加1.5级产品导航 +38764 无产品瀑布项目设计功能去掉产品相关信息 +38644 反馈的优先级自定义 +37605 反馈创建增加来源公司和优先级字段 +37601 反馈分类支持同步单个产品的所属产品模块 +37597 反馈模块同步产品模块后,可以创建反馈自己的模块 +37478 实现工单列表的产品模块功能 +37473 在反馈视图的二级菜单里打印工单菜单 +37474 实现工单的添加功能 +37475 实现工单的编辑功能 +37476 实现工单的详情查看功能 +37477 实现工单的列表页面 +37480 实现工单的所有检索标签 +37481 实现工单的待关闭检索标签 +37482 实现工单的指派给的标签 +37483 实现工单的由我解决的检索标签 +37484 实现工单的由我创建的检索标签 +37485 在工单的列表页面打印操作菜单 +37486 在工单的详情页面打印操作按钮 +37487 实现工单的指派功能 +37488 实现工单的完成功能 +37489 实现工单的激活功能 +37490 实现工单的关闭功能 +37491 实现工单的开始操作 +37494 提交工单中影响版本的取值逻辑 +37495 实现从工单提需求的功能 +37498 实现从反馈创建工单的功能 +37554 实现反馈工单默认指派给的逻辑 +37555 实现反馈类型与工单类型的自定义 +37558 工单的优先级自定义 +37568 实现工单的权限 +37609 地盘待处理与待处理区块的反馈后增加工单数据 +37610 日志中增加工单日志 +37650 通用看板支持导入工单 +37823 实现工单的批量编辑功能 +37824 列表增加批量完成 +37825 列表增加批量激活 +37826 列表增加批量指派 +37995 实现工单列表搜索功能 +37996 实现工单的等待与处理中检索标签 +38198 实现工单的删除功能 +38199 实现工单的日志功能 +38487 实现工单相关动态的查看权限的设置 +38789 所属产品删除对工单的影响 +旗舰版: +38673 地盘问题列表的字段顺序调整 +38676 指派给我检索标签下的问题列表中,指派给字段修改为由谁指派 +38680 地盘待处理的问题列表中删除指派给字段 +38687 地盘日志列表字段顺序调整 +38692 风险列表中字段顺序调整 +38694 风险列表中操作列按钮增加分组显示 +38695 问题列表中操作列按钮增加分组显示 +38728 QA不符合项列表的字段顺序调整 +38729 地盘QA列表中字段顺序调整 +38730 会议列表字段顺序调整 +38738 需求库中的需求列表字段顺序调整 +38739 用例库中的用例列表字段顺序调整 +38741 问题库中的问题列表字段顺序调整 +38743 风险库中的风险列表字段顺序调整 +38745 机会库中的机会列表字段顺序调整 +38746 资产库中的审批字段居左对齐 +禅道客户端: +36365 提供修改讨论组图标功能,支持设置图标的背景颜色及填充文字。 +36366 支持上传讨论组图标,提供图标裁剪、预览功能。 +36622 提升首次登录喧喧历史消息的加载速度。 +22468 实现文件重传入口,未完成传输的文件可以一键重传。 +36879 实现搜索人员时可以显示其当前状态的功能。 +37105 实现管理员删除用户时同步从群组中移除该用户的功能。 +36928 优化会话中图片预览缩放功能。 +36931 优化启动喧喧时音视频初检频次。 +36932 优化忽略会议时会话列表中图标的干扰。 +修复的Bug +26082 修复了初始化会议时,可能展示会议窗口或进行通知的问题。 +27458 修复了加入或转让讨论组时,未读消息数目不正确的问题。 +23066 修复安装xxb设置管理员保存后报错的问题。 +23067 修复安装xxb成功时页面报错的问题。 +27311 修复了客户端打开链接时会出错的问题。 +26801 修复消息输入框内的图片无法另存的问题。 +26805 修复了合并会话不生效的问题。 +26106 修复下载失败的图片没有重新下载的按钮的问题。 +26453 修复了回复通知类消息时,所引用的消息的发送者名称展示错误的问题。 + 2022-09-23 17.6.2 完成的需求 开源版: diff --git a/extension/lite/task/ext/view/create.html.php b/extension/lite/task/ext/view/create.html.php index 17d0f10be9..87eb3f1dcf 100644 --- a/extension/lite/task/ext/view/create.html.php +++ b/extension/lite/task/ext/view/create.html.php @@ -291,7 +291,7 @@ - confirm, '', "class='btn btn-primary'");?> + confirm, '', "class='btn btn-primary'");?> diff --git a/framework/api/entry.class.php b/framework/api/entry.class.php index 5c89698e49..3728feb92e 100644 --- a/framework/api/entry.class.php +++ b/framework/api/entry.class.php @@ -18,6 +18,8 @@ class entry extends baseEntry { parent::__construct(); + if($this->app->action == 'options') return $this->send(204); + if(!isset($this->app->user) or $this->app->user->account == 'guest') $this->sendError(401, 'Unauthorized'); $this->dao = $this->loadModel('common')->dao; diff --git a/framework/base/router.class.php b/framework/base/router.class.php index 9db231e3f4..84df7b4d85 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -1004,6 +1004,7 @@ class baseRouter array($ztSessionHandler, "destroy"), array($ztSessionHandler, "gc") ); + register_shutdown_function('session_write_close'); } } @@ -3167,7 +3168,6 @@ class ztSessionHandler { $this->tagID = $tagID; ini_set('session.save_handler', 'files'); - register_shutdown_function('session_write_close'); } /** diff --git a/lib/base/front/front.class.php b/lib/base/front/front.class.php index 13f4c0842c..c568f61878 100644 --- a/lib/base/front/front.class.php +++ b/lib/base/front/front.class.php @@ -504,8 +504,8 @@ class baseHTML /* If the link of the referer is not the link of the current page or the link of the index, the cookie and gobackLink will be updated. */ if(!preg_match("/(m=|\/)(index|search|$currentModule)(&f=|-)(index|buildquery|$currentMethod)(&|-|\.)?/", strtolower($refererLink))) { - $gobackList[$tab] = $referer; - $gobackLink = $referer; + $gobackList[$tab] = $referer . "#app=$tab"; + $gobackLink = $referer . "#app=$tab"; setcookie('goback', json_encode($gobackList), $config->cookieLife, $config->webRoot, '', $config->cookieSecure, false); } diff --git a/module/action/lang/de.php b/module/action/lang/de.php index 598d144d05..88376cb540 100644 --- a/module/action/lang/de.php +++ b/module/action/lang/de.php @@ -218,6 +218,7 @@ $lang->action->desc->importedproductplan = '$date, imported to $extraaction->desc->importedrelease = '$date, imported to $extra by $actor.' . "\n"; $lang->action->desc->importedexecution = '$date, imported to $extra by $actor.' . "\n"; $lang->action->desc->importedbuild = '$date, imported to $extra by $actor.' . "\n"; +$lang->action->desc->importedticket = '$date, imported to $extra by $actor.' . "\n"; $lang->action->desc->fromsonarqube = '$date, created by $actor from SonarQube Issue.' . "\n"; $lang->action->desc->tolib = '$date, imported by $actor .' . "\n"; $lang->action->desc->updatetolib = '$date, updated to ' . $lang->testcase->common . ' by $actor.' . "\n"; @@ -746,6 +747,7 @@ $lang->action->label->mr = 'Merge Request|mr|view|id=%s'; $lang->action->label->gitlab = 'GitLab Server|gitlab|view|id=%s'; $lang->action->label->stage = 'Stage|stage|browse|'; $lang->action->label->module = 'Module|tree|browse|productid=%s&type=story¤tModuleID=0&branch=all'; +$lang->action->label->ticket = 'Ticket|ticket|view|id=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/lang/en.php b/module/action/lang/en.php index f7e6236bcd..98feffb275 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -218,6 +218,7 @@ $lang->action->desc->importedproductplan = '$date, imported to $extraaction->desc->importedrelease = '$date, imported to $extra by $actor.' . "\n"; $lang->action->desc->importedexecution = '$date, imported to $extra by $actor.' . "\n"; $lang->action->desc->importedbuild = '$date, imported to $extra by $actor.' . "\n"; +$lang->action->desc->importedticket = '$date, imported to $extra by $actor.' . "\n"; $lang->action->desc->fromsonarqube = '$date, created by $actor from SonarQube Issue.' . "\n"; $lang->action->desc->tolib = '$date, imported by $actor .' . "\n"; $lang->action->desc->updatetolib = '$date, updated to ' . $lang->testcase->common . ' by $actor.' . "\n"; @@ -747,6 +748,7 @@ $lang->action->label->mr = 'Merge Request|mr|view|id=%s'; $lang->action->label->gitlab = 'GitLab Server|gitlab|view|id=%s'; $lang->action->label->stage = 'Stage|stage|browse|'; $lang->action->label->module = 'Module|tree|browse|productid=%s&type=story¤tModuleID=0&branch=all'; +$lang->action->label->ticket = 'Ticket|ticket|view|id=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/lang/fr.php b/module/action/lang/fr.php index 1aaa9ce931..ab4ff64289 100644 --- a/module/action/lang/fr.php +++ b/module/action/lang/fr.php @@ -217,6 +217,7 @@ $lang->action->desc->importedproductplan = '$date, imported to $extraaction->desc->importedrelease = '$date, imported to $extra by $actor.' . "\n"; $lang->action->desc->importedexecution = '$date, imported to $extra by $actor.' . "\n"; $lang->action->desc->importedbuild = '$date, imported to $extra by $actor.' . "\n"; +$lang->action->desc->importedticket = '$date, imported to $extra by $actor.' . "\n"; $lang->action->desc->fromsonarqube = '$date, created by $actor from SonarQube Issue.' . "\n"; $lang->action->desc->tolib = '$date, Importé par $actor .' . "\n"; $lang->action->desc->updatetolib = '$date, MàJ de ' . $lang->testcase->common . ' par $actor.' . "\n"; @@ -745,6 +746,7 @@ $lang->action->label->mr = 'Merge Request|mr|view|id=%s'; $lang->action->label->gitlab = 'GitLab Server|gitlab|view|id=%s'; $lang->action->label->stage = 'Stage|stage|browse|'; $lang->action->label->module = 'Module|tree|browse|productid=%s&type=story¤tModuleID=0&branch=all'; +$lang->action->label->ticket = 'Ticket|ticket|view|id=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index ec68e30798..928bc989dc 100755 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -218,6 +218,7 @@ $lang->action->desc->importedproductplan = '$date, 由 $actor $lang->action->desc->importedrelease = '$date, 由 $actor 从产品发布 $extra 导入。' . "\n"; $lang->action->desc->importedexecution = '$date, 由 $actor 从项目执行 $extra 导入。' . "\n"; $lang->action->desc->importedbuild = '$date, 由 $actor 从项目版本 $extra 导入。' . "\n"; +$lang->action->desc->importedticket = '$date, 由 $actor 从反馈工单 $extra 导入。' . "\n"; $lang->action->desc->fromsonarqube = '$date, 由 $actor 从SonarQube问题转化而来。' . "\n"; $lang->action->desc->tolib = '$date, 由 $actor 导入。' . "\n"; $lang->action->desc->updatetolib = '$date, 由 $actor 从' . $lang->testcase->common . '更新。' . "\n"; @@ -746,6 +747,7 @@ $lang->action->label->mr = '合并请求|mr|view|id=%s'; $lang->action->label->gitlab = 'GitLab服务器|gitlab|view|id=%s'; $lang->action->label->stage = '瀑布模型的阶段|stage|browse|'; $lang->action->label->module = '模块|tree|browse|productid=%s&type=story¤tModuleID=0&branch=all'; +$lang->action->label->ticket = '工单|ticket|view|id=%s'; /* Object type. */ $lang->action->search = new stdclass(); diff --git a/module/api/control.php b/module/api/control.php index df74573805..e3cd66cf9c 100755 --- a/module/api/control.php +++ b/module/api/control.php @@ -787,7 +787,9 @@ EOT; */ public function debug($filePath, $action) { - $filePath = helper::safe64Decode($filePath); + $filePath = helper::safe64Decode($filePath); + $fileDirPath = realpath(dirname($filePath)); + if(strpos($fileDirPath, $this->app->getModuleRoot()) !== 0 and strpos($fileDirPath, $this->app->getExtensionRoot()) !== 0) return; if($action == 'extendModel') { $method = $this->api->getMethod($filePath, 'Model'); diff --git a/module/block/control.php b/module/block/control.php index 668d64ac3a..9b1f004a21 100755 --- a/module/block/control.php +++ b/module/block/control.php @@ -488,7 +488,8 @@ class block extends control return true; } - $blocks = json_decode($blocks, true); + $blocks = json_decode($blocks, true); + if(empty($blocks)) $blocks = array(); $blockPairs = array('' => '') + $blocks; echo '
'; @@ -1734,10 +1735,11 @@ class block extends control if(common::hasPriv('bug', 'view') and $this->config->vision != 'lite') $hasViewPriv['bug'] = true; if($this->config->URAndSR and common::hasPriv('story', 'view') and $this->config->vision != 'lite') $hasViewPriv['requirement'] = true; if(common::hasPriv('story', 'view') and $this->config->vision != 'lite') $hasViewPriv['story'] = true; - if(common::hasPriv('risk', 'view') and $this->config->edition == 'max' and $this->config->vision != 'lite') $hasViewPriv['risk'] = true; - if(common::hasPriv('issue', 'view') and $this->config->edition == 'max' and $this->config->vision != 'lite') $hasViewPriv['issue'] = true; - if(common::hasPriv('meeting', 'view') and $this->config->edition == 'max' and $this->config->vision != 'lite') $hasViewPriv['meeting'] = true; + if(common::hasPriv('risk', 'view') and $this->config->edition == 'max' and $this->config->vision != 'lite') $hasViewPriv['risk'] = true; + if(common::hasPriv('issue', 'view') and $this->config->edition == 'max' and $this->config->vision != 'lite') $hasViewPriv['issue'] = true; + if(common::hasPriv('meeting', 'view') and $this->config->edition == 'max' and $this->config->vision != 'lite') $hasViewPriv['meeting'] = true; if(common::hasPriv('feedback', 'view') and in_array($this->config->edition, array('max', 'biz'))) $hasViewPriv['feedback'] = true; + if(common::hasPriv('ticket', 'view') and in_array($this->config->edition, array('max', 'biz'))) $hasViewPriv['ticket'] = true; $params = $this->get->param; $params = json_decode(base64_decode($params)); @@ -1746,14 +1748,14 @@ class block extends control $objectCountList = array('todo' => 'todoCount', 'task' => 'taskCount', 'bug' => 'bugCount', 'story' => 'storyCount', 'requirement' => 'requirementCount'); if($this->config->edition == 'max') { - $objectList += array('risk' => 'risks', 'issue' => 'issues', 'feedback' => 'feedbacks'); - $objectCountList += array('risk' => 'riskCount', 'issue' => 'issueCount', 'feedback' => 'feedbackCount'); + $objectList += array('risk' => 'risks', 'issue' => 'issues', 'feedback' => 'feedbacks', 'ticket' => 'tickets'); + $objectCountList += array('risk' => 'riskCount', 'issue' => 'issueCount', 'feedback' => 'feedbackCount', 'ticket' => 'ticketCount'); } if($this->config->edition == 'biz') { - $objectList += array('feedback' => 'feedbacks'); - $objectCountList += array('feedback' => 'feedbackCount'); + $objectList += array('feedback' => 'feedbacks', 'ticket' => 'tickets'); + $objectCountList += array('feedback' => 'feedbackCount', 'ticket' => 'ticketCount'); } $tasks = $this->loadModel('task')->getUserSuspendedTasks($this->app->user->account); @@ -1769,6 +1771,7 @@ class block extends control ->beginIF($objectType == 'bug')->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product=t2.id')->fi() ->beginIF($objectType == 'task')->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.execution=t2.id')->fi() ->beginIF($objectType == 'issue' or $objectType == 'risk')->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id')->fi() + ->beginIF($objectType == 'ticket')->leftJoin(TABLE_USER)->alias('t2')->on('t1.openedBy = t2.account')->fi() ->where('t1.deleted')->eq(0) ->andWhere('t1.assignedTo')->eq($this->app->user->account)->fi() ->beginIF($objectType == 'story')->andWhere('t1.type')->eq('story')->andWhere('t2.deleted')->eq('0')->fi() @@ -1779,6 +1782,7 @@ class block extends control ->beginIF($objectType != 'todo')->andWhere('t1.status')->ne('closed')->fi() ->beginIF($objectType == 'feedback')->andWhere('t1.status')->in('wait, noreview')->fi() ->beginIF($objectType == 'issue' or $objectType == 'risk')->andWhere('t2.deleted')->eq(0)->fi() + ->beginIF($objectType == 'ticket')->andWhere('t1.status')->in('wait,doing,done')->fi() ->orderBy($orderBy) ->beginIF($limitCount)->limit($limitCount)->fi() ->fetchAll(); @@ -1823,9 +1827,10 @@ class block extends control if($objectType == 'risk') $this->app->loadLang('risk'); if($objectType == 'issue') $this->app->loadLang('issue'); - if($objectType == 'feedback') + if($objectType == 'feedback' or $objectType == 'ticket') { $this->app->loadLang('feedback'); + $this->app->loadLang('ticket'); $this->view->users = $this->loadModel('user')->getPairs('all,noletter'); $this->view->products = $this->dao->select('id, name')->from(TABLE_PRODUCT)->where('deleted')->eq('0')->fetchPairs('id', 'name'); } diff --git a/module/block/lang/de.php b/module/block/lang/de.php index bc16a941ea..c5b52db981 100644 --- a/module/block/lang/de.php +++ b/module/block/lang/de.php @@ -358,6 +358,7 @@ $lang->block->availableBlocks->risk = 'My Risks'; $lang->block->availableBlocks->issue = 'My Issues'; $lang->block->availableBlocks->meeting = 'My Meetings'; $lang->block->availableBlocks->feedback = 'My Feedbacks'; +$lang->block->availableBlocks->ticket = 'Ticket'; if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project'; $lang->block->moduleList['product'] = $lang->productCommon; @@ -478,6 +479,7 @@ $lang->block->issueCount = 'Issues'; $lang->block->storyCount = 'Stories'; $lang->block->meetingCount = 'Meetings'; $lang->block->feedbackCount = 'Feedbacks'; +$lang->block->ticketCount = 'Tickets'; $lang->block->typeList = new stdclass(); diff --git a/module/block/lang/en.php b/module/block/lang/en.php index 835b29776e..6334ed08bd 100644 --- a/module/block/lang/en.php +++ b/module/block/lang/en.php @@ -358,6 +358,7 @@ $lang->block->availableBlocks->risk = 'Risks'; $lang->block->availableBlocks->issue = 'Issues'; $lang->block->availableBlocks->meeting = 'Meetings'; $lang->block->availableBlocks->feedback = 'My Feedbacks'; +$lang->block->availableBlocks->ticket = 'Ticket'; if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project'; $lang->block->moduleList['product'] = $lang->productCommon; @@ -478,6 +479,7 @@ $lang->block->issueCount = 'Issues'; $lang->block->storyCount = 'Stories'; $lang->block->meetingCount = 'Meetings'; $lang->block->feedbackCount = 'Feedbacks'; +$lang->block->ticketCount = 'Tickets'; $lang->block->typeList = new stdclass(); diff --git a/module/block/lang/fr.php b/module/block/lang/fr.php index 2b662628c3..a9512c3029 100644 --- a/module/block/lang/fr.php +++ b/module/block/lang/fr.php @@ -358,6 +358,7 @@ $lang->block->availableBlocks->risk = 'My Risks'; $lang->block->availableBlocks->issue = 'My Issues'; $lang->block->availableBlocks->meeting = 'My Meetings'; $lang->block->availableBlocks->feedback = 'My Feedbacks'; +$lang->block->availableBlocks->ticket = 'Ticket'; if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project'; $lang->block->moduleList['product'] = $lang->productCommon; @@ -478,6 +479,7 @@ $lang->block->issueCount = 'Issues'; $lang->block->storyCount = 'Stories'; $lang->block->meetingCount = 'Meetings'; $lang->block->feedbackCount = 'Feedbacks'; +$lang->block->ticketCount = 'Tickets'; $lang->block->typeList = new stdclass(); diff --git a/module/block/lang/zh-cn.php b/module/block/lang/zh-cn.php index adcf517d1d..219eac049d 100644 --- a/module/block/lang/zh-cn.php +++ b/module/block/lang/zh-cn.php @@ -358,6 +358,7 @@ $lang->block->availableBlocks->risk = '风险'; $lang->block->availableBlocks->issue = '问题'; $lang->block->availableBlocks->meeting = '会议'; $lang->block->availableBlocks->feedback = '反馈'; +$lang->block->availableBlocks->ticket = '工单'; if($config->systemMode == 'new') $lang->block->moduleList['project'] = '项目'; $lang->block->moduleList['product'] = $lang->productCommon; @@ -478,6 +479,7 @@ $lang->block->issueCount = '问题数'; $lang->block->storyCount = '需求数'; $lang->block->meetingCount = '会议数'; $lang->block->feedbackCount = '反馈数'; +$lang->block->ticketCount = '工单数'; $lang->block->typeList = new stdclass(); diff --git a/module/block/view/buildblock.html.php b/module/block/view/buildblock.html.php index 3d44583e07..4c70762704 100644 --- a/module/block/view/buildblock.html.php +++ b/module/block/view/buildblock.html.php @@ -18,10 +18,10 @@ idAB?> + build->name;?> build->product;?> - build->name;?> build->date;?> @@ -34,10 +34,10 @@ ?> > id);?> + name);?> productName);?> - name);?> date?> diff --git a/module/block/view/projectstatisticblock.html.php b/module/block/view/projectstatisticblock.html.php index 7faf9838c7..3dddfb16b8 100644 --- a/module/block/view/projectstatisticblock.html.php +++ b/module/block/view/projectstatisticblock.html.php @@ -102,11 +102,11 @@ $(function() e.preventDefault(); }); - var $projectLi = $('#activeProject'); - if($projectLi.length) + var $projectList = $('#activeProject'); + if($projectList.length) { - var projectLi = $projectLi[0]; - $(".col ul.nav").animate({scrollTop: projectLi.offsetTop}, "slow"); + var projectList = $projectList[0]; + $(".col ul.nav").animate({scrollTop: projectList.offsetTop}, "slow"); } }); @@ -123,7 +123,7 @@ $(function()
  • id == $selected) echo "class='active' id='activeProject'";?> projectID='id;?>'> - name;?> + name;?> id"), "", '', "class='btn-view' title={$lang->project->index}");?>
  • @@ -132,7 +132,7 @@ $(function()
    -
    +
    model == 'scrum' or $project->model == 'kanban'):?>
    diff --git a/module/block/view/ticketblock.html.php b/module/block/view/ticketblock.html.php new file mode 100644 index 0000000000..2adf8a7a39 --- /dev/null +++ b/module/block/view/ticketblock.html.php @@ -0,0 +1,36 @@ + +
    block->emptyTip;?>
    + + +
    + '> + + + + + + + + + + + + + get->entry}'" : ''; + ?> + + + + + + + + + + +
    idAB?>ticket->product;?>ticket->title?>ticket->type;?>ticket->createdBy;?>ticket->createdDate;?>
    id);?>product);?>createLink('ticket', 'view', "ticketID=$ticket->id"), $ticket->title, '', "data-app='my'")?>ticket->typeList, $ticket->type)?>openedBy)?>openedDate;?>
    +
    + diff --git a/module/bug/config.php b/module/bug/config.php index 5ac6e7d586..a2dc0c6292 100644 --- a/module/bug/config.php +++ b/module/bug/config.php @@ -24,7 +24,7 @@ $config->bug->list->allFields = 'id, module, execution, story, task, lastEditedBy, lastEditedDate'; -$config->bug->list->defaultFields = 'id,severity,pri,title,openedBy,assignedTo,resolvedBy,resolution'; +$config->bug->list->defaultFields = 'id,title,severity,pri,openedBy,assignedTo,resolvedBy,resolution'; $config->bug->exportFields = 'id, product, branch, module, project, execution, story, task, title, keywords, severity, pri, type, os, browser, @@ -159,7 +159,7 @@ $config->bug->search['params']['deadline'] = array('operator' => '=', $config->bug->search['params']['activatedDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); $config->bug->datatable = new stdclass(); -$config->bug->datatable->defaultField = array('id', 'severity', 'pri', 'confirmed', 'title', 'status', 'openedBy', 'openedDate', 'assignedTo', 'resolution', 'actions'); +$config->bug->datatable->defaultField = array('id', 'title', 'severity', 'pri', 'status', 'openedBy', 'openedDate', 'confirmed', 'assignedTo', 'resolution', 'actions'); $config->bug->datatable->fieldList['id']['title'] = 'idAB'; $config->bug->datatable->fieldList['id']['fixed'] = 'left'; @@ -174,6 +174,12 @@ $config->bug->datatable->fieldList['module']['control'] = 'select'; $config->bug->datatable->fieldList['module']['title'] = 'module'; $config->bug->datatable->fieldList['module']['dataSource'] = array('module' => 'tree', 'method' => 'getOptionMenu', 'params' => '$productID&bug'); +$config->bug->datatable->fieldList['title']['title'] = 'title'; +$config->bug->datatable->fieldList['title']['fixed'] = 'left'; +$config->bug->datatable->fieldList['title']['width'] = 'auto'; +$config->bug->datatable->fieldList['title']['required'] = 'yes'; +$config->bug->datatable->fieldList['title']['minWidth'] = '200'; + $config->bug->datatable->fieldList['severity']['title'] = 'severityAB'; $config->bug->datatable->fieldList['severity']['fixed'] = 'left'; $config->bug->datatable->fieldList['severity']['width'] = '50'; @@ -186,16 +192,10 @@ $config->bug->datatable->fieldList['pri']['width'] = '50'; $config->bug->datatable->fieldList['pri']['required'] = 'no'; $config->bug->datatable->fieldList['pri']['name'] = $lang->bug->pri; -$config->bug->datatable->fieldList['confirmed']['title'] = 'confirmedAB'; -$config->bug->datatable->fieldList['confirmed']['fixed'] = 'left'; -$config->bug->datatable->fieldList['confirmed']['width'] = '100'; -$config->bug->datatable->fieldList['confirmed']['required'] = 'no'; - -$config->bug->datatable->fieldList['title']['title'] = 'title'; -$config->bug->datatable->fieldList['title']['fixed'] = 'left'; -$config->bug->datatable->fieldList['title']['width'] = 'auto'; -$config->bug->datatable->fieldList['title']['required'] = 'yes'; -$config->bug->datatable->fieldList['title']['minWidth'] = '200'; +$config->bug->datatable->fieldList['status']['title'] = 'statusAB'; +$config->bug->datatable->fieldList['status']['fixed'] = 'left'; +$config->bug->datatable->fieldList['status']['width'] = '80'; +$config->bug->datatable->fieldList['status']['required'] = 'no'; $config->bug->datatable->fieldList['branch']['title'] = 'branch'; $config->bug->datatable->fieldList['branch']['fixed'] = 'left'; @@ -230,10 +230,66 @@ $config->bug->datatable->fieldList['plan']['fixed'] = 'no'; $config->bug->datatable->fieldList['plan']['width'] = '120'; $config->bug->datatable->fieldList['plan']['required'] = 'no'; -$config->bug->datatable->fieldList['status']['title'] = 'statusAB'; -$config->bug->datatable->fieldList['status']['fixed'] = 'no'; -$config->bug->datatable->fieldList['status']['width'] = '80'; -$config->bug->datatable->fieldList['status']['required'] = 'no'; +$config->bug->datatable->fieldList['openedBy']['title'] = 'openedByAB'; +$config->bug->datatable->fieldList['openedBy']['fixed'] = 'no'; +$config->bug->datatable->fieldList['openedBy']['width'] = '80'; +$config->bug->datatable->fieldList['openedBy']['required'] = 'no'; + +$config->bug->datatable->fieldList['openedDate']['title'] = 'openedDateAB'; +$config->bug->datatable->fieldList['openedDate']['fixed'] = 'no'; +$config->bug->datatable->fieldList['openedDate']['width'] = '90'; +$config->bug->datatable->fieldList['openedDate']['required'] = 'no'; + +$config->bug->datatable->fieldList['openedBuild']['title'] = 'openedBuild'; +$config->bug->datatable->fieldList['openedBuild']['fixed'] = 'no'; +$config->bug->datatable->fieldList['openedBuild']['width'] = '120'; +$config->bug->datatable->fieldList['openedBuild']['required'] = 'no'; +$config->bug->datatable->fieldList['openedBuild']['control'] = 'multiple'; +$config->bug->datatable->fieldList['openedBuild']['dataSource'] = array('module' => 'build', 'method' =>'getBuildPairs', 'params' => '$productID&$branch&noempty,noterminate,nodone,withbranch'); + +$config->bug->datatable->fieldList['confirmed']['title'] = 'confirmedAB'; +$config->bug->datatable->fieldList['confirmed']['fixed'] = 'no'; +$config->bug->datatable->fieldList['confirmed']['width'] = '100'; +$config->bug->datatable->fieldList['confirmed']['required'] = 'no'; + +$config->bug->datatable->fieldList['assignedTo']['title'] = 'assignedToAB'; +$config->bug->datatable->fieldList['assignedTo']['fixed'] = 'no'; +$config->bug->datatable->fieldList['assignedTo']['width'] = '120'; +$config->bug->datatable->fieldList['assignedTo']['required'] = 'no'; +$config->bug->datatable->fieldList['assignedTo']['dataSource'] = array('module' => 'user', 'method' =>'getPairs', 'params' => 'noclosed|noletter'); + +$config->bug->datatable->fieldList['assignedDate']['title'] = 'assignedDate'; +$config->bug->datatable->fieldList['assignedDate']['fixed'] = 'no'; +$config->bug->datatable->fieldList['assignedDate']['width'] = '90'; +$config->bug->datatable->fieldList['assignedDate']['required'] = 'no'; + +$config->bug->datatable->fieldList['deadline']['title'] = 'deadline'; +$config->bug->datatable->fieldList['deadline']['fixed'] = 'no'; +$config->bug->datatable->fieldList['deadline']['width'] = '90'; +$config->bug->datatable->fieldList['deadline']['required'] = 'no'; +$config->bug->datatable->fieldList['deadline']['control'] = 'date'; + +$config->bug->datatable->fieldList['resolvedBy']['title'] = 'resolvedBy'; +$config->bug->datatable->fieldList['resolvedBy']['fixed'] = 'no'; +$config->bug->datatable->fieldList['resolvedBy']['width'] = '100'; +$config->bug->datatable->fieldList['resolvedBy']['required'] = 'no'; + +$config->bug->datatable->fieldList['resolution']['title'] = 'resolutionAB'; +$config->bug->datatable->fieldList['resolution']['fixed'] = 'no'; +$config->bug->datatable->fieldList['resolution']['width'] = '110'; +$config->bug->datatable->fieldList['resolution']['required'] = 'no'; + +$config->bug->datatable->fieldList['resolvedDate']['title'] = 'resolvedDateAB'; +$config->bug->datatable->fieldList['resolvedDate']['fixed'] = 'no'; +$config->bug->datatable->fieldList['resolvedDate']['width'] = '120'; +$config->bug->datatable->fieldList['resolvedDate']['required'] = 'no'; + +$config->bug->datatable->fieldList['resolvedBuild']['title'] = 'resolvedBuild'; +$config->bug->datatable->fieldList['resolvedBuild']['fixed'] = 'no'; +$config->bug->datatable->fieldList['resolvedBuild']['width'] = '120'; +$config->bug->datatable->fieldList['resolvedBuild']['required'] = 'no'; +$config->bug->datatable->fieldList['resolvedBuild']['control'] = 'select'; +$config->bug->datatable->fieldList['resolvedBuild']['dataSource'] = array('module' => 'bug', 'method' =>'getRelatedObjects', 'params' => 'resolvedBuild&id,name'); $config->bug->datatable->fieldList['activatedCount']['title'] = 'activatedCountAB'; $config->bug->datatable->fieldList['activatedCount']['fixed'] = 'no'; @@ -283,62 +339,6 @@ $config->bug->datatable->fieldList['mailto']['fixed'] = 'no'; $config->bug->datatable->fieldList['mailto']['width'] = '100'; $config->bug->datatable->fieldList['mailto']['required'] = 'no'; -$config->bug->datatable->fieldList['openedBy']['title'] = 'openedByAB'; -$config->bug->datatable->fieldList['openedBy']['fixed'] = 'no'; -$config->bug->datatable->fieldList['openedBy']['width'] = '80'; -$config->bug->datatable->fieldList['openedBy']['required'] = 'no'; - -$config->bug->datatable->fieldList['openedDate']['title'] = 'openedDateAB'; -$config->bug->datatable->fieldList['openedDate']['fixed'] = 'no'; -$config->bug->datatable->fieldList['openedDate']['width'] = '90'; -$config->bug->datatable->fieldList['openedDate']['required'] = 'no'; - -$config->bug->datatable->fieldList['openedBuild']['title'] = 'openedBuild'; -$config->bug->datatable->fieldList['openedBuild']['fixed'] = 'no'; -$config->bug->datatable->fieldList['openedBuild']['width'] = '120'; -$config->bug->datatable->fieldList['openedBuild']['required'] = 'no'; -$config->bug->datatable->fieldList['openedBuild']['control'] = 'multiple'; -$config->bug->datatable->fieldList['openedBuild']['dataSource'] = array('module' => 'build', 'method' =>'getBuildPairs', 'params' => '$productID&$branch&noempty,noterminate,nodone,withbranch'); - -$config->bug->datatable->fieldList['assignedTo']['title'] = 'assignedToAB'; -$config->bug->datatable->fieldList['assignedTo']['fixed'] = 'no'; -$config->bug->datatable->fieldList['assignedTo']['width'] = '120'; -$config->bug->datatable->fieldList['assignedTo']['required'] = 'no'; -$config->bug->datatable->fieldList['assignedTo']['dataSource'] = array('module' => 'user', 'method' =>'getPairs', 'params' => 'noclosed|noletter'); - -$config->bug->datatable->fieldList['assignedDate']['title'] = 'assignedDate'; -$config->bug->datatable->fieldList['assignedDate']['fixed'] = 'no'; -$config->bug->datatable->fieldList['assignedDate']['width'] = '90'; -$config->bug->datatable->fieldList['assignedDate']['required'] = 'no'; - -$config->bug->datatable->fieldList['deadline']['title'] = 'deadline'; -$config->bug->datatable->fieldList['deadline']['fixed'] = 'no'; -$config->bug->datatable->fieldList['deadline']['width'] = '90'; -$config->bug->datatable->fieldList['deadline']['required'] = 'no'; -$config->bug->datatable->fieldList['deadline']['control'] = 'date'; - -$config->bug->datatable->fieldList['resolvedBy']['title'] = 'resolvedByAB'; -$config->bug->datatable->fieldList['resolvedBy']['fixed'] = 'no'; -$config->bug->datatable->fieldList['resolvedBy']['width'] = '100'; -$config->bug->datatable->fieldList['resolvedBy']['required'] = 'no'; - -$config->bug->datatable->fieldList['resolution']['title'] = 'resolutionAB'; -$config->bug->datatable->fieldList['resolution']['fixed'] = 'no'; -$config->bug->datatable->fieldList['resolution']['width'] = '110'; -$config->bug->datatable->fieldList['resolution']['required'] = 'no'; - -$config->bug->datatable->fieldList['resolvedDate']['title'] = 'resolvedDateAB'; -$config->bug->datatable->fieldList['resolvedDate']['fixed'] = 'no'; -$config->bug->datatable->fieldList['resolvedDate']['width'] = '120'; -$config->bug->datatable->fieldList['resolvedDate']['required'] = 'no'; - -$config->bug->datatable->fieldList['resolvedBuild']['title'] = 'resolvedBuild'; -$config->bug->datatable->fieldList['resolvedBuild']['fixed'] = 'no'; -$config->bug->datatable->fieldList['resolvedBuild']['width'] = '120'; -$config->bug->datatable->fieldList['resolvedBuild']['required'] = 'no'; -$config->bug->datatable->fieldList['resolvedBuild']['control'] = 'select'; -$config->bug->datatable->fieldList['resolvedBuild']['dataSource'] = array('module' => 'bug', 'method' =>'getRelatedObjects', 'params' => 'resolvedBuild&id,name'); - $config->bug->datatable->fieldList['closedBy']['title'] = 'closedBy'; $config->bug->datatable->fieldList['closedBy']['fixed'] = 'no'; $config->bug->datatable->fieldList['closedBy']['width'] = '80'; diff --git a/module/bug/control.php b/module/bug/control.php index 294d191642..d131fe34e4 100755 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -967,14 +967,8 @@ class bug extends control $changes = $this->bug->update($bugID); if(dao::isError()) { - if(defined('RUN_MODE') && RUN_MODE == 'api') - { - return $this->send(array('status' => 'error', 'message' => dao::getError())); - } - else - { - return print(js::error(dao::getError())); - } + if(defined('RUN_MODE') && RUN_MODE == 'api') return $this->send(array('status' => 'error', 'message' => dao::getError())); + return print(js::error(dao::getError())); } } @@ -1155,6 +1149,12 @@ class bug extends control $assignedToList = array_filter($assignedToList); if(empty($assignedToList)) $assignedToList = $this->user->getPairs('devfirst|noclosed'); } + if($bug->assignedTo and !isset($assignedToList[$bug->assignedTo])) + { + /* Fix bug #28378. */ + $assignedTo = $this->user->getById($bug->assignedTo); + $assignedToList[$bug->assignedTo] = $assignedTo->realname; + } if($bug->status == 'closed') $assignedToList['closed'] = 'Closed'; $branch = $product->type == 'branch' ? ($bug->branch > 0 ? $bug->branch . ',0' : '0') : ''; @@ -1826,7 +1826,7 @@ class bug extends control $this->view->users = $users; $this->view->assignedTo = $assignedTo; $this->view->productBugs = $productBugs; - $this->view->executions = $this->loadModel('product')->getExecutionPairsByProduct($productID, $bug->branch ? "0,{$bug->branch}" : 0, 'id_desc', $projectID); + $this->view->executions = $this->loadModel('product')->getExecutionPairsByProduct($productID, $bug->branch ? "0,{$bug->branch}" : 0, 'id_desc', $projectID, 'stagefilter'); $this->view->builds = $this->loadModel('build')->getBuildPairs($productID, $bug->branch, 'withbranch'); $this->view->actions = $this->action->getList('bug', $bugID); $this->view->execution = isset($execution) ? $execution : ''; diff --git a/module/bug/css/browse.css b/module/bug/css/browse.css index 55068d74be..8d9aac8543 100644 --- a/module/bug/css/browse.css +++ b/module/bug/css/browse.css @@ -2,7 +2,6 @@ .closed, .closed a {color: gray; text-decoration:line-through;} .resolved, .resolved a {color: #8EC21F; text-decoration: none;} .tree .closed, .tree .closed a {color: #003366; text-decoration: none;} -td.delayed {color: #fff; background: #e84e0f !important;} #bugForm .setting {height: 25px;} .datatable-wrapper .table-datatable .datatable-row td {height: 37px;} diff --git a/module/bug/model.php b/module/bug/model.php index 70f4ae486c..55ba5696d3 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -78,7 +78,7 @@ class bugModel extends model ->join('mailto', ',') ->join('os', ',') ->join('browser', ',') - ->remove('files,labels,uid,oldTaskID,contactListMenu,region,lane') + ->remove('files,labels,uid,oldTaskID,contactListMenu,region,lane,ticket') ->get(); if($bug->execution != 0) $bug->project = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq($bug->execution)->fetch('project'); @@ -754,7 +754,7 @@ class bugModel extends model /* Link bug to build and release. */ if($bug->resolution == 'fixed' and !empty($bug->resolvedBuild) and $oldBug->resolvedBuild != $bug->resolvedBuild) { - if(!empty($oldBug->resolvedBuild)) $this->loadModel('build')->unlinkBug((int)$oldBug->resolvedBuild, (int)$bugID); + if(!empty($oldBug->resolvedBuild)) $this->loadModel('build')->unlinkBug($oldBug->resolvedBuild, (int)$bugID); $this->linkBugToBuild($bugID, $bug->resolvedBuild); } @@ -2214,6 +2214,7 @@ class bugModel extends model if(!empty($run->task)) $testtask = $this->loadModel('testtask')->getById($run->task); $executionID = isset($testtask->execution) ? $testtask->execution : 0; + if(!$executionID and $caseID > 0) $executionID = isset($run->case->execution) ? $run->case->execution : 0; // Fix feedback #1043. if(!$executionID and $this->app->tab == 'execution') $executionID = $this->session->execution; return array('title' => $title, 'steps' => $bugSteps, 'storyID' => $run->case->story, 'moduleID' => $run->case->module, 'version' => $run->case->version, 'executionID' => $executionID); @@ -3297,6 +3298,9 @@ class bugModel extends model $class .= ' text-ellipsis'; $title = "title='" . $browser . "'"; break; + case 'deadline': + $class .= ' text-center'; + break; } if($id == 'deadline' && isset($bug->delay) && $bug->status == 'active') $class .= ' delayed'; @@ -3440,7 +3444,7 @@ class bugModel extends model echo helper::isZeroDate($bug->assignedDate) ? '' : substr($bug->assignedDate, 5, 11); break; case 'deadline': - echo helper::isZeroDate($bug->deadline) ? '' : substr($bug->deadline, 5, 11); + echo helper::isZeroDate($bug->deadline) ? '' : '' . substr($bug->deadline, 5, 11) . ''; break; case 'resolvedBy': echo zget($users, $bug->resolvedBy, $bug->resolvedBy); diff --git a/module/bug/view/create.html.php b/module/bug/view/create.html.php index 3e93fb4a9c..815aea4dbf 100644 --- a/module/bug/view/create.html.php +++ b/module/bug/view/create.html.php @@ -160,11 +160,11 @@ if($this->app->tab == 'project') js::set('objectID', $projectID); bug->feedbackBy;?> - +
    bug->notifyEmail?> - +
    diff --git a/module/caselib/view/browse.html.php b/module/caselib/view/browse.html.php index eed4bc7943..f987b8d54e 100644 --- a/module/caselib/view/browse.html.php +++ b/module/caselib/view/browse.html.php @@ -126,11 +126,11 @@ js::set('flow', $config->global->flow); idAB);?> - pri;?>>priAB);?> testcase->title);?> + pri;?>>priAB);?> typeAB);?> - openedByAB);?> statusAB);?> + openedByAB);?> caselib->getFlowExtendFields(); foreach($extendFields as $extendField) echo "{$extendField->name}"; @@ -148,15 +148,15 @@ js::set('flow', $config->global->flow); id);?> - testcase->priList, $case->pri, $case->pri);?> module) echo "{$modulePairs[$case->module]} ";?> createLink('testcase', 'view', "caseID=$case->id&version=$case->version");?> title, null, "style='color: $case->color'");?> + testcase->priList, $case->pri, $case->pri);?> testcase->typeList[$case->type];?> - openedBy);?> processStatus('testcase', $case);?> + openedBy);?> " . $this->loadModel('flow')->getFieldValue($extendField, $case) . "";?> caselib->buildOperateMenu($case, 'browse');?> diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 7b7bc059bf..0791759a51 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -146,7 +146,7 @@ $lang->workingHour = '工时'; $lang->idAB = 'ID'; $lang->priAB = 'P'; $lang->statusAB = '状态'; -$lang->openedByAB = '创建'; +$lang->openedByAB = '创建者'; $lang->assignedToAB = '指派'; $lang->typeAB = '类型'; $lang->nameAB = '名称'; diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php index 4e3d190202..62021da8fb 100644 --- a/module/common/lang/zh-tw.php +++ b/module/common/lang/zh-tw.php @@ -136,7 +136,7 @@ $lang->workingHour = '工時'; $lang->idAB = 'ID'; $lang->priAB = 'P'; $lang->statusAB = '狀態'; -$lang->openedByAB = '創建'; +$lang->openedByAB = '創建者'; $lang->assignedToAB = '指派'; $lang->typeAB = '類型'; $lang->nameAB = '名稱'; diff --git a/module/custom/control.php b/module/custom/control.php index a770c7b2e6..0bfd16dd6c 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -261,7 +261,7 @@ class custom extends control } } if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); - return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('custom', 'set', "module=$module&field=$field&lang=" . str_replace('-', '_', isset($this->config->langs[$lang]) ? $lang : 'all')))); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('custom', 'set', "module=$module&field=$field&lang=" . ($lang == 'all' ? $lang : '')))); } /* Check whether the current language has been customized. */ diff --git a/module/design/lang/de.php b/module/design/lang/de.php index 8dc1c11869..17aa36a8ac 100644 --- a/module/design/lang/de.php +++ b/module/design/lang/de.php @@ -33,6 +33,7 @@ $lang->design->affectedStory = "{$lang->SRCommon}"; $lang->design->affectedTasks = 'Task'; $lang->design->reviewObject = 'Review Object'; $lang->design->createdBy = 'CreatedBy'; +$lang->design->createdByAB = 'CreatedBy'; $lang->design->createdDate = 'CreatedDate'; $lang->design->basicInfo = 'Basic Information'; $lang->design->noAssigned = 'Unassigned'; diff --git a/module/design/lang/en.php b/module/design/lang/en.php index f006c2c840..8c4c08019b 100644 --- a/module/design/lang/en.php +++ b/module/design/lang/en.php @@ -33,6 +33,7 @@ $lang->design->affectedStory = "{$lang->SRCommon}"; $lang->design->affectedTasks = 'Task'; $lang->design->reviewObject = 'Review Object'; $lang->design->createdBy = 'CreatedBy'; +$lang->design->createdByAB = 'CreatedBy'; $lang->design->createdDate = 'CreatedDate'; $lang->design->basicInfo = 'Basic Information'; $lang->design->noAssigned = 'Unassigned'; diff --git a/module/design/lang/fr.php b/module/design/lang/fr.php index 0e3e8da8a8..d202f002e6 100644 --- a/module/design/lang/fr.php +++ b/module/design/lang/fr.php @@ -33,6 +33,7 @@ $lang->design->affectedStory = "{$lang->SRCommon}"; $lang->design->affectedTasks = 'Task'; $lang->design->reviewObject = 'Review Object'; $lang->design->createdBy = 'CreatedBy'; +$lang->design->createdByAB = 'CreatedBy'; $lang->design->createdDate = 'CreatedDate'; $lang->design->basicInfo = 'Basic Information'; $lang->design->noAssigned = 'Unassigned'; diff --git a/module/design/lang/zh-cn.php b/module/design/lang/zh-cn.php index cab82e4748..63d05b8d68 100644 --- a/module/design/lang/zh-cn.php +++ b/module/design/lang/zh-cn.php @@ -33,6 +33,7 @@ $lang->design->affectedStory = "影响{$lang->SRCommon}"; $lang->design->affectedTasks = '影响任务'; $lang->design->reviewObject = '评审对象'; $lang->design->createdBy = '由谁创建'; +$lang->design->createdByAB = '创建者'; $lang->design->createdDate = '创建时间'; $lang->design->basicInfo = '基本信息'; $lang->design->noAssigned = '未指派'; diff --git a/module/design/view/browse.html.php b/module/design/view/browse.html.php index b3433abf73..6405b28ba9 100644 --- a/module/design/view/browse.html.php +++ b/module/design/view/browse.html.php @@ -32,12 +32,12 @@ recTotal}&recPerPage={$pager->recPerPage}";?> - design->id);?> - design->type);?> + idAB);?> design->name);?> - design->createdBy);?> - design->createdDate);?> + design->type);?> design->assignedTo);?> + design->createdByAB);?> + design->createdDate);?> design->actions;?> @@ -45,11 +45,11 @@ id);?> - design->typeList, $design->type);?> createLink('design', 'view', "id={$design->id}"), $design->name) : $design->name;?> + design->typeList, $design->type);?> + design->printAssignedHtml($design, $users);?> createdBy);?> createdDate, 0, 11);?> - design->printAssignedHtml($design, $users);?> id}"; diff --git a/module/dev/model.php b/module/dev/model.php index 207f1e893a..42a52c5914 100644 --- a/module/dev/model.php +++ b/module/dev/model.php @@ -69,7 +69,7 @@ class devModel extends model $type = substr($rawField->type, 0, $firstPOS > 0 ? $firstPOS : strlen($rawField->type)); $type = str_replace(array('big', 'small', 'medium', 'tiny'), '', $type); $field = array(); - $field['name'] = isset($this->lang->$module->{$rawField->field}) ? sprintf($this->lang->$module->{$rawField->field}, $this->lang->dev->tableList[$module]) : ''; + $field['name'] = (isset($this->lang->$module->{$rawField->field}) and is_string($this->lang->$module->{$rawField->field})) ? sprintf($this->lang->$module->{$rawField->field}, $this->lang->dev->tableList[$module]) : ''; if((empty($field['name']) or !is_string($field['name'])) and $aliasModule) $field['name'] = isset($this->lang->$aliasModule->{$rawField->field}) ? $this->lang->$aliasModule->{$rawField->field} : ''; if($subLang) $field['name'] = isset($this->lang->$aliasModule->$subLang->{$rawField->field}) ? $this->lang->$aliasModule->$subLang->{$rawField->field} : $field['name']; if(!is_string($field['name'])) $field['name'] = ''; diff --git a/module/doc/lang/de.php b/module/doc/lang/de.php index 285060e931..6a42fea1f2 100644 --- a/module/doc/lang/de.php +++ b/module/doc/lang/de.php @@ -61,9 +61,11 @@ $lang->doc->keywords = 'Tags'; $lang->doc->url = 'URL'; $lang->doc->files = 'Datei'; $lang->doc->addedBy = 'Angelegt von'; +$lang->doc->addedByAB = 'Added'; $lang->doc->addedDate = 'Angelegt am'; $lang->doc->editedBy = 'Bearbeitet von'; $lang->doc->editedDate = 'Bearbeitet am'; +$lang->doc->lastEditedBy = 'Last Editor'; $lang->doc->version = 'Version'; $lang->doc->basicInfo = 'Basis Info'; $lang->doc->deleted = 'Gelöscht'; diff --git a/module/doc/lang/en.php b/module/doc/lang/en.php index db444b059f..5cd7cc5654 100644 --- a/module/doc/lang/en.php +++ b/module/doc/lang/en.php @@ -61,9 +61,11 @@ $lang->doc->keywords = 'Tags'; $lang->doc->url = 'URL'; $lang->doc->files = 'Files'; $lang->doc->addedBy = 'Author'; +$lang->doc->addedByAB = 'Added'; $lang->doc->addedDate = 'Added'; $lang->doc->editedBy = 'UpdatedBy'; $lang->doc->editedDate = 'Updated'; +$lang->doc->lastEditedBy = 'Last Editor'; $lang->doc->version = 'Version'; $lang->doc->basicInfo = 'Basic Information'; $lang->doc->deleted = 'Deleted'; diff --git a/module/doc/lang/fr.php b/module/doc/lang/fr.php index cb11214407..54651a1c76 100644 --- a/module/doc/lang/fr.php +++ b/module/doc/lang/fr.php @@ -61,9 +61,11 @@ $lang->doc->keywords = 'Tags'; $lang->doc->url = 'URL'; $lang->doc->files = 'Fichiers'; $lang->doc->addedBy = 'Auteur'; +$lang->doc->addedByAB = 'Added'; $lang->doc->addedDate = 'Ajouté le'; $lang->doc->editedBy = 'Màj par'; $lang->doc->editedDate = 'Màj le'; +$lang->doc->lastEditedBy = 'Last Editor'; $lang->doc->version = 'Version'; $lang->doc->basicInfo = 'Infos de Base'; $lang->doc->deleted = 'Supprimé'; diff --git a/module/doc/lang/zh-cn.php b/module/doc/lang/zh-cn.php index 35f81e9190..4aaa6f37e2 100644 --- a/module/doc/lang/zh-cn.php +++ b/module/doc/lang/zh-cn.php @@ -61,9 +61,11 @@ $lang->doc->keywords = '关键字'; $lang->doc->url = '文档URL'; $lang->doc->files = '附件'; $lang->doc->addedBy = '由谁添加'; +$lang->doc->addedByAB = '创建者'; $lang->doc->addedDate = '添加时间'; $lang->doc->editedBy = '由谁更新'; $lang->doc->editedDate = '更新时间'; +$lang->doc->lastEditedBy = '最后更新者'; $lang->doc->version = '版本号'; $lang->doc->basicInfo = '基本信息'; $lang->doc->deleted = '已删除'; diff --git a/module/execution/config.php b/module/execution/config.php index e3faacb40e..8a3c915336 100644 --- a/module/execution/config.php +++ b/module/execution/config.php @@ -8,7 +8,7 @@ $config->execution->ownerFields = array('PO', 'PM', 'QD', 'RD'); $config->execution->defaultBurnPeriod = 30; $config->execution->list = new stdclass(); -$config->execution->list->exportFields = 'id,name,projectName,code,PM,begin,end,status,totalEstimate,totalConsumed,totalLeft,progress'; +$config->execution->list->exportFields = 'id,name,projectName,PM,begin,end,status,totalEstimate,totalConsumed,totalLeft,progress'; $config->execution->modelList['scrum'] = 'sprint'; $config->execution->modelList['waterfall'] = 'stage'; @@ -135,6 +135,7 @@ $config->execution->all->search['fields']['realEnd'] = $lang->execution-> $config->execution->all->search['fields']['closedBy'] = $lang->execution->closedBy; $config->execution->all->search['fields']['lastEditedDate'] = $lang->execution->lastEditedDate; $config->execution->all->search['fields']['closedDate'] = $lang->execution->closedDate; +$config->execution->all->search['fields']['teamCount'] = $lang->execution->teamCount; $config->execution->all->search['params']['name'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); $config->execution->all->search['params']['id'] = array('operator' => '=', 'control' => 'input', 'values' => ''); @@ -150,6 +151,7 @@ $config->execution->all->search['params']['realEnd'] = array('operator' = $config->execution->all->search['params']['closedBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); $config->execution->all->search['params']['lastEditedDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); $config->execution->all->search['params']['closedDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); +$config->execution->all->search['params']['teamCount'] = array('operator' => '=', 'control' => 'input', 'values' => ''); $config->printKanban = new stdClass(); $config->printKanban->col['story'] = 1; @@ -173,17 +175,13 @@ $config->execution->gantt->linkType['end']['end'] = 2; $config->execution->gantt->linkType['begin']['end'] = 3; $config->execution->datatable = new stdclass(); -if((!isset($config->setCode) or $config->setCode == 1) and $config->systemMode == 'new') +if($config->systemMode == 'new') { - $config->execution->datatable->defaultField = array('id', 'name', 'code', 'project', 'PM', 'status', 'progress', 'begin', 'end', 'estimate', 'consumed', 'left', 'burn'); -} -elseif($config->systemMode == 'new') -{ - $config->execution->datatable->defaultField = array('id', 'name', 'project', 'PM', 'status', 'progress', 'begin', 'end', 'estimate', 'consumed', 'left', 'burn'); + $config->execution->datatable->defaultField = array('id', 'name', 'project', 'status', 'PM', 'begin', 'end', 'estimate', 'consumed', 'left', 'progress', 'burn'); } else { - $config->execution->datatable->defaultField = array('id', 'name', 'PM', 'status', 'progress', 'begin', 'end', 'estimate', 'consumed', 'left', 'burn'); + $config->execution->datatable->defaultField = array('id', 'name', 'status', 'PM', 'begin', 'end', 'estimate', 'consumed', 'left', 'progress', 'burn'); } $config->execution->datatable->fieldList['id']['title'] = 'idAB'; @@ -196,6 +194,15 @@ $config->execution->datatable->fieldList['name']['fixed'] = 'left'; $config->execution->datatable->fieldList['name']['width'] = 'auto'; $config->execution->datatable->fieldList['name']['required'] = 'yes'; + +if($config->systemMode == 'new') +{ + $config->execution->datatable->fieldList['project']['title'] = 'project'; + $config->execution->datatable->fieldList['project']['fixed'] = 'no'; + $config->execution->datatable->fieldList['project']['width'] = '128'; + $config->execution->datatable->fieldList['project']['required'] = 'no'; +} + if(!isset($config->setCode) or $config->setCode == 1) { $config->execution->datatable->fieldList['code']['title'] = 'execCode'; @@ -204,29 +211,15 @@ if(!isset($config->setCode) or $config->setCode == 1) $config->execution->datatable->fieldList['code']['required'] = 'no'; } -if($config->systemMode == 'new') -{ - $config->execution->datatable->fieldList['project']['title'] = 'project'; - $config->execution->datatable->fieldList['project']['fixed'] = 'no'; - $config->execution->datatable->fieldList['project']['width'] = '100'; - $config->execution->datatable->fieldList['project']['required'] = 'no'; -} - -$config->execution->datatable->fieldList['PM']['title'] = 'owner'; -$config->execution->datatable->fieldList['PM']['fixed'] = 'no'; -$config->execution->datatable->fieldList['PM']['width'] = '70'; -$config->execution->datatable->fieldList['PM']['required'] = 'no'; - $config->execution->datatable->fieldList['status']['title'] = 'execStatus'; $config->execution->datatable->fieldList['status']['fixed'] = 'no'; $config->execution->datatable->fieldList['status']['width'] = '100'; $config->execution->datatable->fieldList['status']['required'] = 'no'; -$config->execution->datatable->fieldList['progress']['title'] = 'progress'; -$config->execution->datatable->fieldList['progress']['fixed'] = 'no'; -$config->execution->datatable->fieldList['progress']['width'] = '70'; -$config->execution->datatable->fieldList['progress']['required'] = 'no'; -$config->execution->datatable->fieldList['progress']['sort'] = 'no'; +$config->execution->datatable->fieldList['PM']['title'] = 'owner'; +$config->execution->datatable->fieldList['PM']['fixed'] = 'no'; +$config->execution->datatable->fieldList['PM']['width'] = '70'; +$config->execution->datatable->fieldList['PM']['required'] = 'no'; $config->execution->datatable->fieldList['openedDate']['title'] = 'openedDate'; $config->execution->datatable->fieldList['openedDate']['fixed'] = 'no'; @@ -273,6 +266,12 @@ $config->execution->datatable->fieldList['left']['width'] = '70'; $config->execution->datatable->fieldList['left']['required'] = 'no'; $config->execution->datatable->fieldList['left']['sort'] = 'no'; +$config->execution->datatable->fieldList['progress']['title'] = 'progress'; +$config->execution->datatable->fieldList['progress']['fixed'] = 'no'; +$config->execution->datatable->fieldList['progress']['width'] = '70'; +$config->execution->datatable->fieldList['progress']['required'] = 'no'; +$config->execution->datatable->fieldList['progress']['sort'] = 'no'; + $config->execution->datatable->fieldList['burn']['title'] = 'burn'; $config->execution->datatable->fieldList['burn']['fixed'] = 'no'; $config->execution->datatable->fieldList['burn']['width'] = '80'; diff --git a/module/execution/control.php b/module/execution/control.php index efc0e4a767..dc766565f8 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -516,7 +516,10 @@ class execution extends control $this->app->loadClass('pager', $static = true); $recTotal = count($tasks2Imported); $pager = new pager($recTotal, $recPerPage, $pageID); + $tasks2ImportedList = array_chunk($tasks2Imported, $pager->recPerPage, true); + $tasks2ImportedList = empty($tasks2ImportedList) ? $tasks2ImportedList : $tasks2ImportedList[$pageID - 1]; + $tasks2ImportedList = $this->loadModel('task')->processTasks($tasks2ImportedList); /* Save session. */ $this->app->session->set('taskList', $this->app->getURI(true), 'execution'); @@ -525,7 +528,7 @@ class execution extends control $this->view->pager = $pager; $this->view->position[] = html::a(inlink('browse', "executionID=$toExecution"), $execution->name); $this->view->position[] = $this->lang->execution->importTask; - $this->view->tasks2Imported = empty($tasks2ImportedList) ? $tasks2ImportedList : $tasks2ImportedList[$pageID - 1]; + $this->view->tasks2Imported = $tasks2ImportedList; $this->view->executions = $executions; $this->view->executionID = $execution->id; $this->view->fromExecution = $fromExecution; @@ -3760,6 +3763,7 @@ class execution extends control $this->view->from = $from; $this->view->param = $param; $this->view->isStage = (isset($project->model) and $project->model == 'waterfall') ? true : false; + $this->view->showBatchEdit = $this->cookie->showExecutionBatchEdit; $this->display(); } diff --git a/module/execution/css/all.css b/module/execution/css/all.css index 872a6e1219..1c672bb874 100644 --- a/module/execution/css/all.css +++ b/module/execution/css/all.css @@ -27,7 +27,7 @@ td.flex span.project-type-label {min-width: 40px;} .c-name > a, .table-children .text-left > a {padding-left: 5px;} .has-child > span {margin-right: 5px;} .c-name > .text-ellipsis {text-overflow: clip;} -.c-code, .c-project {overflow: hidden; white-space: nowrap;} +.c-code, .c-project {overflow: hidden; white-space: nowrap; padding: 0 8px;} th.c-status, .c-begin, .c-end, .c-realBegan, .c-realEnd {text-align: center;} .c-project{text-overflow: unset !important;} @@ -38,3 +38,7 @@ canvas {height: 28px;} #datatable-executionList .table-child-bottom.table-child-top > .c-name.flex {border-bottom: 2px solid #cbd0db !important;} #datatable-executionList .parent.has-child.c-name.flex {border-bottom: 1px solid #cbd0db !important;} #datatable-executionList tr:last-child .c-name.flex {margin-top: 1px !important;} + +.table thead .c-estimate.text-right, +.table thead .c-consumed.text-right, +.table thead .c-left.text-right {padding-right: 8px;} diff --git a/module/execution/css/bug.css b/module/execution/css/bug.css index 095e852326..0bb7c60563 100644 --- a/module/execution/css/bug.css +++ b/module/execution/css/bug.css @@ -6,7 +6,8 @@ .dropdown-list > li > a {display: block; padding: 3px 20px; clear: both; font-weight: normal; line-height: 1.53846154; color: #141414; white-space: nowrap;} .dropdown-list > li > a:hover, .dropdown-list > li > a:focus {color: #1a4f85; text-decoration: none; background-color: #ddd;} -td.delayed {color: #fff; background: #e84e0f !important;} .c-severity {width: 80px;} .c-confirmed {overflow: hidden;} +.c-deadline {text-align: center;} +#main {padding-bottom: 40px;} diff --git a/module/execution/css/grouptask.css b/module/execution/css/grouptask.css index ff7b32c085..2e54857cc4 100644 --- a/module/execution/css/grouptask.css +++ b/module/execution/css/grouptask.css @@ -27,4 +27,3 @@ .c-hours {white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: right;} .c-user, .c-type {width: 70px;} .c-progress {width: 60px;} -.delayed {background: #e84e0f !important; color: white;} diff --git a/module/execution/css/manageproducts.css b/module/execution/css/manageproducts.css index f7304b36c3..3be7a6cec0 100644 --- a/module/execution/css/manageproducts.css +++ b/module/execution/css/manageproducts.css @@ -4,6 +4,6 @@ #productsBox .product.checked:hover {background: #E5FFE6; border: 1px solid #229F24;} #productsBox .product .checkbox-primary {padding: 9px; cursor: pointer;} #productsBox .product.has-branch {padding-right: 40%;} -#productsBox .product.has-branch > .chosen-container {position: absolute; width: 40% !important; right: 3px; top: 3px;} -#productsBox .product.has-branch > .chosen-container > .chosen-single {background: rgba(0,0,0,.05);} -#productsBox .product.has-branch > .chosen-container > .chosen-single:hover {background: #fff;} +#productsBox .product.has-branch > .picker {position: absolute; width: 40% !important; right: 3px; top: 3px; background-color: unset;} +#productsBox .product.has-branch > .picker > .picker-selections {background: rgba(0,0,0,.05);} +#productsBox .product.has-branch > .picker > .picker-selections:hover {background: #fff;} diff --git a/module/execution/css/task.css b/module/execution/css/task.css index 20d6b20df0..e077d455af 100644 --- a/module/execution/css/task.css +++ b/module/execution/css/task.css @@ -1,4 +1,3 @@ -td.delayed {background: #e84e0f !important; color: white;} #int-dropdown {margin-left: -8px; border-radius: 4px; border: 1px solid #0c64eb;} #projectTaskForm table tbody tr td {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} .table td.c-estimate, .table td.c-consumed, .table td.c-left {padding-right: 12px;} @@ -11,4 +10,4 @@ td.delayed {background: #e84e0f !important; color: white;} #taskList .c-progress{padding-right: 8px; text-align: right;} #datatable-taskList .c-progress{padding-right: 8px; text-align: right;} .c-finishedBy, .c-lastEditedBy {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} -#executionTaskForm table tbody tr td.c-actions .dividing-line {width: 1px; height: 16px; display: inline-block; vertical-align: middle; background: #F4F5F7; margin: 0 4px 0 0;} +#executionTaskForm table tbody tr td.c-actions .dividing-line {width: 1px; height: 16px; display: inline-block; vertical-align: middle; background: #F4F5F7; margin: 0 4px 0 0;} \ No newline at end of file diff --git a/module/execution/js/all.js b/module/execution/js/all.js index 7d52829c0b..3f7384f54a 100644 --- a/module/execution/js/all.js +++ b/module/execution/js/all.js @@ -1,5 +1,17 @@ $(function() { + $("#" + status + "Tab").addClass('btn-active-text'); + $(document).on('click', '.plan-toggle', function(e) + { + var id = $(this).data('id'); + var $toggle = $(this); + var isCollapsed = $toggle.toggleClass('collapsed').hasClass('collapsed'); + $toggle.closest('#executionsForm').find('tr.parent-' + id).toggle(!isCollapsed); + + e.stopPropagation(); + e.preventDefault(); + }); + $('#executionTableList').on('sort.sortable', function(e, data) { var list = ''; @@ -60,6 +72,7 @@ $(function() } }); + /* Update table summary text. */ $('#executionsForm').table( { statisticCreator: function(table) @@ -67,21 +80,67 @@ $(function() var $table = table.getTable(); var $checkedRows = $table.find(table.isDataTable ? '.datatable-row-left.checked' : 'tbody>tr.checked'); var $originTable = table.isDataTable ? table.$.find('.datatable-origin') : null; - var $rows = $table.find(table.isDataTable ? '.datatable-rows .datatable-row-left' : 'tbody>tr'); + var checkedTotal = $checkedRows.length; + var $rows = checkedTotal ? $checkedRows : $table.find(table.isDataTable ? '.datatable-rows .datatable-row-left' : 'tbody>tr'); - var taskIdList = []; + var checkedWait = 0; + var checkedDoing = 0; + var executionIDList = []; $rows.each(function() { var $row = $(this); if($originTable) $row = $originTable.find('tbody>tr[data-id="' + $row.data('id') + '"]'); + var data = $row.data(); - taskIdList.push(data.id); + executionIDList.push(data.id); + + if(data.status === 'wait') checkedWait++; + if(data.status === 'doing') checkedDoing++; }); + + if(status != 'all') return (checkedTotal ? checkedExecutions : executionSummary).replace('%s', $rows.length); + return (checkedTotal ? checkedSummary : pageSummary).replace('%total%', $rows.length).replace('%wait%', checkedWait).replace('%doing%', checkedDoing); } }) + + $('input[name^="showEdit"]').click(function() + { + $.cookie('showExecutionBatchEdit', $(this).is(':checked') ? 1 : 0, {expires: config.cookieLife, path: config.webRoot}); + setCheckbox(); + }); + setCheckbox(); + + $('#executionTableList tr').on('click', function(e) + { + if($.cookie('showExecutionBatchEdit') != 1) e.stopPropagation(); + }); }); +/** + * Location to product list. + * + * @param int productID + * @param int projectID + * @param string status + * @access public + * @return void + */ function byProduct(productID, projectID, status) { location.href = createLink('project', 'all', "status=" + status + "&project=" + projectID + "&orderBy=" + orderBy + '&productID=' + productID); } + +/** + * Set batch edit checkbox. + * + * @access public + * @return void + */ +function setCheckbox() +{ + $('#executionsForm .checkbox-primary').hide(); + $('.check-all, .sortable tr').removeClass('checked'); + $(":checkbox[name^='executionIDList']").prop('checked', false); + $('#executionsForm').removeClass('has-row-checked'); + if($.cookie('showExecutionBatchEdit') == 1) $('#executionsForm .checkbox-primary').show(); +} diff --git a/module/execution/js/task.js b/module/execution/js/task.js index d66daf4a2f..ec899288f9 100644 --- a/module/execution/js/task.js +++ b/module/execution/js/task.js @@ -13,7 +13,7 @@ $(function() adjustTableFooter(); $('body').on('click', '#toggleFold', adjustTableFooter); - $('body').on('click', '.icon.icon-angle-double-right', adjustTableFooter); + $('body').on('click', '.icon.icon-angle-right', adjustTableFooter); /* The display of the adjusting sidebarHeader is synchronized with the sidebar. */ $(".sidebar-toggle").click(function() diff --git a/module/execution/js/testtask.js b/module/execution/js/testtask.js new file mode 100644 index 0000000000..7b904e5b23 --- /dev/null +++ b/module/execution/js/testtask.js @@ -0,0 +1,24 @@ +$(function() +{ + $('#testtaskForm').table( + { + replaceId: 'taskIdList', + statisticCreator: function(table) + { + var $table = table.getTable(); + var $checkedRows = $table.find('tbody>tr.checked'); + var checkedTotal = $checkedRows.length; + var checkedWait = $checkedRows.filter("[data-status=wait]").length; + var checkedTesting = $checkedRows.filter("[data-status=doing]").length; + var checkedBlocked = $checkedRows.filter("[data-status=blocked]").length; + var checkedDone = $checkedRows.filter("[data-status=done]").length; + var checkedStatistics = checkedAllSummary.replace('%total%', checkedTotal) + .replace('%wait%', checkedWait) + .replace('%testing%', checkedTesting) + .replace('%blocked%', checkedBlocked) + .replace('%done%', checkedDone); + + return checkedTotal ? checkedStatistics : pageSummary; + } + }); +}); diff --git a/module/execution/lang/de.php b/module/execution/lang/de.php index 9c88536042..7dd60f3ce2 100644 --- a/module/execution/lang/de.php +++ b/module/execution/lang/de.php @@ -54,6 +54,7 @@ $lang->execution->end = 'Ende'; $lang->execution->dateRange = 'Dauer'; $lang->execution->realBeganAB = 'Actual Begin'; $lang->execution->realEndAB = 'Actual End'; +$lang->execution->teamCount = 'Anzahl der Personen'; $lang->execution->realBegan = 'Tatsächlicher Start'; $lang->execution->realEnd = 'Tatsächliches Ende'; $lang->execution->to = 'An'; @@ -341,6 +342,9 @@ $lang->execution->stats = '%s Verfügbar, execution->taskSummary = "Aufgaben auf dieser Seite: %s Total, %s Wartend, %s In Arbeit;     Stunden : %s geplant., %s genutzt, %s Rest."; $lang->execution->pageSummary = "Aufgaben auf dieser Seite: %total%, %wait% Wartend, %doing% In Arbeit; Stunden: %estimate% geplant, %consumed% genutzt, %left% Rest."; $lang->execution->checkedSummary = " %total% Geprüft, %wait% Wartend, %doing% In Arbeit; Stunden: %estimate% geplant, %consumed% genutzt, %left% Rest."; +$lang->execution->executionSummary = "Total executions: %s."; +$lang->execution->pageExecSummary = "Total executions: %total%. Waiting: %wait%. Doing: %doing%."; +$lang->execution->checkedExecSummary = "Selected: %total%. Waiting: %wait%. Doing: %doing%."; $lang->execution->memberHoursAB = "%s hat %s Stunden"; $lang->execution->memberHours = '
    %s Arbeitsstunden
    %s
    '; $lang->execution->countSummary = '
    Aufgaben
    %s
    In Arbeit
    %s
    Wait
    %s
    '; @@ -415,7 +419,7 @@ $lang->execution->storyDragError = "The {$lang->SRCommon} is not ac $lang->execution->countTip = ' (%s member)'; $lang->execution->pleaseInput = "Enter"; $lang->execution->week = 'week'; -$lang->execution->checkedExecutions = 'Seleted %s items'; +$lang->execution->checkedExecutions = "Seleted %s {$lang->executionCommon}."; /* Statistics. */ $lang->execution->charts = new stdclass(); diff --git a/module/execution/lang/en.php b/module/execution/lang/en.php index e5cfcf3eeb..8befda23c8 100644 --- a/module/execution/lang/en.php +++ b/module/execution/lang/en.php @@ -54,6 +54,7 @@ $lang->execution->end = 'Planned End'; $lang->execution->dateRange = 'Plan Duration'; $lang->execution->realBeganAB = 'Actual Begin'; $lang->execution->realEndAB = 'Actual End'; +$lang->execution->teamCount = 'number of people'; $lang->execution->realBegan = 'Actual Begin'; $lang->execution->realEnd = 'Actual End'; $lang->execution->to = 'To'; @@ -341,6 +342,9 @@ $lang->execution->stats = 'Available: %s(h). Est $lang->execution->taskSummary = "Total tasks on this page:%s. Waiting: %s. Doing: %s.     Estimates: %s(h). Cost: %s(h). Left: %s(h)."; $lang->execution->pageSummary = "Total tasks: %total%. Waiting: %wait%. Doing: %doing%. Estimates: %estimate%(h). Cost: %consumed%(h). Left: %left%(h)."; $lang->execution->checkedSummary = "Selected: %total%. Waiting: %wait%. Doing: %doing%. Estimates: %estimate%(h). Cost: %consumed%(h). Left: %left%(h)."; +$lang->execution->executionSummary = "Total {$lang->executionCommon}: %s."; +$lang->execution->pageExecSummary = "Total {$lang->executionCommon}: %total%. Waiting: %wait%. Doing: %doing%."; +$lang->execution->checkedExecSummary = "Selected: %total%. Waiting: %wait%. Doing: %doing%."; $lang->execution->memberHoursAB = "%s has %s hours."; $lang->execution->memberHours = '
    %s Available Hours
    %s
    '; $lang->execution->countSummary = '
    Tasks
    %s
    Doing
    %s
    Waiting
    %s
    '; @@ -415,7 +419,7 @@ $lang->execution->storyDragError = "The {$lang->SRCommon} is not ac $lang->execution->countTip = ' (%s member)'; $lang->execution->pleaseInput = "Enter"; $lang->execution->week = 'week'; -$lang->execution->checkedExecutions = 'Seleted %s items'; +$lang->execution->checkedExecutions = "Seleted %s {$lang->executionCommon}."; /* Statistics. */ $lang->execution->charts = new stdclass(); diff --git a/module/execution/lang/fr.php b/module/execution/lang/fr.php index 6764593377..6c3bcc38e3 100644 --- a/module/execution/lang/fr.php +++ b/module/execution/lang/fr.php @@ -54,6 +54,7 @@ $lang->execution->end = 'Fin'; $lang->execution->dateRange = 'Durée'; $lang->execution->realBeganAB = 'Actual Begin'; $lang->execution->realEndAB = 'Actual End'; +$lang->execution->teamCount = 'nombre de personnes'; $lang->execution->realBegan = 'Début effectif'; $lang->execution->realEnd = 'Clôture effective'; $lang->execution->to = 'à'; @@ -341,6 +342,9 @@ $lang->execution->stats = 'Disponible: %s(h). Es $lang->execution->taskSummary = "Total des tâches de cette page :%s. A Faire: %s. En cours: %s.     Estimé: %s(h). Coût: %s(h). Reste: %s(h)."; $lang->execution->pageSummary = "Total des tâches de cette page: %total%. A Faire: %wait%. En cours: %doing%.     Estimé: %estimate%(h). Coût: %consumed%(h). Reste: %left%(h)."; $lang->execution->checkedSummary = "Sélectionné: %total%. A Faire: %wait%. En cours: %doing%.     Estimé: %estimate%(h). Coût: %consumed%(h). Reste: %left%(h)."; +$lang->execution->executionSummary = "Total executions: %s."; +$lang->execution->pageExecSummary = "Total executions: %total%. Waiting: %wait%. Doing: %doing%."; +$lang->execution->checkedExecSummary = "Selected: %total%. Waiting: %wait%. Doing: %doing%."; $lang->execution->memberHoursAB = "%s a %s heures."; $lang->execution->memberHours = '
    %s Heures Disponibles
    %s
    '; $lang->execution->countSummary = '
    Tâches
    %s
    En Cours
    %s
    A Faire
    %s
    '; @@ -415,7 +419,7 @@ $lang->execution->storyDragError = "The {$lang->SRCommon} is not ac $lang->execution->countTip = ' (%s member)'; $lang->execution->pleaseInput = "Enter"; $lang->execution->week = 'week'; -$lang->execution->checkedExecutions = "Pour s électionner l'élément%s"; +$lang->execution->checkedExecutions = "Pour s électionner l'élément%s."; /* Statistics. */ $lang->execution->charts = new stdclass(); diff --git a/module/execution/lang/vi.php b/module/execution/lang/vi.php index 5031004d73..e13b1a4eca 100644 --- a/module/execution/lang/vi.php +++ b/module/execution/lang/vi.php @@ -54,6 +54,7 @@ $lang->execution->RD = 'Quản lý phát hành'; $lang->execution->release = 'Phát hành'; $lang->execution->acl = 'Quyền truy cập'; $lang->execution->teamname = 'Tên đội nhóm'; +$lang->execution->teamCount = 'số người'; $lang->execution->order = "Đánh giá {$lang->executionCommon}"; $lang->execution->orderAB = "Đánh giá"; $lang->execution->products = "Liên kết {$lang->productCommon}"; diff --git a/module/execution/lang/zh-cn.php b/module/execution/lang/zh-cn.php index 5d3bd56de2..12a9d17a87 100644 --- a/module/execution/lang/zh-cn.php +++ b/module/execution/lang/zh-cn.php @@ -54,6 +54,7 @@ $lang->execution->end = '计划完成'; $lang->execution->dateRange = '计划起止日期'; $lang->execution->realBeganAB = '实际开始'; $lang->execution->realEndAB = '实际完成'; +$lang->execution->teamCount = '人数'; $lang->execution->realBegan = '实际开始日期'; $lang->execution->realEnd = '实际完成日期'; $lang->execution->to = '至'; @@ -341,6 +342,9 @@ $lang->execution->stats = '可用工时 %s 工 $lang->execution->taskSummary = "本页共 %s 个任务,未开始 %s,进行中 %s,总预计 %s 工时,已消耗 %s 工时,剩余 %s 工时。"; $lang->execution->pageSummary = "本页共 %total% 个任务,未开始 %wait%,进行中 %doing%,总预计 %estimate% 工时,已消耗 %consumed% 工时,剩余 %left% 工时。"; $lang->execution->checkedSummary = "选中 %total% 个任务,未开始 %wait%,进行中 %doing%,总预计 %estimate% 工时,已消耗 %consumed% 工时,剩余 %left% 工时。"; +$lang->execution->executionSummary = "本页共 %s 个{$lang->executionCommon}。"; +$lang->execution->pageExecSummary = "本页共 %total% 个{$lang->executionCommon},未开始 %wait%,进行中 %doing%。"; +$lang->execution->checkedExecSummary = "选中 %total% 个{$lang->executionCommon},未开始 %wait%,进行中 %doing%。"; $lang->execution->memberHoursAB = "
    %s有 %s 工时
    "; $lang->execution->memberHours = '
    %s可用工时
    %s
    '; $lang->execution->countSummary = '
    总任务
    %s
    进行中
    %s
    未开始
    %s
    '; @@ -415,7 +419,7 @@ $lang->execution->storyDragError = "该{$lang->SRCommon}不是激 $lang->execution->countTip = '(%s人)'; $lang->execution->pleaseInput = "请输入"; $lang->execution->week = '周'; -$lang->execution->checkedExecutions = '已选择%s项'; +$lang->execution->checkedExecutions = "共选中%s个{$lang->executionCommon}。"; /* 统计。*/ $lang->execution->charts = new stdclass(); diff --git a/module/execution/lang/zh-tw.php b/module/execution/lang/zh-tw.php index 1c06be7dd3..2eb28b233b 100644 --- a/module/execution/lang/zh-tw.php +++ b/module/execution/lang/zh-tw.php @@ -54,6 +54,7 @@ $lang->execution->execPM = "{$lang->execution->common}負責人"; $lang->execution->QD = '測試負責人'; $lang->execution->RD = '發佈負責人'; $lang->execution->release = '發佈'; +$lang->execution->teamCount = '人數'; $lang->execution->acl = '訪問控制'; $lang->execution->teamname = '團隊名稱'; $lang->execution->updateOrder = '排序'; diff --git a/module/execution/model.php b/module/execution/model.php index c8eb61f0ed..40f754c853 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -109,6 +109,13 @@ class executionModel extends model unset($this->lang->execution->menu->build); } + $stageFilter = array('request', 'design', 'review'); + if($this->config->edition == 'open' and in_array($execution->attribute, $stageFilter)) + { + unset($this->lang->execution->menu->qa); + unset($this->lang->execution->menu->build); + } + if($executions and (!isset($executions[$executionID]) or !$this->checkPriv($executionID))) $this->accessDenied(); $moduleName = $this->app->getModuleName(); @@ -362,7 +369,7 @@ class executionModel extends model } /* Check the workload format and total. */ - if(!empty($sprint->percent)) $this->checkWorkload('create', $sprint->percent); + if(!empty($sprint->percent)) $this->checkWorkload('create', $sprint->percent, $sprint->project); /* Set planDuration and realDuration. */ if($this->config->edition == 'max') @@ -1147,9 +1154,9 @@ class executionModel extends model /** * Check the workload format and total. * - * @param string $type create|update - * @param int $percent - * @param object $oldExecution + * @param string $type create|update + * @param int $percent + * @param object|int $oldExecution * @access public * @return bool */ @@ -1170,7 +1177,7 @@ class executionModel extends model ->andWhere('t2.type')->eq('stage') ->andWhere('t2.grade')->eq(1) ->andWhere('t2.deleted')->eq(0) - ->andWhere('t2.parent')->eq($oldExecution->parent) + ->andWhere('t2.parent')->eq($oldExecution) ->fetch('total'); if($type == 'create') $percentTotal = $percent + $oldPercentTotal; @@ -1531,6 +1538,15 @@ class executionModel extends model $hours = $this->loadModel('project')->computerProgress($executions); $burns = $this->getBurnData($executions); + /* Get the number of execution teams. */ + $teams = $this->dao->select('t1.root,count(t1.id) as teams')->from(TABLE_TEAM)->alias('t1') + ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account=t2.account') + ->where('t1.root')->in(array_keys($executions)) + ->andWhere('t1.type')->ne('project') + ->andWhere('t2.deleted')->eq(0) + ->groupBy('t1.root') + ->fetchAll('root'); + if($withTasks) $executionTasks = $this->getTaskGroupByExecution(array_keys($executions)); /* Process executions. */ @@ -1557,6 +1573,7 @@ class executionModel extends model /* Process the hours. */ $execution->hours = isset($hours[$execution->id]) ? $hours[$execution->id] : (object)$emptyHour; + $execution->teamCount = isset($teams[$execution->id]) ? $teams[$execution->id]->teams : 0; if(isset($executionTasks) and isset($executionTasks[$execution->id])) { @@ -4582,18 +4599,19 @@ class executionModel extends model if(!$isChild) { $trClass = 'is-top-level table-nest-child-hide'; - $trAttrs = "data-id='$execution->id' data-order='$execution->order' data-nested='true'"; + $trAttrs = "data-id='$execution->id' data-order='$execution->order' data-nested='true' data-status={$execution->status}"; } else { $trClass = 'table-nest-hide'; - $trAttrs = "data-id={$execution->id} data-parent={$execution->parent}"; + $trAttrs = "data-id={$execution->id} data-parent={$execution->parent} data-status={$execution->status}"; $trAttrs .= " data-nest-parent='$execution->parent' data-order='$execution->order' data-nest-path=',$execution->parent,$execution->id,'"; } $burns = join(',', $execution->burns); echo ""; - echo "id class='table-nest-icon icon table-nest-toggle'>"; + echo ""; + if(common::hasPriv('execution', 'batchEdit')) echo "id class='table-nest-icon icon table-nest-toggle'>"; if($this->config->systemMode == 'new') { $spanClass = $execution->type == 'stage' ? 'label-warning' : 'label-info'; @@ -4601,7 +4619,7 @@ class executionModel extends model } if(empty($execution->children)) { - echo html::a(helper::createLink('execution', 'view', "executionID=$execution->id"), $execution->name); + echo html::a(helper::createLink('execution', 'view', "executionID=$execution->id"), $execution->name, '', 'class="text-ellipsis"'); if(!helper::isZeroDate($execution->end)) { if($execution->status != 'closed') @@ -4612,7 +4630,7 @@ class executionModel extends model } else { - echo $execution->name; + echo "" . $execution->name . ''; if(!helper::isZeroDate($execution->end)) { if($execution->status != 'closed') @@ -4621,14 +4639,14 @@ class executionModel extends model } } } - echo '' . zget($users, $execution->PM) . ''; echo "" . zget($this->lang->project->statusList, $execution->status) . ''; - echo '' . html::ring($execution->hours->progress) . ''; + echo '' . zget($users, $execution->PM) . ''; echo helper::isZeroDate($execution->begin) ? '' : '' . $execution->begin . ''; echo helper::isZeroDate($execution->end) ? '' : '' . $execution->end . ''; - echo "" . $execution->hours->totalEstimate . $this->lang->execution->workHourUnit . ''; - echo "" . $execution->hours->totalConsumed . $this->lang->execution->workHourUnit . ''; - echo "" . $execution->hours->totalLeft . $this->lang->execution->workHourUnit . ''; + echo "" . $execution->hours->totalEstimate . $this->lang->execution->workHourUnit . ''; + echo "" . $execution->hours->totalConsumed . $this->lang->execution->workHourUnit . ''; + echo "" . $execution->hours->totalLeft . $this->lang->execution->workHourUnit . ''; + echo '' . html::ring($execution->hours->progress) . ''; echo ""; echo ''; common::printIcon('execution', 'start', "executionID={$execution->id}", $execution, 'list', '', '', 'iframe', true); @@ -4841,6 +4859,12 @@ class executionModel extends model if(!empty($execution->children)) $class .= ' has-child'; } + if($id == 'teamCount') + { + $title = " title='{$execution->teamCount}'"; + $class .= ' text-right'; + } + if($id == 'project') $title = " title='{$execution->projectName}'"; if($id == 'code') $title = " title='{$execution->code}'"; @@ -4882,7 +4906,7 @@ class executionModel extends model if(isset($execution->delay)) echo "{$this->lang->execution->delayed} "; if(!empty($execution->children)) { - echo ""; + echo ""; } break; case 'code': @@ -4909,6 +4933,9 @@ class executionModel extends model case 'begin': echo helper::isZeroDate($execution->begin) ? '' : $execution->begin; break; + case 'teamCount': + echo $execution->teamCount; + break; case 'end': echo helper::isZeroDate($execution->end) ? '' : $execution->end; break; diff --git a/module/execution/view/all.html.php b/module/execution/view/all.html.php index 715cf14aae..0e1283510f 100644 --- a/module/execution/view/all.html.php +++ b/module/execution/view/all.html.php @@ -16,17 +16,26 @@ $datatableId = $this->moduleName . ucfirst($this->methodName); $useDatatable = (isset($config->datatable->$datatableId->mode) and $config->datatable->$datatableId->mode == 'datatable'); ?> - - - +executionCommon, $lang->execution->common, $lang->execution->checkedExecSummary)); +js::set('pageSummary', str_replace($lang->executionCommon, $lang->execution->common, $lang->execution->pageExecSummary)); +js::set('executionSummary', str_replace($lang->executionCommon, $lang->execution->common, $lang->execution->executionSummary)); +js::set('checkedExecutions', str_replace($lang->executionCommon, $lang->execution->common, $lang->execution->checkedExecutions)); +?> execution->treeLevel['all']); js::set('foldAll', $lang->execution->treeLevel['root']); js::set('isCNLang', !$this->loadModel('common')->checkNotCN()) ?> + " . $lang->searchAB, '', "class='btn btn-link querybox-toggle'"); echo html::a('javascript:fullScreen()', " " . $lang->kanban->fullScreen, '', "class='btn btn-link'"); if(common::hasPriv('execution', 'setKanban')) echo html::a(helper::createLink('execution', 'setKanban', "executionID=$execution->id", '', true), ' ' . $lang->settings, '', "class='iframe btn btn-link text-left' data-width='$width'"); diff --git a/module/execution/view/manageproducts.html.php b/module/execution/view/manageproducts.html.php index dbe1f2f567..6f34c579a6 100644 --- a/module/execution/view/manageproducts.html.php +++ b/module/execution/view/manageproducts.html.php @@ -39,7 +39,7 @@ ";?>
    - +
    @@ -64,7 +64,7 @@ ";?>
    - +
    @@ -88,7 +88,7 @@ ";?> - + diff --git a/module/execution/view/task.html.php b/module/execution/view/task.html.php index 6b722f4ed8..8920e3aeee 100644 --- a/module/execution/view/task.html.php +++ b/module/execution/view/task.html.php @@ -403,7 +403,7 @@ body {margin-bottom: 25px;} EOF; @@ -1113,6 +1119,9 @@ EOF; $this->view->users = $this->loadModel('user')->getPairs('all,noletter'); $this->view->queryID = $queryID; $this->view->mode = 'myMeeting'; + $this->view->projects = array(0 => '') + $this->loadModel('project')->getPairsByProgram('', 'all', true); + $this->view->executions = array(0 => '') + $this->loadModel('execution')->getPairs(0, 'all', 'nocode'); + $this->view->rooms = array('' => '') + $this->loadModel('meetingroom')->getPairs(); $this->display(); } @@ -1209,6 +1218,50 @@ EOF; $this->display(); } + /** + * My ticket. + * + * @param string $browseType + * @param string $param + * @param string $orderBy + * @param int $recTotal + * @param int $recPerPage + * @param int $pageID + * @access public + * @return void + */ + public function ticket($browseType = 'assignedtome', $param = 0, $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) + { + $this->loadModel('ticket'); + $queryID = $browseType == 'bysearch' ? (int)$param : 0; + + $this->session->set('ticketList', $this->app->getURI(true), 'feedback'); + + $this->app->loadClass('pager', $static = true); + $pager = pager::init($recTotal, $recPerPage, $pageID); + + if($browseType != 'bysearch') + { + $tickets = $this->ticket->getList($browseType, $orderBy, $pager); + } + else + { + $tickets = $this->ticket->getBySearch($queryID, $orderBy, $pager); + } + + $actionURL = $this->createLink('my', 'work', "mode=ticket&type=bysearch¶m=myQueryID&orderBy={$orderBy}&recTotal={$recTotal}&recPerPage={$recPerPage}&pageID={$pageID}"); + $this->my->buildTicketSearchForm($queryID, $actionURL); + + $this->view->title = $this->lang->ticket->browse; + $this->view->products = $this->loadModel('feedback')->getGrantProducts(); + $this->view->users = $this->loadModel('user')->getPairs('noclosed|nodeleted|noletter'); + $this->view->tickets = $tickets; + $this->view->orderBy = $orderBy; + $this->view->pager = $pager; + $this->view->browseType = $browseType; + $this->display(); + } + /** * My team. * diff --git a/module/my/css/bug.css b/module/my/css/bug.css index 2e23fc9a87..72b2a302fb 100644 --- a/module/my/css/bug.css +++ b/module/my/css/bug.css @@ -1,3 +1,2 @@ -td.delayed {color: #fff; background: #e84e0f !important;} .c-confirm {width:60px;} - +[lang^=en] .c-assignedTo {width: 105px !important;} diff --git a/module/my/css/execution.css b/module/my/css/execution.css index 0c3f52f231..1e329cc330 100644 --- a/module/my/css/execution.css +++ b/module/my/css/execution.css @@ -1,2 +1,3 @@ .c-hours, .c-progress {width: 80px !important;} .c-status, .c-date {padding-right: 8px !important; text-align: center;} +.align-right {text-align: right; padding-right: 8px !important;} diff --git a/module/my/css/requirement.css b/module/my/css/requirement.css index c0389382d5..86ed41a8c0 100644 --- a/module/my/css/requirement.css +++ b/module/my/css/requirement.css @@ -2,7 +2,7 @@ .table tbody > tr.table-children.table-child-top {border-top: 2px solid #cbd0db;} .table tbody > tr.table-children.table-child-bottom {border-bottom: 2px solid #cbd0db;} .table td.has-child > a:not(.story-toggle) {max-width: 90%; max-width: calc(100% - 30px); display: inline-block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} -.table td.has-child > .story-toggle {color: #838a9d; position: relative; top: 1px;} +.table td.has-child > .story-toggle {color: #838a9d; position: relative; top: 1px; left: 2px;} .table td.has-child > .story-toggle:hover {color: #006af1; cursor: pointer;} .table td.has-child > .story-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s; -ms-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -o-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg);} .table td.has-child > .story-toggle > .icon:before {text-align: left;} @@ -11,3 +11,4 @@ .main-table tbody > tr.table-children > td:first-child::before {width: 3px;} @-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;};} .c-span {margin-left: 22px;} +[lang^=de] .c-hours{width: 105px;} diff --git a/module/my/css/story.css b/module/my/css/story.css index 58b9c22c7d..50d561ac67 100644 --- a/module/my/css/story.css +++ b/module/my/css/story.css @@ -2,7 +2,7 @@ .table tbody > tr.table-children.table-child-top {border-top: 2px solid #cbd0db;} .table tbody > tr.table-children.table-child-bottom {border-bottom: 2px solid #cbd0db;} .table td.has-child > a:not(.story-toggle) {max-width: 90%; max-width: calc(100% - 30px); display: inline-block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} -.table td.has-child > .story-toggle {color: #838a9d; position: relative; top: 1px;} +.table td.has-child > .story-toggle {color: #838a9d; position: relative; top: 1px; left: 2px;} .table td.has-child > .story-toggle:hover {color: #006af1; cursor: pointer;} .table td.has-child > .story-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s; -ms-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -o-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg);} .table td.has-child > .story-toggle > .icon:before {text-align: left;} @@ -11,3 +11,4 @@ .main-table tbody > tr.table-children > td:first-child::before {width: 3px;} @-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;};} .c-actions-6 {width: 185px;} +[lang^=de] .c-hours {width: 105px;} diff --git a/module/my/css/task.css b/module/my/css/task.css index bb99a08527..742b4ff517 100644 --- a/module/my/css/task.css +++ b/module/my/css/task.css @@ -1,5 +1,3 @@ -td.delayed {background: #e84e0f !important; color: white;} - .table-children {border-left: 2px solid #cbd0db; border-right: 2px solid #cbd0db;} .table tbody > tr.table-children.table-child-top {border-top: 2px solid #cbd0db;} .table tbody > tr.table-children.table-child-bottom {border-bottom: 2px solid #cbd0db;} @@ -8,7 +6,7 @@ td.delayed {background: #e84e0f !important; color: white;} .table td.has-child > .task-toggle:hover {color: #006af1; cursor: pointer;} .table td.has-child > .task-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s; -ms-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -o-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg);} .table td.has-child > .task-toggle > .icon:before {text-align: left;} -.table td.has-child > .task-toggle.collapsed {top: 2px;} +.table td.has-child > .task-toggle.collapsed {top: 0;} .table td.has-child > .task-toggle.collapsed > .icon {-ms-transform: rotate(90deg); -moz-transform: rotate(90deg); -o-transform: rotate(90deg); -webkit-transform: rotate(90deg); transform: rotate(90deg);} .table td.c-hours {padding-right: 12px;} .main-table tbody > tr.table-children > td:first-child::before {width: 3px;} @@ -28,7 +26,7 @@ html[lang="en"] .c-user-short {width: 88px;} [lang^=de] #taskTable .c-date {width: 78px;} [lang^=de] #taskTable .assigned-title {width: 123px !important;} [lang^=de] #taskTable .c-user {width: 118px;} -[lang^=de] #taskTable .c-hours {width: 86px;} +[lang^=de] #taskTable .estimate, [lang^=de] #taskTable .consumed {width: 86px;} [lang^=de] #taskTable .c-user-short {width: 75px;} [lang^=fr] #taskTable .c-name {width: 120px;} [lang^=fr] #taskTable .c-project {width: 100px;} diff --git a/module/my/css/ticket.css b/module/my/css/ticket.css new file mode 100644 index 0000000000..93a983f85c --- /dev/null +++ b/module/my/css/ticket.css @@ -0,0 +1,5 @@ +.c-pri {width: 75px;} +.c-openedDate {width: 210px;} +.c-assignedTo {width: 100px;} +.no-wrap{text-overflow: ellipsis; white-space: nowrap; overflow: hidden;} + diff --git a/module/my/css/todo.css b/module/my/css/todo.css index 73c3524397..6ee004343a 100644 --- a/module/my/css/todo.css +++ b/module/my/css/todo.css @@ -10,3 +10,4 @@ .panel-actions .btn-icon {padding-left: 7px;} [lang^=de] .c-pri {width: 69px;} [lang^=fr] .c-pri {width: 82px;} +[lang^=en] .c-user, [lang^=fr] .c-user {width: 100px !important;} diff --git a/module/my/js/common.js b/module/my/js/common.js index a99c6a1bca..00c8150eee 100644 --- a/module/my/js/common.js +++ b/module/my/js/common.js @@ -21,6 +21,7 @@ $(function() $("#subNavbar li[data-id='audit'] a").append('' + reviewCount + ''); $("#subNavbar li[data-id='nc'] a").append('' + qaCount + ''); $("#subNavbar li[data-id='myMeeting'] a").append('' + meetingCount + ''); + $("#subNavbar li[data-id='ticket'] a").append('' + ticketCount + ''); } } } diff --git a/module/my/js/requirement.js b/module/my/js/requirement.js index 65996d23e9..7ce09255ea 100644 --- a/module/my/js/requirement.js +++ b/module/my/js/requirement.js @@ -7,6 +7,7 @@ $(function() if($td.find('.label').length > 0) labelWidth = $td.find('.label').width(); $td.find('a').eq(0).css('max-width', $td.width() - labelWidth - 60); }); + toggleFold('#myStoryForm', [], 0, 'requirement'); $(document).on('click', '.story-toggle', function(e) { diff --git a/module/my/js/story.js b/module/my/js/story.js index 65996d23e9..d61d1c927a 100644 --- a/module/my/js/story.js +++ b/module/my/js/story.js @@ -7,7 +7,7 @@ $(function() if($td.find('.label').length > 0) labelWidth = $td.find('.label').width(); $td.find('a').eq(0).css('max-width', $td.width() - labelWidth - 60); }); - + toggleFold('#myStoryForm', [], 0, 'story'); $(document).on('click', '.story-toggle', function(e) { var $toggle = $(this); diff --git a/module/my/js/task.js b/module/my/js/task.js index 1a81c7de00..1a619e9755 100644 --- a/module/my/js/task.js +++ b/module/my/js/task.js @@ -10,7 +10,7 @@ $(function() e.stopPropagation(); e.preventDefault(); }); - + toggleFold('#myTaskForm', [], 0, 'my'); $('#taskTable td.has-child .task-toggle').each(function() { var $td = $(this).closest('td'); diff --git a/module/my/js/todo.js b/module/my/js/todo.js index bf9b0b0c00..63544fc788 100644 --- a/module/my/js/todo.js +++ b/module/my/js/todo.js @@ -21,4 +21,22 @@ $(function() type: 'iframe' }).trigger('click'); } + + $('#todoForm').table( + { + replaceId: 'todoIDList', + statisticCreator: function(table) + { + var $table = table.getTable(); + var $checkedRows = $table.find('tbody>tr.checked'); + var checkedTotal = $checkedRows.length; + var checkedWait = $checkedRows.filter("[data-status=wait]").length; + var checkedDoing = $checkedRows.filter("[data-status=doing]").length; + var checkedStatistics = checkedSummary.replace('%total%', checkedTotal) + .replace('%wait%', checkedWait) + .replace('%doing%', checkedDoing); + + return checkedTotal ? checkedStatistics : pageSummary; + } + }); }); diff --git a/module/my/lang/zh-cn.php b/module/my/lang/zh-cn.php index 3c168dab0f..a2c84e1c93 100644 --- a/module/my/lang/zh-cn.php +++ b/module/my/lang/zh-cn.php @@ -61,7 +61,7 @@ $lang->my->projects = '所属项目'; $lang->my->executions = "所属{$lang->executionCommon}"; $lang->my->executionMenu = new stdclass(); -$lang->my->executionMenu->undone = '未结束'; +$lang->my->executionMenu->undone = '未完成'; $lang->my->executionMenu->done = '已完成'; $lang->my->taskMenu = new stdclass(); diff --git a/module/my/model.php b/module/my/model.php index 14bc238ccf..1afa242060 100644 --- a/module/my/model.php +++ b/module/my/model.php @@ -906,6 +906,31 @@ class myModel extends model $this->loadModel('search')->setSearchParams($this->config->product->search); } + /** + * Build ticket search form. + * + * @param string $queryID + * @param string $actionURL + * @access public + * @return mixed + */ + public function buildTicketSearchForm($queryID, $actionURL) + { + $this->loadModel('ticket'); + $this->app->loadConfig('ticket'); + + $this->config->ticket->search['module'] = 'workTicket'; + $this->config->ticket->search['queryID'] = $queryID; + $this->config->ticket->search['actionURL'] = $actionURL; + $this->config->ticket->search['params']['product']['values'] = array('' => '') + $this->loadModel('feedback')->getGrantProducts(); + $this->config->ticket->search['params']['module']['values'] = array('' => '') + $this->loadModel('tree')->getAllModulePairs(); + $grantProducts = $this->loadModel('feedback')->getGrantProducts(); + $productIDlist = array_keys($grantProducts); + $this->config->ticket->search['params']['openedBuild']['values'] = $this->loadModel('build')->getBuildPairs($productIDlist); + + $this->loadModel('search')->setSearchParams($this->config->ticket->search); + } + /** * Get requirements by search. * diff --git a/module/my/view/bug.html.php b/module/my/view/bug.html.php index 8872cc6b46..599914d144 100644 --- a/module/my/view/bug.html.php +++ b/module/my/view/bug.html.php @@ -62,24 +62,24 @@ idAB);?> + bug->title);?> bug->severityAB);?> priAB);?> - bug->confirmedAB);?> - bug->title);?> + bug->type);?> bug->product);?> - typeAB);?> - openedByAB);?> + bug->openedByAB);?> + bug->confirmedAB);?> rawMethod == 'work'):?> - bug->deadlineAB);?> + bug->deadline);?> bug->assignedTo);?> - bug->resolvedByAB);?> + bug->resolvedBy);?> bug->resolutionAB);?> actions;?> @@ -109,6 +109,10 @@ id);?> + + createLink('bug', 'view', "bugID=$bug->id"), $bug->title, null, "style='color: $bug->color' title='{$bug->title}'");?> + case) echo html::a(helper::createLink('testcase', 'view', "caseID=$bug->case&version=$bug->caseVersion"), "[" . $this->lang->testcase->common . "#$bug->case]", '', "class='bug' title='$bug->case'");?> + ' title='bug->severityList, $bug->severity);?>' data-severity='severity;?>'>bug->severityList, $bug->severity, $bug->severity);?> @@ -117,24 +121,20 @@ pri?>' title='bug->priList, $bug->pri);?>'>bug->priList, $bug->pri)?> - ' title='bug->confirmedList, $bug->confirmed);?>'>bug->confirmedList, $bug->confirmed)?> - - createLink('bug', 'view', "bugID=$bug->id"), $bug->title, null, "style='color: $bug->color' title='{$bug->title}'");?> - case) echo html::a(helper::createLink('testcase', 'view', "caseID=$bug->case&version=$bug->caseVersion"), "[" . $this->lang->testcase->common . "#$bug->case]", '', "class='bug' title='$bug->case'");?> - productLink == 'product-all' ? '' : "productID=$bug->product";?> + bug->typeList, $bug->type, '');?> productLink); echo html::a($this->createLink('product', $productLink[1], $param), $bug->productName, null, "title={$bug->productName}"); ?> - bug->typeList, $bug->type, '');?> openedBy);?> + ' title='bug->confirmedList, $bug->confirmed);?>'>bug->confirmedList, $bug->confirmed)?> rawMethod == 'work'):?> - deadline, 0, 4) > 0) echo substr($bug->deadline, 5, 6);?> + deadline, 0, 4) > 0) echo '' . substr($bug->deadline, 5, 6) . '';?> bug->printAssignedHtml($bug, $users);?> diff --git a/module/my/view/doc.html.php b/module/my/view/doc.html.php index 8df4bcaf48..2fe0ba5be8 100644 --- a/module/my/view/doc.html.php +++ b/module/my/view/doc.html.php @@ -41,9 +41,12 @@ doc->object;?> doc->size;?> - doc->addedBy;?> + doc->addedByAB;?> doc->addedDate;?> + + doc->lastEditedBy;?> + doc->editedDate;?> actions;?> @@ -68,6 +71,9 @@ addedBy);?> addedDate, 'y-m-d');?> + + editedBy);?> + editedDate, 'y-m-d');?> diff --git a/module/my/view/execution.html.php b/module/my/view/execution.html.php index 8c1d481e6a..97b632c463 100644 --- a/module/my/view/execution.html.php +++ b/module/my/view/execution.html.php @@ -34,16 +34,13 @@ idAB;?> my->name;?> - systemMode == 'new'):?> - my->projects;?> - - execution->begin;?> - execution->end;?> statusAB;?> team->roleAB;?> + execution->myTask;?> + execution->begin;?> + execution->end;?> team->join;?> - my->hours;?> - execution->myTask;?> + my->hours;?> execution->progress;?> @@ -62,13 +59,6 @@ name, '', "title='$execution->name'");?> - systemMode == 'new'):?> - - projectName) ? html::a($this->createLink('project', 'index', "id=$execution->project", '', '', $execution->project), $execution->projectName, '', "title='$execution->projectName'") : '';?> - - - begin;?> - end;?> delay)):?> execution->delayed;?> @@ -78,9 +68,11 @@ role;?> + assignedToMeTasks;?> + begin;?> + end;?> join;?> - hours;?> - assignedToMeTasks;?> + hours;?>
    progress;?>
    diff --git a/module/my/view/project.html.php b/module/my/view/project.html.php index 2fc86b3206..d8fc5f84e7 100644 --- a/module/my/view/project.html.php +++ b/module/my/view/project.html.php @@ -47,7 +47,17 @@ + + status == 'wait') $waitCount ++;?> + status == 'doing') $doingCount ++;?> + status == 'suspended') $suspendedCount ++;?> + status == 'closed') $closedCount ++;?> id);?> @@ -101,6 +111,7 @@ diff --git a/module/my/view/requirement.html.php b/module/my/view/requirement.html.php index da432d2e25..8765bec631 100644 --- a/module/my/view/requirement.html.php +++ b/module/my/view/requirement.html.php @@ -11,6 +11,7 @@ */ ?> + recTotal);?> rawMethod);?> @@ -31,7 +32,7 @@ echo html::a(inlink($app->rawMethod, "mode=requirement&type=reviewBy¶m=$param&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "{$lang->my->storyMenu->reviewByMe}" . ($type == 'reviewBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'reviewBy' ? ' btn-active-text' : '') . "'"); } ?> - loadModel('search');echo $lang->search->common;?> + search->common;?>
    @@ -50,6 +51,7 @@ $canBatchReview = common::hasPriv('requirement', 'batchReview'); $canBatchAssignTo = common::hasPriv('requirement', 'batchAssignTo'); $canBatchAction = ($canBatchEdit or $canBatchClose or $canBatchReview or $canBatchAssignTo); + $URTitle = common::checkNotCN() ? $lang->URCommon . ' ' . $lang->my->name : $lang->URCommon . $lang->my->name; ?> @@ -61,12 +63,12 @@ idAB);?> + pri;?>>priAB);?> - my->name);?> - story->product);?> - openedByAB);?> - story->estimateAB);?> statusAB);?> + story->product);?> + story->openedByAB);?> + story->estimateAB);?> story->stageAB);?> actions;?> @@ -78,7 +80,7 @@ $canBeChanged = common::canBeChanged('story', $story); $spanClass = $canBatchAction ? 'c-span' : ''; ?> - +
    @@ -88,15 +90,15 @@ id);?> - pri;?>' title='story->priList, $story->pri, $story->pri);?>'>story->priList, $story->pri, $story->pri);?> title, null, "style='color: $story->color' data-group='product' title='$story->title'") : "$story->title";?> - children)) echo '';?> + children)) echo '';?> + pri;?>' title='story->priList, $story->pri, $story->pri);?>'>story->priList, $story->pri, $story->pri);?> + processStatus('story', $story);?> productTitle;?> openedBy);?> estimate . $config->hourUnit;?> - processStatus('story', $story);?> story->stageList, $story->stage);?> "> id);?> - pri;?>' title='story->priList, $child->pri, $child->pri);?>'>story->priList, $child->pri, $child->pri);?> lang->story->children .'">SR ' . (common::hasPriv('story', 'view') ? html::a($storyLink, $child->title, null, "style='color: $child->color' data-group='product' title='$child->title'") : $child->title);?> + pri;?>' title='story->priList, $child->pri, $child->pri);?>'>story->priList, $child->pri, $child->pri);?> + URChanged ? "{$this->lang->story->URChanged}" : "" . $this->processStatus('story', $child) . ''?> productTitle;?> openedBy);?> estimate . $config->hourUnit;?> - URChanged ? "{$this->lang->story->URChanged}" : "" . $this->processStatus('story', $child) . ''?> story->stageList, $child->stage);?> rawMethod, "mode=story&type=reviewBy¶m=$param&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "{$lang->my->storyMenu->reviewByMe}" . ($type == 'reviewBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'reviewBy' ? ' btn-active-text' : '') . "'"); } ?> - loadModel('search');echo $lang->search->common;?> + search->common;?>
    @@ -55,6 +55,7 @@ $canEdit = common::hasPriv('story', 'edit'); $canCreateCase = common::hasPriv('testcase', 'create'); $canClose = common::hasPriv('story', 'close'); + $SRTitle = common::checkNotCN() ? $lang->SRCommon . ' ' . $lang->my->name : $lang->SRCommon . $lang->my->name; ?> @@ -66,13 +67,13 @@ idAB);?> + my->pri;?>>priAB);?> - my->name);?> + statusAB);?> story->product);?> story->plan);?> - openedByAB);?> + story->openedByAB);?> story->estimateAB);?> - statusAB);?> story->stageAB);?> actions;?> @@ -83,7 +84,7 @@ $storyLink = $this->createLink('story', 'view', "id=$story->id"); $canBeChanged = common::canBeChanged('story', $story); ?> - +
    @@ -93,16 +94,16 @@ id);?> - pri;?>' title='story->priList, $story->pri, $story->pri);?>'>story->priList, $story->pri, $story->pri);?> title, null, "style='color: $story->color' data-group='product'") : $story->title;?> - children)) echo '';;?> + children)) echo '';;?> + pri;?>' title='story->priList, $story->pri, $story->pri);?>'>story->priList, $story->pri, $story->pri);?> + processStatus('story', $story);?> productTitle;?> planTitle;?> openedBy);?> estimate . $config->hourUnit;?> - processStatus('story', $story);?> story->stageList, $story->stage);?> id);?> - pri;?>' title='story->priList, $child->pri, $child->pri);?>'>story->priList, $child->pri, $child->pri);?> lang->story->children .'">' . $this->lang->story->childrenAB . ' ' . html::a($storyLink, $child->title, null, "style='color: $child->color' data-group='product' title='$child->title'");?> + pri;?>' title='story->priList, $child->pri, $child->pri);?>'>story->priList, $child->pri, $child->pri);?> + processStatus('story', $child);?> productTitle;?> planTitle;?> openedBy);?> estimate . $config->hourUnit;?> - processStatus('story', $child);?> story->stageList, $child->stage);?> idAB);?> - task->pri;?>>priAB);?> task->name);?> + task->pri;?>>priAB);?> + statusAB);?> systemMode == 'new'):?> my->projects);?> task->execution);?> my->executions);?> - - openedByAB);?> - - task->deadlineAB);?> task->assignedTo);?> - - task->finishedBy);?> - + task->deadlineAB);?> task->estimateAB);?> task->consumedAB);?> task->leftAB);?> - statusAB);?> + + task->openedByAB);?> + + + task->finishedByAB);?> + actions;?> @@ -105,7 +105,6 @@ id);?> - pri;?>' title='task->priList, $task->pri);?>'>task->priList, $task->pri);?> ' title='name?>'> team)) echo '' . $this->lang->task->multipleAB . ' ';?> createLink('task', 'view', "taskID=$task->id", '', $onlybody, $task->project), $task->name, null, "class='$class' data-width='80%' style='color: $task->color'"); } ?> - children)) echo '';?> + children)) echo '';?> + + pri;?>' title='task->priList, $task->pri);?>'>task->priList, $task->pri);?> + + storyStatus) and $task->storyStatus == 'active' and $task->latestStoryVersion > $task->storyVersion and !in_array($task->status, array('cancel', 'closed')));?> + {$this->lang->my->storyChanged}") : print(" " . $this->processStatus('task', $task) . "");?> systemMode == 'new'):?> execution]->name) ? $projects[$task->execution]->name : '';?> @@ -130,23 +134,19 @@ createLink('execution', 'task', "executionID=$task->execution"), $task->executionName, '');?> - - openedBy);?> - - deadline, 0, 4) > 0) echo substr($task->deadline, 5, 6);?> task->printAssignedHtml($task, $users);?> + deadline, 0, 4) > 0) echo '' . substr($task->deadline, 5, 6) . '';?> + estimate, 1) . $lang->execution->workHourUnit;?> + consumed, 1) . $lang->execution->workHourUnit;?> + left, 1) . $lang->execution->workHourUnit;?> + + openedBy);?> + finishedBy);?> - estimate, 1) . $lang->execution->workHourUnit;?> - consumed, 1) . $lang->execution->workHourUnit;?> - left, 1) . $lang->execution->workHourUnit;?> - - storyStatus) and $task->storyStatus == 'active' and $task->latestStoryVersion > $task->storyVersion and !in_array($task->status, array('cancel', 'closed')));?> - {$this->lang->my->storyChanged}") : print(" " . $this->processStatus('task', $task) . "");?> - id);?> - pri;?>' title='task->priList, $child->pri);?>'>task->priList, $child->pri);?> parent > 0) echo '' . $this->lang->task->childrenAB . ' ';?> createLink('task', 'view', "taskID=$child->id", '', '', $child->project), $child->name, null, "style='color: $child->color'");?> + pri;?>' title='task->priList, $child->pri);?>'>task->priList, $child->pri);?> + + storyStatus) and $child->storyStatus == 'active' and $child->latestStoryVersion > $child->storyVersion and !in_array($child->status, array('cancel', 'closed')));?> + {$this->lang->my->storyChanged}") : print(" " . $this->processStatus('task', $child) . "");?> + systemMode == 'new'):?> execution]->name) ? $projects[$child->execution]->name : '';?> execution]->id) ? $projects[$child->execution]->id : 0;?> @@ -207,23 +211,19 @@ createLink('execution', 'task', "executionID=$child->project"), $child->executionName, '');?> - - openedBy);?> - - deadline, 0, 4) > 0) echo substr($child->deadline, 5, 6);?> task->printAssignedHtml($child, $users);?> + deadline, 0, 4) > 0) echo '' . substr($child->deadline, 5, 6) . '';?> + estimate, 1) . ' ' . $lang->execution->workHourUnit;?> + consumed, 1) . ' ' . $lang->execution->workHourUnit;?> + left, 1) . ' ' . $lang->execution->workHourUnit;?> + + openedBy);?> + finishedBy);?> - estimate, 1) . ' ' . $lang->execution->workHourUnit;?> - consumed, 1) . ' ' . $lang->execution->workHourUnit;?> - left, 1) . ' ' . $lang->execution->workHourUnit;?> - - storyStatus) and $child->storyStatus == 'active' and $child->latestStoryVersion > $child->storyVersion and !in_array($child->status, array('cancel', 'closed')));?> - {$this->lang->my->storyChanged}") : print(" " . $this->processStatus('task', $child) . "");?> - rawMethod, "mode=$mode&type=assigntome"), "{$lang->my->assignedToMe}" . ($type == 'assigntome' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assigntome' ? ' btn-active-text' : '') . "'"); } ?> - loadModel('search');echo $lang->search->common;?> + search->common;?>
    diff --git a/module/my/view/testtask.html.php b/module/my/view/testtask.html.php index 9df1becf44..395c064bb9 100644 --- a/module/my/view/testtask.html.php +++ b/module/my/view/testtask.html.php @@ -35,24 +35,32 @@ idAB);?> testtask->name);?> - testtask->execution);?> testtask->build);?> + testtask->execution);?> + statusAB);?> testtask->begin);?> testtask->end);?> - statusAB);?> actions;?> + + status == 'wait') $waitCount ++;?> + status == 'doing') $testingCount ++;?> + status == 'blocked') $blockedCount ++;?> id);?> createLink('testtask', 'view', "taskID=$task->id"), $task->name);?> - executionName;?> trunk : $task->buildName;?>'>build == 'trunk' ? print($lang->trunk) : print(html::a($this->createLink('build', 'view', "buildID=$task->build"), $task->buildName));?> + executionName;?> + '>processStatus('testtask', $task);?> begin?> end?> - '>processStatus('testtask', $task);?> id", $task, 'list', 'sitemap', '', '', '', "data-app='qa'"); @@ -71,7 +79,10 @@ - +
    diff --git a/module/my/view/ticket.html.php b/module/my/view/ticket.html.php new file mode 100644 index 0000000000..ac0967bfbd --- /dev/null +++ b/module/my/view/ticket.html.php @@ -0,0 +1,71 @@ + + * @package my + * @version $Id$ + * @link http://www.zentao.net + */ +?> +getModuleRoot() . 'common/view/header.html.php';?> + +rawMethod);?> + +
    +
    + +
    +

    + ticket->noTicket;?> +

    +
    + +
    + + recTotal}&recPerPage={$pager->recPerPage}"; ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ticket->idAB);?>ticket->product);?>ticket->title);?>ticket->priAB);?>ticket->status);?>ticket->type);?>ticket->createdBy);?>ticket->createdDate);?>ticket->assignedTo);?>actions;?>
    createLink('ticket', 'view', "id={$ticket->id}"), $ticket->id) : $ticket->id;?>product);?>createLink('ticket', 'view', "id={$ticket->id}"), $ticket->title) : $ticket->title;?>ticket->priList, $ticket->pri); ?>ticket->statusList, $ticket->status);?>ticket->typeList, $ticket->type);?>openedBy);?>openedDate;?>ticket->printAssignedHtml($ticket, $users);?>ticket->buildOperateBrowseMenu($ticket->id);?>
    + +
    + +
    +getModuleRoot() . 'common/view/footer.html.php';?> diff --git a/module/my/view/todo.html.php b/module/my/view/todo.html.php index 22533a65a5..d8d0dbc992 100644 --- a/module/my/view/todo.html.php +++ b/module/my/view/todo.html.php @@ -56,6 +56,10 @@ +
    @@ -67,7 +71,7 @@

    -
    + idAB);?> - todo->date);?> - todo->type);?> + todo->name);?> app->clientLang == 'en' ? "style='width:80px'" : '';?> title=todo->pri;?>> priAB);?> - todo->name);?> + todo->date);?> + todo->status);?> + todo->type);?> + todo->assignedTo);?> + + todo->assignedBy);?> + todo->beginAB);?> todo->endAB);?> - todo->status);?> - actions;?> + actions;?> - + status == 'wait') $waitCount ++;?> + status == 'doing') $doingCount ++;?> +
    @@ -111,14 +121,18 @@ id?> - date == '2030-01-01' ? $lang->todo->periods['future'] : $todo->date;?> - todo->typeList, $todo->type, '');?> - pri;?>' title='todo->priList, $todo->pri, $todo->pri);?>'>todo->priList, $todo->pri)?> createLink('todo', 'view', "id=$todo->id&from=my", '', true), $todo->name, '', "data-toggle='modal' data-width='80%' data-type='iframe' data-title='" . $lang->todo->view . "' data-icon='check'");?> + pri;?>' title='todo->priList, $todo->pri, $todo->pri);?>'>todo->priList, $todo->pri)?> + date == '2030-01-01' ? $lang->todo->periods['future'] : $todo->date;?> + todo->statusList[$todo->status];?> + todo->typeList, $todo->type, '');?> + assignedTo);?> + + assignedBy);?> + begin;?> end;?> - todo->statusList[$todo->status];?> id", $todo, 'list', 'play', 'hiddenwin'); @@ -184,10 +198,13 @@ } ?>
    +
    todo->summary, count($todos), $waitCount, $doingCount);?>
    show('right', 'pagerjs');?>
    +todo->summary, count($todos), $waitCount, $doingCount));?> +todo->checkedSummary);?> diff --git a/module/personnel/view/accessible.html.php b/module/personnel/view/accessible.html.php index ba5ef9ae03..1dfe1b58aa 100644 --- a/module/personnel/view/accessible.html.php +++ b/module/personnel/view/accessible.html.php @@ -37,10 +37,10 @@ js::set('deptID', $deptID); idAB;?> - personnel->department;?> personnel->realName;?> - personnel->userName;?> + personnel->department;?> personnel->job;?> + personnel->userName;?> personnel->genders;?> @@ -48,10 +48,10 @@ js::set('deptID', $deptID); id;?> - dept);?> realname;?> - account;?> + dept);?> user->roleList, $personnel->role, '');?> + account;?> user->genderList, $personnel->gender, '');?> diff --git a/module/port/model.php b/module/port/model.php index c9978770dc..207c062800 100644 --- a/module/port/model.php +++ b/module/port/model.php @@ -448,7 +448,15 @@ class portModel extends model foreach($sysDataFields as $field) { $dataList[$field] = $this->loadModel($field)->getPairs(); - if($field == 'user') $dataList[$field] = $this->loadModel($field)->getPairs('noclosed|nodeleted|noletter'); + if($field == 'user') + { + $dataList[$field] = $this->loadModel($field)->getPairs('noclosed|nodeleted|noletter'); + unset($dataList[$field]['']); + if(!in_array(strtolower($this->app->methodName) ,array('ajaxgettbody','ajaxgetoptions','showimport'))) + { + foreach($dataList[$field] as $key => $value) $dataList[$field][$key] = $value . "(#$key)"; + } + } } return $dataList; @@ -1377,8 +1385,11 @@ class portModel extends model elseif($control == 'hidden') $html .= html::hidden("$name", $selected); - elseif($control == 'textarea') $html .= '' . html::textarea("$name", $selected, "class='form-control' cols='50' rows='1'") . ''; - + elseif($control == 'textarea') + { + if($model == 'bug' and $field == 'steps') $selected = str_replace("\n\n\n\n\n\n", '', $selected); + $html .= '' . html::textarea("$name", $selected, "class='form-control' cols='50' rows='1'") . ''; + } elseif($field == 'stepDesc' or $field == 'stepExpect') { $stepDesc = $this->process4Testcase($field, $tmpList, $row); diff --git a/module/port/view/footer.html.php b/module/port/view/footer.html.php index 38c6c2541d..6281292949 100644 --- a/module/port/view/footer.html.php +++ b/module/port/view/footer.html.php @@ -5,7 +5,7 @@ $.get(createLink('port', 'ajaxGetTbody','model=&lastID=0&pag $('#showData > tbody').append(data); if($('#showData tbody').find('tr').hasClass('showmore') === false) $('#showData tfoot').removeClass('hidden'); $('#showData tbody').find('.picker-select').picker({chosenMode: true}); - $('.form-date').datetimepicker('update'); + $('.form-date').datetimepicker({minView: 2, format: "yyyy-mm-dd"}); $('.form-datetime').datetimepicker('update'); $('#showData > tbody').removeClass('load-indicator loading'); }) @@ -37,7 +37,7 @@ function loadData($showmore) $showmore.after(data); if($('#showData tbody').find('tr').hasClass('showmore') === false) $('#showData tfoot').removeClass('hidden'); $('#showData tbody').find('.picker-select').picker({chosenMode: true}).removeClass('nopicker'); - $('.form-date').datetimepicker('update'); + $('.form-date').datetimepicker({minView: 2, format: "yyyy-mm-dd"}); $('.form-datetime').datetimepicker('update'); }) } diff --git a/module/product/control.php b/module/product/control.php index 66833d346f..65847d39ff 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -73,10 +73,13 @@ class product extends control * @param int $branch * @param int $involved * @param string $orderBy + * @param int $recTotal + * @param int $recPerPage + * @param int $pageID * @access public * @return void */ - public function project($status = 'all', $productID = 0, $branch = '', $involved = 0, $orderBy = 'order_desc') + public function project($status = 'all', $productID = 0, $branch = '', $involved = 0, $orderBy = 'order_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1) { $this->app->loadLang('execution'); $this->loadModel('project'); @@ -87,9 +90,13 @@ class product extends control $this->product->setMenu($productID, $branch); + /* Load pager. */ + $this->app->loadClass('pager', $static = true); + $pager = new pager($recTotal, $recPerPage, $pageID); + /* Get PM id list. */ $accounts = array(); - $projectStats = $this->product->getProjectStatsByProduct($productID, $status, $branch, $involved, $orderBy); + $projectStats = $this->product->getProjectStatsByProduct($productID, $status, $branch, $involved, $orderBy, $pager); $product = $this->product->getByID($productID); $projects = $this->project->getPairsByProgram($product->program, 'all', false, 'order_asc'); @@ -112,6 +119,10 @@ class product extends control $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->view->branchID = $branch; $this->view->branchStatus = $this->loadModel('branch')->getByID($branch, 0, 'status'); + $this->view->recTotal = $recTotal; + $this->view->recPerPage = $recPerPage; + $this->view->pageID = $pageID; + $this->view->pager = $pager; $this->display(); } diff --git a/module/product/css/all.css b/module/product/css/all.css index c059f823c0..630c6a6e36 100644 --- a/module/product/css/all.css +++ b/module/product/css/all.css @@ -35,7 +35,7 @@ #programTree ul > li.has-list:after {width: 14px;} #programTree ul > li.item-meas a.selected {color: #0c64eb;} .side-col {padding-right: 20px; width: 18%;} -#sidebar>.cell {width: 100%;} +#sidebar > .cell {width: 100%;} th.c-name {width: 400px;} th.c-PO {width: 100px;} @@ -44,15 +44,18 @@ th.c-bug {width: 150px;} th.c-plan {width: 45px;} th.c-release {width: 50px;} th.c-actions {width: 50px;} +.c-name {border-left: none !important;} +.icon-cards-view {color: #888fa1;} [lang='en'] .en-wrap-text {white-space: normal; height: 24px; line-height: 1; font-size: 12px;} -#productListForm thead>tr>th, -#productListForm tbody>tr>td {text-align: center; text-overflow: unset!important} -#productListForm thead>tr>th {padding: 0; line-height: 24px;} -#productListForm thead>tr:first-child>th {border-left: 1px solid #ddd;} -#productListForm thead>tr>th.c-checkbox {border-left: none; padding-left: 15px; width: 45px;} -#productListForm tbody>tr>td {padding: 2px 4px;} -#productListForm tbody>tr>td:first-child {text-align: left; padding-left: 15px;} +#productListForm thead > tr > th, +#productListForm tbody > tr > td {text-align: center; text-overflow: unset!important} +#productListForm thead > tr > th {padding: 0; line-height: 24px;} +#productListForm thead > tr:first-child > th {border-left: 1px solid #ddd;} +#productListForm thead > tr > th.c-checkbox {border-left: none; padding-left: 15px; width: 30px;} +#productListForm tbody > tr > td {padding: 2px 4px;} +#productListForm tbody > tr > td:first-child {text-align: left; padding-left: 15px;} +#productListForm tbody > tr > td.table-nest-title {padding-left: 16px; display: flex; align-items: center;} #productListForm th.table-nest-title .nest-has-checkbox {margin-top: 7px; margin-left: 35px;} #productListForm th.table-nest-title .nest-none-checkbox {margin-top: 8px; margin-left: 5px;} #productListForm th.table-nest-title .header {margin-left: 5px;} @@ -61,11 +64,12 @@ th.c-actions {width: 50px;} #productListForm th.table-nest-title .table-nest-toggle {top: 14px; left: auto; right: 10px; opacity: .6;} #productListForm th.table-nest-title .table-nest-toggle::before {position: absolute; top: 0 !important; right: 0; bottom: 0; left: 0;} #productListForm th.table-nest-title .table-nest-toggle:hover {opacity: 1;} -#productListForm .table.has-sort-head thead>tr>th>a:after, -#productListForm .table.has-sort-head thead>tr>th>a:before {top: -3px;} +#productListForm .table.has-sort-head thead > tr > th > a:after, +#productListForm .table.has-sort-head thead > tr > th > a:before {top: -3px;} #productListForm .icon-product:before {content: '\e98f'; width: 22px; height: 22px; background: none; color: rgb(166, 170, 184); top: 0; line-height: 22px; margin-right: 2px; font-size: 14px;} #productTableList td.table-nest-title > span.icon.table-nest-toggle {vertical-align: middle;} -#productList > thead th.table-nest-title.c-name {position: relative; padding-left: 4px !important;} +#productTableList > tr[data-nest-parent] {background: #f8f8f8;} +#productList > thead th.table-nest-title.c-name {position: relative; padding-left: 16px !important;} @media screen and (max-width: 1460px) { @@ -81,7 +85,7 @@ th.c-actions {width: 50px;} @media screen and (max-width: 1250px) { - #productListForm thead>tr>th {font-size: 12px;} + #productListForm thead > tr > th {font-size: 12px;} th.c-requirement {width: 265px;} th.c-story {width: 265px;} [lang^='zh-'] th.c-requirement {width: 220px;} @@ -96,3 +100,5 @@ th.c-actions {width: 50px;} #productTableList .c-manager {padding-left: 14px;} #productTableList .c-manager a {top: 7px; left: 22px;} .checkbox-primary {margin-right: 10px;} +.table-nest-title > a, .table-nest-title > span {padding-left: 2px;} +.table-nest-icon {font-size: 14px; top: 50%;} diff --git a/module/product/css/browse.css b/module/product/css/browse.css index c2a8328f56..16cd40473a 100644 --- a/module/product/css/browse.css +++ b/module/product/css/browse.css @@ -20,8 +20,8 @@ a.removeModule:hover {color: red;} .table-children {border-left: 2px solid #cbd0db; border-right: 2px solid #cbd0db;} .table tbody > tr.table-children.table-child-top {border-top: 2px solid #cbd0db;} .table tbody > tr.table-children.table-child-bottom {border-bottom: 2px solid #cbd0db;} -.table td.has-child > a:not(.story-toggle) {max-width: 90%; max-width: calc(100% - 30px); display: inline-block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} -.table td.has-child > .story-toggle {color: #838a9d; position: relative; top: 1px;} +.table td.has-child > a:not(.story-toggle) {max-width: 90%; max-width: calc(100% - 50px); display: inline-block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} +.table td.has-child > .story-toggle {color: #838a9d; position: relative; top: 1px; left: 2px;} .table td.has-child > .story-toggle:hover {color: #006af1; cursor: pointer;} .table td.has-child > .story-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s; -ms-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -o-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg);} .table td.has-child > .story-toggle > .icon:before {text-align: left;} @@ -40,3 +40,4 @@ a.removeModule:hover {color: red;} #mainMenu .dropdown-menu>li>a>.icon {top: 4px;} #productStoryForm tbody tr td .label {max-width: 100px; text-overflow: unset;} .c-span {margin-left: 19px;} +.btn-toolbar #query span.text{overflow: hidden; width: 52px; vertical-align: middle; margin-right: 1px;} diff --git a/module/product/css/project.css b/module/product/css/project.css index 01e1cd5329..edf6f9fe5c 100644 --- a/module/product/css/project.css +++ b/module/product/css/project.css @@ -4,3 +4,5 @@ td.padding-right {padding-right: 20px !important} .c-program {width: 150px;} +.c-progress {width: 70px;} +[lang^=zh].c-progress {width: 60px;} diff --git a/module/product/css/view.css b/module/product/css/view.css index f8860cc652..71d10b732b 100644 --- a/module/product/css/view.css +++ b/module/product/css/view.css @@ -9,4 +9,3 @@ td.acl {white-space: nowrap;} .c-openedBy ,.c-acl ,.c-prs ,.c-common {width:110px !important;} .c-bugs ,.c-type {width:120px !important;} .c-release {padding-right: 20px !important;} -.c-feedback {padding-right: 20px !important;} diff --git a/module/product/js/browse.js b/module/product/js/browse.js index cbbc03ed83..0a979fd7bb 100644 --- a/module/product/js/browse.js +++ b/module/product/js/browse.js @@ -11,7 +11,7 @@ $(function() var $title = $('#storyList thead th.c-title'); var headerWidth = $('#storyList thead th.c-title a').innerWidth(); var buttonWidth = $('#storyList thead th.c-title button').innerWidth(); - if($title.width() < headerWidth + buttonWidth) $title.width(headerWidth + buttonWidth + 10); + if($title.width() < headerWidth + buttonWidth + 16) $title.width(headerWidth + buttonWidth + 30); }); $('#storyList td.has-child .story-toggle').each(function() diff --git a/module/product/js/project.js b/module/product/js/project.js index ba0df1535d..e150fb18e3 100644 --- a/module/product/js/project.js +++ b/module/product/js/project.js @@ -39,4 +39,3 @@ $(function() }); }); }); - diff --git a/module/product/lang/de.php b/module/product/lang/de.php index 0b6f2d3c81..fffc53120c 100644 --- a/module/product/lang/de.php +++ b/module/product/lang/de.php @@ -214,8 +214,7 @@ $lang->product->noMatched = '"%s" kann nicht gefunden werden.' . $lang->pro $lang->product->featureBar['browse']['allstory'] = $lang->product->allStory; $lang->product->featureBar['browse']['unclosed'] = $lang->product->unclosed; $lang->product->featureBar['browse']['assignedtome'] = $lang->product->assignedToMe; -$lang->product->featureBar['browse']['openedbyme'] = $lang->product->openedByMe; -$lang->product->featureBar['browse']['reviewedbyme'] = $lang->product->reviewedByMe; + $lang->product->featureBar['browse']['reviewbyme'] = $lang->product->reviewByMe; $lang->product->featureBar['browse']['draftstory'] = $lang->product->draftStory; $lang->product->featureBar['browse']['more'] = $lang->more; @@ -224,6 +223,8 @@ $lang->product->featureBar['all']['all'] = $lang->product->allProduct; $lang->product->featureBar['all']['noclosed'] = $lang->product->unclosed; $lang->product->featureBar['all']['closed'] = $lang->product->statusList['closed']; +$lang->product->moreSelects['openedbyme'] = $lang->product->openedByMe; +$lang->product->moreSelects['reviewedbyme'] = $lang->product->reviewedByMe; $lang->product->moreSelects['assignedbyme'] = $lang->product->assignedByMe; $lang->product->moreSelects['closedbyme'] = $lang->product->closedByMe; $lang->product->moreSelects['activestory'] = $lang->product->activeStory; diff --git a/module/product/lang/en.php b/module/product/lang/en.php index 6fbdd044da..e98b630c47 100644 --- a/module/product/lang/en.php +++ b/module/product/lang/en.php @@ -214,8 +214,7 @@ $lang->product->noMatched = '"%s" cannot be found.' . $lang->productCommon; $lang->product->featureBar['browse']['allstory'] = $lang->product->allStory; $lang->product->featureBar['browse']['unclosed'] = $lang->product->unclosed; $lang->product->featureBar['browse']['assignedtome'] = $lang->product->assignedToMe; -$lang->product->featureBar['browse']['openedbyme'] = $lang->product->openedByMe; -$lang->product->featureBar['browse']['reviewedbyme'] = $lang->product->reviewedByMe; + $lang->product->featureBar['browse']['reviewbyme'] = $lang->product->reviewByMe; $lang->product->featureBar['browse']['draftstory'] = $lang->product->draftStory; $lang->product->featureBar['browse']['more'] = $lang->more; @@ -224,6 +223,8 @@ $lang->product->featureBar['all']['all'] = $lang->product->allProduct; $lang->product->featureBar['all']['noclosed'] = $lang->product->unclosed; $lang->product->featureBar['all']['closed'] = $lang->product->statusList['closed']; +$lang->product->moreSelects['openedbyme'] = $lang->product->openedByMe; +$lang->product->moreSelects['reviewedbyme'] = $lang->product->reviewedByMe; $lang->product->moreSelects['assignedbyme'] = $lang->product->assignedByMe; $lang->product->moreSelects['closedbyme'] = $lang->product->closedByMe; $lang->product->moreSelects['activestory'] = $lang->product->activeStory; diff --git a/module/product/lang/fr.php b/module/product/lang/fr.php index bd7f8e0ce0..772ac0c971 100644 --- a/module/product/lang/fr.php +++ b/module/product/lang/fr.php @@ -214,8 +214,7 @@ $lang->product->noMatched = '"%s" cannot be found.' . $lang->productCommon; $lang->product->featureBar['browse']['allstory'] = $lang->product->allStory; $lang->product->featureBar['browse']['unclosed'] = $lang->product->unclosed; $lang->product->featureBar['browse']['assignedtome'] = $lang->product->assignedToMe; -$lang->product->featureBar['browse']['openedbyme'] = $lang->product->openedByMe; -$lang->product->featureBar['browse']['reviewedbyme'] = $lang->product->reviewedByMe; + $lang->product->featureBar['browse']['reviewbyme'] = $lang->product->reviewByMe; $lang->product->featureBar['browse']['draftstory'] = $lang->product->draftStory; $lang->product->featureBar['browse']['more'] = $lang->more; @@ -224,6 +223,8 @@ $lang->product->featureBar['all']['all'] = $lang->product->allProduct; $lang->product->featureBar['all']['noclosed'] = $lang->product->unclosed; $lang->product->featureBar['all']['closed'] = $lang->product->statusList['closed']; +$lang->product->moreSelects['openedbyme'] = $lang->product->openedByMe; +$lang->product->moreSelects['reviewedbyme'] = $lang->product->reviewedByMe; $lang->product->moreSelects['assignedbyme'] = $lang->product->assignedByMe; $lang->product->moreSelects['closedbyme'] = $lang->product->closedByMe; $lang->product->moreSelects['activestory'] = $lang->product->activeStory; diff --git a/module/product/lang/zh-cn.php b/module/product/lang/zh-cn.php index 46dad4abdc..bf05079fce 100644 --- a/module/product/lang/zh-cn.php +++ b/module/product/lang/zh-cn.php @@ -215,7 +215,6 @@ $lang->product->featureBar['browse']['allstory'] = '全部'; $lang->product->featureBar['browse']['unclosed'] = $lang->product->unclosed; $lang->product->featureBar['browse']['assignedtome'] = $lang->product->assignedToMe; $lang->product->featureBar['browse']['openedbyme'] = $lang->product->openedByMe; -$lang->product->featureBar['browse']['reviewedbyme'] = $lang->product->reviewedByMe; $lang->product->featureBar['browse']['reviewbyme'] = $lang->product->reviewByMe; $lang->product->featureBar['browse']['draftstory'] = $lang->product->draftStory; $lang->product->featureBar['browse']['more'] = $lang->more; @@ -224,6 +223,8 @@ $lang->product->featureBar['all']['all'] = '全部' . $lang->productCommon; $lang->product->featureBar['all']['noclosed'] = $lang->product->unclosed; $lang->product->featureBar['all']['closed'] = $lang->product->statusList['closed']; + +$lang->product->moreSelects['reviewedbyme'] = $lang->product->reviewedByMe; $lang->product->moreSelects['assignedbyme'] = $lang->product->assignedByMe; $lang->product->moreSelects['closedbyme'] = $lang->product->closedByMe; $lang->product->moreSelects['activestory'] = $lang->product->activeStory; diff --git a/module/product/model.php b/module/product/model.php index 1999ef3c02..9b9e565835 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -76,7 +76,7 @@ class productModel extends model public function select($products, $productID, $currentModule, $currentMethod, $extra = '', $branch = '', $module = 0, $moduleType = '', $withBranch = true) { $isQaModule = (strpos(',project,execution,', ",{$this->app->tab},") !== false and strpos(',bug,testcase,testtask,ajaxselectstory,', ",{$this->app->rawMethod},") !== false and isset($products[0])) ? true : false; - + $isFeedbackModel = strpos(',feedback,', ",{$this->app->tab},") !== false ? true : false; if(count($products) <= 2 and isset($products[0])) { unset($products[0]); @@ -86,7 +86,7 @@ class productModel extends model if(empty($products)) return; $this->app->loadLang('product'); - if(!$isQaModule and !$productID) + if(!$isQaModule and !$productID and !$isFeedbackModel) { unset($this->lang->product->menu->settings['subMenu']->branch); return; @@ -109,12 +109,21 @@ class productModel extends model $currentProduct->name = $products[$productID]; $currentProduct->type = 'normal'; } + if($isFeedbackModel and !$productID) + { + $currentProduct = new stdclass(); + $currentProduct->name = isset($products[$productID]) ? $products[$productID] : current($products); + $currentProduct->type = 'normal'; + } $this->session->set('currentProductType', $currentProduct->type); $output = ''; if(!empty($products)) { - $dropMenuLink = helper::createLink($isQaModule ? 'bug' : 'product', 'ajaxGetDropMenu', "objectID=$productID&module=$currentModule&method=$currentMethod&extra=$extra"); + $moduleName = 'product'; + if($isQaModule) $moduleName = 'bug'; + if($isFeedbackModel) $moduleName = 'feedback'; + $dropMenuLink = helper::createLink($moduleName, 'ajaxGetDropMenu', "objectID=$productID&module=$currentModule&method=$currentMethod&extra=$extra"); $output = "
    "; @@ -1183,15 +1192,16 @@ class productModel extends model /** * Get project list by product. * - * @param int $productID - * @param string $browseType - * @param int $branch - * @param int $involved - * @param string $orderBy + * @param int $productID + * @param string $browseType + * @param int $branch + * @param int $involved + * @param string $orderBy + * @param object $pager * @access public * @return array */ - public function getProjectListByProduct($productID, $browseType = 'all', $branch = 0, $involved = 0, $orderBy = 'order_desc') + public function getProjectListByProduct($productID, $browseType = 'all', $branch = 0, $involved = 0, $orderBy = 'order_desc', $pager = null) { $projectList = $this->dao->select('t2.*')->from(TABLE_PROJECTPRODUCT)->alias('t1') ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id') @@ -1210,6 +1220,7 @@ class productModel extends model ->beginIF($branch !== '' and $branch !== 'all')->andWhere('t1.branch')->in($branch)->fi() ->andWhere('t2.deleted')->eq('0') ->orderBy($orderBy) + ->page($pager, 't2.id') ->fetchAll('id'); /* Determine how to display the name of the program. */ @@ -1231,12 +1242,13 @@ class productModel extends model * @param int $branch * @param int $involved * @param string $orderBy + * @param object $pager * @access public * @return array */ - public function getProjectStatsByProduct($productID, $browseType = 'all', $branch = 0, $involved = 0, $orderBy = 'order_desc') + public function getProjectStatsByProduct($productID, $browseType = 'all', $branch = 0, $involved = 0, $orderBy = 'order_desc', $pager = null) { - $projects = $this->getProjectListByProduct($productID, $browseType, $branch, $involved, $orderBy); + $projects = $this->getProjectListByProduct($productID, $browseType, $branch, $involved, $orderBy, $pager); if(empty($projects)) return array(); $projectKeys = array_keys($projects); @@ -1332,7 +1344,7 @@ class productModel extends model public function getExecutionPairsByProduct($productID, $branch = 0, $orderBy = 'id_asc', $projectID = 0, $mode = '') { if(empty($productID)) return array(); - if(empty($projectID) or $this->config->systemMode == 'classic') return $this->getAllExecutionPairsByProduct($productID, $branch); + if(empty($projectID) or $this->config->systemMode == 'classic') return $this->getAllExecutionPairsByProduct($productID, $branch, '', $mode); $project = $this->loadModel('project')->getByID($projectID); $orderBy = $project->model == 'waterfall' ? 'begin_asc,id_asc' : 'begin_desc,id_desc'; @@ -1387,13 +1399,14 @@ class productModel extends model * @param int $productID * @param int $branch * @param int $projectID + * @param string $mode stagefilter or empty * @access public * @return array */ - public function getAllExecutionPairsByProduct($productID, $branch = 0, $projectID = 0) + public function getAllExecutionPairsByProduct($productID, $branch = 0, $projectID = 0, $mode = '') { if(empty($productID)) return array(); - $executions = $this->dao->select('t2.id,t2.project,t2.name,t2.grade,t2.parent')->from(TABLE_PROJECTPRODUCT)->alias('t1') + $executions = $this->dao->select('t2.id,t2.project,t2.name,t2.grade,t2.parent,t2.attribute')->from(TABLE_PROJECTPRODUCT)->alias('t1') ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id') ->where('t1.product')->eq($productID) ->andWhere('t2.type')->in('stage,sprint,kanban') @@ -1426,8 +1439,10 @@ class productModel extends model $executionPairs = $executionPairs + $execution->children; continue; } - if($this->config->systemMode == 'new' and isset($projectPairs[$execution->project])) $executionPairs[$execution->id] = $projectPairs[$execution->project] . '/' . $execution->name; - if($this->config->systemMode == 'classic') $executionPairs[$execution->id] = $execution->name; + /* Some stage of waterfall not need.*/ + if(strpos($mode, 'stagefilter') !== false and in_array($execution->attribute, array('request', 'design', 'review'))) continue; + if($this->config->systemMode == 'new' and isset($projectPairs[$execution->project])) $executionPairs[$execution->id] = $projectPairs[$execution->project] . '/' . $execution->name; + if($this->config->systemMode == 'classic') $executionPairs[$execution->id] = $execution->name; } return $executionPairs; @@ -2299,6 +2314,14 @@ class productModel extends model $objectID = $module == 'project' ? 'projectID' : 'executionID'; return helper::createLink($module, $method, "$objectID=$extra&productID=%s"); } + elseif($module == 'feedback') + { + return helper::createLink('feedback', 'admin', "browseType=byProduct&productID=%s"); + } + elseif($module == 'ticket') + { + return helper::createLink('ticket', 'browse', "browseType=byProduct&productID=%s"); + } return $link; } diff --git a/module/product/view/ajaxgetdropmenu.html.php b/module/product/view/ajaxgetdropmenu.html.php index 81b430e4d9..e6d20e7f80 100644 --- a/module/product/view/ajaxgetdropmenu.html.php +++ b/module/product/view/ajaxgetdropmenu.html.php @@ -29,6 +29,7 @@ div#closed {width: 90px; height: 25px; line-height: 25px; background-color: #ddd; color: #3c495c; text-align: center; margin-left: 15px; border-radius: 2px;} #gray-line {width: 230px; height: 1px; margin-left: 10px; margin-bottom:2px; background-color: #ddd;} #swapper li >.selected {color: #0c64eb!important;background: #e9f2fb!important;} +#dropMenu .col-footer .selected{color: #2e7fff!important;background: #e6f0ff!important; padding: 1px 10px;border-radius: 4px;} '; ' . $lang->product->all, '', 'class="not-list-item"'); ?> ' . $lang->project->all, '', 'class="not-list-item"'); ?> product->closed?> + app->tab == 'feedback'):?> + + + product->all, '', "class='not-list-item pull-left toggle-left-col $selected'"); ?> + + + product->all, '', "class='not-list-item pull-left toggle-left-col $selected'"); ?> + +
    diff --git a/module/product/view/all.html.php b/module/product/view/all.html.php index 6a8079332a..857b56e257 100644 --- a/module/product/view/all.html.php +++ b/module/product/view/all.html.php @@ -103,7 +103,8 @@
    - + + diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index b0de892804..ca7d6172d0 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -41,7 +41,6 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : ''; .btn-group a i.icon-plus, .btn-group a i.icon-link {font-size: 16px;} .btn-group a.btn-secondary, .btn-group a.btn-primary {border-right: 1px solid rgba(255,255,255,0.2);} .btn-group button.dropdown-toggle.btn-secondary, .btn-group button.dropdown-toggle.btn-primary {padding:6px;} - #productStoryForm table tbody tr td.c-actions {overflow: visible;} #productStoryForm table tbody tr td.c-actions .dividing-line {width: 1px; height: 16px; display: inline-block; vertical-align: middle; background: #F4F5F7; margin: 0 4px 0 0;} diff --git a/module/product/view/project.html.php b/module/product/view/project.html.php index c20a70ebfb..ad6e28023b 100644 --- a/module/product/view/project.html.php +++ b/module/product/view/project.html.php @@ -62,8 +62,18 @@ - + + status == 'wait') $waitCount ++;?> + status == 'doing') $doingCount ++;?> + status == 'suspended') $suspendedCount ++;?> + status == 'closed') $closedCount ++;?> id);?> systemMode == 'new'):?> @@ -107,6 +117,10 @@ + diff --git a/module/productplan/config.php b/module/productplan/config.php index 9e7250f7e0..4dddb53677 100644 --- a/module/productplan/config.php +++ b/module/productplan/config.php @@ -19,6 +19,7 @@ $config->productplan->future = '2030-01-01'; global $app, $lang; $app->loadLang('productplan'); $config->productplan->search['module'] = 'productplan'; +$config->productplan->browse = new stdclass(); $config->productplan->search['fields']['id'] = $lang->productplan->id; $config->productplan->search['fields']['title'] = $lang->productplan->title; diff --git a/module/productplan/control.php b/module/productplan/control.php index 559c0d5c85..a7c42d0fbd 100644 --- a/module/productplan/control.php +++ b/module/productplan/control.php @@ -440,10 +440,12 @@ class productplan extends control if($plan->branch > 0) $this->view->branchStatus = $this->loadModel('branch')->getById($plan->branch, $plan->product, 'status'); + $storyIdList = array(); $modulePairs = $this->loadModel('tree')->getOptionMenu($plan->product, 'story', 0, 'all'); foreach($planStories as $story) { if(!isset($modulePairs[$story->module])) $modulePairs += $this->tree->getModulesName($story->module); + $storyIdList[] = $story->id; } $this->loadModel('datatable'); @@ -466,6 +468,7 @@ class productplan extends control $this->view->storyPager = $storyPager; $this->view->bugPager = $bugPager; $this->view->canBeChanged = $canBeChanged; + $this->view->storyCases = $storyCases = $this->loadModel('testcase')->getStoryCaseCounts($storyIdList);; if($this->app->getViewType() == 'json') { diff --git a/module/productplan/css/browse.css b/module/productplan/css/browse.css index cb52c6ac17..db957be9a4 100644 --- a/module/productplan/css/browse.css +++ b/module/productplan/css/browse.css @@ -10,7 +10,7 @@ td.c-branch {overflow: hidden; text-align: left !important; text-overflow: ellip .table td.has-child > .plan-name > .task-toggle:hover {color: #006af1; cursor: pointer;} .table td.has-child > .plan-name > .task-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s; -ms-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -o-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg);} .table td.has-child > .plan-name > .task-toggle > .icon:before {text-align: left;} -.table td.has-child > .plan-name > .task-toggle.collapsed {top: 2px;} +.table td.has-child > .plan-name > .task-toggle.collapsed {top: 0;} .table td.has-child > .plan-name > .task-toggle.collapsed > .icon {-ms-transform: rotate(90deg); -moz-transform: rotate(90deg); -o-transform: rotate(90deg); -webkit-transform: rotate(90deg); transform: rotate(90deg);} .main-table tbody > tr.table-children > td:first-child::before {width: 3px;} @-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;};} @@ -35,6 +35,7 @@ td.c-branch {overflow: hidden; text-align: left !important; text-overflow: ellip .panel-actions {position: relative; padding: 0 0; padding-top: 1px;} .icon-list {padding-left: 7px;} .icon-kanban {padding-left: 7px; font-size: 16px;} +#productplanList thead th.c-title {width: 100%;} #productplanList .c-actions {width: 265px;} #productplanList .c-actions .btn+.btn {margin-left: -1px;} #productplanList .c-actions .btn {display: block; float: left;} diff --git a/module/productplan/js/browse.js b/module/productplan/js/browse.js index 2d45757f4d..f0e17ba4fd 100644 --- a/module/productplan/js/browse.js +++ b/module/productplan/js/browse.js @@ -11,6 +11,7 @@ $(document).on('click', '.task-toggle', function(e) $(function() { + if(viewType != 'kanban') toggleFold('#productplanForm', unfoldPlans, productID, 'productplan'); $('#productplanList tbody tr').each(function() { var $content = $(this).find('td.content'); diff --git a/module/productplan/js/view.js b/module/productplan/js/view.js index 012a26ee42..1658a7a071 100644 --- a/module/productplan/js/view.js +++ b/module/productplan/js/view.js @@ -84,4 +84,46 @@ $(function() history.pushState({}, 0, createLink('productplan', 'view', "planID=" + planID + '&type=story&orderBy=' + order)); }); }); + + $('.table-story').table( + { + statisticCreator: function(table) + { + var $checkedRows = table.getTable().find(table.isDataTable ? '.datatable-row-left.checked' : 'tbody>tr.checked'); + var $originTable = table.isDataTable ? table.$.find('.datatable-origin') : null; + var checkedTotal = $checkedRows.length; + if(!checkedTotal) return; + + var checkedEstimate = 0; + var checkedCase = 0; + var rateCount = checkedTotal; + $checkedRows.each(function() + { + var $row = $(this); + if($originTable) + { + $row = $originTable.find('tbody>tr[data-id="' + $row.data('id') + '"]'); + } + var data = $row.data(); + checkedEstimate += data.estimate; + + if(data.cases > 0) + { + checkedCase += 1; + } + else if(data.children != undefined && data.children > 0) + { + rateCount -= 1; + } + }); + + var rate = '0%'; + if(rateCount) rate = Math.round(checkedCase / rateCount * 100) + '%'; + + if(checkedTotal == 0) return storySummary; + return checkedSummary.replace('%total%', checkedTotal) + .replace('%estimate%', checkedEstimate.toFixed(1)) + .replace('%rate%', rate); + } + }); }); diff --git a/module/productplan/view/browsebylist.html.php b/module/productplan/view/browsebylist.html.php index 69ab8790ab..4321c91693 100644 --- a/module/productplan/view/browsebylist.html.php +++ b/module/productplan/view/browsebylist.html.php @@ -9,6 +9,14 @@ * @link https://www.zentao.net */ ?> +productplan->browse->unfoldPlans) ? json_decode($config->productplan->browse->unfoldPlans, true) : array();?> + + + - diff --git a/module/project/view/testtask.html.php b/module/project/view/testtask.html.php index bae7bc849e..5e28abe0af 100644 --- a/module/project/view/testtask.html.php +++ b/module/project/view/testtask.html.php @@ -60,13 +60,23 @@ testtask->begin);?> testtask->end);?> statusAB);?> - text-center'>actions;?> + actions;?> + $productTasks):?> + status == 'wait') $waitCount ++;?> + status == 'doing') $testingCount ++;?> + status == 'blocked') $blockedCount ++;?> + status == 'done') $doneCount ++;?> > @@ -92,7 +102,7 @@ { common::printIcon('testtask', 'cases', "taskID=$task->id", $task, 'list', 'sitemap'); common::printIcon('testtask', 'linkCase', "taskID=$task->id", $task, 'list', 'link'); - if(common::hasPriv('execution', 'testreport') and $project->model == 'scrum') + if(common::hasPriv('execution', 'testreport')) { echo html::a($this->createLink('execution', 'testreport', "executionID=$task->execution&objectType=execution&extra=$task->id"), '', '', 'class="btn " title="' . $lang->testreport->browse . '" data-app="project"'); } @@ -117,6 +127,7 @@ diff --git a/module/projectrelease/control.php b/module/projectrelease/control.php index 993f8fab5c..2429bb101a 100644 --- a/module/projectrelease/control.php +++ b/module/projectrelease/control.php @@ -61,10 +61,13 @@ class projectrelease extends control * @param int $executionID * @param string $type * @param string $orderBy + * @param int $recTotal + * @param int $recPerPage + * @param int $pageID * @access public * @return void */ - public function browse($projectID = 0, $executionID = 0, $type = 'all', $orderBy = 't1.date_desc') + public function browse($projectID = 0, $executionID = 0, $type = 'all', $orderBy = 't1.date_desc', $recTotal = 0, $recPerPage = 15, $pageID = 1) { $this->session->set('releaseList', $this->app->getURI(true), 'project'); $project = $this->project->getById($projectID); @@ -75,16 +78,24 @@ class projectrelease extends control $objectName = isset($project->name) ? $project->name : $execution->name; + /* Load pager. */ + $this->app->loadClass('pager', $static = true); + $pager = new pager($recTotal, $recPerPage, $pageID); + $this->view->title = $objectName . $this->lang->colon . $this->lang->release->browse; $this->view->position[] = $this->lang->release->browse; $this->view->execution = $execution; $this->view->project = $project; $this->view->products = $this->loadModel('product')->getProducts($projectID); - $this->view->releases = $this->projectrelease->getList($projectID, $type, $orderBy); + $this->view->releases = $this->projectrelease->getList($projectID, $type, $orderBy, $pager); $this->view->projectID = $projectID; $this->view->executionID = $executionID; $this->view->type = $type; $this->view->from = $this->app->tab; + $this->view->recTotal = $recTotal; + $this->view->recPerPage = $recPerPage; + $this->view->pageID = $pageID; + $this->view->pager = $pager; $this->display(); } diff --git a/module/projectrelease/js/browse.js b/module/projectrelease/js/browse.js new file mode 100644 index 0000000000..215487f727 --- /dev/null +++ b/module/projectrelease/js/browse.js @@ -0,0 +1,26 @@ +$(function() +{ + /* Update table summary text. */ + var $rows = $('#releaseList').find('tbody>tr'); + + var normal = 0; + var terminate = 0; + $rows.each(function() + { + var $row = $(this); + var data = $row.data(); + if(data.type === 'normal') normal++; + if(data.type === 'terminate') terminate++; + }); + + var summary = ''; + if(type != 'all') + { + summary = pageSummary.replace('%s', $rows.length); + } + else + { + summary = pageAllSummary.replace('%total%', $rows.length).replace('%normal%', normal).replace('%terminate%', terminate); + } + $('.table-statistic').html(summary); +}); diff --git a/module/projectrelease/model.php b/module/projectrelease/model.php index ba8ff55508..a976dbebc6 100644 --- a/module/projectrelease/model.php +++ b/module/projectrelease/model.php @@ -49,7 +49,7 @@ class projectreleaseModel extends model * @access public * @return array */ - public function getList($projectID, $type = 'all', $orderBy = 't1.date_desc') + public function getList($projectID, $type = 'all', $orderBy = 't1.date_desc', $pager = null) { return $this->dao->select('t1.*, t2.name as productName, t3.id as buildID, t3.name as buildName, t3.execution, t4.name as executionName') ->from(TABLE_RELEASE)->alias('t1') @@ -61,6 +61,7 @@ class projectreleaseModel extends model ->beginIF($type == 'review')->andWhere("FIND_IN_SET('{$this->app->user->account}', t1.reviewers)")->fi() ->andWhere('t1.deleted')->eq(0) ->orderBy($orderBy) + ->page($pager) ->fetchAll(); } diff --git a/module/projectrelease/view/browse.html.php b/module/projectrelease/view/browse.html.php index f748053199..370c1c2c4c 100644 --- a/module/projectrelease/view/browse.html.php +++ b/module/projectrelease/view/browse.html.php @@ -13,6 +13,9 @@ release->confirmDelete)?> +release->pageAllSummary)?> +release->pageSummary)?> +