<?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="'.$board_skin_url.'/style.write.css">', 0);
// 버전 폼 기본값 설정
if (!$write['x2_ver']) {
$row_ver = sql_fetch(" select x2_ver from {$write_table} order by wr_id desc limit 1 ");
$default_ver = $row_ver['x2_ver'];
} else {
$default_ver = $write['x2_ver'];
}
$file_count = (isset($board['bo_upload_count']) && $board['bo_upload_count']) ? $board['bo_upload_count'] : 0;
// 업비트 API 코인 리스트 가져오기
$upbit_coins = [];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.upbit.com/v1/market/all");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$response = curl_exec($ch);
curl_close($ch);
if ($response) {
$data = json_decode($response, true);
if (is_array($data)) {
foreach ($data as $coin) {
if (strpos($coin['market'], 'KRW-') === 0) {
$upbit_coins[] = [
'market' => $coin['market'],
'korean' => $coin['korean_name'],
'symbol' => str_replace('KRW-', '', $coin['market'])
];
}
}
// 가나다순 정렬
array_multisort(array_column($upbit_coins, 'korean'), SORT_ASC, $upbit_coins);
}
}
$is_editor_open = false;
if (trim(strip_tags($write['wr_content']))) $is_editor_open = true;
if (trim($write['wr_link1']) || trim($write['wr_link2'])) $is_editor_open = true;
for ($i=0; $is_file && $i<$file_count; $i++) {
if (isset($file[$i]['file']) && $file[$i]['file']) {
$is_editor_open = true;
break;
}
}
$editor_display = $is_editor_open ? 'display:block;' : 'display:none;';
$is_additional_open = false;
$additional_fields = array(
'x2_sell',
'x2_all_day_1', 'x2_interval',
'x2_all_day_2', 'x2_interval_2',
'x2_all_day_3', 'x2_interval_3', 'x2_down_price',
'x2_all_day_4', 'x2_interval_4',
'x2_all_day_5', 'x2_interval_5',
'x2_all_day_6', 'x2_interval_6', 'x2_profit_ratio',
'x2_all_day_7', 'x2_interval_7', 'x2_loss_ratio',
'x2_all_day_8', 'x2_interval_8', 'x2_profit_ratio_8'
);
foreach ($additional_fields as $af) {
if (!empty($write[$af])) {
$is_additional_open = true;
break;
}
}
?>
<div id="CYBER_LOADER">
<div class="load-text">SYSTEM READY</div>
<div class="load-bar-wrap">
<div class="load-bar"></div>
</div>
</div>
<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; ?>">
<input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>">
<div class="form-header">
<h2><i class="fa-solid fa-terminal"></i> 데이터 입력 시스템</h2>
<div class="form-header-actions">
<button type="button" class="btn-action" onclick="window.history.back();">취소</button>
<button type="submit" class="btn-action btn-save-top">저장하기</button>
</div>
</div>
<table class="write-table">
<tr>
<td class="td-label"><i class="fa-solid fa-sliders"></i> 상세 설정 : 세팅
<span class="help-tip" data-tip="기본 설정 시간단위로 하루 1회 매수"><i class="fa-solid fa-circle-question"></i></span>
</td>
<td class="td-content">
<div class="row-wrap row-gap-10">
<?php if ($is_category) { ?>
<select name="ca_name" required onchange="updateLiveDisplay()">
<option value="">카테고리 선택</option>
<?php echo $category_option; ?>
</select>
<?php } ?>
<select name="x2_ca2" onchange="updateLiveDisplay()">
<option value="">형태 선택</option>
<?php
$bo_1_opts = explode("|", $board['bo_1']);
foreach($bo_1_opts as $val) {
$val = trim($val); if(!$val) continue;
echo "<option value='$val' ".($write['x2_ca2']==$val?"selected":"").">$val</option>";
}
?>
</select>
<select name="x2_ca3" onchange="updateLiveDisplay()">
<option value="">기간 선택</option>
<?php
$bo_2_opts = explode("|", $board['bo_2']);
foreach($bo_2_opts as $val) {
$val = trim($val); if(!$val) continue;
echo "<option value='$val' ".($write['x2_ca3']==$val?"selected":"").">$val</option>";
}
?>
</select>
<div class="row-center month-repeat-wrap">
<input type="checkbox" name="x2_month" id="x2_month" value="*" class="chk-box" <?php echo ($write['x2_month'] == '*') ? "checked" : ""; ?> onchange="updateLiveDisplay()">
<label for="x2_month" class="chk-label">매월 반복</label>
</div>
<select name="x2_day" class="sel-unit" onchange="updateLiveDisplay()">
<option value="">일</option>
<?php for($i=1; $i<=31; $i++) { ?>
<option value="<?php echo $i; ?>" <?php echo ($write['x2_day'] == $i) ? "selected" : ""; ?>><?php echo $i; ?>일</option>
<?php } ?>
</select>
<select name="x2_week" class="sel-unit" onchange="updateLiveDisplay()">
<option value="">요일</option>
<?php
$yoils = array("일", "월", "화", "수", "목", "금", "토");
foreach($yoils as $num => $y) {
$selected = (isset($write['x2_week']) && $write['x2_week'] !== '' && ctype_digit((string)$write['x2_week']) && (int)$write['x2_week'] === $num) ? "selected" : "";
echo "<option value='$num' $selected>$y</option>";
}
?>
</select>
<span class="label-neon-sm">시</span>
<select name="x2_hour" class="sel-unit" onchange="updateLiveDisplay()">
<option value="">-</option>
<?php for($i=0; $i<=23; $i++) { ?>
<option value="<?php echo $i; ?>" <?php echo ($write['x2_hour'] == $i && $write['x2_hour'] !== '') ? "selected" : ""; ?>><?php echo $i; ?>시</option>
<?php } ?>
</select>
<span class="label-neon-sm">분</span>
<select name="x2_min" class="sel-unit" onchange="updateLiveDisplay()">
<option value="">-</option>
<?php
$min_arr = array(0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55);
foreach($min_arr as $m) { ?>
<option value="<?php echo $m; ?>" <?php echo ($write['x2_min'] == $m && $write['x2_min'] !== '') ? "selected" : ""; ?>><?php echo $m; ?>분</option>
<?php } ?>
</select>
<span class="label-neon-sm ml-10">코인명</span>
<select name="x2_coin" required onchange="updateLiveDisplay()">
<option value=''>코인 선택</option>
<?php
foreach($upbit_coins as $coin) {
$selected = ($write['x2_coin'] == $coin['market']) ? "selected" : "";
echo "<option value='{$coin['market']}' {$selected}>{$coin['korean']} ({$coin['symbol']})</option>";
}
?>
</select>
<span class="label-neon-sm ml-10">버전</span>
<input type="text" name="x2_ver" value="<?php echo $default_ver; ?>" size="6" placeholder="Ver." class="input-ver" oninput="updateLiveDisplay()">
<div class="run-toggle-wrap">
<span class="toggle-label toggle-stop">중지</span>
<label class="toggle-switch">
<input type="checkbox" name="x2_run" value="1" <?php echo ($write['x2_run']) ? "checked" : ""; ?> onchange="updateLiveDisplay()">
<span class="slider"></span>
</label>
<span class="toggle-label toggle-run">실행</span>
</div>
</div>
<div class="live-status-bar" id="LIVE_DISPLAY">
대기 중...
</div>
</td>
</tr>
<tr>
<td colspan="2" class="editor-toggle-cell">
<button type="button" class="btn-action btn-editor-toggle btn-option-pack" id="btnOptionPack" data-open="<?php echo $is_additional_open ? '1' : '0'; ?>">추가 옵션 팩키지 설정</button>
</td>
</tr>
<tr class="additional-option-row">
<td colspan="2">
<!-- 옵션 팩키지 테이블 -->
<table class="target_table">
<tr class="table_title">
<td colspan="2">
<div>매수</div>
<div>
<span class="">매수</span>
<label class="toggle-switch">
<input type="checkbox" name="x2_sell" value="1" <?php echo (!empty($write['x2_sell'])) ? "checked" : ""; ?> onchange="updateLiveDisplay()">
<span class="slider"></span>
</label>
<span>매도</span>
</div>
<div>매도</div>
</td>
</tr>
<tr>
<td>
<ul>
<li class="target_name"><i class="fa-solid fa-stamp"></i> NO . 01 : 기본 간격</li>
<li class="target_tip"><span class="help-tip" data-tip="매매시간 단위로 매수"><i class="fa-solid fa-circle-question"></i></span></li>
<li class="target_run">
<span class="toggle-label toggle-stop">OFF</span>
<label class="toggle-switch">
<input type="checkbox" name="x2_all_day_1" value="1" <?php echo ($write['x2_all_day_1']) ? "checked" : ""; ?> onchange="setExclusiveAllDay(this)">
<span class="slider"></span>
</label>
<span class="toggle-label toggle-run">ON</span>
</li>
<li class="target_option">
<span class="label-neon-md">간격</span>
<input type="text" name="x2_interval" value="<?php echo $write['x2_interval']; ?>" class="input-w80-center" placeholder="0" oninput="updateLiveDisplay()">
<span class="text-dim-md">분</span>
</li>
</ul>
</td>
<td>
<ul>
<li class="target_name"><i class="fa-solid fa-stamp"></i> NO . 05 : 수익 구간</li>
<li class="target_tip"><span class="help-tip" data-tip="자산평가 수익일 경우 매매시간 단위로 매도"><i class="fa-solid fa-circle-question"></i></span></li>
<li class="target_run">
<span class="toggle-label toggle-stop">OFF</span>
<label class="toggle-switch">
<input type="checkbox" name="x2_all_day_5" value="1" <?php echo ($write['x2_all_day_5']) ? "checked" : ""; ?> onchange="setExclusiveAllDay(this)">
<span class="slider"></span>
</label>
<span class="toggle-label toggle-run">ON</span>
</li>
<li class="target_option">
<span class="label-neon-md">간격</span>
<input type="text" name="x2_interval_5" value="<?php echo $write['x2_interval_5']; ?>" class="input-w80-center" placeholder="0" oninput="updateLiveDisplay()">
<span class="text-dim-md">분</span>
</li>
</ul>
</td>
</tr>
<tr>
<td>
<ul>
<li class="target_name"><i class="fa-solid fa-stamp"></i> NO . 02 : 하락 장</li>
<li class="target_tip"><span class="help-tip" data-tip="전일종가/오늘시가 이하일 때 매매시간 단위로 매수"><i class="fa-solid fa-circle-question"></i></span></li>
<li class="target_run">
<span class="toggle-label toggle-stop">OFF</span>
<label class="toggle-switch">
<input type="checkbox" name="x2_all_day_2" value="1" <?php echo ($write['x2_all_day_2']) ? "checked" : ""; ?> onchange="setExclusiveAllDay(this)">
<span class="slider"></span>
</label>
<span class="toggle-label toggle-run">ON</span>
</li>
<li class="target_option">
<span class="label-neon-md">간격</span>
<input type="text" name="x2_interval_2" value="<?php echo $write['x2_interval_2']; ?>" class="input-w80-center" placeholder="0" oninput="updateLiveDisplay()">
<span class="text-dim-md">분</span>
</li>
</ul>
</td>
<td>
<ul>
<li class="target_name"><i class="fa-solid fa-stamp"></i> NO . 06 : 수익 비율</li>
<li class="target_tip"><span class="help-tip" data-tip="자산평가 수익일 수익률 이상에서 매매시간 단위로 매도"><i class="fa-solid fa-circle-question"></i></span></li>
<li class="target_run">
<span class="toggle-label toggle-stop">OFF</span>
<label class="toggle-switch">
<input type="checkbox" name="x2_all_day_6" value="1" <?php echo ($write['x2_all_day_6']) ? "checked" : ""; ?> onchange="setExclusiveAllDay(this)">
<span class="slider"></span>
</label>
<span class="toggle-label toggle-run">ON</span>
</li>
<li class="target_option">
<span class="label-neon-md">간격</span>
<input type="text" name="x2_interval_6" value="<?php echo $write['x2_interval_6']; ?>" class="input-w80-center" placeholder="0" oninput="updateLiveDisplay()">
<span class="text-dim-md">분</span>
</li>
<li class="target_option">
<span class="label-neon-md">수익율</span>
<input type="text" name="x2_profit_ratio" value="<?php echo $write['x2_profit_ratio']; ?>" class="input-w120-right" placeholder="수익비율" oninput="updateLiveDisplay()">
<span class="text-dim-md">%</span>
</li>
</ul>
</td>
</tr>
<tr>
<td>
<ul>
<li class="target_name"><i class="fa-solid fa-stamp"></i> NO . 03 : 지정금액</li>
<li class="target_tip"><span class="help-tip" data-tip="기준가격 이하일 때 매매시간 단위로 매수"><i class="fa-solid fa-circle-question"></i></span></li>
<li class="target_run">
<span class="toggle-label toggle-stop">OFF</span>
<label class="toggle-switch">
<input type="checkbox" name="x2_all_day_3" value="1" <?php echo ($write['x2_all_day_3']) ? "checked" : ""; ?> onchange="setExclusiveAllDay(this)">
<span class="slider"></span>
</label>
<span class="toggle-label toggle-run">ON</span>
</li>
<li class="target_option">
<span class="label-neon-md">간격</span>
<input type="text" name="x2_interval_3" value="<?php echo $write['x2_interval_3']; ?>" class="input-w80-center" placeholder="0" oninput="updateLiveDisplay()">
<span class="text-dim-md">분</span>
</li>
<li class="target_option">
<span class="label-neon-md">지정금</span>
<input type="text" name="x2_down_price" value="<?php echo $write['x2_down_price']; ?>" class="input-w120-right" placeholder="코인가격" oninput="updateLiveDisplay()">
<span class="text-dim-md">원</span>
</li>
</ul>
</td>
<td>
<ul>
<li class="target_name"><i class="fa-solid fa-stamp"></i> NO . 08 : 수익 매도 비중</li>
<li class="target_tip"><span class="help-tip" data-tip="자산평가 특정 수익률 이상에서 보유금의 특정 비율을 매도시간 단위로 매도"><i class="fa-solid fa-circle-question"></i></span></li>
<li class="target_run">
<span class="toggle-label toggle-stop">OFF</span>
<label class="toggle-switch">
<input type="checkbox" name="x2_all_day_8" value="1" <?php echo ($write['x2_all_day_8']) ? "checked" : ""; ?> onchange="setExclusiveAllDay(this)">
<span class="slider"></span>
</label>
<span class="toggle-label toggle-run">ON</span>
</li>
<li class="target_option">
<span class="label-neon-md">간격</span>
<input type="text" name="x2_interval_8" value="<?php echo $write['x2_interval_8']; ?>" class="input-w80-center" placeholder="0" oninput="updateLiveDisplay()">
<span class="text-dim-md">분</span>
</li>
<li class="target_option">
<span class="label-neon-md">수익율</span>
<input type="text" name="x2_profit_ratio_8" value="<?php echo $write['x2_profit_ratio_8']; ?>" class="input-w120-right" placeholder="수익비율" oninput="updateLiveDisplay()">
<span class="text-dim-md">%</span>
</li>
<li class="target_option">
<span class="label-neon-md">매도율</span>
<input type="text" name="x2_sell_ratio" value="<?php echo $write['x2_sell_ratio']; ?>" class="input-w120-right" placeholder="매도비율" oninput="updateLiveDisplay()">
<span class="text-dim-md">%</span>
</li>
</ul>
</td>
</tr>
<tr>
<td>
<ul>
<li class="target_name"><i class="fa-solid fa-stamp"></i> NO . 04 : 손실</li>
<li class="target_tip"><span class="help-tip" data-tip="종목 별 평가 손실일 경우 매매시간 단위로 매수"><i class="fa-solid fa-circle-question"></i></span></li>
<li class="target_run">
<span class="toggle-label toggle-stop">OFF</span>
<label class="toggle-switch">
<input type="checkbox" name="x2_all_day_4" value="1" <?php echo ($write['x2_all_day_4']) ? "checked" : ""; ?> onchange="setExclusiveAllDay(this)">
<span class="slider"></span>
</label>
<span class="toggle-label toggle-run">ON</span>
</li>
<li class="target_option">
<span class="label-neon-md">간격</span>
<input type="text" name="x2_interval_4" value="<?php echo $write['x2_interval_4']; ?>" class="input-w80-center" placeholder="0" oninput="updateLiveDisplay()">
<span class="text-dim-md">분</span>
</li>
</ul>
</td>
<td>
</td>
</tr>
<tr>
<td>
<ul>
<li class="target_name"><i class="fa-solid fa-stamp"></i> NO . 07 : 손실 비율</li>
<li class="target_tip"><span class="help-tip" data-tip="종목 별 평가 손실일 손실률 이상에서 매매시간 단위로 매수"><i class="fa-solid fa-circle-question"></i></span></li>
<li class="target_run">
<span class="toggle-label toggle-stop">OFF</span>
<label class="toggle-switch">
<input type="checkbox" name="x2_all_day_7" value="1" <?php echo ($write['x2_all_day_7']) ? "checked" : ""; ?> onchange="setExclusiveAllDay(this)">
<span class="slider"></span>
</label>
<span class="toggle-label toggle-run">ON</span>
</li>
<li class="target_option">
<span class="label-neon-md">간격</span>
<input type="text" name="x2_interval_7" value="<?php echo $write['x2_interval_7']; ?>" class="input-w80-center" placeholder="0" oninput="updateLiveDisplay()">
<span class="text-dim-md">분</span>
</li>
<li class="target_option">
<span class="label-neon-md">손실율</span>
<input type="text" name="x2_loss_ratio" value="<?php echo $write['x2_loss_ratio']; ?>" class="input-w120-right" placeholder="손실 비율" oninput="updateLiveDisplay()">
<span class="text-dim-md">%</span>
</li>
</ul>
</td>
<td>
</td>
</tr>
</table>
<!-- / 옵션 팩키지 테이블 -->
</td>
</tr>
<tr>
<td class="td-label td-no-border"><i class="fa-solid fa-pen"></i> 매수 금액
<span class="help-tip" data-tip="매수 금액 : 최소급액 5001 / 타격금액 자동연산 금액 : 첫 등록시 매수 단위와 동일하게 등록"><i class="fa-solid fa-circle-question"></i></span>
</td>
<td class="td-content td-no-border">
<span class="row-gap-15">
<span class="label-neon-md">타격 금액</span>
<input type="text" name="wr_subject" value="<?php echo $subject; ?>" required class="input-subject ml-10" placeholder="0" oninput="updateAmountHint()">
<span class="text-dim-md">원</span>
<span id="subject_live_msg" class="subject-live-msg"></span>
</span>
<span class="row-gap-15 ml-50">
<span class="label-neon-md">매수금 단위</span>
<input type="text" name="wr_subject_basic" value="<?php echo $write['wr_subject_basic']; ?>" class="input-subject ml-10" placeholder="기본 매수 단위 입력" oninput="updateAmountHint()">
<span class="text-dim-md">원</span>
<span id="subject_basic_live_msg" class="subject-live-msg"></span>
</span>
<span class="row-gap-15 ml-50">
<span class="label-neon-md">매도금 단위</span>
<input type="text" name="wr_subject_basic_2" value="<?php echo $write['wr_subject_basic_2']; ?>" class="input-subject ml-10" placeholder="기본 매도 단위 입력" oninput="updateAmountHint()">
<span class="text-dim-md">원</span>
<span id="subject_basic_2_live_msg" class="subject-live-msg"></span>
</span>
</td>
</tr>
<tr>
<td class="td-label td-no-border"><i class="fa-solid fa-tag"></i> 태그</td>
<td class="td-content td-content-tag td-no-border">
<div class="tag-input-wrap">
<span class="tag-title">간략설명</span>
<input type="text" name="x2_help_text" value="<?php echo $write['x2_help_text']; ?>" style="width: 300px;" placeholder="간략설명">
<span class="tag-title"># 태그</span>
<input type="text" name="x2_tag" value="<?php echo $write['x2_tag']; ?>" class="input-tag" placeholder="쉼표로 구분하여 입력">
</div>
</td>
</tr>
<tr>
<td colspan="2" class="editor-toggle-cell">
<button type="button" class="btn-action btn-editor-toggle" onclick="$('#Editor-Area').slideToggle(300);">추가 데이터 및 상세내용 작성</button>
</td>
</tr>
</table>
<div id="Editor-Area" style="<?php echo $editor_display; ?>">
<div class="editor-link-box">
<h3 class="editor-title editor-title-link"><i class="fa-solid fa-link"></i> 외부 링크 리소스</h3>
<div class="link-grid">
<div class="row-center row-gap-12">
<span class="link-label">링크 01</span>
<input type="text" name="wr_link1" value="<?php echo $write['wr_link1']; ?>" class="input-flex" placeholder="https://...">
</div>
<div class="row-center row-gap-12">
<span class="link-label">링크 02</span>
<input type="text" name="wr_link2" value="<?php echo $write['wr_link2']; ?>" class="input-flex" placeholder="https://...">
</div>
</div>
</div>
<div class="editor-body-wrap">
<?php echo $editor_html; ?>
</div>
<div class="editor-files-wrap">
<h3 class="editor-title editor-title-files"><i class="fa-solid fa-file-arrow-up"></i> 첨부 파일 데이터</h3>
<div id="variableFiles">
<?php for ($i=0; $is_file && $i<$file_count; $i++) {
$is_active = ($i == 0 || (isset($file[$i]['file']) && $file[$i]['file'])) ? "active" : "";
?>
<div class="file-row <?php echo $is_active; ?>" id="file_row_<?php echo $i; ?>">
<label for="bf_file_<?php echo $i; ?>" class="file-picker-label">[파일_0<?php echo $i+1; ?>]</label>
<input type="file" name="bf_file[<?php echo $i; ?>]" id="bf_file_<?php echo $i; ?>" class="hidden-file-input" onchange="updateFileName(this, <?php echo $i; ?>)">
<span id="file_name_<?php echo $i; ?>" class="file-name-text">
<?php if($w == 'u' && isset($file[$i]['file']) && $file[$i]['file']) {
echo $file[$i]['source'];
echo " <label class='file-delete-label'><input type='checkbox' name='bf_file_del[$i]' value='1'> 삭제</label>";
} else { echo "파일이 선택되지 않음"; } ?>
</span>
<?php if ($board['bo_use_file_content']) { ?>
<input type="text" name="bf_content[<?php echo $i; ?>]" value="<?php echo ($w == 'u') ? stripslashes($file[$i]['bf_content']) : ''; ?>" class="file-content-input" placeholder="파일 설명 입력">
<?php } ?>
</div>
<?php } ?>
</div>
<button type="button" class="btn-action btn-file-add" onclick="file_add();">+ 파일 슬롯 추가</button>
</div>
</div>
<div class="submit-footer">
<button type="submit" class="btn-save-main" id="btn_submit">데이터베이스 저장하기</button>
</div>
</form>
</article>
</div>
<?php include_once($board_skin_path.'/write/write.script.php'); ?>