Merge branch '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
|
||||
|
||||
@@ -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';
|
||||
|
||||
+17
-9
@@ -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,
|
||||
@@ -705,7 +705,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 +1397,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 '',
|
||||
@@ -6140,6 +6142,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 +6169,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 +6202,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 +6222,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 +6254,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 +6264,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 +8534,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 +8598,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 +8643,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 +13493,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';
|
||||
?>
|
||||
@@ -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';
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
<script>
|
||||
$("#createCaseActionMenu a[href=#toBug]").remove();
|
||||
</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';
|
||||
|
||||
@@ -37,7 +37,7 @@ $('#toStoryLink').click(function()
|
||||
$('#toStoryButtonByProject').click(function()
|
||||
{
|
||||
var onlybody = config.onlybody == 'yes';
|
||||
var projectID = $('#projectToStory').val();
|
||||
var projectID = $('#projectToStory').val();
|
||||
var link = createLink('story', 'create', 'productID=0&branch=0&moduleID=0&storyID=0&projectID=' + projectID + '&bugID=0&planID=0&todoID=' + todoID, config.defaultView, onlybody);
|
||||
|
||||
if(!onlybody) window.parent.$.apps.open(link, 'project');
|
||||
@@ -75,4 +75,4 @@ function createProject()
|
||||
config.onlybody = onlybody;
|
||||
parent.location.href = link;
|
||||
}
|
||||
</script>
|
||||
</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,4 +1,3 @@
|
||||
<script>
|
||||
$('#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 +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/workflowdatasource/ext/view/' . basename(__FILE__);?>
|
||||
@@ -3,4 +3,3 @@ $('#submit').after('<input type="hidden" id="vision" name="vision" value="<?php
|
||||
$("#name").parent().addClass('required');
|
||||
$("#datasource").addClass('required');
|
||||
</script>
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowdatasource/ext/view/' . basename(__FILE__);?>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<?php include $this->app->getExtensionRoot() . 'biz/workflowdatasource/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 +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>
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
?>
|
||||
|
||||
@@ -2259,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)";
|
||||
|
||||
@@ -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;}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -3204,11 +3204,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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -281,6 +281,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')
|
||||
{
|
||||
|
||||
@@ -353,7 +353,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';
|
||||
|
||||
@@ -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();
|
||||
|
||||
+20
-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.
|
||||
*
|
||||
@@ -1667,19 +1680,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";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1796,18 +1809,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);
|
||||
|
||||
@@ -701,8 +701,10 @@ class customModel extends model
|
||||
}
|
||||
}
|
||||
|
||||
$vision = $this->config->vision;
|
||||
|
||||
$this->loadModel('setting');
|
||||
$this->setting->setItems("system.{$moduleName}", $requiredFields);
|
||||
$this->setting->setItems("system.{$moduleName}@$vision", $requiredFields);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
.searchBox .srearch-date{float: left; width: 20%}
|
||||
.searchBox h4{float:left;display: inline-block}
|
||||
.searchBox span{float:left;line-height:30px}
|
||||
.body-modal .main-header {z-index: 5;}
|
||||
#logForm .table thead th{background: #efefef}
|
||||
#begin{margin-right:5px}
|
||||
#end{margin-left:5px}
|
||||
|
||||
@@ -21,9 +21,10 @@ $config->doc->custom->objectLibs = $config->doc->customObjectLibs;
|
||||
$config->doc->custom->showLibs = 'zero,children';
|
||||
|
||||
$config->doc->editor = new stdclass();
|
||||
$config->doc->editor->create = array('id' => 'content', 'tools' => 'fullTools');
|
||||
$config->doc->editor->edit = array('id' => 'content', 'tools' => 'fullTools');
|
||||
$config->doc->editor->view = array('id' => 'comment,lastComment', 'tools' => 'simple');
|
||||
$config->doc->editor->create = array('id' => 'content', 'tools' => 'fullTools');
|
||||
$config->doc->editor->edit = array('id' => 'content', 'tools' => 'fullTools');
|
||||
$config->doc->editor->view = array('id' => 'comment,lastComment', 'tools' => 'simple');
|
||||
$config->doc->editor->objectlibs = array('id' => 'comment,lastComment', 'tools' => 'simple');
|
||||
|
||||
$config->doc->markdown = new stdclass();
|
||||
$config->doc->markdown->create = array('id' => 'contentMarkdown', 'tools' => 'withchange');
|
||||
|
||||
@@ -483,6 +483,7 @@ class doc extends control
|
||||
$this->view->moduleOptionMenu = $this->tree->getOptionMenu($libID, 'doc', $startModuleID = 0);
|
||||
$this->view->type = $type;
|
||||
$this->view->libs = $this->doc->getLibs('all', $extra = 'withObject|noBook', $libID, $objectID);
|
||||
$this->view->lib = $lib;
|
||||
$this->view->groups = $this->loadModel('group')->getPairs();
|
||||
$this->view->users = $this->user->getPairs('noletter|noclosed|nodeleted', $doc->users);
|
||||
$this->display();
|
||||
|
||||
@@ -50,7 +50,7 @@ function toggleAcl(acl, type)
|
||||
var notice = typeof(noticeAcl[libType][acl]) != 'undefined' ? noticeAcl[libType][acl] : '';
|
||||
$('#noticeAcl').html(notice);
|
||||
|
||||
if((libType == 'custom' || libType == 'api') && acl == 'private') $('#whiteListBox').addClass('hidden');
|
||||
if((libType == 'custom' || libType == 'api' || libType == 'book') && acl == 'private') $('#whiteListBox').addClass('hidden');
|
||||
|
||||
if(libType == 'project' && typeof(doclibID) != 'undefined')
|
||||
{
|
||||
|
||||
@@ -169,7 +169,7 @@ function loadWhitelist(libID)
|
||||
$('#aclcustom').parent('.radio-inline').removeClass('hidden');
|
||||
|
||||
$('#users').replaceWith(users);
|
||||
$('#user').next('.picker').remove();
|
||||
$('#users').next('.picker').remove();
|
||||
$('#users').picker();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -48,7 +48,7 @@ $lang->doc->common = 'Dok';
|
||||
$lang->doc->id = 'ID';
|
||||
$lang->doc->product = $lang->productCommon;
|
||||
$lang->doc->project = 'Project';
|
||||
$lang->doc->execution = $lang->executionCommon;
|
||||
$lang->doc->execution = $lang->execution->common;
|
||||
$lang->doc->lib = 'Bibliothek';
|
||||
$lang->doc->module = 'Modul';
|
||||
$lang->doc->object = 'Object';
|
||||
@@ -161,7 +161,7 @@ $lang->doc->allProjects = 'All' . $lang->projectCommon . 's';
|
||||
|
||||
$lang->doc->libTypeList['product'] = $lang->productCommon . ' Bibliothek';
|
||||
if($config->systemMode == 'new') $lang->doc->libTypeList['project'] = 'Project Library';
|
||||
$lang->doc->libTypeList['execution'] = $lang->executionCommon . ' Bibliothek';
|
||||
$lang->doc->libTypeList['execution'] = $lang->execution->common . ' Bibliothek';
|
||||
$lang->doc->libTypeList['api'] = 'API Library';
|
||||
$lang->doc->libTypeList['custom'] = 'Eigene Bibliothek';
|
||||
|
||||
@@ -251,8 +251,8 @@ $lang->doc->noticeAcl['lib']['project']['default'] = 'Users who can access the
|
||||
$lang->doc->noticeAcl['lib']['project']['open'] = 'Users who can access the selected project can access it.';
|
||||
$lang->doc->noticeAcl['lib']['project']['private'] = 'Users who can access the selected project or users in the whiltelist can access it.';
|
||||
$lang->doc->noticeAcl['lib']['project']['custom'] = 'Users who can access the selected project or users in the whiltelist can access it.';
|
||||
$lang->doc->noticeAcl['lib']['execution']['default'] = "Users who can access the selected {$lang->executionCommon} can access it.";
|
||||
$lang->doc->noticeAcl['lib']['execution']['custom'] = "Users who can access the selected {$lang->executionCommon} or users in the whiltelist can access it.";
|
||||
$lang->doc->noticeAcl['lib']['execution']['default'] = "Users who can access the selected {$lang->execution->common} can access it.";
|
||||
$lang->doc->noticeAcl['lib']['execution']['custom'] = "Users who can access the selected {$lang->execution->common} or users in the whiltelist can access it.";
|
||||
$lang->doc->noticeAcl['lib']['api']['open'] = 'All users can access it.';
|
||||
$lang->doc->noticeAcl['lib']['api']['custom'] = 'Users in the whitelist can access it.';
|
||||
$lang->doc->noticeAcl['lib']['api']['private'] = 'Only the one who created it can access it.';
|
||||
|
||||
@@ -251,8 +251,8 @@ $lang->doc->noticeAcl['lib']['project']['default'] = 'Users who can access the
|
||||
$lang->doc->noticeAcl['lib']['project']['open'] = 'Users who can access the selected project can access it.';
|
||||
$lang->doc->noticeAcl['lib']['project']['private'] = 'Users who can access the selected project or users in the whiltelist can access it.';
|
||||
$lang->doc->noticeAcl['lib']['project']['custom'] = 'Users in the whiltelist can access it.';
|
||||
$lang->doc->noticeAcl['lib']['execution']['default'] = "Users who can access the selected {$lang->executionCommon} can access it.";
|
||||
$lang->doc->noticeAcl['lib']['execution']['custom'] = "Users who can access the selected {$lang->executionCommon} or users in the whiltelist can access it.";
|
||||
$lang->doc->noticeAcl['lib']['execution']['default'] = "Users who can access the selected {$lang->execution->common} can access it.";
|
||||
$lang->doc->noticeAcl['lib']['execution']['custom'] = "Users who can access the selected {$lang->execution->common} or users in the whiltelist can access it.";
|
||||
$lang->doc->noticeAcl['lib']['api']['open'] = 'All users can access it.';
|
||||
$lang->doc->noticeAcl['lib']['api']['custom'] = 'Users in the whitelist can access it.';
|
||||
$lang->doc->noticeAcl['lib']['api']['private'] = 'Only the one who created it can access it.';
|
||||
|
||||
@@ -48,7 +48,7 @@ $lang->doc->common = 'Gestion Documentaire';
|
||||
$lang->doc->id = 'ID';
|
||||
$lang->doc->product = $lang->productCommon;
|
||||
$lang->doc->project = 'Project';
|
||||
$lang->doc->execution = $lang->executionCommon;
|
||||
$lang->doc->execution = $lang->execution->common;
|
||||
$lang->doc->lib = 'Bibliothèque';
|
||||
$lang->doc->module = 'Catégorie';
|
||||
$lang->doc->object = 'Object';
|
||||
@@ -161,7 +161,7 @@ $lang->doc->allProjects = 'All' . $lang->projectCommon . 's';
|
||||
|
||||
$lang->doc->libTypeList['product'] = $lang->productCommon . ' Library';
|
||||
if($config->systemMode == 'new') $lang->doc->libTypeList['project'] = 'Project Library';
|
||||
$lang->doc->libTypeList['execution'] = 'Bibliothèque ' . $lang->executionCommon;
|
||||
$lang->doc->libTypeList['execution'] = 'Bibliothèque ' . $lang->execution->common;
|
||||
$lang->doc->libTypeList['api'] = 'API Library';
|
||||
$lang->doc->libTypeList['custom'] = 'Bib. Personnalisée';
|
||||
|
||||
@@ -251,8 +251,8 @@ $lang->doc->noticeAcl['lib']['project']['default'] = 'Les utilisateurs qui ont
|
||||
$lang->doc->noticeAcl['lib']['project']['open'] = 'Users who can access the selected project can access it.';
|
||||
$lang->doc->noticeAcl['lib']['project']['private'] = 'Users who can access the selected project or users in the whiltelist can access it.';
|
||||
$lang->doc->noticeAcl['lib']['project']['custom'] = 'Les utilisateurs qui ont accès au Projet ou les utilisateurs de la Liste Blanche peuvent y accéder.';
|
||||
$lang->doc->noticeAcl['lib']['execution']['default'] = "Les utilisateurs qui ont accès au {$lang->executionCommon} peuvent y accéder.";
|
||||
$lang->doc->noticeAcl['lib']['execution']['custom'] = "Les utilisateurs qui ont accès au {$lang->executionCommon} ou les utilisateurs de la Liste Blanche peuvent y accéder.";
|
||||
$lang->doc->noticeAcl['lib']['execution']['default'] = "Les utilisateurs qui ont accès au {$lang->execution->common} peuvent y accéder.";
|
||||
$lang->doc->noticeAcl['lib']['execution']['custom'] = "Les utilisateurs qui ont accès au {$lang->execution->common} ou les utilisateurs de la Liste Blanche peuvent y accéder.";
|
||||
$lang->doc->noticeAcl['lib']['api']['open'] = 'All users can access it.';
|
||||
$lang->doc->noticeAcl['lib']['api']['custom'] = 'Users in the whitelist can access it.';
|
||||
$lang->doc->noticeAcl['lib']['api']['private'] = 'Only the one who created it can access it.';
|
||||
|
||||
@@ -251,8 +251,8 @@ $lang->doc->noticeAcl['lib']['project']['default'] = "有所选项目访问权
|
||||
$lang->doc->noticeAcl['lib']['project']['open'] = "有所选项目访问权限的用户可以访问。";
|
||||
$lang->doc->noticeAcl['lib']['project']['private'] = "有所选项目访问权限或白名单里的用户可以访问。";
|
||||
$lang->doc->noticeAcl['lib']['project']['custom'] = "白名单的用户可以访问。";
|
||||
$lang->doc->noticeAcl['lib']['execution']['default'] = "有所选{$lang->executionCommon}访问权限的用户可以访问。";
|
||||
$lang->doc->noticeAcl['lib']['execution']['custom'] = "有所选{$lang->executionCommon}访问权限或白名单里的用户可以访问。";
|
||||
$lang->doc->noticeAcl['lib']['execution']['default'] = "有所选{$lang->execution->common}访问权限的用户可以访问。";
|
||||
$lang->doc->noticeAcl['lib']['execution']['custom'] = "有所选{$lang->execution->common}访问权限或白名单里的用户可以访问。";
|
||||
$lang->doc->noticeAcl['lib']['api']['open'] = '所有人都可以访问。';
|
||||
$lang->doc->noticeAcl['lib']['api']['custom'] = '白名单的用户可以访问。';
|
||||
$lang->doc->noticeAcl['lib']['api']['private'] = '只有创建者自己可以访问。';
|
||||
|
||||
@@ -83,8 +83,9 @@
|
||||
<tr>
|
||||
<th><?php echo $lang->doclib->control;?></th>
|
||||
<td colspan='2'>
|
||||
<?php echo html::radio('acl', $lang->doc->aclList, $doc->acl, "onchange='toggleAcl(this.value, \"doc\")'")?>
|
||||
<span class='text-info' id='noticeAcl'><?php echo $lang->doc->noticeAcl['doc'][$doc->acl];?></span>
|
||||
<?php $acl = $lib->acl == 'private' ? 'private' : $doc->acl;?>
|
||||
<?php echo html::radio('acl', $lang->doc->aclList, $acl, "onchange='toggleAcl(this.value, \"doc\")'")?>
|
||||
<span class='text-info' id='noticeAcl'><?php echo $lang->doc->noticeAcl['doc'][$acl];?></span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id='whiteListBox' class='hidden'>
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php if($app->tab == 'execution'):;?>
|
||||
<style>.panel-body{min-height: 180px}</style>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -984,6 +984,9 @@ class execution extends control
|
||||
|
||||
$showModule = !empty($this->config->datatable->bugBrowse->showModule) ? $this->config->datatable->bugBrowse->showModule : '';
|
||||
|
||||
/* Process the openedBuild and resolvedBuild fields. */
|
||||
$bugs = $this->bug->processBuildForBugs($bugs);
|
||||
|
||||
/* Assign. */
|
||||
$this->view->title = $title;
|
||||
$this->view->position = $position;
|
||||
|
||||
@@ -380,8 +380,8 @@ $lang->execution->errorBegin = "The start time of {$lang->execu
|
||||
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
|
||||
$lang->execution->errorLetterProject = "The start time of stage cannot be less than the start time of the project %s.";
|
||||
$lang->execution->errorGreaterProject = "The end time of stage cannot be greater than the end time %s of the project.";
|
||||
$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' "%s" should be ≥ the start date of project %s: %s.';
|
||||
$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' "%s" should be ≤ the deadline of project %s: %s.';
|
||||
$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' should be ≥ the start date of project : %s.';
|
||||
$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.';
|
||||
$lang->execution->accessDenied = "Zugriff zu {$lang->executionCommon} verweigert!";
|
||||
$lang->execution->tips = 'Hinweis';
|
||||
$lang->execution->afterInfo = "{$lang->executionCommon} wurde erstellt. Als nächstes können Sie ";
|
||||
|
||||
@@ -380,8 +380,8 @@ $lang->execution->errorBegin = "The start time of {$lang->execu
|
||||
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
|
||||
$lang->execution->errorLetterProject = "The start time of stage cannot be less than the start time of the project %s.";
|
||||
$lang->execution->errorGreaterProject = "The end time of stage cannot be greater than the end time %s of the project.";
|
||||
$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' "%s" should be ≥ the start date of project "%s": %s.';
|
||||
$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' "%s" should be ≤ the deadline of project "%s": %s.';
|
||||
$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' should be ≥ the start date of project : %s.';
|
||||
$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.';
|
||||
$lang->execution->accessDenied = "Your access to {$lang->executionCommon} is denied!";
|
||||
$lang->execution->tips = 'Note';
|
||||
$lang->execution->afterInfo = "{$lang->executionCommon} is created. Next you can ";
|
||||
|
||||
@@ -284,16 +284,19 @@ $lang->execution->taskKanban = 'Task Kanban';
|
||||
$lang->execution->RDKanban = 'Research & Development Kanban';
|
||||
|
||||
/* Group browsing. */
|
||||
$lang->execution->allTasks = 'Voir Toutes';
|
||||
$lang->execution->allTasks = 'Toutes';
|
||||
$lang->execution->assignedToMe = 'à Moi';
|
||||
$lang->execution->myInvolved = "Où j'ai participé";
|
||||
$lang->execution->assignedByMe = 'AssignedByMe';
|
||||
$lang->execution->myInvolved = "Ma part";
|
||||
$lang->execution->assignedByMe = 'Assignée par moi';
|
||||
|
||||
$lang->execution->statusSelects[''] = 'Plus...';
|
||||
$lang->execution->statusSelects['wait'] = 'En Attente';
|
||||
$lang->execution->statusSelects['doing'] = 'En Cours';
|
||||
$lang->execution->statusSelects['undone'] = 'Non terminées';
|
||||
$lang->execution->statusSelects['myinvolved'] = $lang->execution->myInvolved;
|
||||
$lang->execution->statusSelects['finishedbyme'] = 'Terminées par moi';
|
||||
$lang->execution->statusSelects['assignedbyme'] = $lang->execution->assignedByMe;
|
||||
$lang->execution->statusSelects['needconfirm'] = 'A confirmer';
|
||||
$lang->execution->statusSelects['done'] = 'Faites';
|
||||
$lang->execution->statusSelects['closed'] = 'Fermées';
|
||||
$lang->execution->statusSelects['cancel'] = 'Annulées';
|
||||
@@ -380,8 +383,8 @@ $lang->execution->errorBegin = "The start time of {$lang->execu
|
||||
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
|
||||
$lang->execution->errorLetterProject = "The start time of stage cannot be less than the start time of the project %s.";
|
||||
$lang->execution->errorGreaterProject = "The end time of stage cannot be greater than the end time %s of the project.";
|
||||
$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' "%s" should be ≥ the start date of project %s: %s.';
|
||||
$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' "%s" should be ≤ the deadline of project %s: %s.';
|
||||
$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' should be ≥ the start date of project : %s.';
|
||||
$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.';
|
||||
$lang->execution->accessDenied = "Votre accès au {$lang->executionCommon} est refusé ! Désolé.";
|
||||
$lang->execution->tips = 'Note';
|
||||
$lang->execution->afterInfo = "Le {$lang->executionCommon} a été créé avec succès ! Ensuite vous pouvez ";
|
||||
@@ -476,9 +479,6 @@ $lang->execution->typeList['kanban'] = 'Kanban';
|
||||
$lang->execution->featureBar['task']['all'] = $lang->execution->allTasks;
|
||||
$lang->execution->featureBar['task']['unclosed'] = $lang->execution->unclosed;
|
||||
$lang->execution->featureBar['task']['assignedtome'] = $lang->execution->assignedToMe;
|
||||
$lang->execution->featureBar['task']['myinvolved'] = $lang->execution->myInvolved;
|
||||
$lang->execution->featureBar['task']['assignedbyme'] = $lang->execution->assignedByMe;
|
||||
$lang->execution->featureBar['task']['needconfirm'] = 'A confirmer';
|
||||
$lang->execution->featureBar['task']['status'] = $lang->execution->statusSelects[''];
|
||||
|
||||
$lang->execution->featureBar['all']['all'] = $lang->execution->all;
|
||||
|
||||
@@ -337,6 +337,8 @@ $lang->execution->unfinishedExecution = "This {$lang->executionCommon} h
|
||||
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
|
||||
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
|
||||
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
|
||||
$lang->execution->errorCommonBegin = 'The start date of ' . $lang->executionCommon . ' should be ≥ the start date of project : %s.';
|
||||
$lang->execution->errorCommonEnd = 'The deadline of ' . $lang->executionCommon . ' should be ≤ the deadline of project : %s.';
|
||||
|
||||
/* Statistics. */
|
||||
$lang->execution->charts = new stdclass();
|
||||
|
||||
@@ -380,8 +380,8 @@ $lang->execution->errorBegin = "{$lang->executionCommon}的开
|
||||
$lang->execution->errorEnd = "{$lang->executionCommon}的截止时间不能大于所属项目的结束时间%s。";
|
||||
$lang->execution->errorLetterProject = "阶段的计划开始时间不能小于所属项目的计划开始时间%s。";
|
||||
$lang->execution->errorGreaterProject = "阶段的计划完成时间不能大于所属项目的计划完成时间%s。";
|
||||
$lang->execution->errorCommonBegin = $lang->executionCommon . '“%s”开始日期应大于等于项目“%s”的开始日期:%s。';
|
||||
$lang->execution->errorCommonEnd = $lang->executionCommon . '“%s”截止日期应小于等于项目“%s”的截止日期:%s。';
|
||||
$lang->execution->errorCommonBegin = $lang->executionCommon . '开始日期应大于等于项目的开始日期:%s。';
|
||||
$lang->execution->errorCommonEnd = $lang->executionCommon . '截止日期应小于等于项目的截止日期:%s。';
|
||||
$lang->execution->accessDenied = "您无权访问该{$lang->executionCommon}!";
|
||||
$lang->execution->tips = '提示';
|
||||
$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您现在可以进行以下操作:";
|
||||
|
||||
@@ -305,7 +305,7 @@ class executionModel extends model
|
||||
return false;
|
||||
}
|
||||
|
||||
if($this->config->systemMode == 'new') $this->checkBeginAndEndDate($_POST['project'], $_POST['begin'], $_POST['end'], $_POST['name']);
|
||||
if($this->config->systemMode == 'new') $this->checkBeginAndEndDate($_POST['project'], $_POST['begin'], $_POST['end']);
|
||||
if(dao::isError()) return false;
|
||||
|
||||
/* Determine whether to add a sprint or a stage according to the model of the execution. */
|
||||
@@ -500,7 +500,7 @@ class executionModel extends model
|
||||
|
||||
if(in_array($execution->status, array('closed', 'suspended'))) $this->computeBurn($executionID);
|
||||
|
||||
if($this->config->systemMode == 'new' and (empty($execution->project) or $execution->project == $oldExecution->project)) $this->checkBeginAndEndDate($oldExecution->project, $execution->begin, $execution->end, $execution->name);
|
||||
if($this->config->systemMode == 'new' and (empty($execution->project) or $execution->project == $oldExecution->project)) $this->checkBeginAndEndDate($oldExecution->project, $execution->begin, $execution->end);
|
||||
if(dao::isError()) return false;
|
||||
|
||||
/* Child stage inherits parent stage permissions. */
|
||||
@@ -869,7 +869,7 @@ class executionModel extends model
|
||||
->remove('comment')
|
||||
->get();
|
||||
|
||||
if($this->config->systemMode == 'new') $this->checkBeginAndEndDate($oldExecution->project, $execution->begin, $execution->end, $oldExecution->name);
|
||||
if($this->config->systemMode == 'new') $this->checkBeginAndEndDate($oldExecution->project, $execution->begin, $execution->end);
|
||||
if(dao::isError()) return false;
|
||||
|
||||
$execution = $this->loadModel('file')->processImgURL($execution, $this->config->execution->editor->putoff['id'], $this->post->uid);
|
||||
@@ -1117,16 +1117,15 @@ class executionModel extends model
|
||||
* @param int $projectID
|
||||
* @param string $begin
|
||||
* @param string $end
|
||||
* @param string $executionName
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function checkBeginAndEndDate($projectID, $begin, $end, $executionName)
|
||||
public function checkBeginAndEndDate($projectID, $begin, $end)
|
||||
{
|
||||
$project = $this->loadModel('project')->getByID($projectID);
|
||||
|
||||
if($begin < $project->begin) dao::$errors['begin'] = sprintf($this->lang->execution->errorCommonBegin, $executionName, $project->name, $project->begin);
|
||||
if($end > $project->end) dao::$errors['end'] = sprintf($this->lang->execution->errorCommonEnd, $executionName, $project->name, $project->end);
|
||||
if($begin < $project->begin) dao::$errors['begin'] = sprintf($this->lang->execution->errorCommonBegin, $project->begin);
|
||||
if($end > $project->end) dao::$errors['end'] = sprintf($this->lang->execution->errorCommonEnd, $project->end);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<h2 class="detail-title">
|
||||
<span class="label-id taskID"><?php echo $task->id?></span>
|
||||
<span class="label <?php echo "status-{$task->status}";?>"><?php echo $this->processStatus('task', $task);?></span>
|
||||
<span class="title">
|
||||
<span>
|
||||
<?php if($task->parent > 0) echo '<span class="label no-margin label-badge label-light">' . $this->lang->task->childrenAB . '</span>';?>
|
||||
<?php if(!empty($task->team)) echo '<span class="label no-margin label-badge label-light">' . $this->lang->task->multipleAB . '</span>';?>
|
||||
<?php echo isset($task->parentName) ? $task->parentName . '/' : '';?><?php echo $task->name;?>
|
||||
|
||||
@@ -49,7 +49,7 @@ body.menu-hide {padding-left: 0;}
|
||||
.app-container {position: absolute; left: 0; bottom: 40px; right: 0; top: 0; background-color: #efefef;}
|
||||
.menu-hide #apps {left: 40px;}
|
||||
.app-container.loading:before {background-color: rgba(0,0,0,.1);}
|
||||
.app-container.loading:before, .app-container.loading::after {transition-delay: 1s;}
|
||||
.app-container.loading:before, .app-container.loading::after {transition-delay: 3s;}
|
||||
|
||||
#appsBar {position: fixed; left: 96px; bottom: 0; right: 0; height: 40px; z-index: 1012; background: #fff; border-top: 1px solid #eff1f7;}
|
||||
.menu-hide #appsBar {left: 40px;}
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
#apps { left: 106px;}
|
||||
#menu { width: 106px;}
|
||||
|
||||
@@ -463,7 +463,7 @@
|
||||
{
|
||||
app.$app.removeClass('loading');
|
||||
app._loadTimer = null;
|
||||
}, 10000);
|
||||
}, 15000);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -40,7 +40,7 @@ $config->kanban->editor->createcard = array('id' => 'desc', 'tools' => 'simpl
|
||||
$config->kanban->editor->activate = array('id' => 'comment', 'tools' => 'simpleTools');
|
||||
$config->kanban->editor->close = array('id' => 'comment', 'tools' => 'simpleTools');
|
||||
$config->kanban->editor->editcard = array('id' => 'desc', 'tools' => 'simpleTools');
|
||||
$config->kanban->editor->viewcard = array('id' => 'comment', 'tools' => 'simpleTools');
|
||||
$config->kanban->editor->viewcard = array('id' => 'comment,lastComment', 'tools' => 'simpleTools');
|
||||
$config->kanban->editor->activatecard = array('id' => 'comment', 'tools' => 'simpleTools');
|
||||
|
||||
$config->kanban->fromType = array('execution', 'productplan', 'release', 'build');
|
||||
|
||||
@@ -1433,8 +1433,7 @@ class kanban extends control
|
||||
|
||||
if(isonlybody()) return print(js::reload('parent.parent'));
|
||||
|
||||
$card = $this->kanban->getCardByID($cardID);
|
||||
$kanbanGroup = $this->kanban->getKanbanData($card->kanban, $card->region);
|
||||
$kanbanGroup = $this->kanban->getKanbanData($card->kanban, $card->region);
|
||||
$kanbanGroupParam = json_encode($kanbanGroup);
|
||||
return print("<script>parent.updateRegion({$card->region}, $kanbanGroupParam)</script>");
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#mainContent {padding-left: 0px; height: 500px;}
|
||||
#contactListMenu_chosen {vertical-align: unset;}
|
||||
#teamBox .input-group .input-group-btn {vertical-align: top;}
|
||||
.chosen-container .chosen-results {max-height: 200px;}
|
||||
|
||||
+27
-1
@@ -1479,6 +1479,19 @@ class kanbanModel extends model
|
||||
if($browseType == 'bug') $cardList = $this->loadModel('bug')->getExecutionBugs($executionID);
|
||||
if($browseType == 'task') $cardList = $this->loadModel('execution')->getKanbanTasks($executionID, "id");
|
||||
|
||||
if($browseType == 'task' and $groupBy == 'assignedTo')
|
||||
{
|
||||
foreach($cardList as $id => $task)
|
||||
{
|
||||
if($task->mode == 'multi')
|
||||
{
|
||||
$task->team = $this->dao->select('t1.account,t2.realname')->from(TABLE_TEAM)->alias('t1')
|
||||
->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account')
|
||||
->where('t1.root')->eq($id)->andWhere('t1.type')->eq('task')->orderBy('t1.order')->fetchPairs('account');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Get objects cards menus. */
|
||||
if($browseType == 'story') $storyCardMenu = $this->getKanbanCardMenu($executionID, $cardList, 'story');
|
||||
if($browseType == 'bug') $bugCardMenu = $this->getKanbanCardMenu($executionID, $cardList, 'bug');
|
||||
@@ -1564,7 +1577,12 @@ class kanbanModel extends model
|
||||
|
||||
$cardData = array();
|
||||
if(in_array($groupBy, array('module', 'story', 'pri', 'severity')) and (int)$object->$groupBy !== $laneID) continue;
|
||||
if(in_array($groupBy, array('assignedTo', 'type', 'category', 'source')) and $object->$groupBy !== $laneID) continue;
|
||||
if(in_array($groupBy, array('type', 'category', 'source')) and $object->$groupBy !== $laneID) continue;
|
||||
if($groupBy == 'assignedTo')
|
||||
{
|
||||
if(empty($object->team) and $object->$groupBy !== $laneID) continue;
|
||||
if(!empty($object->team) and !in_array($laneID, array_keys($object->team), true)) continue;
|
||||
}
|
||||
|
||||
$cardData['id'] = $object->id;
|
||||
$cardData['order'] = $cardOrder;
|
||||
@@ -1625,6 +1643,14 @@ class kanbanModel extends model
|
||||
foreach($cardList as $item)
|
||||
{
|
||||
if(!isset($groupByList[$item->$groupBy])) $groupByList[$item->$groupBy] = $item->$groupBy;
|
||||
|
||||
if($groupBy == 'assignedTo' and !empty($item->team))
|
||||
{
|
||||
foreach($item->team as $account => $name)
|
||||
{
|
||||
if(!isset($groupByList[$account])) $groupByList[$account] = $account;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(in_array($groupBy, array('module', 'story', 'assignedTo')))
|
||||
|
||||
@@ -108,8 +108,8 @@
|
||||
$disabled = $case->status == 'wait' ? 'disabled' : '';
|
||||
common::printIcon('testcase', 'createBug', "product=$case->product&branch=$case->branch&extra=caseID=$caseID,version=$case->version,runID=$runID", $case, 'list', 'bug', '', 'iframe', 'true', "data-app='qa' data-toggle=''");
|
||||
common::printIcon('testcase', 'create', "productID=$case->product&branch=$case->branch&moduleID=$case->module&from={$app->rawMethod}¶m=$caseID", $case, 'list', 'copy', '', 'iframe', true, "data-width='95%'");
|
||||
common::printIcon('testtask', 'runCase', "runID=$runID&caseID=$caseID&version=$case->version", '', 'list', 'play', '', "iframe $disabled", true, "data-width='95%'", '', $case->project);
|
||||
common::printIcon('testtask', 'results', "runID=$runID&caseID=$caseID", '', 'list', 'list-alt', '', 'iframe', true, "data-width='95%'", '', $case->project);
|
||||
common::printIcon('testtask', 'runCase', "runID=0&caseID=$caseID&version=$case->version", '', 'list', 'play', '', "iframe $disabled", true, "data-width='95%'", '', $case->project);
|
||||
common::printIcon('testtask', 'results', "runID=0&caseID=$caseID", '', 'list', 'list-alt', '', 'iframe', true, "data-width='95%'", '', $case->project);
|
||||
common::printIcon('testcase', 'edit', "caseID=$caseID", $case, 'list', 'edit', '', 'iframe', true, "data-width='95%'", '', $case->project);
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
<td title="<?php echo $user->email;?>"><?php echo $user->email;?></td>
|
||||
<td class='c-actions'>
|
||||
<?php
|
||||
if($this->app->tab == 'program') $module = 'program';
|
||||
if(common::hasPriv($module, 'unbindWhitelist')) echo html::a($this->createLink($module, 'unbindWhitelist', "id=$user->id&confirm=no"), '<i class="icon-unlink"></i>', 'hiddenwin', "title='{$lang->personnel->delete}' class='btn' $tab");
|
||||
?>
|
||||
</td>
|
||||
|
||||
@@ -148,18 +148,18 @@ class product extends control
|
||||
}
|
||||
|
||||
/* Set menu. */
|
||||
if($this->app->tab == 'product')
|
||||
if($this->app->tab == 'project')
|
||||
{
|
||||
$this->session->set('storyList', $this->app->getURI(true), 'project');
|
||||
$this->loadModel('project')->setMenu($projectID);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->session->set('storyList', $this->app->getURI(true), 'product');
|
||||
$this->session->set('productList', $this->app->getURI(true), 'product');
|
||||
|
||||
$this->product->setMenu($productID, $branch, 0, '', "storyType=$storyType");
|
||||
}
|
||||
if($this->app->tab == 'project')
|
||||
{
|
||||
$this->session->set('storyList', $this->app->getURI(true), 'project');
|
||||
$this->loadModel('project')->setMenu($projectID);
|
||||
}
|
||||
|
||||
/* Lower browse type. */
|
||||
$browseType = strtolower($browseType);
|
||||
|
||||
@@ -60,12 +60,19 @@ $(function()
|
||||
});
|
||||
}
|
||||
|
||||
/* Add a statistics prompt statement after the Edit button */
|
||||
/**
|
||||
* Add a statistics prompt statement after the Edit button.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function addStatistic()
|
||||
{
|
||||
var checkedLength = $(":checkbox[name^='productIDList']:checked").length;
|
||||
var summary = checkedProducts.replace('%s', checkedLength);
|
||||
if(cilentLang == "en" && checkedLength < 2) summary = summary.replace('products', 'product');
|
||||
var statistic = "<div id='productsSummary' class='statistic'>" + summary + "</div>";
|
||||
|
||||
if(checkedLength > 0)
|
||||
{
|
||||
$('#productsSummary').remove();
|
||||
@@ -77,6 +84,35 @@ $(function()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Anti shake operation for jquery.
|
||||
*
|
||||
* @param fn $fn
|
||||
* @param delay $delay
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function debounce(fn, delay)
|
||||
{
|
||||
var timer = null;
|
||||
return function()
|
||||
{
|
||||
if(timer) clearTimeout(timer);
|
||||
timer = setTimeout(fn, delay)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update statistics.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function updateStatistic()
|
||||
{
|
||||
debounce(addStatistic(), 200)
|
||||
}
|
||||
|
||||
$('#productTableList').on('click', '.row-program,.row-line', function(e)
|
||||
{
|
||||
if($(e.target).closest('.table-nest-toggle,a').length) return;
|
||||
@@ -96,7 +132,7 @@ $(function()
|
||||
{
|
||||
updatePrarentCheckbox($('#productTableList>tr[data-id="' + parentID + '"]'));
|
||||
}
|
||||
addStatistic()
|
||||
updateStatistic()
|
||||
});
|
||||
|
||||
$('#productListForm').on('checkChange', updateCheckboxes);
|
||||
@@ -104,7 +140,7 @@ $(function()
|
||||
|
||||
$(":checkbox[name^='productIDList']").on('click', function()
|
||||
{
|
||||
addStatistic()
|
||||
updateStatistic()
|
||||
});
|
||||
|
||||
$(".check-all").on('click', function()
|
||||
@@ -117,6 +153,6 @@ $(function()
|
||||
{
|
||||
$(":checkbox[name^='productIDList']").prop('checked', true);
|
||||
}
|
||||
addStatistic()
|
||||
updateStatistic()
|
||||
});
|
||||
});
|
||||
|
||||
@@ -207,8 +207,6 @@ $lang->product->noMatched = '"%s" cannot be found.' . $lang->productCommon;
|
||||
$lang->product->featureBar['browse']['allstory'] = $lang->product->allStory;
|
||||
$lang->product->featureBar['browse']['unclosed'] = $lang->product->unclosed;
|
||||
$lang->product->featureBar['browse']['assignedtome'] = $lang->product->assignedToMe;
|
||||
$lang->product->featureBar['browse']['openedbyme'] = $lang->product->openedByMe;
|
||||
$lang->product->featureBar['browse']['reviewedbyme'] = $lang->product->reviewedByMe;
|
||||
$lang->product->featureBar['browse']['reviewbyme'] = $lang->product->reviewByMe;
|
||||
$lang->product->featureBar['browse']['draftstory'] = $lang->product->draftStory;
|
||||
$lang->product->featureBar['browse']['more'] = $lang->more;
|
||||
@@ -217,7 +215,9 @@ $lang->product->featureBar['all']['all'] = $lang->product->allProduct;
|
||||
$lang->product->featureBar['all']['noclosed'] = $lang->product->unclosed;
|
||||
$lang->product->featureBar['all']['closed'] = $lang->product->statusList['closed'];
|
||||
|
||||
$lang->product->moreSelects['openedbyme'] = $lang->product->openedByMe;
|
||||
$lang->product->moreSelects['assignedbyme'] = $lang->product->assignedByMe;
|
||||
$lang->product->moreSelects['reviewedbyme'] = $lang->product->reviewedByMe;
|
||||
$lang->product->moreSelects['closedbyme'] = $lang->product->closedByMe;
|
||||
$lang->product->moreSelects['activestory'] = $lang->product->activeStory;
|
||||
$lang->product->moreSelects['changedstory'] = $lang->product->changedStory;
|
||||
|
||||
@@ -256,6 +256,7 @@
|
||||
<?php js::set('orderBy', $orderBy)?>
|
||||
<?php js::set('browseType', $browseType)?>
|
||||
<?php js::set('checkedProducts', $lang->product->checkedProducts);?>
|
||||
<?php js::set('cilentLang', $this->app->getClientLang());?>
|
||||
<?php if(commonModel::isTutorialMode()): ?>
|
||||
<style>
|
||||
#productListForm {overflow: hidden;}
|
||||
|
||||
@@ -30,6 +30,7 @@ $(function()
|
||||
}
|
||||
|
||||
var summary = checkedProjects.replace('%s', checkedLength);
|
||||
if(cilentLang == "en" && checkedLength < 2) summary = summary.replace('items', 'item');
|
||||
var statistic = "<div id='projectsSummary' class='table-statistic'>" + summary + "</div>";
|
||||
if(checkedLength > 0)
|
||||
{
|
||||
@@ -53,6 +54,7 @@ $(function()
|
||||
$('#programForm').addClass('has-row-checked');
|
||||
var checkedLength = $(":checkbox[name^='projectIdList']:checked").length;
|
||||
var summary = checkedProjects.replace('%s', checkedLength);
|
||||
if(cilentLang == "en" && checkedLength < 2) summary = summary.replace('items', 'item');
|
||||
var statistic = "<div id='projectsSummary' class='table-statistic'>" + summary + "</div>";
|
||||
$('#programSummary').addClass('hidden');
|
||||
$('#projectsSummary').remove();
|
||||
|
||||
@@ -47,6 +47,7 @@ $lang->program->realDuration = 'RealDuration';
|
||||
$lang->program->openedVersion = 'OpenedVersion';
|
||||
$lang->program->lastEditedBy = 'LastEditedBy';
|
||||
$lang->program->lastEditedDate = 'LastEditedDate';
|
||||
$lang->program->childProgram = 'Child Program';
|
||||
|
||||
/* Actions. */
|
||||
$lang->program->common = 'Program';
|
||||
@@ -99,10 +100,10 @@ $lang->program->noProgram = 'No program.';
|
||||
$lang->program->showClosed = 'Closed programs.';
|
||||
$lang->program->tips = 'If a parent program is selected, the products under the parent program can be associated. If no program is selected for the project, a product with the same name as the project is created and associated with the project by default.';
|
||||
$lang->program->confirmBatchUnlink = "Do you want to batch unlink these stakeholders?";
|
||||
$lang->program->beginLetterParent = 'The start date of the program "%s" should be ≥ the start date of the parent program "%s": %s.';
|
||||
$lang->program->endGreaterParent = 'The finish date of the program "%s" should be ≤ the finish date of the parent program "%s": %s.';
|
||||
$lang->program->beginGreateChild = 'The start date of the parent program "%s" should be ≤the minimum start time of the subprogram "%s": %s.';
|
||||
$lang->program->endLetterChild = 'The finish time of the parent program "%s" should be ≥ the maximum finish time of the subprogram "%s": %s.';
|
||||
$lang->program->beginLetterParent = 'The start date of the program should be ≥ the start date of the parent program: %s.';
|
||||
$lang->program->endGreaterParent = 'The finish date of the program should be ≤ the finish date of the parent program: %s.';
|
||||
$lang->program->beginGreateChild = 'The start date of the parent program should be ≤the minimum start time of the %s: %s.';
|
||||
$lang->program->endLetterChild = 'The finish time of the parent program should be ≥ the maximum finish time of the %s: %s.';
|
||||
$lang->program->closeErrorMessage = 'There are subprograms or projects that are not closed';
|
||||
$lang->program->hasChildren = 'It has child programs or projects. You cannot delete it.';
|
||||
$lang->program->hasProduct = 'It has products. You cannot delete it.';
|
||||
|
||||
@@ -47,6 +47,7 @@ $lang->program->realDuration = 'RealDuration';
|
||||
$lang->program->openedVersion = 'OpenedVersion';
|
||||
$lang->program->lastEditedBy = 'LastEditedBy';
|
||||
$lang->program->lastEditedDate = 'LastEditedDate';
|
||||
$lang->program->childProgram = 'Child Program';
|
||||
|
||||
/* Actions. */
|
||||
$lang->program->common = 'Program';
|
||||
@@ -99,10 +100,10 @@ $lang->program->noProgram = 'No program.';
|
||||
$lang->program->showClosed = 'Closed';
|
||||
$lang->program->tips = 'If a parent program is selected, the products under the parent program can be associated. If no program is selected for the project, a product with the same name as the project is created and associated with the project by default.';
|
||||
$lang->program->confirmBatchUnlink = "Do you want to batch unlink these stakeholders?";
|
||||
$lang->program->beginLetterParent = 'The start date of the program "%s" should be ≥ the start date of the parent program "%s": %s.';
|
||||
$lang->program->endGreaterParent = 'The finish date of the program "%s" should be ≤ the finish date of the parent program "%s": %s.';
|
||||
$lang->program->beginGreateChild = 'The start date of the parent program "%s" should be ≤the minimum start time of the subprogram "%s": %s.';
|
||||
$lang->program->endLetterChild = 'The finish time of the parent program "%s" should be ≥ the maximum finish time of the subprogram "%s": %s.';
|
||||
$lang->program->beginLetterParent = 'The start date of the program should be ≥ the start date of the parent program: %s.';
|
||||
$lang->program->endGreaterParent = 'The finish date of the program should be ≤ the finish date of the parent program: %s.';
|
||||
$lang->program->beginGreateChild = 'The start date of the parent program should be ≤the minimum start time of the %s: %s.';
|
||||
$lang->program->endLetterChild = 'The finish time of the parent program should be ≥ the maximum finish time of the %s: %s.';
|
||||
$lang->program->closeErrorMessage = 'There are subprograms or projects that are not closed';
|
||||
$lang->program->hasChildren = 'The program has a child program or the project exists and can not be deleted.';
|
||||
$lang->program->hasProduct = 'The program has products exist and can not be deleted.';
|
||||
|
||||
@@ -47,6 +47,7 @@ $lang->program->realDuration = 'RealDuration';
|
||||
$lang->program->openedVersion = 'OpenedVersion';
|
||||
$lang->program->lastEditedBy = 'LastEditedBy';
|
||||
$lang->program->lastEditedDate = 'LastEditedDate';
|
||||
$lang->program->childProgram = 'sous-programme';
|
||||
|
||||
/* Actions. */
|
||||
$lang->program->common = 'Program';
|
||||
@@ -99,10 +100,10 @@ $lang->program->noProgram = 'No program.';
|
||||
$lang->program->showClosed = 'Closed programs.';
|
||||
$lang->program->tips = 'If a parent program is selected, the products under the parent program can be associated. If no program is selected for the project, a product with the same name as the project is created and associated with the project by default.';
|
||||
$lang->program->confirmBatchUnlink = "Do you want to batch unlink these stakeholders?";
|
||||
$lang->program->beginLetterParent = 'La date de début du programme "%s" doit être ≥ à la date de début du programme parent "%s" : %s.';
|
||||
$lang->program->endGreaterParent = 'La date de fin du programme "%s" doit être ≤ à la date de fin du programme parent "%s" : %s.';
|
||||
$lang->program->beginGreateChild = 'La date de début du programme parent "%s" doit être ≤ à la date de début minimum du sous-programme "%s" : %s.';
|
||||
$lang->program->endLetterChild = 'Le temps de fin du programme parent "%s" doit être ≥ au temps de fin maximum du sous-programme "%s" : %s.';
|
||||
$lang->program->beginLetterParent = 'La date de début du programme doit être ≥ à la date de début du programme parent: %s.';
|
||||
$lang->program->endGreaterParent = 'La date de fin du programme doit être ≤ à la date de fin du programme parent: %s.';
|
||||
$lang->program->beginGreateChild = 'La date de début du programme parent doit être ≤ à la date de début minimum du %s: %s.';
|
||||
$lang->program->endLetterChild = 'Le temps de fin du programme parent doit être ≥ au temps de fin maximum du %s: %s.';
|
||||
$lang->program->closeErrorMessage = 'There are subprograms or projects that are not closed';
|
||||
$lang->program->hasChildren = 'It has child programs or projects. You cannot delete it.';
|
||||
$lang->program->hasProduct = 'It has products. You cannot delete it.';
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user