diff --git a/module/custom/control.php b/module/custom/control.php index df5c1f6192..534dda7d3d 100644 --- a/module/custom/control.php +++ b/module/custom/control.php @@ -50,8 +50,9 @@ class custom extends control { $this->app->loadConfig($module); $this->view->users = $this->loadModel('user')->getPairs('noclosed|nodeleted'); - $this->view->needReview = zget($this->config->$module, 'needReview', 1); - $this->view->forceReview = zget($this->config->$module, 'forceReview', ''); + $this->view->needReview = zget($this->config->$module, 'needReview', 1); + $this->view->forceReview = zget($this->config->$module, 'forceReview', ''); + $this->view->forceNotReview = zget($this->config->$module, 'forceNotReview', ''); } if($module == 'task' and $field == 'hours') { @@ -82,7 +83,9 @@ class custom extends control { if(($module == 'story' or $module == 'testcase') and $field == 'review') { - $data = fixer::input('post')->join('forceReview', ',')->get(); + $review = fixer::input('post')->get(); + if($review->needReview) $data = fixer::input('post')->join('forceNotReview', ',')->remove('forceReview')->get(); + if(!$review->needReview) $data = fixer::input('post')->join('forceReview', ',')->remove('forceNotReview')->get(); $this->loadModel('setting')->setItems("system.$module", $data); } elseif($module == 'task' and $field == 'hours') diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index b3959833e4..0110fc718f 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -82,6 +82,7 @@ $lang->custom->notice = new stdclass(); $lang->custom->notice->userRole = 'Key must be no more than 20 characters!'; $lang->custom->notice->canNotAdd = 'This item will be processed, so customized feature is not enabled.'; $lang->custom->notice->forceReview = 'Review is required for %s submitted by certain assignee.'; +$lang->custom->notice->forceNotReview = "Not review is required for %s submitted by certain assignee."; $lang->custom->notice->longlife = 'List "Undone" bugs that are older than hold days from "Longlife" bugs.'; $lang->custom->notice->priListKey = 'Priority list key should be numbers!'; $lang->custom->notice->keyList = 'key should be English or digital!'; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index 0983985fdf..914abf963f 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -82,6 +82,7 @@ $lang->custom->notice = new stdclass(); $lang->custom->notice->userRole = '键的长度必须小于20个字符!'; $lang->custom->notice->canNotAdd = '该项参与运算,不提供自定义添加功能'; $lang->custom->notice->forceReview = "指定人提交的%s必须评审。"; +$lang->custom->notice->forceNotReview = "指定人提交的%s不需要评审。"; $lang->custom->notice->longlife = 'Bug列表页面的久未处理标签中,列出设置天数之前未处理的Bug。'; $lang->custom->notice->priListKey = '优先级的键应当为数字!'; $lang->custom->notice->keyList = '键值应当为英文或数字'; @@ -90,10 +91,11 @@ $lang->custom->notice->indexPage['product'] = "从8.2版本起增加了产品主 $lang->custom->notice->indexPage['project'] = "从8.2版本起增加了项目主页视图,是否默认进入项目主页?"; $lang->custom->notice->indexPage['qa'] = "从8.2版本起增加了测试主页视图,是否默认进入测试主页?"; -$lang->custom->storyReview = '评审流程'; -$lang->custom->forceReview = '强制评审'; -$lang->custom->reviewList[1] = '开启'; -$lang->custom->reviewList[0] = '关闭'; +$lang->custom->storyReview = '评审流程'; +$lang->custom->forceReview = '强制评审'; +$lang->custom->forceNotReview = '不需要评审'; +$lang->custom->reviewList[1] = '开启'; +$lang->custom->reviewList[0] = '关闭'; $lang->custom->deletedList[1] = '列出'; $lang->custom->deletedList[0] = '不列出'; diff --git a/module/custom/lang/zh-tw.php b/module/custom/lang/zh-tw.php index f90207046e..a2a143e05e 100644 --- a/module/custom/lang/zh-tw.php +++ b/module/custom/lang/zh-tw.php @@ -82,6 +82,7 @@ $lang->custom->notice->userRole = '鍵的長度必須小於20個字 $lang->custom->notice->canNotAdd = '該項參與運算,不提供自定義添加功能'; $lang->custom->notice->forceReview = "指定人提交的%s必須評審。"; $lang->custom->notice->longlife = 'Bug列表頁面的久未處理標籤中,列出設置天數之前未處理的Bug。'; +$lang->custom->notice->forceNotReview = "指定人提交的%s不需要評審。"; $lang->custom->notice->priListKey = '優先順序的鍵應當為數字!'; $lang->custom->notice->keyList = '鍵值應當為英文或數字'; $lang->custom->notice->severityListKey = 'Bug嚴重程度的鍵應當為數字!'; diff --git a/module/custom/view/set.html.php b/module/custom/view/set.html.php index f30a188cba..baafa0006d 100644 --- a/module/custom/view/set.html.php +++ b/module/custom/view/set.html.php @@ -11,7 +11,7 @@ */ ?> - @@ -76,6 +76,13 @@ EOT; custom->notice->forceReview, $lang->$module->common);?> + + > + custom->forceNotReview;?> + + custom->notice->forceNotReview, $lang->$module->common);?> + + @@ -182,10 +189,12 @@ $(function() if($(this).val() == 0) { $('#forceReview').closest('tr').removeClass('hidden'); + $('#forceNotReview').closest('tr').addClass('hidden'); } else { $('#forceReview').closest('tr').addClass('hidden'); + $('#forceNotReview').closest('tr').removeClass('hidden'); } }) }) diff --git a/module/testcase/config.php b/module/testcase/config.php index 718e546dd0..59010ded91 100644 --- a/module/testcase/config.php +++ b/module/testcase/config.php @@ -24,7 +24,7 @@ $config->testcase->exportFields = ' lastEditedBy, lastEditedDate, version, linkCase'; $config->testcase->customCreateFields = 'story,stage,pri,keywords'; -$config->testcase->customBatchCreateFields = 'module,stage,story,pri,precondition,keywords'; +$config->testcase->customBatchCreateFields = 'module,stage,story,pri,precondition,keywords,review'; $config->testcase->customBatchEditFields = 'module,story,stage,precondition,status,pri,keywords'; $config->testcase->custom = new stdclass(); diff --git a/module/testcase/control.php b/module/testcase/control.php index 4f4f602061..05d1b5b4a8 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -346,12 +346,12 @@ class testcase extends control $this->display(); } - + /** * Create a batch test case. - * - * @param int $productID - * @param int $moduleID + * + * @param int $productID + * @param int $moduleID * @param int $storyID * @access public * @return void @@ -418,6 +418,7 @@ class testcase extends control $this->view->currentModuleID = $currentModuleID; $this->view->branch = $branch; $this->view->branches = $this->loadModel('branch')->getPairs($productID); + $this->view->needReview = $this->testcase->forceNotReview() == true ? 0 : 1; $this->display(); } @@ -559,7 +560,7 @@ class testcase extends control $case->steps[] = $step; } - $isLibCase = ($case->lib and empty($case->product)); + $isLibCase = ($case->lib and empty($case->product)); if($isLibCase) { $libraries = $this->loadModel('testsuite')->getLibraries(); @@ -602,7 +603,7 @@ class testcase extends control $this->view->moduleOptionMenu = $moduleOptionMenu; $this->view->stories = $this->story->getProductStoryPairs($productID, $case->branch); } - if(!$this->testcase->forceReview()) unset($this->lang->testcase->statusList['wait']); + if($this->testcase->forceNotReview()) unset($this->lang->testcase->statusList['wait']); $position[] = $this->lang->testcase->common; $position[] = $this->lang->testcase->edit; @@ -710,7 +711,7 @@ class testcase extends control } } - if(!$this->testcase->forceReview()) unset($this->lang->testcase->statusList['wait']); + if(!$this->testcase->forceNotReview()) unset($this->lang->testcase->statusList['wait']); /* Judge whether the editedTasks is too large and set session. */ $countInputVars = count($cases) * (count(explode(',', $this->config->testcase->custom->batchEditFields)) + 3); diff --git a/module/testcase/lang/en.php b/module/testcase/lang/en.php index 552719118b..40b409214f 100644 --- a/module/testcase/lang/en.php +++ b/module/testcase/lang/en.php @@ -36,6 +36,7 @@ $lang->testcase->stage = 'Stage'; $lang->testcase->reviewedBy = 'Reviewed By'; $lang->testcase->reviewedDate = 'Reviewed Date'; $lang->testcase->reviewResult = 'Review Result'; +$lang->testcase->forceNotReview = 'No Review'; $lang->testcase->lastEditedByAB = 'Last Edited By'; $lang->testcase->lastEditedDateAB = 'Last Edited on'; $lang->testcase->lastEditedDate = 'Last Edited on'; @@ -129,6 +130,9 @@ $lang->testcase->confirmBatchDelete = 'Do you want to batch delete thess Test Ca $lang->testcase->ditto = 'Ditto'; $lang->testcase->dittoNotice = 'This Case does not belong to the Product as the previous one!'; +$lang->testcase->reviewList[0] = 'NO'; +$lang->testcase->reviewList[1] = 'YES'; + $lang->testcase->priList[3] = 3; $lang->testcase->priList[1] = 1; $lang->testcase->priList[2] = 2; diff --git a/module/testcase/lang/zh-cn.php b/module/testcase/lang/zh-cn.php index 0c5ff186ab..4efb62b322 100644 --- a/module/testcase/lang/zh-cn.php +++ b/module/testcase/lang/zh-cn.php @@ -36,6 +36,7 @@ $lang->testcase->stage = '适用阶段'; $lang->testcase->reviewedBy = '由谁评审'; $lang->testcase->reviewedDate = '评审时间'; $lang->testcase->reviewResult = '评审结果'; +$lang->testcase->forceNotReview = '不需要评审'; $lang->testcase->lastEditedByAB = '修改者'; $lang->testcase->lastEditedDateAB = '修改日期'; $lang->testcase->lastEditedDate = '修改日期'; @@ -112,11 +113,11 @@ $lang->testcase->allCases = '所有'; $lang->testcase->needConfirm = '需求变动'; $lang->testcase->bySearch = '搜索'; -$lang->testcase->lblStory = '相关需求'; -$lang->testcase->lblLastEdited = '最后编辑'; -$lang->testcase->lblTypeValue = '类型可选值列表'; -$lang->testcase->lblStageValue = '阶段可选值列表'; -$lang->testcase->lblStatusValue = '状态可选值列表'; +$lang->testcase->lblStory = '相关需求'; +$lang->testcase->lblLastEdited = '最后编辑'; +$lang->testcase->lblTypeValue = '类型可选值列表'; +$lang->testcase->lblStageValue = '阶段可选值列表'; +$lang->testcase->lblStatusValue = '状态可选值列表'; $lang->testcase->legendBasicInfo = '基本信息'; $lang->testcase->legendAttatch = '附件'; @@ -129,6 +130,9 @@ $lang->testcase->confirmBatchDelete = '您确认要批量删除这些测试用 $lang->testcase->ditto = '同上'; $lang->testcase->dittoNotice = '该用例与上一用例不属于同一产品!'; +$lang->testcase->reviewList[0] = '否'; +$lang->testcase->reviewList[1] = '是'; + $lang->testcase->priList[3] = 3; $lang->testcase->priList[1] = 1; $lang->testcase->priList[2] = 2; diff --git a/module/testcase/lang/zh-tw.php b/module/testcase/lang/zh-tw.php index a5a4e46e70..00d7957567 100644 --- a/module/testcase/lang/zh-tw.php +++ b/module/testcase/lang/zh-tw.php @@ -36,6 +36,7 @@ $lang->testcase->stage = '適用階段'; $lang->testcase->reviewedBy = '由誰評審'; $lang->testcase->reviewedDate = '評審時間'; $lang->testcase->reviewResult = '評審結果'; +$lang->testcase->forceNotReview = '不需要評審'; $lang->testcase->lastEditedByAB = '修改者'; $lang->testcase->lastEditedDateAB = '修改日期'; $lang->testcase->lastEditedDate = '修改日期'; @@ -129,6 +130,9 @@ $lang->testcase->confirmBatchDelete = '您確認要批量刪除這些測試用 $lang->testcase->ditto = '同上'; $lang->testcase->dittoNotice = '該用例與上一用例不屬於同一產品!'; +$lang->testcase->reviewList[0] = '否'; +$lang->testcase->reviewList[1] = '是'; + $lang->testcase->priList[3] = 3; $lang->testcase->priList[1] = 1; $lang->testcase->priList[2] = 2; diff --git a/module/testcase/model.php b/module/testcase/model.php index 4b6f1bec70..7958db676f 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -84,11 +84,11 @@ class testcaseModel extends model $case = fixer::input('post') ->add('openedBy', $this->app->user->account) ->add('openedDate', $now) - ->add('status', $this->forceReview() ? 'wait' : 'normal') + ->add('status', $this->forceNotReview() || ($this->config->testcase->needReview && $this->post->forceNotReview) ? 'normal' : 'wait') ->add('version', 1) ->add('fromBug', $bugID) ->setIF($this->post->story != false, 'storyVersion', $this->loadModel('story')->getVersion((int)$this->post->story)) - ->remove('steps,expects,files,labels,stepType') + ->remove('steps,expects,files,labels,stepType,forceNotReview') ->setDefault('story', 0) ->join('stage', ',') ->get(); @@ -125,12 +125,12 @@ class testcaseModel extends model return array('status' => 'created', 'id' => $caseID); } } - + /** * Batch create cases. - * - * @param int $productID - * @param int $storyID + * + * @param int $productID + * @param int $storyID * @access public * @return void */ @@ -160,14 +160,14 @@ class testcaseModel extends model $type = $cases->type[$i] == 'ditto' ? $type : $cases->type[$i]; $pri = $cases->pri[$i] == 'ditto' ? $pri : $cases->pri[$i]; $cases->module[$i] = (int)$module; - $cases->story[$i] = (int)$story; + $cases->story[$i] = (int)$story; $cases->type[$i] = $type; $cases->pri[$i] = $pri; } $this->loadModel('story'); $storyVersions = array(); - $forceReview = $this->forceReview(); + $forceNotReview = $this->forceNotReview(); for($i = 0; $i < $batchNum; $i++) { if($cases->type[$i] != '' and $cases->title[$i] != '') @@ -186,7 +186,7 @@ class testcaseModel extends model $data[$i]->keywords = $cases->keywords[$i]; $data[$i]->openedBy = $this->app->user->account; $data[$i]->openedDate = $now; - $data[$i]->status = $forceReview ? 'wait' : 'normal'; + $data[$i]->status = $forceNotReview || ($this->config->testcase->needReview && $cases->needReview[$i]) ? 'normal' : 'wait'; $data[$i]->version = 1; $caseStory = $data[$i]->story; @@ -522,7 +522,7 @@ class testcaseModel extends model $steps = array(); //---------------- Judge steps changed or not.-------------------- */ - + /* Remove the empty setps in post. */ foreach($this->post->steps as $key => $desc) { @@ -558,7 +558,7 @@ class testcaseModel extends model ->join('stage', ',') ->remove('comment,steps,expects,files,labels,stepType') ->get(); - if($this->forceReview() and $stepChanged) $case->status = 'wait'; + if(!$this->forceNotReview() and $stepChanged) $case->status = 'wait'; $this->dao->update(TABLE_CASE)->data($case)->autoCheck()->batchCheck($this->config->testcase->edit->requiredFields, 'notempty')->where('id')->eq((int)$caseID)->exec(); if(!$this->dao->isError()) { @@ -997,7 +997,7 @@ class testcaseModel extends model $cases[$key] =$caseData; } - $forceReview = $this->forceReview(); + $forceNotReview = $this->forceNotReview(); foreach($cases as $key => $caseData) { $caseID = 0; @@ -1059,7 +1059,7 @@ class testcaseModel extends model { $caseData->lastEditedBy = $this->app->user->account; $caseData->lastEditedDate = $now; - if($stepChanged and $forceReview) $caseData->status = 'wait'; + if($stepChanged and !$forceNotReview) $caseData->status = 'wait'; $this->dao->update(TABLE_CASE)->data($caseData)->where('id')->eq($caseID)->autoCheck()->exec(); if($stepChanged) { @@ -1094,7 +1094,7 @@ class testcaseModel extends model $caseData->openedDate = $now; $caseData->branch = isset($data->branch[$key]) ? $data->branch[$key] : $branch; if($caseData->story) $caseData->storyVersion = zget($storyVersionPairs, $caseData->story, 1); - $caseData->status = $forceReview ? 'wait' : 'normal'; + $caseData->status = !$forceNotReview ? 'wait' : 'normal'; $this->dao->insert(TABLE_CASE)->data($caseData)->autoCheck()->exec(); if(!dao::isError()) @@ -1393,15 +1393,16 @@ class testcaseModel extends model } /** - * Check whether force review - * + * Check whether force not review + * * @access public * @return bool */ - public function forceReview() + public function forceNotReview() { - if($this->config->testcase->needReview) return true; - if(strpos(",{$this->config->testcase->forceReview},", ",{$this->app->user->account},") !== false) return true; + if(!$this->config->testcase->needReview && strpos(",{$this->config->testcase->forceReview},", ",{$this->app->user->account},") === false) return true; + if($this->config->testcase->needReview && strpos(",{$this->config->testcase->forceNotReview},", ",{$this->app->user->account},")) return true; + return false; } } diff --git a/module/testcase/view/batchcreate.html.php b/module/testcase/view/batchcreate.html.php index 774b997c8d..d345608d5b 100644 --- a/module/testcase/view/batchcreate.html.php +++ b/module/testcase/view/batchcreate.html.php @@ -55,6 +55,7 @@ if($hiddenStory and isset($visibleFields['story'])) $colspan -= 1; '>testcase->precondition;?> '> testcase->keywords;?> '> testcase->stage;?> + '> testcase->review;?> @@ -83,6 +84,7 @@ if($hiddenStory and isset($visibleFields['story'])) $colspan -= 1; '> '> ' style='overflow:visible'>testcase->stageList, '', "class='form-control chosen' multiple");?> + '>testcase->reviewList, $needReview, "class='form-control'");?> diff --git a/module/testcase/view/create.html.php b/module/testcase/view/create.html.php index 34bd6ec629..fec4b76e06 100644 --- a/module/testcase/view/create.html.php +++ b/module/testcase/view/create.html.php @@ -88,6 +88,9 @@
+ testcase->forceNotReview()):?> + testcase->forceNotReview, '', "id='forceNotReview'");?> +