Files
dnssash/adm/code_manager/lang_manager.php
T
2026-06-11 18:47:38 +09:00

200 lines
9.7 KiB
PHP

<?php
$sub_menu = '700100';
include_once('./_common.php');
// ... (폼 제출 처리 로직은 변경 없음) ...
$target_table = isset($_REQUEST['target_table']) ? preg_replace('/[^a-z0-9_]/i', '', $_REQUEST['target_table']) : '';
$target_id = isset($_REQUEST['target_id']) ? (int)$_REQUEST['target_id'] : 0;
if (!$target_table || !$target_id) {
alert('잘못된 접근입니다.');
}
if (isset($w) && $w == 'u' && $_SERVER['REQUEST_METHOD'] === 'POST') {
auth_check_menu($auth, $sub_menu, 'w');
check_admin_token();
$lang_code = trim($_POST['lang_code']);
$cl_name = trim($_POST['cl_name']);
$cl_description = trim($_POST['cl_description']);
if (!$lang_code) alert('언어 코드를 선택해주세요.');
if (!$cl_name) alert('이름/값을 입력해주세요.');
$sql = "INSERT INTO {$g5['common_lang_table']}
SET target_table = '{$target_table}',
target_id = '{$target_id}',
lang_code = '{$lang_code}',
cl_name = '{$cl_name}',
cl_description = '{$cl_description}',
updated_at = '".G5_TIME_YMDHIS."',
updated_by = '{$member['mb_id']}'
ON DUPLICATE KEY UPDATE
cl_name = '{$cl_name}',
cl_description = '{$cl_description}',
updated_at = '".G5_TIME_YMDHIS."',
updated_by = '{$member['mb_id']}'";
sql_query($sql);
goto_url("./lang_manager.php?target_table=$target_table&target_id=$target_id");
}
if (isset($mode) && $mode == 'delete') {
auth_check_menu($auth, $sub_menu, 'd');
check_admin_token();
$cl_id = isset($_GET['cl_id']) ? (int)$_GET['cl_id'] : 0;
if (!$cl_id) alert('cl_id 값이 없습니다.');
$sql = "DELETE FROM {$g5['common_lang_table']} WHERE cl_id = '{$cl_id}' AND target_table = '{$target_table}' AND target_id = '{$target_id}'";
sql_query($sql);
goto_url("./lang_manager.php?target_table=$target_table&target_id=$target_id");
}
auth_check_menu($auth, $sub_menu, 'r');
// 💡 [핵심 추가] 이전 페이지로 돌아가기 위한 링크 생성
$back_link = './ui_manager_list.php'; // 기본 돌아가기 링크
if ($target_table == $g5['form_category_table']) {
// 카테고리 다국어 관리였다면, 해당 카테고리가 속한 리소스의 옵션 관리 페이지로 돌아가야 함
$sql_back = "SELECT um_id FROM {$g5['form_category_table']} WHERE fc_id = '{$target_id}'";
$back_row = sql_fetch($sql_back);
if (isset($back_row['um_id'])) {
$back_link = './category_list.php?um_id=' . $back_row['um_id'];
}
}
// UiManager 클래스를 사용하여 사용 가능한 언어 목록 가져오기
$active_languages = ui_manager()->get_data('language_list');
// 현재 관리 대상의 기본 정보(한국어)를 가져옴
$sql = "SELECT cl_name FROM {$g5['common_lang_table']} WHERE target_table = '{$target_table}' AND target_id = '{$target_id}' AND lang_code = 'ko'";
$parent_info = sql_fetch($sql);
$parent_name = isset($parent_info['cl_name']) ? get_text($parent_info['cl_name']) : "ID: {$target_id}";
// 등록된 다국어 목록 조회
$sql = "SELECT * FROM {$g5['common_lang_table']} WHERE target_table = '{$target_table}' AND target_id = '{$target_id}' ORDER BY lang_code";
$result = sql_query($sql);
$lang_list = [];
while ($row = sql_fetch_array($result)) {
$lang_list[] = $row;
}
$lang_list_count = count($lang_list);
$g5['title'] = '다국어 관리';
include_once(G5_ADMIN_PATH . '/admin.head.php');
add_stylesheet('<link rel="stylesheet" href="' . G5_ADMIN_URL . '/code_manager/css/code_manager.css?ver=1.1">', 0);
?>
<div class="local_desc01 local_desc">
<p>
<strong>'<?php echo $parent_name; ?>'</strong> 항목에 대한 다국어 이름과 설명을 관리합니다.<br>
'언어 코드'는 중복하여 등록할 수 없습니다.
</p>
</div>
<section id="code_manager">
<h2 class="h2_frm">다국어 등록/수정</h2>
<form name="flangform" id="flangform" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
<input type="hidden" name="w" value="u">
<input type="hidden" name="target_table" value="<?php echo $target_table; ?>">
<input type="hidden" name="target_id" value="<?php echo $target_id; ?>">
<input type="hidden" name="token" value="<?php echo get_admin_token(); ?>">
<div class="tbl_frm01 tbl_wrap">
<table>
<caption>다국어 정보 추가/수정 폼</caption>
<colgroup>
<col class="grid_4">
<col>
</colgroup>
<tbody>
<tr>
<th scope="row"><label for="lang_code">언어 코드</label></th>
<td>
<select name="lang_code" id="lang_code" required>
<option value="">선택</option>
<?php foreach ($active_languages as $lang_item) : ?>
<option value="<?php echo $lang_item['fc_key']; ?>"><?php echo get_text($lang_item['cl_name']); ?> (<?php echo $lang_item['fc_key']; ?>)</option>
<?php endforeach; ?>
</select>
</td>
</tr>
<tr>
<th scope="row"><label for="cl_name">이름/값</label></th>
<td>
<input type="text" name="cl_name" id="cl_name" required class="required frm_input" size="80">
</td>
</tr>
<tr>
<th scope="row"><label for="cl_description">부가 설명</label></th>
<td>
<textarea name="cl_description" id="cl_description" rows="5"></textarea>
<span class="frm_info">툴팁 등 부가적으로 사용될 설명을 입력합니다. (선택사항)</span>
</td>
</tr>
</tbody>
</table>
</div>
<div class="btn_confirm01 btn_confirm">
<!-- 💡 [핵심 수정] 목록으로 돌아가는 버튼 추가 -->
<a href="<?php echo $back_link; ?>" class="btn_cancel btn">목록으로</a>
<input type="submit" value="저장" class="btn_submit btn" accesskey="s">
</div>
</form>
<!-- 등록된 다국어 목록 테이블 -->
<div class="tbl_head01 tbl_wrap" style="margin-top: 20px;">
<h2 class="h2_frm">등록된 다국어 목록</h2>
<table>
<caption>등록된 다국어 목록</caption>
<thead>
<tr>
<th scope="col" style="width: 100px;">언어 코드</th>
<th scope="col">이름/값</th>
<th scope="col">부가 설명</th>
<th scope="col" style="width: 120px;">관리</th>
</tr>
</thead>
<tbody>
<?php if ($lang_list_count > 0) : ?>
<?php foreach ($lang_list as $lang) : ?>
<tr>
<td class="td_alignc"><?php echo get_text($lang['lang_code']); ?></td>
<td class="td_left"><?php echo get_text($lang['cl_name']); ?></td>
<td class="td_left"><?php echo get_text($lang['cl_description']); ?></td>
<td class="td_mng">
<button type="button" class="btn btn_02 btn_edit_lang"
data-lang_code="<?php echo get_text($lang['lang_code']); ?>"
data-cl_name="<?php echo get_text($lang['cl_name']); ?>"
data-cl_description="<?php echo get_text($lang['cl_description']); ?>">수정</button>
<a href="./lang_manager.php?mode=delete&amp;cl_id=<?php echo $lang['cl_id']; ?>&amp;target_table=<?php echo $target_table; ?>&amp;target_id=<?php echo $target_id; ?>&amp;token=<?php echo get_admin_token(); ?>"
class="btn btn_delete" onclick="return confirm('정말 삭제하시겠습니까?');">삭제</a>
</td>
</tr>
<?php endforeach; ?>
<?php else : ?>
<tr class="empty_table">
<td colspan="4">등록된 다국어 정보가 없습니다.</td>
</tr>
<?php endif; ?>
</tbody>
</table>
</div>
</section>
<script>
document.addEventListener('DOMContentLoaded', function() {
const editLangButtons = document.querySelectorAll('.btn_edit_lang');
const langForm = document.getElementById('flangform');
if (editLangButtons.length > 0 && langForm) {
editLangButtons.forEach(button => {
button.addEventListener('click', function() {
const data = this.dataset;
langForm.lang_code.value = data.lang_code;
langForm.cl_name.value = data.cl_name;
langForm.cl_description.value = data.cl_description;
langForm.scrollIntoView({ behavior: 'smooth' });
});
});
}
});
</script>
<?php
include_once(G5_ADMIN_PATH . '/admin.tail.php');