Initial commit

This commit is contained in:
Porawit Dongwang
2026-09-16 23:20:08 +07:00
commit 0041668dbb
32577 changed files with 3687927 additions and 0 deletions
@@ -0,0 +1,134 @@
<div class="d-flex justify-content-between align-items-center mb-4">
<h1 class="h3 mb-0 text-gray-800">จัดการสิทธิ์ผู้ใช้งาน (Roles)</h1>
<a href="<?= BASE_URL ?>/settings" class="btn btn-outline-secondary shadow-sm"><i class="fa-solid fa-arrow-left me-1"></i> กลับไปตั้งค่า</a>
</div>
<div class="row">
<!-- ฟอร์มเพิ่มสิทธิ์ -->
<div class="col-lg-4">
<div class="card shadow-sm border-0 rounded-4 mb-4 overflow-hidden">
<div class="card-header bg-primary text-white py-3">
<h6 class="m-0 font-weight-bold"><i class="fa-solid fa-user-plus me-2"></i>มอบสิทธิ์ให้ผู้ใช้</h6>
</div>
<div class="card-body">
<form action="<?= BASE_URL ?>/roles/assign" method="POST">
<input type="hidden" name="csrf_token" value="<?= $csrf_token ?>">
<div class="mb-3">
<label class="form-label fw-bold">ค้นหาผู้ใช้ (ชื่อ - นามสกุล)</label>
<select class="form-control" id="userSelect" name="user_id" required>
<option value="">-- พิมพ์ชื่อเพื่อค้นหา --</option>
</select>
<div class="form-text">ระบบจะค้นหาจากฐานข้อมูลบุคลากร (HR)</div>
</div>
<div class="mb-4">
<label class="form-label fw-bold">เลือกสิทธิ์ (Role)</label>
<select class="form-select" name="role_id" required>
<option value="">-- เลือกสิทธิ์ --</option>
<?php foreach($roles as $role): ?>
<option value="<?= $role['id'] ?>"><?= $role['name'] ?> (<?= $role['description'] ?>)</option>
<?php endforeach; ?>
</select>
</div>
<button type="submit" class="btn btn-primary w-100"><i class="fa-solid fa-check me-1"></i> มอบสิทธิ์</button>
</form>
</div>
</div>
</div>
<!-- ตารางผู้ที่มีสิทธิ์ -->
<div class="col-lg-8">
<div class="card shadow-sm border-0 rounded-4 mb-4 overflow-hidden">
<div class="card-header bg-white py-3">
<h6 class="m-0 font-weight-bold text-primary"><i class="fa-solid fa-users-gear me-2"></i>รายชื่อผู้ที่ได้รับสิทธิ์ในระบบ</h6>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered table-hover align-middle" id="rolesTable">
<thead class="table-light">
<tr>
<th>รหัส (HR_CID)</th>
<th>ชื่อ - นามสกุล</th>
<th>สิทธิ์ที่ได้รับ</th>
<th class="text-center" width="100">จัดการ</th>
</tr>
</thead>
<tbody>
<?php if(empty($assigned)): ?>
<tr>
<td colspan="4" class="text-center py-3">ยังไม่มีผู้ได้รับสิทธิ์</td>
</tr>
<?php else: ?>
<?php foreach($assigned as $a): ?>
<tr>
<td><?= $a['user_id'] ?></td>
<td><?= htmlspecialchars($a['fullname']) ?></td>
<td>
<span class="badge bg-info text-dark">
<?= htmlspecialchars($a['role_name']) ?>
</span>
<small class="text-muted d-block"><?= htmlspecialchars($a['role_desc']) ?></small>
</td>
<td class="text-center">
<form action="<?= BASE_URL ?>/roles/remove" method="POST" onsubmit="return confirm('ยืนยันการลบสิทธิ์นี้?');">
<input type="hidden" name="csrf_token" value="<?= $csrf_token ?>">
<input type="hidden" name="user_id" value="<?= $a['user_id'] ?>">
<input type="hidden" name="role_id" value="<?= $a['role_id'] ?>">
<button type="submit" class="btn btn-sm btn-outline-danger"><i class="fa-solid fa-trash"></i></button>
</form>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<?php
// เพิ่ม Select2 CSS & JS
$extraScripts = '
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
<link href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<script>
$(document).ready(function() {
if($("#rolesTable tbody tr td").length > 1) {
$("#rolesTable").DataTable({
"language": {
"url": "//cdn.datatables.net/plug-ins/1.13.6/i18n/th.json"
}
});
}
$("#userSelect").select2({
theme: "bootstrap-5",
placeholder: "-- พิมพ์ชื่อเพื่อค้นหา --",
allowClear: true,
ajax: {
url: "'.BASE_URL.'/roles/search",
dataType: "json",
delay: 250,
data: function (params) {
return {
q: params.term
};
},
processResults: function (data) {
return {
results: data
};
},
cache: true
},
minimumInputLength: 2
});
});
</script>
';
?>