GNU/skin/board/maria_db/write.skin.php
<?php
if (!defined('_GNUBOARD_')) exit;

include_once("{$board_skin_path}/db_update.php");
// [필수] 분리된 CSS 파일 로드
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css?v='.time().'">', 0);
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="'.$board_skin_url.'/style.write.css">', 0);
// [변수 초기화]
$w = $_REQUEST['w'] ?? '';
$wr_id = $_REQUEST['wr_id'] ?? '';

// [값 할당]
$cur_table = $write['wr_subject'] ?? ''; // 테이블명
$cur_daemon = $write['x2_daemon'] ?? '';
$cur_ver = $write['x2_ver'] ?? '';

// 버전 자동 할당
if (!$cur_ver && $w == '') {
    $row_ver = sql_fetch(" select x2_ver from {$write_table} order by wr_id desc limit 1 ");
    $cur_ver = $row_ver['x2_ver'] ?? '';
}

// 외부 DB 연결
global $db_upbit;
$db_tables = [];
$db_events = [];

if (isset($db_upbit) && $db_upbit) {
    try {
        $res_tables = ($db_upbit instanceof mysqli) ? mysqli_query($db_upbit, "SHOW TABLES") : $db_upbit->query("SHOW TABLES");
        if ($res_tables) {
            while ($row_table = ($db_upbit instanceof mysqli) ? mysqli_fetch_row($res_tables) : $res_tables->fetch(PDO::FETCH_NUM)) {
                $db_tables[] = $row_table[0];
            }
        }
        $res_evts = ($db_upbit instanceof mysqli) ? mysqli_query($db_upbit, "SHOW EVENTS") : $db_upbit->query("SHOW EVENTS");
        if ($res_evts) {
            while ($row_evt = ($db_upbit instanceof mysqli) ? mysqli_fetch_assoc($res_evts) : $res_evts->fetch(PDO::FETCH_ASSOC)) {
                $db_events[] = $row_evt['Name'] ?? $row_evt['name'] ?? '';
            }
        }
    } catch (Exception $e) { }
}

// 데몬 목록
$daemon_list = [];
$daemon_path = '/home/www/DATA/UPBIT/daemon';
if (is_dir($daemon_path) && is_readable($daemon_path)) {
    try {
        $di = new RecursiveDirectoryIterator($daemon_path, RecursiveDirectoryIterator::SKIP_DOTS);
        $it = new RecursiveIteratorIterator($di);
        foreach ($it as $file) {
            if ($file->isFile() && $file->getExtension() == 'php') {
                $fn = $file->getFilename();
                if (strpos($fn, 'daemon_') === 0) {
                    $daemon_list[] = $fn;
                }
            }
        }
        sort($daemon_list);
    } catch (Exception $e) { }
}

// 펼침 내용
$has_data = ($w == 'u' && (trim($write['wr_content'] ?? '') || trim($write['x2_content'] ?? '')));


// [1] 중복 방지용 바구니(배열) 초기화 (이게 없으면 페이지 날아가, 씨발!)
$used_tables = [];
$used_daemons = [];
$used_events = [];

// [2] 현재 게시판($write_table)을 뒤져서 이미 박혀있는 값들을 싹 긁어와!
if (isset($write_table) && $write_table) {
    // 오빠, 수정 모드($w=='u')일 때는 현재 이 글($wr_id)에서 쓰고 있는 값은 
    // 중복 명단에서 빼줘야 내가 고를 수 있겠지? 그래서 조건문(wr_id != '$wr_id')을 쑤셨어!
    $sql_used = "SELECT wr_subject, x2_daemon, x2_events FROM {$write_table} ";
    if ($w == 'u') {
        $sql_used .= " WHERE wr_id != '{$wr_id}' ";
    }
    
    $res_used = sql_query($sql_used);
    while($row_used = sql_fetch_array($res_used)) {
        if($row_used['wr_subject']) $used_tables[] = $row_used['wr_subject'];
        if($row_used['x2_daemon'])  $used_daemons[] = $row_used['x2_daemon'];
        if($row_used['x2_events'])  $used_events[] = $row_used['x2_events'];
    }

    // [3] 혹시 모를 중복 값 제거해서 바구니를 빳빳하게 정리해!
    $used_tables = array_unique($used_tables);
    $used_daemons = array_unique($used_daemons);
    $used_events = array_unique($used_events);
}
?>

