Files
2026-06-11 18:47:38 +09:00

345 lines
11 KiB
PHP

<?php
/**
* 상담 예약 시스템 테스트 페이지
*/
$sub_menu = '850900';
include_once('./_common.php');
// 권한 확인
auth_check_menu($auth, $sub_menu, 'r');
$g5['title'] = '시스템 테스트';
// 테스트 결과
$test_results = [];
// 1. 테이블 존재 확인
$tables_to_check = [
'consultant_config' => '설정 테이블',
'consultant_schedule' => '스케줄 테이블',
'consultant_reservations' => '예약 테이블',
'consultant_mail_templates' => '메일 템플릿 테이블',
'consultant_sms_templates' => 'SMS 템플릿 테이블'
];
foreach ($tables_to_check as $table => $description) {
$sql = "SHOW TABLES LIKE '{$table}'";
$result = sql_query($sql, false);
$exists = $result && sql_num_rows($result) > 0;
$test_results['tables'][$table] = [
'name' => $description,
'status' => $exists,
'message' => $exists ? '존재함' : '존재하지 않음'
];
}
// 2. 기본 설정값 확인
$config_keys = [
'consultation_duration' => '1회 상담시간',
'max_persons_per_slot' => '최대 인원',
'consultation_fee' => '상담비',
'account_info' => '계좌정보',
'monday_enabled' => '월요일 운영여부',
'monday_start' => '월요일 시작시간'
];
foreach ($config_keys as $key => $description) {
$value = consultant_get_config($key);
$test_results['config'][$key] = [
'name' => $description,
'value' => $value,
'status' => $value !== null
];
}
// 3. 함수 테스트
$function_tests = [
'is_consultant_installed' => is_consultant_installed(),
'consultant_get_config' => consultant_get_config('consultation_duration', '60'),
'consultant_format_time' => consultant_format_time('14:30'),
'consultant_format_date' => consultant_format_date('2024-12-02')
];
// 4. 스케줄 생성 테스트 (현재 월)
$current_year = date('Y');
$current_month = date('m');
try {
include_once('./schedule_generator.php');
$generator = new ScheduleGenerator();
$schedule_status = $generator->checkScheduleStatus($current_year, $current_month);
$test_results['schedule_status'] = $schedule_status;
} catch (Exception $e) {
$test_results['schedule_error'] = $e->getMessage();
}
include_once(G5_ADMIN_PATH . '/admin.head.php');
?>
<style>
.test-container {
max-width: 1000px;
margin: 0 auto;
padding: 20px;
}
.test-section {
background: white;
border: 1px solid #ddd;
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.test-section h3 {
margin: 0 0 15px 0;
color: #333;
border-bottom: 2px solid #007bff;
padding-bottom: 8px;
}
.test-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 0;
border-bottom: 1px solid #f0f0f0;
}
.test-item:last-child {
border-bottom: none;
}
.test-name {
font-weight: bold;
color: #333;
}
.test-value {
color: #666;
font-family: monospace;
}
.test-status {
padding: 4px 8px;
border-radius: 12px;
font-size: 12px;
font-weight: bold;
}
.status-ok {
background: #d4edda;
color: #155724;
}
.status-error {
background: #f8d7da;
color: #721c24;
}
.status-warning {
background: #fff3cd;
color: #856404;
}
.btn {
padding: 8px 16px;
border: none;
border-radius: 4px;
cursor: pointer;
text-decoration: none;
display: inline-block;
font-size: 14px;
font-weight: 600;
margin: 5px;
}
.btn-primary {
background: #007bff;
color: white;
}
.btn-success {
background: #28a745;
color: white;
}
.btn-warning {
background: #ffc107;
color: #212529;
}
.summary-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 15px;
margin-bottom: 20px;
}
.summary-card {
background: #fff;
border: 1px solid #ddd;
border-radius: 8px;
padding: 15px;
text-align: center;
}
.summary-number {
font-size: 24px;
font-weight: bold;
margin-bottom: 5px;
}
.summary-label {
font-size: 12px;
color: #666;
}
</style>
<div class="test-container">
<h2><?php echo $g5['title']; ?></h2>
<!-- 전체 요약 -->
<div class="summary-grid">
<div class="summary-card">
<div class="summary-number" style="color: <?php echo is_consultant_installed() ? '#28a745' : '#dc3545'; ?>">
<?php echo is_consultant_installed() ? '✓' : '✗'; ?>
</div>
<div class="summary-label">시스템 설치</div>
</div>
<div class="summary-card">
<div class="summary-number" style="color: #007bff;">
<?php echo count(array_filter($test_results['tables'], function ($t) {
return $t['status']; })); ?>/<?php echo count($test_results['tables']); ?>
</div>
<div class="summary-label">테이블 상태</div>
</div>
<div class="summary-card">
<div class="summary-number" style="color: #17a2b8;">
<?php echo count(array_filter($test_results['config'], function ($c) {
return $c['status']; })); ?>/<?php echo count($test_results['config']); ?>
</div>
<div class="summary-label">설정 상태</div>
</div>
<div class="summary-card">
<div class="summary-number" style="color: #6f42c1;">
<?php echo isset($test_results['schedule_status']) ? number_format($test_results['schedule_status']['total_slots']) : '0'; ?>
</div>
<div class="summary-label">현재 월 스케줄</div>
</div>
</div>
<!-- 테이블 상태 -->
<div class="test-section">
<h3>📋 데이터베이스 테이블 상태</h3>
<?php foreach ($test_results['tables'] as $table => $info): ?>
<div class="test-item">
<div class="test-name"><?php echo $info['name']; ?> (<?php echo $table; ?>)</div>
<div class="test-status <?php echo $info['status'] ? 'status-ok' : 'status-error'; ?>">
<?php echo $info['message']; ?>
</div>
</div>
<?php endforeach; ?>
</div>
<!-- 설정 상태 -->
<div class="test-section">
<h3>⚙️ 기본 설정 상태</h3>
<?php foreach ($test_results['config'] as $key => $info): ?>
<div class="test-item">
<div class="test-name"><?php echo $info['name']; ?> (<?php echo $key; ?>)</div>
<div class="test-value"><?php echo htmlspecialchars($info['value'] ?? 'NULL'); ?></div>
<div class="test-status <?php echo $info['status'] ? 'status-ok' : 'status-warning'; ?>">
<?php echo $info['status'] ? '설정됨' : '미설정'; ?>
</div>
</div>
<?php endforeach; ?>
</div>
<!-- 함수 테스트 -->
<div class="test-section">
<h3>🔧 함수 테스트</h3>
<?php foreach ($function_tests as $func_name => $result): ?>
<div class="test-item">
<div class="test-name"><?php echo $func_name; ?>()</div>
<div class="test-value">
<?php echo is_bool($result) ? ($result ? 'true' : 'false') : htmlspecialchars($result); ?></div>
<div class="test-status status-ok">정상</div>
</div>
<?php endforeach; ?>
</div>
<!-- 스케줄 상태 -->
<div class="test-section">
<h3>📅 현재 월 스케줄 상태 (<?php echo $current_year; ?>년 <?php echo $current_month; ?>월)</h3>
<?php if (isset($test_results['schedule_status'])): ?>
<?php $status = $test_results['schedule_status']; ?>
<div class="test-item">
<div class="test-name">전체 슬롯</div>
<div class="test-value"><?php echo number_format($status['total_slots']); ?>개</div>
<div class="test-status <?php echo $status['total_slots'] > 0 ? 'status-ok' : 'status-warning'; ?>">
<?php echo $status['total_slots'] > 0 ? '생성됨' : '미생성'; ?>
</div>
</div>
<div class="test-item">
<div class="test-name">상담 가능 슬롯</div>
<div class="test-value"><?php echo number_format($status['auto_slots']); ?>개</div>
<div class="test-status status-ok">정상</div>
</div>
<div class="test-item">
<div class="test-name">점심시간 슬롯</div>
<div class="test-value"><?php echo number_format($status['lunch_slots']); ?>개</div>
<div class="test-status status-ok">정상</div>
</div>
<div class="test-item">
<div class="test-name">휴무일 슬롯</div>
<div class="test-value"><?php echo number_format($status['holiday_slots']); ?>개</div>
<div class="test-status status-ok">정상</div>
</div>
<?php elseif (isset($test_results['schedule_error'])): ?>
<div class="test-item">
<div class="test-name">스케줄 조회 오류</div>
<div class="test-value"><?php echo htmlspecialchars($test_results['schedule_error']); ?></div>
<div class="test-status status-error">오류</div>
</div>
<?php endif; ?>
</div>
<!-- 액션 버튼 -->
<div class="test-section">
<h3>🚀 빠른 액션</h3>
<div style="text-align: center;">
<?php if (!is_consultant_installed()): ?>
<a href="../install.php" class="btn btn-warning">시스템 설치</a>
<?php endif; ?>
<a href="../settings.php" class="btn btn-primary">설정 관리</a>
<a href="../schedule_generate.php" class="btn btn-success">스케줄 생성</a>
<a href="../dashboard.php" class="btn btn-primary">대시보드</a>
<button onclick="location.reload()" class="btn btn-secondary">새로고침</button>
</div>
</div>
</div>
<script>
// 자동 새로고침 (30초마다)
setTimeout(function () {
location.reload();
}, 30000);
</script>
<?php
include_once(G5_ADMIN_PATH . '/admin.tail.php');
?>