Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms into sprint/master_lanzongjun_fixbug
This commit is contained in:
@@ -145,7 +145,7 @@ zentaoxx:
|
||||
sed -i "s/'..\/..\/common\/view\/footer.html.php'/\$$app->getModuleRoot() . 'common\/view\/footer.html.php'/g" zentaoxx/extension/xuan/conference/view/admin.html.php
|
||||
echo "ALTER TABLE \`zt_user\` ADD \`pinyin\` varchar(255) NOT NULL DEFAULT '' AFTER \`realname\`;" >> zentaoxx/db/xuanxuan.sql
|
||||
mkdir zentaoxx/tools; cp tools/cn2tw.php zentaoxx/tools; cd zentaoxx/tools; php cn2tw.php
|
||||
cp tools/en2de.php zentaoxx/tools; cd zentaoxx/tools; php en2de.php ../
|
||||
cp tools/en2other.php zentaoxx/tools; cd zentaoxx/tools; php en2other.php ../
|
||||
rm -rf zentaoxx/tools
|
||||
#zip -rqm -9 zentaoxx.$(VERSION).zip zentaoxx/*
|
||||
#rm -rf xuan.zip xuan zentaoxx
|
||||
|
||||
@@ -195,7 +195,7 @@ class userEntry extends Entry
|
||||
if(!common::hasPriv('my', 'work')) break;
|
||||
|
||||
$control = $this->loadController('my', 'task');
|
||||
$control->task($this->param('type', 'assignedTo'), $this->param('order', 'id_desc'), $this->param('total', 0), $this->param('limit', 5), $this->param('page', 1));
|
||||
$control->task($this->param('type', 'assignedTo'), 0, $this->param('order', 'id_desc'), $this->param('total', 0), $this->param('limit', 5), $this->param('page', 1));
|
||||
$data = $this->getData();
|
||||
|
||||
if($data->status == 'success')
|
||||
|
||||
@@ -270,6 +270,7 @@ define('TABLE_PROJECTCASE', '`' . $config->db->prefix . 'projectcase`');
|
||||
define('TABLE_TASKESTIMATE', '`' . $config->db->prefix . 'taskestimate`');
|
||||
define('TABLE_EFFORT', '`' . $config->db->prefix . 'effort`');
|
||||
define('TABLE_BURN', '`' . $config->db->prefix . 'burn`');
|
||||
define('TABLE_CFD', '`' . $config->db->prefix . 'cfd`');
|
||||
define('TABLE_BUILD', '`' . $config->db->prefix . 'build`');
|
||||
define('TABLE_ACL', '`' . $config->db->prefix . 'acl`');
|
||||
|
||||
@@ -377,6 +378,8 @@ $config->objectTables['apistruct'] = TABLE_APISTRUCT;
|
||||
|
||||
$config->newFeatures = array('introduction', 'tutorial', 'youngBlueTheme', 'visions');
|
||||
|
||||
$config->pipelineTypeList = array('gitlab', 'sonarqube', 'jenkins');
|
||||
|
||||
/* Program privs.*/
|
||||
$config->programPriv = new stdclass();
|
||||
$config->programPriv->scrum = array('story', 'projectstory', 'projectrelease', 'project', 'execution', 'build', 'bug', 'testcase', 'testreport', 'doc', 'repo', 'meeting', 'stakeholder', 'testtask');
|
||||
|
||||
@@ -30,7 +30,7 @@ CREATE TABLE `zt_acl` (
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE `zt_action` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`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,
|
||||
@@ -1009,7 +1009,7 @@ CREATE TABLE `zt_grouppriv` (
|
||||
UNIQUE KEY `group` (`group`,`module`,`method`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE `zt_history` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`id` int(9) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`action` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`field` varchar(30) NOT NULL DEFAULT '',
|
||||
`old` text NOT NULL,
|
||||
@@ -1091,6 +1091,7 @@ CREATE TABLE `zt_im_chat` (
|
||||
`editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`lastMessage` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`lastMessageIndex` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`pinnedMessages` text NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
@@ -1107,6 +1108,8 @@ CREATE TABLE `zt_im_chat_message_index` (
|
||||
`tableName` char(64) NOT NULL,
|
||||
`start` int(11) unsigned NOT NULL,
|
||||
`end` int(11) unsigned NOT NULL,
|
||||
`startIndex` int(11) unsigned NOT NULL,
|
||||
`endIndex` int(11) unsigned NOT NULL,
|
||||
`startDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`endDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`count` mediumint(8) unsigned NOT NULL,
|
||||
@@ -1115,7 +1118,9 @@ CREATE TABLE `zt_im_chat_message_index` (
|
||||
KEY `start` (`start`),
|
||||
KEY `end` (`end`),
|
||||
KEY `startDate` (`startDate`),
|
||||
KEY `endDate` (`endDate`)
|
||||
KEY `endDate` (`endDate`),
|
||||
KEY `chatstartindex` (`gid`,`startIndex`),
|
||||
KEY `chatendindex` (`gid`,`endIndex`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE `zt_im_chatuser` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
@@ -1130,6 +1135,7 @@ CREATE TABLE `zt_im_chatuser` (
|
||||
`quit` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`category` varchar(40) NOT NULL DEFAULT '',
|
||||
`lastReadMessage` int(11) unsigned NOT NULL DEFAULT '0',
|
||||
`lastReadMessageIndex` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `chatuser` (`cgid`,`user`),
|
||||
KEY `cgid` (`cgid`),
|
||||
@@ -1179,6 +1185,7 @@ CREATE TABLE `zt_im_message` (
|
||||
`cgid` char(40) NOT NULL DEFAULT '',
|
||||
`user` varchar(30) NOT NULL DEFAULT '',
|
||||
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`index` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`type` enum('normal','broadcast','notify','bulletin') NOT NULL DEFAULT 'normal',
|
||||
`content` text NOT NULL,
|
||||
`contentType` enum('text','plain','emotion','image','file','object','code') NOT NULL DEFAULT 'text',
|
||||
@@ -1196,6 +1203,7 @@ CREATE TABLE `zt_im_message_backup` (
|
||||
`cgid` char(40) NOT NULL DEFAULT '',
|
||||
`user` varchar(30) NOT NULL DEFAULT '',
|
||||
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`index` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`type` enum('normal','broadcast','notify') NOT NULL DEFAULT 'normal',
|
||||
`content` text NOT NULL,
|
||||
`contentType` enum('text','plain','emotion','image','file','object','code') NOT NULL DEFAULT 'text',
|
||||
@@ -2560,6 +2568,8 @@ CREATE TABLE `zt_story` (
|
||||
`approvedDate` date NOT NULL,
|
||||
`lastEditedBy` varchar(30) NOT NULL DEFAULT '',
|
||||
`lastEditedDate` datetime NOT NULL,
|
||||
`changedBy` VARCHAR(30) NOT NULL,
|
||||
`changedDate` DATETIME NOT NULL,
|
||||
`reviewedBy` varchar(255) NOT NULL,
|
||||
`reviewedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`closedBy` varchar(30) NOT NULL DEFAULT '',
|
||||
@@ -3180,6 +3190,7 @@ CREATE TABLE `zt_workflowaction` (
|
||||
`show` enum('dropdownlist','direct') NOT NULL DEFAULT 'dropdownlist',
|
||||
`order` smallint(5) unsigned NOT NULL,
|
||||
`buildin` tinyint(1) unsigned NOT NULL,
|
||||
`role` varchar(10) NOT NULL DEFAULT 'custom',
|
||||
`virtual` tinyint(1) unsigned NOT NULL,
|
||||
`conditions` text NOT NULL,
|
||||
`verifications` text NOT NULL,
|
||||
@@ -3241,6 +3252,7 @@ CREATE TABLE `zt_workflowfield` (
|
||||
`isValue` enum('0','1') NOT NULL DEFAULT '0',
|
||||
`readonly` enum('0','1') NOT NULL DEFAULT '0',
|
||||
`buildin` tinyint(1) unsigned NOT NULL,
|
||||
`role` varchar(10) NOT NULL DEFAULT 'custom',
|
||||
`desc` text NOT NULL,
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
@@ -3262,6 +3274,7 @@ CREATE TABLE `zt_workflowlabel` (
|
||||
`orderBy` text NOT NULL,
|
||||
`order` tinyint(3) NOT NULL,
|
||||
`buildin` tinyint(1) unsigned NOT NULL,
|
||||
`role` varchar(10) NOT NULL DEFAULT 'custom',
|
||||
`createdBy` char(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
`editedBy` char(30) NOT NULL,
|
||||
|
||||
+18
-1
@@ -18,4 +18,21 @@ ALTER TABLE `zt_kanban` ADD `showWIP` enum('0','1') NOT NULL DEFAULT '1' AFTER `
|
||||
ALTER TABLE `zt_kanban` ADD `alignment` varchar(10) NOT NULL DEFAULT 'center' AFTER `object`;
|
||||
|
||||
ALTER TABLE `zt_module` ADD `from` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `type`;
|
||||
ALTER TABLE `zt_workflow` ADD `approval` enum('enabled', 'disabled') NOT NULL DEFAULT 'disabled' AFTER `status`;
|
||||
|
||||
ALTER TABLE `zt_story` ADD `changedBy` VARCHAR(30) NOT NULL AFTER `lastEditedDate`;
|
||||
ALTER TABLE `zt_story` ADD `changedDate` DATETIME NOT NULL AFTER `changedBy`;
|
||||
|
||||
ALTER TABLE `zt_action` CHANGE `id` `id` int(9) unsigned NOT NULL AUTO_INCREMENT FIRST;
|
||||
ALTER TABLE `zt_history` CHANGE `id` `id` int(9) unsigned NOT NULL AUTO_INCREMENT FIRST;
|
||||
|
||||
ALTER TABLE `zt_workflow` ADD `approval` enum('enabled', 'disabled') NOT NULL DEFAULT 'disabled' AFTER `status`;
|
||||
ALTER TABLE `zt_workflowaction` ADD `role` varchar(10) NOT NULL DEFAULT 'custom' AFTER `buildin`;
|
||||
ALTER TABLE `zt_workflowfield` ADD `role` varchar(10) NOT NULL DEFAULT 'custom' AFTER `buildin`;
|
||||
ALTER TABLE `zt_workflowlabel` ADD `role` varchar(10) NOT NULL DEFAULT 'custom' AFTER `buildin`;
|
||||
|
||||
UPDATE `zt_workflowaction` SET `role` = 'buildin' WHERE `role` = 'custom' AND `buildin` = '1';
|
||||
UPDATE `zt_workflowaction` SET `role` = 'virtual' WHERE `role` = 'custom' AND `virtual` = '1';
|
||||
UPDATE `zt_workflowaction` SET `role` = 'default' WHERE `role` = 'custom' AND `action` IN ('browse', 'create', 'batchcreate', 'edit', 'view', 'delete', 'link', 'unlink', 'export', 'exporttemplate', 'import', 'showimport', 'report', 'assign', 'batchedit', 'batchassign');
|
||||
UPDATE `zt_workflowfield` SET `role` = 'buildin' WHERE `role` = 'custom' AND (`buildin` = '1' OR `field` = 'subStatus');
|
||||
UPDATE `zt_workflowfield` SET `role` = 'default' WHERE `role` = 'custom' AND `field` IN ('id', 'parent', 'assignedTo', 'status', 'createdBy', 'createdDate', 'editedBy', 'editedDate', 'assignedBy', 'assignedDate' 'mailto', 'deleted');
|
||||
UPDATE `zt_workflowlabel` SET `role` = 'buildin' WHERE `role` = 'custom' AND `buildin` = '1';
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
CREATE TABLE `zt_cfd` (
|
||||
`id` int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
`execution` int(8) NOT NULL,
|
||||
`type` char(30) NOT NULL,
|
||||
`name` char(30) NOT NULL,
|
||||
`count` smallint NOT NULL,
|
||||
`date` date NOT NULL,
|
||||
UNIQUE KEY `execution_type_name_date` (`execution`,`type`,`name`,`date`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES ('30', '23', '*', '*', '*', 'moduleName=execution&methodName=computecfd', '更新累积流图', 'zentao', 1, 'normal', '0000-00-00 00:00:00');
|
||||
+29
-10
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS `zt_acl` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_action`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_action` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`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,
|
||||
@@ -411,6 +411,16 @@ CREATE TABLE IF NOT EXISTS `zt_casestep` (
|
||||
KEY `case` (`case`),
|
||||
KEY `version` (`version`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_cfd`;
|
||||
CREATE TABLE `zt_cfd` (
|
||||
`id` int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
`execution` int(8) NOT NULL,
|
||||
`type` char(30) NOT NULL,
|
||||
`name` char(30) NOT NULL,
|
||||
`count` smallint NOT NULL,
|
||||
`date` date NOT NULL,
|
||||
UNIQUE KEY `execution_type_name_date` (`execution`,`type`,`name`,`date`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_company`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_company` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
@@ -705,7 +715,7 @@ CREATE TABLE IF NOT EXISTS `zt_holiday` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_history`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_history` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`id` int(9) unsigned NOT NULL auto_increment,
|
||||
`action` mediumint(8) unsigned NOT NULL default '0',
|
||||
`field` varchar(30) NOT NULL default '',
|
||||
`old` text NOT NULL,
|
||||
@@ -1397,6 +1407,8 @@ CREATE TABLE IF NOT EXISTS `zt_story` (
|
||||
`assignedDate` datetime NOT NULL,
|
||||
`lastEditedBy` varchar(30) NOT NULL default '',
|
||||
`lastEditedDate` datetime NOT NULL,
|
||||
`changedBy` VARCHAR(30) NOT NULL,
|
||||
`changedDate` DATETIME NOT NULL,
|
||||
`reviewedBy` varchar(255) NOT NULL,
|
||||
`reviewedDate` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
`closedBy` varchar(30) NOT NULL default '',
|
||||
@@ -1830,7 +1842,8 @@ CREATE TABLE IF NOT EXISTS `zt_webhook` (
|
||||
|
||||
INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES
|
||||
('*', '*', '*', '*', '*', '', '监控定时任务', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('30', '23', '*', '*', '*', 'moduleName=execution&methodName=computeburn', '更新燃尽图', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('30', '23', '*', '*', '*', 'moduleName=execution&methodName=computeburn', '更新燃尽图', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('30', '23', '*', '*', '*', 'moduleName=execution&methodName=computecfd', '更新累积流图', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('0', '8', '*', '*', '*', 'moduleName=report&methodName=remind', '每日任务提醒', 'zentao', 1, 'normal', '0000-00-00 00:00:00'),
|
||||
('*/5', '*', '*', '*', '*', 'moduleName=svn&methodName=run', '同步SVN', 'zentao', 1, 'stop', '0000-00-00 00:00:00'),
|
||||
('*/5', '*', '*', '*', '*', 'moduleName=git&methodName=run', '同步GIT', 'zentao', 1, 'stop', '0000-00-00 00:00:00'),
|
||||
@@ -6140,6 +6153,7 @@ CREATE TABLE IF NOT EXISTS `zt_im_chat` (
|
||||
`mergedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`lastMessage` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`lastMessageIndex` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`pinnedMessages` text NOT NULL DEFAULT '',
|
||||
`mergedChats` text NOT NULL DEFAULT '',
|
||||
@@ -6166,6 +6180,7 @@ CREATE TABLE IF NOT EXISTS `zt_im_chatuser` (
|
||||
`quit` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`category` varchar(40) NOT NULL DEFAULT '',
|
||||
`lastReadMessage` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`lastReadMessageIndex` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `cgid` (`cgid`),
|
||||
KEY `user` (`user`),
|
||||
@@ -6198,6 +6213,7 @@ CREATE TABLE IF NOT EXISTS `zt_im_message` (
|
||||
`cgid` char(40) NOT NULL DEFAULT '',
|
||||
`user` varchar(30) NOT NULL DEFAULT '',
|
||||
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`index` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`type` enum('normal', 'broadcast', 'notify', 'bulletin') NOT NULL DEFAULT 'normal',
|
||||
`content` text NOT NULL DEFAULT '',
|
||||
`contentType` enum('text', 'plain', 'emotion', 'image', 'file', 'object', 'code') NOT NULL DEFAULT 'text',
|
||||
@@ -6217,6 +6233,7 @@ CREATE TABLE IF NOT EXISTS `zt_im_message_backup` (
|
||||
`cgid` char(40) NOT NULL DEFAULT '',
|
||||
`user` varchar(30) NOT NULL DEFAULT '',
|
||||
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`index` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`type` enum('normal', 'broadcast', 'notify') NOT NULL DEFAULT 'normal',
|
||||
`content` text NOT NULL DEFAULT '',
|
||||
`contentType` enum('text', 'plain', 'emotion', 'image', 'file', 'object', 'code') NOT NULL DEFAULT 'text',
|
||||
@@ -6248,6 +6265,8 @@ CREATE TABLE IF NOT EXISTS `zt_im_chat_message_index` (
|
||||
`tableName` char(64) NOT NULL,
|
||||
`start` int(11) unsigned NOT NULL,
|
||||
`end` int(11) unsigned NOT NULL,
|
||||
`startIndex` int(11) unsigned NOT NULL,
|
||||
`endIndex` int(11) unsigned NOT NULL,
|
||||
`startDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`endDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`count` mediumint(8) unsigned NOT NULL,
|
||||
@@ -6256,7 +6275,9 @@ CREATE TABLE IF NOT EXISTS `zt_im_chat_message_index` (
|
||||
KEY `start` (`start`),
|
||||
KEY `end` (`end`),
|
||||
KEY `startDate` (`startDate`),
|
||||
KEY `endDate` (`endDate`)
|
||||
KEY `endDate` (`endDate`),
|
||||
KEY `chatstartindex` (`gid`,`startIndex`),
|
||||
KEY `chatendindex` (`gid`,`endIndex`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_im_messagestatus`;
|
||||
@@ -8524,6 +8545,7 @@ CREATE TABLE IF NOT EXISTS `zt_workflowaction` (
|
||||
`show` enum('dropdownlist', 'direct') NOT NULL DEFAULT 'dropdownlist',
|
||||
`order` smallint(5) unsigned NOT NULL,
|
||||
`buildin` tinyint(1) unsigned NOT NULL,
|
||||
`role` varchar(10) NOT NULL DEFAULT 'custom',
|
||||
`virtual` tinyint(1) unsigned NOT NULL,
|
||||
`conditions` text NOT NULL,
|
||||
`verifications` text NOT NULL,
|
||||
@@ -8587,6 +8609,7 @@ CREATE TABLE IF NOT EXISTS `zt_workflowfield` (
|
||||
`isValue` enum('0', '1') NOT NULL DEFAULT '0',
|
||||
`readonly` enum('0', '1') NOT NULL DEFAULT '0',
|
||||
`buildin` tinyint(1) unsigned NOT NULL,
|
||||
`role` varchar(10) NOT NULL DEFAULT 'custom',
|
||||
`desc` text NOT NULL,
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
@@ -8631,6 +8654,7 @@ CREATE TABLE IF NOT EXISTS `zt_workflowlabel` (
|
||||
`orderBy` text NOT NULL,
|
||||
`order` tinyint(3) NOT NULL,
|
||||
`buildin` tinyint(1) unsigned NOT NULL,
|
||||
`role` varchar(10) NOT NULL DEFAULT 'custom',
|
||||
`createdBy` char(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
`editedBy` char(30) NOT NULL,
|
||||
@@ -13480,12 +13504,7 @@ REPLACE INTO `zt_zoutput` (`id`, `activity`, `name`, `content`, `optional`, `tai
|
||||
(246, 163, '《配置审计报告》', '', 'yes', '', '', 'admin', '2020-01-09 14:55:08', '', '0000-00-00 00:00:00', 605, '0'),
|
||||
(247, 166, '《度量分析计划》', '', 'yes', '', '', 'admin', '2020-01-09 14:55:08', '', '0000-00-00 00:00:00', 610, '0'),
|
||||
(248, 168, '项目度量数据库', '', 'yes', '', '', 'admin', '2020-01-09 14:55:08', '', '0000-00-00 00:00:00', 615, '0'),
|
||||
(249, 172, '《量化项目管理及跟踪计划》', '', 'no', '', '', 'admin', '2020-01-09 14:59:04', '', '0000-00-00 00:00:00', 620, '0'),
|
||||
(250, 170, '《决策分析报告》的决策分析评估表', '', 'no', '', '', 'admin', '2020-01-09 14:59:04', '', '0000-00-00 00:00:00', 625, '0'),
|
||||
(251, 169, '《量化项目计划及跟踪表》', '', 'no', '', '', 'admin', '2020-01-09 14:59:04', '', '0000-00-00 00:00:00', 630, '0'),
|
||||
(252, 173, '《决策分析报告》的评分表', '', 'no', '', '', 'admin', '2020-01-09 14:59:04', '', '0000-00-00 00:00:00', 635, '0'),
|
||||
(253, 174, '《决策分析报告》的评分表', '', 'no', '', '', 'admin', '2020-01-09 14:59:04', '', '0000-00-00 00:00:00', 640, '0'),
|
||||
(254, 175, '《决策分析报告》', '', 'no', '', '', 'admin', '2020-01-09 14:59:04', '', '0000-00-00 00:00:00', 645, '0');
|
||||
(249, 169, '《量化项目计划及跟踪表》', '', 'no', '', '', 'admin', '2020-01-09 14:59:04', '', '0000-00-00 00:00:00', 630, '0');
|
||||
|
||||
REPLACE INTO `zt_basicmeas` VALUES
|
||||
(2,'scale','project','userRequest','项目用户需求初始规模','pgmURInitScale','故事点或功能点','CREATE FUNCTION qc_pgmurinitscale($project int) returns float (10,2)\r\nbegin\r\n declare scale float(10,2) default 0__DELIMITER__\r\n declare inited int default 0__DELIMITER__\r\n select qc_cminited($project, \'URS\') into inited__DELIMITER__\r\n IF inited = 1 THEN\r\n select qc_initscale($project, \'URS\',\'requestEst\') into scale__DELIMITER__\r\n return scale__DELIMITER__\r\n ELSE \r\n return 0__DELIMITER__\r\n END IF__DELIMITER__\r\nend','{\"$project\":{\"showName\":\"\\u6240\\u5c5e\\u9879\\u76ee\",\"varName\":\"$project\",\"varType\":\"select\",\"options\":\"project\",\"defaultValue\":\"\"}}','项目每个产品的第一个用户需求规格说明书基线版本的规模之和','从基线表中查询该项目下面每个产品的第一个用户需求规模说明书版本,然后查询对应的需求,求和。','crontab','{\"week\":\"1,2,3,4,5,6,0\",\"type\":\"week\"}','00:00','','system','0000-00-00 00:00:00','admin','2020-07-07 14:19:41',10,'0'),
|
||||
|
||||
@@ -59,9 +59,9 @@ $lang->action->dynamicAction->task['linkchildtask'] = 'Link child Task';
|
||||
|
||||
$lang->action->label->createchildrenstory = "Create child story";
|
||||
$lang->action->label->linkchildstory = "Link child story";
|
||||
$lang->action->label->unlinkchildrenstory = "CanceledLink child story";
|
||||
$lang->action->label->unlinkchildrenstory = "unlinked a child story";
|
||||
$lang->action->label->linkparentstory = "Link parent story";
|
||||
$lang->action->label->unlinkparentstory = "From parent storyCanceledLink";
|
||||
$lang->action->label->unlinkparentstory = "CanceledLink from parent story ";
|
||||
$lang->action->label->deletechildrenstory = "Deleted child story";
|
||||
|
||||
$lang->action->search->label = array();
|
||||
@@ -101,13 +101,6 @@ $lang->action->search->label['verified'] = $lang->action->label->ve
|
||||
$lang->action->search->label['login'] = $lang->action->label->login;
|
||||
$lang->action->search->label['logout'] = $lang->action->label->logout;
|
||||
|
||||
$lang->action->label->createchildrenstory = "Create child story";
|
||||
$lang->action->label->linkchildstory = "Link child story";
|
||||
$lang->action->label->unlinkchildrenstory = "unlinked a child story";
|
||||
$lang->action->label->linkparentstory = "Link parent story";
|
||||
$lang->action->label->unlinkparentstory = "CanceledLink from parent story ";
|
||||
$lang->action->label->deletechildrenstory = "Deleted child story";
|
||||
|
||||
$lang->action->desc->createchildrenstory = '$date, <strong>$actor</strong> Create child story <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->linkchildstory = '$date, <strong>$actor</strong> Link child story <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->unlinkchildrenstory = '$date, <strong>$actor</strong> Unlink child story <strong>$extra</strong>。' . "\n";
|
||||
|
||||
@@ -59,9 +59,9 @@ $lang->action->dynamicAction->task['linkchildtask'] = 'Link child Task';
|
||||
|
||||
$lang->action->label->createchildrenstory = "Create child story";
|
||||
$lang->action->label->linkchildstory = "Link child story";
|
||||
$lang->action->label->unlinkchildrenstory = "CanceledLink child story";
|
||||
$lang->action->label->unlinkchildrenstory = "unlinked a child story";
|
||||
$lang->action->label->linkparentstory = "Link parent story";
|
||||
$lang->action->label->unlinkparentstory = "From parent storyCanceledLink";
|
||||
$lang->action->label->unlinkparentstory = "CanceledLink from parent story ";
|
||||
$lang->action->label->deletechildrenstory = "Deleted child story";
|
||||
|
||||
$lang->action->search->label = array();
|
||||
@@ -101,13 +101,6 @@ $lang->action->search->label['verified'] = $lang->action->label->ve
|
||||
$lang->action->search->label['login'] = $lang->action->label->login;
|
||||
$lang->action->search->label['logout'] = $lang->action->label->logout;
|
||||
|
||||
$lang->action->label->createchildrenstory = "Create child story";
|
||||
$lang->action->label->linkchildstory = "Link child story";
|
||||
$lang->action->label->unlinkchildrenstory = "unlinked a child story";
|
||||
$lang->action->label->linkparentstory = "Link parent story";
|
||||
$lang->action->label->unlinkparentstory = "CanceledLink from parent story ";
|
||||
$lang->action->label->deletechildrenstory = "Deleted child story";
|
||||
|
||||
$lang->action->desc->createchildrenstory = '$date, <strong>$actor</strong> Create child story <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->linkchildstory = '$date, <strong>$actor</strong> Link child story <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->unlinkchildrenstory = '$date, <strong>$actor</strong> Unlink child story <strong>$extra</strong>。' . "\n";
|
||||
|
||||
@@ -59,9 +59,9 @@ $lang->action->dynamicAction->task['linkchildtask'] = 'Link child Task';
|
||||
|
||||
$lang->action->label->createchildrenstory = "Create child story";
|
||||
$lang->action->label->linkchildstory = "Link child story";
|
||||
$lang->action->label->unlinkchildrenstory = "CanceledLink child story";
|
||||
$lang->action->label->unlinkchildrenstory = "unlinked a child story";
|
||||
$lang->action->label->linkparentstory = "Link parent story";
|
||||
$lang->action->label->unlinkparentstory = "From parent storyCanceledLink";
|
||||
$lang->action->label->unlinkparentstory = "CanceledLink from parent story ";
|
||||
$lang->action->label->deletechildrenstory = "Deleted child story";
|
||||
|
||||
$lang->action->search->label = array();
|
||||
@@ -101,13 +101,6 @@ $lang->action->search->label['verified'] = $lang->action->label->ve
|
||||
$lang->action->search->label['login'] = $lang->action->label->login;
|
||||
$lang->action->search->label['logout'] = $lang->action->label->logout;
|
||||
|
||||
$lang->action->label->createchildrenstory = "Create child story";
|
||||
$lang->action->label->linkchildstory = "Link child story";
|
||||
$lang->action->label->unlinkchildrenstory = "unlinked a child story";
|
||||
$lang->action->label->linkparentstory = "Link parent story";
|
||||
$lang->action->label->unlinkparentstory = "CanceledLink from parent story ";
|
||||
$lang->action->label->deletechildrenstory = "Deleted child story";
|
||||
|
||||
$lang->action->desc->createchildrenstory = '$date, <strong>$actor</strong> Create child story <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->linkchildstory = '$date, <strong>$actor</strong> Link child story <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->unlinkchildrenstory = '$date, <strong>$actor</strong> Unlink child story <strong>$extra</strong>。' . "\n";
|
||||
|
||||
@@ -101,13 +101,6 @@ $lang->action->search->label['verified'] = $lang->action->label->ve
|
||||
$lang->action->search->label['login'] = $lang->action->label->login;
|
||||
$lang->action->search->label['logout'] = $lang->action->label->logout;
|
||||
|
||||
$lang->action->label->createchildrenstory = "创建子目标";
|
||||
$lang->action->label->linkchildstory = "关联子目标";
|
||||
$lang->action->label->unlinkchildrenstory = "取消关联子目标";
|
||||
$lang->action->label->linkparentstory = "关联到父目标";
|
||||
$lang->action->label->unlinkparentstory = "从父目标取消关联";
|
||||
$lang->action->label->deletechildrenstory = "删除子目标";
|
||||
|
||||
$lang->action->desc->createchildrenstory = '$date, 由 <strong>$actor</strong> 创建子目标 <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->linkchildstory = '$date, 由 <strong>$actor</strong> 关联子目标 <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->unlinkchildrenstory = '$date, 由 <strong>$actor</strong> 移除子目标 <strong>$extra</strong>。' . "\n";
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<?php
|
||||
include $app->getExtensionRoot() . '/biz/attend/ext/view/stat.oa.html.hook.php';
|
||||
?>
|
||||
@@ -1,3 +1,3 @@
|
||||
<script>
|
||||
$('#assigntomeBlock>ul>li>a:not([href$="todo"]):not([href$="task"])').parent().remove();
|
||||
$('#assigntomeBlock>ul>li>a:not([href$="todo"]):not([href$="task"]:not[href$="feedback"])').parent().remove();
|
||||
</script>
|
||||
|
||||
@@ -13,6 +13,14 @@ $lang->custom->object['todo'] = 'Todo';
|
||||
$lang->custom->object['user'] = 'User';
|
||||
$lang->custom->object['block'] = 'Block';
|
||||
|
||||
$lang->custom->menuOrder = array();
|
||||
$lang->custom->menuOrder[10] = 'execution';
|
||||
$lang->custom->menuOrder[15] = 'story';
|
||||
$lang->custom->menuOrder[20] = 'task';
|
||||
$lang->custom->menuOrder[25] = 'todo';
|
||||
$lang->custom->menuOrder[30] = 'user';
|
||||
$lang->custom->menuOrder[35] = 'block';
|
||||
|
||||
$lang->custom->task = new stdClass();
|
||||
$lang->custom->task->fields['priList'] = 'Priority';
|
||||
$lang->custom->task->fields['typeList'] = 'Type';
|
||||
|
||||
@@ -13,6 +13,14 @@ $lang->custom->object['todo'] = 'Todo';
|
||||
$lang->custom->object['user'] = 'User';
|
||||
$lang->custom->object['block'] = 'Block';
|
||||
|
||||
$lang->custom->menuOrder = array();
|
||||
$lang->custom->menuOrder[10] = 'execution';
|
||||
$lang->custom->menuOrder[15] = 'story';
|
||||
$lang->custom->menuOrder[20] = 'task';
|
||||
$lang->custom->menuOrder[25] = 'todo';
|
||||
$lang->custom->menuOrder[30] = 'user';
|
||||
$lang->custom->menuOrder[35] = 'block';
|
||||
|
||||
$lang->custom->task = new stdClass();
|
||||
$lang->custom->task->fields['priList'] = 'Priority';
|
||||
$lang->custom->task->fields['typeList'] = 'Type';
|
||||
|
||||
@@ -13,6 +13,14 @@ $lang->custom->object['todo'] = 'Todo';
|
||||
$lang->custom->object['user'] = 'User';
|
||||
$lang->custom->object['block'] = 'Block';
|
||||
|
||||
$lang->custom->menuOrder = array();
|
||||
$lang->custom->menuOrder[10] = 'execution';
|
||||
$lang->custom->menuOrder[15] = 'story';
|
||||
$lang->custom->menuOrder[20] = 'task';
|
||||
$lang->custom->menuOrder[25] = 'todo';
|
||||
$lang->custom->menuOrder[30] = 'user';
|
||||
$lang->custom->menuOrder[35] = 'block';
|
||||
|
||||
$lang->custom->task = new stdClass();
|
||||
$lang->custom->task->fields['priList'] = 'Priority';
|
||||
$lang->custom->task->fields['typeList'] = 'Type';
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
<?php js::set('projectCommon', $lang->project->common);?>
|
||||
<?php js::set('multiBranchProducts', $multiBranchProducts);?>
|
||||
<?php js::set('systemMode', $config->systemMode);?>
|
||||
<?php js::set('projectID', $projectID);?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
<script>
|
||||
$("#createCaseActionMenu a[href=#toBug]").remove();
|
||||
$("#createCaseActionMenu").parent('.btn-group').remove();
|
||||
$("#actionbox .histories-list li").each(function()
|
||||
{
|
||||
var text = $(this).find('a').text();
|
||||
$(this).find('a').parent().text(text);
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/flow/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/flow/ext/view/' . basename(__FILE__);?>
|
||||
@@ -551,8 +551,8 @@ $lang->resource->task->recordEstimate = 'recordEstimateAction';
|
||||
$lang->resource->task->editEstimate = 'editEstimate';
|
||||
$lang->resource->task->deleteEstimate = 'deleteEstimate';
|
||||
$lang->resource->task->report = 'reportChart';
|
||||
$lang->resource->task->exportTemplet = 'exportTemplet';
|
||||
$lang->resource->task->import = 'import';
|
||||
if($config->edition != 'open') $lang->resource->task->exportTemplet = 'exportTemplet';
|
||||
if($config->edition != 'open') $lang->resource->task->import = 'import';
|
||||
|
||||
$lang->task->methodOrder[5] = 'create';
|
||||
$lang->task->methodOrder[10] = 'batchCreate';
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->execution->noExecution;?></span>
|
||||
<?php if(common::hasPriv('execution', 'create')):?>
|
||||
<?php if(common::hasPriv('execution', 'create') and $status == "all"):?>
|
||||
<?php echo html::a($this->createLink('execution', 'create', "projectID=$projectID"), "<i class='icon icon-plus'></i> " . $lang->project->createKanban, '', "class='btn btn-info' data-app='project'");?>
|
||||
<?php endif;?>
|
||||
</p>
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
<div class='input-group'>
|
||||
<?php echo html::select("story[%s]", $stories, $currentStory, "class='form-control chosen' onchange='setStoryRelated(\"%s\")'");?>
|
||||
<span class='input-group-btn'>
|
||||
<a id="preview%s" href='#' class='btn iframe btn-link btn-icon btn-copy' disabled='disabled' title='<?php echo $lang->preview; ?>'><i class='icon-search'></i></a>
|
||||
<a id="preview%s" href='#' class='btn iframe btn-link btn-icon btn-copy' disabled='disabled' title='<?php echo $lang->preview; ?>'><i class='icon-eye'></i></a>
|
||||
<a href='javascript:copyStoryTitle("%s")' class='btn btn-link btn-icon btn-copy' title='<?php echo $lang->task->copyStoryTitle; ?>'><i class='icon-arrow-right'></i></a>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
.hide-sidebar #sidebar > .cell {display: none;}
|
||||
.hide-sidebar #sidebar > .sidebar-toggle > .icon:before {content: "\e314";}
|
||||
#date {float: left; margin-right: 10px; margin-left: 0px;}
|
||||
.cell .nav>li>a:focus {background-color: unset;}
|
||||
</style>
|
||||
<?php js::set('moreLang', $this->lang->side->more);?>
|
||||
<?php js::set('moduleList', $config->todo->moduleList);?>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflow/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflow/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1,4 +1,3 @@
|
||||
<script>
|
||||
$('#submit').after('<input type="hidden" name="vision" id="vision" value="<?php echo $this->config->vision;?>">');
|
||||
$('#ajaxForm #submit').after('<input type="hidden" name="vision" id="vision" value="<?php echo $this->config->vision;?>">');
|
||||
</script>
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflow/ext/view/' . basename(__FILE__);?>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<script>
|
||||
$('#submit').after('<input type="hidden" name="vision" id="vision" value="<?php echo $this->config->vision;?>">');
|
||||
$('#createForm #submit').after('<input type="hidden" name="vision" id="vision" value="<?php echo $this->config->vision;?>">');
|
||||
</script>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflow/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflow/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflow/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflow/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflow/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflow/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowaction/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1,4 +1,3 @@
|
||||
<script>
|
||||
$('#submit').after('<input type="hidden" name="vision" id="vision" value="lite">');
|
||||
</script>
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowaction/ext/view/' . basename(__FILE__);?>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowaction/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowaction/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowfield/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1,4 +1,3 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowfield/ext/view/' . basename(__FILE__);?>
|
||||
<?php if($config->visions == ',lite,'):?>
|
||||
<?php $feedbackDatasources = $this->dao->select('id')->from(TABLE_WORKFLOWDATASOURCE)->where('code')->like('litefeedback%')->andWhere('vision')->eq('lite')->fetchPairs('id', 'id');?>
|
||||
<?php if($feedbackDatasources):?>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowhook/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowhook/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowlabel/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowlayout/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowrelation/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowrule/ext/view/' . basename(__FILE__);?>
|
||||
@@ -1,4 +1,4 @@
|
||||
<script>
|
||||
$("#name").parent().addClass('required');
|
||||
$("#rule").parent().addClass('required');
|
||||
</script>
|
||||
</script>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowrule/ext/view/' . basename(__FILE__);?>
|
||||
@@ -2831,6 +2831,17 @@ class baseRouter
|
||||
fwrite($fh, "\n");
|
||||
fclose($fh);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check app if it is run in a container.
|
||||
*
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function isContainer()
|
||||
{
|
||||
return strtolower(getenv('IS_CONTAINER')) == 'true';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -501,8 +501,6 @@ class baseHTML
|
||||
$gobackList = isset($_COOKIE['goback']) ? json_decode($_COOKIE['goback'], true) : array();
|
||||
$gobackLink = isset($gobackList[$tab]) ? $gobackList[$tab] : '';
|
||||
|
||||
if(strpos($misc, 'data-app') === false) $misc .= " data-app='" . $tab . "'";
|
||||
|
||||
/* If the link of the referer is not the link of the current page or the link of the index, the cookie and gobackLink will be updated. */
|
||||
if(!preg_match("/(m=|\/)(index|search|$currentModule)(&f=|-)(index|buildquery|$currentMethod)(&|-|\.)?/", strtolower($refererLink)))
|
||||
{
|
||||
|
||||
@@ -107,6 +107,12 @@ class GitRepo
|
||||
$cmd = escapeCmd("$this->client tag --sort=taggerdate");
|
||||
$list = execCmd($cmd . ' 2>&1', 'array', $result);
|
||||
if($result) return array();
|
||||
|
||||
foreach($list as $key => $tag)
|
||||
{
|
||||
if(!$tag) unset($list[$key]);
|
||||
}
|
||||
|
||||
return $list;
|
||||
}
|
||||
|
||||
@@ -139,7 +145,7 @@ class GitRepo
|
||||
}
|
||||
|
||||
asort($branches);
|
||||
$branches = array($defaultBranch => $defaultBranch) + $branches;
|
||||
if($defaultBranch) $branches = array($defaultBranch => $defaultBranch) + $branches;
|
||||
|
||||
return $branches;
|
||||
}
|
||||
|
||||
@@ -985,9 +985,9 @@ class actionModel extends model
|
||||
}
|
||||
|
||||
$condition = "((product =',0,' or product=0) AND project = '0' AND execution = 0)";
|
||||
if(isset($productCondition)) $condition .= ' OR ' . $productCondition;
|
||||
if(isset($projectCondition)) $condition .= ' OR ' . $projectCondition;
|
||||
if(isset($executionCondition)) $condition .= ' OR ' . $executionCondition;
|
||||
if(!empty($productCondition)) $condition .= ' OR ' . $productCondition;
|
||||
if(!empty($projectCondition)) $condition .= ' OR ' . $projectCondition;
|
||||
if(!empty($executionCondition)) $condition .= ' OR ' . $executionCondition;
|
||||
}
|
||||
|
||||
$actionCondition = $this->getActionCondition();
|
||||
|
||||
@@ -251,9 +251,10 @@ class api extends control
|
||||
|
||||
|
||||
$id = $this->api->createStruct($data);
|
||||
if(dao::isError()) return $this->sendError(dao::getError());
|
||||
|
||||
$this->action->create('apistruct', $id, 'Created');
|
||||
|
||||
if(dao::isError()) return $this->sendError(dao::getError());
|
||||
return $this->sendSuccess(array('locate' => helper::createLink('api', 'struct', "libID=$libID")));
|
||||
}
|
||||
|
||||
@@ -455,7 +456,7 @@ class api extends control
|
||||
$this->getTypeOptions($api->lib);
|
||||
|
||||
$this->view->title = $api->title . $this->lang->api->edit;
|
||||
$this->view->gobackLink = $this->createLink('api', 'index', "libID={$api->lib}&moduleID={$api->module}");
|
||||
$this->view->gobackLink = $this->createLink('api', 'index', "libID={$api->lib}&moduleID={$api->module}&apiID=$apiID");
|
||||
$this->view->user = $this->app->user->account;
|
||||
$this->view->allUsers = $this->loadModel('user')->getPairs('devfirst|noclosed');;
|
||||
$this->view->moduleOptionMenu = $this->loadModel('tree')->getOptionMenu($api->lib, 'api', $startModuleID = 0);
|
||||
|
||||
@@ -910,7 +910,7 @@ class apiModel extends model
|
||||
$this->config->api->search['module'] = 'api';
|
||||
$this->config->api->search['queryID'] = $queryID;
|
||||
$this->config->api->search['actionURL'] = $actionURL;
|
||||
$this->config->api->search['params']['lib']['values'] = array($lib->id => $lib->name) + array('all' => $this->lang->api->allLibs);
|
||||
$this->config->api->search['params']['lib']['values'] = (!empty($lib)) ? array($lib->id => $lib->name) + array('all' => $this->lang->api->allLibs) : array('all' => $this->lang->api->allLibs);
|
||||
|
||||
$this->loadModel('search')->setSearchParams($this->config->api->search);
|
||||
}
|
||||
|
||||
@@ -33,7 +33,8 @@
|
||||
<tr>
|
||||
<th><?php echo $lang->api->control;?></th>
|
||||
<td>
|
||||
<span><?php echo html::radio('acl', $lang->api->aclList, 'open', "onchange='toggleAcl(this.value, \"lib\")'")?></span>
|
||||
<?php $isDisabled = $type == 'demo' ? 'disabled' : '';?>
|
||||
<span><?php echo html::radio('acl', $lang->api->aclList, 'open', "onchange='toggleAcl(this.value, \"lib\")' $isDisabled")?></span>
|
||||
<span class='text-info' id='noticeAcl'><?php echo $lang->api->noticeAcl['open'];?></span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
+28
-10
@@ -1079,10 +1079,10 @@ class block extends control
|
||||
|
||||
/* Get tasks. Fix bug #2918.*/
|
||||
$yesterday = date('Y-m-d', strtotime('-1 day'));
|
||||
$taskGroups = $this->dao->select("id,parent,project,status,finishedDate,estimate,consumed,`left`")->from(TABLE_TASK)
|
||||
->where('project')->in($executionIdList)
|
||||
$taskGroups = $this->dao->select("id,parent,execution,status,finishedDate,estimate,consumed,`left`")->from(TABLE_TASK)
|
||||
->where('execution')->in($executionIdList)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetchGroup('project', 'id');
|
||||
->fetchGroup('execution', 'id');
|
||||
|
||||
$tasks = array();
|
||||
foreach($taskGroups as $executionID => $taskGroup)
|
||||
@@ -1095,7 +1095,7 @@ class block extends control
|
||||
|
||||
foreach($taskGroup as $taskID => $task)
|
||||
{
|
||||
if(strpos('wait|doing|pause', $task->status) !== false) $undoneTasks ++;
|
||||
if(strpos('wait|doing|pause|cancel', $task->status) !== false) $undoneTasks ++;
|
||||
if(strpos($task->finishedDate, $yesterday) !== false) $yesterdayFinished ++;
|
||||
|
||||
if($task->parent == '-1') continue;
|
||||
@@ -1131,11 +1131,11 @@ class block extends control
|
||||
}
|
||||
|
||||
/* Get bugs. */
|
||||
$bugs = $this->dao->select("project, count(status) as totalBugs, count(status = 'active' or null) as activeBugs, count(resolvedDate like '{$yesterday}%' or null) as yesterdayResolved")->from(TABLE_BUG)
|
||||
->where('project')->in($executionIdList)
|
||||
$bugs = $this->dao->select("execution, count(status) as totalBugs, count(status = 'active' or null) as activeBugs, count(resolvedDate like '{$yesterday}%' or null) as yesterdayResolved")->from(TABLE_BUG)
|
||||
->where('execution')->in($executionIdList)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->groupBy('project')
|
||||
->fetchAll('project');
|
||||
->groupBy('execution')
|
||||
->fetchAll('execution');
|
||||
|
||||
foreach($bugs as $executionID => $bug)
|
||||
{
|
||||
@@ -1717,6 +1717,7 @@ class block extends control
|
||||
if(common::hasPriv('risk', 'view') and $this->config->edition == 'max' and $this->config->vision != 'lite') $hasViewPriv['risk'] = true;
|
||||
if(common::hasPriv('issue', 'view') and $this->config->edition == 'max' and $this->config->vision != 'lite') $hasViewPriv['issue'] = true;
|
||||
if(common::hasPriv('meeting', 'view') and $this->config->edition == 'max' and $this->config->vision != 'lite') $hasViewPriv['meeting'] = true;
|
||||
if(common::hasPriv('feedback', 'view') and in_array($this->config->edition, array('max', 'biz'))) $hasViewPriv['feedback'] = true;
|
||||
|
||||
$params = $this->get->param;
|
||||
$params = json_decode(base64_decode($params));
|
||||
@@ -1725,8 +1726,14 @@ class block extends control
|
||||
$objectCountList = array('todo' => 'todoCount', 'task' => 'taskCount', 'bug' => 'bugCount', 'story' => 'storyCount', 'requirement' => 'requirementCount');
|
||||
if($this->config->edition == 'max')
|
||||
{
|
||||
$objectList += array('risk' => 'risks', 'issue' => 'issues');
|
||||
$objectCountList += array('risk' => 'riskCount', 'issue' => 'issueCount');
|
||||
$objectList += array('risk' => 'risks', 'issue' => 'issues', 'feedback' => 'feedbacks');
|
||||
$objectCountList += array('risk' => 'riskCount', 'issue' => 'issueCount', 'feedback' => 'feedbackCount');
|
||||
}
|
||||
|
||||
if($this->config->edition == 'biz')
|
||||
{
|
||||
$objectList += array('feedback' => 'feedbacks');
|
||||
$objectCountList += array('feedback' => 'feedbackCount');
|
||||
}
|
||||
|
||||
$tasks = $this->loadModel('task')->getUserSuspendedTasks($this->app->user->account);
|
||||
@@ -1749,6 +1756,10 @@ class block extends control
|
||||
->beginIF($objectType == 'story' or $objectType == 'requirement')->andWhere('t2.deleted')->eq('0')->fi()
|
||||
->beginIF($objectType == 'todo')->andWhere('t1.cycle')->eq(0)->andWhere('t1.status')->eq('wait')->andWhere('t1.vision')->eq($this->config->vision)->fi()
|
||||
->beginIF($objectType != 'todo')->andWhere('t1.status')->ne('closed')->fi()
|
||||
->beginIF($objectType == 'feedback')
|
||||
->andWhere('t1.status')->in('wait, noreview')
|
||||
->andWhere('t1.assignedTo')->eq($this->app->user->account)
|
||||
->fi()
|
||||
->orderBy($orderBy)
|
||||
->beginIF($limitCount)->limit($limitCount)->fi()
|
||||
->fetchAll();
|
||||
@@ -1787,6 +1798,13 @@ class block extends control
|
||||
if($objectType == 'risk') $this->app->loadLang('risk');
|
||||
if($objectType == 'issue') $this->app->loadLang('issue');
|
||||
|
||||
if($objectType == 'feedback')
|
||||
{
|
||||
$this->app->loadLang('feedback');
|
||||
$this->view->users = $this->loadModel('user')->getPairs('all,noletter');
|
||||
$this->view->products = $this->loadModel('product')->getPairs();
|
||||
}
|
||||
|
||||
$count[$objectType] = count($objects);
|
||||
$this->view->{$objectList[$objectType]} = $objects;
|
||||
}
|
||||
|
||||
@@ -357,6 +357,7 @@ $lang->block->availableBlocks->testtask = 'Testaufgaben';
|
||||
$lang->block->availableBlocks->risk = 'My Risks';
|
||||
$lang->block->availableBlocks->issue = 'My Issues';
|
||||
$lang->block->availableBlocks->meeting = 'My Meetings';
|
||||
$lang->block->availableBlocks->feedback = 'My Feedbacks';
|
||||
|
||||
if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project';
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
@@ -469,13 +470,14 @@ $lang->block->orderByList->story['status_desc'] = 'Status Absteigend';
|
||||
$lang->block->orderByList->story['stage_asc'] = 'Phase Aufsteigend';
|
||||
$lang->block->orderByList->story['stage_desc'] = 'Phase Absteigend';
|
||||
|
||||
$lang->block->todoCount = 'Todos';
|
||||
$lang->block->taskCount = 'Aufgaben';
|
||||
$lang->block->bugCount = 'Bugs';
|
||||
$lang->block->riskCount = 'Risk';
|
||||
$lang->block->issueCount = 'Issues';
|
||||
$lang->block->storyCount = 'Stories';
|
||||
$lang->block->meetingCount = 'Meetings';
|
||||
$lang->block->todoCount = 'Todos';
|
||||
$lang->block->taskCount = 'Aufgaben';
|
||||
$lang->block->bugCount = 'Bugs';
|
||||
$lang->block->riskCount = 'Risk';
|
||||
$lang->block->issueCount = 'Issues';
|
||||
$lang->block->storyCount = 'Stories';
|
||||
$lang->block->meetingCount = 'Meetings';
|
||||
$lang->block->feedbackCount = 'Feedbacks';
|
||||
|
||||
$lang->block->typeList = new stdclass();
|
||||
|
||||
|
||||
@@ -357,6 +357,7 @@ $lang->block->availableBlocks->testtask = 'Requests';
|
||||
$lang->block->availableBlocks->risk = 'Risks';
|
||||
$lang->block->availableBlocks->issue = 'Issues';
|
||||
$lang->block->availableBlocks->meeting = 'Meetings';
|
||||
$lang->block->availableBlocks->feedback = 'My Feedbacks';
|
||||
|
||||
if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project';
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
@@ -469,13 +470,14 @@ $lang->block->orderByList->story['status_desc'] = 'Story Status DESC';
|
||||
$lang->block->orderByList->story['stage_asc'] = 'Story Phase ASC';
|
||||
$lang->block->orderByList->story['stage_desc'] = 'Story Phase DESC';
|
||||
|
||||
$lang->block->todoCount = 'Todo';
|
||||
$lang->block->taskCount = 'Task';
|
||||
$lang->block->bugCount = 'Bug';
|
||||
$lang->block->riskCount = 'Risk';
|
||||
$lang->block->issueCount = 'Issues';
|
||||
$lang->block->storyCount = 'Stories';
|
||||
$lang->block->meetingCount = 'Meetings';
|
||||
$lang->block->todoCount = 'Todo';
|
||||
$lang->block->taskCount = 'Task';
|
||||
$lang->block->bugCount = 'Bug';
|
||||
$lang->block->riskCount = 'Risk';
|
||||
$lang->block->issueCount = 'Issues';
|
||||
$lang->block->storyCount = 'Stories';
|
||||
$lang->block->meetingCount = 'Meetings';
|
||||
$lang->block->feedbackCount = 'Feedbacks';
|
||||
|
||||
$lang->block->typeList = new stdclass();
|
||||
|
||||
|
||||
@@ -357,6 +357,7 @@ $lang->block->availableBlocks->testtask = 'Recettes';
|
||||
$lang->block->availableBlocks->risk = 'My Risks';
|
||||
$lang->block->availableBlocks->issue = 'My Issues';
|
||||
$lang->block->availableBlocks->meeting = 'My Meetings';
|
||||
$lang->block->availableBlocks->feedback = 'My Feedbacks';
|
||||
|
||||
if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project';
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
@@ -469,13 +470,14 @@ $lang->block->orderByList->story['status_desc'] = 'Tri par Statut Story DESC';
|
||||
$lang->block->orderByList->story['stage_asc'] = 'Tri par Phase Story ASC';
|
||||
$lang->block->orderByList->story['stage_desc'] = 'Tri par Phase Story DESC';
|
||||
|
||||
$lang->block->todoCount = 'Todo';
|
||||
$lang->block->taskCount = 'Task';
|
||||
$lang->block->bugCount = 'Bug';
|
||||
$lang->block->riskCount = 'Risk';
|
||||
$lang->block->issueCount = 'Issues';
|
||||
$lang->block->storyCount = 'Stories';
|
||||
$lang->block->meetingCount = 'Meetings';
|
||||
$lang->block->todoCount = 'Todo';
|
||||
$lang->block->taskCount = 'Task';
|
||||
$lang->block->bugCount = 'Bug';
|
||||
$lang->block->riskCount = 'Risk';
|
||||
$lang->block->issueCount = 'Issues';
|
||||
$lang->block->storyCount = 'Stories';
|
||||
$lang->block->meetingCount = 'Meetings';
|
||||
$lang->block->feedbackCount = 'Feedbacks';
|
||||
|
||||
$lang->block->typeList = new stdclass();
|
||||
|
||||
|
||||
@@ -319,6 +319,7 @@ $lang->block->availableBlocks->testtask = 'Yêu cầu';
|
||||
$lang->block->availableBlocks->risk = 'My Risks';
|
||||
$lang->block->availableBlocks->issue = 'My Issues';
|
||||
$lang->block->availableBlocks->meeting = 'My Meetings';
|
||||
$lang->block->availableBlocks->feedback = 'My Feedbacks';
|
||||
|
||||
if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project';
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
@@ -431,13 +432,14 @@ $lang->block->orderByList->story['status_desc'] = 'Tình trạng câu chuyện g
|
||||
$lang->block->orderByList->story['stage_asc'] = 'Giai đoạn câu chuyện tăng dần';
|
||||
$lang->block->orderByList->story['stage_desc'] = 'Giai đoạn câu chuyện giảm dần';
|
||||
|
||||
$lang->block->todoCount = 'Việc làm';
|
||||
$lang->block->taskCount = 'Nhiệm vụ';
|
||||
$lang->block->bugCount = 'Bug';
|
||||
$lang->block->riskCount = 'Risk';
|
||||
$lang->block->issueCount = 'Issues';
|
||||
$lang->block->storyCount = 'Stories';
|
||||
$lang->block->meetingCount = 'Meetings';
|
||||
$lang->block->todoCount = 'Việc làm';
|
||||
$lang->block->taskCount = 'Nhiệm vụ';
|
||||
$lang->block->bugCount = 'Bug';
|
||||
$lang->block->riskCount = 'Risk';
|
||||
$lang->block->issueCount = 'Issues';
|
||||
$lang->block->storyCount = 'Stories';
|
||||
$lang->block->meetingCount = 'Meetings';
|
||||
$lang->block->feedbackCount = 'Feedbacks';
|
||||
|
||||
$lang->block->typeList = new stdclass();
|
||||
|
||||
|
||||
@@ -357,6 +357,7 @@ $lang->block->availableBlocks->testtask = '测试版本列表';
|
||||
$lang->block->availableBlocks->risk = '风险';
|
||||
$lang->block->availableBlocks->issue = '问题';
|
||||
$lang->block->availableBlocks->meeting = '会议';
|
||||
$lang->block->availableBlocks->feedback = '反馈';
|
||||
|
||||
if($config->systemMode == 'new') $lang->block->moduleList['project'] = '项目';
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
@@ -469,13 +470,14 @@ $lang->block->orderByList->story['status_desc'] = '状态倒序';
|
||||
$lang->block->orderByList->story['stage_asc'] = '阶段正序';
|
||||
$lang->block->orderByList->story['stage_desc'] = '阶段倒序';
|
||||
|
||||
$lang->block->todoCount = '待办数';
|
||||
$lang->block->taskCount = '任务数';
|
||||
$lang->block->bugCount = 'Bug数';
|
||||
$lang->block->riskCount = '风险数';
|
||||
$lang->block->issueCount = '问题数';
|
||||
$lang->block->storyCount = '需求数';
|
||||
$lang->block->meetingCount = '会议数';
|
||||
$lang->block->todoCount = '待办数';
|
||||
$lang->block->taskCount = '任务数';
|
||||
$lang->block->bugCount = 'Bug数';
|
||||
$lang->block->riskCount = '风险数';
|
||||
$lang->block->issueCount = '问题数';
|
||||
$lang->block->storyCount = '需求数';
|
||||
$lang->block->meetingCount = '会议数';
|
||||
$lang->block->feedbackCount = '反馈数';
|
||||
|
||||
$lang->block->typeList = new stdclass();
|
||||
|
||||
|
||||
@@ -332,6 +332,7 @@ $lang->block->availableBlocks->testtask = '測試版本列表';
|
||||
$lang->block->availableBlocks->risk = '我的風險';
|
||||
$lang->block->availableBlocks->issue = '我的問題';
|
||||
$lang->block->availableBlocks->meeting = '我的會議';
|
||||
$lang->block->availableBlocks->feedback = '我的反饋';
|
||||
|
||||
if($config->systemMode == 'new') $lang->block->moduleList['project'] = '項目';
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
@@ -444,13 +445,14 @@ $lang->block->orderByList->story['status_desc'] = '狀態倒序';
|
||||
$lang->block->orderByList->story['stage_asc'] = '階段正序';
|
||||
$lang->block->orderByList->story['stage_desc'] = '階段倒序';
|
||||
|
||||
$lang->block->todoCount = '待辦數';
|
||||
$lang->block->taskCount = '任務數';
|
||||
$lang->block->bugCount = 'Bug數';
|
||||
$lang->block->riskCount = '風險數';
|
||||
$lang->block->issueCount = '問題數';
|
||||
$lang->block->storyCount = '需求數';
|
||||
$lang->block->meetingCount = '會議數';
|
||||
$lang->block->todoCount = '待辦數';
|
||||
$lang->block->taskCount = '任務數';
|
||||
$lang->block->bugCount = 'Bug數';
|
||||
$lang->block->riskCount = '風險數';
|
||||
$lang->block->issueCount = '問題數';
|
||||
$lang->block->storyCount = '需求數';
|
||||
$lang->block->meetingCount = '會議數';
|
||||
$lang->block->feedbackCount = '反饋數';
|
||||
|
||||
$lang->block->typeList = new stdclass();
|
||||
|
||||
|
||||
+22
-10
@@ -34,6 +34,7 @@ class blockModel extends model
|
||||
->setDefault('grid', '4')
|
||||
->setDefault('source', $source)
|
||||
->setDefault('block', $type)
|
||||
->setDefault('vision', $this->config->vision)
|
||||
->setDefault('params', array())
|
||||
->remove('uid,actionLink,modules,moduleBlock')
|
||||
->get();
|
||||
@@ -167,7 +168,7 @@ class blockModel extends model
|
||||
{
|
||||
$data = array();
|
||||
|
||||
$tasks = $this->dao->select('t1.id')->from(TABLE_TASK)->alias('t1')
|
||||
$tasks = $this->dao->select("count(t1.id) as tasks, count(if(t1.status = 'done', 1, null)) as doneTasks")->from(TABLE_TASK)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on("t1.project = t2.id")
|
||||
->leftJoin(TABLE_EXECUTION)->alias('t3')->on("t1.execution = t3.id")
|
||||
->where('t1.assignedTo')->eq($this->app->user->account)
|
||||
@@ -179,9 +180,11 @@ class blockModel extends model
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t1.execution')->in($this->app->user->view->sprints)->fi()
|
||||
->beginIF($this->config->vision)->andWhere('t1.vision')->eq($this->config->vision)->fi()
|
||||
->beginIF($this->config->vision)->andWhere('t3.vision')->eq($this->config->vision)->fi()
|
||||
->fetchAll('id');
|
||||
$data['tasks'] = isset($tasks) ? count($tasks) : 0;
|
||||
$data['doneTasks'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_TASK)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->andWhere('status')->eq('done')->fetch('count');
|
||||
->fetch();
|
||||
|
||||
$data['tasks'] = isset($tasks->tasks) ? $tasks->tasks : 0;
|
||||
$data['doneTasks'] = isset($tasks->doneTasks) ? $tasks->doneTasks : 0;
|
||||
|
||||
$data['bugs'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_BUG)
|
||||
->where('assignedTo')->eq($this->app->user->account)
|
||||
->andWhere('deleted')->eq(0)
|
||||
@@ -205,12 +208,17 @@ class blockModel extends model
|
||||
->fetch('count');
|
||||
|
||||
$today = date('Y-m-d');
|
||||
$data['delayTask'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_TASK)
|
||||
->where('assignedTo')->eq($this->app->user->account)
|
||||
->andWhere('status')->in('wait,doing')
|
||||
->andWhere('deadline')->ne('0000-00-00')
|
||||
->andWhere('deadline')->lt($today)
|
||||
->andWhere('deleted')->eq(0)
|
||||
$data['delayTask'] = (int)$this->dao->select('count(t1.id) AS count')->from(TABLE_TASK)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on("t1.project = t2.id")
|
||||
->leftJoin(TABLE_EXECUTION)->alias('t3')->on("t1.execution = t3.id")
|
||||
->where('t1.assignedTo')->eq($this->app->user->account)
|
||||
->andWhere('(t2.status')->ne('suspended')
|
||||
->orWhere('t3.status')->ne('suspended')
|
||||
->markRight(1)
|
||||
->andWhere('t1.status')->in('wait,doing')
|
||||
->andWhere('t1.deadline')->ne('0000-00-00')
|
||||
->andWhere('t1.deadline')->lt($today)
|
||||
->andWhere('t1.deleted')->eq(0)
|
||||
->fetch('count');
|
||||
$data['delayBug'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_BUG)
|
||||
->where('assignedTo')->eq($this->app->user->account)
|
||||
@@ -773,6 +781,10 @@ class blockModel extends model
|
||||
$params->meetingCount['name'] = $this->lang->block->meetingCount;
|
||||
$params->meetingCount['default'] = 20;
|
||||
$params->meetingCount['control'] = 'input';
|
||||
|
||||
$params->feedbackCount['name'] = $this->lang->block->feedbackCount;
|
||||
$params->feedbackCount['default'] = 20;
|
||||
$params->feedbackCount['control'] = 'input';
|
||||
}
|
||||
|
||||
$params->storyCount['name'] = $this->lang->block->storyCount;
|
||||
|
||||
@@ -185,11 +185,11 @@ $(function()
|
||||
<table class='status-count'>
|
||||
<tr>
|
||||
<td class='text-right'><?php echo $lang->bug->allBugs;?> :</td>
|
||||
<td class='text-left'><?php echo empty($execution->totalBugs) ? 0 : html::a($this->createLink('execution', 'bug', "executionID={$execution->id}&orderBy=status,id_desc&build=0&type=all"), $execution->totalBugs);?></td>
|
||||
<td class='text-left'><?php echo empty($execution->totalBugs) ? 0 : html::a($this->createLink('execution', 'bug', "executionID={$execution->id}&productID=0&orderBy=status,id_desc&build=0&type=all"), $execution->totalBugs);?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='text-right'><?php echo $lang->bug->unResolved;?> :</td>
|
||||
<td class='text-left'><?php echo empty($execution->activeBugs) ? 0 : html::a($this->createLink('execution', 'bug', "executionID={$execution->id}&orderBy=status,id_desc&build=0&type=unresolved"), $execution->activeBugs);?></td>
|
||||
<td class='text-left'><?php echo empty($execution->activeBugs) ? 0 : html::a($this->createLink('execution', 'bug', "executionID={$execution->id}&productID=0&orderBy=status,id_desc&build=0&type=unresolved"), $execution->activeBugs);?></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php if(empty($feedbacks)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-feedbacks .c-id {width: 50px;}
|
||||
</style>
|
||||
<div class='panel-body has-table scrollbar-hover'>
|
||||
<table class='table table-borderless table-fixed table-fixed-head table-hover tablesorter block-feedbacks <?php if(!$longBlock) echo 'block-sm'?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB?></th>
|
||||
<th class='c-product'><?php echo $lang->feedback->product;?></th>
|
||||
<th class='c-title'><?php echo $lang->feedback->title?></th>
|
||||
<th class='c-type'><?php echo $lang->feedback->type;?></th>
|
||||
<th class='c-openedBy'><?php echo $lang->feedback->openedBy;?></th>
|
||||
<th class='c-openedDate'><?php echo $lang->feedback->openedDate;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($feedbacks as $feedback):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
?>
|
||||
<tr>
|
||||
<td><?php echo sprintf('%03d', $feedback->id);?></td>
|
||||
<td><?php echo zget($products, $feedback->product);?></td>
|
||||
<td class='c-title' title='<?php echo $feedback->title?>'><?php echo html::a($this->createLink('feedback', 'view', "feedbackID=$feedback->id"), $feedback->title, '', "data-app='my'")?></td>
|
||||
<td><?php echo zget($lang->feedback->typeList, $feedback->type)?></td>
|
||||
<td><?php echo zget($users, $feedback->openedBy)?></td>
|
||||
<td><?php echo $feedback->openedDate;?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
@@ -10,6 +10,7 @@
|
||||
* @link http://www.zentao.pms
|
||||
*/
|
||||
$viewDir = dirname(__FILE__);
|
||||
$file2Include = file_exists(dirname($viewDir) . "/ext/view/{$code}block.html.php") ? dirname($viewDir) . "/ext/view/{$code}block.html.php" : "{$viewDir}/{$code}block.html.php";
|
||||
$extFire = $app->getExtensionRoot() . $config->edition . "/block/ext/view/{$code}block.html.php";
|
||||
$file2Include = file_exists($extFire) ? $extFire : "{$viewDir}/{$code}block.html.php";
|
||||
include $file2Include;
|
||||
?>
|
||||
|
||||
@@ -127,10 +127,10 @@ $(function()
|
||||
<div class="tile-title"><?php echo $lang->SRCommon;?></div>
|
||||
<?php if($product->stories):?>
|
||||
<div class="tile-amount"><?php echo array_sum($product->stories);?></div>
|
||||
<?php common::printLink('product', 'browse', "productID={$product->id}&branch=&type=allstory", $lang->story->viewAll . '<span class="label label-badge label-icon"><i class="icon icon-arrow-right"></i></span>', '', 'class="btn btn-primary btn-circle btn-icon-right btn-sm"');?>
|
||||
<?php common::printLink('product', 'browse', "productID={$product->id}&branch=&type=allstory", $lang->story->viewAll . '<span class="label label-badge label-icon"><i class="icon icon-arrow-right"></i></span>', '', 'class="btn btn-primary btn-circle btn-icon-right btn-sm" data-app="product"');?>
|
||||
<?php else:?>
|
||||
<div class="tile-amount">0</div>
|
||||
<?php common::printLink('story', 'create', "productID={$product->id}", '<span class="label label-badge label-icon"><i class="icon icon-plus"></i></span>' . $lang->story->create, '', 'class="btn btn-primary btn-circle btn-icon-left btn-sm"');?>
|
||||
<?php common::printLink('story', 'create', "productID={$product->id}", '<span class="label label-badge label-icon"><i class="icon icon-plus"></i></span>' . $lang->story->create, '', 'class="btn btn-primary btn-circle btn-icon-left btn-sm" data-app="product"');?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<ul class="types-line">
|
||||
@@ -157,7 +157,7 @@ $(function()
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="actions">
|
||||
<?php common::printLink('productplan', 'create', "productID={$product->id}", "<i class='icon icon-plus'></i> " . $lang->productplan->create, '', "class='btn btn-info'");?>
|
||||
<?php common::printLink('productplan', 'create', "productID={$product->id}", "<i class='icon icon-plus'></i> " . $lang->productplan->create, '', "class='btn btn-info' data-app='product'");?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="type-info">
|
||||
@@ -190,7 +190,7 @@ $(function()
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="actions">
|
||||
<?php common::printLink('release', 'create', "productID={$product->id}", "<i class='icon icon-plus'></i> " . $lang->release->create, '', "class='btn btn-info'");?>
|
||||
<?php common::printLink('release', 'create', "productID={$product->id}", "<i class='icon icon-plus'></i> " . $lang->release->create, '', "class='btn btn-info' data-app='product'");?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="type-info">
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
.product-info .progress-info {position: absolute; left: 8px; top: 10px; width: 180px; font-size: 12px;}
|
||||
.product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 100px;}
|
||||
.product-info .type-value,
|
||||
.product-info .type-label {font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
.product-info .type-label {font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #838A9D;}
|
||||
.progress-pie .progress-info>small {color: #838A9D;}
|
||||
.product-info .type-value {font-size: 14px;}
|
||||
.product-info .type-value > strong {font-size: 20px; color: #3C4353;}
|
||||
.product-info .actions {position: absolute; left: 10px; top: 14px;}
|
||||
|
||||
@@ -18,11 +18,11 @@ if(!$selfCall) die(include('./todolist.html.php'));
|
||||
.block-todoes .todoes-input .form-control::-moz-placeholder {font-size: 12px; line-height: 20px; color: #a4a8b6;}
|
||||
.block-todoes .todoes-input .form-control:-ms-input-placeholder {font-size: 12px; line-height: 20px;color: #a4a8b6;}
|
||||
.block-todoes .todoes-input .form-control::placeholder {font-size: 12px; line-height: 20px; color: #a4a8b6;}
|
||||
.block-todoes .todoes {padding: 0 10px 10px 10px; margin: 0 -20px; max-height: 350px; overflow: auto; overflow-x:hidden}
|
||||
.block-todoes .todoes {padding: 0 10px 10px 10px; margin: 0 -10px; max-height: 350px; overflow: auto; overflow-x:hidden}
|
||||
.block-todoes .todoes > li {position: relative; padding: 5px 10px 5px 35px; list-style: none; white-space:nowrap; overflow: auto; overflow-x:hidden;}
|
||||
.block-todoes .todoes > li:hover {background-color: #e9f2fb;}
|
||||
.block-todoes .todo-title {padding: 0px;}
|
||||
.titleBox {max-width: 730px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block;}
|
||||
.titleBox {max-width: 1440px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: block;}
|
||||
.block-todoes .todo-pri {margin: 0 5px;}
|
||||
.block-todoes .todo-time {display: inline-block; padding: 0 5px; font-size: 12px; color: #8e939a; width: 95px; min-width: 95px;}
|
||||
.block-todoes .todo-check {position: absolute; top: 5px; left: 10px; display: block; width: 20px; height: 20px; font-size: 20px; color: transparent; cursor: pointer; background: #fff; border: 2px solid #eee; border-radius: 50%;}
|
||||
|
||||
@@ -102,15 +102,17 @@
|
||||
<td class='c-name' title='<?php echo $branch->desc;?>'><?php echo $branch->desc;?></td>
|
||||
<td class='c-actions'>
|
||||
<?php
|
||||
$disabled = $isMain ? 'disabled' : '';
|
||||
common::printIcon('branch', 'edit', "branchID=$branch->id&productID=$productID", $branch, 'list', '', '', "$disabled iframe", true, '', $lang->branch->edit);
|
||||
if($branch->status == 'active')
|
||||
if(!$isMain)
|
||||
{
|
||||
common::printIcon('branch', 'close', "branchID=$branch->id", $branch, 'list', 'off', 'hiddenwin', $disabled);
|
||||
}
|
||||
else
|
||||
{
|
||||
common::printIcon('branch', 'activate', "branchID=$branch->id", $branch, 'list', 'active', 'hiddenwin', $disabled);
|
||||
common::printIcon('branch', 'edit', "branchID=$branch->id&productID=$productID", $branch, 'list', '', '', 'iframe', true, '', $lang->branch->edit);
|
||||
if($branch->status == 'active')
|
||||
{
|
||||
common::printIcon('branch', 'close', "branchID=$branch->id", $branch, 'list', 'off', 'hiddenwin');
|
||||
}
|
||||
else
|
||||
{
|
||||
common::printIcon('branch', 'activate', "branchID=$branch->id", $branch, 'list', 'active', 'hiddenwin');
|
||||
}
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
|
||||
+25
-11
@@ -916,7 +916,7 @@ class bug extends control
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function edit($bugID, $comment = false, $kanbanGroup = '')
|
||||
public function edit($bugID, $comment = false, $kanbanGroup = 'default')
|
||||
{
|
||||
if(!empty($_POST))
|
||||
{
|
||||
@@ -1351,7 +1351,7 @@ class bug extends control
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function assignTo($bugID, $kanbanGroup = '')
|
||||
public function assignTo($bugID, $kanbanGroup = 'default')
|
||||
{
|
||||
$bug = $this->bug->getById($bugID);
|
||||
$this->bug->checkBugExecutionPriv($bug);
|
||||
@@ -1397,19 +1397,26 @@ class bug extends control
|
||||
}
|
||||
|
||||
/* Get assigned to member. */
|
||||
if($bug->execution)
|
||||
if($this->app->tab == 'project' or $this->app->tab == 'execution')
|
||||
{
|
||||
$users = $this->user->getTeamMemberPairs($bug->execution, 'execution');
|
||||
}
|
||||
elseif($bug->project)
|
||||
{
|
||||
$users = $this->loadModel('project')->getTeamMemberPairs($bug->project);
|
||||
if($bug->execution)
|
||||
{
|
||||
$users = $this->user->getTeamMemberPairs($bug->execution, 'execution');
|
||||
}
|
||||
elseif($bug->project)
|
||||
{
|
||||
$users = $this->loadModel('project')->getTeamMemberPairs($bug->project);
|
||||
}
|
||||
else
|
||||
{
|
||||
$users = $this->bug->getProductMemberPairs($bug->product, $bug->branch);
|
||||
$users = array_filter($users);
|
||||
if(empty($users)) $users = $this->user->getPairs('devfirst|noclosed');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$users = $this->bug->getProductMemberPairs($bug->product, $bug->branch);
|
||||
$users = array_filter($users);
|
||||
if(empty($users)) $users = $this->user->getPairs('devfirst|noclosed');
|
||||
$users = $this->user->getPairs('devfirst|noclosed');
|
||||
}
|
||||
|
||||
$this->view->title = $this->products[$bug->product] . $this->lang->colon . $this->lang->bug->assignedTo;
|
||||
@@ -2252,6 +2259,13 @@ class bug extends control
|
||||
$bug->steps = str_replace(' ', ' ', $bug->steps);
|
||||
}
|
||||
|
||||
$bug->openedDate = !helper::isZeroDate($bug->openedDate) ? $bug->openedDate : '';
|
||||
$bug->assignedDate = !helper::isZeroDate($bug->assignedDate) ? $bug->assignedDate : '';
|
||||
$bug->resolvedDate = !helper::isZeroDate($bug->resolvedDate) ? $bug->resolvedDate : '';
|
||||
$bug->closedDate = !helper::isZeroDate($bug->closedDate) ? $bug->closedDate : '';
|
||||
$bug->lastEditedDate = !helper::isZeroDate($bug->lastEditedDate) ? $bug->lastEditedDate : '';
|
||||
$bug->deadline = !helper::isZeroDate($bug->deadline) ? $bug->deadline : '';
|
||||
|
||||
/* fill some field with useful value. */
|
||||
$bug->product = !isset($products[$bug->product]) ? '' : $products[$bug->product] . "(#$bug->product)";
|
||||
$bug->project = !isset($projects[$bug->project]) ? '' : $projects[$bug->project] . "(#$bug->project)";
|
||||
|
||||
@@ -6,3 +6,6 @@
|
||||
.c-build, .c-browser, .c-keywords {width: 100px;}
|
||||
.c-steps {width: 150px;}
|
||||
.c-pri, .c-severity {width: 80px;}
|
||||
.c-actions {width: 60px;}
|
||||
[lang^=de] .c-build, [lang^=fr] .c-build {width: 115px}
|
||||
@media screen and (max-width: 1366px) {[lang^=de] .c-build, [lang^=fr] .c-build {width: 110px}}
|
||||
|
||||
@@ -34,3 +34,4 @@ body {margin-bottom: 25px;}
|
||||
.btn-group a.btn-primary {border-right: 1px solid rgba(255,255,255,0.3);}
|
||||
.btn-group button.dropdown-toggle.btn-primary {padding:6px;}
|
||||
#bugForm tbody tr td .label {max-width: 100px; text-overflow: unset;}
|
||||
[lang^='de'] th.c-confirmed {width: 100px !important;}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
html[lang='en'] #moduleIdBox .input-group-addon {padding: 5px 23px;}
|
||||
html[lang='en'] #deadlineTd .input-group-addon {padding: 5px 18px;}
|
||||
html[lang='zh-cn'] #keywordsAddonLabel, .task {width: 77px;}
|
||||
html[lang='zh-tw'] #keywordsAddonLabel, .task {width: 77px;}
|
||||
html[lang='fr'] #keywordsAddonLabel, .task {width: 61px;}
|
||||
html[lang='de'] #keywordsAddonLabel, .task {width: 73px;}
|
||||
|
||||
.ke-toolbar .ke-outline[data-name='savetemplate'] {display: block;}
|
||||
.ke-outline .ke-icon-savetemplate {background-image: url(theme/default/images/kindeditor/save.gif); background-position: center; width: 56px; height: 20px;}
|
||||
|
||||
@@ -6,3 +6,4 @@
|
||||
#linkBugBox > li {margin-left: -56px;}
|
||||
#branch {width: 95px;}
|
||||
#storyIdBox .chosen-auto-max-width {width: 215px !important;}
|
||||
.form-group {margin-left: 10px; margin-right: 10px;}
|
||||
|
||||
@@ -4,8 +4,95 @@ $(function()
|
||||
|
||||
var $titleCol = $('#batchCreateForm table thead tr th.c-title');
|
||||
if($titleCol.width() < 150) $titleCol.width(150);
|
||||
|
||||
$('#customField').click(function()
|
||||
{
|
||||
hiddenRequireFields();
|
||||
});
|
||||
|
||||
/* Implement a custom form without feeling refresh. */
|
||||
$('#formSettingForm .btn-primary').click(function()
|
||||
{
|
||||
var fields = '';
|
||||
$('#formSettingForm > .checkboxes > .checkbox-primary > input:checked').each(function()
|
||||
{
|
||||
fields += ',' + $(this).val();
|
||||
});
|
||||
|
||||
var link = createLink('custom', 'ajaxSaveCustomFields', 'module=bug§ion=custom&key=batchCreateFields');
|
||||
$.post(link, {'fields' : fields}, function()
|
||||
{
|
||||
showCheckedFields(fields);
|
||||
$('#formSetting').parent().removeClass('open');
|
||||
|
||||
if($('#batchCreateForm table thead tr th.c-title').width() < 150) $titleCol.width(150);
|
||||
|
||||
var fieldCount = $('#batchCreateForm .table thead>tr>th:visible').length;
|
||||
$('.form-actions').attr('colspan', fieldCount);
|
||||
|
||||
if(fieldCount > 10)
|
||||
{
|
||||
$('#batchCreateForm > .table-responsive').removeClass('scroll-none');
|
||||
$('#batchCreateForm > .table-responsive').css('overflow', 'auto');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#batchCreateForm > .table-responsive').addClass('scroll-none');
|
||||
$('#batchCreateForm > .table-responsive').css('overflow', 'visible');
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
})
|
||||
|
||||
/**
|
||||
* Show checked fields.
|
||||
*
|
||||
* @param string fields
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function showCheckedFields(fields)
|
||||
{
|
||||
showFields = fields;
|
||||
|
||||
var fieldList = ',' + fields + ',';
|
||||
$('#formSettingForm > .checkboxes > .checkbox-primary > input').each(function()
|
||||
{
|
||||
var field = ',' + $(this).val() + ',';
|
||||
var $field = $('[name^=' + $(this).val() + ']');
|
||||
var required = ',' + requiredFields + ',';
|
||||
var $fieldBox = $('.' + $(this).val() + 'Box' );
|
||||
if(fieldList.indexOf(field) >= 0 || required.indexOf(field) >= 0)
|
||||
{
|
||||
$fieldBox.removeClass('hidden');
|
||||
$field.removeAttr('disabled');
|
||||
}
|
||||
else if(!$fieldBox.hasClass('hidden'))
|
||||
{
|
||||
$fieldBox.addClass('hidden');
|
||||
$field.attr('disabled', true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Hidden require field.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function hiddenRequireFields()
|
||||
{
|
||||
$('#formSettingForm > .checkboxes > .checkbox-primary > input').each(function()
|
||||
{
|
||||
var field = ',' + $(this).val() + ',';
|
||||
var required = ',' + requiredFields + ',';
|
||||
if(required.indexOf(field) >= 0) $(this).closest('div').addClass('hidden');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Set opened builds.
|
||||
*
|
||||
@@ -149,3 +236,35 @@ $(document).keydown(function(event)
|
||||
inputFocusJump('down');
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Add item.
|
||||
*
|
||||
* @param object $obj
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function addItem(obj)
|
||||
{
|
||||
var item = $('#addItem').html().replace(/%i%/g, itemIndex + 1);
|
||||
$('<tr class="addedItem">' + item + '</tr>').insertAfter($(obj).closest('tr'));
|
||||
|
||||
$(obj).closest('tr').next().find(".form-date").datepicker();
|
||||
$(obj).closest('tr').next().find('div[id$=_chosen]').remove();
|
||||
$(obj).closest('tr').next().find('.chosen').next('.picker').remove();
|
||||
$(obj).closest('tr').next().find('.chosen').chosen();
|
||||
|
||||
itemIndex ++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete item.
|
||||
*
|
||||
* @param object $obj
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function deleteItem(obj)
|
||||
{
|
||||
$(obj).closest('tr').remove();
|
||||
}
|
||||
|
||||
@@ -425,7 +425,6 @@ $lang->bug->placeholder->newBuildName = 'Nom Nouv Build';
|
||||
|
||||
$lang->bug->featureBar['browse']['all'] = $lang->bug->allBugs;
|
||||
$lang->bug->featureBar['browse']['unclosed'] = $lang->bug->unclosed;
|
||||
$lang->bug->featureBar['browse']['openedbyme'] = $lang->bug->openedByMe;
|
||||
$lang->bug->featureBar['browse']['assigntome'] = $lang->bug->assignToMe;
|
||||
$lang->bug->featureBar['browse']['resolvedbyme'] = $lang->bug->resolvedByMe;
|
||||
|
||||
@@ -433,6 +432,7 @@ $lang->bug->featureBar['browse']['unresolved'] = $lang->bug->unResolved;
|
||||
$lang->bug->featureBar['browse']['more'] = $lang->more;
|
||||
|
||||
$lang->bug->moreSelects['assignedbyme'] = $lang->bug->assignedByMe;
|
||||
$lang->bug->moreSelects['openedbyme'] = $lang->bug->openedByMe;
|
||||
$lang->bug->moreSelects['unconfirmed'] = $lang->bug->unconfirmed;
|
||||
$lang->bug->moreSelects['assigntonull'] = $lang->bug->assignToNull;
|
||||
$lang->bug->moreSelects['longlifebugs'] = $lang->bug->longLifeBugs;
|
||||
|
||||
+32
-8
@@ -745,6 +745,8 @@ class bugModel extends model
|
||||
|
||||
if($bug->execution and $bug->status != $oldBug->status) $this->loadModel('kanban')->updateLane($bug->execution, 'bug');
|
||||
|
||||
if(($this->config->edition == 'biz' || $this->config->edition == 'max') && $oldBug->feedback) $this->loadModel('feedback')->updateStatus('bug', $oldBug->feedback, $bug->status, $oldBug->status);
|
||||
|
||||
return common::createChanges($oldBug, $bug);
|
||||
}
|
||||
}
|
||||
@@ -845,6 +847,9 @@ class bugModel extends model
|
||||
unset($bug);
|
||||
}
|
||||
|
||||
$isBiz = $this->config->edition == 'biz';
|
||||
$isMax = $this->config->edition == 'max';
|
||||
|
||||
/* Update bugs. */
|
||||
foreach($bugs as $bugID => $bug)
|
||||
{
|
||||
@@ -866,6 +871,12 @@ class bugModel extends model
|
||||
$this->executeHooks($bugID);
|
||||
|
||||
$allChanges[$bugID] = common::createChanges($oldBug, $bug);
|
||||
|
||||
if(($isBiz || $isMax) && $oldBug->feedback && !isset($feedbacks[$oldBug->feedback]))
|
||||
{
|
||||
$feedbacks[$oldBug->feedback] = $oldBug->feedback;
|
||||
$this->loadModel('feedback')->updateStatus('bug', $oldBug->feedback, $bug->status, $oldBug->status);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1138,6 +1149,8 @@ class bugModel extends model
|
||||
/* Link bug to build and release. */
|
||||
$this->linkBugToBuild($bugID, $bug->resolvedBuild);
|
||||
|
||||
if(($this->config->edition == 'biz' || $this->config->edition == 'max') && $oldBug->feedback) $this->loadModel('feedback')->updateStatus('bug', $oldBug->feedback, $bug->status, $oldBug->status);
|
||||
|
||||
return common::createChanges($oldBug, $bug);
|
||||
}
|
||||
|
||||
@@ -1252,6 +1265,9 @@ class bugModel extends model
|
||||
$modules = array();
|
||||
while($module = $stmt->fetch()) $modules[$module->id] = $module;
|
||||
|
||||
$isBiz = $this->config->edition == 'biz';
|
||||
$isMax = $this->config->edition == 'max';
|
||||
|
||||
$changes = array();
|
||||
foreach($bugIDList as $i => $bugID)
|
||||
{
|
||||
@@ -1297,6 +1313,12 @@ class bugModel extends model
|
||||
|
||||
if($oldBug->execution) $this->loadModel('kanban')->updateLane($oldBug->execution, 'bug');
|
||||
$changes[$bugID] = common::createChanges($oldBug, $bug);
|
||||
|
||||
if(($isBiz || $isMax) && $oldBug->feedback && !isset($feedbacks[$oldBug->feedback]))
|
||||
{
|
||||
$feedbacks[$oldBug->feedback] = $oldBug->feedback;
|
||||
$this->loadModel('feedback')->updateStatus('bug', $oldBug->feedback, $bug->status, $oldBug->status);
|
||||
}
|
||||
}
|
||||
|
||||
/* Link bug to build and release. */
|
||||
@@ -1408,6 +1430,8 @@ class bugModel extends model
|
||||
if(isset($output['toColID'])) $this->kanban->moveCard($bugID, $output['fromColID'], $output['toColID'], $output['fromLaneID'], $output['toLaneID']);
|
||||
}
|
||||
|
||||
if(($this->config->edition == 'biz' || $this->config->edition == 'max') && $oldBug->feedback) $this->loadModel('feedback')->updateStatus('bug', $oldBug->feedback, $bug->status, $oldBug->status);
|
||||
|
||||
return common::createChanges($oldBug, $bug);
|
||||
}
|
||||
|
||||
@@ -3195,7 +3219,7 @@ class bugModel extends model
|
||||
echo zget($users, $bug->openedBy);
|
||||
break;
|
||||
case 'openedDate':
|
||||
echo substr($bug->openedDate, 5, 11);
|
||||
echo helper::isZeroDate($bug->openedDate) ? '' : substr($bug->openedDate, 5, 11);
|
||||
break;
|
||||
case 'openedBuild':
|
||||
$builds = array_flip($builds);
|
||||
@@ -3204,11 +3228,11 @@ class bugModel extends model
|
||||
$buildID = zget($builds, $build, '');
|
||||
if($buildID == 'trunk')
|
||||
{
|
||||
echo $build;
|
||||
echo $build . ' ';
|
||||
}
|
||||
elseif($buildID and common::hasPriv('build', 'view'))
|
||||
{
|
||||
echo html::a(helper::createLink('build', 'view', "buildID=$buildID"), $build, '', "title='$bug->openedBuild'");
|
||||
echo html::a(helper::createLink('build', 'view', "buildID=$buildID"), $build, '', "title='$bug->openedBuild'") . ' ';
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -3216,10 +3240,10 @@ class bugModel extends model
|
||||
$this->printAssignedHtml($bug, $users);
|
||||
break;
|
||||
case 'assignedDate':
|
||||
echo substr($bug->assignedDate, 5, 11);
|
||||
echo helper::isZeroDate($bug->assignedDate) ? '' : substr($bug->assignedDate, 5, 11);
|
||||
break;
|
||||
case 'deadline':
|
||||
echo $bug->deadline;
|
||||
echo helper::isZeroDate($bug->deadline) ? '' : substr($bug->deadline, 5, 11);
|
||||
break;
|
||||
case 'resolvedBy':
|
||||
echo zget($users, $bug->resolvedBy, $bug->resolvedBy);
|
||||
@@ -3228,7 +3252,7 @@ class bugModel extends model
|
||||
echo zget($this->lang->bug->resolutionList, $bug->resolution);
|
||||
break;
|
||||
case 'resolvedDate':
|
||||
echo substr($bug->resolvedDate, 5, 11);
|
||||
echo helper::isZeroDate($bug->resolvedDate) ? '' : substr($bug->resolvedDate, 5, 11);
|
||||
break;
|
||||
case 'resolvedBuild':
|
||||
echo $bug->resolvedBuild;
|
||||
@@ -3237,13 +3261,13 @@ class bugModel extends model
|
||||
echo zget($users, $bug->closedBy);
|
||||
break;
|
||||
case 'closedDate':
|
||||
echo substr($bug->closedDate, 5, 11);
|
||||
echo helper::isZeroDate($bug->closedDate) ? '' : substr($bug->closedDate, 5, 11);
|
||||
break;
|
||||
case 'lastEditedBy':
|
||||
echo zget($users, $bug->lastEditedBy);
|
||||
break;
|
||||
case 'lastEditedDate':
|
||||
echo substr($bug->lastEditedDate, 5, 11);
|
||||
echo helper::isZeroDate($bug->lastEditedDate) ? '' : substr($bug->lastEditedDate, 5, 11);
|
||||
break;
|
||||
case 'actions':
|
||||
echo $this->buildOperateMenu($bug, 'browse');
|
||||
|
||||
@@ -14,6 +14,24 @@
|
||||
include '../../common/view/header.html.php';
|
||||
js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
?>
|
||||
<?php
|
||||
$visibleFields = array();
|
||||
$requiredFields = array();
|
||||
foreach(explode(',', $showFields) as $field)
|
||||
{
|
||||
if($field) $visibleFields[$field] = '';
|
||||
}
|
||||
|
||||
foreach(explode(',', $config->bug->create->requiredFields) as $field)
|
||||
{
|
||||
if($field)
|
||||
{
|
||||
$requiredFields[$field] = '';
|
||||
if(strpos(",{$config->bug->list->customBatchCreateFields},", ",{$field},") !== false) $visibleFields[$field] = '';
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php js::set('showFields', $showFields);?>
|
||||
<div id='mainContent' class='main-content fade'>
|
||||
<div class='main-header'>
|
||||
<h2>
|
||||
@@ -30,49 +48,32 @@ js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$visibleFields = array();
|
||||
$requiredFields = array();
|
||||
foreach(explode(',', $showFields) as $field)
|
||||
{
|
||||
if($field) $visibleFields[$field] = '';
|
||||
}
|
||||
foreach(explode(',', $config->bug->create->requiredFields) as $field)
|
||||
{
|
||||
if($field)
|
||||
{
|
||||
$requiredFields[$field] = '';
|
||||
if(strpos(",{$config->bug->list->customBatchCreateFields},", ",{$field},") !== false) $visibleFields[$field] = '';
|
||||
}
|
||||
}
|
||||
?>
|
||||
<form class='main-form' method='post' target='hiddenwin' id='batchCreateForm'>
|
||||
<div class="table-responsive">
|
||||
<table class='table table-form'>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-id'><?php echo $lang->idAB;?></th>
|
||||
<th class='c-branch<?php echo zget($visibleFields, $product->type, ' hidden')?>'> <?php echo $lang->product->branch;?></th>
|
||||
<th class='c-branch<?php echo zget($visibleFields, $product->type, ' hidden')?> branchBox'> <?php echo $lang->product->branch;?></th>
|
||||
<th class='c-module<?php echo zget($requiredFields, 'module', '', ' required');?>'> <?php echo $lang->bug->module;?></th>
|
||||
<?php if($config->systemMode == 'new'):?>
|
||||
<th class='c-project<?php echo zget($visibleFields, 'project', ' hidden') . zget($requiredFields, 'project', '', ' required');?>'><?php echo (isset($project->model) and $project->model == 'kanban') ? $lang->bug->kanban : $lang->bug->project;?></th>
|
||||
<th class='c-project<?php echo zget($visibleFields, 'project', ' hidden') . zget($requiredFields, 'project', '', ' required');?> projectBox'><?php echo (isset($project->model) and $project->model == 'kanban') ? $lang->bug->kanban : $lang->bug->project;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-execution<?php echo zget($visibleFields, 'execution', ' hidden') . zget($requiredFields, 'execution', '', ' required');?>'><?php echo (isset($project->model) and $project->model == 'kanban') ? $lang->bug->kanban : $lang->bug->execution;?></th>
|
||||
<th class='c-execution<?php echo zget($visibleFields, 'execution', ' hidden') . zget($requiredFields, 'execution', '', ' required');?> executionBox'><?php echo (isset($project->model) and $project->model == 'kanban') ? $lang->bug->kanban : $lang->bug->execution;?></th>
|
||||
<th class='c-build required'><?php echo $lang->bug->openedBuild;?></th>
|
||||
<th class='c-title required'><?php echo $lang->bug->title;?></th>
|
||||
<?php if(isset($executionType) and $executionType == 'kanban'):?>
|
||||
<th class='c-execution'><?php echo $lang->kanbancard->region;?></th>
|
||||
<th class='c-execution'><?php echo $lang->kanbancard->lane;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-date<?php echo zget($visibleFields, 'deadline', ' hidden') . zget($requiredFields, 'deadline', '', ' required');?>'><?php echo $lang->bug->deadline;?></th>
|
||||
<th class='c-steps<?php echo zget($visibleFields, 'steps', ' hidden') . zget($requiredFields, 'steps', '', ' required');?>'><?php echo $lang->bug->steps;?></th>
|
||||
<th class='c-type<?php echo zget($visibleFields, 'type', ' hidden') . zget($requiredFields, 'type', '', ' required');?>'><?php echo $lang->typeAB;?></th>
|
||||
<th class='c-pri<?php echo zget($visibleFields, 'pri', ' hidden') . zget($requiredFields, 'pri', '', ' required');?>'><?php echo $lang->bug->pri;?></th>
|
||||
<th class='c-severity<?php echo zget($visibleFields, 'severity', ' hidden') . zget($requiredFields, 'severity', '', ' required');?>'><?php echo $lang->bug->severity;?></th>
|
||||
<th class='c-os<?php echo zget($visibleFields, 'os', ' hidden') . zget($requiredFields, 'os', '', ' required');?>'><?php echo $lang->bug->os;?></th>
|
||||
<th class='c-browser<?php echo zget($visibleFields, 'browser', ' hidden') . zget($requiredFields, 'browser', '', ' required');?>'><?php echo $lang->bug->browser;?></th>
|
||||
<th class='c-keywords<?php echo zget($visibleFields, 'keywords', ' hidden') . zget($requiredFields, 'keywords', '', ' required');?>'><?php echo $lang->bug->keywords;?></th>
|
||||
<th class='c-date<?php echo zget($visibleFields, 'deadline', ' hidden') . zget($requiredFields, 'deadline', '', ' required');?> deadlineBox'><?php echo $lang->bug->deadline;?></th>
|
||||
<th class='c-steps<?php echo zget($visibleFields, 'steps', ' hidden') . zget($requiredFields, 'steps', '', ' required');?> stepsBox'><?php echo $lang->bug->steps;?></th>
|
||||
<th class='c-type<?php echo zget($visibleFields, 'type', ' hidden') . zget($requiredFields, 'type', '', ' required');?> typeBox'><?php echo $lang->typeAB;?></th>
|
||||
<th class='c-pri<?php echo zget($visibleFields, 'pri', ' hidden') . zget($requiredFields, 'pri', '', ' required');?> priBox'><?php echo $lang->bug->pri;?></th>
|
||||
<th class='c-severity<?php echo zget($visibleFields, 'severity', ' hidden') . zget($requiredFields, 'severity', '', ' required');?> severityBox'><?php echo $lang->bug->severity;?></th>
|
||||
<th class='c-os<?php echo zget($visibleFields, 'os', ' hidden') . zget($requiredFields, 'os', '', ' required');?> osBox'><?php echo $lang->bug->os;?></th>
|
||||
<th class='c-browser<?php echo zget($visibleFields, 'browser', ' hidden') . zget($requiredFields, 'browser', '', ' required');?> browserBox'><?php echo $lang->bug->browser;?></th>
|
||||
<th class='c-keywords<?php echo zget($visibleFields, 'keywords', ' hidden') . zget($requiredFields, 'keywords', '', ' required');?> keywordsBox'><?php echo $lang->bug->keywords;?></th>
|
||||
<?php
|
||||
$extendFields = $this->bug->getFlowExtendFields();
|
||||
foreach($extendFields as $extendField)
|
||||
@@ -81,6 +82,7 @@ js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
echo "<th class='c-extend $required'>{$extendField->name}</th>";
|
||||
}
|
||||
?>
|
||||
<th class='c-actions'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -106,13 +108,13 @@ js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
$browser = $i == 1 ? '' : 'ditto';
|
||||
?>
|
||||
<tr>
|
||||
<td class='text-center'><?php echo $i;?></td>
|
||||
<td class='<?php echo zget($visibleFields, $product->type, ' hidden')?>' style='overflow:visible'><?php echo html::select("branches[$i]", $branches, $branch, "class='form-control chosen' onchange='setBranchRelated(this.value, $productID, $i)'");?></td>
|
||||
<td class='text-left'><?php echo $i;?></td>
|
||||
<td class='<?php echo zget($visibleFields, $product->type, ' hidden')?> branchBox' style='overflow:visible'><?php echo html::select("branches[$i]", $branches, $branch, "class='form-control chosen' onchange='setBranchRelated(this.value, $productID, $i)'");?></td>
|
||||
<td><?php echo html::select("modules[$i]", $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></td>
|
||||
<?php if($config->systemMode == 'new'):?>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?>' style='overflow:visible'><?php echo html::select("projects[$i]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, $i)'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?> projectBox' style='overflow:visible'><?php echo html::select("projects[$i]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, $i)'");?></td>
|
||||
<?php endif;?>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?>' style='overflow:visible'><?php echo html::select("executions[$i]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, $i)'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?> executionBox' style='overflow:visible'><?php echo html::select("executions[$i]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, $i)'");?></td>
|
||||
<td id='buildBox<?php echo $i;?>'><?php echo html::select("openedBuilds[$i][]", $builds, 'trunk', "class='form-control chosen' multiple");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
@@ -132,18 +134,24 @@ js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
<td><?php echo html::select("regions[$i]", $regionPairs, $regionID, "class='form-control chosen'");?></td>
|
||||
<td><?php echo html::select("lanes[$i]", $lanePairs, $laneID, "class='form-control chosen'");?></td>
|
||||
<?php endif;?>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', 'hidden')?>'><?php echo html::input("deadlines[$i]", '', "class='form-control form-date'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?>'><?php echo html::textarea("stepses[$i]", '', "rows='1' class='form-control autosize'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?>' style='overflow:visible'> <?php echo html::select("types[$i]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?>' style='overflow:visible'> <?php echo html::select("pris[$i]", $lang->bug->priList, $pri, "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?>' style='overflow:visible'><?php echo html::select("severities[$i]", $lang->bug->severityList, '3', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?>' style='overflow:visible'> <?php echo html::select("oses[$i]", $lang->bug->osList, $os, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?>' style='overflow:visible'> <?php echo html::select("browsers[$i]", $lang->bug->browserList, $browser, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?>'><?php echo html::input("keywords[$i]", '', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', 'hidden')?> deadlineBox'><?php echo html::input("deadlines[$i]", '', "class='form-control form-date'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?> stepsBox'><?php echo html::textarea("stepses[$i]", '', "rows='1' class='form-control autosize'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?> typeBox' style='overflow:visible'> <?php echo html::select("types[$i]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?> priBox' style='overflow:visible'> <?php echo html::select("pris[$i]", $lang->bug->priList, $pri, "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?> severityBox' style='overflow:visible'><?php echo html::select("severities[$i]", $lang->bug->severityList, '3', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?> osBox' style='overflow:visible'> <?php echo html::select("oses[$i]", $lang->bug->osList, $os, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?> browserBox' style='overflow:visible'> <?php echo html::select("browsers[$i]", $lang->bug->browserList, $browser, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?> keywordsBox'><?php echo html::input("keywords[$i]", '', "class='form-control'");?></td>
|
||||
<?php
|
||||
$this->loadModel('flow');
|
||||
foreach($extendFields as $extendField) echo "<td" . (($extendField->control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->flow->getFieldControl($extendField, '', $extendField->field . "[$i]") . "</td>";
|
||||
?>
|
||||
<td class='c-actions text-left'>
|
||||
<a href='javascript:;' onclick='addItem(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<?php if($i != 1):?>
|
||||
<a href='javascript:;' onclick='deleteItem(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php $i++;?>
|
||||
<?php endforeach;?>
|
||||
@@ -161,12 +169,12 @@ js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
?>
|
||||
<tr>
|
||||
<td><?php echo $i;?></td>
|
||||
<td class='<?php echo zget($visibleFields, $product->type, ' hidden')?>' style='overflow:visible'><?php echo html::select("branches[$i]", $branches, $branch, "class='form-control chosen' onchange='setBranchRelated(this.value, $productID, $i)'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, $product->type, ' hidden')?> branchBox' style='overflow:visible'><?php echo html::select("branches[$i]", $branches, $branch, "class='form-control chosen' onchange='setBranchRelated(this.value, $productID, $i)'");?></td>
|
||||
<td><?php echo html::select("modules[$i]", $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></td>
|
||||
<?php if($config->systemMode == 'new'):?>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?>' style='overflow:visible'><?php echo html::select("projects[$i]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, $i)'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?> projectBox' style='overflow:visible'><?php echo html::select("projects[$i]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, $i)'");?></td>
|
||||
<?php endif;?>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?>' style='overflow:visible'><?php echo html::select("executions[$i]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, $i)'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?> executionBox' style='overflow:visible'><?php echo html::select("executions[$i]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, $i)'");?></td>
|
||||
<td id='buildBox<?php echo $i;?>'><?php echo html::select("openedBuilds[$i][]", $builds, '', "class='form-control chosen' multiple");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
@@ -186,24 +194,30 @@ js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
<td><?php echo html::select("regions[$i]", $regionPairs, $regionID, "class='form-control chosen' onchange='setLane(this.value, $i)'");?></td>
|
||||
<td><?php echo html::select("lanes[$i]", $lanePairs, $laneID, "class='form-control chosen'");?></td>
|
||||
<?php endif;?>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', 'hidden')?>'><?php echo html::input("deadlines[$i]", '', "class='form-control form-date'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?>'><?php echo html::textarea("stepses[$i]", '', "rows='1' class='form-control autosize'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?>' style='overflow:visible'> <?php echo html::select("types[$i]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?>' style='overflow:visible'> <?php echo html::select("pris[$i]", $lang->bug->priList, $pri, "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?>' style='overflow:visible'><?php echo html::select("severities[$i]", $lang->bug->severityList, '3', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?>' style='overflow:visible'> <?php echo html::select("oses[$i]", $lang->bug->osList, $os, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?>' style='overflow:visible'> <?php echo html::select("browsers[$i]", $lang->bug->browserList, $browser, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?>'><?php echo html::input("keywords[$i]", '', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', 'hidden')?> deadlineBox'><?php echo html::input("deadlines[$i]", '', "class='form-control form-date'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?> stepsBox'><?php echo html::textarea("stepses[$i]", '', "rows='1' class='form-control autosize'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?> typeBox' style='overflow:visible'> <?php echo html::select("types[$i]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?> priBox' style='overflow:visible'> <?php echo html::select("pris[$i]", $lang->bug->priList, $pri, "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?> severityBox' style='overflow:visible'><?php echo html::select("severities[$i]", $lang->bug->severityList, '3', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?> osBox' style='overflow:visible'> <?php echo html::select("oses[$i]", $lang->bug->osList, $os, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?> browserBox' style='overflow:visible'> <?php echo html::select("browsers[$i]", $lang->bug->browserList, $browser, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?> keywordsBox'><?php echo html::input("keywords[$i]", '', "class='form-control'");?></td>
|
||||
<?php
|
||||
$this->loadModel('flow');
|
||||
foreach($extendFields as $extendField) echo "<td" . (($extendField->control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->flow->getFieldControl($extendField, '', $extendField->field . "[$i]") . "</td>";
|
||||
?>
|
||||
<td class='c-actions text-left'>
|
||||
<a href='javascript:;' onclick='addItem(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<?php if($i != 1):?>
|
||||
<a href='javascript:;' onclick='deleteItem(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endfor;?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='<?php echo count($visibleFields) + 3?>' class='text-center form-actions'>
|
||||
<td colspan='<?php echo count($visibleFields) + 4?>' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::backButton();?>
|
||||
</td>
|
||||
@@ -213,16 +227,17 @@ js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<?php js::set('itemIndex', -- $i);?>
|
||||
<table class='template' id='trTemp'>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>%s</td>
|
||||
<td class='<?php echo zget($visibleFields, $product->type, ' hidden')?>' style='overflow:visible'><?php echo html::select("branches[%s]", $branches, $branch, "class='form-control chosen' onchange='setBranchRelated(this.value, $productID, \"%s\")'");?></td>
|
||||
<td><?php echo html::select("modules[%s]", $moduleOptionMenu, $moduleID, "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, $product->type, ' hidden')?> productBox' style='overflow:visible'><?php echo html::select("branches[%s]", $branches, $branch, "class='form-control chosen' onchange='setBranchRelated(this.value, $productID, \"%s\")'");?></td>
|
||||
<td><?php echo html::select("modules[%s]", $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></td>
|
||||
<?php if($config->systemMode == 'new'):?>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?>' style='overflow:visible'><?php echo html::select("projects[%s]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, \"%s\")'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?> projectBox' style='overflow:visible'><?php echo html::select("projects[%s]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, \"%s\")'");?></td>
|
||||
<?php endif;?>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?>' style='overflow:visible'><?php echo html::select("executions[%s]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, \"%s\")'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?> executionBox' style='overflow:visible'><?php echo html::select("executions[%s]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, \"%s\")'");?></td>
|
||||
<td id='buildBox%s'><?php echo html::select("openedBuilds[%s][]", $builds, '', "class='form-control chosen' multiple");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
@@ -238,21 +253,74 @@ js::set('requiredFields', $config->bug->create->requiredFields);
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', 'hidden')?>'><?php echo html::input("deadlines[%s]", '', "class='form-control form-date'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?>'><?php echo html::textarea("stepses[%s]", '', "rows='1' class='form-control autosize'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?>' style='overflow:visible'> <?php echo html::select("types[%s]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?>' style='overflow:visible'> <?php echo html::select("pris[%s]", $lang->bug->priList, '', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?>' style='overflow:visible'><?php echo html::select("severities[%s]", $lang->bug->severityList, '3', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?>' style='overflow:visible'> <?php echo html::select("oses[%s]", $lang->bug->osList, $os, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?>' style='overflow:visible'> <?php echo html::select("browsers[%s]", $lang->bug->browserList, $browser, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?>'><?php echo html::input("keywords[%s]", '', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', 'hidden')?> deadlineBox'><?php echo html::input("deadlines[%s]", '', "class='form-control form-date'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?> stepsBox'><?php echo html::textarea("stepses[%s]", '', "rows='1' class='form-control autosize'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?> typeBox' style='overflow:visible'> <?php echo html::select("types[%s]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?> priBox' style='overflow:visible'> <?php echo html::select("pris[%s]", $lang->bug->priList, $pri, "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?> severityBox' style='overflow:visible'><?php echo html::select("severities[%s]", $lang->bug->severityList, '3', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?> osBox' style='overflow:visible'> <?php echo html::select("oses[%s]", $lang->bug->osList, $os, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?> browserBox' style='overflow:visible'> <?php echo html::select("browsers[%s]", $lang->bug->browserList, $browser, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?> keywordsBox'><?php echo html::input("keywords[%s]", '', "class='form-control'");?></td>
|
||||
<?php
|
||||
$this->loadModel('flow');
|
||||
foreach($extendFields as $extendField) echo "<td" . (($extendField->control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->flow->getFieldControl($extendField, '', $extendField->field . "[%s]") . "</td>";
|
||||
?>
|
||||
<td class='c-actions text-left'>
|
||||
<a href='javascript:;' onclick='addItem(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<a href='javascript:;' onclick='deleteItem(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div>
|
||||
<?php $i = '%i%';?>
|
||||
<table class='hidden'>
|
||||
<tr id='addItem' class='hidden'>
|
||||
<td><?php echo $i;?></td>
|
||||
<td class='<?php echo zget($visibleFields, $product->type, ' hidden')?> branchBox' style='overflow:visible'><?php echo html::select("branches[$i]", $branches, $branch, "class='form-control chosen' onchange='setBranchRelated(this.value, $productID, $i)'");?></td>
|
||||
<td><?php echo html::select("modules[$i]", $moduleOptionMenu, $moduleID, "class='form-control chosen'");?></td>
|
||||
<?php if($config->systemMode == 'new'):?>
|
||||
<td class='<?php echo zget($visibleFields, 'project', ' hidden')?> projectBox' style='overflow:visible'><?php echo html::select("projects[$i]", $projects, $projectID, "class='form-control chosen' onchange = 'loadProductExecutionsByProject($productID, this.value, $i)'");?></td>
|
||||
<?php endif;?>
|
||||
<td class='<?php echo zget($visibleFields, 'execution', ' hidden')?> executionBox' style='overflow:visible'><?php echo html::select("executions[$i]", $executions, $executionID, "class='form-control chosen' onchange='loadExecutionBuilds($productID, this.value, $i)'");?></td>
|
||||
<td id='buildBox<?php echo $i;?>'><?php echo html::select("openedBuilds[$i][]", $builds, '', "class='form-control chosen' multiple");?></td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<div class="input-control has-icon-right">
|
||||
<?php echo html::input("title[$i]", '', "class='form-control title-import'");?>
|
||||
<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>
|
||||
<ul class="dropdown-menu clearfix">
|
||||
<li class="heading"><?php echo $lang->bug->colorTag;?><i class="icon icon-close"></i></li>
|
||||
</ul>
|
||||
<?php echo html::hidden("color[$i]", '', "data-provide='colorpicker' data-icon='color' data-wrapper='input-control-icon-right' data-update-color='#title\\[$i\\]'");?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<?php if(isset($executionType) and $executionType == 'kanban'):?>
|
||||
<td><?php echo html::select("regions[$i]", $regionPairs, $regionID, "class='form-control chosen' onchange='setLane(this.value, $i)'");?></td>
|
||||
<td><?php echo html::select("lanes[$i]", $lanePairs, $laneID, "class='form-control chosen'");?></td>
|
||||
<?php endif;?>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', 'hidden')?> deadlineBox'><?php echo html::input("deadlines[$i]", '', "class='form-control form-date'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?> stepsBox'><?php echo html::textarea("stepses[$i]", '', "rows='1' class='form-control autosize'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?> typeBox' style='overflow:visible'> <?php echo html::select("types[$i]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?> priBox' style='overflow:visible'> <?php echo html::select("pris[$i]", $lang->bug->priList, $pri, "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?> severityBox' style='overflow:visible'><?php echo html::select("severities[$i]", $lang->bug->severityList, '3', "class='form-control'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?> osBox' style='overflow:visible'> <?php echo html::select("oses[$i]", $lang->bug->osList, $os, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?> browserBox' style='overflow:visible'> <?php echo html::select("browsers[$i]", $lang->bug->browserList, $browser, "class='form-control chosen'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?> keywordsBox'><?php echo html::input("keywords[$i]", '', "class='form-control'");?></td>
|
||||
<?php
|
||||
$this->loadModel('flow');
|
||||
foreach($extendFields as $extendField) echo "<td" . (($extendField->control == 'select' or $extendField->control == 'multi-select') ? " style='overflow:visible'" : '') . ">" . $this->flow->getFieldControl($extendField, '', $extendField->field . "[$i]") . "</td>";
|
||||
?>
|
||||
<td class='c-actions text-left'>
|
||||
<a href='javascript:;' onclick='addItem(this)' class='btn btn-link'><i class='icon-plus'></i></a>
|
||||
<a href='javascript:;' onclick='deleteItem(this)' class='btn btn-link'><i class='icon icon-close'></i></a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<?php js::set('branch', $branch)?>
|
||||
<?php if(isonlybody()):?>
|
||||
<style>
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
}
|
||||
?>
|
||||
<td class='<?php echo zget($visibleFields, 'assignedTo', ' hidden')?>' style='overflow:visible'><?php echo html::select("assignedTos[$bugID]", $assignedToList, $bug->assignedTo, "class='form-control picker-select' data-drop-width='135px'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', ' hidden')?>' style='overflow:visible'><?php echo html::input("deadlines[$bugID]", $bug->deadline, "class='form-control form-date'");?></td>
|
||||
<td class='<?php echo zget($visibleFields, 'deadline', ' hidden')?>' style='overflow:visible'><?php echo html::input("deadlines[$bugID]", helper::isZeroDate($bug->deadline) ? '' : substr($bug->deadline, 5, 11), "class='form-control form-date'");?></td>
|
||||
<td <?php echo zget($visibleFields, 'os', "class='hidden'")?>><?php echo html::select("os[$bugID]", $osList, $bug->os, 'class=form-control');?></td>
|
||||
<td <?php echo zget($visibleFields, 'browser', "class='hidden'")?>><?php echo html::select("browsers[$bugID]", $browserList, $bug->browser, 'class=form-control');?></td>
|
||||
<td <?php echo zget($visibleFields, 'keywords', "class='hidden'")?>><?php echo html::input("keywords[$bugID]", $bug->keywords, 'class=form-control');?></td>
|
||||
|
||||
@@ -18,7 +18,7 @@ js::set('holders', $lang->bug->placeholder);
|
||||
js::set('page', 'create');
|
||||
js::set('createRelease', $lang->release->create);
|
||||
js::set('createBuild', $lang->build->create);
|
||||
js::set('refresh', $lang->refresh);
|
||||
js::set('refresh', $lang->refreshIcon);
|
||||
js::set('flow', $config->global->flow);
|
||||
js::set('stepsRequired', $stepsRequired);
|
||||
js::set('stepsNotEmpty', $lang->bug->stepsNotEmpty);
|
||||
@@ -69,7 +69,7 @@ if($this->app->tab == 'project') js::set('objectID', $projectID);
|
||||
echo "<span class='input-group-addon'>";
|
||||
echo html::a($this->createLink('tree', 'browse', "rootID=$productID&view=bug¤tModuleID=0&branch=$branch", '', true), $lang->tree->manage, '', "class='text-primary' data-toggle='modal' data-type='iframe' data-width='95%'");
|
||||
echo ' ';
|
||||
echo html::a("javascript:void(0)", $lang->refresh, '', "class='refresh' onclick='loadProductModules($productID)'");
|
||||
echo html::a("javascript:void(0)", $lang->refreshIcon, '', "class='refresh' onclick='loadProductModules($productID)'");
|
||||
echo '</span>';
|
||||
}
|
||||
?>
|
||||
@@ -312,7 +312,7 @@ if($this->app->tab == 'project') js::set('objectID', $projectID);
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<?php if($showStory):?>
|
||||
<span class='input-group-addon'><?php echo $lang->bug->task?></span>
|
||||
<span class='input-group-addon task'><?php echo $lang->bug->task?></span>
|
||||
<?php endif;?>
|
||||
<?php echo html::select('task', '', $taskID, "class='form-control chosen'") . html::hidden('oldTaskID', $taskID);?>
|
||||
</div>
|
||||
|
||||
@@ -111,7 +111,7 @@ if($this->app->tab == 'project') js::set('objectID', $bug->project);
|
||||
echo "<span class='input-group-addon'>";
|
||||
echo html::a($this->createLink('tree', 'browse', "rootID=$productID&view=bug¤tModuleID=0&branch=$bug->branch", '', true), $lang->tree->manage, '', "class='text-primary' data-toggle='modal' data-type='iframe' data-width='95%'");
|
||||
echo ' ';
|
||||
echo html::a("javascript:void(0)", $lang->refresh, '', "class='refresh' onclick='loadProductModules($productID)'");
|
||||
echo html::a("javascript:void(0)", $lang->refreshIcon, '', "class='refresh' onclick='loadProductModules($productID)'");
|
||||
echo '</span>';
|
||||
}
|
||||
?>
|
||||
@@ -160,7 +160,7 @@ if($this->app->tab == 'project') js::set('objectID', $bug->project);
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->deadline;?></th>
|
||||
<td><?php echo html::input('deadline', $bug->deadline, "class='form-control form-date'");?></td>
|
||||
<td><?php echo html::input('deadline', helper::isZeroDate($bug->deadline) ? '' : $bug->deadline, "class='form-control form-date'");?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->feedbackBy;?></th>
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
<th><?php echo $lang->bug->deadline;?></th>
|
||||
<td>
|
||||
<?php
|
||||
if($bug->deadline) echo $bug->deadline;
|
||||
if($bug->deadline) echo helper::isZeroDate($bug->deadline) ? '' : substr($bug->deadline, 5, 11);
|
||||
if(isset($bug->delay)) printf($lang->bug->delayWarning, $bug->delay);
|
||||
?>
|
||||
</td>
|
||||
|
||||
@@ -43,7 +43,7 @@ class build extends control
|
||||
|
||||
if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $buildID));
|
||||
if(isonlybody()) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'callback' => "parent.loadExecutionBuilds($executionID, $buildID)")); // Code for task #5126.
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('build', 'view', "buildID=$buildID")));
|
||||
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('build', 'view', "buildID=$buildID") . "#app={$this->app->tab}"));
|
||||
}
|
||||
|
||||
/* Set menu. */
|
||||
|
||||
@@ -549,7 +549,7 @@ class buildModel extends model
|
||||
|
||||
if(common::hasPriv('build', 'linkstory') and common::canBeChanged('build', $build)) $menu .= $this->buildMenu('build', 'view', "{$params}&type=story&link=true", $build, $type, 'link', '', '', '', "data-app={$tab}", $this->lang->build->linkStory);
|
||||
|
||||
$menu .= $this->buildMenu('testtask', 'create', "product=$build->product&execution={$executionID}&build=$build->id", $build, $type, 'bullhorn', '', '', '', $testtaskApp);
|
||||
$menu .= $this->buildMenu('testtask', 'create', "product=$build->product&execution={$executionID}&build=$build->id&projectID=$build->project", $build, $type, 'bullhorn', '', '', '', $testtaskApp);
|
||||
|
||||
if($tab == 'execution' and !empty($execution->type) and $execution->type != 'kanban') $menu .= $this->buildMenu('execution', 'bug', "execution={$extraParams['executionID']}&productID={$extraParams['productID']}&orderBy=status&build=$build->id", $build, $type, '', '', '', '', $this->lang->execution->viewBug);
|
||||
if($tab == 'project' or empty($execution->type) or $execution->type == 'kanban') $menu .= $this->buildMenu('build', 'view', "{$params}&type=generatedBug", $build, $type, 'bug', '', '', '', "data-app='$tab'", $this->lang->project->bug);
|
||||
|
||||
@@ -25,6 +25,8 @@ class ciModel extends model
|
||||
session_write_close();
|
||||
}
|
||||
common::setMenuVars('devops', $this->session->repoID);
|
||||
|
||||
$this->lang->switcherMenu = $this->loadModel('repo')->getSwitcher($this->session->repoID);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -281,6 +283,7 @@ class ciModel extends model
|
||||
}
|
||||
|
||||
$this->dao->update(TABLE_MR)->data($newMR)->where('id')->eq($relateMR->id)->exec();
|
||||
$this->mr->linkObjects($relateMR);
|
||||
}
|
||||
elseif($status != 'success')
|
||||
{
|
||||
|
||||
@@ -80,6 +80,7 @@ $lang->misc = new stdclass();
|
||||
$lang->acl = new stdclass();
|
||||
$lang->curd = new stdclass();
|
||||
$lang->sonarqube = new stdclass();
|
||||
$lang->app = new stdclass();
|
||||
|
||||
$lang->projectbuild = new stdclass();
|
||||
$lang->projectrelease = new stdclass();
|
||||
@@ -174,6 +175,8 @@ $lang->createIcons['program'] = 'program';
|
||||
$lang->createIcons['kanbanspace'] = 'cube';
|
||||
$lang->createIcons['kanban'] = 'kanban';
|
||||
|
||||
$lang->refreshIcon = "<i class='icon icon-refresh'></i>";
|
||||
|
||||
$lang->noMenuModule = array('report', 'my', 'todo', 'effort', 'program', 'product', 'execution', 'task', 'build', 'productplan', 'project', 'projectrelease', 'projectstory', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'pssp', 'sms', 'message', 'webhook', 'search', 'score', 'stage', 'entry', 'jenkins', 'gitlab');
|
||||
|
||||
if(isset($_SESSION['tutorialMode']) and $_SESSION['tutorialMode'] and !defined('TUTORIAL')) define('TUTORIAL', true);
|
||||
|
||||
@@ -196,6 +196,8 @@ $lang->execution->list = "{$lang->executionCommon} List";
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->backup->common = 'Backup';
|
||||
$lang->action->trash = 'Recycle';
|
||||
$lang->app->common = 'APP';
|
||||
$lang->app->serverLink = 'Server Link';
|
||||
|
||||
$lang->personnel->common = 'Member';
|
||||
$lang->personnel->invest = 'Investment';
|
||||
@@ -282,6 +284,7 @@ $lang->devops->mr = 'Merge Request';
|
||||
$lang->devops->repo = 'Repo';
|
||||
$lang->devops->rules = 'Rule';
|
||||
$lang->devops->settings = 'Setting Merge Request';
|
||||
$lang->devops->set = 'Set';
|
||||
|
||||
$lang->admin->system = 'System';
|
||||
$lang->admin->entry = 'Application';
|
||||
@@ -353,7 +356,7 @@ $lang->setLang = 'Language Setting';
|
||||
|
||||
/* Theme style. */
|
||||
$lang->theme = 'Theme';
|
||||
$lang->themes['default'] = 'ZenTao Blau (Standard)';
|
||||
$lang->themes['default'] = 'Standard';
|
||||
$lang->themes['blue'] = 'Young Blue';
|
||||
$lang->themes['green'] = 'Grün';
|
||||
$lang->themes['red'] = 'Rot';
|
||||
|
||||
@@ -196,6 +196,8 @@ $lang->execution->list = "{$lang->executionCommon} List";
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->backup->common = 'Backup';
|
||||
$lang->action->trash = 'Recycle';
|
||||
$lang->app->common = 'APP';
|
||||
$lang->app->serverLink = 'Server Link';
|
||||
|
||||
$lang->personnel->common = 'Member';
|
||||
$lang->personnel->invest = 'Investment';
|
||||
@@ -282,6 +284,7 @@ $lang->devops->mr = 'Merge Request';
|
||||
$lang->devops->repo = 'Repo';
|
||||
$lang->devops->rules = 'Rule';
|
||||
$lang->devops->settings = 'Setting Merge Request';
|
||||
$lang->devops->set = 'Set';
|
||||
|
||||
$lang->admin->system = 'System';
|
||||
$lang->admin->entry = 'Application';
|
||||
|
||||
@@ -196,6 +196,8 @@ $lang->execution->list = "{$lang->executionCommon} List";
|
||||
$lang->kanban->common = 'Kanban';
|
||||
$lang->backup->common = 'Backup';
|
||||
$lang->action->trash = 'Recycle';
|
||||
$lang->app->common = 'APP';
|
||||
$lang->app->serverLink = 'Server Link';
|
||||
|
||||
$lang->personnel->common = 'Member';
|
||||
$lang->personnel->invest = 'Investment';
|
||||
@@ -282,6 +284,7 @@ $lang->devops->mr = 'Merge Request';
|
||||
$lang->devops->repo = 'Repo';
|
||||
$lang->devops->rules = 'Rule';
|
||||
$lang->devops->settings = 'Setting Merge Request';
|
||||
$lang->devops->set = 'Set';
|
||||
|
||||
$lang->admin->system = 'System';
|
||||
$lang->admin->entry = 'Application';
|
||||
|
||||
+33
-28
@@ -146,7 +146,7 @@ $lang->program->menuOrder[20] = 'stakeholder';
|
||||
$lang->program->menu->personnel['subMenu'] = new stdClass();
|
||||
$lang->program->menu->personnel['subMenu']->invest = array('link' => "{$lang->personnel->invest}|personnel|invest|programID=%s");
|
||||
$lang->program->menu->personnel['subMenu']->accessible = array('link' => "{$lang->personnel->accessible}|personnel|accessible|programID=%s");
|
||||
$lang->program->menu->personnel['subMenu']->whitelist = array('link' => "{$lang->whitelist}|personnel|whitelist|objectID=%s&module=program", 'alias' => 'addwhitelist');
|
||||
$lang->program->menu->personnel['subMenu']->whitelist = array('link' => "{$lang->whitelist}|personnel|whitelist|objectID=%s", 'alias' => 'addwhitelist');
|
||||
|
||||
/* Product menu. */
|
||||
$lang->product->homeMenu = new stdclass();
|
||||
@@ -323,17 +323,18 @@ if($config->systemMode == 'new') $lang->execution->menu->more = array('link' =>
|
||||
/* Execution menu order. */
|
||||
$lang->execution->menuOrder[5] = 'task';
|
||||
$lang->execution->menuOrder[10] = 'kanban';
|
||||
$lang->execution->menuOrder[15] = 'burn';
|
||||
$lang->execution->menuOrder[20] = 'view';
|
||||
$lang->execution->menuOrder[25] = 'story';
|
||||
$lang->execution->menuOrder[30] = 'qa';
|
||||
$lang->execution->menuOrder[35] = 'repo';
|
||||
$lang->execution->menuOrder[40] = 'devops';
|
||||
$lang->execution->menuOrder[45] = 'doc';
|
||||
$lang->execution->menuOrder[50] = 'build';
|
||||
$lang->execution->menuOrder[55] = 'release';
|
||||
$lang->execution->menuOrder[60] = 'action';
|
||||
$lang->execution->menuOrder[65] = 'settings';
|
||||
$lang->execution->menuOrder[15] = 'CFD';
|
||||
$lang->execution->menuOrder[20] = 'burn';
|
||||
$lang->execution->menuOrder[25] = 'view';
|
||||
$lang->execution->menuOrder[30] = 'story';
|
||||
$lang->execution->menuOrder[35] = 'qa';
|
||||
$lang->execution->menuOrder[40] = 'repo';
|
||||
$lang->execution->menuOrder[45] = 'devops';
|
||||
$lang->execution->menuOrder[50] = 'doc';
|
||||
$lang->execution->menuOrder[55] = 'build';
|
||||
$lang->execution->menuOrder[60] = 'release';
|
||||
$lang->execution->menuOrder[65] = 'action';
|
||||
$lang->execution->menuOrder[70] = 'settings';
|
||||
|
||||
$lang->execution->menu->doc['subMenu'] = new stdclass();
|
||||
|
||||
@@ -393,24 +394,27 @@ $lang->qa->menuOrder[45] = 'automation';
|
||||
$lang->qa->dividerMenu = ',bug,testtask,caselib,';
|
||||
|
||||
/* DevOps menu. */
|
||||
$lang->devops->menu = new stdclass();
|
||||
$lang->devops->menu->code = array('link' => "{$lang->repo->common}|repo|browse|repoID=%s", 'alias' => 'diff,view,revision,log,blame,showsynccommit');
|
||||
$lang->devops->menu->compile = array('link' => "{$lang->devops->compile}|job|browse", 'subModule' => 'compile,job');
|
||||
$lang->devops->menu->mr = array('link' => "{$lang->devops->mr}|mr|browse|repoID=%s");
|
||||
$lang->devops->menu->gitlab = array('link' => "GitLab|gitlab|browse", 'alias' => 'create,edit');
|
||||
$lang->devops->menu->sonarqube = array('link' => "SonarQube|sonarqube|browse");
|
||||
$lang->devops->menu->jenkins = array('link' => "Jenkins|jenkins|browse", 'alias' => 'create,edit');
|
||||
$lang->devops->menu->maintain = array('link' => "{$lang->devops->repo}|repo|maintain", 'alias' => 'create,edit');
|
||||
$lang->devops->menu->rules = array('link' => "{$lang->devops->rules}|repo|setrules");
|
||||
$lang->devops->menu = new stdclass();
|
||||
$lang->devops->menu->code = array('link' => "{$lang->repo->common}|repo|browse|repoID=%s", 'alias' => 'diff,view,revision,log,blame,showsynccommit');
|
||||
$lang->devops->menu->mr = array('link' => "{$lang->devops->mr}|mr|browse|repoID=%s");
|
||||
$lang->devops->menu->compile = array('link' => "{$lang->devops->compile}|job|browse|repoID=%s", 'subModule' => 'compile,job');
|
||||
$lang->devops->menu->app = array('link' => "{$lang->app->common}|app|serverlink|%s");
|
||||
$lang->devops->menu->set = array('link' => "{$lang->devops->set}|repo|maintain", 'subModule' => 'gitlab,jenkins,sonarqube', 'alias' => 'setrules,create,edit');
|
||||
|
||||
$lang->devops->menuOrder[5] = 'code';
|
||||
$lang->devops->menuOrder[10] = 'compile';
|
||||
$lang->devops->menuOrder[15] = 'mr';
|
||||
$lang->devops->menuOrder[20] = 'gitlab';
|
||||
$lang->devops->menuOrder[25] = 'sonarqube';
|
||||
$lang->devops->menuOrder[30] = 'jenkins';
|
||||
$lang->devops->menuOrder[35] = 'maintain';
|
||||
$lang->devops->menuOrder[40] = 'rules';
|
||||
$lang->devops->menuOrder[10] = 'mr';
|
||||
$lang->devops->menuOrder[15] = 'compile';
|
||||
$lang->devops->menuOrder[20] = 'app';
|
||||
$lang->devops->menuOrder[25] = 'set';
|
||||
|
||||
$lang->devops->dividerMenu = ',set,';
|
||||
|
||||
$lang->devops->menu->set['subMenu'] = new stdclass();
|
||||
$lang->devops->menu->set['subMenu']->repo = array('link' => "{$lang->devops->repo}|repo|maintain", 'alias' => 'create,edit');
|
||||
$lang->devops->menu->set['subMenu']->gitlab = array('link' => 'GitLab|gitlab|browse', 'subModule' => 'gitlab');
|
||||
$lang->devops->menu->set['subMenu']->jenkins = array('link' => 'Jenkins|jenkins|browse', 'subModule' => '');
|
||||
$lang->devops->menu->set['subMenu']->sonarqube = array('link' => 'SonarQube|sonarqube|browse', 'subModule' => 'sonarqube');
|
||||
$lang->devops->menu->set['subMenu']->setrules = array('link' => "{$lang->devops->rules}|repo|setrules");
|
||||
|
||||
/* Kanban menu. */
|
||||
$lang->kanban->menu = new stdclass();
|
||||
@@ -647,6 +651,7 @@ $lang->navGroup->compile = 'devops';
|
||||
$lang->navGroup->ci = 'devops';
|
||||
$lang->navGroup->svn = 'devops';
|
||||
$lang->navGroup->git = 'devops';
|
||||
$lang->navGroup->app = 'devops';
|
||||
|
||||
$lang->navGroup->company = 'system';
|
||||
|
||||
|
||||
@@ -124,7 +124,10 @@ $lang->typeAB = 'Loại';
|
||||
$lang->nameAB = 'Name';
|
||||
|
||||
$lang->common = new stdclass();
|
||||
$lang->common->common = 'Module chung';
|
||||
$lang->common->common = 'Module chung';
|
||||
$lang->devops->common = 'DevOps';
|
||||
$lang->app->common = 'APP';
|
||||
$lang->app->serverLink = 'Server Link';
|
||||
|
||||
global $config;
|
||||
list($programModule, $programMethod) = explode('-', $config->programLink);
|
||||
@@ -229,6 +232,13 @@ $lang->system->menu->calendar = array('link' => 'Calendar|my|calendar|', 'subMod
|
||||
$lang->measurement = new stdclass();
|
||||
$lang->measurement->menu = new stdclass();
|
||||
|
||||
$lang->devops->compile = 'Compile';
|
||||
$lang->devops->mr = 'Merge Request';
|
||||
$lang->devops->repo = 'Repo';
|
||||
$lang->devops->rules = 'Rule';
|
||||
$lang->devops->settings = 'Setting Merge Request';
|
||||
$lang->devops->set = 'Set';
|
||||
|
||||
$lang->searchTips = '';
|
||||
$lang->searchAB = 'Tìm ki?m';
|
||||
|
||||
|
||||
@@ -196,6 +196,8 @@ $lang->execution->list = "{$lang->executionCommon}列表";
|
||||
$lang->kanban->common = '看板';
|
||||
$lang->backup->common = '备份';
|
||||
$lang->action->trash = '回收站';
|
||||
$lang->app->common = '应用';
|
||||
$lang->app->serverLink = '服务器链接';
|
||||
|
||||
$lang->personnel->common = '人员';
|
||||
$lang->personnel->invest = '投入人员';
|
||||
@@ -279,9 +281,10 @@ $lang->testcase->caselib = '用例库';
|
||||
|
||||
$lang->devops->compile = '构建';
|
||||
$lang->devops->mr = '合并请求';
|
||||
$lang->devops->repo = '版本库';
|
||||
$lang->devops->repo = '代码库';
|
||||
$lang->devops->rules = '指令';
|
||||
$lang->devops->settings = '合并请求设置';
|
||||
$lang->devops->set = '设置';
|
||||
|
||||
$lang->admin->system = '系统';
|
||||
$lang->admin->entry = '应用';
|
||||
|
||||
@@ -181,6 +181,8 @@ $lang->stage->common = '階段';
|
||||
$lang->stage->list = '階段列表';
|
||||
$lang->execution->list = "{$lang->executionCommon}列表";
|
||||
$lang->kanban->common = '看板';
|
||||
$lang->app->common = '應用';
|
||||
$lang->app->serverLink = '服務器鏈接';
|
||||
|
||||
$lang->personnel->common = '人員';
|
||||
$lang->personnel->invest = '投入人員';
|
||||
|
||||
+63
-5
@@ -28,6 +28,7 @@ class commonModel extends model
|
||||
$this->sendHeader();
|
||||
$this->setCompany();
|
||||
$this->setUser();
|
||||
$this->setApproval();
|
||||
$this->loadConfigFromDB();
|
||||
$this->app->setTimezone();
|
||||
$this->loadCustomFromDB();
|
||||
@@ -284,6 +285,18 @@ class commonModel extends model
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set approval config.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setApproval()
|
||||
{
|
||||
$this->config->openedApproval = false;
|
||||
if($this->config->edition == 'max' && $this->config->vision == 'rnd') $this->config->openedApproval = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load configs from database and save it to config->system and config->personal.
|
||||
*
|
||||
@@ -1091,6 +1104,10 @@ class commonModel extends model
|
||||
$executionID = $menuItem->link['vars'];
|
||||
commonModel::buildMoreButton($executionID);
|
||||
}
|
||||
elseif($menuItem->link['module'] == 'app' and $menuItem->link['method'] == 'serverlink')
|
||||
{
|
||||
commonModel::buildAppButton();
|
||||
}
|
||||
else
|
||||
{
|
||||
if($menuItem->link)
|
||||
@@ -1667,19 +1684,19 @@ EOD;
|
||||
}
|
||||
else
|
||||
{
|
||||
return html::a($link, "<i class='$class'></i>", $target, "class='btn btn-link $extraClass' title='$title' $misc", false);
|
||||
return html::a($link, "<i class='$class'></i>", $target, "class='btn btn-link $extraClass' title=\"$title\" $misc", false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return html::a($link, "<i class='$class'></i>", $target, "class='btn $extraClass' title='$title' $misc", false) . "\n";
|
||||
return html::a($link, "<i class='$class'></i>", $target, "class='btn $extraClass' title=\"$title\" $misc", false) . "\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if($type == 'list')
|
||||
{
|
||||
return "<button type='button' class='disabled btn $extraClass'><i class='$class' title='$title' $misc></i></button>\n";
|
||||
return "<button type='button' class='disabled btn $extraClass'><i class='$class' title=\"$title\" $misc></i></button>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1733,6 +1750,45 @@ EOD;
|
||||
echo $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build devops app button.
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function buildAppButton()
|
||||
{
|
||||
if(defined('TUTORIAL')) return;
|
||||
global $app, $config, $lang;
|
||||
|
||||
$pipelinePairs = array();
|
||||
$condition = '';
|
||||
if(!$app->user->admin)
|
||||
{
|
||||
$types = '';
|
||||
foreach($config->pipelineTypeList as $pipelineType)
|
||||
{
|
||||
if(commonModel::hasPriv($pipelineType, 'browse')) $types .= "'$pipelineType',";
|
||||
}
|
||||
if(empty($types)) return;
|
||||
$condition .= ' AND `type` in (' . trim($types, ',') . ')';
|
||||
}
|
||||
$pipelineList = $app->dbh->query("SELECT type,name,url FROM " . TABLE_PIPELINE . " WHERE `deleted` = '0' $condition order by type")->fetchAll();
|
||||
if(empty($pipelineList)) return;
|
||||
|
||||
$html = "<li class='dropdown dropdown-hover'><a href='javascript:;' data-toggle='dropdown'>{$lang->app->common}<span class='caret'></span></a>";
|
||||
$html .= "<ul class='dropdown-menu'>";
|
||||
|
||||
foreach($pipelineList as $pipeline)
|
||||
{
|
||||
$html .= "<li style='max-width: 300px;'>" . html::a($pipeline->url, "[{$pipeline->type}] {$pipeline->name}", '', "title='{$pipeline->name}' class='text-ellipsis' style='padding: 2px 10px' target='_blank'") . '</li>';
|
||||
}
|
||||
$html .= "</ul></li>\n";
|
||||
|
||||
echo $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Print link icon.
|
||||
*
|
||||
@@ -1796,18 +1852,20 @@ EOD;
|
||||
* Print back link
|
||||
*
|
||||
* @param string $backLink
|
||||
* @param string $class
|
||||
* @param string $misc
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
static public function printBack($backLink, $class = '')
|
||||
static public function printBack($backLink, $class = '', $misc = '')
|
||||
{
|
||||
global $lang, $app;
|
||||
if(isonlybody()) return false;
|
||||
|
||||
if(empty($class)) $class = 'btn';
|
||||
$title = $lang->goback . $lang->backShortcutKey;
|
||||
echo html::a($backLink, '<i class="icon-goback icon-back"></i> ' . $lang->goback, '', "id='back' class='{$class}' title={$title} data-app='{$app->tab}'");
|
||||
echo html::a($backLink, '<i class="icon-goback icon-back"></i> ' . $lang->goback, '', "id='back' class='{$class}' title={$title} $misc");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
<ol class='histories-list'>
|
||||
<?php $i = 1; ?>
|
||||
<?php foreach($actions as $action):?>
|
||||
<?php $canEditComment = ((!isset($canBeChanged) or !empty($canBeChanged)) and end($actions) == $action and trim($action->comment) != '' and $this->methodName == 'view' and $action->actor == $this->app->user->account and common::hasPriv('action', 'editComment'));?>
|
||||
<?php $canEditComment = ((!isset($canBeChanged) or !empty($canBeChanged)) and end($actions) == $action and trim($action->comment) != '' and strpos(',view,objectlibs,viewcard,', ",$this->methodName,") !== false and $action->actor == $this->app->user->account and common::hasPriv('action', 'editComment'));?>
|
||||
<li value='<?php echo $i ++;?>'>
|
||||
<?php
|
||||
$action->actor = zget($users, $action->actor);
|
||||
|
||||
@@ -16,10 +16,12 @@
|
||||
#formSettingForm .checkboxes {padding: 10px 3px;}
|
||||
#formSettingForm .checkbox-primary {width: 50%; float: left; margin: 3px 0;}
|
||||
#formSetting .btn {margin-right: 8px;}
|
||||
[lang^='de'] #formSetting {min-width: 360px;}
|
||||
[lang^='fr'] #formSetting {min-width: 320px;}
|
||||
</style>
|
||||
<button type="button" title="<?php echo $lang->customField;?>" class="btn btn-link" id="customField" data-toggle="dropdown"><i class="icon icon-cog"></i></button>
|
||||
<div class="dropdown-menu pull-right" id="formSetting">
|
||||
<form class='with-padding load-indicator' id='formSettingForm' method='post' target='hiddenwin' action='<?php echo $customLink?>'>
|
||||
<form class='with-padding load-indicator not-watch' id='formSettingForm' method='post' target='hiddenwin' action='<?php echo $customLink?>'>
|
||||
<div><?php echo $lang->customField;?></div>
|
||||
<div class="clearfix checkboxes">
|
||||
<?php echo html::checkbox('fields', $customFields, $showFields);?>
|
||||
@@ -35,6 +37,16 @@
|
||||
var $formSetting = $('#formSetting');
|
||||
$formSetting.on('click', '.close-dropdown', function()
|
||||
{
|
||||
if(showFields != undefined)
|
||||
{
|
||||
var fieldList = ',' + showFields + ',';
|
||||
$('#formSettingForm > .checkboxes > .checkbox-primary > input:visible').each(function()
|
||||
{
|
||||
var field = ',' + $(this).val() + ',';
|
||||
$(this).prop('checked', fieldList.indexOf(field) >= 0);
|
||||
});
|
||||
}
|
||||
|
||||
$formSetting.parent().removeClass('open');
|
||||
}).on('click', function(e){e.stopPropagation()});
|
||||
</script>
|
||||
|
||||
@@ -25,7 +25,15 @@ $(function()
|
||||
{
|
||||
if(!rowTpl) rowTpl = $('#trTemp tbody').html();
|
||||
if(!$formTbody) $formTbody = $form.find('table > tbody');
|
||||
|
||||
var lastIndex = parseInt($formTbody.find('tr:last > td:first').text());
|
||||
var moduleArr = ['task', 'story', 'bug', 'testcase'];
|
||||
if($.inArray(config.currentModule, moduleArr) >= 0 && config.currentMethod == 'batchcreate')
|
||||
{
|
||||
lastIndex = itemIndex;
|
||||
itemIndex ++;
|
||||
}
|
||||
|
||||
var $newRow = $(rowTpl.replace(/%s/g, lastIndex + 1));
|
||||
$newRow.find('.chosen').chosen();
|
||||
$newRow.find('.iframe').modalTrigger({iframe:true});
|
||||
|
||||
@@ -22,12 +22,13 @@ class compile extends control
|
||||
public function __construct($moduleName = '', $methodName = '')
|
||||
{
|
||||
parent::__construct($moduleName, $methodName);
|
||||
$this->loadModel('ci')->setMenu();
|
||||
if($methodName != 'browse') $this->loadModel('ci')->setMenu();
|
||||
}
|
||||
|
||||
/**
|
||||
* Browse jenkins build.
|
||||
*
|
||||
* @param int $repoID
|
||||
* @param int $jobID
|
||||
* @param string $orderBy
|
||||
* @param int $recTotal
|
||||
@@ -36,8 +37,17 @@ class compile extends control
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function browse($jobID = 0, $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
||||
public function browse($repoID = 0, $jobID = 0, $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
|
||||
{
|
||||
if($jobID)
|
||||
{
|
||||
$job = $this->loadModel('job')->getById($jobID);
|
||||
$repoID = $job->repo;
|
||||
|
||||
$this->view->job = $job;
|
||||
}
|
||||
$this->loadModel('ci')->setMenu($repoID);
|
||||
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
$pager = new pager($recTotal, $recPerPage, $pageID);
|
||||
|
||||
@@ -45,10 +55,9 @@ class compile extends control
|
||||
$this->view->position[] = html::a($this->createLink('job', 'browse'), $this->lang->ci->job);
|
||||
$this->view->position[] = $this->lang->compile->browse;
|
||||
|
||||
$this->loadModel('job');
|
||||
if($jobID) $this->view->job = $this->job->getById($jobID);
|
||||
$this->view->repoID = $repoID;
|
||||
$this->view->jobID = $jobID;
|
||||
$this->view->buildList = $this->compile->getList($jobID, $orderBy, $pager);
|
||||
$this->view->buildList = $this->compile->getList($repoID, $jobID, $orderBy, $pager);
|
||||
$this->view->orderBy = $orderBy;
|
||||
$this->view->pager = $pager;
|
||||
$this->display();
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user