File Manager V1.5

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

FILE_CONTENT: cancel_booking.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");

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}

require __DIR__ . '/vendor/autoload.php';
use Firebase\JWT\Key; 

require_once 'db.php';

function logError($message) {
    $logFile = __DIR__ . '/error.log';
    if (!is_writable(__DIR__)) {
        error_log(date('[Y-m-d H:i:s] ') . 'Директория недоступна для записи: ' . __DIR__ . ' - ' . $message . PHP_EOL, 0);
    } else {
        error_log(date('[Y-m-d H:i:s] ') . $message . PHP_EOL, 3, $logFile);
    }
}

function sendResponse($success, $message = '', $data = null, $code = 200) {
    http_response_code($code);
    $response = [
        'success' => $success,
        'message' => $message,
        'data' => $data,
        'timestamp' => time()
    ];
    logError('Отправка ответа: ' . json_encode($response, JSON_UNESCAPED_UNICODE));
    echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT);
    exit;
}

logError('Скрипт cancel_booking.php запущен');

try {
    $rawInput = file_get_contents('php://input');
    logError('Входные данные: ' . $rawInput);
    $input = json_decode($rawInput, true);
    
    if (json_last_error() !== JSON_ERROR_NONE) {
        $errorMsg = 'Неверный формат JSON: ' . json_last_error_msg();
        logError($errorMsg . ' (сырые данные: ' . $rawInput . ')');
        sendResponse(false, $errorMsg, null, 400);
    }

    if (!isset($input['booking_id']) || !is_numeric($input['booking_id'])) {
        logError('Отсутствует или неверный booking_id: ' . json_encode($input));
        sendResponse(false, 'Отсутствует или неверный booking_id', null, 400);
    }

    $bookingId = (int)$input['booking_id'];
    logError('Обработка booking_id: ' . $bookingId);

    $pdo = getPDO();
    if (!$pdo) {
        logError('Ошибка подключения к базе данных: Проверьте db.php');
        sendResponse(false, 'Ошибка подключения к базе данных', null, 500);
    }
    logError('Подключение к базе данных успешно');

    $stmt = $pdo->prepare("SELECT id FROM car_listings WHERE id = ?");
    $stmt->execute([$bookingId]);
    $car = $stmt->fetch(PDO::FETCH_ASSOC);
    logError('Результат проверки автомобиля: ' . json_encode($car));

    if (!$car) {
        sendResponse(false, 'Автомобиль не найден', null, 404);
    }

    $pdo->beginTransaction();

    $stmt = $pdo->prepare("DELETE FROM bookings WHERE car_id = ?");
    $result = $stmt->execute([$bookingId]);
    logError('Результат удаления бронирований для car_id ' . $bookingId . ': ' . ($result ? 'успех' : 'неудача'));

    $stmt = $pdo->prepare("UPDATE car_listings SET status = 'active' WHERE id = ?");
    $resultUpdate = $stmt->execute([$bookingId]);
    logError('Результат обновления статуса автомобиля для id ' . $bookingId . ': ' . ($resultUpdate ? 'успех' : 'неудача'));

    if (!$resultUpdate) {
        $pdo->rollBack();
        logError('Не удалось обновить статус автомобиля для id ' . $bookingId);
        sendResponse(false, 'Не удалось обновить статус автомобиля', null, 500);
    }

    $pdo->commit();
    logError('Транзакция успешно завершена для booking_id ' . $bookingId);

    sendResponse(true, 'Бронирования удалены, статус автомобиля обновлён на pending', ['booking_id' => $bookingId]);
} catch (PDOException $e) {
    if ($pdo && $pdo->inTransaction()) {
        $pdo->rollBack();
    }
    logError('Ошибка базы данных: ' . $e->getMessage());
    sendResponse(false, 'Ошибка базы данных: ' . $e->getMessage(), null, 500);
} catch (Exception $e) {
    if ($pdo && $pdo->inTransaction()) {
        $pdo->rollBack();
    }
    logError('Ошибка сервера: ' . $e->getMessage());
    sendResponse(false, 'Ошибка сервера: ' . $e->getMessage(), null, 500);
}
?>
[ KEMBALI ]