150 lines
7.8 KiB
PHP
150 lines
7.8 KiB
PHP
<?php
|
|
//$sub_menu = '800900'; // 메뉴 활성화를 위해
|
|
include_once('./_common.php');
|
|
include_once(__DIR__ . '/lib/SchemaManager.class.php');
|
|
|
|
if ($is_admin != 'super') {
|
|
alert('최고관리자만 접근 가능합니다.');
|
|
}
|
|
|
|
function get_tables_from_sql_file($filepath) {
|
|
$tables = [];
|
|
if (!file_exists($filepath)) return $tables;
|
|
$lines = file($filepath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
|
foreach ($lines as $line) {
|
|
if (preg_match('/CREATE TABLE(?: IF NOT EXISTS)? `([^`]+)`/i', $line, $matches)) {
|
|
$tables[] = $matches[1];
|
|
}
|
|
}
|
|
return $tables;
|
|
}
|
|
|
|
$g5['title'] = '결제 관리 솔루션 설치';
|
|
include_once(G5_ADMIN_PATH . '/admin.head.php');
|
|
|
|
$install_result = null;
|
|
$delete_result = null;
|
|
$action = $_POST['action'] ?? '';
|
|
|
|
$tables_to_check = get_tables_from_sql_file(__DIR__ . '/install.sql');
|
|
|
|
if ($action === 'install') {
|
|
check_admin_token();
|
|
$sql_file = __DIR__ . '/install.sql';
|
|
$db_results = [];
|
|
try {
|
|
$schemaManager = new SchemaManager($sql_file);
|
|
$schemaManager->execute();
|
|
$db_results = $schemaManager->get_results();
|
|
} catch (Exception $e) { $db_results['errors'][] = $e->getMessage(); }
|
|
$install_result = ['db' => $db_results];
|
|
|
|
} else if ($action === 'delete') {
|
|
check_admin_token();
|
|
$delete_result = ['tables' => []];
|
|
$tables_to_delete = $tables_to_check;
|
|
foreach ($tables_to_delete as $table) {
|
|
sql_query("DROP TABLE IF EXISTS `{$table}`", false);
|
|
$delete_result['tables'][] = $table;
|
|
}
|
|
}
|
|
|
|
$existing_tables = [];
|
|
foreach ($tables_to_check as $table) {
|
|
if (sql_query("SHOW TABLES LIKE '$table'", false) && sql_num_rows(sql_query("SHOW TABLES LIKE '$table'", false)) > 0) {
|
|
$existing_tables[] = $table;
|
|
}
|
|
}
|
|
$is_installed = count($existing_tables) == count($tables_to_check);
|
|
?>
|
|
|
|
<style>
|
|
.install-container { max-width: 800px; margin: 20px auto; padding: 20px; background: #fff; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
|
|
.install-header { text-align: center; margin-bottom: 30px; padding-bottom: 20px; border-bottom: 2px solid #AA20FF; }
|
|
.install-header h1 { color: #AA20FF; margin-bottom: 10px; }
|
|
.feature-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; margin: 30px 0; }
|
|
.feature-card { padding: 20px; border: 1px solid #e0e0e0; border-radius: 8px; text-align: center; }
|
|
.feature-card i { font-size: 2em; color: #AA20FF; margin-bottom: 10px; }
|
|
.status-table { width: 100%; border-collapse: collapse; margin: 20px 0; }
|
|
.status-table th, .status-table td { padding: 12px; text-align: left; border-bottom: 1px solid #ddd; }
|
|
.status-table th { background-color: #fff; font-weight: bold; }
|
|
.status-ok { color: #28a745; font-weight: bold; }
|
|
.status-missing { color: #dc3545; font-weight: bold; }
|
|
.install-btn { display: block; width: 200px; margin: 30px auto; padding: 15px 30px; background: #AA20FF; color: white; text-align: center; text-decoration: none; border-radius: 5px; font-size: 16px; font-weight: bold; border: none; cursor: pointer; transition: background-color 0.3s; }
|
|
.install-btn:hover { background: #8A1ACC; color: white; }
|
|
.install-btn:disabled { background: #ccc; cursor: not-allowed; }
|
|
.alert { padding: 15px; margin: 20px 0; border-radius: 5px; }
|
|
.alert-success { background-color: #d4edda; border: 1px solid #c3e6cb; color: #155724; }
|
|
.alert-info { background-color: #d1ecf1; border: 1px solid #bee5eb; color: #0c5460; }
|
|
.alert-danger { background-color: #f8d7da; border: 1px solid #f5c6cb; color: #721c24; }
|
|
.btn-secondary { background: #6c757d; color: white; border-color: #6c757d; padding: 5px 10px; border-radius: 4px; text-decoration: none; }
|
|
.btn-secondary:hover { background: #5a6268; }
|
|
.btn-danger { background: #dc3545; color: white; border: none; padding: 10px 15px; border-radius: 4px; cursor: pointer; }
|
|
.btn-danger:hover { background: #c82333; }
|
|
.button-group { display: flex; justify-content: center; align-items: center; gap: 10px; }
|
|
</style>
|
|
|
|
<div class="install-container">
|
|
<div class="install-header">
|
|
<h1><i class="fa fa-credit-card"></i> 결제 관리 솔루션</h1>
|
|
<p>다양한 결제 모듈 연동 및 로그 관리 시스템</p>
|
|
</div>
|
|
|
|
<?php if ($install_result): ?>
|
|
<div class="alert alert-success"><h4><i class="fa fa-check-circle"></i> 설치 작업 완료</h4><p>데이터베이스 설치 작업이 완료되었습니다.</p><p><a href="<?php echo G5_ADMIN_URL; ?>" class="btn btn-primary">관리자 메인으로 이동</a></p></div>
|
|
<?php elseif ($delete_result): ?>
|
|
<div class="alert alert-danger"><h4><i class="fa fa-trash"></i> 삭제 작업 완료</h4><p>솔루션 관련 데이터가 삭제되었습니다.</p><ul><?php foreach($delete_result['tables'] as $tbl) echo "<li>{$tbl} 테이블 삭제됨</li>"; ?></ul></div>
|
|
<?php elseif ($is_installed): ?>
|
|
<div class="alert alert-success"><h4><i class="fa fa-check-circle"></i> 설치 완료</h4><p>결제 관리 솔루션이 이미 설치되어 있습니다.</p><p><a href="<?php echo G5_ADMIN_URL; ?>" class="btn btn-primary">관리자 메인으로 이동</a></p></div>
|
|
<?php else: ?>
|
|
<div class="alert alert-info"><h4><i class="fa fa-info-circle"></i> 설치 필요</h4><p>결제 관리 솔루션을 사용하기 위해 설치가 필요합니다.</p></div>
|
|
<?php endif; ?>
|
|
|
|
<h3><i class="fa fa-database"></i> 설치 상태</h3>
|
|
<table class="status-table">
|
|
<thead><tr><th>테이블명</th><th>설명</th><th>상태</th></tr></thead>
|
|
<tbody>
|
|
<?php foreach ($tables_to_check as $table): ?>
|
|
<tr>
|
|
<td><code><?php echo $table; ?></code></td>
|
|
<td><?php echo array('estimate_payment' => '결제 정보', 'estimate_payment_log' => '결제 상태 로그', 'estimate_payment_payload' => 'PG사 연동 전문')[$table] ?? '데이터 테이블'; ?></td>
|
|
<td>
|
|
<?php if (in_array($table, $existing_tables)): ?>
|
|
<span class="status-ok"><i class="fa fa-check"></i> 설치됨</span>
|
|
<?php else: ?>
|
|
<span class="status-missing"><i class="fa fa-times"></i> 미설치</span>
|
|
<?php endif; ?>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
|
|
<?php if (!$is_installed): ?>
|
|
<form method="post" onsubmit="return confirm('솔루션을 설치하시겠습니까?');">
|
|
<input type="hidden" name="action" value="install">
|
|
<input type="hidden" name="token" value="<?php echo get_token(); ?>">
|
|
<button type="submit" class="install-btn"><i class="fa fa-download"></i> 솔루션 설치하기</button>
|
|
</form>
|
|
<?php endif; ?>
|
|
|
|
<?php if ($is_installed && !$install_result && !$delete_result): ?>
|
|
<div class="button-group" style="text-align: center; margin-top: 20px;">
|
|
<form method="post" onsubmit="return confirm('기존 데이터는 유지되며, 변경된 DB 구조만 업데이트 됩니다. 진행하시겠습니까?');">
|
|
<input type="hidden" name="action" value="install">
|
|
<input type="hidden" name="token" value="<?php echo get_token(); ?>">
|
|
<button type="submit" class="btn btn-secondary"><i class="fa fa-sync"></i> 재설치 (업데이트)</button>
|
|
</form>
|
|
<form method="post" onsubmit="return confirm('정말로 솔루션을 삭제하시겠습니까? 모든 관련 데이터가 영구적으로 삭제됩니다.');">
|
|
<input type="hidden" name="action" value="delete">
|
|
<input type="hidden" name="token" value="<?php echo get_token(); ?>">
|
|
<button type="submit" class="btn-danger"><i class="fa fa-trash"></i> 솔루션 삭제하기</button>
|
|
</form>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<?php
|
|
include_once(G5_ADMIN_PATH . '/admin.tail.php');
|
|
?>
|