File Manager V1.5

[SYSTEM@ROOT]: /var/www/html/
INJECT_FILE:
NEW_ENTRY:

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 ]