dbms_init...1

This commit is contained in:
choi.jh 2025-07-04 10:05:14 +09:00
parent 9fe08371ef
commit 869ed66b1e
8 changed files with 72 additions and 14 deletions

View File

@ -19,7 +19,7 @@ class AuthHelper extends CommonHelper
switch ($field) {
case 'id':
case 'passwd':
$form = form_password($field, "", ["autocomplete" => $field, ...$extras]);
$form = form_password($field, "", ["id" => $field, ...$extras]);
break;
default:
$form = parent::getFieldForm($field, $value, $viewDatas, $extras);

View File

@ -218,11 +218,11 @@ class CommonHelper
}
switch ($field) {
case 'email':
$form = form_input($field, $value ?? "", ["placeholder" => "예)test@example.com", ...$extras]);
$form = form_input($field, $value ?? "", ["id" => $field, "placeholder" => "예)test@example.com", ...$extras]);
break;
case 'mobile':
case 'phone':
$form = form_input($field, $value ?? "", ["placeholder" => "예)010-0010-0010", ...$extras]);
$form = form_input($field, $value ?? "", ["id" => $field, "placeholder" => "예)010-0010-0010", ...$extras]);
break;
case 'role':
if (!is_array($viewDatas['control']['filter_optons'][$field])) {
@ -233,7 +233,7 @@ class CommonHelper
$forms = [];
foreach ($viewDatas['control']['filter_optons'][$field] as $key => $filterEntity) {
$values = is_array($value) ? $value : explode(DEFAULTS["DELIMITER_ROLE"], $value);
$forms[] = form_checkbox("{$field}[]", $key, in_array($key, $values)) . $filterEntity->getTitle();
$forms[] = form_checkbox("{$field}[]", $key, in_array($key, $values), ["id" => $field, ...$extras]) . $filterEntity->getTitle();
}
$form = implode(" ", $forms);
} else {
@ -241,7 +241,7 @@ class CommonHelper
foreach ($viewDatas['control']['filter_optons'][$field] as $key => $filterEntity) {
$formOptions[$key] = $filterEntity->getTitle();
}
$form = form_dropdown($field, $formOptions, $value, $extras);
$form = form_dropdown($field, $formOptions, $value, ["id" => $field, ...$extras]);
}
break;
case 'expired_at':
@ -250,7 +250,7 @@ class CommonHelper
case 'updated_at':
case 'created_at':
$extra_class = isset($extras['class']) ? $extras['class'] . ' calender' : 'calender';
$form = form_input($field, $value ?? "", ['class' => $extra_class, ...array_diff_key($extras, ['class' => ''])]);
$form = form_input($field, $value ?? "", ["id" => $field, 'class' => $extra_class, ...array_diff_key($extras, ['class' => ''])]);
break;
case 'description':
case 'content':
@ -272,7 +272,7 @@ class CommonHelper
if (in_array($viewDatas['control']['action'], ['create', 'modify', 'create_form', 'modify_form'])) {
$value = $value ?? DEFAULTS['STATUS'];
}
$form = form_dropdown($field, $formOptions, $value, ['class' => $extra_class, ...array_diff_key($extras, ['class' => ''])]);
$form = form_dropdown($field, $formOptions, $value, ["id" => $field, 'class' => $extra_class, ...array_diff_key($extras, ['class' => ''])]);
} else {
$form = form_input($field, $value ?? "", $extras);
}

View File

