457 lines
14 KiB
PHP
457 lines
14 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('bug', $bug);
|
|
jsVar('moduleID', $bug->moduleID);
|
|
jsVar('tab', $this->app->tab);
|
|
jsVar('createRelease', $lang->release->create);
|
|
jsVar('refresh', $lang->refreshIcon);
|
|
|
|
formPanel
|
|
(
|
|
on::change('[name="product"]', 'changeProduct'),
|
|
on::change('[name="branch"]', 'changeBranch'),
|
|
on::change('[name="project"]', 'changeProject'),
|
|
on::change('[name="execution"]', 'changeExecution'),
|
|
on::change('[name="module"]', 'changeModule'),
|
|
on::change('[name="region"]', 'changeRegion'),
|
|
on::change('[name="contactListMenu"]', 'changeContact'),
|
|
on::click('#allBuilds', 'loadAllBuilds'),
|
|
on::click('#allUsers', 'loadAllUsers'),
|
|
on::click('#refreshModule', 'refreshModule'),
|
|
on::click('#refreshMailto', 'refreshContact'),
|
|
on::click('#refreshExecutionBuild', 'refreshExecutionBuild'),
|
|
on::click('#refreshProductBuild', 'refreshProductBuild'),
|
|
set::title($lang->bug->create),
|
|
set::customFields(true),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::className($product->shadow ? 'hidden' : ''),
|
|
set::label($lang->bug->product),
|
|
inputGroup
|
|
(
|
|
picker
|
|
(
|
|
set::name('product'),
|
|
set::items($products),
|
|
set::value($bug->productID)
|
|
),
|
|
$product->type != 'normal' && isset($products[$bug->productID]) ? picker
|
|
(
|
|
set::width('100px'),
|
|
set::name('branch'),
|
|
set::items($branches),
|
|
set::value($bug->branch)
|
|
) : null
|
|
)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->project),
|
|
set::required(strpos(",{$config->bug->create->requiredFields},", ',project,') !== false),
|
|
inputGroup
|
|
(
|
|
set('id', 'projectBox'),
|
|
picker
|
|
(
|
|
set::name('project'),
|
|
set::items($projects),
|
|
set::value($defaultProject)
|
|
)
|
|
)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->module),
|
|
set::required(strpos(",{$config->bug->create->requiredFields},", ',module,') !== false),
|
|
inputGroup
|
|
(
|
|
set('id', 'moduleBox'),
|
|
picker
|
|
(
|
|
set::name('module'),
|
|
set::items($moduleOptionMenu),
|
|
set::value($bug->moduleID),
|
|
set::required('true')
|
|
),
|
|
count($moduleOptionMenu) == 1 ? span
|
|
(
|
|
set('class', 'input-group-addon'),
|
|
a
|
|
(
|
|
set('class', 'mr-2'),
|
|
set('href', $this->createLink('tree', 'browse', "rootID=$bug->productID&view=bug¤tModuleID=0&branch={$bug->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')
|
|
)
|
|
) : null
|
|
)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set('id', 'executionBox'),
|
|
set::label($bug->projectModel == 'kanban' ? $lang->bug->kanban : $lang->bug->execution),
|
|
set::required(strpos(",{$config->bug->create->requiredFields},", ',execution,') !== false),
|
|
picker
|
|
(
|
|
set::name('execution'),
|
|
set::items($executions),
|
|
set::value($defaultExecution)
|
|
)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->openedBuild),
|
|
set::required(true),
|
|
inputGroup
|
|
(
|
|
picker
|
|
(
|
|
set::multiple(true),
|
|
set::name('openedBuild[]'),
|
|
set('data-items', count($builds)),
|
|
set::items($builds),
|
|
set::value(empty($bug->buildID) ? 'trunk' : $bug->buildID)
|
|
),
|
|
span
|
|
(
|
|
set('id', 'buildBoxActions'),
|
|
set('class', 'input-group-addon'),
|
|
setStyle(array('display' => 'none'))
|
|
),
|
|
span
|
|
(
|
|
set('class', 'input-group-addon'),
|
|
a
|
|
(
|
|
set('id', 'allBuilds'),
|
|
set('href', 'javascript:;'),
|
|
$lang->bug->loadAll
|
|
)
|
|
)
|
|
)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->lblAssignedTo),
|
|
inputGroup
|
|
(
|
|
picker
|
|
(
|
|
set::name('assignedTo'),
|
|
set::items($productMembers),
|
|
set::value($bug->assignedTo)
|
|
),
|
|
span
|
|
(
|
|
set('class', 'input-group-addon'),
|
|
a
|
|
(
|
|
set('id', 'allUsers'),
|
|
set('href', 'javascript:;'),
|
|
$lang->bug->loadAll
|
|
)
|
|
)
|
|
)
|
|
)
|
|
),
|
|
(!empty($executionType) && $executionType == 'kanban') ? formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->kanbancard->region),
|
|
set::control('picker'),
|
|
set::name('region'),
|
|
set::items($regionPairs),
|
|
set::value($regionID)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->kanbancard->lane),
|
|
set::control('picker'),
|
|
set::name('lane'),
|
|
set::items($lanePairs),
|
|
set::value($laneID)
|
|
),
|
|
) : null,
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->deadline),
|
|
set::required(strpos(",{$config->bug->create->requiredFields},", ',deadline,') !== false),
|
|
datePicker
|
|
(
|
|
set::id('deadline'),
|
|
set::name('deadline'),
|
|
set::value($bug->deadline)
|
|
)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->feedbackBy),
|
|
set::name('feedbackBy'),
|
|
set::value(isset($bug->feedbackBy) ? $bug->feedbackBy : '')
|
|
),
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->notifyEmail),
|
|
set::name('notifyEmail'),
|
|
set::value($bug->notifyEmail)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->type),
|
|
set::control('picker'),
|
|
set::name('type'),
|
|
set::items($lang->bug->typeList),
|
|
set::value($bug->type)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->os),
|
|
set::required(strpos(",{$config->bug->create->requiredFields},", ',deadline,') !== false),
|
|
set::control('picker'),
|
|
set::items($lang->bug->osList),
|
|
set::name('os[]'),
|
|
set::value($bug->os),
|
|
set::multiple(true)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->browser),
|
|
set::required(strpos(",{$config->bug->create->requiredFields},", ',deadline,') !== false),
|
|
set::control('picker'),
|
|
set::items($lang->bug->browserList),
|
|
set::name('browser[]'),
|
|
set::value($bug->browser),
|
|
set::multiple(true)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::label($lang->bug->title),
|
|
set::required(true),
|
|
inputControl
|
|
(
|
|
input
|
|
(
|
|
set::name('title'),
|
|
set::value($bug->title)
|
|
),
|
|
set::suffixWidth('icon'),
|
|
to::suffix
|
|
(
|
|
colorPicker
|
|
(
|
|
set::name('color'),
|
|
set::value($bug->color),
|
|
set::syncColor('#title')
|
|
)
|
|
)
|
|
)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('180px'),
|
|
set::label($lang->bug->severity),
|
|
set::control('severityPicker'),
|
|
set::items(array_filter($lang->bug->severityList)),
|
|
set::name('severity'),
|
|
set::value($bug->severity)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('180px'),
|
|
set::label($lang->bug->pri),
|
|
set::control('priPicker'),
|
|
set::items(array_filter($lang->bug->priList)),
|
|
set::name('pri'),
|
|
set::value($bug->pri)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::label($lang->bug->steps),
|
|
editor
|
|
(
|
|
set::name('steps'),
|
|
html($bug->steps)
|
|
)
|
|
),
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->story),
|
|
inputGroup
|
|
(
|
|
set('id', 'storyBox'),
|
|
picker
|
|
(
|
|
set::name('story'),
|
|
set::items(empty($bug->stories) ? array() : $bug->stories),
|
|
set::value($bug->storyID)
|
|
)
|
|
)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->task),
|
|
set::control('picker'),
|
|
set::items(array()),
|
|
set::name('task'),
|
|
set::value($bug->taskID)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->lblMailto),
|
|
inputGroup
|
|
(
|
|
picker
|
|
(
|
|
set::multiple(true),
|
|
set::name('mailto[]'),
|
|
set::items($users),
|
|
set::value($bug->mailto ? str_replace(' ', '', $bug->mailto) : '')
|
|
),
|
|
span
|
|
(
|
|
set('id', 'contactBox'),
|
|
set('class', 'input-group-addon'),
|
|
$contactList ? setStyle(array('width' => '100px', 'padding' => '0')) : null,
|
|
$contactList ? picker
|
|
(
|
|
set::className('width', 'w-20'),
|
|
set::name('contactListMenu'),
|
|
set::items($contactList),
|
|
set::value(),
|
|
set::placeholder($lang->contact->common)
|
|
) :
|
|
span
|
|
(
|
|
set('class', 'input-group-addon'),
|
|
a
|
|
(
|
|
set('class', 'mr-2'),
|
|
set('href', createLink('my', 'managecontacts', 'listID=0&mode=new')),
|
|
set('title', $lang->user->contacts->manage),
|
|
set('data-toggle', 'modal'),
|
|
icon('cog')
|
|
),
|
|
a
|
|
(
|
|
set('id', 'refreshMailto'),
|
|
set('class', 'text-black'),
|
|
set('href', 'javascript:void(0)'),
|
|
icon('refresh')
|
|
)
|
|
)
|
|
),
|
|
)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->bug->keywords),
|
|
set::name('keywords'),
|
|
set::value($bug->keywords)
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::label($lang->bug->files),
|
|
upload()
|
|
)
|
|
),
|
|
formRow
|
|
(
|
|
setClass('hidden'),
|
|
input
|
|
(
|
|
setClass('hidden'),
|
|
set::name('case'),
|
|
set::value($bug->caseID),
|
|
),
|
|
input
|
|
(
|
|
setClass('hidden'),
|
|
set::name('caseVersion'),
|
|
set::value($bug->version),
|
|
),
|
|
input
|
|
(
|
|
setClass('hidden'),
|
|
set::name('result'),
|
|
set::value($bug->runID),
|
|
),
|
|
input
|
|
(
|
|
setClass('hidden'),
|
|
set::name('testtask'),
|
|
set::value($bug->testtask),
|
|
),
|
|
)
|
|
);
|
|
|
|
render();
|