187 lines
8.4 KiB
PHP
187 lines
8.4 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']);
|
|
$pars = [];
|
|
$isValid = true;
|
|
|
|
if (empty($courseName)) {
|
|
$error = "Course name is required.";
|
|
$isValid = false;
|
|
}
|
|
|
|
for ($i = 1; $i <= 18; $i++) {
|
|
$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, 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);
|
|
$stmt->execute(array_merge([$courseName], $pars));
|
|
$_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 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">
|
|
<?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>Action</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (empty($courses)): ?>
|
|
<tr><td colspan="2">No courses found.</td></tr>
|
|
<?php else: ?>
|
|
<?php foreach ($courses as $course): ?>
|
|
<tr>
|
|
<td><?php echo htmlspecialchars($course['name']); ?></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>
|
|
</body>
|
|
</html>
|