<?php
// Check if user is admin
if (empty($_SESSION['is_admin']) || $_SESSION['is_admin'] != 1) {
header('Location: index.php?page=home');
exit;
}
// Initialize variables
$msg = '';
$msgType = 'success';
$editMode = false;
$extraToEdit = null;
// Handle form submissions
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Create new extra
if (isset($_POST['action']) && $_POST['action'] === 'create') {
$name = trim($_POST['name']);
$defaultTime = isset($_POST['defaultTime']) ? intval($_POST['defaultTime']) : 0;
// Validate input
if (empty($name)) {
$msg = 'Activity name cannot be empty.';
$msgType = 'error';
} else {
// Insert new extra
$stmt = $dbc->prepare("INSERT INTO CINE_Extra (name, defaultTime) VALUES (?, ?)");
$stmt->bind_param('si', $name, $defaultTime);
if ($stmt->execute()) {
$msg = 'Activity type created successfully!';
$msgType = 'success';
} else {
$msg = 'Error creating activity type: ' . $stmt->error;
$msgType = 'error';
}
$stmt->close();
}
}
// Update existing extra
if (isset($_POST['action']) && $_POST['action'] === 'update') {
$id = intval($_POST['id']);
$name = trim($_POST['name']);
$defaultTime = isset($_POST['defaultTime']) ? intval($_POST['defaultTime']) : 0;
// Validate input
if (empty($name)) {
$msg = 'Activity name cannot be empty.';
$msgType = 'error';
} else {
// Update extra
$stmt = $dbc->prepare("UPDATE CINE_Extra SET name = ?, defaultTime = ? WHERE pk_Extra = ?");
$stmt->bind_param('sii', $name, $defaultTime, $id);
if ($stmt->execute()) {
$msg = 'Activity type updated successfully!';
$msgType = 'success';
} else {
$msg = 'Error updating activity type: ' . $stmt->error;
$msgType = 'error';
}
$stmt->close();
}
}
// Delete extra
if (isset($_POST['action']) && $_POST['action'] === 'delete') {
$id = intval($_POST['id']);
// Check if this extra is used in any plages
$checkStmt = $dbc->prepare("SELECT COUNT(*) as count FROM CINE_Plage WHERE fk_Extra = ?");
$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 activity type is used in ' . $usageCount . ' schedule entries.';
$msgType = 'error';
} else {
// Delete the extra
$deleteStmt = $dbc->prepare("DELETE FROM CINE_Extra WHERE pk_Extra = ?");
$deleteStmt->bind_param('i', $id);
if ($deleteStmt->execute()) {
$msg = 'Activity type deleted successfully!';
$msgType = 'success';
} else {
$msg = 'Error deleting activity type: ' . $deleteStmt->error;
$msgType = 'error';
}
$deleteStmt->close();
}
}
}
// Handle edit request (GET)
if (isset($_GET['edit']) && is_numeric($_GET['edit'])) {
$editId = intval($_GET['edit']);
$stmt = $dbc->prepare("SELECT * FROM CINE_Extra WHERE pk_Extra = ?");
$stmt->bind_param('i', $editId);
$stmt->execute();
$result = $stmt->get_result();
if ($row = $result->fetch_assoc()) {
$editMode = true;
$extraToEdit = $row;
}
$stmt->close();
}
// Fetch all extras
$result = $dbc->query("SELECT * FROM CINE_Extra ORDER BY name");
$extras = [];
while ($row = $result->fetch_assoc()) {
$extras[] = $row;
}
// Count usage of each extra
$usageCounts = [];
foreach ($extras as $extra) {
$id = $extra['pk_Extra'];
$countStmt = $dbc->prepare("SELECT COUNT(*) as count FROM CINE_Plage WHERE fk_Extra = ?");
$countStmt->bind_param('i', $id);
$countStmt->execute();
$countResult = $countStmt->get_result();
$usageCounts[$id] = $countResult->fetch_assoc()['count'];
$countStmt->close();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Manage Activity Types - Ciné Le Paris</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" />
<link rel="stylesheet" href="assets/css/extras.css">
</head>
<body>
<div class="extras-container">
<!-- Header -->
<div class="extras-header">
<div class="extras-title-section">
<h1 class="extras-title">Activity Types</h1>
<p class="extras-subtitle">Manage activity types and their default extra times</p>
</div>
<div class="extras-actions">
<?php if (!$editMode): ?>
<button class="extras-btn extras-btn-primary" id="showFormBtn">
<span class="material-symbols-outlined">add</span> New Activity Type
</button>
<?php endif; ?>
</div>
</div>
<!-- Success/Error Message (if any) -->
<?php if ($msg): ?>
<div class="extras-alert extras-alert-<?php echo $msgType; ?>">
<div class="extras-alert-icon">
<span class="material-symbols-outlined">
<?php echo $msgType === 'success' ? 'check_circle' : 'error'; ?>
</span>
</div>
<div class="extras-alert-content">
<?php echo htmlspecialchars($msg); ?>
</div>
</div>
<?php endif; ?>
<!-- Form Section (initially hidden if not in edit mode) -->
<div class="extras-card" id="formCard" <?php echo (!$editMode && empty($msg)) ? 'style="display: none;"' : ''; ?>>
<div class="extras-card-header">
<h2 class="extras-card-title"><?php echo $editMode ? 'Edit Activity Type' : 'Create New Activity Type'; ?></h2>
<?php if (!$editMode): ?>
<button class="extras-btn-icon" id="closeFormBtn">
<span class="material-symbols-outlined">close</span>
</button>
<?php endif; ?>
</div>
<div class="extras-card-body">
<form method="post" action="" class="extras-form">
<input type="hidden" name="action" value="<?php echo $editMode ? 'update' : 'create'; ?>">
<?php if ($editMode): ?>
<input type="hidden" name="id" value="<?php echo $extraToEdit['pk_Extra']; ?>">
<?php endif; ?>
<div class="extras-form-group">
<label for="name" class="extras-form-label">Activity Name</label>
<input type="text" id="name" name="name" class="extras-form-control"
value="<?php echo $editMode ? htmlspecialchars($extraToEdit['name']) : ''; ?>" required>
<div class="extras-form-help">Enter a descriptive name for this activity type</div>
</div>
<div class="extras-form-group">
<label for="defaultTime" class="extras-form-label">Default Extra Time (minutes)</label>
<input type="number" id="defaultTime" name="defaultTime" class="extras-form-control"
value="<?php echo $editMode ? intval($extraToEdit['defaultTime']) : '30'; ?>" min="0" required>
<div class="extras-form-help">Additional time automatically added when this activity is selected</div>
</div>
<div class="extras-form-actions">
<?php if ($editMode): ?>
<a href="index.php?page=extras" class="extras-btn extras-btn-secondary">Cancel</a>
<?php endif; ?>
<button type="submit" class="extras-btn extras-btn-primary">
<?php echo $editMode ? 'Update Activity Type' : 'Create Activity Type'; ?>
</button>
</div>
</form>
</div>
</div>
<!-- Table of Extras -->
<div class="extras-card">
<div class="extras-card-header">
<h2 class="extras-card-title">All Activity Types</h2>
<span class="extras-card-count"><?php echo count($extras); ?> types</span>
</div>
<div class="extras-table-container">
<?php if (count($extras) > 0): ?>
<table class="extras-table">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Default Extra Time</th>
<th>Usage Count</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($extras as $extra): ?>
<tr>
<td><?php echo $extra['pk_Extra']; ?></td>
<td><?php echo htmlspecialchars($extra['name']); ?></td>
<td><?php echo $extra['defaultTime']; ?> minutes</td>
<td>
<span class="extras-badge <?php echo $usageCounts[$extra['pk_Extra']] > 0 ? 'extras-badge-active' : 'extras-badge-inactive'; ?>">
<?php echo $usageCounts[$extra['pk_Extra']]; ?> entries
</span>
</td>
<td class="extras-actions-cell">
<a href="index.php?page=extras&edit=<?php echo $extra['pk_Extra']; ?>" class="extras-btn-icon extras-btn-edit" title="Edit">
<span class="material-symbols-outlined">edit</span>
</a>
<button type="button" class="extras-btn-icon extras-btn-delete" title="Delete"
onclick="confirmDelete(<?php echo $extra['pk_Extra']; ?>, '<?php echo htmlspecialchars($extra['name'], ENT_QUOTES); ?>', <?php echo $usageCounts[$extra['pk_Extra']]; ?>)">
<span class="material-symbols-outlined">delete</span>
</button>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php else: ?>
<div class="extras-empty-state">
<div class="extras-empty-icon">
<span class="material-symbols-outlined">category</span>
</div>
<p class="extras-empty-text">No activity types have been created yet.</p>
<button class="extras-btn extras-btn-primary" id="emptyStateBtn">
<span class="material-symbols-outlined">add</span> Create First Activity Type
</button>
</div>
<?php endif; ?>
</div>
</div>
<!-- Back to Dashboard Button -->
<div class="extras-footer">
<a href="index.php?page=dashboard" class="extras-btn extras-btn-secondary">
<span class="material-symbols-outlined">dashboard</span> Back to Dashboard
</a>
</div>
</div>
<!-- Delete Confirmation Modal -->
<div class="extras-modal-backdrop" id="deleteModalBackdrop"></div>
<div class="extras-modal" id="deleteModal">
<div class="extras-modal-header">
<h3 class="extras-modal-title">Confirm Deletion</h3>
<button class="extras-modal-close" id="closeDeleteModal">
<span class="material-symbols-outlined">close</span>
</button>
</div>
<div class="extras-modal-body">
<p id="deleteConfirmText">Are you sure you want to delete this activity type?</p>
<p id="deleteWarningText" class="extras-text-warning"></p>
</div>
<div class="extras-modal-footer">
<button class="extras-btn extras-btn-secondary" id="cancelDeleteBtn">Cancel</button>
<form method="post" action="" id="deleteForm">
<input type="hidden" name="action" value="delete">
<input type="hidden" name="id" id="deleteId" value="">
<button type="submit" class="extras-btn extras-btn-danger">
<span class="material-symbols-outlined">delete</span> Delete
</button>
</form>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Form toggle elements
const formCard = document.getElementById('formCard');
const showFormBtn = document.getElementById('showFormBtn');
const closeFormBtn = document.getElementById('closeFormBtn');
const emptyStateBtn = document.getElementById('emptyStateBtn');
// Delete modal elements
const deleteModal = document.getElementById('deleteModal');
const deleteModalBackdrop = document.getElementById('deleteModalBackdrop');
const closeDeleteModal = document.getElementById('closeDeleteModal');
const cancelDeleteBtn = document.getElementById('cancelDeleteBtn');
const deleteForm = document.getElementById('deleteForm');
const deleteId = document.getElementById('deleteId');
const deleteConfirmText = document.getElementById('deleteConfirmText');
const deleteWarningText = document.getElementById('deleteWarningText');
// Show form
if (showFormBtn) {
showFormBtn.addEventListener('click', function() {
formCard.style.display = 'block';
document.getElementById('name').focus();
});
}
// Hide form
if (closeFormBtn) {
closeFormBtn.addEventListener('click', function() {
formCard.style.display = 'none';
});
}
// Empty state button
if (emptyStateBtn) {
emptyStateBtn.addEventListener('click', function() {
formCard.style.display = 'block';
document.getElementById('name').focus();
});
}
// Close delete modal
function hideDeleteModal() {
deleteModal.style.display = 'none';
deleteModalBackdrop.style.display = 'none';
}
// Delete modal event listeners
if (closeDeleteModal) {
closeDeleteModal.addEventListener('click', hideDeleteModal);
}
if (cancelDeleteBtn) {
cancelDeleteBtn.addEventListener('click', hideDeleteModal);
}
if (deleteModalBackdrop) {
deleteModalBackdrop.addEventListener('click', hideDeleteModal);
}
// Expose confirmDelete to global scope
window.confirmDelete = function(id, name, usageCount) {
deleteId.value = id;
deleteConfirmText.textContent = `Are you sure you want to delete "${name}"?`;
if (usageCount > 0) {
deleteWarningText.textContent = `This activity type is used in ${usageCount} schedule entries. You cannot delete it until those entries are removed.`;
deleteForm.querySelector('button[type="submit"]').disabled = true;
} else {
deleteWarningText.textContent = 'This action cannot be undone.';
deleteForm.querySelector('button[type="submit"]').disabled = false;
}
deleteModal.style.display = 'block';
deleteModalBackdrop.style.display = 'block';
};
});
</script>
</body>
</html>