File Manager V1.5
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 ]