* Refactor view of testcase::batchCreate.

This commit is contained in:
liumengyi
2023-06-26 09:07:10 +08:00
parent e79155d1a8
commit f3aeda8304
4 changed files with 212 additions and 49 deletions
+13
View File
@@ -24,3 +24,16 @@ $config->testcase->form->create['status'] = array('required' => false, 'ty
$config->testcase->form->create['version'] = array('required' => false, 'type' => 'int', 'default' => 1);
$config->testcase->form->create['openedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account);
$config->testcase->form->create['openedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now());
$config->testcase->form->batchCreate = common::formConfig('testcase', 'batchCreate');
$config->testcase->form->batchCreate['branch'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->testcase->form->batchCreate['module'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->testcase->form->batchCreate['scene'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->testcase->form->batchCreate['story'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->testcase->form->batchCreate['title'] = array('required' => true, 'type' => 'string', 'default' => '', 'base' => true);
$config->testcase->form->batchCreate['type'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->testcase->form->batchCreate['pri'] = array('required' => false, 'type' => 'int', 'default' => 0);
$config->testcase->form->batchCreate['precondition'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->testcase->form->batchCreate['keywords'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->testcase->form->batchCreate['stage'] = array('required' => false, 'type' => 'string', 'default' => '');
$config->testcase->form->batchCreate['review'] = array('required' => false, 'type' => 'int', 'default' => 0);
+6 -16
View File
@@ -653,19 +653,9 @@ class testcase extends control
if(!empty($_POST))
{
$caseIDList = $this->testcase->batchCreate($productID, $branch, $storyID);
if(dao::isError()) return print(js::error(dao::getError()));
if(isonlybody())
{
$execution = $this->loadModel('execution')->getByID($this->session->execution);
if($this->app->tab == 'execution' and $execution->type == 'kanban')
{
return print(js::closeModal('parent.parent', ''));
}
else
{
return print(js::closeModal('parent.parent', 'this'));
}
}
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
if(helper::isAjaxRequest('modal')) return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'closeModal' => true, 'load' => true));
if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'idList' => $caseIDList));
@@ -673,12 +663,12 @@ class testcase extends control
$currentModule = $this->app->tab == 'project' ? 'project' : 'testcase';
$currentMethod = $this->app->tab == 'project' ? 'testcase' : 'browse';
$projectParam = $this->app->tab == 'project' ? "projectID={$this->session->project}&" : '';
return print(js::locate($this->createLink($currentModule, $currentMethod, $projectParam . "productID=$productID&branch=$branch&browseType=all&param=0&caseType=&orderBy=id_desc"), 'parent'));
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => $this->createLink($currentModule, $currentMethod, "{$projectParam}productID={$productID}&branch={$branch}&browseType=all&param=0&caseType=&orderBy=id_desc")));
}
if(empty($this->products)) $this->locate($this->createLink('product', 'create'));
/* Set productID and currentModuleID. */
$productID = $this->product->saveState($productID, $this->products);
$productID = $this->product->saveVisitState($productID, $this->products);
if($branch === '') $branch = $this->cookie->preBranch;
if($storyID and empty($moduleID))
{
@@ -693,7 +683,7 @@ class testcase extends control
/* Set story list. */
$story = $storyID ? $this->story->getByID($storyID) : '';
$storyPairs = $this->loadModel('story')->getProductStoryPairs($productID, $branch === 'all' ? 0 : $branch);
$storyPairs += $storyID ? array($storyID => $story->id . ':' . $story->title) : array('');
$storyPairs += $storyID ? array($storyID => $story->id . ':' . $story->title) : array();
/* Set custom. */
$product = $this->product->getById($productID);
+8 -33
View File
@@ -104,12 +104,6 @@ class testcaseModel extends model
$result = $this->loadModel('common')->removeDuplicate('case', $cases, "product={$productID}");
$cases = $result['data'];
foreach($cases->title as $i => $title)
{
if(!empty($cases->title[$i]) and empty($cases->type[$i])) return print(js::alert(sprintf($this->lang->error->notempty, $this->lang->testcase->type)));
}
$module = 0;
$scene = 0;
$story = 0;
@@ -117,22 +111,6 @@ class testcaseModel extends model
$pri = 3;
foreach($cases->title as $i => $title)
{
if(empty($title) and $this->common->checkValidRow('testcase', $cases, $i))
{
dao::$errors['message'][] = sprintf($this->lang->error->notempty, $this->lang->testcase->title);
return false;
}
$module = $cases->module[$i] == 'ditto' ? $module : $cases->module[$i];
$scene = $cases->scene[$i] == 'ditto' ? $scene : $cases->scene[$i];
$story = $cases->story[$i] == 'ditto' ? $story : $cases->story[$i];
$type = $cases->type[$i] == 'ditto' ? $type : $cases->type[$i];
$pri = $cases->pri[$i] == 'ditto' ? $pri : $cases->pri[$i];
$cases->module[$i] = (int)$module;
$cases->scene[$i] = (int)$scene;
$cases->story[$i] = !empty($storyID) ? $storyID : (int)$story;
$cases->type[$i] = $type;
$cases->pri[$i] = $pri;
}
$this->loadModel('story');
@@ -147,14 +125,14 @@ class testcaseModel extends model
$data[$i] = new stdclass();
$data[$i]->product = $productID;
if($this->app->tab == 'project') $data[$i]->project = $this->session->project;
$data[$i]->branch = isset($cases->branch[$i]) ? $cases->branch[$i] : '0';
$data[$i]->branch = isset($cases->branch[$i]) ? (int)$cases->branch[$i] : '0';
$data[$i]->module = $cases->module[$i];
$data[$i]->scene = $cases->scene[$i];
$data[$i]->scene = (int)$cases->scene[$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 = $cases->story[$i];
$data[$i]->color = $cases->color[$i];
$data[$i]->stage = is_array($cases->stage[$i]) ? implode(',', $cases->stage[$i]) : zget($cases->stage, $i);
$data[$i]->story = (int)$cases->story[$i];
$data[$i]->color = isset($cases->color) ? $cases->color[$i] : '';
$data[$i]->title = $cases->title[$i];
$data[$i]->precondition = $cases->precondition[$i];
$data[$i]->keywords = $cases->keywords[$i];
@@ -182,9 +160,10 @@ class testcaseModel extends model
foreach(explode(',', $this->config->testcase->create->requiredFields) as $field)
{
$field = trim($field);
if($field and empty($data[$i]->$field)) return helper::end(js::alert(sprintf($this->lang->error->notempty, $this->lang->testcase->$field)));
if($field && empty($data[$i]->{$field})) dao::$errors["{$field}[{$i}]"][] = sprintf($this->lang->error->notempty, $this->lang->testcase->{$field});
}
}
if(dao::isError()) return false;
$caseIDList = array();
foreach($data as $i => $case)
@@ -195,11 +174,7 @@ class testcaseModel extends model
->checkFlow()
->exec();
if(dao::isError())
{
echo js::error(dao::getError());
return print(js::reload('parent'));
}
if(dao::isError()) return false;
$caseID = $this->dao->lastInsertID();
$caseIDList[] = $caseID;
+185
View File
@@ -0,0 +1,185 @@
<?php
declare(strict_types=1);
/**
* The batchCreate view file of testcase module of ZenTaoPMS.
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
* @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
* @author Mengyi Liu <liumengyi@easycorp.ltd>
* @package testcase
* @link https://www.zentao.net
*/
namespace zin;
$visibleFields = array();
$requiredFields = array();
foreach(explode(',', $showFields) as $field)
{
if($field) $visibleFields[$field] = '';
}
foreach(explode(',', $config->testcase->create->requiredFields) as $field)
{
if($field)
{
$requiredFields[$field] = '';
if(strpos(",{$config->testcase->customBatchCreateFields},", ",{$field},") !== false) $visibleFields[$field] = '';
}
}
$hiddenStory = isAjaxRequest('modal') && $story;
$items = array();
/* Field of id. */
$items[] = array
(
'name' => 'id',
'label' => $lang->idAB,
'control' => 'index',
'width' => '32px',
);
/* Field of branch. */
$items[] = array
(
'name' => 'branch',
'label' => $lang->product->branchName[$product->type],
'hidden' => zget($visibleFields, $product->type, true, false),
'control' => 'select',
'items' => $branches,
'value' => $branch,
'width' => '200px',
'ditto' => true,
);
/* Field of module. */
$items[] = array
(
'name' => 'module',
'label' => $lang->testcase->module,
'hidden' => zget($visibleFields, 'module', true, false),
'control' => 'select',
'items' => $moduleOptionMenu,
'value' => $currentModuleID,
'width' => '200px',
'required' => isset($requiredFields['module']),
'ditto' => true,
);
/* Field of scene. */
$items[] = array
(
'name' => 'scene',
'label' => $lang->testcase->scene,
'hidden' => zget($visibleFields, 'scene', true, false),
'control' => 'select',
'items' => $scene,
'value' => $currentSceneID,
'width' => '200px',
'required' => isset($requiredFields['scene']),
'ditto' => true,
);
/* Field of story. */
$items[] = array
(
'name' => 'story',
'label' => $lang->testcase->story,
'hidden' => zget($visibleFields, 'story', true, false) || $hiddenStory,
'control' => 'select',
'items' => $storyPairs,
'value' => $story ? $story->id : '',
'width' => '200px',
'required' => isset($requiredFields['story']),
);
/* Field of title. */
$items[] = array
(
'name' => 'title',
'label' => $lang->testcase->title,
'width' => '240px',
'required' => true,
);
/* Field of type. */
$items[] = array
(
'name' => 'type',
'label' => $lang->testcase->type,
'control' => 'select',
'items' => $lang->testcase->typeList,
'value' => 1,
'width' => '160px',
'required' => true,
'ditto' => true,
);
/* Field of pri. */
$items[] = array
(
'name' => 'pri',
'label' => $lang->testcase->pri,
'hidden' => zget($visibleFields, 'pri', true, false),
'control' => 'select',
'items' => $lang->testcase->priList,
'value' => 3,
'width' => '80px',
'required' => isset($requiredFields['pri']),
'ditto' => true,
);
/* Field of precondition. */
$items[] = array
(
'name' => 'precondition',
'label' => $lang->testcase->precondition,
'hidden' => zget($visibleFields, 'precondition', true, false),
'width' => '200px',
'required' => isset($requiredFields['precondition']),
);
/* Field of keywords. */
$items[] = array
(
'name' => 'keywords',
'label' => $lang->testcase->keywords,
'hidden' => zget($visibleFields, 'keywords', true, false),
'width' => '200px',
'required' => isset($requiredFields['keywords']),
);
/* Field of stage. */
$items[] = array
(
'name' => 'stage',
'label' => $lang->testcase->stage,
'hidden' => zget($visibleFields, 'stage', true, false),
'control' => array(
'type' => 'select',
'items' => $lang->testcase->stageList,
'value' => '',
'multiple' => true,
),
'width' => '160px',
);
/* Field of review. */
$items[] = array
(
'name' => 'review',
'label' => $lang->testcase->review,
'hidden' => zget($visibleFields, 'review', true, false),
'control' => 'select',
'items' => $lang->testcase->reviewList,
'value' => $needReview,
'width' => '160px',
'ditto' => true,
);
formBatchPanel
(
set::items($items),
// on::change('[data-name="branch"]', 'setModules'),
// on::change('[data-name="module"]', 'onModuleChanged'),
);
render();