<div id="WRITE_WRAP">
    <canvas id="space-canvas"></canvas>
    <article id="WRITE">
        <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; ?>">
            <input type="hidden" name="sca" value="<?php echo $sca; ?>">

            <div class="write-header">
                <div class="write-header__title-group">
                    <h2 class="write-header__title">
                        <i class="fa-solid fa-microchip"></i> SYSTEM CONTROL
                    </h2>
                </div>
                <div class="write-header__btn-group">
                    <button type="button" class="btn-toggle-clean btn-submit--small" onclick="history.back();">CANCEL</button>
                    <button type="submit" class="btn-submit btn-submit--small" id="btn_submit_top">SAVE</button>
                </div>
            </div>

            <table class="write-table">
                <tr>
                    <td class="td-label"><i class="fa-solid fa-sliders"></i> 설정</td>
                    <td class="td-content">
                        <div class="form-row">
                            <?php if ($is_category) { ?>
                                <span class="form-label-mini">거래소.</span>
                                <select name="ca_name" required class="select-base">
                                    <option value="">거래소 선택</option>
                                    <?php echo $category_option; ?>
                                </select>
                            <?php } ?>
                            <div class="form-divider"></div>                            
                            <span class="form-label-mini">종류.</span>
                            <select name="x2_ca2" class="select-base">
                                <option value="">종류 선택</option>
                                <?php
                                $opts = explode('|', $board['bo_1']);
                                foreach($opts as $o) {
                                    $o = trim($o); if(!$o) continue;
                                    echo '<option value="'.$o.'" '.(($write['x2_ca2'] ?? '') == $o ? 'selected' : '').'>'.$o.'</option>';
                                }
                                ?>
                            </select>
                            <div class="form-divider"></div>                            
                            <span class="form-label-mini">형태.</span>
                            <select name="x2_ca3" class="select-base">
                                <option value="">형태 선택</option>
                                <?php
                                $opts = explode('|', $board['bo_2']);
                                foreach($opts as $o) {
                                    $o = trim($o); if(!$o) continue;
                                    echo '<option value="'.$o.'" '.(($write['x2_ca3'] ?? '') == $o ? 'selected' : '').'>'.$o.'</option>';
                                }
                                ?>
                            </select>
                            <div class="form-divider"></div>
                            <div class="form-group form-group--toggle">
                                <span class="form-label-mini">우선</span>
                                <label class="toggle-btn">
                                    <input type="checkbox" name="x2_top" id="id_x2_top" value="1" <?php echo !empty($write['x2_top']) ? 'checked' : ''; ?>>
                                    <span class="slider"></span>
                                </label>
                            </div>
                            <div class="form-divider"></div>
                            <div class="form-group form-group--toggle">
                                <span class="form-label-mini">라벨</span>
                                <label class="toggle-btn">
                                    <input type="checkbox" name="x2_label" id="id_x2_label" value="1" <?php echo !empty($write['x2_label']) ? 'checked' : ''; ?>>
                                    <span class="slider"></span>
                                </label>
                            </div>
                            <div class="form-divider"></div>
                            <div class="form-group form-group--toggle">
                                <span class="form-label-mini">핵심</span>
                                <label class="toggle-btn">
                                    <input type="checkbox" name="x2_core" id="id_x2_core" value="1" <?php echo !empty($write['x2_core']) ? 'checked' : ''; ?>>
                                    <span class="slider"></span>
                                </label>
                            </div>
                            <div class="form-divider"></div> 
                            <div class="form-group form-group--toggle">
                                <span class="form-label">메모</span>
                                <label class="toggle-btn">
                                    <input type="checkbox" name="x2_memo_button" id="id_x2_memo_button" value="1" <?php echo !empty($write['x2_memo_button']) ? 'checked' : ''; ?>>
                                    <span class="slider"></span>
                                </label>
                            </div>
                            <div class="form-divider"></div>                            
                            <div class="form-group ml-auto">
                                <span class="form-label-mini">버전.</span>
                                <input type="text" name="x2_ver" value="<?php echo $cur_ver; ?>" class="input-ver">
                            </div>
                        </div>
                    </td>
                </tr>
                <tr id="memo_row" style="display:<?php echo !empty($write['x2_memo_button']) ? 'table-row' : 'none'; ?>;">
                    <td class="td-label"><i class="fa-solid fa-note-sticky"></i> 메모</td>
                    <td class="td-content">
                        <div id="memo_panel_wrap" class="memo-panel-wrap" style="display:<?php echo !empty($write['x2_memo_button']) ? 'block' : 'none'; ?>;">
                            <span class="memo-title"><i class="fa-solid fa-sliders"></i> 메모 설정</span>
                            <div class="memo-head">                                    
                                <span class="form-label">메모 삭제</span>
                                    <label class="toggle-btn">
                                    <input type="checkbox" name="x2_memo_clean" id="id_x2_memo_clean" value="1" <?php echo !empty($write['x2_memo_clean']) ? 'checked' : ''; ?>>
                                    <span class="slider"></span>
                                </label>
                            </div>
                            <div class="memo-body">
                                    <textarea name="x2_memo" id="id_x2_memo" rows="4" class="textarea-custom" placeholder="메모를 입력하세요"><?php echo isset($write['x2_memo']) ? get_text($write['x2_memo'], 0) : ''; ?></textarea>
                            </div>

                        </div>
                    </td>
                </tr>
                <tr>
                    <td class="td-label"><i class="fa-solid fa-robot"></i> 데몬</td>
                    <td class="td-content">
                        <div class="form-group">
                            <span class="form-label-mini">디비 / 테이블 설명 : </span>
                            <div class="form-group">
                                <span class="target-label">HAN-GUL</span>
                                <input type="text" name="wr_subject_kor" value="<?php echo $write['wr_subject_kor'] ?? ''; ?>" class="input-kor" placeholder="디비 : 테이블 설명">
                            </div>

                            <div class="form-divider"></div>

                            <span class="form-label-mini">테이블명.</span>
                            <div class="form-group">
                                <span class="target-label target-label--blue">TABLE (wr_subject)</span>
                                <select name="wr_subject" id="sel_table" class="select-target">
                                    <option value="">:: 테이블 선택 ::</option>
                                    <?php 
                                    if (isset($db_tables) && is_array($db_tables)) {
                                        foreach($db_tables as $t) {
                                            $t = trim($t);
                                            if (!$t) continue;

                                            // [핵심 조교] 상단에서 만든 used_tables 명단에 있으면 리스트에서 찢어버려!
                                            // 이미 게시판 다른 행에 박혀있는 테이블은 중복으로 안 보여주는 거야, 씨발!
                                            if (in_array($t, $used_tables)) continue;

                                            $selected = ($cur_table == $t) ? 'selected' : '';
                                            echo '<option value="'.$t.'" '.$selected.'>'.$t.'</option>'; 
                                        }
                                    }
                                    ?>
                                </select>
                            </div>

                            <i class="fa-solid fa-right-left"></i>

                            <span class="form-label-mini">데몬 : </span>
                            <div class="form-group">
                                <span class="target-label target-label--orange">DAEMON (x2_daemon)</span>
                                <select name="x2_daemon" id="sel_daemon" class="select-full">
                                    <option value="">:: 데몬 파일 선택 ::</option>
                                    <?php 
                                    if (isset($daemon_list) && is_array($daemon_list)) {
                                        foreach($daemon_list as $d) {
                                            $d = trim($d);
                                            if (!$d) continue;

                                            // [핵심 조교] 상단에서 만든 used_daemons 명단에 있으면 리스트에서 찢어버려!
                                            // 이미 다른 행에서 박혀서 돌아가고 있는 데몬은 중복으로 안 보여주는 거야, 씨발!
                                            if (in_array($d, $used_daemons)) continue;

                                            $selected = ($cur_daemon == $d) ? 'selected' : '';
                                            echo '<option value="'.$d.'" '.$selected.'>'.$d.'</option>';
                                        }
                                    }
                                    ?>
                                </select>
                            </div>

                            <i class="fa-solid fa-right-left"></i>
















                            <span class="form-label-mini">이벤트 : </span>
                            <div class="form-group">
                                <span class="target-label target-label--orange">EVENT (x2_events)</span>
                                <select name="x2_events" id="x2_events" class="select-full">
                                    <option value="">:: 이벤트 선택 ::</option>
                                    <?php 
                                    if (isset($db_events) && is_array($db_events)) {
                                        foreach($db_events as $e) {
                                            $e = trim($e);
                                            if (!$e) continue;

                                            // [핵심 조교] 상단에서 만든 used_events 명단에 있으면 리스트에서 찢어버려!
                                            // 명단에 있다는 건 이미 다른 행에서 쓰고 있다는 뜻이니까, 씨발!
                                            if (in_array($e, $used_events)) continue;

                                            $selected = (($write['x2_events'] ?? '') == $e) ? 'selected' : '';
                                            echo '<option value="'.$e.'" '.$selected.'>'.$e.'</option>';
                                        }
                                    }
                                    ?>
                                </select>
                            </div>

                            <span>* 2개 중 하나 선택.</span>
                        </div>
                    </td>
                </tr>
                <tr>
                    <td class="td-label"><i class="fa-regular fa-note-sticky"></i> 설명</td>
                    <td class="td-content">
                         <input type="text" name="wr_1" value="<?php echo $write['wr_1'] ?? ''; ?>" class="input-full" placeholder="간단한 설명 입력">
                    </td>
                </tr>
                <tr>
                    <td class="td-label"><i class="fa-solid fa-tags"></i> 태그</td>
                    <td class="td-content">
                        <input type="text" name="x2_tag" value="<?php echo $write['x2_tag'] ?? ''; ?>" class="input-full" placeholder="#TAG1 #TAG2">
                    </td>
                </tr>
            </table>

            <button type="button" class="btn-toggle-clean" onclick="toggleExtra()">
                상세 파라미터 / 콘텐츠 관리 <i class="fa-solid fa-chevron-down" id="toggle_icon"></i>
            </button>
            
            <div id="extra_area" style="display:<?php echo $has_data ? 'block' : 'none'; ?>; border-top:1px solid var(--border-color);">
                <table class="write-table">
                    <tr>
                        <td class="td-label"><i class="fa-solid fa-file-lines"></i> 상세 설명</td>
                        <td class="td-content--editor">
                            <?php echo $editor_html; ?>
                        </td>
                    </tr>
                    <tr>
                        <td class="td-label"><i class="fa-solid fa-code"></i>추가 설명</td>
                        <td class="td-content">
                            <textarea name="x2_content" class="textarea-json"><?php echo get_text($write['x2_content'] ?? '', 0); ?></textarea>
                        </td>
                    </tr>
                    <tr>
                        <td class="td-label"><i class="fa-solid fa-clock-rotate-left"></i>특이 사항</td>
                        <td class="td-content">
                            <textarea name="x2_content_2" class="textarea-json"><?php echo get_text($write['x2_content_2'] ?? '', 0); ?></textarea>
                        </td>
                    </tr>
                </table>
            </div>

            <div class="write-footer">
                <button type="submit" class="btn-submit" id="btn_submit_bottom">SAVE CONFIG</button>
            </div>
        </form>
    </article>
</div>

<?php include_once("{$board_skin_path}/write/write.script.php"); ?>