File Manager V1.5
FILE_CONTENT: get_messages.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'] !== 'GET') {
http_response_code(405);
echo json_encode(["success" => false, "message" => "Only GET 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();
$userId = $decoded['user_id'];
$userType = (int)$decoded['user_type']; // Явно преобразуем в int
// Администраторами считаются user_type >= 1 (все кроме обычных пользователей с типом 0)
$isAdmin = ($userType >= 1);
try {
// Если администратор запрашивает сообщения конкретного чата
if ($isAdmin && isset($_GET['chat_id'])) {
$chatId = (int)$_GET['chat_id'];
// Проверяем, существует ли чат
$stmt = $pdo->prepare("SELECT * 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;
}
// Получаем все сообщения чата
$stmt = $pdo->prepare("
SELECT
m.id,
m.chat_id,
m.sender_id,
m.sender_type,
m.message,
m.is_read,
m.created_at
FROM messages m
WHERE m.chat_id = ?
ORDER BY m.created_at ASC
");
$stmt->execute([$chatId]);
$messages = $stmt->fetchAll();
// Помечаем сообщения как прочитанные (только те, что отправлены пользователем)
$stmt = $pdo->prepare("
UPDATE messages
SET is_read = 1
WHERE chat_id = ? AND sender_type = 0 AND is_read = 0
");
$stmt->execute([$chatId]);
echo json_encode([
'success' => true,
'data' => [
'chat' => $chat,
'messages' => $messages
]
]);
} else {
// Пользователь запрашивает свои сообщения
if (!$isAdmin) {
// Находим чат пользователя
$stmt = $pdo->prepare("SELECT id FROM chats WHERE user_id = ? AND user_type = ?");
$stmt->execute([$userId, $userType]);
$chat = $stmt->fetch();
if (!$chat) {
// Если чата нет, возвращаем пустой массив
echo json_encode([
'success' => true,
'data' => [
'chat' => null,
'messages' => []
]
]);
exit;
}
$chatId = $chat['id'];
// Получаем все сообщения чата
$stmt = $pdo->prepare("
SELECT
m.id,
m.chat_id,
m.sender_id,
m.sender_type,
m.message,
m.is_read,
m.created_at
FROM messages m
WHERE m.chat_id = ?
ORDER BY m.created_at ASC
");
$stmt->execute([$chatId]);
$messages = $stmt->fetchAll();
echo json_encode([
'success' => true,
'data' => [
'chat' => $chat,
'messages' => $messages
]
]);
} else {
// Администратор запрашивает без chat_id - возвращаем ошибку
http_response_code(400);
echo json_encode(['success' => false, 'message' => 'chat_id parameter is required for admin']);
}
}
} 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 ]