Compare commits
No commits in common. "b01b33978f9734441aff5511ce8e49370206e47a" and "adf8c56665c30be0cab4f078dfbc0678026adeac" have entirely different histories.
b01b33978f
...
adf8c56665
32 changed files with 571 additions and 2745 deletions
|
|
@ -1,3 +0,0 @@
|
||||||
RewriteEngine On
|
|
||||||
|
|
||||||
RewriteRule ^(\.git|\.ht|\.travis|codeception\.|composer\.|Gruntfile\.js|package\.json|CONTRIBUTING|COPYRIGHT|LICENSE|README) - [L,F]
|
|
||||||
|
|
@ -31,15 +31,15 @@ include_once G5_PATH . '/head.sub.php';
|
||||||
<header id="header">
|
<header id="header">
|
||||||
<div id="admin_prof">
|
<div id="admin_prof">
|
||||||
<h1>
|
<h1>
|
||||||
<a href="<?php echo G5_ADMIN_URL ?>"><img src="<?= G5_ADMIN_URL ?>/img/logo.png" alt="Avocado Edition: Amber" /></a>
|
<a href="<?php echo G5_ADMIN_URL ?>"><img src="<?= G5_ADMIN_URL ?>/img/logo.png" alt="Avocado Edition" /></a>
|
||||||
</h1>
|
</h1>
|
||||||
|
<p>
|
||||||
|
<a href="<?php echo G5_ADMIN_URL ?>/member_form.php?w=u&mb_id=<?php echo $member['mb_id'] ?>" class="name">
|
||||||
|
<?= $member['mb_name'] ?>
|
||||||
|
</a>
|
||||||
|
<a href="<?php echo G5_BBS_URL ?>/logout.php" class="logout">로그아웃</a>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<p>
|
|
||||||
<a href="<?php echo G5_ADMIN_URL ?>/member_form.php?w=u&mb_id=<?php echo $member['mb_id'] ?>" class="name">
|
|
||||||
<?= $member['mb_name'] ?>
|
|
||||||
</a>
|
|
||||||
<a href="<?php echo G5_BBS_URL ?>/logout.php" class="logout">로그아웃</a>
|
|
||||||
</p>
|
|
||||||
<nav id="gnb">
|
<nav id="gnb">
|
||||||
<ul>
|
<ul>
|
||||||
<li style="border-bottom:1px solid #444;">
|
<li style="border-bottom:1px solid #444;">
|
||||||
|
|
@ -65,8 +65,7 @@ include_once G5_PATH . '/head.sub.php';
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
<section id="wrapper">
|
<section id="wrapper">
|
||||||
<div class="admin-content">
|
<aside id="page_top">
|
||||||
<aside id="page_top">
|
<h2><?php echo $g5['title'] ?></h2>
|
||||||
<h2><?php echo $g5['title'] ?></h2>
|
</aside>
|
||||||
</aside>
|
<div id="container">
|
||||||
<div id="container">
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
if (!defined('_GNUBOARD_'))
|
if (!defined('_GNUBOARD_'))
|
||||||
exit;
|
exit;
|
||||||
?>
|
?>
|
||||||
</div>
|
|
||||||
<div class="footer-copyright">
|
<div class="footer-copyright">
|
||||||
<a href="https://amberst.one/amber/AvocadoAmber" target="_blank"> Avocado Amber v<?= G5_GNUBOARD_VER ?> </a>
|
<a href="https://amberst.one/amber/AvocadoAmber" target="_blank"> Avocado Amber v<?= G5_GNUBOARD_VER ?> </a>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -12,17 +11,6 @@ if (!defined('_GNUBOARD_'))
|
||||||
<script src="<?php echo G5_ADMIN_URL ?>/js/admin.js?ver=<?php echo G5_JS_VER; ?>"></script>
|
<script src="<?php echo G5_ADMIN_URL ?>/js/admin.js?ver=<?php echo G5_JS_VER; ?>"></script>
|
||||||
<script src="<?php echo G5_ADMIN_URL ?>/js/admin.ajax.js?ver=<?php echo G5_JS_VER; ?>"></script>
|
<script src="<?php echo G5_ADMIN_URL ?>/js/admin.ajax.js?ver=<?php echo G5_JS_VER; ?>"></script>
|
||||||
<script>
|
<script>
|
||||||
// give section active class
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
document.querySelectorAll('section[id^=anc_]').forEach((section) => {
|
|
||||||
let section_id = section.getAttribute('id');
|
|
||||||
if (section_id) {
|
|
||||||
let anc = section.querySelector(`a[href='#${section_id}']`);
|
|
||||||
anc.classList.add('active');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
var hide_menu = false;
|
var hide_menu = false;
|
||||||
var mouse_event = false;
|
var mouse_event = false;
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,7 @@ CREATE TABLE `__TABLE_NAME__` (
|
||||||
`ca_name` varchar(255) NOT NULL,
|
`ca_name` varchar(255) NOT NULL,
|
||||||
`wr_option` set('html1','html2','secret','mail') NOT NULL,
|
`wr_option` set('html1','html2','secret','mail') NOT NULL,
|
||||||
`wr_subject` varchar(255) NOT NULL,
|
`wr_subject` varchar(255) NOT NULL,
|
||||||
`wr_content` mediumtext NOT NULL,
|
`wr_content` text NOT NULL,
|
||||||
`wr_extra_vars` text NOT NULL,
|
|
||||||
`wr_link1` text NOT NULL,
|
`wr_link1` text NOT NULL,
|
||||||
`wr_link2` text NOT NULL,
|
`wr_link2` text NOT NULL,
|
||||||
`wr_link1_hit` int(11) NOT NULL DEFAULT '0',
|
`wr_link1_hit` int(11) NOT NULL DEFAULT '0',
|
||||||
|
|
@ -20,7 +19,6 @@ CREATE TABLE `__TABLE_NAME__` (
|
||||||
`wr_nogood` int(11) NOT NULL DEFAULT '0',
|
`wr_nogood` int(11) NOT NULL DEFAULT '0',
|
||||||
`mb_id` varchar(20) NOT NULL,
|
`mb_id` varchar(20) NOT NULL,
|
||||||
`wr_password` varchar(255) NOT NULL,
|
`wr_password` varchar(255) NOT NULL,
|
||||||
`wr_extrapassword` varchar(255) NOT NULL,
|
|
||||||
`wr_name` varchar(255) NOT NULL,
|
`wr_name` varchar(255) NOT NULL,
|
||||||
`wr_email` varchar(255) NOT NULL,
|
`wr_email` varchar(255) NOT NULL,
|
||||||
`wr_homepage` varchar(255) NOT NULL,
|
`wr_homepage` varchar(255) NOT NULL,
|
||||||
|
|
|
||||||
|
|
@ -99,10 +99,8 @@
|
||||||
* @var string|int $bo_8
|
* @var string|int $bo_8
|
||||||
* @var string|int $bo_9
|
* @var string|int $bo_9
|
||||||
* @var string|int $bo_10
|
* @var string|int $bo_10
|
||||||
* @var string $bo_version
|
|
||||||
*/
|
*/
|
||||||
include_once "./_common.php";
|
include_once "./_common.php";
|
||||||
include_once "./board_migration.inc.php";
|
|
||||||
|
|
||||||
if ($w == 'u')
|
if ($w == 'u')
|
||||||
check_demo();
|
check_demo();
|
||||||
|
|
@ -265,8 +263,7 @@ $sql_common = " gr_id = '{$_POST['gr_id']}',
|
||||||
bo_7 = '{$_POST['bo_7']}',
|
bo_7 = '{$_POST['bo_7']}',
|
||||||
bo_8 = '{$_POST['bo_8']}',
|
bo_8 = '{$_POST['bo_8']}',
|
||||||
bo_9 = '{$_POST['bo_9']}',
|
bo_9 = '{$_POST['bo_9']}',
|
||||||
bo_10 = '{$_POST['bo_10']}',
|
bo_10 = '{$_POST['bo_10']}' ";
|
||||||
bo_version = '". BOARD_MIGRATION_VERSION . "';";
|
|
||||||
|
|
||||||
if ($w == '') {
|
if ($w == '') {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
include_once "./_common.php";
|
include_once "./_common.php";
|
||||||
include_once "./board_migration.inc.php";
|
|
||||||
|
|
||||||
auth_check($auth[$sub_menu], 'r');
|
auth_check($auth[$sub_menu], 'r');
|
||||||
|
|
||||||
// 마이그레이션 체크
|
|
||||||
$boards_need_update = check_all_boards_migration();
|
|
||||||
|
|
||||||
$sql_common = " from {$g5['board_table']} a ";
|
$sql_common = " from {$g5['board_table']} a ";
|
||||||
$sql_search = " where (1) ";
|
$sql_search = " where (1) ";
|
||||||
|
|
||||||
|
|
@ -70,11 +66,6 @@ $colspan = 11;
|
||||||
<div class="local_ov01 local_ov">
|
<div class="local_ov01 local_ov">
|
||||||
<?php echo $listall ?>
|
<?php echo $listall ?>
|
||||||
생성된 게시판수 <?php echo number_format($total_count) ?>개
|
생성된 게시판수 <?php echo number_format($total_count) ?>개
|
||||||
<?php if (count($boards_need_update) > 0) { ?>
|
|
||||||
<span style="font-weight: bold; margin-left: 20px;">
|
|
||||||
업데이트 필요: <?php echo count($boards_need_update) ?>개
|
|
||||||
</span>
|
|
||||||
<?php } ?>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form name="fsearch" id="fsearch" class="local_sch01 local_sch" method="get">
|
<form name="fsearch" id="fsearch" class="local_sch01 local_sch" method="get">
|
||||||
|
|
@ -120,8 +111,7 @@ $colspan = 11;
|
||||||
<th scope="col" style="width:80px;">글쓰기</th>
|
<th scope="col" style="width:80px;">글쓰기</th>
|
||||||
<th scope="col" style="width:80px;">글답변</th>
|
<th scope="col" style="width:80px;">글답변</th>
|
||||||
<th scope="col" style="width:80px;">댓글쓰기</th>
|
<th scope="col" style="width:80px;">댓글쓰기</th>
|
||||||
<th scope="col" style="width:80px;">버전</th>
|
<th scope="col" style="width:60px;">관리</th>
|
||||||
<th scope="col" style="width:90px;">관리</th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
@ -130,15 +120,6 @@ $colspan = 11;
|
||||||
$one_update = '<a href="./board_form.php?w=u&bo_table=' . $row['bo_table'] . '&' . $qstr . '">수정</a>';
|
$one_update = '<a href="./board_form.php?w=u&bo_table=' . $row['bo_table'] . '&' . $qstr . '">수정</a>';
|
||||||
$one_copy = '<a href="./board_copy.php?bo_table=' . $row['bo_table'] . '" class="board_copy" target="win_board_copy">복사</a>';
|
$one_copy = '<a href="./board_copy.php?bo_table=' . $row['bo_table'] . '" class="board_copy" target="win_board_copy">복사</a>';
|
||||||
|
|
||||||
// 마이그레이션 필요 여부 체크
|
|
||||||
$need_migration = false;
|
|
||||||
foreach ($boards_need_update as $board_update) {
|
|
||||||
if ($board_update['bo_table'] == $row['bo_table']) {
|
|
||||||
$need_migration = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$bg = 'bg' . ($i % 2);
|
$bg = 'bg' . ($i % 2);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
@ -181,25 +162,15 @@ $colspan = 11;
|
||||||
<td>
|
<td>
|
||||||
<?php echo get_member_level_select('bo_comment_level[' . $i . ']', 1, 10, $row['bo_comment_level']) ?>
|
<?php echo get_member_level_select('bo_comment_level[' . $i . ']', 1, 10, $row['bo_comment_level']) ?>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
|
||||||
<?php if ($need_migration) { ?>
|
|
||||||
<span style="color: #ff6b6b; font-weight: bold;">업데이트 필요</span>
|
|
||||||
<?php } else { ?>
|
|
||||||
<span><?php echo htmlspecialchars($row['bo_version']); ?></span>
|
|
||||||
<?php } ?>
|
|
||||||
</td>
|
|
||||||
<td>
|
<td>
|
||||||
<?php echo $one_update ?>
|
<?php echo $one_update ?>
|
||||||
<?php echo $one_copy ?>
|
<?php echo $one_copy ?>
|
||||||
<?php if ($need_migration) { ?>
|
|
||||||
<br><a href="#" class="btn_migrate" data-bo-table="<?php echo $row['bo_table'] ?>">업데이트</a>
|
|
||||||
<?php } ?>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
if ($i == 0)
|
if ($i == 0)
|
||||||
echo '<tr><td colspan="' . ($colspan + 1) . '" class="empty_table">자료가 없습니다.</td></tr>';
|
echo '<tr><td colspan="' . $colspan . '" class="empty_table">자료가 없습니다.</td></tr>';
|
||||||
?>
|
?>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
@ -215,12 +186,6 @@ $colspan = 11;
|
||||||
<span class="material-icons">delete</span>
|
<span class="material-icons">delete</span>
|
||||||
<input type="submit" name="act_button" value="선택삭제" title="선택삭제" onclick="document.pressed=this.value">
|
<input type="submit" name="act_button" value="선택삭제" title="선택삭제" onclick="document.pressed=this.value">
|
||||||
</div>
|
</div>
|
||||||
<?php if (count($boards_need_update) > 0) { ?>
|
|
||||||
<div class="btn ty4">
|
|
||||||
<span class="material-icons">update</span>
|
|
||||||
<input type="submit" name="act_button" value="선택마이그레이션" title="선택마이그레이션" onclick="document.pressed=this.value">
|
|
||||||
</div>
|
|
||||||
<?php } ?>
|
|
||||||
<?php if ($is_admin == 'super') { ?>
|
<?php if ($is_admin == 'super') { ?>
|
||||||
<a href="./board_form.php" title="게시판 추가" class="btn"><span class="material-icons">add</span></a>
|
<a href="./board_form.php" title="게시판 추가" class="btn"><span class="material-icons">add</span></a>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
|
|
@ -243,12 +208,6 @@ $colspan = 11;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (document.pressed == "선택마이그레이션") {
|
|
||||||
if (!confirm("선택한 게시판을 마이그레이션 하시겠습니까?")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -257,36 +216,6 @@ $colspan = 11;
|
||||||
window.open(this.href, "win_board_copy", "left=100,top=100,width=550,height=450");
|
window.open(this.href, "win_board_copy", "left=100,top=100,width=550,height=450");
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
$(".btn_migrate").click(function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
var bo_table = $(this).data('bo-table');
|
|
||||||
|
|
||||||
if (!confirm(bo_table + ' 게시판을 업데이트 하시겠습니까?')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: './board_list_update.php',
|
|
||||||
type: 'POST',
|
|
||||||
data: {
|
|
||||||
act_button: '단일마이그레이션',
|
|
||||||
bo_table: bo_table,
|
|
||||||
token: '<?php echo $token ?>'
|
|
||||||
},
|
|
||||||
dataType: 'json',
|
|
||||||
success: function (response) {
|
|
||||||
if (response.success) {
|
|
||||||
location.reload();
|
|
||||||
} else {
|
|
||||||
alert('오류: ' + response.message);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error: function () {
|
|
||||||
alert('마이그레이션 중 오류가 발생했습니다.');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,63 +1,13 @@
|
||||||
<?php
|
<?php
|
||||||
include_once "./_common.php";
|
include_once "./_common.php";
|
||||||
include_once "./board_migration.inc.php";
|
|
||||||
|
|
||||||
check_demo();
|
check_demo();
|
||||||
|
|
||||||
// 단일 마이그레이션 처리 (AJAX)
|
|
||||||
if ($_POST['act_button'] == "단일마이그레이션") {
|
|
||||||
header('Content-Type: application/json');
|
|
||||||
|
|
||||||
auth_check($auth[$sub_menu], 'w');
|
|
||||||
|
|
||||||
$bo_table = sql_real_escape_string(strip_tags($_POST['bo_table']));
|
|
||||||
|
|
||||||
if (empty($bo_table)) {
|
|
||||||
echo json_encode(['success' => false, 'message' => '게시판 테이블명이 없습니다.']);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = migrate_board_table($bo_table);
|
|
||||||
echo json_encode($result);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 선택 마이그레이션 처리
|
|
||||||
|
|
||||||
if (!count($_POST['chk'])) {
|
if (!count($_POST['chk'])) {
|
||||||
alert($_POST['act_button'] . " 하실 항목을 하나 이상 체크하세요.");
|
alert($_POST['act_button'] . " 하실 항목을 하나 이상 체크하세요.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($_POST['act_button'] == "선택마이그레이션") {
|
if ($_POST['act_button'] == "선택수정") {
|
||||||
auth_check($auth[$sub_menu], 'w');
|
|
||||||
|
|
||||||
if (!count($_POST['chk'])) {
|
|
||||||
alert("마이그레이션 하실 항목을 하나 이상 체크하세요.");
|
|
||||||
}
|
|
||||||
|
|
||||||
$success_count = 0;
|
|
||||||
$fail_count = 0;
|
|
||||||
$messages = [];
|
|
||||||
|
|
||||||
for ($i = 0; $i < count($_POST['chk']); $i++) {
|
|
||||||
$k = $_POST['chk'][$i];
|
|
||||||
$bo_table = sql_real_escape_string(strip_tags($_POST['board_table'][$k]));
|
|
||||||
|
|
||||||
if (empty($bo_table)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = migrate_board_table($bo_table);
|
|
||||||
|
|
||||||
if ($result['success']) {
|
|
||||||
$success_count++;
|
|
||||||
$messages[] = "{$bo_table}: 성공 (컬럼 {$result['updated']}개 추가)";
|
|
||||||
} else {
|
|
||||||
$fail_count++;
|
|
||||||
$messages[] = "{$bo_table}: 실패 - {$result['message']}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if ($_POST['act_button'] == "선택수정") {
|
|
||||||
|
|
||||||
auth_check($auth[$sub_menu], 'w');
|
auth_check($auth[$sub_menu], 'w');
|
||||||
|
|
||||||
|
|
@ -78,7 +28,7 @@ if ($_POST['act_button'] == "선택마이그레이션") {
|
||||||
|
|
||||||
$purify_keys = ["gr_id", "bo_subject", "bo_skin", "bo_list_level", "bo_read_level", "bo_write_level", "bo_comment_level", "bo_reply_level", "board_table"];
|
$purify_keys = ["gr_id", "bo_subject", "bo_skin", "bo_list_level", "bo_read_level", "bo_write_level", "bo_comment_level", "bo_reply_level", "board_table"];
|
||||||
|
|
||||||
foreach ($_POST as $key => $value) {
|
foreach($_POST as $key => $value) {
|
||||||
if (in_array($key, $purify_keys)) {
|
if (in_array($key, $purify_keys)) {
|
||||||
if (is_array($_POST[$key])) {
|
if (is_array($_POST[$key])) {
|
||||||
$_POST[$key][$k] = sql_real_escape_string(strip_tags($_POST[$key][$k]));
|
$_POST[$key][$k] = sql_real_escape_string(strip_tags($_POST[$key][$k]));
|
||||||
|
|
|
||||||
|
|
@ -1,319 +0,0 @@
|
||||||
<?php
|
|
||||||
if (!defined('_GNUBOARD_'))
|
|
||||||
exit;
|
|
||||||
|
|
||||||
// 현재 마이그레이션 버전
|
|
||||||
define('BOARD_MIGRATION_VERSION', '2.0.1');
|
|
||||||
|
|
||||||
// 표준 게시판 테이블 구조 정의
|
|
||||||
function get_standard_board_structure()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'wr_id' => 'int(11) NOT NULL AUTO_INCREMENT',
|
|
||||||
'wr_num' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_reply' => 'varchar(10) NOT NULL',
|
|
||||||
'wr_parent' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_is_comment' => 'tinyint(4) NOT NULL DEFAULT 0',
|
|
||||||
'wr_comment' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_comment_reply' => 'varchar(5) NOT NULL',
|
|
||||||
'ca_name' => 'varchar(255) NOT NULL',
|
|
||||||
'wr_option' => "set('html1','html2','secret','mail') NOT NULL",
|
|
||||||
'wr_subject' => 'varchar(255) NOT NULL',
|
|
||||||
'wr_content' => 'mediumtext NOT NULL',
|
|
||||||
'wr_extra_vars' => 'text NOT NULL',
|
|
||||||
'wr_link1' => 'text NOT NULL',
|
|
||||||
'wr_link2' => 'text NOT NULL',
|
|
||||||
'wr_link1_hit' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_link2_hit' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_hit' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_good' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_nogood' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'mb_id' => 'varchar(20) NOT NULL',
|
|
||||||
'wr_password' => 'varchar(255) NOT NULL',
|
|
||||||
'wr_extrapassword' => 'varchar(255) NOT NULL',
|
|
||||||
'wr_name' => 'varchar(255) NOT NULL',
|
|
||||||
'wr_email' => 'varchar(255) NOT NULL',
|
|
||||||
'wr_homepage' => 'varchar(255) NOT NULL',
|
|
||||||
'wr_datetime' => "datetime NOT NULL DEFAULT '1970-01-01 00:00:00'",
|
|
||||||
'wr_file' => 'tinyint(4) NOT NULL DEFAULT 0',
|
|
||||||
'wr_last' => 'varchar(19) NOT NULL',
|
|
||||||
'wr_ip' => 'varchar(255) NOT NULL',
|
|
||||||
'wr_facebook_user' => 'varchar(255) NOT NULL',
|
|
||||||
'wr_twitter_user' => 'varchar(255) NOT NULL',
|
|
||||||
'wr_dice1' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_dice2' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_log' => 'text NOT NULL',
|
|
||||||
'wr_item' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_item_log' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_action' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_secret' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_adult' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_wide' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_plip' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_noname' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_ing' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'ch_id' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'ch_side' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'ch_class' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'ti_id' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'ma_id' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_width' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_height' => 'int(11) NOT NULL DEFAULT 0',
|
|
||||||
'wr_url' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_type' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_1' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_2' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_3' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_4' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_5' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_6' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_7' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_8' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_9' => "varchar(255) NOT NULL DEFAULT ''",
|
|
||||||
'wr_10' => "varchar(255) NOT NULL DEFAULT ''"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
// bo_version 컬럼 체크 및 추가
|
|
||||||
function check_and_add_bo_version()
|
|
||||||
{
|
|
||||||
global $g5;
|
|
||||||
|
|
||||||
$sql = "SHOW COLUMNS FROM {$g5['board_table']} LIKE 'bo_version'";
|
|
||||||
$result = sql_query($sql);
|
|
||||||
|
|
||||||
if (sql_num_rows($result) == 0) {
|
|
||||||
$sql = "ALTER TABLE {$g5['board_table']} ADD `bo_version` varchar(255) NOT NULL DEFAULT '0'";
|
|
||||||
sql_query($sql);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 컬럼 정의 정규화 (비교를 위해)
|
|
||||||
function normalize_column_definition($definition)
|
|
||||||
{
|
|
||||||
// 소문자로 변환
|
|
||||||
$def = strtolower($definition);
|
|
||||||
|
|
||||||
// 공백 정규화
|
|
||||||
$def = preg_replace('/\s+/', ' ', $def);
|
|
||||||
$def = trim($def);
|
|
||||||
|
|
||||||
// AUTO_INCREMENT 제거 (비교 시 제외)
|
|
||||||
$def = str_replace('auto_increment', '', $def);
|
|
||||||
|
|
||||||
// int(11) -> int 형식 통일
|
|
||||||
$def = preg_replace('/int\(\d+\)/', 'int', $def);
|
|
||||||
$def = preg_replace('/tinyint\(\d+\)/', 'tinyint', $def);
|
|
||||||
|
|
||||||
// varchar/char 길이는 유지
|
|
||||||
|
|
||||||
// 따옴표 통일 (single quote)
|
|
||||||
$def = str_replace('"', "'", $def);
|
|
||||||
|
|
||||||
return trim($def);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 현재 테이블 구조 가져오기 (원본 정의 포함)
|
|
||||||
function get_current_table_structure($table_name)
|
|
||||||
{
|
|
||||||
$sql = "SHOW COLUMNS FROM `{$table_name}`";
|
|
||||||
$result = sql_query($sql);
|
|
||||||
|
|
||||||
$structure = [];
|
|
||||||
while ($row = sql_fetch_array($result)) {
|
|
||||||
$type = $row['Type'];
|
|
||||||
$null = $row['Null'] == 'NO' ? 'NOT NULL' : '';
|
|
||||||
$default = '';
|
|
||||||
|
|
||||||
if ($row['Default'] !== null) {
|
|
||||||
if (in_array(strtolower($row['Default']), ['current_timestamp'])) {
|
|
||||||
$default = "DEFAULT {$row['Default']}";
|
|
||||||
} else {
|
|
||||||
$default = "DEFAULT '{$row['Default']}'";
|
|
||||||
}
|
|
||||||
} else if ($row['Null'] == 'NO' && $row['Default'] === null && $row['Extra'] != 'auto_increment') {
|
|
||||||
// NOT NULL이고 DEFAULT가 없는 경우 처리
|
|
||||||
if (strpos($type, 'int') !== false) {
|
|
||||||
$default = 'DEFAULT 0';
|
|
||||||
} else if (strpos($type, 'text') !== false) {
|
|
||||||
// text 타입은 default를 설정할 수 없음
|
|
||||||
$default = '';
|
|
||||||
} else {
|
|
||||||
$default = "DEFAULT ''";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$extra = $row['Extra'];
|
|
||||||
if ($extra == 'auto_increment') {
|
|
||||||
$extra = 'AUTO_INCREMENT';
|
|
||||||
}
|
|
||||||
|
|
||||||
$definition = trim("{$type} {$null} {$default} {$extra}");
|
|
||||||
$structure[$row['Field']] = $definition;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $structure;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 테이블 구조 비교 (누락 및 변경된 컬럼 모두 감지)
|
|
||||||
function compare_table_structure($table_name)
|
|
||||||
{
|
|
||||||
$standard = get_standard_board_structure();
|
|
||||||
$current = get_current_table_structure($table_name);
|
|
||||||
|
|
||||||
$missing_columns = []; // 누락된 컬럼
|
|
||||||
$modified_columns = []; // 속성이 다른 컬럼
|
|
||||||
|
|
||||||
foreach ($standard as $column => $definition) {
|
|
||||||
if (!isset($current[$column])) {
|
|
||||||
// 컬럼이 존재하지 않음
|
|
||||||
$missing_columns[$column] = $definition;
|
|
||||||
} else {
|
|
||||||
// 컬럼은 존재하지만 속성 비교
|
|
||||||
$standard_normalized = normalize_column_definition($definition);
|
|
||||||
$current_normalized = normalize_column_definition($current[$column]);
|
|
||||||
|
|
||||||
if ($standard_normalized !== $current_normalized) {
|
|
||||||
// 속성이 다름
|
|
||||||
$modified_columns[$column] = [
|
|
||||||
'current' => $current[$column],
|
|
||||||
'standard' => $definition
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return [
|
|
||||||
'missing' => $missing_columns,
|
|
||||||
'modified' => $modified_columns
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
// 게시판 테이블 마이그레이션 실행
|
|
||||||
function migrate_board_table($bo_table)
|
|
||||||
{
|
|
||||||
global $g5;
|
|
||||||
|
|
||||||
$write_table = $g5['write_prefix'] . $bo_table;
|
|
||||||
|
|
||||||
// 테이블 존재 확인
|
|
||||||
$sql = "SHOW TABLES LIKE '{$write_table}'";
|
|
||||||
$result = sql_query($sql);
|
|
||||||
if (sql_num_rows($result) == 0) {
|
|
||||||
return ['success' => false, 'message' => '테이블이 존재하지 않습니다.'];
|
|
||||||
}
|
|
||||||
|
|
||||||
// 누락 및 변경된 컬럼 확인
|
|
||||||
$comparison = compare_table_structure($write_table);
|
|
||||||
$missing_columns = $comparison['missing'];
|
|
||||||
$modified_columns = $comparison['modified'];
|
|
||||||
|
|
||||||
if (empty($missing_columns) && empty($modified_columns)) {
|
|
||||||
// 버전 업데이트만 수행
|
|
||||||
$sql = "UPDATE {$g5['board_table']} SET bo_version = '" . BOARD_MIGRATION_VERSION . "' WHERE bo_table = '{$bo_table}'";
|
|
||||||
sql_query($sql);
|
|
||||||
return [
|
|
||||||
'success' => true,
|
|
||||||
'message' => '이미 최신 버전입니다.',
|
|
||||||
'added' => 0,
|
|
||||||
'modified' => 0
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$added_count = 0;
|
|
||||||
$modified_count = 0;
|
|
||||||
$errors = [];
|
|
||||||
|
|
||||||
// 누락된 컬럼 추가
|
|
||||||
foreach ($missing_columns as $column => $definition) {
|
|
||||||
$sql = "ALTER TABLE `{$write_table}` ADD `{$column}` {$definition}";
|
|
||||||
if (sql_query($sql)) {
|
|
||||||
$added_count++;
|
|
||||||
} else {
|
|
||||||
$errors[] = "컬럼 추가 실패: {$column}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 변경된 컬럼 수정
|
|
||||||
foreach ($modified_columns as $column => $info) {
|
|
||||||
$sql = "ALTER TABLE `{$write_table}` MODIFY `{$column}` {$info['standard']}";
|
|
||||||
if (sql_query($sql)) {
|
|
||||||
$modified_count++;
|
|
||||||
} else {
|
|
||||||
$errors[] = "컬럼 수정 실패: {$column}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 버전 업데이트
|
|
||||||
$sql = "UPDATE {$g5['board_table']} SET bo_version = '" . BOARD_MIGRATION_VERSION . "' WHERE bo_table = '{$bo_table}'";
|
|
||||||
sql_query($sql);
|
|
||||||
|
|
||||||
$message = '마이그레이션이 완료되었습니다.';
|
|
||||||
if (!empty($errors)) {
|
|
||||||
$message .= ' (일부 오류: ' . implode(', ', $errors) . ')';
|
|
||||||
}
|
|
||||||
|
|
||||||
return [
|
|
||||||
'success' => true,
|
|
||||||
'message' => $message,
|
|
||||||
'added' => $added_count,
|
|
||||||
'modified' => $modified_count,
|
|
||||||
'errors' => $errors
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
// 모든 게시판 체크
|
|
||||||
function check_all_boards_migration()
|
|
||||||
{
|
|
||||||
global $g5;
|
|
||||||
|
|
||||||
check_and_add_bo_version();
|
|
||||||
|
|
||||||
$sql = "SELECT bo_table, bo_version FROM {$g5['board_table']}";
|
|
||||||
$result = sql_query($sql);
|
|
||||||
|
|
||||||
$boards_need_update = [];
|
|
||||||
|
|
||||||
while ($row = sql_fetch_array($result)) {
|
|
||||||
if ($row['bo_version'] != BOARD_MIGRATION_VERSION) {
|
|
||||||
$write_table = $g5['write_prefix'] . $row['bo_table'];
|
|
||||||
$comparison = compare_table_structure($write_table);
|
|
||||||
|
|
||||||
$boards_need_update[] = [
|
|
||||||
'bo_table' => $row['bo_table'],
|
|
||||||
'current_version' => $row['bo_version'],
|
|
||||||
'missing_columns' => count($comparison['missing']),
|
|
||||||
'modified_columns' => count($comparison['modified'])
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $boards_need_update;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 특정 게시판의 상세 차이점 확인
|
|
||||||
function get_board_migration_details($bo_table)
|
|
||||||
{
|
|
||||||
global $g5;
|
|
||||||
|
|
||||||
$write_table = $g5['write_prefix'] . $bo_table;
|
|
||||||
|
|
||||||
// 테이블 존재 확인
|
|
||||||
$sql = "SHOW TABLES LIKE '{$write_table}'";
|
|
||||||
$result = sql_query($sql);
|
|
||||||
if (sql_num_rows($result) == 0) {
|
|
||||||
return ['success' => false, 'message' => '테이블이 존재하지 않습니다.'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$comparison = compare_table_structure($write_table);
|
|
||||||
|
|
||||||
return [
|
|
||||||
'success' => true,
|
|
||||||
'bo_table' => $bo_table,
|
|
||||||
'missing_columns' => $comparison['missing'],
|
|
||||||
'modified_columns' => $comparison['modified']
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -3,7 +3,7 @@ th a {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
padding: 3px 10px;
|
padding: 3px 10px;
|
||||||
background: var(--theme-sub-500);
|
background: var(--theme-color-a);
|
||||||
color: #fff;
|
color: #fff;
|
||||||
margin: 5px 0 0;
|
margin: 5px 0 0;
|
||||||
}
|
}
|
||||||
|
|
@ -12,26 +12,33 @@ th a+a {
|
||||||
margin-top: 3px;
|
margin-top: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
html>body #container {
|
#wrap {
|
||||||
padding: 0;
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#container {
|
||||||
|
padding: 0 !important;
|
||||||
|
min-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrapper {
|
||||||
|
height: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
#container section.addon_config {
|
#container section.addon_config {
|
||||||
display: flex;
|
display: flex;
|
||||||
height: auto;
|
height: 100%;
|
||||||
|
padding: 8px;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
box-sizing: border-box;
|
|
||||||
margin-bottom: 0;
|
|
||||||
padding: 0;
|
|
||||||
width: calc(100% - 8px);
|
|
||||||
height: 100%
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.addon_config>nav {
|
.addon_config>nav {
|
||||||
min-width: 200px;
|
min-width: 200px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
background: var(--theme-gray-800);
|
border: 1px solid var(--theme-color-d);
|
||||||
|
border-radius: 4px;
|
||||||
overflow:hidden;
|
overflow:hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -41,13 +48,12 @@ html>body #container {
|
||||||
}
|
}
|
||||||
|
|
||||||
.addon_config>nav>a.selected {
|
.addon_config>nav>a.selected {
|
||||||
background: var(--theme-sub-300);
|
background: var(--theme-color-a);
|
||||||
color: var(--black);
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.addon_config>nav>span {
|
.addon_config>nav>span {
|
||||||
background: var(--theme-gray-500);
|
background: var(--theme-color-d);
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
line-height: 48px;
|
line-height: 48px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
|
@ -65,6 +71,10 @@ td a {
|
||||||
color: var(--theme-color-d);
|
color: var(--theme-color-d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.footer-copyright {
|
||||||
|
padding: 20px !important;
|
||||||
|
}
|
||||||
|
|
||||||
span.empty {
|
span.empty {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -23,7 +23,7 @@ $g5['title'] = "테마설정";
|
||||||
include_once "./admin.head.php";
|
include_once "./admin.head.php";
|
||||||
?>
|
?>
|
||||||
<script src="<?php echo G5_ADMIN_URL; ?>/js/theme.js"></script>
|
<script src="<?php echo G5_ADMIN_URL; ?>/js/theme.js"></script>
|
||||||
<div class="local_wr admin_theme">
|
<div class="local_wr">
|
||||||
<span class="btn_ov01"><span class="ov_txt">설치된 테마</span><span class="ov_num">
|
<span class="btn_ov01"><span class="ov_txt">설치된 테마</span><span class="ov_num">
|
||||||
<?php echo number_format($total_count); ?></span></span>
|
<?php echo number_format($total_count); ?></span></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
** 공통 변수, 상수, 코드
|
** 공통 변수, 상수, 코드
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
error_reporting(E_CORE_ERROR | E_COMPILE_ERROR | E_ERROR | E_PARSE | E_USER_ERROR);
|
error_reporting(E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_PARSE | E_USER_ERROR);
|
||||||
|
|
||||||
// 보안설정이나 프레임이 달라도 쿠키가 통하도록 설정
|
// 보안설정이나 프레임이 달라도 쿠키가 통하도록 설정
|
||||||
header('P3P: CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"');
|
header('P3P: CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"');
|
||||||
|
|
@ -420,10 +420,10 @@ if (file_exists($dbconfig_file)) {
|
||||||
<link rel="stylesheet" href="install/install.css">
|
<link rel="stylesheet" href="install/install.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<?php
|
<div id="ins_bar">
|
||||||
$RIGHT_MESSAGE = "Message";
|
<span id="bar_img">AVOCADO EDITION</span>
|
||||||
include G5_PATH . "/install/install_header.php";
|
<span id="bar_txt">Message</span>
|
||||||
?>
|
</div>
|
||||||
<h1>아보카도 에디션을 먼저 설치해주십시오.</h1>
|
<h1>아보카도 에디션을 먼저 설치해주십시오.</h1>
|
||||||
<div class="ins_inner">
|
<div class="ins_inner">
|
||||||
<p>다음 파일을 찾을 수 없습니다.</p>
|
<p>다음 파일을 찾을 수 없습니다.</p>
|
||||||
|
|
@ -462,10 +462,10 @@ if (!defined('G5_IS_ADMIN')) {
|
||||||
<link rel="stylesheet" href="<?= G5_URL ?>/install/install.css">
|
<link rel="stylesheet" href="<?= G5_URL ?>/install/install.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<?php
|
<div id="ins_bar">
|
||||||
$RIGHT_MESSAGE = "Message";
|
<span id="bar_img">AVOCADO EDITION</span>
|
||||||
include G5_PATH . "/install/install_header.php";
|
<span id="bar_txt">Message</span>
|
||||||
?>
|
</div>
|
||||||
<h1>아보카도 에디션 설정을 완료해주십시오.</h1>
|
<h1>아보카도 에디션 설정을 완료해주십시오.</h1>
|
||||||
<br />
|
<br />
|
||||||
<div class="ins_inner">
|
<div class="ins_inner">
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,55 +0,0 @@
|
||||||
@charset "utf-8";
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'SCDream';
|
|
||||||
font-weight: 900;
|
|
||||||
src: url(./fonts/SCDream9.otf);
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'SCDream';
|
|
||||||
font-weight: 800;
|
|
||||||
src: url(./fonts/SCDream8.otf);
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'SCDream';
|
|
||||||
font-weight: 700;
|
|
||||||
src: url(./fonts/SCDream7.otf);
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'SCDream';
|
|
||||||
font-weight: 600;
|
|
||||||
src: url(./fonts/SCDream6.otf);
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'SCDream';
|
|
||||||
font-weight: 500;
|
|
||||||
src: url(./fonts/SCDream5.otf);
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'SCDream';
|
|
||||||
font-weight: 400;
|
|
||||||
src: url(./fonts/SCDream4.otf);
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'SCDream';
|
|
||||||
font-weight: 300;
|
|
||||||
src: url(./fonts/SCDream3.otf);
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'SCDream';
|
|
||||||
font-weight: 200;
|
|
||||||
src: url(./fonts/SCDream2.otf);
|
|
||||||
}
|
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'SCDream';
|
|
||||||
font-weight: 100;
|
|
||||||
src: url(./fonts/SCDream1.otf);
|
|
||||||
}
|
|
||||||
|
|
@ -87,10 +87,9 @@ $html_class .= $_COOKIE['header_close'] == 'close' ? " close-header" : "";
|
||||||
include_once __DIR__ . "/_extra_font.php";
|
include_once __DIR__ . "/_extra_font.php";
|
||||||
|
|
||||||
if (defined('G5_IS_ADMIN')) {
|
if (defined('G5_IS_ADMIN')) {
|
||||||
// echo get_embed_file("css", G5_ADMIN_PATH . '/css/admin.css') . PHP_EOL;
|
echo get_embed_file("css", G5_ADMIN_PATH . '/css/admin.css') . PHP_EOL;
|
||||||
// echo get_embed_file("css", G5_ADMIN_PATH . '/css/admin.layout.css') . PHP_EOL;
|
echo get_embed_file("css", G5_ADMIN_PATH . '/css/admin.layout.css') . PHP_EOL;
|
||||||
// echo get_embed_file("css", G5_ADMIN_PATH . '/css/admin.amber.lib.css') . PHP_EOL;
|
echo get_embed_file("css", G5_ADMIN_PATH . '/css/admin.amber.lib.css') . PHP_EOL;
|
||||||
echo get_embed_file("css", G5_ADMIN_PATH . '/css/default.css') . PHP_EOL;
|
|
||||||
echo get_embed_file("css", G5_ADMIN_PATH . '/css/amberstone.cp.css') . PHP_EOL;
|
echo get_embed_file("css", G5_ADMIN_PATH . '/css/amberstone.cp.css') . PHP_EOL;
|
||||||
} else {
|
} else {
|
||||||
if (defined('G5_THEME_PATH') && file_exists(G5_THEME_PATH . "/css/default.css")) {
|
if (defined('G5_THEME_PATH') && file_exists(G5_THEME_PATH . "/css/default.css")) {
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
<?php
|
<?php
|
||||||
include_once "../config.php";
|
include_once "../config.php";
|
||||||
|
|
||||||
$theme_1 = "#ecc6c6";
|
$theme_1 = "#BEBE8E";
|
||||||
$theme_2 = "#e8b0ae";
|
$theme_2 = "#7F7F5F";
|
||||||
$theme_3 = "#d6817e";
|
$theme_3 = "#7C7C4C";
|
||||||
|
|
||||||
$theme_4 = "#b0c4de";
|
$theme_4 = "#b0c4de";
|
||||||
$theme_5 = "#88a9db";
|
$theme_5 = "#727F99";
|
||||||
$theme_6 = "#779bdb";
|
$theme_6 = "#7488B2";
|
||||||
|
|
||||||
$title = G5_VERSION . " 라이센스 확인 1/3";
|
$title = G5_VERSION . " 라이센스 확인 1/3";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,11 @@
|
||||||
@charset "utf-8";
|
@charset "utf-8";
|
||||||
:root {
|
/* SIR 지운아빠 */
|
||||||
--bg-color: #181926;
|
|
||||||
--text-color: #CAD3F5;
|
|
||||||
--accent-color: #ffbf00;
|
|
||||||
--border-color: #6E738D;
|
|
||||||
--button-bg-color: #ffbf00;
|
|
||||||
--button-bg-hover-color: #CAD3F5;
|
|
||||||
--button-text-color: #000;
|
|
||||||
--header-bg-color: #24273A;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 공통 */
|
/* 공통 */
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
background: var(--bg-color);
|
background: url('img/pat01.png') #edf0f4;
|
||||||
color: var(--text-color);
|
|
||||||
font-size: 14px;
|
|
||||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';
|
|
||||||
font-size: 0.75em;
|
font-size: 0.75em;
|
||||||
font-family: dotum, helvetica
|
font-family: dotum, helvetica
|
||||||
}
|
}
|
||||||
|
|
@ -37,8 +25,8 @@ label {
|
||||||
#ins_bar {
|
#ins_bar {
|
||||||
margin: 0 0 50px;
|
margin: 0 0 50px;
|
||||||
padding: 20px 30px;
|
padding: 20px 30px;
|
||||||
background: var(--header-bg-color);
|
background: #383838;
|
||||||
color: var(--text-color);
|
color: #a1a4a7;
|
||||||
font-family: tahoma, helvetica;
|
font-family: tahoma, helvetica;
|
||||||
font-size: 1.500em;
|
font-size: 1.500em;
|
||||||
zoom: 1
|
zoom: 1
|
||||||
|
|
@ -68,9 +56,9 @@ h1 {
|
||||||
.ins_inner {
|
.ins_inner {
|
||||||
margin: 0 30px 50px;
|
margin: 0 30px 50px;
|
||||||
padding: 20px 30px;
|
padding: 20px 30px;
|
||||||
border: 1px solid var(--border-color);
|
border-right: 1px solid #dde4e9;
|
||||||
border-radius: 4px;
|
border-bottom: 1px solid #dde4e9;
|
||||||
background: transparent
|
background: #fff
|
||||||
}
|
}
|
||||||
|
|
||||||
.ins_inner ul {
|
.ins_inner ul {
|
||||||
|
|
@ -88,8 +76,7 @@ h1 {
|
||||||
}
|
}
|
||||||
|
|
||||||
.ins_inner p strong {
|
.ins_inner p strong {
|
||||||
font-size: 1.5em;
|
color: red
|
||||||
color: var(--accent-color)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.ins_inner .inner_btn {
|
.ins_inner .inner_btn {
|
||||||
|
|
@ -101,32 +88,11 @@ h1 {
|
||||||
.ins_inner .inner_btn input {
|
.ins_inner .inner_btn input {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 10px 20px;
|
padding: 10px 20px;
|
||||||
background: var(--button-bg-color);
|
background: #BEBE8E;
|
||||||
color: var(--button-text-color);
|
color: #fff;
|
||||||
border-radius: 4px;
|
|
||||||
text-decoration: none
|
text-decoration: none
|
||||||
}
|
}
|
||||||
|
|
||||||
.ins_inner .inner_btn a:hover,
|
|
||||||
.ins_inner .inner_btn input:hover,
|
|
||||||
.ins_inner .inner_btn button:hover {
|
|
||||||
background: var(--button-bg-hover-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ins_inner pre {
|
|
||||||
font-size: 12px;
|
|
||||||
margin: 10px 0;
|
|
||||||
padding: 10px;
|
|
||||||
overflow: auto
|
|
||||||
}
|
|
||||||
|
|
||||||
.ins_inner pre::before {
|
|
||||||
content: "[AvocadoAmber ~] ";
|
|
||||||
display: inline;
|
|
||||||
height: 0;
|
|
||||||
overflow: hidden
|
|
||||||
}
|
|
||||||
|
|
||||||
.ins_inner .inner_btn input {
|
.ins_inner .inner_btn input {
|
||||||
border: 0;
|
border: 0;
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
|
|
@ -148,12 +114,13 @@ h1 {
|
||||||
.ins_frm th,
|
.ins_frm th,
|
||||||
.ins_frm td {
|
.ins_frm td {
|
||||||
padding: 5px 3px;
|
padding: 5px 3px;
|
||||||
border: 1px solid var(--border-color);
|
border-top: 1px solid #dde4e9;
|
||||||
|
border-bottom: 1px solid #dde4e9
|
||||||
}
|
}
|
||||||
|
|
||||||
.ins_frm th {
|
.ins_frm th {
|
||||||
width: 25%;
|
width: 25%;
|
||||||
background: var(--header-bg-color)
|
background: #f2f5f9
|
||||||
}
|
}
|
||||||
|
|
||||||
.ins_frm td span {
|
.ins_frm td span {
|
||||||
|
|
@ -163,18 +130,9 @@ h1 {
|
||||||
letter-spacing: -0.1em
|
letter-spacing: -0.1em
|
||||||
}
|
}
|
||||||
|
|
||||||
.ins_frm input {
|
|
||||||
background: transparent;
|
|
||||||
padding: 4px 8px;
|
|
||||||
border: 1px solid var(--border-color);
|
|
||||||
color: var(--text-color);
|
|
||||||
font-size: 1.25em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ins_ta {
|
.ins_ta {
|
||||||
padding: 5px 0;
|
padding: 5px 0;
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid #dde4e9;
|
||||||
border-radius: 4px;
|
|
||||||
text-align: center
|
text-align: center
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -183,13 +141,11 @@ h1 {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
width: 99%;
|
width: 99%;
|
||||||
height: 250px;
|
height: 250px;
|
||||||
color: var(--text-color);
|
|
||||||
background: transparent
|
background: transparent
|
||||||
}
|
}
|
||||||
|
|
||||||
.ins_license {
|
.ins_license {
|
||||||
background: var(--bg-color);
|
background: #f2f5f9
|
||||||
color: var(--text-color)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ins_ft {
|
#ins_ft {
|
||||||
|
|
@ -212,8 +168,8 @@ h1 {
|
||||||
/* extra */
|
/* extra */
|
||||||
pre {
|
pre {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
background: var(--bg-color);
|
background: #0d1117;
|
||||||
color: var(--text-color);
|
color: #f0f6fc;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
user-select: all;
|
user-select: all;
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,12 @@ if (!$title)
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<?php
|
|
||||||
include "./install_header.php";
|
<div id="ins_bar">
|
||||||
?>
|
<span id="bar_img">AVOCADO EDITION</span>
|
||||||
|
<span id="bar_txt">INSTALLATION</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
// 파일이 존재한다면 설치할 수 없다.
|
// 파일이 존재한다면 설치할 수 없다.
|
||||||
$dbconfig_file = $data_path . '/' . G5_DBCONFIG_FILE;
|
$dbconfig_file = $data_path . '/' . G5_DBCONFIG_FILE;
|
||||||
|
|
@ -36,7 +39,7 @@ if (!$title)
|
||||||
<?php
|
<?php
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
$exists_data_dir = true;
|
$exists_data_dir = true;
|
||||||
// data 디렉토리가 있는가?
|
// data 디렉토리가 있는가?
|
||||||
if (!is_dir($data_path)) {
|
if (!is_dir($data_path)) {
|
||||||
|
|
@ -55,11 +58,11 @@ if (!$title)
|
||||||
<?php
|
<?php
|
||||||
$exists_data_dir = false;
|
$exists_data_dir = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$write_data_dir = true;
|
|
||||||
|
|
||||||
// check datadir and css path
|
|
||||||
|
|
||||||
|
$write_data_dir = true;
|
||||||
|
|
||||||
|
// check datadir and css path
|
||||||
|
|
||||||
if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
|
if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') {
|
||||||
$sapi_type = php_sapi_name();
|
$sapi_type = php_sapi_name();
|
||||||
if (substr($sapi_type, 0, 3) == 'cgi') {
|
if (substr($sapi_type, 0, 3) == 'cgi') {
|
||||||
|
|
@ -67,33 +70,27 @@ if (!$title)
|
||||||
?>
|
?>
|
||||||
<div class="ins_inner">
|
<div class="ins_inner">
|
||||||
<p>
|
<p>
|
||||||
<?php echo G5_DATA_DIR ?> 디렉토리의 퍼미션을 705로 변경하여 주십시오.<br>
|
<b><?php echo G5_DATA_DIR ?> 디렉토리의 퍼미션을 705로 변경하여 주십시오.</b><br>
|
||||||
아래 내용을 클릭하면 명령어가 전체 선택됩니다.<br>
|
<pre>#> chmod 705 <?php echo G5_DATA_DIR ?></pre>
|
||||||
<pre>chmod 705 <?php echo G5_DATA_DIR ?></pre>
|
또는<br>
|
||||||
또는<br>
|
<pre>#> chmod uo+rx <?php echo G5_DATA_DIR ?></pre><br>
|
||||||
<pre>chmod uo+rx <?php echo G5_DATA_DIR ?></pre><br>
|
위 명령 실행후 브라우저를 새로고침 하십시오.
|
||||||
위 명령 실행후 브라우저를 새로고침 하십시오.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
$write_data_dir = false;
|
$write_data_dir = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 생성 시도 후 권한이 없으면 안내
|
|
||||||
if (!file_exists($data_path)) {
|
|
||||||
@mkdir($data_path, G5_DIR_PERMISSION);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(is_readable($data_path) && is_writeable($data_path) && is_executable($data_path))) {
|
if (!(is_readable($data_path) && is_writeable($data_path) && is_executable($data_path))) {
|
||||||
?>
|
?>
|
||||||
<div class="ins_inner">
|
<div class="ins_inner">
|
||||||
<p>
|
<p>
|
||||||
<?php echo G5_DATA_DIR ?> 디렉토리의 퍼미션을 707로 변경하여 주십시오.<br>
|
<b><?php echo G5_DATA_DIR ?> 디렉토리의 퍼미션을 707로 변경하여 주십시오.</b><br>
|
||||||
아래 내용을 클릭하면 명령어가 전체 선택됩니다.<br>
|
<pre>#> chmod 707 <?php echo G5_DATA_DIR ?></pre>
|
||||||
<pre>chmod 707 <?php echo G5_DATA_DIR ?></pre>
|
또는<br>
|
||||||
또는<br>
|
<pre>#> chmod uo+rwx <?php echo G5_DATA_DIR ?></pre><br>
|
||||||
<pre>chmod uo+rwx <?php echo G5_DATA_DIR ?></pre><br>
|
위 명령 실행후 브라우저를 새로고침 하십시오.
|
||||||
위 명령 실행후 브라우저를 새로고침 하십시오.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
|
|
@ -104,12 +101,11 @@ if (!$title)
|
||||||
?>
|
?>
|
||||||
<div class="ins_inner">
|
<div class="ins_inner">
|
||||||
<p>
|
<p>
|
||||||
<?php echo G5_CSS_DIR ?> 디렉토리의 퍼미션을 707로 변경하여 주십시오.<br>
|
<b><?php echo G5_CSS_DIR ?> 디렉토리의 퍼미션을 707로 변경하여 주십시오.</b><br>
|
||||||
아래 내용을 클릭하면 명령어가 전체 선택됩니다.<br>
|
<pre>#> chmod 707 <?php echo G5_CSS_DIR ?></pre>
|
||||||
<pre>chmod 707 <?php echo G5_CSS_DIR ?></pre>
|
또는<br>
|
||||||
또는<br>
|
<pre>#> chmod uo+rwx <?php echo G5_CSS_DIR ?></pre><br>
|
||||||
<pre>chmod uo+rwx <?php echo G5_CSS_DIR ?></pre><br>
|
위 명령 실행후 브라우저를 새로고침 하십시오.
|
||||||
위 명령 실행후 브라우저를 새로고침 하십시오.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
?><div id="ins_ft">
|
?><div id="ins_ft">
|
||||||
<strong>AVOCADO EDITION: AMBER</strong>
|
<strong>AVOCADO EDITION</strong>
|
||||||
<p>GPL! OPEN SOURCE GNUBOARD</p>
|
<p>GPL! OPEN SOURCE GNUBOARD</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ if (!isset($_POST['agree']) || $_POST['agree'] != '동의함') {
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<strong class="st_strong">이미 <?php echo G5_VERSION ?>를 설치한 경우, 재설치 시 기존 데이터베이스를 잃어버리므로 주의해 주시기 바랍니다!</strong><br>
|
<strong class="st_strong">주의! 이미 <?php echo G5_VERSION ?>이 존재한다면 DB 자료가 망실되므로 주의하십시오.</strong><br>
|
||||||
주의사항을 이해했으며, 아보카도 에디션 설치를 계속 진행하시려면 다음을 누르십시오.
|
주의사항을 이해했으며, 아보카도 에디션 설치를 계속 진행하시려면 다음을 누르십시오.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ $admin_id = $_POST['admin_id'];
|
||||||
$admin_pass = $_POST['admin_pass'];
|
$admin_pass = $_POST['admin_pass'];
|
||||||
$admin_name = $_POST['admin_name'];
|
$admin_name = $_POST['admin_name'];
|
||||||
$admin_email = $_POST['admin_email'];
|
$admin_email = $_POST['admin_email'];
|
||||||
|
$absolute_password = $_POST['absolute_password'];
|
||||||
$table_url = $_POST['table_url'];
|
$table_url = $_POST['table_url'];
|
||||||
|
|
||||||
$dblink = sql_connect($mysql_host, $mysql_user, $mysql_pass, $mysql_db);
|
$dblink = sql_connect($mysql_host, $mysql_user, $mysql_pass, $mysql_db);
|
||||||
|
|
@ -272,7 +273,6 @@ unset($row);
|
||||||
|
|
||||||
// 디렉토리 생성
|
// 디렉토리 생성
|
||||||
$dir_arr = array(
|
$dir_arr = array(
|
||||||
$data_path . '/css',
|
|
||||||
$data_path . '/cache',
|
$data_path . '/cache',
|
||||||
$data_path . '/editor',
|
$data_path . '/editor',
|
||||||
$data_path . '/file',
|
$data_path . '/file',
|
||||||
|
|
@ -366,9 +366,16 @@ EOD;
|
||||||
//-------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
// CSS 설정 파일 생성
|
// CSS 설정 파일 생성
|
||||||
$css_data_path = $data_path . "/css";
|
$css_data_path = $g5_path['path'] . "/css";
|
||||||
|
$css_data_url = $g5_path['url'] . "/css";
|
||||||
|
|
||||||
$file = $css_data_path . '/_design.config.css';
|
@mkdir($css_data_path, G5_DIR_PERMISSION);
|
||||||
|
@chmod($css_data_path, G5_DIR_PERMISSION);
|
||||||
|
|
||||||
|
$file = '../' . G5_CSS_DIR . '/_design.config.css';
|
||||||
|
$file_path = $css_data_path . '/_design.config.css';
|
||||||
|
|
||||||
|
@unlink($file_path);
|
||||||
$f = @fopen($file, 'a');
|
$f = @fopen($file, 'a');
|
||||||
?>
|
?>
|
||||||
<li style="display:none;">
|
<li style="display:none;">
|
||||||
|
|
@ -396,8 +403,6 @@ EOD;
|
||||||
sql_query(" set time_zone = '" . G5_TIMEZONE . "'");
|
sql_query(" set time_zone = '" . G5_TIMEZONE . "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
$g5['css_table'] = $table_prefix . 'css_config';
|
|
||||||
|
|
||||||
ob_start();
|
ob_start();
|
||||||
include "../adm/design_form_css.php";
|
include "../adm/design_form_css.php";
|
||||||
$css = ob_get_contents();
|
$css = ob_get_contents();
|
||||||
|
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
<?php
|
|
||||||
?><div id="ins_bar"><span id="bar_img">AVOCADO EDITION: AMBER</span><span id="bar_txt"><?php echo $RIGHT_MESSAGE ? $RIGHT_MESSAGE : "INSTALLATION" ?></span></div>
|
|
||||||
|
|
@ -33,7 +33,7 @@ body {
|
||||||
right: 0;
|
right: 0;
|
||||||
height: 50%;
|
height: 50%;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
border-top: 8px solid #ffbf00;
|
border-top: 8px solid #ecc6c6;
|
||||||
background: url('./img/bak_admin_login_top_pattern.png');
|
background: url('./img/bak_admin_login_top_pattern.png');
|
||||||
z-index: 0;
|
z-index: 0;
|
||||||
}
|
}
|
||||||
|
|
@ -84,7 +84,7 @@ body {
|
||||||
|
|
||||||
#login_title em {
|
#login_title em {
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
color: #ffbf00;
|
color: #ecc6c6;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
}
|
}
|
||||||
|
|
@ -119,7 +119,7 @@ body {
|
||||||
width: 500px;
|
width: 500px;
|
||||||
height: 260px;
|
height: 260px;
|
||||||
|
|
||||||
border-top: 5px solid #ffbf00;
|
border-top: 5px solid #ecc6c6;
|
||||||
|
|
||||||
transform: translateX(-50%) translateY(-50%);
|
transform: translateX(-50%) translateY(-50%);
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
|
@ -173,7 +173,7 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
#mb_login fieldset.input input:focus {
|
#mb_login fieldset.input input:focus {
|
||||||
border: 2px solid #ffbf00;
|
border: 2px solid #ecc6c6;
|
||||||
}
|
}
|
||||||
|
|
||||||
#mb_login fieldset.input label {
|
#mb_login fieldset.input label {
|
||||||
|
|
@ -204,7 +204,7 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
#mb_login fieldset.input input:focus+label:before {
|
#mb_login fieldset.input input:focus+label:before {
|
||||||
color: #ffbf00;
|
color: #ecc6c6;
|
||||||
}
|
}
|
||||||
|
|
||||||
#mb_login fieldset.input label.login_id:before {
|
#mb_login fieldset.input label.login_id:before {
|
||||||
|
|
@ -249,7 +249,7 @@ body {
|
||||||
display: block;
|
display: block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background: #ffbf00;
|
background: #ecc6c6;
|
||||||
font-family: 'Noto Sans KR', sans-serif;
|
font-family: 'Noto Sans KR', sans-serif;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
border: none;
|
border: none;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue