<?php
if (!defined('_GNUBOARD_')) exit;
include_once("{$board_skin_path}/db_update.php");
add_stylesheet('<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">', 0);
add_stylesheet('<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap">', 0);
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.write.css">', 0);
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
// 중분류/소분류 배열 생성 (bo_1, bo_2 활용)
$mid_category_list = explode('|', $board['bo_1']);
$sub_category_list = explode('|', $board['bo_2']);
?>
<section id="bo_w">
<div class="write-container">
<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off">
<input type="hidden" name="w" value="<?php echo $w ?>">
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
<div class="frm_row">
<div class="frm_label">분류 설정</div>
<div class="frm_content" style="display:flex; gap:12px; align-items:center;">
<?php if ($is_category) { ?>
<select name="ca_name" id="ca_name" required class="frm_select" style="width:180px;">
<option value="">대분류 선택</option>
<?php echo $category_option ?>
</select>
<?php } ?>
<select name="as_mid_cat" class="frm_select" style="width:180px;">
<option value="">중분류 선택</option>
<?php foreach($mid_category_list as $m) { if(!trim($m)) continue; ?>
<option value="<?php echo $m; ?>" <?php echo ($write['as_mid_cat'] == $m) ? "selected" : ""; ?>><?php echo $m; ?></option>
<?php } ?>
</select>
<select name="as_sub_cat" class="frm_select" style="width:180px;">
<option value="">소분류 선택</option>
<?php foreach($sub_category_list as $s) { if(!trim($s)) continue; ?>
<option value="<?php echo $s; ?>" <?php echo ($write['as_sub_cat'] == $s) ? "selected" : ""; ?>><?php echo $s; ?></option>
<?php } ?>
</select>
<div style="background:rgba(255,255,255,0.05); padding:8px 15px; border-radius:10px; border:1px solid var(--border-color); margin-left:auto;">
<span style="font-size:0.85rem; color:var(--text-dim);">메모</span>
<label class="switch">
<input type="checkbox" id="memo_toggle" <?php echo $write['as_memo'] ? 'checked' : ''; ?>>
<span class="slider"></span>
</label>
</div>
</div>
</div>
<div id="memo_section" style="display:none;">
<div class="frm_row">
<div class="frm_label">메모 삭제</div>
<div class="frm_content">
<label class="switch">
<input type="checkbox" name="memo_del" value="1">
<span class="slider slider-delete"></span>
</label>
</div>
</div>
<div class="frm_row">
<div class="frm_label">메모 내용</div>
<div class="frm_content">
<textarea name="as_memo" id="as_memo" class="frm_textarea" rows="10"><?php echo $write['as_memo']; ?></textarea>
</div>
</div>
</div>
<div class="frm_row">
<div class="frm_label">제목</div>
<div class="frm_content">
<input type="text" name="wr_subject" value="<?php echo $subject ?>" id="wr_subject" required class="frm_input" placeholder="제목을 입력하십시오.">
</div>
</div>
<div class="frm_row">
<div class="frm_label">추가 항목 설정</div>
<div class="frm_content">
<div id="exfield_container">
<?php
for ($i=1; $i<=20; $i++) {
$v_subj = "wr_{$i}_subj";
$v_val = "wr_{$i}";
$is_active = ($i == 1 || $write[$v_subj] || $write[$v_val]) ? "active" : "";
?>
<div class="exfield-slot <?php echo $is_active; ?>" id="ex_slot_<?php echo $i; ?>">
<div class="ex-item">
<span class="ex-tit">wr_<?php echo $i; ?>_subj (항목명) : </span>
<input type="text" name="wr_<?php echo $i; ?>_subj" value="<?php echo $write[$v_subj]; ?>" class="frm_input" placeholder="항목 / 제목">
<span class="ex-tit ex-tit2">wr_<?php echo $i; ?> (값) : </span>
<input type="text" name="wr_<?php echo $i; ?>" value="<?php echo $write[$v_val]; ?>" class="frm_input frm_input2" placeholder="값 / 코드">
</div>
</div>
<?php } ?>
</div>
<button type="button" class="file-btn-label btn-file-add" onclick="add_exfield_slot();">
<i class="fa-solid fa-plus"></i> 항목 추가하기
</button>
</div>
</div>
<div class="frm_row">
<div class="frm_label">태그</div>
<div class="frm_content">
<input type="text" name="x2_tag" value="<?php echo $write['x2_tag']; ?>" id="x2_tag" class="frm_input" placeholder="태그를 입력 : 구분자 ,">
</div>
</div>
<button type="button" class="btn-toggle-main" id="btn_extra_toggle">
<i class="fa-solid fa-chevron-down"></i> 상세 내용 및 첨부파일 설정 (클릭하여 열기)
</button>
<div id="extra_section" style="display:none;">
<div class="frm_row">
<div class="frm_label">글내용</div>
<div class="frm_content">
<?php echo $editor_html; ?>
</div>
</div>
<div class="frm_row">
<div class="frm_label">추가내용</div>
<div class="frm_content">
<textarea name="as_extra_content" class="frm_textarea" rows="5" placeholder="추가 상세 데이터를 입력하세요."><?php echo $write['as_extra_content']; ?></textarea>
</div>
</div>
<div class="frm_row">
<div class="frm_label">첨부파일</div>
<div class="frm_content" id="file_container">
<?php for ($i=0; $is_file && $i<$file_count; $i++) {
$active_class = ($i == 0 || (isset($file[$i]['file']) && $file[$i]['file'])) ? "active" : "";
?>
<div class="file-slot <?php echo $active_class; ?>" id="f_slot_<?php echo $i; ?>">
<div class="file-custom-wrapper" style="display:flex; align-items:center; margin-bottom:10px;">
<label for="bf_file_<?php echo $i; ?>" class="file-btn-label">파일 선택</label>
<input type="file" name="bf_file[]" id="bf_file_<?php echo $i; ?>" class="file-hidden" onchange="updateFileName(this)" style="display:none;">
<span class="file-name-display" style="color:var(--text-dim); font-size:0.85rem; margin-left:10px;">선택된 파일 없음</span>
<?php if($w == 'u' && isset($file[$i]['file']) && $file[$i]['file']) { ?>
<span style="color:var(--accent-color); font-size:0.8rem; margin-left:10px;">[기존: <?php echo $file[$i]['source']; ?>]</span>
<?php } ?>
</div>
<input type="text" name="bf_content[]" value="<?php echo ($w == 'u') ? $file[$i]['bf_content'] : ''; ?>" class="frm_input" placeholder="파일 설명을 입력하세요.">
</div>
<?php } ?>
<button type="button" class="file-btn-label btn-file-add" onclick="add_file_slot();">+ 파일 슬롯 추가</button>
</div>
</div>
<div class="frm_row">
<div class="frm_label">링크</div>
<div class="frm_content">
<input type="text" name="wr_link1" value="<?php echo $write['wr_link1']; ?>" class="frm_input" placeholder="링크 #1" style="margin-bottom:10px;">
<input type="text" name="wr_link2" value="<?php echo $write['wr_link2']; ?>" class="frm_input" placeholder="링크 #2">
</div>
</div>
</div>
<div class="write-foot">
<a href="<?php echo get_pretty_url($bo_table); ?>" class="btn-back">취소</a>
<button type="submit" id="btn_submit" class="btn-submit">데이터 저장</button>
</div>
</form>
</div>
</section>
<script>
$(function() {
// 메모 토글
const hasMemo = "<?php echo trim($write['as_memo']); ?>";
if(hasMemo || $('#memo_toggle').is(':checked')) $('#memo_section').show();
$('#memo_toggle').on('change', function() {
if($(this).is(':checked')) $('#memo_section').slideDown(250);
else $('#memo_section').slideUp(250);
});
// 상세 섹션 토글
const hasData = <?php echo ($write['wr_content'] || $write['as_extra_content'] || $write['wr_link1'] || (isset($file) && $file[0]['file'])) ? 'true' : 'false'; ?>;
if(hasData) $('#extra_section').show();
$('#btn_extra_toggle').on('click', function() {
$('#extra_section').slideToggle(300);
$(this).find('i').toggleClass('fa-chevron-down fa-chevron-up');
});
});
function add_exfield_slot() {
const $hiddenSlot = $('.exfield-slot:hidden').first();
if ($hiddenSlot.length > 0) $hiddenSlot.css('display', 'flex').hide().fadeIn(250).addClass('active');
}
function updateFileName(obj) {
const fileName = obj.files[0] ? obj.files[0].name : "선택된 파일 없음";
$(obj).parent().find('.file-name-display').text(fileName);
}
function add_file_slot() {
const $hiddenSlot = $('.file-slot:hidden').first();
if ($hiddenSlot.length > 0) $hiddenSlot.slideDown(250).addClass('active');
}
function fwrite_submit(f) {
<?php echo $editor_js; ?>
if(f.memo_del && f.memo_del.checked) f.as_memo.value = '';
document.getElementById("btn_submit").disabled = "disabled";
return true;
}
</script>