326 lines
14 KiB
PHP
326 lines
14 KiB
PHP
<?php
|
|
/**
|
|
* 상담 리소스(상담사/공간) 관리
|
|
*/
|
|
$sub_menu = '850615';
|
|
include_once('./_common.php');
|
|
|
|
// 관리자 권한 확인
|
|
if (!$is_admin) {
|
|
alert('관리자만 접근할 수 있습니다.');
|
|
}
|
|
|
|
$g5['title'] = '리소스(상담사) 관리';
|
|
|
|
// --- 액션 처리 ---
|
|
|
|
// 그룹 추가/수정
|
|
if ($_POST['action'] == 'save_group') {
|
|
$group_name = trim($_POST['group_name']);
|
|
$group_id = (int)$_POST['group_id'];
|
|
|
|
if ($group_name) {
|
|
if ($group_id > 0) {
|
|
$sql = "UPDATE consultant_groups SET name = '{$group_name}' WHERE id = {$group_id}";
|
|
} else {
|
|
$sql = "INSERT INTO consultant_groups (name, is_active) VALUES ('{$group_name}', 1)";
|
|
}
|
|
sql_query($sql);
|
|
alert('저장되었습니다.', $_SERVER['PHP_SELF']);
|
|
}
|
|
}
|
|
|
|
// 그룹 삭제
|
|
if ($_POST['action'] == 'delete_group') {
|
|
$group_id = (int)$_POST['group_id'];
|
|
// 리소스가 있는지 확인
|
|
$cnt = sql_fetch("SELECT COUNT(*) as cnt FROM consultant_resources WHERE group_id = {$group_id}")['cnt'];
|
|
if ($cnt > 0) {
|
|
alert('해당 그룹에 속한 리소스가 있어 삭제할 수 없습니다.');
|
|
} else {
|
|
sql_query("DELETE FROM consultant_groups WHERE id = {$group_id}");
|
|
alert('삭제되었습니다.', $_SERVER['PHP_SELF']);
|
|
}
|
|
}
|
|
|
|
// 리소스 추가/수정
|
|
if ($_POST['action'] == 'save_resource') {
|
|
$resource_id = (int)$_POST['resource_id'];
|
|
$group_id = (int)$_POST['group_id'];
|
|
$name = trim($_POST['resource_name']);
|
|
$desc = trim($_POST['resource_desc']);
|
|
$is_active = isset($_POST['is_active']) ? 1 : 0;
|
|
|
|
if ($name && $group_id) {
|
|
if ($resource_id > 0) {
|
|
$sql = "UPDATE consultant_resources
|
|
SET group_id = {$group_id}, name = '{$name}', description = '{$desc}', is_active = {$is_active}
|
|
WHERE id = {$resource_id}";
|
|
} else {
|
|
$sql = "INSERT INTO consultant_resources
|
|
(group_id, name, description, is_active)
|
|
VALUES ({$group_id}, '{$name}', '{$desc}', {$is_active})";
|
|
}
|
|
sql_query($sql);
|
|
alert('저장되었습니다.', $_SERVER['PHP_SELF']);
|
|
}
|
|
}
|
|
|
|
// 리소스 삭제
|
|
if ($_POST['action'] == 'delete_resource') {
|
|
$resource_id = (int)$_POST['resource_id'];
|
|
// 예약 내역 확인 (안전 삭제)
|
|
$cnt = sql_fetch("SELECT COUNT(*) as cnt FROM consultant_reservations WHERE resource_id = {$resource_id}")['cnt'];
|
|
if ($cnt > 0) {
|
|
// 실제 삭제 대신 비활성화 처리 권장하지만, 여기서는 경고 후 삭제 방지
|
|
alert('해당 리소스로 접수된 예약이 있어 삭제할 수 없습니다. 대신 사용 안 함으로 설정해주세요.');
|
|
} else {
|
|
sql_query("DELETE FROM consultant_resources WHERE id = {$resource_id}");
|
|
alert('삭제되었습니다.', $_SERVER['PHP_SELF']);
|
|
}
|
|
}
|
|
|
|
// --- 데이터 조회 ---
|
|
$groups = [];
|
|
$result = sql_query("SELECT * FROM consultant_groups ORDER BY id");
|
|
while ($row = sql_fetch_array($result)) {
|
|
$groups[$row['id']] = $row;
|
|
}
|
|
|
|
$resources = [];
|
|
$result = sql_query("SELECT r.*, g.name as group_name
|
|
FROM consultant_resources r
|
|
LEFT JOIN consultant_groups g ON r.group_id = g.id
|
|
ORDER BY r.group_id, r.id");
|
|
while ($row = sql_fetch_array($result)) {
|
|
$resources[] = $row;
|
|
}
|
|
|
|
include_once(G5_ADMIN_PATH . '/admin.head.php');
|
|
?>
|
|
|
|
<style>
|
|
.resource-container { max-width: 1200px; margin: 0 auto; padding: 20px; display: grid; grid-template-columns: 300px 1fr; gap: 20px; }
|
|
.card { background: #fff; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; }
|
|
.card-header { padding: 15px; background: #f8f9fa; border-bottom: 1px solid #ddd; font-weight: bold; display: flex; justify-content: space-between; align-items: center; }
|
|
.card-body { padding: 20px; }
|
|
|
|
.group-list { list-style: none; padding: 0; margin: 0; }
|
|
.group-item { padding: 10px; border-bottom: 1px solid #eee; display: flex; justify-content: space-between; align-items: center; }
|
|
.group-item:last-child { border-bottom: none; }
|
|
.group-item:hover { background: #f1f3f5; }
|
|
|
|
.resource-table { width: 100%; border-collapse: collapse; }
|
|
.resource-table th, .resource-table td { padding: 12px; text-align: left; border-bottom: 1px solid #eee; }
|
|
.resource-table th { background: #f8f9fa; font-weight: bold; }
|
|
|
|
.btn-xs { padding: 2px 6px; font-size: 11px; border-radius: 3px; }
|
|
.badge { padding: 3px 8px; border-radius: 10px; font-size: 11px; color: #fff; }
|
|
.badge-success { background: #28a745; }
|
|
.badge-secondary { background: #6c757d; }
|
|
|
|
.form-control { width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; }
|
|
|
|
@media (max-width: 768px) {
|
|
.resource-container { grid-template-columns: 1fr; }
|
|
}
|
|
</style>
|
|
|
|
<div class="resource-container">
|
|
<!-- 좌측: 그룹 관리 -->
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<span>그룹 관리</span>
|
|
<button type="button" class="btn btn-primary btn-sm" onclick="openGroupModal()">+ 추가</button>
|
|
</div>
|
|
<div class="card-body" style="padding:0;">
|
|
<ul class="group-list">
|
|
<?php if (empty($groups)): ?>
|
|
<li class="group-item" style="justify-content:center; color:#999;">등록된 그룹이 없습니다.</li>
|
|
<?php else: ?>
|
|
<?php foreach ($groups as $group): ?>
|
|
<li class="group-item">
|
|
<span><?php echo htmlspecialchars($group['name']); ?></span>
|
|
<div>
|
|
<button type="button" class="btn btn-secondary btn-xs" onclick="openGroupModal(<?php echo $group['id']; ?>, '<?php echo htmlspecialchars($group['name']); ?>')">수정</button>
|
|
<button type="button" class="btn btn-danger btn-xs" onclick="deleteGroup(<?php echo $group['id']; ?>)">삭제</button>
|
|
</div>
|
|
</li>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 우측: 리소스 목록 -->
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<span>리소스(상담사/공간) 목록</span>
|
|
<button type="button" class="btn btn-primary btn-sm" onclick="openResourceModal()">+ 리소스 추가</button>
|
|
</div>
|
|
<div class="card-body" style="padding:0;">
|
|
<table class="resource-table">
|
|
<thead>
|
|
<tr>
|
|
<th>그룹</th>
|
|
<th>이름</th>
|
|
<th>설명</th>
|
|
<th>상태</th>
|
|
<th>관리</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (empty($resources)): ?>
|
|
<tr><td colspan="5" style="text-align:center; padding:30px; color:#999;">등록된 리소스가 없습니다.</td></tr>
|
|
<?php else: ?>
|
|
<?php foreach ($resources as $res): ?>
|
|
<tr>
|
|
<td><?php echo htmlspecialchars($res['group_name']); ?></td>
|
|
<td><strong><?php echo htmlspecialchars($res['name']); ?></strong></td>
|
|
<td><?php echo htmlspecialchars($res['description']); ?></td>
|
|
<td>
|
|
<?php if ($res['is_active']): ?>
|
|
<span class="badge badge-success">사용중</span>
|
|
<?php else: ?>
|
|
<span class="badge badge-secondary">중지</span>
|
|
<?php endif; ?>
|
|
</td>
|
|
<td>
|
|
<button type="button" class="btn btn-secondary btn-xs"
|
|
onclick="openResourceModal(<?php echo $res['id']; ?>, <?php echo $res['group_id']; ?>, '<?php echo htmlspecialchars($res['name']); ?>', '<?php echo htmlspecialchars($res['description']); ?>', <?php echo $res['is_active']; ?>)">
|
|
수정
|
|
</button>
|
|
<button type="button" class="btn btn-danger btn-xs" onclick="deleteResource(<?php echo $res['id']; ?>)">삭제</button>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 그룹 추가/수정 모달 -->
|
|
<div id="groupModal" class="modal" style="display:none;">
|
|
<div class="modal-content" style="width:350px;">
|
|
<div class="modal-header">
|
|
<h3 id="groupModalTitle">그룹 추가</h3>
|
|
<span class="close" onclick="closeModal('groupModal')">×</span>
|
|
</div>
|
|
<div class="modal-body">
|
|
<form method="post">
|
|
<input type="hidden" name="action" value="save_group">
|
|
<input type="hidden" name="group_id" id="modal_group_id" value="0">
|
|
<div class="form-group">
|
|
<label>그룹명 (예: 내과, 회의실)</label>
|
|
<input type="text" name="group_name" id="modal_group_name" class="form-control" required>
|
|
</div>
|
|
<div style="text-align:right; margin-top:15px;">
|
|
<button type="submit" class="btn btn-primary">저장</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 리소스 추가/수정 모달 -->
|
|
<div id="resourceModal" class="modal" style="display:none;">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h3 id="resourceModalTitle">리소스 추가</h3>
|
|
<span class="close" onclick="closeModal('resourceModal')">×</span>
|
|
</div>
|
|
<div class="modal-body">
|
|
<form method="post">
|
|
<input type="hidden" name="action" value="save_resource">
|
|
<input type="hidden" name="resource_id" id="modal_res_id" value="0">
|
|
|
|
<div class="form-group">
|
|
<label>그룹 선택</label>
|
|
<select name="group_id" id="modal_res_group" class="form-control" required>
|
|
<option value="">선택하세요</option>
|
|
<?php foreach ($groups as $group): ?>
|
|
<option value="<?php echo $group['id']; ?>"><?php echo htmlspecialchars($group['name']); ?></option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label>이름 (예: 김의사, A회의실)</label>
|
|
<input type="text" name="resource_name" id="modal_res_name" class="form-control" required>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label>설명 (선택)</label>
|
|
<input type="text" name="resource_desc" id="modal_res_desc" class="form-control">
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label><input type="checkbox" name="is_active" id="modal_res_active" value="1" checked> 사용함</label>
|
|
</div>
|
|
|
|
<div style="text-align:right; margin-top:15px;">
|
|
<button type="submit" class="btn btn-primary">저장</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 삭제 폼 (히든) -->
|
|
<form id="deleteForm" method="post">
|
|
<input type="hidden" name="action" id="deleteAction">
|
|
<input type="hidden" name="group_id" id="deleteGroupId">
|
|
<input type="hidden" name="resource_id" id="deleteResourceId">
|
|
</form>
|
|
|
|
<script>
|
|
function openGroupModal(id = 0, name = '') {
|
|
document.getElementById('groupModalTitle').textContent = id ? '그룹 수정' : '그룹 추가';
|
|
document.getElementById('modal_group_id').value = id;
|
|
document.getElementById('modal_group_name').value = name;
|
|
document.getElementById('groupModal').style.display = 'block';
|
|
}
|
|
|
|
function openResourceModal(id = 0, groupId = '', name = '', desc = '', active = 1) {
|
|
document.getElementById('resourceModalTitle').textContent = id ? '리소스 수정' : '리소스 추가';
|
|
document.getElementById('modal_res_id').value = id;
|
|
document.getElementById('modal_res_group').value = groupId;
|
|
document.getElementById('modal_res_name').value = name;
|
|
document.getElementById('modal_res_desc').value = desc;
|
|
document.getElementById('modal_res_active').checked = (active == 1);
|
|
document.getElementById('resourceModal').style.display = 'block';
|
|
}
|
|
|
|
function closeModal(id) {
|
|
document.getElementById(id).style.display = 'none';
|
|
}
|
|
|
|
function deleteGroup(id) {
|
|
if(confirm('정말 삭제하시겠습니까?')) {
|
|
document.getElementById('deleteAction').value = 'delete_group';
|
|
document.getElementById('deleteGroupId').value = id;
|
|
document.getElementById('deleteForm').submit();
|
|
}
|
|
}
|
|
|
|
function deleteResource(id) {
|
|
if(confirm('정말 삭제하시겠습니까?')) {
|
|
document.getElementById('deleteAction').value = 'delete_resource';
|
|
document.getElementById('deleteResourceId').value = id;
|
|
document.getElementById('deleteForm').submit();
|
|
}
|
|
}
|
|
|
|
// 모달 외부 클릭 닫기
|
|
window.onclick = function(event) {
|
|
if (event.target.classList.contains('modal')) {
|
|
event.target.style.display = 'none';
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<?php
|
|
include_once(G5_ADMIN_PATH . '/admin.tail.php');
|
|
?>
|