Files
gravity/แบบประเมินของไอที ประจำปี/admin_settings.php
T
2026-09-16 23:20:08 +07:00

448 lines
24 KiB
PHP

<?php
session_start();
if (!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true || !isset($_SESSION['is_admin']) || !$_SESSION['is_admin']) {
header("location: index.php");
exit;
}
require_once 'includes/db_assessment.php';
// Handle Post Requests
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$action = $_POST['action'] ?? '';
$admin_cid = $_SESSION['cid'];
$admin_name = $_SESSION['fullname'] ?? 'Admin';
if ($action == 'add_year') {
$year = trim($_POST['year_text']);
try {
$stmt = $pdo_assess->prepare("INSERT INTO it_years (year_text, is_active) VALUES (?, 0)");
$stmt->execute([$year]);
logAdminAction($pdo_assess, $admin_cid, $admin_name, 'ADD_YEAR', "เพิ่มปีประเมินใหม่: $year");
$_SESSION['success_msg'] = "เพิ่มปีประเมินเรียบร้อยแล้ว";
} catch (PDOException $e) {
$_SESSION['error_msg'] = "มีปีนี้ในระบบแล้ว หรือเกิดข้อผิดพลาด";
}
}
elseif ($action == 'set_active_year') {
$id = $_POST['id'];
$ystmt = $pdo_assess->prepare("SELECT year_text FROM it_years WHERE id = ?");
$ystmt->execute([$id]);
$yr = $ystmt->fetchColumn();
$pdo_assess->query("UPDATE it_years SET is_active = 0");
$stmt = $pdo_assess->prepare("UPDATE it_years SET is_active = 1 WHERE id = ?");
$stmt->execute([$id]);
logAdminAction($pdo_assess, $admin_cid, $admin_name, 'SET_ACTIVE_YEAR', "เปิดรับประเมินสำหรับปี: $yr");
$_SESSION['success_msg'] = "เปิดใช้งานปีที่เลือกเรียบร้อยแล้ว (สามารถเปิดได้เพียง 1 รายการเท่านั้น)";
}
elseif ($action == 'add_rule' || $action == 'edit_rule') {
$content = $_POST['content'];
$order = $_POST['order_no'];
$active = isset($_POST['is_active']) ? 1 : 0;
if ($action == 'add_rule') {
$stmt = $pdo_assess->prepare("INSERT INTO it_rules (content, order_no, is_active) VALUES (?, ?, ?)");
$stmt->execute([$content, $order, $active]);
logAdminAction($pdo_assess, $admin_cid, $admin_name, 'ADD_RULE', "เพิ่มระเบียบปฏิบัติ: " . mb_substr($content, 0, 50) . "...");
} else {
$id = $_POST['id'];
$stmt = $pdo_assess->prepare("UPDATE it_rules SET content=?, order_no=?, is_active=? WHERE id=?");
$stmt->execute([$content, $order, $active, $id]);
logAdminAction($pdo_assess, $admin_cid, $admin_name, 'EDIT_RULE', "แก้ไขระเบียบปฏิบัติ ID $id: " . mb_substr($content, 0, 50) . "...");
}
$_SESSION['success_msg'] = "บันทึกข้อมูลระเบียบปฏิบัติเรียบร้อยแล้ว";
}
elseif ($action == 'delete_rule') {
$id = $_POST['id'];
$stmt = $pdo_assess->prepare("SELECT content FROM it_rules WHERE id=?");
$stmt->execute([$id]);
$r_content = $stmt->fetchColumn();
$stmt = $pdo_assess->prepare("DELETE FROM it_rules WHERE id=?");
$stmt->execute([$id]);
logAdminAction($pdo_assess, $admin_cid, $admin_name, 'DELETE_RULE', "ลบระเบียบปฏิบัติ: " . mb_substr($r_content, 0, 50) . "...");
$_SESSION['success_msg'] = "ลบข้อมูลระเบียบปฏิบัติเรียบร้อยแล้ว";
}
elseif ($action == 'add_sla' || $action == 'edit_sla') {
$name = $_POST['service_name'];
$time = $_POST['standard_time'];
$order = $_POST['order_no'];
$active = isset($_POST['is_active']) ? 1 : 0;
if ($action == 'add_sla') {
$stmt = $pdo_assess->prepare("INSERT INTO it_slas (service_name, standard_time, order_no, is_active) VALUES (?, ?, ?, ?)");
$stmt->execute([$name, $time, $order, $active]);
logAdminAction($pdo_assess, $admin_cid, $admin_name, 'ADD_SLA', "เพิ่ม SLA: $name ($time นาที)");
} else {
$id = $_POST['id'];
$stmt = $pdo_assess->prepare("UPDATE it_slas SET service_name=?, standard_time=?, order_no=?, is_active=? WHERE id=?");
$stmt->execute([$name, $time, $order, $active, $id]);
logAdminAction($pdo_assess, $admin_cid, $admin_name, 'EDIT_SLA', "แก้ไข SLA ID $id: $name ($time นาที)");
}
$_SESSION['success_msg'] = "บันทึกข้อมูลบริการ SLA เรียบร้อยแล้ว";
}
elseif ($action == 'delete_sla') {
$id = $_POST['id'];
$stmt = $pdo_assess->prepare("SELECT service_name FROM it_slas WHERE id=?");
$stmt->execute([$id]);
$s_name = $stmt->fetchColumn();
$stmt = $pdo_assess->prepare("DELETE FROM it_slas WHERE id=?");
$stmt->execute([$id]);
logAdminAction($pdo_assess, $admin_cid, $admin_name, 'DELETE_SLA', "ลบ SLA: $s_name");
$_SESSION['success_msg'] = "ลบข้อมูลบริการ SLA เรียบร้อยแล้ว";
}
header("Location: admin_settings.php");
exit;
}
// Fetch Data
$it_years = $pdo_assess->query("SELECT * FROM it_years ORDER BY year_text DESC")->fetchAll();
$counts_stmt = $pdo_assess->query("SELECT assess_year, COUNT(id) as total_assessments FROM it_assessments GROUP BY assess_year");
$counts_map = [];
foreach ($counts_stmt->fetchAll() as $c) {
$counts_map[$c['assess_year']] = $c['total_assessments'];
}
$rules = $pdo_assess->query("SELECT * FROM it_rules ORDER BY order_no ASC")->fetchAll();
$slas = $pdo_assess->query("SELECT * FROM it_slas ORDER BY order_no ASC")->fetchAll();
$logs = $pdo_assess->query("SELECT * FROM it_logs ORDER BY created_at DESC LIMIT 50")->fetchAll();
?>
<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8">
<title>ตั้งค่าระบบประเมิน (Super Admin)</title>
<!-- Favicon -->
<link rel="icon" type="image/png" href="assets/images/logo.png">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Sarabun:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<style>
body { font-family: 'Sarabun', sans-serif; background-color: #f8f9fa; }
.navbar-custom { background: linear-gradient(135deg, #12344d, #1a2938); }
.card { border: none; border-radius: 15px; box-shadow: 0 4px 15px rgba(0,0,0,0.05); margin-bottom: 2rem; }
.card-header { background: #fff; border-bottom: 1px solid #eee; border-radius: 15px 15px 0 0 !important; font-weight: bold; color: #007f8b;}
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark navbar-custom mb-4">
<div class="container-fluid px-4">
<a class="navbar-brand fw-bold d-flex align-items-center" href="admin_settings.php">
<img src="assets/images/logo.png" alt="Logo" width="40" height="40" class="d-inline-block align-text-top me-2 bg-white rounded-circle">
<span>ระบบประเมิน - ตั้งค่า</span>
</a>
<div class="d-flex">
<a href="summary.php" class="btn btn-outline-light btn-sm rounded-pill px-3 me-2">ไปหน้าสรุปผล</a>
<a href="actions/logout.php" class="btn btn-danger btn-sm rounded-pill px-3">ออกจากระบบ</a>
</div>
</div>
</nav>
<div class="container">
<!-- 1. ตั้งค่าปี -->
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center">
<span>1. ตั้งค่าปีที่เปิดให้ประเมิน (เปิดได้เพียง 1 รายการ)</span>
<form method="POST" class="d-flex m-0">
<input type="hidden" name="action" value="add_year">
<input type="text" name="year_text" class="form-control form-control-sm me-2" placeholder="ระบุปี เช่น 2570" required pattern="[0-9]{4}">
<button type="submit" class="btn btn-sm btn-success text-nowrap">+ เพิ่มปี</button>
</form>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-striped m-0">
<thead class="table-light">
<tr>
<th>ปีประเมิน</th>
<th class="text-center">จำนวนผู้ทำประเมิน</th>
<th class="text-center">สถานะปัจจุบัน</th>
<th class="text-center">จัดการ</th>
</tr>
</thead>
<tbody>
<?php foreach($it_years as $y):
$count = $counts_map[$y['year_text']] ?? 0;
?>
<tr>
<td class="fw-bold">ปี <?php echo htmlspecialchars($y['year_text']); ?></td>
<td class="text-center"><span class="badge bg-secondary"><?php echo $count; ?> รายการ</span></td>
<td class="text-center">
<?php if($y['is_active']): ?>
<span class="badge bg-primary px-3 py-2">กำลังเปิดรับประเมิน</span>
<?php else: ?>
<span class="badge bg-light text-muted border px-3 py-2">ปิด</span>
<?php endif; ?>
</td>
<td class="text-center">
<?php if(!$y['is_active']): ?>
<form method="POST" class="m-0" onsubmit="return confirm('ต้องการเปิดให้ปี <?php echo $y['year_text']; ?> เป็นปีปัจจุบันที่ใช้ทำประเมินใช่หรือไม่? (ปีอื่นๆ จะถูกปิดอัตโนมัติ)');">
<input type="hidden" name="action" value="set_active_year">
<input type="hidden" name="id" value="<?php echo $y['id']; ?>">
<button type="submit" class="btn btn-sm btn-outline-primary">เปิดใช้งานปีนี้</button>
</form>
<?php else: ?>
<button class="btn btn-sm btn-primary disabled">ใช้งานอยู่</button>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
<?php if(empty($it_years)): ?>
<tr><td colspan="4" class="text-center text-muted">ยังไม่ได้เพิ่มปีประเมิน กรุณาเพิ่มปีด้านบน</td></tr>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- 2. จัดการระเบียบปฏิบัติ -->
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center">
<span>2. ส่วนที่ 3 - การประเมินการรับรู้ (ระเบียบปฏิบัติ)</span>
<button class="btn btn-sm btn-success" onclick="openRuleModal()">+ เพิ่มรายการใหม่</button>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-striped m-0">
<thead class="table-light"><tr><th>ลำดับ</th><th>ระเบียบปฏิบัติ</th><th>สถานะ</th><th>จัดการ</th></tr></thead>
<tbody>
<?php foreach($rules as $r): ?>
<tr>
<td class="text-center"><?php echo $r['order_no']; ?></td>
<td><?php echo htmlspecialchars($r['content']); ?></td>
<td><?php echo $r['is_active'] ? '<span class="badge bg-success">เปิดใช้</span>' : '<span class="badge bg-secondary">ปิด</span>'; ?></td>
<td style="white-space:nowrap;">
<button class="btn btn-sm btn-warning" onclick='editRule(<?php echo json_encode($r); ?>)'>แก้ไข</button>
<form method="POST" class="d-inline" onsubmit="return confirm('ยืนยันการลบ?');">
<input type="hidden" name="action" value="delete_rule">
<input type="hidden" name="id" value="<?php echo $r['id']; ?>">
<button type="submit" class="btn btn-sm btn-danger">ลบ</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- 3. จัดการ SLA -->
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center">
<span>3. ส่วนที่ 4 - ข้อตกลงการให้บริการ (SLA)</span>
<button class="btn btn-sm btn-success" onclick="openSlaModal()">+ เพิ่มรายการใหม่</button>
</div>
<div class="card-body p-0">
<div class="table-responsive">
<table class="table table-striped m-0">
<thead class="table-light"><tr><th>ลำดับ</th><th>ชื่อบริการ</th><th>เวลามาตรฐาน (นาที)</th><th>สถานะ</th><th>จัดการ</th></tr></thead>
<tbody>
<?php foreach($slas as $s): ?>
<tr>
<td class="text-center"><?php echo $s['order_no']; ?></td>
<td><?php echo htmlspecialchars($s['service_name']); ?></td>
<td class="text-center"><?php echo $s['standard_time']; ?></td>
<td><?php echo $s['is_active'] ? '<span class="badge bg-success">เปิดใช้</span>' : '<span class="badge bg-secondary">ปิด</span>'; ?></td>
<td style="white-space:nowrap;">
<button class="btn btn-sm btn-warning" onclick='editSla(<?php echo json_encode($s); ?>)'>แก้ไข</button>
<form method="POST" class="d-inline" onsubmit="return confirm('ยืนยันการลบ?');">
<input type="hidden" name="action" value="delete_sla">
<input type="hidden" name="id" value="<?php echo $s['id']; ?>">
<button type="submit" class="btn btn-sm btn-danger">ลบ</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- 4. ประวัติการปรับปรุงระบบ (Logs) -->
<div class="card">
<div class="card-header bg-dark text-white" style="border-radius: 15px 15px 0 0 !important;">
<i class="bi bi-clock-history"></i> ประวัติการดำเนินการ (System Logs) - 50 รายการล่าสุด
</div>
<div class="card-body p-0">
<div class="table-responsive" style="max-height: 400px; overflow-y: auto;">
<table class="table table-sm table-striped m-0" style="font-size: 0.9rem;">
<thead class="table-light sticky-top">
<tr>
<th>วัน-เวลา</th>
<th>ผู้ดำเนินการ</th>
<th>ประเภท</th>
<th>รายละเอียด</th>
</tr>
</thead>
<tbody>
<?php foreach($logs as $log): ?>
<tr>
<td><?php echo date('d/m/Y H:i', strtotime($log['created_at'])); ?></td>
<td><?php echo htmlspecialchars($log['admin_name']); ?></td>
<td><span class="badge bg-secondary"><?php echo htmlspecialchars($log['action_type']); ?></span></td>
<td><?php echo htmlspecialchars($log['action_detail']); ?></td>
</tr>
<?php endforeach; ?>
<?php if(empty($logs)): ?>
<tr><td colspan="4" class="text-center text-muted py-3">ยังไม่มีประวัติการดำเนินการ</td></tr>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Rule Modal -->
<div class="modal fade" id="ruleModal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<form method="POST">
<div class="modal-header">
<h5 class="modal-title" id="ruleModalTitle">เพิ่ม/แก้ไข ระเบียบปฏิบัติ</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<input type="hidden" name="action" id="ruleAction" value="add_rule">
<input type="hidden" name="id" id="ruleId" value="">
<div class="mb-3">
<label class="form-label">ลำดับ</label>
<input type="number" class="form-control" name="order_no" id="ruleOrder" required value="0">
</div>
<div class="mb-3">
<label class="form-label">เนื้อหาระเบียบปฏิบัติ</label>
<textarea class="form-control" name="content" id="ruleContent" rows="4" required></textarea>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" name="is_active" id="ruleActive" value="1" checked>
<label class="form-check-label">เปิดใช้งาน</label>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">บันทึกข้อมูล</button>
</div>
</form>
</div>
</div>
</div>
<!-- SLA Modal -->
<div class="modal fade" id="slaModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<form method="POST">
<div class="modal-header">
<h5 class="modal-title" id="slaModalTitle">เพิ่ม/แก้ไข SLA</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<input type="hidden" name="action" id="slaAction" value="add_sla">
<input type="hidden" name="id" id="slaId" value="">
<div class="mb-3">
<label class="form-label">ลำดับ</label>
<input type="number" class="form-control" name="order_no" id="slaOrder" required value="0">
</div>
<div class="mb-3">
<label class="form-label">ชื่อบริการ</label>
<input type="text" class="form-control" name="service_name" id="slaName" required>
</div>
<div class="mb-3">
<label class="form-label">เวลามาตรฐาน (นาที)</label>
<input type="number" class="form-control" name="standard_time" id="slaTime" required>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" name="is_active" id="slaActive" value="1" checked>
<label class="form-check-label">เปิดใช้งาน</label>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">บันทึกข้อมูล</button>
</div>
</form>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
const ruleModal = new bootstrap.Modal(document.getElementById('ruleModal'));
const slaModal = new bootstrap.Modal(document.getElementById('slaModal'));
function openRuleModal() {
document.getElementById('ruleAction').value = 'add_rule';
document.getElementById('ruleId').value = '';
document.getElementById('ruleContent').value = '';
document.getElementById('ruleOrder').value = '0';
document.getElementById('ruleActive').checked = true;
document.getElementById('ruleModalTitle').innerText = 'เพิ่มระเบียบปฏิบัติ';
ruleModal.show();
}
function editRule(r) {
document.getElementById('ruleAction').value = 'edit_rule';
document.getElementById('ruleId').value = r.id;
document.getElementById('ruleContent').value = r.content;
document.getElementById('ruleOrder').value = r.order_no;
document.getElementById('ruleActive').checked = (r.is_active == 1);
document.getElementById('ruleModalTitle').innerText = 'แก้ไขระเบียบปฏิบัติ';
ruleModal.show();
}
function openSlaModal() {
document.getElementById('slaAction').value = 'add_sla';
document.getElementById('slaId').value = '';
document.getElementById('slaName').value = '';
document.getElementById('slaTime').value = '';
document.getElementById('slaOrder').value = '0';
document.getElementById('slaActive').checked = true;
document.getElementById('slaModalTitle').innerText = 'เพิ่มบริการ SLA';
slaModal.show();
}
function editSla(s) {
document.getElementById('slaAction').value = 'edit_sla';
document.getElementById('slaId').value = s.id;
document.getElementById('slaName').value = s.service_name;
document.getElementById('slaTime').value = s.standard_time;
document.getElementById('slaOrder').value = s.order_no;
document.getElementById('slaActive').checked = (s.is_active == 1);
document.getElementById('slaModalTitle').innerText = 'แก้ไขบริการ SLA';
slaModal.show();
}
<?php if(isset($_SESSION['success_msg'])): ?>
Swal.fire({
icon: 'success',
title: 'สำเร็จ!',
text: '<?php echo $_SESSION['success_msg']; ?>',
timer: 2000,
showConfirmButton: false
});
<?php unset($_SESSION['success_msg']); ?>
<?php endif; ?>
</script>
</body>
</html>