387 lines
11 KiB
PHP
387 lines
11 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
/**
|
|
* The create file of bug 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 Yuting Wang<wangyuting@easycorp.ltd>
|
|
* @package bug
|
|
* @link http://www.zentao.net
|
|
*/
|
|
namespace zin;
|
|
jsVar('executionID', $executionID);
|
|
jsVar('tab', $this->app->tab);
|
|
if($app->tab == 'execution') jsVar('objectID', $executionID);
|
|
if($app->tab == 'project') jsVar('objectID', $projectID);
|
|
|
|
$priList = array_filter($lang->testcase->priList);
|
|
unset($lang->testcase->typeList['unit']);
|
|
|
|
formPanel
|
|
(
|
|
on::change('#product', 'changeProduct'),
|
|
on::change('#branch', 'changeBranch'),
|
|
on::change('#module', 'changeModule'),
|
|
on::change('#story', 'changeStory'),
|
|
on::change('#scriptFile', 'readScriptContent'),
|
|
on::change('#scriptFile', 'hideUploadScriptBtn'),
|
|
on::click('#refresh', 'clickRefresh'),
|
|
on::click('#auto', 'checkScript'),
|
|
on::click('.autoScript .file-delete', 'showUploadScriptBtn'),
|
|
set::title($lang->testcase->create),
|
|
set::customFields(true),
|
|
!empty($gobackLink) ? set::backUrl($gobackLink) : null,
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/3'),
|
|
setClass(!empty($product->shadow) ? 'hidden' : ''),
|
|
set::label($lang->testcase->product),
|
|
inputGroup
|
|
(
|
|
picker
|
|
(
|
|
set::id('product'),
|
|
set::name('product'),
|
|
set::items($products),
|
|
set::value(!empty($case->product) ? $case->product : $productID)
|
|
),
|
|
picker
|
|
(
|
|
set::className(!isset($product->type) || $product->type == 'normal' ? 'hidden' : ''),
|
|
set::width('100px'),
|
|
set::id('branch'),
|
|
set::name('branch'),
|
|
set::items($branches),
|
|
set::value($branch),
|
|
set::emptyValue('')
|
|
)
|
|
)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/3'),
|
|
set::label($lang->testcase->module),
|
|
set::required(strpos(",{$config->testcase->create->requiredFields},", ',module,') !== false),
|
|
inputGroup
|
|
(
|
|
set('id', 'moduleBox'),
|
|
picker
|
|
(
|
|
set::id('module'),
|
|
set::name('module'),
|
|
set::items($moduleOptionMenu),
|
|
set::value($currentModuleID),
|
|
set::required(true),
|
|
),
|
|
span
|
|
(
|
|
set('class', 'input-group-addon' . (count($moduleOptionMenu) > 1 ? ' hidden' : '')),
|
|
a
|
|
(
|
|
set('class', 'mr-2'),
|
|
set('href', $this->createLink('tree', 'browse', "rootID=$productID&view=case¤tModuleID=0&branch={$branch}")),
|
|
set('data-toggle', 'modal'),
|
|
set('data-size', 'lg'),
|
|
$lang->tree->manage
|
|
),
|
|
a
|
|
(
|
|
set('id', 'refreshModule'),
|
|
set('class', 'text-black'),
|
|
set('href', 'javascript:void(0)'),
|
|
icon('refresh')
|
|
)
|
|
),
|
|
)
|
|
),
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/3'),
|
|
set::label($lang->testcase->scene),
|
|
inputGroup
|
|
(
|
|
set('id', 'sceneBox'),
|
|
picker
|
|
(
|
|
set::id('scene'),
|
|
set::name('scene'),
|
|
set::items($sceneOptionMenu),
|
|
set::value($currentSceneID),
|
|
set::required(true),
|
|
)
|
|
)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/3'),
|
|
set::label($lang->testcase->type),
|
|
set::required(strpos(",{$config->testcase->create->requiredFields},", ',type,') !== false),
|
|
picker
|
|
(
|
|
set::id('type'),
|
|
set::name('type'),
|
|
set::items($lang->testcase->typeList),
|
|
set::value($case->type),
|
|
set::required(true)
|
|
),
|
|
),
|
|
formGroup
|
|
(
|
|
setClass('ml-2 items-center'),
|
|
checkbox
|
|
(
|
|
set::id('auto'),
|
|
set::name('auto'),
|
|
set::value('auto'),
|
|
set::text($lang->testcase->automated)
|
|
)
|
|
),
|
|
),
|
|
formRow
|
|
(
|
|
setClass('hidden autoScript'),
|
|
formGroup
|
|
(
|
|
set::width('1/3'),
|
|
set::label($lang->testcase->autoScript),
|
|
upload
|
|
(
|
|
set::name('scriptFile'),
|
|
set::accept($config->testcase->scriptAcceptFileTypes),
|
|
set::limitCount(1)
|
|
),
|
|
input
|
|
(
|
|
set::type('hidden'),
|
|
set::name('script')
|
|
)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/3'),
|
|
set::label($lang->testcase->stage),
|
|
set::required(strpos(",{$config->testcase->create->requiredFields},", ',stage,') !== false),
|
|
inputGroup
|
|
(
|
|
set('id', 'stageBox'),
|
|
picker
|
|
(
|
|
set::id('stage'),
|
|
set::name('stage[]'),
|
|
set::multiple(true),
|
|
set::items($lang->testcase->stageList),
|
|
set::value($case->stage)
|
|
)
|
|
)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->testcase->lblStory),
|
|
set::required(strpos(",{$config->testcase->create->requiredFields},", ',story,') !== false),
|
|
inputGroup
|
|
(
|
|
set('id', 'storyBox'),
|
|
picker
|
|
(
|
|
set::id('story'),
|
|
set::name('story'),
|
|
set::items($stories),
|
|
set::value($case->story)
|
|
),
|
|
span
|
|
(
|
|
set('class', 'input-group-addon'),
|
|
set('class' , !$case->story ? 'hidden' : ''),
|
|
a
|
|
(
|
|
set::id('preview'),
|
|
set::href(helper::createLink('story', 'view', "storyID={$case->story}")),
|
|
set('data-toggle', 'modal'),
|
|
$lang->preview
|
|
)
|
|
)
|
|
)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
setClass('title-row'),
|
|
formGroup
|
|
(
|
|
setClass('grow'),
|
|
set::label($lang->testcase->title),
|
|
set::required(true),
|
|
inputControl
|
|
(
|
|
input
|
|
(
|
|
set::name('title'),
|
|
set::value($case->title),
|
|
),
|
|
set::suffixWidth('icon'),
|
|
to::suffix
|
|
(
|
|
colorPicker
|
|
(
|
|
set::name('color'),
|
|
set::value($case->color),
|
|
set::syncColor('#title')
|
|
)
|
|
)
|
|
)
|
|
),
|
|
formGroup
|
|
(
|
|
setClass('grow-0'),
|
|
set::label($lang->testcase->pri),
|
|
set::required(strpos(",{$config->testcase->create->requiredFields},", ',pri,') !== false),
|
|
priPicker
|
|
(
|
|
width('80px'),
|
|
set::name('pri'),
|
|
set::items($priList),
|
|
set::value($case->pri)
|
|
),
|
|
),
|
|
$needReview ? formGroup
|
|
(
|
|
setClass('grow-0'),
|
|
set::label($lang->testcase->isReviewed),
|
|
picker
|
|
(
|
|
width('80px'),
|
|
set::items($lang->testcase->reviewList),
|
|
set::id('needReview'),
|
|
set::name('needReview'),
|
|
set::value('0'),
|
|
set::required(true),
|
|
),
|
|
) : null
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::label($lang->testcase->precondition),
|
|
set::control(array('type' => 'textarea', 'rows' => 2)),
|
|
set::name('precondition'),
|
|
set::value($case->precondition)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::label($lang->testcase->steps),
|
|
stepsEditor(set::data($case->steps))
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::label($lang->testcase->keywords),
|
|
set::name('keywords'),
|
|
set::value($case->keywords)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::label($lang->testcase->files),
|
|
upload()
|
|
)
|
|
)
|
|
);
|
|
|
|
render();
|
|
|
|
function printStepsTable()
|
|
{
|
|
global $lang;
|
|
|
|
$stepsTR = array();
|
|
for($i = 1; $i <= 3; $i ++)
|
|
{
|
|
$stepsTR[] = h::tr
|
|
(
|
|
h::td(set::className('center'), $i),
|
|
h::td
|
|
(
|
|
inputGroup
|
|
(
|
|
textarea
|
|
(
|
|
set::rows(1),
|
|
set::name("steps[$i]")
|
|
),
|
|
span
|
|
(
|
|
set('class', 'input-group-addon'),
|
|
checkbox
|
|
(
|
|
set::name("stepType[$i]"),
|
|
set::text($lang->testcase->automated),
|
|
)
|
|
)
|
|
)
|
|
),
|
|
h::td
|
|
(
|
|
textarea
|
|
(
|
|
set::rows(1),
|
|
set::name("expects[$i]")
|
|
)
|
|
),
|
|
h::td
|
|
(
|
|
set::className('center'),
|
|
btnGroup
|
|
(
|
|
set::items(array(
|
|
array('icon' => 'plus'),
|
|
array('icon' => 'trash'),
|
|
array('icon' => 'move')
|
|
))
|
|
)
|
|
)
|
|
);
|
|
}
|
|
return h::table
|
|
(
|
|
set::className('w-full'),
|
|
h::thead
|
|
(
|
|
h::tr
|
|
(
|
|
h::th($lang->testcase->stepID),
|
|
h::th($lang->testcase->stepDesc),
|
|
h::th($lang->testcase->stepExpect),
|
|
h::th($lang->actions)
|
|
)
|
|
),
|
|
h::tbody
|
|
(
|
|
$stepsTR
|
|
)
|
|
);
|
|
}
|