<?php
header('Content-Type: application/json');
require_once '../DB/db_credentials.php';
require_once '../DB/db_connection.php';
$id = $_POST['id'] ?? '';
$date = $_POST['date'] ?? '';
$fromTime = $_POST['fromTime'] ?? '';
$toTime = $_POST['toTime'] ?? '';
$extraTimeRaw = trim($_POST['extraTime'] ?? '');
$extraTime = ($extraTimeRaw === '') ? null : $extraTimeRaw;
$fk_extra = $_POST['fk_extra'] ?? '';
$fk_film = $_POST['fk_film'] ?? '';
$fk_responsible = $_POST['fk_responsible'] ?? '';
if (!$id || !$date || !$fromTime || !$toTime || !$fk_extra || !$fk_film) {
http_response_code(400);
echo json_encode(['status' => 'error', 'message' => 'Missing required fields.']);
exit;
}
// check if shift has registrations
$sql = "SELECT COUNT(*) FROM citeLeParis_register WHERE fk_shift = ?";
$stmt = mysqli_prepare($dbc, $sql);
mysqli_stmt_bind_param($stmt, 'i', $id);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $registrationCount);
mysqli_stmt_fetch($stmt);
mysqli_stmt_close($stmt);
// check if shift is outdated
$sql = "SELECT date, fromTime, toTime, extraTime, fk_extra, fk_film, fk_responsible FROM citeLeParis_shift WHERE pk_shift = ?";
$stmt = mysqli_prepare($dbc, $sql);
mysqli_stmt_bind_param($stmt, 'i', $id);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $oldDate, $oldFrom, $oldTo, $oldExtraTime, $oldExtra, $oldFilm, $oldRespo);
if (!mysqli_stmt_fetch($stmt)) {
http_response_code(404);
echo json_encode(['status' => 'error', 'message' => 'Shift not found.']);
mysqli_stmt_close($stmt);
mysqli_close($dbc);
exit;
}
mysqli_stmt_close($stmt);
// outdated if date is before today
$isOutdated = strtotime($oldDate) < strtotime(date('Y-m-d'));
$extraTimeNormalized = $extraTime === '' || $extraTime === null ? null : $extraTime;
$oldExtraTimeNormalized = $oldExtraTime === '' || $oldExtraTime === null ? null : $oldExtraTime;
$onlyResponsibleChanged =
$date == $oldDate &&
$fromTime == $oldFrom &&
$toTime == $oldTo &&
$extraTimeNormalized == $oldExtraTimeNormalized &&
$fk_extra == $oldExtra &&
$fk_film == $oldFilm &&
$fk_responsible != $oldRespo;
if ($registrationCount > 0 && !$onlyResponsibleChanged) {
http_response_code(403);
echo json_encode(['status' => 'error', 'message' => 'This shift has registrations. Only the responsible person can be changed.']);
mysqli_close($dbc);
exit;
}
// if only responsible changed, but shift is outdated
if ($onlyResponsibleChanged && $isOutdated) {
http_response_code(403);
echo json_encode(['status' => 'error', 'message' => 'Cannot change responsible person for outdated shift.']);
mysqli_close($dbc);
exit;
}
$sql = "UPDATE citeLeParis_shift
SET date = ?, fromTime = ?, toTime = ?, extraTime = " . ($extraTime === null ? "NULL" : "?") . ",
fk_extra = ?, fk_film = ?, fk_responsible = ?
WHERE pk_shift = ?";
$stmt = mysqli_prepare($dbc, $sql);
if (!$stmt) {
http_response_code(500);
echo json_encode(['status' => 'error', 'message' => 'Failed to prepare update statement.']);
mysqli_close($dbc);
exit;
}
if ($extraTime === null) {
mysqli_stmt_bind_param($stmt, 'sssiiii', $date, $fromTime, $toTime, $fk_extra, $fk_film, $fk_responsible, $id);
} else {
mysqli_stmt_bind_param($stmt, 'ssssiiii', $date, $fromTime, $toTime, $extraTime, $fk_extra, $fk_film, $fk_responsible, $id);
}
$ok = mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($dbc);
if (!$ok) {
http_response_code(500);
echo json_encode(['status' => 'error', 'message' => 'Update failed.']);
exit;
}
http_response_code(200);
echo json_encode(['status' => 'success', 'message' => 'Shift updated successfully.']);
?>