Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms into zentaopms_284
This commit is contained in:
@@ -78,6 +78,9 @@ class hostHeartbeatEntry extends baseEntry
|
||||
'status' => $vm->status,
|
||||
'extranet' => $vm->ip,
|
||||
);
|
||||
|
||||
if(!$vm->sshPortOnHost) unset($vmData['ssh']);
|
||||
|
||||
if($heartbeat > 0) $vmData['heartbeat'] = date("Y-m-d H:i:s", $heartbeat);
|
||||
|
||||
$this->dao->update(TABLE_ZAHOST)->data($vmData)->where('mac')->eq($vm->macAddress)->exec();
|
||||
|
||||
@@ -23,7 +23,7 @@ class hostSubmitEntry extends baseEntry
|
||||
/* Check authorize. */
|
||||
$header = getallheaders();
|
||||
$token = isset($header['Authorization']) ? substr($header['Authorization'], 7) : '';
|
||||
// if(!$token) return $this->sendError(401, 'Unauthorized');
|
||||
if(!$token) return $this->sendError(401, 'Unauthorized');
|
||||
|
||||
$now = helper::now();
|
||||
|
||||
@@ -38,7 +38,16 @@ class hostSubmitEntry extends baseEntry
|
||||
->andWhere('tokenTime')->gt($now)->fi()
|
||||
->fetch('id');
|
||||
|
||||
// if(!$id) return $this->sendError(400, 'Secret error.');
|
||||
if(!$id) return $this->sendError(400, 'Secret error.');
|
||||
|
||||
$imageInfo = $this->dao->select('`status`,`from`')->from(TABLE_IMAGE)
|
||||
->where('id')->eq($task)
|
||||
->fetch();
|
||||
if(empty($imageInfo)) return $this->sendSuccess(200, 'success');
|
||||
if($imageInfo->from == 'snapshot' && $imageInfo->status == 'restoring')
|
||||
{
|
||||
$image->status = $image->status == 'completed' ? 'restore_completed' : 'restore_failed';
|
||||
}
|
||||
|
||||
$this->dao->update(TABLE_IMAGE)->data($image)->where("id")->eq($task)->exec();
|
||||
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
|
||||
if(!function_exists('getWebRoot')){function getWebRoot(){}}
|
||||
|
||||
/* 基本设置。Basic settings. */
|
||||
$config->version = '18.0'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
|
||||
$config->version = '18.1'; // 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.
|
||||
|
||||
+3
-1
@@ -155,6 +155,7 @@ $filter->testsuite->default = new stdclass();
|
||||
$filter->testsuite->library = new stdclass();
|
||||
$filter->testtask->default = new stdclass();
|
||||
$filter->testtask->browse = new stdclass();
|
||||
$filter->testtask->create = new stdclass();
|
||||
$filter->testtask->cases = new stdclass();
|
||||
$filter->todo->export = new stdclass();
|
||||
$filter->upgrade->license = new stdclass();
|
||||
@@ -343,6 +344,7 @@ $filter->testsuite->library->cookie['libCaseModule'] = 'int';
|
||||
$filter->testsuite->library->cookie['preCaseLibID'] = 'int';
|
||||
|
||||
$filter->testtask->browse->cookie['preBranch'] = 'reg::word';
|
||||
$filter->testtask->create->cookie['preBranch'] = 'reg::word';
|
||||
$filter->testtask->cases->cookie['preTaskID'] = 'int';
|
||||
$filter->testtask->cases->cookie['taskCaseModule'] = 'int';
|
||||
$filter->testtask->default->cookie['lastProduct'] = 'int';
|
||||
@@ -368,7 +370,7 @@ $filter->doc->showfiles->get['recPerPage'] = 'int';
|
||||
$filter->doc->showfiles->get['recTotal'] = 'int';
|
||||
$filter->doc->showfiles->get['title'] = 'reg::any';
|
||||
|
||||
$filter->file->download->get['charset'] = 'reg::lang';
|
||||
$filter->file->download->get['charset'] = 'reg::any';
|
||||
|
||||
$filter->mail->batchdelete->get['idList'] = 'reg::idList';
|
||||
|
||||
|
||||
@@ -227,7 +227,7 @@ $config->openMethods[] = 'doc.createbasicinfo';
|
||||
$config->openMethods[] = 'project.createguide';
|
||||
$config->openMethods[] = 'task.editteam';
|
||||
$config->openMethods[] = 'feedback.mergeproductmodule';
|
||||
$config->openMethods[] = 'zahost.introduction';
|
||||
$config->openMethods[] = 'zanode.nodeList';
|
||||
|
||||
$config->openModules = array();
|
||||
$config->openModules[] = 'install';
|
||||
@@ -404,8 +404,9 @@ $config->objectTables['stage'] = TABLE_STAGE;
|
||||
$config->objectTables['apistruct'] = TABLE_APISTRUCT;
|
||||
$config->objectTables['repo'] = TABLE_REPO;
|
||||
$config->objectTables['dataview'] = TABLE_DATAVIEW;
|
||||
$config->objectTables['zahost'] = TABLE_ZAHOST;
|
||||
$config->objectTables['automation'] = TABLE_AUTOMATION;
|
||||
$config->objectTables['zahost'] = TABLE_ZAHOST;
|
||||
$config->objectTables['automation'] = TABLE_AUTOMATION;
|
||||
$config->objectTables['stepResult'] = TABLE_TESTRUN;
|
||||
|
||||
$config->newFeatures = array('introduction', 'tutorial', 'youngBlueTheme', 'visions');
|
||||
$config->disabledFeatures = '';
|
||||
|
||||
@@ -134,7 +134,7 @@ CREATE TABLE `zt_apistruct` (
|
||||
`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 '',
|
||||
`desc` mediumtext NOT NULL,
|
||||
`version` smallint(5) unsigned NOT NULL DEFAULT '0',
|
||||
`attribute` text,
|
||||
`addedBy` varchar(30) NOT NULL DEFAULT '0',
|
||||
@@ -1239,7 +1239,7 @@ CREATE TABLE `zt_im_chat` (
|
||||
`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 '',
|
||||
`mergedChats` text NOT NULL,
|
||||
`adminInvite` enum('0','1') NOT NULL DEFAULT '0',
|
||||
`avatar` text NOT NULL DEFAULT '',
|
||||
`archiveDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,9 @@
|
||||
ALTER TABLE `zt_host` ADD `type` varchar(30) NOT NULL DEFAULT 'normal' AFTER `admin`;
|
||||
ALTER TABLE `zt_host` ADD `secret` varchar(50) NOT NULL DEFAULT '' AFTER `type`;
|
||||
ALTER TABLE `zt_host` ADD `token` varchar(50) NOT NULL DEFAULT '' AFTER `secret`;
|
||||
ALTER TABLE `zt_host` ADD `expiredDate` datetime NOT NULL AFTER `token`;
|
||||
ALTER TABLE `zt_host` ADD `virtualSoftware` varchar(30) NOT NULL DEFAULT '' AFTER `expiredDate`;
|
||||
|
||||
ALTER TABLE `zt_host`
|
||||
DROP COLUMN `cabinet`,
|
||||
DROP COLUMN `cpuRate`,
|
||||
@@ -58,7 +64,6 @@ h.`createdDate` = a.`createdDate`,
|
||||
h.`editedBy` = a.`editedBy`,
|
||||
h.`editedDate` = a.`editedDate`,
|
||||
h.`group` = a.`group`,
|
||||
h.`type` = a.`type`,
|
||||
h.`deleted` = a.`deleted`
|
||||
WHERE
|
||||
h.`assetID` = a.`id`;
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
ALTER TABLE `zt_image` ADD `localName` VARCHAR(64) NOT NULL AFTER `name`;
|
||||
ALTER TABLE `zt_image` ADD `restoreDate` datetime NOT NULL AFTER `createdDate`;
|
||||
|
||||
ALTER TABLE `zt_ticket` MODIFY `resolution` text NOT NULL;
|
||||
|
||||
ALTER TABLE `zt_chart` CHANGE `fields` `fields` mediumtext NULL AFTER `filters`;
|
||||
REPLACE INTO `zt_chart` (`id`, `name`, `dimension`, `type`, `group`, `dataset`, `desc`, `settings`, `filters`, `fields`, `sql`, `builtin`, `objects`, `createdBy`, `createdDate`, `editedBy`, `editedDate`, `deleted`) VALUES
|
||||
(1105, '年度排行-个人-创建需求条目榜', 1, 'bar', 0, '', '', '{\"xaxis\":[{\"field\":\"realname\",\"name\":\"用户\"}],\"yaxis\":[{\"type\":\"value\",\"field\":\"count\",\"agg\":\"value\",\"name\":\"创建需求条目\",\"valOrAgg\":\"value\"}]}', '', NULL, 'SELECT YEAR(t1.openedDate) AS `year`,t2.realname,count(1) AS count\r\nFROM zt_story AS t1\r\nLEFT JOIN zt_user AS t2 ON t1.openedBy=t2.account\r\nWHERE t1.deleted = \'0\' AND t2.id IS NOT NULL\r\nGROUP BY `year`,t2.account ORDER BY `year`,count DESC', 1, '', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', 0);
|
||||
+33
-17
@@ -4081,23 +4081,39 @@ REPLACE INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`) V
|
||||
('all', 'process', 'classify', 'engineering', '工程支持', '1'),
|
||||
('all', 'process', 'classify', 'project', '项目管理', '1');
|
||||
|
||||
REPLACE INTO `zt_process` (`id`, `name`, `type`, `abbr`, `desc`, `assignedTo`, `status`, `order`, `createdBy`, `createdDate`, `editedBy`, `editedDate`, `assignedBy`, `assignedDate`, `deleted`) VALUES
|
||||
(11,'立项管理','project','PIM','','','',55,'admin','2020-01-09 10:29:55','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(12,'项目规划','project','PP','','','',60,'admin','2020-01-09 10:31:16','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(13,'项目监控','project','PMC','','','',65,'admin','2020-01-09 10:31:16','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(14,'风险管理','project','RSKM','','','',70,'admin','2020-01-09 10:31:16','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(15,'结项管理','project','PCM','','','',75,'admin','2020-01-09 10:31:16','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(16,'量化项目管理','project','QPM','','','',80,'admin','2020-01-09 10:31:16','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(17,'需求开发','engineering','RDM','','','',85,'admin','2020-01-09 13:14:55','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(18,'设计开发','engineering','','','','',90,'admin','2020-01-09 13:14:55','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(19,'实现与测试','engineering','EMBEDDED','','','',95,'admin','2020-01-09 13:14:55','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(20,'系统测试','engineering','ST','','','',100,'admin','2020-01-09 13:14:55','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(21,'客户验收','engineering','CA','','','',105,'admin','2020-01-09 13:14:55','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(22,'质量保证','support','QA','','','',110,'admin','2020-01-09 13:14:55','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(23,'配置管理','support','CM','','','',115,'admin','2020-01-09 13:14:55','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(24,'度量分析','support','MA','','','',120,'admin','2020-01-09 13:14:55','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(25,'原因分析与解决','support','CAR','','','',125,'admin','2020-01-09 13:14:55','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0'),
|
||||
(26,'决策分析','support','DAR','','','',130,'admin','2020-01-09 13:14:55','','0000-00-00 00:00:00','','0000-00-00 00:00:00','0');
|
||||
REPLACE INTO `zt_process` (`id`, `model`, `name`, `type`, `abbr`, `desc`, `assignedTo`, `status`, `order`, `createdBy`, `createdDate`, `editedBy`, `editedDate`, `assignedBy`, `assignedDate`, `deleted`) VALUES
|
||||
(11, 'waterfall', '立项管理', 'project', 'PIM', '', '', '', 55, 'admin', '2020-01-09 10:29:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(12, 'waterfall', '项目规划', 'project', 'PP', '', '', '', 60, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(13, 'waterfall', '项目监控', 'project', 'PMC', '', '', '', 65, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(14, 'waterfall', '风险管理', 'project', 'RSKM', '', '', '', 70, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(15, 'waterfall', '结项管理', 'project', 'PCM', '', '', '', 75, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(16, 'waterfall', '量化项目管理', 'project', 'QPM', '', '', '', 80, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(17, 'waterfall', '需求开发', 'engineering', 'RDM', '', '', '', 85, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(18, 'waterfall', '设计开发', 'engineering', '', '', '', '', 90, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(19, 'waterfall', '实现与测试', 'engineering', 'EMBEDDED', '', '', '', 95, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(20, 'waterfall', '系统测试', 'engineering', 'ST', '', '', '', 100, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(21, 'waterfall', '客户验收', 'engineering', 'CA', '', '', '', 105, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(22, 'waterfall', '质量保证', 'support', 'QA', '', '', '', 110, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(23, 'waterfall', '配置管理', 'support', 'CM', '', '', '', 115, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(24, 'waterfall', '度量分析', 'support', 'MA', '', '', '', 120, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(25, 'waterfall', '原因分析与解决', 'support', 'CAR', '', '', '', 125, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(26, 'waterfall', '决策分析', 'support', 'DAR', '', '', '', 130, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(41, 'scrum', '原因分析与解决', 'support', 'CAR', '', '', '', 125, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(40, 'scrum', '度量分析', 'support', 'MA', '', '', '', 120, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(39, 'scrum', '配置管理', 'support', 'CM', '', '', '', 115, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(38, 'scrum', '质量保证', 'support', 'QA', '', '', '', 110, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(37, 'scrum', '客户验收', 'engineering', 'CA', '', '', '', 105, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(36, 'scrum', '系统测试', 'engineering', 'ST', '', '', '', 100, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(35, 'scrum', '实现与测试', 'engineering', 'EMBEDDED', '', '', '', 95, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(34, 'scrum', '设计开发', 'engineering', '', '', '', '', 90, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(33, 'scrum', '需求开发', 'engineering', 'RDM', '', '', '', 85, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(32, 'scrum', '量化项目管理', 'project', 'QPM', '', '', '', 80, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(31, 'scrum', '结项管理', 'project', 'PCM', '', '', '', 75, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(30, 'scrum', '风险管理', 'project', 'RSKM', '', '', '', 70, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(29, 'scrum', '项目监控', 'project', 'PMC', '', '', '', 65, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(28, 'scrum', '项目规划', 'project', 'PP', '', '', '', 60, 'admin', '2020-01-09 10:31:16', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(27, 'scrum', '立项管理', 'project', 'PIM', '', '', '', 55, 'admin', '2020-01-09 10:29:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0'),
|
||||
(42, 'scrum', '决策分析', 'support', 'DAR', '', '', '', 130, 'admin', '2020-01-09 13:14:55', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '0');
|
||||
|
||||
REPLACE INTO `zt_activity` (`id`, `process`, `name`, `optional`, `content`, `assignedTo`, `status`, `createdBy`, `createdDate`, `editedBy`, `editedDate`, `assignedBy`, `assignedDate`, `order`, `deleted`) VALUES
|
||||
(4,11,'立项调查,可行性分析,技术预研','yes','','','','admin','2020-01-09 10:49:34','','0000-00-00 00:00:00','','0000-00-00 00:00:00',20,'0'),
|
||||
|
||||
+230
-274
@@ -10,19 +10,20 @@ CREATE TABLE IF NOT EXISTS `zt_acl` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_action`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_action` (
|
||||
`id` int(9) unsigned NOT NULL auto_increment,
|
||||
`objectType` varchar(30) NOT NULL default '',
|
||||
`objectID` mediumint(8) unsigned NOT NULL default '0',
|
||||
`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(30) NOT NULL default '',
|
||||
`actor` varchar(100) NOT NULL DEFAULT '',
|
||||
`action` varchar(80) NOT NULL DEFAULT '',
|
||||
`date` datetime NOT NULL,
|
||||
`comment` text NOT NULL,
|
||||
`extra` text NOT NULL,
|
||||
`read` enum('0','1') NOT NULL default '0',
|
||||
`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`),
|
||||
@@ -98,7 +99,7 @@ CREATE TABLE IF NOT EXISTS `zt_apistruct` (
|
||||
`lib` int UNSIGNED NOT NULL DEFAULT 0,
|
||||
`name` varchar(30) NOT NULL DEFAULT '',
|
||||
`type` varchar(50) NOT NULL DEFAULT '',
|
||||
`desc` mediumtext NOT NULL DEFAULT '',
|
||||
`desc` mediumtext NOT NULL,
|
||||
`version` smallint unsigned NOT NULL DEFAULT 0,
|
||||
`attribute` text NULL,
|
||||
`addedBy` varchar(30) NOT NULL DEFAULT 0,
|
||||
@@ -245,53 +246,56 @@ CREATE TABLE IF NOT EXISTS `zt_branch` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_bug`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_bug` (
|
||||
`id` mediumint(8) NOT NULL auto_increment,
|
||||
`id` mediumint(8) 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',
|
||||
`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',
|
||||
`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',
|
||||
`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 '',
|
||||
`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 '',
|
||||
`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 '',
|
||||
`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',
|
||||
`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 '',
|
||||
`openedBy` varchar(30) NOT NULL DEFAULT '',
|
||||
`openedDate` datetime NOT NULL,
|
||||
`openedBuild` varchar(255) NOT NULL,
|
||||
`assignedTo` varchar(30) NOT NULL default '',
|
||||
`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 '',
|
||||
`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 '',
|
||||
`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,
|
||||
@@ -302,9 +306,9 @@ CREATE TABLE IF NOT EXISTS `zt_bug` (
|
||||
`repoType` varchar(30) NOT NULL DEFAULT '',
|
||||
`issueKey` varchar(50) NOT NULL DEFAULT '',
|
||||
`testtask` mediumint(8) unsigned NOT NULL,
|
||||
`lastEditedBy` varchar(30) NOT NULL default '',
|
||||
`lastEditedBy` varchar(30) NOT NULL DEFAULT '',
|
||||
`lastEditedDate` datetime NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL default '0',
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `product` (`product`),
|
||||
KEY `execution` (`execution`),
|
||||
@@ -618,21 +622,36 @@ CREATE TABLE IF NOT EXISTS `zt_designspec` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_doc`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_doc` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`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,
|
||||
@@ -640,7 +659,7 @@ CREATE TABLE IF NOT EXISTS `zt_doc` (
|
||||
`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',
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `product` (`product`),
|
||||
KEY `execution` (`execution`),
|
||||
@@ -683,20 +702,28 @@ CREATE TABLE IF NOT EXISTS `zt_doclib` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_effort`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_effort` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`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',
|
||||
`user` char(30) NOT NULL default '',
|
||||
`todo` enum('1','0') NOT NULL default '1',
|
||||
`date` date NOT NULL,
|
||||
`begin` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
`end` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
`type` enum('1','2','3') NOT NULL default '1',
|
||||
`idvalue` mediumint(8) unsigned NOT NULL default '0',
|
||||
`name` char(30) NOT NULL default '',
|
||||
`desc` char(255) NOT NULL default '',
|
||||
`status` enum('1','2','3') NOT NULL default '1',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `user` (`user`)
|
||||
`left` float NOT NULL,
|
||||
`consumed` float NOT NULL,
|
||||
`begin` smallint(4) unsigned zerofill NOT NULL,
|
||||
`end` smallint(4) unsigned zerofill NOT NULL,
|
||||
`extra` text,
|
||||
`order` tinyint(3) 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;
|
||||
-- DROP TABLE IF EXISTS `zt_entry`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_entry` (
|
||||
@@ -751,32 +778,33 @@ CREATE TABLE IF NOT EXISTS `zt_extension` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_file`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_file` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`pathname` char(50) NOT NULL,
|
||||
`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',
|
||||
`size` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`objectType` char(30) NOT NULL,
|
||||
`objectID` mediumint(9) NOT NULL,
|
||||
`addedBy` char(30) NOT NULL default '',
|
||||
`addedBy` char(30) NOT NULL DEFAULT '',
|
||||
`addedDate` datetime NOT NULL,
|
||||
`downloads` mediumint(8) unsigned NOT NULL default '0',
|
||||
`downloads` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`extra` varchar(255) NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL default '0',
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `objectType` (`objectType`),
|
||||
KEY `objectID` (`objectID`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_group`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_group` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`project` mediumint(8) unsigned NOT NULL DEFAULT 0,
|
||||
`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 '',
|
||||
`role` char(30) NOT NULL DEFAULT '',
|
||||
`desc` char(255) NOT NULL DEFAULT '',
|
||||
`acl` text,
|
||||
PRIMARY KEY (`id`)
|
||||
`developer` enum('0','1') NOT NULL DEFAULT '1',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_grouppriv`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_grouppriv` (
|
||||
@@ -1140,21 +1168,23 @@ CREATE TABLE IF NOT EXISTS `zt_planstory` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_product`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_product` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`program` mediumint(8) unsigned NOT NULL,
|
||||
`name` varchar(110) NOT NULL,
|
||||
`code` varchar(45) NOT NULL,
|
||||
`shadow` tinyint(1) unsigned 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 '',
|
||||
`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,
|
||||
`acl` enum('open','private','custom') NOT NULL default 'open',
|
||||
`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,
|
||||
@@ -1162,7 +1192,7 @@ CREATE TABLE IF NOT EXISTS `zt_product` (
|
||||
`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',
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `acl` (`acl`),
|
||||
KEY `order` (`order`)
|
||||
@@ -1483,39 +1513,44 @@ CREATE TABLE IF NOT EXISTS `zt_stakeholder` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_story`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_story` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`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',
|
||||
`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',
|
||||
`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',
|
||||
`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', 'reviewing', 'closed') NOT NULL default '',
|
||||
`subStatus` varchar(30) NOT NULL default '',
|
||||
`status` enum('','changing','active','draft','reviewing','closed') NOT NULL DEFAULT '',
|
||||
`subStatus` varchar(30) NOT NULL DEFAULT '',
|
||||
`color` char(7) NOT NULL,
|
||||
`stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released', 'closed') NOT NULL DEFAULT 'wait',
|
||||
`stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait',
|
||||
`stagedBy` char(30) NOT NULL,
|
||||
`mailto` text,
|
||||
`openedBy` varchar(30) NOT NULL default '',
|
||||
`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 '',
|
||||
`assignedTo` varchar(30) NOT NULL DEFAULT '',
|
||||
`assignedDate` datetime NOT NULL,
|
||||
`lastEditedBy` varchar(30) NOT NULL default '',
|
||||
`approvedDate` date NOT NULL,
|
||||
`lastEditedBy` varchar(30) NOT NULL DEFAULT '',
|
||||
`lastEditedDate` datetime NOT NULL,
|
||||
`changedBy` VARCHAR(30) NOT NULL,
|
||||
`changedDate` 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 '',
|
||||
`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,
|
||||
@@ -1525,12 +1560,13 @@ CREATE TABLE IF NOT EXISTS `zt_story` (
|
||||
`linkRequirements` varchar(255) NOT NULL,
|
||||
`twins` varchar(255) NOT NULL,
|
||||
`duplicateStory` mediumint(8) unsigned NOT NULL,
|
||||
`version` smallint(6) NOT NULL default '1',
|
||||
`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`),
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `product` (`product`),
|
||||
KEY `status` (`status`),
|
||||
KEY `assignedTo` (`assignedTo`)
|
||||
@@ -1583,27 +1619,28 @@ CREATE TABLE IF NOT EXISTS `zt_suitecase` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_task`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_task` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`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',
|
||||
`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',
|
||||
`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',
|
||||
`fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`feedback` mediumint(8) unsigned NOT NULL,
|
||||
`fromIssue` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`name` varchar(255) NOT NULL,
|
||||
`type` varchar(20) NOT NULL,
|
||||
`mode` varchar(10) NOT NULL,
|
||||
`pri` tinyint(3) unsigned NOT NULL default '0',
|
||||
`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 '',
|
||||
`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,
|
||||
@@ -1634,7 +1671,7 @@ CREATE TABLE IF NOT EXISTS `zt_task` (
|
||||
`lines` varchar(10) NOT NULL,
|
||||
`v1` varchar(40) NOT NULL,
|
||||
`v2` varchar(40) NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL default '0',
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
`vision` varchar(10) NOT NULL DEFAULT 'rnd',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `execution` (`execution`),
|
||||
@@ -1681,22 +1718,23 @@ CREATE TABLE `zt_taskteam` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_team`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_team` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`root` mediumint(8) unsigned NOT NULL default '0',
|
||||
`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 '',
|
||||
`limited` char(8) NOT NULL default 'no',
|
||||
`join` date NOT NULL default '0000-00-00',
|
||||
`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',
|
||||
`estimate` DECIMAL(12,2) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`consumed` DECIMAL(12,2) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`left` DECIMAL(12,2) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`order` TINYINT(3) NOT NULL DEFAULT '0',
|
||||
`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;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_testreport`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_testreport` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
@@ -1723,7 +1761,7 @@ CREATE TABLE IF NOT EXISTS `zt_testreport` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_testresult`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_testresult` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`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,
|
||||
@@ -1737,7 +1775,8 @@ CREATE TABLE IF NOT EXISTS `zt_testresult` (
|
||||
`date` datetime NOT NULL,
|
||||
`duration` float NOT NULL,
|
||||
`xml` text NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
`deploy` mediumint(8) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `case` (`case`),
|
||||
KEY `version` (`version`),
|
||||
KEY `run` (`run`)
|
||||
@@ -1808,7 +1847,8 @@ CREATE TABLE IF NOT EXISTS `zt_todo` (
|
||||
`date` date NOT NULL,
|
||||
`begin` smallint(4) unsigned zerofill NOT NULL,
|
||||
`end` smallint(4) unsigned zerofill NOT NULL,
|
||||
`type` char(10) 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,
|
||||
@@ -1824,7 +1864,7 @@ CREATE TABLE IF NOT EXISTS `zt_todo` (
|
||||
`finishedDate` datetime NOT NULL,
|
||||
`closedBy` varchar(30) NOT NULL DEFAULT '',
|
||||
`closedDate` datetime NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL default '0',
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
`vision` varchar(10) NOT NULL DEFAULT 'rnd',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `account` (`account`),
|
||||
@@ -1834,46 +1874,51 @@ CREATE TABLE IF NOT EXISTS `zt_todo` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_user`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_user` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`company` mediumint 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 '',
|
||||
`nickname` char(60) NOT NULL default '',
|
||||
`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 '',
|
||||
`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',
|
||||
`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',
|
||||
`ranzhi` char(30) NOT NULL default '',
|
||||
`score` INT(11) NOT NULL DEFAULT '0',
|
||||
`scoreLevel` INT(11) NOT NULL DEFAULT '0',
|
||||
`ip` char(15) NOT NULL DEFAULT '',
|
||||
`last` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`fails` tinyint(5) NOT NULL DEFAULT '0',
|
||||
`locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`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',
|
||||
PRIMARY KEY (`id`),
|
||||
`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`),
|
||||
@@ -6384,7 +6429,7 @@ CREATE TABLE IF NOT EXISTS `zt_im_chat` (
|
||||
`lastMessageIndex` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`pinnedMessages` text NOT NULL DEFAULT '',
|
||||
`mergedChats` text NOT NULL DEFAULT '',
|
||||
`mergedChats` text NOT NULL,
|
||||
`adminInvite` enum('0','1') NOT NULL DEFAULT '0',
|
||||
`avatar` text NOT NULL DEFAULT '',
|
||||
`archiveDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
@@ -6573,39 +6618,6 @@ CREATE TABLE IF NOT EXISTS `zt_im_userdevice` (
|
||||
UNIQUE KEY `userdevice` (`user`, `device`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `zt_file` CHANGE `pathname` `pathname` char(100) NOT NULL;
|
||||
ALTER TABLE `zt_user` ADD `clientStatus` enum('online', 'away', 'busy', 'offline', 'meeting') NOT NULL DEFAULT 'offline';
|
||||
ALTER TABLE `zt_user` ADD `clientLang` varchar(10) NOT NULL DEFAULT 'zh-cn';
|
||||
ALTER TABLE `zt_user` ADD `pinyin` varchar(255) NOT NULL DEFAULT '' AFTER `realname`;
|
||||
ALTER TABLE `zt_effort` DROP INDEX `user`;
|
||||
ALTER TABLE `zt_effort` DROP `user`;
|
||||
ALTER TABLE `zt_effort` DROP `todo`;
|
||||
ALTER TABLE `zt_effort` DROP `type`;
|
||||
ALTER TABLE `zt_effort` DROP `idvalue`;
|
||||
ALTER TABLE `zt_effort` DROP `name`;
|
||||
ALTER TABLE `zt_effort` DROP `desc`;
|
||||
ALTER TABLE `zt_effort` DROP `status`;
|
||||
|
||||
ALTER TABLE `zt_effort` ADD `objectType` varchar(30) NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_effort` ADD `objectID` mediumint(8) unsigned NOT NULL AFTER `objectType`;
|
||||
ALTER TABLE `zt_effort` ADD `product` text NOT NULL AFTER `objectID`;
|
||||
ALTER TABLE `zt_effort` ADD `project` mediumint(8) unsigned NOT NULL AFTER `product`;
|
||||
ALTER TABLE `zt_effort` ADD `execution` mediumint(8) unsigned NOT NULL AFTER `project`;
|
||||
ALTER TABLE `zt_effort` ADD `account` varchar(30) NOT NULL AFTER `execution`;
|
||||
ALTER TABLE `zt_effort` ADD `work` text COLLATE 'utf8_general_ci' NULL AFTER `account`;
|
||||
ALTER TABLE `zt_effort` ADD `left` float NOT NULL AFTER `date`;
|
||||
ALTER TABLE `zt_effort` ADD `consumed` float NOT NULL AFTER `left`;
|
||||
ALTER TABLE `zt_effort` CHANGE `begin` `begin` smallint(4) unsigned zerofill NOT NULL AFTER `consumed`;
|
||||
ALTER TABLE `zt_effort` CHANGE `end` `end` smallint(4) unsigned zerofill NOT NULL AFTER `begin`;
|
||||
ALTER TABLE `zt_effort` ADD `deleted` enum('0','1') NOT NULL DEFAULT '0' AFTER `end`;
|
||||
ALTER TABLE `zt_effort` ADD `order` tinyint unsigned NOT NULL DEFAULT '0' AFTER `end`;
|
||||
ALTER TABLE `zt_effort` ADD `extra` text COLLATE 'utf8_general_ci' NULL AFTER `end`;
|
||||
ALTER TABLE `zt_effort` ADD INDEX `execution` (`execution`);
|
||||
ALTER TABLE `zt_effort` ADD INDEX `objectID` (`objectID`);
|
||||
ALTER TABLE `zt_effort` ADD INDEX `date` (`date`);
|
||||
ALTER TABLE `zt_effort` ADD INDEX `account` (`account`);
|
||||
|
||||
ALTER TABLE `zt_action` ADD `efforted` BOOL NOT NULL DEFAULT '0';
|
||||
INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES ('30', '23', '*', '*', '*', 'moduleName=execution&methodName=computeTaskEffort', '计算任务剩余工时', 'zentao', '1', 'normal', '0000-00-00 00:00:00');
|
||||
INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES ('30', '7', '*', '*', '*', 'moduleName=effort&methodName=remindNotRecord', '提醒录入日志', 'zentao', '1', 'stop', '0000-00-00 00:00:00');
|
||||
REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
@@ -7028,7 +7040,6 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(11,'report','testcase'),
|
||||
(11,'report','workAssignSummary'),
|
||||
(11,'report','workSummary');
|
||||
ALTER TABLE `zt_user` ADD `ldap` CHAR(30) NOT NULL AFTER `ranzhi`;
|
||||
|
||||
REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(1,'ldap','index'),
|
||||
@@ -7216,7 +7227,7 @@ CREATE TABLE IF NOT EXISTS `zt_ticket` (
|
||||
`finishedDate` datetime NOT NULL,
|
||||
`resolvedBy` varchar(30) NOT NULL,
|
||||
`resolvedDate` datetime NOT NULL,
|
||||
`resolution` varchar(1000) NOT NULL,
|
||||
`resolution` text NOT NULL,
|
||||
`editedBy` varchar(30) NOT NULL,
|
||||
`editedDate` datetime NOT NULL,
|
||||
`keywords` varchar(255) NOT NULL,
|
||||
@@ -7249,11 +7260,6 @@ CREATE TABLE IF NOT EXISTS `zt_ticketrelation` (
|
||||
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`;
|
||||
ALTER TABLE `zt_group` ADD `developer` enum('0', '1') NOT NULL DEFAULT '1' AFTER `acl`;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_feedbackproduct`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_feedbackview` (
|
||||
`account` char(30) NOT NULL,
|
||||
@@ -7353,6 +7359,7 @@ CREATE TABLE `zt_image` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`host` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`name` varchar(64) NOT NULL DEFAULT '',
|
||||
`localName` varchar(64) NOT NULL DEFAULT '',
|
||||
`address` varchar(64) NOT NULL DEFAULT '',
|
||||
`path` varchar(64) NOT NULL DEFAULT '',
|
||||
`status` varchar(20) NOT NULL DEFAULT '',
|
||||
@@ -7365,6 +7372,7 @@ CREATE TABLE `zt_image` (
|
||||
`desc` text NOT NULL,
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
`restoreDate` datetime NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
@@ -7484,6 +7492,9 @@ CREATE TABLE IF NOT EXISTS `zt_overtime` (
|
||||
`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`),
|
||||
@@ -7520,6 +7531,10 @@ CREATE TABLE IF NOT EXISTS `zt_leave` (
|
||||
`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`),
|
||||
@@ -7543,6 +7558,9 @@ CREATE TABLE IF NOT EXISTS `zt_lieu` (
|
||||
`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`),
|
||||
@@ -7614,7 +7632,6 @@ CREATE TABLE IF NOT EXISTS `zt_deploystep` (
|
||||
`deleted` enum('0','1') NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
ALTER TABLE `zt_testresult` ADD `deploy` mediumint(8) unsigned NOT NULL;
|
||||
-- DROP TABLE IF EXISTS `zt_deployscope`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_deployscope` (
|
||||
`deploy` mediumint(8) unsigned NOT NULL,
|
||||
@@ -7683,26 +7700,6 @@ CREATE TABLE IF NOT EXISTS `zt_trainrecords` (
|
||||
PRIMARY KEY (`user`, `objectId`, `objectType`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `zt_doc`
|
||||
ADD `parent` smallint(5) unsigned NOT NULL DEFAULT '0' AFTER `type`,
|
||||
ADD `path` char(255) COLLATE 'utf8_general_ci' NOT NULL DEFAULT '' AFTER `parent`,
|
||||
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;
|
||||
ALTER TABLE `zt_leave` ADD `reviewers` text NOT NULL;
|
||||
ALTER TABLE `zt_leave` ADD `backReviewers` text NOT NULL;
|
||||
ALTER TABLE `zt_lieu` ADD `level` tinyint(3) NOT NULL;
|
||||
ALTER TABLE `zt_lieu` ADD `assignedTo` varchar(30) NOT NULL;
|
||||
ALTER TABLE `zt_lieu` ADD `reviewers` text NOT NULL;
|
||||
ALTER TABLE `zt_overtime` ADD `level` tinyint(3) NOT NULL;
|
||||
ALTER TABLE `zt_overtime` ADD `assignedTo` varchar(30) NOT NULL;
|
||||
ALTER TABLE `zt_overtime` ADD `reviewers` text NOT NULL;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_faq`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_faq` (
|
||||
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
@@ -7714,9 +7711,6 @@ CREATE TABLE IF NOT EXISTS `zt_faq` (
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `zt_task` ADD `feedback` mediumint(8) unsigned NOT NULL AFTER `fromBug`;
|
||||
ALTER TABLE `zt_todo` ADD `feedback` mediumint(8) unsigned NOT NULL AFTER `end`;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_domain`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_domain`(
|
||||
`id` smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
@@ -8743,6 +8737,7 @@ CREATE TABLE IF NOT EXISTS `zt_workflow` (
|
||||
`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,
|
||||
@@ -8759,17 +8754,18 @@ CREATE TABLE IF NOT EXISTS `zt_workflow` (
|
||||
`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',
|
||||
`approval` enum('enabled','disabled') NOT NULL DEFAULT 'disabled',
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
`editedBy` varchar(30) NOT NULL,
|
||||
`editedDate` datetime NOT NULL,
|
||||
PRIMARY KEY `id` (`id`),
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `unique` (`app`,`module`,`vision`),
|
||||
KEY `type` (`type`),
|
||||
KEY `app` (`app`),
|
||||
KEY `module` (`module`),
|
||||
KEY `order` (`order`),
|
||||
UNIQUE KEY `unique` (`app`, `module`)
|
||||
KEY `order` (`order`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_workflowaction`;
|
||||
@@ -8779,13 +8775,13 @@ CREATE TABLE IF NOT EXISTS `zt_workflowaction` (
|
||||
`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',
|
||||
`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',
|
||||
`position` enum('menu','browseandview','browse','view') NOT NULL DEFAULT 'browseandview',
|
||||
`layout` char(20) NOT NULL,
|
||||
`show` enum('dropdownlist', 'direct') NOT NULL DEFAULT 'dropdownlist',
|
||||
`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',
|
||||
@@ -8800,21 +8796,22 @@ CREATE TABLE IF NOT EXISTS `zt_workflowaction` (
|
||||
`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` (`id`),
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `unique` (`module`,`action`,`vision`),
|
||||
KEY `module` (`module`),
|
||||
KEY `action` (`action`),
|
||||
KEY `order` (`order`),
|
||||
UNIQUE KEY `unique` (`module`, `action`)
|
||||
KEY `order` (`order`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_workflowdatasource`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_workflowdatasource` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`type` enum('system', 'sql', 'func', 'option', 'lang', 'category') NOT NULL DEFAULT 'option',
|
||||
`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,
|
||||
@@ -8822,6 +8819,7 @@ CREATE TABLE IF NOT EXISTS `zt_workflowdatasource` (
|
||||
`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,
|
||||
@@ -8870,20 +8868,21 @@ CREATE TABLE IF NOT EXISTS `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,
|
||||
`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',
|
||||
`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,
|
||||
PRIMARY KEY `id` (`id`),
|
||||
`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`),
|
||||
UNIQUE KEY `unique` (`module`, `action`, `field`)
|
||||
KEY `order` (`order`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_workflowlabel`;
|
||||
@@ -9013,10 +9012,6 @@ CREATE TABLE IF NOT EXISTS `zt_workflowreport` (
|
||||
PRIMARY KEY `id` (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `zt_action` CHANGE `action` `action` varchar(80) NOT NULL DEFAULT '';
|
||||
ALTER TABLE `zt_action` CHANGE `extra` `extra` text;
|
||||
ALTER TABLE `zt_file` CHANGE `objectType` `objectType` char(30) NOT NULL;
|
||||
|
||||
REPLACE INTO `zt_workflowrule` VALUES (1,'system','必填','notempty','admin','2020-10-14 14:06:14','','0000-00-00 00:00:00'),(2,'system','唯一','unique','admin','2020-10-14 14:06:14','','0000-00-00 00:00:00'),(3,'system','日期','date','admin','2020-10-14 14:06:14','','0000-00-00 00:00:00'),(4,'system','email','email','admin','2020-10-14 14:06:14','','0000-00-00 00:00:00'),(5,'system','数字','float','admin','2020-10-14 14:06:14','','0000-00-00 00:00:00'),(6,'system','电话','phone','admin','2020-10-14 14:06:14','','0000-00-00 00:00:00'),(7,'system','IP','ip','admin','2020-10-14 14:06:14','','0000-00-00 00:00:00');
|
||||
|
||||
REPLACE INTO `zt_grouppriv` VALUES
|
||||
@@ -9094,19 +9089,6 @@ REPLACE INTO `zt_grouppriv` VALUES
|
||||
(1,'workflowrule','edit'),
|
||||
(1,'workflowrule','view');
|
||||
|
||||
ALTER TABLE `zt_workflow` ADD `navigator` varchar(10) NOT NULL AFTER `type`;
|
||||
ALTER TABLE `zt_workflow` ADD `vision` varchar(10) NOT NULL DEFAULT 'rnd' AFTER `status`;
|
||||
ALTER TABLE `zt_workflowdatasource` ADD `vision` varchar(10) NOT NULL DEFAULT 'rnd' AFTER `buildin`;
|
||||
ALTER TABLE `zt_workflowaction` ADD `vision` varchar(10) NOT NULL DEFAULT 'rnd' AFTER `status`;
|
||||
ALTER TABLE `zt_workflowlayout` ADD `vision` varchar(10) NOT NULL DEFAULT 'rnd';
|
||||
|
||||
ALTER TABLE `zt_workflow` DROP INDEX `unique`;
|
||||
ALTER TABLE `zt_workflow` ADD UNIQUE `unique` (`app`, `module`, `vision`);
|
||||
ALTER TABLE `zt_workflowaction` DROP INDEX `unique`;
|
||||
ALTER TABLE `zt_workflowaction` ADD UNIQUE `unique` (`module`, `action`, `vision`);
|
||||
ALTER TABLE `zt_workflowlayout` DROP INDEX `unique`;
|
||||
ALTER TABLE `zt_workflowlayout` ADD UNIQUE `unique` (`module`, `action`, `field`, `vision`);
|
||||
|
||||
INSERT INTO `zt_workflowdatasource` (`type`, `name`, `code`, `buildin`, `datasource`, `view`, `keyField`, `valueField`) VALUES
|
||||
('system', '产品', 'products', '1', '{\"app\":\"system\",\"module\":\"product\",\"method\":\"getPairs\",\"methodDesc\":\"Get product pairs.\",\"params\":[{\"name\":\"mode\",\"type\":\"string\",\"desc\":\"\",\"value\":\"all\"}]}', '', '', ''),
|
||||
('system', '项目', 'projects', '1', '{\"app\":\"system\",\"module\":\"project\",\"method\":\"getPairsByModel\",\"methodDesc\":\"Get project pairs by model and project.\",\"params\":[{\"name\":\"model\",\"type\":\"string\",\"desc\":\"all|scrum|waterfall\",\"value\":\"all\"},{\"name\":\"programID\",\"type\":\"int\",\"desc\":\"\",\"value\":\"0\"},{\"name\":\"param\",\"type\":\"\",\"desc\":\"\",\"value\":\"\"}]}', '', '', ''),
|
||||
@@ -9198,26 +9180,6 @@ CREATE VIEW `view_datasource_12` AS select `id`,`title` from `zt_productplan` wh
|
||||
CREATE VIEW `view_datasource_41` AS select `id`,`title` from `zt_case` where `deleted` = '0';
|
||||
CREATE VIEW `view_datasource_54` AS select `id`,`name` from `zt_task` where `deleted` = '0' and vision = 'lite';
|
||||
|
||||
ALTER TABLE `zt_doc` ADD `template` varchar(30) COLLATE 'utf8_general_ci' NOT NULL AFTER `lib`;
|
||||
ALTER TABLE `zt_doc` ADD `templateType` varchar(30) COLLATE 'utf8_general_ci' NOT NULL AFTER `template`;
|
||||
ALTER TABLE `zt_doc` ADD `chapterType` varchar(30) COLLATE 'utf8_general_ci' NOT NULL AFTER `templateType`;
|
||||
ALTER TABLE `zt_doc` ADD `assetLib` mediumint(8) unsigned NOT NULL default 0 after `views`;
|
||||
ALTER TABLE `zt_doc` ADD `assetLibType` varchar(30) NOT NULL default '' after `assetLib`;
|
||||
ALTER TABLE `zt_doc` ADD `from` mediumint(8) unsigned NOT NULL default 0 after `assetLibType`;
|
||||
ALTER TABLE `zt_doc` ADD `fromVersion` smallint(6) NOT NULL default 1 after `from`;
|
||||
ALTER TABLE `zt_doc` ADD `assignedTo` varchar(30) NOT NULL after `addedDate`;
|
||||
ALTER TABLE `zt_doc` ADD `assignedDate` datetime NOT NULL after `assignedTo`;
|
||||
ALTER TABLE `zt_doc` ADD `approvedDate` date NOT NULL after `assignedDate`;
|
||||
ALTER TABLE `zt_doc` ADD `status` varchar(30) NOT NULL after `type`;
|
||||
|
||||
ALTER TABLE `zt_story` ADD `storyChanged` enum('0','1') NOT NULL DEFAULT '0' AFTER `version`;
|
||||
ALTER TABLE `zt_story` ADD `lib` mediumint(8) unsigned NOT NULL default 0 after `mailto`;
|
||||
ALTER TABLE `zt_story` ADD `fromStory` mediumint(8) unsigned NOT NULL default 0 after `lib`;
|
||||
ALTER TABLE `zt_story` ADD `fromVersion` smallint(6) NOT NULL default 1 after `fromStory`;
|
||||
ALTER TABLE `zt_story` ADD `approvedDate` date NOT NULL after `assignedDate`;
|
||||
|
||||
ALTER TABLE `zt_todo` MODIFY COLUMN `type` char(15) NOT NULL;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_durationestimation`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_durationestimation` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
@@ -10031,12 +9993,6 @@ CREATE TABLE IF NOT EXISTS `zt_gapanalysis` (
|
||||
UNIQUE KEY `project_account` (`project`,`account`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `zt_bug`
|
||||
ADD `injection` mediumint(8) unsigned NOT NULL AFTER `product`,
|
||||
ADD `identify` mediumint(8) unsigned NOT NULL AFTER `injection`;
|
||||
|
||||
ALTER TABLE `zt_team` ADD `position` varchar(30) not null AFTER role;
|
||||
|
||||
REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(1,'activity','assignTo'),
|
||||
(1,'activity','batchCreate'),
|
||||
|
||||
+235
@@ -1,3 +1,238 @@
|
||||
2023-02-08 18.1
|
||||
完成的需求
|
||||
开源版:
|
||||
41313 解除需求和bug的关联后保持列表排序
|
||||
40637 用例执行失败转Bug时,将结果附件带到bug创建页面中
|
||||
41312 产品的项目列表种修改“我参与的”逻辑
|
||||
33347 测试单按照需求关联用例的列表中增加关联需求字段
|
||||
41209 运行自动化测试方案的示例测试
|
||||
41623 优化自动化测试解决方案页面
|
||||
41624 调整执行节点详情页中手册的跳转逻辑
|
||||
41625 优化远程桌面执行节点页面
|
||||
41626 优化宿主机初始化脚本
|
||||
41210 还原执行节点快照
|
||||
41215 创建执行节点快照
|
||||
41423 浏览执行节点快照
|
||||
41424 编辑执行节点快照
|
||||
41425 删除执行节点快照
|
||||
41818 调整宿主机和执行节点详情页面按钮禁用的样式
|
||||
41819 将宿主机详情页面中的执行节点列表放到独立区块中
|
||||
41820 执行节点详情页面默认密码密文显示
|
||||
禅道客户端:
|
||||
41193 实现系统群设置音视频是否开启的功能
|
||||
40934 实现侧边栏会议模式优化
|
||||
40933 实现协作文件发送入口优化
|
||||
40932 实现协作文件编辑入口优化
|
||||
40625 实现发言人动态排序
|
||||
40548 实现共享屏幕时显示成员名称及开麦标识
|
||||
40538 实现离开音视频会议时不再显示会议状态
|
||||
40282 实现视频会议的开麦标识
|
||||
40229 删除参会人员会议电话标识
|
||||
40227 实现语音会议的开麦标识功能
|
||||
40215 实现PPT文件的在线编辑功能
|
||||
40214 实现音视频会议全屏显示优化
|
||||
40205 实现定时清理消息列表上方的旧消息
|
||||
40204 实现会议视频放大后侧边栏模式设计
|
||||
40199 实现音视频会议展示顺序
|
||||
40197 实现会议视频展示排版优化
|
||||
40185 实现增加会议独立窗口邀请成员功能
|
||||
40039 实现XXB后台可配置升级通知
|
||||
39895 实现点对点文件传输断线增加提示
|
||||
39841 实现禅道客户端全文搜索正常显示待选框
|
||||
39833 实现无权访问禅道页面时链接跳转不显示重新登录界面
|
||||
39831 实现无权访问禅道页面时不显示重新登录界面
|
||||
39723 实现增加点对点文件重传功能
|
||||
39722 实现会议通话与SRS/OWT断连处理
|
||||
39721 实现会议通话与XXD断连处理
|
||||
39720 实现音视频断线重连交互设计
|
||||
39719 实现音视频断连情况下不要自动关闭窗口
|
||||
39567 实现加快短暂离线时消息无法发送的提醒
|
||||
39565 实现短暂离线时消息记录窗口不关闭
|
||||
39563 实现短暂离线时独立文件窗口不关闭
|
||||
39560 实现短暂离线时独立看图窗口不关闭
|
||||
39557 实现优化XXD处理XXB输出数据问题
|
||||
39554 实现喧喧白屏问题处理
|
||||
39509 删除禅道客户端“签退”入口
|
||||
39508 实现从会话中进入聊天记录时定位到最新的消息
|
||||
39506 实现GIF动图复制功能
|
||||
修复的Bug
|
||||
31406 执行节点详情页点击SSH复制按钮复制信息不全
|
||||
31336 执行节点执行休眠/恢复/关闭/启动/重启操作后对应的历史信息记录不正确
|
||||
31348 宿主机详情页执行节点列表建议添加执行节点详情页跳转超链接
|
||||
31329 英文语言项下宿主机详情页的执行节点列表字段显示不全
|
||||
27651 bug搜索条件选择从属于某个模块,数据不正确
|
||||
28463 全文检索无法按项目名称搜索项目
|
||||
30787 权限列表有代码报错
|
||||
30679 用户需求列表的操作栏显示不正确
|
||||
31392 项目型项目中创建迭代,保存成功后提示导入计划关联的相关研发需求
|
||||
30537 邮件列表中失败原因文案错误
|
||||
30381 看板项目设置团队会提示迭代代号不能为空
|
||||
30379 编辑看板项目,保存会提示代号不能为空
|
||||
28513 通过URL链接访问项目需求时不能跳转到正确的项目
|
||||
31403 无产品无执行项目的看板中提Bug模块加载不对
|
||||
28516 激活后的需求再次变更无论评审结果如何状态均为“激活”
|
||||
31343 计划的需求列表中批量编辑需求时所属计划信息丢失
|
||||
28536 批量修改已解决Bug截止日期会联动修改解决日期
|
||||
31359 创建完宿主机或者执行节点后,在跳转的详情页点击返回按钮又跳转回创建页面
|
||||
28805 项目干系人无法查看到项目
|
||||
28809 编辑任务工时后,工时数不正确
|
||||
29999 无迭代项目Bug转任务时错误提示,转任务不成功
|
||||
29118 看板卡片历史记录缺少语言项
|
||||
29629 关闭用户需求后,研发需求自定义设置中可配置SR,UR字段
|
||||
30267 创建测试类型任务选择研发需求,点击保存页面转圈后不能返回到列表页面
|
||||
30289 关闭迭代代号后,编辑项目,保存时会提示:『迭代代号』不能为空。
|
||||
30918 拥有全部权限的admin管理员无法对版本做操作
|
||||
30401 bug编辑页面中,点击关联bug,弹窗中不加载数据
|
||||
29956 无迭代项目下新建测试任务,保存后无法返回页面
|
||||
31498 导出镜像成功后,提示文案需要调整更清晰
|
||||
31493 导出镜像等候时间过长,需要加上提示文案
|
||||
31432 执行节点已关闭,导出镜像时还提示需要关闭执行
|
||||
31421 宿主机的执行节点排序查看时,整个页面刷新
|
||||
31347 初次进入宿主机列表显示的架构图英文语言项下显示中文
|
||||
31718 api反馈数据中teammember字段值全部为空
|
||||
31948 按项目创建的瀑布项目,关联新的产品,阶段不会自动关联
|
||||
26538 主机分组维护页面导航高亮错误
|
||||
29380 甘特图页面进入任务编辑页面抄送给下拉样式问题
|
||||
24928 后台自定义反馈页面代码报错
|
||||
30382 地盘--日志,新增日志无法保存
|
||||
24628 导入8个用户导入页面有报错
|
||||
27438 计划详情页弹窗中需求名称未显示出来
|
||||
26536 编辑主机页面代码报错
|
||||
25723 升级后测试单关联的用例数据没有了
|
||||
30452 进入工单页面1.5级会选中一个产品列表中显示全部产品的工单
|
||||
24530 新增流程页面显示空白
|
||||
30936 反馈转工单时同步产品模块后页面未返回到创建工单页面
|
||||
31107 导出多分支产品Bug模板,系统数据中没有分支
|
||||
31844 组织中查看所有人日志、待办不生效
|
||||
30377 备份完成后不关闭备份弹窗,代码备份显示0个文件
|
||||
30970 无产品无迭代项目下导出日志设置字段中显示了“执行”
|
||||
30997 导入任务页面默认展示了相关研发需求
|
||||
30939 反馈转多人任务后任务详情页样式问题
|
||||
30904 反馈或工单转孪生需求,历史记录中只列出了ID最小的需求
|
||||
30827 地盘新增日志-所属任务下拉无法搜索多人任务
|
||||
31161 点击搜索结果的工单标题,提示无权访问
|
||||
29348 工单后没显示数量
|
||||
30111 反馈进行产品设置后,设置列表页产品数量统计错误
|
||||
30064 分组视图导出弹窗样式需优化
|
||||
29236 同时高亮了年度总结和透视表两个2级导航
|
||||
28875 导出的需求模板中分支/平台下拉中没有数据
|
||||
28765 显示设置为‘只显示最后一级模块’,但是标题仍然显示第一级模块。
|
||||
28704 创建工单页面没有显示产品的1.5级下拉框
|
||||
28799 反馈编辑页面,之前添加的附件没有带出
|
||||
29244 处理中状态列表和详情页展示的颜色不一致
|
||||
28272 产品需求导入评审者设置非评审人也可以导入成功
|
||||
26875 显示设置中没有默认选中项
|
||||
23754 英文下导出用例模板时按钮换行
|
||||
28270 产品研发需求导出模板评审者错误
|
||||
23817 反馈列表页滚动条被遮挡
|
||||
23823 反馈列表在简单表格默认列表字段下有横向滑动条
|
||||
22182 地盘-待处理-问题 没有【确认】按钮
|
||||
22251 项目>评审>发起评审,添加附件>保存,附件没有保存到附件库
|
||||
22299 审批流列表底部未显示数量统计和翻页控件
|
||||
30834 通过编辑方式修改产品库文档所属于WIKI下的文档库时,该文档丢失。
|
||||
22332 打基线和编辑基线页面必填标识显示不一致
|
||||
22334 编辑基线必填校验显示异常
|
||||
22335 会签评审流程一人评审后,该评审还是待评审状态
|
||||
22389 问题库列表中列字段显示重叠
|
||||
22494 项目问题转任务后,任务所属执行信息丢失,导致打开异常
|
||||
22583 设计无法根据相关需求进行搜索
|
||||
22598 查看评审节点和结果有横向滑动条
|
||||
22599 取消选择后,保存成功但角色成员没清空
|
||||
22606 基本度量项语言项缺失
|
||||
22727 已取消的风险没法关闭
|
||||
22742 执行过程裁剪执行按钮不对齐
|
||||
22902 检查对象的下拉框遮挡所属过程下拉框
|
||||
23097 提交评审动态中缺少中文语言项
|
||||
23131 任务详情页面无法切换版本
|
||||
23212 添加产品时添加白名单用户列表已填写内容消失
|
||||
23515 评审的Markdown文档正文中换行丢失
|
||||
23603 偶发性bug:点击导航中的执行,标题是执行,但是内容还停留在产品研发需求中
|
||||
23529 发起评审页面缺少英文语言项
|
||||
23532 评审页面,文档中的附件和评审附件位置颠倒
|
||||
23640 在项目、执行点击某一个BUG详情,会显示到测试-BUG页面
|
||||
23644 产品下拉列表顶部显示了空白
|
||||
24224 需求库导入需求时筛选条件选择版本号搜索报错
|
||||
23688 英文模式下,仪表盘最新动态报错
|
||||
23753 访问执行的任务,导航不正确
|
||||
23779 顶级导航菜单没有折叠显示
|
||||
24306 活动详情弹窗中显示不全
|
||||
24567 瀑布项目审批设置可以关联工作流审批
|
||||
24695 导出测试报告,概况缺少部分内容
|
||||
24713 问题库问题列表严重程度字段换行显示了
|
||||
24716 最佳实践库/组件库导入时样式问题
|
||||
24727 质量保证计划列表页简单表格下,底部滚动条被遮挡
|
||||
24749 日程右侧更多下拉中选择测试单后样式不对
|
||||
24755 markdown文档在资产库中没有显示为markdown格式
|
||||
24772 项目搜索结果列表中无法正确点击打开项目
|
||||
24871 风险详情中创建日期和编辑日期时间总是显示00:00:00
|
||||
25156 问题页面无数据时,字体颜色跟其他模块不一致
|
||||
25310 研发需求批量拆分的子需求自动进入已立项阶段
|
||||
25339 用户需求细分的研发需求阶段显示为“已立项”
|
||||
25612 任务详情页无法切换版本
|
||||
25617 日志页面,部门字段应该显示具体的部门
|
||||
25684 权限维护页面选择更多下的菜单后建议显示已选择的菜单名称
|
||||
25413 切换估算单位保存成功后,提示有未提交的表单
|
||||
25384 访问产品文档的附件库,提示没有所属产品权限
|
||||
24603 创建审批流页面按钮未居中
|
||||
24605 项目审批设置页面报错按钮未居中
|
||||
25470 编辑质量保证计划时显示了已删除的过程
|
||||
25634 后台敏捷模型中不能创建过程
|
||||
25479 批量新建QA检查内容时页面样式错乱
|
||||
25538 阶段的编辑页面增加负责人字段
|
||||
25767 任务列表中状态显示不全
|
||||
26127 Bug详情页的返回页面样式不正确
|
||||
25623 创建人名字较长时,列表显示不规整
|
||||
26030 会议记录页面附件名称较长时操作按钮换行显示了
|
||||
25980 修改Bug解决版本,历史记录从版本中移除
|
||||
25509 编辑已检查的质量保证计划,修改检查对象后检查结果报错
|
||||
25702 内禅部分过程裁剪后仍可以创建计划
|
||||
26040 会议记录页面重命名附件后再次上传附件保存时sql错误
|
||||
26069 项目周报中项目成本计算所取的单位人工成本是后台数值而非项目所设
|
||||
29669 瀑布项目中对提交审计的基线进行审计操作,修改后再次审计操作没有了
|
||||
25460 地盘贡献评审列表中审批进度弹窗显示空白
|
||||
24936 新建工作流中发起评审,评审后动态有报错
|
||||
27332 已被删除的活动/文档还能建质量保证计划
|
||||
28872 已删除评审问题详情页点击返回后二级导航缺失
|
||||
31423 评审项目计划动态详情页面返回链接不对
|
||||
24269 审批流程中设置评审人员直属上级后发起评审页面不显示
|
||||
22634 发起评审时并行分支中角色的审批人员未显示
|
||||
25991 阶段信息确认页面多个相同阶段的ID号重复显示
|
||||
23527 重新发起评审,评审文档未更新
|
||||
29766 瀑布项目结束后不应再继续计算挣值数据
|
||||
28443 执行下创建/批量创建QA计划页面指派给与列表中指派给列出的用户不一致
|
||||
24299 点击动态中的过程/活动/文档名称无法跳转
|
||||
27199 点击动态中的已删除问题名称,跳转后页面报错
|
||||
22608 自动通过评审时查看评审结果页面的评审人员为空
|
||||
22614 审批人重复显示
|
||||
22733 max2.5升级到max3.1beta1评审中的审批节点只显示待评审人
|
||||
22814 项目审批撤销编辑之后无法选择评审人
|
||||
31320 复制敏捷项目时切换步骤会提示连接超时
|
||||
24665 升级到max3.3后,敏捷模型的文档列表显示了内置数据
|
||||
20080 网络不好时加入会议失败,再次加入会议看不到屏幕分享
|
||||
26805 同分组下合并会话报错
|
||||
27082 群管理中demo数据加载不出群主
|
||||
27414 登录账号admin提示登录不上
|
||||
29109 聊天窗口最小化打开成员列表侧边栏查看按钮重叠
|
||||
29115 群组操作菜单项出现双分割线
|
||||
29425 用户状态为非在线时,在小喧喧输入搜人指令后,状态栏为空数据
|
||||
29450 小喧喧会话框发送截图、文件返回错误信息
|
||||
29475 小喧喧会话发送查看 任务发送失败
|
||||
29506 账号接收禅道通知点击查看界面崩溃报错
|
||||
29510 小喧喧未识别到包含大小写的指令
|
||||
29536 禅道客户端的讨论组管理界面刷新不出来
|
||||
29538 禅道客户端的群设置功能不能正常使用
|
||||
29690 离线状态下用户点击“预览”文件弹窗报错
|
||||
30023 内网禅道客户端登录后白屏需要二次登录才能正常显示
|
||||
30083 消息卡片在列表存在不显示的情况
|
||||
30084 存在偶发点击后没有跳转到相应会话的情况
|
||||
30306 讨论组@相关成员后,草稿状态下,会展示用户ID
|
||||
30370 xxd断连再重启,会议中的用户重新登录后,会议窗口关闭,会议结束
|
||||
30372 反复开关闭视频会复制出多个卡片
|
||||
30497 通过阿道发送完成任务指令,完成任务后,返回的工时记录中,消耗时间展示有误
|
||||
30499 登录禅道客户端后,阿道机器人在聊天列表中的头像未展示
|
||||
30509 阿道任务列表下,需要将父任务相关按钮置为只读
|
||||
30514 禅道客户端机器人名称为:阿道@阿道
|
||||
|
||||
2023-01-03 18.0
|
||||
完成的需求
|
||||
开源版:
|
||||
|
||||
@@ -44,7 +44,7 @@ class myExecution extends execution
|
||||
$TRActions .= "<ul id='kanbanActionMenu' class='dropdown-menu pull-right'>";
|
||||
$width = $this->app->getClientLang() == 'en' ? '750' : '650';
|
||||
if(common::hasPriv('kanban', 'createRegion')) $TRActions .= '<li>' . html::a(helper::createLink('kanban', 'createRegion', "kanbanID=$execution->id&from=execution", '', true), '<i class="icon icon-plus"></i>' . $this->lang->kanban->createRegion, '', "class='iframe btn btn-link text-left'") . '</li>';
|
||||
if(common::hasPriv('kanban', 'setLaneHeight')) $TRActions .= '<li>' . html::a(helper::createLink('kanban', 'setLaneHeight', "kanbanID=$execution->id&from=execution", '', true), '<i class="icon icon-size-height"></i>' . $this->lang->kanban->laneHeight, '', "class='iframe btn btn-link text-left' data-width=$width") . '</li>';
|
||||
if(common::hasPriv('execution', 'setKanban')) $TRActions .= '<li>' . html::a(helper::createLink('execution', 'setKanban', "kanbanID=$execution->id&from=execution", '', true), '<i class="icon icon-size-height"></i>' . $this->lang->kanban->laneHeight, '', "class='iframe btn btn-link text-left' data-width=$width") . '</li>';
|
||||
$kanbanActions = '';
|
||||
if(common::hasPriv('execution', 'edit')) $kanbanActions .= '<li>' . html::a(helper::createLink('execution', 'edit', "executionID=$execution->id", '', true), '<i class="icon icon-edit"></i>' . $this->lang->kanban->edit, '', "class='iframe btn btn-link text-left' data-width='75%'") . '</li>';
|
||||
if(in_array('start', $executionActions)) $kanbanActions .= '<li>' . html::a(helper::createLink('execution', 'start', "executionID=$execution->id", '', true), '<i class="icon icon-play"></i>' . $this->lang->execution->start, '', "class='iframe btn btn-link text-left' data-width='75%'") . '</li>';
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
<?php
|
||||
$config->project->list->exportFields = 'id,code,name,status,PM,desc';
|
||||
$config->project->datatable->defaultField = array('id', 'name', 'status', 'PM', 'begin', 'end', 'progress', 'actions');
|
||||
|
||||
unset($config->project->datatable->fieldList['budget']);
|
||||
|
||||
unset($config->project->search['fields']['hasProduct']);
|
||||
unset($config->project->search['fields']['parent']);
|
||||
unset($config->project->search['fields']['model']);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
<?php include $this->app->getModuleRoot() . '/common/view/datepicker.html.php';?>
|
||||
<?php js::set('taskConsumed', $taskConsumed);?>
|
||||
<?php js::set('addChildTask', $lang->task->addChildTask);?>
|
||||
<?php js::set('isonlybody', isonlybody())?>
|
||||
<?php js::set('regionID', $regionID);?>
|
||||
<style>.c-lane,.c-region{width:150px;}</style>
|
||||
<div id="mainContent" class="main-content fade">
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
<tr>
|
||||
<th><?php echo $lang->task->story;?></th>
|
||||
<td colspan='3'>
|
||||
<span id='storyBox' class="<?php if(!empty($stories)) echo 'hidden';?> "><?php printf($lang->task->noticeLinkStory, html::a($this->createLink('story', 'create', "productID=$productID&branch=0&moduleID=0&storyID=0&projectID=$projectID&bugID=0&planID=0&todoID=0&extra=&type=story&_single"), $lang->execution->linkStory, '_blank', 'class="text-primary"'), html::a("javascript:loadStories($execution->id)", $lang->refresh, '', 'class="text-primary"'));?></span>
|
||||
<span id='storyBox' class="<?php if(!empty($stories)) echo 'hidden';?> "><?php printf($lang->task->noticeLinkStory, html::a($this->createLink('story', 'create', "productID=$productID&branch=0&moduleID=0&storyID=0&projectID=$projectID&bugID=0&planID=0&todoID=0&extra=&type=story&_single"), $lang->execution->linkStory, '', 'class="text-primary"'), html::a("javascript:loadStories($execution->id)", $lang->refresh, '', 'class="text-primary"'));?></span>
|
||||
<div class='input-group <?php if(empty($stories)) echo "hidden";?>'>
|
||||
<?php echo html::select('story', $stories, $task->story, "class='form-control chosen' onchange='setStoryRelated();'");?>
|
||||
<span class='input-group-btn' id='preview'><a href='#' class='btn iframe'><?php echo $lang->preview;?></a></span>
|
||||
|
||||
@@ -981,6 +981,11 @@ if(!function_exists('array_column'))
|
||||
$valueSet = true;
|
||||
$value = $row[$columnKey];
|
||||
}
|
||||
elseif(\is_object($row) && \property_exists($row, $columnKey))
|
||||
{
|
||||
$valueSet = true;
|
||||
$value = $row->$columnKey;
|
||||
}
|
||||
|
||||
if($valueSet)
|
||||
{
|
||||
@@ -998,3 +1003,18 @@ if(!function_exists('array_column'))
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('getallheaders')) {
|
||||
function getallheaders()
|
||||
{
|
||||
$headers = array();
|
||||
foreach ($_SERVER as $name => $value)
|
||||
{
|
||||
if (substr($name, 0, 5) == 'HTTP_')
|
||||
{
|
||||
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
|
||||
}
|
||||
}
|
||||
return $headers;
|
||||
}
|
||||
}
|
||||
@@ -72,6 +72,14 @@ class control extends baseControl
|
||||
foreach($exportFields as $field) $this->config->{$this->moduleName}->list->exportFields .= ",{$field->field}";
|
||||
}
|
||||
|
||||
if(isset($this->config->excel->editor[$this->moduleName]))
|
||||
{
|
||||
foreach($exportFields as $field)
|
||||
{
|
||||
if($field->control == 'richtext') $this->config->excel->editor[$this->moduleName][] = $field->field;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($exportFields as $flowField => $exportField)
|
||||
{
|
||||
if(!isset($this->lang->{$this->moduleName}->$flowField)) $this->lang->{$this->moduleName}->$flowField = $exportField->name;
|
||||
|
||||
@@ -16,10 +16,10 @@ $PHPMAILER_LANG['from_failed'] = 'Die folgende Absenderadresse ist nich
|
||||
$PHPMAILER_LANG['instantiate'] = 'Mail Funktion konnte nicht initialisiert werden.';
|
||||
$PHPMAILER_LANG['invalid_email'] = 'E-Mail wird nicht gesendet, die Adresse ist ungültig.';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wird nicht unterstützt.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Bitte geben Sie mindestens eine Empfänger E-Mailadresse an.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'The recipient has not set up an email address, please go to the background-personnel-user edit to add an email address.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Fehler: Die folgenden Empfänger sind nicht korrekt: ';
|
||||
$PHPMAILER_LANG['signing'] = 'Fehler beim Signieren: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'Verbindung zu SMTP Server fehlgeschlagen.';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'Fehler vom SMTP Server: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Kann Variable nicht setzen oder zurücksetzen: ';
|
||||
?>
|
||||
?>
|
||||
|
||||
@@ -16,10 +16,10 @@ $PHPMAILER_LANG['from_failed'] = 'L\'adresse d\'expéditeur suivante a
|
||||
$PHPMAILER_LANG['instantiate'] = 'Impossible d\'instancier la fonction mail.';
|
||||
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' client de messagerie non supporté.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Vous devez fournir au moins une adresse de destinataire.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'The recipient has not set up an email address, please go to the background-personnel-user edit to add an email address.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'Erreur SMTP : Les destinataires suivants sont en erreur : ';
|
||||
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
|
||||
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
|
||||
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
|
||||
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
|
||||
?>
|
||||
?>
|
||||
|
||||
@@ -17,7 +17,7 @@ $PHPMAILER_LANG['from_failed'] = '发送地址错误:';
|
||||
$PHPMAILER_LANG['instantiate'] = '未知函数调用。';
|
||||
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = '发信客户端不被支持。';
|
||||
$PHPMAILER_LANG['provide_address'] = '收件人没有设置邮箱,请到组织视图中检查下相应用户的email设置。';
|
||||
$PHPMAILER_LANG['provide_address'] = '收件人没有设置邮箱,请到后台-人员-用户编辑中添加上邮箱地址。';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误:收件人地址错误,或检查SMTP服务设置,是否允许发送该邮件地址:';
|
||||
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
|
||||
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
|
||||
|
||||
@@ -17,7 +17,7 @@ $PHPMAILER_LANG['from_failed'] = '發送地址錯誤:';
|
||||
$PHPMAILER_LANG['instantiate'] = '未知函數調用。';
|
||||
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = '發信客戶端不被支持。';
|
||||
$PHPMAILER_LANG['provide_address'] = '收件人沒有設置郵箱,請到組織視圖中檢查下相應用戶的email設置。';
|
||||
$PHPMAILER_LANG['provide_address'] = '收件人沒有設置郵箱,請到後台-人員-用戶編輯中添加上郵箱地址。';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP 錯誤:收件人地址錯誤,或檢查SMTP服務設置,是否允許發送該郵件地址:';
|
||||
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
|
||||
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
|
||||
|
||||
@@ -780,13 +780,14 @@ class gitlab
|
||||
}
|
||||
else
|
||||
{
|
||||
$response = commonModel::http($api);
|
||||
list($response, $httpCode) = commonModel::http($api, null, array(), array(), 'data', 'Post', 30, true);
|
||||
if(!empty(commonModel::$requestErrors))
|
||||
{
|
||||
commonModel::$requestErrors = array();
|
||||
return array();
|
||||
}
|
||||
|
||||
if($httpCode == 500) return array();
|
||||
return json_decode($response);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ $config->action->objectNameFields['stage'] = 'name';
|
||||
$config->action->objectNameFields['apistruct'] = 'name';
|
||||
$config->action->objectNameFields['repo'] = 'name';
|
||||
$config->action->objectNameFields['dataview'] = 'name';
|
||||
$config->action->objectNameFields['zahost'] = 'name';
|
||||
$config->action->objectNameFields['zanode'] = 'name';
|
||||
|
||||
$config->action->commonImgSize = 870;
|
||||
|
||||
@@ -237,6 +237,10 @@ $lang->action->desc->relieved = '$date, relieved by <strong>$actor</
|
||||
$lang->action->desc->switchtolight = '$date, Switch from ALM mode to light mode by <strong>'. $lang->admin->system .'</strong>.' . "\n";
|
||||
$lang->action->desc->getvnc = '$date, Remote control <strong>$extra</strong> by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->unlinkproduct = '$date, the project is disassociated from the $extra, synchronization disassociates the ' . $lang->executionCommon . 's of the project from the $extra.' . "\n";
|
||||
$lang->action->desc->createdsnapshot = '$date, <strong>$actor</strong> creates a snapshot <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->restoredsnapshot = '$date, <strong>$actor</strong> restored a snapshot <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->editsnapshot = '$date, <strong>$actor</strong> edited the snapshot <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->deletesnapshot = '$date, <strong>$actor</strong> deleted snapshot <strong>$extra</strong>。' . "\n";
|
||||
|
||||
/* Used to describe the history of operations related to parent-child tasks. */
|
||||
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
|
||||
@@ -419,6 +423,10 @@ $lang->action->label->switchtolight = 'switch from ALM mode to light mod
|
||||
$lang->action->label->linkedrepo = 'Linked Code Repo';
|
||||
$lang->action->label->unlinkedrepo = 'Unlinked Code Repo';
|
||||
$lang->action->label->unlinkproduct = 'Unlinked Product';
|
||||
$lang->action->label->createdsnapshot = 'create snapshot';
|
||||
$lang->action->label->restoredsnapshot = 'create snapshot';
|
||||
$lang->action->label->editsnapshot = 'edit snapshot';
|
||||
$lang->action->label->deletesnapshot = 'deleted snapshot';
|
||||
|
||||
/* Dynamic information is grouped by object. */
|
||||
$lang->action->dynamicAction = new stdclass;
|
||||
|
||||
@@ -237,6 +237,10 @@ $lang->action->desc->relieved = '$date, relieved by <strong>$actor</
|
||||
$lang->action->desc->switchtolight = '$date, Switch from ALM mode to light mode by <strong>'. $lang->admin->system .'</strong>.' . "\n";
|
||||
$lang->action->desc->getvnc = '$date, Remote control <strong>$extra</strong> by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->unlinkproduct = '$date, the project is disassociated from the $extra, synchronization disassociates the ' . $lang->executionCommon . 's of the project from the $extra.' . "\n";
|
||||
$lang->action->desc->createdsnapshot = '$date, <strong>$actor</strong> creates a snapshot <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->restoredsnapshot = '$date, <strong>$actor</strong> restored a snapshot <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->editsnapshot = '$date, <strong>$actor</strong> edited the snapshot <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->deletesnapshot = '$date, <strong>$actor</strong> deleted snapshot <strong>$extra</strong>。' . "\n";
|
||||
|
||||
/* Used to describe the history of operations related to parent-child tasks. */
|
||||
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
|
||||
@@ -419,6 +423,10 @@ $lang->action->label->switchtolight = 'switch from ALM mode to light mod
|
||||
$lang->action->label->linkedrepo = 'Linked Code Repo';
|
||||
$lang->action->label->unlinkedrepo = 'Unlinked Code Repo';
|
||||
$lang->action->label->unlinkproduct = 'Unlinked Product';
|
||||
$lang->action->label->createdsnapshot = 'create snapshot';
|
||||
$lang->action->label->restoredsnapshot = 'create snapshot';
|
||||
$lang->action->label->editsnapshot = 'edit snapshot';
|
||||
$lang->action->label->deletesnapshot = 'deleted snapshot';
|
||||
|
||||
/* Dynamic information is grouped by object. */
|
||||
$lang->action->dynamicAction = new stdclass;
|
||||
|
||||
@@ -237,6 +237,10 @@ $lang->action->desc->relieved = '$date, relieved by <strong>$actor</
|
||||
$lang->action->desc->switchtolight = '$date, Switch from ALM mode to light mode by <strong>'. $lang->admin->system .'</strong>.' . "\n";
|
||||
$lang->action->desc->getvnc = '$date, Remote control <strong>$extra</strong> by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->unlinkproduct = '$date, the project is disassociated from the $extra, synchronization disassociates the ' . $lang->executionCommon . 's of the project from the $extra.' . "\n";
|
||||
$lang->action->desc->createdsnapshot = '$date, <strong>$actor</strong> creates a snapshot <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->restoredsnapshot = '$date, <strong>$actor</strong> restored a snapshot <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->editsnapshot = '$date, <strong>$actor</strong> edited the snapshot <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->deletesnapshot = '$date, <strong>$actor</strong> deleted snapshot <strong>$extra</strong>。' . "\n";
|
||||
|
||||
/* Used to describe the history of operations related to parent-child tasks. */
|
||||
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> a créé un sous-tâche <strong>$extra</strong>。' . "\n";
|
||||
@@ -419,6 +423,10 @@ $lang->action->label->switchtolight = 'switch from ALM mode to light mod
|
||||
$lang->action->label->linkedrepo = 'Linked Code Repo';
|
||||
$lang->action->label->unlinkedrepo = 'Unlinked Code Repo';
|
||||
$lang->action->label->unlinkproduct = 'Unlinked Product';
|
||||
$lang->action->label->createdsnapshot = 'create snapshot';
|
||||
$lang->action->label->restoredsnapshot = 'create snapshot';
|
||||
$lang->action->label->editsnapshot = 'edit snapshot';
|
||||
$lang->action->label->deletesnapshot = 'deleted snapshot';
|
||||
|
||||
/* Dynamic information is grouped by object. */
|
||||
$lang->action->dynamicAction = new stdclass();
|
||||
|
||||
@@ -237,6 +237,10 @@ $lang->action->desc->relieved = '$date, 由 <strong>$actor</strong>
|
||||
$lang->action->desc->switchtolight = '$date, 由于 <strong>'. $lang->admin->system .'</strong> 从全生命周期管理模式切换为轻量管理模式,项目访问控制由项目集内公开调整为私有。' . "\n";
|
||||
$lang->action->desc->getvnc = '$date, <strong>$actor</strong>对执行节点 <strong>$extra</strong> 进行了远程操控。' . "\n";
|
||||
$lang->action->desc->unlinkproduct = '$date, 系统判断由于' . $lang->executionCommon . '所属项目与$extra取消关联,同步将' . $lang->executionCommon . '与$extra取消关联。' . "\n";
|
||||
$lang->action->desc->createdsnapshot = '$date, <strong>$actor</strong> 创建了快照 <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->restoredsnapshot = '$date, <strong>$actor</strong> 还原了快照 <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->editsnapshot = '$date, <strong>$actor</strong> 编辑了快照 <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->deletesnapshot = '$date, <strong>$actor</strong> 删除了快照 <strong>$extra</strong>。' . "\n";
|
||||
|
||||
/* 用来描述和父子任务相关的操作历史记录。*/
|
||||
$lang->action->desc->createchildren = '$date, 由 <strong>$actor</strong> 创建子任务 <strong>$extra</strong>。' . "\n";
|
||||
@@ -412,13 +416,17 @@ $lang->action->label->resume = '恢复了';
|
||||
$lang->action->label->reboot = '重启了';
|
||||
$lang->action->label->boot = '启动了';
|
||||
$lang->action->label->destroy = '关闭了';
|
||||
$lang->action->label->getvnc = '远程操控';
|
||||
$lang->action->label->getvnc = '远程操控了';
|
||||
$lang->action->label->synctwins = '同步修改了';
|
||||
$lang->action->label->relieved = '解除了';
|
||||
$lang->action->label->switchtolight = '从全生命周期管理模式切换为轻量管理模式';
|
||||
$lang->action->label->linkedrepo = '关联代码库到';
|
||||
$lang->action->label->unlinkedrepo = '取消了项目与代码库的关联';
|
||||
$lang->action->label->unlinkproduct = '取消了与产品的关联';
|
||||
$lang->action->label->createdsnapshot = '创建了快照';
|
||||
$lang->action->label->restoredsnapshot = '还原了快照';
|
||||
$lang->action->label->editsnapshot = '编辑了快照';
|
||||
$lang->action->label->deletesnapshot = '编辑了快照';
|
||||
|
||||
/* 动态信息按照对象分组 */
|
||||
$lang->action->dynamicAction = new stdclass();
|
||||
|
||||
@@ -481,7 +481,7 @@ class actionModel extends model
|
||||
$name = $this->dao->select('name')->from(TABLE_TESTTASK)->where('id')->eq($action->extra)->fetch('name');
|
||||
if($name) $action->extra = common::hasPriv('testtask', 'view') ? html::a(helper::createLink('testtask', 'view', "taskID=$action->extra"), $name) : $name;
|
||||
}
|
||||
elseif($action->objectType != 'feedback' and $actionName == 'tostory')
|
||||
elseif(strpos('feedback,ticket', $action->objectType) === false and $actionName == 'tostory')
|
||||
{
|
||||
$title = $this->dao->select('title')->from(TABLE_STORY)->where('id')->eq($action->extra)->fetch('title');
|
||||
if($title) $action->extra = common::hasPriv('story', 'view') ? html::a(helper::createLink('story', 'view', "storyID=$action->extra"), "#$action->extra " . $title) : "#$action->extra " . $title;
|
||||
|
||||
@@ -93,12 +93,12 @@ class backup extends control
|
||||
$backFileName = "{$this->backupPath}{$fileName}.sql";
|
||||
if(!$nosafe) $backFileName .= '.php';
|
||||
$result = $this->backup->backSQL($backFileName);
|
||||
|
||||
if(!$result->result)
|
||||
{
|
||||
if($reload == 'yes')
|
||||
{
|
||||
echo js::alert(sprintf($this->lang->backup->error->noWritable, $this->backupPath));
|
||||
return print(js::reload('parent'));
|
||||
return print(sprintf($this->lang->backup->error->noWritable, $this->backupPath));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -112,12 +112,12 @@ class backup extends control
|
||||
$backFileName = "{$this->backupPath}{$fileName}.file";
|
||||
|
||||
$result = $this->backup->backFile($backFileName);
|
||||
|
||||
if(!$result->result)
|
||||
{
|
||||
if($reload == 'yes')
|
||||
{
|
||||
echo js::alert(sprintf($this->lang->backup->error->backupFile, $result->error));
|
||||
return print(js::reload('parent'));
|
||||
return print(sprintf($this->lang->backup->error->backupFile, $result->error));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -132,8 +132,7 @@ class backup extends control
|
||||
{
|
||||
if($reload == 'yes')
|
||||
{
|
||||
echo js::alert(sprintf($this->lang->backup->error->backupCode, $result->error));
|
||||
return print(js::reload('parent'));
|
||||
return print(sprintf($this->lang->backup->error->backupCode, $result->error));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -164,7 +163,7 @@ class backup extends control
|
||||
}
|
||||
}
|
||||
|
||||
if($reload == 'yes') return print(js::reload('parent'));
|
||||
if($reload == 'yes') return print($this->lang->backup->success->backup);
|
||||
echo $this->lang->backup->success->backup . "\n";
|
||||
}
|
||||
|
||||
|
||||
@@ -2,9 +2,32 @@ $(function()
|
||||
{
|
||||
$('.backup').click(function()
|
||||
{
|
||||
var timeID = null;
|
||||
|
||||
$.ajax({
|
||||
url: $(this).attr('data-link'),
|
||||
success: function(data)
|
||||
{
|
||||
clearInterval(timeID);
|
||||
|
||||
$('#waitting .modal-body #message').append(data);
|
||||
|
||||
setTimeout(function(){return location.reload();}, 2000);
|
||||
},
|
||||
error: function(request, textstatus, error)
|
||||
{
|
||||
clearInterval(timeID);
|
||||
|
||||
if(textstatus == 'timeout') $('#waitting .modal-body #message').append("<p class='text-danger'>" + backupTimeout + '</p>');
|
||||
|
||||
setTimeout(function(){return location.reload();}, 2000);
|
||||
}
|
||||
});
|
||||
|
||||
$('#waitting .modal-body #backupType').html(backup);
|
||||
$('#waitting').modal('show');
|
||||
setInterval(function()
|
||||
|
||||
timeID = setInterval(function()
|
||||
{
|
||||
$.get(createLink('backup', 'ajaxGetProgress'), function(data)
|
||||
{
|
||||
@@ -12,6 +35,7 @@ $(function()
|
||||
});
|
||||
}, 1000);
|
||||
})
|
||||
|
||||
$('.rmPHPHeader').click(function()
|
||||
{
|
||||
$('#waitting .modal-body #backupType').html(rmPHPHeader);
|
||||
|
||||
@@ -48,3 +48,4 @@ $lang->backup->error->restoreSQL = "Datenbankwiederherstellung fehlgeschlagen.
|
||||
$lang->backup->error->restoreFile = "Dateiwiederherstellung fehlgeschlagen. Error: %s.";
|
||||
$lang->backup->error->backupFile = "Dateibackup fehlgeschlagen. Error: %s.";
|
||||
$lang->backup->error->backupCode = "Codebackup fehlgeschlagen. Error: %s.";
|
||||
$lang->backup->error->timeout = "Backup timeout.";
|
||||
|
||||
@@ -48,3 +48,4 @@ $lang->backup->error->restoreSQL = "Failed to restore the database library. Err
|
||||
$lang->backup->error->restoreFile = "Failed to restore the file. Error %s.";
|
||||
$lang->backup->error->backupFile = "Failed to back up the file. Error %s.";
|
||||
$lang->backup->error->backupCode = "Failed to back up the code. Error %s.";
|
||||
$lang->backup->error->timeout = "Backup timeout.";
|
||||
|
||||
@@ -48,3 +48,4 @@ $lang->backup->error->restoreSQL = "Echec pour restaurer la database library. E
|
||||
$lang->backup->error->restoreFile = "Echec pour restaurer le fichier. Erreur %s.";
|
||||
$lang->backup->error->backupFile = "Echec pour sauvegarder le fichier. Erreur %s.";
|
||||
$lang->backup->error->backupCode = "Echec pour sauvegarder le code. Erreur %s.";
|
||||
$lang->backup->error->timeout = "Backup timeout.";
|
||||
|
||||
@@ -48,3 +48,4 @@ $lang->backup->error->restoreSQL = "数据库还原失败,错误:%s";
|
||||
$lang->backup->error->restoreFile = "附件还原失败,错误:%s";
|
||||
$lang->backup->error->backupFile = "附件备份失败,错误:%s";
|
||||
$lang->backup->error->backupCode = "代码备份失败,错误:%s";
|
||||
$lang->backup->error->timeout = "备份超时";
|
||||
|
||||
@@ -27,7 +27,13 @@
|
||||
</h2>
|
||||
<div class='pull-right'>
|
||||
<?php common::printLink('backup', 'setting', '', "<i class='icon icon-cog'></i> " . $lang->backup->setting, '', "data-width='500' class='iframe btn btn-primary'");?>
|
||||
<?php common::printLink('backup', 'backup', 'reload=yes', "<i class='icon icon-copy'></i> " . $lang->backup->backup, 'hiddenwin', "class='btn btn-primary backup'");?>
|
||||
<?php
|
||||
if(common::hasPriv('backup', 'backup'))
|
||||
{
|
||||
$backupLink = helper::createLink('backup', 'backup', 'reload=yes');
|
||||
echo html::commonButton("<i class='icon icon-copy'> </i>" . $lang->backup->backup, "data-link='{$backupLink}'", 'btn btn-primary backup');
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
<table class='table table-condensed table-bordered active-disabled table-fixed'>
|
||||
@@ -114,4 +120,5 @@
|
||||
<?php js::set('rmPHPHeader', $lang->backup->rmPHPHeader);?>
|
||||
<?php js::set('confirmRestore', $lang->backup->confirmRestore);?>
|
||||
<?php js::set('restore', $lang->backup->restore);?>
|
||||
<?php js::set('backupTimeout', $lang->backup->error->timeout);?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -1,34 +1,28 @@
|
||||
<div class='flowchart'>
|
||||
<?php foreach ($lang->block->flowchart as $flowName => $flow):?>
|
||||
<?php $idx = 0; ?>
|
||||
<div class='row row-<?php echo $flowName?>'>
|
||||
<div class='row flow-chart-row row-<?php echo $flowName?>'>
|
||||
<?php foreach ($flow as $flowItem):?>
|
||||
<div class='flow-item flow-item-<?php echo $idx ++ ?>'><div title='<?php echo $flowItem ?>'><span class='flow-item-display'><?php echo $flowItem ?></span></div></div>
|
||||
<div class='flow-item flow-item-<?php echo $idx ++ ?>'><div title='<?php echo $flowItem ?>'><div class='flow-item-display'><?php echo $flowItem ?></div></div></div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<style>
|
||||
.flow-item {float: left; width: 16.66667%; max-width: 180px; text-align: center; margin-bottom: 9px; padding-right: 15px;}
|
||||
.flow-item > div {position: relative; padding: 5px 0 5px 8px; line-height: 20px; background: #66A2FF; white-space:nowrap; overflow: visible; color: #3c4353}
|
||||
.flow-item > div:before, .flow-item > div:after {content: ' '; display: block; width: 0; height: 0; border-style: solid; border-width: 15px 0 15px 10px; border-color: transparent transparent transparent #66A2FF; position: absolute; left: 0; top: 0;}
|
||||
.flow-chart-row {display: flex; gap: 5px; margin-bottom: 9px; width: 100%;}
|
||||
.flow-item {background: url('/static/svg/arrow-blue.svg') center no-repeat; background-size: cover; text-align: center; margin: 0; padding-right: 15px; flex:0 1 15%; position: relative; padding: 5px 0 5px 8px; white-space:nowrap; overflow: hidden; color: #3c4353; display: flex; align-items: center; text-align: center; padding-right: 10px;}
|
||||
.ie-8 .flow-item > div:before {display: none}
|
||||
.flow-item > div:before {border-left-color: #fff; z-index: 1}
|
||||
.flow-item > div:after {left: auto; right: -10px; z-index: 2}
|
||||
.flow-item > div > span {display: flow-root; overflow: hidden;}
|
||||
.flow-item > div > div {display: flow-root; overflow: hidden;}
|
||||
.ie-8 .flow-item > div {margin-right: 10px}
|
||||
.flow-item-0 > div {color: #FFF; font-weight: 400; padding-left: 0;}
|
||||
.flow-item-0 > div {color: #FFF; font-weight: 400;}
|
||||
.flow-item-0 > div:before {display: none}
|
||||
.flow-item-1 > div,
|
||||
.flow-item-2 > div,
|
||||
.flow-item-3 > div,
|
||||
.flow-item-4 > div,
|
||||
.flow-item-5 > div {background: #E6F0FF}
|
||||
.flow-item-1 > div:after,
|
||||
.flow-item-2 > div:after,
|
||||
.flow-item-3 > div:after,
|
||||
.flow-item-4 > div:after,
|
||||
.flow-item-5 > div:after {border-left-color: #E6F0FF}
|
||||
|
||||
.flow-item-1,
|
||||
.flow-item-2,
|
||||
.flow-item-3,
|
||||
.flow-item-4,
|
||||
.flow-item-5 {background-image: url('/static/svg/arrow-white.svg'); }
|
||||
|
||||
.block-sm .flow-item {padding-right: 5px}
|
||||
.block-sm .flow-item > div:before, .block-sm .flow-item > div:after {border-width: 15px 0 15px 6px;}
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-strategy'><?php echo zget($lang->risk->strategyList, $risk->strategy, $risk->strategy)?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-status'>
|
||||
<td class='c-status' data-text="<?php echo $risk->status;?>">
|
||||
<span class="status-risk status-<?php echo $risk->status?>"><?php echo zget($lang->risk->statusList, $risk->status);?></span>
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
|
||||
+12
-3
@@ -565,8 +565,9 @@ class bug extends control
|
||||
}
|
||||
else
|
||||
{
|
||||
$builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'noempty,noterminate,nodone,withbranch,noreleased');
|
||||
$stories = $this->story->getProductStoryPairs($productID, $branch, 0, 'all','id_desc', 0, 'full', 'story', false);
|
||||
$moduleID = $moduleID ? $moduleID : 0;
|
||||
$builds = $this->loadModel('build')->getBuildPairs($productID, $branch, 'noempty,noterminate,nodone,withbranch,noreleased');
|
||||
$stories = $this->story->getProductStoryPairs($productID, $branch, $moduleID, 'all','id_desc', 0, 'full', 'story', false);
|
||||
}
|
||||
|
||||
$moduleOwner = $this->bug->getModuleOwner($moduleID, $productID);
|
||||
@@ -580,7 +581,7 @@ class bug extends control
|
||||
if(empty($moduleOptionMenu)) return print(js::locate(helper::createLink('tree', 'browse', "productID=$productID&view=story")));
|
||||
|
||||
/* Get products and projects. */
|
||||
$products = $this->config->CRProduct ? $this->products : $this->product->getPairs('noclosed', 0, 'program_asc');
|
||||
$products = $this->config->CRProduct ? $this->products : $this->product->getPairs('noclosed', 0, 'program_asc', 'all');
|
||||
$projects = array(0 => '');
|
||||
if($executionID)
|
||||
{
|
||||
@@ -665,6 +666,7 @@ class bug extends control
|
||||
$this->view->storyID = $storyID;
|
||||
$this->view->buildID = $buildID;
|
||||
$this->view->caseID = $caseID;
|
||||
$this->view->resultFiles = (!empty($resultID) and !empty($stepIdList)) ? $this->loadModel('file')->getByObject('stepResult', $resultID, str_replace('_', ',', $stepIdList)) : array();
|
||||
$this->view->runID = $runID;
|
||||
$this->view->version = $version;
|
||||
$this->view->testtask = $testtask;
|
||||
@@ -1955,6 +1957,8 @@ class bug extends control
|
||||
$actionID = $this->action->create('bug', $bugID, 'Closed', $this->post->comment);
|
||||
$this->action->logHistory($actionID, $changes);
|
||||
|
||||
$this->dao->update(TABLE_BUG)->set('assignedTo')->eq('closed')->where('id')->eq((int)$bugID)->exec();
|
||||
|
||||
$this->executeHooks($bugID);
|
||||
|
||||
$extra = str_replace(array(',', ' '), array('&', ''), $extra);
|
||||
@@ -2093,6 +2097,7 @@ class bug extends control
|
||||
/* Reset $_POST. Do not unset that because the function of close need that in model. */
|
||||
$_POST = array();
|
||||
|
||||
$closedBugs = array();
|
||||
$bugs = $this->bug->getByList($bugIDList);
|
||||
foreach($bugs as $bugID => $bug)
|
||||
{
|
||||
@@ -2106,7 +2111,11 @@ class bug extends control
|
||||
|
||||
$actionID = $this->action->create('bug', $bugID, 'Closed');
|
||||
$this->action->logHistory($actionID, $changes);
|
||||
$closedBugs[] = $bugID;
|
||||
}
|
||||
|
||||
$this->dao->update(TABLE_BUG)->set('assignedTo')->eq('closed')->where('id')->in($closedBugs)->exec();
|
||||
|
||||
$this->loadModel('score')->create('ajax', 'batchOther');
|
||||
if(isset($skipBugs)) echo js::alert(sprintf($this->lang->bug->skipClose, join(',', $skipBugs)));
|
||||
if($viewType)
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
th.c-confirmed {text-align: center;}
|
||||
.c-severity {overflow: hidden; white-space: nowrap;}
|
||||
.c-keywords {overflow: hidden; white-space: nowrap;}
|
||||
.c-id {text-overflow: ellipsis; white-space: nowrap;}
|
||||
|
||||
.body-modal #mainMenu>.btn-toolbar {width: auto;}
|
||||
|
||||
@@ -695,7 +695,7 @@ function loadExecutionBuilds(executionID, num)
|
||||
else
|
||||
{
|
||||
link = createLink('build', 'ajaxGetExecutionBuilds', 'executionID=' + executionID + '&productID=' + productID + '&varName=openedBuild&build=' + oldOpenedBuild + '&branch=' + branch + '&index=0&needCreate=false&type=normal&number=' + num);
|
||||
$('#openedBuildBox' + num).load(link, function(){$(this).find('select').val(oldOpenedBuild).picker({optionRender: markReleaseBuilds})});
|
||||
$('#openedBuildBox' + num).load(link, function(){$(this).find('select').val(oldOpenedBuild).picker({optionRender: markReleasedBuilds})});
|
||||
|
||||
oldResolvedBuild = $('#resolvedBuild').val() ? $('#resolvedBuild').val() : 0;
|
||||
link = createLink('build', 'ajaxGetProductBuilds', 'productID=' + productID + '&varName=resolvedBuild&build=' + oldResolvedBuild + '&branch=' + branch);
|
||||
@@ -866,9 +866,15 @@ function notice()
|
||||
var html = '';
|
||||
if($('#execution').length == 0 || $('#execution').val() == 0)
|
||||
{
|
||||
var branch = $('#branch').val();
|
||||
var branch = $('#branch').val();
|
||||
var projectID = $('#project').val();
|
||||
|
||||
if(typeof(branch) == 'undefined') branch = 0;
|
||||
if(typeof(projectID) == 'undefined') projectID = 0;
|
||||
|
||||
var link = createLink('release', 'create', 'productID=' + $('#product').val() + '&branch=' + branch);
|
||||
if(projectID > 0) link = createLink('projectrelease', 'create', 'projectID=' + projectID);
|
||||
|
||||
if(config.onlybody != 'yes') link += link.indexOf('?') >= 0 ? '&onlybody=yes' : '?onlybody=yes';
|
||||
html += '<a href="' + link + '" data-toggle="modal" data-type="iframe" style="padding-right:5px">' + createRelease + '</a> ';
|
||||
html += '<a href="javascript:loadProductBuilds(' + $('#product').val() + ')">' + refresh + '</a>';
|
||||
|
||||
+40
-25
@@ -78,7 +78,7 @@ class bugModel extends model
|
||||
->join('mailto', ',')
|
||||
->join('os', ',')
|
||||
->join('browser', ',')
|
||||
->remove('files,labels,uid,oldTaskID,contactListMenu,region,lane,ticket')
|
||||
->remove('files,labels,uid,oldTaskID,contactListMenu,region,lane,ticket,deleteFiles,resultFiles')
|
||||
->get();
|
||||
|
||||
/* Check repeat bug. */
|
||||
@@ -98,6 +98,23 @@ class bugModel extends model
|
||||
{
|
||||
$bugID = $this->dao->lastInsertID();
|
||||
|
||||
if(isset($_POST['resultFiles']))
|
||||
{
|
||||
$resultFiles = $_POST['resultFiles'];
|
||||
if(isset($_POST['deleteFiles']))
|
||||
{
|
||||
foreach($_POST['deleteFiles'] as $deletedCaseFileID) $resultFiles = trim(str_replace(",$deletedCaseFileID,", ',', ",$resultFiles,"), ',');
|
||||
}
|
||||
$files = $this->dao->select('*')->from(TABLE_FILE)->where('id')->in($resultFiles)->fetchAll('id');
|
||||
foreach($files as $file)
|
||||
{
|
||||
unset($file->id);
|
||||
$file->objectType = 'bug';
|
||||
$file->objectID = $bugID;
|
||||
$this->dao->insert(TABLE_FILE)->data($file)->exec();
|
||||
}
|
||||
}
|
||||
|
||||
$this->file->updateObjectID($this->post->uid, $bugID, 'bug');
|
||||
$this->file->saveUpload('bug', $bugID);
|
||||
empty($bug->case) ? $this->loadModel('score')->create('bug', 'create', $bugID) : $this->loadModel('score')->create('bug', 'createFormCase', $bug->case);
|
||||
@@ -490,7 +507,7 @@ class bugModel extends model
|
||||
->beginIF($branch !== 'all')->andWhere('branch')->eq($branch)->fi()
|
||||
->beginIF(!empty($moduleIdList))->andWhere('module')->in($moduleIdList)->fi()
|
||||
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
|
||||
->andWhere('execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('execution')->in(array_keys($executions))->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->projects)->fi()
|
||||
->orderBy($orderBy)->page($pager)->fetchAll();
|
||||
@@ -1493,7 +1510,6 @@ class bugModel extends model
|
||||
$oldBug = $this->getById($bugID);
|
||||
$bug = fixer::input('post')
|
||||
->add('id', $bugID)
|
||||
->add('assignedTo', 'closed')
|
||||
->add('status', 'closed')
|
||||
->add('confirmed', 1)
|
||||
->setDefault('assignedDate', $now)
|
||||
@@ -1579,7 +1595,7 @@ class bugModel extends model
|
||||
if($day == $days -1) $startDate = date('Y-m-d', $time) . ' 00:00:00';
|
||||
}
|
||||
|
||||
$dateFields = ['openedDate', 'resolvedDate', 'closedDate'];
|
||||
$dateFields = array('openedDate', 'resolvedDate', 'closedDate');
|
||||
$staticData = array();
|
||||
foreach($dateFields as $field)
|
||||
{
|
||||
@@ -2639,7 +2655,7 @@ class bugModel extends model
|
||||
$bugs = $this->dao->select("t1.*, t2.title as planTitle, IF(t1.`pri` = 0, {$this->config->maxPriValue}, t1.`pri`) as priOrder, IF(t1.`severity` = 0, {$this->config->maxPriValue}, t1.`severity`) as severityOrder")->from(TABLE_BUG)->alias('t1')
|
||||
->leftJoin(TABLE_PRODUCTPLAN)->alias('t2')->on('t1.plan = t2.id')
|
||||
->where('t1.product')->in($productIDList)
|
||||
->andWhere('t1.execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('t1.execution')->in(array_keys($executions))->fi()
|
||||
->beginIF($branch !== 'all')->andWhere('t1.branch')->eq($branch)->fi()
|
||||
->beginIF($modules)->andWhere('t1.module')->in($modules)->fi()
|
||||
->beginIF($projectID)->andWhere('t1.project')->eq($projectID)->fi()
|
||||
@@ -2673,7 +2689,7 @@ class bugModel extends model
|
||||
->beginIF($branch !== 'all')->andWhere('branch')->in($branch)->fi()
|
||||
->beginIF($modules)->andWhere('module')->in($modules)->fi()
|
||||
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
|
||||
->andWhere('execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('execution')->in(array_keys($executions))->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->projects)->fi()
|
||||
->orderBy($orderBy)->page($pager)->fetchAll();
|
||||
@@ -2700,7 +2716,7 @@ class bugModel extends model
|
||||
->beginIF($branch !== 'all')->andWhere('branch')->in($branch)->fi()
|
||||
->beginIF($modules)->andWhere('module')->in($modules)->fi()
|
||||
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
|
||||
->andWhere('execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('execution')->in(array_keys($executions))->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->projects)->fi()
|
||||
->orderBy($orderBy)->page($pager)->fetchAll();
|
||||
@@ -2727,7 +2743,7 @@ class bugModel extends model
|
||||
->beginIF($branch !== 'all')->andWhere('branch')->in($branch)->fi()
|
||||
->beginIF($modules)->andWhere('module')->in($modules)->fi()
|
||||
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
|
||||
->andWhere('execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('execution')->in(array_keys($executions))->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->projects)->fi()
|
||||
->orderBy($orderBy)->page($pager)->fetchAll();
|
||||
@@ -2755,7 +2771,7 @@ class bugModel extends model
|
||||
->beginIF($branch !== 'all')->andWhere('branch')->in($branch)->fi()
|
||||
->beginIF($modules)->andWhere('module')->in($modules)->fi()
|
||||
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
|
||||
->andWhere('execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('execution')->in(array_keys($executions))->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->projects)->fi()
|
||||
->orderBy($orderBy)->page($pager)->fetchAll();
|
||||
@@ -2778,7 +2794,7 @@ class bugModel extends model
|
||||
{
|
||||
return $this->dao->select("*, IF(`pri` = 0, {$this->config->maxPriValue}, `pri`) as priOrder, IF(`severity` = 0, {$this->config->maxPriValue}, `severity`) as severityOrder")->from(TABLE_BUG)
|
||||
->where('product')->in($productIDList)
|
||||
->andWhere('execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('execution')->in(array_keys($executions))->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->andWhere('confirmed')->eq(0)
|
||||
->beginIF($branch !== 'all')->andWhere('branch')->in($branch)->fi()
|
||||
@@ -2806,7 +2822,7 @@ class bugModel extends model
|
||||
{
|
||||
return $this->dao->select("*, IF(`pri` = 0, {$this->config->maxPriValue}, `pri`) as priOrder, IF(`severity` = 0, {$this->config->maxPriValue}, `severity`) as severityOrder")->from(TABLE_BUG)
|
||||
->where('product')->in($productIDList)
|
||||
->andWhere('execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('execution')->in(array_keys($executions))->fi()
|
||||
->beginIF($branch !== 'all')->andWhere('branch')->in($branch)->fi()
|
||||
->beginIF($modules)->andWhere('module')->in($modules)->fi()
|
||||
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
|
||||
@@ -2836,7 +2852,7 @@ class bugModel extends model
|
||||
{
|
||||
return $this->dao->select("*, IF(`pri` = 0, {$this->config->maxPriValue}, `pri`) as priOrder, IF(`severity` = 0, {$this->config->maxPriValue}, `severity`) as severityOrder")->from(TABLE_BUG)
|
||||
->where('product')->in($productIDList)
|
||||
->andWhere('execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('execution')->in(array_keys($executions))->fi()
|
||||
->beginIF($branch !== 'all')->andWhere('branch')->in($branch)->fi()
|
||||
->beginIF($modules)->andWhere('module')->in($modules)->fi()
|
||||
->beginIF($status == 'unclosed')->andWhere('status')->ne('closed')->fi()
|
||||
@@ -2868,7 +2884,7 @@ class bugModel extends model
|
||||
return $this->dao->select("*, IF(`pri` = 0, {$this->config->maxPriValue}, `pri`) as priOrder, IF(`severity` = 0, {$this->config->maxPriValue}, `severity`) as severityOrder")->from(TABLE_BUG)
|
||||
->where('lastEditedDate')->lt($lastEditedDate)
|
||||
->andWhere('product')->in($productIDList)
|
||||
->andWhere('execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('execution')->in(array_keys($executions))->fi()
|
||||
->beginIF($branch !== 'all')->andWhere('branch')->in($branch)->fi()
|
||||
->beginIF($modules)->andWhere('module')->in($modules)->fi()
|
||||
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
|
||||
@@ -2899,7 +2915,7 @@ class bugModel extends model
|
||||
->beginIF($branch !== 'all')->andWhere('branch')->in($branch)->fi()
|
||||
->beginIF($modules)->andWhere('module')->in($modules)->fi()
|
||||
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
|
||||
->andWhere('execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('execution')->in(array_keys($executions))->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->projects)->fi()
|
||||
->orderBy($orderBy)->page($pager)->fetchAll();
|
||||
@@ -2927,8 +2943,8 @@ class bugModel extends model
|
||||
->beginIF($branch !== 'all')->andWhere('t1.branch')->in($branch)->fi()
|
||||
->beginIF($modules)->andWhere('t1.module')->in($modules)->fi()
|
||||
->beginIF($projectID)->andWhere('t1.project')->eq($projectID)->fi()
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('t1.execution')->in(array_keys($executions))->fi()
|
||||
->andWhere('t2.version > t1.storyVersion')
|
||||
->andWhere('t1.execution')->in(array_keys($executions))
|
||||
->andWhere('t1.deleted')->eq(0)
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t1.project')->in('0,' . $this->app->user->view->projects)->fi()
|
||||
->orderBy($orderBy)
|
||||
@@ -2957,7 +2973,7 @@ class bugModel extends model
|
||||
->beginIF($branch !== 'all')->andWhere('branch')->in($branch)->fi()
|
||||
->beginIF($modules)->andWhere('module')->in($modules)->fi()
|
||||
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
|
||||
->andWhere('execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('execution')->in(array_keys($executions))->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->andWhere('status')->ne('closed')
|
||||
->andWhere('id')->in($actionIDList)
|
||||
@@ -3075,7 +3091,7 @@ class bugModel extends model
|
||||
$bugs = $this->dao->select("t1.*, t2.title as planTitle, IF(`pri` = 0, {$this->config->maxPriValue}, `pri`) as priOrder, IF(`severity` = 0, {$this->config->maxPriValue}, `severity`) as severityOrder")->from(TABLE_BUG)->alias('t1')
|
||||
->leftJoin(TABLE_PRODUCTPLAN)->alias('t2')->on('t1.plan = t2.id')
|
||||
->where('t1.product')->in($productIDList)
|
||||
->andWhere('t1.execution')->in(array_keys($executions))
|
||||
->beginIF($this->app->tab !== 'qa')->andWhere('t1.execution')->in(array_keys($executions))->fi()
|
||||
->beginIF($branch !== 'all')->andWhere('t1.branch')->eq($branch)->fi()
|
||||
->beginIF($modules)->andWhere('t1.module')->in($modules)->fi()
|
||||
->beginIF($projectID)->andWhere('t1.project')->eq($projectID)->fi()
|
||||
@@ -3370,6 +3386,10 @@ class bugModel extends model
|
||||
$class .= ' text-ellipsis';
|
||||
$title = "title='" . $os . "'";
|
||||
break;
|
||||
case 'keywords':
|
||||
$class .= ' text-left';
|
||||
$title = "title='{$bug->keywords}'";
|
||||
break;
|
||||
case 'browser':
|
||||
$class .= ' text-ellipsis';
|
||||
$title = "title='" . $browser . "'";
|
||||
@@ -3598,9 +3618,9 @@ class bugModel extends model
|
||||
$ccList = substr($ccList, $commaPos + 1);
|
||||
}
|
||||
}
|
||||
elseif(strtolower($toList) == 'closed')
|
||||
elseif($bug->status == 'closed')
|
||||
{
|
||||
$toList = $bug->resolvedBy;
|
||||
$ccList .= ',' . $bug->resolvedBy;
|
||||
}
|
||||
|
||||
return array($toList, $ccList);
|
||||
@@ -3725,13 +3745,8 @@ class bugModel extends model
|
||||
/* Get related objects title or names. */
|
||||
$table = $this->config->objectTables[$object];
|
||||
if($table) $relatedObjects = $this->dao->select($pairs)->from($table)->where('id')->in($relatedObjectIdList)->fetchPairs();
|
||||
if($object == 'branch' and $this->session->currentProductType != 'normal')
|
||||
{
|
||||
$productID = current($bugs)->product;
|
||||
$relatedObjects = $this->dao->select($pairs)->from($table)->where('product')->eq($productID)->fetchPairs();
|
||||
}
|
||||
|
||||
if(in_array($object, array('build','resolvedBuild','branch'))) $relatedObjects = array('trunk' => $this->lang->trunk) + $relatedObjects;
|
||||
if(in_array($object, array('build','resolvedBuild'))) $relatedObjects = array('trunk' => $this->lang->trunk) + $relatedObjects;
|
||||
return array('' => '', 0 => '') + $relatedObjects;
|
||||
}
|
||||
|
||||
|
||||
@@ -335,7 +335,16 @@ if($this->app->tab == 'project') js::set('objectID', $projectID);
|
||||
<?php $this->printExtendFields('', 'table');?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->files;?></th>
|
||||
<td colspan='2'><?php echo $this->fetch('file', 'buildform', 'fileCount=1&percent=0.85');?></td>
|
||||
<td colspan='2'>
|
||||
<?php
|
||||
if($caseID)
|
||||
{
|
||||
echo $this->fetch('file', 'printFiles', array('files' => $resultFiles, 'fieldset' => 'false', 'object' => null, 'method' => 'edit', 'showDelete' => true, 'showEdit' => false));
|
||||
echo html::hidden('resultFiles', implode(',', array_keys($resultFiles)));
|
||||
}
|
||||
echo $this->fetch('file', 'buildform', 'fileCount=1&percent=0.85');
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
|
||||
+14
-2
@@ -65,10 +65,11 @@ class buildModel extends model
|
||||
{
|
||||
return $this->dao->select('t1.*, t2.name as executionName, t2.id as executionID, t2.deleted as executionDeleted, t3.name as productName')
|
||||
->from(TABLE_BUILD)->alias('t1')
|
||||
->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.execution = t2.id')
|
||||
->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.execution = 0 or t1.execution = t2.id')
|
||||
->leftJoin(TABLE_PRODUCT)->alias('t3')->on('t1.product = t3.id')
|
||||
->where('t1.deleted')->eq(0)
|
||||
->andWhere('t1.project')->ne(0)
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->beginIF($projectID)->andWhere('t1.project')->eq((int)$projectID)->fi()
|
||||
->beginIF($type == 'product' and $param)->andWhere('t1.product')->eq($param)->fi()
|
||||
->beginIF($type == 'bysearch')->andWhere($param)->fi()
|
||||
@@ -321,7 +322,7 @@ class buildModel extends model
|
||||
$builds[$build->date][$id] = $buildName;
|
||||
}
|
||||
|
||||
if(empty($builds)) return $sysBuilds + $selectedBuilds;
|
||||
if(empty($builds) and empty($shadows)) return $sysBuilds + $selectedBuilds;
|
||||
|
||||
/* if the build has been released and replace is true, replace build name with release name. */
|
||||
if($replace)
|
||||
@@ -335,6 +336,17 @@ class buildModel extends model
|
||||
->andWhere('t1.deleted')->eq(0)
|
||||
->andWhere('t1.shadow')->ne(0)
|
||||
->fetchAll('id');
|
||||
if($shadows)
|
||||
{
|
||||
/* Append releases of only shadow and not link build. */
|
||||
$releases += $this->dao->select('t1.id,t1.shadow,t1.product,t1.branch,t1.build,t1.name,t1.date,t2.name as branchName,t3.type as productType')->from(TABLE_RELEASE)->alias('t1')
|
||||
->leftJoin(TABLE_BRANCH)->alias('t2')->on('FIND_IN_SET(t2.id, t1.branch)')
|
||||
->leftJoin(TABLE_PRODUCT)->alias('t3')->on('t1.product=t3.id')
|
||||
->where('t1.shadow')->in($shadows)
|
||||
->andWhere('t1.build')->eq(0)
|
||||
->andWhere('t1.deleted')->eq(0)
|
||||
->fetchAll('id');
|
||||
}
|
||||
foreach($releases as $release)
|
||||
{
|
||||
if($branch !== 'all')
|
||||
|
||||
@@ -46,6 +46,8 @@
|
||||
.minw-80px {min-width: 80px;}
|
||||
.title-group.required:after {display: none;}
|
||||
.title-group.required > .required:after {display: block; right: 29px; top: 5px;}
|
||||
#titleBox.required:after{display: block; right: 29px; top: 5px;}
|
||||
#priRequiredBox.required:after{display: block; right: -12px; top: 5px;}
|
||||
.pri-selector > .btn {padding: 5px 8px !important; width: 100%;}
|
||||
.pri-selector > .dropdown-menu {padding: 10px;}
|
||||
|
||||
|
||||
@@ -25,13 +25,13 @@
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='c-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-module<?php echo strpos($config->testcase->create->requiredFields, 'module') ? ' required' : '';?>'><?php echo $lang->testcase->module;?></th>
|
||||
<th class='c-module<?php echo strpos($config->testcase->create->requiredFields, 'module') !== false ? ' required' : '';?>'><?php echo $lang->testcase->module;?></th>
|
||||
<th class='required'><?php echo $lang->testcase->title;?></th>
|
||||
<th class='c-status required'><?php echo $lang->testcase->type;?></th>
|
||||
<th class='c-status'><?php echo $lang->testcase->pri;?></th>
|
||||
<th class='c-text'><?php echo $lang->testcase->precondition;?></th>
|
||||
<th class='c-text'><?php echo $lang->testcase->keywords;?></th>
|
||||
<th class='c-text'><?php echo $lang->testcase->stage;?></th>
|
||||
<th class='c-status<?php echo strpos($config->testcase->create->requiredFields, 'pri') !== false ? ' required' : '';?>'><?php echo $lang->testcase->pri;?></th>
|
||||
<th class='c-text<?php echo strpos($config->testcase->create->requiredFields, 'precondition') !== false ? ' required' : '';?>'><?php echo $lang->testcase->precondition;?></th>
|
||||
<th class='c-text<?php echo strpos($config->testcase->create->requiredFields, 'keywords') !== false ? ' required' : '';?>'><?php echo $lang->testcase->keywords;?></th>
|
||||
<th class='c-text<?php echo strpos($config->testcase->create->requiredFields, 'stage') !== false ? ' required' : '';?>'><?php echo $lang->testcase->stage;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<?php echo html::select('lib', $libraries, $libID, "onchange='loadLibModules(this.value);' class='form-control chosen'");?>
|
||||
</div>
|
||||
</td>
|
||||
<td style='padding-left:15px;'<?php echo strpos($config->testcase->create->requiredFields, 'module') ? ' class="required"' : '';?>>
|
||||
<td style='padding-left:15px;'<?php echo strpos($config->testcase->create->requiredFields, 'module') !== false ? ' class="required"' : '';?>>
|
||||
<div class='input-group' id='moduleIdBox'>
|
||||
<span class="input-group-addon w-80px"><?php echo $lang->testcase->module?></span>
|
||||
<?php
|
||||
@@ -55,7 +55,7 @@
|
||||
<th><?php echo $lang->testcase->type;?></th>
|
||||
<td><?php echo html::select('type', $lang->testcase->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<?php if(strpos(",$showFields,", 'stage') !== false):?>
|
||||
<td style='padding-left:15px'>
|
||||
<td style='padding-left:15px'<?php echo strpos($config->testcase->create->requiredFields, 'stage') !== false ? ' class="required"' : '';?>>
|
||||
<div class='input-group'>
|
||||
<span class='input-group-addon w-80px'><?php echo $lang->testcase->stage?></span>
|
||||
<?php echo html::select('stage[]', $lang->testcase->stageList, $stage, "class='form-control chosen' multiple='multiple'");?>
|
||||
@@ -67,7 +67,7 @@
|
||||
<th><?php echo $lang->testcase->title;?></th>
|
||||
<td colspan='2'>
|
||||
<div class="input-group title-group">
|
||||
<div class="input-control has-icon-right">
|
||||
<div id="titleBox" class="input-control has-icon-right">
|
||||
<?php echo html::input('title', $caseTitle, "class='form-control'");?>
|
||||
<div class="colorpicker">
|
||||
<button type="button" class="btn btn-link dropdown-toggle" data-toggle="dropdown"><span class="cp-title"></span><span class="color-bar"></span><i class="ic"></i></button>
|
||||
@@ -101,7 +101,8 @@
|
||||
<?php echo html::select('pri', (array)$priList, $pri, "class='form-control'");?>
|
||||
<?php else: ?>
|
||||
<?php ksort($priList);?>
|
||||
<div class="input-group-btn pri-selector" data-type="pri">
|
||||
<?php $hasPri = strpos($config->testcase->create->requiredFields, 'pri') !== false ? True : False;?>
|
||||
<div <?php echo $hasPri ? "id='priRequiredBox'" : '';?> class="input-group-btn pri-selector <?php echo $hasPri ? 'required' : '';?>" data-type="pri">
|
||||
<button type="button" class="btn dropdown-toggle br-0" data-toggle="dropdown">
|
||||
<span class="pri-text"><span class="label-pri label-pri-<?php echo empty($pri) ? '0' : $pri?>" title="<?php echo $pri?>"><?php echo $pri?></span></span> <span class="caret"></span>
|
||||
</button>
|
||||
@@ -116,7 +117,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->testcase->precondition;?></th>
|
||||
<td colspan='2'><?php echo html::textarea('precondition', $precondition, " rows='2' class='form-control'");?></td>
|
||||
<td colspan='2' <?php echo strpos($config->testcase->create->requiredFields, 'precondition') !== false ? ' class="required"' : '';?>><?php echo html::textarea('precondition', $precondition, " rows='2' class='form-control'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->testcase->steps;?></th>
|
||||
@@ -189,7 +190,7 @@
|
||||
<?php if(strpos(",$showFields,", ',keywords,') !== false):?>
|
||||
<tr>
|
||||
<th><?php echo $lang->testcase->keywords;?></th>
|
||||
<td colspan='2'><?php echo html::input('keywords', '', "class='form-control'");?></td>
|
||||
<td colspan='2' <?php echo strpos($config->testcase->create->requiredFields, 'keywords') !== false ? ' class="required"' : '';?>><?php echo html::input('keywords', '', "class='form-control'");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
|
||||
@@ -809,9 +809,9 @@ if(!helper::hasFeature('kanban'))
|
||||
|
||||
if($config->edition == 'max' and !helper::hasFeature('scrum_auditplan'))
|
||||
{
|
||||
if(!helper::hasFeature('scrum_process'))
|
||||
if(helper::hasFeature('scrum_process'))
|
||||
{
|
||||
$lang->admin->menu->model['dropMenu']->scrum = array('link' => "{$lang->scrumModel}|process|scrumbrowse|processID=0&browseType=scrum", 'subModule' => 'auditcl,process,activity,zoutput,classify,');
|
||||
$lang->admin->menu->model['dropMenu']->scrum = array('link' => "{$lang->scrumModel}|process|scrumbrowse|browseType=scrum", 'subModule' => 'auditcl,process,activity,zoutput,classify,');
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -514,6 +514,7 @@ class commonModel extends model
|
||||
echo "<a class='dropdown-toggle' data-toggle='dropdown'>";
|
||||
echo html::avatar($app->user);
|
||||
echo '</a>';
|
||||
echo '<script>$("#userDropDownMenu").on("click", function(){$(this).removeClass("dropdown-hover");});$("#userDropDownMenu").on("hover", function(){$(this).next().removeClass("open");$(this).addClass("dropdown-hover");});</script>';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1016,7 +1017,8 @@ class commonModel extends model
|
||||
{
|
||||
foreach($lang->my->$moduleLinkList as $key => $linkList)
|
||||
{
|
||||
$method = explode('-', $key)[1];
|
||||
$moduleMethodList = explode('-', $key);
|
||||
$method = $moduleMethodList[1];
|
||||
if(common::hasPriv($currentModule, $method))
|
||||
{
|
||||
$display = true;
|
||||
@@ -2500,6 +2502,7 @@ EOD;
|
||||
($module == 'file' and strpos('|read|download|uploadimages|ajaxwopifiles|', "|{$method}|") !== false) or
|
||||
($module == 'report' && $method == 'annualdata') or
|
||||
($module == 'misc' && $method == 'captcha') or
|
||||
($module == 'bug' && $method == 'create') or
|
||||
($module == 'execution' and $method == 'printkanban') or
|
||||
($module == 'traincourse' and $method == 'ajaxuploadlargefile') or
|
||||
($module == 'traincourse' and $method == 'playvideo'))
|
||||
@@ -3179,11 +3182,13 @@ EOD;
|
||||
* @param array $headers Set request headers.
|
||||
* @param string $dataType
|
||||
* @param string $method POST|PATCH|PUT
|
||||
* @param int $timeout
|
||||
* @param bool $httpCode
|
||||
* @static
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public static function http($url, $data = null, $options = array(), $headers = array(), $dataType = 'data', $method = 'POST', $timeout = 30)
|
||||
public static function http($url, $data = null, $options = array(), $headers = array(), $dataType = 'data', $method = 'POST', $timeout = 30, $httpCode = false)
|
||||
{
|
||||
global $lang, $app;
|
||||
if(!extension_loaded('curl'))
|
||||
@@ -3230,6 +3235,7 @@ EOD;
|
||||
$response = curl_exec($curl);
|
||||
$errors = curl_error($curl);
|
||||
|
||||
if($httpCode) $httpCode = curl_getinfo($curl,CURLINFO_HTTP_CODE);
|
||||
curl_close($curl);
|
||||
|
||||
$logFile = $app->getLogRoot() . 'saas.'. date('Ymd') . '.log.php';
|
||||
@@ -3248,7 +3254,7 @@ EOD;
|
||||
|
||||
if($errors) commonModel::$requestErrors[] = $errors;
|
||||
|
||||
return $response;
|
||||
return $httpCode ? array($response, $httpCode) : $response;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,7 +21,7 @@ include 'chosen.html.php';
|
||||
<div id='userMenu'>
|
||||
<ul id="userNav" class="nav nav-default">
|
||||
<li class='dropdown dropdown-hover' id='globalCreate'><?php common::printCreateList();?></li>
|
||||
<li class='dropdown dropdown-hover has-avatar'><?php common::printUserBar();?></li>
|
||||
<li class='dropdown dropdown-hover has-avatar' id='userDropDownMenu'><?php common::printUserBar();?></li>
|
||||
<li class='dropdown dropdown-hover' id='visionSwitcher'><?php common::printVisionSwitcher();?></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -240,3 +240,6 @@ $config->dev->postParams['testcase']['create']['steps'] = 'string';
|
||||
$config->dev->postParams['testcase']['create']['expect'] = 'string';
|
||||
$config->dev->postParams['testcase']['create']['mailto'] = 'string';
|
||||
$config->dev->postParams['testcase']['create']['keywords'] = 'string';
|
||||
|
||||
$config->disableFeature = array();
|
||||
if(!helper::hasFeature('waterfall')) $config->disableFeature = array('design', 'stage', 'programplan', 'weekly', 'researchplan', 'researchreport', 'gapanalysis');
|
||||
|
||||
+63
-63
@@ -1,52 +1,52 @@
|
||||
<?php
|
||||
$lang->dev->common = 'D?veloppeur';
|
||||
$lang->dev->common = 'Develop';
|
||||
$lang->dev->api = 'API';
|
||||
$lang->dev->db = 'Base de Donn?es';
|
||||
$lang->dev->editor = 'Editeur';
|
||||
$lang->dev->db = 'Database';
|
||||
$lang->dev->editor = 'Editor';
|
||||
$lang->dev->translate = 'Translate';
|
||||
$lang->dev->dbList = 'Bases de Donn?es';
|
||||
$lang->dev->dbList = 'Database';
|
||||
$lang->dev->moduleList = 'Modules';
|
||||
$lang->dev->params = 'Param?tres';
|
||||
$lang->dev->params = 'Parameters';
|
||||
$lang->dev->type = 'Type';
|
||||
$lang->dev->desc = 'Description';
|
||||
$lang->dev->noParams = 'Pas de Param?tres';
|
||||
$lang->dev->post = 'Param?tre POST';
|
||||
$lang->dev->noParams = 'No Parameters';
|
||||
$lang->dev->post = 'POST Parameter';
|
||||
|
||||
$lang->dev->paramRange = 'Rang Param?tre : %s';
|
||||
$lang->dev->paramDate = 'Format Date : YY-mm-dd, e.g 2019-01-01';
|
||||
$lang->dev->paramColor = 'Format Couleur : #RGB, e.g. #3da7f5';
|
||||
$lang->dev->paramMailto = "Comptes utilisateurs. S?par? par des ','.";
|
||||
$lang->dev->noteEditor = "L'?diteur est d?sactiv? pour des raisons de s?curit?. Pour utiliser cette fonction, veuillez vous rendre sur le site officiel pour t?l?charger et installer le plugin de l'<a href='https://www.zentao.pm/extension-viewExt-150.html' target='_blank'>editeur</a>.";
|
||||
$lang->dev->noteTranslate = "La traduction est d?sactiv?e pour des raisons de s?curit?. Pour utiliser cette fonctionnalit?, veuillez vous rendre sur le site officiel pour t?l?charger et installer le plugin de <a href='https://www.zentao.pm/extension-viewExt-151.html' target='_blank'>traduction</a>.";
|
||||
$lang->dev->paramRange = 'Parameter Range: %s';
|
||||
$lang->dev->paramDate = 'Date format: YY-mm-dd, e.g 2019-01-01';
|
||||
$lang->dev->paramColor = 'Color format: #RGB, e.g. #3da7f5';
|
||||
$lang->dev->paramMailto = "User account. Separate accounts by ','.";
|
||||
$lang->dev->noteEditor = "The editor is disabled for security reasons. To use this feature, please go to the official website to download and install the plugin of the <a href='https://www.zentao.net/extension-viewExt-150.html' target='_blank'>editor</a>.";
|
||||
$lang->dev->noteTranslate = "The translation is disabled for security reasons. To use this feature, please go to the official website to download and install the plugin of <a href='https://www.zentao.net/extension-viewExt-151.html' target='_blank'>translation</a>.";
|
||||
|
||||
$lang->dev->fields = array();
|
||||
$lang->dev->fields['id'] = 'ID';
|
||||
$lang->dev->fields['name'] = 'Champ';
|
||||
$lang->dev->fields['name'] = 'Feild';
|
||||
$lang->dev->fields['desc'] = 'Description';
|
||||
$lang->dev->fields['type'] = 'Type';
|
||||
$lang->dev->fields['length'] = 'Longueur';
|
||||
$lang->dev->fields['length'] = 'Length';
|
||||
$lang->dev->fields['null'] = 'Null';
|
||||
|
||||
$lang->dev->tableList = array();
|
||||
$lang->dev->tableList['action'] = 'Action';
|
||||
$lang->dev->tableList['bug'] = 'Bug';
|
||||
$lang->dev->tableList['build'] = 'Build';
|
||||
$lang->dev->tableList['burn'] = 'Graphe Burndown';
|
||||
$lang->dev->tableList['case'] = 'CasTest';
|
||||
$lang->dev->tableList['casestep'] = 'Step';
|
||||
$lang->dev->tableList['company'] = 'Entreprise';
|
||||
$lang->dev->tableList['burn'] = 'Burndown Chart';
|
||||
$lang->dev->tableList['case'] = 'Test Case';
|
||||
$lang->dev->tableList['casestep'] = 'Case Step';
|
||||
$lang->dev->tableList['company'] = 'Company';
|
||||
$lang->dev->tableList['config'] = 'Configuration';
|
||||
$lang->dev->tableList['custom'] = 'Personnalisation';
|
||||
$lang->dev->tableList['dept'] = 'Compartiment';
|
||||
$lang->dev->tableList['custom'] = 'Custom';
|
||||
$lang->dev->tableList['dept'] = 'Department';
|
||||
$lang->dev->tableList['doc'] = 'Document';
|
||||
$lang->dev->tableList['doclib'] = 'Biblioth?que Document';
|
||||
$lang->dev->tableList['doclib'] = 'Document Library';
|
||||
$lang->dev->tableList['effort'] = 'Effort';
|
||||
$lang->dev->tableList['extension'] = 'Extension';
|
||||
$lang->dev->tableList['file'] = 'Fichier';
|
||||
$lang->dev->tableList['group'] = 'Groupe';
|
||||
$lang->dev->tableList['grouppriv'] = 'Privil?ge';
|
||||
$lang->dev->tableList['history'] = 'Historique';
|
||||
$lang->dev->tableList['lang'] = 'Langue';
|
||||
$lang->dev->tableList['file'] = 'File';
|
||||
$lang->dev->tableList['group'] = 'Group';
|
||||
$lang->dev->tableList['grouppriv'] = 'Privilege';
|
||||
$lang->dev->tableList['history'] = 'History';
|
||||
$lang->dev->tableList['lang'] = 'Language';
|
||||
$lang->dev->tableList['module'] = 'Module';
|
||||
$lang->dev->tableList['program'] = 'Program';
|
||||
$lang->dev->tableList['product'] = $lang->productCommon;
|
||||
@@ -56,62 +56,62 @@ $lang->dev->tableList['programplan'] = 'Project Stage';
|
||||
$lang->dev->tableList['weekly'] = 'Weekly';
|
||||
$lang->dev->tableList['sonarqube'] = 'Sonarqube';
|
||||
$lang->dev->tableList['projectproduct'] = 'Project' . $lang->productCommon;
|
||||
$lang->dev->tableList['projectstory'] = 'Project';
|
||||
$lang->dev->tableList['projectstory'] = 'Project Story';
|
||||
$lang->dev->tableList['execution'] = $lang->executionCommon;
|
||||
$lang->dev->tableList['release'] = 'Release';
|
||||
$lang->dev->tableList['story'] = 'Story';
|
||||
$lang->dev->tableList['storyspec'] = 'Description Story';
|
||||
$lang->dev->tableList['task'] = 'T?che';
|
||||
$lang->dev->tableList['taskestimate'] = 'Estim?s';
|
||||
$lang->dev->tableList['team'] = 'Equipe';
|
||||
$lang->dev->tableList['testresult'] = 'R?sultats Test';
|
||||
$lang->dev->tableList['testrun'] = 'Ex?cution Test';
|
||||
$lang->dev->tableList['testtask'] = 'Campagne';
|
||||
$lang->dev->tableList['todo'] = 'Agenda';
|
||||
$lang->dev->tableList['storyspec'] = 'Story Description';
|
||||
$lang->dev->tableList['task'] = 'Task';
|
||||
$lang->dev->tableList['taskestimate'] = 'Estimates';
|
||||
$lang->dev->tableList['team'] = 'Team';
|
||||
$lang->dev->tableList['testresult'] = 'Test Result';
|
||||
$lang->dev->tableList['testrun'] = 'Test Run';
|
||||
$lang->dev->tableList['testtask'] = 'Test Request';
|
||||
$lang->dev->tableList['todo'] = 'Todo';
|
||||
$lang->dev->tableList['user'] = 'User';
|
||||
$lang->dev->tableList['usercontact'] = 'Contact Utilisateur';
|
||||
$lang->dev->tableList['usercontact'] = 'User Contact';
|
||||
$lang->dev->tableList['usergroup'] = 'User Group';
|
||||
$lang->dev->tableList['userquery'] = 'User Query';
|
||||
$lang->dev->tableList['usertpl'] = 'User Template';
|
||||
$lang->dev->tableList['admin'] = 'Admin';
|
||||
$lang->dev->tableList['api'] = 'API';
|
||||
$lang->dev->tableList['backup'] = 'Sauvegarde';
|
||||
$lang->dev->tableList['common'] = 'Commun';
|
||||
$lang->dev->tableList['backup'] = 'Backup';
|
||||
$lang->dev->tableList['common'] = 'Common';
|
||||
$lang->dev->tableList['convert'] = 'Convert';
|
||||
$lang->dev->tableList['dev'] = 'D?velop';
|
||||
$lang->dev->tableList['dev'] = 'Develop';
|
||||
$lang->dev->tableList['git'] = 'GIT';
|
||||
$lang->dev->tableList['index'] = 'Accueil';
|
||||
$lang->dev->tableList['install'] = 'Installer';
|
||||
$lang->dev->tableList['index'] = 'Home';
|
||||
$lang->dev->tableList['install'] = 'Install';
|
||||
$lang->dev->tableList['mail'] = 'Email';
|
||||
$lang->dev->tableList['misc'] = 'Divers';
|
||||
$lang->dev->tableList['misc'] = 'Misc.';
|
||||
$lang->dev->tableList['my'] = 'Dashboard';
|
||||
$lang->dev->tableList['qa'] = 'QA';
|
||||
$lang->dev->tableList['report'] = 'Rapport';
|
||||
$lang->dev->tableList['search'] = 'Recherche';
|
||||
$lang->dev->tableList['qa'] = 'Test';
|
||||
$lang->dev->tableList['report'] = 'Report';
|
||||
$lang->dev->tableList['search'] = 'Search';
|
||||
$lang->dev->tableList['sso'] = 'SSO';
|
||||
$lang->dev->tableList['svn'] = 'SVN';
|
||||
$lang->dev->tableList['testcase'] = 'CasTest';
|
||||
$lang->dev->tableList['testcase'] = 'Test Case';
|
||||
$lang->dev->tableList['automation'] = 'Automation';
|
||||
$lang->dev->tableList['testreport'] = 'Rapport Test';
|
||||
$lang->dev->tableList['testsuite'] = 'Cahier Recette';
|
||||
$lang->dev->tableList['testreport'] = 'Test Report';
|
||||
$lang->dev->tableList['testsuite'] = 'Test Suite';
|
||||
$lang->dev->tableList['caselib'] = 'Case Library';
|
||||
$lang->dev->tableList['tree'] = 'Arborescence';
|
||||
$lang->dev->tableList['tree'] = 'Module Tree';
|
||||
$lang->dev->tableList['upgrade'] = 'Update';
|
||||
$lang->dev->tableList['cron'] = 'Cron';
|
||||
$lang->dev->tableList['datatable'] = 'Tableau Donn?es';
|
||||
$lang->dev->tableList['block'] = 'Bloc';
|
||||
$lang->dev->tableList['branch'] = 'Branche';
|
||||
$lang->dev->tableList['doccontent'] = 'Contenu Doc';
|
||||
$lang->dev->tableList['storystage'] = 'Phase Story Phase';
|
||||
$lang->dev->tableList['tutorial'] = 'Tutoriel';
|
||||
$lang->dev->tableList['suitecase'] = 'Cas Cahier Recette';
|
||||
$lang->dev->tableList['datatable'] = 'Data Table';
|
||||
$lang->dev->tableList['block'] = 'Block';
|
||||
$lang->dev->tableList['branch'] = 'Branch';
|
||||
$lang->dev->tableList['doccontent'] = 'Doc Content';
|
||||
$lang->dev->tableList['storystage'] = 'Story Phase';
|
||||
$lang->dev->tableList['tutorial'] = 'Tutorial';
|
||||
$lang->dev->tableList['suitecase'] = 'Suite Case';
|
||||
$lang->dev->tableList['score'] = 'Score';
|
||||
$lang->dev->tableList['entry'] = 'Application';
|
||||
$lang->dev->tableList['webhook'] = 'WebHook';
|
||||
$lang->dev->tableList['log'] = 'Log';
|
||||
$lang->dev->tableList['message'] = 'Message';
|
||||
$lang->dev->tableList['notify'] = 'Notification';
|
||||
$lang->dev->tableList['userview'] = 'Droits Utilisateur';
|
||||
$lang->dev->tableList['userview'] = 'User Privilege';
|
||||
$lang->dev->tableList['repo'] = 'Code';
|
||||
$lang->dev->tableList['repohistory'] = 'Repo History';
|
||||
$lang->dev->tableList['repofiles'] = 'Repo Files';
|
||||
@@ -161,11 +161,11 @@ $lang->dev->groupList['product'] = $lang->productCommon;
|
||||
$lang->dev->groupList['project'] = 'Project';
|
||||
$lang->dev->groupList['execution'] = $lang->executionCommon;
|
||||
$lang->dev->groupList['kanban'] = 'Kanban';
|
||||
$lang->dev->groupList['qa'] = 'QA';
|
||||
$lang->dev->groupList['qa'] = 'Test';
|
||||
$lang->dev->groupList['doc'] = 'Doc';
|
||||
$lang->dev->groupList['assetlib'] = 'Assetlib';
|
||||
$lang->dev->groupList['report'] = 'Rapport';
|
||||
$lang->dev->groupList['company'] = 'Entreprise';
|
||||
$lang->dev->groupList['report'] = 'Report';
|
||||
$lang->dev->groupList['company'] = 'Company';
|
||||
$lang->dev->groupList['repo'] = 'CI';
|
||||
$lang->dev->groupList['api'] = 'API';
|
||||
$lang->dev->groupList['message'] = 'Message';
|
||||
@@ -175,5 +175,5 @@ global $config;
|
||||
if($config->systemMode != 'ALM') unset($lang->dev->groupList['program']);
|
||||
|
||||
$lang->dev->endGroupList['admin'] = 'Admin';
|
||||
$lang->dev->endGroupList['system'] = 'Syst?me';
|
||||
$lang->dev->endGroupList['other'] = 'Autres';
|
||||
$lang->dev->endGroupList['system'] = 'System';
|
||||
$lang->dev->endGroupList['other'] = 'Others';
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
<div class='modulegroup'><?php echo $groupName?></div>
|
||||
<?php foreach($modules[$group] as $module):?>
|
||||
<?php
|
||||
if($config->disableFeature and in_array($module, $config->disableFeature)) continue;
|
||||
$active = ($module == $selectedModule) ? 'active' : '';
|
||||
$moduleName = zget($lang->dev->tableList, $module, $module);
|
||||
?>
|
||||
|
||||
@@ -556,7 +556,7 @@ class doc extends control
|
||||
$this->view->doc = $doc;
|
||||
$this->view->moduleOptionMenu = $this->tree->getOptionMenu($libID, 'doc', $startModuleID = 0);
|
||||
$this->view->type = $type;
|
||||
$this->view->libs = $this->doc->getLibs('all', $extra = 'withObject|noBook', $libID, $objectID);
|
||||
$this->view->libs = $this->doc->getLibs('all', 'withObject', $libID, $objectID, 'book');
|
||||
$this->view->lib = $lib;
|
||||
$this->view->groups = $this->loadModel('group')->getPairs();
|
||||
$this->view->users = $this->user->getPairs('noletter|noclosed|nodeleted', $doc->users);
|
||||
|
||||
@@ -296,7 +296,7 @@
|
||||
$(function()
|
||||
{
|
||||
var simplemde = new SimpleMDE({element: $("#markdownContent")[0],toolbar:false, status: false});
|
||||
//simplemde.value(String(markdownText));
|
||||
simplemde.value(String(markdownText));
|
||||
simplemde.togglePreview();
|
||||
|
||||
$('#content .CodeMirror .editor-preview a').attr('target', '_blank');
|
||||
|
||||
@@ -249,7 +249,7 @@ js::set('docID', $doc->id);
|
||||
$(function()
|
||||
{
|
||||
var simplemde = new SimpleMDE({element: $("#markdownContent")[0],toolbar:false, status: false});
|
||||
//simplemde.value(String(markdownText));
|
||||
simplemde.value(String(markdownText));
|
||||
simplemde.togglePreview();
|
||||
|
||||
$('#content .CodeMirror .editor-preview a').attr('target', '_blank');
|
||||
|
||||
@@ -1721,8 +1721,15 @@ class execution extends control
|
||||
}
|
||||
|
||||
$importPlanStoryTips = $multiBranchProduct ? $this->lang->execution->importBranchPlanStory : $this->lang->execution->importPlanStory;
|
||||
if(!$execution->hasProduct)
|
||||
{
|
||||
return print(js::locate(inlink('create', "projectID=$projectID&executionID=$executionID")));
|
||||
}
|
||||
else
|
||||
{
|
||||
return print(js::confirm($importPlanStoryTips, inlink('create', "projectID=$projectID&executionID=$executionID©ExecutionID=&planID=$planID&confirm=yes"), inlink('create', "projectID=$projectID&executionID=$executionID")));
|
||||
|
||||
return print(js::confirm($importPlanStoryTips, inlink('create', "projectID=$projectID&executionID=$executionID©ExecutionID=&planID=$planID&confirm=yes"), inlink('create', "projectID=$projectID&executionID=$executionID")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3093,7 +3100,6 @@ class execution extends control
|
||||
/* Delete execution. */
|
||||
$execution = $this->execution->getByID($executionID);
|
||||
$this->dao->update(TABLE_EXECUTION)->set('deleted')->eq(1)->where('id')->eq($executionID)->exec();
|
||||
$this->dao->update(TABLE_BUG)->set('execution')->eq(0)->where('execution')->eq($executionID)->exec();
|
||||
$this->loadModel('action')->create('execution', $executionID, 'deleted', '', ACTIONMODEL::CAN_UNDELETED);
|
||||
$this->execution->updateUserView($executionID);
|
||||
$this->loadModel('common')->syncPPEStatus($executionID);
|
||||
|
||||
@@ -1595,13 +1595,13 @@ $(function()
|
||||
return false;
|
||||
});
|
||||
|
||||
/* Mofidy dafault color's border color. */
|
||||
/* Modify color's border color. */
|
||||
$(document).on('mouseout', '.color0', function()
|
||||
{
|
||||
$('.color0 .cardcolor').css('border', '1px solid #b0b0b0');
|
||||
});
|
||||
|
||||
/* Mofidy dafault color's border color. */
|
||||
/* Modify default color's border color. */
|
||||
$(document).on('mouseover', '.color0', function()
|
||||
{
|
||||
$('.color0 .cardcolor').css('border', '1px solid #fff');
|
||||
|
||||
@@ -1382,6 +1382,7 @@ $(function()
|
||||
$('.kanban-header-col>.title>span:not(.text)').hide();
|
||||
$('.kanban-header-col>.title > span.text').css('max-width', miniColWidth + 'px');
|
||||
}
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
});
|
||||
|
||||
$('#type').change(function()
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
<ul class="dropdown-menu">
|
||||
<?php
|
||||
$class = common::hasPriv('task', 'export') ? '' : "class=disabled";
|
||||
$misc = common::hasPriv('task', 'export') ? "class='export'" : "class=disabled";
|
||||
$misc = common::hasPriv('task', 'export') ? "class='export' data-width=620" : "class=disabled";
|
||||
$link = common::hasPriv('task', 'export') ? $this->createLink('task', 'export', "execution=$executionID&orderBy=$orderBy&type=$browseType") : '#';
|
||||
echo "<li $class>" . html::a($link, $lang->story->export, '', $misc) . "</li>";
|
||||
?>
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
<?php endif;?>
|
||||
<?php
|
||||
if($productID) common::printIcon('story', 'report', "productID=$productID&branchID=&storyType=$storyType&browseType=$type&moduleID=$param&chartType=pie&projectID=$execution->id", '', 'button', 'bar-chart muted');
|
||||
common::printLink('story', 'export', "productID=$productID&orderBy=id_desc&executionID=$execution->id&browseType=$type&storyType=$storyType", "<i class='icon icon-export muted'></i> " . $lang->story->export, '', "class='btn btn-link export iframe'");
|
||||
common::printLink('story', 'export', "productID=$productID&orderBy=id_desc&executionID=$execution->id&browseType=$type&storyType=$storyType", "<i class='icon icon-export muted'></i> " . $lang->story->export, '', "class='btn btn-link export iframe' data-width=620");
|
||||
|
||||
$canLinkStory = ($execution->hasProduct or $execution->multiple);
|
||||
if(common::canModify('execution', $execution))
|
||||
|
||||
@@ -293,16 +293,18 @@ class file extends control
|
||||
* @param object $object
|
||||
* @param string $method
|
||||
* @param bool $showDelete
|
||||
* @param bool $showEdit
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function printFiles($files, $fieldset, $object = null, $method = 'view', $showDelete = true)
|
||||
public function printFiles($files, $fieldset, $object = null, $method = 'view', $showDelete = true, $showEdit = true)
|
||||
{
|
||||
$this->view->files = $files;
|
||||
$this->view->fieldset = $fieldset;
|
||||
$this->view->object = $object;
|
||||
$this->view->method = $method;
|
||||
$this->view->showDelete = $showDelete;
|
||||
$this->view->showEdit = $showEdit;
|
||||
|
||||
if(strpos('view,edit', $method) !== false and $this->app->clientDevice != 'mobile') return $this->display('file', 'viewfiles');
|
||||
$this->display();
|
||||
|
||||
@@ -46,7 +46,7 @@ class fileModel extends model
|
||||
->where('objectType')->eq($objectType)
|
||||
->andWhere('objectID')->in($objectID)
|
||||
->andWhere('extra')->ne('editor')
|
||||
->beginIF($extra)->andWhere('extra')->eq($extra)
|
||||
->beginIF($extra)->andWhere('extra')->in($extra)->fi()
|
||||
->andWhere('deleted')->eq('0')
|
||||
->orderBy('id')
|
||||
->fetchAll('id');
|
||||
|
||||
@@ -3,7 +3,7 @@ $maxUploadSize = strtoupper(ini_get('upload_max_filesize'));
|
||||
js::set('dangerExtensions', ',' . $this->config->file->dangers . ',');
|
||||
js::set('maxUploadSize', $maxUploadSize);
|
||||
?>
|
||||
<div class="file-input-list" data-append-way="before" data-filedName="<?php echo $filesName;?>" data-provide="fileInputList" data-each-file-max-size="<?php echo $maxUploadSize; ?>" data-file-size-error="<?php echo sprintf($lang->file->errorFileSize, $maxUploadSize); ?>">
|
||||
<div class="file-input-list" data-append-way="before" data-filedName="<?php echo $filesName;?>" name="<?php echo $filesName;?>[]" data-provide="fileInputList" data-each-file-max-size="<?php echo $maxUploadSize; ?>" data-file-size-error="<?php echo sprintf($lang->file->errorFileSize, $maxUploadSize); ?>">
|
||||
<div class="file-input">
|
||||
<div class="file-input-edit input-group">
|
||||
<div class="input-group-cell"><i class="icon icon-paper-clip text-muted"></i></div>
|
||||
|
||||
@@ -220,7 +220,7 @@ function setFileName(fileID)
|
||||
common::printLink('file', 'download', "fileID=$file->id", "<i class='icon icon-download'></i>", '_blank', "class='fileAction btn btn-link text-primary' title='{$lang->file->downloadFile}'");
|
||||
if(common::hasPriv($objectType, 'edit', $object))
|
||||
{
|
||||
if(common::hasPriv('file', 'edit')) echo html::a('###', "<i class='icon icon-pencil-alt'></i>", '', "id='renameFile$file->id' class='fileAction btn btn-link edit text-primary' onclick='showRenameBox($file->id)' title='{$lang->file->edit}'");
|
||||
if($showEdit and common::hasPriv('file', 'edit')) echo html::a('###', "<i class='icon icon-pencil-alt'></i>", '', "id='renameFile$file->id' class='fileAction btn btn-link edit text-primary' onclick='showRenameBox($file->id)' title='{$lang->file->edit}'");
|
||||
if($showDelete and common::hasPriv('file', 'delete')) echo html::a('###', "<i class='icon icon-trash'></i>", '', "class='fileAction btn btn-link text-primary' onclick='deleteFile($file->id, this)' title='$lang->delete'");
|
||||
}
|
||||
echo '</span>';
|
||||
|
||||
@@ -236,7 +236,7 @@ class gitModel extends model
|
||||
*/
|
||||
public function setRepos()
|
||||
{
|
||||
$repos = $this->loadModel('repo')->getListBySCM('Git,Gitlab');
|
||||
$repos = $this->loadModel('repo')->getListBySCM('Git,Gitlab,Gogs,Gitea');
|
||||
$gitRepos = array();
|
||||
$paths = array();
|
||||
foreach($repos as $repo)
|
||||
|
||||
@@ -213,7 +213,7 @@ class group extends control
|
||||
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
|
||||
if($type == 'byGroup') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'reload'));
|
||||
if($type == 'byModule') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'window.parent.location.reload()'));
|
||||
if($type == 'byModule') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
|
||||
}
|
||||
|
||||
if($type == 'byGroup')
|
||||
|
||||
@@ -1239,18 +1239,23 @@ $lang->zahost->methodOrder[30] = 'downloadImage';
|
||||
$lang->zahost->methodOrder[35] = 'cancelDownload';
|
||||
|
||||
$lang->resource->zanode = new stdclass();
|
||||
$lang->resource->zanode->browse = 'browse';
|
||||
$lang->resource->zanode->create = 'create';
|
||||
$lang->resource->zanode->edit = 'edit';
|
||||
$lang->resource->zanode->destroy = 'destroy';
|
||||
$lang->resource->zanode->reboot = 'reboot';
|
||||
$lang->resource->zanode->suspend = 'suspend';
|
||||
$lang->resource->zanode->resume = 'resume';
|
||||
$lang->resource->zanode->getVNC = 'getVNC';
|
||||
$lang->resource->zanode->start = 'boot';
|
||||
$lang->resource->zanode->close = 'shutdown';
|
||||
$lang->resource->zanode->view = 'view';
|
||||
$lang->resource->zanode->createImage = 'createImage';
|
||||
$lang->resource->zanode->browse = 'browse';
|
||||
$lang->resource->zanode->create = 'create';
|
||||
$lang->resource->zanode->edit = 'edit';
|
||||
$lang->resource->zanode->destroy = 'destroy';
|
||||
$lang->resource->zanode->reboot = 'reboot';
|
||||
$lang->resource->zanode->suspend = 'suspend';
|
||||
$lang->resource->zanode->resume = 'resume';
|
||||
$lang->resource->zanode->getVNC = 'getVNC';
|
||||
$lang->resource->zanode->start = 'boot';
|
||||
$lang->resource->zanode->close = 'shutdown';
|
||||
$lang->resource->zanode->view = 'view';
|
||||
$lang->resource->zanode->createImage = 'createImage';
|
||||
$lang->resource->zanode->browseSnapshot = 'browseSnapshot';
|
||||
$lang->resource->zanode->createSnapshot = 'createSnapshot';
|
||||
$lang->resource->zanode->editSnapshot = 'editSnapshot';
|
||||
$lang->resource->zanode->restoreSnapshot = 'restoreSnapshot';
|
||||
$lang->resource->zanode->deleteSnapshot = 'deleteSnapshot';
|
||||
|
||||
$lang->zanode->methodOrder[0] = 'browse';
|
||||
$lang->zanode->methodOrder[5] = 'create';
|
||||
@@ -1264,6 +1269,11 @@ $lang->zanode->methodOrder[40] = 'start';
|
||||
$lang->zanode->methodOrder[45] = 'close';
|
||||
$lang->zanode->methodOrder[50] = 'view';
|
||||
$lang->zanode->methodOrder[55] = 'createImage';
|
||||
$lang->zanode->methodOrder[60] = 'browseSnapshot';
|
||||
$lang->zanode->methodOrder[65] = 'createSnapshot';
|
||||
$lang->zanode->methodOrder[70] = 'editSnapshot';
|
||||
$lang->zanode->methodOrder[75] = 'restoreSnapshot';
|
||||
$lang->zanode->methodOrder[80] = 'deleteSnapshot';
|
||||
|
||||
$lang->resource->repo = new stdclass();
|
||||
$lang->resource->repo->browse = 'browseAction';
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<form class='table-bymodule pdb-20' method='post' target='hiddenwin'>
|
||||
<form class='table-bymodule pdb-20 form-ajax' method='post' target='hiddenwin'>
|
||||
<table class='table table-form'>
|
||||
<tr class='text-center'>
|
||||
<td class='strong'><?php echo $lang->group->module;?></td>
|
||||
|
||||
@@ -1216,7 +1216,7 @@ class kanban extends control
|
||||
$this->view->products = $productPairs;
|
||||
$this->view->selectedProductID = $selectedProductID;
|
||||
$this->view->lanePairs = $this->kanban->getLanePairsByGroup($groupID);
|
||||
$this->view->plans2Imported = $this->productplan->getList($selectedProductID, 0, 'all', $pager, 'begin_desc', 'skipparent');
|
||||
$this->view->plans2Imported = $this->productplan->getList($selectedProductID, 0, 'all', $pager, 'begin_desc', 'skipparent|noproduct');
|
||||
$this->view->pager = $pager;
|
||||
$this->view->kanbanID = $kanbanID;
|
||||
$this->view->regionID = $regionID;
|
||||
|
||||
@@ -1633,13 +1633,13 @@ $(function()
|
||||
return false;
|
||||
});
|
||||
|
||||
/* Mofidy dafault color's border color. */
|
||||
/* Modify default color's border color. */
|
||||
$(document).on('mouseout', '.color0', function()
|
||||
{
|
||||
$('.color0 .cardcolor').css('border', '1px solid #b0b0b0');
|
||||
});
|
||||
|
||||
/* Mofidy dafault color's border color. */
|
||||
/* Modify default color's border color. */
|
||||
$(document).on('mouseover', '.color0', function()
|
||||
{
|
||||
$('.color0 .cardcolor').css('border', '1px solid #fff');
|
||||
|
||||
@@ -51,33 +51,41 @@
|
||||
<tbody>
|
||||
<?php foreach($releases2Imported as $release):?>
|
||||
<?php $i = 1;?>
|
||||
<?php $buildCount = count($release->builds);?>
|
||||
<?php foreach($release->builds as $build):?>
|
||||
<?php $rowspan = empty(count($release->builds)) ? 1 : count($release->builds);?>
|
||||
<tr>
|
||||
<?php if($i == 1):?>
|
||||
<td rowspan="<?php echo $buildCount;?>" class='c-id'>
|
||||
<td rowspan="<?php echo $rowspan;?>" class='c-id'>
|
||||
<div class="checkbox-primary">
|
||||
<input type='checkbox' name='releases[]' value='<?php echo $release->id;?>'/>
|
||||
<label></label>
|
||||
</div>
|
||||
<?php printf('%03d', $release->id);?>
|
||||
</td>
|
||||
<td rowspan="<?php echo $buildCount;?>" title='<?php echo $release->name;?>'>
|
||||
<td rowspan="<?php echo $rowspan;?>" title='<?php echo $release->name;?>'>
|
||||
<?php if(common::hasPriv('release', 'view')):?>
|
||||
<a href='javascript:void(0);' onclick="locateView('release', <?php echo $release->id;?>)"><?php echo $release->name;?></a>
|
||||
<?php else:?>
|
||||
<?php echo $release->name;?>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<?php if(count($release->builds) == 0):?>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<?php else:?>
|
||||
<?php foreach($release->builds as $build):?>
|
||||
<?php if($i > 1):?>
|
||||
<tr>
|
||||
<?php endif;?>
|
||||
<td title='<?php echo $build->name;?>'><?php echo $build->name;?></td>
|
||||
<td title='<?php echo $build->projectName;?>'><?php echo $build->projectName;?></td>
|
||||
<?php if($i == 1):?>
|
||||
<td rowspan="<?php echo $buildCount;?>" title='<?php echo $release->date;?>'><?php echo $release->date;?></td>
|
||||
<?php endif;?>
|
||||
<td rowspan="<?php echo $rowspan;?>" title='<?php echo $release->date;?>'><?php echo $release->date;?></td>
|
||||
</tr>
|
||||
<?php else:?>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<?php $i++;?>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
<?php endforeach;?>
|
||||
<tr><?php echo html::hidden('targetLane', key($lanePairs));?></tr>
|
||||
</tbody>
|
||||
|
||||
+73
-73
@@ -1,107 +1,107 @@
|
||||
<?php
|
||||
$lang->mail->common = 'Paramétrage Email';
|
||||
$lang->mail->index = 'Accueil Email';
|
||||
$lang->mail->detect = 'Détecter';
|
||||
$lang->mail->detectAction = 'Détecter par Adresse mail';
|
||||
$lang->mail->edit = 'Editer Paramétrages';
|
||||
$lang->mail->save = 'Sauver';
|
||||
$lang->mail->saveAction = 'Saver Paramétrages';
|
||||
$lang->mail->test = 'Test Envoi Email';
|
||||
$lang->mail->reset = 'Réinitialiser';
|
||||
$lang->mail->resetAction = 'Réinitialiser Paramétrages';
|
||||
$lang->mail->resend = 'Renvoyer';
|
||||
$lang->mail->resendAction = 'Renvoyer mail';
|
||||
$lang->mail->browse = 'Liste Email';
|
||||
$lang->mail->delete = 'Supprimer mail';
|
||||
$lang->mail->common = 'Email Settings';
|
||||
$lang->mail->index = 'Email Home';
|
||||
$lang->mail->detect = 'Detect';
|
||||
$lang->mail->detectAction = 'Detect By Email Address';
|
||||
$lang->mail->edit = 'Edit Settings';
|
||||
$lang->mail->save = 'Save';
|
||||
$lang->mail->saveAction = 'Save Settings';
|
||||
$lang->mail->test = 'Email Sending Test';
|
||||
$lang->mail->reset = 'Reset';
|
||||
$lang->mail->resetAction = 'Reset Settings';
|
||||
$lang->mail->resend = 'Resend';
|
||||
$lang->mail->resendAction = 'Resend Email';
|
||||
$lang->mail->browse = 'Email List';
|
||||
$lang->mail->delete = 'Delete Email';
|
||||
$lang->mail->ztCloud = 'ZenTao CloudMail';
|
||||
$lang->mail->gmail = 'Gmail';
|
||||
$lang->mail->sendCloud = 'Notice SendCloud';
|
||||
$lang->mail->batchDelete = 'Suppression par Lot';
|
||||
$lang->mail->batchDelete = 'Batch Delete';
|
||||
$lang->mail->sendcloudUser = 'Sync. Contact';
|
||||
$lang->mail->agreeLicense = 'Oui';
|
||||
$lang->mail->disagree = 'Non';
|
||||
$lang->mail->agreeLicense = 'Yes';
|
||||
$lang->mail->disagree = 'No';
|
||||
|
||||
$lang->mail->turnon = 'Notification Email';
|
||||
$lang->mail->async = 'Envoi Async';
|
||||
$lang->mail->fromAddress = 'Expéditeur mail';
|
||||
$lang->mail->fromName = 'Expéditeur';
|
||||
$lang->mail->domain = 'Domaine ZenTao';
|
||||
$lang->mail->host = 'Serveur SMTP';
|
||||
$lang->mail->port = 'Port SMTP';
|
||||
$lang->mail->auth = 'Validation SMTP';
|
||||
$lang->mail->username = 'Compte SMTP';
|
||||
$lang->mail->password = 'Mot de passe SMTP';
|
||||
$lang->mail->secure = 'Cryptage';
|
||||
$lang->mail->debug = 'Debug';
|
||||
$lang->mail->turnon = 'Email Notification';
|
||||
$lang->mail->async = 'Async Sending';
|
||||
$lang->mail->fromAddress = 'Sender Email';
|
||||
$lang->mail->fromName = 'Sender';
|
||||
$lang->mail->domain = 'ZenTao Domain';
|
||||
$lang->mail->host = 'SMTP Server';
|
||||
$lang->mail->port = 'SMTP Port';
|
||||
$lang->mail->auth = 'SMTP Validation';
|
||||
$lang->mail->username = 'SMTP Account';
|
||||
$lang->mail->password = 'SMTP Password';
|
||||
$lang->mail->secure = 'Encryption';
|
||||
$lang->mail->debug = 'Debugging';
|
||||
$lang->mail->charset = 'Charset';
|
||||
$lang->mail->accessKey = "Clé d'Accès";
|
||||
$lang->mail->secretKey = "Clé Secrète";
|
||||
$lang->mail->accessKey = 'Access Key';
|
||||
$lang->mail->secretKey = 'Secret Key';
|
||||
$lang->mail->license = 'ZenTao CloudMail Notice';
|
||||
|
||||
$lang->mail->selectMTA = 'Sélect Type';
|
||||
$lang->mail->selectMTA = 'Select Type';
|
||||
$lang->mail->smtp = 'SMTP';
|
||||
|
||||
$lang->mail->syncedUser = 'Synchronis';
|
||||
$lang->mail->unsyncUser = 'Non Synchronis';
|
||||
$lang->mail->sync = 'Synchronisation';
|
||||
$lang->mail->remove = 'Retirer';
|
||||
$lang->mail->syncedUser = 'Synchronized';
|
||||
$lang->mail->unsyncUser = 'Not Synchronized';
|
||||
$lang->mail->sync = 'Synchronize';
|
||||
$lang->mail->remove = 'Remove';
|
||||
|
||||
$lang->mail->toList = 'Destinataire';
|
||||
$lang->mail->ccList = 'Copie ';
|
||||
$lang->mail->subject = 'Sujet';
|
||||
$lang->mail->createdBy = 'Expéditeur';
|
||||
$lang->mail->createdDate = 'Création';
|
||||
$lang->mail->sendTime = 'Envoi';
|
||||
$lang->mail->status = 'Statut';
|
||||
$lang->mail->failReason = 'Raison';
|
||||
$lang->mail->toList = 'Recipient';
|
||||
$lang->mail->ccList = 'Copy to';
|
||||
$lang->mail->subject = 'Subject';
|
||||
$lang->mail->createdBy = 'Sender';
|
||||
$lang->mail->createdDate = 'CreatedDate';
|
||||
$lang->mail->sendTime = 'Sent';
|
||||
$lang->mail->status = 'Status';
|
||||
$lang->mail->failReason = 'Reason';
|
||||
|
||||
$lang->mail->statusList['wait'] = 'en Attente';
|
||||
$lang->mail->statusList['sended'] = 'Envoy';
|
||||
$lang->mail->statusList['fail'] = 'Echec';
|
||||
$lang->mail->statusList['wait'] = 'Wait';
|
||||
$lang->mail->statusList['sended'] = 'Sent';
|
||||
$lang->mail->statusList['fail'] = 'Failed';
|
||||
|
||||
$lang->mail->turnonList[1] = 'On';
|
||||
$lang->mail->turnonList[0] = 'Off';
|
||||
|
||||
$lang->mail->asyncList[1] = 'Oui';
|
||||
$lang->mail->asyncList[0] = 'Non';
|
||||
$lang->mail->asyncList[1] = 'Yes';
|
||||
$lang->mail->asyncList[0] = 'No';
|
||||
|
||||
$lang->mail->debugList[0] = 'Off';
|
||||
$lang->mail->debugList[1] = 'Normal';
|
||||
$lang->mail->debugList[2] = 'Haute';
|
||||
$lang->mail->debugList[2] = 'High';
|
||||
|
||||
$lang->mail->authList[1] = 'Oui';
|
||||
$lang->mail->authList[0] = 'Non';
|
||||
$lang->mail->authList[1] = 'Yes';
|
||||
$lang->mail->authList[0] = 'No';
|
||||
|
||||
$lang->mail->secureList[''] = 'Plain';
|
||||
$lang->mail->secureList['ssl'] = 'ssl';
|
||||
$lang->mail->secureList['tls'] = 'tls';
|
||||
|
||||
$lang->mail->more = 'Plus';
|
||||
$lang->mail->noticeResend = 'Le mail a été renvoyé !';
|
||||
$lang->mail->inputFromEmail = 'Expéditeur Email';
|
||||
$lang->mail->nextStep = 'Suivant';
|
||||
$lang->mail->successSaved = 'Paramétrage Email sauvegardés.';
|
||||
$lang->mail->more = 'More';
|
||||
$lang->mail->noticeResend = 'The Email has been re-sent!';
|
||||
$lang->mail->inputFromEmail = 'Sender Email';
|
||||
$lang->mail->nextStep = 'Next';
|
||||
$lang->mail->successSaved = 'Email settings are saved.';
|
||||
$lang->mail->setForUser = 'Could not test mail configure because the users are without mail in system. Please set mail for user first.';
|
||||
$lang->mail->testSubject = 'mail de test';
|
||||
$lang->mail->testContent = 'Les Paramétrages Email sont ok !';
|
||||
$lang->mail->successSended = 'Envoyé !';
|
||||
$lang->mail->confirmDelete = 'Voulez-vous le supprimer ?';
|
||||
$lang->mail->sendmailTips = "Note : l'expéditeur ne recevra pas ce mail.";
|
||||
$lang->mail->needConfigure = "Les paramétrages Email n'ont pas été trouvés. Commencez par paramétrer l'Email.";
|
||||
$lang->mail->connectFail = 'Echec de Connexion à ZenTao.';
|
||||
$lang->mail->centifyFail = 'Echec de Vérification. La clé secrète peut avoir été changée. Essayez à nouveau !';
|
||||
$lang->mail->nofsocket = 'Les fonctions fsocket sont désactivées. Les mails ne peuvent pas être envoyés. Modifiez allow_url_fopen dans php.ini pour ouvrir Onopenssl, et redémarrez Apache.';
|
||||
$lang->mail->noOpenssl = 'Activez Onopenssl, et redémarrez Apache.';
|
||||
$lang->mail->disableSecure = 'Pas de openssl. ssl et tls sont inactifs.';
|
||||
$lang->mail->sendCloudFail = 'Echec. Raison :';
|
||||
$lang->mail->testSubject = 'Testing Email';
|
||||
$lang->mail->testContent = 'Email settings are done!';
|
||||
$lang->mail->successSended = 'Sent!';
|
||||
$lang->mail->confirmDelete = 'Do you want to delete it?';
|
||||
$lang->mail->sendmailTips = 'Note: Email sender will not receive this email.';
|
||||
$lang->mail->needConfigure = 'Email settings are not found. Please do the Email settings first.';
|
||||
$lang->mail->connectFail = 'Connection to ZenTao failed.';
|
||||
$lang->mail->centifyFail = 'Verification failed. The secret key might be changed. Please try to bind again!';
|
||||
$lang->mail->nofsocket = 'fsocket related functions are deactivated. so Emails cannot be sent out. Please modify allow_url_fopen in php.ini to turn on Onopenssl, and restart Apache.';
|
||||
$lang->mail->noOpenssl = 'Please turn on Onopenssl, and restart Apache.';
|
||||
$lang->mail->disableSecure = 'No openssl. Disable ssl and tls.';
|
||||
$lang->mail->sendCloudFail = 'Failed. Reason:';
|
||||
$lang->mail->sendCloudHelp = <<<EOD
|
||||
|
||||
|
||||
|
||||
EOD;
|
||||
$lang->mail->sendCloudSuccess = 'Envoy';
|
||||
$lang->mail->closeSendCloud = 'Fermer SendCloud';
|
||||
$lang->mail->addressWhiteList = "Ajoutez le à la liste blanche de votre serveur de mail pour éviter d'être bloqué.";
|
||||
$lang->mail->sendCloudSuccess = 'Done';
|
||||
$lang->mail->closeSendCloud = 'Close SendCloud';
|
||||
$lang->mail->addressWhiteList = 'Add it to the whiltelist of your email server to avoid being blocked.';
|
||||
$lang->mail->ztCloudNotice = <<<EOD
|
||||
|
||||
|
||||
@@ -121,4 +121,4 @@ $lang->mail->forgetPassword = <<<EOT
|
||||
EOT;
|
||||
|
||||
$lang->mail->placeholder = new stdclass();
|
||||
$lang->mail->placeholder->password = "Certains serveurs de mails demandent un code d'autorisation, consultez le service d'Emails de votre provider.";
|
||||
$lang->mail->placeholder->password = 'Some Email servers require auth code, refer to your Email service provider.';
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
<td><?php echo $queue->createdDate?></td>
|
||||
<td><?php echo $queue->sendTime?></td>
|
||||
<td><?php echo zget($lang->mail->statusList, $queue->status)?></td>
|
||||
<td class='text-left'><?php echo $queue->failReason?></td>
|
||||
<td class='text-left' title="<?php echo strip_tags($queue->failReason);?>"><?php echo $queue->failReason?></td>
|
||||
<td class='c-actions'>
|
||||
<?php
|
||||
if(common::hasPriv('mail', 'delete')) echo html::a(inlink('delete', "id=$queue->id"), $lang->delete, 'hiddenwin');
|
||||
|
||||
@@ -103,6 +103,7 @@ $lang->misc->feature->themeDesc = '<p>ZenTao 15.0+ a new "Youth Blue" theme
|
||||
$lang->misc->feature->visionsDesc = "<p>The concept of interface has been added since 16.5. Users can deal with R&D affairs in <span style='color: #0c60e1'>[Full Feature Interface]</span> and daily office affairs in <span style='color: #0c60e1'>[Operation Management Interface]</span>.</p><p>You can view the current interface on the avatar, and click the name of the interface to view and switch other interfaces.</p>";
|
||||
$lang->misc->feature->visionsImage = 'theme/default/images/main/visions_en.png';
|
||||
|
||||
$lang->misc->releaseDate['18.1'] = '2023-02-08';
|
||||
$lang->misc->releaseDate['18.0'] = '2023-01-03';
|
||||
$lang->misc->releaseDate['18.0.beta3'] = '2022-12-26';
|
||||
$lang->misc->releaseDate['18.0.beta2'] = '2022-12-14';
|
||||
@@ -196,6 +197,7 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22';
|
||||
$lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
|
||||
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
|
||||
|
||||
$lang->misc->feature->all['18.1'][] = array('title' => 'The automation testing solution interaction is optimized, while a new snapshot management function is newly added. ZenTao IM implemented online collaboration of PPT documents.Fix bugs.', 'desc' => '');
|
||||
$lang->misc->feature->all['18.0'][] = array('title' => "Automated test solutions are proposed. Work order related functions are added to the Operation Management Interface. Approval workflow support for adding all types of notifications. And at the same time, we have further improved the earned value calculation rules.", 'desc' => '');
|
||||
$lang->misc->feature->all['18.0.beta3'][] = array('title' => "The module Statistic is upgraded to BI, with 5 built-in large screens of macro management dimensions.", 'desc' => '');
|
||||
$lang->misc->feature->all['18.0.beta2'][] = array('title' => "We have optimized the product with multi-branches/multi-platforms. It's supported to create siblings stories. It's possible for Plan, Build, and Release to link requirements or bugs beyond their parent branch. ZenTao Client has implemented the robot chatting mechanism.", 'desc' => '');
|
||||
|
||||
@@ -103,6 +103,7 @@ $lang->misc->feature->themeDesc = '<p>ZenTao 15.0+ a new "Youth Blue" theme
|
||||
$lang->misc->feature->visionsDesc = "<p>The concept of interface has been added since 16.5. Users can deal with R&D affairs in <span style='color: #0c60e1'>[Full Feature Interface]</span> and daily office affairs in <span style='color: #0c60e1'>[Operation Management Interface]</span>.</p><p>You can view the current interface on the avatar, and click the name of the interface to view and switch other interfaces.</p>";
|
||||
$lang->misc->feature->visionsImage = 'theme/default/images/main/visions_en.png';
|
||||
|
||||
$lang->misc->releaseDate['18.1'] = '2023-02-08';
|
||||
$lang->misc->releaseDate['18.0'] = '2023-01-03';
|
||||
$lang->misc->releaseDate['18.0.beta3'] = '2022-12-26';
|
||||
$lang->misc->releaseDate['18.0.beta2'] = '2022-12-14';
|
||||
@@ -196,6 +197,7 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22';
|
||||
$lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
|
||||
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
|
||||
|
||||
$lang->misc->feature->all['18.1'][] = array('title' => 'The automation testing solution interaction is optimized, while a new snapshot management function is newly added. ZenTao IM implemented online collaboration of PPT documents.Fix bugs.', 'desc' => '');
|
||||
$lang->misc->feature->all['18.0'][] = array('title' => "Automated test solutions are proposed. Work order related functions are added to the Operation Management Interface. Approval workflow support for adding all types of notifications. And at the same time, we have further improved the earned value calculation rules.", 'desc' => '');
|
||||
$lang->misc->feature->all['18.0.beta3'][] = array('title' => "The module Statistic is upgraded to BI, with 5 built-in large screens of macro management dimensions.", 'desc' => '');
|
||||
$lang->misc->feature->all['18.0.beta2'][] = array('title' => "We have optimized the product with multi-branches/multi-platforms. It's supported to create siblings stories. It's possible for Plan, Build, and Release to link requirements or bugs beyond their parent branch. ZenTao Client has implemented the robot chatting mechanism.", 'desc' => '');
|
||||
|
||||
@@ -103,6 +103,7 @@ $lang->misc->feature->themeDesc = '<p>ZenTao 15.0+ a new "Youth Blue" theme
|
||||
$lang->misc->feature->visionsDesc = "<p>The concept of interface has been added since 16.5. Users can deal with R&D affairs in <span style='color: #0c60e1'>[Full Feature Interface]</span> and daily office affairs in <span style='color: #0c60e1'>[Operation Management Interface]</span>.</p><p>You can view the current interface on the avatar, and click the name of the interface to view and switch other interfaces.</p>";
|
||||
$lang->misc->feature->visionsImage = 'theme/default/images/main/visions_en.png';
|
||||
|
||||
$lang->misc->releaseDate['18.1'] = '2023-02-08';
|
||||
$lang->misc->releaseDate['18.0'] = '2023-01-03';
|
||||
$lang->misc->releaseDate['18.0.beta3'] = '2022-12-26';
|
||||
$lang->misc->releaseDate['18.0.beta2'] = '2022-12-14';
|
||||
@@ -196,6 +197,7 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22';
|
||||
$lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
|
||||
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
|
||||
|
||||
$lang->misc->feature->all['18.1'][] = array('title' => 'The automation testing solution interaction is optimized, while a new snapshot management function is newly added. ZenTao IM implemented online collaboration of PPT documents.Fix bugs.', 'desc' => '');
|
||||
$lang->misc->feature->all['18.0'][] = array('title' => "Automated test solutions are proposed. Work order related functions are added to the Operation Management Interface. Approval workflow support for adding all types of notifications. And at the same time, we have further improved the earned value calculation rules.", 'desc' => '');
|
||||
$lang->misc->feature->all['18.0.beta3'][] = array('title' => "The module Statistic is upgraded to BI, with 5 built-in large screens of macro management dimensions.", 'desc' => '');
|
||||
$lang->misc->feature->all['18.0.beta2'][] = array('title' => "We have optimized the product with multi-branches/multi-platforms. It's supported to create siblings stories. It's possible for Plan, Build, and Release to link requirements or bugs beyond their parent branch. ZenTao Client has implemented the robot chatting mechanism.", 'desc' => '');
|
||||
|
||||
@@ -103,6 +103,8 @@ $lang->misc->feature->themeDesc = "<p>禅道15系列上线了全新的“
|
||||
$lang->misc->feature->visionsDesc = "<p>从16.5开始增加了界面概念,用户可以在<span style='color:#0c60e1'>[研发综合界面]</span>中处理研发事务、在<span style='color:#0c60e1'>[运营管理界面]</span>处理日常办公事务。</p><p>在头像右侧即可查看当前所处界面,点击当前界面名称可查看和切换其他的界面。</p>";
|
||||
$lang->misc->feature->visionsImage = 'theme/default/images/main/visions.png';
|
||||
|
||||
/* Release Date. */
|
||||
$lang->misc->releaseDate['18.1'] = '2023-02-08';
|
||||
$lang->misc->releaseDate['18.0'] = '2023-01-03';
|
||||
$lang->misc->releaseDate['18.0.beta3'] = '2022-12-26';
|
||||
$lang->misc->releaseDate['18.0.beta2'] = '2022-12-14';
|
||||
@@ -196,6 +198,8 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22';
|
||||
$lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
|
||||
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
|
||||
|
||||
/* Release Detail. */
|
||||
$lang->misc->feature->all['18.1'][] = array('title' => '自动化测试解决方案交互优化、新增快照管理功能。禅道客户端实现了 PPT文档在线协作。修复Bug。', 'desc' => '');
|
||||
$lang->misc->feature->all['18.0'][] = array('title' => '推出自动化测试解决方案;运营管理界面增加工单功能;审批流支持增加所有类型的通知以及挣值计算规则完善。', 'desc' => '');
|
||||
$lang->misc->feature->all['18.0.beta3'][] = array('title' => '统计模块升级为BI,内置5张宏观管理维度大屏。', 'desc' => '');
|
||||
$lang->misc->feature->all['18.0.beta2'][] = array('title' => '优化多分支/多平台产品,支持创建孪生需求,计划、版本、发布支持跨分支关联需求和bug,并且禅道客户端实现了机器人会话机制。', 'desc' => '');
|
||||
|
||||
@@ -1016,6 +1016,7 @@ EOF;
|
||||
$auditplans = $this->auditplan->getList(0, $browseType, $param, $orderBy, $pager);
|
||||
|
||||
$this->view->executions = $this->loadModel('execution')->getPairs();
|
||||
$this->view->projects = $this->loadModel('project')->getPairs();
|
||||
$this->view->processTypeList = $this->lang->process->classify;
|
||||
$this->view->processes = $this->pssp->getProcesses();
|
||||
$this->view->activities = $this->pssp->getActivityPairs();
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
<form method='post' target='hiddenwin'>
|
||||
<table align='center' class='table table-form w-320px'>
|
||||
<tr>
|
||||
<th class='w-120px'><?php echo $lang->my->storyConcept;?></th>
|
||||
<th class='w-140px'><?php echo $lang->my->storyConcept;?></th>
|
||||
<td><?php echo html::select('URSR', $URSRList, $URSR, "class='form-control picker URSR'");?></td>
|
||||
</tr>
|
||||
<?php if($this->config->systemMode == 'ALM'):?>
|
||||
|
||||
@@ -1303,14 +1303,22 @@ class productModel extends model
|
||||
{
|
||||
$projectList = $this->dao->select('t2.*')->from(TABLE_PROJECTPRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
|
||||
->leftJoin(TABLE_TEAM)->alias('t3')->on('t2.id=t3.root')
|
||||
->leftJoin(TABLE_STAKEHOLDER)->alias('t4')->on('t2.id=t4.objectID')
|
||||
->where('t1.product')->eq($productID)
|
||||
->andWhere('t2.type')->eq('project')
|
||||
->beginIF($this->cookie->involved or $involved)->andWhere('t3.type')->eq('project')->fi()
|
||||
->beginIF($browseType == 'undone')->andWhere('t2.status')->in('wait,doing')->fi()
|
||||
->beginIF(strpos(",all,undone,", ",$browseType,") === false)->andWhere('t2.status')->eq($browseType)->fi()
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t2.id')->in($this->app->user->view->projects)->fi()
|
||||
->beginIF($this->cookie->involved or $involved)
|
||||
->andWhere('t2.openedBy', true)->eq($this->app->user->account)
|
||||
->orWhere('t2.PM')->eq($this->app->user->account)
|
||||
->orWhere('t3.account')->eq($this->app->user->account)
|
||||
->orWhere('(t4.user')->eq($this->app->user->account)
|
||||
->andWhere('t4.deleted')->eq(0)
|
||||
->markRight(1)
|
||||
->orWhere("CONCAT(',', t2.whitelist, ',')")->like("%,{$this->app->user->account},%")
|
||||
->markRight(1)
|
||||
->fi()
|
||||
->beginIF($branch !== '' and $branch !== 'all')->andWhere('t1.branch')->in($branch)->fi()
|
||||
@@ -2453,7 +2461,13 @@ class productModel extends model
|
||||
}
|
||||
elseif($module == 'ticket')
|
||||
{
|
||||
return helper::createLink('ticket', 'browse', "browseType=byProduct&productID=%s");
|
||||
$params = "productID=%s";
|
||||
if(strpos('browse,view,edit', $method) !== false)
|
||||
{
|
||||
$method = 'browse';
|
||||
$params = "browseType=byProduct&productID=%s";
|
||||
}
|
||||
return helper::createLink('ticket', $method, $params);
|
||||
}
|
||||
|
||||
return $link;
|
||||
|
||||
@@ -69,6 +69,13 @@ $(function()
|
||||
|
||||
infoShowed = true;
|
||||
}
|
||||
if(href !== '')
|
||||
{
|
||||
type = href == '#stories' ? 'story' : (href == '#bugs' ? 'bug' : 'planInfo');
|
||||
var viewLink = createLink('productplan', 'view', 'planID=' + planID + '&type=' + type + (typeof(param) == 'undefined' ? '' : param) + (typeof(orderBy) == 'undefined' ? '' : "&orderBy=" + orderBy));
|
||||
if(type == 'planInfo') viewLink = createLink('productplan', 'view', 'planID=' + planID + '&type=' + type);
|
||||
self.location.href = viewLink;
|
||||
}
|
||||
});
|
||||
|
||||
$('#storyList').on('sort.sortable', function(e, data)
|
||||
|
||||
@@ -115,8 +115,9 @@ class productplanModel extends model
|
||||
$productplanQuery = $this->session->productplanQuery;
|
||||
|
||||
$date = date('Y-m-d');
|
||||
$plans = $this->dao->select('*')->from(TABLE_PRODUCTPLAN)->where('product')->eq($product)
|
||||
->andWhere('deleted')->eq(0)
|
||||
$plans = $this->dao->select('*')->from(TABLE_PRODUCTPLAN)
|
||||
->where('deleted')->eq(0)
|
||||
->beginIF(strpos($param, 'noproduct') === false or !empty($product))->andWhere('product')->eq($product)->fi()
|
||||
->beginIF(!empty($branch) and $branch != 'all')->andWhere('branch')->eq($branch)->fi()
|
||||
->beginIF(strpos(',all,undone,bySearch,review,', ",$browseType,") === false)->andWhere('status')->eq($browseType)->fi()
|
||||
->beginIF($browseType == 'undone')->andWhere('status')->in('wait,doing')->fi()
|
||||
@@ -137,7 +138,8 @@ class productplanModel extends model
|
||||
{
|
||||
$planProjects[$planID] = $this->dao->select('t1.project,t2.name')->from(TABLE_PROJECTPRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id')
|
||||
->where('t1.product')->eq($product)
|
||||
->where('1=1')
|
||||
->beginIF(strpos($param, 'noproduct') === false or !empty($product))->andWhere('product')->eq($product)->fi()
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->andWhere('t1.plan')->like(",$planID,")
|
||||
->andWhere('t2.type')->in('sprint,stage,kanban')
|
||||
@@ -147,7 +149,7 @@ class productplanModel extends model
|
||||
|
||||
$storyCountInTable = $this->dao->select('plan,count(story) as count')->from(TABLE_PLANSTORY)->where('plan')->in($planIdList)->groupBy('plan')->fetchPairs('plan', 'count');
|
||||
$product = $this->loadModel('product')->getById($product);
|
||||
if($product->type == 'normal')
|
||||
if(!empty($product) and $product->type == 'normal')
|
||||
{
|
||||
$storyGroups = $this->dao->select('id,plan,estimate')->from(TABLE_STORY)
|
||||
->where("plan")->in($planIdList)
|
||||
@@ -159,7 +161,7 @@ class productplanModel extends model
|
||||
$parentStories = $parentBugs = $parentHour = array();
|
||||
foreach($plans as $plan)
|
||||
{
|
||||
if($product->type == 'normal')
|
||||
if(!empty($product) and $product->type == 'normal')
|
||||
{
|
||||
$stories = zget($storyGroups, $plan->id, array());
|
||||
$storyPairs = array();
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
<?php endif;?>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<li class='<?php if($type == 'planInfo') echo 'active'?>'>
|
||||
<a href='#planInfo' data-toggle='tab'><?php echo html::icon($lang->icons['plan'], 'text-info') . ' ' . $lang->productplan->view;?></a>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -137,17 +137,17 @@
|
||||
<?php common::printOrderLink('id', $orderBy, $vars, $lang->idAB);?>
|
||||
</th>
|
||||
<?php if($canOrder):?>
|
||||
<th class='w-70px'><?php common::printOrderLink('order', $orderBy, $vars, $lang->productplan->updateOrder);?></th>
|
||||
<th class='w-90px'><?php echo $lang->productplan->updateOrder;?></th>
|
||||
<?php endif;?>
|
||||
<th class='text-left'><?php common::printOrderLink('title', $orderBy, $vars, $lang->story->title);?></th>
|
||||
<th class='w-150px text-left'><?php common::printOrderLink('module', $orderBy, $vars, $lang->story->module);?></th>
|
||||
<th class='w-90px text-left'><?php common::printOrderLink('module', $orderBy, $vars, $lang->story->module);?></th>
|
||||
<th class='w-70px' title='<?php echo $lang->pri;?>'><?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
|
||||
<th class='w-70px'><?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
|
||||
<th class='c-user'><?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
|
||||
<th class='c-user'><?php common::printOrderLink('assignedTo', $orderBy, $vars, $lang->assignedToAB);?></th>
|
||||
<th class='w-70px text-right'><?php common::printOrderLink('estimate', $orderBy, $vars, $lang->story->estimateAB);?></th>
|
||||
<th class='w-110px text-right'><?php common::printOrderLink('estimate', $orderBy, $vars, $lang->story->estimateAB);?></th>
|
||||
<th class='w-80px'><?php common::printOrderLink('stage', $orderBy, $vars, $lang->story->stageAB);?></th>
|
||||
<th class='c-actions-1'><?php echo $lang->actions?></th>
|
||||
<th class='c-actions-1 w-90px'><?php echo $lang->actions?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -533,7 +533,7 @@
|
||||
<?php endif;?>
|
||||
</form>
|
||||
</div>
|
||||
<div id='planInfo' class='tab-pane'>
|
||||
<div id='planInfo' class='tab-pane <?php if($type == 'planInfo') echo 'active';?>'>
|
||||
<div class='cell'>
|
||||
<div class='detail'>
|
||||
<div class='detail-title'><?php echo $lang->productplan->basicInfo;?></div>
|
||||
|
||||
@@ -10,7 +10,7 @@ tbody.sortable > tr > td.sort-handler {color: #3c4353 !important;}
|
||||
|
||||
.has-prefix {position: relative; display: flex; align-items: center;}
|
||||
.has-prefix > span {flex: none;}
|
||||
.has-prefix > a {padding-left: 5px;}
|
||||
.has-prefix > .icon-cards-view {padding-right: 4px;}
|
||||
|
||||
.has-suffix > a {max-width: calc(100% - 100px); padding-right: 5px; color: #0c60e1; display: inline-block;}
|
||||
|
||||
|
||||
@@ -615,7 +615,9 @@ class programModel extends model
|
||||
->andWhere('t1.openedBy', true)->eq($this->app->user->account)
|
||||
->orWhere('t1.PM')->eq($this->app->user->account)
|
||||
->orWhere('t2.account')->eq($this->app->user->account)
|
||||
->orWhere('t3.user')->eq($this->app->user->account)
|
||||
->orWhere('(t3.user')->eq($this->app->user->account)
|
||||
->andWhere('t3.deleted')->eq(0)
|
||||
->markRight(1)
|
||||
->orWhere("CONCAT(',', t1.whitelist, ',')")->like("%,{$this->app->user->account},%")
|
||||
->markRight(1)
|
||||
->fi()
|
||||
|
||||
@@ -163,7 +163,7 @@ class programplanModel extends model
|
||||
$this->loadModel('stage');
|
||||
$this->loadModel('execution');
|
||||
|
||||
$plans = $this->getStage($executionID, $productID);
|
||||
$plans = $this->getStage($executionID, $productID, 'all', 'order');
|
||||
if($baselineID)
|
||||
{
|
||||
$baseline = $this->loadModel('cm')->getByID($baselineID);
|
||||
@@ -335,14 +335,14 @@ class programplanModel extends model
|
||||
if($stage['planID'] == $task->execution)
|
||||
{
|
||||
$stageIndex[$index]['progress']['totalEstimate'] += $task->estimate;
|
||||
$stageIndex[$index]['progress']['totalConsumed'] += $task->consumed;
|
||||
$stageIndex[$index]['progress']['totalConsumed'] += $task->parent == '-1' ? 0 : $task->consumed;
|
||||
$stageIndex[$index]['progress']['totalReal'] += ($task->left + $task->consumed);
|
||||
|
||||
$parent = $stage['parent'];
|
||||
if(isset($stageIndex[$parent]))
|
||||
{
|
||||
$stageIndex[$parent]['progress']['totalEstimate'] += $task->estimate;
|
||||
$stageIndex[$parent]['progress']['totalConsumed'] += $task->consumed;
|
||||
$stageIndex[$parent]['progress']['totalConsumed'] += $task->parent == '-1' ? 0 : $task->consumed;
|
||||
$stageIndex[$parent]['progress']['totalReal'] += ($task->left + $task->consumed);
|
||||
}
|
||||
}
|
||||
@@ -751,8 +751,6 @@ class programplanModel extends model
|
||||
$datas[] = $plan;
|
||||
}
|
||||
|
||||
$project = $this->loadModel('project')->getByID($projectID);
|
||||
$productList = $this->loadModel('product')->getProductPairsByProject($projectID);
|
||||
|
||||
$totalPercent = 0;
|
||||
$totalDevType = 0;
|
||||
@@ -940,30 +938,26 @@ class programplanModel extends model
|
||||
$members = array($this->app->user->account, $data->PM);
|
||||
$roles = $this->user->getUserRoles(array_values($members));
|
||||
$team = $this->user->getTeamMemberPairs($stageID, 'execution');
|
||||
foreach($members as $account)
|
||||
foreach($members as $teamMember)
|
||||
{
|
||||
if(empty($account) or isset($team[$account]) or isset($teamMembers[$account])) continue;
|
||||
if(empty($teamMember) or isset($team[$teamMember]) or isset($teamMembers[$teamMember])) continue;
|
||||
|
||||
$member = new stdclass();
|
||||
$member->root = $stageID;
|
||||
$member->account = $account;
|
||||
$member->role = zget($roles, $account, '');
|
||||
$member->account = $teamMember;
|
||||
$member->role = zget($roles, $teamMember, '');
|
||||
$member->join = $now;
|
||||
$member->type = 'execution';
|
||||
$member->days = $data->days;
|
||||
$member->hours = $this->config->execution->defaultWorkhours;
|
||||
$this->dao->insert(TABLE_TEAM)->data($member)->exec();
|
||||
$teamMembers[$account] = $member;
|
||||
$teamMembers[$teamMember] = $member;
|
||||
}
|
||||
$this->execution->addProjectMembers($data->project, $teamMembers);
|
||||
|
||||
$this->setTreePath($stageID);
|
||||
if($data->acl != 'open') $this->user->updateUserView($stageID, 'sprint');
|
||||
|
||||
$linkProducts = $project->division ? array(0 => $productID) : array_keys($productList);
|
||||
$this->post->set('products', $linkProducts);
|
||||
$this->execution->updateProducts($stageID);
|
||||
|
||||
/* Record version change information. */
|
||||
$spec = new stdclass();
|
||||
$spec->project = $stageID;
|
||||
@@ -987,6 +981,23 @@ class programplanModel extends model
|
||||
}
|
||||
}
|
||||
|
||||
$linkProducts = array();
|
||||
$linkBranches = array();
|
||||
$productList = $this->loadModel('product')->getProducts($projectID);
|
||||
if($project->division)
|
||||
{
|
||||
$linkProducts = array(0 => $productID);
|
||||
$linkBranches = array(0 => $productList[$productID]->branches);
|
||||
}
|
||||
else
|
||||
{
|
||||
$linkProducts = array_keys($productList);
|
||||
foreach($linkProducts as $index => $productID) $linkBranches[$index] = $productList[$productID]->branches;
|
||||
}
|
||||
$this->post->set('products', $linkProducts);
|
||||
$this->post->set('branch', $linkBranches);
|
||||
$this->execution->updateProducts($stageID);
|
||||
|
||||
/* If child plans has milestone, update parent plan set milestone eq 0 . */
|
||||
if($parentID and $milestone) $this->dao->update(TABLE_PROJECT)->set('milestone')->eq(0)->where('id')->eq($parentID)->exec();
|
||||
|
||||
@@ -1079,8 +1090,8 @@ class programplanModel extends model
|
||||
else
|
||||
{
|
||||
/* Synchronously update sub-phase permissions. */
|
||||
$childrenIDList = $this->dao->select('*')->from(TABLE_PROJECT)->where('parent')->eq($oldPlan->id)->fetch('id');
|
||||
if(!empty($childrenIDList)) $this->dao->update(TABLE_PROJECT)->set('acl')->eq($plan->acl)->where('id')->in($childrenIDList)->exec();
|
||||
$childrenIDList = $this->dao->select('id')->from(TABLE_PROJECT)->where('parent')->eq($oldPlan->id)->fetchAll('id');
|
||||
if(!empty($childrenIDList)) $this->dao->update(TABLE_PROJECT)->set('acl')->eq($plan->acl)->where('id')->in(array_keys($childrenIDList))->exec();
|
||||
|
||||
/* The workload of the parent plan cannot exceed 100%. */
|
||||
$oldPlan->parent = $plan->parent;
|
||||
@@ -1121,7 +1132,11 @@ class programplanModel extends model
|
||||
if(dao::isError()) return false;
|
||||
$this->setTreePath($planID);
|
||||
$this->updateSubStageAttr($planID, $plan->attribute);
|
||||
if($plan->acl != 'open') $this->loadModel('user')->updateUserView($planID, 'sprint');
|
||||
if($plan->acl != 'open')
|
||||
{
|
||||
$planIdList = $this->dao->select('id')->from(TABLE_EXECUTION)->where('path')->like("%,$planID,%")->andWhere('type')->eq('stage')->fetchAll('id');
|
||||
$this->loadModel('user')->updateUserView(array_keys($planIdList), 'sprint');
|
||||
}
|
||||
|
||||
if($planChanged)
|
||||
{
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php $hideAttribute = $planID == 0 ? '' : ' hidden'?>
|
||||
<?php $attrAlign = $enableOptionalAttr ? '' : 'text-center';?>
|
||||
<?php $class = $planID == 0 ? '' : "disabled='disabled'"?>
|
||||
<?php $name = $planID == 0 ? $lang->programplan->name : $lang->programplan->subStageName;?>
|
||||
@@ -161,8 +162,8 @@
|
||||
<span class='input-group-addon'>%</span>
|
||||
</div>
|
||||
</td>
|
||||
<td class='<?php echo zget($visibleFields, 'attribute', ' hidden') . zget($requiredFields, 'attribute', '', ' required');?> <?php echo $attrAlign;?>'><?php echo $enableOptionalAttr ? html::select("attributes[$i]", $lang->stage->typeList, '', "class='form-control'") : zget($lang->stage->typeList, $programPlan->attribute);?></td>
|
||||
<td <?php echo zget($visibleFields, 'acl', ' hidden') . zget($requiredFields, 'acl', '', ' required');?>><?php echo html::select("acl[$i]", $lang->execution->aclList, 'open', "class='form-control' $class");?></td>
|
||||
<td class='<?php echo $hideAttribute?> <?php echo zget($visibleFields, 'attribute', ' hidden') . zget($requiredFields, 'attribute', '', ' required');?> <?php echo $attrAlign;?>'><?php echo html::select("attributes[$i]", $lang->stage->typeList, '', "class='form-control'");?></td>
|
||||
<td <?php echo zget($visibleFields, 'acl', ' hidden') . zget($requiredFields, 'acl', '', ' required');?>><?php echo html::select("acl[$i]", $lang->execution->aclList, empty($programPlan) ? 'open' : $programPlan->acl, "class='form-control' $class");?></td>
|
||||
<td class='text-center' <?php echo zget($visibleFields, 'milestone', ' hidden') . zget($requiredFields, 'milestone', '', ' required');?>><?php echo html::radio("milestone[$i]", $lang->programplan->milestoneList, 0);?></td>
|
||||
<td><input type='text' name='begin[<?php echo $i;?>] ' id='begin<?php echo $i;?>' value='' class='form-control form-date' /></td>
|
||||
<td><input type='text' name='end[<?php echo $i;?>]' id='end<?php echo $i;?>' value='' class='form-control form-date' /></td>
|
||||
@@ -206,8 +207,13 @@
|
||||
<span class='input-group-addon'>%</span>
|
||||
</div>
|
||||
</td>
|
||||
<<<<<<< HEAD
|
||||
<td class='<?php echo zget($visibleFields, 'attribute', ' hidden') . zget($requiredFields, 'attribute', '', ' required');?> <?php echo $attrAlign;?>'><?php echo $enableOptionalAttr ? html::select("attributes[$i]", $lang->stage->typeList, '', "class='form-control'") : zget($lang->stage->typeList, $programPlan->attribute);?></td>
|
||||
<td <?php echo zget($visibleFields, 'acl', ' hidden') . zget($requiredFields, 'acl', '', ' required');?>><?php echo html::select("acl[$i]", $lang->execution->aclList, 'open', "class='form-control' $class");?></td>
|
||||
=======
|
||||
<td class='<?php echo $hideAttribute?> <?php echo zget($visibleFields, 'attribute', ' hidden') . zget($requiredFields, 'attribute', '', ' required');?>'><?php echo html::select("attributes[$i]", $lang->stage->typeList, '', "class='form-control'");?></td>
|
||||
<td <?php echo zget($visibleFields, 'acl', ' hidden') . zget($requiredFields, 'acl', '', ' required');?>><?php echo html::select("acl[$i]", $lang->execution->aclList, empty($programPlan) ? 'open' : $programPlan->acl, "class='form-control' $class");?></td>
|
||||
>>>>>>> 780b9c26b7bc23ea6b64598b9d653b7df64036a6
|
||||
<td class='text-center' <?php echo zget($visibleFields, 'milestone', ' hidden') . zget($requiredFields, 'milestone', '', ' required');?>><?php echo html::radio("milestone[$i]", $lang->programplan->milestoneList, 0);?></td>
|
||||
<td><input type='text' name='<?php echo "begin[$i]";?>' id='begin<?php echo $i;?>' class='form-control form-date' /></td>
|
||||
<td><input type='text' name='<?php echo "end[$i]";?>' id='end<?php echo $i;?>' class='form-control form-date' /></td>
|
||||
|
||||
@@ -41,6 +41,10 @@
|
||||
<td class='required' colspan='2'><?php echo html::input('code', $plan->code, "class='form-control'");?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->programplan->PM;?> </th>
|
||||
<td colspan='2'><?php echo html::select('PM', $PMUsers, '', "class='form-control picker-select'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->programplan->percent;?> </th>
|
||||
<td colspan='2'>
|
||||
|
||||
@@ -88,7 +88,7 @@ form {display: block; margin-top: 0em; margin-block-end: 1em;}
|
||||
<div class='btn-group'>
|
||||
<?php if(!empty($project->division)):?>
|
||||
<?php $viewName = $productID != 0 ? zget($productList,$productID) : $lang->product->allProduct;?>
|
||||
<a href='javascript:;' class='btn btn-link btn-limit' data-toggle='dropdown'><span class='text' title='<?php echo $viewName;?>'><?php echo $viewName;?></span> <span class='caret'></span></a>
|
||||
<a href='javascript:;' class='btn btn-link btn-limit text-ellipsis' data-toggle='dropdown' style="max-width: 120px;"><span class='text' title='<?php echo $viewName;?>'><?php echo $viewName;?></span> <span class='caret'></span></a>
|
||||
<ul class='dropdown-menu' style='max-height:240px; max-width: 300px; overflow-y:auto'>
|
||||
<?php
|
||||
$class = '';
|
||||
@@ -96,7 +96,7 @@ form {display: block; margin-top: 0em; margin-block-end: 1em;}
|
||||
foreach($productList as $key => $productName)
|
||||
{
|
||||
$class = $productID == $key ? 'class="active"' : '';
|
||||
echo "<li $class>" . html::a($this->createLink('programplan', 'browse', "projectID=$projectID&productID=$key&type=gantt"), $productName) . "</li>";
|
||||
echo "<li $class>" . html::a($this->createLink('programplan', 'browse', "projectID=$projectID&productID=$key&type=gantt"), $productName, '', "title='{$productName}' class='text-ellipsis'") . "</li>";
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
@@ -107,8 +107,8 @@ form {display: block; margin-top: 0em; margin-block-end: 1em;}
|
||||
</div>
|
||||
<div class="pull-right btn-toolbar flax">
|
||||
<div class="btn-group">
|
||||
<?php echo html::a($this->createLink('project', 'execution', "status=all&projectID=$projectID"),"<i class='icon-list'></i> ", '', "class='btn btn-icon switchBtn' title='{$lang->project->bylist}'");?>
|
||||
<?php echo html::a('',"<i class='icon-gantt-alt'></i> ", '', "class='btn btn-icon text-primary switchBtn' title='{$lang->programplan->gantt}'");?>
|
||||
<?php echo html::a($this->createLink('project', 'execution', "status=all&projectID=$projectID"),"<i class='icon-list'></i> ", '', "class='btn btn-icon switchBtn' title='{$lang->project->bylist}'");?>
|
||||
</div>
|
||||
<a href='javascript:fullScreen();' id='fullScreenBtn' class='btn btn-link'><i class='icon icon-fullscreen'></i> <?php echo $lang->programplan->full;?></a>
|
||||
<div class='button-group'>
|
||||
@@ -734,7 +734,7 @@ $(function()
|
||||
gantt.showDate(new Date());
|
||||
|
||||
// Show task in modal on click task
|
||||
var taskModalTrigger = new $.zui.ModalTrigger({type: 'iframe', width: '80%'});
|
||||
var taskModalTrigger = new $.zui.ModalTrigger({type: 'iframe', width: '95%'});
|
||||
gantt.attachEvent('onTaskClick', function(id, e)
|
||||
{
|
||||
if($(e.srcElement).hasClass('gantt_close') || $(e.srcElement).hasClass('gantt_open')) return false;
|
||||
|
||||
@@ -2033,7 +2033,6 @@ class project extends control
|
||||
|
||||
/* Delete the execution under the project. */
|
||||
$executionIdList = $this->loadModel('execution')->getPairs($projectID);
|
||||
$this->dao->update(TABLE_BUG)->set('execution')->eq(0)->where('execution')->in(array_keys($executionIdList))->exec();
|
||||
|
||||
/* Delete shadow product.*/
|
||||
$project = $this->project->getByID($projectID);
|
||||
@@ -2161,7 +2160,8 @@ class project extends control
|
||||
$this->loadModel('program');
|
||||
$this->loadModel('execution');
|
||||
|
||||
$project = $this->project->getById($projectID);
|
||||
$project = $this->project->getById($projectID);
|
||||
$executions = $this->execution->getPairs($projectID);
|
||||
|
||||
if(!empty($_POST))
|
||||
{
|
||||
@@ -2172,11 +2172,7 @@ class project extends control
|
||||
}
|
||||
|
||||
$oldProducts = $this->product->getProducts($projectID);
|
||||
if($project->multiple and $project->model != 'waterfall')
|
||||
{
|
||||
$executions = $this->dao->select('id')->from(TABLE_EXECUTION)->where('project')->eq($projectID)->fetchPairs('id');
|
||||
$oldExecutionProducts = $this->dao->select('project,product')->from(TABLE_PROJECTPRODUCT)->where('project')->in($executions)->fetchGroup('project', 'product');
|
||||
}
|
||||
if($project->multiple and $project->model != 'waterfall') $oldExecutionProducts = $this->dao->select('project,product')->from(TABLE_PROJECTPRODUCT)->where('project')->in(array_keys($executions))->fetchGroup('project', 'product');
|
||||
|
||||
$this->project->updateProducts($projectID);
|
||||
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
@@ -2193,6 +2189,15 @@ class project extends control
|
||||
$diffProducts = array_merge(array_diff($oldProductIDs, $newProductIDs), array_diff($newProductIDs, $oldProductIDs));
|
||||
if($diffProducts) $this->loadModel('action')->create('project', $projectID, 'Managed', '', !empty($_POST['products']) ? join(',', $_POST['products']) : '');
|
||||
|
||||
if(empty($project->division))
|
||||
{
|
||||
foreach(array_keys($executions) as $executionID)
|
||||
{
|
||||
$this->execution->updateProducts($executionID);
|
||||
if($diffProducts) $this->loadModel('action')->create('execution', $executionID, 'Managed', '', implode(',', array_keys($newProducts)));
|
||||
}
|
||||
}
|
||||
|
||||
if($project->multiple and $project->model != 'waterfall')
|
||||
{
|
||||
$unlinkedProducts = array_diff($oldProductIDs, $newProductIDs);
|
||||
@@ -2307,7 +2312,7 @@ class project extends control
|
||||
$this->view->unmodifiableBranches = $unmodifiableBranches;
|
||||
$this->view->unmodifiableMainBranches = $unmodifiableMainBranches;
|
||||
$this->view->branchGroups = $branchGroups;
|
||||
$this->view->executions = $this->execution->getPairs($projectID);
|
||||
$this->view->executions = $executions;
|
||||
$this->view->allBranches = $this->branch->getByProducts(array_keys($allProducts), 'ignoreNormal');
|
||||
$this->view->allProducts = $allProducts;
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#budgetUnit {border-left: 0px;}
|
||||
#projectName {display: inline-block; width: 32%;}
|
||||
.productsBox a {border-radius: 2px !important;}
|
||||
.productsBox .required:after {right: -12px !important; top: 10px !important;}
|
||||
.productsBox .required:after {right: -12px !important; top: 7px !important;}
|
||||
.productsBox .addProduct {padding-left: 0px !important;}
|
||||
.productsBox .addProduct.required:after {right: -1px !important;}
|
||||
.productsBox .input-group-addon > div {display: inline-block !important;}
|
||||
|
||||
@@ -16,10 +16,20 @@ $(function()
|
||||
$('td .execution .label-danger').each(function()
|
||||
{
|
||||
$execution = $(this).closest('.execution');
|
||||
$td = $(this).closest('td');
|
||||
$td = $(this).closest('td');
|
||||
if($td.width() < $execution.width())
|
||||
{
|
||||
$execution.find('.executionName').css('display', 'inline-block').css('width', $td.width() - $(this).width()).css('overflow', 'hidden').css('float', 'left');
|
||||
}
|
||||
})
|
||||
|
||||
$('td.c-name .build .icon-code-fork').each(function()
|
||||
{
|
||||
$build = $(this).closest('.build');
|
||||
$td = $(this).closest('td');
|
||||
if($td.width() < $build.width())
|
||||
{
|
||||
$build.find('.buildName').css('display', 'inline-block').css('width', $td.width() - $(this).width()).css('overflow', 'hidden').css('float', 'left');
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1635,6 +1635,12 @@ class projectModel extends model
|
||||
if(!dao::isError())
|
||||
{
|
||||
$this->updateProducts($projectID, $_POST['products']);
|
||||
if(empty($oldProject->division))
|
||||
{
|
||||
$executions = $this->loadModel('execution')->getPairs($projectID);
|
||||
foreach(array_keys($executions) as $executionID) $this->execution->updateProducts($executionID);
|
||||
}
|
||||
|
||||
$this->file->updateObjectID($this->post->uid, $projectID, 'project');
|
||||
|
||||
$whitelist = explode(',', $project->whitelist);
|
||||
@@ -2275,13 +2281,15 @@ class projectModel extends model
|
||||
}
|
||||
break;
|
||||
case 'name':
|
||||
$prefix = '';
|
||||
$suffix = '';
|
||||
$prefix = '';
|
||||
$suffix = '';
|
||||
$projectIcon = '';
|
||||
if(isset($project->delay)) $suffix = "<span class='label label-danger label-badge'>{$this->lang->project->statusList['delay']}</span>";
|
||||
$projectType = $project->model == 'scrum' ? 'sprint' : $project->model;
|
||||
if(!empty($suffix) or !empty($prefix)) echo '<div class="project-name' . (empty($prefix) ? '' : ' has-prefix') . (empty($suffix) ? '' : ' has-suffix') . '">';
|
||||
if(!empty($prefix)) echo $prefix;
|
||||
echo html::a($projectLink, "<i class='text-muted icon icon-{$projectType}'></i> " . $project->name, '', "class='text-ellipsis text-primary'");
|
||||
if($this->config->vision == 'rnd') $projectIcon = "<i class='text-muted icon icon-{$projectType}'></i> ";
|
||||
echo html::a($projectLink, $projectIcon . $project->name, '', "class='text-ellipsis text-primary'");
|
||||
if(!empty($suffix)) echo $suffix;
|
||||
if(!empty($suffix) or !empty($prefix)) echo '</div>';
|
||||
break;
|
||||
|
||||
@@ -71,10 +71,12 @@
|
||||
<tr data-id="<?php echo $productID;?>">
|
||||
<td class="c-id-sm text-muted"><?php echo html::a(helper::createLink($module, 'view', "buildID=$build->id"), sprintf('%03d', $build->id), '', "data-app='project'");?></td>
|
||||
<td class="c-name" title='<?php echo $build->name;?>'>
|
||||
<?php echo html::a($this->createLink($module, 'view', "buildID=$build->id"), $build->name, '', "data-app='project'");?>
|
||||
<?php if(!$build->execution):?>
|
||||
<span class='icon icon-code-fork text-muted' title='<?php echo $lang->build->integrated;?>'></span>
|
||||
<?php endif;?>
|
||||
<span class='build'>
|
||||
<?php echo html::a($this->createLink($module, 'view', "buildID=$build->id"), $build->name, '', "data-app='project' class='buildName'");?>
|
||||
<?php if(!$build->execution):?>
|
||||
<span class='icon icon-code-fork text-muted' title='<?php echo $lang->build->integrated;?>'></span>
|
||||
<?php endif;?>
|
||||
</span>
|
||||
</td>
|
||||
<?php if($project->hasProduct):?>
|
||||
<td class="c-name text-left" title='<?php echo $build->productName;?>'><?php echo $build->productName;?></td>
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
<div class='table-row'>
|
||||
<div class='table-col'>
|
||||
<?php $hasBranch = $product->type != 'normal' and isset($branchGroups[$product->id]);?>
|
||||
<div class='input-group <?php if($hasBranch) echo ' has-branch';?>'>
|
||||
<div class='input-group required <?php if($hasBranch) echo ' has-branch';?>'>
|
||||
<span class='input-group-addon'><?php echo $lang->product->common;?></span>
|
||||
<?php echo html::select("products[$i]", $allProducts, $product->id, "class='form-control chosen' onchange='loadBranches(this)' data-last='" . $product->id . "' data-type='" . $product->type . "'");?>
|
||||
</div>
|
||||
@@ -192,7 +192,7 @@
|
||||
<div class="col-sm-6">
|
||||
<div class='table-row'>
|
||||
<div class='table-col'>
|
||||
<div class='input-group'>
|
||||
<div class='input-group required'>
|
||||
<span class='input-group-addon'><?php echo $lang->product->common;?></span>
|
||||
<?php echo html::select("products[0]", $allProducts, '', "class='form-control chosen' onchange='loadBranches(this)'");?>
|
||||
<?php if(common::hasPriv('product', 'create')):?>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<?php if($project->division and $project->hasProduct):?>
|
||||
<div class='btn-group'>
|
||||
<?php $viewName = $productID != 0 ? zget($productList, $productID) : $lang->product->allProduct;?>
|
||||
<a href='javascript:;' class='btn btn-link btn-limit' data-toggle='dropdown'><span class='text' title='<?php echo $viewName;?>'><?php echo $viewName;?></span> <span class='caret'></span></a>
|
||||
<a href='javascript:;' class='btn btn-link btn-limit text-ellipsis' data-toggle='dropdown' style="max-width: 120px;"><span class='text' title='<?php echo $viewName;?>'><?php echo $viewName;?></span> <span class='caret'></span></a>
|
||||
<ul class='dropdown-menu' style='max-height:240px; max-width: 300px; overflow-y:auto'>
|
||||
<?php
|
||||
$class = '';
|
||||
@@ -27,7 +27,7 @@
|
||||
foreach($productList as $key => $productName)
|
||||
{
|
||||
$class = $productID == $key ? 'class="active"' : '';
|
||||
echo "<li $class>" . html::a($this->createLink('project', 'execution', "status=$status&projectID=$projectID&orderby=$orderBy&productID=$key"), $productName) . "</li>";
|
||||
echo "<li $class>" . html::a($this->createLink('project', 'execution', "status=$status&projectID=$projectID&orderby=$orderBy&productID=$key"), $productName, '', "title='{$productName}' class='text-ellipsis'") . "</li>";
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
@@ -45,8 +45,8 @@
|
||||
<div class='btn-toolbar pull-right'>
|
||||
<?php if($project->model == 'waterfall' and $this->config->edition == 'max'):?>
|
||||
<div class="btn-group">
|
||||
<?php echo html::a('', "<i class='icon-list'></i> ", '', "class='btn btn-icon text-primary switchBtn' title='{$lang->project->bylist}'");?>
|
||||
<?php echo html::a($this->createLink('programplan', 'browse', "projectID=$projectID&productID=$productID&type=gantt"), "<i class='icon-gantt-alt'></i> ", '', "class='btn btn-icon switchBtn' title='{$lang->programplan->gantt}'");?>
|
||||
<?php echo html::a('', "<i class='icon-list'></i> ", '', "class='btn btn-icon text-primary switchBtn' title='{$lang->project->bylist}'");?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<?php common::printLink('execution', 'export', "status=$status&productID=$productID&orderBy=$orderBy&from=project", "<i class='icon-export muted'> </i> " . $lang->export, '', "class='btn btn-link export'")?>
|
||||
|
||||
@@ -137,6 +137,8 @@ class projectrelease extends control
|
||||
|
||||
if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $releaseID));
|
||||
|
||||
if(isonlybody()) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true));
|
||||
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('view', "releaseID=$releaseID")));
|
||||
}
|
||||
|
||||
@@ -193,7 +195,11 @@ class projectrelease extends control
|
||||
|
||||
/* Get release and build. */
|
||||
$release = $this->projectrelease->getById((int)$releaseID);
|
||||
if(!$this->session->project) $this->session->set('project', explode(',', $release->project)[0], 'project');
|
||||
if(!$this->session->project)
|
||||
{
|
||||
$releaseProject = explode(',', $release->project);
|
||||
$this->session->set('project', $releaseProject[0], 'project');
|
||||
}
|
||||
|
||||
$this->commonAction($this->session->project, $release->product, $release->branch);
|
||||
$bindBuilds = $this->build->getByList($release->build);
|
||||
@@ -552,7 +558,11 @@ class projectrelease extends control
|
||||
$this->session->set('storyList', inlink('view', "releaseID=$releaseID&type=story&link=true¶m=" . helper::safe64Encode("&browseType=$browseType&queryID=$param")), $this->app->tab);
|
||||
|
||||
$release = $this->projectrelease->getByID($releaseID);
|
||||
if(!$this->session->project) $this->session->set('project', explode(',', $release->project)[0], 'project');
|
||||
if(!$this->session->project)
|
||||
{
|
||||
$releaseProject = explode(',', $release->project);
|
||||
$this->session->set('project', $releaseProject[0], 'project');
|
||||
}
|
||||
|
||||
$builds = $this->loadModel('build')->getByList($release->build);
|
||||
$project = $this->loadModel('project')->getByID($this->session->project);
|
||||
@@ -688,7 +698,11 @@ class projectrelease extends control
|
||||
$this->session->set('bugList', inlink('view', "releaseID=$releaseID&type=$type&link=true¶m=" . helper::safe64Encode("&browseType=$browseType&queryID=$param")), 'qa');
|
||||
/* Set menu. */
|
||||
$release = $this->projectrelease->getByID($releaseID);
|
||||
if(!$this->session->project) $this->session->set('project', explode(',', $release->project)[0], 'project');
|
||||
if(!$this->session->project)
|
||||
{
|
||||
$releaseProject = explode(',', $release->project);
|
||||
$this->session->set('project', $releaseProject[0], 'project');
|
||||
}
|
||||
|
||||
$builds = $this->loadModel('build')->getByList($release->build);
|
||||
$project = $this->loadModel('project')->getByID($this->session->project);
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->release->includedBuild;?></th>
|
||||
<td id='buildBox'><?php echo html::select('build[]', $builds, '', "class='form-control chosen' multiple data-placeholder='{$lang->build->placeholder->multipleSelect}'");?></td>
|
||||
<td id='buildBox'><?php echo html::select('build[]', $builds, '', "class='form-control picker-select' multiple data-placeholder='{$lang->build->placeholder->multipleSelect}'");?></td>
|
||||
<td>
|
||||
<div class="checkbox-primary">
|
||||
<input type="checkbox" name="sync" value="1" id="sync" checked>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user