File Manager V1.5

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

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 ]