From 6dd688f3b78a8c8ed22bb9d79436da6488a2c8fc Mon Sep 17 00:00:00 2001 From: wangyidong Date: Wed, 21 Mar 2018 15:01:57 +0800 Subject: [PATCH] * adjust for batch create. --- module/bug/model.php | 40 +++--- module/custom/config.php | 4 +- module/story/model.php | 146 ++++++++++++---------- module/task/model.php | 30 +++-- module/testcase/model.php | 100 ++++++++------- module/testcase/view/batchcreate.html.php | 2 +- module/testcase/view/batchedit.html.php | 2 +- 7 files changed, 174 insertions(+), 150 deletions(-) diff --git a/module/bug/model.php b/module/bug/model.php index 4b84c3d816..361edefa84 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -111,15 +111,6 @@ class bugModel extends model $result = $this->loadModel('common')->removeDuplicate('bug', $data, "product={$productID}"); $data = $result['data']; - for($i = 0; $i < $batchNum; $i++) - { - if(!empty($data->title[$i])) - { - if(empty($data->modules[$i])) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->bug->module))); - if(empty($data->openedBuilds[$i])) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->bug->openedBuild))); - } - } - /* Get pairs(moduleID => moduleOwner) for bug. */ $stmt = $this->dbh->query($this->loadModel('tree')->buildMenuQuery($productID, 'bug', $startModuleID = 0, $branch)); $moduleOwners = array(); @@ -149,6 +140,7 @@ class bugModel extends model } if(isset($data->uploadImage)) $this->loadModel('file'); + $bugs = array(); for($i = 0; $i < $batchNum; $i++) { if(empty($data->title[$i])) continue; @@ -172,6 +164,23 @@ class bugModel extends model $bug->browser = $data->browsers[$i]; $bug->keywords = $data->keywords[$i]; + if(!empty($moduleOwners[$bug->module])) + { + $bug->assignedTo = $moduleOwners[$bug->module]; + $bug->assignedDate = $now; + } + + foreach(explode(',', $this->config->bug->create->requiredFields) as $field) + { + $field = trim($field); + if($field and empty($bug->$field)) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->bug->$field))); + } + + $bugs[$i] = $bug; + } + + foreach($bugs as $i => $bug) + { if(!empty($data->uploadImage[$i])) { $fileName = $data->uploadImage[$i]; @@ -197,15 +206,14 @@ class bugModel extends model } } - if(!empty($moduleOwners[$bug->module])) - { - $bug->assignedTo = $moduleOwners[$bug->module]; - $bug->assignedDate = $now; - } + $this->dao->insert(TABLE_BUG)->data($bug) + ->autoCheck() + ->batchCheck($this->config->bug->create->requiredFields, 'notempty') + ->exec(); + if(dao::isError()) die(js::error(dao::getError())); - $this->dao->insert(TABLE_BUG)->data($bug)->autoCheck()->batchCheck($this->config->bug->create->requiredFields, 'notempty')->exec(); $bugID = $this->dao->lastInsertID(); - if(!dao::isError()) $this->loadModel('score')->create('bug', 'create', $bugID); + $this->loadModel('score')->create('bug', 'create', $bugID); if(!empty($data->uploadImage[$i]) and !empty($file)) { $file['objectType'] = 'bug'; diff --git a/module/custom/config.php b/module/custom/config.php index 66f30bfb46..9045fe6ec3 100644 --- a/module/custom/config.php +++ b/module/custom/config.php @@ -30,8 +30,8 @@ $config->custom->requiredModules[85] = 'user'; $config->custom->fieldList['product']['create'] = 'name,code,line,PO,QD,RD,type,desc'; $config->custom->fieldList['product']['edit'] = 'name,code,line,PO,QD,RD,type,desc,status'; -$config->custom->fieldList['story']['create'] = 'module,plan,source,title,pri,estimate,keywords,spec,verify'; -$config->custom->fieldList['story']['change'] = 'title,spec,verify,comment'; +$config->custom->fieldList['story']['create'] = 'module,plan,source,title,pri,estimate,keywords'; +$config->custom->fieldList['story']['change'] = 'title,comment'; $config->custom->fieldList['story']['close'] = 'closedReason,comment'; $config->custom->fieldList['story']['review'] = 'reviewedDate,assignedTo,reviewedBy,comment'; $config->custom->fieldList['productplan'] = 'title,begin,end,desc'; diff --git a/module/story/model.php b/module/story/model.php index f1017737fb..624250069c 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -277,84 +277,94 @@ class storyModel extends model if(isset($stories->uploadImage)) $this->loadModel('file'); $forceReview = $this->checkForceReview(); + $data = array(); for($i = 0; $i < $batchNum; $i++) { - if(!empty($stories->title[$i])) + if(empty($stories->title[$i])) continue; + $story = new stdclass(); + $story->branch = $stories->branch[$i]; + $story->module = $stories->module[$i]; + $story->plan = $stories->plan[$i]; + $story->color = $stories->color[$i]; + $story->title = $stories->title[$i]; + $story->source = $stories->source[$i]; + $story->pri = $stories->pri[$i]; + $story->estimate = $stories->estimate[$i]; + $story->status = ($stories->needReview[$i] == 0 and !$forceReview) ? 'active' : 'draft'; + $story->keywords = $stories->keywords[$i]; + $story->product = $productID; + $story->openedBy = $this->app->user->account; + $story->openedDate = $now; + $story->version = 1; + + foreach(explode(',', $this->config->story->create->requiredFields) as $field) { - $data = new stdclass(); - $data->branch = $stories->branch[$i]; - $data->module = $stories->module[$i]; - $data->plan = $stories->plan[$i]; - $data->color = $stories->color[$i]; - $data->title = $stories->title[$i]; - $data->source = $stories->source[$i]; - $data->pri = $stories->pri[$i]; - $data->estimate = $stories->estimate[$i]; - $data->status = ($stories->needReview[$i] == 0 and !$forceReview) ? 'active' : 'draft'; - $data->keywords = $stories->keywords[$i]; - $data->product = $productID; - $data->openedBy = $this->app->user->account; - $data->openedDate = $now; - $data->version = 1; + $field = trim($field); + if($field and empty($story->$field)) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->story->$field))); + } - $this->dao->insert(TABLE_STORY)->data($data)->autoCheck() - ->batchCheck($this->config->story->create->requiredFields, 'notempty') - ->exec(); - if(dao::isError()) + $data[$i] = $story; + } + + foreach($data as $i => $story) + { + $this->dao->insert(TABLE_STORY)->data($story)->autoCheck() + ->batchCheck($this->config->story->create->requiredFields, 'notempty') + ->exec(); + if(dao::isError()) + { + echo js::error(dao::getError()); + die(js::reload('parent')); + } + + $storyID = $this->dao->lastInsertID(); + $this->setStage($storyID); + + $specData = new stdclass(); + $specData->story = $storyID; + $specData->version = 1; + $specData->title = $stories->title[$i]; + $specData->spec = ''; + $specData->verify = ''; + if(!empty($stories->spec[$i])) $specData->spec = nl2br($stories->spec[$i]); + if(!empty($stories->verify[$i]))$specData->verify = nl2br($stories->verify[$i]); + + if(!empty($stories->uploadImage[$i])) + { + $fileName = $stories->uploadImage[$i]; + $file = $this->session->storyImagesFile[$fileName]; + + $realPath = $file['realpath']; + unset($file['realpath']); + + if(rename($realPath, $this->file->savePath . $this->file->getSaveName($file['pathname']))) { - echo js::error(dao::getError()); - die(js::reload('parent')); - } - - $storyID = $this->dao->lastInsertID(); - $this->setStage($storyID); - - $specData = new stdclass(); - $specData->story = $storyID; - $specData->version = 1; - $specData->title = $stories->title[$i]; - $specData->spec = ''; - $specData->verify = ''; - if(!empty($stories->spec[$i])) $specData->spec = nl2br($stories->spec[$i]); - if(!empty($stories->verify[$i]))$specData->verify = nl2br($stories->verify[$i]); - - if(!empty($stories->uploadImage[$i])) - { - $fileName = $stories->uploadImage[$i]; - $file = $this->session->storyImagesFile[$fileName]; - - $realPath = $file['realpath']; - unset($file['realpath']); - - if(rename($realPath, $this->file->savePath . $this->file->getSaveName($file['pathname']))) + $file['addedBy'] = $this->app->user->account; + $file['addedDate'] = $now; + $file['objectType'] = 'story'; + $file['objectID'] = $storyID; + if(in_array($file['extension'], $this->config->file->imageExtensions)) { - $file['addedBy'] = $this->app->user->account; - $file['addedDate'] = $now; - $file['objectType'] = 'story'; - $file['objectID'] = $storyID; - if(in_array($file['extension'], $this->config->file->imageExtensions)) - { - $file['extra'] = 'editor'; - $this->dao->insert(TABLE_FILE)->data($file)->exec(); + $file['extra'] = 'editor'; + $this->dao->insert(TABLE_FILE)->data($file)->exec(); - $fileID = $this->dao->lastInsertID(); - $specData->spec .= ''; - } - else - { - $this->dao->insert(TABLE_FILE)->data($file)->exec(); - } + $fileID = $this->dao->lastInsertID(); + $specData->spec .= ''; + } + else + { + $this->dao->insert(TABLE_FILE)->data($file)->exec(); } } - - $this->dao->insert(TABLE_STORYSPEC)->data($specData)->exec(); - - $actionID = $this->action->create('story', $storyID, 'Opened', ''); - if(!dao::isError()) $this->loadModel('score')->create('story', 'create',$storyID); - $mails[$i] = new stdclass(); - $mails[$i]->storyID = $storyID; - $mails[$i]->actionID = $actionID; } + + $this->dao->insert(TABLE_STORYSPEC)->data($specData)->exec(); + + $actionID = $this->action->create('story', $storyID, 'Opened', ''); + if(!dao::isError()) $this->loadModel('score')->create('story', 'create',$storyID); + $mails[$i] = new stdclass(); + $mails[$i]->storyID = $storyID; + $mails[$i]->actionID = $actionID; } /* Remove upload image file and session. */ diff --git a/module/task/model.php b/module/task/model.php index 605e95f38a..73b1ccab0f 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -180,21 +180,14 @@ class taskModel extends model $result = $this->loadModel('common')->removeDuplicate('task', $tasks, "project=$projectID and story " . helper::dbIN($storyIDs)); $tasks = $result['data']; - /* check estimate. */ - for($i = 0; $i < $batchNum; $i++) - { - if(!empty($tasks->name[$i]) and $tasks->estimate[$i] and !preg_match("/^[0-9]+(.[0-9]{1,3})?$/", $tasks->estimate[$i])) - { - die(js::alert($this->lang->task->error->estimateNumber)); - } - if(!empty($tasks->name[$i]) and empty($tasks->type[$i])) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->task->type))); - } $story = 0; $module = 0; $type = ''; $assignedTo = ''; + /* Get task data. */ + $data = array(); for($i = 0; $i < $batchNum; $i++) { $story = !isset($tasks->story[$i]) || $tasks->story[$i] == 'ditto' ? $story : $tasks->story[$i]; @@ -226,11 +219,26 @@ class taskModel extends model if($assignedTo) $data[$i]->assignedDate = $now; if(strpos($this->config->task->create->requiredFields, 'estStarted') !== false and empty($tasks->estStarted[$i])) $data[$i]->estStarted = ''; if(strpos($this->config->task->create->requiredFields, 'deadline') !== false and empty($tasks->deadline[$i])) $data[$i]->deadline = ''; + } - $this->dao->insert(TABLE_TASK)->data($data[$i]) + /* check data. */ + foreach($data as $i => $task) + { + if($task->estimate and !preg_match("/^[0-9]+(.[0-9]{1,3})?$/", $task->estimate)) die(js::alert($this->lang->task->error->estimateNumber)); + foreach(explode(',', $this->config->task->create->requiredFields) as $field) + { + $field = trim($field); + if($field and empty($task->$field)) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->task->$field))); + } + if($task->estimate) $task->estimate = (float)$task->estimate; + } + + foreach($data as $i => $task) + { + $this->dao->insert(TABLE_TASK)->data($task) ->autoCheck() ->batchCheck($this->config->task->create->requiredFields, 'notempty') - ->checkIF($data[$i]->estimate != '', 'estimate', 'float') + ->checkIF($task->estimate != '', 'estimate', 'float') ->exec(); if(dao::isError()) die(js::error(dao::getError())); diff --git a/module/testcase/model.php b/module/testcase/model.php index 765e0683bb..44abd24669 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -167,64 +167,62 @@ class testcaseModel extends model } $this->loadModel('story'); - $storyVersions = array(); - $forceNotReview = $this->forceNotReview(); + $storyVersions = array(); + $forceNotReview = $this->forceNotReview(); + $data = array(); for($i = 0; $i < $batchNum; $i++) { - if($cases->type[$i] != '' and $cases->title[$i] != '') + if(empty($cases->title[$i])) continue; + + $data[$i] = new stdclass(); + $data[$i]->product = $productID; + $data[$i]->branch = $cases->branch[$i]; + $data[$i]->module = $cases->module[$i]; + $data[$i]->type = $cases->type[$i]; + $data[$i]->pri = $cases->pri[$i]; + $data[$i]->stage = empty($cases->stage[$i]) ? '' : implode(',', $cases->stage[$i]); + $data[$i]->story = $storyID ? $storyID : $cases->story[$i]; + $data[$i]->color = $cases->color[$i]; + $data[$i]->title = $cases->title[$i]; + $data[$i]->precondition = $cases->precondition[$i]; + $data[$i]->keywords = $cases->keywords[$i]; + $data[$i]->openedBy = $this->app->user->account; + $data[$i]->openedDate = $now; + $data[$i]->status = $forceNotReview || $cases->needReview[$i] == 0 ? 'normal' : 'wait'; + $data[$i]->version = 1; + + $caseStory = $data[$i]->story; + $data[$i]->storyVersion = isset($storyVersions[$caseStory]) ? $storyVersions[$caseStory] : 0; + if($caseStory and !isset($storyVersions[$caseStory])) { - $data[$i] = new stdclass(); - $data[$i]->product = $productID; - $data[$i]->branch = $cases->branch[$i]; - $data[$i]->module = $cases->module[$i]; - $data[$i]->type = $cases->type[$i]; - $data[$i]->pri = $cases->pri[$i]; - $data[$i]->stage = empty($cases->stage[$i]) ? '' : implode(',', $cases->stage[$i]); - $data[$i]->story = $storyID ? $storyID : $cases->story[$i]; - $data[$i]->color = $cases->color[$i]; - $data[$i]->title = $cases->title[$i]; - $data[$i]->precondition = $cases->precondition[$i]; - $data[$i]->keywords = $cases->keywords[$i]; - $data[$i]->openedBy = $this->app->user->account; - $data[$i]->openedDate = $now; - $data[$i]->status = $forceNotReview || $cases->needReview[$i] == 0 ? 'normal' : 'wait'; - $data[$i]->version = 1; - - $caseStory = $data[$i]->story; - $data[$i]->storyVersion = isset($storyVersions[$caseStory]) ? $storyVersions[$caseStory] : 0; - if($caseStory and !isset($storyVersions[$caseStory])) - { - $data[$i]->storyVersion = $this->story->getVersion($caseStory); - $storyVersions[$caseStory] = $data[$i]->storyVersion; - } - - $this->dao->insert(TABLE_CASE)->data($data[$i]) - ->autoCheck() - ->batchCheck($this->config->testcase->create->requiredFields, 'notempty') - ->exec(); - - if(dao::isError()) - { - echo js::error(dao::getError()); - die(js::reload('parent')); - } - - $caseID = $this->dao->lastInsertID(); - $this->loadModel('score')->create('testcase', 'create', $caseID); - $actionID = $this->loadModel('action')->create('case', $caseID, 'Opened'); + $data[$i]->storyVersion = $this->story->getVersion($caseStory); + $storyVersions[$caseStory] = $data[$i]->storyVersion; } - else + + foreach(explode(',', $this->config->testcase->create->requiredFields) as $field) { - unset($cases->module[$i]); - unset($cases->type[$i]); - unset($cases->pri[$i]); - unset($cases->story[$i]); - unset($cases->title[$i]); - unset($cases->stage[$i]); - unset($cases->precondition[$i]); - unset($cases->keywords[$i]); + $field = trim($field); + if($field and empty($data[$i]->$field)) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->testcase->$field))); } } + + foreach($data as $i => $case) + { + $this->dao->insert(TABLE_CASE)->data($case) + ->autoCheck() + ->batchCheck($this->config->testcase->create->requiredFields, 'notempty') + ->exec(); + + if(dao::isError()) + { + echo js::error(dao::getError()); + die(js::reload('parent')); + } + + $caseID = $this->dao->lastInsertID(); + $this->loadModel('score')->create('testcase', 'create', $caseID); + $actionID = $this->loadModel('action')->create('case', $caseID, 'Opened'); + } if(!dao::isError()) $this->loadModel('score')->create('ajax', 'batchCreate'); } diff --git a/module/testcase/view/batchcreate.html.php b/module/testcase/view/batchcreate.html.php index 919feb7754..7e5d250a45 100644 --- a/module/testcase/view/batchcreate.html.php +++ b/module/testcase/view/batchcreate.html.php @@ -43,7 +43,7 @@ foreach(explode(',', $this->config->testcase->create->requiredFields) as $field) if($field) { $requiredFields[$field] = ''; - if(strpos(",{$config->bug->customBatchCreateFields},", ",{$field},") !== false) $visibleFields[$field] = ''; + if(strpos(",{$config->testcase->customBatchCreateFields},", ",{$field},") !== false) $visibleFields[$field] = ''; } } $colspan = count($visibleFields) + 3; diff --git a/module/testcase/view/batchedit.html.php b/module/testcase/view/batchedit.html.php index b611b6c991..9b71a2d80b 100644 --- a/module/testcase/view/batchedit.html.php +++ b/module/testcase/view/batchedit.html.php @@ -36,7 +36,7 @@ foreach(explode(',', $this->config->testcase->edit->requiredFields) as $field) if($field) { $requiredFields[$field] = ''; - if(strpos(",{$config->bug->customBatchEditFields},", ",{$field},") !== false) $visibleFields[$field] = ''; + if(strpos(",{$config->testcase->customBatchEditFields},", ",{$field},") !== false) $visibleFields[$field] = ''; } } ?>