File Manager V1.5
FILE_CONTENT: send_message.php
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS");
header("Access-Control-Allow-Headers: Authorization, Content-Type, Accept, X-Requested-With, User-Agent, Origin");
header("Access-Control-Max-Age: 86400");
header("Content-Type: application/json; charset=UTF-8");
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
http_response_code(200);
exit;
}
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(["success" => false, "message" => "Only POST method allowed"]);
exit;
}
require 'vendor/autoload.php';
require 'db.php';
use Dotenv\Dotenv;
try {
$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();
} catch (Exception $e) {
// Используем настройки из db.php, если .env недоступен
}
// Проверка авторизации
$token = getAuthToken();
if (!$token) {
http_response_code(401);
echo json_encode(['success' => false, 'message' => 'Authorization required']);
exit;
}
$decoded = verifyToken($token);
if (!$decoded) {
http_response_code(401);
echo json_encode(['success' => false, 'message' => 'Invalid token']);
exit;
}
$pdo = getPDO();
$input = file_get_contents('php://input');
$data = json_decode($input, true);
if (empty($data['message'])) {
http_response_code(400);
echo json_encode(['success' => false, 'message' => 'Message text is required']);
exit;
}
$messageText = trim($data['message']);
if (empty($messageText)) {
http_response_code(400);
echo json_encode(['success' => false, 'message' => 'Message text cannot be empty']);
exit;
}
try {
$userId = $decoded['user_id'];
$userType = (int)$decoded['user_type']; // Явно преобразуем в int
// Администраторами считаются user_type >= 1 (все кроме обычных пользователей с типом 0)
$isAdmin = ($userType >= 1);
$chatId = null;
$senderType = 0; // По умолчанию - пользователь
if ($isAdmin) {
// Администратор отправляет ответ в конкретный чат
if (empty($data['chat_id'])) {
http_response_code(400);
echo json_encode(['success' => false, 'message' => 'chat_id is required for admin messages']);
exit;
}
$chatId = (int)$data['chat_id'];
// Проверяем, существует ли чат
$stmt = $pdo->prepare("SELECT id FROM chats WHERE id = ?");
$stmt->execute([$chatId]);
$chat = $stmt->fetch();
if (!$chat) {
http_response_code(404);
echo json_encode(['success' => false, 'message' => 'Chat not found']);
exit;
}
$senderType = 1; // Сообщение от администратора
} else {
// Обычный пользователь отправляет сообщение администратору
// Проверяем, есть ли уже чат для этого пользователя
$stmt = $pdo->prepare("SELECT id FROM chats WHERE user_id = ? AND user_type = ?");
$stmt->execute([$userId, $userType]);
$chat = $stmt->fetch();
if (!$chat) {
// Создаем новый чат
$stmt = $pdo->prepare("INSERT INTO chats (user_id, user_type) VALUES (?, ?)");
$stmt->execute([$userId, $userType]);
$chatId = $pdo->lastInsertId();
} else {
$chatId = $chat['id'];
}
$senderType = 0; // Сообщение от пользователя
}
// Добавляем сообщение
$stmt = $pdo->prepare("
INSERT INTO messages (chat_id, sender_id, sender_type, message)
VALUES (?, ?, ?, ?)
");
$stmt->execute([$chatId, $userId, $senderType, $messageText]);
$messageId = $pdo->lastInsertId();
// Обновляем время обновления чата
$stmt = $pdo->prepare("UPDATE chats SET updated_at = NOW() WHERE id = ?");
$stmt->execute([$chatId]);
http_response_code(201);
echo json_encode([
'success' => true,
'message' => 'Message sent successfully',
'data' => [
'message_id' => $messageId,
'chat_id' => $chatId,
'sender_type' => $senderType
]
]);
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['success' => false, 'message' => 'Database error: ' . $e->getMessage()]);
} catch (Exception $e) {
http_response_code(500);
echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}
[ KEMBALI ]