Files
gravity/บริหารจัดการงานเปล/api/users.php
T
2026-09-16 23:20:08 +07:00

172 lines
7.9 KiB
PHP

<?php
// api/users.php
require_once dirname(__DIR__) . '/config/config.php';
require_once dirname(__DIR__) . '/models/User.php';
header('Content-Type: application/json');
$action = $_REQUEST['action'] ?? '';
if ($action === 'login') {
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Validate CSRF
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
echo json_encode(['status' => 'error', 'message' => 'Invalid CSRF token']);
exit;
}
$username = trim($_POST['username'] ?? '');
$password = trim($_POST['password'] ?? '');
if (empty($username) || empty($password)) {
echo json_encode(['status' => 'error', 'message' => 'กรุณากรอกชื่อผู้ใช้งานและรหัสผ่าน']);
exit;
}
$userModel = new User();
if ($userModel->login($username, $password)) {
// Set session variables
$_SESSION['user_id'] = $userModel->id;
$_SESSION['username'] = $userModel->username;
$_SESSION['full_name'] = $userModel->full_name;
$_SESSION['role'] = $userModel->role;
$_SESSION['department_id'] = $userModel->department_id;
echo json_encode(['status' => 'success', 'message' => 'เข้าสู่ระบบสำเร็จ']);
} else {
echo json_encode(['status' => 'error', 'message' => 'ชื่อผู้ใช้งานหรือรหัสผ่านไม่ถูกต้อง']);
}
} else {
echo json_encode(['status' => 'error', 'message' => 'Method not allowed']);
}
} elseif ($action === 'logout') {
if (isset($_SESSION['user_id'])) {
$userModel = new User();
$userModel->updateStatus($_SESSION['user_id'], 'offline');
}
// Destroy session
session_unset();
session_destroy();
// Redirect to login page
header("Location: ../index.php?page=login");
exit;
} elseif ($action === 'add' && isset($_SESSION['role']) && $_SESSION['role'] === 'admin') {
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
echo json_encode(['status' => 'error', 'message' => 'Invalid CSRF token']);
exit;
}
$username = trim($_POST['username'] ?? '');
$password = trim($_POST['password'] ?? '');
$full_name = trim($_POST['full_name'] ?? '');
$role = trim($_POST['role'] ?? '');
$department_id = !empty($_POST['department_id']) ? $_POST['department_id'] : null;
if (empty($username) || empty($password) || empty($full_name) || empty($role)) {
echo json_encode(['status' => 'error', 'message' => 'กรุณากรอกข้อมูลให้ครบถ้วน']);
exit;
}
$userModel = new User();
try {
if ($userModel->add($username, $password, $full_name, $role, $department_id)) {
echo json_encode(['status' => 'success', 'message' => 'เพิ่มเจ้าหน้าที่เรียบร้อยแล้ว']);
} else {
echo json_encode(['status' => 'error', 'message' => 'ไม่สามารถเพิ่มเจ้าหน้าที่ได้']);
}
} catch (PDOException $e) {
echo json_encode(['status' => 'error', 'message' => 'เกิดข้อผิดพลาด: ' . $e->getMessage()]);
}
}
} elseif ($action === 'edit' && isset($_SESSION['role']) && $_SESSION['role'] === 'admin') {
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
echo json_encode(['status' => 'error', 'message' => 'Invalid CSRF token']);
exit;
}
$id = $_POST['id'] ?? '';
$full_name = trim($_POST['full_name'] ?? '');
$role = trim($_POST['role'] ?? '');
$department_id = !empty($_POST['department_id']) ? $_POST['department_id'] : null;
if (empty($id) || empty($full_name) || empty($role)) {
echo json_encode(['status' => 'error', 'message' => 'กรุณากรอกข้อมูลให้ครบถ้วน']);
exit;
}
$userModel = new User();
try {
if ($userModel->update($id, $full_name, $role, $department_id)) {
echo json_encode(['status' => 'success', 'message' => 'แก้ไขข้อมูลเจ้าหน้าที่เรียบร้อยแล้ว']);
} else {
echo json_encode(['status' => 'error', 'message' => 'ไม่สามารถแก้ไขข้อมูลได้']);
}
} catch (PDOException $e) {
echo json_encode(['status' => 'error', 'message' => 'เกิดข้อผิดพลาด: ' . $e->getMessage()]);
}
}
} elseif ($action === 'edit_password' && isset($_SESSION['role']) && $_SESSION['role'] === 'admin') {
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
echo json_encode(['status' => 'error', 'message' => 'Invalid CSRF token']);
exit;
}
$id = $_POST['id'] ?? '';
$password = trim($_POST['password'] ?? '');
if (empty($id) || empty($password)) {
echo json_encode(['status' => 'error', 'message' => 'กรุณากรอกรหัสผ่านใหม่']);
exit;
}
$userModel = new User();
try {
if ($userModel->updatePassword($id, $password)) {
echo json_encode(['status' => 'success', 'message' => 'เปลี่ยนรหัสผ่านเรียบร้อยแล้ว']);
} else {
echo json_encode(['status' => 'error', 'message' => 'ไม่สามารถเปลี่ยนรหัสผ่านได้']);
}
} catch (PDOException $e) {
echo json_encode(['status' => 'error', 'message' => 'เกิดข้อผิดพลาด: ' . $e->getMessage()]);
}
}
} elseif ($action === 'delete' && isset($_SESSION['role']) && $_SESSION['role'] === 'admin') {
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
echo json_encode(['status' => 'error', 'message' => 'Invalid CSRF token']);
exit;
}
$id = $_POST['id'] ?? '';
if (empty($id)) {
echo json_encode(['status' => 'error', 'message' => 'ไม่พบรหัสผู้ใช้งาน']);
exit;
}
// Prevent self-deletion
if ($id == $_SESSION['user_id']) {
echo json_encode(['status' => 'error', 'message' => 'ไม่สามารถลบบัญชีของตัวเองได้']);
exit;
}
$userModel = new User();
try {
if ($userModel->delete($id)) {
echo json_encode(['status' => 'success', 'message' => 'ลบเจ้าหน้าที่เรียบร้อยแล้ว']);
} else {
echo json_encode(['status' => 'error', 'message' => 'ไม่สามารถลบเจ้าหน้าที่ได้']);
}
} catch (PDOException $e) {
echo json_encode(['status' => 'error', 'message' => 'ไม่สามารถลบได้เนื่องจากมีการผูกกับงานอื่นอยู่']);
}
}
} else {
echo json_encode(['status' => 'error', 'message' => 'Invalid action']);
}