diff --git a/db/update15.0.sql b/db/update15.0.sql index 3e35881185..e05c76f15c 100644 --- a/db/update15.0.sql +++ b/db/update15.0.sql @@ -23,24 +23,38 @@ ALTER TABLE `zt_project` ADD `output` text NOT NULL AFTER `milestone`; ALTER TABLE `zt_project` ADD `lastEditedBy` varchar(30) NOT NULL DEFAULT '' AFTER `openedVersion`; ALTER TABLE `zt_project` ADD `lastEditedDate` datetime NOT NULL AFTER `lastEditedBy`; -ALTER TABLE `zt_product` ADD `program` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_action` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL; +ALTER TABLE `zt_bug` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL; +ALTER TABLE `zt_build` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL; +ALTER TABLE `zt_burn` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL; +ALTER TABLE `zt_doc` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL; +ALTER TABLE `zt_relation` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL; +ALTER TABLE `zt_relation` CHANGE `program` `project` mediumint(8) unsigned NOT NULL; +ALTER TABLE `zt_doclib` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL; +ALTER TABLE `zt_task` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL; +ALTER TABLE `zt_testreport` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL; +ALTER TABLE `zt_testtask` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL; + +ALTER TABLE `zt_task` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_doc` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_story` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_bug` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_case` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_testtask` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_testreport` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_testsuite` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_build` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_release` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_expect` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; + ALTER TABLE `zt_product` ADD `bind` enum('0','1') NOT NULL DEFAULT '0' AFTER `code`; -ALTER TABLE `zt_task` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; -ALTER TABLE `zt_doc` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; -ALTER TABLE `zt_story` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; +ALTER TABLE `zt_product` ADD `program` mediumint(8) unsigned NOT NULL AFTER `id`; ALTER TABLE `zt_repo` ADD `product` varchar(255) NOT NULL AFTER `id`; -ALTER TABLE `zt_bug` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; -ALTER TABLE `zt_case` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; -ALTER TABLE `zt_testtask` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; -ALTER TABLE `zt_testreport` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; -ALTER TABLE `zt_testsuite` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; -ALTER TABLE `zt_build` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; -ALTER TABLE `zt_release` ADD `PRJ` mediumint(8) unsigned NOT NULL AFTER `id`; -ALTER TABLE `zt_group` ADD `PRJ` mediumint NOT NULL AFTER `id`; -INSERT INTO `zt_group` (`name`, `role`, `desc`) VALUES ('项目管理员', 'PRJAdmin', '项目管理员可以维护项目的权限'); +ALTER TABLE `zt_group` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`; +INSERT INTO `zt_group` (`name`, `role`, `desc`) VALUES ('项目管理员', 'projectAdmin', '项目管理员可以维护项目的权限'); -ALTER TABLE `zt_usergroup` ADD `PRJ` text NOT NULL; +ALTER TABLE `zt_usergroup` ADD `project` text NOT NULL; ALTER TABLE `zt_userview` ADD `programs` mediumtext NOT NULL AFTER `account`; ALTER TABLE `zt_userview` ADD `sprints` mediumtext NOT NULL AFTER `programs`; @@ -58,6 +72,8 @@ REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ( ALTER TABLE `zt_config` MODIFY COLUMN `value` longtext NOT NULL AFTER `key`; +UPDATE `zt_config` SET `key` = 'CRExecution' WHERE `module` = 'common' AND `key` = 'CRProject'; + -- DROP TABLE IF EXISTS `zt_stakeholder`; CREATE TABLE IF NOT EXISTS `zt_stakeholder` ( `id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, @@ -78,7 +94,7 @@ CREATE TABLE IF NOT EXISTS `zt_stakeholder` ( CREATE TABLE IF NOT EXISTS `zt_expect` ( `id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, `userID` mediumint(8) NOT NULL, - `PRJ` mediumint(8) NOT NULL DEFAULT 0, + `project` mediumint(8) NOT NULL DEFAULT 0, `expect` text NOT NULL, `progress` text NOT NULL, `createdBy` char(30) NOT NULL, @@ -178,8 +194,8 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1, 'my', 'uploadAvatar'), (1, 'user', 'execution'), (1, 'user', 'cropAvatar'), -(1, 'program', 'PRJBrowse'), -(1, 'program', 'PRJView'), +(1, 'program', 'browse'), +(1, 'program', 'view'), (1, 'search', 'index'), (1, 'search', 'buildIndex'), (2, 'product', 'dashboard'), @@ -192,7 +208,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (2, 'user', 'execution'), (2, 'user', 'cropAvatar'), (2, 'search', 'index'), -(2, 'program', 'PRJBrowse'), +(2, 'program', 'browse'), (3, 'product', 'dashboard'), (3, 'product', 'manageLine'), (3, 'projectstory', 'story'), @@ -203,7 +219,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (3, 'user', 'execution'), (3, 'user', 'cropAvatar'), (3, 'search', 'index'), -(3, 'program', 'PRJBrowse'), +(3, 'program', 'browse'), (4, 'product', 'dashboard'), (4, 'product', 'manageLine'), (4, 'projectstory', 'story'), @@ -213,8 +229,8 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (4, 'my', 'uploadAvatar'), (4, 'user', 'execution'), (4, 'user', 'cropAvatar'), -(4, 'program', 'PRJView'), -(4, 'program', 'PRJBrowse'), +(4, 'program', 'view'), +(4, 'program', 'browse'), (4, 'search', 'index'), (5, 'product', 'dashboard'), (5, 'product', 'manageLine'), @@ -227,8 +243,8 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (5, 'my', 'uploadAvatar'), (5, 'user', 'execution'), (5, 'user', 'cropAvatar'), -(5, 'program', 'PRJView'), -(5, 'program', 'PRJBrowse'), +(5, 'program', 'view'), +(5, 'program', 'browse'), (5, 'search', 'index'), (6, 'product', 'dashboard'), (6, 'product', 'manageLine'), @@ -239,8 +255,8 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (6, 'my', 'uploadAvatar'), (6, 'user', 'execution'), (6, 'user', 'cropAvatar'), -(6, 'program', 'PRJView'), -(6, 'program', 'PRJBrowse'), +(6, 'program', 'view'), +(6, 'program', 'browse'), (6, 'search', 'index'), (7, 'product', 'dashboard'), (7, 'product', 'manageLine'), @@ -253,8 +269,8 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (7, 'my', 'uploadAvatar'), (7, 'user', 'execution'), (7, 'user', 'cropAvatar'), -(7, 'program', 'PRJView'), -(7, 'program', 'PRJBrowse'), +(7, 'program', 'view'), +(7, 'program', 'browse'), (7, 'search', 'index'), (8, 'product', 'dashboard'), (8, 'product', 'manageLine'), @@ -265,8 +281,8 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (8, 'my', 'uploadAvatar'), (8, 'user', 'execution'), (8, 'user', 'cropAvatar'), -(8, 'program', 'PRJView'), -(8, 'program', 'PRJBrowse'), +(8, 'program', 'view'), +(8, 'program', 'browse'), (8, 'search', 'index'), (9, 'product', 'dashboard'), (9, 'product', 'manageLine'), @@ -279,8 +295,8 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (9, 'my', 'uploadAvatar'), (9, 'user', 'execution'), (9, 'user', 'cropAvatar'), -(9, 'program', 'PRJView'), -(9, 'program', 'PRJBrowse'), +(9, 'program', 'view'), +(9, 'program', 'browse'), (9, 'search', 'index'), (10, 'product', 'dashboard'), (10, 'product', 'manageLine'), @@ -292,7 +308,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (10, 'user', 'execution'), (10, 'user', 'cropAvatar'), (10, 'search', 'index'), -(10, 'program', 'PRJBrowse'), +(10, 'program', 'browse'), (11, 'product', 'dashboard'), (11, 'product', 'manageLine'), (11, 'projectstory', 'story'), @@ -301,7 +317,7 @@ REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (11, 'my', 'preference'), (11, 'my', 'uploadAvatar'), (11, 'user', 'execution'), -(11, 'program', 'PRJBrowse'), +(11, 'program', 'browse'), (11, 'user', 'cropAvatar'); INSERT INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`) VALUES diff --git a/db/zentao.sql b/db/zentao.sql index 036c3ab7f7..987fe80b2f 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -82,11 +82,11 @@ CREATE TABLE IF NOT EXISTS `zt_branch` ( -- DROP TABLE IF EXISTS `zt_bug`; CREATE TABLE IF NOT EXISTS `zt_bug` ( `id` mediumint(8) NOT NULL auto_increment, - `PRJ` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, `product` mediumint(8) unsigned NOT NULL default '0', `branch` mediumint(8) unsigned NOT NULL default '0', `module` mediumint(8) unsigned NOT NULL default '0', - `project` mediumint(8) unsigned NOT NULL default '0', + `execution` mediumint(8) unsigned NOT NULL default '0', `plan` mediumint(8) unsigned NOT NULL default '0', `story` mediumint(8) unsigned NOT NULL default '0', `storyVersion` smallint(6) NOT NULL default '1', @@ -139,7 +139,7 @@ CREATE TABLE IF NOT EXISTS `zt_bug` ( `deleted` enum('0','1') NOT NULL default '0', PRIMARY KEY (`id`), KEY `product` (`product`), - KEY `project` (`project`), + KEY `execution` (`execution`), KEY `status` (`status`), KEY `plan` (`plan`), KEY `story` (`story`), @@ -151,10 +151,10 @@ CREATE TABLE IF NOT EXISTS `zt_bug` ( -- DROP TABLE IF EXISTS `zt_build`; CREATE TABLE IF NOT EXISTS `zt_build` ( `id` mediumint(8) unsigned NOT NULL auto_increment, - `PRJ` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, `product` mediumint(8) unsigned NOT NULL default '0', `branch` mediumint(8) unsigned NOT NULL default '0', - `project` mediumint(8) unsigned NOT NULL default '0', + `execution` mediumint(8) unsigned NOT NULL default '0', `name` char(150) NOT NULL, `scmPath` char(255) NOT NULL, `filePath` char(255) NOT NULL, @@ -166,11 +166,11 @@ CREATE TABLE IF NOT EXISTS `zt_build` ( `deleted` enum('0','1') NOT NULL default '0', PRIMARY KEY (`id`), KEY `product` (`product`), - KEY `project` (`project`) + KEY `execution` (`execution`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_burn`; CREATE TABLE IF NOT EXISTS `zt_burn` ( - `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, `product` mediumint(8) unsigned NOT NULL, `task` mediumint(8) unsigned NOT NULL DEFAULT '0', `date` date NOT NULL, @@ -178,12 +178,12 @@ CREATE TABLE IF NOT EXISTS `zt_burn` ( `left` float NOT NULL, `consumed` float NOT NULL, `storyPoint` float NOT NULL, - PRIMARY KEY (`project`,`date`,`task`) + PRIMARY KEY (`execution`,`date`,`task`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_case`; CREATE TABLE IF NOT EXISTS `zt_case` ( `id` mediumint(8) unsigned NOT NULL auto_increment, - `PRJ` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, `product` mediumint(8) unsigned NOT NULL default '0', `branch` mediumint(8) unsigned NOT NULL default '0', `lib` mediumint(8) unsigned NOT NULL default '0', @@ -334,9 +334,9 @@ CREATE TABLE IF NOT EXISTS `zt_dept` ( -- DROP TABLE IF EXISTS `zt_doc`; CREATE TABLE IF NOT EXISTS `zt_doc` ( `id` mediumint(8) unsigned NOT NULL auto_increment, - `PRJ` mediumint(8) unsigned NOT NULL, - `product` mediumint(8) unsigned NOT NULL, `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, `lib` varchar(30) NOT NULL, `module` varchar(30) NOT NULL, `title` varchar(255) NOT NULL, @@ -356,7 +356,7 @@ CREATE TABLE IF NOT EXISTS `zt_doc` ( `deleted` enum('0','1') NOT NULL default '0', PRIMARY KEY (`id`), KEY `product` (`product`), - KEY `project` (`project`), + KEY `execution` (`execution`), KEY `lib` (`lib`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_doccontent`; @@ -377,7 +377,7 @@ CREATE TABLE IF NOT EXISTS `zt_doclib` ( `id` smallint(5) unsigned NOT NULL auto_increment, `type` varchar(30) NOT NULL, `product` mediumint(8) unsigned NOT NULL, - `project` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, `name` varchar(60) NOT NULL, `acl` varchar(10) NOT NULL DEFAULT 'open', `groups` varchar(255) NOT NULL, @@ -388,7 +388,7 @@ CREATE TABLE IF NOT EXISTS `zt_doclib` ( `deleted` enum('0','1') NOT NULL default '0', PRIMARY KEY (`id`), KEY `product` (`product`), - KEY `project` (`project`) + KEY `execution` (`execution`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_effort`; CREATE TABLE IF NOT EXISTS `zt_effort` ( @@ -449,7 +449,7 @@ CREATE TABLE IF NOT EXISTS `zt_file` ( -- DROP TABLE IF EXISTS `zt_group`; CREATE TABLE IF NOT EXISTS `zt_group` ( `id` mediumint(8) unsigned NOT NULL auto_increment, - `PRJ` mediumint(8) unsigned NOT NULL DEFAULT 0, + `project` mediumint(8) unsigned NOT NULL DEFAULT 0, `name` char(30) NOT NULL, `role` char(30) NOT NULL default '', `desc` char(255) NOT NULL default '', @@ -703,7 +703,7 @@ CREATE TABLE IF NOT EXISTS `zt_projectstory` ( -- DROP TABLE IF EXISTS `zt_release`; CREATE TABLE IF NOT EXISTS `zt_release` ( `id` mediumint(8) unsigned NOT NULL auto_increment, - `PRJ` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, `product` mediumint(8) unsigned NOT NULL default '0', `branch` mediumint(8) unsigned NOT NULL default '0', `build` mediumint(8) unsigned NOT NULL, @@ -797,7 +797,7 @@ CREATE TABLE IF NOT EXISTS `zt_stakeholder` ( -- DROP TABLE IF EXISTS `zt_story`; CREATE TABLE IF NOT EXISTS `zt_story` ( `id` mediumint(8) unsigned NOT NULL auto_increment, - `PRJ` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, `parent` mediumint(9) NOT NULL default '0', `product` mediumint(8) unsigned NOT NULL default '0', `branch` mediumint(8) unsigned NOT NULL default '0', @@ -869,9 +869,9 @@ CREATE TABLE IF NOT EXISTS `zt_suitecase` ( -- DROP TABLE IF EXISTS `zt_task`; CREATE TABLE IF NOT EXISTS `zt_task` ( `id` mediumint(8) unsigned NOT NULL auto_increment, - `PRJ` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, `parent` mediumint(8) NOT NULL DEFAULT '0', - `project` mediumint(8) unsigned NOT NULL default '0', + `execution` mediumint(8) unsigned NOT NULL default '0', `module` mediumint(8) unsigned NOT NULL default '0', `design` mediumint(8) unsigned NOT NULL, `story` mediumint(8) unsigned NOT NULL default '0', @@ -912,7 +912,7 @@ CREATE TABLE IF NOT EXISTS `zt_task` ( `activatedDate` date NOT NULL, `deleted` enum('0','1') NOT NULL default '0', PRIMARY KEY (`id`), - KEY `project` (`project`), + KEY `execution` (`execution`), KEY `story` (`story`), KEY `parent` (`parent`), KEY `assignedTo` (`assignedTo`) @@ -959,9 +959,9 @@ CREATE TABLE IF NOT EXISTS `zt_team` ( -- DROP TABLE IF EXISTS `zt_testreport`; CREATE TABLE IF NOT EXISTS `zt_testreport` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, - `PRJ` mediumint(8) unsigned NOT NULL, - `product` mediumint(8) unsigned NOT NULL, `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `execution` mediumint(8) unsigned NOT NULL, `tasks` varchar(255) NOT NULL, `builds` varchar(255) NOT NULL, `title` varchar(255) NOT NULL, @@ -1016,7 +1016,7 @@ CREATE TABLE IF NOT EXISTS `zt_testrun` ( -- DROP TABLE IF EXISTS `zt_testsuite`; CREATE TABLE IF NOT EXISTS `zt_testsuite` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, - `PRJ` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, `product` mediumint(8) unsigned NOT NULL, `name` varchar(255) NOT NULL, `desc` text NOT NULL, @@ -1032,10 +1032,10 @@ CREATE TABLE IF NOT EXISTS `zt_testsuite` ( -- DROP TABLE IF EXISTS `zt_testtask`; CREATE TABLE IF NOT EXISTS `zt_testtask` ( `id` mediumint(8) unsigned NOT NULL auto_increment, - `PRJ` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, `product` mediumint(8) unsigned NOT NULL, `name` char(90) NOT NULL, - `project` mediumint(8) unsigned NOT NULL default '0', + `execution` mediumint(8) unsigned NOT NULL default '0', `build` char(30) NOT NULL, `owner` varchar(30) NOT NULL, `pri` tinyint(3) unsigned NOT NULL default '0', @@ -1140,7 +1140,7 @@ CREATE TABLE IF NOT EXISTS `zt_usercontact` ( CREATE TABLE IF NOT EXISTS `zt_usergroup` ( `account` char(30) NOT NULL default '', `group` mediumint(8) unsigned NOT NULL default '0', - `PRJ` text NOT NULL, + `project` text NOT NULL, UNIQUE KEY `account` (`account`,`group`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_userquery`; @@ -1198,7 +1198,7 @@ CREATE TABLE IF NOT EXISTS `zt_entry` ( CREATE TABLE IF NOT EXISTS `zt_expect` ( `id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, `userID` mediumint(8) NOT NULL, - `PRJ` mediumint(8) NOT NULL DEFAULT 0, + `project` mediumint(8) NOT NULL DEFAULT 0, `expect` text NOT NULL, `progress` text NOT NULL, `createdBy` char(30) NOT NULL, @@ -1262,9 +1262,9 @@ CREATE TABLE IF NOT EXISTS `zt_score` ( -- DROP TABLE IF EXISTS `zt_relation`; CREATE TABLE IF NOT EXISTS `zt_relation` ( `id` int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `PRJ` mediumint(8) NOT NULL, - `product` mediumint(8) NOT NULL, `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, @@ -1278,7 +1278,7 @@ CREATE TABLE IF NOT EXISTS `zt_relation` ( INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES ('*', '*', '*', '*', '*', '', '监控定时任务', 'zentao', 1, 'normal', '0000-00-00 00:00:00'), -('30', '23', '*', '*', '*', 'moduleName=project&methodName=computeburn', '更新燃尽图', 'zentao', 1, 'normal', '0000-00-00 00:00:00'), +('30', '23', '*', '*', '*', 'moduleName=execution&methodName=computeburn', '更新燃尽图', 'zentao', 1, 'normal', '0000-00-00 00:00:00'), ('0', '8', '*', '*', '*', 'moduleName=report&methodName=remind', '每日任务提醒', 'zentao', 1, 'normal', '0000-00-00 00:00:00'), ('*/5', '*', '*', '*', '*', 'moduleName=svn&methodName=run', '同步SVN', 'zentao', 1, 'stop', '0000-00-00 00:00:00'), ('*/5', '*', '*', '*', '*', 'moduleName=git&methodName=run', '同步GIT', 'zentao', 1, 'stop', '0000-00-00 00:00:00'), @@ -1305,7 +1305,7 @@ INSERT INTO `zt_group` (`id`, `name`, `role`, `desc`) VALUES (10, 'OTHERS', 'others', 'for others.'), (11, 'guest', 'guest', 'For guest'), (12, 'LIMITED', 'limited', 'For limited user'), -(13, '项目管理员', 'PRJAdmin', '项目管理员可以维护项目的权限'); +(13, '项目管理员', 'projectAdmin', '项目管理员可以维护项目的权限'); INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1,'action','editComment'), @@ -1516,28 +1516,28 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1,'program','PGMStakeholder'), (1,'program','PGMStart'), (1,'program','PGMSuspend'), -(1,'program','PRJActivate'), -(1,'program','PRJAddWhitelist'), -(1,'program','PRJBrowse'), -(1,'program','PRJClose'), -(1,'program','PRJCopyGroup'), -(1,'program','PRJCreate'), -(1,'program','PRJCreateGroup'), -(1,'program','PRJDelete'), -(1,'program','PRJEdit'), -(1,'program','PRJEditGroup'), -(1,'program','PRJGroup'), -(1,'program','PRJManageGroupMember'), -(1,'program','PRJManageMembers'), -(1,'program','PRJManagePriv'), -(1,'program','PRJManageProducts'), -(1,'program','PRJManageView'), -(1,'program','PRJProgramTitle'), -(1,'program','PRJStart'), -(1,'program','PRJSuspend'), -(1,'program','PRJView'), -(1,'program','PRJUpdateOrder'), -(1,'program','PRJWhitelist'), +(1,'program','activate'), +(1,'program','addWhitelist'), +(1,'program','browse'), +(1,'program','close'), +(1,'program','copyGroup'), +(1,'program','create'), +(1,'program','createGroup'), +(1,'program','delete'), +(1,'program','edit'), +(1,'program','editGroup'), +(1,'program','group'), +(1,'program','manageGroupMember'), +(1,'program','manageMembers'), +(1,'program','managePriv'), +(1,'program','manageProducts'), +(1,'program','manageView'), +(1,'program','programTitle'), +(1,'program','start'), +(1,'program','suspend'), +(1,'program','view'), +(1,'program','updateOrder'), +(1,'program','whitelist'), (1,'program','unbindWhielist'), (1,'program','unlinkStakeholder'), (1,'program','view'), @@ -2324,28 +2324,28 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (4,'program','PGMStakeholder'), (4,'program','PGMStart'), (4,'program','PGMSuspend'), -(4,'program','PRJActivate'), -(4,'program','PRJAddWhitelist'), -(4,'program','PRJBrowse'), -(4,'program','PRJClose'), -(4,'program','PRJCopyGroup'), -(4,'program','PRJCreate'), -(4,'program','PRJCreateGroup'), -(4,'program','PRJDelete'), -(4,'program','PRJEdit'), -(4,'program','PRJEditGroup'), -(4,'program','PRJGroup'), -(4,'program','PRJManageGroupMember'), -(4,'program','PRJManageMembers'), -(4,'program','PRJManagePriv'), -(4,'program','PRJManageProducts'), -(4,'program','PRJManageView'), -(4,'program','PRJProgramTitle'), -(4,'program','PRJStart'), -(4,'program','PRJSuspend'), -(4,'program','PRJUpdateOrder'), -(4,'program','PRJView'), -(4,'program','PRJWhitelist'), +(4,'program','activate'), +(4,'program','addWhitelist'), +(4,'program','browse'), +(4,'program','close'), +(4,'program','copyGroup'), +(4,'program','create'), +(4,'program','createGroup'), +(4,'program','delete'), +(4,'program','edit'), +(4,'program','editGroup'), +(4,'program','group'), +(4,'program','manageGroupMember'), +(4,'program','manageMembers'), +(4,'program','managePriv'), +(4,'program','manageProducts'), +(4,'program','manageView'), +(4,'program','programTitle'), +(4,'program','start'), +(4,'program','suspend'), +(4,'program','updateOrder'), +(4,'program','view'), +(4,'program','whitelist'), (4,'program','unbindWhielist'), (4,'program','unlinkStakeholder'), (4,'program','view'), @@ -2630,28 +2630,28 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (5,'program','PGMStakeholder'), (5,'program','PGMStart'), (5,'program','PGMSuspend'), -(5,'program','PRJActivate'), -(5,'program','PRJAddWhitelist'), -(5,'program','PRJBrowse'), -(5,'program','PRJClose'), -(5,'program','PRJCopyGroup'), -(5,'program','PRJCreate'), -(5,'program','PRJCreateGroup'), -(5,'program','PRJDelete'), -(5,'program','PRJEdit'), -(5,'program','PRJEditGroup'), -(5,'program','PRJGroup'), -(5,'program','PRJManageGroupMember'), -(5,'program','PRJManageMembers'), -(5,'program','PRJManagePriv'), -(5,'program','PRJManageProducts'), -(5,'program','PRJManageView'), -(5,'program','PRJProgramTitle'), -(5,'program','PRJStart'), -(5,'program','PRJSuspend'), -(5,'program','PRJView'), -(5,'program','PRJUpdateOrder'), -(5,'program','PRJWhitelist'), +(5,'program','activate'), +(5,'program','addWhitelist'), +(5,'program','browse'), +(5,'program','close'), +(5,'program','copyGroup'), +(5,'program','create'), +(5,'program','createGroup'), +(5,'program','delete'), +(5,'program','edit'), +(5,'program','editGroup'), +(5,'program','group'), +(5,'program','manageGroupMember'), +(5,'program','manageMembers'), +(5,'program','managePriv'), +(5,'program','manageProducts'), +(5,'program','manageView'), +(5,'program','programTitle'), +(5,'program','start'), +(5,'program','suspend'), +(5,'program','view'), +(5,'program','updateOrder'), +(5,'program','whitelist'), (5,'program','unbindWhielist'), (5,'program','unlinkStakeholder'), (5,'project','activate'), @@ -2924,28 +2924,28 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (6,'program','PGMStakeholder'), (6,'program','PGMStart'), (6,'program','PGMSuspend'), -(6,'program','PRJActivate'), -(6,'program','PRJAddWhitelist'), -(6,'program','PRJBrowse'), -(6,'program','PRJClose'), -(6,'program','PRJCopyGroup'), -(6,'program','PRJCreate'), -(6,'program','PRJCreateGroup'), -(6,'program','PRJDelete'), -(6,'program','PRJEdit'), -(6,'program','PRJEditGroup'), -(6,'program','PRJGroup'), -(6,'program','PRJManageGroupMember'), -(6,'program','PRJManageMembers'), -(6,'program','PRJManagePriv'), -(6,'program','PRJManageProducts'), -(6,'program','PRJManageView'), -(6,'program','PRJProgramTitle'), -(6,'program','PRJStart'), -(6,'program','PRJSuspend'), -(6,'program','PRJView'), -(6,'program','PRJUpdateOrder'), -(6,'program','PRJWhitelist'), +(6,'program','activate'), +(6,'program','addWhitelist'), +(6,'program','browse'), +(6,'program','close'), +(6,'program','copyGroup'), +(6,'program','create'), +(6,'program','createGroup'), +(6,'program','delete'), +(6,'program','edit'), +(6,'program','editGroup'), +(6,'program','group'), +(6,'program','manageGroupMember'), +(6,'program','manageMembers'), +(6,'program','managePriv'), +(6,'program','manageProducts'), +(6,'program','manageView'), +(6,'program','programTitle'), +(6,'program','start'), +(6,'program','suspend'), +(6,'program','view'), +(6,'program','updateOrder'), +(6,'program','whitelist'), (6,'program','unbindWhielist'), (6,'program','unlinkStakeholder'), (6,'project','activate'), @@ -3211,28 +3211,28 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (7,'program','PGMStakeholder'), (7,'program','PGMStart'), (7,'program','PGMSuspend'), -(7,'program','PRJActivate'), -(7,'program','PRJAddWhitelist'), -(7,'program','PRJBrowse'), -(7,'program','PRJClose'), -(7,'program','PRJCopyGroup'), -(7,'program','PRJCreate'), -(7,'program','PRJCreateGroup'), -(7,'program','PRJDelete'), -(7,'program','PRJEdit'), -(7,'program','PRJEditGroup'), -(7,'program','PRJGroup'), -(7,'program','PRJManageGroupMember'), -(7,'program','PRJManageMembers'), -(7,'program','PRJManagePriv'), -(7,'program','PRJManageProducts'), -(7,'program','PRJManageView'), -(7,'program','PRJProgramTitle'), -(7,'program','PRJStart'), -(7,'program','PRJSuspend'), -(7,'program','PRJView'), -(7,'program','PRJUpdateOrder'), -(7,'program','PRJWhitelist'), +(7,'program','activate'), +(7,'program','addWhitelist'), +(7,'program','browse'), +(7,'program','close'), +(7,'program','copyGroup'), +(7,'program','create'), +(7,'program','createGroup'), +(7,'program','delete'), +(7,'program','edit'), +(7,'program','editGroup'), +(7,'program','group'), +(7,'program','manageGroupMember'), +(7,'program','manageMembers'), +(7,'program','managePriv'), +(7,'program','manageProducts'), +(7,'program','manageView'), +(7,'program','programTitle'), +(7,'program','start'), +(7,'program','suspend'), +(7,'program','view'), +(7,'program','updateOrder'), +(7,'program','whitelist'), (7,'program','unbindWhielist'), (7,'program','unlinkStakeholder'), (7,'project','all'), @@ -3480,28 +3480,28 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (8,'program','PGMStakeholder'), (8,'program','PGMStart'), (8,'program','PGMSuspend'), -(8,'program','PRJActivate'), -(8,'program','PRJAddWhitelist'), -(8,'program','PRJBrowse'), -(8,'program','PRJClose'), -(8,'program','PRJCopyGroup'), -(8,'program','PRJCreate'), -(8,'program','PRJCreateGroup'), -(8,'program','PRJDelete'), -(8,'program','PRJEdit'), -(8,'program','PRJEditGroup'), -(8,'program','PRJGroup'), -(8,'program','PRJManageGroupMember'), -(8,'program','PRJManageMembers'), -(8,'program','PRJManagePriv'), -(8,'program','PRJManageProducts'), -(8,'program','PRJManageView'), -(8,'program','PRJProgramTitle'), -(8,'program','PRJStart'), -(8,'program','PRJSuspend'), -(8,'program','PRJView'), -(8,'program','PRJUpdateOrder'), -(8,'program','PRJWhitelist'), +(8,'program','activate'), +(8,'program','addWhitelist'), +(8,'program','browse'), +(8,'program','close'), +(8,'program','copyGroup'), +(8,'program','create'), +(8,'program','createGroup'), +(8,'program','delete'), +(8,'program','edit'), +(8,'program','editGroup'), +(8,'program','group'), +(8,'program','manageGroupMember'), +(8,'program','manageMembers'), +(8,'program','managePriv'), +(8,'program','manageProducts'), +(8,'program','manageView'), +(8,'program','programTitle'), +(8,'program','start'), +(8,'program','suspend'), +(8,'program','view'), +(8,'program','updateOrder'), +(8,'program','whitelist'), (8,'program','unbindWhielist'), (8,'program','unlinkStakeholder'), (8,'project','all'), @@ -3759,28 +3759,28 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (9,'program','PGMStakeholder'), (9,'program','PGMStart'), (9,'program','PGMSuspend'), -(9,'program','PRJActivate'), -(9,'program','PRJAddWhitelist'), -(9,'program','PRJBrowse'), -(9,'program','PRJClose'), -(9,'program','PRJCopyGroup'), -(9,'program','PRJCreate'), -(9,'program','PRJCreateGroup'), -(9,'program','PRJDelete'), -(9,'program','PRJEdit'), -(9,'program','PRJEditGroup'), -(9,'program','PRJGroup'), -(9,'program','PRJManageGroupMember'), -(9,'program','PRJManageMembers'), -(9,'program','PRJManagePriv'), -(9,'program','PRJManageProducts'), -(9,'program','PRJManageView'), -(9,'program','PRJProgramTitle'), -(9,'program','PRJStart'), -(9,'program','PRJSuspend'), -(9,'program','PRJView'), -(9,'program','PRJUpdateOrder'), -(9,'program','PRJWhitelist'), +(9,'program','activate'), +(9,'program','addWhitelist'), +(9,'program','browse'), +(9,'program','close'), +(9,'program','copyGroup'), +(9,'program','create'), +(9,'program','createGroup'), +(9,'program','delete'), +(9,'program','edit'), +(9,'program','editGroup'), +(9,'program','group'), +(9,'program','manageGroupMember'), +(9,'program','manageMembers'), +(9,'program','managePriv'), +(9,'program','manageProducts'), +(9,'program','manageView'), +(9,'program','programTitle'), +(9,'program','start'), +(9,'program','suspend'), +(9,'program','view'), +(9,'program','updateOrder'), +(9,'program','whitelist'), (9,'program','unbindWhielist'), (9,'program','unlinkStakeholder'), (9,'project','all'), @@ -4130,9 +4130,9 @@ INSERT INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`) VA ('zh-cn', 'custom', 'URSRList', '3', '{\"SRName\":\"\\u6545\\u4e8b\",\"URName\":\"\\u9700\\u6c42\"}', '1'), ('zh-cn', 'custom', 'URSRList', '4', '{\"SRName\":\"\\u6545\\u4e8b\",\"URName\":\"\\u53f2\\u8bd7\"}', '1'); -INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'custom', '', 'hourPoint', '1'); -INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProduct', '1'); -INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProject', '1'); +INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'custom', '', 'hourPoint', '1'); +INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProduct', '1'); +INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRExecution', '1'); INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'custom', '', 'URSR', '3'); INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'program', '', 'unitList', 'CNY,USD'); INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'program', '', 'defaultCurrency', 'CNY'); diff --git a/framework/base/router.class.php b/framework/base/router.class.php index a7d8b1f7d7..27460a6248 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -5,7 +5,7 @@ * * @package framework * - * The author disclaims copyright to this source code. In place of + * The author disclaims copyright to this source code. In place of * a legal notice, here is a blessing: * * May you do good and not evil. @@ -26,7 +26,7 @@ class baseRouter /** * 框架的根目录。 * The root directory of the framwork($this->basePath/framework) - * + * * @var string * @access public */ @@ -35,7 +35,7 @@ class baseRouter /** * 类库的根目录。{$this->basePath/lib} * The root directory of the library($this->basePath/lib). - * + * * @var string * @access public */ @@ -44,7 +44,7 @@ class baseRouter /** * 应用名称 * The appName. - * + * * @var string * @access public */ @@ -53,7 +53,7 @@ class baseRouter /** * 应用程序的根目录。 * The root directory of the app. - * + * * @var string * @access public */ @@ -62,7 +62,7 @@ class baseRouter /** * 临时文件的根目录。 * The root directory of temp. - * + * * @var string * @access public */ @@ -71,7 +71,7 @@ class baseRouter /** * 缓存的根目录。 * The root directory of cache. - * + * * @var string * @access public */ @@ -80,7 +80,7 @@ class baseRouter /** * WWW目录。 * The root directory of www. - * + * * @var string * @access public */ @@ -89,7 +89,7 @@ class baseRouter /** * 附件存放目录。 * The root directory of data. - * + * * @var string * @access public */ @@ -98,7 +98,7 @@ class baseRouter /** * 日志文件的根目录。 * The root directory of log. - * + * * @var string * @access public */ @@ -107,7 +107,7 @@ class baseRouter /** * 配置文件的根目录。 * The root directory of config. - * + * * @var string * @access public */ @@ -116,7 +116,7 @@ class baseRouter /** * 模块的根目录。 * The root directory of module. - * + * * @var string * @access public */ @@ -125,7 +125,7 @@ class baseRouter /** * 主题的根目录。 * The root directory of theme. - * + * * @var string * @access public */ @@ -134,25 +134,25 @@ class baseRouter /** * 用户使用的语言。 * The lang of the client user. - * + * * @var string * @access public */ public $clientLang; /** - * 当前页面所在的group,用于左侧菜单栏判断。 - * The current group(url: '#open=?'), highlight left menu. + * 当前页面所在的应用,用于左侧菜单栏判断。 + * The current app code(url: '#app=?'), highlight left menu. * * @var string * @access public */ - public $openGroup; + public $openApp; /** * 用户使用的主题。 * The theme of the client user. - * + * * @var string * @access public */ @@ -161,8 +161,8 @@ class baseRouter /** * 客户端设备类型。 * The device type of client. - * - * @var string + * + * @var string * @access public */ public $clientDevice; @@ -170,7 +170,7 @@ class baseRouter /** * 当前模块的control对象。 * The control object of current module. - * + * * @var object * @access public */ @@ -179,7 +179,7 @@ class baseRouter /** * 模块名。 * The module name - * + * * @var string * @access public */ @@ -188,7 +188,7 @@ class baseRouter /** * 当前访问模块的control文件。 * The control file of the module current visiting. - * + * * @var string * @access public */ @@ -197,7 +197,7 @@ class baseRouter /** * 当前访问的方法名。 * The name of the method current visiting. - * + * * @var string * @access public */ @@ -206,7 +206,7 @@ class baseRouter /** * 当前方法的扩展文件。 * The action extension file of current method. - * + * * @var string * @access public */ @@ -215,7 +215,7 @@ class baseRouter /** * 访问的URI。 * The URI. - * + * * @var string * @access public */ @@ -224,7 +224,7 @@ class baseRouter /** * url地址传递的参数。 * The params passed in through url. - * + * * @var array * @access public */ @@ -233,7 +233,7 @@ class baseRouter /** * 视图类型。 * The view type. - * + * * @var string * @access public */ @@ -242,7 +242,7 @@ class baseRouter /** * 全局$config对象。 * The global $config object. - * + * * @var object * @access public */ @@ -251,7 +251,7 @@ class baseRouter /** * 全局$lang对象。 * The global $lang object. - * + * * @var object * @access public */ @@ -260,7 +260,7 @@ class baseRouter /** * 全局$dbh对象,数据库连接句柄。 * The global $dbh object, the database connection handler. - * + * * @var object * @access public */ @@ -269,7 +269,7 @@ class baseRouter /** * 从数据库的句柄。 * The slave database handler. - * + * * @var object * @access public */ @@ -278,7 +278,7 @@ class baseRouter /** * $post对象,用于访问$_POST变量。 * The $post object, used to access the $_POST var. - * + * * @var object * @access public */ @@ -287,7 +287,7 @@ class baseRouter /** * $get对象,用于访问$_GET变量。 * The $get object, used to access the $_GET var. - * + * * @var object * @access public */ @@ -296,7 +296,7 @@ class baseRouter /** * $session对象,用于访问$_SESSION变量。 * The $session object, used to access the $_SESSION var. - * + * * @var object * @access public */ @@ -305,7 +305,7 @@ class baseRouter /** * $server对象,用于访问$_SERVER变量。 * The $server object, used to access the $_SERVER var. - * + * * @var object * @access public */ @@ -314,7 +314,7 @@ class baseRouter /** * $cookie对象,用于访问$_COOKIE变量。 * The $cookie object, used to access the $_COOKIE var. - * + * * @var object * @access public */ @@ -332,7 +332,7 @@ class baseRouter /** * 网站代号。 * The code of current site. - * + * * @var string * @access public */ @@ -345,11 +345,11 @@ class baseRouter * * The construct function. * Prepare all the paths, classes, super objects and so on. - * Notice: + * Notice: * 1. You should use the createApp() method to get an instance of the router. * 2. If the $appRoot is empty, the framework will compute the appRoot according the $appName * - * @param string $appName the name of the app + * @param string $appName the name of the app * @param string $appRoot the root path of the app * @access public * @return void @@ -382,7 +382,7 @@ class baseRouter $this->setTimezone(); $this->startSession(); $this->setPRJ(); - $this->setOpenGroup(); + $this->setOpenApp(); if($this->config->framework->multiSite) $this->setSiteCode() && $this->loadExtraConfig(); if($this->config->framework->autoConnectDB) $this->connectDB(); @@ -398,7 +398,7 @@ class baseRouter /** * 创建一个应用。 * Create an application. - * + * * @param string $appName 应用名称。 The name of the app. * @param string $appRoot 应用根路径。The root path of the app. * @param string $className 应用类名,如果对router类做了扩展,需要指定类名。When extends router class, you should pass in the child router class name. @@ -417,8 +417,8 @@ class baseRouter /** * 设置应用名称。 * Set app name. - * - * @param string $appName + * + * @param string $appName * @access public * @return void */ @@ -430,7 +430,7 @@ class baseRouter /** * 设置目录分隔符。 * Set the path directory separator. - * + * * @access public * @return void */ @@ -454,7 +454,7 @@ class baseRouter /** * 设置框架根目录。 * Set the frame root. - * + * * @access public * @return void */ @@ -466,7 +466,7 @@ class baseRouter /** * 设置类库的根目录。 * Set the app lib root. - * + * * @access public * @return void */ @@ -479,8 +479,8 @@ class baseRouter * 设置应用的根目录。 * Set the app root. * - * @param string $appName - * @param string $appRoot + * @param string $appName + * @param string $appRoot * @access public * @return void */ @@ -494,7 +494,7 @@ class baseRouter /** * 设置临时文件的根目录。 * Set the tmp root. - * + * * @access public * @return void */ @@ -506,7 +506,7 @@ class baseRouter /** * 设置缓存的根目录。 * Set the cache root. - * + * * @access public * @return void */ @@ -518,7 +518,7 @@ class baseRouter /** * 设置log的根目录。 * Set the log root. - * + * * @access public * @return void */ @@ -530,7 +530,7 @@ class baseRouter /** * 设置config配置文件的根目录。 * Set the config root. - * + * * @access public * @return void */ @@ -542,7 +542,7 @@ class baseRouter /** * 设置模块的根目录。 * Set the module root. - * + * * @access public * @return void */ @@ -554,7 +554,7 @@ class baseRouter /** * 设置www的根目录。 * Set the www root. - * + * * @access public * @return void */ @@ -566,7 +566,7 @@ class baseRouter /** * 设置主题根目录。 * Set the theme root. - * + * * @access public * @return void */ @@ -578,7 +578,7 @@ class baseRouter /** * 设置data根目录。 * Set the data root. - * + * * @access public * @return void */ @@ -590,7 +590,7 @@ class baseRouter /** * 设置超级变量。 * Set the super vars. - * + * * @access public * @return void */ @@ -621,8 +621,8 @@ class baseRouter /** * 设置Debug模式。 - * set Debug. - * + * set Debug. + * * @access public * @return void */ @@ -634,7 +634,7 @@ class baseRouter /** * 设置错误处理句柄。 * Set the error handler. - * + * * @access public * @return void */ @@ -646,8 +646,8 @@ class baseRouter /** * 获取应用名称 - * Get app name - * + * Get app name + * * @access public * @return string */ @@ -659,7 +659,7 @@ class baseRouter /** * 获取$basePath,即基础路径。 * Get the $basePath var. - * + * * @access public * @return string */ @@ -671,7 +671,7 @@ class baseRouter /** * 获取$frameRoot,即框架根目录。 * Get the $frameRoot var. - * + * * @access public * @return string */ @@ -683,7 +683,7 @@ class baseRouter /** * 获取$appRoot变量,即应用的根目录。 * Get the $appRoot var. - * + * * @access public * @return string */ @@ -695,7 +695,7 @@ class baseRouter /** * 获取$wwwRoot变量。 * Get the $wwwRoot var - * + * * @access public * @return string */ @@ -707,7 +707,7 @@ class baseRouter /** * 获取$coreLibRoot变量,即应用类库的根目录。 * Get the $coreLibRoot var. - * + * * @access public * @return string */ @@ -719,43 +719,43 @@ class baseRouter /** * 获取$tmpRoot变量,即临时文件的根目录。 * Get the $tmpRoot var. - * + * * @access public * @return string */ public function getTmpRoot() { return $this->tmpRoot; - } + } /** * 获取$cacheRoot变量,即缓存文件的根目录。 * Get the $cacheRoot var. - * + * * @access public * @return string */ public function getCacheRoot() { return $this->cacheRoot; - } + } /** * 获取$logRoot变量,即日志文件的根目录。 * Get the $logRoot var. - * + * * @access public * @return string */ public function getLogRoot() { return $this->logRoot; - } + } /** * 获取$configRoot变量,即配置文件的根目录。 * Get the $configRoot var. - * + * * @access public * @return string */ @@ -767,8 +767,8 @@ class baseRouter /** * 获取$moduleRoot变量,即应用模块的根目录。 * Get the $moduleRoot var. - * - * @param string $appName + * + * @param string $appName * @access public * @return string */ @@ -781,7 +781,7 @@ class baseRouter /** * 获取$webRoot,即应用的路径。 * Get the $webRoot var. - * + * * @access public * @return string */ @@ -793,7 +793,7 @@ class baseRouter /** * 获取$themeRoot变量,即主题的根目录。 * Get the $themeRoot var. - * + * * @access public * @return string */ @@ -805,7 +805,7 @@ class baseRouter /** * 获取$dataRoot目录 * Get the $dataRoot var - * + * * @access public * @return string */ @@ -815,11 +815,11 @@ class baseRouter } //------ 客户端环境有关的函数(Client environment related functions) ------// - + /** * 根据配置设置当前时区。 * Set the time zone according to the config. - * + * * @access public * @return void */ @@ -873,9 +873,9 @@ class baseRouter * @access public * @return void */ - public function setOpenGroup() + public function setOpenApp() { - if(isset($_COOKIE['openGroup'])) $this->openGroup = $_COOKIE['openGroup']; + if(isset($_COOKIE['openApp'])) $this->openApp = $_COOKIE['openApp']; } /** @@ -895,12 +895,12 @@ class baseRouter if(isset($_COOKIE['lang'])) $this->clientLang = $_COOKIE['lang']; if(isset($_SESSION['lang'])) $this->clientLang = $_SESSION['lang']; if(!empty($lang)) $this->clientLang = $lang; - + if(!empty($this->clientLang)) { $this->clientLang = strtolower($this->clientLang); if(!isset($this->config->langs[$this->clientLang])) $this->clientLang = $this->config->default->lang; - } + } else { $this->clientLang = $this->config->default->lang; @@ -915,7 +915,7 @@ class baseRouter /** * 从HTTP_ACCEPT_LANGUAGE中提出去支持的语言。 * Parse the lang str from HTTP_ACCEPT_LANGUAGE header. - * + * * @access public * @return string */ @@ -940,7 +940,7 @@ class baseRouter * Set the theme the client user using. The logic is same as the clientLang. * The css and images files of an theme should saved at www/theme/$themeName * - * @param string $theme + * @param string $theme * @access public * @return void */ @@ -954,7 +954,7 @@ class baseRouter { $this->clientTheme = strtolower($this->clientTheme); if(!isset($this->lang->themes[$this->clientTheme])) $this->clientTheme = $this->config->default->theme; - } + } else { $this->clientTheme = $this->config->default->theme; @@ -969,7 +969,7 @@ class baseRouter /** * 设置客户端的设备类型。 * Set client device. - * + * * @access public * @return void */ @@ -980,7 +980,7 @@ class baseRouter if($this->cookie->device == 'mobile') $this->clientDevice = 'mobile'; if($this->cookie->device == 'desktop') $this->clientDevice = 'desktop'; - if(strpos('mobile,desktop', $this->cookie->device) === false) + if(strpos('mobile,desktop', $this->cookie->device) === false) { $mobile = new mobile(); $this->clientDevice = ($mobile->isMobile() and !$mobile->isTablet()) ? 'mobile' : 'desktop'; @@ -995,7 +995,7 @@ class baseRouter /** * 设置站点代号,可以针对不同的站点来加载不同的扩展。 * Set the code of current site, thus can load diffrent extension of diffrent site. - * + * * @access public * @return void */ @@ -1007,7 +1007,7 @@ class baseRouter /** * 获取$clientLang变量,即客户端的语言。 * Get the $clientLang var. - * + * * @access public * @return string */ @@ -1018,7 +1018,7 @@ class baseRouter /** * 获取$clientTheme变量。 - * Get the $clientTheme var. + * Get the $clientTheme var. * * @access public * @return string @@ -1031,7 +1031,7 @@ class baseRouter /** * 获得客户端的终端设备。 * Get the client device. - * + * * @access public * @return void */ @@ -1045,7 +1045,7 @@ class baseRouter /** * 解析本次请求的入口方法,根据请求的类型(PATH_INFO GET),调用相应的方法。 * The entrance of parseing request. According to the requestType, call related methods. - * + * * @access public * @return void */ @@ -1070,7 +1070,7 @@ class baseRouter /** * PATH_INFO方式解析,获取$URI和$viewType。 * Parse PATH_INFO, get the $URI and $viewType. - * + * * @access public * @return void */ @@ -1104,7 +1104,7 @@ class baseRouter /** * 从$_SERVER或者$_ENV全局变量根据pathinfo变量名获取$PATH_INFO值。 * PATH_INFO的变量名几乎都是'PATH_INFO',但也有可能是ORIG_PATH_INFO。 - * + * * Get $PATH_INFO from $_SERVER or $_ENV by the pathinfo var name. * Mostly, the var name of PATH_INFO is PATH_INFO, but may be ORIG_PATH_INFO. * @@ -1155,7 +1155,7 @@ class baseRouter { if(isset($_GET[$this->config->viewVar])) { - $this->viewType = $_GET[$this->config->viewVar]; + $this->viewType = $_GET[$this->config->viewVar]; if(strpos($this->config->views, ',' . $this->viewType . ',') === false) $this->viewType = $this->config->default->view; } else @@ -1168,7 +1168,7 @@ class baseRouter /** * 获取$URL。 * Get the $URL. - * + * * @param bool $full true, the URI contains the webRoot, else only hte URI. * @access public * @return string @@ -1186,7 +1186,7 @@ class baseRouter /** * 获取$vewType变量。 * Get the $viewType var. - * + * * @access public * @return string */ @@ -1199,7 +1199,7 @@ class baseRouter /** * 加载common模块。 - * + * * common模块比较特别,它会执行几乎每次请求都需要执行的操作,例如: * 打开session,检查权限等等。 * 加载完$lang, $config, $dbh后,需要在入口文件(www/index.php)中手动调用该方法。 @@ -1231,7 +1231,7 @@ class baseRouter /** * 设置要被调用的模块名。 * Set the name of the module to be called. - * + * * @param string $moduleName the module name * @access public * @return void @@ -1244,10 +1244,10 @@ class baseRouter /** * 设置要被调用的控制器文件。 * Set the control file of the module to be called. - * + * * @param bool $exitIfNone 没有找到该控制器文件的情况:如果该参数为true,则终止程序;如果为false,则打印错误日志 * The control file was not found: if the parameter is true, the program is terminated; - * if false, the error log is printed. + * if false, the error log is printed. * @access public * @return bool */ @@ -1261,8 +1261,8 @@ class baseRouter /** * 设置要被调用的方法名。 * Set the name of the method calling. - * - * @param string $methodName + * + * @param string $methodName * @access public * @return void */ @@ -1274,7 +1274,7 @@ class baseRouter /** * 获取一个模块的路径。 * Get the path of one module. - * + * * @param string $appName the app name * @param string $moduleName the module name * @access public @@ -1293,7 +1293,7 @@ class baseRouter /** * 获取一个模块的扩展路径。 Get extension path of one module. - * + * * If the extensionLevel == 0, return empty array. * If the extensionLevel == 1, return the common extension directory. * If the extensionLevel == 2, return the common and site extension directories. @@ -1322,8 +1322,8 @@ class baseRouter /** * 检查模块中某一个变量必须为英文字母和数字组合。Check module a variable must be ascii. - * - * @param string $var + * + * @param string $var * @access public * @return bool */ @@ -1337,8 +1337,8 @@ class baseRouter /** * 检查方法中某一个变量必须为英文字母和数字组合。Check method a variable must be ascii. - * - * @param string $var + * + * @param string $var * @access public * @return bool */ @@ -1354,14 +1354,14 @@ class baseRouter /** * 设置Action的扩展文件。 Set the action extension file. - * + * * @access public * @return bool */ public function setActionExtFile() { $moduleExtPaths = $this->getModuleExtPath('', $this->moduleName, 'control'); - + /* 如果扩展目录为空,不包含任何扩展文件。If there's no ext pathes return false.*/ if(empty($moduleExtPaths)) return false; @@ -1380,7 +1380,7 @@ class baseRouter /** * 设置一个模块的model文件,如果存在model扩展,一起合并。 * Set the model file of one module. If there's an extension file, merge it with the main model file. - * + * * @param string $moduleName the module name * @param string $appName the app name * @static @@ -1398,7 +1398,7 @@ class baseRouter /* 计算扩展的文件和hook文件。Compute the extension files and hook files. */ $hookFiles = array(); $extFiles = array(); - $siteExtended = false; + $siteExtended = false; $modelExtPaths = $this->getModuleExtPath($appName, $moduleName, 'model'); foreach($modelExtPaths as $extType => $modelExtPath) @@ -1434,12 +1434,12 @@ class baseRouter /** * 检查合并之后的model文件是否需要更新。Check whether the merged model file need update or not. - * - * @param string $mainModelFile - * @param string $mergedModelFile - * @param string $modelExtPaths - * @param array $extFiles - * @param array $hookFiles + * + * @param string $mainModelFile + * @param string $mergedModelFile + * @param string $modelExtPaths + * @param array $extFiles + * @param array $hookFiles * @access public * @return bool */ @@ -1450,14 +1450,14 @@ class baseRouter foreach($extFiles as $extFile) if(filemtime($extFile) > $lastTime) return true; foreach($hookFiles as $hookFile) if(filemtime($hookFile) > $lastTime) return true; - $modelExtPath = $modelExtPaths['common']; + $modelExtPath = $modelExtPaths['common']; $modelHookPath = $modelExtPaths['common'] . 'hook/'; if(is_dir($modelExtPath ) and filemtime($modelExtPath) > $lastTime) return true; if(is_dir($modelHookPath) and filemtime($modelHookPath) > $lastTime) return true; if(!empty($modelExtPaths['site'])) { - $modelExtPath = $modelExtPaths['site']; + $modelExtPath = $modelExtPaths['site']; $modelHookPath = $modelExtPaths['site'] . 'hook/'; if(is_dir($modelExtPath ) and filemtime($modelExtPath) > $lastTime) return true; if(is_dir($modelHookPath) and filemtime($modelHookPath) > $lastTime) return true; @@ -1470,11 +1470,11 @@ class baseRouter /** * 将model的扩展文件合并在一起。Merge model ext files. - * - * @param string $moduleName - * @param string $mainModelFile - * @param array $extFiles - * @param string $mergedModelDir + * + * @param string $moduleName + * @param string $mainModelFile + * @param array $extFiles + * @param string $mergedModelDir * @access public * @return void */ @@ -1501,18 +1501,18 @@ class baseRouter /* 生成一个临时的model扩展文件,并加载,用于后续的hook文件加载使用。Create a tmp merged model file and import it for merge hook codes using. */ $tmpModelFile = $mergedModelDir . "tmp$moduleName.php"; - if(@file_put_contents($tmpModelFile, $modelLines)) + if(@file_put_contents($tmpModelFile, $modelLines)) { if(!class_exists($tmpModelClass)) include $tmpModelFile; return $modelLines; } - + $this->triggerError("ERROR: $tmpModelFile not writable.", __FILE__, __LINE__, true); } /** * 合并model的hook脚本。Merge hook files for a model. - * + * * @access public * @return void */ @@ -1557,7 +1557,7 @@ class baseRouter if($definedFile == $tmpModelFile) $modelLines = str_replace($oldCodes, $newCodes, $modelLines); if($definedFile != $tmpModelFile) $modelLines = str_replace($replaceMark, $newCodes . "\n$replaceMark", $modelLines); } - + /* 保存最终的Model文件。Save the last merged model file. */ $modelLines = str_replace($tmpModelClass, $extModelClass, $modelLines); file_put_contents($mergedModelFile, $modelLines); @@ -1565,9 +1565,9 @@ class baseRouter } /** - * Remove tags of PHP - * - * @param string $fileName + * Remove tags of PHP + * + * @param string $fileName * @static * @access public * @return string @@ -1581,7 +1581,7 @@ class baseRouter } //-------------------- 路由相关方法(Routing related methods) --------------------// - + /** * 设置路由(PATH_INFO 方式): * 1.设置模块名; @@ -1609,7 +1609,7 @@ class baseRouter $items = explode($this->config->requestFix, $this->URI); $this->setModuleName($items[0]); $this->setMethodName($items[1]); - } + } /* * 如果网址中没有分隔符,使用默认的方法。 * No reqeust seperator, use the default method name. @@ -1621,7 +1621,7 @@ class baseRouter } } else - { + { $this->setModuleName($this->config->default->module); // 使用默认模块 use the default module. $this->setMethodName($this->config->default->method); // 使用默认方法 use the default method. } @@ -1663,7 +1663,7 @@ class baseRouter * 2. create the control object. * 3. set the params passed in through url. * 4. call the method by call_user_function_array - * + * * @access public * @return bool|object if the module object of die. */ @@ -1673,7 +1673,7 @@ class baseRouter $moduleName = $this->moduleName; $methodName = $this->methodName; - /* + /* * 引入该模块的control文件。 * Include the control file of the module. **/ @@ -1700,9 +1700,9 @@ class baseRouter $defaultValueFiles = glob($this->getTmpRoot() . "defaultvalue/*.php"); if($defaultValueFiles) foreach($defaultValueFiles as $file) include $file; - /* + /* * 使用反射机制获取函数参数的默认值。 - * Get the default settings of the method to be called using the reflecting. + * Get the default settings of the method to be called using the reflecting. * * */ $defaultParams = array(); @@ -1728,7 +1728,7 @@ class baseRouter $defaultParams[$name] = $default; } - /** + /** * 根据PATH_INFO或者GET方式设置请求的参数。 * Set params according PATH_INFO or GET. */ @@ -1755,7 +1755,7 @@ class baseRouter /** * 设置请求的参数(PATH_INFO 方式)。 * Set the params by PATH_INFO. - * + * * @param array $defaultParams the default settings of the params. * @param string $type * @access public @@ -1770,7 +1770,7 @@ class baseRouter $items = explode($this->config->requestFix, $this->URI); $itemCount = count($items); - /** + /** * 前两项为模块名和方法名,参数从下标2开始。 * The first two item is moduleName and methodName. So the params should begin at 2. **/ @@ -1790,7 +1790,7 @@ class baseRouter /** * 设置请求的参数(GET 方式)。 * Set the params by GET. - * + * * @param array $defaultParams the default settings of the params. * @param string $type * @access public @@ -1869,7 +1869,7 @@ class baseRouter /** * 获取$moduleName变量。 * Get the $moduleName var. - * + * * @access public * @return string */ @@ -1881,7 +1881,7 @@ class baseRouter /** * 获取$controlFile变量。 * Get the $controlFile var. - * + * * @access public * @return string */ @@ -1893,7 +1893,7 @@ class baseRouter /** * 获取$methodName变量。 * Get the $methodName var. - * + * * @access public * @return string */ @@ -1905,7 +1905,7 @@ class baseRouter /** * 获取$param变量。 * Get the $param var. - * + * * @access public * @return string */ @@ -1949,7 +1949,7 @@ class baseRouter /** * 加载整个应用公共的配置文件。 * Load the common config files for the app. - * + * * @access public * @return void */ @@ -1969,7 +1969,7 @@ class baseRouter /** * 当multiSite功能打开的时候,加载额外的配置文件。 * When multiSite feature enabled, load extra config file. - * + * * @access public * @return void */ @@ -2038,9 +2038,9 @@ class baseRouter /** * Merge db config. - * - * @param array $dbConfig - * @param string $moduleName + * + * @param array $dbConfig + * @param string $moduleName * @access public * @return void */ @@ -2074,7 +2074,7 @@ class baseRouter /** * 向客户端输出配置参数,客户端可以根据这些参数实现和调整请求的逻辑。 * Export the config params to the client, thus the client can adjust it's logic according the config. - * + * * @access public * @return void */ @@ -2102,7 +2102,7 @@ class baseRouter /** * 加载语言文件,返回全局$lang对象。 * Load lang and return it as the global lang object. - * + * * @param string $moduleName the module name * @param string $appName the app name * @access public @@ -2155,7 +2155,7 @@ class baseRouter /** * 连接数据库。 * Connect to database. - * + * * @access public * @return void */ @@ -2171,7 +2171,7 @@ class baseRouter /** * 使用PDO连接数据库。 * Connect database by PDO. - * + * * @param object $params the database params. * @access public * @return object|bool @@ -2183,8 +2183,8 @@ class baseRouter if($params->driver == 'mysql') { $dsn = "mysql:host={$params->host}; port={$params->port}; dbname={$params->name}"; - } - try + } + try { $dbPassword = helper::decryptPassword($params->password); @@ -2224,7 +2224,7 @@ class baseRouter /** * 程序停止时执行的函数。 * The shutdown handler. - * + * * @access public * @return void */ @@ -2233,7 +2233,7 @@ class baseRouter /* 如果debug模式开启,保存sql语句(If debug on, save sql queries) */ if(!empty($this->config->debug)) $this->saveSQL(); - /* + /* * 发现错误,保存到日志中。 * If any error occers, save it. * */ @@ -2245,7 +2245,7 @@ class baseRouter /** * 触发一个错误。 * Trigger an error. - * + * * @param string $message 错误信息 error message * @param string $file 所在文件 the file error occers * @param int $line 错误行 the line error occers @@ -2263,7 +2263,7 @@ class baseRouter if(!$this->config->debug) die(); $log = "ERROR: $message in $file on line $line"; - if(isset($_SERVER['SCRIPT_URI'])) $log .= ", request: $_SERVER[SCRIPT_URI]";; + if(isset($_SERVER['SCRIPT_URI'])) $log .= ", request: $_SERVER[SCRIPT_URI]";; $trace = debug_backtrace(); extract($trace[0]); extract($trace[1]); @@ -2276,11 +2276,11 @@ class baseRouter /** * 保存错误信息。 * Save error info. - * - * @param int $level - * @param string $message - * @param string $file - * @param int $line + * + * @param int $level + * @param string $message + * @param string $file + * @param int $line * @access public * @return void */ @@ -2304,13 +2304,13 @@ class baseRouter } } - /* + /* * 忽略该错误:Redefining already defined constructor。 * Skip the error: Redefining already defined constructor. **/ if(strpos($message, 'Redefining') !== false) return true; - /* + /* * 设置错误信息。 * Set the error info. **/ @@ -2318,7 +2318,7 @@ class baseRouter $errorLog = "\n" . date('H:i:s') . " $message in $file on line $line "; $errorLog .= "when visiting " . htmlspecialchars($this->getURI()) . "\n"; - /* + /* * 为了安全起见,对公网环境隐藏脚本路径。 * If the ip is pulic, hidden the full path of scripts. */ @@ -2335,7 +2335,7 @@ class baseRouter $fh = fopen($errorFile, 'a'); if($fh) fwrite($fh, strip_tags($errorLog)) and fclose($fh); - /* + /* * 如果debug > 1,显示warning, notice级别的错误。 * If the debug > 1, show warning, notice error. **/ @@ -2350,7 +2350,7 @@ class baseRouter } } - /* + /* * 如果是严重错误,停止程序。 * If error level is serious, die. * */ @@ -2368,7 +2368,7 @@ class baseRouter /** * 保存sql语句。 * Save the sql. - * + * * @access public * @return void */ @@ -2392,18 +2392,18 @@ class baseRouter /** * config类。 * The config class. - * + * * @package framework */ class config -{ +{ /** * 设置成员变量,成员可以是'db.user'类似的格式。 * Set the value of a member. the member can be the format like db.user. - * + * * * set('db.user', 'wwccss'); + * $config->set('db.user', 'wwccss'); * ?> * * @param string $key the key of the member @@ -2420,22 +2420,22 @@ class config /** * lang类。 * The lang class. - * + * * @package framework */ -class language +class language { /** * 设置成员变量,成员可以是'db.user'类似的格式。 * Set the value of a member. the member can be the foramt like db.user. - * + * * * set('version', '1.0); + * $lang->set('version', '1.0); * ?> * * @param string $key 成员的键名,可以是father.child的形式。 - * the key of the member, can be father.child + * the key of the member, can be father.child * @param mixed $value the value * @access public * @return void @@ -2447,8 +2447,8 @@ class language /** * 显示一个成员的值。 - * Show a member. - * + * Show a member. + * * @param object $obj the object * @param string $key the key * @access public @@ -2464,7 +2464,7 @@ class language /** * 超级对象类,转化超级全局变量。 * The super object class. - * + * * @package framework */ class super @@ -2472,7 +2472,7 @@ class super /** * 构造函数,设置超级变量名。 * Construct, set the var scope. - * + * * @param string $scope the scope, can be server, post, get, cookie, session, global * @access public * @return void @@ -2484,8 +2484,8 @@ class super /** * 设置超级变量的成员值。 - * Set one member value. - * + * Set one member value. + * * @param string the key * @param mixed $value the value * @access public @@ -2526,7 +2526,7 @@ class super /** * 超级变量的魔术方法,比如用$post->key访问$_POST['key']。 * The magic get method. - * + * * @param string $key the key * @access public * @return mixed|bool return the value of the key or false. @@ -2580,7 +2580,7 @@ class super /** * 打印变量的详细结构。 * Print the structure. - * + * * @access public * @return void */ diff --git a/module/common/model.php b/module/common/model.php index fb9d4e769d..2fe896a978 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -392,7 +392,7 @@ class commonModel extends model { if($group == 'program') { - $link = helper::createLink($menuItem->link['module'], $menuItem->link['method'], $vars, '', '', $app->session->PRJ); + $link = helper::createLink($menuItem->link['module'], $menuItem->link['method'], $vars, '', '', $app->session->project); } elseif($group == 'product' && $menuItem->name == 'doc') { @@ -472,7 +472,7 @@ class commonModel extends model if(isset($lang->$model->subMenu->$key)) { $programSubMenu = $lang->$model->subMenu->$key; - $subMenu = common::createSubMenu($programSubMenu, $app->session->PRJ); + $subMenu = common::createSubMenu($programSubMenu, $app->session->project); if(!empty($subMenu)) { @@ -592,6 +592,7 @@ class commonModel extends model $item = new stdClass(); $item->group = $group; + $item->code = $group; $item->active = zget($lang->navGroup, $moduleName, '') == $group || $moduleName != 'program' && $moduleName == $group; $item->title = $title; $item->moduleName = $currentModule; @@ -747,9 +748,8 @@ class commonModel extends model foreach ($lang->searchObjects as $key => $value) { $class = $key == $searchObject ? "class='selected'" : ''; - if($key == 'program') $key = 'program-pgmproduct'; - if($key == 'project') $key = 'program-index'; - if($key == 'execution') $key = 'project-view'; + if($key == 'program') $key = 'program-product'; + if($key == 'project') $key = 'project-index'; if($key == 'deploystep') $key = 'deploy-viewstep'; echo "
  • {$value}
  • "; @@ -1057,7 +1057,7 @@ class commonModel extends model { /* Add data-group attribute. */ global $app; - if(strpos($misc, 'data-group') === false) $misc .= ' data-group="' . $app->openGroup . '"'; + if(strpos($misc, 'data-group') === false) $misc .= ' data-group="' . $app->openApp . '"'; if(!commonModel::hasPriv($module, $method, $object)) return false; echo html::a(helper::createLink($module, $method, $vars, '', $onlyBody), $label, $target, $misc, $newline); @@ -1151,7 +1151,7 @@ EOD; global $app, $lang, $config; /* Add data-group attribute. */ - if(strpos($misc, 'data-group') === false) $misc .= ' data-group="' . $app->openGroup . '"'; + if(strpos($misc, 'data-group') === false) $misc .= ' data-group="' . $app->openApp . '"'; /* Judge the $method of $module clickable or not, default is clickable. */ $clickable = true; @@ -1169,7 +1169,7 @@ EOD; if(strtolower($module) == 'story' and strtolower($method) == 'createcase') ($module = 'testcase') and ($method = 'create'); if(strtolower($module) == 'bug' and strtolower($method) == 'tostory') ($module = 'story') and ($method = 'create'); if(strtolower($module) == 'bug' and strtolower($method) == 'createcase') ($module = 'testcase') and ($method = 'create'); - if($config->systemMode == 'classic' and strtolower($module) == 'program' and strpos($method, 'PRJ') === 0) ($module = 'project') and ($method = substr(strtolower($method), 3)); + if($config->systemMode == 'classic' and strtolower($module) == 'project') $method = substr(strtolower($method), 3); if(!commonModel::hasPriv($module, $method, $object)) return false; $link = helper::createLink($module, $method, $vars, '', $onlyBody, $programID); @@ -1727,7 +1727,7 @@ EOD; if(!defined('IN_UPGRADE') and $inProject) { /* Check program priv. */ - if($this->session->PRJ and strpos(",{$this->app->user->view->projects},", ",{$this->session->PRJ},") === false and !$this->app->user->admin) $this->loadModel('program')->accessDenied(); + if($this->session->project and strpos(",{$this->app->user->view->projects},", ",{$this->session->project},") === false and !$this->app->user->admin) $this->loadModel('program')->accessDenied(); $this->resetProgramPriv($module, $method); if(!commonModel::hasPriv($module, $method)) $this->deny($module, $method, false); } @@ -1768,7 +1768,7 @@ EOD; /* If is the program admin, have all program privs. */ $inProject = isset($lang->navGroup->$module) && $lang->navGroup->$module == 'project'; if($module == 'program' && strpos($method, 'prj') !== false) $inProject = true; - if($inProject && $app->session->PRJ && strpos(",{$app->user->rights['projects']},", ",{$app->session->PRJ},") !== false) return true; + if($inProject && $app->session->project && strpos(",{$app->user->rights['projects']},", ",{$app->session->project},") !== false) return true; /* If not super admin, check the rights. */ $rights = $app->user->rights['rights']; @@ -1808,8 +1808,8 @@ EOD; public function resetProgramPriv($module, $method) { /* Get user program priv. */ - if(!$this->app->session->PRJ) return; - $program = $this->dao->findByID($this->app->session->PRJ)->from(TABLE_PROJECT)->fetch(); + if(!$this->app->session->project) return; + $program = $this->dao->findByID($this->app->session->project)->from(TABLE_PROJECT)->fetch(); $programRights = $this->dao->select('t3.module, t3.method')->from(TABLE_GROUP)->alias('t1') ->leftJoin(TABLE_USERGROUP)->alias('t2')->on('t1.id = t2.group') ->leftJoin(TABLE_GROUPPRIV)->alias('t3')->on('t2.group=t3.group') @@ -1855,20 +1855,20 @@ EOD; if($module == 'todo' and ($method == 'create' or $method == 'batchcreate')) return true; if($module == 'effort' and ($method == 'batchcreate' or $method == 'createforobject')) return true; - /* Limited project. */ - $limitedProject = false; - if(!empty($module) && $module == 'task' && !empty($object->project) or - !empty($module) && $module == 'project' && !empty($object->id) + /* Limited execution. */ + $limitedExecution = false; + if(!empty($module) && $module == 'task' && !empty($object->execution) or + !empty($module) && $module == 'execution' && !empty($object->id) ) { $objectID = ''; - if($module == 'project' and !empty($object->id)) $objectID = $object->id; - if($module == 'task' and !empty($object->project))$objectID = $object->project; + if($module == 'execution' and !empty($object->id)) $objectID = $object->id; + if($module == 'task' and !empty($object->execution))$objectID = $object->execution; - $limitedProjects = !empty($_SESSION['limitedProjects']) ? $_SESSION['limitedProjects'] : ''; - if($objectID and strpos(",{$limitedProjects},", ",$objectID,") !== false) $limitedProject = true; + $limitedExecutions = !empty($_SESSION['limitedExecutions']) ? $_SESSION['limitedExecutions'] : ''; + if($objectID and strpos(",{$limitedExecutions},", ",$objectID,") !== false) $limitedExecution = true; } - if(empty($app->user->rights['rights']['my']['limited']) && !$limitedProject) return true; + if(empty($app->user->rights['rights']['my']['limited']) && !$limitedExecution) return true; if(!empty($method) && strpos($method, 'batch') === 0) return false; if(!empty($method) && strpos($method, 'link') === 0) return false; @@ -2176,12 +2176,12 @@ EOD; if($product->status == 'closed') return false; } - /* Check the project is closed. */ + /* Check the execution is closed. */ $productModuleList = array('story', 'bug', 'testtask'); - if(!in_array($module, $productModuleList) and !empty($object->project) and is_numeric($object->project) and empty($config->CRProject)) + if(!in_array($module, $productModuleList) and !empty($object->execution) and is_numeric($object->execution) and empty($config->CRExecution)) { - $project = $app->control->loadModel('project')->getByID($object->project); - if($project->status == 'closed') return false; + $execution = $app->control->loadModel('execution')->getByID($object->execution); + if($execution->status == 'closed') return false; } return true; @@ -2190,7 +2190,7 @@ EOD; /** * Check object can modify. * - * @param string $type product|project + * @param string $type product|Execution * @param object $object * @static * @access public @@ -2200,8 +2200,8 @@ EOD; { global $config; - if($type == 'product' and empty($config->CRProduct) and $object->status == 'closed') return false; - if($type == 'project' and empty($config->CRProject) and $object->status == 'closed') return false; + if($type == 'product' and empty($config->CRProduct) and $object->status == 'closed') return false; + if($type == 'execution' and empty($config->CRExecution) and $object->status == 'closed') return false; return true; } @@ -2381,8 +2381,8 @@ EOD; $link = is_array($setting) ? $setting['link'] : $setting; if(strpos($link, "{PRODUCT}") !== false) $link = str_replace('{PRODUCT}', $app->session->product, $link); - if(strpos($link, "{EXECUTION}") !== false) $link = str_replace('{EXECUTION}', $app->session->project, $link); - if(strpos($link, "{PROJECT}") !== false) $link = str_replace('{PROJECT}', $app->session->PRJ, $link); + if(strpos($link, "{EXECUTION}") !== false) $link = str_replace('{EXECUTION}', $app->session->execution, $link); + if(strpos($link, "{PROJECT}") !== false) $link = str_replace('{PROJECT}', $app->session->project, $link); if(is_array($setting)) { @@ -2410,7 +2410,7 @@ EOD; public static function getProgramMainMenu($moduleName) { global $app, $lang, $dbh, $config; - $program = $dbh->query("SELECT * FROM " . TABLE_PROGRAM . " WHERE `id` = '{$app->session->PRJ}'")->fetch(); + $program = $dbh->query("SELECT * FROM " . TABLE_PROGRAM . " WHERE `id` = '{$app->session->project}'")->fetch(); if(empty($program)) return; self::initProgramSubmenu(); @@ -2445,7 +2445,7 @@ EOD; public static function getProgramModuleMenu($moduleName, $methodName) { global $app, $lang, $dbh; - $program = $dbh->query("SELECT * FROM " . TABLE_PROJECT . " WHERE `id` = '{$app->session->PRJ}'")->fetch(); + $program = $dbh->query("SELECT * FROM " . TABLE_PROJECT . " WHERE `id` = '{$app->session->project}'")->fetch(); if(empty($program)) return; if($program->model == 'waterfall') { diff --git a/module/common/view/datatable.fix.html.php b/module/common/view/datatable.fix.html.php index ae9bf2b79a..95a77574d5 100644 --- a/module/common/view/datatable.fix.html.php +++ b/module/common/view/datatable.fix.html.php @@ -81,7 +81,7 @@ $(function() datatable->showModule;?> datatable->showModuleList, isset($config->datatable->$datatableId->showModule) ? $config->datatable->$datatableId->showModule : '');?> - moduleName == 'project' && $app->methodName == 'task'):?> + moduleName == 'execution' && $app->methodName == 'task'):?> datatable->showAllModule;?> datatable->showAllModuleList, isset($config->project->task->allModule) ? $config->project->task->allModule : 0);?> diff --git a/module/common/view/header.html.php b/module/common/view/header.html.php index a86181b8fd..7b1ea13f6b 100755 --- a/module/common/view/header.html.php +++ b/module/common/view/header.html.php @@ -23,7 +23,7 @@ $isQa = $rawModule == 'qa'; qa->switcherMenu) ? $lang->qa->switcherMenu : '';?> config->systemMode == 'new'):?> program->switcherMenu) ? $lang->program->switcherMenu : '';?> - loadModel('project')->getSwitcher($this->session->PRJ, $app->rawModule, $app->rawMethod);?> + loadModel('project')->getSwitcher($this->session->project, $app->rawModule, $app->rawMethod);?> config->systemMode == 'classic'):?> project->switcherMenu) ? $lang->project->switcherMenu : '';;?> diff --git a/module/datatable/config.php b/module/datatable/config.php index f5c03eb4d1..1976270a91 100644 --- a/module/datatable/config.php +++ b/module/datatable/config.php @@ -1,4 +1,4 @@ datatable->moduleAlias['product-browse'] = 'story'; -$config->datatable->moduleAlias['project-task'] = 'task'; +$config->datatable->moduleAlias['execution-task'] = 'task'; $config->datatable->moduleAlias['testtask-cases'] = 'testcase'; diff --git a/module/datatable/control.php b/module/datatable/control.php index 79990a1b6e..4c2b53230b 100644 --- a/module/datatable/control.php +++ b/module/datatable/control.php @@ -37,7 +37,7 @@ class datatable extends control $name = 'datatable.' . $this->post->target . '.' . $this->post->name; $this->loadModel('setting')->setItem($account . '.' . $name, $this->post->value); - if($this->post->allModule !== false) $this->setting->setItem("$account.project.task.allModule", $this->post->allModule); + if($this->post->allModule !== false) $this->setting->setItem("$account.execution.task.allModule", $this->post->allModule); if($this->post->global) $this->setting->setItem('system.' . $name, $this->post->value); if(dao::isError()) $this->send(array('result' => 'fail', 'message' => 'dao error.')); diff --git a/module/dev/config.php b/module/dev/config.php index 2c9542c753..5104fef090 100644 --- a/module/dev/config.php +++ b/module/dev/config.php @@ -12,11 +12,12 @@ $config->dev->group['release'] = 'product'; $config->dev->group['project'] = 'project'; $config->dev->group['projectproduct'] = 'project'; $config->dev->group['projectstory'] = 'project'; -$config->dev->group['task'] = 'project'; -$config->dev->group['taskestimate'] = 'project'; -$config->dev->group['team'] = 'project'; -$config->dev->group['build'] = 'project'; -$config->dev->group['burn'] = 'project'; +$config->dev->group['execution'] = 'execution'; +$config->dev->group['task'] = 'execution'; +$config->dev->group['taskestimate'] = 'execution'; +$config->dev->group['team'] = 'execution'; +$config->dev->group['build'] = 'execution'; +$config->dev->group['burn'] = 'execution'; $config->dev->group['qa'] = 'qa'; $config->dev->group['bug'] = 'qa'; $config->dev->group['case'] = 'qa'; @@ -92,7 +93,7 @@ $config->dev->tableMap['burn'] = 'task'; $config->dev->tableMap['projectproduct'] = 'project'; $config->dev->tableMap['projectstory'] = 'story'; $config->dev->tableMap['taskestimate'] = 'task'; -$config->dev->tableMap['team'] = 'project'; +$config->dev->tableMap['team'] = 'execution'; $config->dev->tableMap['case'] = 'testcase'; $config->dev->tableMap['casestep'] = 'testcase'; $config->dev->tableMap['testresult'] = 'testtask'; @@ -135,7 +136,7 @@ $config->dev->postParams['bug']['create']['title'] = 'string'; $config->dev->postParams['bug']['create']['openedBuild'] = 'int|trunk'; $config->dev->postParams['bug']['create']['branch'] = 'int'; $config->dev->postParams['bug']['create']['module'] = 'int'; -$config->dev->postParams['bug']['create']['project'] = 'int'; +$config->dev->postParams['bug']['create']['execution'] = 'int'; $config->dev->postParams['bug']['create']['assignedTo'] = 'string'; $config->dev->postParams['bug']['create']['deadline'] = 'date'; $config->dev->postParams['bug']['create']['type'] = 'string'; @@ -148,7 +149,7 @@ $config->dev->postParams['bug']['create']['steps'] = 'string'; $config->dev->postParams['bug']['create']['mailto'] = 'string'; $config->dev->postParams['bug']['create']['keywords'] = 'string'; -$config->dev->postParams['task']['create']['project'] = 'int'; +$config->dev->postParams['task']['create']['execution'] = 'int'; $config->dev->postParams['task']['create']['type'] = 'string'; $config->dev->postParams['task']['create']['name'] = 'string'; $config->dev->postParams['task']['create']['module'] = 'int'; diff --git a/module/dev/lang/de.php b/module/dev/lang/de.php index 922d093623..ab4bf81815 100644 --- a/module/dev/lang/de.php +++ b/module/dev/lang/de.php @@ -50,9 +50,10 @@ $lang->dev->tableList['lang'] = 'Sprache'; $lang->dev->tableList['module'] = 'Modul'; $lang->dev->tableList['product'] = $lang->productCommon; $lang->dev->tableList['productplan'] = $lang->productCommon . 'Plan'; -$lang->dev->tableList['project'] = $lang->executionCommon; -$lang->dev->tableList['projectproduct'] = $lang->executionCommon . $lang->productCommon; -$lang->dev->tableList['projectstory'] = $lang->executionCommon . 'Story'; +$lang->dev->tableList['project'] = $lang->projectCommon; +$lang->dev->tableList['projectproduct'] = $lang->projectCommon . $lang->productCommon; +$lang->dev->tableList['projectstory'] = $lang->projectCommon . 'Story'; +$lang->dev->tableList['execution'] = $lang->executionCommon; $lang->dev->tableList['release'] = 'Release'; $lang->dev->tableList['story'] = 'Story'; $lang->dev->tableList['storyspec'] = 'Beschreibung'; @@ -117,17 +118,19 @@ $lang->dev->tableList['job'] = 'Job'; $lang->dev->tableList['searchdict'] = 'Search dict'; $lang->dev->tableList['searchindex'] = 'Search index'; -$lang->dev->groupList['my'] = 'Dashboard'; -$lang->dev->groupList['product'] = $lang->productCommon; -$lang->dev->groupList['project'] = $lang->executionCommon; -$lang->dev->groupList['qa'] = 'QA'; -$lang->dev->groupList['doc'] = 'Dok'; -$lang->dev->groupList['report'] = 'Report'; -$lang->dev->groupList['company'] = 'Unternehmen'; -$lang->dev->groupList['repo'] = 'CI'; -$lang->dev->groupList['api'] = 'API'; -$lang->dev->groupList['message'] = 'Message'; -$lang->dev->groupList['search'] = 'Search'; +$lang->dev->groupList['my'] = 'Dashboard'; +$lang->dev->groupList['program'] = 'Program'; +$lang->dev->groupList['product'] = $lang->productCommon; +$lang->dev->groupList['project'] = $lang->projectCommon; +$lang->dev->groupList['execution'] = $lang->executionCommon; +$lang->dev->groupList['qa'] = 'QA'; +$lang->dev->groupList['doc'] = 'Dok'; +$lang->dev->groupList['report'] = 'Report'; +$lang->dev->groupList['company'] = 'Unternehmen'; +$lang->dev->groupList['repo'] = 'CI'; +$lang->dev->groupList['api'] = 'API'; +$lang->dev->groupList['message'] = 'Message'; +$lang->dev->groupList['search'] = 'Search'; $lang->dev->endGroupList['admin'] = 'Admin'; $lang->dev->endGroupList['system'] = 'System'; diff --git a/module/dev/lang/en.php b/module/dev/lang/en.php index 722fde1814..c3a79fc0b3 100644 --- a/module/dev/lang/en.php +++ b/module/dev/lang/en.php @@ -50,9 +50,10 @@ $lang->dev->tableList['lang'] = 'Language'; $lang->dev->tableList['module'] = 'Module'; $lang->dev->tableList['product'] = $lang->productCommon; $lang->dev->tableList['productplan'] = $lang->productCommon . 'Plan'; -$lang->dev->tableList['project'] = $lang->executionCommon; -$lang->dev->tableList['projectproduct'] = $lang->executionCommon . $lang->productCommon; -$lang->dev->tableList['projectstory'] = $lang->executionCommon . 'Story'; +$lang->dev->tableList['project'] = $lang->projectCommon; +$lang->dev->tableList['projectproduct'] = $lang->projectCommon . $lang->productCommon; +$lang->dev->tableList['projectstory'] = $lang->projectCommon . 'Story'; +$lang->dev->tableList['execution'] = $lang->executionCommon; $lang->dev->tableList['release'] = 'Release'; $lang->dev->tableList['story'] = 'Story'; $lang->dev->tableList['storyspec'] = 'Story Description'; @@ -117,17 +118,19 @@ $lang->dev->tableList['job'] = 'Job'; $lang->dev->tableList['searchdict'] = 'Search dict'; $lang->dev->tableList['searchindex'] = 'Search index'; -$lang->dev->groupList['my'] = 'Dashboard'; -$lang->dev->groupList['product'] = $lang->productCommon; -$lang->dev->groupList['project'] = $lang->executionCommon; -$lang->dev->groupList['qa'] = 'Test'; -$lang->dev->groupList['doc'] = 'Doc'; -$lang->dev->groupList['report'] = 'Report'; -$lang->dev->groupList['company'] = 'Company'; -$lang->dev->groupList['repo'] = 'CI'; -$lang->dev->groupList['api'] = 'API'; -$lang->dev->groupList['message'] = 'Message'; -$lang->dev->groupList['search'] = 'Search'; +$lang->dev->groupList['my'] = 'Dashboard'; +$lang->dev->groupList['program'] = 'Program'; +$lang->dev->groupList['product'] = $lang->productCommon; +$lang->dev->groupList['project'] = $lang->projectCommon; +$lang->dev->groupList['execution'] = $lang->executionCommon; +$lang->dev->groupList['qa'] = 'Test'; +$lang->dev->groupList['doc'] = 'Doc'; +$lang->dev->groupList['report'] = 'Report'; +$lang->dev->groupList['company'] = 'Company'; +$lang->dev->groupList['repo'] = 'CI'; +$lang->dev->groupList['api'] = 'API'; +$lang->dev->groupList['message'] = 'Message'; +$lang->dev->groupList['search'] = 'Search'; $lang->dev->endGroupList['admin'] = 'Admin'; $lang->dev->endGroupList['system'] = 'System'; diff --git a/module/dev/lang/fr.php b/module/dev/lang/fr.php index 4b73345dab..7ef12b2cf0 100644 --- a/module/dev/lang/fr.php +++ b/module/dev/lang/fr.php @@ -1,23 +1,23 @@ dev->common = 'Développeur'; +$lang->dev->common = 'D?veloppeur'; $lang->dev->api = 'API'; -$lang->dev->db = 'Base de Données'; +$lang->dev->db = 'Base de Donn?es'; $lang->dev->editor = 'Editeur'; $lang->dev->translate = 'Translate'; -$lang->dev->dbList = 'Bases de Données'; +$lang->dev->dbList = 'Bases de Donn?es'; $lang->dev->moduleList = 'Modules'; -$lang->dev->params = 'Paramètres'; +$lang->dev->params = 'Param?tres'; $lang->dev->type = 'Type'; $lang->dev->desc = 'Description'; -$lang->dev->noParams = 'Pas de Paramètres'; -$lang->dev->post = 'Paramètre POST'; +$lang->dev->noParams = 'Pas de Param?tres'; +$lang->dev->post = 'Param?tre POST'; -$lang->dev->paramRange = 'Rang Paramètre : %s'; +$lang->dev->paramRange = 'Rang Param?tre : %s'; $lang->dev->paramDate = 'Format Date : YY-mm-dd, e.g 2019-01-01'; $lang->dev->paramColor = 'Format Couleur : #RGB, e.g. #3da7f5'; -$lang->dev->paramMailto = "Comptes utilisateurs. Séparé par des ','."; -$lang->dev->noteEditor = "L'éditeur est désactivé pour des raisons de sécurité. Pour utiliser cette fonction, veuillez vous rendre sur le site officiel pour télécharger et installer le plugin de l'editeur."; -$lang->dev->noteTranslate = "La traduction est désactivée pour des raisons de sécurité. Pour utiliser cette fonctionnalité, veuillez vous rendre sur le site officiel pour télécharger et installer le plugin de traduction."; +$lang->dev->paramMailto = "Comptes utilisateurs. S?par? par des ','."; +$lang->dev->noteEditor = "L'?diteur est d?sactiv? pour des raisons de s?curit?. Pour utiliser cette fonction, veuillez vous rendre sur le site officiel pour t?l?charger et installer le plugin de l'editeur."; +$lang->dev->noteTranslate = "La traduction est d?sactiv?e pour des raisons de s?curit?. Pour utiliser cette fonctionnalit?, veuillez vous rendre sur le site officiel pour t?l?charger et installer le plugin de traduction."; $lang->dev->fields = array(); $lang->dev->fields['id'] = 'ID'; @@ -39,28 +39,29 @@ $lang->dev->tableList['config'] = 'Configuration'; $lang->dev->tableList['custom'] = 'Personnalisation'; $lang->dev->tableList['dept'] = 'Compartiment'; $lang->dev->tableList['doc'] = 'Document'; -$lang->dev->tableList['doclib'] = 'Bibliothèque Document'; +$lang->dev->tableList['doclib'] = 'Biblioth?que Document'; $lang->dev->tableList['effort'] = 'Effort'; $lang->dev->tableList['extension'] = 'Extension'; $lang->dev->tableList['file'] = 'Fichier'; $lang->dev->tableList['group'] = 'Groupe'; -$lang->dev->tableList['grouppriv'] = 'Privilège'; +$lang->dev->tableList['grouppriv'] = 'Privil?ge'; $lang->dev->tableList['history'] = 'Historique'; $lang->dev->tableList['lang'] = 'Langue'; $lang->dev->tableList['module'] = 'Module'; $lang->dev->tableList['product'] = $lang->productCommon; $lang->dev->tableList['productplan'] = $lang->productCommon . 'Plan'; -$lang->dev->tableList['project'] = $lang->executionCommon; -$lang->dev->tableList['projectproduct'] = $lang->executionCommon . $lang->productCommon; -$lang->dev->tableList['projectstory'] = $lang->executionCommon . 'Story'; +$lang->dev->tableList['project'] = $lang->projectCommon; +$lang->dev->tableList['projectproduct'] = $lang->projectCommon . $lang->productCommon; +$lang->dev->tableList['projectstory'] = $lang->projectCommon . 'Story'; +$lang->dev->tableList['execution'] = $lang->executionCommon; $lang->dev->tableList['release'] = 'Release'; $lang->dev->tableList['story'] = 'Story'; $lang->dev->tableList['storyspec'] = 'Description Story'; -$lang->dev->tableList['task'] = 'Tâche'; -$lang->dev->tableList['taskestimate'] = 'Estimés'; +$lang->dev->tableList['task'] = 'T?che'; +$lang->dev->tableList['taskestimate'] = 'Estim?s'; $lang->dev->tableList['team'] = 'Equipe'; -$lang->dev->tableList['testresult'] = 'Résultats Test'; -$lang->dev->tableList['testrun'] = 'Exécution Test'; +$lang->dev->tableList['testresult'] = 'R?sultats Test'; +$lang->dev->tableList['testrun'] = 'Ex?cution Test'; $lang->dev->tableList['testtask'] = 'Campagne'; $lang->dev->tableList['todo'] = 'Agenda'; $lang->dev->tableList['user'] = 'User'; @@ -73,7 +74,7 @@ $lang->dev->tableList['api'] = 'API'; $lang->dev->tableList['backup'] = 'Sauvegarde'; $lang->dev->tableList['common'] = 'Commun'; $lang->dev->tableList['convert'] = 'Convert'; -$lang->dev->tableList['dev'] = 'Dévelop'; +$lang->dev->tableList['dev'] = 'D?velop'; $lang->dev->tableList['git'] = 'GIT'; $lang->dev->tableList['index'] = 'Accueil'; $lang->dev->tableList['install'] = 'Installer'; @@ -92,7 +93,7 @@ $lang->dev->tableList['caselib'] = 'Case Library'; $lang->dev->tableList['tree'] = 'Arborescence'; $lang->dev->tableList['upgrade'] = 'Update'; $lang->dev->tableList['cron'] = 'Cron'; -$lang->dev->tableList['datatable'] = 'Tableau Données'; +$lang->dev->tableList['datatable'] = 'Tableau Donn?es'; $lang->dev->tableList['block'] = 'Bloc'; $lang->dev->tableList['branch'] = 'Branche'; $lang->dev->tableList['doccontent'] = 'Contenu Doc'; @@ -117,18 +118,20 @@ $lang->dev->tableList['job'] = 'Job'; $lang->dev->tableList['searchdict'] = 'Search dict'; $lang->dev->tableList['searchindex'] = 'Search index'; -$lang->dev->groupList['my'] = 'Dashboard'; -$lang->dev->groupList['product'] = $lang->productCommon; -$lang->dev->groupList['project'] = $lang->executionCommon; -$lang->dev->groupList['qa'] = 'QA'; -$lang->dev->groupList['doc'] = 'Doc'; -$lang->dev->groupList['report'] = 'Rapport'; -$lang->dev->groupList['company'] = 'Entreprise'; -$lang->dev->groupList['repo'] = 'CI'; -$lang->dev->groupList['api'] = 'API'; -$lang->dev->groupList['message'] = 'Message'; -$lang->dev->groupList['search'] = 'Search'; +$lang->dev->groupList['my'] = 'Dashboard'; +$lang->dev->groupList['program'] = 'Program'; +$lang->dev->groupList['product'] = $lang->productCommon; +$lang->dev->groupList['project'] = $lang->projectCommon; +$lang->dev->groupList['execution'] = $lang->executionCommon; +$lang->dev->groupList['qa'] = 'QA'; +$lang->dev->groupList['doc'] = 'Doc'; +$lang->dev->groupList['report'] = 'Rapport'; +$lang->dev->groupList['company'] = 'Entreprise'; +$lang->dev->groupList['repo'] = 'CI'; +$lang->dev->groupList['api'] = 'API'; +$lang->dev->groupList['message'] = 'Message'; +$lang->dev->groupList['search'] = 'Search'; $lang->dev->endGroupList['admin'] = 'Admin'; -$lang->dev->endGroupList['system'] = 'Système'; +$lang->dev->endGroupList['system'] = 'Syst?me'; $lang->dev->endGroupList['other'] = 'Autres'; diff --git a/module/dev/lang/vi.php b/module/dev/lang/vi.php index 0a8a6c57ec..97a7f4e87d 100644 --- a/module/dev/lang/vi.php +++ b/module/dev/lang/vi.php @@ -50,9 +50,10 @@ $lang->dev->tableList['lang'] = 'Ngôn ngữ'; $lang->dev->tableList['module'] = 'Module'; $lang->dev->tableList['product'] = $lang->productCommon; $lang->dev->tableList['productplan'] = 'Kế hoạch '.$lang->productCommon; -$lang->dev->tableList['project'] = $lang->executionCommon; -$lang->dev->tableList['projectproduct'] = $lang->executionCommon . $lang->productCommon; -$lang->dev->tableList['projectstory'] = $lang->executionCommon . 'Câu chuyện'; +$lang->dev->tableList['project'] = $lang->projectCommon; +$lang->dev->tableList['projectproduct'] = $lang->projectCommon . $lang->productCommon; +$lang->dev->tableList['projectstory'] = $lang->projectCommon . 'Câu chuyện'; +$lang->dev->tableList['execution'] = $lang->executionCommon; $lang->dev->tableList['release'] = 'Phát hành'; $lang->dev->tableList['story'] = 'Câu chuyện'; $lang->dev->tableList['storyspec'] = 'Mô tả câu chuyện'; @@ -117,17 +118,19 @@ $lang->dev->tableList['job'] = 'Job'; $lang->dev->tableList['searchdict'] = 'Search dict'; $lang->dev->tableList['searchindex'] = 'Search index'; -$lang->dev->groupList['my'] = 'Dashboard'; -$lang->dev->groupList['product'] = $lang->productCommon; -$lang->dev->groupList['project'] = $lang->executionCommon; -$lang->dev->groupList['qa'] = 'QA'; -$lang->dev->groupList['doc'] = 'Tài liệu'; -$lang->dev->groupList['report'] = 'Báo cáo'; -$lang->dev->groupList['company'] = 'Doanh nghiệp'; -$lang->dev->groupList['repo'] = 'CI'; -$lang->dev->groupList['api'] = 'API'; -$lang->dev->groupList['message'] = 'Tin nhắn'; -$lang->dev->groupList['search'] = 'Tìm kiếm'; +$lang->dev->groupList['my'] = 'Dashboard'; +$lang->dev->groupList['program'] = 'Program'; +$lang->dev->groupList['product'] = $lang->productCommon; +$lang->dev->groupList['project'] = $lang->projectCommon; +$lang->dev->groupList['execution'] = $lang->executionCommon; +$lang->dev->groupList['qa'] = 'QA'; +$lang->dev->groupList['doc'] = 'Tài liệu'; +$lang->dev->groupList['report'] = 'Báo cáo'; +$lang->dev->groupList['company'] = 'Doanh nghiệp'; +$lang->dev->groupList['repo'] = 'CI'; +$lang->dev->groupList['api'] = 'API'; +$lang->dev->groupList['message'] = 'Tin nhắn'; +$lang->dev->groupList['search'] = 'Tìm kiếm'; $lang->dev->endGroupList['admin'] = 'Quản trị'; $lang->dev->endGroupList['system'] = 'Hệ thống'; diff --git a/module/dev/lang/zh-cn.php b/module/dev/lang/zh-cn.php index 8fdd54a075..316fc87cec 100644 --- a/module/dev/lang/zh-cn.php +++ b/module/dev/lang/zh-cn.php @@ -50,9 +50,10 @@ $lang->dev->tableList['lang'] = '语言定义'; $lang->dev->tableList['module'] = '模块'; $lang->dev->tableList['product'] = $lang->productCommon; $lang->dev->tableList['productplan'] = $lang->productCommon . '计划'; -$lang->dev->tableList['project'] = $lang->executionCommon; -$lang->dev->tableList['projectproduct'] = $lang->executionCommon . $lang->productCommon; -$lang->dev->tableList['projectstory'] = $lang->executionCommon . $lang->SRCommon; +$lang->dev->tableList['project'] = $lang->projectCommon; +$lang->dev->tableList['projectproduct'] = $lang->projectCommon . $lang->productCommon; +$lang->dev->tableList['projectstory'] = $lang->projectCommon . $lang->SRCommon; +$lang->dev->tableList['execution'] = $lang->executionCommon; $lang->dev->tableList['release'] = '发布'; $lang->dev->tableList['story'] = $lang->SRCommon; $lang->dev->tableList['storyspec'] = "{$lang->SRCommon}描述"; @@ -117,17 +118,19 @@ $lang->dev->tableList['job'] = '构建任务'; $lang->dev->tableList['searchdict'] = '搜索字典'; $lang->dev->tableList['searchindex'] = '搜索索引'; -$lang->dev->groupList['my'] = '我的地盘'; -$lang->dev->groupList['product'] = $lang->productCommon; -$lang->dev->groupList['project'] = $lang->executionCommon; -$lang->dev->groupList['qa'] = '测试'; -$lang->dev->groupList['doc'] = '文档'; -$lang->dev->groupList['report'] = '统计'; -$lang->dev->groupList['company'] = '组织'; -$lang->dev->groupList['repo'] = '持续集成'; -$lang->dev->groupList['api'] = 'API'; -$lang->dev->groupList['message'] = '消息'; -$lang->dev->groupList['search'] = '搜索'; +$lang->dev->groupList['my'] = '我的地盘'; +$lang->dev->groupList['program'] = '项目集'; +$lang->dev->groupList['product'] = $lang->productCommon; +$lang->dev->groupList['project'] = $lang->projectCommon; +$lang->dev->groupList['execution'] = $lang->executionCommon; +$lang->dev->groupList['qa'] = '测试'; +$lang->dev->groupList['doc'] = '文档'; +$lang->dev->groupList['report'] = '统计'; +$lang->dev->groupList['company'] = '组织'; +$lang->dev->groupList['repo'] = '持续集成'; +$lang->dev->groupList['api'] = 'API'; +$lang->dev->groupList['message'] = '消息'; +$lang->dev->groupList['search'] = '搜索'; $lang->dev->endGroupList['admin'] = '后台'; $lang->dev->endGroupList['system'] = '系统'; diff --git a/module/group/control.php b/module/group/control.php index 3059ff31cc..13e1ce479b 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -13,7 +13,7 @@ class group extends control { /** * Construct function. - * + * * @access public * @return void */ @@ -26,7 +26,7 @@ class group extends control /** * Browse groups. - * + * * @access public * @return void */ @@ -49,7 +49,7 @@ class group extends control /** * Create a group. - * + * * @access public * @return void */ @@ -70,8 +70,8 @@ class group extends control /** * Edit a group. - * - * @param int $groupID + * + * @param int $groupID * @access public * @return void */ @@ -86,6 +86,7 @@ class group extends control $title = $this->lang->company->orgView . $this->lang->colon . $this->lang->group->edit; $position[] = $this->lang->group->edit; + $this->view->title = $title; $this->view->position = $position; $this->view->group = $this->group->getById($groupID); @@ -95,8 +96,8 @@ class group extends control /** * Copy a group. - * - * @param int $groupID + * + * @param int $groupID * @access public * @return void */ @@ -141,7 +142,7 @@ class group extends control $this->view->position[] = $this->lang->group->manageView; $this->view->group = $group; - $this->view->programs = $this->dao->select('*')->from(TABLE_PROJECT)->where('deleted')->eq('0')->andWhere('type')->eq('program')->orderBy('order_desc')->fetchPairs('id', 'name'); + $this->view->programs = $this->dao->select('*')->from(TABLE_PROGRAM)->where('deleted')->eq('0')->andWhere('type')->eq('program')->orderBy('order_desc')->fetchPairs('id', 'name'); $this->view->projects = $this->dao->select('*')->from(TABLE_PROJECT)->where('deleted')->eq('0')->andWhere('type')->eq('project')->orderBy('order_desc')->fetchPairs('id', 'name'); $this->view->products = $this->dao->select('*')->from(TABLE_PRODUCT)->where('deleted')->eq('0')->orderBy('order_desc')->fetchPairs('id', 'name'); @@ -185,7 +186,7 @@ class group extends control if($this->config->systemMode == 'classic') { - if(isset($groupPrivs['program']['prjbrowse'])) + if(isset($groupPrivs['project']['browse'])) { $groupPrivs['project']['list'] = 'list'; } @@ -233,8 +234,8 @@ class group extends control /** * Manage members of a group. - * - * @param int $groupID + * + * @param int $groupID * @param int $deptID * @access public * @return void @@ -268,18 +269,18 @@ class group extends control /** * Manage members of a group. - * - * @param int $groupID + * + * @param int $groupID * @param int $deptID * @access public * @return void */ - public function managePRJAdmin($groupID, $deptID = 0) + public function manageProjectAdmin($groupID, $deptID = 0) { if(!empty($_POST)) { - $this->group->updatePRJAdmin($groupID); - die(js::locate(inlink('managePRJAdmin', "group=$groupID"), 'parent')); + $this->group->updateProjectAdmin($groupID); + die(js::locate(inlink('manageProjectAdmin', "group=$groupID"), 'parent')); } $group = $this->group->getById($groupID); $groupUsers = $this->group->getUserPairs($groupID); @@ -295,7 +296,7 @@ class group extends control $this->view->allUsers = $allUsers; $this->view->group = $group; $this->view->programs = $this->dao->select('id, name')->from(TABLE_PROJECT)->where('type')->eq('project')->andWhere('deleted')->eq(0)->fetchPairs(); - $this->view->deptTree = $this->loadModel('dept')->getTreeMenu($rooteDeptID = 0, array('deptModel', 'createManagePRJAdminLink'), $groupID); + $this->view->deptTree = $this->loadModel('dept')->getTreeMenu($rooteDeptID = 0, array('deptModel', 'createManageProjectAdminLink'), $groupID); $this->view->groupUsers = $groupUsers; $this->view->userPrograms = $userPrograms; @@ -304,8 +305,8 @@ class group extends control /** * Delete a group. - * - * @param int $groupID + * + * @param int $groupID * @param string $confirm yes|no * @access public * @return void diff --git a/module/group/lang/de.php b/module/group/lang/de.php index 0029e00152..c409ea8634 100644 --- a/module/group/lang/de.php +++ b/module/group/lang/de.php @@ -21,7 +21,7 @@ $lang->group->managePrivByGroup = 'Rechte'; $lang->group->managePrivByModule = 'Modul Rechte'; $lang->group->byModuleTips = '(SHIFT/STRG für Multi-Select)'; $lang->group->manageMember = 'Mitglieder'; -$lang->group->managePRJAdmin = 'Manage Program Admins'; +$lang->group->manageProjectAdmin = 'Manage Program Admins'; $lang->group->confirmDelete = 'Möchten Sie die Gruppe löschen?'; $lang->group->successSaved = 'Gespeichert!'; $lang->group->errorNotSaved = 'Fehlgeschlagen. Bitte aktion und Gruppe wählen.'; diff --git a/module/group/lang/en.php b/module/group/lang/en.php index 9a19ce3041..59007182f7 100644 --- a/module/group/lang/en.php +++ b/module/group/lang/en.php @@ -21,7 +21,7 @@ $lang->group->managePrivByGroup = 'Manage Privileges by Group'; $lang->group->managePrivByModule = 'Manage Privileges by Module'; $lang->group->byModuleTips = '(Press Shift/Ctrl to Multi-select)'; $lang->group->manageMember = 'Manage Members'; -$lang->group->managePRJAdmin = 'Manage Program Admins'; +$lang->group->manageProjectAdmin = 'Manage Program Admins'; $lang->group->confirmDelete = 'Do you want to delete this user group?'; $lang->group->successSaved = 'Saved.'; $lang->group->errorNotSaved = 'Failed. Please select actions and groups.'; diff --git a/module/group/lang/fr.php b/module/group/lang/fr.php index b533116b2a..778ec86411 100644 --- a/module/group/lang/fr.php +++ b/module/group/lang/fr.php @@ -21,7 +21,7 @@ $lang->group->managePrivByGroup = 'Gérer Privilèges par Groupe'; $lang->group->managePrivByModule = 'Gérer Privilèges par Module'; $lang->group->byModuleTips = '(Shift/Ctrl pour sélection multiple)'; $lang->group->manageMember = 'Gérer Membres'; -$lang->group->managePRJAdmin = 'Manage Program Admins'; +$lang->group->manageProjectAdmin = 'Manage Program Admins'; $lang->group->confirmDelete = "Voulez-vous supprimer ce groupe d'utilisateurs ?"; $lang->group->successSaved = 'Sauvé.'; $lang->group->errorNotSaved = 'Echec. Veuillez sélectionner actions et groupes.'; diff --git a/module/group/lang/vi.php b/module/group/lang/vi.php index a7cf9d41db..f6fb87f221 100644 --- a/module/group/lang/vi.php +++ b/module/group/lang/vi.php @@ -21,7 +21,7 @@ $lang->group->managePrivByGroup = 'Quản lý Privileges by Group'; $lang->group->managePrivByModule = 'Quản lý Privileges by Module'; $lang->group->byModuleTips = '(Press Shift/Ctrl to Multi-select)'; $lang->group->manageMember = 'Quản lý Members'; -$lang->group->managePRJAdmin = 'Manage Program Admins'; +$lang->group->manageProjectAdmin = 'Manage Program Admins'; $lang->group->confirmDelete = 'Bạn có muốn xóa người dùng này group?'; $lang->group->successSaved = 'Đã lưu.'; $lang->group->errorNotSaved = 'Thất bại. Vui lòng select actions and groups.'; diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php index e3cbc70c92..17c8462223 100644 --- a/module/group/lang/zh-cn.php +++ b/module/group/lang/zh-cn.php @@ -21,7 +21,7 @@ $lang->group->managePrivByGroup = '权限维护'; $lang->group->managePrivByModule = '按模块分配权限'; $lang->group->byModuleTips = '(可以按住Shift或者Ctrl键进行多选)'; $lang->group->manageMember = '成员维护'; -$lang->group->managePRJAdmin = '维护项目管理员'; +$lang->group->manageProjectAdmin = '维护项目管理员'; $lang->group->confirmDelete = '您确定删除该用户分组吗?'; $lang->group->successSaved = '成功保存'; $lang->group->errorNotSaved = '没有保存,请确认选择了权限数据。'; diff --git a/module/group/lang/zh-tw.php b/module/group/lang/zh-tw.php index 1fefa4e4cd..de40fd1752 100644 --- a/module/group/lang/zh-tw.php +++ b/module/group/lang/zh-tw.php @@ -21,7 +21,7 @@ $lang->group->managePrivByGroup = '權限維護'; $lang->group->managePrivByModule = '按模組分配權限'; $lang->group->byModuleTips = '(可以按住Shift或者Ctrl鍵進行多選)'; $lang->group->manageMember = '成員維護'; -$lang->group->managePRJAdmin = '維護項目管理員'; +$lang->group->manageProjectAdmin = '維護項目管理員'; $lang->group->confirmDelete = '您確定刪除該用戶分組嗎?'; $lang->group->successSaved = '成功保存'; $lang->group->errorNotSaved = '沒有保存,請確認選擇了權限數據。'; diff --git a/module/group/model.php b/module/group/model.php index 5bcfbfacb3..4bba75431b 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -15,14 +15,14 @@ class groupModel extends model { /** * Create a group. - * + * * @access public * @return bool */ public function create() { $group = fixer::input('post')->get(); - if(isset($group->limited)) + if(isset($group->limited)) { unset($group->limited); $group->role = 'limited'; @@ -32,8 +32,8 @@ class groupModel extends model /** * Update a group. - * - * @param int $groupID + * + * @param int $groupID * @access public * @return void */ @@ -45,8 +45,8 @@ class groupModel extends model /** * Copy a group. - * - * @param int $groupID + * + * @param int $groupID * @access public * @return void */ @@ -66,9 +66,9 @@ class groupModel extends model /** * Copy privileges. - * - * @param string $fromGroup - * @param string $toGroup + * + * @param string $fromGroup + * @param string $toGroup * @access public * @return void */ @@ -84,9 +84,9 @@ class groupModel extends model /** * Copy user. - * - * @param string $fromGroup - * @param string $toGroup + * + * @param string $fromGroup + * @param string $toGroup * @access public * @return void */ @@ -102,32 +102,32 @@ class groupModel extends model /** * Get group lists. - * + * * @param int $projectID * @access public * @return array */ public function getList($projectID = 0) { - return $this->dao->select('*')->from(TABLE_GROUP)->where('PRJ')->eq($projectID)->orderBy('id')->fetchAll(); + return $this->dao->select('*')->from(TABLE_GROUP)->where('project')->eq($projectID)->orderBy('id')->fetchAll(); } /** * Get group pairs. - * + * * @param int $projectID * @access public * @return array */ public function getPairs($projectID = 0) { - return $this->dao->select('id, name')->from(TABLE_GROUP)->where('PRJ')->eq($projectID)->orderBy('id')->fetchPairs(); + return $this->dao->select('id, name')->from(TABLE_GROUP)->where('project')->eq($projectID)->orderBy('id')->fetchPairs(); } /** * Get group by id. - * - * @param int $groupID + * + * @param int $groupID * @access public * @return object */ @@ -141,8 +141,8 @@ class groupModel extends model /** * Get group by account. - * - * @param string $account + * + * @param string $account * @access public * @return array */ @@ -171,8 +171,8 @@ class groupModel extends model /** * Get privileges of a groups. - * - * @param int $groupID + * + * @param int $groupID * @access public * @return array */ @@ -186,8 +186,8 @@ class groupModel extends model /** * Get user pairs of a group. - * - * @param int $groupID + * + * @param int $groupID * @access public * @return array */ @@ -204,14 +204,14 @@ class groupModel extends model /** * Get user programs of a group. - * - * @param int $groupID + * + * @param int $groupID * @access public * @return array */ public function getUserPrograms($groupID) { - return $this->dao->select('t1.account, t1.PRJ') + return $this->dao->select('t1.account, t1.project') ->from(TABLE_USERGROUP)->alias('t1') ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account') ->where('`group`')->eq((int)$groupID) @@ -258,8 +258,8 @@ class groupModel extends model /** * Delete a group. - * - * @param int $groupID + * + * @param int $groupID * @param null $null compatible with that of model::delete() * @access public * @return void @@ -396,7 +396,7 @@ class groupModel extends model /** * Update privilege by module. - * + * * @access public * @return void */ @@ -420,8 +420,8 @@ class groupModel extends model /** * Update users. - * - * @param int $groupID + * + * @param int $groupID * @access public * @return void */ @@ -455,13 +455,13 @@ class groupModel extends model } /** - * Update program admins. - * - * @param int $groupID + * Update project admins. + * + * @param int $groupID * @access public * @return void */ - public function updatePRJAdmin($groupID) + public function updateProjectAdmin($groupID) { $this->loadModel('user'); $this->dao->delete()->from(TABLE_USERGROUP)->where('`group`')->eq($groupID)->exec(); @@ -474,10 +474,10 @@ class groupModel extends model $data = new stdclass(); $data->group = $groupID; $data->account = $account; - $data->PRJ = implode($programs[$account], ','); + $data->project = implode($programs[$account], ','); $this->dao->replace(TABLE_USERGROUP)->data($data)->exec(); - foreach($programs[$account] as $programID) + foreach($programs[$account] as $programID) { if(!$programID) continue; $this->user->updateUserView($programID, 'program'); @@ -487,10 +487,10 @@ class groupModel extends model if(!dao::isError()) return true; return false; } - + /** * Sort resource. - * + * * @access public * @return void */ @@ -511,7 +511,7 @@ class groupModel extends model { $this->lang->resource->$key = $resource; } - + /* sort methodOrder. */ foreach($this->lang->resource as $moduleName => $resources) { @@ -577,9 +577,9 @@ class groupModel extends model /** * Judge an action is clickable or not. - * - * @param object $group - * @param string $action + * + * @param object $group + * @param string $action * @static * @access public * @return bool @@ -588,8 +588,8 @@ class groupModel extends model { $action = strtolower($action); - if($action == 'manageview' and $group->role == 'limited') return false; - if($action == 'copy' and $group->role == 'limited') return false; + if($action == 'manageview' and $group->role == 'limited') return false; + if($action == 'copy' and $group->role == 'limited') return false; return true; } diff --git a/module/group/view/browse.html.php b/module/group/view/browse.html.php index 04d709fdfb..a92dbf2230 100644 --- a/module/group/view/browse.html.php +++ b/module/group/view/browse.html.php @@ -42,23 +42,23 @@ desc;?> - role == 'PRJAdmin';?> - + role == 'projectAdmin';?> + group->managepriv = $lang->group->managePrivByGroup;?> id", $group, 'list', 'eye', '', "$disabled");?> id", $group, 'list', 'lock');?> group->managemember = $lang->group->manageMember;?> - - id", $group, 'list', 'persons');?> + + id", $group, 'list', 'persons');?> - id", $group, 'list', 'persons', '', "iframe", true, "data-width='90%'");?> + id", $group, 'list', 'persons', '', "iframe", true, "data-width='90%'");?> id", $group, 'list', '', '', "iframe $disabled", true, "data-width='550'");?> id", $group, 'list', '', '', "iframe $disabled", true, "data-width='550'");?> "; } diff --git a/module/group/view/create.html.php b/module/group/view/create.html.php index f878856eea..3a2a6837e6 100644 --- a/module/group/view/create.html.php +++ b/module/group/view/create.html.php @@ -11,24 +11,24 @@ */ ?> -
    +

    group->create;?>

    - +
    - + - + - + diff --git a/module/group/view/edit.html.php b/module/group/view/edit.html.php index 5cbc4f83a7..d07ae0a257 100644 --- a/module/group/view/edit.html.php +++ b/module/group/view/edit.html.php @@ -11,7 +11,7 @@ */ ?> -
    +

    id;?> @@ -20,15 +20,15 @@

    -
    group->name;?>
    group->desc;?>
    group->limited;?>
    +
    - + - + diff --git a/module/group/view/managemember.html.php b/module/group/view/managemember.html.php index 8ef983ca13..5c0aefa6db 100644 --- a/module/group/view/managemember.html.php +++ b/module/group/view/managemember.html.php @@ -29,7 +29,7 @@
    -
    group->name;?> name, "class='form-control'");?>
    group->desc;?> desc, "rows='5' class='form-control'");?>
    +
    @@ -60,7 +60,7 @@
    - goback, $this->createLink('group', 'browse')); echo html::hidden('foo'); // Just a var, to make sure $_POST is not empty. diff --git a/module/group/view/manageprjadmin.html.php b/module/group/view/manageprojectadmin.html.php similarity index 98% rename from module/group/view/manageprjadmin.html.php rename to module/group/view/manageprojectadmin.html.php index b17d444b21..aba54965f1 100644 --- a/module/group/view/manageprjadmin.html.php +++ b/module/group/view/manageprojectadmin.html.php @@ -28,7 +28,7 @@
    - +
    $program):?> @@ -70,7 +70,7 @@ diff --git a/module/product/control.php b/module/product/control.php index 7024b2af20..cb532aedbd 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -909,7 +909,7 @@ class product extends control $this->view->products = $products; $this->view->projectID = $moduleGroup == 'project' ? $this->session->PRJ : 0; $this->view->programs = $this->loadModel('program')->getPGMPairs(true); - $this->view->openGroup = $moduleGroup; + $this->view->openApp = $moduleGroup; $this->display(); } @@ -1011,7 +1011,7 @@ class product extends control /** * Manage product line. - * + * * @access public * @return void */ diff --git a/module/product/view/ajaxgetdropmenu.html.php b/module/product/view/ajaxgetdropmenu.html.php index b21c10ebac..015bcf96de 100644 --- a/module/product/view/ajaxgetdropmenu.html.php +++ b/module/product/view/ajaxgetdropmenu.html.php @@ -27,19 +27,19 @@ foreach($products as $product) { $objectID = ($product->type != 'platform' && $module == 'branch' && $method == 'manage') ? $productID : $product->id; $linkHtml = $this->product->setParamsForLink($module, $link, $projectID, $product->id); - $myProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "class='text-important' title='{$productName}' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openGroup'"); + $myProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "class='text-important' title='{$productName}' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openApp'"); } else if($product->status == 'normal' and !($product->PO == $this->app->user->account)) { $objectID = ($product->type != 'platform' && $module == 'branch' && $method == 'manage') ? $productID : $product->id; $linkHtml = $this->product->setParamsForLink($module, $link, $projectID, $product->id); - $normalProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "title='{$productName}' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openGroup'"); + $normalProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "title='{$productName}' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openApp'"); } else if($product->status == 'closed') { $objectID = ($product->type != 'platform' && $module == 'branch' && $method == 'manage') ? $productID : $product->id; $linkHtml = $this->product->setParamsForLink($module, $link, $projectID, $objectID); - $closedProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "title='{$productName}' class='closed' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openGroup'"); + $closedProductsHtml .= html::a($linkHtml, html::icon($lang->icons['product']) . ' ' . $productName, '', "title='{$productName}' class='closed' data-key='" . zget($productsPinYin, $product->name, '') . "' data-group='$openApp'"); } } ?> diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index 4781940ca3..f9c7c8721e 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -118,9 +118,9 @@ $isProjectStory = $this->app->rawModule == 'projectstory'; - - + + type != 'normal'):?> diff --git a/module/release/view/view.html.php b/module/release/view/view.html.php index 151b5336a4..42c5cc48ec 100644 --- a/module/release/view/view.html.php +++ b/module/release/view/view.html.php @@ -354,7 +354,7 @@ diff --git a/module/repo/control.php b/module/repo/control.php index a1084b7a1e..9e3d74f5ef 100644 --- a/module/repo/control.php +++ b/module/repo/control.php @@ -12,7 +12,7 @@ class repo extends control { /** * Construct. - * + * * @access public * @return void */ @@ -28,7 +28,7 @@ class repo extends control } /* Set repo menu group. */ - $this->projectID = isset($_GET['PRJ']) ? $_GET['PRJ'] : 0; + $this->projectID = isset($_GET['project']) ? $_GET['project'] : 0; if(!$this->projectID) { $this->lang->navGroup->repo = 'repo'; @@ -150,10 +150,10 @@ class repo extends control } /** - * Delete repo. - * - * @param int $repoID - * @param string $confirm + * Delete repo. + * + * @param int $repoID + * @param string $confirm * @access public * @return void */ @@ -180,13 +180,13 @@ class repo extends control } /** - * View repo file. - * - * @param int $repoID - * @param string $entry - * @param string $revision - * @param string $showBug - * @param string $encoding + * View repo file. + * + * @param int $repoID + * @param string $entry + * @param string $revision + * @param string $showBug + * @param string $encoding * @access public * @return void */ @@ -215,12 +215,12 @@ class repo extends control if($info->kind == 'dir') $this->locate($this->repo->createLink('browse', "repoID=$repoID&path=" . $this->repo->encodePath($path) . "&revision=$revision")); $content = $this->scm->cat($entry, $revision); $entry = urldecode($entry); - $pathInfo = pathinfo($entry); + $pathInfo = pathinfo($entry); $encoding = empty($encoding) ? $repo->encoding : $encoding; $encoding = strtolower(str_replace('_', '-', $encoding)); - $suffix = ''; - if(isset($pathInfo["extension"])) $suffix = strtolower($pathInfo["extension"]); + $suffix = ''; + if(isset($pathInfo["extension"])) $suffix = strtolower($pathInfo["extension"]); if(!$suffix or (!array_key_exists($suffix, $this->config->program->suffix) and strpos($this->config->repo->images, "|$suffix|") === false)) $suffix = $this->repo->isBinary($content, $suffix) ? 'binary' : 'c'; if(strpos($this->config->repo->images, "|$suffix|") !== false) @@ -279,12 +279,12 @@ class repo extends control } /** - * Browse repo. - * - * @param int $repoID - * @param string $path - * @param string $revision - * @param int $refresh + * Browse repo. + * + * @param int $repoID + * @param string $path + * @param string $revision + * @param int $refresh * @access public * @return void */ @@ -394,14 +394,14 @@ class repo extends control /** * show repo log. - * - * @param int $repoID - * @param string $entry - * @param string $revision - * @param string $type - * @param int $recTotal - * @param int $recPerPage - * @param int $pageID + * + * @param int $repoID + * @param string $entry + * @param string $revision + * @param string $type + * @param int $recTotal + * @param int $recPerPage + * @param int $pageID * @access public * @return void */ @@ -547,12 +547,12 @@ class repo extends control } /** - * Blame repo file. - * - * @param int $repoID - * @param string $entry - * @param string $revision - * @param string $encoding + * Blame repo file. + * + * @param int $repoID + * @param string $entry + * @param string $revision + * @param string $encoding * @access public * @return void */ @@ -593,13 +593,13 @@ class repo extends control /** * Show diff. - * - * @param int $repoID - * @param string $entry - * @param string $oldRevision - * @param string $newRevision - * @param string $showBug - * @param string $encoding + * + * @param int $repoID + * @param string $entry + * @param string $oldRevision + * @param string $newRevision + * @param string $showBug + * @param string $encoding * @access public * @return void */ @@ -612,9 +612,9 @@ class repo extends control $repo = $this->repo->getRepoByID($repoID); $entry = $this->repo->decodePath($entry); - $pathInfo = pathinfo($entry); - $suffix = ''; - if(isset($pathInfo["extension"])) $suffix = strtolower($pathInfo["extension"]); + $pathInfo = pathinfo($entry); + $suffix = ''; + if(isset($pathInfo["extension"])) $suffix = strtolower($pathInfo["extension"]); $arrange = $this->cookie->arrange ? $this->cookie->arrange : 'inline'; if($this->server->request_method == 'POST') @@ -622,7 +622,7 @@ class repo extends control $oldRevision = isset($this->post->revision[1]) ? $this->post->revision[1] : ''; $newRevision = isset($this->post->revision[0]) ? $this->post->revision[0] : ''; - if($this->post->arrange) + if($this->post->arrange) { $arrange = $this->post->arrange; setcookie('arrange', $arrange); @@ -700,13 +700,13 @@ class repo extends control } /** - * Download repo file. - * - * @param int $repoID - * @param string $path - * @param string $fromRevision - * @param string $toRevision - * @param string $type + * Download repo file. + * + * @param int $repoID + * @param string $path + * @param string $fromRevision + * @param string $toRevision + * @param string $type * @access public * @return void */ @@ -725,7 +725,7 @@ class repo extends control /** * Set Rules. - * + * * @access public * @return void */ @@ -753,9 +753,9 @@ class repo extends control /** * Show sync comment. - * - * @param int $repoID - * @param string $branch + * + * @param int $repoID + * @param string $branch * @access public * @return void */ @@ -778,9 +778,9 @@ class repo extends control /** * Ajax sync comment. - * - * @param int $repoID - * @param string $type + * + * @param int $repoID + * @param string $type * @access public * @return void */ @@ -869,9 +869,9 @@ class repo extends control /** * Ajax sync git branch comment. - * - * @param int $repoID - * @param string $branch + * + * @param int $repoID + * @param string $branch * @access public * @return void */ @@ -917,13 +917,13 @@ class repo extends control /** * Ajax show side logs. - * - * @param int $repoID - * @param string $path - * @param string $type - * @param int $recTotal - * @param int $recPerPage - * @param int $pageID + * + * @param int $repoID + * @param string $path + * @param string $type + * @param int $recTotal + * @param int $recPerPage + * @param int $pageID * @access public * @return void */ @@ -949,10 +949,10 @@ class repo extends control } /** - * Ajax get svn tags - * - * @param int $repoID - * @param string $path + * Ajax get svn tags + * + * @param int $repoID + * @param string $path * @access public * @return void */ diff --git a/module/repo/model.php b/module/repo/model.php index 4570c64838..27be9df645 100644 --- a/module/repo/model.php +++ b/module/repo/model.php @@ -3,8 +3,8 @@ class repoModel extends model { /** * Check repo priv. - * - * @param object $repo + * + * @param object $repo * @access public * @return bool */ @@ -26,10 +26,10 @@ class repoModel extends model /** * Set menu. - * - * @param array $repos - * @param int $repoID - * @param bool $showSeleter + * + * @param array $repos + * @param int $repoID + * @param bool $showSeleter * @access public * @return void */ @@ -104,12 +104,12 @@ class repoModel extends model } /** - * Create the select code of repos. - * - * @param array $repos - * @param int $repoID - * @param string $currentModule - * @param string $currentMethod + * Create the select code of repos. + * + * @param array $repos + * @param int $repoID + * @param string $currentModule + * @param string $currentMethod * @access public * @return string */ @@ -154,7 +154,7 @@ class repoModel extends model foreach($repos as $i => $repo) { $repo->acl = json_decode($repo->acl); - if(!$this->checkPriv($repo)) + if(!$this->checkPriv($repo)) { unset($repos[$i]); } @@ -169,8 +169,8 @@ class repoModel extends model /** * Get list by SCM. - * - * @param string $scm + * + * @param string $scm * @param string $type all|haspriv * @access public * @return array @@ -287,7 +287,7 @@ class repoModel extends model /** * Get repo pairs. - * + * * @param int $projectID * @access public * @return array @@ -306,7 +306,7 @@ class repoModel extends model { $repo->acl = json_decode($repo->acl); $scm = $repo->SCM == 'Subversion' ? 'svn' : 'git'; - if($this->checkPriv($repo)) + if($this->checkPriv($repo)) { if($projectID) { @@ -326,9 +326,9 @@ class repoModel extends model } /** - * Get repo by id. - * - * @param int $repoID + * Get repo by id. + * + * @param int $repoID * @access public * @return object */ @@ -344,8 +344,8 @@ class repoModel extends model /** * Get by id list. - * - * @param array $idList + * + * @param array $idList * @access public * @return array */ @@ -363,8 +363,8 @@ class repoModel extends model /** * Get git branches. - * - * @param object $repo + * + * @param object $repo * @access public * @return array */ @@ -377,7 +377,7 @@ class repoModel extends model /** * Get commits. - * + * * @param object $repo * @param string $entry * @param string $revision @@ -444,8 +444,8 @@ class repoModel extends model /** * Get latest commit. - * - * @param int $repoID + * + * @param int $repoID * @access public * @return object */ @@ -477,12 +477,12 @@ class repoModel extends model } /** - * Get revisions from db. - * - * @param int $repoID - * @param string $limit - * @param string $maxRevision - * @param string $minRevision + * Get revisions from db. + * + * @param int $repoID + * @param string $limit + * @param string $maxRevision + * @param string $minRevision * @access public * @return array */ @@ -508,9 +508,9 @@ class repoModel extends model /** * Get history. - * - * @param int $repoID - * @param array $revisions + * + * @param int $repoID + * @param array $revisions * @access public * @return array */ @@ -526,9 +526,9 @@ class repoModel extends model /** * Get git revisionName. - * - * @param string $revision - * @param int $commit + * + * @param string $revision + * @param int $commit * @access public * @return string */ @@ -540,10 +540,10 @@ class repoModel extends model /** * Get cache file. - * - * @param int $repoID - * @param string $path - * @param int $revision + * + * @param int $repoID + * @param string $path + * @param int $revision * @access public * @return string */ @@ -557,11 +557,11 @@ class repoModel extends model /** * Save commit. - * - * @param int $repoID - * @param array $logs - * @param int $version - * @param string $branch + * + * @param int $repoID + * @param array $logs + * @param int $version + * @param string $branch * @access public * @return int */ @@ -610,11 +610,11 @@ class repoModel extends model /** * Save One Commit. - * - * @param int $repoID - * @param object $commit - * @param int $version - * @param string $branch + * + * @param int $repoID + * @param object $commit + * @param int $version + * @param string $branch * @access public * @return int */ @@ -664,9 +664,9 @@ class repoModel extends model /** * Save exists log branch. - * - * @param int $repoID - * @param string $branch + * + * @param int $repoID + * @param string $branch * @access public * @return void */ @@ -690,9 +690,9 @@ class repoModel extends model /** * Update commit count. - * - * @param int $repoID - * @param int $count + * + * @param int $repoID + * @param int $count * @access public * @return void */ @@ -702,9 +702,9 @@ class repoModel extends model } /** - * Get unsync commits - * - * @param object $repo + * Get unsync commits + * + * @param object $repo * @access public * @return array */ @@ -742,7 +742,7 @@ class repoModel extends model /** * Get pre and next revision. - * + * * @param object $repo * @param string $entry * @param string $revision @@ -788,24 +788,24 @@ class repoModel extends model } $preRevision = false; - $preAndNext = new stdclass(); - $preAndNext->pre = ''; - $preAndNext->next = ''; + $preAndNext = new stdclass(); + $preAndNext->pre = ''; + $preAndNext->next = ''; foreach($revisions as $version => $commit) { /* Get next object. */ if($preRevision === true) - { + { $preAndNext->next = $version; break; - } + } /* Get pre object. */ if($revision == $version) - { + { if($preRevision) $preAndNext->pre = $preRevision; $preRevision = true; - } + } if($preRevision !== true) $preRevision = $version; } return $preAndNext; @@ -818,13 +818,13 @@ class repoModel extends model * @param string $params * @param string $viewType * @param bool $onlybody - * @param int $PRJID + * @param int $projectID * @access public * @return string */ - public function createLink($method, $params = '', $viewType = '', $onlybody = false, $PRJID = 0) + public function createLink($method, $params = '', $viewType = '', $onlybody = false, $projectID = 0) { - if($this->config->requestType == 'GET') return helper::createLink('repo', $method, $params, $viewType, $onlybody, $PRJID); + if($this->config->requestType == 'GET') return helper::createLink('repo', $method, $params, $viewType, $onlybody, $projectID); $parsedParams = array(); parse_str($params, $parsedParams); @@ -841,7 +841,7 @@ class repoModel extends model } $params = http_build_query($parsedParams); - $link = helper::createLink('repo', $method, $params, $viewType, $onlybody, $PRJID); + $link = helper::createLink('repo', $method, $params, $viewType, $onlybody, $projectID); if(empty($pathParams)) return $link; $link .= strpos($link, '?') === false ? '?' : '&'; @@ -851,9 +851,9 @@ class repoModel extends model /** * Set back session/ - * - * @param string $type - * @param bool $withOtherModule + * + * @param string $type + * @param bool $withOtherModule * @access public * @return void */ @@ -875,8 +875,8 @@ class repoModel extends model /** * Set repo branch. - * - * @param string $branch + * + * @param string $branch * @access public * @return void */ @@ -888,8 +888,8 @@ class repoModel extends model /** * Mark synced status. - * - * @param int $repoID + * + * @param int $repoID * @access public * @return void */ @@ -901,8 +901,8 @@ class repoModel extends model /** * Fix commit. - * - * @param int $repoID + * + * @param int $repoID * @access public * @return void */ @@ -925,8 +925,8 @@ class repoModel extends model /** * Encode repo path. - * - * @param string $path + * + * @param string $path * @access public * @return string */ @@ -938,8 +938,8 @@ class repoModel extends model /** * Decode repo path. - * - * @param string $path + * + * @param string $path * @access public * @return string */ @@ -951,9 +951,9 @@ class repoModel extends model /** * Check content is binary. - * - * @param string $content - * @param string $suffix + * + * @param string $content + * @param string $suffix * @access public * @return bool */ @@ -962,17 +962,17 @@ class repoModel extends model if(strpos($this->config->repo->binary, "|$suffix|") !== false) return true; $blk = substr($content, 0, 512); - return ( + return ( false || substr_count($blk, "^\r\n")/512 > 0.3 || substr_count($blk, "^ -~")/512 > 0.3 || substr_count($blk, "\x00") > 0 - ); + ); } /** * Check svn/git client. - * + * * @access public * @return bool */ @@ -1008,7 +1008,7 @@ class repoModel extends model /** * remove client version file. - * + * * @access public * @return void */ @@ -1026,8 +1026,8 @@ class repoModel extends model } /** - * Check connection - * + * Check connection + * * @access public * @return void */ @@ -1078,7 +1078,7 @@ class repoModel extends model } exec($command, $output, $result); - if($result) + if($result) { $message = sprintf($this->lang->repo->error->output, $command, $result, join("
    ", $output)); if(stripos($message, 'Expected FS format between') !== false and strpos($message, 'found format') !== false) @@ -1128,8 +1128,8 @@ class repoModel extends model /** * Replace comment link. - * - * @param string $comment + * + * @param string $comment * @access public * @return string */ @@ -1162,9 +1162,9 @@ class repoModel extends model /** * Add link. - * - * @param string $matches - * @param string $method + * + * @param string $matches + * @param string $method * @access public * @return string */ @@ -1293,9 +1293,9 @@ class repoModel extends model /** * Iconv Comment. - * - * @param string $comment - * @param string $encodings + * + * @param string $comment + * @param string $encodings * @access public * @return string */ @@ -1318,7 +1318,7 @@ class repoModel extends model /** * Process rules to REG. - * + * * @access public * @return array */ @@ -1369,10 +1369,10 @@ class repoModel extends model /** * Save action to pms. - * - * @param array $objects - * @param object $log - * @param string $repoRoot + * + * @param array $objects + * @param object $log + * @param string $repoRoot * @access public * @return void */ @@ -1393,7 +1393,7 @@ class repoModel extends model if(isset($actions['task'])) { $this->loadModel('task'); - $productsAndProjects = $this->getTaskProductsAndProjects($objects['tasks']); + $productsAndExecutions = $this->getTaskProductsAndExecutions($objects['tasks']); foreach($actions['task'] as $taskID => $taskActions) { $task = $this->task->getById($taskID); @@ -1401,8 +1401,8 @@ class repoModel extends model $action->objectType = 'task'; $action->objectID = $taskID; - $action->product = $productsAndProjects[$taskID]['product']; - $action->project = $productsAndProjects[$taskID]['project']; + $action->product = $productsAndExecutions[$taskID]['product']; + $action->execution = $productsAndExecutions[$taskID]['execution']; $action->comment = $this->lang->repo->revisionA . ': #' . $action->extra . "
    " . $action->comment; foreach($taskActions as $taskAction => $params) { @@ -1445,8 +1445,8 @@ class repoModel extends model $action->action = $scm == 'svn' ? 'svncommited' : 'gitcommited'; $action->objectType = 'task'; $action->objectID = $taskID; - $action->product = $productsAndProjects[$taskID]['product']; - $action->project = $productsAndProjects[$taskID]['project']; + $action->product = $productsAndExecutions[$taskID]['product']; + $action->execution = $productsAndExecutions[$taskID]['execution']; $changes = $this->createActionChanges($log, $repoRoot, $scm); $this->saveRecord($action, $changes); @@ -1471,7 +1471,7 @@ class repoModel extends model if(isset($actions['bug'])) { $this->loadModel('bug'); - $productsAndProjects = $this->getBugProductsAndProjects($objects['bugs']); + $productsAndExecutions = $this->getBugProductsAndExecutions($objects['bugs']); foreach($actions['bug'] as $bugID => $bugActions) { $bug = $this->bug->getByID($bugID); @@ -1479,8 +1479,8 @@ class repoModel extends model $action->objectType = 'bug'; $action->objectID = $bugID; - $action->product = $productsAndProjects[$bugID]->product; - $action->project = $productsAndProjects[$bugID]->project; + $action->product = $productsAndExecutions[$bugID]->product; + $action->execution = $productsAndExecutions[$bugID]->execution; foreach($bugActions as $bugAction => $params) { $_POST = array(); @@ -1507,16 +1507,16 @@ class repoModel extends model if($objects['stories']) { - $productsAndProjects = $this->getTaskProductsAndProjects($objects['stories']); + $productsAndExecutions = $this->getTaskProductsAndExecutions($objects['stories']); foreach($objects['stories'] as $storyID) { $storyID = (int)$storyID; - if(!isset($productsAndProjects[$storyID])) continue; + if(!isset($productsAndExecutions[$storyID])) continue; $action->objectType = 'story'; $action->objectID = $storyID; - $action->product = $productsAndProjects[$storyID]['product']; - $action->project = $productsAndProjects[$storyID]['project']; + $action->product = $productsAndExecutions[$storyID]['product']; + $action->execution = $productsAndExecutions[$storyID]['execution']; $this->saveRecord($action, $changes); } @@ -1524,16 +1524,16 @@ class repoModel extends model if($objects['tasks']) { - $productsAndProjects = $this->getTaskProductsAndProjects($objects['tasks']); + $productsAndExecutions = $this->getTaskProductsAndExecutions($objects['tasks']); foreach($objects['tasks'] as $taskID) { $taskID = (int)$taskID; - if(!isset($productsAndProjects[$taskID])) continue; + if(!isset($productsAndExecutions[$taskID])) continue; $action->objectType = 'task'; $action->objectID = $taskID; - $action->product = $productsAndProjects[$taskID]['product']; - $action->project = $productsAndProjects[$taskID]['project']; + $action->product = $productsAndExecutions[$taskID]['product']; + $action->execution = $productsAndExecutions[$taskID]['execution']; $this->saveRecord($action, $changes); } @@ -1541,16 +1541,16 @@ class repoModel extends model if($objects['bugs']) { - $productsAndProjects = $this->getBugProductsAndProjects($objects['bugs']); + $productsAndExecutions = $this->getBugProductsAndExecutions($objects['bugs']); foreach($objects['bugs'] as $bugID) { $bugID = (int)$bugID; - if(!isset($productsAndProjects[$bugID])) continue; + if(!isset($productsAndExecutions[$bugID])) continue; $action->objectType = 'bug'; $action->objectID = $bugID; - $action->product = $productsAndProjects[$bugID]->product; - $action->project = $productsAndProjects[$bugID]->project; + $action->product = $productsAndExecutions[$bugID]->product; + $action->execution = $productsAndExecutions[$bugID]->execution; $this->saveRecord($action, $changes); } @@ -1561,7 +1561,7 @@ class repoModel extends model /** * Save an action to pms. - * + * * @param object $action * @param object $log * @access public @@ -1601,9 +1601,9 @@ class repoModel extends model /** * Create changes for action from a log. - * - * @param object $log - * @param string $repoRoot + * + * @param object $log + * @param string $repoRoot * @access public * @return array */ @@ -1639,51 +1639,51 @@ class repoModel extends model } /** - * Get products and projects of tasks. - * - * @param array $tasks + * Get products and executions of tasks. + * + * @param array $tasks * @access public * @return array */ - public function getTaskProductsAndProjects($tasks) + public function getTaskProductsAndExecutions($tasks) { $records = array(); - $products = $this->dao->select('t1.id,t1.project,t2.product')->from(TABLE_TASK)->alias('t1') - ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.project = t2.project') + $products = $this->dao->select('t1.id,t1.execution,t2.product')->from(TABLE_TASK)->alias('t1') + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.execution = t2.project') ->where('t1.id')->in($tasks)->fetchGroup('id','product'); - $projects = $this->dao->select('id, project')->from(TABLE_TASK)->where('id')->in($tasks)->fetchPairs(); + $executions = $this->dao->select('id, execution')->from(TABLE_TASK)->where('id')->in($tasks)->fetchPairs(); - foreach($projects as $taskID => $projectID) + foreach($executions as $taskID => $executionID) { $record = array(); - $record['project'] = $projectID; - $record['product'] = isset($products[$taskID]) ? "," . join(',', array_keys($products[$taskID])) . "," : ",0,"; + $record['execution'] = $executionID; + $record['product'] = isset($products[$taskID]) ? "," . join(',', array_keys($products[$taskID])) . "," : ",0,"; $records[$taskID] = $record; } return $records; } /** - * Get products and projects of bugs. - * - * @param array $bugs + * Get products and executions of bugs. + * + * @param array $bugs * @access public * @return array */ - public function getBugProductsAndProjects($bugs) + public function getBugProductsAndExecutions($bugs) { - $records = $this->dao->select('id, project, product')->from(TABLE_BUG)->where('id')->in($bugs)->fetchAll('id'); + $records = $this->dao->select('id, execution, product')->from(TABLE_BUG)->where('id')->in($bugs)->fetchAll('id'); foreach($records as $record) $record->product = ",{$record->product},"; return $records; } /** * Build URL. - * - * @param string $methodName - * @param string $url - * @param int $revision + * + * @param string $methodName + * @param string $url + * @param int $revision * @access public * @return string */ diff --git a/module/stakeholder/control.php b/module/stakeholder/control.php index 7d8089ddde..5ae8584db8 100644 --- a/module/stakeholder/control.php +++ b/module/stakeholder/control.php @@ -71,14 +71,14 @@ class stakeholder extends control $this->app->rawModule = 'program'; $this->app->rawMethod = 'stakeholder'; $this->lang->navGroup->program = 'program'; - $this->lang->program->switcherMenu = $this->program->getPGMSwitcher($programID, true); - $this->program->setPGMViewMenu($programID); + $this->lang->program->switcherMenu = $this->program->getSwitcher($programID, true); + $this->program->setViewMenu($programID); - $this->view->members = $this->program->getPRJTeamMemberPairs($programID); + $this->view->members = $this->loadModel('project')->getProjectTeamMemberPairs($programID); } else { - $this->view->members = $this->loadModel('project')->getTeamMemberPairs($this->session->PRJ); + $this->view->members = $this->loadModel('execution')->getTeamMemberPairs($this->session->project); } $this->view->title = $this->lang->stakeholder->create; @@ -110,11 +110,11 @@ class stakeholder extends control $this->view->title = $this->lang->stakeholder->batchCreate; $this->view->position[] = $this->lang->stakeholder->batchCreate; - $this->view->project = $this->loadModel('program')->getPRJByID($this->session->PRJ); + $this->view->project = $this->loadModel('project')->getByID($this->session->project); $this->view->users = $this->user->getPairs('all|nodeleted|noclosed'); $this->view->deptUsers = $deptUsers; $this->view->dept = $dept; - $this->view->projectID = $this->session->PRJ; + $this->view->projectID = $this->session->project; $this->view->depts = array('' => '') + $this->dept->getOptionMenu(); $this->view->stakeholders = $this->stakeholder->getStakeholders('all', 'id_desc'); $this->view->parentStakeholders = $this->program->getStakeholders($parentID, 't1.id_desc'); @@ -153,10 +153,10 @@ class stakeholder extends control } $users = array('' => ''); - if($stakeholder->type == 'team') $users = $this->loadModel('project')->getTeamMemberPairs($this->session->PRJ); + if($stakeholder->type == 'team') $users = $this->loadModel('execution')->getTeamMemberPairs($this->session->project); elseif($stakeholder->type == 'company') { - $members = $this->loadModel('project')->getTeamMemberPairs($this->session->PRJ); + $members = $this->loadModel('execution')->getTeamMemberPairs($this->session->project); $users = $this->loadModel('user')->getPairs('noclosed'); $users = array('' => '') + array_diff($users, $members); } @@ -180,7 +180,7 @@ class stakeholder extends control */ public function ajaxGetMembers($user = '', $programID = 0) { - $members = $programID == 0 ? $this->loadModel('project')->getTeamMemberPairs($this->session->PRJ) : $this->loadModel('program')->getPRJTeamMemberPairs($programID); + $members = $programID == 0 ? $this->loadModel('execution')->getTeamMemberPairs($this->session->project) : $this->loadModel('project')->getProjectTeamMemberPairs($programID); die(html::select('user', $members, $user, "class='form-control chosen'")); } @@ -194,7 +194,7 @@ class stakeholder extends control */ public function ajaxGetCompanyUser($user = '', $programID = 0) { - $members = $programID == 0 ? $this->loadModel('project')->getTeamMemberPairs($this->session->PRJ) : $this->loadModel('program')->getPRJTeamMemberPairs($programID); + $members = $programID == 0 ? $this->loadModel('execution')->getTeamMemberPairs($this->session->project) : $this->loadModel('project')->getProjectTeamMemberPairs($programID); $users = $this->loadModel('user')->getPairs('noclosed'); $companyUsers = array('' => '') + array_diff($users, $members); @@ -274,7 +274,7 @@ class stakeholder extends control else { $this->stakeholder->delete(TABLE_STAKEHOLDER, $userID); - $this->loadModel('user')->updateUserView($this->session->PRJ, 'project'); + $this->loadModel('user')->updateUserView($this->session->project, 'project'); die(js::reload('parent')); } } @@ -293,7 +293,7 @@ class stakeholder extends control $this->view->position[] = $this->lang->stakeholder->view; $this->view->user = $this->stakeholder->getByID($userID); - $this->view->users = $this->loadModel('project')->getTeamMemberPairs($this->session->PRJ ,'nodeleted'); + $this->view->users = $this->loadModel('execution')->getTeamMemberPairs($this->session->project,'nodeleted'); $this->view->expects = $this->stakeholder->getExpectByUser($userID); $this->display(); @@ -356,7 +356,7 @@ class stakeholder extends control $this->view->title = $this->lang->stakeholder->common . $this->lang->colon . $this->lang->stakeholder->communicate; $this->view->position[] = $this->lang->stakeholder->view; $this->view->user = $this->stakeholder->getByID($userID); - $this->view->users = $this->loadModel('project')->getTeamMemberPairs($this->session->PRJ ,'nodeleted'); + $this->view->users = $this->loadModel('execution')->getTeamMemberPairs($this->session->project,'nodeleted'); $this->display(); } diff --git a/module/stakeholder/model.php b/module/stakeholder/model.php index 86e09595ae..c561ecf6fc 100644 --- a/module/stakeholder/model.php +++ b/module/stakeholder/model.php @@ -1,7 +1,7 @@ setIF($programID == 0, 'objectType', 'project') ->setIF($programID != 0, 'objectType', 'program') - ->setIF($programID == 0, 'objectID', $this->session->PRJ) + ->setIF($programID == 0, 'objectID', $this->session->project) ->setIF($programID != 0, 'objectID', $programID) ->setDefault('createdBy', $this->app->user->account) ->setDefault('createdDate', helper::today()) - ->stripTags($this->config->stakeholder->editor->create['id'], $this->config->allowedTags) + ->stripTags($this->config->stakeholder->editor->create['id'], $this->config->allowedTags) ->remove('uid') - ->get(); + ->get(); - $account = isset($data->user) ? $data->user : ''; + $account = isset($data->user) ? $data->user : ''; $stakeholder->user = $account; if($data->from != 'outside') { - if(!$account) + if(!$account) { dao::$errors[] = $this->lang->stakeholder->userEmpty; - return false; + return false; } } else { /* If it's an outsider and it's added for the first time, insert to user table. */ - if(!$account) + if(!$account) { if(!$data->name) { dao::$errors[] = $this->lang->stakeholder->nameEmpty; - return false; + return false; } $companyID = $data->company; - if($data->company and isset($data->new)) + if($data->company and isset($data->new)) { $company = new stdclass(); $company->name = $data->company; @@ -53,10 +53,10 @@ class stakeholderModel extends model $companyID = $this->dao->lastInsertID(); } - if(!$companyID) + if(!$companyID) { dao::$errors[] = $this->lang->stakeholder->companyEmpty; - return false; + return false; } $user = new stdclass(); @@ -105,25 +105,25 @@ class stakeholderModel extends model /** * Batch create stakeholders for a project. * - * @access public + * @access public * @return void */ - public function batchCreate() + public function batchCreate() { $this->loadModel('action'); - $data = (array)fixer::input('post')->get(); + $data = (array)fixer::input('post')->get(); - $members = $this->loadModel('project')->getTeamMemberPairs($this->session->PRJ); + $members = $this->loadModel('execution')->getTeamMemberPairs($this->session->project); $accounts = array_unique($data['accounts']); - $oldJoin = $this->dao->select('`user`, createdDate')->from(TABLE_STAKEHOLDER)->where('objectID')->eq((int)$this->session->PRJ)->andWhere('objectType')->eq('project')->fetchPairs(); - $this->dao->delete()->from(TABLE_STAKEHOLDER)->where('objectID')->eq((int)$this->session->PRJ)->andWhere('objectType')->eq('project')->exec(); + $oldJoin = $this->dao->select('`user`, createdDate')->from(TABLE_STAKEHOLDER)->where('objectID')->eq((int)$this->session->project)->andWhere('objectType')->eq('project')->fetchPairs(); + $this->dao->delete()->from(TABLE_STAKEHOLDER)->where('objectID')->eq((int)$this->session->project)->andWhere('objectType')->eq('project')->exec(); foreach($accounts as $key => $account) - { + { if(empty($account)) continue; $stakeholder = new stdclass(); - $stakeholder->objectID = $this->session->PRJ; + $stakeholder->objectID = $this->session->project; $stakeholder->objectType = 'project'; $stakeholder->user = $account; $stakeholder->type = in_array($account, array_keys($members)) ? 'inside' : 'outside'; @@ -134,7 +134,7 @@ class stakeholderModel extends model $stakeholderID = $this->dao->lastInsertId(); $this->action->create('stakeholder', $stakeholderID, 'added'); - } + } /* Only changed account update userview. */ $oldAccounts = array_keys($oldJoin); @@ -142,23 +142,23 @@ class stakeholderModel extends model $changedAccounts = array_merge($changedAccounts, array_diff($oldAccounts, $accounts)); $changedAccounts = array_unique($changedAccounts); - $this->loadModel('user')->updateUserView($this->session->PRJ, 'project', $changedAccounts); + $this->loadModel('user')->updateUserView($this->session->project, 'project', $changedAccounts); } - /** + /** * Edit a stakeholder. * - * @param int $stakeholder + * @param int $stakeholder * @access public * @return void */ public function edit($stakeholderID) { - $oldStakeholder = $this->getByID($stakeholderID); + $oldStakeholder = $this->getByID($stakeholderID); $data = fixer::input('post') - ->stripTags($this->config->stakeholder->editor->edit['id'], $this->config->allowedTags) + ->stripTags($this->config->stakeholder->editor->edit['id'], $this->config->allowedTags) ->remove('uid') - ->get(); + ->get(); $user = new stdclass(); if($oldStakeholder->from == 'outside') @@ -206,7 +206,7 @@ class stakeholderModel extends model ->leftJoin(TABLE_COMPANY)->alias('t3')->on('t2.company=t3.id') ->leftJoin(TABLE_PROJECT)->alias('t4')->on('t1.objectID=t4.id') ->where('t1.deleted')->eq('0') - ->andWhere('t1.objectID')->eq($this->session->PRJ) + ->andWhere('t1.objectID')->eq($this->session->project) ->beginIF($browseType == 'inside')->andWhere('t1.type')->eq('inside')->fi() ->beginIF($browseType == 'outside')->andWhere('t1.type')->eq('outside')->fi() ->beginIF($browseType == 'key')->andWhere('t1.key')->ne('0')->fi() @@ -230,7 +230,7 @@ class stakeholderModel extends model { $stakeholders = $this->dao->select('id, user')->from(TABLE_STAKEHOLDER) ->where('deleted')->eq('0') - ->andWhere('objectID')->eq($this->session->PRJ) + ->andWhere('objectID')->eq($this->session->project) ->orderBy('id_desc') ->fetchPairs(); @@ -239,11 +239,11 @@ class stakeholderModel extends model /** * Get self stakeholders by object id list. - * - * @param array $objectIdList - * @param string $objectType + * + * @param array $objectIdList + * @param string $objectType * @access public - * @return array + * @return array */ public function getStakeholderGroup($objectIdList) { @@ -251,8 +251,8 @@ class stakeholderModel extends model $stakeholderGroup = array(); foreach($stakeholders as $stakeholder) - { - $stakeholderGroup[$stakeholder->objectID][$stakeholder->user] = $stakeholder->user; + { + $stakeholderGroup[$stakeholder->objectID][$stakeholder->user] = $stakeholder->user; } return $stakeholderGroup; @@ -260,11 +260,11 @@ class stakeholderModel extends model /** * Get parent stakeholder group by object id list. - * - * @param array $objectIdList - * @param string $objectType + * + * @param array $objectIdList + * @param string $objectType * @access public - * @return array + * @return array */ public function getParentStakeholderGroup($objectIdList) { @@ -309,7 +309,7 @@ class stakeholderModel extends model $stakeholders = $this->dao->select('t2.realname as name, t2.account, t1.type, t2.role')->from(TABLE_STAKEHOLDER)->alias('t1') ->leftJoin(TABLE_USER)->alias('t2')->on('t1.user=t2.account') ->where('t1.deleted')->eq('0') - ->andWhere('t1.objectID')->eq($this->session->PRJ) + ->andWhere('t1.objectID')->eq($this->session->project) ->fetchGroup('type'); return $stakeholders; @@ -329,7 +329,7 @@ class stakeholderModel extends model ->leftJoin(TABLE_COMPANY)->alias('t3')->on('t2.company=t3.id') ->where('t1.id')->eq($userID) ->andWhere('t1.deleted')->eq('0') - ->andWhere('t1.objectID')->eq($this->session->PRJ) + ->andWhere('t1.objectID')->eq($this->session->project) ->fetch(); return $stakeholder; @@ -342,9 +342,9 @@ class stakeholderModel extends model * @return array */ public function getProcessGroup() - { + { $group = $this->dao->select('process, activity')->from(TABLE_PROGRAMACTIVITY) - ->where('PRJ')->eq($this->session->PRJ) + ->where('project')->eq($this->session->project) ->andWhere('result')->eq('yes') ->fetchGroup('process'); @@ -361,7 +361,7 @@ class stakeholderModel extends model { return $this->dao->select('id, name')->from(TABLE_PROCESS) ->where('deleted')->eq(0) - ->fetchPairs(); + ->fetchPairs(); } /** @@ -374,8 +374,8 @@ class stakeholderModel extends model { return $this->dao->select('*')->from(TABLE_INTERVENTION) ->where('deleted')->eq(0) - ->andWhere('PRJ')->eq($this->session->PRJ) - ->fetchAll('activity'); + ->andWhere('project')->eq($this->session->project) + ->fetchAll('activity'); } /** @@ -389,7 +389,7 @@ class stakeholderModel extends model $stakeholders = $this->getStakeHolderPairs(); return $this->dao->select('*')->from(TABLE_ISSUE) ->where('deleted')->eq(0) - ->andWhere('PRJ')->eq($this->session->PRJ) + ->andWhere('project')->eq($this->session->project) ->andWhere('owner')->in(array_values($stakeholders)) ->orWhere('activity')->ne('') ->orderBy('id_desc') @@ -406,7 +406,7 @@ class stakeholderModel extends model { return $this->dao->select('id, name')->from(TABLE_ACTIVITY) ->where('deleted')->eq(0) - ->fetchPairs(); + ->fetchPairs(); } /** @@ -440,7 +440,7 @@ class stakeholderModel extends model ->add('userID', $userID) ->add('createdBy', $this->app->user->account) ->add('createdDate', date('Y-m-d')) - ->add('PRJ', $this->session->PRJ) + ->add('project', $this->session->project) ->stripTags($this->config->stakeholder->editor->expect['id'], $this->config->allowedTags) ->get(); @@ -492,7 +492,7 @@ class stakeholderModel extends model $expects = $this->dao->select('t1.*,t2.key,t3.realname')->from(TABLE_EXPECT)->alias('t1') ->leftJoin(TABLE_STAKEHOLDER)->alias('t2')->on('t1.userID=t2.id') ->leftJoin(TABLE_USER)->alias('t3')->on('t2.user=t3.account') - ->where('t1.PRJ')->eq($this->session->PRJ) + ->where('t1.project')->eq($this->session->project) ->beginIF($browseType == 'bysearch') ->andWhere($stakeholderQuery) ->fi() @@ -565,7 +565,7 @@ class stakeholderModel extends model $users = $this->dao->select("t1.id, CONCAT_WS('/', t3.name,t2.realname) as realname")->from(TABLE_STAKEHOLDER)->alias('t1') ->leftJoin(TABLE_USER)->alias('t2')->on('t1.user=t2.account') ->leftJoin(TABLE_COMPANY)->alias('t3')->on('t2.company=t3.id') - ->where('t1.objectID')->eq($this->session->PRJ) + ->where('t1.objectID')->eq($this->session->project) ->andWhere('t1.deleted')->eq('0') ->fetchPairs('id', 'realname'); @@ -583,7 +583,7 @@ class stakeholderModel extends model $users = $this->dao->select("t1.user, CONCAT_WS('/', t3.name,t2.realname) as realname")->from(TABLE_STAKEHOLDER)->alias('t1') ->leftJoin(TABLE_USER)->alias('t2')->on('t1.user=t2.account') ->leftJoin(TABLE_COMPANY)->alias('t3')->on('t2.company=t3.id') - ->where('t1.objectID')->eq($this->session->PRJ) + ->where('t1.objectID')->eq($this->session->project) ->andWhere('t1.deleted')->eq('0') ->fetchPairs('user', 'realname'); @@ -602,7 +602,7 @@ class stakeholderModel extends model return $this->dao->select('*')->from(TABLE_EXPECT)->where('id')->eq($expectID)->andWhere('deleted')->eq('0')->fetch(); } - /** + /** * Build search form. * * @param int $queryID @@ -644,7 +644,7 @@ class stakeholderModel extends model public function getStakeholderIssue($account) { $issueList = $this->dao->select('*')->from(TABLE_ISSUE) - ->where('PRJ')->eq($this->session->PRJ) + ->where('project')->eq($this->session->project) ->andWhere('owner')->eq($account) ->andWhere('deleted')->eq('0') ->orderBy('id_desc') diff --git a/module/stakeholder/view/batchcreate.html.php b/module/stakeholder/view/batchcreate.html.php index 05753ada97..8785bbe254 100644 --- a/module/stakeholder/view/batchcreate.html.php +++ b/module/stakeholder/view/batchcreate.html.php @@ -18,8 +18,8 @@ createLink('stakeholder', 'batchcreate', "projectID={$projectID}"), " {$lang->program->createStakeholder}");?>
    - project->selectDept?> - project->selectDeptTitle}'");?> + execution->selectDept?> + execution->selectDeptTitle}'");?>
    parent and $config->systemMode == 'new'):?> createLink('stakeholder', 'batchcreate', "dept=&parent=$project->parent"), $lang->program->importStakeholder, '', 'class="btn btn-primary"');?> diff --git a/module/story/control.php b/module/story/control.php index 59fd014da1..4f770530ad 100644 --- a/module/story/control.php +++ b/module/story/control.php @@ -26,7 +26,7 @@ class story extends control $this->loadModel('user'); $this->loadModel('action'); - if($this->app->openGroup == 'project') $this->app->rawModule = 'projectstory'; + if($this->app->openApp == 'project') $this->app->rawModule = 'projectstory'; } /** @@ -850,7 +850,7 @@ class story extends control $users = $this->user->getPairs('noletter'); /* Set the menu. */ - $from = $this->app->openGroup; + $from = $this->app->openApp; if($from == 'project') { $project = $this->dao->findById((int)$this->session->PRJ)->from(TABLE_PROJECT)->fetch(); @@ -2100,7 +2100,7 @@ class story extends control /** * Ajax get story status. - * + * * @param string $method * @param string $params * @access public diff --git a/module/story/model.php b/module/story/model.php index 36e48915af..68e30f0fa2 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -95,9 +95,9 @@ class storyModel extends model /** * Get test stories. - * - * @param array $storyIdList - * @param int $projectID + * + * @param array $storyIdList + * @param int $projectID * @access public * @return array */ @@ -168,10 +168,10 @@ class storyModel extends model public function getRequierements($productID) { return $this->dao->select('id,title')->from(TABLE_STORY) - ->where('deleted')->eq(0) - ->andWhere('status')->ne('draft') - ->andWhere('product')->eq($productID) - ->andWhere('type')->eq('requirement') + ->where('deleted')->eq(0) + ->andWhere('status')->ne('draft') + ->andWhere('product')->eq($productID) + ->andWhere('type')->eq('requirement') ->fetchPairs(); } @@ -570,8 +570,8 @@ class storyModel extends model /* IF is requirement changed, notify its relation. */ $relations = $this->dao->select('BID')->from(TABLE_RELATION) ->where('AType')->eq('requirement') - ->andWhere('BType')->eq('story') - ->andWhere('relation')->eq('subdivideinto') + ->andWhere('BType')->eq('story') + ->andWhere('relation')->eq('subdivideinto') ->andWhere('AID')->eq($story->id) ->fetchPairs(); @@ -774,10 +774,10 @@ class storyModel extends model /** * Update parent status. - * - * @param int $storyID - * @param int $parentID - * @param bool $createAction + * + * @param int $storyID + * @param int $parentID + * @param bool $createAction * @access public * @return mixed */ @@ -789,7 +789,7 @@ class storyModel extends model $oldParentStory = $this->dao->select('*')->from(TABLE_STORY)->where('id')->eq($parentID)->andWhere('deleted')->eq(0)->fetch(); if(empty($oldParentStory)) return $this->dao->update(TABLE_STORY)->set('parent')->eq('0')->where('id')->eq($storyID)->exec(); - if($oldParentStory->parent != '-1') $this->dao->update(TABLE_STORY)->set('parent')->eq('-1')->where('id')->eq($parentID)->exec(); + if($oldParentStory->parent != '-1') $this->dao->update(TABLE_STORY)->set('parent')->eq('-1')->where('id')->eq($parentID)->exec(); $this->computeEstimate($parentID); $childrenStatus = $this->dao->select('id,status')->from(TABLE_STORY)->where('parent')->eq($parentID)->andWhere('deleted')->eq(0)->fetchPairs('status', 'status'); @@ -936,8 +936,8 @@ class storyModel extends model /** * Compute parent story estimate. - * - * @param int $storyID + * + * @param int $storyID * @access public * @return bool */ @@ -1210,9 +1210,9 @@ class storyModel extends model $now = helper::now(); $oldStory = $this->dao->findById($storyID)->from(TABLE_STORY)->fetch(); if($oldStory->type == 'requirement') - { - foreach($stories as $id) - { + { + foreach($stories as $id) + { $data = new stdclass(); $data->product = $oldStory->product; $data->AType = 'requirement'; @@ -1235,7 +1235,7 @@ class storyModel extends model $data->BVersion = $oldStory->version; $this->dao->insert(TABLE_RELATION)->data($data)->autoCheck()->exec(); - } + } if(dao::isError()) die(js::error(dao::getError())); die(js::locate(helper::createLink('product', 'browse', "productID=$oldStory->product&branch=0&browseType=unclosed&queryID=0&type=story"), 'parent.parent')); @@ -1619,8 +1619,8 @@ class storyModel extends model /** * Assign story. - * - * @param int $storyID + * + * @param int $storyID * @access public * @return array */ @@ -1920,25 +1920,25 @@ class storyModel extends model $tmpStoryType = $storyType == 'story' ? 'requirement' : 'story'; if($browseType == 'bySearch') - { + { $stories2Link = $this->getBySearch($story->product, $story->branch, $queryID, 'id', '', $tmpStoryType); foreach($stories2Link as $key => $story2Link) - { + { if($story2Link->id == $storyID) unset($stories2Link[$key]); if(in_array($story2Link->id, explode(',', $story->$type))) unset($stories2Link[$key]); - } - } + } + } else - { + { $status = $storyType == 'story' ? 'active' : 'all'; $stories2Link = $this->getProductStories($story->product, $story->branch, 0, $status, $tmpStoryType, $orderBy = 'id_desc'); - } + } foreach($stories2Link as $id => $story) - { + { if(in_array($story->id, array_keys($linkedStories))) unset($stories2Link[$id]); if($storyType == 'story' && $story->status == 'draft') unset($stories2Link[$id]); - } + } return $stories2Link; } @@ -2182,7 +2182,7 @@ class storyModel extends model * @param string $orderBy * @param string $projectID * @param string $type requirement|story - * @param string $excludeStories + * @param string $excludeStories * @param object $pager * @access public * @return array @@ -2297,7 +2297,7 @@ class storyModel extends model * @param string $orderBy * @param string $type * @param int $param - * @param string $storyType + * @param string $storyType * @param string $excludeStories * @param object $pager * @access public @@ -2485,9 +2485,9 @@ class storyModel extends model /** * Get parent story pairs. - * - * @param int $productID - * @param string $append + * + * @param int $productID + * @param string $append * @access public * @return void */ @@ -3196,19 +3196,19 @@ class storyModel extends model if($type == 'requirement') { $relations = $this->dao->select('DISTINCT AID, BID')->from(TABLE_RELATION) - ->where('AID')->in(array_keys($stories)) - ->andWhere('AType')->eq('requirement') - ->andWhere('BType')->eq('story') - ->andWhere('relation')->eq('subdivideinto') + ->where('AID')->in(array_keys($stories)) + ->andWhere('AType')->eq('requirement') + ->andWhere('BType')->eq('story') + ->andWhere('relation')->eq('subdivideinto') ->fetchAll(); $group = array(); - foreach($relations as $relation) $group[$relation->AID][] = $relation->BID; + foreach($relations as $relation) $group[$relation->AID][] = $relation->BID; - foreach($stories as $story) + foreach($stories as $story) { if(!isset($group[$story->id])) continue; - $story->children = $this->getByList($group[$story->id]); + $story->children = $this->getByList($group[$story->id]); } } @@ -3281,7 +3281,7 @@ class storyModel extends model $module = $this->app->rawModule == 'projectstory' ? 'projectstory' : 'story'; $canView = common::hasPriv($module, 'view'); - $openGroup = $this->app->rawModule == 'projectstory' ? 'project' : 'product'; + $openApp = $this->app->rawModule == 'projectstory' ? 'project' : 'product'; $storyLink = helper::createLink($module, 'view', "storyID=$story->id"); $account = $this->app->user->account; $id = $col->id; @@ -3347,7 +3347,7 @@ class storyModel extends model case 'id': if($canBatchAction) { - echo html::checkbox('storyIdList', array($story->id => '')) . html::a($storyLink, sprintf('%03d', $story->id), '', "data-group='$openGroup'"); + echo html::checkbox('storyIdList', array($story->id => '')) . html::a($storyLink, sprintf('%03d', $story->id), '', "data-app='$openApp'"); } else { @@ -3365,7 +3365,7 @@ class storyModel extends model if($story->branch and isset($branches[$story->branch])) echo "{$branches[$story->branch]} "; if($story->module and isset($modulePairs[$story->module])) echo "{$modulePairs[$story->module]} "; if($story->parent > 0) echo '' . $this->lang->story->childrenAB . ' '; - echo $canView ? html::a($storyLink, $story->title, '', "style='color: $story->color' data-group='$openGroup'") : "{$story->title}"; + echo $canView ? html::a($storyLink, $story->title, '', "style='color: $story->color' data-app='$openApp'") : "{$story->title}"; if(!empty($story->children)) echo ''; break; case 'plan': @@ -3895,7 +3895,7 @@ class storyModel extends model * @access public * @return int */ - public function getStoryRelationCounts($storyID, $storyType = '') + public function getStoryRelationCounts($storyID, $storyType = '') { $selectField = ($storyType == 'story') ? 'AID' : 'BID'; $conditionField = ($storyType == 'story') ? 'BID' : 'AID'; @@ -3959,7 +3959,7 @@ class storyModel extends model public function replaceURLang($type) { if($type == 'requirement') - { + { $storyLang = $this->lang->story; $SRCommon = $this->lang->SRCommon; $URCommon = $this->lang->URCommon; @@ -4000,7 +4000,7 @@ class storyModel extends model $storyLang->report->charts['storysPerProduct'] = str_replace($SRCommon, $URCommon, $storyLang->report->charts['storysPerProduct']); $storyLang->report->charts['storysPerModule'] = str_replace($SRCommon, $URCommon, $storyLang->report->charts['storysPerModule']); - $storyLang->report->charts['storysPerSource'] = str_replace($SRCommon, $URCommon, $storyLang->report->charts['storysPerSource']); + $storyLang->report->charts['storysPerSource'] = str_replace($SRCommon, $URCommon, $storyLang->report->charts['storysPerSource']); } } } diff --git a/module/story/view/track.html.php b/module/story/view/track.html.php index 8ec9a00f8a..20abbd6200 100644 --- a/module/story/view/track.html.php +++ b/module/story/view/track.html.php @@ -18,7 +18,7 @@ app->rawModule == 'projectstory' ? "style='overflow: unset; text-align: left'" : '';?> - app->rawModule == 'projectstory' ? 'project' : 'product';?> + app->rawModule == 'projectstory' ? 'project' : 'product';?> app->rawModule == 'projectstory' ? 'projectstory' : 'story';?>
    - goback, $this->createLink('group', 'browse')); echo html::hidden('foo'); // Just a var, to make sure $_POST is not empty. diff --git a/module/index/css/index.css b/module/index/css/index.css index 635d256e32..c70dcd178c 100644 --- a/module/index/css/index.css +++ b/module/index/css/index.css @@ -36,12 +36,12 @@ body.menu-hide {padding-left: 0;} #executionList {max-height: 270px; min-height: 270px;} } -#pages {position: fixed; left: 96px; bottom: 0; right: 0; top: 0;} -.page-tab {position: absolute; left: 0; bottom: 40px; right: 0; top: 0; background-color: #efefef;} -.menu-hide #pages {left: 40px} +#apps {position: fixed; left: 96px; bottom: 0; right: 0; top: 0;} +.app-container {position: absolute; left: 0; bottom: 40px; right: 0; top: 0; background-color: #efefef;} +.menu-hide #apps {left: 40px} -#pagesBar {position: fixed; left: 96px; bottom: 0; right: 0; height: 40px; z-index: 1012; background: #fff; border-top: 1px solid #eff1f7;} -.menu-hide #pagesBar {left: 40px} +#appsBar {position: fixed; left: 96px; bottom: 0; right: 0; height: 40px; z-index: 1012; background: #fff; border-top: 1px solid #eff1f7;} +.menu-hide #appsBar {left: 40px} #bars {position: absolute; left: 0; top: 0; bottom: 0; padding: 0 5px} #bars > li {padding: 8px 5px;} #bars > li > a {height: 24px; color: #fff; background: #3c4353; padding: 2px 8px; line-height: 20px; border-radius: 2px;} diff --git a/module/index/js/index.js b/module/index/js/index.js index bbe1de2407..0132a3c995 100644 --- a/module/index/js/index.js +++ b/module/index/js/index.js @@ -1,65 +1,65 @@ (function() { /* Init variables */ - var openedTabs = {}; // Key-value to save group-tab pairs - var groupsMap = {}; // Key-value to save group-menu pairs - var openedTabZIndex = 10; // Last opened tab z-index - var defaultTabGroup; // Default tab group - var lastOpenedGroup; // Last opened tab group + var openedApps = {}; // Key-value to save appCode-app pairs + var appsMap = {}; // Key-value to save opened appCode-app pairs + var openedAppZIndex = 10; // Last opened app z-index + var defaultApp; // Default app code + var lastOpenedApp; // Last opened app code /** - * Init menu list + * Init apps menu list */ - function initMenuList() + function initAppsMenu() { var $helpLink = $('#helpLink'); - groupsMap.help = + appsMap.help = { - group: 'help', + code: 'help', icon: 'icon-help', url: $helpLink.attr('href'), external: true, text: $helpLink.text(), - pageUrl: config.webRoot + '#open=help' + appUrl: config.webRoot + '#app=help' }; var $menuMainNav = $('#menuMainNav').empty(); - window.menuItems.forEach(function(item) + window.appsMenuItems.forEach(function(item) { if(item === 'divider') return $menuMainNav.append('
  • '); var $link= $('') - .attr('data-group', item.group) - .attr('class', 'show-in-tab') + .attr('data-app', item.code) + .attr('class', 'show-in-app') .html(item.title); item.icon = ($link.find('.icon').attr('class') || '').replace('icon ', ''); item.text = $link.text().trim(); $link.html('' + item.text + ''); - groupsMap[item.group] = item; + appsMap[item.code] = item; - $('
  • ').attr('data-group', item.group) + $('
  • ').attr('data-app', item.code) .attr('title', item.text) .append($link) .appendTo($menuMainNav); - if(!defaultTabGroup) defaultTabGroup = item.group; + if(!defaultApp) defaultApp = item.code; }); } /** - * Get tab group from url + * Get app app code from url * @param {String} urlOrModuleName Url string * @return {String} */ - function getGroupFromUrl(urlOrModuleName) + function getAppCodeFromUrl(urlOrModuleName) { - var group = window.navGroup[urlOrModuleName]; - if(group) return group; + var code = window.navGroup[urlOrModuleName]; + if(code) return code; var link = $.parseLink(urlOrModuleName); if(!link.moduleName || link.isOnlyBody) return ''; - if(link.hash && link.hash.indexOf('open=') === 0) return link.hash.substr(5); + if(link.hash && link.hash.indexOf('app=') === 0) return link.hash.substr(5); /* Handling special situations */ var moduleName = link.moduleName; @@ -138,201 +138,201 @@ var myMethods = 'todocalendar|effortcalendar|todo|task|story|bug|testtask|testcase|execution|issue|risk|dynamic|profile'; if(moduleName === 'user' && myMethods.indexOf(methodLowerCase) != -1) return 'my'; - group = window.navGroup[moduleName] || moduleName || urlOrModuleName; - return groupsMap[group] ? group : ''; + code = window.navGroup[moduleName] || moduleName || urlOrModuleName; + return appsMap[code] ? code : ''; } /** - * Open tab - * @param {string} [url] Url to open in tab - * @param {string} [group] The group of target tab to open + * Open app + * @param {string} [url] Url to open + * @param {string} [appCode] The code of target app to open * @return {void} */ - function openTab(url, group) + function openApp(url, appCode) { /* Check params */ - if(!group) + if(!appCode) { - if(groupsMap[url]) + if(appsMap[url]) { - group = url; + appCode = url; url = ''; } else { - group = getGroupFromUrl(url); - if(!group) return false; + appCode = getAppCodeFromUrl(url); + if(!appCode) return false; } } - /* Set openGroup cookie */ - $.cookie('openGroup', group, {expires: config.cookieLife, path: config.webRoot}); + /* Set openApp cookie */ + $.cookie('openApp', appCode, {expires: config.cookieLife, path: config.webRoot}); /* Highlight at main menu */ var $menuMainNav = $('#menuMainNav'); var $lastActiveNav = $menuMainNav.find('li.active'); - if($lastActiveNav.data('group') !== group) + if($lastActiveNav.data('app') !== appCode) { $lastActiveNav.removeClass('active'); - $menuMainNav.find('li[data-group="' + group + '"]').addClass('active'); + $menuMainNav.find('li[data-app="' + appCode + '"]').addClass('active'); } - /* Create pate tab object and store it */ - var tab = openedTabs[group]; - if(!tab) + /* Create pate app object and store it */ + var app = openedApps[appCode]; + if(!app) { var $iframe = $( [ '' ].join(' ')); - var $page = $('
    ') + var $app = $('
    ') .append($iframe) - .appendTo('#pages'); + .appendTo('#apps'); - tab = $.extend({$iframe: $iframe, $page: $page, group: group}, groupsMap[group]); - openedTabs[group] = tab; + app = $.extend({$iframe: $iframe, $app: $app, code: appCode}, appsMap[appCode]); + openedApps[appCode] = app; /* If first show without url, then use the default url */ - if(!url) url = groupsMap[group].url; + if(!url) url = appsMap[appCode].url; } - /* Show page tab and update iframe source */ - if(url) reloadTab(group, url); - tab.zIndex = openedTabZIndex++; - tab.$page.show().css('z-index', tab.zIndex); + /* Show page app and update iframe source */ + if(url) reloadApp(appCode, url); + app.zIndex = openedAppZIndex++; + app.$app.show().css('z-index', app.zIndex); /* Update task bar */ var $bars = $('#bars'); - var $bar = $('#tabBar-' + group); + var $bar = $('#appBar-' + appCode); if(!$bar.length) { var $link= $('') - .attr('data-group', group) - .attr('class', 'show-in-tab') - .html(tab.text); - $bar = $('
  • ').attr('data-group', group) - .attr('id', 'tabBar-' + group) + .attr('data-app', appCode) + .attr('class', 'show-in-app') + .html(app.text); + $bar = $('
  • ').attr('data-app', appCode) + .attr('id', 'appBar-' + appCode) .append($link) .appendTo($bars); } var $lastActiveBar = $bars.find('li.active'); - if($lastActiveBar.data('group') !== group) + if($lastActiveBar.data('app') !== appCode) { $lastActiveBar.removeClass('active'); - $bars.find('li[data-group="' + group + '"]').addClass('active'); + $bars.find('li[data-app="' + appCode + '"]').addClass('active'); } - tab.$bar = $bar; + app.$bar = $bar; - /* Update tab state */ - tab.show = true; - if(lastOpenedGroup !== group) + /* Update app state */ + app.show = true; + if(lastOpenedApp !== appCode) { - lastOpenedGroup = group; - updateTabUrl(group); + lastOpenedApp = appCode; + updateAppUrl(appCode); } return true; } /** - * Get last opened tab - * @param {boolean} [onlyShowed] If set to true then only get last tab from tabs are showed - * @returns {object} The opened tab info object + * Get last opened app + * @param {boolean} [onlyShowed] If set to true then only get last app from apps are showed + * @returns {object} The opened app info object */ - function getLastTab(onlyShowed) + function getLastApp(onlyShowed) { var lastShowIndex = 0; - var lastTab = null; - for(var group in openedTabs) + var lastApp = null; + for(var appCode in openedApps) { - var tab = openedTabs[group]; - if((!onlyShowed || tab.show) && lastShowIndex < tab.zIndex && !tab.closed) + var app = openedApps[appCode]; + if((!onlyShowed || app.show) && lastShowIndex < app.zIndex && !app.closed) { - lastShowIndex = tab.zIndex; - lastTab = tab; + lastShowIndex = app.zIndex; + lastApp = app; } } - return lastTab; + return lastApp; } /** - * Hide tab - * @param {string} group The group of target tab to hide + * Hide app + * @param {string} appCode The app code of target app to hide * @return {void} */ - function hideTab(group) + function hideApp(appCode) { - var tab = openedTabs[group]; - if(!tab || !tab.show) return; + var app = openedApps[appCode]; + if(!app || !app.show) return; - tab.$page.hide(); - tab.show = false; - lastOpenedGroup = null; + app.$app.hide(); + app.show = false; + lastOpenedApp = null; - /* Active last tab */ - var lastTab = getLastTab(true) || getLastTab(); - showTab(lastTab ? lastTab.group : defaultTabGroup); + /* Active last app */ + var lastApp = getLastApp(true) || getLastApp(); + showApp(lastApp ? lastApp.code : defaultApp); } /** - * Show tab - * @param {string} group The group of target tab to show + * Show app + * @param {string} appCode The app code of target app to show * @return {void} */ - function showTab(group) + function showApp(appCode) { - return openTab('', group); + return openApp('', appCode); } /** - * Toggle tab - * @param {string} group The group of target tab to toggle + * Toggle app + * @param {string} appCode The app code of target app to toggle * @return {void} */ - function toggleTab(group) + function toggleApp(appCode) { - var tab = openedTabs[group]; - if(!tab || tab.group !== lastOpenedGroup) showTab(group); - else hideTab(group); + var app = openedApps[appCode]; + if(!app || app.code !== lastOpenedApp) showApp(appCode); + else hideApp(appCode); } /** - * Close tab - * @param {string} group The group of target tab to close + * Close app + * @param {string} appCode The app code of target app to close */ - function closeTab(group) + function closeApp(appCode) { - group = group || lastOpenedGroup; - var tab = openedTabs[group]; - if(!tab) return; + appCode = appCode || lastOpenedApp; + var app = openedApps[appCode]; + if(!app) return; - tab.closed = true; - hideTab(group); - tab.$page.remove(); - tab.$bar.remove(); - delete openedTabs[group]; + app.closed = true; + hideApp(appCode); + app.$app.remove(); + app.$bar.remove(); + delete openedApps[appCode]; } /** - * Reload tab - * @param {string} group The group of target tab to reload + * Reload app + * @param {string} appCode The app code of target app to reload * @param {string|boolean} [url] The new url to load, it's optional * @return {void} */ - function reloadTab(group, url) + function reloadApp(appCode, url) { - var tab = openedTabs[group]; - if(!tab) return; + var app = openedApps[appCode]; + if(!app) return; - if(url === true) url = tab.url; - var iframe = tab.$iframe[0]; + if(url === true) url = app.url; + var iframe = app.$iframe[0]; try { @@ -341,64 +341,64 @@ } catch(_) { - iframe.src = url || tab.url; + iframe.src = url || app.url; } } /** - * Update browser url and title for the given tab - * @param {string} group The group of target tab to update url - * @param {string|boolean} [url] The new url of the tab - * @param {string|boolean} [title] The new title of the tab + * Update browser url and title for the given app + * @param {string} appCode The app code of target app to update url + * @param {string|boolean} [url] The new url of the app + * @param {string|boolean} [title] The new title of the app * @return {void} */ - function updateTabUrl(group, url, title) + function updateAppUrl(appCode, url, title) { - var tab = openedTabs[group]; - if(!tab) return; + var app = openedApps[appCode]; + if(!app) return; - if(url) tab.pageUrl = url; - else url = tab.pageUrl; - if(title) tab.pageTitle = title; - else title = tab.pageTitle || tab.text; + if(url) app.appUrl = url; + else url = app.appUrl; + if(title) app.appTitle = title; + else title = app.appTitle || app.text; - if(url && url.indexOf('#') < 0) url = url + '#open=' + group; - if(lastOpenedGroup === group) + if(url && url.indexOf('#') < 0 && getAppCodeFromUrl(url) !== appCode) url = url + '#app=' + appCode; + if(lastOpenedApp === appCode) { - if(location.url !== url) history.replaceState({}, title, url); + if(location.url !== url) history.replaceState({app: appCode}, title, url); document.title = title; } } - /* Bind helper methods to global object "$.tabs" */ - $.tabs = window.tabs = + /* Bind helper methods to global object "$.apps" */ + $.apps = window.apps = { - show: showTab, - open: openTab, - hide: hideTab, - toggle: toggleTab, - close: closeTab, - reload: reloadTab, - updateUrl: updateTabUrl, - getGroup: getGroupFromUrl, - getLastTab: getLastTab, - openedTabs: openedTabs, - groupsMap: groupsMap + show: showApp, + open: openApp, + hide: hideApp, + toggle: toggleApp, + close: closeApp, + reload: reloadApp, + updateUrl: updateAppUrl, + getAppCode: getAppCodeFromUrl, + getLastApp: getLastApp, + openedApps: openedApps, + appsMap: appsMap }; /* Init after current page load */ $(function() { - initMenuList(); + initAppsMenu(); /* Bind events */ - $(document).on('click', '.open-in-tab,.show-in-tab', function(e) + $(document).on('click', '.open-in-app,.show-in-app', function(e) { var $link = $(this); - if($link.is('[data-modal],[data-toggle],[data-tab],.iframe,.not-in-tab')) return; - var url = $link.hasClass('show-in-tab') ? '' : ($link.attr('href') || $link.data('url')); + if($link.is('[data-modal],[data-toggle],.iframe,.not-in-app')) return; + var url = $link.hasClass('show-in-app') ? '' : ($link.attr('href') || $link.data('url')); if(url && url.indexOf('onlybody=yes') > 0) return; - if(openTab(url, $link.data('group'))) + if(openApp(url, $link.data('app'))) { e.preventDefault(); if($link.closest('#userNav').length) @@ -407,19 +407,19 @@ setTimeout(function(){$menu.removeClass('hidden')}, 200); } } - }).on('contextmenu', '.open-in-tab,.show-in-tab', function(event) + }).on('contextmenu', '.open-in-app,.show-in-app', function(event) { var $btn = $(this); - var group = $btn.data('group'); - if(!group) return; + var appCode = $btn.data('app'); + if(!appCode) return; - var lang = window.tabsLang; - var tab = openedTabs[group]; - var items = [{label: lang.open, disabled: tab && lastOpenedGroup === group, onClick: function(){showTab(group)}}]; - if(tab) + var lang = window.appsLang; + var app = openedApps[appCode]; + var items = [{label: lang.open, disabled: app && lastOpenedApp === appCode, onClick: function(){showApp(appCode)}}]; + if(app) { - items.push({label: lang.reload, onClick: function(){reloadTab(group)}}); - if(group !== 'my') items.push({label: lang.close, onClick: function(){closeTab(group)}}); + items.push({label: lang.reload, onClick: function(){reloadApp(appCode)}}); + if(appCode !== 'my') items.push({label: lang.close, onClick: function(){closeApp(appCode)}}); } var options = {event: event, onClickItem: function(_item, _$item, e){e.preventDefault();}}; @@ -430,7 +430,7 @@ if(pos === 'bar') { options.x = bounding.left; - options.y = bounding.top - (group === 'my' ? 65 : 92); + options.y = bounding.top - (appCode === 'my' ? 65 : 92); } else { @@ -442,14 +442,14 @@ event.preventDefault(); }); - /* Redirect or open default tab after document load */ + /* Redirect or open default app after document load */ var defaultOpenUrl = window.defaultOpen; - if(!defaultOpenUrl && location.hash.indexOf('#open=') === 0) + if(!defaultOpenUrl && location.hash.indexOf('#app=') === 0) { - defaultOpenUrl = decodeURIComponent(location.hash.substr(6)); + defaultOpenUrl = decodeURIComponent(location.hash.substr(5)); } - if(defaultOpenUrl) openTab(defaultOpenUrl); - else openTab(defaultTabGroup); + if(defaultOpenUrl) openApp(defaultOpenUrl); + else openApp(defaultApp); }); }()); @@ -662,17 +662,17 @@ $(function() /* Change the search object according to the module and method. */ function changeSearchObject() { - var tabInfo = $.tabs.getLastTab(); - var tabPageModuleName = tabInfo.$iframe[0].contentWindow.config.currentModule; - var tabPageMethodName = tabInfo.$iframe[0].contentWindow.config.currentMethod; + var appInfo = $.apps.getLastApp(); + var appPageModuleName = appInfo.$iframe[0].contentWindow.config.currentModule; + var appPageMethodName = appInfo.$iframe[0].contentWindow.config.currentMethod; - var searchType = tabPageModuleName; - if(tabPageModuleName == 'product' && tabPageMethodName == 'browse') var searchType = 'story'; + var searchType = appPageModuleName; + if(appPageModuleName == 'product' && appPageMethodName == 'browse') var searchType = 'story'; var projectMethod = 'task|story|bug|build'; - if(tabPageModuleName == 'project' && projectMethod.indexOf(tabPageMethodName) != -1) var searchType = tabPageMethodName; + if(appPageModuleName == 'project' && projectMethod.indexOf(appPageMethodName) != -1) var searchType = appPageMethodName; - if(tabPageModuleName == 'my' || tabPageModuleName == 'user') var searchType = tabPageMethodName; + if(appPageModuleName == 'my' || appPageModuleName == 'user') var searchType = appPageMethodName; if(searchObjectList.indexOf(',' + searchType + ',') == -1) var searchType = 'bug'; diff --git a/module/index/lang/de.php b/module/index/lang/de.php index 17e57c1c30..e5e880f07e 100644 --- a/module/index/lang/de.php +++ b/module/index/lang/de.php @@ -3,10 +3,10 @@ $lang->index->common = 'Home'; $lang->index->index = 'Home'; $lang->index->search = 'Please input'; -$lang->index->tab = new stdClass(); -$lang->index->tab->open = 'Open'; -$lang->index->tab->reload = 'Reload'; -$lang->index->tab->close = 'Close'; +$lang->index->app = new stdClass(); +$lang->index->app->open = 'Open'; +$lang->index->app->reload = 'Reload'; +$lang->index->app->close = 'Close'; $lang->index->upgradeVersion = 'New version of Zen Tao'; $lang->index->currentVersion = 'Current Version'; diff --git a/module/index/lang/en.php b/module/index/lang/en.php index 17e57c1c30..e5e880f07e 100644 --- a/module/index/lang/en.php +++ b/module/index/lang/en.php @@ -3,10 +3,10 @@ $lang->index->common = 'Home'; $lang->index->index = 'Home'; $lang->index->search = 'Please input'; -$lang->index->tab = new stdClass(); -$lang->index->tab->open = 'Open'; -$lang->index->tab->reload = 'Reload'; -$lang->index->tab->close = 'Close'; +$lang->index->app = new stdClass(); +$lang->index->app->open = 'Open'; +$lang->index->app->reload = 'Reload'; +$lang->index->app->close = 'Close'; $lang->index->upgradeVersion = 'New version of Zen Tao'; $lang->index->currentVersion = 'Current Version'; diff --git a/module/index/lang/fr.php b/module/index/lang/fr.php index a87f2503ed..311364b375 100644 --- a/module/index/lang/fr.php +++ b/module/index/lang/fr.php @@ -3,10 +3,10 @@ $lang->index->common = 'Accueil'; $lang->index->index = 'Accueil'; $lang->index->search = 'Please input'; -$lang->index->tab = new stdClass(); -$lang->index->tab->open = 'Open'; -$lang->index->tab->reload = 'Reload'; -$lang->index->tab->close = 'Close'; +$lang->index->app = new stdClass(); +$lang->index->app->open = 'Open'; +$lang->index->app->reload = 'Reload'; +$lang->index->app->close = 'Close'; $lang->index->upgradeVersion = 'New version of Zen Tao'; $lang->index->currentVersion = 'Current Version'; diff --git a/module/index/lang/vi.php b/module/index/lang/vi.php index 80d30f4c35..593aab2889 100644 --- a/module/index/lang/vi.php +++ b/module/index/lang/vi.php @@ -3,10 +3,10 @@ $lang->index->common = 'Trang chủ'; $lang->index->index = 'Trang chủ'; $lang->index->search = 'Please input'; -$lang->index->tab = new stdClass(); -$lang->index->tab->open = 'Open'; -$lang->index->tab->reload = 'Reload'; -$lang->index->tab->close = 'Close'; +$lang->index->app = new stdClass(); +$lang->index->app->open = 'Open'; +$lang->index->app->reload = 'Reload'; +$lang->index->app->close = 'Close'; $lang->index->upgradeVersion = 'New version of Zen Tao'; $lang->index->currentVersion = 'Current Version'; diff --git a/module/index/lang/zh-cn.php b/module/index/lang/zh-cn.php index 8e87f9e4da..f324e1c1ea 100644 --- a/module/index/lang/zh-cn.php +++ b/module/index/lang/zh-cn.php @@ -3,10 +3,10 @@ $lang->index->common = '首页'; $lang->index->index = '首页'; $lang->index->search = '请输入'; -$lang->index->tab = new stdClass(); -$lang->index->tab->open = '打开'; -$lang->index->tab->reload = '刷新'; -$lang->index->tab->close = '关闭'; +$lang->index->app = new stdClass(); +$lang->index->app->open = '打开'; +$lang->index->app->reload = '刷新'; +$lang->index->app->close = '关闭'; $lang->index->upgradeVersion = '禅道新版本'; $lang->index->currentVersion = '当前版本'; diff --git a/module/index/lang/zh-tw.php b/module/index/lang/zh-tw.php index e64d7bae29..3b01643441 100644 --- a/module/index/lang/zh-tw.php +++ b/module/index/lang/zh-tw.php @@ -3,10 +3,10 @@ $lang->index->common = '首頁'; $lang->index->index = '首頁'; $lang->index->search = '請輸入'; -$lang->index->tab = new stdClass(); -$lang->index->tab->open = '打開'; -$lang->index->tab->reload = '刷新'; -$lang->index->tab->close = '關閉'; +$lang->index->app = new stdClass(); +$lang->index->app->open = '打開'; +$lang->index->app->reload = '刷新'; +$lang->index->app->close = '關閉'; $lang->index->upgradeVersion = '禪道新版本'; $lang->index->currentVersion = '當前版本'; diff --git a/module/index/view/index.html.php b/module/index/view/index.html.php index 13157f0e37..a9a2a98976 100644 --- a/module/index/view/index.html.php +++ b/module/index/view/index.html.php @@ -15,15 +15,15 @@ $this->app->loadConfig('sso'); if(!empty($config->sso->redirect)) js::set('ssoRedirect', $config->sso->redirect); js::set('navGroup', $lang->navGroup); -js::set('tabsLang', $lang->index->tab); -js::set('menuItems', commonModel::getMainNavList($app->rawModule)); +js::set('appsLang', $lang->index->app); +js::set('appsMenuItems', commonModel::getMainNavList($app->rawModule)); js::set('defaultOpen', $open); ?> config->bizVersion)):?> -
    +
    -
    +
    createLink($module, 'unbindWhielist', "id=$user->id&confirm=no"), '', 'hiddenwin', "title='{$lang->personnel->delete}' class='{$deleteClass}' $openGroup"); + echo html::a($this->createLink($module, 'unbindWhielist', "id=$user->id&confirm=no"), '', 'hiddenwin', "title='{$lang->personnel->delete}' class='{$deleteClass}' $openApp"); ?>
    id"), sprintf('%03d', $release->id));?> - marker ? " " : ''; echo html::a(inlink('view', "release=$release->id"), $release->name, '', "title='$release->name'") . $flagIcon; ?> PRJName;?>project) ? $release->buildName : html::a($this->createLink('build', 'view', "buildID=$release->buildID"), $release->buildName);?>projectName;?>execution) ? $release->buildName : html::a($this->createLink('build', 'view', "buildID=$release->buildID"), $release->buildName);?> '>branch];?>
    release->build;?> - project) ? html::a($this->createLink('build', 'view', "buildID=$release->buildID"), $release->buildName, '_blank') : $release->buildName;?> + execution) ? html::a($this->createLink('build', 'view', "buildID=$release->buildID"), $release->buildName, '_blank') : $release->buildName;?>
    @@ -62,14 +62,14 @@ story->statusList, $requirement->status);?> - story->noRequirement : html::a($this->createLink($module, 'view', "storyID=$requirement->id"), $requirement->title, '', "title=$requirement->title data-group='$openGroup'");?> + story->noRequirement : html::a($this->createLink($module, 'view', "storyID=$requirement->id"), $requirement->title, '', "title=$requirement->title data-app='$openApp'");?> $story):?> ';?> - + maxVersion)):?> diff --git a/module/story/view/view.html.php b/module/story/view/view.html.php index 544a3fa3cd..47798340f7 100644 --- a/module/story/view/view.html.php +++ b/module/story/view/view.html.php @@ -50,14 +50,14 @@ app->rawModule == 'projectstory') { $otherParam = "storyID=&projectID={$this->session->PRJ}"; - $openGroup = 'project'; + $openApp = 'project'; } ?> - product}&branch={$story->branch}&moduleID={$story->module}&$otherParam", "" . $lang->story->create, '', "class='btn btn-primary' data-group='$openGroup'"); ?> + product}&branch={$story->branch}&moduleID={$story->module}&$otherParam", "" . $lang->story->create, '', "class='btn btn-primary' data-app='$openApp'"); ?> diff --git a/module/testsuite/control.php b/module/testsuite/control.php index e5748e0109..85330ab0de 100644 --- a/module/testsuite/control.php +++ b/module/testsuite/control.php @@ -32,7 +32,7 @@ class testsuite extends control parent::__construct($moduleName, $methodName); /* Set testtask menu group. */ - $this->projectID = isset($_GET['PRJ']) ? $_GET['PRJ'] : 0; + $this->projectID = isset($_GET['project']) ? $_GET['project'] : 0; if(!$this->projectID) { $this->app->loadConfig('qa'); @@ -69,7 +69,7 @@ class testsuite extends control $this->session->set('testsuiteList', $this->app->getURI(true)); /* Set menu. */ - $projectID = $this->lang->navGroup->testreport == 'qa' ? 0 : $this->session->PRJ; + $projectID = $this->lang->navGroup->testreport == 'qa' ? 0 : $this->session->project; $this->view->products = $this->products = $this->loadModel('product')->getProductPairsByProject($projectID); if(empty($this->products)) die($this->locate($this->createLink('product', 'showErrorNone', "fromModule=testsuite"))); $productID = $this->product->saveState($productID, $this->products); @@ -136,7 +136,7 @@ class testsuite extends control } /* Set menu. */ - $this->view->products = $this->products = $this->loadModel('product')->getProductPairsByProject($this->session->PRJ); + $this->view->products = $this->products = $this->loadModel('product')->getProductPairsByProject($this->session->project); $productID = $this->product->saveState($productID, $this->products); $this->testsuite->setMenu($this->products, $productID); @@ -169,7 +169,7 @@ class testsuite extends control if($suite->type == 'private' and $suite->addedBy != $this->app->user->account and !$this->app->user->admin) die(js::error($this->lang->error->accessDenied) . js::locate('back')); $productID = $suite->product; - $this->view->products = $this->products = $this->loadModel('product')->getProductPairsByProject($this->session->PRJ); + $this->view->products = $this->products = $this->loadModel('product')->getProductPairsByProject($this->session->project); $this->testsuite->setMenu($this->products, $productID); /* Save session. */ @@ -239,7 +239,7 @@ class testsuite extends control if($suite->type == 'private' and $suite->addedBy != $this->app->user->account and !$this->app->user->admin) die(js::error($this->lang->error->accessDenied) . js::locate('back')); /* Get suite info. */ - $this->view->products = $this->products = $this->loadModel('product')->getProductPairsByProject($this->session->PRJ); + $this->view->products = $this->products = $this->loadModel('product')->getProductPairsByProject($this->session->project); $productID = $this->product->saveState($suite->product, $this->products); /* Set menu. */ @@ -319,7 +319,7 @@ class testsuite extends control $this->session->set('caseList', $this->app->getURI(true)); /* Get suite and product id. */ - $this->view->products = $this->products = $this->loadModel('product')->getProductPairsByProject($this->session->PRJ); + $this->view->products = $this->products = $this->loadModel('product')->getProductPairsByProject($this->session->project); $suite = $this->testsuite->getById($suiteID); $productID = $this->product->saveState($suite->product, $this->products); diff --git a/module/testsuite/model.php b/module/testsuite/model.php index f73a5f6338..5380570eb4 100644 --- a/module/testsuite/model.php +++ b/module/testsuite/model.php @@ -101,7 +101,7 @@ class testsuiteModel extends model { $suite = fixer::input('post') ->stripTags($this->config->testsuite->editor->create['id'], $this->config->allowedTags) - ->setIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa', 'PRJ', $this->session->PRJ) + ->setIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa', 'project', $this->session->project) ->add('product', (int)$productID) ->add('addedBy', $this->app->user->account) ->add('addedDate', helper::now()) @@ -133,7 +133,7 @@ class testsuiteModel extends model { return $this->dao->select("*")->from(TABLE_TESTSUITE) ->where('product')->eq((int)$productID) - ->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi() + ->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('project')->eq($this->session->project)->fi() ->andWhere('deleted')->eq(0) ->andWhere("(`type` = 'public' OR (`type` = 'private' and addedBy = '{$this->app->user->account}'))") ->orderBy($orderBy) @@ -242,7 +242,7 @@ class testsuiteModel extends model $cases = $this->dao->select('t1.*,t2.version as caseVersion')->from(TABLE_CASE)->alias('t1') ->leftJoin(TABLE_SUITECASE)->alias('t2')->on('t1.id=t2.case') ->where('t2.suite')->eq($suiteID) - ->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('t1.PRJ')->eq($this->session->PRJ)->fi() + ->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('t1.project')->eq($this->session->project)->fi() ->andWhere('t1.product')->eq($suite->product) ->andWhere('t1.product')->eq($suite->product) ->andWhere('t1.deleted')->eq(0) @@ -286,7 +286,7 @@ class testsuiteModel extends model $linkedCases = $this->getLinkedCases($suite->id, 'id_desc', null, $append = false); $cases = $this->dao->select('*')->from(TABLE_CASE)->where($query) ->andWhere('id')->notIN(array_keys($linkedCases)) - ->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi() + ->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('project')->eq($this->session->project)->fi() ->andWhere('deleted')->eq(0) ->orderBy('id desc') ->page($pager) @@ -323,7 +323,7 @@ class testsuiteModel extends model { $importedCases = $this->dao->select('fromCaseID')->from(TABLE_CASE) ->where('product')->eq($productID) - ->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi() + ->beginIF($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('project')->eq($this->session->project)->fi() ->andWhere('lib')->eq($libID) ->andWhere('fromCaseID')->ne('') ->andWhere('deleted')->eq(0) @@ -357,7 +357,7 @@ class testsuiteModel extends model return $this->dao->select('*')->from(TABLE_CASE)->where('deleted')->eq(0) ->beginIF($browseType != 'bysearch')->andWhere('lib')->eq($libID)->fi() ->beginIF($browseType == 'bysearch')->andWhere($query)->fi() - ->begin($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('PRJ')->eq($this->session->PRJ)->fi() + ->begin($this->config->systemMode == 'new' and $this->lang->navGroup->testsuite != 'qa')->andWhere('project')->eq($this->session->project)->fi() ->andWhere('product')->eq(0) ->andWhere('id')->notIN($importedCases) ->orderBy($orderBy) diff --git a/module/user/view/deny.html.php b/module/user/view/deny.html.php index d12708411b..bb6e7abe48 100644 --- a/module/user/view/deny.html.php +++ b/module/user/view/deny.html.php @@ -62,10 +62,10 @@ include '../../common/view/header.lite.html.php'; /* Click my site to modify the left navigation. */ function changeLeftNavigation() { - if(window.parent && window.parent.$.tabs && isOnlybody) + if(window.parent && window.parent.$.apps && isOnlybody) { - window.parent.$.tabs.close(); - window.parent.$.tabs.open('my'); + window.parent.$.apps.close(); + window.parent.$.apps.open('my'); } else { diff --git a/www/js/zui/min.js b/www/js/zui/min.js index 0f05230840..77ceef761d 100644 --- a/www/js/zui/min.js +++ b/www/js/zui/min.js @@ -1,5 +1,5 @@ /*! - * ZUI: ZUI for Zentao20 - v1.9.2 - 2021-02-02 + * ZUI: ZUI for Zentao20 - v1.9.2 - 2021-03-04 * http://openzui.com * GitHub: https://github.com/easysoft/zui.git * Copyright (c) 2021 cnezsoft.com; Licensed MIT @@ -76,4 +76,4 @@ function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"= */ function(t){function e(e){if("string"==typeof e.data){var i=e.handler,n=e.data.toLowerCase().split(" ");e.handler=function(e){if(this===e.target||!/textarea|select/i.test(e.target.nodeName)&&"text"!==e.target.type){var o="keypress"!==e.type&&t.hotkeys.specialKeys[e.which],a=String.fromCharCode(e.which).toLowerCase(),s="",r={};e.altKey&&"alt"!==o&&(s+="alt+"),e.ctrlKey&&"ctrl"!==o&&(s+="ctrl+"),e.metaKey&&!e.ctrlKey&&"meta"!==o&&(s+="meta+"),e.shiftKey&&"shift"!==o&&(s+="shift+"),o?r[s+o]=!0:(r[s+a]=!0,r[s+t.hotkeys.shiftNums[a]]=!0,"shift+"===s&&(r[t.hotkeys.shiftNums[a]]=!0));for(var l=0,h=n.length;l","/":"?","\\":"|"}},t.each(["keydown","keyup","keypress"],function(){t.event.special[this]={add:e}})}(jQuery),function(t){"use strict";function e(e,i){if(e===!1)return e;if(!e)return i;e===!0?e={add:!0,"delete":!0,edit:!0,sort:!0}:"string"==typeof e&&(e=e.split(","));var n;return Array.isArray(e)&&(n={},t.each(e,function(e,i){t.isPlainObject(i)?n[i.action]=i:n[i]=!0}),e=n),t.isPlainObject(e)&&(n={},t.each(e,function(e,i){i?n[e]=t.extend({type:e},s[e],t.isPlainObject(i)?i:null):n[e]=!1}),e=n),i?t.extend(!0,{},i,e):e}function i(e,i,n){return i=i||e.type,t(n||e.template).addClass("tree-action").attr(t.extend({"data-type":i,title:e.title||""},e.attr)).data("action",e)}var n="zui.tree",o=0,a=function(e,i){this.name=n,this.$=t(e),this.getOptions(i),this._init()},s={sort:{template:''},add:{template:''},edit:{template:''},"delete":{template:''}};a.DEFAULTS={animate:null,initialState:"normal",toggleTemplate:''},a.prototype.add=function(e,i,n,o,a){var s,r=t(e),l=this.options;if(r.is("li")?(s=r.children("ul"),s.length||(s=t("
    createLink($module, 'view', "storyID=$storyID"), $story->title, '',"title='$story->title' data-group='$openGroup'");?>createLink($module, 'view', "storyID=$storyID"), $story->title, '',"title='$story->title' data-app='$openApp'");?> tasks as $taskID => $task):?> createLink('task', 'view', "taskID=$taskID"), $task->name, '', "title='$task->name'") . '
    ';?> @@ -78,21 +78,21 @@ maxVersion)):?>
    designs as $designID => $design):?> - createLink('design', 'view', "designID=$designID"), $design->name, '', "title='$design->name'") . '
    ';?> + createLink('design', 'view', "designID=$designID"), $design->name, '', "title='$design->name'") . '
    ';?>
    cases as $caseID => $case):?> - createLink('testcase', 'view', "caseID=$caseID", '', false, $case->PRJ), $case->title, '', "title='$case->title'") . '
    ';?> + createLink('testcase', 'view', "caseID=$caseID", '', false, $case->PRJ), $case->title, '', "title='$case->title'") . '
    ';?>
    revisions as $revision => $repoID):?> - createLink('design', 'revision', "repoID=$revision"), '#'. $revision) . '
    '; - ?> + ?>
    ').addClass(i.attr("class")).append(n.clone())).insertAfter(i)),c){var d=h[0].getBoundingClientRect();l.css({left:d.left,width:h.width()}),l.find(".fixed-header-copy").css({left:o.left-d.left,position:"relative",minWidth:i.width()}),a||h.data("fixHeaderScroll")||(h.data("fixHeaderScroll",1),i.width()>h.width()&&h.on("scroll",function(){e.fixHeader()}))}else l.css({left:o.left,width:o.width});var u=l.find("th");n.find("th").each(function(e){u.eq(e).css("width",t(this).outerWidth())})}else l.remove()},r.prototype.fixFooter=function(){var e,i=this,n=i.getTable(),o=i.$.find(".table-footer");if(i.isDataTable)e=n[0].getBoundingClientRect();else{var a=n.find("tbody");if(!a.length)return;e=a[0].getBoundingClientRect()}var s=i.options.fixFooter;o.toggleClass("fixed-footer",!!r);var r=t.isFunction(s)?s(e,o):e.bottom>window.innerHeight-50-("number"==typeof s?s:i.pageFooterHeight||5);o.toggleClass("fixed-footer",!!r),n.toggleClass("with-footer-fixed",!!r),n.trigger("fixFooter",r);var l=t("body"),h=l.hasClass("body-modal");if(r){var c=n.parent(),d=c.is(".table-responsive");o.css({bottom:i.pageFooterHeight||0,left:d?c[0].getBoundingClientRect().left:e.left,width:d?c.width():e.width}),h&&l.css("padding-bottom",40)}else o.css({width:"",left:0,bottom:0}),h&&l.css("padding-bottom",0)},r.prototype.checkAll=function(e){var i=this,n=i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr");n.each(function(){i.checkRow(t(this),e,!0)}),i.updateCheckUI()},r.prototype.checkRow=function(t,i,n){var o=this;o.isDataTable&&!t.is(".datatable-row-left")&&(t=o.getTable().find('.datatable-row-left[data-index="'+t.data("index")+'"]'));var a=t.find('input[type="checkbox"]');a.length&&!a.is(":disabled")&&(i===e&&(i=!a.is(":checked")),o.isDataTable?o.getTable().find('.datatable-row[data-index="'+t.data("index")+'"]').toggleClass("checked",i):t.toggleClass("checked",i),this.checkItems[t.data("id")]=i,a.prop("checked",i).trigger("change"),n||o.updateCheckUI())},r.prototype.updateCheckUI=function(){var e=this,i=e.getTable(),n=i.find(e.isDataTable?".fixed-left tbody>tr":"tbody>tr").not(".group-summary"),o=!1,a=null,s=0,r=!1,l=n.length;n.each(function(n){var h=t(this),c=h.find('input[type="checkbox"]');r=c.is(":checked");var d=e.isDataTable?i.find('.datatable-row[data-index="'+h.data("index")+'"]'):h;d.toggleClass("checked",r),d.toggleClass("row-check-begin",r&&!o),a&&a.toggleClass("row-check-end",!r&&o),r&&(s+=1),a=d,o=r,l===n+1&&d.toggleClass("row-check-end",r)}),e.$.toggleClass("has-row-checked",s>0).find(".check-all").toggleClass("checked",!(!l||s!==l)),e.updateStatistic(),e.options.onCheckChange&&e.options.onCheckChange()},r.DEFAULTS={checkable:!0,checkOnClickRow:!0,ajaxForm:!1,selectable:!0,fixHeader:!a,fixFooter:!a,iframeWidth:900,replaceId:"self",nestLevelIndent:18,nested:!1,preserveNested:!0,hot:!1,iframeModalTrigger:".iframe"},t.fn.table=function(e){return this.each(function(){var n=t(this),o=n.data(i),a="object"==typeof e&&e;o||n.data(i,o=new r(this,a)),"string"==typeof e&&o[e]()})},r.NAME=i,t.fn.table.Constructor=r,t(function(){t('[data-ride="table"]').table()})}(jQuery,void 0),function(t,e,i){t.fn._ajaxForm=t.fn.ajaxForm;var n={timeout:e.config?e.config.timeout:0,dataType:"json",method:"post"},o="";t.fn.enableForm=function(e,n,o){return e===i&&(e=!0),this.each(function(){var i=t(this);n||i.find('[type="submit"]').attr("disabled",e?null:"disabled"),!o&&i.hasClass("load-indicator")&&i.toggleClass("loading",!e),i.toggleClass("form-disabled",!e)})},t.enableForm=function(e,i,n,o){"string"==typeof e||e instanceof t?e=t(e):(o=n,n=i,i=e,e=t("form")),e.enableForm(i!==!1,n,o)},t.disableForm=function(e,i,n){t.enableForm(e,!1,i,n)};var a=function(e,i,n){"string"==typeof i&&(n=i,i=null),n=n||"show",t.zui.messager?t.zui.messager[n](e,i):alert(e)};t.ajaxForm=function(s,r){var l=t(s);if(l.length>1)return l.each(function(){t.ajaxForm(this,r)});t.isFunction(r)&&(r={complete:r}),r=t.extend({},n,l.data(),r);var h=r.beforeSubmit,c=r.error,d=r.success,u=r.finish;delete r.finish,delete r.success,delete r.onError,delete r.beforeSubmit,r=t.extend({beforeSubmit:function(n,a,s){if(l.enableForm(!1),(h&&h(n,a,s))!==!1){var r={},c=a.find('[type="file"]');r.fileapi=c.length&&c[0].files!==i,r.formdata=e.FormData!==i;var d=r.fileapi&&a.find('input[type="file"]:enabled').filter(function(){return""!==t(this).val()}),u=d.length,f="multipart/form-data",p=a.attr("enctype")==f||a.attr("encoding")==f,g=r.fileapi&&r.formdata,m=u&&!g||p&&!r.formdata;m&&(""==o&&(o=s.url),s.url!=o&&(s.url=o),s.url=s.url.indexOf("&")>=0?s.url+"&HTTP_X_REQUESTED_WITH=XMLHttpRequest":s.url+"?HTTP_X_REQUESTED_WITH=XMLHttpRequest")}},success:function(i,n,o){if((d&&d(i,n,o,l))!==!1){try{"string"==typeof i&&(i=JSON.parse(i))}catch(s){}if(null===i||"object"!=typeof i)return i?alert(i):a("No response.","danger");var h=r.responser?t(r.responser):l.find(".form-responser");h.length||(h=t("#responser"));var c=i.message,f=function(){var n=i.callback;if(n){var o=n.indexOf("("),a=(o>0?n.substr(0,o):n).split("."),s=e,r=a[0];a.length>1&&(r=a[1],"top"===a[0]?s=e.top:"parent"===a[0]&&(s=e.parent));var h=s[r];if(t.isFunction(h)){var c=[];return o>0&&")"==n[n.length-1]&&(c=t.parseJSON("["+n.substring(o+1,n.length-1)+"]")),c.push(i),h.apply(l,c)}}};if("success"===i.result){var p=r.locate||i.locate;if(l.enableForm(!0,!!p),c){var g=l.find('[type="submit"]').first(),m=!1;g.length&&(g.popover({container:"body",trigger:"manual",content:c,tipClass:"popover-in-modal popover-success popover-form-result",placement:i.placement||r.popoverPlacement||"right"}).popover("show"),setTimeout(function(){g.popover("destroy")},r.popoverTime||2e3),m=!0),h.length&&(h.html(''+c+"").show().delay(3e3).fadeOut(100),m=!0),m||a(c,"success")}if(u)return u(i,!0,l);if((r.closeModal||i.closeModal)&&setTimeout(t.zui.closeModal,r.closeModalTime||2e3),f()===!1)return;if(p)if("loadInModal"==p){var v=t(".modal");setTimeout(function(){v.load(v.attr("ref"),function(){t(this).find(".modal-dialog").css("width",t(this).data("width")),t.zui.ajustModalPosition()})},1e3)}else"parent"===p||"top"===p?e[p]&&setTimeout(function(){e[p].location.reload()},1200):"reload"===p?setTimeout(function(){e.location.href=e.location.href},1200):setTimeout(function(){t.tabs?t.tabs.open(p):e.location.href=p},1200);var y=r.ajaxReload||i.ajaxReload;if(y){var b=t(y);b.length&&b.load(e.location.href+" "+y,function(){b.find('[data-toggle="modal"]').modalTrigger()})}}else{if(l.enableForm(),"string"==typeof c)h.length?h.html(''+c+"").show().delay(3e3).fadeOut(100):a(c,"danger");else if("object"==typeof c){var w=!1,x=[];t.each(c,function(e,i){var n=t.isArray(i)?i.join(""):i,o=t("#"+e);if(!o.length)return void x.push(n);var a=e+"Label",s=t("#"+a);if(!s.length){var r=o.closest(".input-group").length,l=o.closest("td").length;s=t('
    ').appendTo(l?o.closest("td"):r?o.closest(".input-group").parent():o.parent())}s.empty().append(n),o.addClass("has-error");var h=function(){var e=t("#"+a);if(e.length)return e.remove(),o.removeClass("has-error"),!0};o.on("change input mousedown",h);var c=t("#"+e+"_chosen");if(c.length&&c.find(".chosen-single,.chosen-choices").addClass("has-error").on("mousedown",function(){h()===!0&&t(this).removeClass("has-error")}),!w){if(o.hasClass("chosen"))o.trigger("chosen:activate");else if(o.is("textarea")&&o.data("keditor")){var d=o.data("keditor");d.focus(),d.edit.doc.body.focus()}else o.focus();w=!0}}),x.length&&a(x.join(";"),"danger")}if(u)return u(i,!1,l);if(f()===!1)return}}},error:function(t,i,n){if((c&&c(t,i,n,l))!==!1){l.enableForm();var o="timeout"==i||"error"==i?e.lang?e.lang.timeout:i:t.responseText+i+n;a(o,"danger")}}},r),l._ajaxForm(r).data("zui.ajaxform",!0),l.on("click","[data-form-action]",function(){l.attr("action",t(this).data("formAction")).submit()})},t.setAjaxForm=function(e,i,n){t.ajaxForm(e,t.isPlainObject(i)?i:{onFinish:i,beforeSubmit:n})},t.fn.ajaxForm=function(e){return this.each(function(){t.ajaxForm(this,e)})},t.fn.setInputRequired=function(){return this.each(function(){var e=t(this),i=e.parent();i.is(".input-control,td")?i.addClass("required"):e.is(".chosen")?e.attr("required",null).next(".chosen-container").addClass("required"):i.addClass("required"),e.attr("required",null);var n=i.closest(".input-group");n.length&&1===n.find(".required,input[required],select[required]").length&&n.addClass("required")})},t(function(){t('.form-ajax,form[data-type="ajax"]').ajaxForm(),setTimeout(function(){var i=e.config.requiredFields,n=t("form");i&&(i=i.split(",")),i&&i.length&&t.each(i,function(t,e){n.find("#"+e).attr("required","required")}),n.find("input[required],select[required],textarea[required]").setInputRequired()},400),t("#hiddenwin"),t('form[target="hiddenwin"]').on("submit",function(){var e=t(this);e.data("zui.ajaxform")||e.enableForm(!1).data("disabledTime",(new Date).getTime())}).on("click",function(){var e=t(this),i=e.data("disabledTime");i&&(new Date).getTime()-i>1e4&&e.enableForm(!0).data("disabledTime",null)})})}(jQuery,window,void 0),function(t){"use strict";var e="zui.searchList",i=function(t,e){if(t&&t.length)for(var i=0;i
    ').append(s)),i.$menu.append(s),i.$menu.removeClass("loading"),i.isLoaded=!0,e&&e(!0)},error:function(){i.$menu.removeClass("loading").append('
    '+(n.errorText||window.lang&&window.lang.timeout)+"
    "),e&&e(!1)}},n.ajax))},n.prototype.scrollTo=function(t){t.length&&t[0].scrollIntoViewIfNeeded&&t[0].scrollIntoViewIfNeeded({behavior:"smooth"})},n.prototype.getItems=function(){return this.$.find(this.options.selector).addClass("search-list-item")},n.prototype.getActiveItem=function(){return this.getItems().filter(".active:first")},n.prototype.search=function(e){var n=this,o=void 0===e||null===e||""===e;n.$.toggleClass("has-search-text",!o);var a=n.getItems().removeClass("active");if(o)a.removeClass("hidden");else{var s=t.trim(e).split(" ");a.each(function(){var e=t(this),n=e.text()+" "+(e.data("key")||e.data("filter"));e.toggleClass("hidden",!i(s,n))})}n.scrollTo(a.not(".hidden").first().addClass("active"))},n.DEFAULTS={selector:".list-group a:not(.not-list-item)",searchBox:".search-box",onSelectItem:null},t.fn.searchList=function(i){return this.each(function(){var o=t(this),a=o.data(e),s="object"==typeof i&&i;a||o.data(e,a=new n(this,s)),"string"==typeof i&&a[i]()})},n.NAME=e,t.fn.searchList.Constructor=n,t(function(){t('[data-ride="searchList"]').searchList()})}(jQuery),function(t){"use strict";var e="zui.labelSelector",i=function(n,o){var a=this;a.name=e,a.$=t(n),o=a.options=t.extend({},i.DEFAULTS,this.$.data(),o),a.$.hide(),a.update()};i.prototype.select=function(t){t+="",this.$wrapper.find(".label.active").removeClass("active"),this.$wrapper.find('.label[data-value="'+t+'"]').addClass("active"),this.$.val(t).trigger("change")},i.prototype.update=function(){var e=this,i=e.options,n=e.$wrapper;if(!n){if(i.wrapper)n=t(i.wrapper);else{var o=e.$.next();n=o.hasClass(".label-selector")?o:t('
    ')}n.parent().length||e.$.after(n),e.$wrapper=n,n.on("click",".label",function(i){var n=e.$.val(),o=t(this).data("value");e.hasEmptyValue!==!1&&o==n&&(o=e.hasEmptyValue),e.select(o),i.preventDefault()})}n.empty();var a=e.$.val();e.hasEmptyValue=!1,e.$.children("option").each(function(){var e=t(this),o={label:e.text(),value:e.val()},s=""===o.value||"0"===o.value,r=t(i.labelTemplate||'');i.labelClass&&!s&&r.addClass(i.labelClass),i.labelCreator?r=i.labelCreator(r):(r.data("option",o).attr("data-value",o.value),s&&!o.label?r.addClass("empty").append(''):r.text(o.label).toggleClass("active",a===o.value)),n.append(r)})},i.DEFAULTS={},t.fn.labelSelector=function(n){return this.each(function(){var o=t(this),a=o.data(e),s="object"==typeof n&&n;a||o.data(e,a=new i(this,s)),"string"==typeof n&&a[n]()})},i.NAME=e,t.fn.labelSelector.Constructor=i,t(function(){t('[data-provide="labelSelector"]').labelSelector()})}(jQuery),function(t){"use strict";var e="zui.fileInput",i=t.BYTE_UNITS={B:1,KB:1024,MB:1048576,GB:1073741824,TB:1099511627776},n=t.formatBytes=function(t,e,n){return void 0===e&&(e=2),n||(n=ts.fileMaxSize&&(h.val(""),(window.bootbox||window).alert(s.fileSizeError.format(n(s.fileMaxSize)))),r.update()}),r.update()};a.prototype.getFile=function(){var t=this.$input.prop("files");return t&&t[0]},a.prototype.update=function(){var t=this,e=t.$,i=t.getFile(),o=!i;e.toggleClass("normal",!o).toggleClass("empty",o),i?(t.oldName=i.name,e.find(".file-title").text(i.name).attr("title",i.name),e.find(".file-size").text(n(i.size)),e.find(".file-editbox").val(i.name).attr("size",i.name.length),t.options.onSelect&&t.options.onSelect(i,t)):e.find(".file-editbox").val("")},a.DEFAULTS={fileMaxSize:0,fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInput=function(i){return this.each(function(){var n=t(this),o=n.data(e),s="object"==typeof i&&i;o||n.data(e,o=new a(this,s)),"string"==typeof i&&o[i]()})},a.NAME=e,t.fn.fileInput.Constructor=a,t(function(){t('[data-provide="fileInput"]').fileInput()});var s="zui.fileInputList",r=function(e,i){var n=this;n.name=s;var o=n.$=t(e);i=n.options=t.extend({},r.DEFAULTS,this.$.data(),i),n.$template=o.find(".file-input").detach(),n.add()};r.prototype.add=function(){var t=this,e=t.options,i=t.$template.clone();"before"===e.appendWay?t.$.prepend(i):t.$.append(i),i.fileInput({fileMaxSize:e.eachFileMaxSize,fileSizeError:e.fileSizeError,onDelete:function(e){e.$.remove(),t.options.onDelete&&t.options.onDelete(e,t)},onSelect:function(e,i){t.add(),t.options.onSelect&&t.options.onSelect(e,i,t)}})},r.DEFAULTS={fileMaxSize:0,eachFileMaxSize:0,appendWay:"after",fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInputList=function(e){return this.each(function(){var i=t(this),n=i.data(s),o="object"==typeof e&&e;n||i.data(s,n=new r(this,o)),"string"==typeof e&&n[e]()})},r.NAME=s,t.fn.fileInputList.Constructor=r,t(function(){t('[data-provide="fileInputList"]').fileInputList()})}(jQuery),function(t){window.config||(window.config={}),t.createLink=window.createLink=function(e,n,o,a,s,r,l){if("object"==typeof e)return t.createLink(e.moduleName,e.methodName,e.vars,e.viewType,e.isOnlyBody,e.prj,e.hash);if(a||(a=config.defaultView),s||(s=!1),o)for("string"==typeof o&&(o=o.split("&")),i=0;i0?"&":"?")+"PRJ="+r),c+(l?("#"===l[0]?"":"#")+l:"")},t(function(){var e=t("#main,#mainContent,#mainRow,.auto-fade-in");e.length&&e.hasClass("fade")&&setTimeout(function(){e.addClass("in")},e.data("fadeTime")||200)}),t.ajaxSendScore=function(e){t.get(t.createLink("score","ajax","method="+e))};var e=function(t){var e=0;if(t){var i=t.split(":");e+=60*parseInt(i[0]),e+=parseInt(i[1])}return e},n=function(t){t%=1440;var e=Math.floor(t/60),i=t%60;return e<10&&(e="0"+e),i<10&&(i="0"+i),e+":"+i},o=function(t){if("string"==typeof t&&(t=e(t)),"number"==typeof t)if(t<1e5){var i=new Date;i.setHours(Math.floor(t/60)%24),i.setMinutes(t%60),t=i}else t=new Date(t);return t},a=function(t,i){for(var a=i?o(i):new Date,s=a.getHours(),r=10*Math.floor(a.getMinutes()/10)+10,l=0;l<24;++l){var h=(l+s)%24;if(!(h<5))for(var c=0;c<6;++c){var d=n(60*h+10*c+r);t.append('")}}t.val()||(time=e(a.format("hh:mm")),time=time-time%10+10,t.val(n(time)))};t.fn.timeSpanControl=function(i){return this.each(function(){var s=t(this),r=t.extend({},i,s.data()),l=s.find('[name="begin"],.control-time-begin'),h=s.find('[name="end"],.control-time-end'),c=function(){var t=l.val();if(s.find(".hide-empty-begin").toggleClass("hide",!t),t){var i=n(e(t)+30);h.find('option[value="'+i+'"]').length&&h.val(i),r.onChange&&r.onChange(h,i)}};if(s.data("timeSpanControlInit")){if(r.begin){var d=o(r.begin).format("hh:mm");l.find('option[value="'+d+'"]').length&&l.val(d),r.onChange&&r.onChange(l,d)}if(r.end){var u=o(r.end).format("hh:mm");h.find('option[value="'+u+'"]').length&&h.val(u),r.onChange&&r.onChange(h,u)}}else l.on("change",c),a(l,r.begin),a(h,r.end),s.data("timeSpanControlInit",!0);r.end||c()})},t.timeSpanControl={convertTimeToNum:e,convertNumToTime:n,initTimeSelect:a,createTime:o};var s=t.setSearchType=function(e,i){var n=t("#searchType");e||(e=n.val()),e=e||"bug",n.val(e);var o=t("#searchTypeMenu");o.find("li.selected").removeClass("selected");var a=o.find('a[data-value="'+e+'"]'),s=a.text();a.parent().addClass("selected"),t("#searchTypeName").text(s),i||t("#searchInput").focus()};t.gotoObject=function(e,i){if(e||(e=t("#searchType").val()),i||(i=t("#searchInput").val()),i&&e)if(i=i.replace(/[^\d]/g,"")){var n=e.split("-");e=n[0];var o=n.length>1?n[1]:"testsuite"===e?"library":"view";window.location.href=t.createLink(e,o,"id="+i)}else{var a={zh_cn:"请输入数字ID进行搜索",zh_tw:"請輸入數值ID行搜索"};alert(lang.searchTip||a[t.zui.clientLang()]||"Please enter a numberic id to search")}t("#searchInput").val(i).focus()},t(function(){s(null,!0),t(document).on("keydown",function(e){e.ctrlKey&&71===e.keyCode&&(t("#searchInput").val("").focus(),e.stopPropagation(),e.preventDefault())})}),t.removeAnchor=window.removeAnchor=function(t){var e=t.lastIndexOf("#");return e>-1?t.substr(0,e):t},t.refreshPage=function(t){var e=removeAnchor(location.href);t&&window.parent!==window?window.parent.location.href=e:location.href=e},t.selectLang=window.selectLang=function(e){t.cookie("lang",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectLang"),t.refreshPage(1)},t.selectTheme=window.selectTheme=function(e){t.cookie("theme",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectTheme"),t.refreshPage(1)},t.zui.Picker&&t.zui.Picker.enableChosen(),t.chosenDefaultOptions={middle_highlight:!0,disable_search_threshold:1,compact_search:!0,allow_single_deselect:!0,placeholder_text_single:" ",placeholder_text_multiple:" ",search_contains:!0,max_drop_width:500,max_drop_height:245,no_wrap:!0,drop_direction:function(){var e=t(this.container).closest(".table-responsive:not(.scroll-none)");if(e.length){if(this.drop_directionFixed)return this.drop_directionFixed;var i="down",n=this.container.find(".chosen-drop"),o=this.container.position(),a=n.outerHeight();return o.top>=a&&o.top+a{page}/{totalPage}
    ',"next_icon","last_icon"],onPageChange:function(e,i){e.recPerPage!==i.recPerPage&&t.cookie(this.options.pageCookie,e.recPerPage,{expires:config.cookieLife,path:config.webRoot}),e.recPerPage!==i.recPerPage&&(window.location.href=this.createLink())}}),t.extend(!0,t.zui.Messager.DEFAULTS,{cssClass:"messagger-zt",icons:{success:"check-circle",info:"chat-line",warning:"exclamation-sign",danger:"exclamation-sign"}}),t.fn.reverseOrder=function(){return this.each(function(){var e=t(this);e.prependTo(e.parent())})};var r=function(e,i){var n=t(e);if(!n.data("historiesInited")){n.data("historiesInited",1),i=t.extend({},n.data(),i);var o=n.find(".histories-list"),a=!0,s=!1;n.on("click",".btn-reverse",function(){o.children("li").reverseOrder(),a=!a,t(this).find(".icon").toggleClass("icon-arrow-up",a).toggleClass("icon-arrow-down",!a);var e="#lastComment",i=t(e);i.length&&window.KindEditor&&(window.KindEditor.remove(e),i.kindeditor())}).on("click",".btn-expand-all",function(){var e=t(this).find(".icon");s=!s,e.toggleClass("icon-plus",!s).toggleClass("icon-minus",s),o.children("li").toggleClass("show-changes",s)}).on("click",".btn-expand",function(){t(this).closest("li").toggleClass("show-changes")}).on("click",".btn-strip",function(){var e=t(this),n=e.find(".icon"),o=n.hasClass("icon-code");n.toggleClass("icon-code",!o).toggleClass("icon-text",o),e.attr("title",o?i.original:i.textdiff),e.closest("li").toggleClass("show-original",o)}),o.find(".btn-strip").attr("title",i.original);var r=n.find(".modal-comment").modal({show:!1}).on("shown.zui.modal",function(){var t=r.find("#comment");t.length&&(t.focus(),window.editor&&window.editor.comment&&window.editor.comment.focus())}).on("show.zui.modal",function(){var e=r.find("#comment");e.length&&!e.data("keditor")&&t.fn.kindeditor&&e.kindeditor()});n.on("click",".btn-comment",function(t){r.modal("toggle"),t.preventDefault()}).on("click",".btn-edit-comment,.btn-hide-form",function(){t(this).closest("li").toggleClass("show-form")});var l=n.find(".comment-edit-form");l.ajaxForm({success:function(t,e,i,n){setTimeout(function(){l.closest("li").removeClass("show-form")},2e3)}})}};t.fn.histories=function(t){return this.each(function(){r(this,t)})},t(function(){t(".histories").histories()});var l=0,h=0;t.toggleSidebar=function(e){var i=t("#sidebar");if(i.length){var n=t("main");if(void 0===e)e=n.hasClass("hide-sidebar");else if(e&&!n.hasClass("hide-sidebar"))return;n.toggleClass("hide-sidebar",!e),clearTimeout(l),t.zui.store.set(h,e);var o=i.children(".cell"),a={overflow:"visible",maxHeight:"initial"};e?(i.addClass("showing"),l=setTimeout(function(){i.removeClass("showing"),i.trigger("sidebar.toggle",e)},210)):(i.trigger("sidebar.toggle",e),t(window).width()<1900&&(a={overflow:"hidden",maxHeight:t(window).height()-45})),o.css(a)}};var c=t.initSidebar=function(){var e=t("#sidebar");if(e.length){if(e.data("init"))return!0;h="sidebar:"+(e.data("id")||config.currentModule+"/"+config.currentMethod);var i=t("main");if(i.length){i.on("click",".sidebar-toggle",function(){t.toggleSidebar(i.hasClass("hide-sidebar"))});var n=t.zui.store.get(h,e.data("hide")!==!1);n===!1&&e.addClass("no-animate"),t.toggleSidebar(n),n===!1&&setTimeout(function(){e.removeClass("no-animate")},500);var o=e.find(".sidebar-toggle");if(o.length){var a=function(){var e=o[0].getBoundingClientRect(),i=t(window).height(),n=Math.max(0,Math.floor(Math.min(i-40,e.top+e.height)-Math.max(e.top,0))/2)+(e.top<0?0-e.top:0);o.removeClass("fade").find(".icon").css("top",n+(t.zui.browser.isIE()?(i-80)/2:0))};a(),e.data("init",1).on("sidebar.toggle",a);var s=t.zui.browser.isIE()?1500:0,r=0,l=null,c=function(){var t=Date.now();return l&&(clearTimeout(l),l=null),t-rtr input[type="checkbox"]:checked');i.each(function(){var i=parseInt(t(this).val(),10);NaN!==i&&e.push(i)}),t.cookie("checkedItem",e.join(","),{expires:config.cookieLife,path:config.webRoot})},t.extend(t.fn.modal.bs.Constructor.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:100}),t.extend(t.zui.ModalTrigger.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:40}),t.fn.initIframeModal=function(){return this.each(function(){var e=t(this);if(!e.parents('[data-ride="table"],.skip-iframe-modal').length){var i={type:"iframe"};e.hasClass("export")&&t.extend(i,{width:800,shown:setCheckedCookie},e.data()),e.modalTrigger(i)}})},t(function(){t("a.iframe,.export").initIframeModal()});var d=function(){var e,i,n=t(this),o=t.extend({limitSize:40,suffix:"…"},n.data()),a=n.text();if(a.length>o.limitSize){e=a,i=a.substr(0,o.limitSize)+o.suffix,n.text(i).addClass("limit-text-on");var s=o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle");s.text(s.data("textExpand")),s.on("click",function(){var t=n.toggleClass("limit-text-on").hasClass("limit-text-on");n.text(t?i:e),s.text(s.data(t?"textExpand":"textCollapse"))})}else(o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle")).hide()};t.fn.textLimit=function(){return this.each(d)},t(function(){t(".text-limit").textLimit()}),t.fixedTableHead=window.fixedTableHead=function(e,i){var n=t(e);if(n.is("table")||(n=n.find("table")),n.length){var o=t(i||window),a=null,s=function(){var e=n.children("thead"),i=e[0].getBoundingClientRect(),o=n.next(".fixed-head-table");if(i.top<0){var s=e.width();if(o.length){if(a!==s){a=s;var r=o.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())})}}else{var o=t("
    ").addClass(n.attr("class")),l=e.clone(),r=l.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())}),o.append(l).insertAfter(n)}o.css({left:i.left,width:i.width}).show()}else o.hide()};o.on("scroll",s).on("resize",s),s()}},t(document).on("click","tr[data-url]",function(){var e=t(this),i=e.data("href")||e.data("url");i&&(window.location.href=i); -}),"yes"===config.onlybody&&self===parent&&(window.location.href=window.location.href.replace("?onlybody=yes","").replace("&onlybody=yes","")),t(function(){t("body").addClass("m-{currentModule}-{currentMethod}".format(config))});var u,f,p,g,m,v=function(){u||(u=t("#subNavbar"),f=t("#pageNav"),p=t("#pageActions"),g=u.children(".nav"),m=g.outerWidth());var e=u.outerWidth(),i=f.outerWidth()||0,n=p.outerWidth()||0;if(i=i?i+15:0,n=n?n+15:0,!i&&!n)return void g.css({maxWidth:null,left:null,position:"static"});var o=Math.max(300,e-i-n),a=Math.min(o,m),s=(e-a)/2,r=i&&s.btn-toolbar");if(e.length){var i,n,o=e.children(),a=o.length,s=!1,r=null;if(a)for(o.each(function(e){i=t(this),n=i.is(".divider"),n&&!r&&i.hide(),s||n||(s=!0),r=n?null:i,!n||e!==a-1&&0!==e||i.hide()});i.length&&i.is(".divider");)i=i.hide().prev();s||e.hide()}};t(function(){t(".input-group,.btn-group").fixInputGroup(),k()}),window.holders&&t.each(window.holders,function(e){var i=t("#"+e);i.length&&i.is("input")&&i.attr("placeholder",window.holders[e])});var T=function(){var e,i="en"==config.clientLang?"//www.zentao.pm/book/zentaomanual/8.html?fullScreen=zentao":"ja"==config.clientLang?"//www.zentao.jp/book/zentaomanual/8.html?fullScreen=zentao":"//www.zentao.net/book/zentaopmshelp.html?fullScreen=zentao",n=t("#navbar > .nav").first(),o=1e4,a=function(){clearTimeout(e),t("#helpContent").removeClass("show-error")},s=t.openHelp=function(s){s=s||i,a(),n.children("li.active:not(#helpMenuItem)").removeClass("active").addClass("close-help-tab"),t("#helpMenuItem").addClass("active");var r=t("#helpContent");if(r.length){if(t("body").hasClass("show-help-tab"))return void t("#helpIframe").get(0).contentWindow.location.replace(s)}else{r=t('

    '+lang.timeout+'

    '+s+'

    '),t("#header").after(r);var l=t("#helpIframe").get(0);e=setTimeout(function(){t("#helpContent").addClass("show-error")},o),l.onload=l.onreadystatechange=function(){this.readyState&&"complete"!=this.readyState||a()}}t("body").addClass("show-help-tab")},r=t.closeHelp=function(){t("body").removeClass("show-help-tab"),t("#helpMenuItem").removeClass("active"),n.find("li.close-help-tab").removeClass("close-help-tab").addClass("active").find("a").focus()};t(document).on("click",".open-help-tab",function(e){var i=t(this),o=t("#helpMenuItem");o.length||(o=t('
  • '+i.text()+'
  • '),n.append('
  • ').append(o)),s(i.attr("href")),e.preventDefault()}).on("click",".close-help-tab",function(t){r(),t.stopPropagation(),t.preventDefault()})};t(T),t(function(){var e=t(".table-responsive"),i=t.fixTableResponsive=function(){e.each(function(){this.scrollHeight-3<=this.clientHeight&&this.scrollWidth-3<=this.clientWidth?t(this).addClass("scroll-none").css("overflow","visible"):t(this).removeClass("scroll-none").css("overflow","auto")})};e.length&&(t(window).on("resize",i),setTimeout(i,100))});var S=function(){var e=this,i=t(e),n=i.closest("tr").find("textarea");if(n.length){var o=32;n.each(function(){var e=t(this).closest("td"),i=e.css("height");e.css("height",this.style.height),this.style.height="auto";var n=this.value?this.scrollHeight+2:32;o=Math.max(o,n),e.css("height",i)}),n.css("height",o)}else{e.style.height="auto";var a=e.value?e.scrollHeight+2:32;e.style.height=a+"px"}};t.autoResizeTextarea=function(e){t(e).each(S)},t(function(){t("textarea.autosize").each(S),t(document).on("input paste change","textarea.autosize",S)}),t(function(){var e=t("#dropMenu,.drop-menu");e.length&&e.on("click",".toggle-right-col",function(e){t(this).closest("#dropMenu,.drop-menu").toggleClass("show-right-col"),e.stopPropagation(),e.preventDefault()})});var D="undefined"!=typeof InstallTrigger;t.zui.browser.firefox=D,t("html").toggleClass("is-firefox",D).toggleClass("not-firefox",!D),t(function(){var e=t("#mainContent>.main-col"),i=e.children(".main-actions");if(i.length){var n=i.prev();if(i.length&&n.length){t('
    ').css("height",i.outerHeight()).insertAfter(i);var o=0,a=function(){var e=n[0].getBoundingClientRect(),s=e.top+e.height+120>t(window).height();if(t("body").toggleClass("main-actions-fixed",s),s){const r=n.width();r?i.width(r):o<10&&setTimeout(a,1e3)}o++};t.resetToolbarPosition=a,a(),t(window).on("resize scroll",a)}}}),t(document).on("show.zui.modal",function(e){t("body.body-modal").length&&window.parent&&window.parent!==window&&t(e.target).is(".modal")&&window.parent.$("body").addClass("hide-modal-close")}).on("hidden.zui.modal",function(){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").removeClass("hide-modal-close")}),t(function(){var e=t(".dropdown-menu.with-search");e.length&&(e.find(".menu-search").on("click",function(t){return t.stopPropagation(),!1}),e.on("keyup change paste","input",function(){var e=t(this),i=e.closest(".dropdown-menu.with-search"),n=e.val().toLowerCase(),o=i.find(".option");""==n?o.removeClass("hide"):o.each(function(){var e=t(this);e.toggleClass("hide",e.text().toString().toLowerCase().indexOf(n)<0&&e.data("key").toString().toLowerCase().indexOf(n)<0)})}),e.parents(".dropdown-submenu").one("mouseenter",function(){var e=t(this).find(".dropdown-list")[0];e&&e.getBoundingClientRect&&setTimeout(function(){var t=270,i=e.getBoundingClientRect();i.top<0&&(t=Math.min(270,i.height)+i.top),e.style.maxHeight=Math.min(270,t)+"px"},50)})),t(".dropdown-menu.with-search .menu-search").on("click",function(t){return t.stopPropagation(),!1})})}(jQuery),function(t){function e(){var e=window.parent,i=config.currentModule,n=config.currentMethod,o="#_single"===location.hash||!t("#mainHeader").length||"tutorial"===i||"install"===i||"upgrade"===i||"index"===i&&"index"===n||"user"===i&&("login"===n||"deny"===n)||"my"===i&&"changepassword"===n||t("body").hasClass("allow-self-open"),a=location.href;if(e===window&&!o){var s=location.pathname+location.search+location.hash,r="";return location.href=t.createLink("index","index",r)+"#open="+encodeURIComponent(s)}if(e!==window&&!o&&e.$.tabs){var l=window.name;if(0===l.indexOf("tab-")){var h=l.substr(4);t.tabs=window.tabs=e.$.tabs,t.tabGroup=h,t(document).on("click",function(t){var i=e.document.getElementById(window.name);if(i){var n=e.document.getElementById(i.name)||i;n&&n.dispatchEvent(new Event(t.type,{bubbles:!0}))}}).on("click","a,.open-in-tab,.show-in-tab",function(e){var i=t(this);if(!i.is("[data-modal],[data-toggle],[data-tab],[data-ride],.iframe,.not-in-tab")){var n=i.hasClass("show-in-tab")?"":i.attr("href")||i.data("url"),o=i.data("group");(n||o)&&(o||(o=t.tabs.getGroup(n)),o&&h!==o&&t.tabs.open(n,o)&&e.preventDefault())}}),t.tabs.updateUrl(h,a,document.title)}}}Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(t,e){function i(t,e){return t===e||"number"==typeof t&&"number"==typeof e&&isNaN(t)&&isNaN(e)}if(null==this)throw new TypeError('"this" is null or not defined');var n=Object(this),o=n.length>>>0;if(0===o)return!1;for(var a=0|e,s=Math.max(a>=0?a:o-Math.abs(a),0);s1&&("?"===e[0]&&(e=e.substr(1)),e.split("&").forEach(function(t){var e=t.split("=",2);if(e.length>1)try{i[e[0]]=decodeURIComponent(e[1])}catch(n){i[e[0]]=""}else i[e[0]]=""})),t?i[t]:i},t.parseLink=function(e){if(!e)return{};var i=e.split("#"),n=i[0].split("?"),o=n[1],a=o?t.getSearchParam("",o):{},s=n[0],r={isOnlyBody:"yes"===a.onlybody,prj:a.PRJ||"",vars:[],hash:i[1]||"",params:a};if("GET"===config.requestType){r.moduleName=a[config.moduleVar],r.methodName=a[config.methodVar],r.viewType=a[config.viewVar]||config.defaultView;for(var l in a)l!==config.moduleVar&&l!==config.methodVar&&l!==config.viewVar&&"onlybody"!==l&&r.vars.push([l,a[l]])}else{var h=s.lastIndexOf("/");h===s.length-1&&(s=s.substr(0,h),h=s.lastIndexOf("/")),h>=0&&(s=s.substr(h+1));var c=s.lastIndexOf(".");c>=0?(r.viewType=s.substr(c+1),s=s.substr(0,c)):r.viewType=config.defaultView;var d=s.split(config.requestFix);if(r.moduleName=d[0],r.methodName=d[1]||"index",d.length>2)for(var u=2;u{page}",totalPage:"{totalPage} Seiten",totalCount:"Total: {recTotal} Artikel",pageSize:"{recPerPage} Artikel pro Seite",itemsRange:"Seiten {start} bis {end}",pageOfTotal:"Seite {page}/{totalPage}"},"zui.boards":{append2end:"Gehen Sie zum Ende"},"zui.browser":{tip:"Online. Sorgenfrei. Aktualisiere deinen Browser noch heute!"},"zui.calendar":{weekNames:["Son","Mon","Die","Mit","Don","Fri","Sam"],monthNames:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",year:"{0}Jahr",month:"{0}Monat",yearMonth:"{0}-{1}"},"zui.chosenIcons":{emptyIcon:"[Kein Icon]",commonIcons:"Gemeinsame Symbole",webIcons:"Web-Symbol",editorIcons:"Editor-Symbol",directionalIcons:"Pfeil Zusammenfluss",otherIcons:"Andere Symbole"},"zui.colorPicker":{errorTip:"Kein gültiger Farbwert"},"zui.datagrid":{errorCannotGetDataFromRemote:"Daten vom Remote-Server ({0}) können nicht abgerufen werden.",errorCannotHandleRemoteData:"Die vom Remote-Server zurückgegebenen Daten können nicht verarbeitet werden."},"zui.guideViewer":{prevStep:"Vorheriger Schritt",nextStep:"Nächster Schritt"},"zui.tabs":{reload:"Neu laden",close:"Schliessen",closeOthers:"Schließen Sie andere Registerkarten",closeRight:"Schließen Sie die rechte Registerkarte",reopenLast:"Letzten geschlossenen Tab wiederherstellen",errorCannotFetchFromRemote:"Inhalt kann nicht vom Remote-Server abgerufen werden ({0})."},"zui.uploader":{},datetimepicker:{days:["Sonntag","Montag","Diensteg","Mittwoch","Donnerstag","Freitag","Samstag"],daysShort:["Son","Mon","Die","Mit","Don","Fri","Sam"],daysMin:["Son","Mon","Die","Mit","Don","Fri","Sam"],months:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",suffix:[],meridiem:[]},chosen:{no_results_text:"Nicht gefunden"},bootbox:{OK:"OK",CANCEL:"Stornieren",CONFIRM:"Bestätigen"}}),$.zui.lang("fr",{"zui.pager":{pageOfText:"Page {0}",prev:"Prev",next:"Suivant",first:"First",last:"Last","goto":"Goto",pageOf:"Page {page}",totalPage:"{totalPage} pages",totalCount:"Total: {recTotal} items",pageSize:"{recPerPage} per page",itemsRange:"De {start} à {end}",pageOfTotal:"Page {page} de {totalPage}"},"zui.boards":{append2end:"Aller jusqu'au bout"},"zui.browser":{tip:"Naviguez sans crainte sur Internet. Mettez votre navigateur à jour dès aujourd'hui!"},"zui.calendar":{weekNames:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],monthNames:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",year:"{0} Année",month:"{0} Mois",yearMonth:"{0}-{1}"},"zui.chosenIcons":{emptyIcon:"[Aucune icône]",commonIcons:"Icônes communes",webIcons:"Icône Web",editorIcons:"Icône de l'éditeur",directionalIcons:"Flèche confluence",otherIcons:"Autres icônes"},"zui.colorPicker":{errorTip:"Pas une valeur de couleur valide"},"zui.datagrid":{errorCannotGetDataFromRemote:"Impossible d'obtenir les données du serveur distant ({0}).",errorCannotHandleRemoteData:"Impossible de traiter les données renvoyées par le serveur distant."},"zui.guideViewer":{prevStep:"Étape précédente",nextStep:"Prochaine étape"},"zui.tabs":{reload:"Recharger",close:"Fermer",closeOthers:"Fermez les autres onglets",closeRight:"Fermer l'onglet de droite",reopenLast:"Restaurer le dernier onglet fermé",errorCannotFetchFromRemote:"Impossible d'obtenir le contenu du serveur distant ({0})."},"zui.uploader":{},datetimepicker:{days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],daysShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],daysMin:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],months:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],monthsShort:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",suffix:[],meridiem:[]},chosen:{no_results_text:"Pas trouvé"},bootbox:{OK:"D'accord",CANCEL:"Annuler",CONFIRM:"Confirmer"}}); +}),"yes"===config.onlybody&&self===parent&&(window.location.href=window.location.href.replace("?onlybody=yes","").replace("&onlybody=yes","")),t(function(){t("body").addClass("m-{currentModule}-{currentMethod}".format(config))});var u,f,p,g,m,v=function(){u||(u=t("#subNavbar"),f=t("#pageNav"),p=t("#pageActions"),g=u.children(".nav"),m=g.outerWidth());var e=u.outerWidth(),i=f.outerWidth()||0,n=p.outerWidth()||0;if(i=i?i+15:0,n=n?n+15:0,!i&&!n)return void g.css({maxWidth:null,left:null,position:"static"});var o=Math.max(300,e-i-n),a=Math.min(o,m),s=(e-a)/2,r=i&&s.btn-toolbar");if(e.length){var i,n,o=e.children(),a=o.length,s=!1,r=null;if(a)for(o.each(function(e){i=t(this),n=i.is(".divider"),n&&!r&&i.hide(),s||n||(s=!0),r=n?null:i,!n||e!==a-1&&0!==e||i.hide()});i.length&&i.is(".divider");)i=i.hide().prev();s||e.hide()}};t(function(){t(".input-group,.btn-group").fixInputGroup(),k()}),window.holders&&t.each(window.holders,function(e){var i=t("#"+e);i.length&&i.is("input")&&i.attr("placeholder",window.holders[e])});var T=function(){var e,i="en"==config.clientLang?"//www.zentao.pm/book/zentaomanual/8.html?fullScreen=zentao":"ja"==config.clientLang?"//www.zentao.jp/book/zentaomanual/8.html?fullScreen=zentao":"//www.zentao.net/book/zentaopmshelp.html?fullScreen=zentao",n=t("#navbar > .nav").first(),o=1e4,a=function(){clearTimeout(e),t("#helpContent").removeClass("show-error")},s=t.openHelp=function(s){s=s||i,a(),n.children("li.active:not(#helpMenuItem)").removeClass("active").addClass("close-help-tab"),t("#helpMenuItem").addClass("active");var r=t("#helpContent");if(r.length){if(t("body").hasClass("show-help-tab"))return void t("#helpIframe").get(0).contentWindow.location.replace(s)}else{r=t('

    '+lang.timeout+'

    '+s+'

    '),t("#header").after(r);var l=t("#helpIframe").get(0);e=setTimeout(function(){t("#helpContent").addClass("show-error")},o),l.onload=l.onreadystatechange=function(){this.readyState&&"complete"!=this.readyState||a()}}t("body").addClass("show-help-tab")},r=t.closeHelp=function(){t("body").removeClass("show-help-tab"),t("#helpMenuItem").removeClass("active"),n.find("li.close-help-tab").removeClass("close-help-tab").addClass("active").find("a").focus()};t(document).on("click",".open-help-tab",function(e){var i=t(this),o=t("#helpMenuItem");o.length||(o=t('
  • '+i.text()+'
  • '),n.append('
  • ').append(o)),s(i.attr("href")),e.preventDefault()}).on("click",".close-help-tab",function(t){r(),t.stopPropagation(),t.preventDefault()})};t(T),t(function(){var e=t(".table-responsive"),i=t.fixTableResponsive=function(){e.each(function(){this.scrollHeight-3<=this.clientHeight&&this.scrollWidth-3<=this.clientWidth?t(this).addClass("scroll-none").css("overflow","visible"):t(this).removeClass("scroll-none").css("overflow","auto")})};e.length&&(t(window).on("resize",i),setTimeout(i,100))});var S=function(){var e=this,i=t(e),n=i.closest("tr").find("textarea");if(n.length){var o=32;n.each(function(){var e=t(this).closest("td"),i=e.css("height");e.css("height",this.style.height),this.style.height="auto";var n=this.value?this.scrollHeight+2:32;o=Math.max(o,n),e.css("height",i)}),n.css("height",o)}else{e.style.height="auto";var a=e.value?e.scrollHeight+2:32;e.style.height=a+"px"}};t.autoResizeTextarea=function(e){t(e).each(S)},t(function(){t("textarea.autosize").each(S),t(document).on("input paste change","textarea.autosize",S)}),t(function(){var e=t("#dropMenu,.drop-menu");e.length&&e.on("click",".toggle-right-col",function(e){t(this).closest("#dropMenu,.drop-menu").toggleClass("show-right-col"),e.stopPropagation(),e.preventDefault()})});var D="undefined"!=typeof InstallTrigger;t.zui.browser.firefox=D,t("html").toggleClass("is-firefox",D).toggleClass("not-firefox",!D),t(function(){var e=t("#mainContent>.main-col"),i=e.children(".main-actions");if(i.length){var n=i.prev();if(i.length&&n.length){t('
    ').css("height",i.outerHeight()).insertAfter(i);var o=0,a=function(){var e=n[0].getBoundingClientRect(),s=e.top+e.height+120>t(window).height();if(t("body").toggleClass("main-actions-fixed",s),s){const r=n.width();r?i.width(r):o<10&&setTimeout(a,1e3)}o++};t.resetToolbarPosition=a,a(),t(window).on("resize scroll",a)}}}),t(document).on("show.zui.modal",function(e){t("body.body-modal").length&&window.parent&&window.parent!==window&&t(e.target).is(".modal")&&window.parent.$("body").addClass("hide-modal-close")}).on("hidden.zui.modal",function(){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").removeClass("hide-modal-close")}),t(function(){var e=t(".dropdown-menu.with-search");e.length&&(e.find(".menu-search").on("click",function(t){return t.stopPropagation(),!1}),e.on("keyup change paste","input",function(){var e=t(this),i=e.closest(".dropdown-menu.with-search"),n=e.val().toLowerCase(),o=i.find(".option");""==n?o.removeClass("hide"):o.each(function(){var e=t(this);e.toggleClass("hide",e.text().toString().toLowerCase().indexOf(n)<0&&e.data("key").toString().toLowerCase().indexOf(n)<0)})}),e.parents(".dropdown-submenu").one("mouseenter",function(){var e=t(this).find(".dropdown-list")[0];e&&e.getBoundingClientRect&&setTimeout(function(){var t=270,i=e.getBoundingClientRect();i.top<0&&(t=Math.min(270,i.height)+i.top),e.style.maxHeight=Math.min(270,t)+"px"},50)})),t(".dropdown-menu.with-search .menu-search").on("click",function(t){return t.stopPropagation(),!1})})}(jQuery),function(t){function e(){var e=window.parent,i=config.currentModule,n=config.currentMethod,o="#_single"===location.hash||!t("#mainHeader").length||"tutorial"===i||"install"===i||"upgrade"===i||"index"===i&&"index"===n||"user"===i&&("login"===n||"deny"===n)||"my"===i&&"changepassword"===n||t("body").hasClass("allow-self-open"),a=location.href;if(e===window&&!o){var s=location.pathname+location.search+location.hash,r="";return location.href=t.createLink("index","index",r)+"#app="+encodeURIComponent(s)}if(e!==window&&!o&&e.$.apps){var l=window.name;if(0===l.indexOf("app-")){var h=l.substr(4);t.apps=window.apps=e.$.apps,t.appCode=h,t(document).on("click",function(t){var i=e.document.getElementById(window.name);if(i){var n=e.document.getElementById(i.name)||i;n&&n.dispatchEvent(new Event(t.type,{bubbles:!0}))}}).on("click","a,.open-in-app,.show-in-app",function(e){var i=t(this);if(!i.is("[data-modal],[data-toggle],[data-ride],.iframe,.not-in-app")){var n=i.hasClass("show-in-app")?"":i.attr("href")||i.data("url"),o=i.data("app")||i.data("group");(n||o)&&(o||(o=t.apps.getAppCode(n)),o&&h!==o&&t.apps.open(n,o)&&e.preventDefault())}}),t.apps.updateUrl(h,a,document.title)}}}Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(t,e){function i(t,e){return t===e||"number"==typeof t&&"number"==typeof e&&isNaN(t)&&isNaN(e)}if(null==this)throw new TypeError('"this" is null or not defined');var n=Object(this),o=n.length>>>0;if(0===o)return!1;for(var a=0|e,s=Math.max(a>=0?a:o-Math.abs(a),0);s1&&("?"===e[0]&&(e=e.substr(1)),e.split("&").forEach(function(t){var e=t.split("=",2);if(e.length>1)try{i[e[0]]=decodeURIComponent(e[1])}catch(n){i[e[0]]=""}else i[e[0]]=""})),t?i[t]:i},t.parseLink=function(e){if(!e)return{};var i=e.split("#"),n=i[0].split("?"),o=n[1],a=o?t.getSearchParam("",o):{},s=n[0],r={isOnlyBody:"yes"===a.onlybody,prj:a.PRJ||"",vars:[],hash:i[1]||"",params:a};if("GET"===config.requestType){r.moduleName=a[config.moduleVar],r.methodName=a[config.methodVar],r.viewType=a[config.viewVar]||config.defaultView;for(var l in a)l!==config.moduleVar&&l!==config.methodVar&&l!==config.viewVar&&"onlybody"!==l&&r.vars.push([l,a[l]])}else{var h=s.lastIndexOf("/");h===s.length-1&&(s=s.substr(0,h),h=s.lastIndexOf("/")),h>=0&&(s=s.substr(h+1));var c=s.lastIndexOf(".");c>=0?(r.viewType=s.substr(c+1),s=s.substr(0,c)):r.viewType=config.defaultView;var d=s.split(config.requestFix);if(r.moduleName=d[0],r.methodName=d[1]||"index",d.length>2)for(var u=2;u{page}",totalPage:"{totalPage} Seiten",totalCount:"Total: {recTotal} Artikel",pageSize:"{recPerPage} Artikel pro Seite",itemsRange:"Seiten {start} bis {end}",pageOfTotal:"Seite {page}/{totalPage}"},"zui.boards":{append2end:"Gehen Sie zum Ende"},"zui.browser":{tip:"Online. Sorgenfrei. Aktualisiere deinen Browser noch heute!"},"zui.calendar":{weekNames:["Son","Mon","Die","Mit","Don","Fri","Sam"],monthNames:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",year:"{0}Jahr",month:"{0}Monat",yearMonth:"{0}-{1}"},"zui.chosenIcons":{emptyIcon:"[Kein Icon]",commonIcons:"Gemeinsame Symbole",webIcons:"Web-Symbol",editorIcons:"Editor-Symbol",directionalIcons:"Pfeil Zusammenfluss",otherIcons:"Andere Symbole"},"zui.colorPicker":{errorTip:"Kein gültiger Farbwert"},"zui.datagrid":{errorCannotGetDataFromRemote:"Daten vom Remote-Server ({0}) können nicht abgerufen werden.",errorCannotHandleRemoteData:"Die vom Remote-Server zurückgegebenen Daten können nicht verarbeitet werden."},"zui.guideViewer":{prevStep:"Vorheriger Schritt",nextStep:"Nächster Schritt"},"zui.tabs":{reload:"Neu laden",close:"Schliessen",closeOthers:"Schließen Sie andere Registerkarten",closeRight:"Schließen Sie die rechte Registerkarte",reopenLast:"Letzten geschlossenen Tab wiederherstellen",errorCannotFetchFromRemote:"Inhalt kann nicht vom Remote-Server abgerufen werden ({0})."},"zui.uploader":{},datetimepicker:{days:["Sonntag","Montag","Diensteg","Mittwoch","Donnerstag","Freitag","Samstag"],daysShort:["Son","Mon","Die","Mit","Don","Fri","Sam"],daysMin:["Son","Mon","Die","Mit","Don","Fri","Sam"],months:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",suffix:[],meridiem:[]},chosen:{no_results_text:"Nicht gefunden"},bootbox:{OK:"OK",CANCEL:"Stornieren",CONFIRM:"Bestätigen"}}),$.zui.lang("fr",{"zui.pager":{pageOfText:"Page {0}",prev:"Prev",next:"Suivant",first:"First",last:"Last","goto":"Goto",pageOf:"Page {page}",totalPage:"{totalPage} pages",totalCount:"Total: {recTotal} items",pageSize:"{recPerPage} per page",itemsRange:"De {start} à {end}",pageOfTotal:"Page {page} de {totalPage}"},"zui.boards":{append2end:"Aller jusqu'au bout"},"zui.browser":{tip:"Naviguez sans crainte sur Internet. Mettez votre navigateur à jour dès aujourd'hui!"},"zui.calendar":{weekNames:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],monthNames:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",year:"{0} Année",month:"{0} Mois",yearMonth:"{0}-{1}"},"zui.chosenIcons":{emptyIcon:"[Aucune icône]",commonIcons:"Icônes communes",webIcons:"Icône Web",editorIcons:"Icône de l'éditeur",directionalIcons:"Flèche confluence",otherIcons:"Autres icônes"},"zui.colorPicker":{errorTip:"Pas une valeur de couleur valide"},"zui.datagrid":{errorCannotGetDataFromRemote:"Impossible d'obtenir les données du serveur distant ({0}).",errorCannotHandleRemoteData:"Impossible de traiter les données renvoyées par le serveur distant."},"zui.guideViewer":{prevStep:"Étape précédente",nextStep:"Prochaine étape"},"zui.tabs":{reload:"Recharger",close:"Fermer",closeOthers:"Fermez les autres onglets",closeRight:"Fermer l'onglet de droite",reopenLast:"Restaurer le dernier onglet fermé",errorCannotFetchFromRemote:"Impossible d'obtenir le contenu du serveur distant ({0})."},"zui.uploader":{},datetimepicker:{days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],daysShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],daysMin:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],months:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],monthsShort:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Août","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",suffix:[],meridiem:[]},chosen:{no_results_text:"Pas trouvé"},bootbox:{OK:"D'accord",CANCEL:"Annuler",CONFIRM:"Confirmer"}}); \ No newline at end of file