From 32a82f45637a00d70ac4dc4e07db2cdd5d0bb4bd Mon Sep 17 00:00:00 2001 From: wangchunsheng Date: Thu, 4 Feb 2010 07:55:42 +0000 Subject: [PATCH] * rewrite the logic of judge case version. --- trunk/module/testcase/model.php | 63 ++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 12 deletions(-) diff --git a/trunk/module/testcase/model.php b/trunk/module/testcase/model.php index bb52402395..226a3c0044 100644 --- a/trunk/module/testcase/model.php +++ b/trunk/module/testcase/model.php @@ -89,9 +89,38 @@ class testcaseModel extends model /* 更新case信息。*/ public function update($caseID) { - $oldCase = $this->getById($caseID); - $now = date('Y-m-d H:i:s'); - $version = $oldCase->version + 1; + $oldCase = $this->getById($caseID); + $now = date('Y-m-d H:i:s'); + $stepChanged = false; + $steps = array(); + + //---------------- 判断步骤是否发生了变化。-------------------- */ + /* 先去除post变量中空的步骤。 */ + foreach($this->post->steps as $key => $desc) + { + $desc = trim($desc); + if(!empty($desc)) $steps[] = array('desc' => $desc, 'expect' => trim($this->post->expects[$key])); + } + + /* 如果步骤的数量不同,发生了变化。*/ + if(count($oldCase->steps) != count($steps)) + { + $stepChanged = true; + } + else + { + /* 比较每一个步骤是否有不同。*/ + foreach($oldCase->steps as $key => $oldStep) + { + if(trim($oldStep->desc) != trim($steps[$key]['desc']) or trim($oldStep->expect) != $steps[$key]['expect']) + { + $stepChanged = true; + break; + } + } + } + $version = $stepChanged ? $oldCase->version + 1 : $oldCase->version; + $case = fixer::input('post') ->add('lastEditedBy', $this->app->user->account) ->add('lastEditedDate', $now) @@ -103,19 +132,29 @@ class testcaseModel extends model $this->dao->update(TABLE_CASE)->data($case)->autoCheck()->batchCheck('title,status,type', 'notempty')->where('id')->eq((int)$caseID)->exec(); if(!$this->dao->isError()) { - foreach($this->post->steps as $stepID => $stepDesc) + if($stepChanged) { - if(empty($stepDesc)) continue; - $step->case = $caseID; - $step->version = $version; - $step->desc = htmlspecialchars($stepDesc); - $step->expect = htmlspecialchars($this->post->expects[$stepID]); - $this->dao->insert(TABLE_CASESTEP)->data($step)->autoCheck()->exec(); + foreach($this->post->steps as $stepID => $stepDesc) + { + if(empty($stepDesc)) continue; + $step->case = $caseID; + $step->version = $version; + $step->desc = htmlspecialchars($stepDesc); + $step->expect = htmlspecialchars($this->post->expects[$stepID]); + $this->dao->insert(TABLE_CASESTEP)->data($step)->autoCheck()->exec(); + } } /* 将步骤合并为字符串,以计算diff。*/ - $oldCase->steps = $this->joinStep($oldCase->steps); - $case->steps = $this->joinStep($this->getById($caseID, $version)->steps); + if($stepChanged) + { + $oldCase->steps = $this->joinStep($oldCase->steps); + $case->steps = $this->joinStep($this->getById($caseID, $version)->steps); + } + else + { + unset($oldCase->steps); + } return common::createChanges($oldCase, $case); } }