diff --git a/api/v1/entries/testresults.php b/api/v1/entries/testresults.php index 365e9f79c9..d6fa1c6b8f 100644 --- a/api/v1/entries/testresults.php +++ b/api/v1/entries/testresults.php @@ -60,18 +60,24 @@ class testresultsEntry extends entry $case = $this->loadModel('testcase')->getByID($caseID); $runID = $this->param('runID', 0); $version = $this->param('version', $case->version); + $steps = $this->getStepIDList($runID, $caseID, $version); $this->setPost('case', $caseID); + $this->setPost('version', $version); /* Set steps and expects. */ if(isset($this->requestBody->steps)) { $results = array(); $reals = array(); - foreach($this->requestBody->steps as $step) + foreach($this->requestBody->steps as $index => $step) { - $results[] = $step->result; - $reals[] = $step->real; + /* When post data more than case steps, break after take useful data. */ + if($index + 1 > count($steps)) break; + + $stepID = $steps[$index]; + $results[$stepID] = $step->result; + $reals[$stepID] = $step->real; } $this->setPost('steps', $results); $this->setPost('reals', $reals); @@ -85,4 +91,35 @@ class testresultsEntry extends entry return $this->send(200, array()); } + + /** + * Get steps key. + * + * @param int $runID + * @access public + * @return array + */ + public function getStepIDList($runID, $caseID, $version) + { + if($runID) + { + $run = $this->testtask->getRunById($runID); + } + else + { + $run = new stdclass(); + $run->case = $this->loadModel('testcase')->getById($caseID, $version); + } + + foreach($run->case->steps as $key => $step) + { + /* Unset step if step is a group. */ + if($step->type == 'group') + { + unset($run->case->steps[$key]); + } + } + + return array_keys($run->case->steps); + } } diff --git a/config/config.php b/config/config.php index 6429afecfa..aa6b30cbfa 100644 --- a/config/config.php +++ b/config/config.php @@ -24,7 +24,7 @@ $config->timezone = 'Asia/Shanghai'; // 时区设置。 The tim $config->webRoot = ''; // URL根目录。 The root path of the url. $config->customSession = false; // 是否开启自定义session的存储路径。Whether custom the session save path. $config->edition = 'open'; // 设置系统的edition,可选值:open|biz|max。Set edition, optional: open|biz|max. -$config->tabSession = true; // 是否开启浏览器新标签独立session. +$config->tabSession = false; // 是否开启浏览器新标签独立session. /* 框架路由相关设置。Routing settings. */ $config->requestType = 'PATH_INFO'; // 请求类型:PATH_INFO|PATHINFO2|GET。 The request type: PATH_INFO|PATH_INFO2|GET. diff --git a/config/zentaopms.php b/config/zentaopms.php index e542fd9dd3..3a8b69d703 100644 --- a/config/zentaopms.php +++ b/config/zentaopms.php @@ -422,7 +422,7 @@ $config->maxPriValue = '256'; $config->importWhiteList = array('user', 'task', 'story', 'bug', 'testcase', 'feedback', 'ticket'); $config->featureGroup = new stdclass(); -$config->featureGroup->product = array('roadmap', 'track', 'URStory'); +$config->featureGroup->product = array('roadmap', 'track', 'UR'); $config->featureGroup->scrum = array(); $config->featureGroup->waterfall = array('track'); $config->featureGroup->assetlib = array(); diff --git a/db/update18.0.sql b/db/update17.8.sql similarity index 99% rename from db/update18.0.sql rename to db/update17.8.sql index 2246ae9857..3df1275dbd 100644 --- a/db/update18.0.sql +++ b/db/update17.8.sql @@ -2,6 +2,9 @@ ALTER TABLE `zt_product` ADD `shadow` tinyint(1) unsigned NOT NULL AFTER `code`; ALTER TABLE `zt_project` ADD `hasProduct` tinyint(1) unsigned NOT NULL DEFAULT 1 AFTER `code`; ALTER table `zt_project` ADD `multiple` enum('0', '1') NOT NULL DEFAULT '1'; ALTER TABLE `zt_repo` ADD `projects` varchar(255) NOT NULL AFTER `product`; +ALTER TABLE `zt_release` CHANGE `project` `project` varchar(255) NOT NULL; +ALTER TABLE `zt_release` CHANGE `branch` `branch` varchar(255) NOT NULL; +ALTER TABLE `zt_release` CHANGE `build` `build` varchar(255) NOT NULL; CREATE OR REPLACE VIEW `ztv_normalproduct` AS SELECT * FROM `zt_product` WHERE `shadow` = 0; @@ -32,3 +35,7 @@ REPLACE INTO `zt_report` (`code`, `name`, `module`, `sql`, `vars`, `langs`, `par ('bug-resolve', '{\"zh-cn\":\"Bug\\u89e3\\u51b3\\u8868\",\"zh-tw\":\"Bug\\u89e3\\u6c7a\\u8868\",\"en\":\"Solved Bugs\"}', ',test', 'select *,if($product=\'\',0,product) as customproduct from TABLE_BUG where deleted=\'0\' and resolution!=\'\' and if($startDate=\'\',1,resolvedDate>=$startDate) and if($endDate=\'\',1,resolvedDate<=$endDate) having customproduct=$product', '{\"varName\":[\"product\",\"startDate\",\"endDate\"],\"showName\":[\"\\u4ea7\\u54c1\",\"\\u89e3\\u51b3\\u65e5\\u671f\\u5f00\\u59cb\",\"\\u89e3\\u51b3\\u65e5\\u671f\\u7ed3\\u675f\"],\"requestType\":[\"select\",\"date\",\"date\"],\"selectList\":[\"product\",\"user\",\"user\"],\"default\":[\"\",\"$MONTHBEGIN\",\"$MONTHEND\"]}', '{\"count\":{\"zh-cn\":\"\\u9700\\u6c42\\u6570\",\"zh-tw\":\"\\u9700\\u6c42\\u6570\",\"en\":\"Stories\"},\"done\":{\"zh-cn\":\"\\u5b8c\\u6210\\u6570\",\"zh-tw\":\"\\u5b8c\\u6210\\u6570\",\"en\":\"Done\"}}', '{\"group1\":\"resolvedBy\",\"isUser\":{\"group1\":[\"1\"]},\"group2\":\"\",\"reportField\":[\"resolution\"],\"reportType\":[\"count\"],\"sumAppend\":[\"\"],\"reportTotal\":[\"1\"],\"percent\":[\"1\"],\"contrast\":[\"crystalTotal\"],\"showAlone\":[\"1\"]}', 2, '{\"zh-cn\":\"\\u5217\\u51fa\\u89e3\\u51b3\\u7684Bug\\u603b\\u6570\\uff0c\\u89e3\\u51b3\\u65b9\\u6848\\u7684\\u5206\\u5e03\\uff0c\\u5360\\u7684\\u6bd4\\u4f8b\\uff08\\u8be5\\u7528\\u6237\\u89e3\\u51b3\\u7684Bug\\u7684\\u6570\\u91cf\\u5360\\u6240\\u6709\\u7684\\u89e3\\u51b3\\u7684Bug\\u7684\\u6570\\u91cf)\\u3002\",\"zh-tw\":\"\\u5217\\u51fa\\u89e3\\u6c7a\\u7684Bug\\u7e3d\\u6578\\uff0c\\u89e3\\u6c7a\\u65b9\\u6848\\u7684\\u5206\\u5e03\\uff0c\\u5360\\u7684\\u6bd4\\u4f8b\\uff08\\u8a72\\u7528\\u6236\\u89e3\\u6c7a\\u7684Bug\\u7684\\u6578\\u91cf\\u5360\\u6240\\u6709\\u7684\\u89e3\\u6c7a\\u7684Bug\\u7684\\u6578\\u91cf)\\u3002\",\"en\":\"percentage:self resolved \\/ all resolved\"}', 'admin', '2015-07-24 13:44:25'), ('project-progress', '{\"zh-cn\":\"\\u9879\\u76ee\\u8fdb\\u5c55\\u8868\",\"zh-tw\":\"\\u9805\\u76ee\\u9032\\u5c55\\u8868\",\"en\":\"Project Progress Report\",\"de\":\"Project Progress Report\",\"fr\":\"Project Progress Report\",\"vi\":\"Project Progress Report\",\"ja\":\"Project Progress Report\"}', ',project', 'select t1.id,t4.name as project,t4.id,IF(t4.multiple="1",t1.name,"") as execution,t1.status,t2.number as tasks,round(t2.consumed,2) as consumed,round(t2.`left`,2) as `left`,t3.stories,t2.undone as undoneTask,t3.undone as undoneStory,t2.totalReal from TABLE_EXECUTION as t1 \r\nleft join ztv_executionsummary as t2 on t1.id=t2.execution\r\nleft join ztv_projectstories as t3 on t1.id=t3.execution\r\nleft join TABLE_PROJECT as t4 on t4.id=t1.project\r\nwhere t1.deleted=\'0\' and t1.type in (\'sprint\',\'stage\') and if($project=\'\',1,t4.id=$project) and if($execution=\'\',1,t1.id=$execution) and if($status=\'\',1,t1.status=$status)', '{\"varName\":[\"project\",\"execution\",\"status\"],\"showName\":[\"\\u9879\\u76ee\\u5217\\u8868\",\"\\u6267\\u884c\\u5217\\u8868\",\"\\u6267\\u884c\\u72b6\\u6001\"],\"requestType\":[\"select\",\"select\",\"select\"],\"selectList\":[\"project\",\"execution\",\"project.status\"],\"default\":[\"\",\"\",\"\"]}', '{\"stories\":{\"zh-cn\":\"\\u9700\\u6c42\\u6570\",\"zh-tw\":\"\\u9700\\u6c42\\u6570\",\"en\":\"Stories\"},\"tasks\":{\"zh-cn\":\"\\u4efb\\u52a1\\u6570\",\"zh-tw\":\"\\u4efb\\u52a1\\u6570\",\"en\":\"Tasks\"},\"undoneStory\":{\"zh-cn\":\"\\u5269\\u4f59\\u9700\\u6c42\\u6570\",\"zh-tw\":\"\\u5269\\u4f59\\u9700\\u6c42\\u6570\",\"en\":\"Undone Story\"},\"undoneTask\":{\"zh-cn\":\"\\u5269\\u4f59\\u4efb\\u52a1\\u6570\",\"zh-tw\":\"\\u5269\\u4f59\\u4efb\\u52a1\\u6570\",\"en\":\"Undone Task\"},\"consumed\":{\"zh-cn\":\"\\u5df2\\u6d88\\u8017\\u5de5\\u65f6\",\"zh-tw\":\"\\u5df2\\u6d88\\u8017\\u5de5\\u65f6\",\"en\":\"Cost(h)\"},\"left\":{\"zh-cn\":\"\\u5269\\u4f59\\u5de5\\u65f6\",\"zh-tw\":\"\\u5269\\u4f59\\u5de5\\u65f6\",\"en\":\"Left(h)\"},\"consumedPercent\":{\"zh-cn\":\"\\u8fdb\\u5ea6\",\"zh-tw\":\"\\u8fdb\\u5ea6\",\"en\":\"Process\"},\"execution\":{\"zh-cn\":\"\\u6267\\u884c\\u540d\\u79f0\"}}', '{\"group1\":\"project\",\"group2\":\"execution\",\"reportField\":[\"stories\",\"undoneStory\",\"tasks\",\"undoneTask\",\"left\",\"consumed\"],\"reportType\":[\"sum\",\"sum\",\"sum\",\"sum\",\"sum\",\"sum\"],\"sumAppend\":[\"stories\",\"undoneStory\",\"tasks\",\"undoneTask\",\"left\",\"consumed\"],\"percent\":{\"5\":\"1\"},\"contrast\":{\"5\":\"totalReal\"},\"showAlone\":{\"5\":\"1\"}}', 2, '{\"zh-cn\":\"\\u9879\\u76ee\\u7684\\u9700\\u6c42\\u6570\\uff0c\\u4efb\\u52a1\\u6570\\uff0c\\u5df2\\u6d88\\u8017\\u5de5\\u65f6\\uff0c\\u5269\\u4f59\\u5de5\\u65f6\\uff0c\\u5269\\u4f59\\u9700\\u6c42\\u6570\\uff0c\\u5269\\u4f59\\u4efb\\u52a1\\u6570\\uff0c\\u8fdb\\u5ea6\\u3002\",\"zh-tw\":\"\\u9805\\u76ee\\u7684\\u9700\\u6c42\\u6578\\uff0c\\u4efb\\u52d9\\u6578\\uff0c\\u5df2\\u6d88\\u8017\\u5de5\\u6642\\uff0c\\u5269\\u9918\\u5de5\\u6642\\uff0c\\u5269\\u9918\\u9700\\u6c42\\u6578\\uff0c\\u5269\\u9918\\u4efb\\u52d9\\u6578\\uff0c\\u9032\\u5ea6\\u3002\",\"en\":\"\",\"de\":\"\",\"fr\":\"\",\"vi\":\"\",\"ja\":\"\"}', 'admin', '2015-07-23 14:03:06'), ('projectbug-type', '{\"zh-cn\":\"\\u9879\\u76eeBug\\u7c7b\\u578b\\u7edf\\u8ba1\\u8868\",\"zh-tw\":\"\\u9805\\u76eeBug\\u985e\\u578b\\u7d71\\u8a08\\u8868\",\"en\":\"Project Bug Type\",\"de\":\"Project Bug Type\",\"fr\":\"Project Bug Type\",\"vi\":\"Project Bug Type\",\"ja\":\"Project Bug Type\"}', ',project,test', 'select t1.id,t3.name as project,t3.id,IF(t3.multiple="1",t1.name,"") as execution,t2.id as bugID,t2.type from TABLE_EXECUTION as t1 \r\nleft join TABLE_BUG as t2 on t1.id=t2.execution\r\nleft join TABLE_PROJECT as t3 on t3.id=t1.project\r\nwhere t1.deleted=\'0\' and t2.deleted=\'0\' and if($project=\'\',1,t3.id=$project) and if($execution=\'\',1,t1.id=$execution)', '{\"varName\":[\"project\",\"execution\"],\"showName\":[\"\\u9879\\u76ee\\u5217\\u8868\",\"\\u6267\\u884c\\u5217\\u8868\"],\"requestType\":[\"select\",\"select\"],\"selectList\":[\"project\",\"execution\"],\"default\":[\"\",\"\"]}', '{\"stories\":{\"zh-cn\":\"\\u9700\\u6c42\\u6570\",\"zh-tw\":\"\\u9700\\u6c42\\u6570\",\"en\":\"Stories\"},\"tasks\":{\"zh-cn\":\"\\u4efb\\u52a1\\u6570\",\"zh-tw\":\"\\u4efb\\u52a1\\u6570\",\"en\":\"Tasks\"},\"undoneStory\":{\"zh-cn\":\"\\u5269\\u4f59\\u9700\\u6c42\\u6570\",\"zh-tw\":\"\\u5269\\u4f59\\u9700\\u6c42\\u6570\",\"en\":\"Undone Story\"},\"undoneTask\":{\"zh-cn\":\"\\u5269\\u4f59\\u4efb\\u52a1\\u6570\",\"zh-tw\":\"\\u5269\\u4f59\\u4efb\\u52a1\\u6570\",\"en\":\"Undone Task\"},\"consumed\":{\"zh-cn\":\"\\u5df2\\u6d88\\u8017\\u5de5\\u65f6\",\"zh-tw\":\"\\u5df2\\u6d88\\u8017\\u5de5\\u65f6\",\"en\":\"Cost(h)\"},\"left\":{\"zh-cn\":\"\\u5269\\u4f59\\u5de5\\u65f6\",\"zh-tw\":\"\\u5269\\u4f59\\u5de5\\u65f6\",\"en\":\"Left(h)\"},\"consumedPercent\":{\"zh-cn\":\"\\u8fdb\\u5ea6\",\"zh-tw\":\"\\u8fdb\\u5ea6\",\"en\":\"Process\"},\"execution\":{\"zh-cn\":\"\\u6267\\u884c\\u540d\\u79f0\"}}', '{\"group1\":\"project\",\"group2\":\"execution\",\"reportField\":[\"type\"],\"reportType\":[\"count\"],\"sumAppend\":[\"\"]}', 2, '{\"zh-cn\":\"\\u6309\\u7167\\u9879\\u76ee\\u7edf\\u8ba1Bug\\u7684\\u7c7b\\u578b\\u5206\\u5e03\\u60c5\\u51b5\\u3002\",\"zh-tw\":\"\\u6309\\u7167\\u9805\\u76ee\\u7d71\\u8a08Bug\\u7684\\u985e\\u578b\\u5206\\u5e03\\u60c5\\u6cc1\\u3002\",\"en\":\"\",\"de\":\"\",\"fr\":\"\",\"vi\":\"\",\"ja\":\"\"}', 'admin', '2015-08-04 13:54:22'); + +ALTER TABLE `zt_project` ADD `division` enum('0','1') COLLATE 'utf8_general_ci' NOT NULL DEFAULT '1'; + +ALTER TABLE `zt_build` ADD `builds` varchar(255) NOT NULL AFTER `execution`; diff --git a/db/zentao.sql b/db/zentao.sql index 0a289ef9fe..037ee010f2 100755 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -323,6 +323,7 @@ CREATE TABLE IF NOT EXISTS `zt_build` ( `product` mediumint(8) unsigned NOT NULL default '0', `branch` mediumint(8) unsigned NOT NULL default '0', `execution` mediumint(8) unsigned NOT NULL default '0', + `builds` varchar(255) NOT NULL, `name` char(150) NOT NULL, `scmPath` char(255) NOT NULL, `filePath` char(255) NOT NULL, @@ -1280,10 +1281,10 @@ CREATE TABLE IF NOT EXISTS `zt_relation` ( -- DROP TABLE IF EXISTS `zt_release`; CREATE TABLE IF NOT EXISTS `zt_release` ( `id` mediumint(8) unsigned NOT NULL auto_increment, - `project` mediumint(8) unsigned NOT NULL, + `project` varchar(255) NOT NULL, `product` mediumint(8) unsigned NOT NULL default '0', - `branch` mediumint(8) unsigned NOT NULL default '0', - `build` mediumint(8) unsigned NOT NULL, + `branch` varchar(255) NOT NULL default '0', + `build` varchar(255) NOT NULL, `name` varchar(255) NOT NULL default '', `marker` enum('0','1') NOT NULL default '0', `date` date NOT NULL, diff --git a/framework/api/helper.class.php b/framework/api/helper.class.php index a6db31970e..f24358735e 100644 --- a/framework/api/helper.class.php +++ b/framework/api/helper.class.php @@ -50,6 +50,50 @@ class helper extends baseHelper return isset($viewType) ? $viewType : $config->default->view; } + /** + * Verify that the system has opened on the feature. + * + * @param string $feature scrum_risk | risk | scrum + * @static + * @access public + * @return bool + */ + public static function hasFeature($feature) + { + global $config; + + if(strpos($feature, '_') !== false) + { + $code = explode('_', $feature); + $code = $code[0] . ucfirst($code[1]); + return strpos(",$config->disabledFeatures,", ",{$code},") === false; + } + else + { + if($feature == 'product' or $feature == 'scrum' or $feature == 'waterfall') return strpos(",$config->disabledFeatures,", ",{$feature},") === false; + + $hasFeature = false; + foreach($config->featureGroup as $group => $modules) + { + if($feature == $group) + { + foreach($modules as $module) + { + if(helper::hasFeature("{$group}_{$module}")) $hasFeature = true; + } + } + else + { + foreach($modules as $module) + { + if($feature == $module and helper::hasFeature("{$group}_{$module}")) $hasFeature = true; + } + } + } + return $hasFeature && strpos(",$config->disabledFeatures,", ",{$feature},") === false; + } + } + /** * Encode json for $.parseJSON * diff --git a/framework/base/helper.class.php b/framework/base/helper.class.php index 0e5ab9fcf8..1089b8d145 100644 --- a/framework/base/helper.class.php +++ b/framework/base/helper.class.php @@ -740,6 +740,19 @@ class baseHelper session_write_close(); session_id($sessionID); + if(ini_get('session.save_handler') == 'user' and isset($_GET['tid'])) + { + $ztSessionHandler = new ztSessionHandler($_GET['tid']); + session_set_save_handler( + array($ztSessionHandler, "open"), + array($ztSessionHandler, "close"), + array($ztSessionHandler, "read"), + array($ztSessionHandler, "write"), + array($ztSessionHandler, "destroy"), + array($ztSessionHandler, "gc") + ); + register_shutdown_function('session_write_close'); + } session_start(); } diff --git a/framework/base/router.class.php b/framework/base/router.class.php index b50611fe17..5caa5e3582 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -1004,7 +1004,6 @@ class baseRouter array($ztSessionHandler, "destroy"), array($ztSessionHandler, "gc") ); - register_shutdown_function('session_write_close'); } } @@ -3169,6 +3168,7 @@ class ztSessionHandler { $this->tagID = $tagID; ini_set('session.save_handler', 'files'); + register_shutdown_function('session_write_close'); } /** @@ -3263,15 +3263,16 @@ class ztSessionHandler public function write($id, $sessData) { $sessFile = $this->getSessionFile($id); + touch($sessFile); + touch($this->rawFile); if(md5_file($sessFile) == md5($sessData)) return true; - if(file_put_contents($sessFile, $sessData)) + if(file_put_contents($sessFile, $sessData, LOCK_EX)) { - if(!file_exists($this->rawFile)) touch($this->rawFile); if(strpos($sessData, 'user|') !== false) { - $rawSessContent = (string) file_get_contents($this->rawFile); - if(strpos($rawSessContent, 'user|') === false) file_put_contents($this->rawFile, $sessData); + $rawSessContent = (string) file_get_contents($this->rawFile, false, null, 0, 1024 * 2); + if(strpos($rawSessContent, 'user|') === false) file_put_contents($this->rawFile, $sessData, LOCK_EX); } return true; @@ -3290,9 +3291,10 @@ class ztSessionHandler public function destroy($id) { $sessFile = $this->getSessionFile($id); - unlink($sessFile); - unlink($this->rawFile); + if(file_exists($sessFile)) unlink($sessFile); + if(file_exists($this->rawFile)) unlink($this->rawFile); touch($sessFile); + touch($this->rawFile); return true; } diff --git a/framework/helper.class.php b/framework/helper.class.php index c83d2c3e07..2b352119c7 100644 --- a/framework/helper.class.php +++ b/framework/helper.class.php @@ -98,25 +98,20 @@ class helper extends baseHelper { if($feature == 'product' or $feature == 'scrum' or $feature == 'waterfall') return strpos(",$config->disabledFeatures,", ",{$feature},") === false; - $hasFeature = false; + $hasFeature = false; + $canConfigFeature = false; foreach($config->featureGroup as $group => $modules) { - if($feature == $group) + foreach($modules as $module) { - foreach($modules as $module) + if($feature == $group or $feature == $module) { + $canConfigFeature = true; if(helper::hasFeature("{$group}_{$module}")) $hasFeature = true; } } - else - { - foreach($modules as $module) - { - if($feature == $module and helper::hasFeature("{$group}_{$module}")) $hasFeature = true; - } - } } - return $hasFeature && strpos(",$config->disabledFeatures,", ",{$feature},") === false; + return !$canConfigFeature or ($hasFeature && strpos(",$config->disabledFeatures,", ",{$feature},") === false); } } diff --git a/module/action/model.php b/module/action/model.php index a91ae9f22c..cd6a848c36 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -386,7 +386,7 @@ class actionModel extends model $name = $execution->name; $method = $execution->type == 'kanban' ? 'kanban' : 'view'; - $action->extra = (!common::hasPriv('execution', $method) or ($method == 'kanban' and isonlybody())) ? $name : html::a(helper::createLink('execution', $method, "executionID=$action->execution"), $name); + $action->extra = (!common::hasPriv('execution', $method) or ($method == 'kanban' and isonlybody())) ? $name : html::a(helper::createLink('execution', $method, "executionID=$action->execution"), $name, '', "data-app='execution'"); } } elseif($actionName == 'linked2project') diff --git a/module/admin/lang/de.php b/module/admin/lang/de.php index 4760cafaeb..fd3014cc10 100644 --- a/module/admin/lang/de.php +++ b/module/admin/lang/de.php @@ -88,7 +88,7 @@ $lang->admin->setModule->auditplan = 'QA'; $lang->admin->setModule->meeting = 'Meeting'; $lang->admin->setModule->roadmap = 'Roadmap'; $lang->admin->setModule->track = 'Track'; -$lang->admin->setModule->URStory = 'URStroy'; +$lang->admin->setModule->UR = 'URStroy'; $lang->admin->setModule->researchplan = 'Researchplan'; $lang->admin->setModule->gapanalysis = 'Gapanalysis'; $lang->admin->setModule->storylib = 'Story Lib'; diff --git a/module/admin/lang/en.php b/module/admin/lang/en.php index 6eb18cc6c3..b7fcb08a16 100644 --- a/module/admin/lang/en.php +++ b/module/admin/lang/en.php @@ -88,7 +88,7 @@ $lang->admin->setModule->auditplan = 'QA'; $lang->admin->setModule->meeting = 'Meeting'; $lang->admin->setModule->roadmap = 'Roadmap'; $lang->admin->setModule->track = 'Track'; -$lang->admin->setModule->URStory = 'URStroy'; +$lang->admin->setModule->UR = 'URStroy'; $lang->admin->setModule->researchplan = 'Researchplan'; $lang->admin->setModule->gapanalysis = 'Gapanalysis'; $lang->admin->setModule->storylib = 'Story Lib'; diff --git a/module/admin/lang/fr.php b/module/admin/lang/fr.php index 8df60acc16..efe3d511e6 100644 --- a/module/admin/lang/fr.php +++ b/module/admin/lang/fr.php @@ -88,7 +88,7 @@ $lang->admin->setModule->auditplan = 'QA'; $lang->admin->setModule->meeting = 'Meeting'; $lang->admin->setModule->roadmap = 'Roadmap'; $lang->admin->setModule->track = 'Track'; -$lang->admin->setModule->URStory = 'URStroy'; +$lang->admin->setModule->UR = 'URStroy'; $lang->admin->setModule->researchplan = 'Researchplan'; $lang->admin->setModule->gapanalysis = 'Gapanalysis'; $lang->admin->setModule->storylib = 'Story Lib'; diff --git a/module/admin/lang/zh-cn.php b/module/admin/lang/zh-cn.php index 95a21c0810..c573762af5 100644 --- a/module/admin/lang/zh-cn.php +++ b/module/admin/lang/zh-cn.php @@ -88,7 +88,7 @@ $lang->admin->setModule->auditplan = 'QA'; $lang->admin->setModule->meeting = '会议'; $lang->admin->setModule->roadmap = '路线图'; $lang->admin->setModule->track = '矩阵'; -$lang->admin->setModule->URStory = '用户需求'; +$lang->admin->setModule->UR = '用户需求'; $lang->admin->setModule->researchplan = '调研'; $lang->admin->setModule->gapanalysis = '培训'; $lang->admin->setModule->storylib = '需求库'; diff --git a/module/block/view/contribute.html.php b/module/block/view/contribute.html.php index 618465eb87..58afbe9e9d 100644 --- a/module/block/view/contribute.html.php +++ b/module/block/view/contribute.html.php @@ -33,6 +33,7 @@