@ -57,7 +57,7 @@ class ServiceHelper extends CustomerHelper
throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 array형태가 아닙니다.");
}
//CodeIgniter 4의 form_dropdown()은 options 배열로만 값을 받기 때문에, disabled 속성 같은 개별 옵션에 대한 HTML 속성 추가는 기본적으로 지원하지 않습니다.
$form_temps = ["<select name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps = ["<select id=\"{$field}\" name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps[] = "<option value=\"\">" . lang($viewDatas['class_path'] . '.label.' . $field) . " 선택</option>";
foreach ($viewDatas['control']['filter_optons'][$field] as $key => $filterEntity) {
$disabled = $filterEntity->getStatus() === SwitchEntity::STATUS_OCCUPIED ? 'disabled="disabled"' : '';
@ -78,7 +78,7 @@ class ServiceHelper extends CustomerHelper
throw new \Exception(__METHOD__ . "에서 {$field}의 field_options가 array형태가 아닙니다.");
}
//CodeIgniter 4의 form_dropdown()은 options 배열로만 값을 받기 때문에, disabled 속성 같은 개별 옵션에 대한 HTML 속성 추가는 기본적으로 지원하지 않습니다.
$form_temps = ["<select name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps = ["<select id=\"{$field}\" name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps[] = "<option value=\"\">" . lang($viewDatas['class_path'] . '.label.' . $field) . " 선택</option>";
foreach ($viewDatas['control']['filter_optons'][$field] as $key => $filterEntity) {
$disabled = $filterEntity->getStatus() === CodeEntity::STATUS_OCCUPIED ? 'disabled="disabled"' : '';

View File

@ -29,7 +29,7 @@ class ServiceItemHelper extends CustomerHelper
throw new \Exception(__METHOD__ . "에서 {$item_type}의 field_options가 array형태가 아닙니다.");
}
//CodeIgniter 4의 form_dropdown()은 options 배열로만 값을 받기 때문에, disabled 속성 같은 개별 옵션에 대한 HTML 속성 추가는 기본적으로 지원하지 않습니다.
$form_temps = ["<select name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps = ["<select id=\"{$field}\" name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps[] = "<option value=\"\">" . lang($viewDatas['class_path'] . '.label.' . $item_type) . " 선택</option>";
foreach ($viewDatas['control']['filter_optons'][$item_type] as $key => $filterEntity) {
$disabled = $filterEntity->getStatus() === IpEntity::STATUS_OCCUPIED ? 'disabled="disabled"' : '';
@ -50,7 +50,7 @@ class ServiceItemHelper extends CustomerHelper
throw new \Exception(__METHOD__ . "에서 {$item_type}의 field_options가 array형태가 아닙니다.");
}
//CodeIgniter 4의 form_dropdown()은 options 배열로만 값을 받기 때문에, disabled 속성 같은 개별 옵션에 대한 HTML 속성 추가는 기본적으로 지원하지 않습니다.
$form_temps = ["<select name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps = ["<select id=\"{$field}\" name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps[] = "<option value=\"\">" . lang($viewDatas['class_path'] . '.label.' . $item_type) . " 선택</option>";
foreach ($viewDatas['control']['filter_optons'][$item_type] as $key => $filterEntity) {
$disabled = $filterEntity->getStatus() === DomainEntity::STATUS_OCCUPIED ? 'disabled="disabled"' : '';
@ -78,7 +78,7 @@ class ServiceItemHelper extends CustomerHelper
throw new \Exception(__METHOD__ . "에서 {$item_type}의 field_options가 array형태가 아닙니다.");
}
//CodeIgniter 4의 form_dropdown()은 options 배열로만 값을 받기 때문에, disabled 속성 같은 개별 옵션에 대한 HTML 속성 추가는 기본적으로 지원하지 않습니다.
$form_temps = ["<select name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps = ["<select id=\"{$field}\" name=\"{$field}\" class=\"select-field\"" . (isset($extras['onChange']) ? " onChange=\"{$extras['onChange']}\"" : "") . ">"];
$form_temps[] = "<option value=\"\">" . lang($viewDatas['class_path'] . '.label.' . $item_type) . " 선택</option>";
foreach ($viewDatas['control']['filter_optons'][$item_type] as $key => $filterEntity) {
$disabled = '';

View File

@ -11,4 +11,21 @@ class DomainHelper extends PartHelper
parent::__construct();
$this->setTitleField(field: DomainModel::TITLE);
}
public function getFieldForm(string $field, mixed $value, array $viewDatas, array $extras = []): string
{
if (in_array($viewDatas['control']['action'], ['create', 'modify', 'create_form', 'modify_form'])) {
$extras = (strpos($viewDatas['control']['field_rules'][$field], 'required') !== false) ? ["class" => "form-control", "required" => "", ...$extras] : ["class" => "form-control", ...$extras];
}
switch ($field) {
case 'domain':
$form = form_input($field, "", ["id" => $field, "placeholder" => "예)domain.co.kr", ...$extras]);
$form .= "<div id=\"domain-errors\" style=\"color:red; margin-top:5px;\"></div>";
break;
default:
$form = parent::getFieldForm($field, $value, $viewDatas, $extras);
break;
}
return $form;
} //
}

View File

@ -19,7 +19,7 @@ class UserHelper extends CommonHelper
switch ($field) {
case 'passwd':
case 'confirmpassword':
$form = form_password($field, "", ["autocomplete" => $field, ...$extras]);
$form = form_password($field, "", ["id" => $field, ...$extras]);
break;
default:
$form = parent::getFieldForm($field, $value, $viewDatas, $extras);

View File

@ -1,9 +1,49 @@
<link href="/css/<?= $viewDatas['layout'] ?>/form.css" media="screen" rel="stylesheet" type="text/css" />
<script src="/js/<?= $viewDatas['layout'] ?>/form.js" referrerpolicy="origin"></script>
<script src="/assets/tinymce/tinymce.min.js" referrerpolicy="origin"></script>
<link rel="stylesheet" href="/assets/tagify/dist/tagify.css">
<script src="/assets/tagify/dist/tagify.js"></script>
<?php foreach ($viewDatas['individualStylesheets'] as $css): ?>
<link href="/css/<?= $viewDatas['layout'] ?>/<?= $css ?>" media="screen" rel="stylesheet" type="text/css" />
<?php endforeach ?>
<?php foreach ($viewDatas['individualScripts'] as $js): ?>
<script src="/js/<?= $viewDatas['layout'] ?>/<?= $js ?>" referrerpolicy="origin"></script>
<?php endforeach ?>
<?php endforeach ?>
<script>
const input = document.querySelector('#domain');
const errorBox = document.getElementById('domain-errors');
const tagify = new Tagify(input, {
enforceWhitelist: false, // 자유 입력 허용
whitelist: [], // 자동완성 후보
duplicates: false, // 중복 제거
delimiters: ", ", // 엔터나 콤마로 구분
pattern: /^[a-zA-Z0-9.-]+\.[a-z]{2,}$/ // 기본 도메인 형식
});
// ✅ 입력된 태그가 추가될 때 AJAX 검증
tagify.on('add', async e => {
const domain = e.detail.data.value;
// 서버로 도메인 유효성 검증 요청
const res = await fetch('/admin/equipment/part/domain/validate', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
domain
})
});
const result = await res.json();
if (!result.valid) {
// 유효하지 않으면 해당 태그 제거
tagify.removeTag(domain);
errorBox.innerText = `"${domain}" 은(는) 이미 등록되었거나 유효하지 않습니다.`;
} else {
errorBox.innerText = '';
}
});
</script>

1
public/assets/tagify Submodule

@ -0,0 +1 @@
Subproject commit 3c49093fba26029602a5dc56676af3504e74dd3a