590 lines
18 KiB
PHP
590 lines
18 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
/**
|
|
* The set view file of custom 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 Yanyi Cao <caoyanyi@easycorp.ltd>
|
|
* @package custom
|
|
* @link https://www.zentao.net
|
|
*/
|
|
namespace zin;
|
|
|
|
data('activeMenuItem', $module);
|
|
|
|
if(!in_array($module, array('block', 'baseline'))) include 'sidebar.html.php';
|
|
|
|
$formItems = array();
|
|
$formActions = array('submit');
|
|
$headingTips = null;
|
|
$actionWidth = 'w-1/2';
|
|
$isEn = $app->getClientLang() == 'en';
|
|
if($module == 'project' && $field == 'unitList')
|
|
{
|
|
$checkedUnitList = array();
|
|
foreach($lang->project->unitList as $unit => $unitName)
|
|
{
|
|
if(in_array($unit, $unitList)) $checkedUnitList[$unit] = $unitName;
|
|
}
|
|
|
|
$formItems[] = formGroup
|
|
(
|
|
set::label($lang->custom->project->currencySetting),
|
|
checkList
|
|
(
|
|
setClass('flex flex-wrap unit-box'),
|
|
set::name('unitList[]'),
|
|
set::value($unitList),
|
|
set::inline(true),
|
|
set::items($lang->project->unitList),
|
|
on::change('changeUnit')
|
|
)
|
|
);
|
|
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/3'),
|
|
set::label($lang->custom->project->defaultCurrency),
|
|
set::name('defaultCurrency'),
|
|
set::items($checkedUnitList),
|
|
set::value($defaultCurrency),
|
|
set::required(true)
|
|
);
|
|
$actionWidth = 'w-full';
|
|
}
|
|
elseif(in_array($module, array('story', 'requirement', 'epic', 'demand')) && $field == 'reviewRules')
|
|
{
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->reviewRule),
|
|
set::name('reviewRules'),
|
|
set::value($reviewRule),
|
|
set::control('radioListInline'),
|
|
set::items($lang->custom->reviewRules)
|
|
);
|
|
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->superReviewers),
|
|
set::name('superReviewers'),
|
|
set::value($superReviewers),
|
|
set::control(array('control' => 'picker', 'multiple' => true)),
|
|
set::items($users)
|
|
);
|
|
}
|
|
elseif(in_array($module, array('story', 'requirement', 'epic')) && $field == 'gradeRule')
|
|
{
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->gradeRule),
|
|
set::name('gradeRule'),
|
|
set::value($gradeRule),
|
|
set::control('radioListInline'),
|
|
set::items($lang->custom->gradeRuleList)
|
|
);
|
|
$formItems[] = div
|
|
(
|
|
setClass('gradeRuleNotice'),
|
|
div($lang->custom->notice->gradeRule)
|
|
);
|
|
}
|
|
elseif(in_array($module, array('epic', 'story', 'requirement', 'demand', 'testcase')) && $field == 'review')
|
|
{
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->storyReview),
|
|
set::name('needReview'),
|
|
set::value($needReview),
|
|
set::control('radioListInline'),
|
|
set::items($lang->custom->reviewList),
|
|
on::change('changeReview')
|
|
);
|
|
|
|
if(in_array($module, array('story', 'requirement', 'epic', 'demand')))
|
|
{
|
|
$formItems[] = formRow
|
|
(
|
|
setClass($needReview ? 'hidden' : ''),
|
|
setClass('open-review'),
|
|
formGroup
|
|
(
|
|
set::label(''),
|
|
set::name(''),
|
|
set::value(sprintf($lang->custom->notice->forceReview, $lang->$module->common) . $lang->custom->notice->storyReviewTip),
|
|
set::control('static')
|
|
)
|
|
);
|
|
|
|
$formItems[] = formRow
|
|
(
|
|
setClass($needReview ? '' : 'hidden'),
|
|
setClass('close-review'),
|
|
formGroup
|
|
(
|
|
set::label(''),
|
|
set::name(''),
|
|
set::value(sprintf($lang->custom->notice->forceNotReview, $lang->$module->common) . $lang->custom->notice->storyReviewTip),
|
|
set::control('static')
|
|
)
|
|
);
|
|
|
|
$app->loadLang('user');
|
|
$space = ($app->getClientLang() != 'zh-cn' and $app->getClientLang() != 'zh-tw') ? ' ' : '';
|
|
$formItems[] = div
|
|
(
|
|
setClass($needReview ? 'hidden' : ''),
|
|
setClass('open-review'),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->forceReview . $space . $lang->custom->account),
|
|
set::name('forceReview'),
|
|
set::value($forceReview),
|
|
set::items($users),
|
|
set::control(array('control' => 'picker', 'multiple' => true))
|
|
),
|
|
formRow
|
|
(
|
|
setClass('my-2'),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->forceReview . $space . $lang->custom->role),
|
|
set::name('forceReviewRoles'),
|
|
set::value($forceReviewRoles),
|
|
set::items($lang->user->roleList),
|
|
set::control(array('control' => 'picker', 'multiple' => true))
|
|
)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->forceReview . $space . $lang->custom->dept),
|
|
set::name('forceReviewDepts'),
|
|
set::value($forceReviewDepts),
|
|
set::items($depts),
|
|
set::control(array('control' => 'picker', 'multiple' => true))
|
|
)
|
|
);
|
|
$formItems[] = div
|
|
(
|
|
setClass($needReview ? '' : 'hidden'),
|
|
setClass('close-review'),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->forceNotReview . $space . $lang->custom->account),
|
|
set::name('forceNotReview'),
|
|
set::value($forceNotReview),
|
|
set::items($users),
|
|
set::control(array('control' => 'picker', 'multiple' => true))
|
|
),
|
|
formRow
|
|
(
|
|
setClass('my-2'),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->forceNotReview . $space . $lang->custom->role),
|
|
set::name('forceNotReviewRoles'),
|
|
set::value($forceNotReviewRoles),
|
|
set::items($lang->user->roleList),
|
|
set::control(array('control' => 'picker', 'multiple' => true))
|
|
)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->forceNotReview . $space . $lang->custom->dept),
|
|
set::name('forceNotReviewDepts'),
|
|
set::value($forceNotReviewDepts),
|
|
set::items($depts),
|
|
set::control(array('control' => 'picker', 'multiple' => true))
|
|
)
|
|
);
|
|
}
|
|
elseif($module == 'testcase')
|
|
{
|
|
jsVar('+stopSubmit', true);
|
|
jsVar('oldNeedReview', $needReview);
|
|
jsVar('confirmReviewCase', $lang->custom->notice->confirmReviewCase);
|
|
|
|
$formItems[] = div
|
|
(
|
|
setClass($needReview ? '' : 'hidden'),
|
|
setClass('close-review'),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('2/3'),
|
|
set::label($lang->custom->forceNotReview),
|
|
set::name('forceNotReview'),
|
|
set::value($forceNotReview),
|
|
set::items($users),
|
|
set::control(array('control' => 'picker', 'multiple' => true))
|
|
),
|
|
icon
|
|
(
|
|
'help',
|
|
setClass('pl-4 pt-2'),
|
|
setData
|
|
(
|
|
array
|
|
(
|
|
'toggle' => 'tooltip',
|
|
'title' => sprintf($lang->custom->notice->forceNotReview, $lang->$module->common)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
);
|
|
$formItems[] = div
|
|
(
|
|
setClass($needReview ? 'hidden' : ''),
|
|
setClass('open-review'),
|
|
formRow
|
|
(
|
|
formGroup
|
|
(
|
|
set::width('2/3'),
|
|
set::label($lang->custom->forceReview),
|
|
set::name('forceReview'),
|
|
set::value($forceReview),
|
|
set::items($users),
|
|
set::control(array('control' => 'picker', 'multiple' => true))
|
|
),
|
|
icon
|
|
(
|
|
'help',
|
|
setClass('pl-4 pt-2'),
|
|
setData
|
|
(
|
|
array
|
|
(
|
|
'toggle' => 'tooltip',
|
|
'title' => sprintf($lang->custom->notice->forceReview, $lang->$module->common)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
);
|
|
|
|
$actionWidth = 'w-2/3';
|
|
}
|
|
}
|
|
elseif($module == 'bug' && $field == 'longlife')
|
|
{
|
|
$formItems[] = formGroup
|
|
(
|
|
set::label($lang->custom->bug->fields['longlife']),
|
|
set::name('longlife'),
|
|
set::value($longlife),
|
|
set::width('1/3'),
|
|
set::control(array(
|
|
'type' => 'inputControl',
|
|
'suffix' => $lang->day
|
|
))
|
|
);
|
|
|
|
$headingTips = div
|
|
(
|
|
setClass('flex flex-auto items-center pt-1'),
|
|
icon('info text-warning mr-1'),
|
|
$lang->custom->notice->longlife
|
|
);
|
|
|
|
$actionWidth = 'w-1/3';
|
|
}
|
|
elseif($module == 'block' && $field == 'closed')
|
|
{
|
|
if(empty($blockPairs))
|
|
{
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->block->fields['closed']),
|
|
set::name('closed'),
|
|
set::value($lang->custom->notice->noClosedBlock),
|
|
set::control('static')
|
|
);
|
|
$formActions = array();
|
|
}
|
|
else
|
|
{
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->block->fields['closed']),
|
|
set::name('closed'),
|
|
set::value($closedBlock),
|
|
set::control(array(
|
|
'type' => 'picker',
|
|
'multiple' => true
|
|
)),
|
|
set::items($blockPairs)
|
|
);
|
|
}
|
|
}
|
|
elseif($module == 'user' && $field == 'contactField')
|
|
{
|
|
$this->app->loadConfig('user');
|
|
$this->app->loadLang('user');
|
|
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->user->fields['contactField']),
|
|
picker
|
|
(
|
|
set::name('contactField'),
|
|
set::value($config->user->contactField),
|
|
set::multiple(true),
|
|
set::items($lang->user->contactFieldList)
|
|
)
|
|
);
|
|
|
|
if(common::hasPriv('custom', 'restore'))
|
|
{
|
|
$formActions[] = array(
|
|
'url' => inlink('restore', "module=user&field=contactField"),
|
|
'text' => $lang->custom->restore,
|
|
'class' => 'btn-wide ajax-submit',
|
|
'data-confirm' => $lang->custom->confirmRestore
|
|
);
|
|
}
|
|
}
|
|
elseif($module == 'user' && $field == 'deleted')
|
|
{
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
$isEn ? null : set::labelWidth('100px'),
|
|
set::label($lang->custom->user->fields['deleted']),
|
|
set::name('showDeleted'),
|
|
set::value($showDeleted),
|
|
set::control('radioListInline'),
|
|
set::items($lang->custom->deletedList)
|
|
);
|
|
}
|
|
elseif($module == 'feedback' && $field == 'review')
|
|
{
|
|
$labelWidth = $isEn ? '140px' : '100px';
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::labelWidth($labelWidth),
|
|
set::label($lang->custom->feedback->fields['review']),
|
|
set::name('needReview'),
|
|
set::value($needReview),
|
|
set::control('radioListInline'),
|
|
set::items($lang->custom->reviewList),
|
|
on::change('changeNeedReview')
|
|
);
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::labelWidth($labelWidth),
|
|
set::hidden($needReview),
|
|
set::label($lang->custom->forceReview),
|
|
set::name('forceReview[]'),
|
|
set::value($forceReview),
|
|
set::control('picker'),
|
|
set::items($users),
|
|
set::multiple(true),
|
|
set::tip(sprintf($lang->custom->notice->forceReview, $lang->feedback->common)),
|
|
);
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::labelWidth($labelWidth),
|
|
set::hidden(!$needReview),
|
|
set::label($lang->custom->forceNotReview),
|
|
set::name('forceNotReview[]'),
|
|
set::value($forceNotReview),
|
|
set::control('picker'),
|
|
set::items($users),
|
|
set::multiple(true),
|
|
set::tip(sprintf($lang->custom->notice->forceNotReview, $lang->feedback->common)),
|
|
);
|
|
$users = arrayUnion(array(' ' => $lang->feedback->deptManager), $users);
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::labelWidth($labelWidth),
|
|
set::label($lang->feedback->reviewedByAB),
|
|
set::name('reviewer'),
|
|
set::value(empty($reviewer) ? ' ' : $reviewer),
|
|
set::control('picker'),
|
|
set::items($users)
|
|
);
|
|
}
|
|
else
|
|
{
|
|
if(!empty($fieldList) && is_array($fieldList))
|
|
{
|
|
$formItems[] = formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($lang->custom->key),
|
|
set::name(''),
|
|
set::value($lang->custom->value),
|
|
set::control('static')
|
|
);
|
|
|
|
div
|
|
(
|
|
setClass('hidden'),
|
|
setID('customFieldRow'),
|
|
|
|
formRow
|
|
(
|
|
input
|
|
(
|
|
set::type('hidden'),
|
|
set::name('systems[]'),
|
|
set::value('0')
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label('addRow'),
|
|
set::name('values[]')
|
|
),
|
|
span
|
|
(
|
|
btn
|
|
(
|
|
setClass('add-item btn ghost'),
|
|
on::click('addRow'),
|
|
icon('plus')
|
|
),
|
|
btn
|
|
(
|
|
setClass('del-item btn ghost'),
|
|
on::click('removeRow'),
|
|
icon('trash')
|
|
)
|
|
)
|
|
)
|
|
);
|
|
|
|
foreach($fieldList as $key => $value)
|
|
{
|
|
$system = isset($dbFields[$key]) ? $dbFields[$key]->system : 1;
|
|
$keyLabel = $key === '' ? 'NULL' : $key;
|
|
if($key === 0) $keyLabel = '0';
|
|
if($app->getClientLang() == 'en' && $key == 'requirement') $keyLabel = $lang->custom->feature;
|
|
|
|
$formItems[] = formRow
|
|
(
|
|
input
|
|
(
|
|
set::type('hidden'),
|
|
set::name('keys[]'),
|
|
set::value($key)
|
|
),
|
|
input
|
|
(
|
|
set::type('hidden'),
|
|
set::name('systems[]'),
|
|
set::value($system)
|
|
),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label($keyLabel),
|
|
set::name('values[]'),
|
|
set::value(isset($dbFields[$key]) ? $dbFields[$key]->value : $value),
|
|
set::readonly(empty($key))
|
|
),
|
|
$canAdd ? span(
|
|
btn
|
|
(
|
|
setClass('add-item btn ghost'),
|
|
on::click('addRow'),
|
|
icon('plus')
|
|
),
|
|
btn
|
|
(
|
|
setClass('del-item btn ghost'),
|
|
on::click('removeRow'),
|
|
icon ('trash')
|
|
)
|
|
) : null
|
|
);
|
|
}
|
|
|
|
$appliedTo = array($currentLang => $lang->custom->currentLang, 'all' => $lang->custom->allLang);
|
|
$formItems[] = formRow
|
|
(
|
|
setClass('lang-row'),
|
|
formGroup
|
|
(
|
|
set::width('1/2'),
|
|
set::label(''),
|
|
set::name('lang'),
|
|
set::items($appliedTo),
|
|
set::value($lang2Set),
|
|
set::control('radioListInline')
|
|
)
|
|
);
|
|
|
|
if(common::hasPriv('custom', 'restore'))
|
|
{
|
|
$formActions[] = array(
|
|
'url' => inlink('restore', "module={$module}&field={$field}"),
|
|
'text' => $lang->custom->restore,
|
|
'class' => 'btn-wide ajax-submit',
|
|
'data-confirm' => $lang->custom->confirmRestore
|
|
);
|
|
}
|
|
|
|
if(!$canAdd)
|
|
{
|
|
$headingTips = div
|
|
(
|
|
setClass('flex flex-auto items-center pt-1'),
|
|
icon('info text-warning mr-1'),
|
|
$lang->custom->notice->canNotAdd
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
div
|
|
(
|
|
setClass('row has-sidebar-left'),
|
|
isset($sidebarMenu) ? $sidebarMenu : null,
|
|
formPanel
|
|
(
|
|
set::formID('settingForm'),
|
|
set::headingClass('justify-start'),
|
|
setClass('flex-auto'),
|
|
setClass(!empty($sidebarMenu) ? 'ml-0.5' : null),
|
|
set::actionsClass($actionWidth),
|
|
set::actions($formActions),
|
|
div
|
|
(
|
|
setClass('flex items-center'),
|
|
span
|
|
(
|
|
setClass('text-md font-bold'),
|
|
$lang->custom->$module->fields[$field]
|
|
),
|
|
span
|
|
(
|
|
setClass('ml-2'),
|
|
$headingTips
|
|
)
|
|
),
|
|
$formItems
|
|
)
|
|
);
|
|
|
|
render();
|