34352-vm/admin.php
Flatlogic Bot 354c764c97 1.3
2025-09-24 18:59:48 +00:00

252 lines
12 KiB
PHP

<?php
session_start();
require_once 'db/config.php';
// Handle form submission for adding a new course
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_course'])) {
$courseName = trim($_POST['courseName']);
$hole_count = filter_input(INPUT_POST, 'hole_count', FILTER_VALIDATE_INT);
$tournament_date = $_POST['tournament_date'];
$pars = [];
$isValid = true;
if (empty($courseName)) {
$error = "Course name is required.";
$isValid = false;
}
if (empty($tournament_date)) {
$tournament_date = null;
}
if ($isValid) {
for ($i = 1; $i <= 18; $i++) {
if ($hole_count == 9 && $i > 9) {
$pars[] = 0;
} else {
$par_value = filter_input(INPUT_POST, 'par_hole_' . $i, FILTER_VALIDATE_INT);
if ($par_value === false || $par_value < 1 || $par_value > 7) {
$error = "Invalid par value for hole " . $i . ". Please enter a number between 1 and 7.";
$isValid = false;
break;
}
$pars[] = $par_value;
}
}
}
if ($isValid) {
try {
$pdo = db();
$sql = "INSERT INTO courses (name, hole_count, tournament_date, par_hole_1, par_hole_2, par_hole_3, par_hole_4, par_hole_5, par_hole_6, par_hole_7, par_hole_8, par_hole_9, par_hole_10, par_hole_11, par_hole_12, par_hole_13, par_hole_14, par_hole_15, par_hole_16, par_hole_17, par_hole_18) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $pdo->prepare($sql);
$params = array_merge([$courseName, $hole_count, $tournament_date], $pars);
$stmt->execute($params);
$_SESSION['success_message'] = "Course '{$courseName}' added successfully!";
header("Location: admin.php");
exit;
} catch (PDOException $e) {
$error = "Database error: " . $e->getMessage();
}
}
}
// Fetch existing courses
try {
$pdo = db();
$stmt = $pdo->query("SELECT id, name, hole_count, tournament_date FROM courses ORDER BY name");
$courses = $stmt->fetchAll();
} catch (PDOException $e) {
$courses = [];
$error = "Could not fetch courses: " . $e->getMessage();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Admin Dashboard - Golf Tournament</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap">
<link rel="stylesheet" href="assets/css/custom.css">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container">
<a class="navbar-brand" href="index.php">Golf Tournament</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link" href="index.php">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="add_score.php">Add Score</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="admin.php">Admin</a>
</li>
<li class="nav-item">
<a class="nav-link" href="coach.php">Coach</a>
</li>
<li class="nav-item">
<a class="nav-link" href="results.php">Results</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container mt-5">
<h1 class="text-center mb-4">Admin Dashboard</h1>
<?php if (isset($error)): ?>
<div class="alert alert-danger"><?php echo htmlspecialchars($error); ?></div>
<?php endif; ?>
<?php
if (isset($_SESSION['success_message'])) {
echo '<div class="alert alert-success">' . htmlspecialchars($_SESSION['success_message']) . '</div>';
unset($_SESSION['success_message']);
}
?>
<ul class="nav nav-tabs" id="adminTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="courses-tab" data-bs-toggle="tab" data-bs-target="#courses" type="button" role="tab" aria-controls="courses" aria-selected="true">Manage Courses</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="teams-tab" data-bs-toggle="tab" data-bs-target="#teams" type="button" role="tab" aria-controls="teams" aria-selected="false">Manage Teams</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="players-tab" data-bs-toggle="tab" data-bs-target="#players" type="button" role="tab" aria-controls="players" aria-selected="false">Manage Players</button>
</li>
</ul>
<div class="tab-content" id="adminTabContent">
<!-- Courses Tab -->
<div class="tab-pane fade show active" id="courses" role="tabpanel" aria-labelledby="courses-tab">
<div class="card shadow-sm mt-4">
<div class="card-body">
<h2 class="card-title">Add New Course</h2>
<form method="POST" action="admin.php">
<div class="mb-3">
<label for="courseName" class="form-label">Course Name</label>
<input type="text" class="form-control" id="courseName" name="courseName" placeholder="e.g., Pebble Beach" required>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label for="hole_count" class="form-label">Number of Holes</label>
<select class="form-select" id="hole_count" name="hole_count">
<option value="9">9 Holes</option>
<option value="18" selected>18 Holes</option>
</select>
</div>
<div class="col-md-6 mb-3">
<label for="tournament_date" class="form-label">Tournament Date</label>
<input type="date" class="form-control" id="tournament_date" name="tournament_date">
</div>
</div>
<h5 class="mt-3">Par Values</h5>
<div class="row">
<?php for ($i = 1; $i <= 18; $i++): ?>
<div class="col-md-2 col-sm-4 mb-3">
<label for="par_hole_<?php echo $i; ?>" class="form-label">Hole <?php echo $i; ?> Par</label>
<input type="number" class="form-control" id="par_hole_<?php echo $i; ?>" name="par_hole_<?php echo $i; ?>" min="1" max="7" value="4" required>
</div>
<?php endfor; ?>
</div>
<button type="submit" name="add_course" class="btn btn-primary">Add Course</button>
</form>
</div>
</div>
<div class="card shadow-sm mt-4">
<div class="card-body">
<h2 class="card-title">Existing Courses</h2>
<table class="table table-striped">
<thead>
<tr>
<th>Course Name</th>
<th>Holes</th>
<th>Tournament Date</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php if (empty($courses)): ?>
<tr><td colspan="4">No courses found.</td></tr>
<?php else: ?>
<?php foreach ($courses as $course): ?>
<tr>
<td><?php echo htmlspecialchars($course['name']); ?></td>
<td><?php echo htmlspecialchars($course['hole_count']); ?></td>
<td><?php echo htmlspecialchars($course['tournament_date'] ? date('M j, Y', strtotime($course['tournament_date'])) : 'N/A'); ?></td>
<td><button class="btn btn-sm btn-danger">Delete</button></td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- Teams Tab -->
<div class="tab-pane fade" id="teams" role="tabpanel" aria-labelledby="teams-tab">
...
</div>
<!-- Players Tab -->
<div class="tab-pane fade" id="players" role="tabpanel" aria-labelledby="players-tab">
...
</div>
</div>
</div>
<footer class="bg-light text-center text-lg-start mt-5">
<div class="text-center p-3" style="background-color: rgba(0, 0, 0, 0.05);">
© 2025 Golf Tournament
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
const holeCountSelect = document.getElementById('hole_count');
function toggleParHoles() {
const selectedHoles = parseInt(holeCountSelect.value, 10);
for (let i = 1; i <= 18; i++) {
const holeInput = document.getElementById('par_hole_' + i);
const holeInputDiv = holeInput.parentElement;
if (i > 9) {
if (selectedHoles === 9) {
holeInputDiv.style.display = 'none';
holeInput.value = 0;
holeInput.required = false;
holeInput.min = 0;
} else {
holeInputDiv.style.display = '';
if (holeInput.value == 0) { // Only reset if it was 0
holeInput.value = 4; // reset to default
}
holeInput.required = true;
holeInput.min = 1;
}
}
}
}
holeCountSelect.addEventListener('change', toggleParHoles);
// Initial check on page load
toggleParHoles();
});
</script>
</body>
</html>