<?php
if (!defined('_GNUBOARD_')) exit;
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.view.css">', 0);
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
if (!function_exists('x2_base64url_encode')) {
function x2_base64url_encode($data)
{
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
}
if (!function_exists('x2_jwt_hs256')) {
function x2_jwt_hs256(array $payload, $secret)
{
$header = ['alg' => 'HS256', 'typ' => 'JWT'];
$h = x2_base64url_encode(json_encode($header));
$p = x2_base64url_encode(json_encode($payload));
$s = hash_hmac('sha256', $h.'.'.$p, $secret, true);
return $h.'.'.$p.'.'.x2_base64url_encode($s);
}
}
if (!function_exists('x2_http_get_json')) {
function x2_http_get_json($url, array $headers = [])
{
if (!function_exists('curl_init')) {
return null;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_TIMEOUT, 8);
if (!empty($headers)) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($response === false || $http_code < 200 || $http_code >= 300) {
return null;
}
$decoded = json_decode($response, true);
return is_array($decoded) ? $decoded : null;
}
}
if (!function_exists('x2_to_float')) {
function x2_to_float($value)
{
$clean = preg_replace('/[^0-9.\-]/', '', (string)$value);
return ($clean === '' || $clean === '-' || $clean === '.') ? 0.0 : (float)$clean;
}
}
if (!function_exists('x2_fetch_upbit_current_asset')) {
function x2_fetch_upbit_current_asset()
{
$key_candidates = [
'/home/www/DB/key_upbit_trade.php',
isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'].'/DB/key_upbit_trade.php' : ''
];
$UPBIT_ACCESS_KEY = '';
$UPBIT_SECRET_KEY = '';
foreach ($key_candidates as $key_path) {
if ($key_path && file_exists($key_path)) {
include $key_path;
if (!empty($UPBIT_ACCESS_KEY) && !empty($UPBIT_SECRET_KEY)) {
break;
}
}
}
if (empty($UPBIT_ACCESS_KEY) || empty($UPBIT_SECRET_KEY)) {
return 0.0;
}
$payload = [
'access_key' => $UPBIT_ACCESS_KEY,
'nonce' => md5(uniqid('', true))
];
$jwt = x2_jwt_hs256($payload, $UPBIT_SECRET_KEY);
$accounts = x2_http_get_json('https://api.upbit.com/v1/accounts', ['Authorization: Bearer '.$jwt]);
if (!is_array($accounts)) {
return 0.0;
}
$total = 0.0;
$need_markets = [];
$holding_map = [];
$avg_map = [];
foreach ($accounts as $account) {
$currency = strtoupper($account['currency'] ?? '');
$balance = (float)($account['balance'] ?? 0);
$locked = (float)($account['locked'] ?? 0);
$amount = $balance + $locked;
if ($amount <= 0) {
continue;
}
if ($currency === 'KRW') {
$total += $amount;
continue;
}
$market = 'KRW-'.$currency;
$holding_map[$market] = $amount;
$avg_map[$market] = (float)($account['avg_buy_price'] ?? 0);
$need_markets[] = $market;
}
if (!empty($need_markets)) {
$price_map = [];
$need_markets = array_values(array_unique($need_markets));
$chunks = array_chunk($need_markets, 100);
foreach ($chunks as $markets) {
$url = 'https://api.upbit.com/v1/ticker?markets='.urlencode(implode(',', $markets));
$ticker_rows = x2_http_get_json($url);
if (!is_array($ticker_rows)) {
continue;
}
foreach ($ticker_rows as $ticker_row) {
$market = $ticker_row['market'] ?? '';
$trade_price = (float)($ticker_row['trade_price'] ?? 0);
if ($market !== '' && $trade_price > 0) {
$price_map[$market] = $trade_price;
}
}
}
foreach ($holding_map as $market => $quantity) {
$market_price = isset($price_map[$market]) ? (float)$price_map[$market] : 0;
if ($market_price <= 0 && isset($avg_map[$market])) {
$market_price = (float)$avg_map[$market];
}
$total += $quantity * $market_price;
}
}
return $total;
}
}
$view_content = get_view_thumbnail($view['content']);
$x2_txt_raw = isset($view['x2_txt']) ? $view['x2_txt'] : '';
$code_filename = $bo_table.'-'.$view['wr_id'].'.php';
$content_text = trim(strip_tags($view_content));
$has_images = false;
$has_files = false;
$has_links = false;
if (!empty($view['file']['count'])) {
for ($i = 0; $i < count($view['file']); $i++) {
if (!isset($view['file'][$i]['source'])) continue;
if (isset($view['file'][$i]['view']) && $view['file'][$i]['view']) {
$has_images = true;
} else {
$has_files = true;
}
}
}
for ($i = 1; $i <= (int)count($view['link']); $i++) {
if (!empty($view['link'][$i])) {
$has_links = true;
break;
}
}
$has_content = ($has_images || $content_text !== '');
$memo_text = isset($view['x2_memo']) ? trim($view['x2_memo']) : '';
$memo_clean = isset($view['x2_memo_clean']) && $view['x2_memo_clean'] === '1';
$tag_source = isset($view['wr_1']) ? $view['wr_1'] : '';
$tag_items = array_filter(array_map('trim', explode(',', $tag_source)));
$trade_item_source = isset($view['x2_trade_item']) ? $view['x2_trade_item'] : '';
$trade_items = array_values(array_filter(array_map('trim', explode(',', $trade_item_source))));
$make_search_href = function($field, $value) use ($bo_table) {
return G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&sfl='.$field.'&stx='.urlencode($value);
};
$format_thousand = function($value) {
$raw = trim((string)$value);
if ($raw === '') return '';
$normalized = str_replace(',', '', $raw);
if (!preg_match('/^-?\d+(\.\d+)?$/', $normalized)) return $raw;
$negative = '';
if (strpos($normalized, '-') === 0) {
$negative = '-';
$normalized = substr($normalized, 1);
}
$parts = explode('.', $normalized, 2);
$int_part = isset($parts[0]) ? $parts[0] : '0';
$dec_part = isset($parts[1]) ? $parts[1] : '';
$formatted = number_format((int)$int_part);
if ($dec_part !== '') {
$formatted .= '.'.$dec_part;
}
return $negative.$formatted;
};
$x2_base_amount_raw = isset($view['x2_base_amount']) ? trim($view['x2_base_amount']) : '';
$x2_target_amount_raw = isset($view['x2_target_amount']) ? trim($view['x2_target_amount']) : '';
$x2_target_type_raw = isset($view['x2_target_type']) ? trim($view['x2_target_type']) : '';
$x2_unit_base_raw = isset($view['x2_unit_base']) ? trim($view['x2_unit_base']) : '';
$x2_unit_add_raw = isset($view['x2_unit_add']) ? trim($view['x2_unit_add']) : '';
$x2_unit_max_raw = isset($view['x2_unit_max']) ? trim($view['x2_unit_max']) : '';
$x2_current_asset_raw = isset($view['x2_current_asset']) ? trim($view['x2_current_asset']) : '';
$x2_profit_amount_raw = isset($view['x2_profit_amount']) ? trim($view['x2_profit_amount']) : '';
$x2_profit_rate_raw = isset($view['x2_profit_rate']) ? trim($view['x2_profit_rate']) : '';
$x2_reach_rate_raw = isset($view['x2_reach_rate']) ? trim($view['x2_reach_rate']) : '';
$x2_base_increase_rate_raw = isset($view['x2_base_increase_rate']) ? trim($view['x2_base_increase_rate']) : '';
$x2_max_increase_rate_raw = isset($view['x2_max_increase_rate']) ? trim($view['x2_max_increase_rate']) : '';
$x2_base_amount_num = x2_to_float($x2_base_amount_raw);
$x2_target_amount_num = x2_to_float($x2_target_amount_raw);
$x2_unit_base_num = x2_to_float($x2_unit_base_raw);
$x2_unit_add_num = x2_to_float($x2_unit_add_raw);
$x2_unit_max_num = x2_to_float($x2_unit_max_raw);
$x2_current_asset_num = ($x2_current_asset_raw !== '') ? x2_to_float($x2_current_asset_raw) : x2_fetch_upbit_current_asset();
$x2_current_asset_value = ($x2_current_asset_raw !== '') ? $x2_current_asset_raw : number_format($x2_current_asset_num, 0, '.', ',');
$x2_profit_amount_num = $x2_current_asset_num - $x2_base_amount_num;
$x2_profit_amount_value = ($x2_profit_amount_raw !== '') ? $x2_profit_amount_raw : number_format($x2_profit_amount_num, 0, '.', ',');
$x2_profit_rate_num = ($x2_base_amount_num != 0.0) ? (($x2_profit_amount_num / $x2_base_amount_num) * 100) : 0.0;
$x2_profit_rate_value = ($x2_profit_rate_raw !== '') ? $x2_profit_rate_raw : number_format($x2_profit_rate_num, 2, '.', '');
$x2_reach_rate_num = 0.0;
if (($x2_target_amount_num - $x2_base_amount_num) != 0.0) {
$x2_reach_rate_num = (($x2_current_asset_num - $x2_base_amount_num) / ($x2_target_amount_num - $x2_base_amount_num)) * 100;
}
$x2_reach_rate_value = ($x2_reach_rate_raw !== '') ? $x2_reach_rate_raw : number_format($x2_reach_rate_num, 2, '.', '');
$x2_base_increase_rate_num = ($x2_unit_base_num != 0.0) ? ((($x2_unit_add_num - $x2_unit_base_num) / $x2_unit_base_num) * 100) : 0.0;
$x2_base_increase_rate_value = ($x2_base_increase_rate_raw !== '') ? $x2_base_increase_rate_raw : number_format($x2_base_increase_rate_num, 2, '.', '');
$x2_max_increase_rate_num = ($x2_unit_base_num != 0.0) ? ((($x2_unit_max_num - $x2_unit_base_num) / $x2_unit_base_num) * 100) : 0.0;
$x2_max_increase_rate_value = ($x2_max_increase_rate_raw !== '') ? $x2_max_increase_rate_raw : number_format($x2_max_increase_rate_num, 2, '.', '');
$x2_current_asset_view = $x2_current_asset_value !== '' ? $format_thousand($x2_current_asset_value) : '-';
$x2_profit_amount_view = $x2_profit_amount_value !== '' ? $format_thousand($x2_profit_amount_value) : '-';
$x2_profit_rate_view = $x2_profit_rate_value !== '' ? $format_thousand($x2_profit_rate_value).'%' : '-';
$x2_reach_rate_view = $x2_reach_rate_value !== '' ? $format_thousand($x2_reach_rate_value).'%' : '-';
$x2_base_increase_rate_view = $x2_base_increase_rate_value !== '' ? $format_thousand($x2_base_increase_rate_value).'%' : '-';
$x2_max_increase_rate_view = $x2_max_increase_rate_value !== '' ? $format_thousand($x2_max_increase_rate_value).'%' : '-';
$x2_progress_done = !empty($view['x2_run']) && (string)$view['x2_run'] === '1';
$x2_progress_text = $x2_progress_done ? '완료' : '진행';
$x2_progress_class = $x2_progress_done ? 'value-status-done' : 'value-status-progress';
$x2_reach_rate_class = ($x2_current_asset_num < $x2_base_amount_num) ? 'value-red' : 'value-green';
$x2_live_current = ($x2_current_asset_raw === '');
$x2_live_profit = ($x2_profit_amount_raw === '');
$x2_live_profit_rate = ($x2_profit_rate_raw === '');
$x2_live_reach_rate = ($x2_reach_rate_raw === '');
$x2_base_amount_view = $x2_base_amount_raw !== '' ? $format_thousand($x2_base_amount_raw) : '-';
$x2_target_amount_view = $x2_target_amount_raw !== '' ? $format_thousand($x2_target_amount_raw) : '-';
$x2_target_type_view = $x2_target_type_raw !== '' ? get_text($x2_target_type_raw) : '-';
$x2_unit_base_view = $x2_unit_base_raw !== '' ? $format_thousand($x2_unit_base_raw) : '-';
$x2_unit_add_view = $x2_unit_add_raw !== '' ? $format_thousand($x2_unit_add_raw) : '-';
$x2_unit_max_view = $x2_unit_max_raw !== '' ? $format_thousand($x2_unit_max_raw) : '-';
$same_category_href = G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&sca='.urlencode(isset($view['ca_name']) ? $view['ca_name'] : '');
$same_ca2_href = G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&s_ca2='.urlencode(isset($view['x2_ca2']) ? $view['x2_ca2'] : '');
$same_ca3_href = G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&s_ca3='.urlencode(isset($view['x2_ca3']) ? $view['x2_ca3'] : '');
$same_top_href = G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&is_top=y&sfl=x2_top&stx=1';
$same_label_href = G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&is_label=y&sfl=x2_label&stx=1';
$same_ok_href = G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&is_ok=y&sfl=x2_ok&stx=1';
$same_set_href = G5_BBS_URL.'/board.php?bo_table='.$bo_table.'&is_set=y&sfl=x2_set&stx=1';
$recent_ca3_rows = array();
$prev_ca3_rows = array();
if (!empty($view['x2_ca3'])) {
$x2_ca3_sql = sql_real_escape_string($view['x2_ca3']);
$wr_id_sql = (int)$view['wr_id'];
$sql_recent = " SELECT wr_id, wr_subject, wr_datetime
FROM {$write_table}
WHERE wr_is_comment = '0'
AND x2_ca3 = '{$x2_ca3_sql}'
AND wr_id > '{$wr_id_sql}'
ORDER BY wr_id DESC
LIMIT 3 ";
$rs_recent = sql_query($sql_recent, false);
if ($rs_recent) {
while ($row = sql_fetch_array($rs_recent)) {
$recent_ca3_rows[] = $row;
}
}
$sql_prev = " SELECT wr_id, wr_subject, wr_datetime
FROM {$write_table}
WHERE wr_is_comment = '0'
AND x2_ca3 = '{$x2_ca3_sql}'
AND wr_id < '{$wr_id_sql}'
ORDER BY wr_id DESC
LIMIT 3 ";
$rs_prev = sql_query($sql_prev, false);
if ($rs_prev) {
while ($row = sql_fetch_array($rs_prev)) {
$prev_ca3_rows[] = $row;
}
}
}
$extract_wr_id = function($href) {
if (!$href) return 0;
if (preg_match('/[?&]wr_id=(\d+)/', $href, $m)) {
return (int)$m[1];
}
return 0;
};
$load_nav_meta = function($target_wr_id) use ($write_table) {
$meta = array();
if (!$target_wr_id) return $meta;
$sql = " SELECT ca_name, x2_ca2, x2_ca3, x2_ca4, x2_top, x2_label, x2_ok, x2_set
FROM {$write_table}
WHERE wr_id = '{$target_wr_id}' ";
$row = sql_fetch($sql, false);
if (is_array($row)) $meta = $row;
return $meta;
};
$prev_meta = $load_nav_meta($extract_wr_id($prev_href));
$next_meta = $load_nav_meta($extract_wr_id($next_href));
$render_nav_meta = function($meta) {
if (empty($meta)) return '';
$parts = array();
if (!empty($meta['ca_name'])) $parts[] = '<span class="nav-meta-chip">분류: '.get_text($meta['ca_name']).'</span>';
if (!empty($meta['x2_ca2'])) $parts[] = '<span class="nav-meta-chip">구분: '.get_text($meta['x2_ca2']).'</span>';
if (!empty($meta['x2_ca3'])) $parts[] = '<span class="nav-meta-chip">형태: '.get_text($meta['x2_ca3']).'</span>';
if (!empty($meta['x2_ca4'])) $parts[] = '<span class="nav-meta-chip">종류: '.get_text($meta['x2_ca4']).'</span>';
$extra = array();
if (!empty($meta['x2_top']) && $meta['x2_top'] == '1') $extra[] = '우선';
if (!empty($meta['x2_label']) && $meta['x2_label'] == '1') $extra[] = '라벨';
if (!empty($meta['x2_ok']) && $meta['x2_ok'] == '1') $extra[] = '완성';
if (!empty($meta['x2_set']) && $meta['x2_set'] == '1') $extra[] = '세트';
if (!empty($extra)) $parts[] = '<span class="nav-meta-chip">옵션: '.implode(', ', $extra).'</span>';
return implode('', $parts);
};
?>
<article id="VIEW">
<div class="Board-Info-Header">
<div>
<span class="terminal-label">CORE TERMINAL</span>
<div class="board-title"><i class="fa-solid fa-database board-title-icon"></i><?php echo $board['bo_subject']; ?></div>
</div>
<div class="Btns-Right">
<button onclick="location.href='<?php echo $list_href; ?>'"><i class="fa-solid fa-list"></i> LIST</button>
<?php if ($update_href) { ?><button onclick="location.href='<?php echo $update_href; ?>'"><i class="fa-solid fa-pen-to-square"></i> EDIT</button><?php } ?>
<?php if ($write_href) { ?><button onclick="location.href='<?php echo $write_href; ?>'" class="Write-Btn"><i class="fa-solid fa-pen"></i> WRITE</button><?php } ?>
</div>
</div>
<header class="Header-Main-Section">
<h1><?php echo get_text($view['wr_subject']); ?></h1>
<div class="wr-datetime"><i class="fa-regular fa-clock datetime-icon"></i> DATE: <?php echo date('Y-m-d H:i', strtotime($view['wr_datetime'])); ?></div>
</header>
<?php if ($has_files || $has_links) { ?>
<div class="View-Attached-Data">
<?php if ($has_files) { ?>
<div class="section-title-row"><i class="fa-solid fa-paperclip"></i> 첨부파일</div>
<?php
if ($view['file']['count']) {
for ($i=0; $i<count($view['file']); $i++) {
if (!isset($view['file'][$i]['source']) || isset($view['file'][$i]['view'])) continue;
?>
<a href="<?php echo $view['file'][$i]['href']; ?>" class="data-item file-item view_file_download">
<div class="data-info">
<i class="fa-solid fa-download"></i>
<div>
<span class="data-name"><?php echo $view['file'][$i]['source']; ?></span>
<?php if(!empty($view['file'][$i]['bf_content'])) { ?><span class="data-description"><?php echo $view['file'][$i]['bf_content']; ?></span><?php } ?>
</div>
</div>
<div class="data-meta"><span><?php echo $view['file'][$i]['size']; ?></span></div>
</a>
<?php
}
}
?>
<?php } ?>
<?php if ($has_links) { ?>
<div class="section-title-row links-under-files"><i class="fa-solid fa-link"></i> 링크</div>
<?php
for ($i=1; $i<=count($view['link']); $i++) {
if (empty($view['link'][$i])) continue;
$link = cut_str($view['link'][$i], 120);
?>
<a href="<?php echo $view['link_href'][$i] ?>" target="_blank" class="data-item link-item-card">
<div class="data-info"><i class="fa-solid fa-link"></i><span class="data-name"><?php echo $link ?></span></div>
<span class="data-meta">OPEN</span>
</a>
<?php } ?>
<?php } ?>
</div>
<?php } ?>
<section class="Extra-Category-Area meta-section">
<div class="section-title-row"><i class="fa-solid fa-folder-tree"></i> 분류 정보</div>
<div class="meta-item-grid" id="x2_live_metrics"
data-base-num="<?php echo $x2_base_amount_num; ?>"
data-target-num="<?php echo $x2_target_amount_num; ?>"
data-live-current="<?php echo $x2_live_current ? '1' : '0'; ?>"
data-live-profit="<?php echo $x2_live_profit ? '1' : '0'; ?>"
data-live-profit-rate="<?php echo $x2_live_profit_rate ? '1' : '0'; ?>"
data-live-reach-rate="<?php echo $x2_live_reach_rate ? '1' : '0'; ?>">
<?php if(!empty($view['ca_name'])) { ?><a href="<?php echo $same_category_href; ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-folder"></i> 분류</span><span class="item-value"><?php echo get_text($view['ca_name']); ?></span></a><?php } ?>
<?php if(!empty($view['x2_ca2'])) { ?><a href="<?php echo $same_ca2_href; ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-layer-group"></i> 구분</span><span class="item-value"><?php echo get_text($view['x2_ca2']); ?></span></a><?php } ?>
<?php if(!empty($view['x2_ca3'])) { ?><a href="<?php echo $same_ca3_href; ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-shapes"></i> 형태</span><span class="item-value"><?php echo get_text($view['x2_ca3']); ?></span></a><?php } ?>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-spinner"></i> 진행</span><span class="item-value <?php echo $x2_progress_class; ?>"><?php echo $x2_progress_text; ?></span></span>
<?php if(!empty($view['x2_ca4'])) { ?><span class="meta-item"><span class="item-label"><i class="fa-solid fa-cubes"></i> 종류</span><span class="item-value"><?php echo get_text($view['x2_ca4']); ?></span></span><?php } ?>
</div>
</section>
<section class="View-Option-Area option-primary-area">
<div class="section-title-row"><i class="fa-solid fa-circle-info"></i> 핵심 항목</div>
<div class="meta-item-grid">
<?php if(!empty($view['x2_top']) && $view['x2_top'] == '1') { ?><a href="<?php echo $same_top_href; ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-thumbtack"></i> 우선</span><span class="item-value">TOP</span></a><?php } ?>
<?php if(!empty($view['x2_label']) && $view['x2_label'] == '1') { ?><a href="<?php echo $same_label_href; ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-star"></i> 라벨</span><span class="item-value">LABEL</span></a><?php } ?>
<?php if(!empty($view['x2_ok']) && $view['x2_ok'] == '1') { ?><a href="<?php echo $same_ok_href; ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-check"></i> 완성</span><span class="item-value">DONE</span></a><?php } ?>
<?php if(!empty($view['x2_set']) && $view['x2_set'] == '1') { ?><a href="<?php echo $same_set_href; ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-boxes-stacked"></i> 세트</span><span class="item-value">SET</span></a><?php } ?>
<?php if(!empty($view['x2_core']) && $view['x2_core'] == '1') { ?><span class="meta-item"><span class="item-label"><i class="fa-solid fa-circle-dot"></i> 핵심 부분</span><span class="item-value">ON</span></span><?php } ?>
</div>
</section>
<section class="View-Option-Area option-secondary-area">
<div class="section-title-row"><i class="fa-solid fa-sliders"></i> 추가 옵션</div>
<div class="meta-item-grid">
<?php if ($x2_base_amount_raw !== '') { ?>
<a href="<?php echo $make_search_href('x2_base_amount', $x2_base_amount_raw); ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-sack-dollar"></i> 기본금액</span><span class="item-value value-green"><?php echo $x2_base_amount_view; ?></span></a>
<?php } else { ?>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-sack-dollar"></i> 기본금액</span><span class="item-value">-</span></span>
<?php } ?>
<?php if ($x2_target_amount_raw !== '') { ?>
<a href="<?php echo $make_search_href('x2_target_amount', $x2_target_amount_raw); ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-bullseye"></i> 목표금액</span><span class="item-value value-blue"><?php echo $x2_target_amount_view; ?></span></a>
<?php } else { ?>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-bullseye"></i> 목표금액</span><span class="item-value">-</span></span>
<?php } ?>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-wallet"></i> 현재자산</span><span class="item-value value-green" id="x2_live_current_asset"><?php echo $x2_current_asset_view; ?></span></span>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-coins"></i> 수익금</span><span class="item-value value-blue" id="x2_live_profit_amount"><?php echo $x2_profit_amount_view; ?></span></span>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-percent"></i> 수익률</span><span class="item-value value-blue" id="x2_live_profit_rate"><?php echo $x2_profit_rate_view; ?></span></span>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-chart-simple"></i> 도달률</span><span class="item-value <?php echo $x2_reach_rate_class; ?>" id="x2_live_reach_rate"><?php echo $x2_reach_rate_view; ?></span></span>
<?php if ($x2_target_type_raw !== '') { ?>
<a href="<?php echo $make_search_href('x2_target_type', $x2_target_type_raw); ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-list-check"></i> 목표형태</span><span class="item-value"><?php echo $x2_target_type_view; ?></span></a>
<?php } else { ?>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-list-check"></i> 목표형태</span><span class="item-value">-</span></span>
<?php } ?>
</div>
</section>
<section class="View-Option-Area option-secondary-area">
<div class="section-title-row"><i class="fa-solid fa-coins"></i> 매매 금액</div>
<div class="meta-item-grid">
<?php if ($x2_unit_base_raw !== '') { ?>
<a href="<?php echo $make_search_href('x2_unit_base', $x2_unit_base_raw); ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-cube"></i> 기본단위</span><span class="item-value value-green"><?php echo $x2_unit_base_view; ?></span></a>
<?php } else { ?>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-cube"></i> 기본단위</span><span class="item-value">-</span></span>
<?php } ?>
<?php if ($x2_unit_add_raw !== '') { ?>
<a href="<?php echo $make_search_href('x2_unit_add', $x2_unit_add_raw); ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-plus"></i> 추가단위</span><span class="item-value value-yellow"><?php echo $x2_unit_add_view; ?></span></a>
<?php } else { ?>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-plus"></i> 추가단위</span><span class="item-value">-</span></span>
<?php } ?>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-chart-line"></i> 기본증가율</span><span class="item-value value-yellow"><?php echo $x2_base_increase_rate_view; ?></span></span>
<?php if ($x2_unit_max_raw !== '') { ?>
<a href="<?php echo $make_search_href('x2_unit_max', $x2_unit_max_raw); ?>" class="meta-item info-link"><span class="item-label"><i class="fa-solid fa-arrows-up-to-line"></i> 최대단위</span><span class="item-value value-red"><?php echo $x2_unit_max_view; ?></span></a>
<?php } else { ?>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-arrows-up-to-line"></i> 최대단위</span><span class="item-value">-</span></span>
<?php } ?>
<span class="meta-item"><span class="item-label"><i class="fa-solid fa-chart-column"></i> 최대증가율</span><span class="item-value value-red"><?php echo $x2_max_increase_rate_view; ?></span></span>
</div>
</section>
<section class="View-Option-Area option-secondary-area">
<div class="section-title-row"><i class="fa-solid fa-chart-line"></i> 매매 종목</div>
<div class="trade-tag-list">
<?php if (!empty($trade_items)) { ?>
<?php foreach ($trade_items as $trade_item) { ?>
<a href="<?php echo $make_search_href('x2_trade_item', $trade_item); ?>" class="trade-tag-link"><?php echo get_text($trade_item); ?></a>
<?php } ?>
<?php } else { ?>
<span class="trade-tag-empty">-</span>
<?php } ?>
</div>
</section>
<?php if ($has_content) { ?>
<div class="View-Content">
<div class="section-title-row"><i class="fa-solid fa-file-lines"></i> 내용</div>
<div class="View-Body-Inner">
<div id="bo_v_atc">
<div id="bo_v_img">
<?php
if ($view['file']['count']) {
for ($i = 0; $i < count($view['file']); $i++) {
if (isset($view['file'][$i]['view']) && $view['file'][$i]['view']) {
echo get_view_thumbnail($view['file'][$i]['view']);
}
}
}
?>
</div>
<div id="bo_v_con"><?php echo $view_content; ?></div>
</div>
</div>
</div>
<?php } ?>
<?php if($view['x2_text']) { ?>
<div class="Additional-Code-Area">
<div class="code-header">
<span class="code-title"><i class="fa-solid fa-code"></i> 추가 내용</span>
<div class="code-actions">
<button type="button" class="code-action-btn" id="copyX2TxtBtn"><i class="fa-regular fa-copy"></i> COPY</button>
<button type="button" class="code-action-btn" id="downloadX2TxtBtn"><i class="fa-solid fa-download"></i> DOWNLOAD</button>
</div>
</div>
<pre class="code-body"><code><?php echo htmlspecialchars($view['x2_text']); ?></code></pre>
</div>
<?php } ?>
<?php if ($memo_text !== '') { ?>
<div class="Work-Memo-View-Area <?php echo $memo_clean ? 'is-cleaned' : ''; ?>">
<div class="work-memo-title"><i class="fa-solid fa-note-sticky"></i> MEMO</div>
<?php if ($memo_clean) { ?><div class="memo-clean-badge"><i class="fa-solid fa-trash-can"></i> 메모 삭제 상태</div><?php } ?>
<div class="work-memo-content"><?php echo nl2br(get_text($memo_text)); ?></div>
</div>
<?php } ?>
<?php if (!empty($view['x2_ca3']) && (!empty($recent_ca3_rows) || !empty($prev_ca3_rows))) { ?>
<section class="View-Option-Area option-secondary-area">
<?php if (!empty($recent_ca3_rows)) { ?>
<div class="section-title-row"><i class="fa-solid fa-clock-rotate-left"></i> 최근 "<?php echo get_text($view['x2_ca3']); ?>" 데이터</div>
<ul class="related-list">
<?php foreach ($recent_ca3_rows as $row) { ?>
<li>
<a href="<?php echo G5_BBS_URL; ?>/board.php?bo_table=<?php echo $bo_table; ?>&wr_id=<?php echo (int)$row['wr_id']; ?>">
<span class="related-subject"><?php echo get_text($row['wr_subject']); ?></span>
<span class="related-date"><?php echo date('Y-m-d H:i', strtotime($row['wr_datetime'])); ?></span>
</a>
</li>
<?php } ?>
</ul>
<?php } ?>
<?php if (!empty($prev_ca3_rows)) { ?>
<div class="section-title-row related-prev-title"><i class="fa-solid fa-clock"></i> 이전 "<?php echo get_text($view['x2_ca3']); ?>" 데이터</div>
<ul class="related-list">
<?php foreach ($prev_ca3_rows as $row) { ?>
<li>
<a href="<?php echo G5_BBS_URL; ?>/board.php?bo_table=<?php echo $bo_table; ?>&wr_id=<?php echo (int)$row['wr_id']; ?>">
<span class="related-subject"><?php echo get_text($row['wr_subject']); ?></span>
<span class="related-date"><?php echo date('Y-m-d H:i', strtotime($row['wr_datetime'])); ?></span>
</a>
</li>
<?php } ?>
</ul>
<?php } ?>
</section>
<?php } ?>
<?php if (!empty($tag_items)) { ?>
<div class="View-Tag-Area">
<?php foreach ($tag_items as $tag) { ?>
<a href="<?php echo G5_BBS_URL; ?>/board.php?bo_table=<?php echo $bo_table; ?>&sfl=wr_1&stx=<?php echo urlencode($tag); ?>" class="tag-item"># <?php echo get_text($tag); ?></a>
<?php } ?>
</div>
<?php } ?>
<nav class="Post-Navigation">
<?php if ($prev_href) { ?>
<a href="<?php echo $prev_href; ?>" class="prev-link">
<span class="nav-label"><i class="fa-solid fa-chevron-left"></i> PREVIOUS POST</span>
<p class="nav-subject"><?php echo $prev_wr_subject; ?></p>
<div class="nav-meta-wrap"><?php echo $render_nav_meta($prev_meta); ?></div>
</a>
<?php } else { ?>
<div class="nav-empty prev-empty">FIRST POST</div>
<?php } ?>
<?php if ($next_href) { ?>
<a href="<?php echo $next_href; ?>" class="next-link">
<span class="nav-label">NEXT POST <i class="fa-solid fa-chevron-right"></i></span>
<p class="nav-subject"><?php echo $next_wr_subject; ?></p>
<div class="nav-meta-wrap"><?php echo $render_nav_meta($next_meta); ?></div>
</a>
<?php } else { ?>
<div class="nav-empty next-empty">LAST POST</div>
<?php } ?>
</nav>
<footer class="View-Bottom-Control">
<div class="Admin-Control">
<?php if ($delete_href) { ?><button onclick="if(confirm('정말 삭제하시겠습니까?')) location.href='<?php echo $delete_href; ?>';"><i class="fa-solid fa-trash-can"></i> DELETE</button><?php } ?>
<?php if ($copy_href) { ?><button onclick="window.open('<?php echo $copy_href; ?>', 'copy_win', 'width=600,height=500');"><i class="fa-solid fa-copy"></i> COPY</button><?php } ?>
<?php if ($move_href) { ?><button onclick="window.open('<?php echo $move_href; ?>', 'move_win', 'width=600,height=500');"><i class="fa-solid fa-truck-moving"></i> MOVE</button><?php } ?>
</div>
<button onclick="location.href='<?php echo $list_href; ?>'" class="List-Btn-Footer"><i class="fa-solid fa-list-ul"></i> BACK TO LIST</button>
</footer>
</article>
<script src="<?php echo G5_JS_URL; ?>/viewimageresize.js"></script>
<?php include_once("{$board_skin_path}/view/view.script.php"); ?>