65 lines
2.0 KiB
PHP
65 lines
2.0 KiB
PHP
<?php
|
|
// api/chat.php
|
|
require_once dirname(__DIR__) . '/config/config.php';
|
|
require_once dirname(__DIR__) . '/config/database.php';
|
|
|
|
header('Content-Type: application/json');
|
|
|
|
if (!isset($_SESSION['user_id'])) {
|
|
echo json_encode(['status' => 'error', 'message' => 'Unauthorized']);
|
|
exit;
|
|
}
|
|
|
|
$action = $_REQUEST['action'] ?? '';
|
|
$conn = Database::getInstance();
|
|
|
|
if ($action === 'get_messages') {
|
|
$job_id = $_GET['job_id'] ?? '';
|
|
if (empty($job_id)) {
|
|
echo json_encode(['status' => 'error', 'message' => 'Job ID required']);
|
|
exit;
|
|
}
|
|
|
|
$query = "SELECT m.*, u.full_name, u.role
|
|
FROM job_messages m
|
|
JOIN users u ON m.user_id = u.id
|
|
WHERE m.job_id = :job_id
|
|
ORDER BY m.created_at ASC";
|
|
$stmt = $conn->prepare($query);
|
|
$stmt->bindParam(':job_id', $job_id);
|
|
$stmt->execute();
|
|
|
|
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
echo json_encode(['status' => 'success', 'data' => $messages]);
|
|
|
|
} elseif ($action === 'send_message') {
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
|
echo json_encode(['status' => 'error', 'message' => 'Invalid method']);
|
|
exit;
|
|
}
|
|
|
|
$job_id = $_POST['job_id'] ?? '';
|
|
$message = trim($_POST['message'] ?? '');
|
|
$user_id = $_SESSION['user_id'];
|
|
|
|
if (empty($job_id) || empty($message)) {
|
|
echo json_encode(['status' => 'error', 'message' => 'ข้อมูลไม่ครบถ้วน']);
|
|
exit;
|
|
}
|
|
|
|
try {
|
|
$query = "INSERT INTO job_messages (job_id, user_id, message) VALUES (:job_id, :user_id, :message)";
|
|
$stmt = $conn->prepare($query);
|
|
$stmt->bindParam(':job_id', $job_id);
|
|
$stmt->bindParam(':user_id', $user_id);
|
|
$stmt->bindParam(':message', $message);
|
|
$stmt->execute();
|
|
|
|
echo json_encode(['status' => 'success']);
|
|
} catch (Exception $e) {
|
|
echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);
|
|
}
|
|
} else {
|
|
echo json_encode(['status' => 'error', 'message' => 'Invalid action']);
|
|
}
|