<?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"); ?>