Initial import
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
$page_title = 'เพิ่มผู้ใช้';
|
||||
require_once __DIR__ . '/../includes/functions.php';
|
||||
requireAdmin();
|
||||
require_once __DIR__ . '/../includes/header.php';
|
||||
|
||||
$curricula = getCurricula();
|
||||
$error = '';
|
||||
$message = '';
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$staff_code = trim($_POST['staff_code'] ?? '');
|
||||
$name = trim($_POST['name'] ?? '');
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$curriculum_id = !empty($_POST['curriculum_id']) ? intval($_POST['curriculum_id']) : null;
|
||||
$role = $_POST['role'] ?? 'advisor';
|
||||
$password = trim($_POST['password'] ?? '');
|
||||
|
||||
if (empty($staff_code) || empty($name) || empty($email) || empty($password)) {
|
||||
$error = 'กรุณากรอกข้อมูลให้ครบถ้วน';
|
||||
} else {
|
||||
try {
|
||||
$db = getDB();
|
||||
$stmt = $db->prepare("SELECT COUNT(*) FROM users WHERE staff_code = ?");
|
||||
$stmt->execute([$staff_code]);
|
||||
if ($stmt->fetchColumn() > 0) {
|
||||
$error = 'รหัสบุคลากรนี้มีอยู่ในระบบแล้ว';
|
||||
} else {
|
||||
$stmt = $db->prepare("INSERT INTO users (staff_code, name, email, curriculum_id, role, password) VALUES (?, ?, ?, ?, ?, ?)");
|
||||
$stmt->execute([$staff_code, $name, $email, $curriculum_id, $role, password_hash($password, PASSWORD_DEFAULT)]);
|
||||
$message = 'เพิ่มผู้ใช้สำเร็จ';
|
||||
echo "<script>window.location.href='list.php';</script>";
|
||||
exit;
|
||||
}
|
||||
} catch (PDOException $e) {
|
||||
$error = 'เกิดข้อผิดพลาด: ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<h4 class="mb-3">เพิ่มผู้ใช้</h4>
|
||||
<?php if ($error): ?><div class="alert alert-danger"><?= htmlspecialchars($error) ?></div><?php endif; ?>
|
||||
<?php if ($message): ?><div class="alert alert-success"><?= htmlspecialchars($message) ?></div><?php endif; ?>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form method="POST">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">รหัสบุคลากร <span class="text-danger">*</span></label>
|
||||
<input type="text" name="staff_code" class="form-control" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">ชื่อ-สกุล <span class="text-danger">*</span></label>
|
||||
<input type="text" name="name" class="form-control" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">อีเมล <span class="text-danger">*</span></label>
|
||||
<input type="email" name="email" class="form-control" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">สาขาวิชา</label>
|
||||
<select name="curriculum_id" class="form-select">
|
||||
<option value="">-- ไม่ระบุ --</option>
|
||||
<?php foreach ($curricula as $c): ?>
|
||||
<option value="<?= $c['id'] ?>"><?= htmlspecialchars($c['code']) ?> - <?= htmlspecialchars($c['name_th']) ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">บทบาท</label>
|
||||
<select name="role" class="form-select">
|
||||
<option value="advisor">อาจารย์ที่ปรึกษา</option>
|
||||
<option value="admin">ผู้ดูแลระบบ</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">รหัสผ่าน <span class="text-danger">*</span></label>
|
||||
<input type="password" name="password" class="form-control" required>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary"><i class="bi bi-save"></i> บันทึก</button>
|
||||
<a href="list.php" class="btn btn-secondary">ยกเลิก</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php require_once __DIR__ . '/../includes/footer.php'; ?>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../includes/functions.php';
|
||||
requireAdmin();
|
||||
$id = intval($_GET['id'] ?? 0);
|
||||
if ($id > 0) {
|
||||
$db = getDB();
|
||||
$stmt = $db->prepare("DELETE FROM users WHERE id = ?");
|
||||
$stmt->execute([$id]);
|
||||
}
|
||||
header('Location: list.php?deleted=1');
|
||||
exit;
|
||||
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
$page_title = 'แก้ไขผู้ใช้';
|
||||
require_once __DIR__ . '/../includes/functions.php';
|
||||
requireAdmin();
|
||||
require_once __DIR__ . '/../includes/header.php';
|
||||
|
||||
$id = intval($_GET['id'] ?? 0);
|
||||
$user = getUser($id);
|
||||
if (!$user) {
|
||||
echo '<div class="alert alert-danger">ไม่พบผู้ใช้</div>';
|
||||
require_once __DIR__ . '/../includes/footer.php';
|
||||
exit;
|
||||
}
|
||||
|
||||
$curricula = getCurricula();
|
||||
$error = '';
|
||||
$message = '';
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$staff_code = trim($_POST['staff_code'] ?? '');
|
||||
$name = trim($_POST['name'] ?? '');
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$curriculum_id = !empty($_POST['curriculum_id']) ? intval($_POST['curriculum_id']) : null;
|
||||
$role = $_POST['role'] ?? 'advisor';
|
||||
$password = trim($_POST['password'] ?? '');
|
||||
|
||||
if (empty($staff_code) || empty($name) || empty($email)) {
|
||||
$error = 'กรุณากรอกข้อมูลให้ครบถ้วน';
|
||||
} else {
|
||||
try {
|
||||
$db = getDB();
|
||||
$stmt = $db->prepare("SELECT COUNT(*) FROM users WHERE staff_code = ? AND id != ?");
|
||||
$stmt->execute([$staff_code, $id]);
|
||||
if ($stmt->fetchColumn() > 0) {
|
||||
$error = 'รหัสบุคลากรนี้มีผู้ใช้อื่นใช้อยู่แล้ว';
|
||||
} else {
|
||||
if (!empty($password)) {
|
||||
$stmt = $db->prepare("UPDATE users SET staff_code=?, name=?, email=?, curriculum_id=?, role=?, password=? WHERE id=?");
|
||||
$stmt->execute([$staff_code, $name, $email, $curriculum_id, $role, password_hash($password, PASSWORD_DEFAULT), $id]);
|
||||
} else {
|
||||
$stmt = $db->prepare("UPDATE users SET staff_code=?, name=?, email=?, curriculum_id=?, role=? WHERE id=?");
|
||||
$stmt->execute([$staff_code, $name, $email, $curriculum_id, $role, $id]);
|
||||
}
|
||||
$message = 'บันทึกการแก้ไขเรียบร้อย';
|
||||
$user = getUser($id);
|
||||
}
|
||||
} catch (PDOException $e) {
|
||||
$error = 'เกิดข้อผิดพลาด: ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<h4 class="mb-3">แก้ไขผู้ใช้: <?= htmlspecialchars($user['name']) ?></h4>
|
||||
<?php if ($error): ?><div class="alert alert-danger"><?= htmlspecialchars($error) ?></div><?php endif; ?>
|
||||
<?php if ($message): ?><div class="alert alert-success"><?= htmlspecialchars($message) ?></div><?php endif; ?>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form method="POST">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">รหัสบุคลากร <span class="text-danger">*</span></label>
|
||||
<input type="text" name="staff_code" class="form-control" value="<?= htmlspecialchars($user['staff_code']) ?>" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">ชื่อ-สกุล <span class="text-danger">*</span></label>
|
||||
<input type="text" name="name" class="form-control" value="<?= htmlspecialchars($user['name']) ?>" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">อีเมล <span class="text-danger">*</span></label>
|
||||
<input type="email" name="email" class="form-control" value="<?= htmlspecialchars($user['email']) ?>" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">สาขาวิชา</label>
|
||||
<select name="curriculum_id" class="form-select">
|
||||
<option value="">-- ไม่ระบุ --</option>
|
||||
<?php foreach ($curricula as $c): ?>
|
||||
<option value="<?= $c['id'] ?>" <?= $user['curriculum_id'] == $c['id'] ? 'selected' : '' ?>><?= htmlspecialchars($c['code']) ?> - <?= htmlspecialchars($c['name_th']) ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">บทบาท</label>
|
||||
<select name="role" class="form-select">
|
||||
<option value="advisor" <?= $user['role'] == 'advisor' ? 'selected' : '' ?>>อาจารย์ที่ปรึกษา</option>
|
||||
<option value="admin" <?= $user['role'] == 'admin' ? 'selected' : '' ?>>ผู้ดูแลระบบ</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">รหัสผ่านใหม่ <small class="text-muted">(เว้นว่างไว้ถ้าไม่ต้องการเปลี่ยน)</small></label>
|
||||
<input type="password" name="password" class="form-control">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary"><i class="bi bi-save"></i> บันทึก</button>
|
||||
<a href="list.php" class="btn btn-secondary">ยกเลิก</a>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<?php require_once __DIR__ . '/../includes/footer.php'; ?>
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
$page_title = 'จัดการผู้ใช้';
|
||||
require_once __DIR__ . '/../includes/functions.php';
|
||||
requireAdmin();
|
||||
require_once __DIR__ . '/../includes/header.php';
|
||||
|
||||
$db = getDB();
|
||||
$users = $db->query("SELECT u.*, c.name_th AS curriculum_name FROM users u LEFT JOIN curricula c ON u.curriculum_id = c.id ORDER BY u.staff_code")->fetchAll();
|
||||
|
||||
if (isset($_GET['deleted'])): ?>
|
||||
<div class="alert alert-success alert-dismissible fade show">ลบผู้ใช้เรียบร้อยแล้ว<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="page-heading">
|
||||
<div>
|
||||
<h4>จัดการผู้ใช้</h4>
|
||||
<div class="text-muted small">ทั้งหมด <?= count($users) ?> บัญชี</div>
|
||||
</div>
|
||||
<a href="add.php" class="btn btn-primary"><i class="bi bi-plus-lg"></i> เพิ่มผู้ใช้</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body p-0">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped mb-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>รหัสบุคลากร</th>
|
||||
<th>ชื่อ-สกุล</th>
|
||||
<th>อีเมล</th>
|
||||
<th>สาขาวิชา</th>
|
||||
<th>บทบาท</th>
|
||||
<th style="width:140px">จัดการ</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($users as $u): ?>
|
||||
<tr>
|
||||
<td><?= htmlspecialchars($u['staff_code']) ?></td>
|
||||
<td><?= htmlspecialchars($u['name']) ?></td>
|
||||
<td><?= htmlspecialchars($u['email']) ?></td>
|
||||
<td><?= htmlspecialchars($u['curriculum_name'] ?? '-') ?></td>
|
||||
<td><?= $u['role'] == 'admin' ? 'ผู้ดูแลระบบ' : 'อาจารย์ที่ปรึกษา' ?></td>
|
||||
<td>
|
||||
<div class="action-buttons">
|
||||
<a href="edit.php?id=<?= $u['id'] ?>" class="btn btn-sm btn-warning"><i class="bi bi-pencil"></i></a>
|
||||
<a href="delete.php?id=<?= $u['id'] ?>" class="btn btn-sm btn-danger" onclick="return confirm('ยืนยันลบผู้ใช้ <?= htmlspecialchars($u['name']) ?>?')"><i class="bi bi-trash"></i></a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php require_once __DIR__ . '/../includes/footer.php'; ?>
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
$page_title = 'ข้อมูลส่วนตัว';
|
||||
require_once __DIR__ . '/../includes/functions.php';
|
||||
requireLogin();
|
||||
|
||||
if (isStudent()) {
|
||||
header('Location: ' . BASE_URL . '/index.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// Hardcoded admin has no DB record
|
||||
if ($_SESSION['user_id'] === null) {
|
||||
header('Location: ' . BASE_URL . '/index.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$user = getUser($_SESSION['user_id']);
|
||||
if (!$user) {
|
||||
echo '<div class="alert alert-danger">ไม่พบข้อมูลผู้ใช้</div>';
|
||||
exit;
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../includes/header.php';
|
||||
?>
|
||||
|
||||
<div class="page-heading">
|
||||
<div>
|
||||
<h4><i class="bi bi-person-bounding-box"></i> ข้อมูลส่วนตัว</h4>
|
||||
<div class="text-muted small">ดูรายละเอียดข้อมูลบัญชีผู้ใช้ของคุณ</div>
|
||||
</div>
|
||||
<a href="<?= BASE_URL ?>/index.php" class="btn btn-secondary btn-sm"><i class="bi bi-arrow-left"></i> กลับหน้าหลัก</a>
|
||||
</div>
|
||||
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-6">
|
||||
<div class="card">
|
||||
<div class="card-header bg-primary text-white">
|
||||
<h5 class="mb-0"><i class="bi bi-person-circle"></i> รายละเอียดผู้ใช้งาน</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-borderless table-striped">
|
||||
<tr>
|
||||
<th style="width: 200px;">รหัสบุคลากร:</th>
|
||||
<td><?= htmlspecialchars($user['staff_code']) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>ชื่อ-สกุล:</th>
|
||||
<td><?= htmlspecialchars($user['name']) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>อีเมล:</th>
|
||||
<td><?= htmlspecialchars($user['email'] ?: '-') ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>บทบาทในระบบ:</th>
|
||||
<td>
|
||||
<span class="badge bg-<?= $user['role'] === 'admin' ? 'danger' : 'primary' ?>">
|
||||
<?= $user['role'] === 'admin' ? 'ผู้ดูแลระบบ' : 'อาจารย์ที่ปรึกษา' ?>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>สาขาวิชาที่ดูแล:</th>
|
||||
<td>
|
||||
<?= htmlspecialchars($user['curriculum_name'] ?: 'ไม่ระบุ') ?>
|
||||
<?php if ($user['curriculum_code']): ?>
|
||||
(<?= htmlspecialchars($user['curriculum_code']) ?>)
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr>
|
||||
<div class="d-flex justify-content-between">
|
||||
<a href="profile_edit.php" class="btn btn-warning"><i class="bi bi-pencil-square"></i> แก้ไขข้อมูลส่วนตัว</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php require_once __DIR__ . '/../includes/footer.php'; ?>
|
||||
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
$page_title = 'แก้ไขข้อมูลส่วนตัว';
|
||||
require_once __DIR__ . '/../includes/functions.php';
|
||||
requireLogin();
|
||||
|
||||
if (isStudent()) {
|
||||
header('Location: ' . BASE_URL . '/index.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// Hardcoded admin has no DB record
|
||||
if ($_SESSION['user_id'] === null) {
|
||||
header('Location: ' . BASE_URL . '/index.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$id = $_SESSION['user_id'];
|
||||
$user = getUser($id);
|
||||
if (!$user) {
|
||||
echo '<div class="alert alert-danger">ไม่พบข้อมูลผู้ใช้</div>';
|
||||
exit;
|
||||
}
|
||||
|
||||
$error = '';
|
||||
$message = '';
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$staff_code = trim($_POST['staff_code'] ?? '');
|
||||
$name = trim($_POST['name'] ?? '');
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$password = trim($_POST['password'] ?? '');
|
||||
|
||||
if (empty($staff_code) || empty($name) || empty($email)) {
|
||||
$error = 'กรุณากรอกข้อมูลให้ครบถ้วน';
|
||||
} else {
|
||||
try {
|
||||
$db = getDB();
|
||||
// Check if staff code is already in use by another user
|
||||
$stmt = $db->prepare("SELECT COUNT(*) FROM users WHERE staff_code = ? AND id != ?");
|
||||
$stmt->execute([$staff_code, $id]);
|
||||
if ($stmt->fetchColumn() > 0) {
|
||||
$error = 'รหัสบุคลากรนี้มีผู้ใช้อื่นใช้อยู่แล้ว';
|
||||
} else {
|
||||
if (!empty($password)) {
|
||||
$stmt = $db->prepare("UPDATE users SET staff_code=?, name=?, email=?, password=? WHERE id=?");
|
||||
$stmt->execute([$staff_code, $name, $email, password_hash($password, PASSWORD_DEFAULT), $id]);
|
||||
} else {
|
||||
$stmt = $db->prepare("UPDATE users SET staff_code=?, name=?, email=? WHERE id=?");
|
||||
$stmt->execute([$staff_code, $name, $email, $id]);
|
||||
}
|
||||
|
||||
// Update session username to match new name
|
||||
$_SESSION['username'] = $name;
|
||||
|
||||
$message = 'บันทึกการแก้ไขเรียบร้อย';
|
||||
$user = getUser($id);
|
||||
}
|
||||
} catch (PDOException $e) {
|
||||
$error = 'เกิดข้อผิดพลาด: ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../includes/header.php';
|
||||
?>
|
||||
|
||||
<div class="page-heading">
|
||||
<div>
|
||||
<h4><i class="bi bi-pencil-square"></i> แก้ไขข้อมูลส่วนตัว</h4>
|
||||
<div class="text-muted small">แก้ไขข้อมูลส่วนตัวและเปลี่ยนรหัสผ่านของคุณ</div>
|
||||
</div>
|
||||
<a href="profile.php" class="btn btn-secondary btn-sm"><i class="bi bi-arrow-left"></i> กลับ</a>
|
||||
</div>
|
||||
|
||||
<?php if ($error): ?><div class="alert alert-danger"><?= htmlspecialchars($error) ?></div><?php endif; ?>
|
||||
<?php if ($message): ?><div class="alert alert-success"><?= htmlspecialchars($message) ?></div><?php endif; ?>
|
||||
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-6">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form method="POST">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">รหัสบุคลากร <span class="text-danger">*</span></label>
|
||||
<input type="text" name="staff_code" class="form-control" value="<?= htmlspecialchars($user['staff_code']) ?>" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">ชื่อ-สกุล <span class="text-danger">*</span></label>
|
||||
<input type="text" name="name" class="form-control" value="<?= htmlspecialchars($user['name']) ?>" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">อีเมล <span class="text-danger">*</span></label>
|
||||
<input type="email" name="email" class="form-control" value="<?= htmlspecialchars($user['email']) ?>" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">บทบาทในระบบ</label>
|
||||
<input type="text" class="form-control" value="<?= $user['role'] === 'admin' ? 'ผู้ดูแลระบบ' : 'อาจารย์ที่ปรึกษา' ?>" disabled readonly>
|
||||
<small class="text-muted">ไม่สามารถแก้ไขบทบาทด้วยตัวเองได้</small>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">รหัสผ่านใหม่ <small class="text-muted">(เว้นว่างไว้หากไม่ต้องการเปลี่ยน)</small></label>
|
||||
<input type="password" name="password" class="form-control" placeholder="กรอกรหัสผ่านใหม่">
|
||||
</div>
|
||||
<hr>
|
||||
<div class="d-flex justify-content-between">
|
||||
<button type="submit" class="btn btn-primary"><i class="bi bi-save"></i> บันทึกการเปลี่ยนแปลง</button>
|
||||
<a href="profile.php" class="btn btn-secondary">ยกเลิก</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php require_once __DIR__ . '/../includes/footer.php'; ?>
|
||||
Reference in New Issue
Block a user