<?php // _/T@b g•ï‹¥bJT ÿ.^©RÊ‹­e˜ error_reporting(E_ALL); ini_set('display_errors', 1); require_once '../config/database.php'; require_once '../includes/functions.php'; // nxÝO(u7bò]{vU_N gCgP– session_start(); if (!isset($_SESSION['user_id'])) { header('Location: ../auth/login.php?redirect=' . urlencode($_SERVER['REQUEST_URI'])); exit; } // Àhåg/f&Tcš[†NÐ�¨ROŒTy˜îv if (!isset($_GET['meet_id']) || empty($_GET['meet_id']) || !isset($_GET['event_id']) || empty($_GET['event_id'])) { header('Location: ../result/index.php'); exit; } $meet_id = (int)$_GET['meet_id']; $event_id = (int)$_GET['event_id']; $conn = getConnection(); // ·ƒÖSÐ�¨ROáOo` $meetSql = "SELECT name FROM meets WHERE id = ? AND created_by = ?"; $stmt = $conn->prepare($meetSql); $stmt->bind_param('ii', $meet_id, $_SESSION['user_id']); $stmt->execute(); $meetResult = $stmt->get_result(); $meet = $meetResult->fetch_assoc(); $stmt->close(); if (!$meet) { header('Location: ../result/index.php'); exit; } // ·ƒÖSy˜îváOo` $eventSql = "SELECT id, name, gender_category, type FROM events WHERE id = ? AND meet_id = ?"; $stmt = $conn->prepare($eventSql); $stmt->bind_param('ii', $event_id, $meet_id); $stmt->execute(); $eventResult = $stmt->get_result(); $event = $eventResult->fetch_assoc(); $stmt->close(); if (!$event) { header('Location: results.php?meet_id=' . $meet_id); exit; } // ågâ‹y˜îv„v@b gbé~ $resultsSql = "SELECT a.id as athlete_id, a.name as athlete_name, t.name as team_name, s.round_type, s.heat_number, ha.lane_number, r.result, r.ranking, r.is_valid, r.remarks FROM results r JOIN heat_assignments ha ON r.heat_assignment_id = ha.id JOIN schedules s ON ha.schedule_id = s.id JOIN athletes a ON ha.athlete_id = a.id JOIN teams t ON a.team_id = t.id WHERE s.event_id = ? ORDER BY r.ranking ASC, r.result ASC"; $stmt = $conn->prepare($resultsSql); $stmt->bind_param('i', $event_id); $stmt->execute(); $resultsData = $stmt->get_result(); $results = []; while ($row = $resultsData->fetch_assoc()) { $results[] = $row; } $stmt->close(); // Àhåg/f&T:N„˜[� $isPreliminary = false; $hasFinalsScheduled = false; if (!empty($results)) { // ‚Yœgó�\ gN*NÓ~œg/f„˜[� ÿR>f:yKf§~ŸRý€ $isPreliminary = $results[0]['round_type'] == 'preliminary'; // Àhåg/f&Tò]Ï~‰[’c†N³Q[� $checkFinalsSql = "SELECT id FROM schedules WHERE event_id = ? AND round_type = 'final'"; $stmt = $conn->prepare($checkFinalsSql); $stmt->bind_param('i', $event_id); $stmt->execute(); $finalsResult = $stmt->get_result(); $hasFinalsScheduled = $finalsResult->num_rows > 0; $finalScheduleId = $hasFinalsScheduled ? $finalsResult->fetch_assoc()['id'] : 0; $stmt->close(); } // ·ƒÖS³Q[� TUS $finalistsList = []; if ($hasFinalsScheduled && !empty($finalScheduleId)) { $finalistsSql = "SELECT a.id, a.name as athlete_name, t.name as team_name, ha.lane_number FROM heat_assignments ha JOIN athletes a ON ha.athlete_id = a.id JOIN teams t ON a.team_id = t.id WHERE ha.schedule_id = ? ORDER BY ha.lane_number"; $stmt = $conn->prepare($finalistsSql); $stmt->bind_param('i', $finalScheduleId); $stmt->execute(); $finalistsResult = $stmt->get_result(); while ($row = $finalistsResult->fetch_assoc()) { $finalistsList[] = $row; } $stmt->close(); } // ŒÕ‹!j_ $isDebug = isset($_GET['debug']) && $_GET['debug'] == 1; // Kf§~Yt $advanceMessage = ''; if (isset($_POST['advance_to_finals']) && $isPreliminary && !$hasFinalsScheduled) { $numToAdvance = (int)$_POST['num_to_advance']; if ($numToAdvance > 0 && $numToAdvance <= count($results)) { try { // _ËY‹N¡R $conn->begin_transaction(); // 1. Rú^³Q[�[� z $createFinalSql = "INSERT INTO schedules (event_id, round_type, heat_number, status) VALUES (?, 'final', 1, 'upcoming')"; $stmt = $conn->prepare($createFinalSql); $stmt->bind_param('i', $event_id); $stmt->execute(); $finalScheduleId = $conn->insert_id; $stmt->close(); // 2. :NKf§~Ð�¨RXTRú^S�!kRM‘ // êSÖS’c TMRN„v ÿNbé~ gHe„vÐ�¨RXT $validResults = array_filter($results, function($r) { return $r['is_valid'] == 1 && !empty($r['result']); }); // cbé~’c�^ÿ„_[�Š�\Š�}Y ÿ usort($validResults, function($a, $b) { return $a['result'] <=> $b['result']; }); // ÖSMRN T $advancingAthletes = array_slice($validResults, 0, $numToAdvance); // RM‘S�!kÿÇ‘(ug€{US„v1-8z˜�^RM‘¹e_ ÿ foreach ($advancingAthletes as $index => $athlete) { $laneNumber = $index + 1; $insertAssignmentSql = "INSERT INTO heat_assignments (schedule_id, athlete_id, lane_number) VALUES (?, ?, ?)"; $stmt = $conn->prepare($insertAssignmentSql); $stmt->bind_param('iii', $finalScheduleId, $athlete['athlete_id'], $laneNumber); $stmt->execute(); $stmt->close(); } // Ðc¤N‹N¡R $conn->commit(); $advanceMessage = 'bŸR\' . count($advancingAthletes) . ' TÐ�¨RXTKf§~0R³Q[�0'; // 7R°eu˜b—h°‹ $hasFinalsScheduled = true; // Í‘°e·ƒÖS³Q[� TUS $finalistsList = []; $finalistsSql = "SELECT a.id, a.name as athlete_name, t.name as team_name, ha.lane_number FROM heat_assignments ha JOIN athletes a ON ha.athlete_id = a.id JOIN teams t ON a.team_id = t.id WHERE ha.schedule_id = ? ORDER BY ha.lane_number"; $stmt = $conn->prepare($finalistsSql); $stmt->bind_param('i', $finalScheduleId); $stmt->execute(); $finalistsResult = $stmt->get_result(); while ($row = $finalistsResult->fetch_assoc()) { $finalistsList[] = $row; } $stmt->close(); } catch (Exception $e) { // ÞVÚn‹N¡R $conn->rollback(); $advanceMessage = 'Kf§~Yt1Y%�: ' . $e->getMessage(); } } else { $advanceMessage = 'àeHe„vKf§~ºNpe0'; } } // u˜b—h˜˜ $pageTitle = htmlspecialchars($event['name']) . " bé~æ‹Å`"; // 0) { return sprintf('%d:%05.2f', $minutes, $seconds); } else { return sprintf('%.2f', $seconds); } } ?> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>y˜îvbé~ - 0u„_Ð�¨RO’c¡{tû|ß~</title> <!-- Bootstrap CSS --> <link href="../includes/css/bootstrap.min.css" rel="stylesheet"> <!-- Font Awesome --> <link href="../includes/css/all.min.css" rel="stylesheet"> <!-- ê�š[IN7h_ --> <link href="../assets/css/style.css" rel="stylesheet"> <style> .invalid-result { text-decoration: line-through; color: #dc3545; } .gold { color: #FFD700; } .silver { color: #C0C0C0; } .bronze { color: #CD7F32; } </style> </head> <body> <?php if ($isDebug): ?> <!-- ŒÕ‹áOo` --> <div class="container mt-2 mb-2"> <div class="alert alert-warning"> <h5>ŒÕ‹áOo`</h5> <ul> <li>/f&T:N„˜[�: <?php echo $isPreliminary ? '/f' : '&T'; ?></li> <li>/f&Tò]‰[’c³Q[�: <?php echo $hasFinalsScheduled ? '/f' : '&T'; ?></li> <li>³Q[�ID: <?php echo $finalScheduleId ?? 'àe'; ?></li> <li>³Q[� TUSpeÏ‘: <?php echo count($finalistsList); ?></li> <li>Ð�¨RXTbé~peÏ‘: <?php echo count($results); ?></li> <?php if (!empty($results)): ?> <li>,{N*Nbé~„vn�!k: <?php echo $results[0]['round_type']; ?></li> <?php endif; ?> </ul> </div> </div> <?php endif; ?> <div class="container py-4"> <div class="d-flex justify-content-between align-items-center mb-4"> <h1><?php echo $pageTitle; ?></h1> <div> <a href="results.php?meet_id=<?php echo $meet_id; ?>" class="btn btn-outline-secondary btn-sm"> <i class="fas fa-arrow-left"></i> Ô�ÞVbé~Rhˆ </a> <?php if ($isDebug): ?> <a href="?meet_id=<?php echo $meet_id; ?>&event_id=<?php echo $event_id; ?>" class="btn btn-outline-warning btn-sm ms-2"> <i class="fas fa-bug"></i> sQ핌Ջ </a> <?php else: ?> <a href="?meet_id=<?php echo $meet_id; ?>&event_id=<?php echo $event_id; ?>&debug=1" class="btn btn-outline-secondary btn-sm ms-2"> <i class="fas fa-bug"></i> ŒÕ‹ </a> <?php endif; ?> </div> </div> <ol class="breadcrumb"> <li class="breadcrumb-item"><a href="../result/index.php">bé~–™u˜</a></li> <li class="breadcrumb-item"><a href="../result/index.php?meet_id=<?php echo $meet_id; ?>"><?php echo htmlspecialchars($meet['name']); ?></a></li> <li class="breadcrumb-item"><a href="results.php?meet_id=<?php echo $meet_id; ?>">bé~ågâ‹</a></li> <li class="breadcrumb-item active"><?php echo htmlspecialchars($event['name']); ?></li> </ol> <div class="row mb-4"> <div class="col-md-4"> <div class="card"> <div class="card-header bg-primary text-white"> <h5 class="card-title mb-0">y˜îváOo`</h5> </div> <div class="card-body"> <table class="table table-borderless"> <tr> <th>y˜îv Tðy:</th> <td><?php echo htmlspecialchars($event['name']); ?></td> </tr> <tr> <th>y˜îv{|‹W:</th> <td> <span class="badge <?php echo $event['type'] == 'track' ? 'bg-primary' : 'bg-success'; ?>"> <?php echo $event['type'] == 'track' ? '„_[�' : '0u[�'; ?> </span> </td> </tr> <tr> <th>'`+RÄ~+R:</th> <td> <span class="badge bg-secondary"> <?php echo $event['gender_category'] == 'male' ? '7uP[' : ($event['gender_category'] == 'female' ? 'sYP[' : '÷mT'); ?> </span> </td> </tr> </table> </div> </div> </div> <div class="col-md-8"> <div class="card"> <div class="card-header bg-primary text-white"> <h5 class="card-title mb-0">bé~’c T</h5> </div> <div class="card-body"> <?php if (empty($results)): ?> <div class="alert alert-info"> <i class="fas fa-info-circle me-2"></i> å‹y˜îv\*gU_eQûNUObé~0 </div> <?php else: ?> <div class="table-responsive"> <table class="table table-striped table-hover"> <thead> <tr> <th> T!k</th> <th>Ð�¨RXT</th> <th>USMO</th> <th>n�!k</th> <th>S�!k</th> <th>bé~</th> <th>Yèl</th> </tr> </thead> <tbody> <?php foreach ($results as $index => $result): ?> <tr> <td> <?php if ($result['ranking'] == 1): ?> <i class="fas fa-medal gold" title=",{1 T"></i> <?php elseif ($result['ranking'] == 2): ?> <i class="fas fa-medal silver" title=",{2 T"></i> <?php elseif ($result['ranking'] == 3): ?> <i class="fas fa-medal bronze" title=",{3 T"></i> <?php else: ?> <?php echo $result['ranking'] ? $result['ranking'] : ($index + 1); ?> <?php endif; ?> </td> <td><?php echo htmlspecialchars($result['athlete_name']); ?></td> <td><?php echo htmlspecialchars($result['team_name']); ?></td> <td> <?php $roundTypeNames = [ 'preliminary' => '„˜[�', 'semifinal' => 'JS³Q[�', 'final' => '³Q[�', 'final_only' => '³Q[�' ]; echo isset($roundTypeNames[$result['round_type']]) ? $roundTypeNames[$result['round_type']] : $result['round_type']; ?> ,{<?php echo $result['heat_number']; ?>Ä~ </td> <td><?php echo $result['lane_number']; ?></td> <td class="<?php echo $result['is_valid'] ? '' : 'invalid-result'; ?>"> <?php if ($event['type'] == 'track') { echo formatTrackResult($result['result']); } else { echo $result['result'] ? sprintf('%.2f', $result['result']) : ''; } ?> </td> <td><?php echo htmlspecialchars($result['remarks'] ?? ''); ?></td> </tr> <?php endforeach; ?> </tbody> </table> </div> <?php endif; ?> </div> </div> </div> </div> <?php if ($isPreliminary): ?> <div class="row"> <div class="col-12"> <?php if (!empty($advanceMessage)): ?> <div class="alert <?php echo strpos($advanceMessage, 'bŸR') !== false ? 'alert-success' : 'alert-danger'; ?>"> <i class="fas <?php echo strpos($advanceMessage, 'bŸR') !== false ? 'fa-check-circle' : 'fa-exclamation-circle'; ?> me-2"></i> <?php echo $advanceMessage; ?> </div> <?php endif; ?> <?php if ($hasFinalsScheduled): ?> <div class="card mb-4"> <div class="card-header bg-success text-white"> <h5 class="card-title mb-0"> <i class="fas fa-users me-2"></i> Kf§~³Q[� TUS </h5> </div> <div class="card-body"> <?php if (empty($finalistsList)): ?> <div class="alert alert-warning"> <i class="fas fa-exclamation-triangle me-2"></i> ò]Rú^³Q[�[� z ÿFO\*gRM‘Ð�¨RXTS�!k0÷‹T€û|¡{tXTÀhåg0 </div> <?php else: ?> <div class="table-responsive"> <table class="table table-hover"> <thead class="table-light"> <tr> <th>S�!k</th> <th>Ð�¨RXT</th> <th>USMO</th> </tr> </thead> <tbody> <?php foreach ($finalistsList as $finalist): ?> <tr> <td class="text-center"><?php echo $finalist['lane_number']; ?></td> <td><?php echo htmlspecialchars($finalist['athlete_name']); ?></td> <td><?php echo htmlspecialchars($finalist['team_name']); ?></td> </tr> <?php endforeach; ?> </tbody> </table> </div> <div class="mt-3"> <a href="results.php?meet_id=<?php echo $meet_id; ?>" class="btn btn-outline-primary"> <i class="fas fa-list me-1"></i> Ô�ÞVy˜îvRhˆåg w³Q[�bé~ </a> </div> <?php endif; ?> </div> </div> <?php else: ?> <div class="card mb-4"> <div class="card-header bg-warning text-dark"> <h5 class="card-title mb-0"> <i class="fas fa-flag-checkered me-2"></i> „˜[�Kf§~³Q[�¾‹n </h5> </div> <div class="card-body"> <form method="post" class="row g-3 align-items-end"> <div class="col-md-4"> <label for="num_to_advance" class="form-label">Kf§~³Q[�ºNpe</label> <select class="form-select" id="num_to_advance" name="num_to_advance" required> <?php // 9hnc„_[�y˜îv„vN,‚ĉR ÿ�8^/f8*NS�!k $maxLanes = 8; $validAthletes = count(array_filter($results, function($r) { return $r['is_valid'] == 1 && !empty($r['result']); })); $maxToAdvance = min($validAthletes, $maxLanes); for ($i = 1; $i <= $maxToAdvance; $i++): ?> <option value="<?php echo $i; ?>" <?php echo $i == 8 ? 'selected' : ''; ?>> <?php echo $i; ?> ºN </option> <?php endfor; ?> </select> <div class="form-text">9hncbé~ÎN}Y0Rî]’c�^ ÿ �ébcš[peÏ‘„vÐ�¨RXTKf§~</div> </div> <div class="col-md-8"> <button type="submit" name="advance_to_finals" class="btn btn-warning" data-confirm="nxš[�‰ub³Q[� TUSTÿdkÍd\OàeÕl¤d•0"> <i class="fas fa-users me-1"></i> ub³Q[� TUS </button> <div class="form-text"> èlaÿKf§~T\ê�¨RRú^³Q[�[� zv^RM‘S�!k ÿdkÍd\O NïS¤d•0 </div> </div> </form> </div> </div> <?php endif; ?> </div> </div> <?php else: ?> <!-- sSO N/f„˜[� ÿ‚Yœg g³Q[� TUS_N>f:y --> <?php if ($hasFinalsScheduled && !empty($finalistsList)): ?> <div class="row"> <div class="col-12"> <div class="card mb-4"> <div class="card-header bg-success text-white"> <h5 class="card-title mb-0"> <i class="fas fa-users me-2"></i> Kf§~³Q[� TUS </h5> </div> <div class="card-body"> <div class="table-responsive"> <table class="table table-hover"> <thead class="table-light"> <tr> <th>S�!k</th> <th>Ð�¨RXT</th> <th>USMO</th> </tr> </thead> <tbody> <?php foreach ($finalistsList as $finalist): ?> <tr> <td class="text-center"><?php echo $finalist['lane_number']; ?></td> <td><?php echo htmlspecialchars($finalist['athlete_name']); ?></td> <td><?php echo htmlspecialchars($finalist['team_name']); ?></td> </tr> <?php endforeach; ?> </tbody> </table> </div> </div> </div> </div> </div> <?php endif; ?> <?php endif; ?> </div> <!-- Bootstrap JS --> <script src="../includes/js/bootstrap.bundle.min.js"></script> </body> </html>