diff --git a/VERSION b/VERSION index 120e7b8de4..2bbd2b4b42 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -15.0.stable +15.0.1 diff --git a/config/config.php b/config/config.php index d484b80017..fad76cba64 100644 --- a/config/config.php +++ b/config/config.php @@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}} if(!function_exists('getWebRoot')){function getWebRoot(){}} /* 基本设置。Basic settings. */ -$config->version = '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. diff --git a/config/zentaopms.php b/config/zentaopms.php index 7e0e797960..2b3487872e 100644 --- a/config/zentaopms.php +++ b/config/zentaopms.php @@ -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(); diff --git a/db/demo.sql b/db/demo.sql index b03a8e5f4e..5e6f3d6366 100644 --- a/db/demo.sql +++ b/db/demo.sql @@ -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, '首页设计和开发', '作为一名本公司的用户,我希望可以在首页看到该公司网站的基本内容,例如最新动态、部分成果展示、联系信息、工商信息等。
', '开发并通过验收
'), (2, 1, '新闻中心的设计和开发。', '作为一名本公司的用户,我希望可以在新闻中心看到该公司网站的企业新闻,这样可以通过新闻了解企业的最新动态。
', ''), diff --git a/db/endemo.sql b/db/endemo.sql index b03a8e5f4e..5e6f3d6366 100644 --- a/db/endemo.sql +++ b/db/endemo.sql @@ -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, '首页设计和开发', '作为一名本公司的用户,我希望可以在首页看到该公司网站的基本内容,例如最新动态、部分成果展示、联系信息、工商信息等。
', '开发并通过验收
'), (2, 1, '新闻中心的设计和开发。', '作为一名本公司的用户,我希望可以在新闻中心看到该公司网站的企业新闻,这样可以通过新闻了解企业的最新动态。
', ''), diff --git a/db/update15.0.rc3.sql b/db/update15.0.rc3.sql index 48a9297a65..8185fd6600 100644 --- a/db/update15.0.rc3.sql +++ b/db/update15.0.rc3.sql @@ -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'; diff --git a/db/update15.0.sql b/db/update15.0.sql index 89ff0d7c93..1dab238791 100644 --- a/db/update15.0.sql +++ b/db/update15.0.sql @@ -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'; diff --git a/db/zentao.sql b/db/zentao.sql index 7887d5a9d3..143cff8d1d 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -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'), diff --git a/framework/base/helper.class.php b/framework/base/helper.class.php index 423ef4834c..33e13afff4 100644 --- a/framework/base/helper.class.php +++ b/framework/base/helper.class.php @@ -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')) { diff --git a/framework/base/router.class.php b/framework/base/router.class.php index 3a0490f547..ad4e48f97d 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -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); } diff --git a/lib/base/front/front.class.php b/lib/base/front/front.class.php index 6708f6f377..5a0fccc830 100644 --- a/lib/base/front/front.class.php +++ b/lib/base/front/front.class.php @@ -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(); } diff --git a/lib/scm/gitlab.class.php b/lib/scm/gitlab.class.php index 814de73491..e825ba7d04 100644 --- a/lib/scm/gitlab.class.php +++ b/lib/scm/gitlab.class.php @@ -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); } diff --git a/lib/spliter/spliter.class.php b/lib/spliter/spliter.class.php index c630596a22..f1ad87b7b8 100644 --- a/lib/spliter/spliter.class.php +++ b/lib/spliter/spliter.class.php @@ -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 */ diff --git a/module/action/config.php b/module/action/config.php index 55f1e7b19c..66255e67d6 100755 --- a/module/action/config.php +++ b/module/action/config.php @@ -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,'; diff --git a/module/action/control.php b/module/action/control.php index daae09f2bc..2355ae678d 100755 --- a/module/action/control.php +++ b/module/action/control.php @@ -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); diff --git a/module/action/lang/de.php b/module/action/lang/de.php index 4e1c3aad2e..b4e41f8e8f 100644 --- a/module/action/lang/de.php +++ b/module/action/lang/de.php @@ -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, $action von $actor.' . "\n"; -$lang->action->desc->extra = '$date, $action als $extra von $actor.' . "\n"; -$lang->action->desc->opened = '$date, erstellt von $actor .' . "\n"; -$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n"; -$lang->action->desc->created = '$date, erstellt von $actor .' . "\n"; -$lang->action->desc->added = '$date, hinzugefügt durch $actor .' . "\n"; -$lang->action->desc->changed = '$date, bearbeitet von $actor .' . "\n"; -$lang->action->desc->edited = '$date, bearbeitet von $actor .' . "\n"; -$lang->action->desc->assigned = '$date, $actor zugewisen an $extra.' . "\n"; -$lang->action->desc->closed = '$date, geschlossen von $actor .' . "\n"; -$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n"; -$lang->action->desc->deleted = '$date, gelöscht von $actor .' . "\n"; -$lang->action->desc->deletedfile = '$date, $actor löschte $extra.' . "\n"; -$lang->action->desc->editfile = '$date, $actor bearbeitete $extra.' . "\n"; -$lang->action->desc->erased = '$date, gelöscht von $actor .' . "\n"; -$lang->action->desc->undeleted = '$date, wiederhergestellt von $actor .' . "\n"; -$lang->action->desc->hidden = '$date, versteckt von $actor .' . "\n"; -$lang->action->desc->commented = '$date, hinzugefügt von $actor.' . "\n"; -$lang->action->desc->activated = '$date, aktiviert von $actor .' . "\n"; -$lang->action->desc->blocked = '$date, geblockt von $actor .' . "\n"; -$lang->action->desc->moved = '$date, verschoben von $actor , ursprünglich "$extra".' . "\n"; -$lang->action->desc->confirmed = '$date, $actor hat die Anpassung der Story bestätigt. Das letzte Build ist #$extra.' . "\n"; -$lang->action->desc->caseconfirmed = '$date, $actor hat die Anpassung des Falls bestätigt. Das letzte Build ist #$extra' . "\n"; -$lang->action->desc->bugconfirmed = '$date, $actor hat den Bug bestätigt.' . "\n"; -$lang->action->desc->frombug = '$date, konvertiert von $actor. Die ID war $extra.'; -$lang->action->desc->started = '$date, gestartet von $actor.' . "\n"; -$lang->action->desc->restarted = '$date, continued by $actor.' . "\n"; -$lang->action->desc->delayed = '$date, zurückgestellt von $actor.' . "\n"; -$lang->action->desc->suspended = '$date, ausgesetzt von $actor.' . "\n"; -$lang->action->desc->recordestimate = '$date, aufgenommen von $actor und hat $extra Stunden aufgebraucht.'; -$lang->action->desc->editestimate = '$date, $actor Stunden angepaast.'; -$lang->action->desc->deleteestimate = '$date, $actor Stunden gelöscht.'; -$lang->action->desc->canceled = '$date, abgebrochen von $actor.' . "\n"; -$lang->action->desc->svncommited = '$date, $actor festgelegt. Build ist #$extra.' . "\n"; -$lang->action->desc->gitcommited = '$date, $actor festgelegt. Build ist #$extra.' . "\n"; -$lang->action->desc->finished = '$date, abgeschlossen von $actor.' . "\n"; -$lang->action->desc->paused = '$date, pausiert von $actor.' . "\n"; -$lang->action->desc->verified = '$date, überprüft von $actor.' . "\n"; -$lang->action->desc->diff1 = '%s wurde geändert. Es war "%s" und ist jetzt "%s".
' . "\n"; -$lang->action->desc->diff2 = '%s wurde geändert. Die Differenz ist ' . "\n" . "
%s
" . "\n
%s
"; -$lang->action->desc->diff3 = 'Dateiname %s wurde geändert zu %s .' . "\n"; -$lang->action->desc->linked2bug = '$date Verknüpft mit $extra von $actor'; -$lang->action->desc->resolved = '$date, resolved by $actor ' . "\n"; -$lang->action->desc->managed = '$date, by $actor managed.' . "\n"; +$lang->action->desc->common = '$date, $action von $actor.' . "\n"; +$lang->action->desc->extra = '$date, $action als $extra von $actor.' . "\n"; +$lang->action->desc->opened = '$date, erstellt von $actor .' . "\n"; +$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n"; +$lang->action->desc->created = '$date, erstellt von $actor .' . "\n"; +$lang->action->desc->added = '$date, hinzugefügt durch $actor .' . "\n"; +$lang->action->desc->changed = '$date, bearbeitet von $actor .' . "\n"; +$lang->action->desc->edited = '$date, bearbeitet von $actor .' . "\n"; +$lang->action->desc->assigned = '$date, $actor zugewisen an $extra.' . "\n"; +$lang->action->desc->closed = '$date, geschlossen von $actor .' . "\n"; +$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n"; +$lang->action->desc->deleted = '$date, gelöscht von $actor .' . "\n"; +$lang->action->desc->deletedfile = '$date, $actor löschte $extra.' . "\n"; +$lang->action->desc->editfile = '$date, $actor bearbeitete $extra.' . "\n"; +$lang->action->desc->erased = '$date, gelöscht von $actor .' . "\n"; +$lang->action->desc->undeleted = '$date, wiederhergestellt von $actor .' . "\n"; +$lang->action->desc->hidden = '$date, versteckt von $actor .' . "\n"; +$lang->action->desc->commented = '$date, hinzugefügt von $actor.' . "\n"; +$lang->action->desc->activated = '$date, aktiviert von $actor .' . "\n"; +$lang->action->desc->blocked = '$date, geblockt von $actor .' . "\n"; +$lang->action->desc->moved = '$date, verschoben von $actor , ursprünglich "$extra".' . "\n"; +$lang->action->desc->confirmed = '$date, $actor hat die Anpassung der Story bestätigt. Das letzte Build ist #$extra.' . "\n"; +$lang->action->desc->caseconfirmed = '$date, $actor hat die Anpassung des Falls bestätigt. Das letzte Build ist #$extra' . "\n"; +$lang->action->desc->bugconfirmed = '$date, $actor hat den Bug bestätigt.' . "\n"; +$lang->action->desc->frombug = '$date, konvertiert von $actor. Die ID war $extra.'; +$lang->action->desc->started = '$date, gestartet von $actor.' . "\n"; +$lang->action->desc->restarted = '$date, continued by $actor.' . "\n"; +$lang->action->desc->delayed = '$date, zurückgestellt von $actor.' . "\n"; +$lang->action->desc->suspended = '$date, ausgesetzt von $actor.' . "\n"; +$lang->action->desc->recordestimate = '$date, aufgenommen von $actor und hat $extra Stunden aufgebraucht.'; +$lang->action->desc->editestimate = '$date, $actor Stunden angepaast.'; +$lang->action->desc->deleteestimate = '$date, $actor Stunden gelöscht.'; +$lang->action->desc->canceled = '$date, abgebrochen von $actor.' . "\n"; +$lang->action->desc->svncommited = '$date, $actor festgelegt. Build ist #$extra.' . "\n"; +$lang->action->desc->gitcommited = '$date, $actor festgelegt. Build ist #$extra.' . "\n"; +$lang->action->desc->finished = '$date, abgeschlossen von $actor.' . "\n"; +$lang->action->desc->paused = '$date, pausiert von $actor.' . "\n"; +$lang->action->desc->verified = '$date, überprüft von $actor.' . "\n"; +$lang->action->desc->diff1 = '%s wurde geändert. Es war "%s" und ist jetzt "%s".
' . "\n"; +$lang->action->desc->diff2 = '%s wurde geändert. Die Differenz ist ' . "\n" . "
%s
" . "\n
%s
"; +$lang->action->desc->diff3 = 'Dateiname %s wurde geändert zu %s .' . "\n"; +$lang->action->desc->linked2bug = '$date Verknüpft mit $extra von $actor'; +$lang->action->desc->linked2testtask = '$date, linked to $extra by $actor'; +$lang->action->desc->resolved = '$date, resolved by $actor ' . "\n"; +$lang->action->desc->managed = '$date, by $actor managed.' . "\n"; +$lang->action->desc->estimated = '$date, by $actor estimated.' . "\n"; +$lang->action->desc->run = '$date, by $actor executed.' . "\n"; /* 子任务修改父任务的历史操作记录 */ $lang->action->desc->createchildren = '$date, $actor created a child task $extra。' . "\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(); diff --git a/module/action/lang/en.php b/module/action/lang/en.php index 1fdac66288..740ac31413 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -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, $action by $actor.' . "\n"; -$lang->action->desc->extra = '$date, $action as $extra by $actor.' . "\n"; -$lang->action->desc->opened = '$date, created by $actor .' . "\n"; -$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n"; -$lang->action->desc->created = '$date, created by $actor .' . "\n"; -$lang->action->desc->added = '$date, added by $actor .' . "\n"; -$lang->action->desc->changed = '$date, changed by $actor .' . "\n"; -$lang->action->desc->edited = '$date, edited by $actor .' . "\n"; -$lang->action->desc->assigned = '$date, $actor assigned to $extra.' . "\n"; -$lang->action->desc->closed = '$date, closed by $actor .' . "\n"; -$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n"; -$lang->action->desc->deleted = '$date, deleted by $actor .' . "\n"; -$lang->action->desc->deletedfile = '$date, $actor deleted $extra.' . "\n"; -$lang->action->desc->editfile = '$date, $actor edited $extra.' . "\n"; -$lang->action->desc->erased = '$date, deleted by $actor .' . "\n"; -$lang->action->desc->undeleted = '$date, restored by $actor .' . "\n"; -$lang->action->desc->hidden = '$date, hidden by $actor .' . "\n"; -$lang->action->desc->commented = '$date, added by $actor.' . "\n"; -$lang->action->desc->activated = '$date, activated by $actor .' . "\n"; -$lang->action->desc->blocked = '$date, blocked by $actor .' . "\n"; -$lang->action->desc->moved = '$date, moved by $actor , which was "$extra".' . "\n"; -$lang->action->desc->confirmed = '$date, $actor confirmed the story change. The latest build is #$extra.' . "\n"; -$lang->action->desc->caseconfirmed = '$date, $actor confirmed the case change. The latest build is #$extra' . "\n"; -$lang->action->desc->bugconfirmed = '$date, $actor confirmed Bug.' . "\n"; -$lang->action->desc->frombug = '$date, converted from $actor. Its ID was $extra.'; -$lang->action->desc->started = '$date, started by $actor.' . "\n"; -$lang->action->desc->restarted = '$date, continued by $actor.' . "\n"; -$lang->action->desc->delayed = '$date, postponed by $actor.' . "\n"; -$lang->action->desc->suspended = '$date, suspended by $actor.' . "\n"; -$lang->action->desc->recordestimate = '$date, recorded by $actor and it cost $extra hours.'; -$lang->action->desc->editestimate = '$date, $actor edited Hour.'; -$lang->action->desc->deleteestimate = '$date, $actor deleted Hour.'; -$lang->action->desc->canceled = '$date, cancelled by $actor.' . "\n"; -$lang->action->desc->svncommited = '$date, $actor committed and the build is #$extra.' . "\n"; -$lang->action->desc->gitcommited = '$date, $actor committed and the build is #$extra.' . "\n"; -$lang->action->desc->finished = '$date, finished by $actor.' . "\n"; -$lang->action->desc->paused = '$date, paused by $actor.' . "\n"; -$lang->action->desc->verified = '$date, verified by $actor.' . "\n"; -$lang->action->desc->diff1 = '%s is changed. It was "%s" and it is "%s".
' . "\n"; -$lang->action->desc->diff2 = '%s is changed. The difference is ' . "\n" . "
%s
" . "\n
%s
"; -$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n"; -$lang->action->desc->linked2bug = '$date, linked to $extra by $actor'; -$lang->action->desc->resolved = '$date, resolved by $actor ' . "\n"; -$lang->action->desc->managed = '$date, by $actor managed.' . "\n"; +$lang->action->desc->common = '$date, $action by $actor.' . "\n"; +$lang->action->desc->extra = '$date, $action as $extra by $actor.' . "\n"; +$lang->action->desc->opened = '$date, created by $actor .' . "\n"; +$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n"; +$lang->action->desc->created = '$date, created by $actor .' . "\n"; +$lang->action->desc->added = '$date, added by $actor .' . "\n"; +$lang->action->desc->changed = '$date, changed by $actor .' . "\n"; +$lang->action->desc->edited = '$date, edited by $actor .' . "\n"; +$lang->action->desc->assigned = '$date, $actor assigned to $extra.' . "\n"; +$lang->action->desc->closed = '$date, closed by $actor .' . "\n"; +$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n"; +$lang->action->desc->deleted = '$date, deleted by $actor .' . "\n"; +$lang->action->desc->deletedfile = '$date, $actor deleted $extra.' . "\n"; +$lang->action->desc->editfile = '$date, $actor edited $extra.' . "\n"; +$lang->action->desc->erased = '$date, deleted by $actor .' . "\n"; +$lang->action->desc->undeleted = '$date, restored by $actor .' . "\n"; +$lang->action->desc->hidden = '$date, hidden by $actor .' . "\n"; +$lang->action->desc->commented = '$date, added by $actor.' . "\n"; +$lang->action->desc->activated = '$date, activated by $actor .' . "\n"; +$lang->action->desc->blocked = '$date, blocked by $actor .' . "\n"; +$lang->action->desc->moved = '$date, moved by $actor , which was "$extra".' . "\n"; +$lang->action->desc->confirmed = '$date, $actor confirmed the story change. The latest build is #$extra.' . "\n"; +$lang->action->desc->caseconfirmed = '$date, $actor confirmed the case change. The latest build is #$extra' . "\n"; +$lang->action->desc->bugconfirmed = '$date, $actor confirmed Bug.' . "\n"; +$lang->action->desc->frombug = '$date, converted from $actor. Its ID was $extra.'; +$lang->action->desc->started = '$date, started by $actor.' . "\n"; +$lang->action->desc->restarted = '$date, continued by $actor.' . "\n"; +$lang->action->desc->delayed = '$date, postponed by $actor.' . "\n"; +$lang->action->desc->suspended = '$date, suspended by $actor.' . "\n"; +$lang->action->desc->recordestimate = '$date, recorded by $actor and it cost $extra hours.'; +$lang->action->desc->editestimate = '$date, $actor edited Hour.'; +$lang->action->desc->deleteestimate = '$date, $actor deleted Hour.'; +$lang->action->desc->canceled = '$date, cancelled by $actor.' . "\n"; +$lang->action->desc->svncommited = '$date, $actor committed and the build is #$extra.' . "\n"; +$lang->action->desc->gitcommited = '$date, $actor committed and the build is #$extra.' . "\n"; +$lang->action->desc->finished = '$date, finished by $actor.' . "\n"; +$lang->action->desc->paused = '$date, paused by $actor.' . "\n"; +$lang->action->desc->verified = '$date, verified by $actor.' . "\n"; +$lang->action->desc->diff1 = '%s is changed. It was "%s" and it is "%s".
' . "\n"; +$lang->action->desc->diff2 = '%s is changed. The difference is ' . "\n" . "
%s
" . "\n
%s
"; +$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n"; +$lang->action->desc->linked2bug = '$date, linked to $extra by $actor'; +$lang->action->desc->linked2testtask = '$date, linked to $extra by $actor'; +$lang->action->desc->resolved = '$date, resolved by $actor ' . "\n"; +$lang->action->desc->managed = '$date, by $actor managed.' . "\n"; +$lang->action->desc->estimated = '$date, by $actor estimated.' . "\n"; +$lang->action->desc->run = '$date, by $actor executed.' . "\n"; /* Used to describe the history of operations related to parent-child tasks. */ $lang->action->desc->createchildren = '$date, $actor created a child task $extra。' . "\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(); diff --git a/module/action/lang/fr.php b/module/action/lang/fr.php index fc275fa0e0..e39d196bf5 100644 --- a/module/action/lang/fr.php +++ b/module/action/lang/fr.php @@ -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, $action par $actor.' . "\n"; -$lang->action->desc->extra = '$date, $action en tant que $extra par $actor.' . "\n"; -$lang->action->desc->opened = '$date, initié par $actor .' . "\n"; -$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n"; -$lang->action->desc->created = '$date, créé par $actor .' . "\n"; -$lang->action->desc->added = '$date, ajouter par $actor .' . "\n"; -$lang->action->desc->changed = '$date, modifié par $actor .' . "\n"; -$lang->action->desc->edited = '$date, édité par $actor .' . "\n"; -$lang->action->desc->assigned = '$date, $actor affecté à $extra.' . "\n"; -$lang->action->desc->closed = '$date, fermé par $actor .' . "\n"; -$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n"; -$lang->action->desc->deleted = '$date, supprimé par $actor .' . "\n"; -$lang->action->desc->deletedfile = '$date, $actor a supprimé $extra.' . "\n"; -$lang->action->desc->editfile = '$date, $actor a édité $extra.' . "\n"; -$lang->action->desc->erased = '$date, supprimé par $actor .' . "\n"; -$lang->action->desc->undeleted = '$date, restauré par $actor .' . "\n"; -$lang->action->desc->hidden = '$date, masqué par $actor .' . "\n"; -$lang->action->desc->commented = '$date, ajouté par $actor.' . "\n"; -$lang->action->desc->activated = '$date, activé par $actor .' . "\n"; -$lang->action->desc->blocked = '$date, bloqué par $actor .' . "\n"; -$lang->action->desc->moved = '$date, déplacé par $actor , qui était "$extra".' . "\n"; -$lang->action->desc->confirmed = '$date, $actor a confirmé la modification de la story. Le dernier build est #$extra.' . "\n"; -$lang->action->desc->caseconfirmed = '$date, $actor a confirmé la modification du CasTest. Le dernier build est #$extra' . "\n"; -$lang->action->desc->bugconfirmed = '$date, $actor a confirmé le Bug.' . "\n"; -$lang->action->desc->frombug = '$date, converti par $actor. Son ID était $extra.'; -$lang->action->desc->started = '$date, commencé par $actor.' . "\n"; -$lang->action->desc->restarted = '$date, reprise par $actor.' . "\n"; -$lang->action->desc->delayed = '$date, ajourné par $actor.' . "\n"; -$lang->action->desc->suspended = '$date, suspendu par $actor.' . "\n"; -$lang->action->desc->recordestimate = '$date, enregistré par $actor et son coût est de $extra heures.'; -$lang->action->desc->editestimate = '$date, $actor a édité son temps estimé.'; -$lang->action->desc->deleteestimate = '$date, $actor a supprimé son estimation de temps.'; -$lang->action->desc->canceled = '$date, annulé par $actor.' . "\n"; -$lang->action->desc->svncommited = '$date, $actor a validé, le build est #$extra.' . "\n"; -$lang->action->desc->gitcommited = '$date, $actor a validé, le build est #$extra.' . "\n"; -$lang->action->desc->finished = '$date, terminé par $actor.' . "\n"; -$lang->action->desc->paused = '$date, mis en pause par $actor.' . "\n"; -$lang->action->desc->verified = '$date, verifié par $actor.' . "\n"; -$lang->action->desc->diff1 = '%s a changé. Il est passé de "%s" à "%s".
' . "\n"; -$lang->action->desc->diff2 = '%s a changé. La différence est ' . "\n" . "
%s
" . "\n
%s
"; -$lang->action->desc->diff3 = 'Le nom du fichier %s a changé pour %s .' . "\n"; -$lang->action->desc->linked2bug = '$date, affecté à $extra par $actor'; -$lang->action->desc->resolved = '$date, resolved by $actor ' . "\n"; -$lang->action->desc->managed = '$date, by $actor managed.' . "\n"; +$lang->action->desc->common = '$date, $action par $actor.' . "\n"; +$lang->action->desc->extra = '$date, $action en tant que $extra par $actor.' . "\n"; +$lang->action->desc->opened = '$date, initié par $actor .' . "\n"; +$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n"; +$lang->action->desc->created = '$date, créé par $actor .' . "\n"; +$lang->action->desc->added = '$date, ajouter par $actor .' . "\n"; +$lang->action->desc->changed = '$date, modifié par $actor .' . "\n"; +$lang->action->desc->edited = '$date, édité par $actor .' . "\n"; +$lang->action->desc->assigned = '$date, $actor affecté à $extra.' . "\n"; +$lang->action->desc->closed = '$date, fermé par $actor .' . "\n"; +$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n"; +$lang->action->desc->deleted = '$date, supprimé par $actor .' . "\n"; +$lang->action->desc->deletedfile = '$date, $actor a supprimé $extra.' . "\n"; +$lang->action->desc->editfile = '$date, $actor a édité $extra.' . "\n"; +$lang->action->desc->erased = '$date, supprimé par $actor .' . "\n"; +$lang->action->desc->undeleted = '$date, restauré par $actor .' . "\n"; +$lang->action->desc->hidden = '$date, masqué par $actor .' . "\n"; +$lang->action->desc->commented = '$date, ajouté par $actor.' . "\n"; +$lang->action->desc->activated = '$date, activé par $actor .' . "\n"; +$lang->action->desc->blocked = '$date, bloqué par $actor .' . "\n"; +$lang->action->desc->moved = '$date, déplacé par $actor , qui était "$extra".' . "\n"; +$lang->action->desc->confirmed = '$date, $actor a confirmé la modification de la story. Le dernier build est #$extra.' . "\n"; +$lang->action->desc->caseconfirmed = '$date, $actor a confirmé la modification du CasTest. Le dernier build est #$extra' . "\n"; +$lang->action->desc->bugconfirmed = '$date, $actor a confirmé le Bug.' . "\n"; +$lang->action->desc->frombug = '$date, converti par $actor. Son ID était $extra.'; +$lang->action->desc->started = '$date, commencé par $actor.' . "\n"; +$lang->action->desc->restarted = '$date, reprise par $actor.' . "\n"; +$lang->action->desc->delayed = '$date, ajourné par $actor.' . "\n"; +$lang->action->desc->suspended = '$date, suspendu par $actor.' . "\n"; +$lang->action->desc->recordestimate = '$date, enregistré par $actor et son coût est de $extra heures.'; +$lang->action->desc->editestimate = '$date, $actor a édité son temps estimé.'; +$lang->action->desc->deleteestimate = '$date, $actor a supprimé son estimation de temps.'; +$lang->action->desc->canceled = '$date, annulé par $actor.' . "\n"; +$lang->action->desc->svncommited = '$date, $actor a validé, le build est #$extra.' . "\n"; +$lang->action->desc->gitcommited = '$date, $actor a validé, le build est #$extra.' . "\n"; +$lang->action->desc->finished = '$date, terminé par $actor.' . "\n"; +$lang->action->desc->paused = '$date, mis en pause par $actor.' . "\n"; +$lang->action->desc->verified = '$date, verifié par $actor.' . "\n"; +$lang->action->desc->diff1 = '%s a changé. Il est passé de "%s" à "%s".
' . "\n"; +$lang->action->desc->diff2 = '%s a changé. La différence est ' . "\n" . "
%s
" . "\n
%s
"; +$lang->action->desc->diff3 = 'Le nom du fichier %s a changé pour %s .' . "\n"; +$lang->action->desc->linked2bug = '$date, affecté à $extra par $actor'; +$lang->action->desc->linked2testtask = '$date, linked to $extra by $actor'; +$lang->action->desc->resolved = '$date, resolved by $actor ' . "\n"; +$lang->action->desc->managed = '$date, by $actor managed.' . "\n"; +$lang->action->desc->estimated = '$date, by $actor estimated.' . "\n"; +$lang->action->desc->run = '$date, by $actor executed.' . "\n"; /* 子任务修改父任务的历史操作记录 */ $lang->action->desc->createchildren = '$date, $actor a créé un sous-tâche $extra。' . "\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'; diff --git a/module/action/lang/vi.php b/module/action/lang/vi.php index dd24dd9d94..ff9145b833 100644 --- a/module/action/lang/vi.php +++ b/module/action/lang/vi.php @@ -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, $action bởi $actor.' . "\n"; -$lang->action->desc->extra = '$date, $action như $extra bởi $actor.' . "\n"; -$lang->action->desc->opened = '$date, được tạo bởi $actor .' . "\n"; -$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n"; -$lang->action->desc->created = '$date, được tạo bởi $actor .' . "\n"; -$lang->action->desc->added = '$date, thêm bởi $actor .' . "\n"; -$lang->action->desc->changed = '$date, changed by $actor .' . "\n"; -$lang->action->desc->edited = '$date, edited by $actor .' . "\n"; -$lang->action->desc->assigned = '$date, $actor assigned to $extra.' . "\n"; -$lang->action->desc->closed = '$date, được đóng bởi $actor .' . "\n"; -$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n"; -$lang->action->desc->deleted = '$date, được xóa bởi $actor .' . "\n"; -$lang->action->desc->deletedfile = '$date, $actor đã xóa $extra.' . "\n"; -$lang->action->desc->editfile = '$date, $actor đã sửa $extra.' . "\n"; -$lang->action->desc->erased = '$date, được xóa bởi $actor .' . "\n"; -$lang->action->desc->undeleted = '$date, khôi phục bởi $actor .' . "\n"; -$lang->action->desc->hidden = '$date, ẩn bởi $actor .' . "\n"; -$lang->action->desc->commented = '$date, được thêm bởi $actor.' . "\n"; -$lang->action->desc->activated = '$date, kích hoạt bởi $actor .' . "\n"; -$lang->action->desc->blocked = '$date, blocked by $actor .' . "\n"; -$lang->action->desc->moved = '$date, chuyển bởi $actor , cái là "$extra".' . "\n"; -$lang->action->desc->confirmed = '$date, $actor confirmed the story change. The latest build is #$extra.' . "\n"; -$lang->action->desc->caseconfirmed = '$date, $actor confirmed the case change. The latest build is #$extra' . "\n"; -$lang->action->desc->bugconfirmed = '$date, $actor confirmed Bug.' . "\n"; -$lang->action->desc->frombug = '$date, converted from $actor. Its ID was $extra.'; -$lang->action->desc->started = '$date, started by $actor.' . "\n"; -$lang->action->desc->restarted = '$date, continued by $actor.' . "\n"; -$lang->action->desc->delayed = '$date, postponed by $actor.' . "\n"; -$lang->action->desc->suspended = '$date, suspended by $actor.' . "\n"; -$lang->action->desc->recordestimate = '$date, ghi nhận bởi $actor and it cost $extra giờ.'; -$lang->action->desc->editestimate = '$date, $actor edited Hour.'; -$lang->action->desc->deleteestimate = '$date, $actor deleted Hour.'; -$lang->action->desc->canceled = '$date, cancelled by $actor.' . "\n"; -$lang->action->desc->svncommited = '$date, $actor committed and the build is #$extra.' . "\n"; -$lang->action->desc->gitcommited = '$date, $actor committed and the build is #$extra.' . "\n"; -$lang->action->desc->finished = '$date, finished by $actor.' . "\n"; -$lang->action->desc->paused = '$date, paused by $actor.' . "\n"; -$lang->action->desc->verified = '$date, verified by $actor.' . "\n"; -$lang->action->desc->diff1 = '%s is changed. It was "%s" and it is "%s".
' . "\n"; -$lang->action->desc->diff2 = '%s is changed. The difference is ' . "\n" . "
%s
" . "\n
%s
"; -$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n"; -$lang->action->desc->linked2bug = '$date, liên kết tới $extra bởi $actor'; -$lang->action->desc->resolved = '$date, resolved by $actor ' . "\n"; -$lang->action->desc->managed = '$date, by $actor managed.' . "\n"; +$lang->action->desc->common = '$date, $action bởi $actor.' . "\n"; +$lang->action->desc->extra = '$date, $action như $extra bởi $actor.' . "\n"; +$lang->action->desc->opened = '$date, được tạo bởi $actor .' . "\n"; +$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n"; +$lang->action->desc->created = '$date, được tạo bởi $actor .' . "\n"; +$lang->action->desc->added = '$date, thêm bởi $actor .' . "\n"; +$lang->action->desc->changed = '$date, changed by $actor .' . "\n"; +$lang->action->desc->edited = '$date, edited by $actor .' . "\n"; +$lang->action->desc->assigned = '$date, $actor assigned to $extra.' . "\n"; +$lang->action->desc->closed = '$date, được đóng bởi $actor .' . "\n"; +$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n"; +$lang->action->desc->deleted = '$date, được xóa bởi $actor .' . "\n"; +$lang->action->desc->deletedfile = '$date, $actor đã xóa $extra.' . "\n"; +$lang->action->desc->editfile = '$date, $actor đã sửa $extra.' . "\n"; +$lang->action->desc->erased = '$date, được xóa bởi $actor .' . "\n"; +$lang->action->desc->undeleted = '$date, khôi phục bởi $actor .' . "\n"; +$lang->action->desc->hidden = '$date, ẩn bởi $actor .' . "\n"; +$lang->action->desc->commented = '$date, được thêm bởi $actor.' . "\n"; +$lang->action->desc->activated = '$date, kích hoạt bởi $actor .' . "\n"; +$lang->action->desc->blocked = '$date, blocked by $actor .' . "\n"; +$lang->action->desc->moved = '$date, chuyển bởi $actor , cái là "$extra".' . "\n"; +$lang->action->desc->confirmed = '$date, $actor confirmed the story change. The latest build is #$extra.' . "\n"; +$lang->action->desc->caseconfirmed = '$date, $actor confirmed the case change. The latest build is #$extra' . "\n"; +$lang->action->desc->bugconfirmed = '$date, $actor confirmed Bug.' . "\n"; +$lang->action->desc->frombug = '$date, converted from $actor. Its ID was $extra.'; +$lang->action->desc->started = '$date, started by $actor.' . "\n"; +$lang->action->desc->restarted = '$date, continued by $actor.' . "\n"; +$lang->action->desc->delayed = '$date, postponed by $actor.' . "\n"; +$lang->action->desc->suspended = '$date, suspended by $actor.' . "\n"; +$lang->action->desc->recordestimate = '$date, ghi nhận bởi $actor and it cost $extra giờ.'; +$lang->action->desc->editestimate = '$date, $actor edited Hour.'; +$lang->action->desc->deleteestimate = '$date, $actor deleted Hour.'; +$lang->action->desc->canceled = '$date, cancelled by $actor.' . "\n"; +$lang->action->desc->svncommited = '$date, $actor committed and the build is #$extra.' . "\n"; +$lang->action->desc->gitcommited = '$date, $actor committed and the build is #$extra.' . "\n"; +$lang->action->desc->finished = '$date, finished by $actor.' . "\n"; +$lang->action->desc->paused = '$date, paused by $actor.' . "\n"; +$lang->action->desc->verified = '$date, verified by $actor.' . "\n"; +$lang->action->desc->diff1 = '%s is changed. It was "%s" and it is "%s".
' . "\n"; +$lang->action->desc->diff2 = '%s is changed. The difference is ' . "\n" . "
%s
" . "\n
%s
"; +$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n"; +$lang->action->desc->linked2bug = '$date, liên kết tới $extra bởi $actor'; +$lang->action->desc->linked2testtask = '$date, linked to $extra by $actor'; +$lang->action->desc->resolved = '$date, resolved by $actor ' . "\n"; +$lang->action->desc->managed = '$date, by $actor managed.' . "\n"; +$lang->action->desc->estimated = '$date, by $actor estimated.' . "\n"; +$lang->action->desc->run = '$date, by $actor executed.' . "\n"; /* Used to describe the history of operations related to parent-child tasks. */ $lang->action->desc->createchildren = '$date, $actor created a child task $extra。' . "\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'; diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index 9d5287d982..9662bf4504 100755 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -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, $action by $actor。' . "\n"; -$lang->action->desc->extra = '$date, $action as $extra by $actor。' . "\n"; -$lang->action->desc->opened = '$date, 由 $actor 创建。' . "\n"; -$lang->action->desc->openedbysystem = '$date, 由系统创建。' . "\n"; -$lang->action->desc->created = '$date, 由 $actor 创建。' . "\n"; -$lang->action->desc->added = '$date, 由 $actor 添加。' . "\n"; -$lang->action->desc->changed = '$date, 由 $actor 变更。' . "\n"; -$lang->action->desc->edited = '$date, 由 $actor 编辑。' . "\n"; -$lang->action->desc->assigned = '$date, 由 $actor 指派给 $extra。' . "\n"; -$lang->action->desc->closed = '$date, 由 $actor 关闭。' . "\n"; -$lang->action->desc->closedbysystem = '$date, 由系统关闭。' . "\n"; -$lang->action->desc->deleted = '$date, 由 $actor 删除。' . "\n"; -$lang->action->desc->deletedfile = '$date, 由 $actor 删除了附件:$extra。' . "\n"; -$lang->action->desc->editfile = '$date, 由 $actor 编辑了附件:$extra。' . "\n"; -$lang->action->desc->erased = '$date, 由 $actor 删除。' . "\n"; -$lang->action->desc->undeleted = '$date, 由 $actor 还原。' . "\n"; -$lang->action->desc->hidden = '$date, 由 $actor 隐藏。' . "\n"; -$lang->action->desc->commented = '$date, 由 $actor 添加备注。' . "\n"; -$lang->action->desc->activated = '$date, 由 $actor 激活。' . "\n"; -$lang->action->desc->blocked = '$date, 由 $actor 阻塞。' . "\n"; -$lang->action->desc->moved = '$date, 由 $actor 移动,之前为 "$extra"。' . "\n"; -$lang->action->desc->confirmed = '$date, 由 $actor 确认' . $lang->SRCommon . '变动,最新版本为#$extra。' . "\n"; -$lang->action->desc->caseconfirmed = '$date, 由 $actor 确认用例变动,最新版本为#$extra。' . "\n"; -$lang->action->desc->bugconfirmed = '$date, 由 $actor 确认Bug。' . "\n"; -$lang->action->desc->frombug = '$date, 由 $actor Bug转化而来,Bug编号为 $extra。'; -$lang->action->desc->started = '$date, 由 $actor 启动。' . "\n"; -$lang->action->desc->restarted = '$date, 由 $actor 继续。' . "\n"; -$lang->action->desc->delayed = '$date, 由 $actor 延期。' . "\n"; -$lang->action->desc->suspended = '$date, 由 $actor 挂起。' . "\n"; -$lang->action->desc->recordestimate = '$date, 由 $actor 记录工时,消耗 $extra 小时。'; -$lang->action->desc->editestimate = '$date, 由 $actor 编辑工时。'; -$lang->action->desc->deleteestimate = '$date, 由 $actor 删除工时。'; -$lang->action->desc->canceled = '$date, 由 $actor 取消。' . "\n"; -$lang->action->desc->svncommited = '$date, 由 $actor 提交代码,版本为#$extra。' . "\n"; -$lang->action->desc->gitcommited = '$date, 由 $actor 提交代码,版本为#$extra。' . "\n"; -$lang->action->desc->finished = '$date, 由 $actor 完成。' . "\n"; -$lang->action->desc->paused = '$date, 由 $actor 暂停。' . "\n"; -$lang->action->desc->verified = '$date, 由 $actor 验收。' . "\n"; -$lang->action->desc->diff1 = '修改了 %s,旧值为 "%s",新值为 "%s"。
' . "\n"; -$lang->action->desc->diff2 = '修改了 %s,区别为:' . "\n" . "
%s
" . "\n
%s
"; -$lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n"; -$lang->action->desc->linked2bug = '$date 由 $actor 关联到版本 $extra'; -$lang->action->desc->resolved = '$date, 由 $actor 解决。' . "\n"; -$lang->action->desc->managed = '$date, 由 $actor 维护。' . "\n"; +$lang->action->desc->common = '$date, $action by $actor。' . "\n"; +$lang->action->desc->extra = '$date, $action as $extra by $actor。' . "\n"; +$lang->action->desc->opened = '$date, 由 $actor 创建。' . "\n"; +$lang->action->desc->openedbysystem = '$date, 由系统创建。' . "\n"; +$lang->action->desc->created = '$date, 由 $actor 创建。' . "\n"; +$lang->action->desc->added = '$date, 由 $actor 添加。' . "\n"; +$lang->action->desc->changed = '$date, 由 $actor 变更。' . "\n"; +$lang->action->desc->edited = '$date, 由 $actor 编辑。' . "\n"; +$lang->action->desc->assigned = '$date, 由 $actor 指派给 $extra。' . "\n"; +$lang->action->desc->closed = '$date, 由 $actor 关闭。' . "\n"; +$lang->action->desc->closedbysystem = '$date, 由系统关闭。' . "\n"; +$lang->action->desc->deleted = '$date, 由 $actor 删除。' . "\n"; +$lang->action->desc->deletedfile = '$date, 由 $actor 删除了附件:$extra。' . "\n"; +$lang->action->desc->editfile = '$date, 由 $actor 编辑了附件:$extra。' . "\n"; +$lang->action->desc->erased = '$date, 由 $actor 删除。' . "\n"; +$lang->action->desc->undeleted = '$date, 由 $actor 还原。' . "\n"; +$lang->action->desc->hidden = '$date, 由 $actor 隐藏。' . "\n"; +$lang->action->desc->commented = '$date, 由 $actor 添加备注。' . "\n"; +$lang->action->desc->activated = '$date, 由 $actor 激活。' . "\n"; +$lang->action->desc->blocked = '$date, 由 $actor 阻塞。' . "\n"; +$lang->action->desc->moved = '$date, 由 $actor 移动,之前为 "$extra"。' . "\n"; +$lang->action->desc->confirmed = '$date, 由 $actor 确认' . $lang->SRCommon . '变动,最新版本为#$extra。' . "\n"; +$lang->action->desc->caseconfirmed = '$date, 由 $actor 确认用例变动,最新版本为#$extra。' . "\n"; +$lang->action->desc->bugconfirmed = '$date, 由 $actor 确认Bug。' . "\n"; +$lang->action->desc->frombug = '$date, 由 $actor Bug转化而来,Bug编号为 $extra。'; +$lang->action->desc->started = '$date, 由 $actor 启动。' . "\n"; +$lang->action->desc->restarted = '$date, 由 $actor 继续。' . "\n"; +$lang->action->desc->delayed = '$date, 由 $actor 延期。' . "\n"; +$lang->action->desc->suspended = '$date, 由 $actor 挂起。' . "\n"; +$lang->action->desc->recordestimate = '$date, 由 $actor 记录工时,消耗 $extra 小时。'; +$lang->action->desc->editestimate = '$date, 由 $actor 编辑工时。'; +$lang->action->desc->deleteestimate = '$date, 由 $actor 删除工时。'; +$lang->action->desc->canceled = '$date, 由 $actor 取消。' . "\n"; +$lang->action->desc->svncommited = '$date, 由 $actor 提交代码,版本为#$extra。' . "\n"; +$lang->action->desc->gitcommited = '$date, 由 $actor 提交代码,版本为#$extra。' . "\n"; +$lang->action->desc->finished = '$date, 由 $actor 完成。' . "\n"; +$lang->action->desc->paused = '$date, 由 $actor 暂停。' . "\n"; +$lang->action->desc->verified = '$date, 由 $actor 验收。' . "\n"; +$lang->action->desc->diff1 = '修改了 %s,旧值为 "%s",新值为 "%s"。
' . "\n"; +$lang->action->desc->diff2 = '修改了 %s,区别为:' . "\n" . "
%s
" . "\n
%s
"; +$lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n"; +$lang->action->desc->linked2bug = '$date 由 $actor 关联到版本 $extra'; +$lang->action->desc->linked2testtask = '$date 由 $actor 关联到测试单 $extra'; +$lang->action->desc->resolved = '$date, 由 $actor 解决。' . "\n"; +$lang->action->desc->managed = '$date, 由 $actor 维护。' . "\n"; +$lang->action->desc->estimated = '$date, 由 $actor 估算。' . "\n"; +$lang->action->desc->run = '$date, 由 $actor 执行。' . "\n"; /* 用来描述和父子任务相关的操作历史记录。*/ $lang->action->desc->createchildren = '$date, 由 $actor 创建子任务 $extra。' . "\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(); diff --git a/module/action/lang/zh-tw.php b/module/action/lang/zh-tw.php index fbabd81420..21137aa604 100755 --- a/module/action/lang/zh-tw.php +++ b/module/action/lang/zh-tw.php @@ -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, $action by $actor。' . "\n"; -$lang->action->desc->extra = '$date, $action as $extra by $actor。' . "\n"; -$lang->action->desc->opened = '$date, 由 $actor 創建。' . "\n"; -$lang->action->desc->openedbysystem = '$date, 由系統創建。' . "\n"; -$lang->action->desc->created = '$date, 由 $actor 創建。' . "\n"; -$lang->action->desc->added = '$date, 由 $actor 添加。' . "\n"; -$lang->action->desc->changed = '$date, 由 $actor 變更。' . "\n"; -$lang->action->desc->edited = '$date, 由 $actor 編輯。' . "\n"; -$lang->action->desc->assigned = '$date, 由 $actor 指派給 $extra。' . "\n"; -$lang->action->desc->closed = '$date, 由 $actor 關閉。' . "\n"; -$lang->action->desc->closedbysystem = '$date, 由系統關閉。' . "\n"; -$lang->action->desc->deleted = '$date, 由 $actor 刪除。' . "\n"; -$lang->action->desc->deletedfile = '$date, 由 $actor 刪除了附件:$extra。' . "\n"; -$lang->action->desc->editfile = '$date, 由 $actor 編輯了附件:$extra。' . "\n"; -$lang->action->desc->erased = '$date, 由 $actor 刪除。' . "\n"; -$lang->action->desc->undeleted = '$date, 由 $actor 還原。' . "\n"; -$lang->action->desc->hidden = '$date, 由 $actor 隱藏。' . "\n"; -$lang->action->desc->commented = '$date, 由 $actor 添加備註。' . "\n"; -$lang->action->desc->activated = '$date, 由 $actor 激活。' . "\n"; -$lang->action->desc->blocked = '$date, 由 $actor 阻塞。' . "\n"; -$lang->action->desc->moved = '$date, 由 $actor 移動,之前為 "$extra"。' . "\n"; -$lang->action->desc->confirmed = '$date, 由 $actor 確認' . $lang->SRCommon . '變動,最新版本為#$extra。' . "\n"; -$lang->action->desc->caseconfirmed = '$date, 由 $actor 確認用例變動,最新版本為#$extra。' . "\n"; -$lang->action->desc->bugconfirmed = '$date, 由 $actor 確認Bug。' . "\n"; -$lang->action->desc->frombug = '$date, 由 $actor Bug轉化而來,Bug編號為 $extra。'; -$lang->action->desc->started = '$date, 由 $actor 啟動。' . "\n"; -$lang->action->desc->restarted = '$date, 由 $actor 繼續。' . "\n"; -$lang->action->desc->delayed = '$date, 由 $actor 延期。' . "\n"; -$lang->action->desc->suspended = '$date, 由 $actor 掛起。' . "\n"; -$lang->action->desc->recordestimate = '$date, 由 $actor 記錄工時,消耗 $extra 小時。'; -$lang->action->desc->editestimate = '$date, 由 $actor 編輯工時。'; -$lang->action->desc->deleteestimate = '$date, 由 $actor 刪除工時。'; -$lang->action->desc->canceled = '$date, 由 $actor 取消。' . "\n"; -$lang->action->desc->svncommited = '$date, 由 $actor 提交代碼,版本為#$extra。' . "\n"; -$lang->action->desc->gitcommited = '$date, 由 $actor 提交代碼,版本為#$extra。' . "\n"; -$lang->action->desc->finished = '$date, 由 $actor 完成。' . "\n"; -$lang->action->desc->paused = '$date, 由 $actor 暫停。' . "\n"; -$lang->action->desc->verified = '$date, 由 $actor 驗收。' . "\n"; -$lang->action->desc->diff1 = '修改了 %s,舊值為 "%s",新值為 "%s"。
' . "\n"; -$lang->action->desc->diff2 = '修改了 %s,區別為:' . "\n" . "
%s
" . "\n
%s
"; -$lang->action->desc->diff3 = '將檔案名 %s 改為 %s 。' . "\n"; -$lang->action->desc->linked2bug = '$date 由 $actor 關聯到版本 $extra'; -$lang->action->desc->resolved = '$date, 由 $actor 解決。' . "\n"; -$lang->action->desc->managed = '$date, 由 $actor 維護。' . "\n"; +$lang->action->desc->common = '$date, $action by $actor。' . "\n"; +$lang->action->desc->extra = '$date, $action as $extra by $actor。' . "\n"; +$lang->action->desc->opened = '$date, 由 $actor 創建。' . "\n"; +$lang->action->desc->openedbysystem = '$date, 由系統創建。' . "\n"; +$lang->action->desc->created = '$date, 由 $actor 創建。' . "\n"; +$lang->action->desc->added = '$date, 由 $actor 添加。' . "\n"; +$lang->action->desc->changed = '$date, 由 $actor 變更。' . "\n"; +$lang->action->desc->edited = '$date, 由 $actor 編輯。' . "\n"; +$lang->action->desc->assigned = '$date, 由 $actor 指派給 $extra。' . "\n"; +$lang->action->desc->closed = '$date, 由 $actor 關閉。' . "\n"; +$lang->action->desc->closedbysystem = '$date, 由系統關閉。' . "\n"; +$lang->action->desc->deleted = '$date, 由 $actor 刪除。' . "\n"; +$lang->action->desc->deletedfile = '$date, 由 $actor 刪除了附件:$extra。' . "\n"; +$lang->action->desc->editfile = '$date, 由 $actor 編輯了附件:$extra。' . "\n"; +$lang->action->desc->erased = '$date, 由 $actor 刪除。' . "\n"; +$lang->action->desc->undeleted = '$date, 由 $actor 還原。' . "\n"; +$lang->action->desc->hidden = '$date, 由 $actor 隱藏。' . "\n"; +$lang->action->desc->commented = '$date, 由 $actor 添加備註。' . "\n"; +$lang->action->desc->activated = '$date, 由 $actor 激活。' . "\n"; +$lang->action->desc->blocked = '$date, 由 $actor 阻塞。' . "\n"; +$lang->action->desc->moved = '$date, 由 $actor 移動,之前為 "$extra"。' . "\n"; +$lang->action->desc->confirmed = '$date, 由 $actor 確認' . $lang->SRCommon . '變動,最新版本為#$extra。' . "\n"; +$lang->action->desc->caseconfirmed = '$date, 由 $actor 確認用例變動,最新版本為#$extra。' . "\n"; +$lang->action->desc->bugconfirmed = '$date, 由 $actor 確認Bug。' . "\n"; +$lang->action->desc->frombug = '$date, 由 $actor Bug轉化而來,Bug編號為 $extra。'; +$lang->action->desc->started = '$date, 由 $actor 啟動。' . "\n"; +$lang->action->desc->restarted = '$date, 由 $actor 繼續。' . "\n"; +$lang->action->desc->delayed = '$date, 由 $actor 延期。' . "\n"; +$lang->action->desc->suspended = '$date, 由 $actor 掛起。' . "\n"; +$lang->action->desc->recordestimate = '$date, 由 $actor 記錄工時,消耗 $extra 小時。'; +$lang->action->desc->editestimate = '$date, 由 $actor 編輯工時。'; +$lang->action->desc->deleteestimate = '$date, 由 $actor 刪除工時。'; +$lang->action->desc->canceled = '$date, 由 $actor 取消。' . "\n"; +$lang->action->desc->svncommited = '$date, 由 $actor 提交代碼,版本為#$extra。' . "\n"; +$lang->action->desc->gitcommited = '$date, 由 $actor 提交代碼,版本為#$extra。' . "\n"; +$lang->action->desc->finished = '$date, 由 $actor 完成。' . "\n"; +$lang->action->desc->paused = '$date, 由 $actor 暫停。' . "\n"; +$lang->action->desc->verified = '$date, 由 $actor 驗收。' . "\n"; +$lang->action->desc->diff1 = '修改了 %s,舊值為 "%s",新值為 "%s"。
' . "\n"; +$lang->action->desc->diff2 = '修改了 %s,區別為:' . "\n" . "
%s
" . "\n
%s
"; +$lang->action->desc->diff3 = '將檔案名 %s 改為 %s 。' . "\n"; +$lang->action->desc->linked2bug = '$date 由 $actor 關聯到版本 $extra'; +$lang->action->desc->linked2testtask = '$date 由 $actor 關聯到測試單 $extra'; +$lang->action->desc->resolved = '$date, 由 $actor 解決。' . "\n"; +$lang->action->desc->managed = '$date, 由 $actor 維護。' . "\n"; +$lang->action->desc->estimated = '$date, 由 $actor 估算。' . "\n"; +$lang->action->desc->run = '$date, 由 $actor 執行。' . "\n"; /* 用來描述和父子任務相關的操作歷史記錄。*/ $lang->action->desc->createchildren = '$date, 由 $actor 創建子任務 $extra。' . "\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'] = '編輯文檔'; diff --git a/module/action/model.php b/module/action/model.php index 0ffeb0f758..2db2f1c184 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -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 = ''; diff --git a/module/block/control.php b/module/block/control.php index b1b5837792..304916c007 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -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') diff --git a/module/block/view/testtaskblock.html.php b/module/block/view/testtaskblock.html.php index 08e85a4c0c..96abd3848b 100644 --- a/module/block/view/testtaskblock.html.php +++ b/module/block/view/testtaskblock.html.php @@ -34,7 +34,7 @@ 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}"); ?> > diff --git a/module/branch/control.php b/module/branch/control.php index b0600d6024..9e39d84210 100644 --- a/module/branch/control.php +++ b/module/branch/control.php @@ -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 */ diff --git a/module/branch/model.php b/module/branch/model.php index 67274e61c2..6cfd20c981 100644 --- a/module/branch/model.php +++ b/module/branch/model.php @@ -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; } /** diff --git a/module/bug/control.php b/module/bug/control.php index cccc23e0c0..0dabb253a3 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -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¶m=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); diff --git a/module/bug/js/common.js b/module/bug/js/common.js index a3699ef386..f44f92dd95 100644 --- a/module/bug/js/common.js +++ b/module/bug/js/common.js @@ -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 += '' + createBuild + ' '; html += '' + refresh + ''; } diff --git a/module/bug/js/x.view.js b/module/bug/js/x.view.js index d57019c9b3..9c48ea0651 100644 --- a/module/bug/js/x.view.js +++ b/module/bug/js/x.view.js @@ -1,7 +1,7 @@ $(function() { $('.main-actions-holder').css('height', '0px'); - var $xuanAction = "
"; + var xuanAction = "
"; $('.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 += "' + action + ""; + xuanAction += "' + action + ""; }); - $xuanAction += '
'; - $('#footer').replaceWith($xuanAction); + xuanAction += '
'; + + $('body').append(xuanAction); $('.xuancard-actions a.iframe').modalTrigger(); }) diff --git a/module/bug/lang/de.php b/module/bug/lang/de.php index db77ae0fd0..87ad7cf382 100644 --- a/module/bug/lang/de.php +++ b/module/bug/lang/de.php @@ -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'; diff --git a/module/bug/lang/en.php b/module/bug/lang/en.php index d793b6e008..032b0d03dc 100644 --- a/module/bug/lang/en.php +++ b/module/bug/lang/en.php @@ -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'; diff --git a/module/bug/lang/fr.php b/module/bug/lang/fr.php index c867ab655f..e2c9e65dc2 100644 --- a/module/bug/lang/fr.php +++ b/module/bug/lang/fr.php @@ -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'; diff --git a/module/bug/lang/vi.php b/module/bug/lang/vi.php index f6495a5757..8d7e8e026c 100644 --- a/module/bug/lang/vi.php +++ b/module/bug/lang/vi.php @@ -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'; diff --git a/module/bug/lang/zh-cn.php b/module/bug/lang/zh-cn.php index d29fa8a6eb..7dfd1e848b 100644 --- a/module/bug/lang/zh-cn.php +++ b/module/bug/lang/zh-cn.php @@ -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 = '标题颜色'; diff --git a/module/bug/lang/zh-tw.php b/module/bug/lang/zh-tw.php index 4ebaa6e6f8..1d4da479e7 100644 --- a/module/bug/lang/zh-tw.php +++ b/module/bug/lang/zh-tw.php @@ -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 = '系統/瀏覽器'; diff --git a/module/bug/model.php b/module/bug/model.php index 913347b1dc..4a1bfeae97 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -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 ""; diff --git a/module/bug/view/edit.html.php b/module/bug/view/edit.html.php index 43e680bb4b..f5b6844452 100644 --- a/module/bug/view/edit.html.php +++ b/module/bug/view/edit.html.php @@ -172,9 +172,15 @@ js::set('systemMode' , $config->systemMode);
-
bug->legendExecStoryTask;?>
+
systemMode == 'class' ? $lang->bug->legendExecStoryTask : $lang->bug->legendPRJExecStoryTask;?>
+ systemMode == 'new'):?> + + + + + diff --git a/module/build/control.php b/module/build/control.php index d626567243..818f5998e5 100644 --- a/module/build/control.php +++ b/module/build/control.php @@ -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') { diff --git a/module/caselib/control.php b/module/caselib/control.php index f2e28ecbd8..01030be398 100644 --- a/module/caselib/control.php +++ b/module/caselib/control.php @@ -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); } diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index b9fe0c7024..2e2107aefa 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -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'; diff --git a/module/common/model.php b/module/common/model.php index 44362c312e..31181f9425 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -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); } } } diff --git a/module/common/view/header.lite.html.php b/module/common/view/header.lite.html.php index e07fa3263d..14eee9e636 100755 --- a/module/common/view/header.lite.html.php +++ b/module/common/view/header.lite.html.php @@ -70,8 +70,9 @@ $extHookFiles = glob($extHookRule); if($extHookFiles) foreach($extHookFiles as $extHookFile) include $extHookFile; ?> +app->getViewType() == 'xhtml' ? 'allow-self-open' : '';?> moduleName == 'index' && $this->methodName == 'index' && $this->cookie->hideMenu): ?> - + - + diff --git a/module/company/control.php b/module/company/control.php index bf7a918e9b..d5d6cad741 100644 --- a/module/company/control.php +++ b/module/company/control.php @@ -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); diff --git a/module/custom/config.php b/module/custom/config.php index e5837ffb1e..4b000df4ce 100644 --- a/module/custom/config.php +++ b/module/custom/config.php @@ -1,6 +1,6 @@ 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'; diff --git a/module/custom/control.php b/module/custom/control.php index bf5058b2b9..b189f6f7ad 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -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. * diff --git a/module/custom/lang/de.php b/module/custom/lang/de.php index 1cdf6d058a..f555845d9a 100644 --- a/module/custom/lang/de.php +++ b/module/custom/lang/de.php @@ -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'; diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index 355cc1523f..560e6b936b 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -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'; diff --git a/module/custom/lang/fr.php b/module/custom/lang/fr.php index 8e44c229c8..3158aeca43 100644 --- a/module/custom/lang/fr.php +++ b/module/custom/lang/fr.php @@ -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'; diff --git a/module/custom/lang/vi.php b/module/custom/lang/vi.php index 58232273fe..3e0d4c47b6 100644 --- a/module/custom/lang/vi.php +++ b/module/custom/lang/vi.php @@ -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'; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index b6a783ee18..669a9c8cdb 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -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'] = '关闭原因'; diff --git a/module/custom/view/browsestoryconcept.html.php b/module/custom/view/browsestoryconcept.html.php index d7555e869f..a369471976 100644 --- a/module/custom/view/browsestoryconcept.html.php +++ b/module/custom/view/browsestoryconcept.html.php @@ -11,7 +11,7 @@ ?>
bug->project;?>project, "class='form-control chosen' onchange='loadProductExecutions($bug->product, this.value)'");?>
bug->execution;?> execution, "class='form-control chosen' onchange='loadExecutionRelated(this.value)'");?>
- - - config->URAndSR):?> @@ -36,9 +33,6 @@ $URSR):?> - - - config->URAndSR):?> @@ -54,11 +48,4 @@
custom->default;?> custom->URConcept;?>
custom->URSR) echo 'checked';?>>
- diff --git a/module/dept/control.php b/module/dept/control.php index 4078b36d2e..43bc729a1b 100644 --- a/module/dept/control.php +++ b/module/dept/control.php @@ -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 */ diff --git a/module/dept/model.php b/module/dept/model.php index 038f2549c0..29a65424ed 100644 --- a/module/dept/model.php +++ b/module/dept/model.php @@ -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; } /** diff --git a/module/doc/control.php b/module/doc/control.php index fa5403fa82..6a757633ae 100644 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -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. */ diff --git a/module/doc/js/x.view.js b/module/doc/js/x.view.js index e5eda36b22..e017faf97b 100644 --- a/module/doc/js/x.view.js +++ b/module/doc/js/x.view.js @@ -1,7 +1,7 @@ $(function() { $('.main-actions-holder').css('height', '0px'); - var $xuanAction = "
"; + var xuanAction = "
"; $('.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 += "' + action + ""; + xuanAction += "' + action + ""; }); - $xuanAction += '
'; - $('#footer').replaceWith($xuanAction); + xuanAction += '
'; + $('body').append(xuanAction); $('.xuancard-actions a.iframe').modalTrigger(); }) diff --git a/module/doc/model.php b/module/doc/model.php index 7f425defa7..cdf01db255 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -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(); } diff --git a/module/entry/control.php b/module/entry/control.php index 225c1fe48a..e5055a82c0 100644 --- a/module/entry/control.php +++ b/module/entry/control.php @@ -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 - * @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 */ diff --git a/module/execution/control.php b/module/execution/control.php index b405dfdaa6..c0bee38f16 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -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); diff --git a/module/execution/lang/de.php b/module/execution/lang/de.php index 87ed04529d..f1772a6e6d 100644 --- a/module/execution/lang/de.php +++ b/module/execution/lang/de.php @@ -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 "; diff --git a/module/execution/lang/en.php b/module/execution/lang/en.php index f68dd5d4bb..c301f5cadf 100644 --- a/module/execution/lang/en.php +++ b/module/execution/lang/en.php @@ -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 "; diff --git a/module/execution/lang/fr.php b/module/execution/lang/fr.php index 70eb03758b..498861b75d 100644 --- a/module/execution/lang/fr.php +++ b/module/execution/lang/fr.php @@ -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 "; diff --git a/module/execution/lang/vi.php b/module/execution/lang/vi.php index cdd7cb6076..19daabc8cd 100644 --- a/module/execution/lang/vi.php +++ b/module/execution/lang/vi.php @@ -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ể "; diff --git a/module/execution/lang/zh-cn.php b/module/execution/lang/zh-cn.php index 503582f9aa..8c7b1330b6 100644 --- a/module/execution/lang/zh-cn.php +++ b/module/execution/lang/zh-cn.php @@ -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}添加成功,您现在可以进行以下操作:"; diff --git a/module/execution/model.php b/module/execution/model.php index fd12a6495e..dcbb5b83a0 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -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 .= "{$currentExecutionName} "; + return $output; + } + $dropMenuLink = helper::createLink('execution', 'ajaxGetDropMenu', "executionID=$executionID&module=$currentModule&method=$currentMethod&extra="); $output = "
diff --git a/module/execution/view/testtask.html.php b/module/execution/view/testtask.html.php index 10a7a89016..00b651bb89 100644 --- a/module/execution/view/testtask.html.php +++ b/module/execution/view/testtask.html.php @@ -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"), '', '', 'class="btn " title="' . $lang->testreport->browse . '" data-app="qa"'); + echo html::a($this->createLink('execution', 'testreport', "executionID=$executionID&objctType=execution&extra=$task->id"), '', '', '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'); diff --git a/module/execution/view/view.html.php b/module/execution/view/view.html.php index bb36fc1174..d9ff7abf36 100644 --- a/module/execution/view/view.html.php +++ b/module/execution/view/view.html.php @@ -229,7 +229,7 @@ totalConsumed + $execution->totalLeft) ? floor($execution->totalConsumed / ($execution->totalConsumed + $execution->totalLeft) * 1000) / 1000 * 100 : 0;?> - execution->progress;?> percent;?>   + execution->progress;?> percent;?>  
@@ -239,23 +239,23 @@ execution->begin;?> begin;?> execution->totalEstimate;?> - totalEstimate . $lang->execution->workHour;?> + totalEstimate . $lang->execution->workHour;?> execution->end;?> end;?> execution->totalConsumed;?> - totalConsumed . $lang->execution->workHour;?> + totalConsumed . $lang->execution->workHour;?> execution->totalDays;?> days;?> execution->totalLeft;?> - totalLeft . $lang->execution->workHour;?> + totalLeft . $lang->execution->workHour;?> execution->totalHours;?> - totalHours . $lang->execution->workHour;?> + totalHours . $lang->execution->workHour;?> @@ -268,11 +268,11 @@ story->common;?> - storyCount;?> + storyCount;?> task->common;?> - taskCount;?> + taskCount;?> bug->common;?> - bugCount;?> + bugCount;?> diff --git a/module/git/control.php b/module/git/control.php index 5f9f64b012..e633538088 100644 --- a/module/git/control.php +++ b/module/git/control.php @@ -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 */ diff --git a/module/git/model.php b/module/git/model.php index f4681d8a76..40b789ef1e 100644 --- a/module/git/model.php +++ b/module/git/model.php @@ -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 */ diff --git a/module/group/control.php b/module/group/control.php index 1705d62172..afabc0c35e 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -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')); } diff --git a/module/group/lang/de.php b/module/group/lang/de.php index c409ea8634..00c6974c81 100644 --- a/module/group/lang/de.php +++ b/module/group/lang/de.php @@ -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'; diff --git a/module/group/lang/en.php b/module/group/lang/en.php index 59007182f7..11212c03e7 100644 --- a/module/group/lang/en.php +++ b/module/group/lang/en.php @@ -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'; diff --git a/module/group/lang/fr.php b/module/group/lang/fr.php index 778ec86411..edc1f8030a 100644 --- a/module/group/lang/fr.php +++ b/module/group/lang/fr.php @@ -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'; diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index b222123b5b..a227966123 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -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'; diff --git a/module/group/lang/vi.php b/module/group/lang/vi.php index f6fb87f221..0f6b989416 100644 --- a/module/group/lang/vi.php +++ b/module/group/lang/vi.php @@ -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'; diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php index da058bfbab..32bee9be0e 100644 --- a/module/group/lang/zh-cn.php +++ b/module/group/lang/zh-cn.php @@ -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'; diff --git a/module/group/lang/zh-tw.php b/module/group/lang/zh-tw.php index d27ce23d8f..ced1b02502 100644 --- a/module/group/lang/zh-tw.php +++ b/module/group/lang/zh-tw.php @@ -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'; diff --git a/module/group/model.php b/module/group/model.php index 9e3b720773..902e84727a 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -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; } diff --git a/module/group/view/manageprojectadmin.html.php b/module/group/view/manageprojectadmin.html.php index aba54965f1..8c60123064 100644 --- a/module/group/view/manageprojectadmin.html.php +++ b/module/group/view/manageprojectadmin.html.php @@ -71,8 +71,8 @@ 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. ?> diff --git a/module/index/js/index.js b/module/index/js/index.js index e1c90b56dd..f8ebff9f61 100644 --- a/module/index/js/index.js +++ b/module/index/js/index.js @@ -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) { diff --git a/module/jenkins/control.php b/module/jenkins/control.php index ea52501ccb..70c030d2a4 100644 --- a/module/jenkins/control.php +++ b/module/jenkins/control.php @@ -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 */ diff --git a/module/jenkins/model.php b/module/jenkins/model.php index 452a9ce10a..2d12469a3f 100644 --- a/module/jenkins/model.php +++ b/module/jenkins/model.php @@ -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(); } /** diff --git a/module/job/control.php b/module/job/control.php index 0413a49e89..cc5ab162b0 100644 --- a/module/job/control.php +++ b/module/job/control.php @@ -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'))); } diff --git a/module/job/model.php b/module/job/model.php index 4c7c8f7a63..5d19e6c298 100644 --- a/module/job/model.php +++ b/module/job/model.php @@ -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 */ diff --git a/module/message/config.php b/module/message/config.php index 2bb98c694b..d39fb726e9 100644 --- a/module/message/config.php +++ b/module/message/config.php @@ -1,8 +1,8 @@ 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'); diff --git a/module/my/control.php b/module/my/control.php index 3b8db82b08..84eecfc116 100644 --- a/module/my/control.php +++ b/module/my/control.php @@ -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')); diff --git a/module/my/view/requirement.html.php b/module/my/view/requirement.html.php index 08ca7ba16c..f4031f5183 100644 --- a/module/my/view/requirement.html.php +++ b/module/my/view/requirement.html.php @@ -24,6 +24,11 @@ echo html::a(inlink($app->rawMethod, "mode=requirement&type=reviewedBy&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "{$lang->my->storyMenu->reviewedByMe}" . ($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"), "{$lang->my->storyMenu->closedByMe}" . ($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"), "{$lang->my->storyMenu->assignedToMe}" . ($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"), "{$lang->my->storyMenu->reviewByMe}" . ($type == 'reviewBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'reviewBy' ? ' btn-active-text' : '') . "'"); + } ?>
@@ -60,7 +65,7 @@ story->estimateAB);?> statusAB);?> story->stageAB);?> - actions;?> + actions;?> @@ -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'); diff --git a/module/my/view/story.html.php b/module/my/view/story.html.php index 243b9213d3..e48763c06e 100644 --- a/module/my/view/story.html.php +++ b/module/my/view/story.html.php @@ -24,6 +24,11 @@ echo html::a(inlink($app->rawMethod, "mode=story&type=reviewedBy&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pagerID=$pageID"), "{$lang->my->storyMenu->reviewedByMe}" . ($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"), "{$lang->my->storyMenu->closedByMe}" . ($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"), "{$lang->my->storyMenu->assignedToMe}" . ($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"), "{$lang->my->storyMenu->reviewByMe}" . ($type == 'reviewBy' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'reviewBy' ? ' btn-active-text' : '') . "'"); + } ?> @@ -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'); diff --git a/module/my/view/todo.html.php b/module/my/view/todo.html.php index 41e9bed50b..4409ea124d 100644 --- a/module/my/view/todo.html.php +++ b/module/my/view/todo.html.php @@ -98,7 +98,7 @@ date == '2030-01-01' ? $lang->todo->periods['future'] : $todo->date;?> todo->typeList, $todo->type, '');?> pri;?>' title='todo->priList, $todo->pri, $todo->pri);?>'>todo->priList, $todo->pri)?> - createLink('todo', 'view', "id=$todo->id&from=my", '', true), $todo->name, '', "data-toggle='modal' data-type='iframe' data-title='" . $lang->todo->view . "' data-icon='check'");?> + 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'");?> assignedBy);?> begin;?> end;?> diff --git a/module/personnel/control.php b/module/personnel/control.php index bb747bd0fe..7bd1032f15 100644 --- a/module/personnel/control.php +++ b/module/personnel/control.php @@ -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')); } } diff --git a/module/personnel/model.php b/module/personnel/model.php index 436f40e1ea..df8b2e6463 100644 --- a/module/personnel/model.php +++ b/module/personnel/model.php @@ -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. * diff --git a/module/personnel/view/accessible.html.php b/module/personnel/view/accessible.html.php index d06bcb048a..745a1c51b5 100644 --- a/module/personnel/view/accessible.html.php +++ b/module/personnel/view/accessible.html.php @@ -12,7 +12,6 @@ -