diff --git a/config/zentaopms.php b/config/zentaopms.php
index 96cde431d3..142812cecf 100644
--- a/config/zentaopms.php
+++ b/config/zentaopms.php
@@ -109,6 +109,25 @@ $config->hourPointCommonList['vi'][0] = 'giờ';
$config->hourPointCommonList['vi'][1] = 'điểm';
$config->hourPointCommonList['vi'][2] = 'function point';
+/* Plan common list. */
+$config->planCommonList['zh-cn'][0] = '计划';
+$config->planCommonList['zh-cn'][1] = '排期';
+
+$config->planCommonList['zh-tw'][0] = '计划';
+$config->planCommonList['zh-tw'][1] = '排期';
+
+$config->planCommonList['en'][0] = 'Plan';
+$config->planCommonList['en'][1] = 'Schedule';
+
+$config->planCommonList['de'][0] = 'Plan';
+$config->planCommonList['de'][1] = 'Schedule';
+
+$config->planCommonList['fr'][0] = 'Plan';
+$config->planCommonList['fr'][1] = 'Schedule';
+
+$config->planCommonList['vi'][0] = 'Plan';
+$config->planCommonList['vi'][1] = 'Schedule';
+
$config->manualUrl['home'] = 'https://www.zentao.net/book/zentaopmshelp.html?fullScreen=zentao';
$config->manualUrl['int'] = 'https://www.zentao.pm/book/zentaomanual/zentao-installation-11.html?fullScreen=zentao';
diff --git a/db/demo.sql b/db/demo.sql
index 38df4bdeb0..bfd262c037 100644
--- a/db/demo.sql
+++ b/db/demo.sql
@@ -295,15 +295,15 @@ INSERT INTO `zt_testrun` (`id`, `task`, `case`, `version`, `assignedTo`, `lastRu
INSERT INTO `zt_testtask` (`id`, `name`, `product`, `project`, `build`, `owner`, `begin`, `end`, `desc`, `status`, `deleted`) VALUES(1, '企业网站第一期测试任务', 1, 1, 'trunk', 'testManager', '2012-06-05', '2013-06-21', '', 'wait', '0');
-INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(2, 5, 'productManager', 'e10adc3949ba59abbe56e057f20f883e', 'po', '产品经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338866083, '0');
-INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(3, 6, 'projectManager', 'e10adc3949ba59abbe56e057f20f883e', 'pm', '项目经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865876, '0');
-INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(4, 2, 'dev1', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338863860, '1');
-INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(5, 2, 'dev2', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864116, '1');
-INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(6, 2, 'dev3', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864187, '1');
-INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(7, 3, 'tester1', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865739, '1');
-INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(8, 3, 'tester2', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 2, '192.168.0.8', 1338865450, '1');
-INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(9, 3, 'tester3', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338865125, '1');
-INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(10, 1, 'testManager', 'e10adc3949ba59abbe56e057f20f883e', 'qd', '测试经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 6, '192.168.0.8', 1338865842, '1');
+INSERT INTO `zt_user` (`id`, `dept`, `account`, `type`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(2, 5, 'productManager', 'inside', 'e10adc3949ba59abbe56e057f20f883e', 'po', '产品经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338866083, '0');
+INSERT INTO `zt_user` (`id`, `dept`, `account`, `type`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(3, 6, 'projectManager', 'inside', 'e10adc3949ba59abbe56e057f20f883e', 'pm', '项目经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865876, '0');
+INSERT INTO `zt_user` (`id`, `dept`, `account`, `type`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(4, 2, 'dev1', 'inside', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338863860, '1');
+INSERT INTO `zt_user` (`id`, `dept`, `account`, `type`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(5, 2, 'dev2', 'inside', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864116, '1');
+INSERT INTO `zt_user` (`id`, `dept`, `account`, `type`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(6, 2, 'dev3', 'inside', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864187, '1');
+INSERT INTO `zt_user` (`id`, `dept`, `account`, `type`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(7, 3, 'tester1', 'inside', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865739, '1');
+INSERT INTO `zt_user` (`id`, `dept`, `account`, `type`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(8, 3, 'tester2', 'inside', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 2, '192.168.0.8', 1338865450, '1');
+INSERT INTO `zt_user` (`id`, `dept`, `account`, `type`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(9, 3, 'tester3', 'inside', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338865125, '1');
+INSERT INTO `zt_user` (`id`, `dept`, `account`, `type`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(10, 1, 'testManager', 'inside', 'e10adc3949ba59abbe56e057f20f883e', 'qd', '测试经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 6, '192.168.0.8', 1338865842, '1');
INSERT INTO `zt_usergroup` (`account`, `group`) VALUES('productManager', 5);
INSERT INTO `zt_usergroup` (`account`, `group`) VALUES('projectManager', 4);
diff --git a/db/update20.0.sql b/db/update20.0.sql
index b75c5e0149..b6a493fb64 100644
--- a/db/update20.0.sql
+++ b/db/update20.0.sql
@@ -36,6 +36,7 @@ ALTER TABLE `zt_usergroup` ADD `program` text NOT NULL;
ALTER TABLE `zt_userview` ADD `programs` mediumtext COLLATE 'utf8_general_ci' NOT NULL AFTER `account`;
ALTER TABLE `zt_user` ADD `type` char(30) NOT NULL AFTER `account`;
+update zt_user set `type` = 'inside';
CREATE TABLE `zt_stage` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
@@ -141,7 +142,7 @@ CREATE TABLE `zt_risk` (
`status` varchar(30) NOT NULL DEFAULT 'active',
`impact` char(30) NOT NULL,
`probability` char(30) NOT NULL,
- `riskindex` char(30) NOT NULL,
+ `rate` char(30) NOT NULL,
`pri` char(30) NOT NULL,
`identifiedDate` date NOT NULL,
`prevention` text NOT NULL,
@@ -297,3 +298,5 @@ ALTER TABLE `zt_block` ADD UNIQUE `account_module_type_order` (`account`, `modul
INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES ('1', '0', '*', '*', '*', 'moduleName=weekly&methodName=computeWeekly', '更新项目周报', 'system', 0, 'normal', '2020-08-27 10:07:53');
ALTER TABLE `zt_story` ADD `storyChanged` enum('0','1') NOT NULL DEFAULT '0' AFTER `version`;
+
+ALTER TABLE `zt_design` MODIFY `commit` varchar(255);
diff --git a/db/zentao.sql b/db/zentao.sql
index 13c23a9079..65f2246576 100644
--- a/db/zentao.sql
+++ b/db/zentao.sql
@@ -853,7 +853,7 @@ CREATE TABLE `zt_risk` (
`status` varchar(30) NOT NULL DEFAULT 'active',
`impact` char(30) NOT NULL,
`probability` char(30) NOT NULL,
- `riskindex` char(30) NOT NULL,
+ `rate` char(30) NOT NULL,
`pri` char(30) NOT NULL,
`identifiedDate` date NOT NULL,
`prevention` text NOT NULL,
diff --git a/framework/base/router.class.php b/framework/base/router.class.php
index 87efe14d70..80dd51529c 100644
--- a/framework/base/router.class.php
+++ b/framework/base/router.class.php
@@ -840,16 +840,16 @@ class baseRouter
}
}
- /**
- * 从Get里取progarm id 设置到session中
- * Set program id into session.
- *
+ /**
+ * 从Get里取progarm id 设置到session中。
+ * Get progarm id from Get and set it to session.
+ *
* @access public
* @return void
*/
public function setProgram()
- {
- if(isset($_GET['pgm'])) $this->session->set('program', $_GET['pgm']); //Set program into session.
+ {
+ if(isset($_GET['pgm'])) $this->session->set('program', $_GET['pgm']); //Set program id into session.
}
/**
diff --git a/framework/router.class.php b/framework/router.class.php
index bcccb694a7..447def58b8 100755
--- a/framework/router.class.php
+++ b/framework/router.class.php
@@ -146,7 +146,7 @@ class router extends baseRouter
}
}
- $productCommon = $storyCommon = $hourCommon = 0;
+ $productCommon = $storyCommon = $hourCommon = $planCommon = 0;
$projectCommon = empty($this->config->isINT) ? 0 : 1;
foreach($commonSettings as $setting)
@@ -166,16 +166,21 @@ class router extends baseRouter
if($this->session->program)
{
$template = $this->dbh->query('SELECT template FROM' . TABLE_PROJECT . "WHERE id = {$this->session->program}")->fetch();
- if($template->template == 'waterfall') $projectCommon = 2;
+ if($template->template == 'waterfall')
+ {
+ $projectCommon = 2;
+ $planCommon = 1;
+ }
}
$config->storyCommon = $storyCommon;
- /* Set productCommon, projectCommon, storyCommon and hourCommon. Default english lang. */
+ /* Set productCommon, projectCommon, storyCommon, hourCommon and planCommon. Default english lang. */
$lang->productCommon = isset($this->config->productCommonList[$this->clientLang][(int)$productCommon]) ? $this->config->productCommonList[$this->clientLang][(int)$productCommon] : $this->config->productCommonList['en'][(int)$productCommon];
$lang->projectCommon = isset($this->config->projectCommonList[$this->clientLang][(int)$projectCommon]) ? $this->config->projectCommonList[$this->clientLang][(int)$projectCommon] : $this->config->projectCommonList['en'][(int)$projectCommon];
$lang->storyCommon = isset($this->config->storyCommonList[$this->clientLang][(int)$storyCommon]) ? $this->config->storyCommonList[$this->clientLang][(int)$storyCommon] : $this->config->storyCommonList['en'][(int)$storyCommon];
$lang->hourCommon = isset($this->config->hourPointCommonList[$this->clientLang][(int)$hourCommon]) ? $this->config->hourPointCommonList[$this->clientLang][(int)$hourCommon] : $this->config->hourPointCommonList['en'][(int)$hourCommon];
+ $lang->planCommon = isset($this->config->planCommonList[$this->clientLang][(int)$planCommon]) ? $this->config->planCommonList[$this->clientLang][(int)$planCommon] : $this->config->planCommonList['en'][(int)$planCommon];
if($storyCommon == 0 and isset($URAndSR))
{
diff --git a/module/action/lang/de.php b/module/action/lang/de.php
index ad6a983fe8..c79c04e2d0 100644
--- a/module/action/lang/de.php
+++ b/module/action/lang/de.php
@@ -405,6 +405,7 @@ $lang->action->label->entry = 'Eintrag|entry|browse|';
$lang->action->label->webhook = 'Webhook|webhook|browse|';
$lang->action->label->space = ' ';
$lang->action->label->risk = 'Risk|risk|view|riskID=%s';
+$lang->action->label->issue = 'Issue|issue|view|issueID=%s';
/* Object type. */
$lang->action->search->objectTypeList[''] = '';
diff --git a/module/action/lang/en.php b/module/action/lang/en.php
index d00da21068..7458f7ca9f 100755
--- a/module/action/lang/en.php
+++ b/module/action/lang/en.php
@@ -405,6 +405,7 @@ $lang->action->label->entry = 'Application|entry|browse|';
$lang->action->label->webhook = 'Webhook|webhook|browse|';
$lang->action->label->space = ' ';
$lang->action->label->risk = 'Risk|risk|view|riskID=%s';
+$lang->action->label->issue = 'Issue|issue|view|issueID=%s';
/* Object type. */
$lang->action->search->objectTypeList[''] = '';
diff --git a/module/action/lang/fr.php b/module/action/lang/fr.php
index 71178150c4..9aa600c4ff 100644
--- a/module/action/lang/fr.php
+++ b/module/action/lang/fr.php
@@ -405,6 +405,7 @@ $lang->action->label->entry = 'Application|entry|browse|';
$lang->action->label->webhook = 'Webhook|webhook|browse|';
$lang->action->label->space = ' ';
$lang->action->label->risk = 'Risk|risk|view|riskID=%s';
+$lang->action->label->issue = 'Issue|issue|view|issueID=%s';
/* Object type. */
$lang->action->search->objectTypeList[''] = '';
diff --git a/module/action/lang/vi.php b/module/action/lang/vi.php
index 5d7e06eef1..353206c7fd 100644
--- a/module/action/lang/vi.php
+++ b/module/action/lang/vi.php
@@ -405,6 +405,7 @@ $lang->action->label->entry = 'Ứng dụng|entry|browse|';
$lang->action->label->webhook = 'Webhook|webhook|browse|';
$lang->action->label->space = ' ';
$lang->action->label->risk = 'Risk|risk|view|riskID%s';
+$lang->action->label->issue = 'Issue|issue|view|issueID=%s';
/* Object type. */
$lang->action->search->objectTypeList[''] = '';
diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php
index 23e10a7383..e18718e023 100755
--- a/module/action/lang/zh-cn.php
+++ b/module/action/lang/zh-cn.php
@@ -66,7 +66,7 @@ $lang->action->periods['lastmonth'] = $lang->action->dynamic->lastMonth;
$lang->action->objectTypes['product'] = $lang->productCommon;
$lang->action->objectTypes['story'] = $lang->storyCommon;
-$lang->action->objectTypes['productplan'] = '计划';
+$lang->action->objectTypes['productplan'] = $lang->planCommon;
$lang->action->objectTypes['release'] = '发布';
$lang->action->objectTypes['program'] = '项目';
$lang->action->objectTypes['project'] = $lang->projectCommon;
@@ -179,8 +179,8 @@ $lang->action->label->fromlib = '从用例库导入';
$lang->action->label->totask = '转任务';
$lang->action->label->svncommited = '提交代码';
$lang->action->label->gitcommited = '提交代码';
-$lang->action->label->linked2plan = '关联计划';
-$lang->action->label->unlinkedfromplan = '移除计划';
+$lang->action->label->linked2plan = "关联{$lang->planCommon}";
+$lang->action->label->unlinkedfromplan = "移除{$lang->planCommon}";
$lang->action->label->changestatus = '修改状态';
$lang->action->label->marked = '编辑了';
$lang->action->label->linked2project = "关联{$lang->projectCommon}";
@@ -246,8 +246,8 @@ $lang->action->dynamicAction->product['deleted'] = '删除' . $lang->p
$lang->action->dynamicAction->product['closed'] = '关闭' . $lang->productCommon;
$lang->action->dynamicAction->product['undeleted'] = '还原' . $lang->productCommon;
$lang->action->dynamicAction->product['hidden'] = '隐藏' . $lang->productCommon;
-$lang->action->dynamicAction->productplan['opened'] = '创建计划';
-$lang->action->dynamicAction->productplan['edited'] = '编辑计划';
+$lang->action->dynamicAction->productplan['opened'] = "创建{$lang->planCommon}";
+$lang->action->dynamicAction->productplan['edited'] = "编辑{$lang->planCommon}";
$lang->action->dynamicAction->release['opened'] = '创建发布';
$lang->action->dynamicAction->release['edited'] = '编辑发布';
$lang->action->dynamicAction->release['changestatus'] = '修改发布状态';
@@ -260,8 +260,8 @@ $lang->action->dynamicAction->story['reviewed'] = "评审{$lang->stor
$lang->action->dynamicAction->story['closed'] = "关闭{$lang->storyCommon}";
$lang->action->dynamicAction->story['assigned'] = "指派{$lang->storyCommon}";
$lang->action->dynamicAction->story['changed'] = "变更{$lang->storyCommon}";
-$lang->action->dynamicAction->story['linked2plan'] = "{$lang->storyCommon}关联计划";
-$lang->action->dynamicAction->story['unlinkedfromplan'] = "计划移除{$lang->storyCommon}";
+$lang->action->dynamicAction->story['linked2plan'] = "{$lang->storyCommon}关联{$lang->planCommon}";
+$lang->action->dynamicAction->story['unlinkedfromplan'] = "{$lang->planCommon}移除{$lang->storyCommon}";
$lang->action->dynamicAction->story['linked2release'] = "{$lang->storyCommon}关联发布";
$lang->action->dynamicAction->story['unlinkedfromrelease'] = "发布移除{$lang->storyCommon}";
$lang->action->dynamicAction->story['linked2build'] = "{$lang->storyCommon}关联版本";
@@ -326,8 +326,8 @@ $lang->action->dynamicAction->bug['deleted'] = '删除Bug';
$lang->action->dynamicAction->bug['confirmed'] = "确认{$lang->storyCommon}变更";
$lang->action->dynamicAction->bug['tostory'] = "转{$lang->storyCommon}";
$lang->action->dynamicAction->bug['totask'] = '转任务';
-$lang->action->dynamicAction->bug['linked2plan'] = 'Bug关联计划';
-$lang->action->dynamicAction->bug['unlinkedfromplan'] = '计划移除Bug';
+$lang->action->dynamicAction->bug['linked2plan'] = "Bug关联{$lang->planCommon}";
+$lang->action->dynamicAction->bug['unlinkedfromplan'] = "{$lang->planCommon}移除Bug";
$lang->action->dynamicAction->bug['linked2release'] = 'Bug关联发布';
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = '发布移除Bug';
$lang->action->dynamicAction->bug['linked2bug'] = 'Bug关联版本';
@@ -384,7 +384,7 @@ $lang->action->dynamicAction->entry['edited'] = '编辑应用';
/* 用来生成相应对象的链接。*/
$lang->action->label->product = $lang->productCommon . '|product|view|productID=%s';
-$lang->action->label->productplan = '计划|productplan|view|productID=%s';
+$lang->action->label->productplan = "{$lang->planCommon}|productplan|view|productID=%s";
$lang->action->label->release = '发布|release|view|productID=%s';
$lang->action->label->story = "{$lang->storyCommon}|story|view|storyID=%s";
$lang->action->label->program = "项目|program|browse|";
@@ -425,7 +425,7 @@ $lang->action->search->objectTypeList['doclib'] = '文档库';
$lang->action->search->objectTypeList['todo'] = '待办';
$lang->action->search->objectTypeList['build'] = '版本';
$lang->action->search->objectTypeList['release'] = '发布';
-$lang->action->search->objectTypeList['productplan'] = '计划';
+$lang->action->search->objectTypeList['productplan'] = $lang->planCommon;
$lang->action->search->objectTypeList['branch'] = '分支';
$lang->action->search->objectTypeList['testsuite'] = '套件';
$lang->action->search->objectTypeList['caselib'] = '公共库';
diff --git a/module/action/model.php b/module/action/model.php
index 3d6a2a847b..b24d1b0b51 100755
--- a/module/action/model.php
+++ b/module/action/model.php
@@ -850,6 +850,17 @@ class actionModel extends model
if(strpos($action->objectLabel, '|') !== false)
{
list($objectLabel, $moduleName, $methodName, $vars) = explode('|', $action->objectLabel);
+ $action->objectLink = '';
+
+ /* Fix bug #2961. */
+ $isLoginOrLogout = $action->objectType == 'user' and ($action->action == 'login' or $action->action == 'logout');
+
+ if(!common::hasPriv($moduleName, $methodName) and !$isLoginOrLogout)
+ {
+ unset($actions[$i]);
+ continue;
+ }
+
$action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->objectID));
if($action->objectType == 'user') $action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->objectName));
$action->objectLabel = $objectLabel;
diff --git a/module/block/control.php b/module/block/control.php
index 70360824c1..f2e810a69e 100644
--- a/module/block/control.php
+++ b/module/block/control.php
@@ -1116,14 +1116,14 @@ class block extends control
*/
public function printWaterfallReportBlock()
{
- $this->loadModel('program');
$program = $this->loadModel('project')->getByID($this->session->program);
$today = helper::today();
- $date = date('Ymd', strtotime($this->loadModel('weekly')->getThisMonday($today)));
+ $date = date('Ymd', strtotime('this week Monday'));
$begin = $program->begin;
- $weeks = $this->weekly->getWeekPairs($begin);
+ $weeks = $this->loadModel('weekly')->getWeekPairs($begin);
$current = zget($weeks, $date, '');
- $task = $this->dao->select("
+
+ $task = $this->dao->select("
sum(consumed) as totalConsumed,
sum(if(status != 'cancel' and status != 'closed', `left`, 0)) as totalLeft")
->from(TABLE_TASK)->where('program')->eq($this->session->program)
@@ -1312,7 +1312,7 @@ class block extends control
* @access public
* @return void
*/
- public function printScrumprojectBlock()
+ public function printSprintBlock()
{
$status = $this->dao->select('status, count(*) as count')->from(TABLE_PROJECT)
->where('deleted')->eq(0)
@@ -1341,20 +1341,17 @@ class block extends control
*/
public function printScrumdynamicBlock()
{
- $projects = $this->loadModel('project')->getPairs();
- $products = $this->loadModel('product')->getPairs();
+ $projects = $this->loadModel('project')->getPairs();
+ $products = $this->loadModel('product')->getPairs();
$actions = array();
- if(!empty($projects) || !empty($products))
- {
- $actions = $this->dao->select('*')->from(TABLE_ACTION)
- ->beginIF($projects && $products)->where('project')->in(array_keys($projects))->orWhere('product')->in(array_keys($products))->fi()
- ->beginIF($projects && empty($products))->where('project')->in(array_keys($projects))->fi()
- ->beginIF(empty($projects) && $products)->where('product')->in(array_keys($products))->fi()
- ->orderBy('date_desc')
- ->limit(10)
- ->fetchAll();
- }
+ $actions = $this->dao->select('*')->from(TABLE_ACTION)
+ ->where('project')->eq($this->session->program)
+ ->beginIF($projects)->markLeft()->orWhere('project')->in(array_keys($projects))->fi()->markRight()
+ ->beginIF($products)->markLeft()->orWhere('product')->in(array_keys($products))->fi()->markRight()
+ ->orderBy('date_desc')
+ ->limit(10)
+ ->fetchAll();
$this->view->actions = empty($actions) ? array() : $this->loadModel('action')->transformActions($actions);
$this->view->users = $this->loadModel('user')->getPairs('noletter');
diff --git a/module/block/lang/de.php b/module/block/lang/de.php
index 2a78a873ab..4bd083f753 100644
--- a/module/block/lang/de.php
+++ b/module/block/lang/de.php
@@ -32,9 +32,11 @@ $lang->block->lblNum = 'Nummer';
$lang->block->lblHtml = 'HTML';
$lang->block->dynamic = 'Verlauf';
$lang->block->assignToMe = 'Mir zugewiesen';
+$lang->block->done = 'Done';
$lang->block->lblFlowchart = 'Workflow';
$lang->block->welcome = 'Willkommen';
$lang->block->lblTesttask = 'Test Request Detail';
+$lang->block->contribute = 'Personal Contribution';
$lang->block->leftToday = 'Arbeit für Heute';
$lang->block->myTask = 'Aufgaben';
@@ -50,8 +52,17 @@ $lang->block->openedStories = 'The Number Of Stories Created';
$lang->block->resolvedTasks = 'The Number Of Tasks Resolved';
$lang->block->resolvedBugs = 'The Number Of Bugs Resolved';
$lang->block->openedTestcases = 'The Number Of Test Case Created';
-$lang->block->waterfall = 'CMMI 3';
+$lang->block->waterfall = 'CMMI 3';
$lang->block->scrum = 'Scrum+';
+$lang->block->allProject = 'All ' . $lang->projectCommon;
+$lang->block->doingProject = 'Doning ' . $lang->projectCommon;
+$lang->block->finishProject = 'Finish ' . $lang->projectCommon;
+$lang->block->estimatedHours = 'Estimated Hours';
+$lang->block->consumedHours = 'Consumed Hours';
+$lang->block->time = 'No';
+$lang->block->week = 'Week';
+$lang->block->month = 'Month';
+$lang->block->selectProduct = 'Product selection';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Name';
@@ -71,6 +82,91 @@ $lang->block->nbsp = '';
$lang->block->hidden = 'Verstecken';
$lang->block->dynamicInfo = "%s %s %s %s %s";
+$lang->block->productName = $lang->productCommon . ' Name';
+$lang->block->totalStory = 'The Total ' . $lang->storyCommon;
+$lang->block->totalBug = 'The Total Bug';
+$lang->block->totalRelease = 'Release The Number';
+
+$lang->block->totalInvestment = 'Total investment';
+$lang->block->totalPeople = 'Total number';
+$lang->block->spent = 'Has Been Spent';
+$lang->block->budget = 'Budget';
+$lang->block->left = 'Residuals';
+
+$lang->block->default['waterfall']['program']['1']['title'] = $lang->projectCommon . 'Weekly';
+$lang->block->default['waterfall']['program']['1']['block'] = 'Pmmireport';
+$lang->block->default['waterfall']['program']['1']['source'] = 'Program';
+$lang->block->default['waterfall']['program']['1']['grid'] = 8;
+
+$lang->block->default['waterfall']['program']['2']['title'] = 'Estimate';
+$lang->block->default['waterfall']['program']['2']['block'] = 'waterfallestimate';
+$lang->block->default['waterfall']['program']['2']['source'] = 'program';
+$lang->block->default['waterfall']['program']['2']['grid'] = 4;
+
+$lang->block->default['waterfall']['program']['3']['title'] = 'Plan Gantt Chart';
+$lang->block->default['waterfall']['program']['3']['block'] = 'waterfallgantt';
+$lang->block->default['waterfall']['program']['3']['source'] = 'program';
+$lang->block->default['waterfall']['program']['3']['grid'] = 8;
+
+$lang->block->default['waterfall']['program']['4']['title'] = 'Progress Chart';
+$lang->block->default['waterfall']['program']['4']['block'] = 'waterfallprogress';
+$lang->block->default['waterfall']['program']['4']['grid'] = 4;
+
+$lang->block->default['waterfall']['program']['5']['title'] = 'Program Issue';
+$lang->block->default['waterfall']['program']['5']['block'] = 'waterfallissue';
+$lang->block->default['waterfall']['program']['5']['source'] = 'program';
+$lang->block->default['waterfall']['program']['5']['grid'] = 8;
+
+$lang->block->default['waterfall']['program']['5']['params']['type'] = 'all';
+$lang->block->default['waterfall']['program']['5']['params']['num'] = '15';
+$lang->block->default['waterfall']['program']['5']['params']['orderBy'] = 'id_desc';
+
+$lang->block->default['waterfall']['program']['6']['title'] = 'Dynamic';
+$lang->block->default['waterfall']['program']['6']['block'] = 'dynamic';
+$lang->block->default['waterfall']['program']['6']['grid'] = 4;
+$lang->block->default['waterfall']['program']['6']['source'] = '';
+
+$lang->block->default['waterfall']['program']['7']['title'] = $lang->projectCommon . 'Risk';
+$lang->block->default['waterfall']['program']['7']['block'] = 'waterfallrisk';
+$lang->block->default['waterfall']['program']['7']['source'] = 'program';
+$lang->block->default['waterfall']['program']['7']['grid'] = 8;
+
+$lang->block->default['waterfall']['program']['7']['params']['type'] = 'all';
+$lang->block->default['waterfall']['program']['7']['params']['num'] = '15';
+$lang->block->default['waterfall']['program']['7']['params']['orderBy'] = 'id_desc';
+
+$lang->block->default['scrum']['program']['1']['title'] = $lang->projectCommon . ' Overall';
+$lang->block->default['scrum']['program']['1']['block'] = 'scrumoverall';
+$lang->block->default['scrum']['program']['1']['grid'] = 8;
+
+$lang->block->default['scrum']['program']['2']['title'] = $lang->projectCommon . ' List';
+$lang->block->default['scrum']['program']['2']['block'] = 'scrumlist';
+$lang->block->default['scrum']['program']['2']['grid'] = 8;
+
+$lang->block->default['scrum']['program']['3']['title'] = $lang->productCommon . ' Road Map';
+$lang->block->default['scrum']['program']['3']['block'] = 'scrumroadmap';
+$lang->block->default['scrum']['program']['3']['grid'] = 8;
+
+$lang->block->default['scrum']['program']['4']['title'] = 'Test Version';
+$lang->block->default['scrum']['program']['4']['block'] = 'scrumtest';
+$lang->block->default['scrum']['program']['4']['grid'] = 8;
+
+$lang->block->default['scrum']['program']['4']['params']['type'] = 'all';
+$lang->block->default['scrum']['program']['4']['params']['num'] = '15';
+$lang->block->default['scrum']['program']['4']['params']['orderBy'] = 'id_desc';
+
+$lang->block->default['scrum']['program']['5']['title'] = $lang->productCommon . ' Overview';
+$lang->block->default['scrum']['program']['5']['block'] = 'scrumproduct';
+$lang->block->default['scrum']['program']['5']['grid'] = 4;
+
+$lang->block->default['scrum']['program']['6']['title'] = $lang->projectCommon . ' Overview';
+$lang->block->default['scrum']['program']['6']['block'] = 'sprint';
+$lang->block->default['scrum']['program']['6']['grid'] = 4;
+
+$lang->block->default['scrum']['program']['7']['title'] = 'Dynamic';
+$lang->block->default['scrum']['program']['7']['block'] = 'scrumdynamic';
+$lang->block->default['scrum']['program']['7']['grid'] = 4;
+
$lang->block->default['product']['1']['title'] = $lang->productCommon . ' Berichte';
$lang->block->default['product']['1']['block'] = 'statistic';
$lang->block->default['product']['1']['grid'] = 8;
@@ -163,14 +259,17 @@ $lang->block->default['full']['my']['1']['title'] = 'Willkommen';
$lang->block->default['full']['my']['1']['block'] = 'welcome';
$lang->block->default['full']['my']['1']['grid'] = 8;
$lang->block->default['full']['my']['1']['source'] = '';
+
$lang->block->default['full']['my']['2']['title'] = 'Verlauf';
$lang->block->default['full']['my']['2']['block'] = 'dynamic';
$lang->block->default['full']['my']['2']['grid'] = 4;
$lang->block->default['full']['my']['2']['source'] = '';
+
$lang->block->default['full']['my']['3']['title'] = 'Flowchart';
$lang->block->default['full']['my']['3']['block'] = 'flowchart';
$lang->block->default['full']['my']['3']['grid'] = 8;
$lang->block->default['full']['my']['3']['source'] = '';
+
$lang->block->default['full']['my']['4']['title'] = 'Meine Todos';
$lang->block->default['full']['my']['4']['block'] = 'list';
$lang->block->default['full']['my']['4']['grid'] = 4;
diff --git a/module/block/lang/en.php b/module/block/lang/en.php
index 6f7acd7b13..a9f988a5f3 100644
--- a/module/block/lang/en.php
+++ b/module/block/lang/en.php
@@ -62,6 +62,7 @@ $lang->block->consumedHours = 'Consumed Hours';
$lang->block->time = 'No';
$lang->block->week = 'Week';
$lang->block->month = 'Month';
+$lang->block->selectProduct = 'Product selection';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Name';
@@ -81,10 +82,16 @@ $lang->block->nbsp = ' ';
$lang->block->hidden = 'Hide';
$lang->block->dynamicInfo = "%s %s %s %s %s";
-$lang->block->productName = $lang->productCommon . ' Name';
-$lang->block->totalStory = 'The Total ' . $lang->storyCommon;
-$lang->block->totalBug = 'The Total Bug';
-$lang->block->totalRelease = 'Release The Number';
+$lang->block->productName = $lang->productCommon . ' Name';
+$lang->block->totalStory = 'The Total ' . $lang->storyCommon;
+$lang->block->totalBug = 'The Total Bug';
+$lang->block->totalRelease = 'Release The Number';
+
+$lang->block->totalInvestment = 'Total investment';
+$lang->block->totalPeople = 'Total number';
+$lang->block->spent = 'Has Been Spent';
+$lang->block->budget = 'Budget';
+$lang->block->left = 'Residuals';
$lang->block->default['waterfall']['program']['1']['title'] = $lang->projectCommon . 'Weekly';
$lang->block->default['waterfall']['program']['1']['block'] = 'Pmmireport';
@@ -153,7 +160,7 @@ $lang->block->default['scrum']['program']['5']['block'] = 'scrumproduct';
$lang->block->default['scrum']['program']['5']['grid'] = 4;
$lang->block->default['scrum']['program']['6']['title'] = $lang->projectCommon . ' Overview';
-$lang->block->default['scrum']['program']['6']['block'] = 'scrumproject';
+$lang->block->default['scrum']['program']['6']['block'] = 'sprint';
$lang->block->default['scrum']['program']['6']['grid'] = 4;
$lang->block->default['scrum']['program']['7']['title'] = 'Dynamic';
@@ -334,10 +341,10 @@ $lang->block->modules['scrum']['index'] = new stdclass();
$lang->block->modules['scrum']['index']->availableBlocks = new stdclass();
$lang->block->modules['scrum']['index']->availableBlocks->scrumoverall = $lang->projectCommon . ' Overall';
$lang->block->modules['scrum']['index']->availableBlocks->scrumlist = $lang->projectCommon . ' List';
-$lang->block->modules['scrum']['index']->availableBlocks->scrumproject = $lang->projectCommon . ' Overview';
+$lang->block->modules['scrum']['index']->availableBlocks->scrumroadmap = $lang->productCommon . ' Rode Map';
+$lang->block->modules['scrum']['index']->availableBlocks->sprint = $lang->projectCommon . ' Overview';
$lang->block->modules['scrum']['index']->availableBlocks->scrumproduct = $lang->productCommon . ' Overview';
$lang->block->modules['scrum']['index']->availableBlocks->scrumtest = 'Test Version';
-$lang->block->modules['scrum']['index']->availableBlocks->scrumroadmap = $lang->productCommon . ' Rode Map';
$lang->block->modules['waterfall']['index'] = new stdclass();
$lang->block->modules['waterfall']['index']->availableBlocks = new stdclass();
@@ -472,19 +479,19 @@ $lang->block->typeList->testtask['done'] = 'Done';
$lang->block->typeList->testtask['all'] = 'All';
$lang->block->modules['program']->moreLinkList = new stdclass();
-$lang->block->modules['program']->moreLinkList->recentprogram = 'program|browse|';
-$lang->block->modules['program']->moreLinkList->statistic = 'program|browse|';
-$lang->block->modules['program']->moreLinkList->program = 'program|browse|';
-$lang->block->modules['program']->moreLinkList->waterfallreport = 'weekly|index|';
-$lang->block->modules['program']->moreLinkList->waterfallestimate = 'workestimation|index|';
-$lang->block->modules['program']->moreLinkList->waterfallissue = 'issue|browse|';
-$lang->block->modules['program']->moreLinkList->waterfallrisk = 'risk|browse|';
-$lang->block->modules['program']->moreLinkList->scrumlist = 'project|all|';
-$lang->block->modules['program']->moreLinkList->scrumroadmap = 'product|all|';
-$lang->block->modules['program']->moreLinkList->scrumtest = 'testtask|browse|';
-$lang->block->modules['program']->moreLinkList->scrumproduct = 'product|all|';
-$lang->block->modules['program']->moreLinkList->scrumproject = 'project|all|';
-$lang->block->modules['program']->moreLinkList->scrumdynamic = 'company|dynamic|';
+$lang->block->modules['program']->moreLinkList->recentprogram = 'program|browse|';
+$lang->block->modules['program']->moreLinkList->statistic = 'program|browse|';
+$lang->block->modules['program']->moreLinkList->program = 'program|browse|';
+$lang->block->modules['program']->moreLinkList->cmmireport = 'weekly|index|';
+$lang->block->modules['program']->moreLinkList->cmmiestimate = 'workestimation|index|';
+$lang->block->modules['program']->moreLinkList->cmmiissue = 'issue|browse|';
+$lang->block->modules['program']->moreLinkList->cmmirisk = 'risk|browse|';
+$lang->block->modules['program']->moreLinkList->scrumlist = 'project|all|';
+$lang->block->modules['program']->moreLinkList->scrumroadmap = 'product|all|';
+$lang->block->modules['program']->moreLinkList->scrumtest = 'testtask|browse|';
+$lang->block->modules['program']->moreLinkList->scrumproduct = 'product|all|';
+$lang->block->modules['program']->moreLinkList->sprint = 'project|all|';
+$lang->block->modules['program']->moreLinkList->scrumdynamic = 'company|dynamic|';
$lang->block->modules['product']->moreLinkList = new stdclass();
$lang->block->modules['product']->moreLinkList->list = 'product|all|product=&line=0&status=%s';
diff --git a/module/block/lang/fr.php b/module/block/lang/fr.php
index b0a2399e8c..7b8f7db576 100644
--- a/module/block/lang/fr.php
+++ b/module/block/lang/fr.php
@@ -32,9 +32,11 @@ $lang->block->lblNum = 'Numéro';
$lang->block->lblHtml = 'HTML';
$lang->block->dynamic = 'Historique';
$lang->block->assignToMe = 'Assigné à moi';
+$lang->block->done = 'Done';
$lang->block->lblFlowchart = 'Organigramme';
$lang->block->welcome = 'Bienvenue';
$lang->block->lblTesttask = 'Détail Recette';
+$lang->block->contribute = 'Personal Contribution';
$lang->block->leftToday = 'Reste à faire';
$lang->block->myTask = 'Mes Tâches';
@@ -50,8 +52,17 @@ $lang->block->openedStories = 'The Number Of Stories Created';
$lang->block->resolvedTasks = 'The Number Of Tasks Resolved';
$lang->block->resolvedBugs = 'The Number Of Bugs Resolved';
$lang->block->openedTestcases = 'The Number Of Test Case Created';
-$lang->block->waterfall = 'CMMI 3';
+$lang->block->waterfall = 'CMMI 3';
$lang->block->scrum = 'Scrum+';
+$lang->block->allProject = 'All ' . $lang->projectCommon;
+$lang->block->doingProject = 'Doning ' . $lang->projectCommon;
+$lang->block->finishProject = 'Finish ' . $lang->projectCommon;
+$lang->block->estimatedHours = 'Estimated Hours';
+$lang->block->consumedHours = 'Consumed Hours';
+$lang->block->time = 'No';
+$lang->block->week = 'Week';
+$lang->block->month = 'Month';
+$lang->block->selectProduct = 'Product selection';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Nom';
@@ -71,6 +82,91 @@ $lang->block->nbsp = ' ';
$lang->block->hidden = 'Masquer';
$lang->block->dynamicInfo = "%s %s %s %s %s";
+$lang->block->productName = $lang->productCommon . ' Name';
+$lang->block->totalStory = 'The Total ' . $lang->storyCommon;
+$lang->block->totalBug = 'The Total Bug';
+$lang->block->totalRelease = 'Release The Number';
+
+$lang->block->totalInvestment = 'Total investment';
+$lang->block->totalPeople = 'Total number';
+$lang->block->spent = 'Has Been Spent';
+$lang->block->budget = 'Budget';
+$lang->block->left = 'Residuals';
+
+$lang->block->default['waterfall']['program']['1']['title'] = $lang->projectCommon . 'Weekly';
+$lang->block->default['waterfall']['program']['1']['block'] = 'Pmmireport';
+$lang->block->default['waterfall']['program']['1']['source'] = 'Program';
+$lang->block->default['waterfall']['program']['1']['grid'] = 8;
+
+$lang->block->default['waterfall']['program']['2']['title'] = 'Estimate';
+$lang->block->default['waterfall']['program']['2']['block'] = 'waterfallestimate';
+$lang->block->default['waterfall']['program']['2']['source'] = 'program';
+$lang->block->default['waterfall']['program']['2']['grid'] = 4;
+
+$lang->block->default['waterfall']['program']['3']['title'] = 'Plan Gantt Chart';
+$lang->block->default['waterfall']['program']['3']['block'] = 'waterfallgantt';
+$lang->block->default['waterfall']['program']['3']['source'] = 'program';
+$lang->block->default['waterfall']['program']['3']['grid'] = 8;
+
+$lang->block->default['waterfall']['program']['4']['title'] = 'Progress Chart';
+$lang->block->default['waterfall']['program']['4']['block'] = 'waterfallprogress';
+$lang->block->default['waterfall']['program']['4']['grid'] = 4;
+
+$lang->block->default['waterfall']['program']['5']['title'] = 'Program Issue';
+$lang->block->default['waterfall']['program']['5']['block'] = 'waterfallissue';
+$lang->block->default['waterfall']['program']['5']['source'] = 'program';
+$lang->block->default['waterfall']['program']['5']['grid'] = 8;
+
+$lang->block->default['waterfall']['program']['5']['params']['type'] = 'all';
+$lang->block->default['waterfall']['program']['5']['params']['num'] = '15';
+$lang->block->default['waterfall']['program']['5']['params']['orderBy'] = 'id_desc';
+
+$lang->block->default['waterfall']['program']['6']['title'] = 'Dynamic';
+$lang->block->default['waterfall']['program']['6']['block'] = 'dynamic';
+$lang->block->default['waterfall']['program']['6']['grid'] = 4;
+$lang->block->default['waterfall']['program']['6']['source'] = '';
+
+$lang->block->default['waterfall']['program']['7']['title'] = $lang->projectCommon . 'Risk';
+$lang->block->default['waterfall']['program']['7']['block'] = 'waterfallrisk';
+$lang->block->default['waterfall']['program']['7']['source'] = 'program';
+$lang->block->default['waterfall']['program']['7']['grid'] = 8;
+
+$lang->block->default['waterfall']['program']['7']['params']['type'] = 'all';
+$lang->block->default['waterfall']['program']['7']['params']['num'] = '15';
+$lang->block->default['waterfall']['program']['7']['params']['orderBy'] = 'id_desc';
+
+$lang->block->default['scrum']['program']['1']['title'] = $lang->projectCommon . ' Overall';
+$lang->block->default['scrum']['program']['1']['block'] = 'scrumoverall';
+$lang->block->default['scrum']['program']['1']['grid'] = 8;
+
+$lang->block->default['scrum']['program']['2']['title'] = $lang->projectCommon . ' List';
+$lang->block->default['scrum']['program']['2']['block'] = 'scrumlist';
+$lang->block->default['scrum']['program']['2']['grid'] = 8;
+
+$lang->block->default['scrum']['program']['3']['title'] = $lang->productCommon . ' Road Map';
+$lang->block->default['scrum']['program']['3']['block'] = 'scrumroadmap';
+$lang->block->default['scrum']['program']['3']['grid'] = 8;
+
+$lang->block->default['scrum']['program']['4']['title'] = 'Test Version';
+$lang->block->default['scrum']['program']['4']['block'] = 'scrumtest';
+$lang->block->default['scrum']['program']['4']['grid'] = 8;
+
+$lang->block->default['scrum']['program']['4']['params']['type'] = 'all';
+$lang->block->default['scrum']['program']['4']['params']['num'] = '15';
+$lang->block->default['scrum']['program']['4']['params']['orderBy'] = 'id_desc';
+
+$lang->block->default['scrum']['program']['5']['title'] = $lang->productCommon . ' Overview';
+$lang->block->default['scrum']['program']['5']['block'] = 'scrumproduct';
+$lang->block->default['scrum']['program']['5']['grid'] = 4;
+
+$lang->block->default['scrum']['program']['6']['title'] = $lang->projectCommon . ' Overview';
+$lang->block->default['scrum']['program']['6']['block'] = 'sprint';
+$lang->block->default['scrum']['program']['6']['grid'] = 4;
+
+$lang->block->default['scrum']['program']['7']['title'] = 'Dynamic';
+$lang->block->default['scrum']['program']['7']['block'] = 'scrumdynamic';
+$lang->block->default['scrum']['program']['7']['grid'] = 4;
+
$lang->block->default['product']['1']['title'] = ' Rapport de ' . $lang->productCommon;
$lang->block->default['product']['1']['block'] = 'statistic';
$lang->block->default['product']['1']['grid'] = 8;
@@ -163,10 +259,12 @@ $lang->block->default['full']['my']['1']['title'] = 'Bienvenue';
$lang->block->default['full']['my']['1']['block'] = 'welcome';
$lang->block->default['full']['my']['1']['grid'] = 8;
$lang->block->default['full']['my']['1']['source'] = '';
+
$lang->block->default['full']['my']['2']['title'] = 'Historique';
$lang->block->default['full']['my']['2']['block'] = 'dynamic';
$lang->block->default['full']['my']['2']['grid'] = 4;
$lang->block->default['full']['my']['2']['source'] = '';
+
$lang->block->default['full']['my']['3']['title'] = 'Organigramme';
$lang->block->default['full']['my']['3']['block'] = 'flowchart';
$lang->block->default['full']['my']['3']['grid'] = 8;
diff --git a/module/block/lang/vi.php b/module/block/lang/vi.php
index 9914e12032..c852a4afcc 100644
--- a/module/block/lang/vi.php
+++ b/module/block/lang/vi.php
@@ -32,9 +32,11 @@ $lang->block->lblNum = 'Số';
$lang->block->lblHtml = 'HTML';
$lang->block->dynamic = 'Lịch sử';
$lang->block->assignToMe = 'Giao cho bạn';
+$lang->block->done = 'Done';
$lang->block->lblFlowchart = 'Biểu đồ';
$lang->block->welcome = 'Welcome';
$lang->block->lblTesttask = 'Chi tiết yêu cầu Test';
+$lang->block->contribute = 'Personal Contribution';
$lang->block->leftToday = 'Việc hôm nay';
$lang->block->myTask = 'Nhiệm vụ';
@@ -50,8 +52,17 @@ $lang->block->openedStories = 'The Number Of Stories Created';
$lang->block->resolvedTasks = 'The Number Of Tasks Resolved';
$lang->block->resolvedBugs = 'The Number Of Bugs Resolved';
$lang->block->openedTestcases = 'The Number Of Test Case Created';
-$lang->block->waterfall = 'CMMI 3';
+$lang->block->waterfall = 'CMMI 3';
$lang->block->scrum = 'Scrum+';
+$lang->block->allProject = 'All ' . $lang->projectCommon;
+$lang->block->doingProject = 'Doning ' . $lang->projectCommon;
+$lang->block->finishProject = 'Finish ' . $lang->projectCommon;
+$lang->block->estimatedHours = 'Estimated Hours';
+$lang->block->consumedHours = 'Consumed Hours';
+$lang->block->time = 'No';
+$lang->block->week = 'Week';
+$lang->block->month = 'Month';
+$lang->block->selectProduct = 'Product selection';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Tên';
@@ -71,6 +82,91 @@ $lang->block->nbsp = ' ';
$lang->block->hidden = 'Ẩn';
$lang->block->dynamicInfo = "%s %s %s %s %s";
+$lang->block->productName = $lang->productCommon . ' Name';
+$lang->block->totalStory = 'The Total ' . $lang->storyCommon;
+$lang->block->totalBug = 'The Total Bug';
+$lang->block->totalRelease = 'Release The Number';
+
+$lang->block->totalInvestment = 'Total investment';
+$lang->block->totalPeople = 'Total number';
+$lang->block->spent = 'Has Been Spent';
+$lang->block->budget = 'Budget';
+$lang->block->left = 'Residuals';
+
+$lang->block->default['waterfall']['program']['1']['title'] = $lang->projectCommon . 'Weekly';
+$lang->block->default['waterfall']['program']['1']['block'] = 'Pmmireport';
+$lang->block->default['waterfall']['program']['1']['source'] = 'Program';
+$lang->block->default['waterfall']['program']['1']['grid'] = 8;
+
+$lang->block->default['waterfall']['program']['2']['title'] = 'Estimate';
+$lang->block->default['waterfall']['program']['2']['block'] = 'waterfallestimate';
+$lang->block->default['waterfall']['program']['2']['source'] = 'program';
+$lang->block->default['waterfall']['program']['2']['grid'] = 4;
+
+$lang->block->default['waterfall']['program']['3']['title'] = 'Plan Gantt Chart';
+$lang->block->default['waterfall']['program']['3']['block'] = 'waterfallgantt';
+$lang->block->default['waterfall']['program']['3']['source'] = 'program';
+$lang->block->default['waterfall']['program']['3']['grid'] = 8;
+
+$lang->block->default['waterfall']['program']['4']['title'] = 'Progress Chart';
+$lang->block->default['waterfall']['program']['4']['block'] = 'waterfallprogress';
+$lang->block->default['waterfall']['program']['4']['grid'] = 4;
+
+$lang->block->default['waterfall']['program']['5']['title'] = 'Program Issue';
+$lang->block->default['waterfall']['program']['5']['block'] = 'waterfallissue';
+$lang->block->default['waterfall']['program']['5']['source'] = 'program';
+$lang->block->default['waterfall']['program']['5']['grid'] = 8;
+
+$lang->block->default['waterfall']['program']['5']['params']['type'] = 'all';
+$lang->block->default['waterfall']['program']['5']['params']['num'] = '15';
+$lang->block->default['waterfall']['program']['5']['params']['orderBy'] = 'id_desc';
+
+$lang->block->default['waterfall']['program']['6']['title'] = 'Dynamic';
+$lang->block->default['waterfall']['program']['6']['block'] = 'dynamic';
+$lang->block->default['waterfall']['program']['6']['grid'] = 4;
+$lang->block->default['waterfall']['program']['6']['source'] = '';
+
+$lang->block->default['waterfall']['program']['7']['title'] = $lang->projectCommon . 'Risk';
+$lang->block->default['waterfall']['program']['7']['block'] = 'waterfallrisk';
+$lang->block->default['waterfall']['program']['7']['source'] = 'program';
+$lang->block->default['waterfall']['program']['7']['grid'] = 8;
+
+$lang->block->default['waterfall']['program']['7']['params']['type'] = 'all';
+$lang->block->default['waterfall']['program']['7']['params']['num'] = '15';
+$lang->block->default['waterfall']['program']['7']['params']['orderBy'] = 'id_desc';
+
+$lang->block->default['scrum']['program']['1']['title'] = $lang->projectCommon . ' Overall';
+$lang->block->default['scrum']['program']['1']['block'] = 'scrumoverall';
+$lang->block->default['scrum']['program']['1']['grid'] = 8;
+
+$lang->block->default['scrum']['program']['2']['title'] = $lang->projectCommon . ' List';
+$lang->block->default['scrum']['program']['2']['block'] = 'scrumlist';
+$lang->block->default['scrum']['program']['2']['grid'] = 8;
+
+$lang->block->default['scrum']['program']['3']['title'] = $lang->productCommon . ' Road Map';
+$lang->block->default['scrum']['program']['3']['block'] = 'scrumroadmap';
+$lang->block->default['scrum']['program']['3']['grid'] = 8;
+
+$lang->block->default['scrum']['program']['4']['title'] = 'Test Version';
+$lang->block->default['scrum']['program']['4']['block'] = 'scrumtest';
+$lang->block->default['scrum']['program']['4']['grid'] = 8;
+
+$lang->block->default['scrum']['program']['4']['params']['type'] = 'all';
+$lang->block->default['scrum']['program']['4']['params']['num'] = '15';
+$lang->block->default['scrum']['program']['4']['params']['orderBy'] = 'id_desc';
+
+$lang->block->default['scrum']['program']['5']['title'] = $lang->productCommon . ' Overview';
+$lang->block->default['scrum']['program']['5']['block'] = 'scrumproduct';
+$lang->block->default['scrum']['program']['5']['grid'] = 4;
+
+$lang->block->default['scrum']['program']['6']['title'] = $lang->projectCommon . ' Overview';
+$lang->block->default['scrum']['program']['6']['block'] = 'sprint';
+$lang->block->default['scrum']['program']['6']['grid'] = 4;
+
+$lang->block->default['scrum']['program']['7']['title'] = 'Dynamic';
+$lang->block->default['scrum']['program']['7']['block'] = 'scrumdynamic';
+$lang->block->default['scrum']['program']['7']['grid'] = 4;
+
$lang->block->default['product']['1']['title'] = 'Báo cáo '.$lang->productCommon;
$lang->block->default['product']['1']['block'] = 'statistic';
$lang->block->default['product']['1']['grid'] = 8;
@@ -163,10 +259,12 @@ $lang->block->default['full']['my']['1']['title'] = 'Chào mừng';
$lang->block->default['full']['my']['1']['block'] = 'welcome';
$lang->block->default['full']['my']['1']['grid'] = 8;
$lang->block->default['full']['my']['1']['source'] = '';
+
$lang->block->default['full']['my']['2']['title'] = 'Lịch sử';
$lang->block->default['full']['my']['2']['block'] = 'dynamic';
$lang->block->default['full']['my']['2']['grid'] = 4;
$lang->block->default['full']['my']['2']['source'] = '';
+
$lang->block->default['full']['my']['3']['title'] = 'Quy trình';
$lang->block->default['full']['my']['3']['block'] = 'flowchart';
$lang->block->default['full']['my']['3']['grid'] = 8;
diff --git a/module/block/lang/zh-cn.php b/module/block/lang/zh-cn.php
index 5184aa9b97..b5e127023c 100644
--- a/module/block/lang/zh-cn.php
+++ b/module/block/lang/zh-cn.php
@@ -82,16 +82,16 @@ $lang->block->nbsp = '';
$lang->block->hidden = '隐藏';
$lang->block->dynamicInfo = "%s %s %s %s %s";
-$lang->block->productName = $lang->productCommon . '名称';
-$lang->block->totalStory = '总' . $lang->storyCommon;
-$lang->block->totalBug = '总Bug';
-$lang->block->totalRelease = '发布次数';
+$lang->block->productName = $lang->productCommon . '名称';
+$lang->block->totalStory = '总' . $lang->storyCommon;
+$lang->block->totalBug = '总Bug';
+$lang->block->totalRelease = '发布次数';
-$lang->block->totalInvestment = '总投入';
-$lang->block->totalPeople = '总人数';
-$lang->block->spent = '已花费';
-$lang->block->budget = '预算';
-$lang->block->left = '剩余';
+$lang->block->totalInvestment = '总投入';
+$lang->block->totalPeople = '总人数';
+$lang->block->spent = '已花费';
+$lang->block->budget = '预算';
+$lang->block->left = '剩余';
$lang->block->default['waterfall']['program']['1']['title'] = '项目周报';
$lang->block->default['waterfall']['program']['1']['block'] = 'waterfallreport';
@@ -103,7 +103,7 @@ $lang->block->default['waterfall']['program']['2']['block'] = 'waterfallestimat
$lang->block->default['waterfall']['program']['2']['source'] = 'program';
$lang->block->default['waterfall']['program']['2']['grid'] = 4;
-$lang->block->default['waterfall']['program']['3']['title'] = '项目计划';
+$lang->block->default['waterfall']['program']['3']['title'] = "项目{$lang->planCommon}";
$lang->block->default['waterfall']['program']['3']['block'] = 'waterfallgantt';
$lang->block->default['waterfall']['program']['3']['source'] = 'program';
$lang->block->default['waterfall']['program']['3']['grid'] = 8;
@@ -160,7 +160,7 @@ $lang->block->default['scrum']['program']['5']['block'] = 'scrumproduct';
$lang->block->default['scrum']['program']['5']['grid'] = 4;
$lang->block->default['scrum']['program']['6']['title'] = $lang->projectCommon . '总览';
-$lang->block->default['scrum']['program']['6']['block'] = 'scrumproject';
+$lang->block->default['scrum']['program']['6']['block'] = 'sprint';
$lang->block->default['scrum']['program']['6']['grid'] = 4;
$lang->block->default['scrum']['program']['7']['title'] = '最新动态';
@@ -319,7 +319,7 @@ $lang->block->availableBlocks->case = '我的用例';
$lang->block->availableBlocks->story = "我的{$lang->storyCommon}";
$lang->block->availableBlocks->product = $lang->productCommon . '列表';
$lang->block->availableBlocks->project = $lang->projectCommon . '列表';
-$lang->block->availableBlocks->plan = '计划列表';
+$lang->block->availableBlocks->plan = "{$lang->planCommon}列表";
$lang->block->availableBlocks->release = '发布列表';
$lang->block->availableBlocks->build = '版本列表';
$lang->block->availableBlocks->testtask = '测试版本列表';
@@ -342,7 +342,7 @@ $lang->block->modules['scrum']['index']->availableBlocks = new stdclass();
$lang->block->modules['scrum']['index']->availableBlocks->scrumoverall = '项目整体情况';
$lang->block->modules['scrum']['index']->availableBlocks->scrumlist = $lang->projectCommon . '列表';
$lang->block->modules['scrum']['index']->availableBlocks->scrumroadmap = $lang->productCommon . '路线图';
-$lang->block->modules['scrum']['index']->availableBlocks->scrumproject = $lang->projectCommon . '总览';
+$lang->block->modules['scrum']['index']->availableBlocks->sprint = $lang->projectCommon . '总览';
$lang->block->modules['scrum']['index']->availableBlocks->scrumproduct = $lang->productCommon . '总览';
$lang->block->modules['scrum']['index']->availableBlocks->scrumtest = '待测版本';
@@ -350,7 +350,7 @@ $lang->block->modules['waterfall']['index'] = new stdclass();
$lang->block->modules['waterfall']['index']->availableBlocks = new stdclass();
$lang->block->modules['waterfall']['index']->availableBlocks->waterfallreport = '项目周报';
$lang->block->modules['waterfall']['index']->availableBlocks->waterfallestimate = '估算';
-$lang->block->modules['waterfall']['index']->availableBlocks->waterfallgantt = '计划甘特图';
+$lang->block->modules['waterfall']['index']->availableBlocks->waterfallgantt = "项目{$lang->planCommon}";
$lang->block->modules['waterfall']['index']->availableBlocks->waterfallprogress = '到目前为止项目进展趋势图';
$lang->block->modules['waterfall']['index']->availableBlocks->waterfallissue = '项目问题';
$lang->block->modules['waterfall']['index']->availableBlocks->waterfallrisk = '项目风险';
@@ -361,7 +361,7 @@ $lang->block->modules['product']->availableBlocks->statistic = $lang->productCom
$lang->block->modules['product']->availableBlocks->overview = $lang->productCommon . '总览';
$lang->block->modules['product']->availableBlocks->list = $lang->productCommon . '列表';
$lang->block->modules['product']->availableBlocks->story = "{$lang->storyCommon}列表";
-$lang->block->modules['product']->availableBlocks->plan = '计划列表';
+$lang->block->modules['product']->availableBlocks->plan = "{$lang->storyCommon}列表";
$lang->block->modules['product']->availableBlocks->release = '发布列表';
$lang->block->modules['project'] = new stdclass();
$lang->block->modules['project']->availableBlocks = new stdclass();
@@ -479,18 +479,19 @@ $lang->block->typeList->testtask['done'] = '已测版本';
$lang->block->typeList->testtask['all'] = '全部';
$lang->block->modules['program']->moreLinkList = new stdclass();
-$lang->block->modules['program']->moreLinkList->recentprogram = 'program|browse|';
-$lang->block->modules['program']->moreLinkList->statistic = 'program|browse|';
-$lang->block->modules['program']->moreLinkList->program = 'program|browse|';
-$lang->block->modules['program']->moreLinkList->waterfallreport = 'weekly|index|';
-$lang->block->modules['program']->moreLinkList->waterfallestimate = 'workestimation|index|';
-$lang->block->modules['program']->moreLinkList->waterfallissue = 'issue|browse|';
-$lang->block->modules['program']->moreLinkList->waterfallrisk = 'risk|browse|';
-$lang->block->modules['program']->moreLinkList->scrumlist = 'project|all|';
-$lang->block->modules['program']->moreLinkList->scrumtest = 'testtask|browse|';
-$lang->block->modules['program']->moreLinkList->scrumproduct = 'product|all|';
-$lang->block->modules['program']->moreLinkList->scrumproject = 'project|all|';
-$lang->block->modules['program']->moreLinkList->scrumdynamic = 'company|dynamic|';
+$lang->block->modules['program']->moreLinkList->recentprogram = 'program|browse|';
+$lang->block->modules['program']->moreLinkList->statistic = 'program|browse|';
+$lang->block->modules['program']->moreLinkList->program = 'program|browse|';
+$lang->block->modules['program']->moreLinkList->cmmireport = 'weekly|index|';
+$lang->block->modules['program']->moreLinkList->cmmiestimate = 'workestimation|index|';
+$lang->block->modules['program']->moreLinkList->cmmiissue = 'issue|browse|';
+$lang->block->modules['program']->moreLinkList->cmmirisk = 'risk|browse|';
+$lang->block->modules['program']->moreLinkList->scrumlist = 'project|all|';
+$lang->block->modules['program']->moreLinkList->scrumroadmap = 'product|all|';
+$lang->block->modules['program']->moreLinkList->scrumtest = 'testtask|browse|';
+$lang->block->modules['program']->moreLinkList->scrumproduct = 'product|all|';
+$lang->block->modules['program']->moreLinkList->sprint = 'project|all|';
+$lang->block->modules['program']->moreLinkList->scrumdynamic = 'company|dynamic|';
$lang->block->modules['product']->moreLinkList = new stdclass();
$lang->block->modules['product']->moreLinkList->list = 'product|all|product=&line=0&status=%s';
@@ -522,7 +523,7 @@ $lang->block->gridOptions[4] = '右侧';
$lang->block->flowchart = array();
$lang->block->flowchart['admin'] = array('管理员', '维护公司', '添加用户', '维护权限');
-$lang->block->flowchart['product'] = array($lang->productCommon . '经理', '创建' . $lang->productCommon, '维护模块', '维护计划', "维护{$lang->storyCommon}", '创建发布');
+$lang->block->flowchart['product'] = array($lang->productCommon . '经理', '创建' . $lang->productCommon, '维护模块', "维护{$lang->planCommon}", "维护{$lang->storyCommon}", '创建发布');
$lang->block->flowchart['project'] = array($lang->projectCommon . '经理', '创建' . $lang->projectCommon, '维护团队', '关联' . $lang->productCommon, "关联{$lang->storyCommon}", '分解任务');
$lang->block->flowchart['dev'] = array('研发人员', '领取任务和Bug', '更新状态', '完成任务和Bug');
$lang->block->flowchart['tester'] = array('测试人员', '撰写用例', '执行用例', '提交Bug', '验证Bug', '关闭Bug');
diff --git a/module/block/model.php b/module/block/model.php
index 36b16a6191..9b766d7876 100644
--- a/module/block/model.php
+++ b/module/block/model.php
@@ -936,7 +936,7 @@ class blockModel extends model
* @access public
* @return string
*/
- public function getScrumprojectParams($module = '')
+ public function getSprintParams($module = '')
{
$params->count['name'] = $this->lang->block->count;
$params->count['control'] = 'input';
diff --git a/module/block/view/scrumoverallblock.html.php b/module/block/view/scrumoverallblock.html.php
index ef533f30c9..5b142d3228 100644
--- a/module/block/view/scrumoverallblock.html.php
+++ b/module/block/view/scrumoverallblock.html.php
@@ -22,6 +22,7 @@
.hours-statistics{position: relative; padding: 0px 5px 5px; display: table-cell;text-align: center;}
.hours-statistics > small {display: block; color: #A6AAB8;}
.hours-statistics > span {display: block; color: #3c4353; font-weight: bold;}
+.tile-amount{font-size: 20px;}
diff --git a/module/block/view/scrumprojectblock.html.php b/module/block/view/sprintblock.html.php
similarity index 95%
rename from module/block/view/scrumprojectblock.html.php
rename to module/block/view/sprintblock.html.php
index 0ee6f555d9..6cc721b8cf 100644
--- a/module/block/view/scrumprojectblock.html.php
+++ b/module/block/view/sprintblock.html.php
@@ -1,6 +1,6 @@
diff --git a/module/block/view/waterfallriskblock.html.php b/module/block/view/waterfallriskblock.html.php
index 039082fdfb..ec914f3188 100644
--- a/module/block/view/waterfallriskblock.html.php
+++ b/module/block/view/waterfallriskblock.html.php
@@ -16,7 +16,7 @@
risk->status;?> |
-
risk->riskindex;?> |
+
risk->rate;?> |
risk->pri;?> |
risk->assignedTo;?> |
risk->category;?> |
@@ -38,7 +38,7 @@
risk->statusList, $risk->status);?>
-
riskindex?> |
+
rate?> |
risk->priList, $risk->pri, $risk->pri)?> |
assignedTo, $risk->assignedTo)?> |
risk->categoryList, $risk->category, $risk->category)?> |
diff --git a/module/bug/lang/zh-cn.php b/module/bug/lang/zh-cn.php
index dd8851bc5d..a924e0c9a7 100644
--- a/module/bug/lang/zh-cn.php
+++ b/module/bug/lang/zh-cn.php
@@ -14,7 +14,7 @@ $lang->bug->common = 'Bug';
$lang->bug->id = 'Bug编号';
$lang->bug->product = '所属' . $lang->productCommon;
$lang->bug->branch = '分支/平台';
-$lang->bug->productplan = '所属计划';
+$lang->bug->productplan = '所属' . $lang->planCommon;
$lang->bug->module = '所属模块';
$lang->bug->moduleAB = '模块';
$lang->bug->project = '所属' . $lang->projectCommon;
@@ -58,7 +58,7 @@ $lang->bug->resolvedBuild = '解决版本';
$lang->bug->resolvedDate = '解决日期';
$lang->bug->resolvedDateAB = '解决日期';
$lang->bug->deadline = '截止日期';
-$lang->bug->plan = '所属计划';
+$lang->bug->plan = '所属' . $lang->planCommon;
$lang->bug->closedBy = '由谁关闭';
$lang->bug->closedDate = '关闭日期';
$lang->bug->duplicateBug = '重复ID';
@@ -372,8 +372,8 @@ $lang->bug->action = new stdclass();
$lang->bug->action->resolved = array('main' => '$date, 由
$actor 解决,方案为
$extra $appendLink。', 'extra' => 'resolutionList');
$lang->bug->action->tostory = array('main' => '$date, 由
$actor 转为
' .$lang->storyCommon. ',编号为
$extra。');
$lang->bug->action->totask = array('main' => '$date, 由
$actor 导入为
任务,编号为
$extra。');
-$lang->bug->action->linked2plan = array('main' => '$date, 由
$actor 关联到计划
$extra。');
-$lang->bug->action->unlinkedfromplan = array('main' => '$date, 由
$actor 从计划
$extra 移除。');
+$lang->bug->action->linked2plan = array('main' => '$date, 由
$actor 关联到' . $lang->planCommon . '
$extra。');
+$lang->bug->action->unlinkedfromplan = array('main' => '$date, 由
$actor 从' . $lang->planCommon . '
$extra 移除。');
$lang->bug->action->linked2build = array('main' => '$date, 由
$actor 关联到版本
$extra。');
$lang->bug->action->unlinkedfrombuild = array('main' => '$date, 由
$actor 从版本
$extra 移除。');
$lang->bug->action->linked2release = array('main' => '$date, 由
$actor 关联到发布
$extra。');
diff --git a/module/common/lang/en.php b/module/common/lang/en.php
index dfa9b8f924..9b01e48ece 100644
--- a/module/common/lang/en.php
+++ b/module/common/lang/en.php
@@ -122,11 +122,8 @@ $lang->common->common = 'Common Module';
$lang->mainNav = new stdclass();
$lang->mainNav->my = ' My|my|index|';
$lang->mainNav->program = ' Program|program|index|';
-//$lang->mainNav->reporting = ' Report|report|index|';
-//$lang->mainNav->attend = '
Attend|attend|personal|';
$lang->mainNav->system = ' System|custom|estimate|';
$lang->mainNav->admin = ' Admin|admin|index|';
-//$lang->mainNav->recent = ' Recent|recent|index|';
$lang->reporting = new stdclass();
$lang->dividerMenu = ',admin,';
@@ -138,9 +135,6 @@ $lang->menu->product = $lang->productCommon . '|product|index|locate=no';
$lang->menu->project = 'Iteration|project|index|locate=no';
$lang->menu->doc = 'Doc|doc|index|';
$lang->menu->qa = 'Qa|qa|index';
-$lang->menu->company = new stdclass();
-
-$lang->program = new stdclass();
/* System menu. */
$lang->system = new stdclass();
@@ -159,7 +153,6 @@ if(isset($_COOKIE['systemModel']) and $_COOKIE['systemModel'] == 'scrum')
$lang->system->menu->holiday = array('link' => 'Holiday|holiday|browse|');
$lang->system->menu->custom = array('link' => 'Custom|custom|concept|');
- $lang->system->subMenu->setmodel->waterfall ='waterfall|custom|setwaterfall|';
$lang->mainNav->system = ' System|subject|settips|';
unset($lang->system->dividerMenu);
}
@@ -227,29 +220,21 @@ $lang->my = new stdclass();
$lang->my->menu = new stdclass();
$lang->my->menu->index = 'Home|my|index';
-//$lang->my->menu->todo = 'Todo|my|todo|';
-$lang->my->menu->effort = 'Effort|my|effort|';
-//$lang->my->menu->calendar = array('link' => 'Calendar|my|calendar|', 'subModule' => 'todo', 'alias' => 'todo');
+$lang->my->menu->todo = 'Todo|my|todo|';
$lang->my->menu->program = array('link' => 'Program|my|program|');
$lang->my->menu->task = array('link' => 'Task|my|task|', 'subModule' => 'task');
$lang->my->menu->bug = array('link' => 'Bug|my|bug|', 'subModule' => 'bug');
$lang->my->menu->testtask = array('link' => 'Request|my|testtask|', 'subModule' => 'testcase,testtask', 'alias' => 'testcase');
+$lang->my->menu->requirement = array('link' => "用户需求|my|requirement|", 'subModule' => 'story');
$lang->my->menu->story = array('link' => 'Story|my|story|', 'subModule' => 'story');
$lang->my->menu->myProject = "{$lang->projectCommon}|my|project|";
$lang->my->menu->dynamic = 'Dynamics|my|dynamic|';
-//$lang->my->menu->profile = array('link' => 'Profile|my|profile', 'alias' => 'editprofile');
-//$lang->my->menu->changePassword = 'Password|my|changepassword';
-//$lang->my->menu->manageContacts = 'Contact|my|managecontacts';
-//$lang->my->menu->score = array('link' => 'Points|my|score', 'subModule' => 'score');
$lang->my->dividerMenu = ',program,requirement,dynamic,';
$lang->todo = new stdclass();
$lang->todo->menu = $lang->my->menu;
-$lang->score = new stdclass();
-$lang->score->menu = $lang->my->menu;
-
/* Product menu settings. */
$lang->product = new stdclass();
$lang->product->menu = new stdclass();
@@ -452,10 +437,6 @@ $lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => 'Home|admin|index', 'alias' => 'register,certifytemail,certifyztmobile,ztcompany');
$lang->admin->menu->company = array('link' => 'Company|company|browse|', 'subModule' => ',user,dept,group,', 'alias' => ',dynamic,view,');
$lang->admin->menu->message = array('link' => 'Notification|message|index', 'subModule' => 'message,mail,webhook');
-//$lang->admin->menu->custom = array('link' => 'Custom|custom|set', 'subModule' => 'custom');
-//$lang->admin->menu->sso = array('link' => 'Integration|admin|sso');
-//$lang->admin->menu->dev = array('link' => 'Develop|dev|api', 'alias' => 'db', 'subModule' => 'dev,entry');
-//$lang->admin->menu->translate = array('link' => 'Translate|dev|translate');
$lang->admin->menu->data = array('link' => 'Data|backup|index', 'subModule' => 'backup,action');
$lang->admin->menu->safe = array('link' => 'Security|admin|safe', 'alias' => 'checkweak');
$lang->admin->menu->system = array('link' => 'System|cron|index', 'subModule' => 'cron');
diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php
index 6a3bd2ddbb..de7b92c4df 100755
--- a/module/common/lang/zh-cn.php
+++ b/module/common/lang/zh-cn.php
@@ -175,7 +175,7 @@ $lang->searchObjects['product'] = $lang->productCommon;
$lang->searchObjects['user'] = '用户';
$lang->searchObjects['build'] = '版本';
$lang->searchObjects['release'] = '发布';
-$lang->searchObjects['productplan'] = $lang->productCommon . '计划';
+$lang->searchObjects['productplan'] = $lang->productCommon . $lang->planCommon;
$lang->searchObjects['testtask'] = '测试单';
$lang->searchObjects['doc'] = '文档';
$lang->searchObjects['caselib'] = '用例库';
@@ -240,7 +240,7 @@ $lang->product = new stdclass();
$lang->product->menu = new stdclass();
$lang->product->menu->story = array('link' => "{$lang->storyCommon}|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story');
-$lang->product->menu->plan = array('link' => '计划|productplan|browse|productID=%s', 'subModule' => 'productplan');
+$lang->product->menu->plan = array('link' => "{$lang->planCommon}|productplan|browse|productID=%s", 'subModule' => 'productplan');
$lang->product->menu->release = array('link' => '发布|release|browse|productID=%s', 'subModule' => 'release');
$lang->product->menu->roadmap = '路线图|product|roadmap|productID=%s';
$lang->product->menu->project = "{$lang->projectCommon}|product|project|status=all&productID=%s";
@@ -866,7 +866,7 @@ $lang->budget->menu = $lang->workestimation->menu;
$lang->programplan->menu->gantt = array('link' => '甘特图|programplan|browse|programID={PROGRAM}&productID={PRODUCT}&type=gantt');
$lang->programplan->menu->lists = array('link' => '阶段列表|programplan|browse|programID={PROGRAM}&productID={PRODUCT}&type=lists', 'alias' => 'create');
-$lang->waterfallproduct->menu->plan = array('link' => '排期|productplan|browse|productID={PRODUCT}', 'subModule' => 'productplan');
+$lang->waterfallproduct->menu->plan = array('link' => "{$lang->planCommon}|productplan|browse|productID={PRODUCT}", 'subModule' => 'productplan');
$lang->waterfallproduct->menu->requirement = '用户需求|product|browse|product={PRODUCT}&branch=&browseType=unclosed&queryID=0&storyType=requirement';
$lang->waterfallproduct->menu->story = '软件需求|product|browse|product={PRODUCT}&branch=&browseType=unclosed&queryID=0&storyType=story';
$lang->waterfallproduct->menu->track = '跟踪矩阵|story|track|product={PRODUCT}';
diff --git a/module/common/model.php b/module/common/model.php
index b1b9895bc1..9ff7f1f9c5 100644
--- a/module/common/model.php
+++ b/module/common/model.php
@@ -614,6 +614,7 @@ class commonModel extends model
$subLink = helper::createLink($subModule, $subMethod, $subParams);
if($subMenuItem->name == 'program')
{
+ /* Print program sub menu.*/
global $dbh;
$program = $dbh->query("SELECT * FROM " . TABLE_PROJECT . " WHERE `id` = '{$app->session->program}'")->fetch();
$subActive .= 'dropdown-submenu';
@@ -2116,6 +2117,16 @@ EOD;
return $response;
}
+ /**
+ * Set main menu by nav group.
+ *
+ * @param string $group
+ * @param string $moduleName
+ * @param string $methodName
+ * @static
+ * @access public
+ * @return string
+ */
public static function setMainMenuByGroup($group, $moduleName, $methodName)
{
global $lang;
@@ -2149,6 +2160,14 @@ EOD;
if($group == 'program') $lang->menu = self::getProgramMainMenu($moduleName);
}
+ /**
+ * Replace menu vars.
+ *
+ * @param object $menus
+ * @static
+ * @access public
+ * @return string
+ */
public static function processMenuVars($menus)
{
global $app, $lang;
@@ -2176,6 +2195,14 @@ EOD;
return $menus;
}
+ /**
+ * Get program main menu by template.
+ *
+ * @param varchar $moduleName
+ * @static
+ * @access public
+ * @return string
+ */
public static function getProgramMainMenu($moduleName)
{
global $app, $lang, $dbh;
@@ -2197,6 +2224,14 @@ EOD;
}
}
+ /**
+ * Get program module menu by template.
+ *
+ * @param varchar $moduleName
+ * @static
+ * @access public
+ * @return string
+ */
public static function getProgramModuleMenu($moduleName)
{
global $app, $lang, $dbh;
@@ -2211,6 +2246,17 @@ EOD;
}
}
+ /**
+ * Get relations for two object.
+ *
+ * @param varchar $AType
+ * @param int $AID
+ * @param varchar $BType
+ * @param int $BID
+ * @static
+ * @access public
+ * @return string
+ */
public function getRelations($AType = '', $AID = 0, $BType = '', $BID = 0)
{
return $this->dao->select('*')->from(TABLE_RELATION)
diff --git a/module/common/view/header.html.php b/module/common/view/header.html.php
index 94f4e55e95..7a5b607538 100755
--- a/module/common/view/header.html.php
+++ b/module/common/view/header.html.php
@@ -19,8 +19,8 @@ include 'chosen.html.php';
- loadModel('program')->getSwapper($this->program->getPairs(), $this->session->program, $app->rawModule, $app->rawMethod);?>
- loadModel('custom')->getSwapper();?>
+ loadModel('program')->getSwitcher($this->program->getPairs(), $this->session->program, $app->rawModule, $app->rawMethod);?>
+ loadModel('custom')->getModeSwitcher();?>
diff --git a/module/custom/lang/de.php b/module/custom/lang/de.php
index 235353bc18..0f44e7ff45 100644
--- a/module/custom/lang/de.php
+++ b/module/custom/lang/de.php
@@ -1,24 +1,67 @@
custom->common = 'Custom';
-$lang->custom->index = 'Home';
-$lang->custom->set = 'Customize';
-$lang->custom->restore = 'Reset to Default';
-$lang->custom->key = 'Key';
-$lang->custom->value = 'Value';
-$lang->custom->flow = 'Concept';
-$lang->custom->working = 'WorkStyle';
-$lang->custom->select = 'Select Concept';
-$lang->custom->branch = 'Multi Branch';
-$lang->custom->owner = 'Owner';
-$lang->custom->module = 'Module';
-$lang->custom->section = 'Section';
-$lang->custom->lang = 'Language';
-$lang->custom->setPublic = 'Set Public';
-$lang->custom->required = 'Required';
-$lang->custom->score = 'Score';
-$lang->custom->timezone = 'Timezone';
-$lang->custom->scoreReset = 'Reset Score';
-$lang->custom->scoreTitle = 'Point Feature';
+$lang->custom->common = 'Custom';
+$lang->custom->index = 'Home';
+$lang->custom->set = 'Customize';
+$lang->custom->restore = 'Reset to Default';
+$lang->custom->key = 'Key';
+$lang->custom->value = 'Value';
+$lang->custom->flow = 'Concept';
+$lang->custom->working = 'WorkStyle';
+$lang->custom->select = 'Select Concept';
+$lang->custom->branch = 'Multi Branch';
+$lang->custom->owner = 'Owner';
+$lang->custom->module = 'Module';
+$lang->custom->section = 'Section';
+$lang->custom->lang = 'Language';
+$lang->custom->setPublic = 'Set Public';
+$lang->custom->required = 'Required';
+$lang->custom->score = 'Score';
+$lang->custom->timezone = 'Timezone';
+$lang->custom->scoreReset = 'Reset Score';
+$lang->custom->scoreTitle = 'Point Feature';
+$lang->custom->setscrum = 'Interval Hint';
+$lang->custom->setWaterfall = 'Switch Views';
+$lang->custom->estimate = 'Estimated configuration';
+$lang->custom->estimateConfig = 'Estimated configuration';
+$lang->custom->estimateUnit = 'Estimating Unit';
+$lang->custom->estimateEfficiency = 'Productivity';
+$lang->custom->estimateCost = 'Unit Labour Cost';
+$lang->custom->estimateHours = 'Daily Working Hours';
+$lang->custom->estimateDays = 'Working Days Per Week';
+$lang->custom->region = 'Interval';
+$lang->custom->tips = 'Tips';
+$lang->custom->setTips = 'Set Tips';
+$lang->custom->isRange = 'Is Target Control';
+$lang->custom->plan = 'Plan';
+$lang->custom->planStatus = 'Enable Plan';
+$lang->custom->concept = 'Concept';
+
+$lang->custom->object['program'] = 'Program';
+$lang->custom->program->fields['unitList'] = 'Unit List';
+
+$lang->custom->unitList['efficiency'] = 'Working Hours/';
+$lang->custom->unitList['manhour'] = 'Man-hour/';
+$lang->custom->unitList['cost'] = 'Yuan/Hour';
+$lang->custom->unitList['hours'] = 'Hours';
+$lang->custom->unitList['days'] = 'Days';
+$lang->custom->unitList['loc'] = 'KLOC';
+
+$lang->custom->tipProgressList['SPI'] = 'Schedule Performance Index(SPI)';
+$lang->custom->tipProgressList['SV'] = 'Schedule Variance(SV%)';
+
+$lang->custom->tipCostList['CPI'] = 'Cost Performed Index(CPI)';
+$lang->custom->tipCostList['CV'] = 'Cost Variance(CV%)';
+
+$lang->custom->planStatusList[0] = 'No';
+$lang->custom->planStatusList[1] = 'Yes';
+
+$lang->custom->tipRangeList[0] = 'No';
+$lang->custom->tipRangeList[1] = 'Yes';
+
+$lang->custom->regionMustNumber = 'The interval must be a number!';
+$lang->custom->tipNotEmpty = 'The prompt can not be empty!';
+
+$lang->custom->numberError = 'The interval must be greater than zero!';
$lang->custom->object['story'] = 'Story';
$lang->custom->object['task'] = 'Task';
@@ -127,9 +170,6 @@ $lang->custom->weekendList[1] = '1-Day Off';
$lang->custom->productProject = new stdclass();
$lang->custom->productProject->relation['0_0'] = 'Product - Project';
$lang->custom->productProject->relation['0_1'] = 'Product - Iteration';
-$lang->custom->productProject->relation['1_1'] = 'Project - Iteration';
-$lang->custom->productProject->relation['0_2'] = 'Product - Sprint';
-$lang->custom->productProject->relation['1_2'] = 'Project - Sprint';
$lang->custom->productProject->notice = 'Please select a concept according to your team.';
@@ -158,6 +198,6 @@ $lang->custom->conceptOptions->story['0'] = 'Requiremenet';
$lang->custom->conceptOptions->story['1'] = 'Story';
$lang->custom->conceptOptions->hourPoint = array();
-$lang->custom->conceptOptions->hourPoint['0'] = 'Hour';
$lang->custom->conceptOptions->hourPoint['1'] = 'Story Point';
$lang->custom->conceptOptions->hourPoint['2'] = 'Function Point';
+$lang->custom->conceptOptions->hourPoint['3'] = 'Code Line';
diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php
index e6ca436090..ac93f64768 100644
--- a/module/custom/lang/en.php
+++ b/module/custom/lang/en.php
@@ -198,7 +198,6 @@ $lang->custom->conceptOptions->story['0'] = 'Requiremenet';
$lang->custom->conceptOptions->story['1'] = 'Story';
$lang->custom->conceptOptions->hourPoint = array();
-$lang->custom->conceptOptions->hourPoint['0'] = 'Hour';
$lang->custom->conceptOptions->hourPoint['1'] = 'Story Point';
$lang->custom->conceptOptions->hourPoint['2'] = 'Function Ponit';
$lang->custom->conceptOptions->hourPoint['3'] = 'Code Line';
diff --git a/module/custom/lang/fr.php b/module/custom/lang/fr.php
index e20e039409..8595526b3f 100644
--- a/module/custom/lang/fr.php
+++ b/module/custom/lang/fr.php
@@ -1,24 +1,67 @@
custom->common = 'Personnalisation';
-$lang->custom->index = 'Accueil';
-$lang->custom->set = 'Personnaliser';
-$lang->custom->restore = 'Réinitialiser';
-$lang->custom->key = 'Clé';
-$lang->custom->value = 'Valeur';
-$lang->custom->flow = 'Concept';
-$lang->custom->working = 'Mode';
-$lang->custom->select = 'Choix du Concept';
-$lang->custom->branch = 'Multi-Branches';
-$lang->custom->owner = 'Propriétaire';
-$lang->custom->module = 'Module';
-$lang->custom->section = 'Section';
-$lang->custom->lang = 'Langue';
-$lang->custom->setPublic = 'Set Public';
-$lang->custom->required = 'Champ Obligatoire';
-$lang->custom->score = 'Point';
-$lang->custom->timezone = 'Timezone';
-$lang->custom->scoreReset = 'Réinit Points';
-$lang->custom->scoreTitle = 'Fonctionnalité des Points';
+$lang->custom->common = 'Personnalisation';
+$lang->custom->index = 'Accueil';
+$lang->custom->set = 'Personnaliser';
+$lang->custom->restore = 'Réinitialiser';
+$lang->custom->key = 'Clé';
+$lang->custom->value = 'Valeur';
+$lang->custom->flow = 'Concept';
+$lang->custom->working = 'Mode';
+$lang->custom->select = 'Choix du Concept';
+$lang->custom->branch = 'Multi-Branches';
+$lang->custom->owner = 'Propriétaire';
+$lang->custom->module = 'Module';
+$lang->custom->section = 'Section';
+$lang->custom->lang = 'Langue';
+$lang->custom->setPublic = 'Set Public';
+$lang->custom->required = 'Champ Obligatoire';
+$lang->custom->score = 'Point';
+$lang->custom->timezone = 'Timezone';
+$lang->custom->scoreReset = 'Réinit Points';
+$lang->custom->scoreTitle = 'Fonctionnalité des Points';
+$lang->custom->setscrum = 'Interval Hint';
+$lang->custom->setWaterfall = 'Switch Views';
+$lang->custom->estimate = 'Estimated configuration';
+$lang->custom->estimateConfig = 'Estimated configuration';
+$lang->custom->estimateUnit = 'Estimating Unit';
+$lang->custom->estimateEfficiency = 'Productivity';
+$lang->custom->estimateCost = 'Unit Labour Cost';
+$lang->custom->estimateHours = 'Daily Working Hours';
+$lang->custom->estimateDays = 'Working Days Per Week';
+$lang->custom->region = 'Interval';
+$lang->custom->tips = 'Tips';
+$lang->custom->setTips = 'Set Tips';
+$lang->custom->isRange = 'Is Target Control';
+$lang->custom->plan = 'Plan';
+$lang->custom->planStatus = 'Enable Plan';
+$lang->custom->concept = 'Concept';
+
+$lang->custom->object['program'] = 'Program';
+$lang->custom->program->fields['unitList'] = 'Unit List';
+
+$lang->custom->unitList['efficiency'] = 'Working Hours/';
+$lang->custom->unitList['manhour'] = 'Man-hour/';
+$lang->custom->unitList['cost'] = 'Yuan/Hour';
+$lang->custom->unitList['hours'] = 'Hours';
+$lang->custom->unitList['days'] = 'Days';
+$lang->custom->unitList['loc'] = 'KLOC';
+
+$lang->custom->tipProgressList['SPI'] = 'Schedule Performance Index(SPI)';
+$lang->custom->tipProgressList['SV'] = 'Schedule Variance(SV%)';
+
+$lang->custom->tipCostList['CPI'] = 'Cost Performed Index(CPI)';
+$lang->custom->tipCostList['CV'] = 'Cost Variance(CV%)';
+
+$lang->custom->planStatusList[0] = 'No';
+$lang->custom->planStatusList[1] = 'Yes';
+
+$lang->custom->tipRangeList[0] = 'No';
+$lang->custom->tipRangeList[1] = 'Yes';
+
+$lang->custom->regionMustNumber = 'The interval must be a number!';
+$lang->custom->tipNotEmpty = 'The prompt can not be empty!';
+
+$lang->custom->numberError = 'The interval must be greater than zero!';
$lang->custom->object['story'] = 'Story';
$lang->custom->object['task'] = 'Tâche';
@@ -127,9 +170,6 @@ $lang->custom->weekendList[1] = '1-Jour';
$lang->custom->productProject = new stdclass();
$lang->custom->productProject->relation['0_0'] = 'Product - Project';
$lang->custom->productProject->relation['0_1'] = 'Product - Iteration';
-$lang->custom->productProject->relation['1_1'] = 'Project - Iteration';
-$lang->custom->productProject->relation['0_2'] = 'Product - Sprint';
-$lang->custom->productProject->relation['1_2'] = 'Project - Sprint';
$lang->custom->productProject->notice = 'Sélectionnez le concept qui correspond à votre équipe.';
@@ -158,6 +198,6 @@ $lang->custom->conceptOptions->story['0'] = 'Exigence';
$lang->custom->conceptOptions->story['1'] = 'Story';
$lang->custom->conceptOptions->hourPoint = array();
-$lang->custom->conceptOptions->hourPoint['0'] = 'Heures';
$lang->custom->conceptOptions->hourPoint['1'] = 'Points de Story';
$lang->custom->conceptOptions->hourPoint['2'] = 'Points de Fonction';
+$lang->custom->conceptOptions->hourPoint['3'] = 'Code Line';
diff --git a/module/custom/lang/vi.php b/module/custom/lang/vi.php
index ebbe49bd0f..b2242a89ca 100644
--- a/module/custom/lang/vi.php
+++ b/module/custom/lang/vi.php
@@ -1,24 +1,67 @@
custom->common = 'Tùy biến';
-$lang->custom->index = 'Trang chủ';
-$lang->custom->set = 'Tùy biến';
-$lang->custom->restore = 'Thiết lập lại';
-$lang->custom->key = 'Khóa';
-$lang->custom->value = 'Giá trị';
-$lang->custom->flow = 'Mô hình';
-$lang->custom->working = 'Chế độ';
-$lang->custom->select = 'Chọn mô hình';
-$lang->custom->branch = 'Multi-Branch';
-$lang->custom->owner = 'Sở hữu';
-$lang->custom->module = 'Module';
-$lang->custom->section = 'Section';
-$lang->custom->lang = 'Ngôn ngữ';
-$lang->custom->setPublic = 'Thiết lập Public';
-$lang->custom->required = 'Trường bắt buộc';
-$lang->custom->score = 'Điểm';
-$lang->custom->timezone = 'Timezone';
-$lang->custom->scoreReset = 'Thiết lập lại điểm';
-$lang->custom->scoreTitle = 'Tính năng điểm';
+$lang->custom->common = 'Tùy biến';
+$lang->custom->index = 'Trang chủ';
+$lang->custom->set = 'Tùy biến';
+$lang->custom->restore = 'Thiết lập lại';
+$lang->custom->key = 'Khóa';
+$lang->custom->value = 'Giá trị';
+$lang->custom->flow = 'Mô hình';
+$lang->custom->working = 'Chế độ';
+$lang->custom->select = 'Chọn mô hình';
+$lang->custom->branch = 'Multi-Branch';
+$lang->custom->owner = 'Sở hữu';
+$lang->custom->module = 'Module';
+$lang->custom->section = 'Section';
+$lang->custom->lang = 'Ngôn ngữ';
+$lang->custom->setPublic = 'Thiết lập Public';
+$lang->custom->required = 'Trường bắt buộc';
+$lang->custom->score = 'Điểm';
+$lang->custom->timezone = 'Timezone';
+$lang->custom->scoreReset = 'Thiết lập lại điểm';
+$lang->custom->scoreTitle = 'Tính năng điểm';
+$lang->custom->setscrum = 'Interval Hint';
+$lang->custom->setWaterfall = 'Switch Views';
+$lang->custom->estimate = 'Estimated configuration';
+$lang->custom->estimateConfig = 'Estimated configuration';
+$lang->custom->estimateUnit = 'Estimating Unit';
+$lang->custom->estimateEfficiency = 'Productivity';
+$lang->custom->estimateCost = 'Unit Labour Cost';
+$lang->custom->estimateHours = 'Daily Working Hours';
+$lang->custom->estimateDays = 'Working Days Per Week';
+$lang->custom->region = 'Interval';
+$lang->custom->tips = 'Tips';
+$lang->custom->setTips = 'Set Tips';
+$lang->custom->isRange = 'Is Target Control';
+$lang->custom->plan = 'Plan';
+$lang->custom->planStatus = 'Enable Plan';
+$lang->custom->concept = 'Concept';
+
+$lang->custom->object['program'] = 'Program';
+$lang->custom->program->fields['unitList'] = 'Unit List';
+
+$lang->custom->unitList['efficiency'] = 'Working Hours/';
+$lang->custom->unitList['manhour'] = 'Man-hour/';
+$lang->custom->unitList['cost'] = 'Yuan/Hour';
+$lang->custom->unitList['hours'] = 'Hours';
+$lang->custom->unitList['days'] = 'Days';
+$lang->custom->unitList['loc'] = 'KLOC';
+
+$lang->custom->tipProgressList['SPI'] = 'Schedule Performance Index(SPI)';
+$lang->custom->tipProgressList['SV'] = 'Schedule Variance(SV%)';
+
+$lang->custom->tipCostList['CPI'] = 'Cost Performed Index(CPI)';
+$lang->custom->tipCostList['CV'] = 'Cost Variance(CV%)';
+
+$lang->custom->planStatusList[0] = 'No';
+$lang->custom->planStatusList[1] = 'Yes';
+
+$lang->custom->tipRangeList[0] = 'No';
+$lang->custom->tipRangeList[1] = 'Yes';
+
+$lang->custom->regionMustNumber = 'The interval must be a number!';
+$lang->custom->tipNotEmpty = 'The prompt can not be empty!';
+
+$lang->custom->numberError = 'The interval must be greater than zero!';
$lang->custom->object['story'] = 'Câu chuyện';
$lang->custom->object['task'] = 'Nhiệm vụ';
@@ -127,9 +170,6 @@ $lang->custom->weekendList[1] = '1 ngày nghỉ';
$lang->custom->productProject = new stdclass();
$lang->custom->productProject->relation['0_0'] = 'Sản phẩm - Dự án';
$lang->custom->productProject->relation['0_1'] = 'Sản phẩm - lặp lại';
-$lang->custom->productProject->relation['1_1'] = 'Dự án - lặp lại';
-$lang->custom->productProject->relation['0_2'] = 'Sản phẩm - Sprint';
-$lang->custom->productProject->relation['1_2'] = 'Dự án - Sprint';
$lang->custom->productProject->notice = 'Chọn một mô hình phù hợp với doanh nghiệp của bạn.';
@@ -158,6 +198,6 @@ $lang->custom->conceptOptions->story['0'] = 'Điều kiện';
$lang->custom->conceptOptions->story['1'] = 'Câu chuyện';
$lang->custom->conceptOptions->hourPoint = array();
-$lang->custom->conceptOptions->hourPoint['0'] = 'Giờ';
$lang->custom->conceptOptions->hourPoint['1'] = 'Điểm';
$lang->custom->conceptOptions->hourPoint['2'] = 'Function Point';
+$lang->custom->conceptOptions->hourPoint['3'] = 'Code Line';
diff --git a/module/custom/model.php b/module/custom/model.php
index 44843e9782..41612151ec 100644
--- a/module/custom/model.php
+++ b/module/custom/model.php
@@ -362,13 +362,13 @@ class customModel extends model
}
/**
- * Get system swapper.
+ * Get system mode switcher.
* @param string $module
* @param string $method
* @access public
* @return array
*/
- public function getSwapper()
+ public function getModeSwitcher()
{
$current = (isset($_COOKIE['systemModel']) and $_COOKIE['systemModel'] == 'scrum') ? 'Scrum' : 'CMMI';
$link = (isset($_COOKIE['systemModel']) and $_COOKIE['systemModel'] == 'scrum') ? html::a(helper::createLink('custom', 'setwaterfall'), 'CMMI') : html::a(helper::createLink('custom', 'setscrum'), 'Scrum');
diff --git a/module/dept/model.php b/module/dept/model.php
index 49add44902..4e735cc36e 100644
--- a/module/dept/model.php
+++ b/module/dept/model.php
@@ -349,7 +349,10 @@ class deptModel extends model
/**
* Get users of a deparment.
*
- * @param int $deptID
+ * @param varchar $browseType inside|outside|all
+ * @param int $deptID
+ * @param object $pager
+ * @param varchar $orderBy
* @access public
* @return array
*/
@@ -357,7 +360,7 @@ class deptModel extends model
{
return $this->dao->select('*')->from(TABLE_USER)
->where('deleted')->eq(0)
- ->beginIF($browseType == 'inside')->andWhere('type')->eq('')->fi()
+ ->beginIF($browseType == 'inside')->andWhere('type')->eq('inside')->fi()
->beginIF($browseType == 'outside')->andWhere('type')->eq('outside')->fi()
->beginIF($deptID)->andWhere('dept')->in($deptID)->fi()
->orderBy($orderBy)
diff --git a/module/design/config.php b/module/design/config.php
index 92ff3e5832..61486c4830 100644
--- a/module/design/config.php
+++ b/module/design/config.php
@@ -21,8 +21,6 @@ $config->design->search['fields']['commit'] = $lang->design->submission;
$config->design->search['fields']['createdBy'] = $lang->design->createdBy;
$config->design->search['fields']['createdDate'] = $lang->design->createdDate;
$config->design->search['fields']['assignedTo'] = $lang->design->assignedTo;
-$config->design->search['fields']['commitBy'] = $lang->design->commitBy;
-$config->design->search['fields']['commitDate'] = $lang->design->commitDate;
$config->design->search['fields']['story'] = $lang->design->story;
$config->design->search['params']['type'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->design->typeList);
@@ -31,6 +29,4 @@ $config->design->search['params']['commit'] = array('operator' => 'include'
$config->design->search['params']['createdBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users');
$config->design->search['params']['createdDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date');
$config->design->search['params']['assignedTo'] = array('operator' => '=', 'control' => 'select', 'values' => 'users');
-$config->design->search['params']['commitBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users');
-$config->design->search['params']['commitDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date');
$config->design->search['params']['story'] = array('operator' => '=', 'control' => 'select', 'values' => '');
diff --git a/module/design/control.php b/module/design/control.php
index 74373af463..1baf251190 100644
--- a/module/design/control.php
+++ b/module/design/control.php
@@ -2,7 +2,7 @@
/**
* The control file of design module of ZenTaoPMS.
*
- * @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
+ * @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Chunsheng Wang
* @package design
@@ -220,13 +220,16 @@ class design extends control
*/
public function linkCommit($designID = 0, $repoID = 0, $begin = '', $end = '', $recTotal = 0, $recPerPage = 50, $pageID = 1)
{
+ /* Init pager and get designs. */
$this->app->loadClass('pager', $static = true);
$pager = new pager($recTotal, $recPerPage, $pageID);
+ /* Get program and date. */
$program = $this->loadModel('project')->getByID($this->session->program);
$begin = $begin ? date('Y-m-d', strtotime($begin)) : $program->begin;
$end = $end ? date('Y-m-d', strtotime($end)) : helper::today();
+ /* Get the repository information through the repoID. */
$repos = $this->loadModel('repo')->getRepoPairs($this->session->program);
$repoID = $repoID ? $repoID : key($repos);
$repo = $repoID ? $this->loadModel('repo')->getRepoByID($repoID) : '';
@@ -243,6 +246,7 @@ class design extends control
$this->send($result);
}
+ /* Linked submission. */
$linkedRevisions = array();
$relations = $this->loadModel('common')->getRelations('design', $designID, 'commit');
foreach($relations as $relation) $linkedRevisions[] = $relation->BID;
@@ -265,7 +269,29 @@ class design extends control
}
/**
- * A version of the code base.
+ * Design unlink commits.
+ *
+ * @param int $designID
+ * @param int $commitID
+ * @param string $confirm
+ * @access public
+ * @return void
+ */
+ public function unlinkCommit($designID = 0, $commitID = 0, $confirm = 'no')
+ {
+ if($confirm == 'no')
+ {
+ die(js::confirm($this->lang->design->confirmUnlink, inlink('unlinkCommit', "designID=$designID&commitID=$commitID&confirm=yes")));
+ }
+ else
+ {
+ $this->design->unlinkCommit($designID, $commitID);
+ die(js::reload('parent'));
+ }
+ }
+
+ /**
+ * A version of the repository.
*
* @param int $repoID
* @access public
@@ -278,6 +304,31 @@ class design extends control
header("location:" . $repoURL);
}
+ /**
+ * View a design's commit.
+ *
+ * @param int $designID
+ * @param int $recTotal
+ * @param int $recPerPage
+ * @param int $pageID
+ * @access public
+ * @return void
+ */
+ public function viewCommit($designID = 0, $recTotal = 0, $recPerPage = 20, $pageID = 1)
+ {
+ /* Init pager and get designs. */
+ $this->app->loadClass('pager', $static = true);
+ $pager = pager::init($recTotal, $recPerPage, $pageID);
+
+ $this->view->title = $this->lang->design->common . $this->lang->colon . $this->lang->design->submission;
+ $this->view->position[] = $this->lang->design->submission;
+
+ $this->view->design = $this->design->getCommit($designID, $pager);
+ $this->view->pager = $pager;
+
+ $this->display();
+ }
+
/**
* Delete a design.
*
diff --git a/module/design/js/linkcommit.js b/module/design/js/linkcommit.js
index 3e15d442a5..ffeae66e03 100644
--- a/module/design/js/linkcommit.js
+++ b/module/design/js/linkcommit.js
@@ -17,5 +17,12 @@ $('#begin, #end, #repo').change(function()
for(i = 0 ; i < endarray.length ; i++) end = end + endarray[i];
}
+ if(begin > end)
+ {
+ alert(error);
+ location.href = createLink('design', 'linkCommit', "designID=" + designID + '&repoID=' + repo);
+ die;
+ }
+
location.href = createLink('design', 'linkCommit', "designID=" + designID + '&repoID=' + repo + '&begin=' + begin + '&end=' + end);
})
diff --git a/module/design/lang/en.php b/module/design/lang/en.php
index 9979ec2d85..7c9ada42ac 100644
--- a/module/design/lang/en.php
+++ b/module/design/lang/en.php
@@ -27,8 +27,8 @@ $lang->design->desc = 'Description';
$lang->design->range = 'Impact';
$lang->design->product = 'Linked Product';
$lang->design->basicInfo = 'Basic Information';
-$lang->design->commitDate = 'Committed Date';
$lang->design->commitBy = 'Commit By';
+$lang->design->commitDate = 'Committed Date';
$lang->design->affectedStory = "{$lang->storyCommon}";
$lang->design->affectedTasks = 'Task';
$lang->design->reviewObject = 'Review Object';
@@ -38,17 +38,19 @@ $lang->design->basicInfo = 'Basic Information';
$lang->design->noAssigned = 'Unassigned';
/* Action list. */
-$lang->design->common = 'Design';
-$lang->design->create = 'Create Design';
-$lang->design->batchCreate = 'Batch Create';
-$lang->design->edit = 'Edit';
-$lang->design->delete = 'Delete';
-$lang->design->view = 'View';
-$lang->design->browse = 'List';
-$lang->design->commit = 'Link Commit';
-$lang->design->submit = 'Submit Review';
-$lang->design->assignTo = 'Assign';
-$lang->design->revision = 'Linked Code';
+$lang->design->common = 'Design';
+$lang->design->create = 'Create Design';
+$lang->design->batchCreate = 'Batch Create';
+$lang->design->edit = 'Edit';
+$lang->design->delete = 'Delete';
+$lang->design->view = 'View';
+$lang->design->browse = 'List';
+$lang->design->viewCommit = 'View Commit';
+$lang->design->linkCommit = 'Link Commit';
+$lang->design->unlinkCommit = 'Unlink Commit';
+$lang->design->submit = 'Submit Review';
+$lang->design->assignTo = 'Assign';
+$lang->design->revision = 'Linked Code';
/* Field value. */
$lang->design->typeList = array();
@@ -69,4 +71,6 @@ $lang->design->featureBar += $lang->design->typeList;
$lang->design->errorSelection = 'No record selected!';
$lang->design->noDesign = 'No record.';
$lang->design->noCommit = 'No record commited.';
-$lang->design->confirmDelete = 'Do you want to delete this design?';
+$lang->design->confirmDelete = 'Do you want to delete this design?';
+$lang->design->confirmUnlink = 'Are you sure you want to remove this submission?';
+$lang->design->errorDate = 'The start date can not be greater than the end date.';
diff --git a/module/design/lang/zh-cn.php b/module/design/lang/zh-cn.php
index 7b8cb6bae4..be1155fe7e 100644
--- a/module/design/lang/zh-cn.php
+++ b/module/design/lang/zh-cn.php
@@ -38,17 +38,19 @@ $lang->design->basicInfo = '基本信息';
$lang->design->noAssigned = '未指派';
/* 动作列表. */
-$lang->design->common = '设计';
-$lang->design->create = '创建设计';
-$lang->design->batchCreate = '批量创建';
-$lang->design->edit = '变更';
-$lang->design->delete = '删除';
-$lang->design->view = '设计概况';
-$lang->design->browse = '浏览列表';
-$lang->design->linkCommit = '关联提交';
-$lang->design->submit = '提交评审';
-$lang->design->assignTo = '指派';
-$lang->design->revision = '查看关联代码';
+$lang->design->common = '设计';
+$lang->design->create = '创建设计';
+$lang->design->batchCreate = '批量创建';
+$lang->design->edit = '变更';
+$lang->design->delete = '删除';
+$lang->design->view = '设计概况';
+$lang->design->browse = '浏览列表';
+$lang->design->viewCommit = '查看提交';
+$lang->design->linkCommit = '关联提交';
+$lang->design->unlinkCommit = '取消关联';
+$lang->design->submit = '提交评审';
+$lang->design->assignTo = '指派';
+$lang->design->revision = '查看关联代码';
/* 字段取值. */
$lang->design->typeList = array();
@@ -70,3 +72,5 @@ $lang->design->errorSelection = '还没有选中记录!';
$lang->design->noDesign = '暂时没有记录';
$lang->design->noCommit = '暂时没有提交记录';
$lang->design->confirmDelete = '您确定要删除这个设计吗?';
+$lang->design->confirmUnlink = '您确定要移除这个提交吗?';
+$lang->design->errorDate = '开始日期不能大于结束日期';
diff --git a/module/design/model.php b/module/design/model.php
index 009ec8dfbd..02634d4131 100644
--- a/module/design/model.php
+++ b/module/design/model.php
@@ -2,7 +2,7 @@
/**
* The model file of design module of ZenTaoPMS.
*
- * @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
+ * @copyright Copyright 2009-2020 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Chunsheng Wang
* @package design
@@ -172,8 +172,6 @@ class designModel extends model
*/
public function linkCommit($designID = 0, $repoID = 0)
{
- $this->dao->delete()->from(TABLE_RELATION)->where('AType')->eq('design')->andWhere('AID')->eq($designID)->andWhere('BType')->eq('commit')->andWhere('relation')->eq('completedin')->exec();
- $this->dao->delete()->from(TABLE_RELATION)->where('AType')->eq('commit')->andWhere('BID')->eq($designID)->andWhere('BType')->eq('design')->andWhere('relation')->eq('completedfrom')->exec();
$revisions = $_POST['revision'];
foreach($revisions as $revision)
@@ -199,28 +197,41 @@ class designModel extends model
$this->dao->replace(TABLE_RELATION)->data($data)->autoCheck()->exec();
}
$design = new stdclass();
- $design->commit = implode(",", $revisions);
+ $design->commit = $this->dao->select('commit')->from(TABLE_DESIGN)->where('id')->eq($designID)->fetch('commit');
+
+ if($design->commit)
+ {
+ $design->commit = implode(",", $revisions) . "," . $design->commit;
+ }
+ else
+ {
+ $design->commit = implode(",", $revisions);
+ }
+
$design->commitDate = helper::now();
$design->commitBy = $this->app->user->account;
$this->dao->update(TABLE_DESIGN)->data($design)->autoCheck()->where('id')->eq($designID)->exec();
}
/**
- * Set product menu.
+ * Unlink commit.
*
- * @param int $productID
+ * @param int $designID
+ * @param int $commitID
* @access public
* @return void
*/
- public function setProductMenu($productID = 0)
+ public function unlinkCommit($designID = 0, $commitID = 0)
{
- $programID = $this->session->program;
- $program = $this->loadModel('project')->getByID($programID);
- $products = $this->loadModel('product')->getPairs('', $programID);
- $productID = in_array($productID, array_keys($products)) ? $productID : key($products);
+ /* Delete data in the zt_relation.*/
+ $this->dao->delete()->from(TABLE_RELATION)->where('AType')->eq('design')->andwhere('AID')->eq($designID)->andwhere('BType')->eq('commit')->andwhere('relation')->eq('completedin')->andWhere('BID')->eq($commitID)->exec();
+ $this->dao->delete()->from(TABLE_RELATION)->where('AType')->eq('commit')->andwhere('BID')->eq($designID)->andwhere('BType')->eq('design')->andwhere('relation')->eq('completedfrom')->andWhere('AID')->eq($commitID)->exec();
- $productID = $this->loadModel('product')->saveState($productID, $products);
- if($program->category == 'multiple') $this->loadModel('product')->setMenu($products, $productID);
+ /* Commit after unlinking. */
+ $commit = $this->dao->select('BID')->from(TABLE_RELATION)->where('AType')->eq('design')->andWhere('AID')->eq($designID)->fetchAll('BID');
+ $commit = implode(",", array_keys($commit));
+
+ $this->dao->update(TABLE_DESIGN)->set('commit')->eq($commit)->where('id')->eq($designID)->exec();
}
/**
@@ -240,6 +251,7 @@ class designModel extends model
$design->commit = '';
$relations = $this->loadModel('common')->getRelations('design', $designID, 'commit');
foreach($relations as $relation) $design->commit .= html::a(helper::createLink('design', 'revision', "repoID=$relation->BID"), "#$relation->BID", '_blank');
+
return $this->loadModel('file')->replaceImgURL($design, 'desc');
}
@@ -312,16 +324,44 @@ class designModel extends model
->fetchAll('id');
}
- foreach($designs as $id => $design)
- {
- $design->commit = '';
- $relations = $this->loadModel('common')->getRelations('design', $id, 'commit');
- foreach($relations as $relation) $design->commit .= html::a(helper::createLink('design', 'revision', "repoID=$relation->BID", '', true), "#$relation->BID", '_blank');
- }
-
return $designs;
}
+ /**
+ * Get commit.
+ *
+ * @param int $designID
+ * @param int $pager
+ * @access public
+ * @return object
+ */
+ public function getCommit($designID = 0, $pager = null)
+ {
+ $design = $this->dao->select('*')->from(TABLE_DESIGN)->where('id')->eq($designID)->fetch();
+
+ $design->commit = $this->dao->select('*')->from(TABLE_REPOHISTORY)->where('id')->in($design->commit)->page($pager)->fetchAll('id');
+
+ return $design;
+ }
+
+ /**
+ * Set product menu.
+ *
+ * @param int $productID
+ * @access public
+ * @return void
+ */
+ public function setProductMenu($productID = 0)
+ {
+ $programID = $this->session->program;
+ $program = $this->loadModel('project')->getByID($programID);
+ $products = $this->loadModel('product')->getPairs('', $programID);
+ $productID = in_array($productID, array_keys($products)) ? $productID : key($products);
+
+ $productID = $this->loadModel('product')->saveState($productID, $products);
+ if($program->category == 'multiple') $this->loadModel('product')->setMenu($products, $productID);
+ }
+
/**
* Get designs by search.
*
diff --git a/module/design/view/browse.html.php b/module/design/view/browse.html.php
index ba4ad2968f..63b3205ad6 100644
--- a/module/design/view/browse.html.php
+++ b/module/design/view/browse.html.php
@@ -42,10 +42,9 @@
recTotal}&recPerPage={$pager->recPerPage}";?>
- | idAB);?> |
+ design->id);?> |
design->type);?> |
design->name);?> |
- design->submission);?> |
design->createdBy);?> |
design->createdDate);?> |
design->assignedTo);?> |
@@ -58,23 +57,22 @@
id);?> |
design->typeList, $design->type);?> |
createLink('design', 'view', "id={$design->id}"), $design->name);?> |
- commit;?> |
createdBy;?> |
createdDate, 0, 11);?> |
design->printAssignedHtml($design, $users);?> |
id}";
- common::printIcon('design', 'edit', $vars, $design, 'list', 'fork', '', '', '', '', '', $design->program);
- common::printIcon('design', 'linkCommit', $vars, $design, 'list', 'link', '', 'iframe showinonlybody', true);
- common::printIcon('design', 'delete', $vars, $design, 'list', 'trash', 'hiddenwin', '', '', '', '', $design->program);
+ common::printIcon('design', 'edit', $vars, $design, 'list', 'fork', '', '', '', '', '', $design->program);
+ common::printIcon('design', 'viewCommit', $vars, $design, 'list', 'glasses', '', 'iframe showinonlybody', true);
+ common::printIcon('design', 'delete', $vars, $design, 'list', 'trash', 'hiddenwin', '', '', '', '', $design->program);
?>
|
-
+ id, $linkedRevisions)) continue;?>
|
- revision, $linkedRevisions)) echo 'checked="checked"'?>/>
+
|
@@ -84,4 +85,5 @@
+design->errorDate);?>
diff --git a/module/design/view/viewcommit.html.php b/module/design/view/viewcommit.html.php
new file mode 100644
index 0000000000..d0982c8b8a
--- /dev/null
+++ b/module/design/view/viewcommit.html.php
@@ -0,0 +1,57 @@
+
+ * @package design
+ * @version $Id: commit.html.php 4903 2013-06-26 05:32:59Z wyd621@gmail.com $
+ * @link http://www.zentao.net
+ */
+?>
+
+
+
+
+ id;?>
+ name?>
+ arrow . $lang->design->submission;?>
+
+
+
+ id", "" . $lang->design->linkCommit, '_blank', "class='btn btn-primary'");?>
+
+ commit)):?>
+
+
+
+
+
+ | design->submission;?> |
+ design->commitBy;?> |
+ design->commitDate;?> |
+ design->actions;?> |
+
+
+
+ commit as $commit):?>
+
+ | id"), "#$commit->id", '_blank');?> |
+ committer;?> |
+ time, 0, 11);?> |
+
+ id&commitID=$commit->id", $design, 'list', 'unlink', 'hiddenwin', 'iframe showinonlybody', true);?>
+ |
+
+
+
+
+
+
+
+
diff --git a/module/doc/control.php b/module/doc/control.php
index b2d425559a..df3cab5819 100644
--- a/module/doc/control.php
+++ b/module/doc/control.php
@@ -302,7 +302,7 @@ class doc extends control
if(!$docResult or dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
$docID = $docResult['id'];
- $files = isset($docResult['files']) ? $docResult['files'] : '';
+ $files = zget($docResult, 'files', '');
$lib = $this->doc->getLibByID($this->post->lib);
if($docResult['status'] == 'exists')
{
diff --git a/module/doc/view/browse.html.php b/module/doc/view/browse.html.php
index ea07434a31..16f0bda852 100644
--- a/module/doc/view/browse.html.php
+++ b/module/doc/view/browse.html.php
@@ -105,7 +105,7 @@ var browseType = '';
collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
collector, ',' . $this->app->user->account . ',') !== false ? $lang->doc->cancelCollection : $lang->doc->collect;?>
- | createLink('doc', 'browse', "libID={$lib->id}&browseType=all¶m=0&orderBy=$orderBy&from=$from"), " " . $lib->name);?> |
+ id}&browseType=all¶m=0&orderBy=$orderBy&from=$from"), " " . $lib->name);?> |
|
|
|
@@ -124,9 +124,9 @@ var browseType = '';
$attachLib):?>
- | createLink('doc', 'allLibs', "type=project&product={$currentLib->product}"), " " . $attachLib->name);?> |
+ product}"), " " . $attachLib->name);?> |
- createLink('doc', 'showFiles', "type=$type&objectID={$currentLib->$type}"), " " . $attachLib->name);?> |
+ $type}"), " " . $attachLib->name);?> |
|
|
@@ -141,7 +141,7 @@ var browseType = '';
collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
collector, ',' . $this->app->user->account . ',') !== false ? $lang->doc->cancelCollection : $lang->doc->collect;?>
- | createLink('doc', 'browse', "libID=$libID&browseType=bymodule¶m=$module->id&orderBy=$orderBy&from=$from"), " " . $module->name);?> |
+ id&orderBy=$orderBy&from=$from"), " " . $module->name);?> |
|
|
|
@@ -158,7 +158,7 @@ var browseType = '';
collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
collector, ',' . $this->app->user->account . ',') !== false ? $lang->doc->cancelCollection : $lang->doc->collect;?>
- | createLink('doc', 'view', "docID=$doc->id"), " " . $doc->title);?> |
+ id"), " " . $doc->title);?> |
fileSize ? $doc->fileSize : '-';?> |
addedBy);?> |
addedDate, 'y-m-d');?> |
diff --git a/module/doc/view/side.html.php b/module/doc/view/side.html.php
index 2dbf572ce4..f2d940ea7c 100644
--- a/module/doc/view/side.html.php
+++ b/module/doc/view/side.html.php
@@ -66,19 +66,19 @@ $sideWidth = common::checkNotCN() ? '270' : '238';
createLink('doc', 'allLibs', "type=project&product=$tabMenu->id");
+ $subLibLink = inlink('allLibs', "type=project&product=$tabMenu->id");
$activeClass = ($this->methodName == 'alllibs' && $type == 'project' && $$tabValue == $tabMenu->id) ? "class='active'" : '';
$icon = 'icon-stack';
}
elseif($subLibID == 'files')
{
- $subLibLink = $this->createLink('doc', 'showFiles', "type=$tabValue&objectID=$tabMenu->id");
+ $subLibLink = inlink('showFiles', "type=$tabValue&objectID=$tabMenu->id");
$activeClass = ($this->methodName == 'showfiles' && $type == $tabValue && $object->id == $tabMenu->id) ? "class='active'" : '';
$icon = 'icon-paper-clip';
}
else
{
- $subLibLink = $this->createLink('doc', 'browse', "libID=$subLibID");
+ $subLibLink = inlink('browse', "libID=$subLibID");
$activeClass = ($this->methodName == 'browse' && $browseType != 'bymodule' && $subLibID == $libID) ? "class='active'" : '';
$icon = 'icon-folder-outline';
}
@@ -181,7 +181,7 @@ $sideWidth = common::checkNotCN() ? '270' : '238';
doc->customShowLibs;?>