GNU/skin/board/maria_daemon/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_event = $write['sel_event'] ?? '';  // 이벤트명
$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;
                }
            }
        }
        $daemon_list = array_unique($daemon_list);
        sort($daemon_list);
    } catch (Exception $e) { }
}

$row_status = sql_fetch(" SELECT @@event_scheduler as status ");
$scheduler_state = isset($row_status['status']) ? strtoupper($row_status['status']) : 'UNKNOWN';
$state_color = ($scheduler_state == 'ON') ? '#00d4ff' : '#ff2d55';
$has_data = ($w == 'u' && (trim($write['wr_content'] ?? '') || trim($write['x2_content'] ?? '')));
?>

<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>
                    <span class="write-header__status-badge" style="color:<?php echo $state_color; ?>; border-color:<?php echo $state_color; ?>; box-shadow:0 0 10px <?php echo $state_color; ?>40;">
                        SCHEDULER : <?php echo $scheduler_state; ?>
                    </span>
                </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">
                            <div class="form-group">
                                <span class="form-label-mini">크론/데몬</span>
                                <label class="toggle-btn">
                                    <input type="checkbox" name="x2_run" value="1" <?php echo (isset($write['x2_run']) && $write['x2_run'] || $w=='') ? 'checked' : ''; ?>>
                                    <span class="slider"></span>
                                </label>
                            </div>
                            
                            <div class="form-divider"></div>

                            <?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" class="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'; ?>;">
                            <div class="memo-panel">
                                <div class="memo-head">
                                    <span class="memo-title"><i class="fa-solid fa-sliders"></i> 메모 설정</span>
                                    <div class="form-group form-group--toggle">
                                        <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>
                                <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>
                        </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--orange">DAEMON (x2_daemon)</span>
                                <select name="x2_daemon" id="sel_daemon" class="select-full">
                                    <option value="">:: 데몬 파일 선택 ::</option>
                                    <?php 
                                    foreach($daemon_list as $d) {
                                        $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--blue">TABLE (wr_subject)</span>
                                <select name="wr_subject" id="sel_table" class="select-target">
                                    <option value="">:: 테이블 선택 ::</option>
                                    <?php 
                                    foreach($db_tables as $t) {
                                        $selected = ($cur_table == $t) ? 'selected' : '';
                                        echo '<option value="'.$t.'" '.$selected.'>'.$t.'</option>'; 
                                    }
                                    ?>
                                </select>
                            </div>
                            <span>* /home/www/DATA/UPBIT/daemon 경로 내의 daemon_*.php 파일만 자동 스캔됩니다.</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>

            <div class="dynamic-result-area">
                <div class="res-item"><span>[STATUS]</span> <b id="res_state">-</b></div>
                <div class="res-item"><span>[TABLE]</span> <b id="res_table">-</b></div>
                <div class="res-item"><span>[EVENT]</span> <b id="res_event">-</b></div>
                <div class="res-item"><span>[EXCHANGE]</span> <b id="res_exchange">-</b></div>
                <div class="res-item"><span>[DAEMON]</span> <b id="res_daemon">-</b></div>
                <div class="ml-auto res-item"><span>[UPDATED]</span> <b id="res_time">-</b></div>
            </div>

            <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">상세 설명</td>
                        <td class="td-content--editor">
                            <?php echo $editor_html; ?>
                        </td>
                    </tr>
                    <tr>
                        <td class="td-label">추가 설명 (JSON)</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">특이 사항 (Log)</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"); ?>