34109-vm/api/matches.php
2025-09-19 12:49:02 +00:00

222 lines
7.8 KiB
PHP

<?php
require_once __DIR__ . '/../db/config.php';
function render_match_card($match) {
$pdo = db();
$stmt = $pdo->prepare('
SELECT t.name
FROM teams t
JOIN match_teams mt ON t.id = mt.team_id
WHERE mt.match_id = ?
');
$stmt->execute([$match['id']]);
$teams = $stmt->fetchAll(PDO::FETCH_COLUMN);
$match_date = new DateTime($match['match_datetime']);
$formatted_date = $match_date->format('D, M j, Y ');
$formatted_time = $match_date->format('g:i A');
$teams_html = '';
if (count($teams) > 0) {
$teams_html = '<p class="card-text">Teams: ' . htmlspecialchars(implode(', ', $teams)) . '</p>';
}
return '<div class="card">
<div class="card-body">
<h5 class="card-title">' . htmlspecialchars($match['match_type']) . '</h5>
<p class="card-text">' . htmlspecialchars($match['location']) . '</p>
<p class="card-text">' . $formatted_date . ' at ' . $formatted_time . '</p>'
. $teams_html .
'<a href="match_view.php?id=' . $match['id'] . '" class="btn btn-primary">View Details</a>
</div>
</div>';
}
header('Content-Type: application/json');
$action = $_GET['action'] ?? '';
switch ($action) {
case 'create':
$pdo = db();
try {
$pdo->beginTransaction();
// Insert match
$stmt = $pdo->prepare("INSERT INTO matches (match_datetime, location, match_type) VALUES (?, ?, ?)");
$stmt->execute([
$_POST['match_datetime'],
$_POST['location'],
$_POST['match_type']
]);
$match_id = $pdo->lastInsertId();
// Handle teams
$teams = $_POST['teams'] ?? [];
foreach ($teams as $team_input) {
$team_id = null;
if (is_numeric($team_input)) {
// Existing team
$team_id = (int)$team_input;
} else {
// New team, check if it exists
$stmt = $pdo->prepare("SELECT id FROM teams WHERE name = ?");
$stmt->execute([$team_input]);
$existing_team = $stmt->fetch();
if ($existing_team) {
$team_id = $existing_team['id'];
} else {
// Insert new team
$stmt = $pdo->prepare("INSERT INTO teams (name) VALUES (?)");
$stmt->execute([$team_input]);
$team_id = $pdo->lastInsertId();
}
}
if ($team_id) {
$stmt = $pdo->prepare("INSERT INTO match_teams (match_id, team_id) VALUES (?, ?)");
$stmt->execute([$match_id, $team_id]);
}
}
$pdo->commit();
echo json_encode(['success' => true]);
} catch (PDOException $e) {
$pdo->rollBack();
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
break;
case 'load_more':
$section = $_GET['section'] ?? '';
$offset = (int)($_GET['offset'] ?? 0);
$limit = 10;
$sql = '';
switch ($section) {
case 'upcoming':
$sql = "SELECT * FROM matches WHERE match_datetime > NOW() ORDER BY match_datetime ASC LIMIT ? OFFSET ?";
break;
case 'recent':
$sql = "SELECT * FROM matches WHERE match_datetime <= NOW() AND match_datetime >= NOW() - INTERVAL 2 WEEK ORDER BY match_datetime DESC LIMIT ? OFFSET ?";
break;
case 'past':
$sql = "SELECT * FROM matches WHERE match_datetime < NOW() - INTERVAL 2 WEEK ORDER BY match_datetime DESC LIMIT ? OFFSET ?";
break;
}
if ($sql) {
$pdo = db();
$stmt = $pdo->prepare($sql);
$load_limit = $limit + 1;
$stmt->bindParam(1, $load_limit, PDO::PARAM_INT);
$stmt->bindParam(2, $offset, PDO::PARAM_INT);
$stmt->execute();
$matches = $stmt->fetchAll();
$has_more = count($matches) > $limit;
if ($has_more) {
array_pop($matches); // Remove the extra match
}
$rendered_matches = [];
foreach($matches as $match) {
$rendered_matches[] = render_match_card($match);
}
echo json_encode(['matches' => $rendered_matches, 'has_more' => $has_more]);
} else {
echo json_encode(['matches' => [], 'has_more' => false]);
}
break;
case 'get':
try {
$pdo = db();
$stmt = $pdo->prepare("SELECT * FROM matches WHERE id = ?");
$stmt->execute([$_GET['id']]);
$match = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt = $pdo->prepare("SELECT team_id FROM match_teams WHERE match_id = ?");
$stmt->execute([$_GET['id']]);
$teams = $stmt->fetchAll(PDO::FETCH_COLUMN);
$match['teams'] = $teams;
echo json_encode(['success' => true, 'match' => $match]);
} catch (PDOException $e) {
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
break;
case 'update':
$pdo = db();
try {
$pdo->beginTransaction();
// Update match
$stmt = $pdo->prepare("UPDATE matches SET match_datetime = ?, location = ?, match_type = ? WHERE id = ?");
$stmt->execute([
$_POST['match_datetime'],
$_POST['location'],
$_POST['match_type'],
$_POST['match_id']
]);
$match_id = $_POST['match_id'];
// Delete old team associations
$stmt = $pdo->prepare("DELETE FROM match_teams WHERE match_id = ?");
$stmt->execute([$match_id]);
// Handle teams
$teams = $_POST['teams'] ?? [];
foreach ($teams as $team_input) {
$team_id = null;
if (is_numeric($team_input)) {
// Existing team
$team_id = (int)$team_input;
} else {
// New team, check if it exists
$stmt = $pdo->prepare("SELECT id FROM teams WHERE name = ?");
$stmt->execute([$team_input]);
$existing_team = $stmt->fetch();
if ($existing_team) {
$team_id = $existing_team['id'];
} else {
// Insert new team
$stmt = $pdo->prepare("INSERT INTO teams (name) VALUES (?)");
$stmt->execute([$team_input]);
$team_id = $pdo->lastInsertId();
}
}
if ($team_id) {
$stmt = $pdo->prepare("INSERT INTO match_teams (match_id, team_id) VALUES (?, ?)");
$stmt->execute([$match_id, $team_id]);
}
}
$pdo->commit();
echo json_encode(['success' => true]);
} catch (PDOException $e) {
$pdo->rollBack();
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
break;
case 'delete':
try {
$pdo = db();
$stmt = $pdo->prepare("DELETE FROM matches WHERE id = ?");
$stmt->execute([$_GET['id']]);
echo json_encode(['success' => true]);
} catch (PDOException $e) {
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
break;
default:
echo json_encode(['success' => false, 'error' => 'Invalid action']);
break;
}