* merge from 15.0.beta3.

This commit is contained in:
wangyidong
2021-06-05 13:01:53 +08:00
parent 7ff5ccae12
commit 769e6b433b
220 changed files with 2661 additions and 1370 deletions
+1 -1
View File
@@ -1 +1 @@
15.0.stable
15.0.1
+1 -1
View File
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
if(!function_exists('getWebRoot')){function getWebRoot(){}}
/* 基本设置。Basic settings. */
$config->version = '15.0'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->version = '15.0.1'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP.
$config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time.
$config->timezone = 'Asia/Shanghai'; // 时区设置。 The time zone setting, for more see http://www.php.net/manual/en/timezones.php.
+1
View File
@@ -219,6 +219,7 @@ $config->objectTables['entry'] = TABLE_ENTRY;
$config->objectTables['webhook'] = TABLE_WEBHOOK;
$config->objectTables['stakeholder'] = TABLE_STAKEHOLDER;
$config->objectTables['job'] = TABLE_JOB;
$config->objectTables['team'] = TABLE_TEAM;
/* Program privs.*/
$config->programPriv = new stdclass();
+7 -7
View File
@@ -585,13 +585,13 @@ INSERT INTO `zt_searchindex` (`id`, `objectType`, `objectID`, `title`, `content`
(40, 'task', 16, ' 21806 21518 26381 21153 30340 35774 35745', ' 21806 21518 26381 21153 30340 35774 35745', '2021-04-28 13:16:15', '2021-04-28 13:16:15'),
(41, 'task', 17, ' 21806 21518 26381 21153 30340 24320 21457', ' 21806 21518 26381 21153 30340 24320 21457', '2021-04-28 13:16:15', '2021-04-28 13:16:15');
INSERT INTO `zt_story` (`id`, `parent`, `product`, `branch`, `module`, `plan`, `source`, `sourceNote`, `fromBug`, `title`, `keywords`, `type`, `pri`, `estimate`, `status`, `subStatus`, `color`, `stage`, `stagedBy`, `mailto`, `openedBy`, `openedDate`, `assignedTo`, `assignedDate`, `lastEditedBy`, `lastEditedDate`, `reviewedBy`, `reviewedDate`, `closedBy`, `closedDate`, `closedReason`, `toBug`, `childStories`, `linkStories`, `duplicateStory`, `version`, `URChanged`, `deleted`) VALUES
(1, 0, 1, 0, 1, '1', 'po', '', 0, '首页设计和开发', '', 'story', 1, 1, 'active', '', '', 'developing', '', '', 'productManager', '2012-06-05 10:09:49', 'productManager', '0000-00-00 00:00:00', 'productManager', '2012-06-05 10:25:19', 'productManager, ', '2012-06-05', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(2, 0, 1, 0, 2, '1', 'po', '', 0, '新闻中心的设计和开发。', '', 'story', 1, 1, 'active', '', '', 'projected', '', '', 'productManager', '2012-06-05 10:16:37', 'productManager', '2012-06-05 10:16:37', 'productManager', '2012-06-05 10:25:33', 'productManager, ', '2012-06-05', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(3, 0, 1, 0, 3, '1', 'po', '', 0, '成果展示的设计和开发', '', 'story', 1, 0, 'active', '', '', 'developing', '', '', 'productManager', '2012-06-05 10:18:10', 'productManager', '2012-06-05 10:18:10', 'productManager', '2012-06-05 10:25:38', 'productManager, ', '2012-06-05', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 2, '0', '0'),
(4, 0, 1, 0, 4, '1', 'po', '', 0, '售后服务的设计和开发', '', 'story', 1, 1, 'active', '', '', 'developed', '', '', 'productManager', '2012-06-05 10:20:16', 'productManager', '2012-06-05 10:20:16', 'productManager', '2012-06-05 10:25:42', 'productManager, ', '2012-06-05', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(5, 0, 1, 0, 5, '1', 'po', '', 0, '诚聘英才的设计和开发', '', 'story', 1, 1, 'draft', '', '', 'planned', '', '', 'productManager', '2012-06-05 10:21:39', 'productManager', '2012-06-05 10:21:39', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(6, 0, 1, 0, 6, '1', 'po', '', 0, '合作洽谈的设计和开发', '', 'story', 1, 1, 'draft', '', '', 'planned', '', '', 'productManager', '2012-06-05 10:23:11', 'productManager', '2012-06-05 10:23:11', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(7, 0, 1, 0, 7, '1', 'po', '', 0, '关于我们的设计和开发', '', 'story', 1, 1, 'draft', '', '', 'planned', '', '', 'productManager', '2012-06-05 10:24:19', 'productManager', '2012-06-05 10:24:19', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0');
(1, 0, 1, 0, 1, '1', 'po', '', 0, '首页设计和开发', '', 'story', 1, 1, 'active', '', '', 'developing', '', '', 'productManager', '2012-06-05 10:09:49', 'productManager', '0000-00-00 00:00:00', 'productManager', '2012-06-05 10:25:19', 'productManager, ', '2012-06-05 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(2, 0, 1, 0, 2, '1', 'po', '', 0, '新闻中心的设计和开发。', '', 'story', 1, 1, 'active', '', '', 'projected', '', '', 'productManager', '2012-06-05 10:16:37', 'productManager', '2012-06-05 10:16:37', 'productManager', '2012-06-05 10:25:33', 'productManager, ', '2012-06-05 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(3, 0, 1, 0, 3, '1', 'po', '', 0, '成果展示的设计和开发', '', 'story', 1, 0, 'active', '', '', 'developing', '', '', 'productManager', '2012-06-05 10:18:10', 'productManager', '2012-06-05 10:18:10', 'productManager', '2012-06-05 10:25:38', 'productManager, ', '2012-06-05 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 2, '0', '0'),
(4, 0, 1, 0, 4, '1', 'po', '', 0, '售后服务的设计和开发', '', 'story', 1, 1, 'active', '', '', 'developed', '', '', 'productManager', '2012-06-05 10:20:16', 'productManager', '2012-06-05 10:20:16', 'productManager', '2012-06-05 10:25:42', 'productManager, ', '2012-06-05 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(5, 0, 1, 0, 5, '1', 'po', '', 0, '诚聘英才的设计和开发', '', 'story', 1, 1, 'draft', '', '', 'planned', '', '', 'productManager', '2012-06-05 10:21:39', 'productManager', '2012-06-05 10:21:39', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(6, 0, 1, 0, 6, '1', 'po', '', 0, '合作洽谈的设计和开发', '', 'story', 1, 1, 'draft', '', '', 'planned', '', '', 'productManager', '2012-06-05 10:23:11', 'productManager', '2012-06-05 10:23:11', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(7, 0, 1, 0, 7, '1', 'po', '', 0, '关于我们的设计和开发', '', 'story', 1, 1, 'draft', '', '', 'planned', '', '', 'productManager', '2012-06-05 10:24:19', 'productManager', '2012-06-05 10:24:19', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0');
INSERT INTO `zt_storyspec` (`story`, `version`, `title`, `spec`, `verify`) VALUES
(1, 1, '首页设计和开发', '作为一名本公司的用户,我希望可以在首页看到该公司网站的基本内容,例如最新动态、部分成果展示、联系信息、工商信息等。<br />', '开发并通过验收<br />'),
(2, 1, '新闻中心的设计和开发。', '作为一名本公司的用户,我希望可以在新闻中心看到该公司网站的企业新闻,这样可以通过新闻了解企业的最新动态。<br />', ''),
+7 -7
View File
@@ -585,13 +585,13 @@ INSERT INTO `zt_searchindex` (`id`, `objectType`, `objectID`, `title`, `content`
(40, 'task', 16, ' 21806 21518 26381 21153 30340 35774 35745', ' 21806 21518 26381 21153 30340 35774 35745', '2021-04-28 13:16:15', '2021-04-28 13:16:15'),
(41, 'task', 17, ' 21806 21518 26381 21153 30340 24320 21457', ' 21806 21518 26381 21153 30340 24320 21457', '2021-04-28 13:16:15', '2021-04-28 13:16:15');
INSERT INTO `zt_story` (`id`, `parent`, `product`, `branch`, `module`, `plan`, `source`, `sourceNote`, `fromBug`, `title`, `keywords`, `type`, `pri`, `estimate`, `status`, `subStatus`, `color`, `stage`, `stagedBy`, `mailto`, `openedBy`, `openedDate`, `assignedTo`, `assignedDate`, `lastEditedBy`, `lastEditedDate`, `reviewedBy`, `reviewedDate`, `closedBy`, `closedDate`, `closedReason`, `toBug`, `childStories`, `linkStories`, `duplicateStory`, `version`, `URChanged`, `deleted`) VALUES
(1, 0, 1, 0, 1, '1', 'po', '', 0, '首页设计和开发', '', 'story', 1, 1, 'active', '', '', 'developing', '', '', 'productManager', '2012-06-05 10:09:49', 'productManager', '0000-00-00 00:00:00', 'productManager', '2012-06-05 10:25:19', 'productManager, ', '2012-06-05', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(2, 0, 1, 0, 2, '1', 'po', '', 0, '新闻中心的设计和开发。', '', 'story', 1, 1, 'active', '', '', 'projected', '', '', 'productManager', '2012-06-05 10:16:37', 'productManager', '2012-06-05 10:16:37', 'productManager', '2012-06-05 10:25:33', 'productManager, ', '2012-06-05', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(3, 0, 1, 0, 3, '1', 'po', '', 0, '成果展示的设计和开发', '', 'story', 1, 0, 'active', '', '', 'developing', '', '', 'productManager', '2012-06-05 10:18:10', 'productManager', '2012-06-05 10:18:10', 'productManager', '2012-06-05 10:25:38', 'productManager, ', '2012-06-05', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 2, '0', '0'),
(4, 0, 1, 0, 4, '1', 'po', '', 0, '售后服务的设计和开发', '', 'story', 1, 1, 'active', '', '', 'developed', '', '', 'productManager', '2012-06-05 10:20:16', 'productManager', '2012-06-05 10:20:16', 'productManager', '2012-06-05 10:25:42', 'productManager, ', '2012-06-05', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(5, 0, 1, 0, 5, '1', 'po', '', 0, '诚聘英才的设计和开发', '', 'story', 1, 1, 'draft', '', '', 'planned', '', '', 'productManager', '2012-06-05 10:21:39', 'productManager', '2012-06-05 10:21:39', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(6, 0, 1, 0, 6, '1', 'po', '', 0, '合作洽谈的设计和开发', '', 'story', 1, 1, 'draft', '', '', 'planned', '', '', 'productManager', '2012-06-05 10:23:11', 'productManager', '2012-06-05 10:23:11', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(7, 0, 1, 0, 7, '1', 'po', '', 0, '关于我们的设计和开发', '', 'story', 1, 1, 'draft', '', '', 'planned', '', '', 'productManager', '2012-06-05 10:24:19', 'productManager', '2012-06-05 10:24:19', '', '0000-00-00 00:00:00', '', '0000-00-00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0');
(1, 0, 1, 0, 1, '1', 'po', '', 0, '首页设计和开发', '', 'story', 1, 1, 'active', '', '', 'developing', '', '', 'productManager', '2012-06-05 10:09:49', 'productManager', '0000-00-00 00:00:00', 'productManager', '2012-06-05 10:25:19', 'productManager, ', '2012-06-05 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(2, 0, 1, 0, 2, '1', 'po', '', 0, '新闻中心的设计和开发。', '', 'story', 1, 1, 'active', '', '', 'projected', '', '', 'productManager', '2012-06-05 10:16:37', 'productManager', '2012-06-05 10:16:37', 'productManager', '2012-06-05 10:25:33', 'productManager, ', '2012-06-05 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(3, 0, 1, 0, 3, '1', 'po', '', 0, '成果展示的设计和开发', '', 'story', 1, 0, 'active', '', '', 'developing', '', '', 'productManager', '2012-06-05 10:18:10', 'productManager', '2012-06-05 10:18:10', 'productManager', '2012-06-05 10:25:38', 'productManager, ', '2012-06-05 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 2, '0', '0'),
(4, 0, 1, 0, 4, '1', 'po', '', 0, '售后服务的设计和开发', '', 'story', 1, 1, 'active', '', '', 'developed', '', '', 'productManager', '2012-06-05 10:20:16', 'productManager', '2012-06-05 10:20:16', 'productManager', '2012-06-05 10:25:42', 'productManager, ', '2012-06-05 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(5, 0, 1, 0, 5, '1', 'po', '', 0, '诚聘英才的设计和开发', '', 'story', 1, 1, 'draft', '', '', 'planned', '', '', 'productManager', '2012-06-05 10:21:39', 'productManager', '2012-06-05 10:21:39', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(6, 0, 1, 0, 6, '1', 'po', '', 0, '合作洽谈的设计和开发', '', 'story', 1, 1, 'draft', '', '', 'planned', '', '', 'productManager', '2012-06-05 10:23:11', 'productManager', '2012-06-05 10:23:11', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0'),
(7, 0, 1, 0, 7, '1', 'po', '', 0, '关于我们的设计和开发', '', 'story', 1, 1, 'draft', '', '', 'planned', '', '', 'productManager', '2012-06-05 10:24:19', 'productManager', '2012-06-05 10:24:19', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', '0000-00-00 00:00:00', '', 0, '', '', 0, 1, '0', '0');
INSERT INTO `zt_storyspec` (`story`, `version`, `title`, `spec`, `verify`) VALUES
(1, 1, '首页设计和开发', '作为一名本公司的用户,我希望可以在首页看到该公司网站的基本内容,例如最新动态、部分成果展示、联系信息、工商信息等。<br />', '开发并通过验收<br />'),
(2, 1, '新闻中心的设计和开发。', '作为一名本公司的用户,我希望可以在新闻中心看到该公司网站的企业新闻,这样可以通过新闻了解企业的最新动态。<br />', ''),
+3
View File
@@ -3,3 +3,6 @@ ALTER TABLE `zt_webhook` CHANGE `executions` `executions` text NOT NULL;
ALTER TABLE `zt_projectcase` ADD `count` mediumint(8) unsigned NOT NULL DEFAULT '1' AFTER `case`;
ALTER TABLE `zt_repo` ADD `extra` char(30) COLLATE 'utf8_general_ci' NOT NULL AFTER `desc`;
UPDATE `zt_config` set `value`='program-browse' where `key`='programLink' and `value`='program-pgmbrowse';
UPDATE `zt_config` set `value`='project-browse' where `key`='projectLink' and `value`='program-prjbrowse';
+5
View File
@@ -1 +1,6 @@
ALTER TABLE `zt_project` CHANGE `lifetime` `lifetime` char(30) NOT NULL DEFAULT '';
ALTER TABLE `zt_story` ADD `category` varchar(30) NOT NULL DEFAULT 'feature' AFTER `type`;
ALTER TABLE `zt_testtask` ADD `type` varchar(255) NOT NULL DEFAULT '' AFTER `build`;
ALTER TABLE `zt_testtask` ADD `testreport` mediumint(8) unsigned NOT NULL AFTER `status`;
UPDATE zt_project SET lifetime = '' WHERE lifetime = 'sprint';
+140 -139
View File
@@ -1,26 +1,3 @@
-- DROP TABLE IF EXISTS `zt_searchindex`;
CREATE TABLE IF NOT EXISTS `zt_searchindex` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`objectType` char(20) NOT NULL,
`objectID` mediumint(9) NOT NULL,
`title` text NOT NULL,
`content` text NOT NULL,
`addedDate` datetime NOT NULL,
`editedDate` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `object` (`objectType`,`objectID`),
KEY `addedDate` (`addedDate`),
FULLTEXT KEY `content` (`content`),
FULLTEXT KEY `title` (`title`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_searchdict`;
CREATE TABLE IF NOT EXISTS `zt_searchdict` (
`key` smallint(5) unsigned NOT NULL,
`value` char(3) NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_acl`;
CREATE TABLE IF NOT EXISTS `zt_acl` (
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
@@ -306,18 +283,6 @@ CREATE TABLE IF NOT EXISTS `zt_cron` (
PRIMARY KEY (`id`),
KEY `lastTime` (`lastTime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_lang`;
CREATE TABLE IF NOT EXISTS `zt_lang` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`lang` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL,
`section` varchar(30) NOT NULL,
`key` varchar(60) NOT NULL,
`value` text NOT NULL,
`system` enum('0','1') NOT NULL default '1',
PRIMARY KEY (`id`),
UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_dept`;
CREATE TABLE IF NOT EXISTS `zt_dept` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
@@ -409,6 +374,35 @@ CREATE TABLE IF NOT EXISTS `zt_effort` (
PRIMARY KEY (`id`),
KEY `user` (`user`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_entry`;
CREATE TABLE IF NOT EXISTS `zt_entry` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`account` varchar(30) NOT NULL DEFAULT '',
`code` varchar(20) NOT NULL,
`key` varchar(32) NOT NULL,
`freePasswd` enum('0','1') NOT NULL DEFAULT '0',
`ip` varchar(100) NOT NULL,
`desc` text NOT NULL,
`createdBy` varchar(30) NOT NULL,
`createdDate` datetime NOT NULL,
`calledTime` int(10) unsigned NOT NULL DEFAULT '0',
`editedBy` varchar(30) NOT NULL,
`editedDate` datetime NOT NULL,
`deleted` enum('0', '1') NOT NULL DEFAULT '0',
PRIMARY KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_expect`;
CREATE TABLE IF NOT EXISTS `zt_expect` (
`id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`userID` mediumint(8) NOT NULL,
`project` mediumint(8) NOT NULL DEFAULT 0,
`expect` text NOT NULL,
`progress` text NOT NULL,
`createdBy` char(30) NOT NULL,
`createdDate` date NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_extension`;
CREATE TABLE IF NOT EXISTS `zt_extension` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
@@ -517,6 +511,33 @@ CREATE TABLE IF NOT EXISTS `zt_job` (
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_lang`;
CREATE TABLE IF NOT EXISTS `zt_lang` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`lang` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL,
`section` varchar(30) NOT NULL,
`key` varchar(60) NOT NULL,
`value` text NOT NULL,
`system` enum('0','1') NOT NULL default '1',
PRIMARY KEY (`id`),
UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_log`;
CREATE TABLE IF NOT EXISTS `zt_log` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`objectType` varchar(30) NOT NULL,
`objectID` mediumint(8) unsigned NOT NULL,
`action` mediumint(8) unsigned NOT NULL,
`date` datetime NOT NULL,
`url` varchar(255) NOT NULL,
`contentType` varchar(30) NOT NULL,
`data` text NOT NULL,
`result` text NOT NULL,
PRIMARY KEY `id` (`id`),
KEY `objectType` (`objectType`),
KEY `obejctID` (`objectID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_module`;
CREATE TABLE IF NOT EXISTS `zt_module` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
@@ -676,6 +697,24 @@ CREATE TABLE IF NOT EXISTS `zt_project` (
KEY `acl` (`acl`),
KEY `order` (`order`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_projectcase`;
CREATE TABLE IF NOT EXISTS `zt_projectcase` (
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
`case` mediumint(8) unsigned NOT NULL DEFAULT '0',
`count` mediumint(8) unsigned NOT NULL DEFAULT '1',
`version` smallint(6) NOT NULL DEFAULT '1',
`order` smallint(6) unsigned NOT NULL,
UNIQUE KEY `project` (`project`,`case`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_projectproduct`;
CREATE TABLE IF NOT EXISTS `zt_projectproduct` (
`project` mediumint(8) unsigned NOT NULL,
`product` mediumint(8) unsigned NOT NULL,
`branch` mediumint(8) unsigned NOT NULL,
`plan` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`project`,`product`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_projectspec`;
CREATE TABLE IF NOT EXISTS `zt_projectspec` (
`project` mediumint(8) NOT NULL,
@@ -686,14 +725,6 @@ CREATE TABLE IF NOT EXISTS `zt_projectspec` (
`end` date NOT NULL,
UNIQUE KEY `project` (`project`,`version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_projectproduct`;
CREATE TABLE IF NOT EXISTS `zt_projectproduct` (
`project` mediumint(8) unsigned NOT NULL,
`product` mediumint(8) unsigned NOT NULL,
`branch` mediumint(8) unsigned NOT NULL,
`plan` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`project`,`product`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_projectstory`;
CREATE TABLE IF NOT EXISTS `zt_projectstory` (
`project` mediumint(8) unsigned NOT NULL default '0',
@@ -703,16 +734,23 @@ CREATE TABLE IF NOT EXISTS `zt_projectstory` (
`order` smallint(6) unsigned NOT NULL,
UNIQUE KEY `project` (`project`,`story`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_projectcase`;
CREATE TABLE `zt_projectcase` (
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
`case` mediumint(8) unsigned NOT NULL DEFAULT '0',
`count` mediumint(8) unsigned NOT NULL DEFAULT '1',
`version` smallint(6) NOT NULL DEFAULT '1',
`order` smallint(6) unsigned NOT NULL,
UNIQUE KEY `project` (`project`,`case`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_relation`;
CREATE TABLE IF NOT EXISTS `zt_relation` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`project` mediumint(8) NOT NULL,
`product` mediumint(8) NOT NULL,
`execution` mediumint(8) NOT NULL,
`AType` char(30) NOT NULL,
`AID` mediumint(8) NOT NULL,
`AVersion` char(30) NOT NULL,
`relation` char(30) NOT NULL,
`BType` char(30) NOT NULL,
`BID` mediumint(8) NOT NULL,
`BVersion` char(30) NOT NULL,
`extra` char(30) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `relation` (`relation`,`AType`,`BType`, `AID`, `BID`)
) ENGINE='MyISAM' DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_release`;
CREATE TABLE IF NOT EXISTS `zt_release` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
@@ -793,6 +831,43 @@ CREATE TABLE IF NOT EXISTS `zt_repohistory` (
KEY `repo` (`repo`),
KEY `revision` (`revision`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_score`;
CREATE TABLE IF NOT EXISTS `zt_score` (
`id` bigint(12) unsigned NOT NULL AUTO_INCREMENT,
`account` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL DEFAULT '',
`method` varchar(30) NOT NULL,
`desc` varchar(250) NOT NULL DEFAULT '',
`before` int(11) NOT NULL DEFAULT '0',
`score` int(11) NOT NULL DEFAULT '0',
`after` int(11) NOT NULL DEFAULT '0',
`time` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `account` (`account`),
KEY `model` (`module`),
KEY `method` (`method`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_searchdict`;
CREATE TABLE IF NOT EXISTS `zt_searchdict` (
`key` smallint(5) unsigned NOT NULL,
`value` char(3) NOT NULL,
PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_searchindex`;
CREATE TABLE IF NOT EXISTS `zt_searchindex` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`objectType` char(20) NOT NULL,
`objectID` mediumint(9) NOT NULL,
`title` text NOT NULL,
`content` text NOT NULL,
`addedDate` datetime NOT NULL,
`editedDate` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `object` (`objectType`,`objectID`),
KEY `addedDate` (`addedDate`),
FULLTEXT KEY `content` (`content`),
FULLTEXT KEY `title` (`title`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_stakeholder`;
CREATE TABLE IF NOT EXISTS `zt_stakeholder` (
`id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
@@ -822,6 +897,7 @@ CREATE TABLE IF NOT EXISTS `zt_story` (
`title` varchar(255) NOT NULL,
`keywords` varchar(255) NOT NULL,
`type` varchar(30) NOT NULL default 'story',
`category` varchar(30) NOT NULL default 'feature',
`pri` tinyint(3) unsigned NOT NULL default '3',
`estimate` float unsigned NOT NULL,
`status` enum('','changed','active','draft','closed') NOT NULL default '',
@@ -930,15 +1006,6 @@ CREATE TABLE IF NOT EXISTS `zt_task` (
KEY `parent` (`parent`),
KEY `assignedTo` (`assignedTo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_taskspec`;
CREATE TABLE IF NOT EXISTS `zt_taskspec` (
`task` mediumint(8) NOT NULL,
`version` smallint(6) NOT NULL,
`name` varchar(255) NOT NULL,
`estStarted` date NOT NULL,
`deadline` date NOT NULL,
UNIQUE KEY `task` (`task`,`version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_taskestimate`;
CREATE TABLE IF NOT EXISTS `zt_taskestimate` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
@@ -951,6 +1018,15 @@ CREATE TABLE IF NOT EXISTS `zt_taskestimate` (
PRIMARY KEY (`id`),
KEY `task` (`task`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_taskspec`;
CREATE TABLE IF NOT EXISTS `zt_taskspec` (
`task` mediumint(8) NOT NULL,
`version` smallint(6) NOT NULL,
`name` varchar(255) NOT NULL,
`estStarted` date NOT NULL,
`deadline` date NOT NULL,
UNIQUE KEY `task` (`task`,`version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_team`;
CREATE TABLE IF NOT EXISTS `zt_team` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
@@ -1050,6 +1126,7 @@ CREATE TABLE IF NOT EXISTS `zt_testtask` (
`name` char(90) NOT NULL,
`execution` mediumint(8) unsigned NOT NULL default '0',
`build` char(30) NOT NULL,
`type` varchar(255) NOT NULL DEFAULT '',
`owner` varchar(30) NOT NULL,
`pri` tinyint(3) unsigned NOT NULL default '0',
`begin` date NOT NULL,
@@ -1058,6 +1135,7 @@ CREATE TABLE IF NOT EXISTS `zt_testtask` (
`desc` text NOT NULL,
`report` text NOT NULL,
`status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait',
`testreport` mediumint(8) unsigned NOT NULL,
`auto` varchar(10) NOT NULL DEFAULT 'no',
`subStatus` varchar(30) NOT NULL default '',
`deleted` enum('0','1') NOT NULL default '0',
@@ -1190,35 +1268,6 @@ CREATE TABLE IF NOT EXISTS `zt_userview` (
`sprints` mediumtext NOT NULL,
UNIQUE KEY `account` (`account`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_entry`;
CREATE TABLE IF NOT EXISTS `zt_entry` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`account` varchar(30) NOT NULL DEFAULT '',
`code` varchar(20) NOT NULL,
`key` varchar(32) NOT NULL,
`freePasswd` enum('0','1') NOT NULL DEFAULT '0',
`ip` varchar(100) NOT NULL,
`desc` text NOT NULL,
`createdBy` varchar(30) NOT NULL,
`createdDate` datetime NOT NULL,
`calledTime` int(10) unsigned NOT NULL DEFAULT '0',
`editedBy` varchar(30) NOT NULL,
`editedDate` datetime NOT NULL,
`deleted` enum('0', '1') NOT NULL DEFAULT '0',
PRIMARY KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_expect`;
CREATE TABLE IF NOT EXISTS `zt_expect` (
`id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`userID` mediumint(8) NOT NULL,
`project` mediumint(8) NOT NULL DEFAULT 0,
`expect` text NOT NULL,
`progress` text NOT NULL,
`createdBy` char(30) NOT NULL,
`createdDate` date NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_webhook`;
CREATE TABLE IF NOT EXISTS `zt_webhook` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
@@ -1241,54 +1290,6 @@ CREATE TABLE IF NOT EXISTS `zt_webhook` (
`deleted` enum('0', '1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_log`;
CREATE TABLE IF NOT EXISTS `zt_log` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`objectType` varchar(30) NOT NULL,
`objectID` mediumint(8) unsigned NOT NULL,
`action` mediumint(8) unsigned NOT NULL,
`date` datetime NOT NULL,
`url` varchar(255) NOT NULL,
`contentType` varchar(30) NOT NULL,
`data` text NOT NULL,
`result` text NOT NULL,
PRIMARY KEY `id` (`id`),
KEY `objectType` (`objectType`),
KEY `obejctID` (`objectID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_score`;
CREATE TABLE IF NOT EXISTS `zt_score` (
`id` bigint(12) unsigned NOT NULL AUTO_INCREMENT,
`account` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL DEFAULT '',
`method` varchar(30) NOT NULL,
`desc` varchar(250) NOT NULL DEFAULT '',
`before` int(11) NOT NULL DEFAULT '0',
`score` int(11) NOT NULL DEFAULT '0',
`after` int(11) NOT NULL DEFAULT '0',
`time` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `account` (`account`),
KEY `model` (`module`),
KEY `method` (`method`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_relation`;
CREATE TABLE IF NOT EXISTS `zt_relation` (
`id` int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`project` mediumint(8) NOT NULL,
`product` mediumint(8) NOT NULL,
`execution` mediumint(8) NOT NULL,
`AType` char(30) NOT NULL,
`AID` mediumint(8) NOT NULL,
`AVersion` char(30) NOT NULL,
`relation` char(30) NOT NULL,
`BType` char(30) NOT NULL,
`BID` mediumint(8) NOT NULL,
`BVersion` char(30) NOT NULL,
`extra` char(30) NOT NULL,
UNIQUE KEY `relation` (`relation`,`AType`,`BType`, `AID`, `BID`)
) ENGINE='MyISAM' DEFAULT CHARSET=utf8;
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'),
+2 -2
View File
@@ -292,7 +292,7 @@ class baseHelper
$oversize = strlen($password) % 8;
if($oversize != 0) $password .= str_repeat("\0", 8 - $oversize);
$encrypted = @openssl_encrypt($password, 'DES-CBC', $secret, OPENSSL_ZERO_PADDING);
$encrypted = @openssl_encrypt($password, 'DES-CBC', substr($secret, 0, 8), OPENSSL_ZERO_PADDING);
}
}
if(empty($encrypted)) $encrypted = $password;
@@ -318,7 +318,7 @@ class baseHelper
$secret = $config->encryptSecret;
if(function_exists('mcrypt_decrypt'))
{
$decryptedPassword = @mcrypt_decrypt(MCRYPT_DES, $secret, base64_decode($password), MCRYPT_MODE_CBC);
$decryptedPassword = @mcrypt_decrypt(MCRYPT_DES, substr($secret, 0, 8), base64_decode($password), MCRYPT_MODE_CBC);
}
elseif(function_exists('openssl_decrypt'))
{
+3
View File
@@ -2276,6 +2276,9 @@ class baseRouter
extract($trace[1]);
$log .= ", last called by $file on line $line through function $function.\n";
/* Change absolute path to relative path. */
$log = str_replace($this->basePath, '', $log);
/* 触发错误(Trigger the error) */
trigger_error($log, $exit ? E_USER_ERROR : E_USER_WARNING);
}
+4
View File
@@ -813,6 +813,10 @@ class baseJS
return json_encode($output);
}
/* Convert ' to \'. */
$message = str_replace("\\'", "'", $message);
$message = str_replace("'", "\\'", $message);
return self::start($full) . "alert('" . $message . "')" . self::end() . self::resetForm();
}
+16 -8
View File
@@ -40,6 +40,7 @@ class gitlab
$param->path = ltrim($path, '/');
$param->ref = $revision;
$param->recursive = 0;
if(!empty($this->branch)) $param->ref = $this->branch;
$list = $this->fetch($api, $param);
if(empty($list)) return array();
@@ -257,6 +258,7 @@ class gitlab
$api = "compare";
$params = array('from' => $fromRevision, 'to' => $toRevision, 'straight' => 1);
if($toRevision == 'HEAD' and $this->branch) $params['to'] = $this->branch;
$results = $this->fetch($api, $params);
foreach($results->diffs as $key => $diff)
{
@@ -288,6 +290,7 @@ class gitlab
public function cat($entry, $revision = 'HEAD')
{
if(!scm::checkRevision($revision)) return false;
if($revision == 'HEAD' and $this->branch) $revision = $this->branch;
$file = $this->files($entry, $revision);
return base64_decode($file->content);
}
@@ -309,6 +312,7 @@ class gitlab
$info->path = $entry;
$info->revision = $revision;
$info->root = '';
if($revision == 'HEAD' and $this->branch) $info->revision = $this->branch;
if($entry)
{
@@ -494,13 +498,13 @@ class gitlab
if(!scm::checkRevision($version)) return array();
$api = "commits";
$count = 500;
if(empty($count)) $count = 100;
$params = array();
$params['ref_name'] = $branch;
$params['per_page'] = $count;
$params['all'] = 1;
if($version)
if($version and $version != 'HEAD')
{
$lastCommit = $this->getSingleCommit($version);
if(!isset($lastCommit->committed_date)) return array('commits' => array(), 'files' => array());
@@ -556,19 +560,23 @@ class gitlab
$param->path = urldecode($path);
$param->ref_name = $this->branch;
if($fromRevision) $fromRevision = $this->getSingleCommit($fromRevision);
if($toRevision) $toRevision = $this->getSingleCommit($toRevision);
$fromRevision = ($fromRevision and $fromRevision != 'HEAD') ? $this->getSingleCommit($fromRevision) : '';
$toRevision = ($toRevision and $toRevision != 'HEAD') ? $this->getSingleCommit($toRevision) : '';
if(!$fromRevision) $since = '';
if(!$toRevision) $until = '';
$since = '';
$until = '';
if($fromRevision and $toRevision)
{
$since = min($fromRevision->committed_date, $toRevision->committed_date);
$until = max($fromRevision->committed_date, $toRevision->committed_date);
}
elseif($fromRevision)
{
$since = $fromRevision->committed_date;
}
$param->since = $since;
$param->until = $until;
if($since) $param->since = $since;
if($until) $param->until = $until;
return $this->fetch($api, $param);
}
+23 -12
View File
@@ -8,22 +8,22 @@
* @package spliter
* @version $Id$
* @link http://www.chanzhi.org
* @see http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html
* @see http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html
* @see http://stackoverflow.com/questions/9361303/can-i-get-the-unicode-value-of-a-character-or-vise-versa-with-php
*/
class spliter
{
/**
* Split a utf-8 string into words, computing unicode for every word.
*
* @param string $string
*
* @param string $string
* @access public
* @return array
*/
public function utf8Split($string)
{
$string = strtolower($string);
$i = 0;
$i = 0;
$length = strlen($string);
$dict = array();
$words = '';
@@ -50,12 +50,16 @@ class spliter
$word .= $letter;
$i++;
}
/* Process intigers. */
if(is_numeric($word) and (strpos($word, '.') === false)) $word = "|" . $word . "|";
$word = str_pad(strtolower($word), 5, '_');
$words .= ' ' . $word;
}
elseif($ord == 32)
{
$words .= ' ';
}
continue;
}
@@ -76,7 +80,14 @@ class spliter
}
else
{
$words .= ' ' . $letter;
if(is_numeric(substr($words, strlen($words) - 1, 1)))
{
$words .= ' ' . $letter;
}
else
{
$words .= $letter;
}
}
$i += $offset;
}
@@ -86,13 +97,13 @@ class spliter
}
/**
* Return unicode value for a char.
*
* @param string $c
* Return unicode value for a char.
*
* @param string $c
* @access public
* @return int
*/
public function unicode($c)
public function unicode($c)
{
if(ord($c{0}) >= 0 && ord($c{0}) <= 127) return ord($c{0});
if(ord($c{0}) >= 192 && ord($c{0}) <= 223) return (ord($c{0}) - 192) * 64 + (ord($c{1}) - 128);
@@ -107,8 +118,8 @@ class spliter
/**
* Judge a char is Letter or not.
*
* @param string $letter
*
* @param string $letter
* @access public
* @return bool
*/
+6 -1
View File
@@ -29,6 +29,10 @@ $config->action->objectNameFields['design'] = 'name';
$config->action->objectNameFields['stakeholder'] = 'user';
$config->action->objectNameFields['budget'] = 'name';
$config->action->objectNameFields['job'] = 'name';
$config->action->objectNameFields['team'] = 'name';
$config->action->objectNameFields['opportunity'] = 'name';
$config->action->objectNameFields['trainplan'] = 'name';
$config->action->objectNameFields['gapanalysis'] = 'account';
$config->action->commonImgSize = 870;
@@ -42,4 +46,5 @@ $config->action->majorList['program'] = array('opened', 'edited');
$config->action->majorList['project'] = array('opened', 'edited');
$config->action->majorList['execution'] = array('opened', 'edited');
$config->action->needGetProjectType = 'build,task,bug,case,testcase,caselib,testtask,testsuite,testreport,doc,issue,release,risk,design';
$config->action->needGetProjectType = 'build,task,bug,case,testcase,caselib,testtask,testsuite,testreport,doc,issue,release,risk,design,opportunity,trainplan,gapanalysis';
$config->action->needGetRelateField = ',story,productplan,release,task,build,bug,case,testtask,testreport,doc,doclib,issue,risk,opportunity,trainplan,gapanalysis,team,whitelist,';
+3
View File
@@ -41,6 +41,9 @@ class action extends control
$this->session->set('caseList', $uri, 'qa');
$this->session->set('testtaskList', $uri, 'qa');
$this->session->set('docList', $uri, 'doc');
$this->session->set('opportunityList', $uri, 'project');
$this->session->set('riskList', $uri, 'project');
$this->session->set('trainplanList', $uri, 'project');
/* Get deleted objects. */
$this->app->loadClass('pager', $static = true);
+91 -62
View File
@@ -97,53 +97,61 @@ $lang->action->objectTypes['budget'] = 'Cost Estimate';
$lang->action->objectTypes['entry'] = 'Eintrag';
$lang->action->objectTypes['webhook'] = 'Webhook';
$lang->action->objectTypes['job'] = 'Job';
$lang->action->objectTypes['team'] = 'Team';
$lang->action->objectTypes['whitelist'] = 'Whitelist';
$lang->action->objectTypes['opportunity'] = 'Opportunity';
$lang->action->objectTypes['trainplan'] = 'Trainplan';
$lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* 用来描述操作历史记录。*/
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> von <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> als <strong>$extra</strong> von <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, erstellt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, erstellt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, hinzugefügt durch <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, bearbeitet von <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, bearbeitet von <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> zugewisen an <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, geschlossen von <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, gelöscht von <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> löschte <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> bearbeitete <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, gelöscht von <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, wiederhergestellt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, versteckt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, hinzugefügt von <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, aktiviert von <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, geblockt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, verschoben von <strong>$actor</strong> , ursprünglich "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> hat die Anpassung der Story bestätigt. Das letzte Build ist <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> hat die Anpassung des Falls bestätigt. Das letzte Build ist <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> hat den Bug bestätigt.' . "\n";
$lang->action->desc->frombug = '$date, konvertiert von <strong>$actor</strong>. Die ID war <strong>$extra</strong>.';
$lang->action->desc->started = '$date, gestartet von <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, zurückgestellt von <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, ausgesetzt von <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, aufgenommen von <strong>$actor</strong> und hat <strong>$extra</strong> Stunden aufgebraucht.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> Stunden angepaast.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> Stunden gelöscht.';
$lang->action->desc->canceled = '$date, abgebrochen von <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> festgelegt. Build ist <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> festgelegt. Build ist <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, abgeschlossen von <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, pausiert von <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, überprüft von <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> wurde geändert. Es war "%s" und ist jetzt "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> wurde geändert. Die Differenz ist ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'Dateiname %s wurde geändert zu %s .' . "\n";
$lang->action->desc->linked2bug = '$date Verknüpft mit <strong>$extra</strong> von <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->common = '$date, <strong>$action</strong> von <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> als <strong>$extra</strong> von <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, erstellt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, erstellt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, hinzugefügt durch <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, bearbeitet von <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, bearbeitet von <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> zugewisen an <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, geschlossen von <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, gelöscht von <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> löschte <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> bearbeitete <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, gelöscht von <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, wiederhergestellt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, versteckt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, hinzugefügt von <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, aktiviert von <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, geblockt von <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, verschoben von <strong>$actor</strong> , ursprünglich "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> hat die Anpassung der Story bestätigt. Das letzte Build ist <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> hat die Anpassung des Falls bestätigt. Das letzte Build ist <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> hat den Bug bestätigt.' . "\n";
$lang->action->desc->frombug = '$date, konvertiert von <strong>$actor</strong>. Die ID war <strong>$extra</strong>.';
$lang->action->desc->started = '$date, gestartet von <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, zurückgestellt von <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, ausgesetzt von <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, aufgenommen von <strong>$actor</strong> und hat <strong>$extra</strong> Stunden aufgebraucht.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> Stunden angepaast.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> Stunden gelöscht.';
$lang->action->desc->canceled = '$date, abgebrochen von <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> festgelegt. Build ist <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> festgelegt. Build ist <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, abgeschlossen von <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, pausiert von <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, überprüft von <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> wurde geändert. Es war "%s" und ist jetzt "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> wurde geändert. Die Differenz ist ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'Dateiname %s wurde geändert zu %s .' . "\n";
$lang->action->desc->linked2bug = '$date Verknüpft mit <strong>$extra</strong> von <strong>$actor</strong>';
$lang->action->desc->linked2testtask = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated.' . "\n";
$lang->action->desc->run = '$date, by <strong>$actor</strong> executed.' . "\n";
/* 子任务修改父任务的历史操作记录 */
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
@@ -231,6 +239,8 @@ $lang->action->label->logout = "Logout";
$lang->action->label->deleteestimate = "deleted ";
$lang->action->label->linked2build = "linked ";
$lang->action->label->linked2bug = "linked ";
$lang->action->label->linked2testtask = "linked";
$lang->action->label->unlinkedfromtesttask = "unlinked";
$lang->action->label->linkchildtask = "linked a child task";
$lang->action->label->unlinkchildrentask = "unlinked a child task";
$lang->action->label->linkparenttask = "linked a parent task";
@@ -238,6 +248,8 @@ $lang->action->label->unlinkparenttask = "unlink from parent task";
$lang->action->label->batchcreate = "batch created tasks";
$lang->action->label->createchildren = "create child tasks";
$lang->action->label->managed = "managed";
$lang->action->label->managedteam = "managed";
$lang->action->label->managedwhitelist = "managed";
$lang->action->label->deletechildrentask = "delete children task";
$lang->action->label->createchildrenstory = "create child stories";
$lang->action->label->linkchildstory = "linked a child story";
@@ -247,6 +259,13 @@ $lang->action->label->unlinkparentstory = "unlink from parent story";
$lang->action->label->deletechildrenstory = "delete children story";
$lang->action->label->tracked = 'tracked';
$lang->action->label->hangup = 'hangup';
$lang->action->label->run = 'run';
$lang->action->label->estimated = 'estimated';
$lang->action->label->reviewclosed = 'Review Failed';
$lang->action->label->passreviewed = 'Pass';
$lang->action->label->clarifyreviewed = 'Clarify';
$lang->action->label->commitsummary = 'Commit Summary';
$lang->action->label->updatetrainee = 'Update Trainee';
/* 动态信息按照对象分组 */
$lang->action->dynamicAction = new stdclass;
@@ -289,22 +308,25 @@ $lang->action->dynamicAction->release['changestatus'] = 'Change Release Status';
$lang->action->dynamicAction->release['undeleted'] = 'Restore Release';
$lang->action->dynamicAction->release['hidden'] = 'Hide Release';
$lang->action->dynamicAction->story['opened'] = 'Create Story';
$lang->action->dynamicAction->story['edited'] = 'Edit Story';
$lang->action->dynamicAction->story['activated'] = 'Activate Story';
$lang->action->dynamicAction->story['reviewed'] = 'Review Story';
$lang->action->dynamicAction->story['closed'] = 'Close Story';
$lang->action->dynamicAction->story['assigned'] = 'Assign Story';
$lang->action->dynamicAction->story['changed'] = 'Change Story';
$lang->action->dynamicAction->story['linked2plan'] = 'Link Story to Plan';
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Unlink Story from Plan';
$lang->action->dynamicAction->story['linked2release'] = 'Link Story to Release';
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Unlink Story from Plan';
$lang->action->dynamicAction->story['linked2build'] = 'Link Story to Build';
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Unlink Story from Build';
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Unlink Project';
$lang->action->dynamicAction->story['undeleted'] = 'Restore Story';
$lang->action->dynamicAction->story['hidden'] = 'Hide Story';
$lang->action->dynamicAction->story['opened'] = 'Create Story';
$lang->action->dynamicAction->story['edited'] = 'Edit Story';
$lang->action->dynamicAction->story['activated'] = 'Activate Story';
$lang->action->dynamicAction->story['reviewed'] = 'Review Story';
$lang->action->dynamicAction->story['closed'] = 'Close Story';
$lang->action->dynamicAction->story['assigned'] = 'Assign Story';
$lang->action->dynamicAction->story['changed'] = 'Change Story';
$lang->action->dynamicAction->story['linked2plan'] = 'Link Story to Plan';
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Unlink Story from Plan';
$lang->action->dynamicAction->story['linked2release'] = 'Link Story to Release';
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Unlink Story from Plan';
$lang->action->dynamicAction->story['linked2build'] = 'Link Story to Build';
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Unlink Story from Build';
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Unlink Project';
$lang->action->dynamicAction->story['undeleted'] = 'Restore Story';
$lang->action->dynamicAction->story['hidden'] = 'Hide Story';
$lang->action->dynamicAction->story['linked2execution'] = "Link Story";
$lang->action->dynamicAction->story['unlinkedfromexecution'] = "Unlink Story";
$lang->action->dynamicAction->story['estimated'] = "Estimate $lang->SRCommon";
$lang->action->dynamicAction->execution['opened'] = 'Create ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['edited'] = 'Edit ' . $lang->executionCommon;
@@ -319,6 +341,8 @@ $lang->action->dynamicAction->execution['undeleted'] = 'Restore ' . $lang->execu
$lang->action->dynamicAction->execution['hidden'] = 'Hide ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['moved'] = 'Improt Task';
$lang->action->dynamicAction->team['managedTeam'] = 'Manage Team';
$lang->action->dynamicAction->task['opened'] = 'Create Task';
$lang->action->dynamicAction->task['edited'] = 'Edit Task';
$lang->action->dynamicAction->task['commented'] = 'Task Comment';
@@ -348,8 +372,9 @@ $lang->action->dynamicAction->task['hidden'] = 'Hide Task';
$lang->action->dynamicAction->task['svncommited'] = 'SVN Commit';
$lang->action->dynamicAction->task['gitcommited'] = 'GIT Commit';
$lang->action->dynamicAction->build['opened'] = 'Create Build';
$lang->action->dynamicAction->build['edited'] = 'Edit Build';
$lang->action->dynamicAction->build['opened'] = 'Create Build';
$lang->action->dynamicAction->build['edited'] = 'Edit Build';
$lang->action->dynamicAction->build['deleted'] = 'Delete Build';
$lang->action->dynamicAction->bug['opened'] = 'Report Bug';
$lang->action->dynamicAction->bug['edited'] = 'Edit Bug';
@@ -407,6 +432,7 @@ $lang->action->dynamicAction->caselib['hidden'] = 'Hide Case Lib';
$lang->action->dynamicAction->doclib['created'] = 'Create Doc Library';
$lang->action->dynamicAction->doclib['edited'] = 'Edit Doc Library';
$lang->action->dynamicAction->doclib['deleted'] = 'Delete Doc Library';
$lang->action->dynamicAction->doc['created'] = 'Create Document';
$lang->action->dynamicAction->doc['edited'] = 'Edit Document';
@@ -461,6 +487,9 @@ $lang->action->label->risk = 'Risk|risk|view|riskID=%s';
$lang->action->label->issue = 'Issue|issue|view|issueID=%s';
$lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->opportunity = 'Opportunity|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = 'Trainplan|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = 'Gap Analysis|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
+91 -62
View File
@@ -101,53 +101,61 @@ $lang->action->objectTypes['stakeholder'] = 'Stakeholder';
$lang->action->objectTypes['budget'] = 'Cost Estimate';
$lang->action->objectTypes['entry'] = 'Entry';
$lang->action->objectTypes['webhook'] = 'Webhook';
$lang->action->objectTypes['team'] = 'Team';
$lang->action->objectTypes['whitelist'] = 'Whitelist';
$lang->action->objectTypes['opportunity'] = 'Opportunity';
$lang->action->objectTypes['trainplan'] = 'Trainplan';
$lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* Used to describe operation history. */
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, created by <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, created by <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, added by <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, closed by <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, deleted by <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> deleted <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> edited <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, deleted by <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, restored by <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, hidden by <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, added by <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, activated by <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, moved by <strong>$actor</strong> , which was "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, recorded by <strong>$actor</strong> and it cost <strong>$extra</strong> hours.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> is changed. It was "%s" and it is "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> is changed. The difference is ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n";
$lang->action->desc->linked2bug = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, created by <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, created by <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, added by <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, closed by <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, deleted by <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> deleted <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> edited <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, deleted by <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, restored by <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, hidden by <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, added by <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, activated by <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, moved by <strong>$actor</strong> , which was "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, recorded by <strong>$actor</strong> and it cost <strong>$extra</strong> hours.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> is changed. It was "%s" and it is "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> is changed. The difference is ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n";
$lang->action->desc->linked2bug = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->linked2testtask = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated.' . "\n";
$lang->action->desc->run = '$date, by <strong>$actor</strong> executed.' . "\n";
/* Used to describe the history of operations related to parent-child tasks. */
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
@@ -235,6 +243,8 @@ $lang->action->label->logout = "logout";
$lang->action->label->deleteestimate = "deleted ";
$lang->action->label->linked2build = "linked ";
$lang->action->label->linked2bug = "linked ";
$lang->action->label->linked2testtask = "linked";
$lang->action->label->unlinkedfromtesttask = "unlinked";
$lang->action->label->linkchildtask = "linked a child task";
$lang->action->label->unlinkchildrentask = "unlinked a child task";
$lang->action->label->linkparenttask = "linked a parent task";
@@ -242,6 +252,8 @@ $lang->action->label->unlinkparenttask = "unlink from parent task";
$lang->action->label->batchcreate = "batch created tasks";
$lang->action->label->createchildren = "create child tasks";
$lang->action->label->managed = "managed";
$lang->action->label->managedteam = "managed";
$lang->action->label->managedwhitelist = "managed";
$lang->action->label->deletechildrentask = "delete children task";
$lang->action->label->createchildrenstory = "create child stories";
$lang->action->label->linkchildstory = "linked a child story";
@@ -251,6 +263,13 @@ $lang->action->label->unlinkparentstory = "unlink from parent story";
$lang->action->label->deletechildrenstory = "delete children story";
$lang->action->label->tracked = 'tracked';
$lang->action->label->hangup = 'hangup';
$lang->action->label->run = 'run';
$lang->action->label->estimated = 'estimated';
$lang->action->label->reviewclosed = 'Review Failed';
$lang->action->label->passreviewed = 'Pass';
$lang->action->label->clarifyreviewed = 'Clarify';
$lang->action->label->commitsummary = 'Commit Summary';
$lang->action->label->updatetrainee = 'Update Trainee';
/* Dynamic information is grouped by object. */
$lang->action->dynamicAction = new stdclass;
@@ -293,22 +312,25 @@ $lang->action->dynamicAction->release['changestatus'] = 'Change Release Status';
$lang->action->dynamicAction->release['undeleted'] = 'Restore Release';
$lang->action->dynamicAction->release['hidden'] = 'Hide Release';
$lang->action->dynamicAction->story['opened'] = 'Create Story';
$lang->action->dynamicAction->story['edited'] = 'Edit Story';
$lang->action->dynamicAction->story['activated'] = 'Activate Story';
$lang->action->dynamicAction->story['reviewed'] = 'Review Story';
$lang->action->dynamicAction->story['closed'] = 'Close Story';
$lang->action->dynamicAction->story['assigned'] = 'Assign Story';
$lang->action->dynamicAction->story['changed'] = 'Change Story';
$lang->action->dynamicAction->story['linked2plan'] = 'Link Story to Plan';
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Unlink Story from Plan';
$lang->action->dynamicAction->story['linked2release'] = 'Link Story to Release';
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Unlink Story from Plan';
$lang->action->dynamicAction->story['linked2build'] = 'Link Story to Build';
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Unlink Story from Build';
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Unlink Project';
$lang->action->dynamicAction->story['undeleted'] = 'Restore Story';
$lang->action->dynamicAction->story['hidden'] = 'Hide Story';
$lang->action->dynamicAction->story['opened'] = 'Create Story';
$lang->action->dynamicAction->story['edited'] = 'Edit Story';
$lang->action->dynamicAction->story['activated'] = 'Activate Story';
$lang->action->dynamicAction->story['reviewed'] = 'Review Story';
$lang->action->dynamicAction->story['closed'] = 'Close Story';
$lang->action->dynamicAction->story['assigned'] = 'Assign Story';
$lang->action->dynamicAction->story['changed'] = 'Change Story';
$lang->action->dynamicAction->story['linked2plan'] = 'Link Story to Plan';
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Unlink Story from Plan';
$lang->action->dynamicAction->story['linked2release'] = 'Link Story to Release';
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Unlink Story from Plan';
$lang->action->dynamicAction->story['linked2build'] = 'Link Story to Build';
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Unlink Story from Build';
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Unlink Project';
$lang->action->dynamicAction->story['undeleted'] = 'Restore Story';
$lang->action->dynamicAction->story['hidden'] = 'Hide Story';
$lang->action->dynamicAction->story['linked2execution'] = "Link Story";
$lang->action->dynamicAction->story['unlinkedfromexecution'] = "Unlink Story";
$lang->action->dynamicAction->story['estimated'] = "Estimate $lang->SRCommon";
$lang->action->dynamicAction->execution['opened'] = 'Create ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['edited'] = 'Edit ' . $lang->executionCommon;
@@ -323,6 +345,8 @@ $lang->action->dynamicAction->execution['undeleted'] = 'Restore ' . $lang->execu
$lang->action->dynamicAction->execution['hidden'] = 'Hide ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['moved'] = 'Improt Task';
$lang->action->dynamicAction->team['managedTeam'] = 'Manage Team';
$lang->action->dynamicAction->task['opened'] = 'Create Task';
$lang->action->dynamicAction->task['edited'] = 'Edit Task';
$lang->action->dynamicAction->task['commented'] = 'Task Comment';
@@ -352,8 +376,9 @@ $lang->action->dynamicAction->task['hidden'] = 'Hide Task';
$lang->action->dynamicAction->task['svncommited'] = 'SVN Commit';
$lang->action->dynamicAction->task['gitcommited'] = 'GIT Commit';
$lang->action->dynamicAction->build['opened'] = 'Create Build';
$lang->action->dynamicAction->build['edited'] = 'Edit Build';
$lang->action->dynamicAction->build['opened'] = 'Create Build';
$lang->action->dynamicAction->build['edited'] = 'Edit Build';
$lang->action->dynamicAction->build['deleted'] = 'Delete Build';
$lang->action->dynamicAction->bug['opened'] = 'Report Bug';
$lang->action->dynamicAction->bug['edited'] = 'Edit Bug';
@@ -411,6 +436,7 @@ $lang->action->dynamicAction->caselib['hidden'] = 'Hide Case Lib';
$lang->action->dynamicAction->doclib['created'] = 'Create Doc Library';
$lang->action->dynamicAction->doclib['edited'] = 'Edit Doc Library';
$lang->action->dynamicAction->doclib['deleted'] = 'Delete Doc Library';
$lang->action->dynamicAction->doc['created'] = 'Create Document';
$lang->action->dynamicAction->doc['edited'] = 'Edit Document';
@@ -464,6 +490,9 @@ $lang->action->label->risk = 'Risk|risk|view|riskID=%s';
$lang->action->label->issue = 'Issue|issue|view|issueID=%s';
$lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->opportunity = 'Opportunity|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = 'Trainplan|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = 'Gap Analysis|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
+108 -66
View File
@@ -97,53 +97,61 @@ $lang->action->objectTypes['budget'] = 'Cost Estimate';
$lang->action->objectTypes['entry'] = 'Entrée';
$lang->action->objectTypes['webhook'] = 'Webhook';
$lang->action->objectTypes['job'] = 'Job';
$lang->action->objectTypes['team'] = 'Team';
$lang->action->objectTypes['whitelist'] = 'Whitelist';
$lang->action->objectTypes['opportunity'] = 'Opportunity';
$lang->action->objectTypes['trainplan'] = 'Trainplan';
$lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* 用来描述操作历史记录。*/
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> par <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> en tant que <strong>$extra</strong> par <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, initié par <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, créé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, ajouter par <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, modifié par <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, édité par <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> affecté à <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, fermé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, supprimé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> a supprimé <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> a édité <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, supprimé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, restauré par <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, masqué par <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, ajouté par <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, activé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, bloqué par <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, déplacé par <strong>$actor</strong> , qui était "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> a confirmé la modification de la story. Le dernier build est <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> a confirmé la modification du CasTest. Le dernier build est <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> a confirmé le Bug.' . "\n";
$lang->action->desc->frombug = '$date, converti par <strong>$actor</strong>. Son ID était <strong>$extra</strong>.';
$lang->action->desc->started = '$date, commencé par <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, reprise par <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, ajourné par <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, suspendu par <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, enregistré par <strong>$actor</strong> et son coût est de <strong>$extra</strong> heures.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> a édité son temps estimé.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> a supprimé son estimation de temps.';
$lang->action->desc->canceled = '$date, annulé par <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> a validé, le build est <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> a validé, le build est <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, terminé par <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, mis en pause par <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, verifié par <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> a changé. Il est passé de "%s" à "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> a changé. La différence est ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'Le nom du fichier %s a changé pour %s .' . "\n";
$lang->action->desc->linked2bug = '$date, affecté à <strong>$extra</strong> par <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->common = '$date, <strong>$action</strong> par <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> en tant que <strong>$extra</strong> par <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, initié par <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, créé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, ajouter par <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, modifié par <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, édité par <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> affecté à <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, fermé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, supprimé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> a supprimé <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> a édité <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, supprimé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, restauré par <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, masqué par <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, ajouté par <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, activé par <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, bloqué par <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, déplacé par <strong>$actor</strong> , qui était "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> a confirmé la modification de la story. Le dernier build est <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> a confirmé la modification du CasTest. Le dernier build est <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> a confirmé le Bug.' . "\n";
$lang->action->desc->frombug = '$date, converti par <strong>$actor</strong>. Son ID était <strong>$extra</strong>.';
$lang->action->desc->started = '$date, commencé par <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, reprise par <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, ajourné par <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, suspendu par <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, enregistré par <strong>$actor</strong> et son coût est de <strong>$extra</strong> heures.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> a édité son temps estimé.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> a supprimé son estimation de temps.';
$lang->action->desc->canceled = '$date, annulé par <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> a validé, le build est <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> a validé, le build est <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, terminé par <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, mis en pause par <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, verifié par <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> a changé. Il est passé de "%s" à "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> a changé. La différence est ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'Le nom du fichier %s a changé pour %s .' . "\n";
$lang->action->desc->linked2bug = '$date, affecté à <strong>$extra</strong> par <strong>$actor</strong>';
$lang->action->desc->linked2testtask = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated.' . "\n";
$lang->action->desc->run = '$date, by <strong>$actor</strong> executed.' . "\n";
/* 子任务修改父任务的历史操作记录 */
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> a créé un sous-tâche <strong>$extra</strong>。' . "\n";
@@ -231,6 +239,8 @@ $lang->action->label->logout = "s'est Déconnecté";
$lang->action->label->deleteestimate = "a remis à zéro ";
$lang->action->label->linked2build = "a ajouté au Build ";
$lang->action->label->linked2bug = "a lié au Bug ";
$lang->action->label->linked2testtask = "linked";
$lang->action->label->unlinkedfromtesttask = "unlinked";
$lang->action->label->linkchildtask = "a raccroché à une sous-tâche";
$lang->action->label->unlinkchildrentask = "a décroché la sous-tâche";
$lang->action->label->linkparenttask = "a raccroché à une tâche parent";
@@ -238,6 +248,8 @@ $lang->action->label->unlinkparenttask = "a décroché de la tâche parent"
$lang->action->label->batchcreate = "a créé tâches par lot";
$lang->action->label->createchildren = "a créé sous-tâches par lot";
$lang->action->label->managed = "a managé";
$lang->action->label->managedteam = "managed";
$lang->action->label->managedwhitelist = "managed";
$lang->action->label->deletechildrentask = "a supprimé une sous-tâche";
$lang->action->label->createchildrenstory = "a créé une sous-story";
$lang->action->label->linkchildstory = "a raccroché à une sous-story";
@@ -247,6 +259,13 @@ $lang->action->label->unlinkparentstory = "a décroché de la story parent";
$lang->action->label->deletechildrenstory = "a supprimé la sous-story";
$lang->action->label->tracked = 'tracked';
$lang->action->label->hangup = 'hangup';
$lang->action->label->run = 'run';
$lang->action->label->estimated = 'estimated';
$lang->action->label->reviewclosed = 'Review Failed';
$lang->action->label->passreviewed = 'Pass';
$lang->action->label->clarifyreviewed = 'Clarify';
$lang->action->label->commitsummary = 'Commit Summary';
$lang->action->label->updatetrainee = 'Update Trainee';
/* 动态信息按照对象分组 */
$lang->action->dynamicAction = new stdclass();
@@ -289,22 +308,25 @@ $lang->action->dynamicAction->release['changestatus'] = 'Changer Statut Release'
$lang->action->dynamicAction->release['undeleted'] = 'Restaurer Release';
$lang->action->dynamicAction->release['hidden'] = 'Masquer Release';
$lang->action->dynamicAction->story['opened'] = 'Créer Story';
$lang->action->dynamicAction->story['edited'] = 'Editer Story';
$lang->action->dynamicAction->story['activated'] = 'Activer Story';
$lang->action->dynamicAction->story['reviewed'] = 'Consulter Story';
$lang->action->dynamicAction->story['closed'] = 'Fermer Story';
$lang->action->dynamicAction->story['assigned'] = 'Assigner Story';
$lang->action->dynamicAction->story['changed'] = 'Changer Story';
$lang->action->dynamicAction->story['linked2plan'] = 'Inclure Story au Plan';
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Enlever Story du Plan';
$lang->action->dynamicAction->story['linked2release'] = 'Inclure Story à la Release';
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Enlever Story de la Release';
$lang->action->dynamicAction->story['linked2build'] = 'Ajouter Story au Build';
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Détacher Story du Build';
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Détacher du Project';
$lang->action->dynamicAction->story['undeleted'] = 'Restaurer Story';
$lang->action->dynamicAction->story['hidden'] = 'Masquer Story';
$lang->action->dynamicAction->story['opened'] = 'Créer Story';
$lang->action->dynamicAction->story['edited'] = 'Editer Story';
$lang->action->dynamicAction->story['activated'] = 'Activer Story';
$lang->action->dynamicAction->story['reviewed'] = 'Consulter Story';
$lang->action->dynamicAction->story['closed'] = 'Fermer Story';
$lang->action->dynamicAction->story['assigned'] = 'Assigner Story';
$lang->action->dynamicAction->story['changed'] = 'Changer Story';
$lang->action->dynamicAction->story['linked2plan'] = 'Inclure Story au Plan';
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Enlever Story du Plan';
$lang->action->dynamicAction->story['linked2release'] = 'Inclure Story à la Release';
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Enlever Story de la Release';
$lang->action->dynamicAction->story['linked2build'] = 'Ajouter Story au Build';
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Détacher Story du Build';
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Détacher du Project';
$lang->action->dynamicAction->story['undeleted'] = 'Restaurer Story';
$lang->action->dynamicAction->story['hidden'] = 'Masquer Story';
$lang->action->dynamicAction->story['linked2execution'] = "Link Story";
$lang->action->dynamicAction->story['unlinkedfromexecution'] = "Unlink Story";
$lang->action->dynamicAction->story['estimated'] = "Estimate $lang->SRCommon";
$lang->action->dynamicAction->project['opened'] = 'Créer ' . $lang->executionCommon;
$lang->action->dynamicAction->project['edited'] = 'Editer ' . $lang->executionCommon;
@@ -319,6 +341,21 @@ $lang->action->dynamicAction->project['undeleted'] = 'Restaurer ' . $lang->execu
$lang->action->dynamicAction->project['hidden'] = 'Masquer ' . $lang->executionCommon;
$lang->action->dynamicAction->project['moved'] = 'Déplacer Tâche';
$lang->action->dynamicAction->execution['opened'] = 'Create ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['edited'] = 'Edit ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['deleted'] = 'Delete ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['started'] = 'Start ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['delayed'] = 'Delay ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['suspended'] = 'Suspend ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['activated'] = 'Activate ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['closed'] = 'Close ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['managed'] = 'Manage ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['undeleted'] = 'Restore ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['hidden'] = 'Hide ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['moved'] = 'Improt Task';
$lang->action->dynamicAction->team['managedTeam'] = 'Manage Team';
$lang->action->dynamicAction->task['opened'] = 'Créer Tâche';
$lang->action->dynamicAction->task['edited'] = 'Editer Tâche';
$lang->action->dynamicAction->task['commented'] = 'Commenter Tâche';
@@ -348,8 +385,9 @@ $lang->action->dynamicAction->task['hidden'] = 'Masquer Tâche';
$lang->action->dynamicAction->task['svncommited'] = 'Committer SVN';
$lang->action->dynamicAction->task['gitcommited'] = 'Committer GIT';
$lang->action->dynamicAction->build['opened'] = 'Créer Build';
$lang->action->dynamicAction->build['edited'] = 'Editer Build';
$lang->action->dynamicAction->build['opened'] = 'Créer Build';
$lang->action->dynamicAction->build['edited'] = 'Editer Build';
$lang->action->dynamicAction->build['deleted'] = 'Delete Build';
$lang->action->dynamicAction->bug['opened'] = 'Remonter Bug';
$lang->action->dynamicAction->bug['edited'] = 'Editer Bug';
@@ -407,6 +445,7 @@ $lang->action->dynamicAction->caselib['hidden'] = 'Masqué CasTest Lib';
$lang->action->dynamicAction->doclib['created'] = 'Créer Doc Library';
$lang->action->dynamicAction->doclib['edited'] = 'Editer Doc Library';
$lang->action->dynamicAction->doclib['deleted'] = 'Delete Doc Library';
$lang->action->dynamicAction->doc['created'] = 'Créer Document';
$lang->action->dynamicAction->doc['edited'] = 'Editer Document';
@@ -460,6 +499,9 @@ $lang->action->label->risk = 'Risk|risk|view|riskID=%s';
$lang->action->label->issue = 'Issue|issue|view|issueID=%s';
$lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->opportunity = 'Opportunity|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = 'Trainplan|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = 'Gap Analysis|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
@@ -469,13 +511,13 @@ $lang->action->search->objectTypeList['program'] = 'Program';
$lang->action->search->objectTypeList['project'] = 'Project';
$lang->action->search->objectTypeList['execution'] = 'Execution';
$lang->action->search->objectTypeList['bug'] = 'Bug';
$lang->action->search->objectTypeList['case'] = 'CasTest';
$lang->action->search->objectTypeList['case'] = 'CasTest';
$lang->action->search->objectTypeList['caseresult'] = 'CasTest Result';
$lang->action->search->objectTypeList['stepresult'] = 'CasTest Steps';
$lang->action->search->objectTypeList['story'] = "$lang->SRCommon/$lang->URCommon";
$lang->action->search->objectTypeList['task'] = 'Tâche';
$lang->action->search->objectTypeList['testtask'] = 'Recette';
$lang->action->search->objectTypeList['user'] = 'Utilisateur';
$lang->action->search->objectTypeList['task'] = 'Tâche';
$lang->action->search->objectTypeList['testtask'] = 'Recette';
$lang->action->search->objectTypeList['user'] = 'Utilisateur';
$lang->action->search->objectTypeList['doc'] = 'Doc';
$lang->action->search->objectTypeList['doclib'] = 'Doc Lib';
$lang->action->search->objectTypeList['todo'] = 'Todo';
+96 -67
View File
@@ -97,53 +97,61 @@ $lang->action->objectTypes['budget'] = 'Cost Estimate';
$lang->action->objectTypes['entry'] = 'Entry';
$lang->action->objectTypes['webhook'] = 'Webhook';
$lang->action->objectTypes['job'] = 'Job';
$lang->action->objectTypes['team'] = 'Team';
$lang->action->objectTypes['whitelist'] = 'Whitelist';
$lang->action->objectTypes['opportunity'] = 'Opportunity';
$lang->action->objectTypes['trainplan'] = 'Trainplan';
$lang->action->objectTypes['gapanalysis'] = 'Gap Analysis';
/* Used to describe operation history. */
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> bởi <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> như <strong>$extra</strong> bởi <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, được tạo bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, được tạo bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, thêm bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, được đóng bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, được xóa bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> đã xóa <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> đã sửa <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, được xóa bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, khôi phục bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, ẩn bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, được thêm bởi <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, kích hoạt bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, chuyển bởi <strong>$actor</strong> , cái là "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, ghi nhận bởi <strong>$actor</strong> and it cost <strong>$extra</strong> giờ.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> is changed. It was "%s" and it is "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> is changed. The difference is ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n";
$lang->action->desc->linked2bug = '$date, liên kết tới <strong>$extra</strong> bởi <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->common = '$date, <strong>$action</strong> bởi <strong>$actor</strong>.' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> như <strong>$extra</strong> bởi <strong>$actor</strong>.' . "\n";
$lang->action->desc->opened = '$date, được tạo bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
$lang->action->desc->created = '$date, được tạo bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->added = '$date, thêm bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
$lang->action->desc->closed = '$date, được đóng bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
$lang->action->desc->deleted = '$date, được xóa bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> đã xóa <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->editfile = '$date, <strong>$actor</strong> đã sửa <strong><i>$extra</i></strong>.' . "\n";
$lang->action->desc->erased = '$date, được xóa bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->undeleted = '$date, khôi phục bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->hidden = '$date, ẩn bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->commented = '$date, được thêm bởi <strong>$actor</strong>.' . "\n";
$lang->action->desc->activated = '$date, kích hoạt bởi <strong>$actor</strong> .' . "\n";
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
$lang->action->desc->moved = '$date, chuyển bởi <strong>$actor</strong> , cái là "$extra".' . "\n";
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
$lang->action->desc->recordestimate = '$date, ghi nhận bởi <strong>$actor</strong> and it cost <strong>$extra</strong> giờ.';
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> is changed. It was "%s" and it is "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> is changed. The difference is ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n";
$lang->action->desc->linked2bug = '$date, liên kết tới <strong>$extra</strong> bởi <strong>$actor</strong>';
$lang->action->desc->linked2testtask = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated.' . "\n";
$lang->action->desc->run = '$date, by <strong>$actor</strong> executed.' . "\n";
/* Used to describe the history of operations related to parent-child tasks. */
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
@@ -231,6 +239,8 @@ $lang->action->label->logout = "logout";
$lang->action->label->deleteestimate = "deleted ";
$lang->action->label->linked2build = "linked ";
$lang->action->label->linked2bug = "linked ";
$lang->action->label->linked2testtask = "linked";
$lang->action->label->unlinkedfromtesttask = "unlinked";
$lang->action->label->linkchildtask = "linked a child task";
$lang->action->label->unlinkchildrentask = "hủy liên kết a child task";
$lang->action->label->linkparenttask = "linked a nhiệm vụ cha";
@@ -238,6 +248,8 @@ $lang->action->label->unlinkparenttask = "unlink from nhiệm vụ cha";
$lang->action->label->batchcreate = "batch created tasks";
$lang->action->label->createchildren = "create child tasks";
$lang->action->label->managed = "managed";
$lang->action->label->managedteam = "managed";
$lang->action->label->managedwhitelist = "managed";
$lang->action->label->deletechildrentask = "delete children task";
$lang->action->label->createchildrenstory = "create child stories";
$lang->action->label->linkchildstory = "linked a child story";
@@ -247,6 +259,13 @@ $lang->action->label->unlinkparentstory = "unlink from parent story";
$lang->action->label->deletechildrenstory = "delete children story";
$lang->action->label->tracked = 'tracked';
$lang->action->label->hangup = 'hangup';
$lang->action->label->run = 'run';
$lang->action->label->estimated = 'estimated';
$lang->action->label->reviewclosed = 'Review Failed';
$lang->action->label->passreviewed = 'Pass';
$lang->action->label->clarifyreviewed = 'Clarify';
$lang->action->label->commitsummary = 'Commit Summary';
$lang->action->label->updatetrainee = 'Update Trainee';
/* Dynamic information is grouped by object. */
$lang->action->dynamicAction = new stdclass;
@@ -289,22 +308,25 @@ $lang->action->dynamicAction->release['changestatus'] = 'Thay đổi Tình trạ
$lang->action->dynamicAction->release['undeleted'] = 'Khôi phục phát hành';
$lang->action->dynamicAction->release['hidden'] = 'Ẩn phát hành';
$lang->action->dynamicAction->story['opened'] = 'Tạo câu chuyện';
$lang->action->dynamicAction->story['edited'] = 'Sửa câu chuyện';
$lang->action->dynamicAction->story['activated'] = 'Kích hoạt câu chuyện';
$lang->action->dynamicAction->story['reviewed'] = 'Duyệt câu chuyện';
$lang->action->dynamicAction->story['closed'] = 'Đóng câu chuyện';
$lang->action->dynamicAction->story['assigned'] = 'Bàn giao câu chuyện';
$lang->action->dynamicAction->story['changed'] = 'Thay đổi câu chuyện';
$lang->action->dynamicAction->story['linked2plan'] = 'Liên kết Story to kế hoạch';
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Hủy liên kết Story from kế hoạch';
$lang->action->dynamicAction->story['linked2release'] = 'Liên kết Story to phát hành';
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Hủy liên kết Story from kế hoạch';
$lang->action->dynamicAction->story['linked2build'] = 'Liên kết Story to bản dựng';
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Hủy liên kết Story from bản dựng';
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Hủy liên kết Project';
$lang->action->dynamicAction->story['undeleted'] = 'Khôi phục câu chuyện';
$lang->action->dynamicAction->story['hidden'] = 'Ẩn câu chuyện';
$lang->action->dynamicAction->story['opened'] = 'Tạo câu chuyện';
$lang->action->dynamicAction->story['edited'] = 'Sửa câu chuyện';
$lang->action->dynamicAction->story['activated'] = 'Kích hoạt câu chuyện';
$lang->action->dynamicAction->story['reviewed'] = 'Duyệt câu chuyện';
$lang->action->dynamicAction->story['closed'] = 'Đóng câu chuyện';
$lang->action->dynamicAction->story['assigned'] = 'Bàn giao câu chuyện';
$lang->action->dynamicAction->story['changed'] = 'Thay đổi câu chuyện';
$lang->action->dynamicAction->story['linked2plan'] = 'Liên kết Story to kế hoạch';
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Hủy liên kết Story from kế hoạch';
$lang->action->dynamicAction->story['linked2release'] = 'Liên kết Story to phát hành';
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Hủy liên kết Story from kế hoạch';
$lang->action->dynamicAction->story['linked2build'] = 'Liên kết Story to bản dựng';
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Hủy liên kết Story from bản dựng';
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Hủy liên kết Project';
$lang->action->dynamicAction->story['undeleted'] = 'Khôi phục câu chuyện';
$lang->action->dynamicAction->story['hidden'] = 'Ẩn câu chuyện';
$lang->action->dynamicAction->story['linked2execution'] = "Link Story";
$lang->action->dynamicAction->story['unlinkedfromexecution'] = "Unlink Story";
$lang->action->dynamicAction->story['estimated'] = "Estimate $lang->SRCommon";
$lang->action->dynamicAction->execution['opened'] = 'Tạo ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['edited'] = 'Sửa ' . $lang->executionCommon;
@@ -319,6 +341,8 @@ $lang->action->dynamicAction->execution['undeleted'] = 'Phục hổi ' . $lang->
$lang->action->dynamicAction->execution['hidden'] = 'Ẩn ' . $lang->executionCommon;
$lang->action->dynamicAction->execution['moved'] = 'Nhập nhiệm vụ';
$lang->action->dynamicAction->team['managedTeam'] = 'Manage Team';
$lang->action->dynamicAction->task['opened'] = 'Tạo nhiệm vụ';
$lang->action->dynamicAction->task['edited'] = 'Sửa nhiệm vụ';
$lang->action->dynamicAction->task['commented'] = 'Task nhận xét';
@@ -348,8 +372,9 @@ $lang->action->dynamicAction->task['hidden'] = 'Ẩn nhiệm vụ';
$lang->action->dynamicAction->task['svncommited'] = 'SVN Commit';
$lang->action->dynamicAction->task['gitcommited'] = 'GIT Commit';
$lang->action->dynamicAction->build['opened'] = 'Tạo bản dựng';
$lang->action->dynamicAction->build['edited'] = 'Sửa bản dựng';
$lang->action->dynamicAction->build['opened'] = 'Tạo bản dựng';
$lang->action->dynamicAction->build['edited'] = 'Sửa bản dựng';
$lang->action->dynamicAction->build['deleted'] = 'Delete Build';
$lang->action->dynamicAction->bug['opened'] = 'Báo cáo Bug';
$lang->action->dynamicAction->bug['edited'] = 'Sửa Bug';
@@ -407,6 +432,7 @@ $lang->action->dynamicAction->caselib['hidden'] = 'Ẩn Case Lib';
$lang->action->dynamicAction->doclib['created'] = 'Tạo Doc thư viện';
$lang->action->dynamicAction->doclib['edited'] = 'Sửa Doc thư viện';
$lang->action->dynamicAction->doclib['deleted'] = 'Delete Doc Library';
$lang->action->dynamicAction->doc['created'] = 'Tạo tài liệu';
$lang->action->dynamicAction->doc['edited'] = 'Sửa tài liệu';
@@ -461,22 +487,25 @@ $lang->action->label->risk = 'Risk|risk|view|riskID%s';
$lang->action->label->issue = 'Issue|issue|view|issueID=%s';
$lang->action->label->design = 'Design|design|view|designID=%s';
$lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
$lang->action->label->opportunity = 'Opportunity|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = 'Trainplan|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = 'Gap Analysis|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
$lang->action->search->objectTypeList[''] = '';
$lang->action->search->objectTypeList[''] = '';
$lang->action->search->objectTypeList['product'] = $lang->productCommon;
$lang->action->search->objectTypeList['program'] = 'Program';
$lang->action->search->objectTypeList['project'] = 'Project';
$lang->action->search->objectTypeList['execution'] = 'Execution';
$lang->action->search->objectTypeList['bug'] = 'Bug';
$lang->action->search->objectTypeList['case'] = 'Tình huống';
$lang->action->search->objectTypeList['case'] = 'Tình huống';
$lang->action->search->objectTypeList['caseresult'] = 'Kết quả tình huống';
$lang->action->search->objectTypeList['stepresult'] = 'Các bước tình huống';
$lang->action->search->objectTypeList['story'] = "$lang->SRCommon/$lang->URCommon";
$lang->action->search->objectTypeList['task'] = 'Nhiệm vụ';
$lang->action->search->objectTypeList['testtask'] = 'Yêu cầu';
$lang->action->search->objectTypeList['user'] = 'Người dùng';
$lang->action->search->objectTypeList['task'] = 'Nhiệm vụ';
$lang->action->search->objectTypeList['testtask'] = 'Yêu cầu';
$lang->action->search->objectTypeList['user'] = 'Người dùng';
$lang->action->search->objectTypeList['doc'] = 'Tài liệu';
$lang->action->search->objectTypeList['doclib'] = 'Doc Lib';
$lang->action->search->objectTypeList['todo'] = 'Việc làm';
+91 -62
View File
@@ -101,53 +101,61 @@ $lang->action->objectTypes['stakeholder'] = '干系人';
$lang->action->objectTypes['budget'] = '费用估算';
$lang->action->objectTypes['entry'] = '应用';
$lang->action->objectTypes['webhook'] = 'Webhook';
$lang->action->objectTypes['team'] = '团队';
$lang->action->objectTypes['whitelist'] = '白名单';
$lang->action->objectTypes['opportunity'] = '机会';
$lang->action->objectTypes['trainplan'] = '培训计划';
$lang->action->objectTypes['gapanalysis'] = '能力差距分析';
/* 用来描述操作历史记录。*/
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->opened = '$date, 由 <strong>$actor</strong> 创建。' . "\n";
$lang->action->desc->openedbysystem = '$date, 由系统创建。' . "\n";
$lang->action->desc->created = '$date, 由 <strong>$actor</strong> 创建。' . "\n";
$lang->action->desc->added = '$date, 由 <strong>$actor</strong> 添加。' . "\n";
$lang->action->desc->changed = '$date, 由 <strong>$actor</strong> 变更。' . "\n";
$lang->action->desc->edited = '$date, 由 <strong>$actor</strong> 编辑。' . "\n";
$lang->action->desc->assigned = '$date, 由 <strong>$actor</strong> 指派给 <strong>$extra</strong>。' . "\n";
$lang->action->desc->closed = '$date, 由 <strong>$actor</strong> 关闭。' . "\n";
$lang->action->desc->closedbysystem = '$date, 由系统关闭。' . "\n";
$lang->action->desc->deleted = '$date, 由 <strong>$actor</strong> 删除。' . "\n";
$lang->action->desc->deletedfile = '$date, 由 <strong>$actor</strong> 删除了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->editfile = '$date, 由 <strong>$actor</strong> 编辑了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->erased = '$date, 由 <strong>$actor</strong> 删除。' . "\n";
$lang->action->desc->undeleted = '$date, 由 <strong>$actor</strong> 还原。' . "\n";
$lang->action->desc->hidden = '$date, 由 <strong>$actor</strong> 隐藏。' . "\n";
$lang->action->desc->commented = '$date, 由 <strong>$actor</strong> 添加备注。' . "\n";
$lang->action->desc->activated = '$date, 由 <strong>$actor</strong> 激活。' . "\n";
$lang->action->desc->blocked = '$date, 由 <strong>$actor</strong> 阻塞。' . "\n";
$lang->action->desc->moved = '$date, 由 <strong>$actor</strong> 移动,之前为 "$extra"。' . "\n";
$lang->action->desc->confirmed = '$date, 由 <strong>$actor</strong> 确认' . $lang->SRCommon . '变动,最新版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->caseconfirmed = '$date, 由 <strong>$actor</strong> 确认用例变动,最新版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->bugconfirmed = '$date, 由 <strong>$actor</strong> 确认Bug。' . "\n";
$lang->action->desc->frombug = '$date, 由 <strong>$actor</strong> Bug转化而来,Bug编号为 <strong>$extra</strong>。';
$lang->action->desc->started = '$date, 由 <strong>$actor</strong> 启动。' . "\n";
$lang->action->desc->restarted = '$date, 由 <strong>$actor</strong> 继续。' . "\n";
$lang->action->desc->delayed = '$date, 由 <strong>$actor</strong> 延期。' . "\n";
$lang->action->desc->suspended = '$date, 由 <strong>$actor</strong> 挂起。' . "\n";
$lang->action->desc->recordestimate = '$date, 由 <strong>$actor</strong> 记录工时,消耗 <strong>$extra</strong> 小时。';
$lang->action->desc->editestimate = '$date, 由 <strong>$actor</strong> 编辑工时。';
$lang->action->desc->deleteestimate = '$date, 由 <strong>$actor</strong> 删除工时。';
$lang->action->desc->canceled = '$date, 由 <strong>$actor</strong> 取消。' . "\n";
$lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暂停。' . "\n";
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 验收。' . "\n";
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,旧值为 "%s",新值为 "%s"。<br />' . "\n";
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,区别为:' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n";
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 关联到版本 <strong>$extra</strong>';
$lang->action->desc->resolved = '$date, 由 <strong>$actor</strong> 解决。' . "\n";
$lang->action->desc->managed = '$date, 由 <strong>$actor</strong> 维护。' . "\n";
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->opened = '$date, 由 <strong>$actor</strong> 创建。' . "\n";
$lang->action->desc->openedbysystem = '$date, 由系统创建。' . "\n";
$lang->action->desc->created = '$date, 由 <strong>$actor</strong> 创建。' . "\n";
$lang->action->desc->added = '$date, 由 <strong>$actor</strong> 添加。' . "\n";
$lang->action->desc->changed = '$date, 由 <strong>$actor</strong> 变更。' . "\n";
$lang->action->desc->edited = '$date, 由 <strong>$actor</strong> 编辑。' . "\n";
$lang->action->desc->assigned = '$date, 由 <strong>$actor</strong> 指派给 <strong>$extra</strong>。' . "\n";
$lang->action->desc->closed = '$date, 由 <strong>$actor</strong> 关闭。' . "\n";
$lang->action->desc->closedbysystem = '$date, 由系统关闭。' . "\n";
$lang->action->desc->deleted = '$date, 由 <strong>$actor</strong> 删除。' . "\n";
$lang->action->desc->deletedfile = '$date, 由 <strong>$actor</strong> 删除了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->editfile = '$date, 由 <strong>$actor</strong> 编辑了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->erased = '$date, 由 <strong>$actor</strong> 删除。' . "\n";
$lang->action->desc->undeleted = '$date, 由 <strong>$actor</strong> 还原。' . "\n";
$lang->action->desc->hidden = '$date, 由 <strong>$actor</strong> 隐藏。' . "\n";
$lang->action->desc->commented = '$date, 由 <strong>$actor</strong> 添加备注。' . "\n";
$lang->action->desc->activated = '$date, 由 <strong>$actor</strong> 激活。' . "\n";
$lang->action->desc->blocked = '$date, 由 <strong>$actor</strong> 阻塞。' . "\n";
$lang->action->desc->moved = '$date, 由 <strong>$actor</strong> 移动,之前为 "$extra"。' . "\n";
$lang->action->desc->confirmed = '$date, 由 <strong>$actor</strong> 确认' . $lang->SRCommon . '变动,最新版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->caseconfirmed = '$date, 由 <strong>$actor</strong> 确认用例变动,最新版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->bugconfirmed = '$date, 由 <strong>$actor</strong> 确认Bug。' . "\n";
$lang->action->desc->frombug = '$date, 由 <strong>$actor</strong> Bug转化而来,Bug编号为 <strong>$extra</strong>。';
$lang->action->desc->started = '$date, 由 <strong>$actor</strong> 启动。' . "\n";
$lang->action->desc->restarted = '$date, 由 <strong>$actor</strong> 继续。' . "\n";
$lang->action->desc->delayed = '$date, 由 <strong>$actor</strong> 延期。' . "\n";
$lang->action->desc->suspended = '$date, 由 <strong>$actor</strong> 挂起。' . "\n";
$lang->action->desc->recordestimate = '$date, 由 <strong>$actor</strong> 记录工时,消耗 <strong>$extra</strong> 小时。';
$lang->action->desc->editestimate = '$date, 由 <strong>$actor</strong> 编辑工时。';
$lang->action->desc->deleteestimate = '$date, 由 <strong>$actor</strong> 删除工时。';
$lang->action->desc->canceled = '$date, 由 <strong>$actor</strong> 取消。' . "\n";
$lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暂停。' . "\n";
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 验收。' . "\n";
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,旧值为 "%s",新值为 "%s"。<br />' . "\n";
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,区别为:' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n";
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 关联到版本 <strong>$extra</strong>';
$lang->action->desc->linked2testtask = '$date 由 <strong>$actor</strong> 关联到测试单 <strong>$extra</strong>';
$lang->action->desc->resolved = '$date, 由 <strong>$actor</strong> 解决。' . "\n";
$lang->action->desc->managed = '$date, 由 <strong>$actor</strong> 维护。' . "\n";
$lang->action->desc->estimated = '$date, 由 <strong>$actor</strong> 估算。' . "\n";
$lang->action->desc->run = '$date, 由 <strong>$actor</strong> 执行。' . "\n";
/* 用来描述和父子任务相关的操作历史记录。*/
$lang->action->desc->createchildren = '$date, 由 <strong>$actor</strong> 创建子任务 <strong>$extra</strong>。' . "\n";
@@ -235,6 +243,8 @@ $lang->action->label->logout = "退出登录";
$lang->action->label->deleteestimate = "删除了工时";
$lang->action->label->linked2build = "关联了";
$lang->action->label->linked2bug = "关联了";
$lang->action->label->linked2testtask = "关联了";
$lang->action->label->unlinkedfromtesttask = "移除了";
$lang->action->label->linkchildtask = "关联子任务";
$lang->action->label->unlinkchildrentask = "取消关联子任务";
$lang->action->label->linkparenttask = "关联到父任务";
@@ -242,6 +252,8 @@ $lang->action->label->unlinkparenttask = "从父任务取消关联";
$lang->action->label->batchcreate = "批量创建任务";
$lang->action->label->createchildren = "创建子任务";
$lang->action->label->managed = "维护";
$lang->action->label->managedteam = "维护了";
$lang->action->label->managedwhitelist = "维护了";
$lang->action->label->deletechildrentask = "删除子任务";
$lang->action->label->createchildrenstory = "创建子需求";
$lang->action->label->linkchildstory = "关联子需求";
@@ -251,6 +263,13 @@ $lang->action->label->unlinkparentstory = "从父需求取消关联";
$lang->action->label->deletechildrenstory = "删除子需求";
$lang->action->label->tracked = '跟踪了';
$lang->action->label->hangup = '挂起了';
$lang->action->label->run = '执行了';
$lang->action->label->estimated = '估算了';
$lang->action->label->reviewclosed = '评审失败';
$lang->action->label->passreviewed = '确认通过';
$lang->action->label->clarifyreviewed = '有待明确';
$lang->action->label->commitsummary = '提交培训总结';
$lang->action->label->updatetrainee = '更新培训人员';
/* 动态信息按照对象分组 */
$lang->action->dynamicAction = new stdclass();
@@ -293,22 +312,25 @@ $lang->action->dynamicAction->release['changestatus'] = '修改发布状态';
$lang->action->dynamicAction->release['undeleted'] = '还原发布';
$lang->action->dynamicAction->release['hidden'] = '隐藏发布';
$lang->action->dynamicAction->story['opened'] = "创建{$lang->SRCommon}";
$lang->action->dynamicAction->story['edited'] = "编辑{$lang->SRCommon}";
$lang->action->dynamicAction->story['activated'] = "激活{$lang->SRCommon}";
$lang->action->dynamicAction->story['reviewed'] = "评审{$lang->SRCommon}";
$lang->action->dynamicAction->story['closed'] = "关闭{$lang->SRCommon}";
$lang->action->dynamicAction->story['assigned'] = "指派{$lang->SRCommon}";
$lang->action->dynamicAction->story['changed'] = "变更{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2plan'] = "{$lang->SRCommon}关联计划";
$lang->action->dynamicAction->story['unlinkedfromplan'] = "计划移除{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2release'] = "{$lang->SRCommon}关联发布";
$lang->action->dynamicAction->story['unlinkedfromrelease'] = "发布移除{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2build'] = "{$lang->SRCommon}关联版本";
$lang->action->dynamicAction->story['unlinkedfrombuild'] = "版本移除{$lang->SRCommon}";
$lang->action->dynamicAction->story['unlinkedfromproject'] = '移除项目';
$lang->action->dynamicAction->story['undeleted'] = "还原{$lang->SRCommon}";
$lang->action->dynamicAction->story['hidden'] = "隐藏{$lang->SRCommon}";
$lang->action->dynamicAction->story['opened'] = "创建{$lang->SRCommon}";
$lang->action->dynamicAction->story['edited'] = "编辑{$lang->SRCommon}";
$lang->action->dynamicAction->story['activated'] = "激活{$lang->SRCommon}";
$lang->action->dynamicAction->story['reviewed'] = "评审{$lang->SRCommon}";
$lang->action->dynamicAction->story['closed'] = "关闭{$lang->SRCommon}";
$lang->action->dynamicAction->story['assigned'] = "指派{$lang->SRCommon}";
$lang->action->dynamicAction->story['changed'] = "变更{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2plan'] = "{$lang->SRCommon}关联计划";
$lang->action->dynamicAction->story['unlinkedfromplan'] = "计划移除{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2release'] = "{$lang->SRCommon}关联发布";
$lang->action->dynamicAction->story['unlinkedfromrelease'] = "发布移除{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2build'] = "{$lang->SRCommon}关联版本";
$lang->action->dynamicAction->story['unlinkedfrombuild'] = "版本移除{$lang->SRCommon}";
$lang->action->dynamicAction->story['unlinkedfromproject'] = '移除项目';
$lang->action->dynamicAction->story['undeleted'] = "还原{$lang->SRCommon}";
$lang->action->dynamicAction->story['hidden'] = "隐藏{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2execution'] = "关联$lang->SRCommon";
$lang->action->dynamicAction->story['unlinkedfromexecution'] = "移除$lang->SRCommon";
$lang->action->dynamicAction->story['estimated'] = "估算$lang->SRCommon";
$lang->action->dynamicAction->execution['opened'] = '创建' . $lang->executionCommon;
$lang->action->dynamicAction->execution['edited'] = '编辑' . $lang->executionCommon;
@@ -323,6 +345,8 @@ $lang->action->dynamicAction->execution['undeleted'] = '还原' . $lang->executi
$lang->action->dynamicAction->execution['hidden'] = '隐藏' . $lang->executionCommon;
$lang->action->dynamicAction->execution['moved'] = '导入任务';
$lang->action->dynamicAction->team['managedTeam'] = '维护团队';
$lang->action->dynamicAction->task['opened'] = '创建任务';
$lang->action->dynamicAction->task['edited'] = '编辑任务';
$lang->action->dynamicAction->task['commented'] = '备注任务';
@@ -352,8 +376,9 @@ $lang->action->dynamicAction->task['hidden'] = '隐藏任务';
$lang->action->dynamicAction->task['svncommited'] = 'SVN提交';
$lang->action->dynamicAction->task['gitcommited'] = 'GIT提交';
$lang->action->dynamicAction->build['opened'] = '创建版本';
$lang->action->dynamicAction->build['edited'] = '编辑版本';
$lang->action->dynamicAction->build['opened'] = '创建版本';
$lang->action->dynamicAction->build['edited'] = '编辑版本';
$lang->action->dynamicAction->build['deleted'] = '删除版本';
$lang->action->dynamicAction->bug['opened'] = '创建Bug';
$lang->action->dynamicAction->bug['edited'] = '编辑Bug';
@@ -411,6 +436,7 @@ $lang->action->dynamicAction->caselib['hidden'] = '隐藏用例库';
$lang->action->dynamicAction->doclib['created'] = '创建文档库';
$lang->action->dynamicAction->doclib['edited'] = '编辑文档库';
$lang->action->dynamicAction->doclib['deleted'] = '删除文档库';
$lang->action->dynamicAction->doc['created'] = '创建文档';
$lang->action->dynamicAction->doc['edited'] = '编辑文档';
@@ -464,6 +490,9 @@ $lang->action->label->risk = '风险|risk|view|riskID=%s';
$lang->action->label->issue = '问题|issue|view|issueID=%s';
$lang->action->label->design = '设计|design|view|designID=%s';
$lang->action->label->stakeholder = '干系人|stakeholder|view|userID=%s';
$lang->action->label->opportunity = '机会|opportunity|view|opportunityID=%s';
$lang->action->label->trainplan = '培训计划|trainplan|view|trainplanID=%s';
$lang->action->label->gapanalysis = '能力差距分析|gapanalysis|view|gapanalysisID=%s';
/* Object type. */
$lang->action->search = new stdclass();
+78 -62
View File
@@ -101,53 +101,58 @@ $lang->action->objectTypes['stakeholder'] = '干係人';
$lang->action->objectTypes['budget'] = '費用估算';
$lang->action->objectTypes['entry'] = '應用';
$lang->action->objectTypes['webhook'] = 'Webhook';
$lang->action->objectTypes['team'] = '團隊';
$lang->action->objectTypes['whitelist'] = '白名單';
/* 用來描述操作歷史記錄。*/
$lang->action->desc = new stdclass();
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->opened = '$date, 由 <strong>$actor</strong> 創建。' . "\n";
$lang->action->desc->openedbysystem = '$date, 由系統創建。' . "\n";
$lang->action->desc->created = '$date, 由 <strong>$actor</strong> 創建。' . "\n";
$lang->action->desc->added = '$date, 由 <strong>$actor</strong> 添加。' . "\n";
$lang->action->desc->changed = '$date, 由 <strong>$actor</strong> 變更。' . "\n";
$lang->action->desc->edited = '$date, 由 <strong>$actor</strong> 編輯。' . "\n";
$lang->action->desc->assigned = '$date, 由 <strong>$actor</strong> 指派給 <strong>$extra</strong>。' . "\n";
$lang->action->desc->closed = '$date, 由 <strong>$actor</strong> 關閉。' . "\n";
$lang->action->desc->closedbysystem = '$date, 由系統關閉。' . "\n";
$lang->action->desc->deleted = '$date, 由 <strong>$actor</strong> 刪除。' . "\n";
$lang->action->desc->deletedfile = '$date, 由 <strong>$actor</strong> 刪除了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->editfile = '$date, 由 <strong>$actor</strong> 編輯了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->erased = '$date, 由 <strong>$actor</strong> 刪除。' . "\n";
$lang->action->desc->undeleted = '$date, 由 <strong>$actor</strong> 還原。' . "\n";
$lang->action->desc->hidden = '$date, 由 <strong>$actor</strong> 隱藏。' . "\n";
$lang->action->desc->commented = '$date, 由 <strong>$actor</strong> 添加備註。' . "\n";
$lang->action->desc->activated = '$date, 由 <strong>$actor</strong> 激活。' . "\n";
$lang->action->desc->blocked = '$date, 由 <strong>$actor</strong> 阻塞。' . "\n";
$lang->action->desc->moved = '$date, 由 <strong>$actor</strong> 移動,之前為 "$extra"。' . "\n";
$lang->action->desc->confirmed = '$date, 由 <strong>$actor</strong> 確認' . $lang->SRCommon . '變動,最新版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->caseconfirmed = '$date, 由 <strong>$actor</strong> 確認用例變動,最新版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->bugconfirmed = '$date, 由 <strong>$actor</strong> 確認Bug。' . "\n";
$lang->action->desc->frombug = '$date, 由 <strong>$actor</strong> Bug轉化而來,Bug編號為 <strong>$extra</strong>。';
$lang->action->desc->started = '$date, 由 <strong>$actor</strong> 啟動。' . "\n";
$lang->action->desc->restarted = '$date, 由 <strong>$actor</strong> 繼續。' . "\n";
$lang->action->desc->delayed = '$date, 由 <strong>$actor</strong> 延期。' . "\n";
$lang->action->desc->suspended = '$date, 由 <strong>$actor</strong> 掛起。' . "\n";
$lang->action->desc->recordestimate = '$date, 由 <strong>$actor</strong> 記錄工時,消耗 <strong>$extra</strong> 小時。';
$lang->action->desc->editestimate = '$date, 由 <strong>$actor</strong> 編輯工時。';
$lang->action->desc->deleteestimate = '$date, 由 <strong>$actor</strong> 刪除工時。';
$lang->action->desc->canceled = '$date, 由 <strong>$actor</strong> 取消。' . "\n";
$lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暫停。' . "\n";
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 驗收。' . "\n";
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,舊值為 "%s",新值為 "%s"。<br />' . "\n";
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,區別為:' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = '將檔案名 %s 改為 %s 。' . "\n";
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 關聯到版本 <strong>$extra</strong>';
$lang->action->desc->resolved = '$date, 由 <strong>$actor</strong> 解決。' . "\n";
$lang->action->desc->managed = '$date, 由 <strong>$actor</strong> 維護。' . "\n";
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>。' . "\n";
$lang->action->desc->opened = '$date, 由 <strong>$actor</strong> 創建。' . "\n";
$lang->action->desc->openedbysystem = '$date, 由系統創建。' . "\n";
$lang->action->desc->created = '$date, 由 <strong>$actor</strong> 創建。' . "\n";
$lang->action->desc->added = '$date, 由 <strong>$actor</strong> 添加。' . "\n";
$lang->action->desc->changed = '$date, 由 <strong>$actor</strong> 變更。' . "\n";
$lang->action->desc->edited = '$date, 由 <strong>$actor</strong> 編輯。' . "\n";
$lang->action->desc->assigned = '$date, 由 <strong>$actor</strong> 指派給 <strong>$extra</strong>。' . "\n";
$lang->action->desc->closed = '$date, 由 <strong>$actor</strong> 關閉。' . "\n";
$lang->action->desc->closedbysystem = '$date, 由系統關閉。' . "\n";
$lang->action->desc->deleted = '$date, 由 <strong>$actor</strong> 刪除。' . "\n";
$lang->action->desc->deletedfile = '$date, 由 <strong>$actor</strong> 刪除了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->editfile = '$date, 由 <strong>$actor</strong> 編輯了附件:<strong><i>$extra</i></strong>。' . "\n";
$lang->action->desc->erased = '$date, 由 <strong>$actor</strong> 刪除。' . "\n";
$lang->action->desc->undeleted = '$date, 由 <strong>$actor</strong> 還原。' . "\n";
$lang->action->desc->hidden = '$date, 由 <strong>$actor</strong> 隱藏。' . "\n";
$lang->action->desc->commented = '$date, 由 <strong>$actor</strong> 添加備註。' . "\n";
$lang->action->desc->activated = '$date, 由 <strong>$actor</strong> 激活。' . "\n";
$lang->action->desc->blocked = '$date, 由 <strong>$actor</strong> 阻塞。' . "\n";
$lang->action->desc->moved = '$date, 由 <strong>$actor</strong> 移動,之前為 "$extra"。' . "\n";
$lang->action->desc->confirmed = '$date, 由 <strong>$actor</strong> 確認' . $lang->SRCommon . '變動,最新版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->caseconfirmed = '$date, 由 <strong>$actor</strong> 確認用例變動,最新版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->bugconfirmed = '$date, 由 <strong>$actor</strong> 確認Bug。' . "\n";
$lang->action->desc->frombug = '$date, 由 <strong>$actor</strong> Bug轉化而來,Bug編號為 <strong>$extra</strong>。';
$lang->action->desc->started = '$date, 由 <strong>$actor</strong> 啟動。' . "\n";
$lang->action->desc->restarted = '$date, 由 <strong>$actor</strong> 繼續。' . "\n";
$lang->action->desc->delayed = '$date, 由 <strong>$actor</strong> 延期。' . "\n";
$lang->action->desc->suspended = '$date, 由 <strong>$actor</strong> 掛起。' . "\n";
$lang->action->desc->recordestimate = '$date, 由 <strong>$actor</strong> 記錄工時,消耗 <strong>$extra</strong> 小時。';
$lang->action->desc->editestimate = '$date, 由 <strong>$actor</strong> 編輯工時。';
$lang->action->desc->deleteestimate = '$date, 由 <strong>$actor</strong> 刪除工時。';
$lang->action->desc->canceled = '$date, 由 <strong>$actor</strong> 取消。' . "\n";
$lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暫停。' . "\n";
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 驗收。' . "\n";
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,舊值為 "%s",新值為 "%s"。<br />' . "\n";
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,區別為:' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = '將檔案名 %s 改為 %s 。' . "\n";
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 關聯到版本 <strong>$extra</strong>';
$lang->action->desc->linked2testtask = '$date 由 <strong>$actor</strong> 關聯到測試單 <strong>$extra</strong>';
$lang->action->desc->resolved = '$date, 由 <strong>$actor</strong> 解決。' . "\n";
$lang->action->desc->managed = '$date, 由 <strong>$actor</strong> 維護。' . "\n";
$lang->action->desc->estimated = '$date, 由 <strong>$actor</strong> 估算。' . "\n";
$lang->action->desc->run = '$date, 由 <strong>$actor</strong> 執行。' . "\n";
/* 用來描述和父子任務相關的操作歷史記錄。*/
$lang->action->desc->createchildren = '$date, 由 <strong>$actor</strong> 創建子任務 <strong>$extra</strong>。' . "\n";
@@ -235,6 +240,8 @@ $lang->action->label->logout = "退出登錄";
$lang->action->label->deleteestimate = "刪除了工時";
$lang->action->label->linked2build = "關聯了";
$lang->action->label->linked2bug = "關聯了";
$lang->action->label->linked2testtask = "關聯了";
$lang->action->label->unlinkedfromtesttask = "移除了";
$lang->action->label->linkchildtask = "關聯子任務";
$lang->action->label->unlinkchildrentask = "取消關聯子任務";
$lang->action->label->linkparenttask = "關聯到父任務";
@@ -242,6 +249,8 @@ $lang->action->label->unlinkparenttask = "從父任務取消關聯";
$lang->action->label->batchcreate = "批量創建任務";
$lang->action->label->createchildren = "創建子任務";
$lang->action->label->managed = "維護";
$lang->action->label->managedteam = "維護了";
$lang->action->label->managedwhitelist = "維護了";
$lang->action->label->deletechildrentask = "刪除子任務";
$lang->action->label->createchildrenstory = "創建子需求";
$lang->action->label->linkchildstory = "關聯子需求";
@@ -251,6 +260,8 @@ $lang->action->label->unlinkparentstory = "從父需求取消關聯";
$lang->action->label->deletechildrenstory = "刪除子需求";
$lang->action->label->tracked = '跟蹤了';
$lang->action->label->hangup = '掛起了';
$lang->action->label->run = '執行了';
$lang->action->label->estimated = '估算了';
/* 動態信息按照對象分組 */
$lang->action->dynamicAction = new stdclass();
@@ -293,22 +304,25 @@ $lang->action->dynamicAction->release['changestatus'] = '修改發佈狀態';
$lang->action->dynamicAction->release['undeleted'] = '還原發佈';
$lang->action->dynamicAction->release['hidden'] = '隱藏發佈';
$lang->action->dynamicAction->story['opened'] = "創建{$lang->SRCommon}";
$lang->action->dynamicAction->story['edited'] = "編輯{$lang->SRCommon}";
$lang->action->dynamicAction->story['activated'] = "激活{$lang->SRCommon}";
$lang->action->dynamicAction->story['reviewed'] = "評審{$lang->SRCommon}";
$lang->action->dynamicAction->story['closed'] = "關閉{$lang->SRCommon}";
$lang->action->dynamicAction->story['assigned'] = "指派{$lang->SRCommon}";
$lang->action->dynamicAction->story['changed'] = "變更{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2plan'] = "{$lang->SRCommon}關聯計劃";
$lang->action->dynamicAction->story['unlinkedfromplan'] = "計劃移除{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2release'] = "{$lang->SRCommon}關聯發佈";
$lang->action->dynamicAction->story['unlinkedfromrelease'] = "發佈移除{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2build'] = "{$lang->SRCommon}關聯版本";
$lang->action->dynamicAction->story['unlinkedfrombuild'] = "版本移除{$lang->SRCommon}";
$lang->action->dynamicAction->story['unlinkedfromproject'] = '移除項目';
$lang->action->dynamicAction->story['undeleted'] = "還原{$lang->SRCommon}";
$lang->action->dynamicAction->story['hidden'] = "隱藏{$lang->SRCommon}";
$lang->action->dynamicAction->story['opened'] = "創建{$lang->SRCommon}";
$lang->action->dynamicAction->story['edited'] = "編輯{$lang->SRCommon}";
$lang->action->dynamicAction->story['activated'] = "激活{$lang->SRCommon}";
$lang->action->dynamicAction->story['reviewed'] = "評審{$lang->SRCommon}";
$lang->action->dynamicAction->story['closed'] = "關閉{$lang->SRCommon}";
$lang->action->dynamicAction->story['assigned'] = "指派{$lang->SRCommon}";
$lang->action->dynamicAction->story['changed'] = "變更{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2plan'] = "{$lang->SRCommon}關聯計劃";
$lang->action->dynamicAction->story['unlinkedfromplan'] = "計劃移除{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2release'] = "{$lang->SRCommon}關聯發佈";
$lang->action->dynamicAction->story['unlinkedfromrelease'] = "發佈移除{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2build'] = "{$lang->SRCommon}關聯版本";
$lang->action->dynamicAction->story['unlinkedfrombuild'] = "版本移除{$lang->SRCommon}";
$lang->action->dynamicAction->story['unlinkedfromproject'] = '移除項目';
$lang->action->dynamicAction->story['undeleted'] = "還原{$lang->SRCommon}";
$lang->action->dynamicAction->story['hidden'] = "隱藏{$lang->SRCommon}";
$lang->action->dynamicAction->story['linked2execution'] = "關聯$lang->SRCommon";
$lang->action->dynamicAction->story['unlinkedfromexecution'] = "移除$lang->SRCommon";
$lang->action->dynamicAction->story['estimated'] = "估算$lang->SRCommon";
$lang->action->dynamicAction->execution['opened'] = '創建' . $lang->executionCommon;
$lang->action->dynamicAction->execution['edited'] = '編輯' . $lang->executionCommon;
@@ -352,8 +366,9 @@ $lang->action->dynamicAction->task['hidden'] = '隱藏任務';
$lang->action->dynamicAction->task['svncommited'] = 'SVN提交';
$lang->action->dynamicAction->task['gitcommited'] = 'GIT提交';
$lang->action->dynamicAction->build['opened'] = '創建版本';
$lang->action->dynamicAction->build['edited'] = '編輯版本';
$lang->action->dynamicAction->build['opened'] = '創建版本';
$lang->action->dynamicAction->build['edited'] = '編輯版本';
$lang->action->dynamicAction->build['deleted'] = '刪除版本';
$lang->action->dynamicAction->bug['opened'] = '創建Bug';
$lang->action->dynamicAction->bug['edited'] = '編輯Bug';
@@ -411,6 +426,7 @@ $lang->action->dynamicAction->caselib['hidden'] = '隱藏用例庫';
$lang->action->dynamicAction->doclib['created'] = '創建文檔庫';
$lang->action->dynamicAction->doclib['edited'] = '編輯文檔庫';
$lang->action->dynamicAction->doclib['deleted'] = '刪除文檔庫';
$lang->action->dynamicAction->doc['created'] = '創建文檔';
$lang->action->dynamicAction->doc['edited'] = '編輯文檔';
+83 -13
View File
@@ -60,10 +60,11 @@ class actionModel extends model
}
/* Get product project and execution for this object. */
$relation = $this->getRelatedFields($action->objectType, $objectID);
$action->product = $relation['product'];
$action->project = ($actionType == 'unlinkedfromproject' or $actionType == 'linked2project') ? (int)$extra : (int)$relation['project'];
$action->execution = ($actionType == 'unlinkedfromexecution' or $actionType == 'linked2execution') ? (int)$extra : (int)$relation['execution'];
$relation = $this->getRelatedFields($action->objectType, $objectID, $actionType, $extra);
$action->product = (int)$relation['product'];
$action->project = (int)$relation['project'];
$action->execution = (int)$relation['execution'];
$this->dao->insert(TABLE_ACTION)->data($action)->autoCheck()->exec();
$actionID = $this->dbh->lastInsertID();
@@ -142,10 +143,12 @@ class actionModel extends model
*
* @param string $objectType
* @param int $objectID
* @param string $actionType
* @param string $extra
* @access public
* @return array
*/
public function getRelatedFields($objectType, $objectID)
public function getRelatedFields($objectType, $objectID, $actionType = '', $extra = '')
{
$emptyRecord = array('product' => ',0,', 'project' => 0, 'execution' => 0);
@@ -177,7 +180,7 @@ class actionModel extends model
}
/* Only process these object types. */
if(strpos(',story,productplan,release,task,build,bug,case,testtask,doc,issue,risk,', ",{$objectType},") !== false)
if(strpos($this->config->action->needGetRelateField, ",{$objectType},") !== false)
{
if(!isset($this->config->objectTables[$objectType])) return $emptyRecord;
@@ -185,14 +188,22 @@ class actionModel extends model
$fields = '*';
if(strpos('story, productplan, case', $objectType) !== false) $fields = 'product';
if(strpos('build, bug, testtask, doc', $objectType) !== false) $fields = 'product, project, execution';
if(strpos('case, repo', $objectType) !== false) $fields = 'execution';
if($objectType == 'release') $fields = 'product, build';
if($objectType == 'task') $fields = 'project, execution, story';
$record = $this->dao->select($fields)->from($this->config->objectTables[$objectType])->where('id')->eq($objectID)->fetch();
if($objectType != 'team') $record = $this->dao->select($fields)->from($this->config->objectTables[$objectType])->where('id')->eq($objectID)->fetch();
/* Process story, release and task. */
if($objectType == 'story') $record->project = $this->dao->select('project')->from(TABLE_PROJECTSTORY)->where('story')->eq($objectID)->orderBy('project_desc')->limit(1)->fetch('project');
if($objectType == 'story') $record->project = $this->dao->select('project')->from(TABLE_PROJECTSTORY)->where('story')->eq($objectID)->orderBy('project_desc')->limit(1)->fetch('project');
if($objectType == 'release') $record->project = $this->dao->select('project')->from(TABLE_BUILD)->where('id')->eq($record->build)->fetch('project');
if($objectType == 'team')
{
$team = $this->dao->select('type')->from(TABLE_PROJECT)->where('id')->eq($objectID)->fetch();
$type = $team->type == 'project' ? 'project' : 'execution';
$record = new stdclass();
$record->$type = $objectID;
}
if($objectType == 'task')
{
if($record->story != 0)
@@ -207,6 +218,32 @@ class actionModel extends model
}
}
if($objectType == 'story' and ($actionType == 'linked2build' or $actionType == 'unlinkedfrombuild'))
{
$build = $this->dao->select('project,execution')->from(TABLE_BUILD)->where('id')->eq((int)$extra)->fetch();
$record->project = $build->project;
$record->execution = $build->execution;
}
if($objectType == 'story' and $actionType == 'estimated')
{
$record->project = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq((int)$extra)->fetch('project');
$record->execution = (int)$extra;
}
if($objectType == 'case' and (strpos(',linked2testtask,unlinkedfromtesttask,assigned,run,', ',' . $actionType . ',') !== false) and (int)$extra)
{
$testtask = $this->dao->select('project,execution')->from(TABLE_TESTTASK)->where('id')->eq((int)$extra)->fetch();
$record->project = $testtask->project;
$record->execution = $testtask->execution;
}
if($objectType == 'whitelist' and $extra == 'product') $record->product = $objectID;
if($objectType == 'whitelist' and $extra == 'project') $record->project = $objectID;
if($objectType == 'whitelist' and ($extra == 'sprint' or $extra == 'stage')) $record->execution = $objectID;
if($actionType == 'unlinkedfromproject' or $actionType == 'linked2project') $record->project = (int)$extra ;
if($actionType == 'unlinkedfromexecution' or $actionType == 'linked2execution') $record->execution = (int)$extra;
if($record)
{
$record = (array)$record;
@@ -597,7 +634,11 @@ class actionModel extends model
*/
if(empty($desc))
{
if(isset($this->lang->$objectType) && isset($this->lang->$objectType->action->$actionType))
if($action->objectType == 'story' and $action->action == 'reviewed' and strpos($action->extra, ',') !== false)
{
$desc = $this->lang->$objectType->action->rejectreviewed;
}
elseif(isset($this->lang->$objectType) && isset($this->lang->$objectType->action->$actionType))
{
$desc = $this->lang->$objectType->action->$actionType;
}
@@ -638,14 +679,23 @@ class actionModel extends model
/* Fix bug #741. */
if(isset($desc['extra'])) $desc['extra'] = $this->lang->$objectType->{$desc['extra']};
$actionDesc = '';
if(isset($desc['extra'][$extra]))
{
echo str_replace('$extra', $desc['extra'][$extra], $desc['main']);
$actionDesc = str_replace('$extra', $desc['extra'][$extra], $desc['main']);
}
else
{
echo str_replace('$extra', $action->extra, $desc['main']);
$actionDesc = str_replace('$extra', $action->extra, $desc['main']);
}
if($action->objectType == 'story' and $action->action = 'reviewed' and strpos($action->extra, ',') !== false)
{
list($extra, $reason) = explode(',', $extra);
$desc['reason'] = $this->lang->$objectType->{$desc['reason']};
$actionDesc = str_replace(array('$extra', '$reason'), array($desc['extra'][$extra], $desc['reason'][$reason]), $desc['main']);
}
echo $actionDesc;
}
else
{
@@ -701,7 +751,7 @@ class actionModel extends model
if(is_numeric($projectID)) $executions = $this->loadModel('execution')->getPairs($projectID);
$this->loadModel('doc');
$libs = $this->doc->getLibs('all');
$libs = $this->doc->getLibs('includeDeleted');
$docs = $this->doc->getPrivDocs(array_keys($libs), 0, 'all');
$actionCondition = $this->getActionCondition();
@@ -904,7 +954,7 @@ class actionModel extends model
}
elseif($objectType == 'story')
{
$objectInfo = $this->dao->select('id,title,type')->from($table)->where('id')->in($objectIds)->fetchAll();
$objectInfo = $this->dao->select('id,title,type')->from($table)->where('id')->in($objectIds)->fetchAll();
foreach($objectInfo as $object)
{
$objectName[$object->id] = $object->title;
@@ -912,6 +962,19 @@ class actionModel extends model
}
$objectProject = array();
}
elseif($objectType == 'team')
{
$objectInfo = $this->dao->select('id,team,type')->from(TABLE_PROJECT)
->where('id')->in($objectIds)
->fetchAll();
$objectProject = array();
foreach($objectInfo as $object)
{
$objectName[$object->id] = $object->team;
if($object->type == 'project') $objectProject[$object->id] = $object->id;
}
}
else
{
$objectName = $this->dao->select("id, $field AS name")->from($table)->where('id')->in($objectIds)->fetchPairs();
@@ -989,6 +1052,13 @@ class actionModel extends model
$action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->objectID), '', '', $projectID);
$action->objectLabel = $objectLabel;
}
elseif($action->objectType == 'team')
{
$action->objectLink = '';
if($action->project) $action->objectLink = helper::createLink('project', 'manageMembers', 'projectID=' . $action->project);
if($action->execution) $action->objectLink = helper::createLink('execution', 'team', 'executionID=' . $action->execution);
$action->objectLabel = zget($this->lang->action->objectTypes, $action->objectLabel);
}
else
{
$action->objectLink = '';
+1 -1
View File
@@ -1094,7 +1094,7 @@ class block extends control
}
/* Get bugs. */
$bugs = $this->dao->select("project, status, count(status) as totalBugs, count(status = 'active' or null) as activeBugs, count(resolvedDate like '{$yesterday}%' or null) as yesterdayResolved")->from(TABLE_BUG)
$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)
->andWhere('deleted')->eq(0)
->groupBy('project')
+1 -1
View File
@@ -34,7 +34,7 @@
<?php
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
$productViewLink = $this->createLink('product', 'browse', "productID={$testtask->product}");
$buildViewLink = $this->createLink('build', 'view', "buildID={$testtask->execution}");
$buildViewLink = $this->createLink('build', 'view', "buildID={$testtask->build}");
$testtaskViewLink = $this->createLink('testtask', 'view', "testtaskID={$testtask->id}");
?>
<tr class='text-center' <?php echo $appid?>>
+18 -17
View File
@@ -12,9 +12,9 @@
class branch extends control
{
/**
* Manage branch
*
* @param int $productID
* Manage branch
*
* @param int $productID
* @access public
* @return void
*/
@@ -24,7 +24,8 @@ class branch extends control
if($_POST)
{
$this->branch->manage($productID);
$newBranches = $this->branch->manage($productID);
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'idList' => $newBranches));
die(js::reload('parent'));
}
@@ -40,7 +41,7 @@ class branch extends control
/**
* Sort branch.
*
*
* @access public
* @return void
*/
@@ -51,12 +52,12 @@ class branch extends control
/**
* Ajax get drop menu.
*
* @param int $productID
*
* @param int $productID
* @param int $branch
* @param string $module
* @param string $method
* @param string $extra
* @param string $module
* @param string $method
* @param string $extra
* @access public
* @return void
*/
@@ -77,10 +78,10 @@ class branch extends control
}
/**
* Delete branch
*
* @param int $branchID
* @param string $confirm
* Delete branch
*
* @param int $branchID
* @param string $confirm
* @access public
* @return void
*/
@@ -100,9 +101,9 @@ class branch extends control
/**
* Ajax get branches.
*
* @param int $productID
* @param int $oldBranch
*
* @param int $productID
* @param int $oldBranch
* @access public
* @return void
*/
+7 -2
View File
@@ -98,7 +98,8 @@ class branchModel extends model
public function manage($productID)
{
$oldBranches = $this->getPairs($productID, 'noempty');
$data = fixer::input('post')->get();
$data = fixer::input('post')->get();
if(isset($data->branch))
{
foreach($data->branch as $branchID => $branch)
@@ -106,13 +107,17 @@ class branchModel extends model
if($oldBranches[$branchID] != $branch) $this->dao->update(TABLE_BRANCH)->set('name')->eq($branch)->where('id')->eq($branchID)->exec();
}
}
$branches = array();
foreach($data->newbranch as $i => $branch)
{
if(empty($branch)) continue;
$this->dao->insert(TABLE_BRANCH)->set('name')->eq($branch)->set('product')->eq($productID)->set('`order`')->eq(count($data->branch) + $i + 1)->exec();
$branches[] = $this->dao->lastInsertId();
}
return dao::isError();
if(dao::isError()) return false;
return $branches;
}
/**
+11
View File
@@ -385,6 +385,9 @@ class bug extends control
$this->executeHooks($bugID);
/* Return bug id when call the API. */
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $bugID));
/* If link from no head then reload. */
if(isonlybody()) $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
@@ -613,6 +616,13 @@ class bug extends control
{
$actions = $this->bug->batchCreate($productID, $branch);
/* Return bug id list when call the API. */
if($this->viewType == 'json')
{
$bugIDList = array_keys($actions);
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'idList' => $bugIDList));
}
setcookie('bugModule', 0, 0, $this->config->webRoot, '', $this->config->cookieSecure, false);
die(js::locate($this->createLink('bug', 'browse', "productID={$productID}&branch=$branch&browseType=unclosed&param=0&orderBy=id_desc"), 'parent'));
}
@@ -878,6 +888,7 @@ class bug extends control
$this->view->product = $product;
$this->view->productName = $this->products[$productID];
$this->view->plans = $this->loadModel('productplan')->getPairs($productID, $bug->branch);
$this->view->projects = array(0 => '') + $this->product->getProjectPairsByProduct($productID, $bug->branch);
$this->view->moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'bug', $startModuleID = 0, $bug->branch);
$this->view->currentModuleID = $currentModuleID;
$this->view->executions = array(0 => '') + $this->product->getExecutionPairsByProduct($bug->product, $bug->branch ? "0,{$bug->branch}" : 0, 'id_desc', $projectID);
+1 -1
View File
@@ -550,7 +550,7 @@ function notice()
var branch = $('#branch').val();
if(typeof(branch) == 'undefined') branch = 0;
var link = createLink('release', 'create', 'productID=' + $('#product').val() + '&branch=' + branch);
link += config.requestType == 'GET' ? '&onlybody=yes' : '?onlybody=yes';
if(config.onlybody != 'yes') link += config.requestType == 'GET' ? '&onlybody=yes' : '?onlybody=yes';
html += '<a href="' + link + '" data-toggle="modal" data-type="iframe" style="padding-right:5px">' + createBuild + '</a> ';
html += '<a href="javascript:loadProductBuilds(' + $('#product').val() + ')">' + refresh + '</a>';
}
+6 -5
View File
@@ -1,7 +1,7 @@
$(function()
{
$('.main-actions-holder').css('height', '0px');
var $xuanAction = "<div class='xuancard-actions fixed'>";
var xuanAction = "<div class='xuancard-actions fixed'>";
$('.main-col div.main-actions .btn-toolbar a').each(function(){
var $that = $(this);
@@ -14,7 +14,7 @@ $(function()
if(href.indexOf('createCase') >= 0 || href.indexOf('toStory') >= 0 || href.indexOf('create') >= 0 || href.indexOf('delete') >= 0) return true;
if($that.hasClass('iframe'))
if($that.hasClass('iframe'))
{
url = href;
target = '';
@@ -25,10 +25,11 @@ $(function()
target = " target='_blank'";
}
$xuanAction += "<a href='" + url + "'" + title + target + btnClass + '>' + action + "</a>";
xuanAction += "<a href='" + url + "'" + title + target + btnClass + '>' + action + "</a>";
});
$xuanAction += '</div>';
$('#footer').replaceWith($xuanAction);
xuanAction += '</div>';
$('body').append(xuanAction);
$('.xuancard-actions a.iframe').modalTrigger();
})
+1 -1
View File
@@ -18,7 +18,7 @@ $lang->bug->productplan = 'Plan';
$lang->bug->module = 'Modul';
$lang->bug->moduleAB = 'Modul';
$lang->bug->project = 'Project';
$lang->bug->execution = $lang->executionCommon;
$lang->bug->execution = $lang->execution->common;
$lang->bug->story = 'Story';
$lang->bug->storyVersion = 'Story Version';
$lang->bug->color = 'Farbe des Titels';
+1 -1
View File
@@ -18,7 +18,7 @@ $lang->bug->productplan = 'Plan';
$lang->bug->module = 'Module';
$lang->bug->moduleAB = 'Module';
$lang->bug->project = 'Project';
$lang->bug->execution = $lang->executionCommon;
$lang->bug->execution = $lang->execution->common;
$lang->bug->story = 'Story';
$lang->bug->storyVersion = 'Story Version';
$lang->bug->color = 'Color';
+1 -1
View File
@@ -18,7 +18,7 @@ $lang->bug->productplan = 'Plan';
$lang->bug->module = 'Module';
$lang->bug->moduleAB = 'Module';
$lang->bug->project = 'Project';
$lang->bug->execution = $lang->executionCommon;
$lang->bug->execution = $lang->execution->common;
$lang->bug->story = 'Story';
$lang->bug->storyVersion = 'Version Story';
$lang->bug->color = 'Couleur';
+1 -1
View File
@@ -18,7 +18,7 @@ $lang->bug->productplan = 'Kế hoạch';
$lang->bug->module = 'Module';
$lang->bug->moduleAB = 'Module';
$lang->bug->project = 'Project';
$lang->bug->execution = $lang->executionCommon;
$lang->bug->execution = $lang->execution->common;
$lang->bug->story = 'Câu chuyện';
$lang->bug->storyVersion = 'Phiên bản câu chuyện';
$lang->bug->color = 'Màu';
+1 -1
View File
@@ -18,7 +18,7 @@ $lang->bug->productplan = '所属' . '计划';
$lang->bug->module = '所属模块';
$lang->bug->moduleAB = '模块';
$lang->bug->project = '所属项目';
$lang->bug->execution = '所属' . $lang->executionCommon;
$lang->bug->execution = '所属' . $lang->execution->common;
$lang->bug->story = "相关需求";
$lang->bug->storyVersion = "{$lang->SRCommon}版本";
$lang->bug->color = '标题颜色';
+1
View File
@@ -160,6 +160,7 @@ $lang->bug->createBuild = '創建';
/* legend列表。*/
$lang->bug->legendBasicInfo = '基本信息';
$lang->bug->legendAttatch = '附件';
$lang->bug->legendPRJExecStoryTask = "項目/" . $lang->executionCommon . "/{$lang->SRCommon}/任務";
$lang->bug->legendExecStoryTask = $lang->executionCommon . "/{$lang->SRCommon}/任務";
$lang->bug->lblTypeAndSeverity = '類型/嚴重程度';
$lang->bug->lblSystemBrowserAndHardware = '系統/瀏覽器';
+3 -2
View File
@@ -161,7 +161,7 @@ class bugModel extends model
$bug->openedBy = $this->app->user->account;
$bug->openedDate = $now;
$bug->product = (int)$productID;
$bug->branch = (int)$data->branches[$i];
$bug->branch = isset($data->branches) ? (int)$data->branches[$i] : 0;
$bug->module = (int)$data->modules[$i];
$bug->execution = (int)$data->executions[$i];
$bug->openedBuild = implode(',', $data->openedBuilds[$i]);
@@ -627,6 +627,7 @@ class bugModel extends model
->checkIF($bug->resolvedBy, 'resolution', 'notempty')
->checkIF($bug->closedBy, 'resolution', 'notempty')
->checkIF($bug->resolution == 'duplicate', 'duplicateBug', 'notempty')
->checkIF($bug->resolution == 'fixed', 'resolvedBuild','notempty')
->where('id')->eq((int)$bugID)
->exec();
@@ -2646,7 +2647,7 @@ class bugModel extends model
$class .= ' c-user';
$title = "title='" . zget($users, $bug->resolvedBy) . "'";
}
if($id == 'deadline' && isset($bug->delay)) $class .= ' delayed';
if($id == 'deadline' && isset($bug->delay) && $bug->status == 'active') $class .= ' delayed';
if(strpos(',type,execution,story,plan,task,openedBuild,', ",{$id},") !== false) $class .= ' text-ellipsis';
echo "<td class='" . $class . "' $title>";
+7 -1
View File
@@ -172,9 +172,15 @@ js::set('systemMode' , $config->systemMode);
</table>
</div>
<div class='detail'>
<div class='detail-title'><?php echo $lang->bug->legendExecStoryTask;?></div>
<div class='detail-title'><?php echo $config->systemMode == 'class' ? $lang->bug->legendExecStoryTask : $lang->bug->legendPRJExecStoryTask;?></div>
<table class='table table-form'>
<tbody>
<?php if($config->systemMode == 'new'):?>
<tr>
<th class='w-85px'><?php echo $lang->bug->project;?></th>
<td><span id='projectBox'><?php echo html::select('project', $projects, $bug->project, "class='form-control chosen' onchange='loadProductExecutions($bug->product, this.value)'");?></span></td>
</tr>
<?php endif;?>
<tr>
<th class='w-85px'><?php echo $lang->bug->execution;?></th>
<td><span id='executionIdBox'><?php echo html::select('execution', $executions, $bug->execution, "class='form-control chosen' onchange='loadExecutionRelated(this.value)'");?></span></td>
+10 -1
View File
@@ -37,6 +37,7 @@ class build extends control
$this->executeHooks($buildID);
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $buildID));
if(isonlybody()) $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'callback' => "parent.loadExecutionBuilds($executionID)")); // Code for task #5126.
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('build', 'view', "buildID=$buildID")));
}
@@ -252,6 +253,14 @@ class build extends control
$this->view->type = $type;
$this->view->bugPager = $bugPager;
$this->view->branchName = $build->productType == 'normal' ? '' : $this->loadModel('branch')->getById($build->branch);
if($this->app->getViewType() == 'json')
{
unset($this->view->storyPager);
unset($this->view->generatedBugPager);
unset($this->view->bugPager);
}
$this->display();
}
@@ -384,7 +393,7 @@ class build extends control
$html .= html::a("javascript:loadExecutionBuilds($executionID)", $this->lang->refresh);
die($html);
}
die(html::select('build', $builds, $build, "class='form-control'"));
die(html::select('build', array('') + $builds, $build, "class='form-control' onchange='loadTestReports(this.value)'"));
}
if($varName == 'dropdownList')
{
+8
View File
@@ -42,6 +42,14 @@ class caselib extends control
$this->send($response);
}
$this->loadModel('action')->create('caselib', $libID, 'opened');
/* Return lib id when call the API. */
if($this->viewType == 'json')
{
$response['id'] = $libID;
$this->send($response);
}
$response['locate'] = $this->createLink('caselib', 'browse', "libID=$libID");
$this->send($response);
}
+5 -3
View File
@@ -182,10 +182,10 @@ $lang->project->homeMenu->browse = array('link' => ($config->systemMode == 'new'
/* Scrum menu. */
$lang->scrum->menu = new stdclass();
$lang->scrum->menu->index = array('link' => "{$lang->dashboard}|project|index|project=%s");
$lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|status=all&projectID=%s");
$lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|status=all&projectID=%s", 'exclude' => 'execution-testreport');
$lang->scrum->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s", 'subModule' => 'projectstory,tree', 'alias' => 'story,track');
$lang->scrum->menu->doc = array('link' => "{$lang->doc->common}|doc|objectLibs|type=project&objectID=%s", 'subModule' => 'doc');
$lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport');
$lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport,execution', 'alias' => 'bug,testtask,testcase,testreport', 'exclude' => 'execution-create,execution-batchedit');
$lang->scrum->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo');
$lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s");
$lang->scrum->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease');
@@ -498,8 +498,10 @@ $lang->navGroup->milestone = 'project';
$lang->navGroup->execution = 'execution';
$lang->navGroup->task = 'execution';
$lang->navGroup->build = 'execution';
$lang->navGroup->team = 'execution';
$lang->navGroup->doc = 'doc';
$lang->navGroup->doc = 'doc';
$lang->navGroup->doclib = 'doc';
$lang->navGroup->report = 'report';
+32 -23
View File
@@ -1399,16 +1399,19 @@ EOD;
if(strtolower($key) == 'editedby') continue;
if(strtolower($key) == 'editeddate') continue;
if(strtolower($key) == 'uid') continue;
if(strtolower($key) == 'finisheddate' && $value == '') continue;
if(strtolower($key) == 'canceleddate' && $value == '') continue;
if(strtolower($key) == 'closeddate' && $value == '') continue;
if(strtolower($key) == 'finisheddate' && $value == '') continue;
if(strtolower($key) == 'canceleddate' && $value == '') continue;
if(strtolower($key) == 'hangupeddate' && $value == '') continue;
if(strtolower($key) == 'lastcheckeddate' && $value == '') continue;
if(strtolower($key) == 'activateddate' && $value == '') continue;
if(strtolower($key) == 'closeddate' && $value == '') continue;
if(isset($old->$key) and $value != stripslashes($old->$key))
{
$diff = '';
if(substr_count($value, "\n") > 1 or
substr_count($old->$key, "\n") > 1 or
strpos('name,title,desc,spec,steps,content,digest,verify,report', strtolower($key)) !== false)
strpos('name,title,desc,spec,steps,content,digest,verify,report,analysis,summary,prevention,resolution', strtolower($key)) !== false)
{
$diff = commonModel::diff($old->$key, $value);
}
@@ -1522,22 +1525,25 @@ EOD;
$preAndNextObject->next = '';
$preObj = false;
foreach($existsObjectList['objectList'] as $id => $object)
if(isset($existsObjectList['objectList']))
{
/* Get next object. */
if($preObj === true)
foreach($existsObjectList['objectList'] as $id => $object)
{
$preAndNextObject->next = $object;
break;
}
/* Get next object. */
if($preObj === true)
{
$preAndNextObject->next = $object;
break;
}
/* Get pre object. */
if($id == $objectID)
{
if($preObj) $preAndNextObject->pre = $preObj;
$preObj = true;
/* Get pre object. */
if($id == $objectID)
{
if($preObj) $preAndNextObject->pre = $preObj;
$preObj = true;
}
if($preObj !== true) $preObj = $object;
}
if($preObj !== true) $preObj = $object;
}
return $preAndNextObject;
@@ -1717,7 +1723,7 @@ EOD;
$method = $this->app->rawMethod;
}
if(!empty($this->app->user->modifyPassword) and (($module != 'my' or $method != 'changepassword') and ($module != 'user' or $method != 'logout'))) die(js::locate(helper::createLink('my', 'changepassword', '', '', true)));
if(!empty($this->app->user->modifyPassword) and (($module != 'user' or $method != 'deny') and ($module != 'my' or $method != 'changepassword') and ($module != 'user' or $method != 'logout'))) die(js::locate(helper::createLink('my', 'changepassword', '', '', true)));
if($this->isOpenMethod($module, $method)) return true;
if(!$this->loadModel('user')->isLogon() and $this->server->php_auth_user) $this->user->identifyByPhpAuth();
if(!$this->loadModel('user')->isLogon() and $this->cookie->za) $this->user->identifyByCookie();
@@ -2347,16 +2353,19 @@ EOD;
*/
static public function setMenuVars($moduleName, $objectID, $params = array())
{
global $lang;
global $app, $lang;
foreach($lang->$moduleName->menu as $label => $menu)
$menuKey = 'menu';
if($app->viewType == 'mhtml') $menuKey = 'webMenu';
foreach($lang->$moduleName->$menuKey as $label => $menu)
{
$lang->$moduleName->menu->$label = self::setMenuVarsEx($menu, $objectID, $params);
$lang->$moduleName->$menuKey->$label = self::setMenuVarsEx($menu, $objectID, $params);
if(isset($menu['subMenu']))
{
foreach($menu['subMenu'] as $key1 => $subMenu)
{
$lang->$moduleName->menu->{$label}['subMenu']->$key1 = self::setMenuVarsEx($subMenu, $objectID, $params);
$lang->$moduleName->$menuKey->{$label}['subMenu']->$key1 = self::setMenuVarsEx($subMenu, $objectID, $params);
}
}
@@ -2364,13 +2373,13 @@ EOD;
foreach($menu['dropMenu'] as $key2 => $dropMenu)
{
$lang->$moduleName->menu->{$label}['dropMenu']->$key2 = self::setMenuVarsEx($dropMenu, $objectID, $params);
$lang->$moduleName->$menuKey->{$label}['dropMenu']->$key2 = self::setMenuVarsEx($dropMenu, $objectID, $params);
if(!isset($dropMenu['subMenu'])) continue;
foreach($dropMenu['subMenu'] as $key3 => $subMenu)
{
$lang->$moduleName->menu->{$label}['dropMenu']->$key3 = self::setMenuVarsEx($subMenu, $objectID, $params);
$lang->$moduleName->$menuKey->{$label}['dropMenu']->$key3 = self::setMenuVarsEx($subMenu, $objectID, $params);
}
}
}
+3 -2
View File
@@ -70,8 +70,9 @@ $extHookFiles = glob($extHookRule);
if($extHookFiles) foreach($extHookFiles as $extHookFile) include $extHookFile;
?>
</head>
<?php $singleClass = $this->app->getViewType() == 'xhtml' ? 'allow-self-open' : '';?>
<?php if($this->moduleName == 'index' && $this->methodName == 'index' && $this->cookie->hideMenu): ?>
<body class='menu-hide'>
<body class='menu-hide <?php echo $singleClass;?>'>
<?php else: ?>
<body>
<body class='<?php echo $singleClass;?>'>
<?php endif; ?>
+4
View File
@@ -180,12 +180,16 @@ class company extends control
$this->session->set('releaseList', $uri, 'product');
$this->session->set('storyList', $uri, 'product');
$this->session->set('projectList', $uri, 'project');
$this->session->set('riskList', $uri, 'project');
$this->session->set('opportunityList', $uri, 'project');
$this->session->set('trainplanList', $uri, 'project');
$this->session->set('executionList', $uri, 'execution');
$this->session->set('taskList', $uri, 'execution');
$this->session->set('buildList', $uri, 'execution');
$this->session->set('bugList', $uri, 'qa');
$this->session->set('caseList', $uri, 'qa');
$this->session->set('testtaskList', $uri, 'qa');
$this->session->set('effortList', $uri, 'my');
/* Set the pager. */
$this->app->loadClass('pager', $static = true);
+1 -1
View File
@@ -1,6 +1,6 @@
<?php
$config->custom = new stdClass();
$config->custom->canAdd['story'] = 'reasonList,sourceList,priList';
$config->custom->canAdd['story'] = 'reasonList,sourceList,priList,categoryList';
$config->custom->canAdd['task'] = 'priList,typeList,reasonList';
$config->custom->canAdd['bug'] = 'priList,severityList,osList,browserList,typeList,resolutionList';
$config->custom->canAdd['testcase'] = 'priList,typeList,stageList,resultList,statusList';
+1 -14
View File
@@ -211,7 +211,7 @@ class custom extends control
$this->view->fieldList = $fieldList;
$this->view->dbFields = $dbFields;
$this->view->field = $field;
$this->view->lang2Set = str_replace('_', '-', $lang);
$this->view->lang2Set = str_replace('_', '-', $lang);
$this->view->module = $module;
$this->view->currentLang = $currentLang;
$this->view->canAdd = strpos($this->config->custom->canAdd[$module], $field) !== false;
@@ -410,19 +410,6 @@ class custom extends control
$this->display();
}
/**
* Set story concept.
*
* @param int $key
* @access public
* @return void
*/
public function setDefaultConcept($key = 0)
{
$this->loadModel('setting')->setItem('system.custom.URSR', $key);
die(js::reload('parent'));
}
/**
* Delete story concept.
*
+1 -1
View File
@@ -38,7 +38,6 @@ $lang->custom->waterfallCommon = "Waterfall";
$lang->custom->buildin = "Buildin";
$lang->custom->editStoryConcept = "Edit Story Concept";
$lang->custom->setStoryConcept = "Set Story Concept";
$lang->custom->setDefaultConcept = "Set Default Concept";
$lang->custom->browseStoryConcept = "List of story concepts";
$lang->custom->deleteStoryConcept = "Delete story Concept";
$lang->custom->URConcept = "UR Concept";
@@ -96,6 +95,7 @@ $lang->custom->project->defaultCurrency = 'Default Currency';
$lang->custom->project->fields['unitList'] = 'Unit List';
$lang->custom->story = new stdClass();
$lang->custom->story->fields['categoryList'] = 'Category';
$lang->custom->story->fields['priList'] = 'Priority';
$lang->custom->story->fields['sourceList'] = 'Source';
$lang->custom->story->fields['reasonList'] = 'Close Reason';
+1 -1
View File
@@ -38,7 +38,6 @@ $lang->custom->waterfallCommon = "Waterfall";
$lang->custom->buildin = "Buildin";
$lang->custom->editStoryConcept = "Edit Story Concept";
$lang->custom->setStoryConcept = "Set Story Concept";
$lang->custom->setDefaultConcept = "Set Default Concept";
$lang->custom->browseStoryConcept = "List of story concepts";
$lang->custom->deleteStoryConcept = "Delete story Concept";
$lang->custom->URConcept = "UR Concept";
@@ -96,6 +95,7 @@ $lang->custom->project->defaultCurrency = 'Default Currency';
$lang->custom->project->fields['unitList'] = 'Unit List';
$lang->custom->story = new stdClass();
$lang->custom->story->fields['categoryList'] = 'Category';
$lang->custom->story->fields['priList'] = 'Priority';
$lang->custom->story->fields['sourceList'] = 'Source';
$lang->custom->story->fields['reasonList'] = 'Close Reason';
+1 -1
View File
@@ -38,7 +38,6 @@ $lang->custom->waterfallCommon = "Waterfall";
$lang->custom->buildin = "Buildin";
$lang->custom->editStoryConcept = "Edit Story Concept";
$lang->custom->setStoryConcept = "Set Story Concept";
$lang->custom->setDefaultConcept = "Set Default Concept";
$lang->custom->browseStoryConcept = "List of story concepts";
$lang->custom->deleteStoryConcept = "Delete story Concept";
$lang->custom->URConcept = "UR Concept";
@@ -96,6 +95,7 @@ $lang->custom->project->defaultCurrency = 'Default Currency';
$lang->custom->project->fields['unitList'] = 'Unit List';
$lang->custom->story = new stdClass();
$lang->custom->story->fields['categoryList'] = 'Category';
$lang->custom->story->fields['priList'] = 'Priorité';
$lang->custom->story->fields['sourceList'] = 'Source';
$lang->custom->story->fields['reasonList'] = 'Raison Fermeture';
+1 -1
View File
@@ -38,7 +38,6 @@ $lang->custom->waterfallCommon = "Waterfall";
$lang->custom->buildin = "Buildin";
$lang->custom->editStoryConcept = "Edit Story Concept";
$lang->custom->setStoryConcept = "Set Story Concept";
$lang->custom->setDefaultConcept = "Set Default Concept";
$lang->custom->browseStoryConcept = "List of story concepts";
$lang->custom->deleteStoryConcept = "Delete story Concept";
$lang->custom->URConcept = "UR Concept";
@@ -96,6 +95,7 @@ $lang->custom->project->defaultCurrency = 'Default Currency';
$lang->custom->project->fields['unitList'] = 'Unit List';
$lang->custom->story = new stdClass();
$lang->custom->story->fields['categoryList'] = 'Category';
$lang->custom->story->fields['priList'] = 'Ưu tiên';
$lang->custom->story->fields['sourceList'] = 'Nguồn';
$lang->custom->story->fields['reasonList'] = 'Lý do đóng';
+1 -1
View File
@@ -38,7 +38,6 @@ $lang->custom->waterfallCommon = "瀑布";
$lang->custom->buildin = "系统内置";
$lang->custom->editStoryConcept = "编辑需求概念";
$lang->custom->setStoryConcept = "设置需求概念";
$lang->custom->setDefaultConcept = "设置默认概念";
$lang->custom->browseStoryConcept = "需求概念列表";
$lang->custom->deleteStoryConcept = "删除需求概念";
$lang->custom->URConcept = "用需概念";
@@ -96,6 +95,7 @@ $lang->custom->project->defaultCurrency = '默认货币';
$lang->custom->project->fields['unitList'] = '预算单位';
$lang->custom->story = new stdClass();
$lang->custom->story->fields['categoryList'] = '类型';
$lang->custom->story->fields['priList'] = '优先级';
$lang->custom->story->fields['sourceList'] = '来源';
$lang->custom->story->fields['reasonList'] = '关闭原因';
+1 -14
View File
@@ -11,7 +11,7 @@
?>
<?php include '../../common/view/header.html.php';?>
<style>
.table-form>tbody>tr>th{text-align: center}
.table-form>tbody>tr>th{text-align: center}
</style>
<div id='mainMenu' class='clearfix'>
<div class='pull-right'>
@@ -23,9 +23,6 @@
<table class='table table-form'>
<thead>
<tr>
<?php if(common::hasPriv('custom', 'setDefaultConcept')):?>
<th class='w-60px text-center'><?php echo $lang->custom->default;?> </th>
<?php endif;?>
<?php if($this->config->URAndSR):?>
<th class='text-left'><?php echo $lang->custom->URConcept;?> </th>
<?php endif;?>
@@ -36,9 +33,6 @@
<tbody>
<?php foreach($URSRList as $key => $URSR):?>
<tr>
<?php if(common::hasPriv('custom', 'setDefaultConcept')):?>
<td class='text-center'><input type="radio" name='default' value='<?php echo $key;?>' <?php if($key == $config->custom->URSR) echo 'checked';?>></td>
<?php endif;?>
<?php if($this->config->URAndSR):?>
<td class='text-left'><?php echo $URSR['URName'];?></td>
<?php endif;?>
@@ -54,11 +48,4 @@
</table>
</div>
</div>
<script>
$("input[name='default']").change(function()
{
var checked = $(this).val();
hiddenwin.location.href = createLink('custom', 'setDefaultConcept', 'key=' + checked);
})
</script>
<?php include '../../common/view/footer.html.php';?>
+19 -17
View File
@@ -14,8 +14,8 @@ class dept extends control
const NEW_CHILD_COUNT = 10;
/**
* Construct function, set menu.
*
* Construct function, set menu.
*
* @access public
* @return void
*/
@@ -27,8 +27,8 @@ class dept extends control
/**
* Browse a department.
*
* @param int $deptID
*
* @param int $deptID
* @access public
* @return void
*/
@@ -47,7 +47,7 @@ class dept extends control
/**
* Update the departments order.
*
*
* @access public
* @return void
*/
@@ -62,7 +62,7 @@ class dept extends control
/**
* Manage childs.
*
*
* @access public
* @return void
*/
@@ -70,15 +70,16 @@ class dept extends control
{
if(!empty($_POST))
{
$this->dept->manageChild($_POST['parentDeptID'], $_POST['depts']);
$deptIDList = $this->dept->manageChild($_POST['parentDeptID'], $_POST['depts']);
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'idList' => $deptIDList));
die(js::reload('parent'));
}
}
/**
* Edit dept.
*
* @param int $deptID
* Edit dept.
*
* @param int $deptID
* @access public
* @return void
*/
@@ -91,7 +92,8 @@ class dept extends control
}
$dept = $this->dept->getById($deptID);
$users = $this->loadModel('user')->getPairs('noletter|noclosed|nodeleted|all');
$users = $this->loadModel('user')->getPairs('noletter|noclosed|nodeleted|all', $dept->manager, $this->config->maxCount);
if(!empty($this->config->user->moreLink)) $this->config->moreLinks["manager"] = $this->config->user->moreLink;
$this->view->optionMenu = $this->dept->getOptionMenu();
@@ -107,8 +109,8 @@ class dept extends control
/**
* Delete a department.
*
* @param int $deptID
*
* @param int $deptID
* @param string $confirm yes|no
* @access public
* @return void
@@ -133,10 +135,10 @@ class dept extends control
}
/**
* Ajax get users
*
* @param int $dept
* @param string $user
* Ajax get users
*
* @param int $dept
* @param string $user
* @access public
* @return void
*/
+8 -3
View File
@@ -318,7 +318,7 @@ class deptModel extends model
* @param int $parentDeptID
* @param string $childs
* @access public
* @return void
* @return array
*/
public function manageChild($parentDeptID, $childs)
{
@@ -335,18 +335,21 @@ class deptModel extends model
}
$i = 1;
$deptIDList = array();
foreach($childs as $deptID => $deptName)
{
if(empty($deptName)) continue;
if(is_numeric($deptID))
{
$dept = new stdclass();
$dept->name = strip_tags($deptName);
$dept->parent = $parentDeptID;
$dept->grade = $grade;
$dept->order = $this->post->maxOrder + $i * 10;
$this->dao->insert(TABLE_DEPT)->data($dept)->exec();
$deptID = $this->dao->lastInsertID();
$childPath = $parentPath . "$deptID,";
$deptID = $this->dao->lastInsertID();
$deptIDList[] = $deptID;
$childPath = $parentPath . "$deptID,";
$this->dao->update(TABLE_DEPT)->set('path')->eq($childPath)->where('id')->eq($deptID)->exec();
$i++;
}
@@ -356,6 +359,8 @@ class deptModel extends model
$this->dao->update(TABLE_DEPT)->set('name')->eq(strip_tags($deptName))->where('id')->eq($deptID)->exec();
}
}
return $deptIDList;
}
/**
+6 -4
View File
@@ -133,7 +133,7 @@ class doc extends control
if($objectType == 'execution' and $this->post->execution) $objectID = $this->post->execution;
if($objectType == 'custom' or $objectType == 'book') $objectID = 0;
if($objectType == 'execution' and $this->config->systemMode == 'new')
if($objectType == 'execution' and $this->config->systemMode == 'new' and $this->app->openApp == 'doc')
{
$execution = $this->execution->getByID($this->post->execution);
$objectType = 'project';
@@ -142,6 +142,7 @@ class doc extends control
$this->action->create('docLib', $libID, 'Created');
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $libID));
die(js::locate($this->createLink('doc', 'objectLibs', "type=$objectType&objectID=$objectID&libID=$libID"), 'parent.parent'));
}
else
@@ -157,8 +158,8 @@ class doc extends control
if($type == 'execution')
{
$execution = $this->execution->getByID($objectID);
$this->lang->doc->execution = str_replace($this->lang->executionCommon, $this->lang->project->stage, $this->lang->doc->execution);
$this->lang->doc->libTypeList['execution'] = str_replace($this->lang->executionCommon, $this->lang->project->stage, $this->lang->doc->libTypeList['execution']);
if($execution->type == 'stage') $this->lang->doc->execution = str_replace($this->lang->executionCommon, $this->lang->project->stage, $this->lang->doc->execution);
if($execution->type == 'stage') $this->lang->doc->libTypeList['execution'] = str_replace($this->lang->executionCommon, $this->lang->project->stage, $this->lang->doc->libTypeList['execution']);
}
$libTypeList = $this->lang->doc->libTypeList;
@@ -288,6 +289,7 @@ class doc extends control
if(!empty($files)) $fileAction = $this->lang->addFiles . join(',', $files) . "\n" ;
$this->action->create('doc', $docID, 'Created', $fileAction);
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $docID));
$objectID = zget($lib, $lib->type, '');
$params = "type={$lib->type}&objectID=$objectID&libID={$lib->id}&docID=" . $docResult['id'];
$link = $this->createLink('doc', 'objectLibs', $params);
@@ -894,7 +896,7 @@ class doc extends control
if(!$libID) $libID = key($libs);
$openApp = $this->app->openApp;
$openApp = strpos('doc,product,project,execution', $this->app->openApp) !== false ? $this->app->openApp : 'doc';
if($openApp != 'doc') $this->loadModel($openApp)->setMenu($objectID);
/* Set Custom. */
+4 -4
View File
@@ -1,7 +1,7 @@
$(function()
{
$('.main-actions-holder').css('height', '0px');
var $xuanAction = "<div class='xuancard-actions fixed'>";
var xuanAction = "<div class='xuancard-actions fixed'>";
$('.main-col div.main-actions .btn-toolbar a').each(function(){
var $that = $(this);
@@ -17,10 +17,10 @@ $(function()
url = 'xxc:openUrlInDialog/' + encodeURIComponent(sysurl + href);
target = " target='_blank'";
$xuanAction += "<a href='" + url + "'" + title + target + btnClass + '>' + action + "</a>";
xuanAction += "<a href='" + url + "'" + title + target + btnClass + '>' + action + "</a>";
});
$xuanAction += '</div>';
$('#footer').replaceWith($xuanAction);
xuanAction += '</div>';
$('body').append(xuanAction);
$('.xuancard-actions a.iframe').modalTrigger();
})
+2 -2
View File
@@ -37,10 +37,10 @@ class docModel extends model
*/
public function getLibs($type = '', $extra = '', $appendLibs = '', $objectID = 0)
{
if($type == 'all')
if($type == 'all' or $type == 'includeDeleted')
{
$stmt = $this->dao->select('*')->from(TABLE_DOCLIB)
->where('deleted')->eq(0)
->beginIF($type == 'all')->where('deleted')->eq(0)->fi()
->orderBy('id_desc')
->query();
}
+23 -22
View File
@@ -5,19 +5,19 @@
* @copyright Copyright 2009-2017 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Gang Liu <liugang@cnezsoft.com>
* @package entry
* @package entry
* @version $Id$
* @link http://www.zentao.net
*/
class entry extends control
{
/**
* Browse entries.
*
* @param string $orderBy
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* Browse entries.
*
* @param string $orderBy
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
@@ -36,8 +36,8 @@ class entry extends control
}
/**
* Create an entry.
*
* Create an entry.
*
* @access public
* @return void
*/
@@ -49,6 +49,7 @@ class entry extends control
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
$this->loadModel('action')->create('entry', $id, 'created');
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $id));
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse')));
}
@@ -61,9 +62,9 @@ class entry extends control
}
/**
* Edit an entry.
*
* @param int $id
* Edit an entry.
*
* @param int $id
* @access public
* @return void
*/
@@ -93,9 +94,9 @@ class entry extends control
}
/**
* Delete an entry.
*
* @param int $id
* Delete an entry.
*
* @param int $id
* @access public
* @return void
*/
@@ -108,13 +109,13 @@ class entry extends control
}
/**
* Browse logs of an entry.
*
* @param int $id
* @param string $orderBy
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* Browse logs of an entry.
*
* @param int $id
* @param string $orderBy
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
+15 -4
View File
@@ -966,6 +966,7 @@ class execution extends control
*/
public function testreport($executionID = 0, $objectType = 'execution', $extra = '', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
if($this->app->openApp == 'project') $this->loadModel('project')->setMenu($this->session->project);
echo $this->fetch('testreport', 'browse', "objectID=$executionID&objectType=$objectType&extra=$extra&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
}
@@ -1287,6 +1288,8 @@ class execution extends control
$this->executeHooks($executionID);
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $executionID));
if($this->app->openApp == 'doc')
{
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('doc', 'objectLibs', "type=execution")));
@@ -1901,14 +1904,14 @@ class execution extends control
if($_POST)
{
$stories = $this->loadModel('story')->getStories($executionID, 0, 0, $orderBy);
$stories = $this->loadModel('story')->getExecutionStories($executionID, 0, 0, $orderBy);
$storySpecs = $this->story->getStorySpecs(array_keys($stories));
$order = 1;
foreach($stories as $story) $story->order = $order++;
$kanbanTasks = $this->execution->getKanbanTasks($executionID, "id");
$kanbanBugs = $this->loadModel('bug')->getBugs($executionID);
$kanbanBugs = $this->loadModel('bug')->getExecutionBugs($executionID);
$users = array();
$taskAndBugs = array();
@@ -1978,7 +1981,7 @@ class execution extends control
$this->view->hasBurn = $hasBurn;
$this->view->datas = $datas;
$this->view->chartData = $chartData;
$this->view->chartData = isset($chartData) ? $chartData : array();
$this->view->storySpecs = $storySpecs;
$this->view->realnames = $this->loadModel('user')->getRealNameAndEmails($users);
$this->view->executionID = $executionID;
@@ -2186,6 +2189,7 @@ class execution extends control
if(!empty($_POST))
{
$this->execution->manageMembers($executionID);
$this->loadModel('action')->create('team', $executionID, 'managedTeam');
die(js::locate($this->createLink('execution', 'team', "executionID=$executionID"), 'parent'));
}
@@ -2252,6 +2256,7 @@ class execution extends control
$account = $user->account;
$this->execution->unlinkMember($executionID, $account);
if(!dao::isError()) $this->loadModel('action')->create('team', $executionID, 'managedTeam');
/* if ajax request, send result. */
if($this->server->ajax)
@@ -2375,7 +2380,7 @@ class execution extends control
$this->view->object = $object;
$this->view->products = $products;
$this->view->allStories = empty($allStories) ? $allStories : $allStories[$pageID - 1];;
$this->view->allStories = empty($allStories) ? $allStories : $allStories[$pageID - 1];
$this->view->pager = $pager;
$this->view->browseType = $browseType;
$this->view->productType = $productType;
@@ -2713,6 +2718,12 @@ class execution extends control
$this->project->setMenu($projectID);
}
if($this->app->viewType == 'mhtml')
{
$executionID = $this->execution->saveState(0, $this->executions);
$this->execution->setMenu($executionID);
}
/* Load pager and get tasks. */
$this->app->loadClass('pager', $static = true);
$pager = new pager($recTotal, $recPerPage, $pageID);
+2
View File
@@ -306,6 +306,8 @@ $lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Kein verknüpftes {$lang->productCommon} in {$lang->executionCommon} gefunden. Sie werden auf die {$lang->productCommon} Seite geleitet.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} Kann nicht mit mehreren identischen {$lang->productCommon} verknüpft werden";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$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 ";
+2
View File
@@ -306,6 +306,8 @@ $lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "No {$lang->productCommon} is linked to {$lang->executionCommon}. You will be directed to {$lang->productCommon} page to link one.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} cannot be linked to the same {$lang->productCommon} twice.";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Your access to {$lang->executionCommon} is denied!";
$lang->execution->tips = 'Note';
$lang->execution->afterInfo = "{$lang->executionCommon} is created. Next you can ";
+2
View File
@@ -306,6 +306,8 @@ $lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Aucun {$lang->productCommon} n'est associé à ce {$lang->executionCommon}. Vous allez être redirigé vers la page {$lang->productCommon} pour en associer un.";
$lang->execution->errorSameProducts = "Ce {$lang->executionCommon} ne peut pas être associé deux fois au même {$lang->productCommon}. Imaginez un peu les résultats !";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$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 ";
+2
View File
@@ -306,6 +306,8 @@ $lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Không có {$lang->productCommon} liên kết tới {$lang->executionCommon}. Bạn sẽ được chuyển tới trang {$lang->productCommon} để liên kết.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} không thể liên kết tới {$lang->productCommon} giống nhau 2 lần.";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Truy cập của bạn tới {$lang->executionCommon} bị từ chối!";
$lang->execution->tips = 'Ghi chú';
$lang->execution->afterInfo = "{$lang->executionCommon} được tạo. Tiếp theo bạn có thể ";
+2
View File
@@ -306,6 +306,8 @@ $lang->execution->notAllowedUnlinkStory = "该{$lang->SRCommon}已经与项
$lang->execution->notAllowRemoveProducts = "该{$lang->productCommon}中的{$lang->SRCommon}已与该{$lang->executionCommon}进行了关联,请取消关联后再操作。";
$lang->execution->errorNoLinkedProducts = "该{$lang->executionCommon}没有关联的{$lang->productCommon},系统将转到{$lang->productCommon}关联页面";
$lang->execution->errorSameProducts = "{$lang->executionCommon}不能关联多个相同的{$lang->productCommon}。";
$lang->execution->errorBegin = "{$lang->executionCommon}的开始时间不能小于所属项目的开始时间%s。";
$lang->execution->errorEnd = "{$lang->executionCommon}的结束时间不能大于所属项目的结束时间%s。";
$lang->execution->accessDenied = "您无权访问该{$lang->executionCommon}!";
$lang->execution->tips = '提示';
$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您现在可以进行以下操作:";
+64 -3
View File
@@ -293,9 +293,11 @@ class executionModel extends model
return false;
}
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. */
$project = $this->loadModel('project')->getByID($_POST['project']);
$type = zget($this->config->execution->modelList, $project->model, 'sprint');
$type = zget($this->config->execution->modelList, $project->model, 'sprint');
$this->config->execution->create->requiredFields .= ',project';
}
@@ -335,6 +337,14 @@ class executionModel extends model
}
$sprint = $this->loadModel('file')->processImgURL($sprint, $this->config->execution->editor->create['id'], $this->post->uid);
/* Replace required language. */
if($this->app->openApp == 'project')
{
$this->lang->project->name = $this->lang->execution->name;
$this->lang->project->code = $this->lang->execution->code;
}
$this->dao->insert(TABLE_EXECUTION)->data($sprint)
->autoCheck($skipFields = 'begin,end')
->batchcheck($this->config->execution->create->requiredFields, 'notempty')
@@ -453,6 +463,9 @@ class executionModel extends model
->remove('products, branch, uid, plans')
->get();
if($this->config->systemMode == 'new') $this->checkBeginAndEndDate($oldExecution->project, $execution->begin, $execution->end);
if(dao::isError()) return false;
/* Child stage inherits parent stage permissions. */
if(!isset($execution->acl)) $execution->acl = $oldExecution->acl;
if($execution->acl == 'open') $execution->whitelist = '';
@@ -532,6 +545,23 @@ class executionModel extends model
$oldExecutions = $this->getByIdList($this->post->executionIDList);
$nameList = array();
$codeList = array();
/* Replace required language. */
if($this->app->openApp == 'project')
{
$projectModel = $this->dao->select('model')->from(TABLE_PROJECT)->where('id')->eq($this->session->project)->fetch('model');
if($projectModel == 'scrum')
{
$this->lang->project->name = $this->lang->execution->name;
$this->lang->project->code = $this->lang->execution->code;
}
else
{
$this->lang->project->name = str_replace($this->lang->project->common, $this->lang->project->stage, $this->lang->project->name);
$this->lang->project->code = str_replace($this->lang->project->common, $this->lang->project->stage, $this->lang->project->code);
}
}
foreach($data->executionIDList as $executionID)
{
$executionName = $data->names[$executionID];
@@ -578,7 +608,7 @@ class executionModel extends model
->checkIF($execution->begin != '', 'begin', 'date')
->checkIF($execution->end != '', 'end', 'date')
->checkIF($execution->end != '', 'end', 'gt', $execution->begin)
->check('code', 'unique', "id NOT " . helper::dbIN($data->executionIDList) . " and deleted='0'")
->checkIF($execution->code != '', 'code', 'unique', "id NOT " . helper::dbIN($data->executionIDList) . " and deleted='0'")
->where('id')->eq($executionID)
->limit(1)
->exec();
@@ -654,6 +684,9 @@ class executionModel extends model
->remove('comment')
->get();
if($this->config->systemMode == 'new') $this->checkBeginAndEndDate($oldExecution->project, $execution->begin, $execution->end);
if(dao::isError()) return false;
$this->dao->update(TABLE_EXECUTION)->data($execution)
->autoCheck()
->where('id')->eq((int)$executionID)
@@ -837,6 +870,22 @@ class executionModel extends model
}
}
/**
* Check begin and end date.
*
* @param string $begin
* @param string $end
* @access public
* @return void
*/
public function checkBeginAndEndDate($projectID, $begin, $end)
{
$project = $this->loadModel('project')->getByID($projectID);
if($begin < $project->begin) dao::$errors['begin'] = sprintf($this->lang->execution->errorBegin, $project->begin);
if($end > $project->end) dao::$errors['end'] = sprintf($this->lang->execution->errorEnd, $project->end);
}
/*
* Get execution switcher.
*
@@ -857,6 +906,13 @@ class executionModel extends model
$currentExecutionName = $currentExecution->name;
}
if($this->app->viewType == 'mhtml' and $executionID)
{
$output = html::a(helper::createLink('execution', 'index'), $this->lang->executionCommon) . $this->lang->colon;
$output .= "<a id='currentItem' href=\"javascript:showSearchMenu('execution', '$executionID', '$currentModule', '$currentMethod', '')\">{$currentExecutionName} <span class='icon-caret-down'></span></a><div id='currentItemDropMenu' class='hidden affix enter-from-bottom layer'></div>";
return $output;
}
$dropMenuLink = helper::createLink('execution', 'ajaxGetDropMenu', "executionID=$executionID&module=$currentModule&method=$currentMethod&extra=");
$output = "<div class='btn-group header-btn' id='swapper'><button data-toggle='dropdown' type='button' class='btn' id='currentItem' title='{$currentExecutionName}'><span class='text'>{$currentExecutionName}</span> <span class='caret'></span></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
@@ -1149,6 +1205,11 @@ class executionModel extends model
$module = 'execution';
$method = 'testcase';
}
if($module == 'testtask' and ($method == 'view' || $method == 'create' || $method == 'edit'))
{
$module = 'execution';
$method = 'testtask';
}
if($module == 'build' and ($method == 'edit' || $method= 'view'))
{
$module = 'execution';
+3 -1
View File
@@ -187,6 +187,7 @@
<?php endif;?>
<th class='c-pri {sorter:false}'> <?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
<th class='c-name {sorter:false}'> <?php common::printOrderLink('title', $orderBy, $vars, $lang->execution->storyTitle);?></th>
<th class='w-70px {sorter:false}'><?php common::printOrderLink('category', $orderBy, $vars, $lang->story->category);?></th>
<th class='c-user {sorter:false}'> <?php common::printOrderLink('openedBy', $orderBy, $vars, $lang->openedByAB);?></th>
<th class='c-user {sorter:false}'> <?php common::printOrderLink('assignedTo', $orderBy, $vars, $lang->assignedToAB);?></th>
<th class='c-estimate w-80px {sorter:false} text-right'> <?php common::printOrderLink('estimate', $orderBy, $vars, $lang->story->estimateAB);?></th>
@@ -222,6 +223,7 @@
<?php if($story->parent > 0) echo "<span class='label'>{$lang->story->childrenAB}</span>";?>
<?php echo html::a($storyLink,$story->title, null, "style='color: $story->color' data-app='execution'");?>
</td>
<td class='c-name' title='<?php echo zget($lang->story->categoryList, $story->category);?>'><?php echo zget($lang->story->categoryList, $story->category);?></td>
<td class='c-user' title='<?php echo zget($users, $story->openedBy);?>'><?php echo zget($users, $story->openedBy);?></td>
<td class='c-user' title='<?php echo zget($users, $story->assignedTo);?>'><?php echo zget($users, $story->assignedTo);?></td>
<td class='c-estimate text-right' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . $config->hourUnit;?></td>
@@ -322,7 +324,7 @@
if(empty($key)) continue;
if(strpos('wait|planned|projected', $key) !== false) continue;
$actionLink = $this->createLink('story', 'batchChangeStage', "stage=$key");
echo "<li>" . html::a('#', $stage, '', "onclick=\"setFormAction('$actionLink', 'hiddenwin')\"") . "</li>";
echo "<li>" . html::a('#', $stage, '', "onclick=\"setFormAction('$actionLink', 'hiddenwin', '#storyList')\"") . "</li>";
}
echo '</ul>';
?>
+1
View File
@@ -72,6 +72,7 @@
<?php endforeach;?>
</tbody>
</table>
<div class="table-footer"><?php $pager->show('right', 'pagerjs');?></div>
</form>
<?php endif;?>
</div>
+1 -1
View File
@@ -103,7 +103,7 @@
common::printIcon('testtask', 'linkCase', "taskID=$task->id", $task, 'list', 'link');
if(common::hasPriv('execution', 'testreport'))
{
echo html::a($this->createLink('testreport', 'browse', "objectID=$task->product&objectType=product&extra=$task->id"), '<i class="icon-testreport-browse icon-flag"></i>', '', 'class="btn " title="' . $lang->testreport->browse . '" data-app="qa"');
echo html::a($this->createLink('execution', 'testreport', "executionID=$executionID&objctType=execution&extra=$task->id"), '<i class="icon-testreport-browse icon-flag"></i>', '', 'class="btn " title="' . $lang->testreport->browse . '" data-app="execution"');
}
common::printIcon('testtask', 'edit', "taskID=$task->id", $task, 'list');
common::printIcon('testtask', 'delete', "taskID=$task->id", $task, 'list', 'trash', 'hiddenwin');
+8 -8
View File
@@ -229,7 +229,7 @@
<tr>
<td colspan="4">
<?php $progress = ($execution->totalConsumed + $execution->totalLeft) ? floor($execution->totalConsumed / ($execution->totalConsumed + $execution->totalLeft) * 1000) / 1000 * 100 : 0;?>
<?php echo $lang->execution->progress;?> <em><?php echo $progress . $lang->percent;?></em> &nbsp;
<?php echo $lang->execution->progress;?> <?php echo $progress . $lang->percent;?> &nbsp;
<div class="progress inline-block">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $progress . $lang->percent;?>"></div>
</div>
@@ -239,23 +239,23 @@
<th><?php echo $lang->execution->begin;?></th>
<td><?php echo $execution->begin;?></td>
<th><?php echo $lang->execution->totalEstimate;?></th>
<td><em><?php echo (float)$execution->totalEstimate . $lang->execution->workHour;?></em></td>
<td><?php echo (float)$execution->totalEstimate . $lang->execution->workHour;?></td>
</tr>
<tr>
<th><?php echo $lang->execution->end;?></th>
<td><?php echo $execution->end;?></td>
<th><?php echo $lang->execution->totalConsumed;?></th>
<td><em><?php echo (float)$execution->totalConsumed . $lang->execution->workHour;?></em></td>
<td><?php echo (float)$execution->totalConsumed . $lang->execution->workHour;?></td>
</tr>
<tr>
<th><?php echo $lang->execution->totalDays;?></th>
<td><?php echo $execution->days;?></td>
<th><?php echo $lang->execution->totalLeft;?></th>
<td><em><?php echo (float)$execution->totalLeft . $lang->execution->workHour;?></em></td>
<td><?php echo (float)$execution->totalLeft . $lang->execution->workHour;?></td>
</tr>
<tr>
<th><?php echo $lang->execution->totalHours;?></th>
<td><em><?php echo (float)$execution->totalHours . $lang->execution->workHour;?></em></td>
<td><?php echo (float)$execution->totalHours . $lang->execution->workHour;?></td>
</tr>
</tbody>
</table>
@@ -268,11 +268,11 @@
<tbody>
<tr>
<th><?php echo $lang->story->common;?></th>
<td><em><?php echo $statData->storyCount;?></em></td>
<td><?php echo $statData->storyCount;?></td>
<th><?php echo $lang->task->common;?></th>
<td><em><?php echo $statData->taskCount;?></em></td>
<td><?php echo $statData->taskCount;?></td>
<th><?php echo $lang->bug->common;?></th>
<td><em><?php echo $statData->bugCount;?></em></td>
<td><?php echo $statData->bugCount;?></td>
</tr>
</tbody>
</table>
+18 -18
View File
@@ -12,8 +12,8 @@
class git extends control
{
/**
* Sync git.
*
* Sync git.
*
* @access public
* @return void
*/
@@ -24,9 +24,9 @@ class git extends control
/**
* Diff a file.
*
*
* @param string $path
* @param int $revision
* @param int $revision
* @access public
* @return void
*/
@@ -37,14 +37,14 @@ class git extends control
$path = helper::safe64Decode($path);
if(common::hasPriv('repo', 'diff'))
{
$repos = $this->loadModel('repo')->getListBySCM('Git', 'haspriv');
$repos = $this->loadModel('repo')->getListBySCM('Git,Gitlab', 'haspriv');
foreach($repos as $repo)
{
if(strpos($path, $repo->path) === 0)
{
$entry = $this->repo->encodePath(str_replace($repo->path, '', $path));
$oldRevision = "$revision^";
$this->locate($this->repo->createLink('diff', "repoID=$repo->id&entry=$entry&oldRevision=$oldRevision&revision=$revision", 'html', 'true'));
$this->locate($this->repo->createLink('diff', "repoID=$repo->id&objectID=0&entry=$entry&oldRevision=$oldRevision&revision=$revision", 'html', 'true'));
}
}
}
@@ -52,15 +52,15 @@ class git extends control
$this->view->path = $path;
$this->view->revision = $revision;
$this->view->diff = $this->git->diff($path, $revision);
$this->display();
}
/**
* Cat a file.
*
*
* @param string $path
* @param int $revision
* @param int $revision
* @access public
* @return void
*/
@@ -71,13 +71,13 @@ class git extends control
$path = helper::safe64Decode($path);
if(common::hasPriv('repo', 'view'))
{
$repos = $this->loadModel('repo')->getListBySCM('Git', 'haspriv');
$repos = $this->loadModel('repo')->getListBySCM('Git,Gitlab', 'haspriv');
foreach($repos as $repo)
{
if(strpos($path, $repo->path) === 0)
{
$entry = $this->repo->encodePath(str_replace($repo->path, '', $path));
$this->locate($this->repo->createLink('view', "repoID=$repo->id&entry=$entry&revision=$revision", 'html', true));
$this->locate($this->repo->createLink('view', "repoID=$repo->id&objectID=0&entry=$entry&revision=$revision", 'html', true));
}
}
}
@@ -85,13 +85,13 @@ class git extends control
$this->view->path = $path;
$this->view->revision = $revision;
$this->view->code = $this->git->cat($path, $revision);
$this->display();
$this->display();
}
/**
* Sync from the syncer by api.
*
*
* @access public
* @return void
*/
@@ -104,9 +104,9 @@ class git extends control
$logs = array();
$i = 0;
foreach($list as $line)
foreach($list as $line)
{
if(!$line)
if(!$line)
{
$i++;
continue;
@@ -143,7 +143,7 @@ class git extends control
/**
* Ajax save log.
*
*
* @access public
* @return void
*/
@@ -198,7 +198,7 @@ class git extends control
/**
* Ajax get repos.
*
*
* @access public
* @return void
*/
+34 -34
View File
@@ -15,39 +15,39 @@ class gitModel extends model
{
/**
* The git binary client.
*
* @var int
*
* @var int
* @access public
*/
public $client;
/**
* Repos.
*
* @var array
*
* @var array
* @access public
*/
public $repos = array();
public $repos = array();
/**
* The root path of a repo
*
*
* @var string
* @access public
*/
public $repoRoot = '';
/**
* Users
*
* @var array
* Users
*
* @var array
* @access public
*/
public $users = array();
/**
* Construct function.
*
*
* @access public
* @return void
*/
@@ -59,8 +59,8 @@ class gitModel extends model
}
/**
* Run.
*
* Run.
*
* @access public
* @return void
*/
@@ -145,7 +145,7 @@ class gitModel extends model
continue;
}
$version = $lastInDB->commit;
$version = (int)$lastInDB->commit + 1;
$logs = $this->repo->getUnsyncCommits($repo);
$objects = array();
if(!empty($logs))
@@ -196,13 +196,13 @@ class gitModel extends model
/**
* Set the repos.
*
*
* @access public
* @return bool
*/
public function setRepos()
{
$repos = $this->loadModel('repo')->getListBySCM('Git');
$repos = $this->loadModel('repo')->getListBySCM('Git,Gitlab');
$gitRepos = array();
$paths = array();
foreach($repos as $repo)
@@ -224,7 +224,7 @@ class gitModel extends model
/**
* Get repos.
*
*
* @access public
* @return array
*/
@@ -239,8 +239,8 @@ class gitModel extends model
/**
* Set repo.
*
* @param object $repo
*
* @param object $repo
* @access public
* @return bool
*/
@@ -269,10 +269,10 @@ class gitModel extends model
/**
* set the root path of a repo.
*
* @param object $repo
*
* @param object $repo
* @access public
* @return void
* @return void
*/
public function setRepoRoot($repo)
{
@@ -295,9 +295,9 @@ class gitModel extends model
/**
* Get repo logs.
*
* @param object $repo
* @param int $fromRevision
*
* @param object $repo
* @param int $fromRevision
* @access public
* @return array
*/
@@ -323,8 +323,8 @@ class gitModel extends model
/**
* Convert log from xml format to object.
*
* @param object $log
*
* @param object $log
* @access public
* @return object
*/
@@ -365,9 +365,9 @@ class gitModel extends model
/**
* Diff a url.
*
*
* @param string $path
* @param int $revision
* @param int $revision
* @access public
* @return string|bool
*/
@@ -407,9 +407,9 @@ class gitModel extends model
/**
* Cat a url.
*
*
* @param string $path
* @param int $revision
* @param int $revision
* @access public
* @return string|bool
*/
@@ -448,8 +448,8 @@ class gitModel extends model
/**
* Get repo by url.
*
* @param string $url
*
* @param string $url
* @access public
* @return object|bool
*/
@@ -465,8 +465,8 @@ class gitModel extends model
/**
* Pring log.
*
* @param sting $log
*
* @param sting $log
* @access public
* @return void
*/
+2 -1
View File
@@ -57,8 +57,9 @@ class group extends control
{
if(!empty($_POST))
{
$this->group->create();
$groupID = $this->group->create();
if(dao::isError()) die(js::error(dao::getError()));
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $groupID));
if(isonlybody()) die(js::closeModal('parent.parent', 'this'));
die(js::locate($this->createLink('group', 'browse'), 'parent'));
}
+1
View File
@@ -56,6 +56,7 @@ $lang->group->copyOptions['copyPriv'] = 'Rechte kopieren';
$lang->group->copyOptions['copyUser'] = 'Benutzer kopieren';
$lang->group->versions[''] = 'Verlauf';
$lang->group->versions['15_0_rc1'] = 'ZenTao15.0.rc1';
$lang->group->versions['12_5'] = 'ZenTao12.5';
$lang->group->versions['12_3'] = 'ZenTao12.3';
$lang->group->versions['11_6_2'] = 'ZenTao11.6.2';
+1
View File
@@ -56,6 +56,7 @@ $lang->group->copyOptions['copyPriv'] = 'Copy Privileges';
$lang->group->copyOptions['copyUser'] = 'Copy Users';
$lang->group->versions[''] = 'History';
$lang->group->versions['15_0_rc1'] = 'ZenTao15.0.rc1';
$lang->group->versions['12_5'] = 'ZenTao12.5';
$lang->group->versions['12_3'] = 'ZenTao12.3';
$lang->group->versions['11_6_2'] = 'ZenTao11.6.2';
+1
View File
@@ -56,6 +56,7 @@ $lang->group->copyOptions['copyPriv'] = 'Copier Privilèges';
$lang->group->copyOptions['copyUser'] = 'Copier Utilisateurs';
$lang->group->versions[''] = 'History';
$lang->group->versions['15_0_rc1'] = 'ZenTao15.0.rc1';
$lang->group->versions['12_5'] = 'ZenTao12.5';
$lang->group->versions['12_3'] = 'ZenTao12.3';
$lang->group->versions['11_6_2'] = 'ZenTao11.6.2';
+94 -2
View File
@@ -1094,8 +1094,7 @@ $lang->custom->methodOrder[45] = 'timezone';
$lang->custom->methodOrder[50] = 'setStoryConcept';
$lang->custom->methodOrder[55] = 'editStoryConcept';
$lang->custom->methodOrder[60] = 'browseStoryConcept';
$lang->custom->methodOrder[65] = 'setDefaultConcept';
$lang->custom->methodOrder[70] = 'deleteStoryConcept';
$lang->custom->methodOrder[65] = 'deleteStoryConcept';
$lang->resource->datatable = new stdclass();
$lang->resource->datatable->setGlobal = 'setGlobal';
@@ -1746,3 +1745,96 @@ $lang->changelog['12.3'][] = 'ci-commitResult';
$lang->changelog['12.5'][] = 'story-batchToTask';
$lang->changelog['12.5'][] = 'custom-product';
$lang->changelog['12.5'][] = 'custom-project';
$lang->changelog['15.0.rc1'][] = 'program-browse';
$lang->changelog['15.0.rc1'][] = 'program-view';
$lang->changelog['15.0.rc1'][] = 'program-product';
$lang->changelog['15.0.rc1'][] = 'program-create';
$lang->changelog['15.0.rc1'][] = 'program-edit';
$lang->changelog['15.0.rc1'][] = 'program-start';
$lang->changelog['15.0.rc1'][] = 'program-suspend';
$lang->changelog['15.0.rc1'][] = 'program-activate';
$lang->changelog['15.0.rc1'][] = 'program-close';
$lang->changelog['15.0.rc1'][] = 'program-delete';
$lang->changelog['15.0.rc1'][] = 'program-project';
$lang->changelog['15.0.rc1'][] = 'program-stakeholder';
$lang->changelog['15.0.rc1'][] = 'program-createStakeholder';
$lang->changelog['15.0.rc1'][] = 'program-unlinkStakeholder';
$lang->changelog['15.0.rc1'][] = 'program-batchUnlinkStakeholders';
$lang->changelog['15.0.rc1'][] = 'program-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'program-export';
$lang->changelog['15.0.rc1'][] = 'project-execution';
$lang->changelog['15.0.rc1'][] = 'project-group';
$lang->changelog['15.0.rc1'][] = 'project-createGroup';
$lang->changelog['15.0.rc1'][] = 'project-manageView';
$lang->changelog['15.0.rc1'][] = 'project-managePriv';
$lang->changelog['15.0.rc1'][] = 'project-manageGroupMember';
$lang->changelog['15.0.rc1'][] = 'project-copyGroup';
$lang->changelog['15.0.rc1'][] = 'project-editGroup';
$lang->changelog['15.0.rc1'][] = 'project-whitelist';
$lang->changelog['15.0.rc1'][] = 'project-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'project-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'project-qa';
$lang->changelog['15.0.rc1'][] = 'project-createGuide';
$lang->changelog['15.0.rc1'][] = 'project-moduleOpen';
$lang->changelog['15.0.rc1'][] = 'personnel-accessible';
$lang->changelog['15.0.rc1'][] = 'personnel-invest';
$lang->changelog['15.0.rc1'][] = 'personnel-whitelist';
$lang->changelog['15.0.rc1'][] = 'personnel-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'personnel-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'my-workAction';
$lang->changelog['15.0.rc1'][] = 'my-contributeAction';
$lang->changelog['15.0.rc1'][] = 'my-testtask';
$lang->changelog['15.0.rc1'][] = 'my-execution';
$lang->changelog['15.0.rc1'][] = 'my-doc';
$lang->changelog['15.0.rc1'][] = 'my-calendarAction';
$lang->changelog['15.0.rc1'][] = 'story-trackAB';
$lang->changelog['15.0.rc1'][] = 'story-processStoryChange';
$lang->changelog['15.0.rc1'][] = 'projectstory-story';
$lang->changelog['15.0.rc1'][] = 'projectstory-trackAction';
$lang->changelog['15.0.rc1'][] = 'projectstory-view';
$lang->changelog['15.0.rc1'][] = 'projectstory-linkStory';
$lang->changelog['15.0.rc1'][] = 'projectstory-unlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectstory-importplanstories';
$lang->changelog['15.0.rc1'][] = 'execution-whitelist';
$lang->changelog['15.0.rc1'][] = 'execution-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'execution-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'automation-browse';
$lang->changelog['15.0.rc1'][] = 'group-manageProjectAdmin';
$lang->changelog['15.0.rc1'][] = 'user-execution';
$lang->changelog['15.0.rc1'][] = 'custom-setStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-editStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-browseStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-deleteStoryConcept';
$lang->changelog['15.0.rc1'][] = 'search-index';
$lang->changelog['15.0.rc1'][] = 'search-buildIndex';
$lang->changelog['15.0.rc1'][] = 'projectbuild-browse';
$lang->changelog['15.0.rc1'][] = 'projectrelease-browseAction';
$lang->changelog['15.0.rc1'][] = 'projectrelease-create';
$lang->changelog['15.0.rc1'][] = 'projectrelease-edit';
$lang->changelog['15.0.rc1'][] = 'projectrelease-delete';
$lang->changelog['15.0.rc1'][] = 'projectrelease-view';
$lang->changelog['15.0.rc1'][] = 'projectrelease-export';
$lang->changelog['15.0.rc1'][] = 'projectrelease-linkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-unlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-batchUnlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-linkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-unlinkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-batchUnlinkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-changeStatus';
$lang->changelog['15.0.rc1'][] = 'stakeholder-browse';
$lang->changelog['15.0.rc1'][] = 'stakeholder-create';
$lang->changelog['15.0.rc1'][] = 'stakeholder-batchCreate';
$lang->changelog['15.0.rc1'][] = 'stakeholder-edit';
$lang->changelog['15.0.rc1'][] = 'stakeholder-delete';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewAction';
$lang->changelog['15.0.rc1'][] = 'stakeholder-issue';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewIssueAction';
$lang->changelog['15.0.rc1'][] = 'stakeholder-communicate';
$lang->changelog['15.0.rc1'][] = 'stakeholder-expect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-expectation';
$lang->changelog['15.0.rc1'][] = 'stakeholder-deleteExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-createExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-editExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-userIssue';
+1
View File
@@ -56,6 +56,7 @@ $lang->group->copyOptions['copyPriv'] = 'Copy Privileges';
$lang->group->copyOptions['copyUser'] = 'Copy người dùng';
$lang->group->versions[''] = 'Lịch sử';
$lang->group->versions['15_0_rc1'] = 'ZenTao15.0.rc1';
$lang->group->versions['12_5'] = 'ZenTao12.5';
$lang->group->versions['12_3'] = 'ZenTao12.3';
$lang->group->versions['11_6_2'] = 'ZenTao11.6.2';
+1
View File
@@ -56,6 +56,7 @@ $lang->group->copyOptions['copyPriv'] = '复制权限';
$lang->group->copyOptions['copyUser'] = '复制用户';
$lang->group->versions[''] = '修改历史';
$lang->group->versions['15_0_rc1'] = '禅道15.0.rc1';
$lang->group->versions['12_5'] = '禅道12.5';
$lang->group->versions['12_3'] = '禅道12.3';
$lang->group->versions['11_6_2'] = '禅道11.6.2';
+1
View File
@@ -56,6 +56,7 @@ $lang->group->copyOptions['copyPriv'] = '複製權限';
$lang->group->copyOptions['copyUser'] = '複製用戶';
$lang->group->versions[''] = '修改歷史';
$lang->group->versions['15_0_rc1'] = '禪道15.0.rc1';
$lang->group->versions['12_5'] = '禪道12.5';
$lang->group->versions['12_3'] = '禪道12.3';
$lang->group->versions['11_6_2'] = '禪道11.6.2';
+4 -3
View File
@@ -27,7 +27,8 @@ class groupModel extends model
unset($group->limited);
$group->role = 'limited';
}
return $this->dao->insert(TABLE_GROUP)->data($group)->batchCheck($this->config->group->create->requiredFields, 'notempty')->exec();
$this->dao->insert(TABLE_GROUP)->data($group)->batchCheck($this->config->group->create->requiredFields, 'notempty')->exec();
return $this->dao->lastInsertId();
}
/**
@@ -336,7 +337,7 @@ class groupModel extends model
}
/**
* Update view priv
* Update view priv.
*
* @param int $groupID
* @access public
@@ -354,7 +355,7 @@ class groupModel extends model
$dynamic = array();
foreach($actions['actions'] as $moduleName => $moduleActions)
{
if($moduleName != 'my' and !isset($actions['views'][$moduleName])) continue;
if($moduleName != 'todo' and isset($actions['views']) and !in_array($this->lang->navGroup->$moduleName, $actions['views'])) continue;
$dynamic[$moduleName] = $moduleActions;
}
@@ -71,8 +71,8 @@
<tr>
<td class='text-center form-actions' colspan='5'>
<?php
echo html::submitButton('', '', "btn btn-primary");
echo html::linkButton($lang->goback, $this->createLink('group', 'browse'));
echo html::submitButton();
echo html::linkButton($lang->goback, $this->createLink('group', 'browse'), 'self', '', 'btn btn-wide');
echo html::hidden('foo'); // Just a var, to make sure $_POST is not empty.
?>
</td>
+40 -13
View File
@@ -133,6 +133,7 @@
if(['team'].includes(methodLowerCase)) return 'system';
}
if(moduleName === 'company') if(methodLowerCase == 'browse') return 'admin';
if(moduleName === 'opportunity' || moduleName === 'risk' || moduleName == 'trainplan') if(methodLowerCase == 'view') return 'project';
if(moduleName === 'tree')
{
if(methodLowerCase === 'browse')
@@ -178,21 +179,23 @@
}
}
/* Set openApp cookie */
$.cookie('openApp', appCode, {expires: config.cookieLife, path: config.webRoot});
/* Highlight at main menu */
var $menuMainNav = $('#menuMainNav,#menuMoreNav');
var $lastActiveNav = $menuMainNav.find('li.active');
if($lastActiveNav.data('app') !== appCode)
{
$lastActiveNav.removeClass('active');
$menuMainNav.find('li[data-app="' + appCode + '"]').addClass('active');
}
/* Create pate app object and store it */
var app = openedApps[appCode];
if(!app)
if(app)
{
if(app.$iframe && app.$iframe.length)
{
var iframe = app.$iframe[0];
if(iframe && iframe.contentDocument && iframe.contentWindow && iframe.contentWindow.$)
{
var result = iframe.contentWindow.$(iframe.contentDocument).triggerHandler('openapp.apps', [app, url]);
if (result === false) {
return 'cancel';
}
}
}
}
else
{
var $iframe = $(
[
@@ -216,6 +219,18 @@
if(!url) url = appsMap[appCode].url;
}
/* Set openApp cookie */
$.cookie('openApp', appCode, {expires: config.cookieLife, path: config.webRoot});
/* Highlight at main menu */
var $menuMainNav = $('#menuMainNav,#menuMoreNav');
var $lastActiveNav = $menuMainNav.find('li.active');
if($lastActiveNav.data('app') !== appCode)
{
$lastActiveNav.removeClass('active');
$menuMainNav.find('li[data-app="' + appCode + '"]').addClass('active');
}
/* Show page app and update iframe source */
if(url) reloadApp(appCode, url);
app.zIndex = openedAppZIndex++;
@@ -329,6 +344,18 @@
var app = openedApps[appCode];
if(!app) return;
if(app.$iframe && app.$iframe.length)
{
var iframe = app.$iframe[0];
if(iframe && iframe.contentDocument && iframe.contentWindow && iframe.contentWindow.$)
{
var result = iframe.contentWindow.$(iframe.contentDocument).triggerHandler('closeapp.apps', [app]);
if (result === false) {
return 'cancel';
}
}
}
var appKeys = Object.keys(openedApps)
if(appKeys[0] == appCode)
{
+4 -3
View File
@@ -61,8 +61,9 @@ class jenkins extends control
{
if($_POST)
{
$this->jenkins->create();
$jenkinsID = $this->jenkins->create();
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $jenkinsID));
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse')));
}
@@ -116,8 +117,8 @@ class jenkins extends control
/**
* Ajax get tasks.
*
* @param int $id
*
* @param int $id
* @access public
* @return void
*/
+4 -3
View File
@@ -60,8 +60,8 @@ class jenkinsModel extends model
/**
* Get jenkins tasks.
*
* @param int $id
*
* @param int $id
* @access public
* @return array
*/
@@ -107,7 +107,8 @@ class jenkinsModel extends model
->batchCheck("url", 'URL')
->autoCheck()
->exec();
return !dao::isError();
if(dao::isError()) return false;
return $this->dao->lastInsertId();
}
/**
+2 -1
View File
@@ -63,8 +63,9 @@ class job extends control
{
if($_POST)
{
$this->job->create();
$jobID = $this->job->create();
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $jobID));
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('browse')));
}
+15 -15
View File
@@ -12,9 +12,9 @@
class jobModel extends model
{
/**
* Get by id.
*
* @param int $id
* Get by id.
*
* @param int $id
* @access public
* @return object
*/
@@ -25,7 +25,7 @@ class jobModel extends model
/**
* Get job list.
*
*
* @param string $orderBy
* @param object $pager
* @access public
@@ -44,7 +44,7 @@ class jobModel extends model
/**
* Get list by triggerType field.
*
*
* @param string $triggerType
* @param array $repoIdList
* @access public
@@ -107,7 +107,7 @@ class jobModel extends model
/**
* Create a job.
*
*
* @access public
* @return bool
*/
@@ -164,13 +164,13 @@ class jobModel extends model
$id = $this->dao->lastInsertId();
$this->initJob($id, $job, $this->post->repoType);
return true;
return $id;
}
/**
* Update a job.
*
* @param int $id
*
* @param int $id
* @access public
* @return bool
*/
@@ -236,10 +236,10 @@ class jobModel extends model
/**
* Init when create or update job.
*
* @param int $id
* @param object $job
* @param string $repoType
*
* @param int $id
* @param object $job
* @param string $repoType
* @access public
* @return bool
*/
@@ -281,8 +281,8 @@ class jobModel extends model
/**
* Exec job.
*
* @param int $id
*
* @param int $id
* @access public
* @return bool
*/
+2 -2
View File
@@ -1,8 +1,8 @@
<?php
$config->message->objectTypes = array();
$config->message->objectTypes['product'] = array('opened', 'edited', 'closed', 'undeleted');
$config->message->objectTypes['product'] = array('opened', 'edited', 'closed', 'undeleted');
$config->message->objectTypes['story'] = array('opened', 'edited', 'commented', 'frombug', 'changed', 'reviewed', 'closed', 'activated', 'assigned');
$config->message->objectTypes['productplan'] = array('opened', 'edited');
$config->message->objectTypes['productplan'] = array('opened', 'edited');
$config->message->objectTypes['project'] = array('opened', 'edited', 'started', 'delayed', 'suspended', 'closed', 'activated', 'undeleted');
$config->message->objectTypes['task'] = array('opened', 'edited', 'commented', 'assigned', 'confirmed', 'started', 'finished', 'paused', 'canceled', 'restarted', 'closed', 'activated');
$config->message->objectTypes['bug'] = array('opened', 'edited', 'commented', 'assigned', 'confirmed', 'bugconfirmed', 'resolved', 'closed', 'activated');
+1
View File
@@ -742,6 +742,7 @@ class my extends control
if(!empty($_POST))
{
$_POST['account'] = $this->app->user->account;
$_POST['groups'] = $this->dao->select('`group`')->from(TABLE_USERGROUP)->where('account')->eq($this->post->account)->fetchPairs('group', 'group');
$this->user->update($this->app->user->id);
if(dao::isError()) die(js::error(dao::getError()));
die(js::locate($this->createLink('my', 'profile'), 'parent'));
+7 -2
View File
@@ -24,6 +24,11 @@
echo html::a(inlink($app->rawMethod, "mode=requirement&type=reviewedBy&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->reviewedByMe}</span>" . ($type == 'reviewedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'reviewedBy' ? ' btn-active-text' : '') . "'");
echo html::a(inlink($app->rawMethod, "mode=requirement&type=closedBy&&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->closedByMe}</span>" . ($type == 'closedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' ? ' btn-active-text' : '') . "'");
}
else
{
echo html::a(inlink($app->rawMethod, "mode=requirement&type=assignedTo&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->assignedToMe}</span>" . ($type == 'assignedTo' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assignedTo' ? ' btn-active-text' : '') . "'");
echo html::a(inlink($app->rawMethod, "mode=requirement&type=reviewBy&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->reviewByMe}</span>" . ($type == 'reviewBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'reviewBy' ? ' btn-active-text' : '') . "'");
}
?>
</div>
</div>
@@ -60,7 +65,7 @@
<th class='c-hours'> <?php common::printOrderLink('estimate', $orderBy, $vars, $lang->story->estimateAB);?></th>
<th class='c-status'> <?php common::printOrderLink('status', $orderBy, $vars, $lang->statusAB);?></th>
<th class='c-stage'> <?php common::printOrderLink('stage', $orderBy, $vars, $lang->story->stageAB);?></th>
<th class='c-actions-4'> <?php echo $lang->actions;?></th>
<th class='c-actions-5'> <?php echo $lang->actions;?></th>
</tr>
</thead>
<tbody>
@@ -132,7 +137,7 @@
if($canBeChanged)
{
$vars = "story={$child->id}";
common::printIcon('story', 'change', $vars, $child, 'list', 'fork');
common::printIcon('story', 'change', $vars, $child, 'list', 'alter');
common::printIcon('story', 'review', $vars, $child, 'list', 'search');
common::printIcon('story', 'close', $vars, $child, 'list', '', '', 'iframe', true);
common::printIcon('story', 'edit', $vars, $child, 'list');
+6 -1
View File
@@ -24,6 +24,11 @@
echo html::a(inlink($app->rawMethod, "mode=story&type=reviewedBy&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->reviewedByMe}</span>" . ($type == 'reviewedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'reviewedBy' ? ' btn-active-text' : '') . "'");
echo html::a(inlink($app->rawMethod, "mode=story&type=closedBy&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->closedByMe}</span>" . ($type == 'closedBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'closedBy' ? ' btn-active-text' : '') . "'");
}
else
{
echo html::a(inlink($app->rawMethod, "mode=story&type=assignedTo&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->assignedToMe}</span>" . ($type == 'assignedTo' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'assignedTo' ? ' btn-active-text' : '') . "'");
echo html::a(inlink($app->rawMethod, "mode=story&type=reviewBy&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "<span class='text'>{$lang->my->storyMenu->reviewByMe}</span>" . ($type == 'reviewBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'reviewBy' ? ' btn-active-text' : '') . "'");
}
?>
</div>
</div>
@@ -136,7 +141,7 @@
if($canBeChanged)
{
$vars = "story={$child->id}";
common::printIcon('story', 'change', $vars, $child, 'list', 'fork');
common::printIcon('story', 'change', $vars, $child, 'list', 'alter');
common::printIcon('story', 'review', $vars, $child, 'list', 'search');
common::printIcon('story', 'close', $vars, $child, 'list', '', '', 'iframe', true);
common::printIcon('story', 'edit', $vars, $child, 'list');
+1 -1
View File
@@ -98,7 +98,7 @@
<td class="c-date"><?php echo $todo->date == '2030-01-01' ? $lang->todo->periods['future'] : $todo->date;?></td>
<td class="c-type"><?php echo zget($lang->todo->typeList, $todo->type, '');?></td>
<td class="c-pri"><span title="<?php echo zget($lang->todo->priList, $todo->pri);?>" class='label-pri <?php echo 'label-pri-' . $todo->pri;?>' title='<?php echo zget($lang->todo->priList, $todo->pri, $todo->pri);?>'><?php echo zget($lang->todo->priList, $todo->pri)?></span></td>
<td class="c-name" title="<?php echo $todo->name;?>"><?php echo html::a($this->createLink('todo', 'view', "id=$todo->id&from=my", '', true), $todo->name, '', "data-toggle='modal' data-type='iframe' data-title='" . $lang->todo->view . "' data-icon='check'");?></td>
<td class="c-name" title="<?php echo $todo->name;?>"><?php echo html::a($this->createLink('todo', 'view', "id=$todo->id&from=my", '', true), $todo->name, '', "data-toggle='modal' data-width='80%' data-type='iframe' data-title='" . $lang->todo->view . "' data-icon='check'");?></td>
<td><?php echo zget($users, $todo->assignedBy);?></td>
<td class="c-begin"><?php echo $todo->begin;?></td>
<td class="c-end"><?php echo $todo->end;?></td>
+13 -5
View File
@@ -31,13 +31,17 @@ class personnel extends control
$program = $this->program->getByID($programID);
/* Build the search form. */
$queryID = $browseType == 'bysearch' ? (int)$param : 0;
$actionURL = $this->createLink('personnel', 'accessible', "pargramID=$programID&deptID=$deptID&browseType=bysearch&quertID=myQueryID");
$personnelList = $this->personnel->getAccessiblePersonnel($programID, $deptID, $browseType, $queryID);
/* Set the pager. */
$this->app->loadClass('pager', true);
$pager = pager::init($recTotal, $recPerPage, $pageID);
$recTotal = count($personnelList);
$pager = new pager($recTotal, $recPerPage, $pageID);
$personnelList = array_chunk($personnelList, $pager->recPerPage);
/* Build the search form. */
$queryID = $browseType == 'bysearch' ? (int)$param : 0;
$actionURL = $this->createLink('personnel', 'accessible', "pargramID=$programID&deptID=$deptID&browseType=bysearch&quertID=myQueryID");
$this->config->personnel->accessible->search['params']['role']['values'] = $this->lang->user->roleList;
$this->config->personnel->accessible->search['params']['gender']['values'] = $this->lang->user->genderList;
$this->personnel->buildSearchForm($queryID, $actionURL);
@@ -54,7 +58,7 @@ class personnel extends control
$this->view->pager = $pager;
$this->view->param = $param;
$this->view->browseType = $browseType;
$this->view->personnelList = $this->personnel->getAccessiblePersonnel($programID, $deptID, $browseType, $queryID, $pager);
$this->view->personnelList = empty($personnelList) ? $personnelList : $personnelList[$pageID - 1];
$this->view->deptList = $this->loadModel('dept')->getOptionMenu();
$this->view->dept = $this->dept->getByID($deptID);
$this->view->deptTree = $this->dept->getTreeMenu($deptID = 0, array(new personnelModel, 'createMemberLink'), $programID);
@@ -165,6 +169,8 @@ class personnel extends control
$this->personnel->addWhitelist($objectType, $objectID);
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => $this->getError()));
$this->loadModel('action')->create('whitelist', $objectID, 'managedWhitelist', '', $objectType);
$locateLink = $this->session->whitelistList ? $this->session->whitelistList : $this->createLink($module, 'whitelist', "objectID=$objectID");
$openApp = $module == 'program' ? ($from == 'project' || $from == 'my' ? '#open=project' : '#open=program') : '';
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locateLink . $openApp));
@@ -219,6 +225,8 @@ class personnel extends control
if($acl->objectType == 'product') $this->personnel->deleteProgramWhitelist($acl->objectID, $acl->account);
if($acl->objectType == 'sprint') $this->personnel->deleteProjectWhitelist($acl->objectID, $acl->account);
$this->loadModel('action')->create('whitelist', $acl->objectID, 'managedWhitelist', '', $acl->objectType);
die(js::reload('parent'));
}
}
+58 -10
View File
@@ -19,11 +19,10 @@ class personnelModel extends model
* @param string $browseType
* @param string $orderBy
* @param int $queryID
* @param object $pager
* @access public
* @return array
*/
public function getAccessiblePersonnel($programID = 0, $deptID = 0, $browseType = 'all', $queryID = 0, $pager)
public function getAccessiblePersonnel($programID = 0, $deptID = 0, $browseType = 'all', $queryID = 0)
{
$accessibleQuery = '';
if($browseType == 'bysearch')
@@ -41,20 +40,69 @@ class personnelModel extends model
/* Determine who can be accessed based on access control. */
$program = $this->loadModel('program')->getByID($programID);
$personnelList = array();
if($program->acl != 'open')
$personnelList = $this->dao->select('t2.id,t2.dept,t2.account,t2.role,t2.realname,t2.gender')->from(TABLE_USERVIEW)->alias('t1')
->leftJoin(TABLE_USER)->alias('t2')->on('t1.account=t2.account')
->where('t2.deleted')->eq(0)
->beginIF($program->acl != 'open')->andWhere("CONCAT(',', t1.programs, ',')")->like("%,$programID,%")
->beginIF($deptID > 0)->andWhere('t2.dept')->eq($deptID)->fi()
->beginIF($browseType == 'bysearch')->andWhere($accessibleQuery)->fi()
->fetchAll('id');
if($program->acl == 'open')
{
$personnelList = $this->dao->select('t2.id,t2.dept,t2.account,t2.role,t2.realname,t2.gender')->from(TABLE_USERVIEW)->alias('t1')
->leftJoin(TABLE_USER)->alias('t2')->on('t1.account=t2.account')
->where("CONCAT(',', t1.programs, ',')")->like("%,$programID,%")
->beginIF($deptID > 0)->andWhere('t2.dept')->eq($deptID)->fi()
->beginIF($browseType == 'bysearch')->andWhere($accessibleQuery)->fi()
->page($pager)
->fetchAll();
foreach($personnelList as $personnel)
{
if(!$this->canViewProgram($programID, $personnel->account)) unset($personnelList[$personnel->id]);
}
}
return $personnelList;
}
/**
* Check if you have permission to view the program.
*
* @param int $programID
* @param string $account
* @access public
* @return void
*/
public function canViewProgram($programID, $account)
{
if($this->app->user->admin) return true;
static $groupAcl = array();
static $groupInfo = array();
if(empty($groupAcl))
{
$groupAcl = $this->dao->select('id,acl')->from(TABLE_GROUP)->fetchPairs();
foreach($groupAcl as $groupID => $group) $groupInfo[$groupID] = json_decode($groupAcl[$groupID]);
}
static $userGroups = array();
if(empty($userGroups)) $userGroups = $this->dao->select('*')->from(TABLE_USERGROUP)->fetchGroup('account', 'group');
$programRight = false;
if(isset($userGroups[$account]))
{
foreach($userGroups[$account] as $groupID => $userGroup)
{
$group = $groupInfo[$groupID];
if(!isset($group->programs))
{
$programRight = true;
continue;
}
elseif(in_array($programID, $group->programs))
{
$programRight = true;
continue;
}
}
}
return $programRight;
}
/**
* Get invest person list.
*
-12
View File
@@ -12,7 +12,6 @@
<?php include '../../common/view/header.html.php';
js::set('deptID', $deptID);
?>
<?php if($acl != 'open'): ?>
<div id="mainMenu" class="clearfix">
<div id="sidebarHeader">
<div class="title">
@@ -24,19 +23,15 @@ js::set('deptID', $deptID);
<a id="bysearchTab" class="btn btn-link querybox-toggle"><i class="icon icon-search muted"></i><?php echo $lang->personnel->search;?></a>
</div>
</div>
<?php endif;?>
<div id="mainContent" class="main-row fade">
<?php if($acl != 'open'): ?>
<div id="sidebar" class="side-col">
<div class="sidebar-toggle"><i class="icon icon-angle-left"></i></div>
<div class="cell">
<?php echo $deptTree;?>
</div>
</div>
<?php endif;?>
<div class="main-col">
<div id="queryBox" class="cell <?php if($browseType == 'bysearch') echo ' show';?>" data-module="accessible"></div>
<?php if(!empty($personnelList)):?>
<form class="main-table table-personnel" action="" data-ride="table">
<table id="accessibleList" class="table has-sort-head">
<thead>
@@ -67,12 +62,5 @@ js::set('deptID', $deptID);
</div>
</form>
</div>
<?php else:?>
<div class="table-empty-tip">
<p>
<span class="text-muted"><?php echo $acl == 'open' ? $lang->personnel->openedPGMTip : $lang->noData;?></span>
</p>
</div>
<?php endif;?>
</div>
<?php include '../../common/view/footer.html.php';?>
+9 -1
View File
@@ -56,7 +56,8 @@ class product extends control
if($this->app->getViewType() != 'mhtml') unset($this->lang->product->menu->index);
$productID = $this->product->saveState($productID, $this->products);
$branch = (int)$this->cookie->preBranch;
//$this->product->setMenu($productID, $branch);
if($this->app->viewType == 'mhtml') $this->product->setMenu($productID, $branch);
if(common::hasPriv('product', 'create')) $this->lang->TRActions = html::a($this->createLink('product', 'create'), "<i class='icon icon-sm icon-plus'></i> " . $this->lang->product->create, '', "class='btn btn-primary'");
@@ -321,6 +322,7 @@ class product extends control
$this->loadModel('action')->create('product', $productID, 'opened');
$this->executeHooks($productID);
if($this->viewType == 'json') $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'id' => $productID));
$openApp = $this->app->openApp;
$moduleName = $openApp == 'program'? 'program' : $this->moduleName;
@@ -1048,6 +1050,12 @@ class product extends control
$this->loadModel('program');
$this->session->set('productList', $this->app->getURI(true), 'product');
if($this->app->viewType == 'mhtml')
{
$productID = $this->product->saveState(0, $this->products);
$this->product->setMenu($productID);
}
/* Process product structure. */
$productStructure = array();
$productStats = $this->product->getStats($orderBy, '', $browseType, '', 'story');
+29 -1
View File
@@ -1,5 +1,5 @@
/**
* Load product Lines.
* Load product Lines.
*
* @param $rootID
* @access public
@@ -37,3 +37,31 @@ $('#program').change(function()
$('#line').chosen();
})
})
/**
* Toggle line.
*
* @param object $obj
* @access public
* @return void
*/
function toggleLine(obj)
{
var $obj = $(obj);
if($obj.length == 0) return false;
var $line = $obj.closest('table').find('#line');
if($obj.prop('checked'))
{
$('form .line-no-exist').removeClass('hidden');
$('form .line-exist').addClass('hidden');
$line.attr('disabled', 'disabled');
}
else
{
$('form .line-exist').removeClass('hidden');
$('form .line-no-exist').addClass('hidden');
$line.removeAttr('disabled');
}
}
+1
View File
@@ -28,6 +28,7 @@ $lang->product->updateOrder = 'Ranking';
$lang->product->orderAction = "Rank {$lang->productCommon}";
$lang->product->all = "Alle {$lang->productCommon}";
$lang->product->manageLine = "Manage {$lang->productCommon} Line";
$lang->product->newLine = "Create {$lang->productCommon} Line";
$lang->product->export = 'Exportiere Daten';
$lang->product->exportAction = "Export {$lang->productCommon}";
$lang->product->dashboard = 'Dashboard';
+1
View File
@@ -26,6 +26,7 @@ $lang->product->closed = 'Closed';
$lang->product->updateOrder = 'Order';
$lang->product->all = "All {$lang->productCommon}s";
$lang->product->manageLine = "Manage {$lang->productCommon} Line";
$lang->product->newLine = "Create {$lang->productCommon} Line";
$lang->product->export = 'Export';
$lang->product->dashboard = "Dashboard";
$lang->product->changeProgram = "{$lang->productCommon} confirmation of the scope of influence of adjustment of the program set";
+1
View File
@@ -28,6 +28,7 @@ $lang->product->updateOrder = 'Ordre';
$lang->product->orderAction = "Rang {$lang->productCommon}";
$lang->product->all = "Tous les {$lang->productCommon}s";
$lang->product->manageLine = "Manage {$lang->productCommon} Line";
$lang->product->newLine = "Create {$lang->productCommon} Line";
$lang->product->export = 'Export';
$lang->product->exportAction = "Export {$lang->productCommon}";
$lang->product->dashboard = "Dashboard";
+1
View File
@@ -28,6 +28,7 @@ $lang->product->updateOrder = 'Sắp xếp';
$lang->product->orderAction = "Đánh giá {$lang->productCommon}";
$lang->product->all = "Tất cả {$lang->productCommon}";
$lang->product->manageLine = "Manage {$lang->productCommon} Line";
$lang->product->newLine = "Create {$lang->productCommon} Line";
$lang->product->export = 'Xuất';
$lang->product->exportAction = "Xuất {$lang->productCommon}";
$lang->product->dashboard = "Dashboard";
+1
View File
@@ -26,6 +26,7 @@ $lang->product->closed = '已关闭';
$lang->product->updateOrder = '排序';
$lang->product->all = "所有{$lang->productCommon}";
$lang->product->manageLine = "维护{$lang->productCommon}线";
$lang->product->newLine = "新建{$lang->productCommon}线";
$lang->product->export = '导出数据';
$lang->product->dashboard = "{$lang->productCommon}仪表盘";
$lang->product->changeProgram = "{$lang->productCommon}调整所属项目集影响范围确认";

Some files were not shown because too many files have changed in this diff Show More