Fix first install css generate error and adjust admin page
This commit is contained in:
parent
058f22c35b
commit
b01b33978f
26 changed files with 2325 additions and 558 deletions
|
|
@ -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" /></a>
|
<a href="<?php echo G5_ADMIN_URL ?>"><img src="<?= G5_ADMIN_URL ?>/img/logo.png" alt="Avocado Edition: Amber" /></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,7 +65,8 @@ include_once G5_PATH . '/head.sub.php';
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
<section id="wrapper">
|
<section id="wrapper">
|
||||||
<aside id="page_top">
|
<div class="admin-content">
|
||||||
<h2><?php echo $g5['title'] ?></h2>
|
<aside id="page_top">
|
||||||
</aside>
|
<h2><?php echo $g5['title'] ?></h2>
|
||||||
<div id="container">
|
</aside>
|
||||||
|
<div id="container">
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
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>
|
||||||
|
|
@ -11,6 +12,17 @@ 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;
|
||||||
|
|
|
||||||
|
|
@ -99,8 +99,10 @@
|
||||||
* @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();
|
||||||
|
|
@ -263,7 +265,8 @@ $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 == '') {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,8 +71,7 @@ $colspan = 11;
|
||||||
<?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) { ?>
|
<?php if (count($boards_need_update) > 0) { ?>
|
||||||
<span style="color: #ff6b6b; font-weight: bold; margin-left: 20px;">
|
<span style="font-weight: bold; margin-left: 20px;">
|
||||||
<span class="material-icons" style="vertical-align: middle; font-size: 18px;">warning</span>
|
|
||||||
업데이트 필요: <?php echo count($boards_need_update) ?>개
|
업데이트 필요: <?php echo count($boards_need_update) ?>개
|
||||||
</span>
|
</span>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
|
|
@ -116,12 +115,12 @@ $colspan = 11;
|
||||||
<th scope="col" style="width:100px;"><?php echo subject_sort_link('bo_table') ?>TABLE</a></th>
|
<th scope="col" style="width:100px;"><?php echo subject_sort_link('bo_table') ?>TABLE</a></th>
|
||||||
<th scope="col" style="width:150px;"><?php echo subject_sort_link('bo_skin', '', 'desc') ?>스킨</a></th>
|
<th scope="col" style="width:150px;"><?php echo subject_sort_link('bo_skin', '', 'desc') ?>스킨</a></th>
|
||||||
<th scope="col"><?php echo subject_sort_link('bo_subject') ?>제목</a></th>
|
<th scope="col"><?php echo subject_sort_link('bo_subject') ?>제목</a></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: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:90px;">관리</th>
|
<th scope="col" style="width:90px;">관리</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
|
@ -167,13 +166,6 @@ $colspan = 11;
|
||||||
<input type="text" name="bo_subject[<?php echo $i ?>]" value="<?php echo get_text($row['bo_subject']) ?>"
|
<input type="text" name="bo_subject[<?php echo $i ?>]" value="<?php echo get_text($row['bo_subject']) ?>"
|
||||||
id="bo_subject_<?php echo $i ?>" required class="required frm_input bo_subject full_input" size="25">
|
id="bo_subject_<?php echo $i ?>" required class="required frm_input bo_subject full_input" size="25">
|
||||||
</td>
|
</td>
|
||||||
<td>
|
|
||||||
<?php if ($need_migration) { ?>
|
|
||||||
<span style="color: #ff6b6b; font-weight: bold;">업데이트 필요</span>
|
|
||||||
<?php } else { ?>
|
|
||||||
<span style="color: #51cf66;"><?php echo htmlspecialchars($row['bo_version']); ?></span>
|
|
||||||
<?php } ?>
|
|
||||||
</td>
|
|
||||||
<td>
|
<td>
|
||||||
<?php echo get_member_level_select('bo_list_level[' . $i . ']', 1, 10, $row['bo_list_level']) ?>
|
<?php echo get_member_level_select('bo_list_level[' . $i . ']', 1, 10, $row['bo_list_level']) ?>
|
||||||
</td>
|
</td>
|
||||||
|
|
@ -189,12 +181,18 @@ $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) { ?>
|
<?php if ($need_migration) { ?>
|
||||||
<br><a href="#" class="btn_migrate" data-bo-table="<?php echo $row['bo_table'] ?>"
|
<br><a href="#" class="btn_migrate" data-bo-table="<?php echo $row['bo_table'] ?>">업데이트</a>
|
||||||
style="color: #ff6b6b;">업데이트</a>
|
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
@ -218,7 +216,7 @@ $colspan = 11;
|
||||||
<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) { ?>
|
<?php if (count($boards_need_update) > 0) { ?>
|
||||||
<div class="btn ty4" style="background-color: #ff6b6b;">
|
<div class="btn ty4">
|
||||||
<span class="material-icons">update</span>
|
<span class="material-icons">update</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>
|
||||||
|
|
@ -279,7 +277,6 @@ $colspan = 11;
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
success: function (response) {
|
success: function (response) {
|
||||||
if (response.success) {
|
if (response.success) {
|
||||||
alert(response.message + '\n업데이트된 컬럼: ' + response.updated + '개');
|
|
||||||
location.reload();
|
location.reload();
|
||||||
} else {
|
} else {
|
||||||
alert('오류: ' + response.message);
|
alert('오류: ' + response.message);
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,11 @@ if ($_POST['act_button'] == "단일마이그레이션") {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 선택 마이그레이션 처리
|
// 선택 마이그레이션 처리
|
||||||
|
|
||||||
|
if (!count($_POST['chk'])) {
|
||||||
|
alert($_POST['act_button'] . " 하실 항목을 하나 이상 체크하세요.");
|
||||||
|
}
|
||||||
|
|
||||||
if ($_POST['act_button'] == "선택마이그레이션") {
|
if ($_POST['act_button'] == "선택마이그레이션") {
|
||||||
auth_check($auth[$sub_menu], 'w');
|
auth_check($auth[$sub_menu], 'w');
|
||||||
|
|
||||||
|
|
@ -52,20 +57,7 @@ if ($_POST['act_button'] == "선택마이그레이션") {
|
||||||
$messages[] = "{$bo_table}: 실패 - {$result['message']}";
|
$messages[] = "{$bo_table}: 실패 - {$result['message']}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if ($_POST['act_button'] == "선택수정") {
|
||||||
$alert_message = "마이그레이션 완료\n\n";
|
|
||||||
$alert_message .= "성공: {$success_count}개\n";
|
|
||||||
$alert_message .= "실패: {$fail_count}개\n\n";
|
|
||||||
$alert_message .= implode("\n", $messages);
|
|
||||||
|
|
||||||
alert($alert_message, './board_list.php?' . $qstr);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!count($_POST['chk'])) {
|
|
||||||
alert($_POST['act_button'] . " 하실 항목을 하나 이상 체크하세요.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_POST['act_button'] == "선택수정") {
|
|
||||||
|
|
||||||
auth_check($auth[$sub_menu], 'w');
|
auth_check($auth[$sub_menu], 'w');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ if (!defined('_GNUBOARD_'))
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
// 현재 마이그레이션 버전
|
// 현재 마이그레이션 버전
|
||||||
define('BOARD_MIGRATION_VERSION', '2.0.0');
|
define('BOARD_MIGRATION_VERSION', '2.0.1');
|
||||||
|
|
||||||
// 표준 게시판 테이블 구조 정의
|
// 표준 게시판 테이블 구조 정의
|
||||||
function get_standard_board_structure()
|
function get_standard_board_structure()
|
||||||
|
|
@ -91,7 +91,32 @@ function check_and_add_bo_version()
|
||||||
return false;
|
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)
|
function get_current_table_structure($table_name)
|
||||||
{
|
{
|
||||||
$sql = "SHOW COLUMNS FROM `{$table_name}`";
|
$sql = "SHOW COLUMNS FROM `{$table_name}`";
|
||||||
|
|
@ -133,21 +158,38 @@ function get_current_table_structure($table_name)
|
||||||
return $structure;
|
return $structure;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 테이블 구조 비교
|
// 테이블 구조 비교 (누락 및 변경된 컬럼 모두 감지)
|
||||||
function compare_table_structure($table_name)
|
function compare_table_structure($table_name)
|
||||||
{
|
{
|
||||||
$standard = get_standard_board_structure();
|
$standard = get_standard_board_structure();
|
||||||
$current = get_current_table_structure($table_name);
|
$current = get_current_table_structure($table_name);
|
||||||
|
|
||||||
$missing_columns = [];
|
$missing_columns = []; // 누락된 컬럼
|
||||||
|
$modified_columns = []; // 속성이 다른 컬럼
|
||||||
|
|
||||||
foreach ($standard as $column => $definition) {
|
foreach ($standard as $column => $definition) {
|
||||||
if (!isset($current[$column])) {
|
if (!isset($current[$column])) {
|
||||||
|
// 컬럼이 존재하지 않음
|
||||||
$missing_columns[$column] = $definition;
|
$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_columns;
|
return [
|
||||||
|
'missing' => $missing_columns,
|
||||||
|
'modified' => $modified_columns
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 게시판 테이블 마이그레이션 실행
|
// 게시판 테이블 마이그레이션 실행
|
||||||
|
|
@ -164,22 +206,44 @@ function migrate_board_table($bo_table)
|
||||||
return ['success' => false, 'message' => '테이블이 존재하지 않습니다.'];
|
return ['success' => false, 'message' => '테이블이 존재하지 않습니다.'];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 누락된 컬럼 확인
|
// 누락 및 변경된 컬럼 확인
|
||||||
$missing_columns = compare_table_structure($write_table);
|
$comparison = compare_table_structure($write_table);
|
||||||
|
$missing_columns = $comparison['missing'];
|
||||||
|
$modified_columns = $comparison['modified'];
|
||||||
|
|
||||||
if (empty($missing_columns)) {
|
if (empty($missing_columns) && empty($modified_columns)) {
|
||||||
// 버전 업데이트만 수행
|
// 버전 업데이트만 수행
|
||||||
$sql = "UPDATE {$g5['board_table']} SET bo_version = '" . BOARD_MIGRATION_VERSION . "' WHERE bo_table = '{$bo_table}'";
|
$sql = "UPDATE {$g5['board_table']} SET bo_version = '" . BOARD_MIGRATION_VERSION . "' WHERE bo_table = '{$bo_table}'";
|
||||||
sql_query($sql);
|
sql_query($sql);
|
||||||
return ['success' => true, 'message' => '이미 최신 버전입니다.', 'updated' => 0];
|
return [
|
||||||
|
'success' => true,
|
||||||
|
'message' => '이미 최신 버전입니다.',
|
||||||
|
'added' => 0,
|
||||||
|
'modified' => 0
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 컬럼 추가
|
$added_count = 0;
|
||||||
$updated = 0;
|
$modified_count = 0;
|
||||||
|
$errors = [];
|
||||||
|
|
||||||
|
// 누락된 컬럼 추가
|
||||||
foreach ($missing_columns as $column => $definition) {
|
foreach ($missing_columns as $column => $definition) {
|
||||||
$sql = "ALTER TABLE `{$write_table}` ADD `{$column}` {$definition}";
|
$sql = "ALTER TABLE `{$write_table}` ADD `{$column}` {$definition}";
|
||||||
if (sql_query($sql)) {
|
if (sql_query($sql)) {
|
||||||
$updated++;
|
$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}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -187,7 +251,18 @@ function migrate_board_table($bo_table)
|
||||||
$sql = "UPDATE {$g5['board_table']} SET bo_version = '" . BOARD_MIGRATION_VERSION . "' WHERE bo_table = '{$bo_table}'";
|
$sql = "UPDATE {$g5['board_table']} SET bo_version = '" . BOARD_MIGRATION_VERSION . "' WHERE bo_table = '{$bo_table}'";
|
||||||
sql_query($sql);
|
sql_query($sql);
|
||||||
|
|
||||||
return ['success' => true, 'message' => '마이그레이션이 완료되었습니다.', 'updated' => $updated];
|
$message = '마이그레이션이 완료되었습니다.';
|
||||||
|
if (!empty($errors)) {
|
||||||
|
$message .= ' (일부 오류: ' . implode(', ', $errors) . ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'success' => true,
|
||||||
|
'message' => $message,
|
||||||
|
'added' => $added_count,
|
||||||
|
'modified' => $modified_count,
|
||||||
|
'errors' => $errors
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 모든 게시판 체크
|
// 모든 게시판 체크
|
||||||
|
|
@ -205,15 +280,40 @@ function check_all_boards_migration()
|
||||||
while ($row = sql_fetch_array($result)) {
|
while ($row = sql_fetch_array($result)) {
|
||||||
if ($row['bo_version'] != BOARD_MIGRATION_VERSION) {
|
if ($row['bo_version'] != BOARD_MIGRATION_VERSION) {
|
||||||
$write_table = $g5['write_prefix'] . $row['bo_table'];
|
$write_table = $g5['write_prefix'] . $row['bo_table'];
|
||||||
$missing = compare_table_structure($write_table);
|
$comparison = compare_table_structure($write_table);
|
||||||
|
|
||||||
$boards_need_update[] = [
|
$boards_need_update[] = [
|
||||||
'bo_table' => $row['bo_table'],
|
'bo_table' => $row['bo_table'],
|
||||||
'current_version' => $row['bo_version'],
|
'current_version' => $row['bo_version'],
|
||||||
'missing_columns' => count($missing)
|
'missing_columns' => count($comparison['missing']),
|
||||||
|
'modified_columns' => count($comparison['modified'])
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $boards_need_update;
|
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-color-a);
|
background: var(--theme-sub-500);
|
||||||
color: #fff;
|
color: #fff;
|
||||||
margin: 5px 0 0;
|
margin: 5px 0 0;
|
||||||
}
|
}
|
||||||
|
|
@ -12,33 +12,26 @@ th a+a {
|
||||||
margin-top: 3px;
|
margin-top: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#wrap {
|
html>body #container {
|
||||||
height: 100%;
|
padding: 0;
|
||||||
}
|
|
||||||
|
|
||||||
#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: 100%;
|
height: auto;
|
||||||
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;
|
||||||
border: 1px solid var(--theme-color-d);
|
background: var(--theme-gray-800);
|
||||||
border-radius: 4px;
|
|
||||||
overflow:hidden;
|
overflow:hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -48,12 +41,13 @@ th a+a {
|
||||||
}
|
}
|
||||||
|
|
||||||
.addon_config>nav>a.selected {
|
.addon_config>nav>a.selected {
|
||||||
background: var(--theme-color-a);
|
background: var(--theme-sub-300);
|
||||||
|
color: var(--black);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.addon_config>nav>span {
|
.addon_config>nav>span {
|
||||||
background: var(--theme-color-d);
|
background: var(--theme-gray-500);
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
line-height: 48px;
|
line-height: 48px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
|
@ -71,10 +65,6 @@ 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;
|
||||||
|
|
|
||||||
1809
AvocadoAmber/adm/css/default.css
Normal file
1809
AvocadoAmber/adm/css/default.css
Normal file
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">
|
<div class="local_wr admin_theme">
|
||||||
<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_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_PARSE | E_USER_ERROR);
|
error_reporting(E_CORE_ERROR | 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"');
|
||||||
|
|
@ -422,7 +422,7 @@ if (file_exists($dbconfig_file)) {
|
||||||
<body>
|
<body>
|
||||||
<?php
|
<?php
|
||||||
$RIGHT_MESSAGE = "Message";
|
$RIGHT_MESSAGE = "Message";
|
||||||
include_once "./install/install_header.php";
|
include G5_PATH . "/install/install_header.php";
|
||||||
?>
|
?>
|
||||||
<h1>아보카도 에디션을 먼저 설치해주십시오.</h1>
|
<h1>아보카도 에디션을 먼저 설치해주십시오.</h1>
|
||||||
<div class="ins_inner">
|
<div class="ins_inner">
|
||||||
|
|
@ -464,7 +464,7 @@ if (!defined('G5_IS_ADMIN')) {
|
||||||
<body>
|
<body>
|
||||||
<?php
|
<?php
|
||||||
$RIGHT_MESSAGE = "Message";
|
$RIGHT_MESSAGE = "Message";
|
||||||
include_once "./install/install_header.php";
|
include G5_PATH . "/install/install_header.php";
|
||||||
?>
|
?>
|
||||||
<h1>아보카도 에디션 설정을 완료해주십시오.</h1>
|
<h1>아보카도 에디션 설정을 완료해주십시오.</h1>
|
||||||
<br />
|
<br />
|
||||||
|
|
|
||||||
BIN
AvocadoAmber/css/fonts/SCDream1.otf
Normal file
BIN
AvocadoAmber/css/fonts/SCDream1.otf
Normal file
Binary file not shown.
BIN
AvocadoAmber/css/fonts/SCDream2.otf
Normal file
BIN
AvocadoAmber/css/fonts/SCDream2.otf
Normal file
Binary file not shown.
BIN
AvocadoAmber/css/fonts/SCDream3.otf
Normal file
BIN
AvocadoAmber/css/fonts/SCDream3.otf
Normal file
Binary file not shown.
BIN
AvocadoAmber/css/fonts/SCDream4.otf
Normal file
BIN
AvocadoAmber/css/fonts/SCDream4.otf
Normal file
Binary file not shown.
BIN
AvocadoAmber/css/fonts/SCDream5.otf
Normal file
BIN
AvocadoAmber/css/fonts/SCDream5.otf
Normal file
Binary file not shown.
BIN
AvocadoAmber/css/fonts/SCDream6.otf
Normal file
BIN
AvocadoAmber/css/fonts/SCDream6.otf
Normal file
Binary file not shown.
BIN
AvocadoAmber/css/fonts/SCDream7.otf
Normal file
BIN
AvocadoAmber/css/fonts/SCDream7.otf
Normal file
Binary file not shown.
BIN
AvocadoAmber/css/fonts/SCDream8.otf
Normal file
BIN
AvocadoAmber/css/fonts/SCDream8.otf
Normal file
Binary file not shown.
BIN
AvocadoAmber/css/fonts/SCDream9.otf
Normal file
BIN
AvocadoAmber/css/fonts/SCDream9.otf
Normal file
Binary file not shown.
55
AvocadoAmber/css/scdream.css
Normal file
55
AvocadoAmber/css/scdream.css
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
@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,9 +87,10 @@ $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")) {
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,9 @@ if (!$title)
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<?php include_once "./install_header.php"; ?>
|
<?php
|
||||||
|
include "./install_header.php";
|
||||||
|
?>
|
||||||
<?php
|
<?php
|
||||||
// 파일이 존재한다면 설치할 수 없다.
|
// 파일이 존재한다면 설치할 수 없다.
|
||||||
$dbconfig_file = $data_path . '/' . G5_DBCONFIG_FILE;
|
$dbconfig_file = $data_path . '/' . G5_DBCONFIG_FILE;
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,6 @@ $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);
|
||||||
|
|
@ -273,6 +272,7 @@ 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,16 +366,9 @@ EOD;
|
||||||
//-------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
// CSS 설정 파일 생성
|
// CSS 설정 파일 생성
|
||||||
$css_data_path = $g5_path['path'] . "/css";
|
$css_data_path = $data_path . "/css";
|
||||||
$css_data_url = $g5_path['url'] . "/css";
|
|
||||||
|
|
||||||
@mkdir($css_data_path, G5_DIR_PERMISSION);
|
$file = $css_data_path . '/_design.config.css';
|
||||||
@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;">
|
||||||
|
|
@ -403,6 +396,8 @@ 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,5 +1,2 @@
|
||||||
<?php
|
<?php
|
||||||
if (!$RIGHT_MESSAGE) {
|
?><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>
|
||||||
$RIGHT_MESSAGE = "INSTALLATION";
|
|
||||||
}
|
|
||||||
?><div id="ins_bar"><span id="bar_img">AVOCADO EDITION: AMBER</span><span id="bar_txt"><?php echo $RIGHT_MESSAGE ?></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 #ecc6c6;
|
border-top: 8px solid #ffbf00;
|
||||||
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: #ecc6c6;
|
color: #ffbf00;
|
||||||
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 #ecc6c6;
|
border-top: 5px solid #ffbf00;
|
||||||
|
|
||||||
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 #ecc6c6;
|
border: 2px solid #ffbf00;
|
||||||
}
|
}
|
||||||
|
|
||||||
#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: #ecc6c6;
|
color: #ffbf00;
|
||||||
}
|
}
|
||||||
|
|
||||||
#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: #ecc6c6;
|
background: #ffbf00;
|
||||||
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