<?php
// Handle KDM upload and processing
if (isset($_POST['action']) && $_POST['action'] === 'upload_kdm') {
$film_id = intval($_POST['film_id']);
// Check if a file was uploaded
if (isset($_FILES['kdm_file']) && $_FILES['kdm_file']['error'] === UPLOAD_ERR_OK) {
$kdm_file = $_FILES['kdm_file']['tmp_name'];
$kdm_name = $_FILES['kdm_file']['name'];
// Use a unique subdirectory in the existing kdm directory
$extract_dir = $kdm_temp_dir . uniqid('kdm_');
// Only try to create the directory if it doesn't exist
if (!file_exists($extract_dir)) {
// If we can't create it, use the main kdm directory
if (!@mkdir($extract_dir, 0755, true)) {
$extract_dir = $kdm_temp_dir;
}
}
// Process the KDM file
$kdm_dates = processKdmFile($kdm_file, $extract_dir);
if ($kdm_dates) {
// Update the film record
$update_stmt = $dbc->prepare("UPDATE CINE_Film SET kdmStart = ?, kdmEnd = ? WHERE pk_Film = ?");
$update_stmt->bind_param('ssi', $kdm_dates['start'], $kdm_dates['end'], $film_id);
if ($update_stmt->execute()) {
$msg = "KDM dates updated successfully! Valid from " . date('Y-m-d H:i', strtotime($kdm_dates['start'])) . " to " . date('Y-m-d H:i', strtotime($kdm_dates['end']));
$msgType = 'success';
} else {
$msg = "Error updating KDM dates: " . $update_stmt->error;
$msgType = 'error';
}
$update_stmt->close();
} else {
$msg = "Could not find KDM dates in the uploaded file.";
$msgType = 'error';
}
// Clean up temporary files
cleanupKdmDirectory($extract_dir, $kdm_temp_dir);
} else {
$msg = "No file uploaded or upload error occurred.";
$msgType = 'error';
}
}
// Handle form submissions
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Create new film
if (isset($_POST['action']) && $_POST['action'] === 'create') {
$name = trim($_POST['name']);
$length = isset($_POST['length']) ? intval($_POST['length']) : 0;
$releaseDate = $_POST['releaseDate'];
$kdmStart = !empty($_POST['kdmStart']) ? $_POST['kdmStart'] : null;
$kdmEnd = !empty($_POST['kdmEnd']) ? $_POST['kdmEnd'] : null;
// Default image path
$imagePath = $default_image;
// Handle image upload for new films only
if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) {
$file_extension = pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION);
$new_filename = 'movie_' . time() . '_' . mt_rand(1000, 9999) . '.' . $file_extension;
$upload_path = $relative_image_dir . $new_filename;
// Move the uploaded file
if (move_uploaded_file($_FILES['image']['tmp_name'], $upload_path)) {
$imagePath = $upload_path;
} else {
$msg = "Failed to upload image: " . error_get_last()['message'];
$msgType = 'error';
}
}
// Validate input
if (empty($name)) {
$msg = 'Film name cannot be empty.';
$msgType = 'error';
} elseif ($length <= 0) {
$msg = 'Film length must be greater than 0.';
$msgType = 'error';
} elseif (empty($releaseDate)) {
$msg = 'Release date cannot be empty.';
$msgType = 'error';
} else {
// Prepare the query
$query = "INSERT INTO CINE_Film (name, length, releaseDate, imagePath, kdmStart, kdmEnd)
VALUES (?, ?, ?, ?, ?, ?)";
$stmt = $dbc->prepare($query);
$stmt->bind_param('sissss', $name, $length, $releaseDate, $imagePath, $kdmStart, $kdmEnd);
if ($stmt->execute()) {
$msg = 'Film added successfully!';
$msgType = 'success';
} else {
$msg = 'Error adding film: ' . $stmt->error;
$msgType = 'error';
}
$stmt->close();
}
}
// Update existing film
if (isset($_POST['action']) && $_POST['action'] === 'update') {
try {
$id = intval($_POST['id']);
$name = trim($_POST['name']);
$length = isset($_POST['length']) ? intval($_POST['length']) : 0;
$releaseDate = $_POST['releaseDate'];
$kdmStart = !empty($_POST['kdmStart']) ? $_POST['kdmStart'] : null;
$kdmEnd = !empty($_POST['kdmEnd']) ? $_POST['kdmEnd'] : null;
// Simple update query without redirect
$query = "UPDATE CINE_Film SET name = ?, length = ?, releaseDate = ?, kdmStart = ?, kdmEnd = ? WHERE pk_Film = ?";
$stmt = $dbc->prepare($query);
$stmt->bind_param('sisssi', $name, $length, $releaseDate, $kdmStart, $kdmEnd, $id);
if ($stmt->execute()) {
$msg = 'Film updated successfully!';
$msgType = 'success';
} else {
$msg = 'Error updating film: ' . $stmt->error;
$msgType = 'error';
}
$stmt->close();
} catch (Exception $e) {
$msg = 'Error: ' . $e->getMessage();
$msgType = 'error';
}
}
// Delete film
if (isset($_POST['action']) && $_POST['action'] === 'delete') {
$id = intval($_POST['id']);
// Check if this film is used in any plages
$checkStmt = $dbc->prepare("SELECT COUNT(*) as count FROM CINE_Plage WHERE fk_Film = ?");
$checkStmt->bind_param('i', $id);
$checkStmt->execute();
$checkResult = $checkStmt->get_result();
$usageCount = $checkResult->fetch_assoc()['count'];
$checkStmt->close();
if ($usageCount > 0) {
$msg = 'Cannot delete: This film is used in ' . $usageCount . ' schedule entries.';
$msgType = 'error';
} else {
// Delete the film
$deleteStmt = $dbc->prepare("DELETE FROM CINE_Film WHERE pk_Film = ?");
$deleteStmt->bind_param('i', $id);
if ($deleteStmt->execute()) {
$msg = 'Film deleted successfully!';
$msgType = 'success';
} else {
$msg = 'Error deleting film: ' . $deleteStmt->error;
$msgType = 'error';
}
$deleteStmt->close();
}
}
}